Skip to content

Commit

Permalink
internal/restorable: performance optimization
Browse files Browse the repository at this point in the history
  • Loading branch information
hajimehoshi committed Oct 25, 2024
1 parent 0da99e2 commit d334db8
Showing 1 changed file with 19 additions and 11 deletions.
30 changes: 19 additions & 11 deletions internal/restorable/image.go
Original file line number Diff line number Diff line change
Expand Up @@ -337,24 +337,39 @@ func (i *Image) DrawTriangles(srcs [graphics.ShaderSrcImageCount]*Image, vertice
return
}

// Use the fast path when this package is not enabled.
if !needsRestoration() || !i.needsRestoration() {
var srcImages [graphics.ShaderSrcImageCount]*graphicscommand.Image
for i, src := range srcs {
if src == nil {
continue
}
srcImages[i] = src.image
}
i.makeStale(dstRegion)
i.image.DrawTriangles(srcImages, vertices, indices, blend, dstRegion, srcRegions, shader.shader, uniforms, fillRule)
return
}

// makeStaleIfDependingOnAtRegion is not available here.
// This might create cyclic dependency.
theImages.makeStaleIfDependingOn(i)

// TODO: Add tests to confirm this logic.
var srcstale bool
for _, src := range srcs {
var srcImages [graphics.ShaderSrcImageCount]*graphicscommand.Image
for i, src := range srcs {
if src == nil {
continue
}
srcImages[i] = src.image
if src.stale || src.imageType == ImageTypeVolatile {
srcstale = true
break
}
}

// Even if the image is already stale, call makeStale to extend the stale region.
if srcstale || !needsRestoration() || !i.needsRestoration() {
if srcstale {
i.makeStale(dstRegion)
} else if i.stale {
var overwrite bool
Expand All @@ -376,14 +391,7 @@ func (i *Image) DrawTriangles(srcs [graphics.ShaderSrcImageCount]*Image, vertice
i.appendDrawTrianglesHistory(srcs, vertices, indices, blend, dstRegion, srcRegions, shader, uniforms, fillRule, hint)
}

var imgs [graphics.ShaderSrcImageCount]*graphicscommand.Image
for i, src := range srcs {
if src == nil {
continue
}
imgs[i] = src.image
}
i.image.DrawTriangles(imgs, vertices, indices, blend, dstRegion, srcRegions, shader.shader, uniforms, fillRule)
i.image.DrawTriangles(srcImages, vertices, indices, blend, dstRegion, srcRegions, shader.shader, uniforms, fillRule)
}

func (i *Image) areStaleRegionsIncludedIn(r image.Rectangle) bool {
Expand Down

0 comments on commit d334db8

Please sign in to comment.