Revert "internal/restorable: remove ImageType"

This reverts commit 21ef462c37.

Updates #3083
This commit is contained in:
Hajime Hoshi 2024-09-06 14:27:46 +09:00
parent 62ed5bed4b
commit a324cfd3b6
2 changed files with 22 additions and 11 deletions

View File

@ -119,8 +119,7 @@ func (b *backend) tryAlloc(width, height int) (*packing.Node, bool) {
return nil, false return nil, false
} }
w, h := b.page.Size() b.restorable = b.restorable.Extend(b.page.Size())
b.restorable = b.restorable.Extend(w, h)
return n, true return n, true
} }
@ -672,7 +671,7 @@ func (i *Image) allocate(forbiddenBackends []*backend, asSource bool) {
} }
// A screen image doesn't have a padding. // A screen image doesn't have a padding.
i.backend = &backend{ i.backend = &backend{
restorable: restorable.NewImage(i.width, i.height, true), restorable: restorable.NewImage(i.width, i.height, restorable.ImageTypeScreen),
} }
theBackends = append(theBackends, i.backend) theBackends = append(theBackends, i.backend)
return return
@ -687,7 +686,7 @@ func (i *Image) allocate(forbiddenBackends []*backend, asSource bool) {
} }
i.backend = &backend{ i.backend = &backend{
restorable: restorable.NewImage(wp, hp, false), restorable: restorable.NewImage(wp, hp, restorable.ImageTypeRegular),
source: asSource && i.imageType == ImageTypeRegular, source: asSource && i.imageType == ImageTypeRegular,
} }
theBackends = append(theBackends, i.backend) theBackends = append(theBackends, i.backend)
@ -733,7 +732,7 @@ loop:
} }
b := &backend{ b := &backend{
restorable: restorable.NewImage(width, height, false), restorable: restorable.NewImage(width, height, restorable.ImageTypeRegular),
page: packing.NewPage(width, height, maxSize), page: packing.NewPage(width, height, maxSize),
source: asSource, source: asSource,
} }

View File

@ -23,6 +23,16 @@ import (
"github.com/hajimehoshi/ebiten/v2/internal/graphicsdriver" "github.com/hajimehoshi/ebiten/v2/internal/graphicsdriver"
) )
type ImageType int
const (
// ImageTypeRegular indicates the image is a regular image.
ImageTypeRegular ImageType = iota
// ImageTypeScreen indicates the image is used as an actual screen.
ImageTypeScreen
)
// Image represents an image. // Image represents an image.
type Image struct { type Image struct {
// Image is the underlying image. // Image is the underlying image.
@ -32,6 +42,8 @@ type Image struct {
width int width int
height int height int
imageType ImageType
} }
// NewImage creates an emtpy image with the given size. // NewImage creates an emtpy image with the given size.
@ -39,11 +51,12 @@ type Image struct {
// The returned image is cleared. // The returned image is cleared.
// //
// Note that Dispose is not called automatically. // Note that Dispose is not called automatically.
func NewImage(width, height int, screen bool) *Image { func NewImage(width, height int, imageType ImageType) *Image {
i := &Image{ i := &Image{
Image: graphicscommand.NewImage(width, height, screen), Image: graphicscommand.NewImage(width, height, imageType == ImageTypeScreen),
width: width, width: width,
height: height, height: height,
imageType: imageType,
} }
// This needs to use 'InternalSize' to render the whole region, or edges are unexpectedly cleared on some // This needs to use 'InternalSize' to render the whole region, or edges are unexpectedly cleared on some
@ -61,8 +74,7 @@ func (i *Image) Extend(width, height int) *Image {
return i return i
} }
// Assume that the screen image is never extended. newImg := NewImage(width, height, i.imageType)
newImg := NewImage(width, height, false)
// Use DrawTriangles instead of WritePixels because the image i might be stale and not have its pixels // Use DrawTriangles instead of WritePixels because the image i might be stale and not have its pixels
// information. // information.