mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-25 11:18:54 +01:00
restorable: Refactoring
This commit is contained in:
parent
1fb7e123c2
commit
9ab517cf82
@ -75,7 +75,7 @@ func (c *graphicsContext) SetSize(screenWidth, screenHeight int, screenScale flo
|
|||||||
|
|
||||||
func (c *graphicsContext) initializeIfNeeded() error {
|
func (c *graphicsContext) initializeIfNeeded() error {
|
||||||
if !c.initialized {
|
if !c.initialized {
|
||||||
if err := restorable.Reset(); err != nil {
|
if err := restorable.ResetGLState(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
c.initialized = true
|
c.initialized = true
|
||||||
@ -96,15 +96,6 @@ func drawWithFittingScale(dst *Image, src *Image) {
|
|||||||
_ = dst.DrawImage(src, op)
|
_ = dst.DrawImage(src, op)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *graphicsContext) drawToDefaultRenderTarget() error {
|
|
||||||
_ = c.screen.Clear()
|
|
||||||
drawWithFittingScale(c.screen, c.offscreen2)
|
|
||||||
if err := restorable.FlushCommands(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *graphicsContext) Update(updateCount int) error {
|
func (c *graphicsContext) Update(updateCount int) error {
|
||||||
if err := c.initializeIfNeeded(); err != nil {
|
if err := c.initializeIfNeeded(); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -119,11 +110,10 @@ func (c *graphicsContext) Update(updateCount int) error {
|
|||||||
if 0 < updateCount {
|
if 0 < updateCount {
|
||||||
drawWithFittingScale(c.offscreen2, c.offscreen)
|
drawWithFittingScale(c.offscreen2, c.offscreen)
|
||||||
}
|
}
|
||||||
if err := c.drawToDefaultRenderTarget(); err != nil {
|
_ = c.screen.Clear()
|
||||||
return err
|
drawWithFittingScale(c.screen, c.offscreen2)
|
||||||
}
|
|
||||||
// TODO: Add tests to check if this behavior is correct (#357)
|
if err := restorable.FlushAndResolveStalePixels(); err != nil {
|
||||||
if err := restorable.ResolveStalePixels(); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -140,9 +130,6 @@ func (c *graphicsContext) restoreIfNeeded() error {
|
|||||||
if !r {
|
if !r {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if err := restorable.Reset(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := restorable.Restore(); err != nil {
|
if err := restorable.Restore(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -16,14 +16,6 @@
|
|||||||
|
|
||||||
package ebiten
|
package ebiten
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/hajimehoshi/ebiten/internal/restorable"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *graphicsContext) needsRestoring() (bool, error) {
|
func (c *graphicsContext) needsRestoring() (bool, error) {
|
||||||
// FlushCommands is required because c.offscreen.impl might not have an actual texture.
|
return c.offscreen.restorable.IsInvalidated()
|
||||||
if err := restorable.FlushCommands(); err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
return c.offscreen.restorable.IsInvalidated(), nil
|
|
||||||
}
|
}
|
||||||
|
@ -125,7 +125,7 @@ const (
|
|||||||
maxQuads = indicesNum / 6
|
maxQuads = indicesNum / 6
|
||||||
)
|
)
|
||||||
|
|
||||||
func Reset() error {
|
func ResetGLState() error {
|
||||||
return theOpenGLState.reset()
|
return theOpenGLState.reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,9 +347,14 @@ func (p *Image) Dispose() {
|
|||||||
runtime.SetFinalizer(p, nil)
|
runtime.SetFinalizer(p, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Image) IsInvalidated() bool {
|
func (p *Image) IsInvalidated() (bool, error) {
|
||||||
if !IsRestoringEnabled() {
|
// FlushCommands is required because c.offscreen.impl might not have an actual texture.
|
||||||
return false
|
if err := graphics.FlushCommands(); err != nil {
|
||||||
|
return false, err
|
||||||
}
|
}
|
||||||
return p.image.IsInvalidated()
|
|
||||||
|
if !IsRestoringEnabled() {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
return p.image.IsInvalidated(), nil
|
||||||
}
|
}
|
||||||
|
@ -42,11 +42,17 @@ var theImages = &images{
|
|||||||
images: map[*Image]struct{}{},
|
images: map[*Image]struct{}{},
|
||||||
}
|
}
|
||||||
|
|
||||||
func ResolveStalePixels() error {
|
func FlushAndResolveStalePixels() error {
|
||||||
|
if err := graphics.FlushCommands(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return theImages.resolveStalePixels()
|
return theImages.resolveStalePixels()
|
||||||
}
|
}
|
||||||
|
|
||||||
func Restore() error {
|
func Restore() error {
|
||||||
|
if err := graphics.ResetGLState(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return theImages.restore()
|
return theImages.restore()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,10 +172,6 @@ func (i *images) clearVolatileImages() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func Reset() error {
|
func ResetGLState() error {
|
||||||
return graphics.Reset()
|
return graphics.ResetGLState()
|
||||||
}
|
|
||||||
|
|
||||||
func FlushCommands() error {
|
|
||||||
return graphics.FlushCommands()
|
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ func TestRestore(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
clr0 := color.RGBA{0x00, 0x00, 0x00, 0xff}
|
clr0 := color.RGBA{0x00, 0x00, 0x00, 0xff}
|
||||||
img0.Fill(clr0.R, clr0.G, clr0.B, clr0.A)
|
img0.Fill(clr0.R, clr0.G, clr0.B, clr0.A)
|
||||||
if err := ResolveStalePixels(); err != nil {
|
if err := FlushAndResolveStalePixels(); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if err := Restore(); err != nil {
|
if err := Restore(); err != nil {
|
||||||
@ -101,7 +101,7 @@ func TestRestoreChain(t *testing.T) {
|
|||||||
for i := 0; i < num-1; i++ {
|
for i := 0; i < num-1; i++ {
|
||||||
imgs[i+1].DrawImage(imgs[i], vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
imgs[i+1].DrawImage(imgs[i], vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
||||||
}
|
}
|
||||||
if err := ResolveStalePixels(); err != nil {
|
if err := FlushAndResolveStalePixels(); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if err := Restore(); err != nil {
|
if err := Restore(); err != nil {
|
||||||
@ -138,7 +138,7 @@ func TestRestoreOverrideSource(t *testing.T) {
|
|||||||
img3.DrawImage(img2, vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
img3.DrawImage(img2, vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
||||||
img0.Fill(clr1.R, clr1.G, clr1.B, clr1.A)
|
img0.Fill(clr1.R, clr1.G, clr1.B, clr1.A)
|
||||||
img1.DrawImage(img0, vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
img1.DrawImage(img0, vertices(1, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
||||||
if err := ResolveStalePixels(); err != nil {
|
if err := FlushAndResolveStalePixels(); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if err := Restore(); err != nil {
|
if err := Restore(); err != nil {
|
||||||
@ -224,7 +224,7 @@ func TestRestoreComplexGraph(t *testing.T) {
|
|||||||
img6.DrawImage(img4, vertices(4, 1, 1, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
img6.DrawImage(img4, vertices(4, 1, 1, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
||||||
img7.DrawImage(img2, vertices(4, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
img7.DrawImage(img2, vertices(4, 1, 0, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
||||||
img7.DrawImage(img3, vertices(4, 1, 2, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
img7.DrawImage(img3, vertices(4, 1, 2, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
||||||
if err := ResolveStalePixels(); err != nil {
|
if err := FlushAndResolveStalePixels(); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if err := Restore(); err != nil {
|
if err := Restore(); err != nil {
|
||||||
@ -305,7 +305,7 @@ func TestRestoreRecursive(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
img1.DrawImage(img0, vertices(4, 1, 1, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
img1.DrawImage(img0, vertices(4, 1, 1, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
||||||
img0.DrawImage(img1, vertices(4, 1, 1, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
img0.DrawImage(img1, vertices(4, 1, 1, 0), &affine.ColorM{}, opengl.CompositeModeSourceOver)
|
||||||
if err := ResolveStalePixels(); err != nil {
|
if err := FlushAndResolveStalePixels(); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if err := Restore(); err != nil {
|
if err := Restore(); err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user