mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-01-12 20:18:59 +01:00
graphics: Refactoring
This commit is contained in:
parent
dee602e792
commit
ea285afb96
30
pixels.go
30
pixels.go
@ -31,28 +31,28 @@ type drawImageHistoryItem struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type pixels struct {
|
type pixels struct {
|
||||||
pixels []uint8
|
basePixels []uint8
|
||||||
baseColor color.Color
|
baseColor color.Color
|
||||||
drawImageHistory []*drawImageHistoryItem
|
drawImageHistory []*drawImageHistoryItem
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *pixels) resetWithPixels(pixels []uint8) {
|
func (p *pixels) resetWithPixels(pixels []uint8) {
|
||||||
if p.pixels == nil {
|
if p.basePixels == nil {
|
||||||
p.pixels = make([]uint8, len(pixels))
|
p.basePixels = make([]uint8, len(pixels))
|
||||||
}
|
}
|
||||||
copy(p.pixels, pixels)
|
copy(p.basePixels, pixels)
|
||||||
p.baseColor = nil
|
p.baseColor = nil
|
||||||
p.drawImageHistory = nil
|
p.drawImageHistory = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *pixels) clear() {
|
func (p *pixels) clear() {
|
||||||
p.pixels = nil
|
p.basePixels = nil
|
||||||
p.baseColor = nil
|
p.baseColor = nil
|
||||||
p.drawImageHistory = nil
|
p.drawImageHistory = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *pixels) fill(clr color.Color) {
|
func (p *pixels) fill(clr color.Color) {
|
||||||
p.pixels = nil
|
p.basePixels = nil
|
||||||
p.baseColor = clr
|
p.baseColor = clr
|
||||||
p.drawImageHistory = nil
|
p.drawImageHistory = nil
|
||||||
}
|
}
|
||||||
@ -62,16 +62,16 @@ func (p *pixels) appendDrawImageHistory(item *drawImageHistoryItem) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *pixels) at(image *graphics.Image, idx int, context *opengl.Context) (color.Color, error) {
|
func (p *pixels) at(image *graphics.Image, idx int, context *opengl.Context) (color.Color, error) {
|
||||||
if p.pixels == nil || p.drawImageHistory != nil {
|
if p.basePixels == nil || p.drawImageHistory != nil {
|
||||||
var err error
|
var err error
|
||||||
p.pixels, err = image.Pixels(context)
|
p.basePixels, err = image.Pixels(context)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
p.baseColor = nil
|
p.baseColor = nil
|
||||||
p.drawImageHistory = nil
|
p.drawImageHistory = nil
|
||||||
}
|
}
|
||||||
r, g, b, a := p.pixels[idx], p.pixels[idx+1], p.pixels[idx+2], p.pixels[idx+3]
|
r, g, b, a := p.basePixels[idx], p.basePixels[idx+1], p.basePixels[idx+2], p.basePixels[idx+3]
|
||||||
return color.RGBA{r, g, b, a}, nil
|
return color.RGBA{r, g, b, a}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ func (p *pixels) resetHistoryIfNeeded(image *graphics.Image, target *Image, cont
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
var err error
|
var err error
|
||||||
p.pixels, err = image.Pixels(context)
|
p.basePixels, err = image.Pixels(context)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -105,11 +105,14 @@ func (p *pixels) hasHistory() bool {
|
|||||||
return p.drawImageHistory != nil
|
return p.drawImageHistory != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// restore restores the pixels using its history.
|
||||||
|
//
|
||||||
|
// restore is the only function that the pixel data is not present on GPU when this is called.
|
||||||
func (p *pixels) restore(context *opengl.Context, width, height int, filter Filter) (*graphics.Image, error) {
|
func (p *pixels) restore(context *opengl.Context, width, height int, filter Filter) (*graphics.Image, error) {
|
||||||
img := image.NewRGBA(image.Rect(0, 0, width, height))
|
img := image.NewRGBA(image.Rect(0, 0, width, height))
|
||||||
if p.pixels != nil {
|
if p.basePixels != nil {
|
||||||
for j := 0; j < height; j++ {
|
for j := 0; j < height; j++ {
|
||||||
copy(img.Pix[j*img.Stride:], p.pixels[j*width*4:(j+1)*width*4])
|
copy(img.Pix[j*img.Stride:], p.basePixels[j*width*4:(j+1)*width*4])
|
||||||
}
|
}
|
||||||
} else if p.baseColor != nil {
|
} else if p.baseColor != nil {
|
||||||
r32, g32, b32, a32 := p.baseColor.RGBA()
|
r32, g32, b32, a32 := p.baseColor.RGBA()
|
||||||
@ -126,6 +129,7 @@ func (p *pixels) restore(context *opengl.Context, width, height int, filter Filt
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
for _, c := range p.drawImageHistory {
|
for _, c := range p.drawImageHistory {
|
||||||
|
// c.image.impl must be already restored.
|
||||||
if c.image.impl.hasHistory() {
|
if c.image.impl.hasHistory() {
|
||||||
panic("not reach")
|
panic("not reach")
|
||||||
}
|
}
|
||||||
@ -133,7 +137,7 @@ func (p *pixels) restore(context *opengl.Context, width, height int, filter Filt
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
p.pixels, err = gimg.Pixels(context)
|
p.basePixels, err = gimg.Pixels(context)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user