mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-02-03 22:44:28 +01:00
graphics: Reduce num of Image.Clear() calls
This commit is contained in:
parent
9db042ae9e
commit
02b4fc7917
@ -87,7 +87,6 @@ func (c *graphicsContext) Update(afterFrameUpdate func()) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for i := 0; i < updateCount; i++ {
|
for i := 0; i < updateCount; i++ {
|
||||||
restorable.ClearVolatileImages()
|
|
||||||
setRunningSlowly(i < updateCount-1)
|
setRunningSlowly(i < updateCount-1)
|
||||||
if err := hooks.Run(); err != nil {
|
if err := hooks.Run(); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -98,6 +97,10 @@ func (c *graphicsContext) Update(afterFrameUpdate func()) error {
|
|||||||
afterFrameUpdate()
|
afterFrameUpdate()
|
||||||
}
|
}
|
||||||
if 0 < updateCount {
|
if 0 < updateCount {
|
||||||
|
// Call ClearFramebuffer instead of c.screen.Clear()
|
||||||
|
// to clear the whole region including fullscreen's padding.
|
||||||
|
c.screen.restorable.ClearFramebuffer()
|
||||||
|
|
||||||
dw, dh := c.screen.Size()
|
dw, dh := c.screen.Size()
|
||||||
sw, _ := c.offscreen.Size()
|
sw, _ := c.offscreen.Size()
|
||||||
scale := float64(dw) / float64(sw)
|
scale := float64(dw) / float64(sw)
|
||||||
|
@ -90,7 +90,7 @@ func NewImage(width, height int, volatile bool) *Image {
|
|||||||
func NewScreenFramebufferImage(width, height int) *Image {
|
func NewScreenFramebufferImage(width, height int) *Image {
|
||||||
i := &Image{
|
i := &Image{
|
||||||
image: graphics.NewScreenFramebufferImage(width, height),
|
image: graphics.NewScreenFramebufferImage(width, height),
|
||||||
volatile: true,
|
volatile: false,
|
||||||
screen: true,
|
screen: true,
|
||||||
}
|
}
|
||||||
theImages.add(i)
|
theImages.add(i)
|
||||||
@ -129,6 +129,10 @@ func (i *Image) clearIfVolatile() {
|
|||||||
if !i.volatile {
|
if !i.volatile {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
i.ClearFramebuffer()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *Image) ClearFramebuffer() {
|
||||||
i.basePixels = nil
|
i.basePixels = nil
|
||||||
i.drawImageHistory = nil
|
i.drawImageHistory = nil
|
||||||
i.stale = false
|
i.stale = false
|
||||||
@ -167,7 +171,7 @@ func (i *Image) DrawImage(img *Image, sx0, sy0, sx1, sy1 int, geom *affine.GeoM,
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
theImages.makeStaleIfDependingOn(i)
|
theImages.makeStaleIfDependingOn(i)
|
||||||
if img.stale || img.volatile || !IsRestoringEnabled() {
|
if img.stale || img.volatile || i.screen || !IsRestoringEnabled() {
|
||||||
i.makeStale()
|
i.makeStale()
|
||||||
} else {
|
} else {
|
||||||
i.appendDrawImageHistory(img, vs, colorm, mode, filter)
|
i.appendDrawImageHistory(img, vs, colorm, mode, filter)
|
||||||
@ -177,7 +181,7 @@ func (i *Image) DrawImage(img *Image, sx0, sy0, sx1, sy1 int, geom *affine.GeoM,
|
|||||||
|
|
||||||
// appendDrawImageHistory appends a draw-image history item to the image.
|
// appendDrawImageHistory appends a draw-image history item to the image.
|
||||||
func (i *Image) appendDrawImageHistory(image *Image, vertices []float32, colorm *affine.ColorM, mode opengl.CompositeMode, filter graphics.Filter) {
|
func (i *Image) appendDrawImageHistory(image *Image, vertices []float32, colorm *affine.ColorM, mode opengl.CompositeMode, filter graphics.Filter) {
|
||||||
if i.stale || i.volatile {
|
if i.stale || i.volatile || i.screen {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if len(i.drawImageHistory) > 0 {
|
if len(i.drawImageHistory) > 0 {
|
||||||
@ -253,6 +257,9 @@ func (i *Image) resolveStale() error {
|
|||||||
if i.volatile {
|
if i.volatile {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
if i.screen {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if !i.stale {
|
if !i.stale {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user