mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-01-27 11:12:44 +01:00
internal/restorable: performance optimization
This commit is contained in:
parent
0da99e2c37
commit
d334db8291
@ -337,24 +337,39 @@ func (i *Image) DrawTriangles(srcs [graphics.ShaderSrcImageCount]*Image, vertice
|
|||||||
return
|
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.
|
// makeStaleIfDependingOnAtRegion is not available here.
|
||||||
// This might create cyclic dependency.
|
// This might create cyclic dependency.
|
||||||
theImages.makeStaleIfDependingOn(i)
|
theImages.makeStaleIfDependingOn(i)
|
||||||
|
|
||||||
// TODO: Add tests to confirm this logic.
|
// TODO: Add tests to confirm this logic.
|
||||||
var srcstale bool
|
var srcstale bool
|
||||||
for _, src := range srcs {
|
var srcImages [graphics.ShaderSrcImageCount]*graphicscommand.Image
|
||||||
|
for i, src := range srcs {
|
||||||
if src == nil {
|
if src == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
srcImages[i] = src.image
|
||||||
if src.stale || src.imageType == ImageTypeVolatile {
|
if src.stale || src.imageType == ImageTypeVolatile {
|
||||||
srcstale = true
|
srcstale = true
|
||||||
break
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Even if the image is already stale, call makeStale to extend the stale region.
|
// Even if the image is already stale, call makeStale to extend the stale region.
|
||||||
if srcstale || !needsRestoration() || !i.needsRestoration() {
|
if srcstale {
|
||||||
i.makeStale(dstRegion)
|
i.makeStale(dstRegion)
|
||||||
} else if i.stale {
|
} else if i.stale {
|
||||||
var overwrite bool
|
var overwrite bool
|
||||||
@ -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)
|
i.appendDrawTrianglesHistory(srcs, vertices, indices, blend, dstRegion, srcRegions, shader, uniforms, fillRule, hint)
|
||||||
}
|
}
|
||||||
|
|
||||||
var imgs [graphics.ShaderSrcImageCount]*graphicscommand.Image
|
i.image.DrawTriangles(srcImages, vertices, indices, blend, dstRegion, srcRegions, shader.shader, uniforms, fillRule)
|
||||||
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)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *Image) areStaleRegionsIncludedIn(r image.Rectangle) bool {
|
func (i *Image) areStaleRegionsIncludedIn(r image.Rectangle) bool {
|
||||||
|
Loading…
Reference in New Issue
Block a user