mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-24 10:48:53 +01:00
internal/atlas: bug fix: too aggressive counting up destinationCount
Closes #2586
This commit is contained in:
parent
7c10e48afd
commit
1c09ec5e44
@ -220,11 +220,9 @@ type Image struct {
|
||||
// WritePixels doesn't affect this value since WritePixels can be done on images on an atlas.
|
||||
usedAsSourceCount int
|
||||
|
||||
// destinationCount represents how many times an image on an atlas is used as a rendering destination at DrawTriangles.
|
||||
// destinationCount represents how many times an image switches its backend when the image is used
|
||||
// as a rendering destination at DrawTriangles.
|
||||
// destinationCount affects the calculation when to put the image onto a texture atlas again.
|
||||
//
|
||||
// The current counting way is derived from the old implementation in which a destination image was always isolated
|
||||
// e.g. not on an atlas. This might have to be revisited.
|
||||
destinationCount int
|
||||
}
|
||||
|
||||
@ -281,8 +279,6 @@ func (i *Image) ensureIsolatedFromSource(backends []*backend) {
|
||||
return
|
||||
}
|
||||
|
||||
i.destinationCount++
|
||||
|
||||
// Check if i has the same backend as the given backends.
|
||||
var needsIsolation bool
|
||||
for _, b := range backends {
|
||||
@ -322,6 +318,10 @@ func (i *Image) ensureIsolatedFromSource(backends []*backend) {
|
||||
delete(theSourceBackendsForOneFrame, origBackend)
|
||||
|
||||
newI.moveTo(i)
|
||||
|
||||
// Count up only when the backend is switched. (#2586).
|
||||
// This counting up must be done after moveTo.
|
||||
i.destinationCount++
|
||||
}
|
||||
|
||||
func (i *Image) putOnSourceBackend(graphicsDriver graphicsdriver.Graphics) error {
|
||||
|
@ -213,6 +213,14 @@ func TestReputOnSourceBackend(t *testing.T) {
|
||||
t.Errorf("got: %v, want: %v", got, want)
|
||||
}
|
||||
}
|
||||
// Finally, img1 is on a source backend.
|
||||
if err := atlas.PutImagesOnSourceBackendForTesting(ui.GraphicsDriverForTesting()); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
img0.DrawTriangles([graphics.ShaderImageCount]*atlas.Image{img1}, vs, is, graphicsdriver.BlendCopy, dr, graphicsdriver.Region{}, [graphics.ShaderImageCount - 1][2]float32{}, atlas.NearestFilterShader, nil, false)
|
||||
if got, want := img1.IsOnSourceBackendForTesting(), true; got != want {
|
||||
t.Errorf("got: %v, want: %v", got, want)
|
||||
}
|
||||
if err := atlas.PutImagesOnSourceBackendForTesting(ui.GraphicsDriverForTesting()); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user