mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-25 19:28:57 +01:00
graphics: Bug fix: mipmap images should be volatile when the base image is volatile
This commit is contained in:
parent
0bf62f392f
commit
0f82330009
9
image.go
9
image.go
@ -45,6 +45,8 @@ type Image struct {
|
|||||||
// See strings.Builder for similar examples.
|
// See strings.Builder for similar examples.
|
||||||
addr *Image
|
addr *Image
|
||||||
|
|
||||||
|
// shareableImages is a set of shareable.Image sorted by the order of mipmap level.
|
||||||
|
// The level 0 image is a regular image and higher-level images are used for mipmap.
|
||||||
shareableImages []*shareable.Image
|
shareableImages []*shareable.Image
|
||||||
|
|
||||||
filter Filter
|
filter Filter
|
||||||
@ -282,7 +284,12 @@ func (i *Image) DrawImage(img *Image, options *DrawImageOptions) error {
|
|||||||
if w2 == 0 || h2 == 0 {
|
if w2 == 0 || h2 == 0 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
s := shareable.NewImage(w2, h2)
|
var s *shareable.Image
|
||||||
|
if img.shareableImages[0].IsVolatile() {
|
||||||
|
s = shareable.NewVolatileImage(w2, h2)
|
||||||
|
} else {
|
||||||
|
s = shareable.NewImage(w2, h2)
|
||||||
|
}
|
||||||
vs := src.QuadVertices(0, 0, w, h, 0.5, 0, 0, 0.5, 0, 0, nil)
|
vs := src.QuadVertices(0, 0, w, h, 0.5, 0, 0, 0.5, 0, 0, nil)
|
||||||
is := graphicsutil.QuadIndices()
|
is := graphicsutil.QuadIndices()
|
||||||
s.DrawImage(src, vs, is, opengl.CompositeModeCopy, graphics.FilterLinear)
|
s.DrawImage(src, vs, is, opengl.CompositeModeCopy, graphics.FilterLinear)
|
||||||
|
@ -99,6 +99,10 @@ func NewScreenFramebufferImage(width, height int) *Image {
|
|||||||
return i
|
return i
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (i *Image) IsVolatile() bool {
|
||||||
|
return i.volatile
|
||||||
|
}
|
||||||
|
|
||||||
// BasePixelsForTesting returns the image's basePixels for testing.
|
// BasePixelsForTesting returns the image's basePixels for testing.
|
||||||
func (i *Image) BasePixelsForTesting() []byte {
|
func (i *Image) BasePixelsForTesting() []byte {
|
||||||
return i.basePixels
|
return i.basePixels
|
||||||
|
@ -323,6 +323,16 @@ func (i *Image) dispose(markDisposed bool) {
|
|||||||
theBackends = append(theBackends[:index], theBackends[index+1:]...)
|
theBackends = append(theBackends[:index], theBackends[index+1:]...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (i *Image) IsVolatile() bool {
|
||||||
|
backendsM.Lock()
|
||||||
|
defer backendsM.Unlock()
|
||||||
|
if i.backend == nil {
|
||||||
|
// Not allocated yet. Only non-volatile images can do lazy allocation so far.
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return i.backend.restorable.IsVolatile()
|
||||||
|
}
|
||||||
|
|
||||||
func (i *Image) IsInvalidated() (bool, error) {
|
func (i *Image) IsInvalidated() (bool, error) {
|
||||||
backendsM.Lock()
|
backendsM.Lock()
|
||||||
defer backendsM.Unlock()
|
defer backendsM.Unlock()
|
||||||
|
Loading…
Reference in New Issue
Block a user