mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-24 10:48:53 +01:00
graphics: Refactoring
This commit is contained in:
parent
2e0b7da614
commit
c5f3eaf925
14
image.go
14
image.go
@ -74,11 +74,11 @@ func (i *images) ensurePixels(context *opengl.Context) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *images) resetPixelsIfNeeded(target *Image, context *opengl.Context) error {
|
func (i *images) resetPixelsIfDependingOn(target *Image, context *opengl.Context) error {
|
||||||
i.m.Lock()
|
i.m.Lock()
|
||||||
defer i.m.Unlock()
|
defer i.m.Unlock()
|
||||||
for img := range i.images {
|
for img := range i.images {
|
||||||
if err := img.resetPixelsIfNeeded(target.impl, context); err != nil {
|
if err := img.resetPixelsIfDependingOn(target.impl, context); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -152,7 +152,7 @@ func (i *Image) Size() (width, height int) {
|
|||||||
//
|
//
|
||||||
// This function is concurrent-safe.
|
// This function is concurrent-safe.
|
||||||
func (i *Image) Clear() error {
|
func (i *Image) Clear() error {
|
||||||
if err := theImagesForRestoring.resetPixelsIfNeeded(i, glContext()); err != nil {
|
if err := theImagesForRestoring.resetPixelsIfDependingOn(i, glContext()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return i.impl.Fill(color.Transparent)
|
return i.impl.Fill(color.Transparent)
|
||||||
@ -162,7 +162,7 @@ func (i *Image) Clear() error {
|
|||||||
//
|
//
|
||||||
// This function is concurrent-safe.
|
// This function is concurrent-safe.
|
||||||
func (i *Image) Fill(clr color.Color) error {
|
func (i *Image) Fill(clr color.Color) error {
|
||||||
if err := theImagesForRestoring.resetPixelsIfNeeded(i, glContext()); err != nil {
|
if err := theImagesForRestoring.resetPixelsIfDependingOn(i, glContext()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return i.impl.Fill(clr)
|
return i.impl.Fill(clr)
|
||||||
@ -185,7 +185,7 @@ func (i *Image) Fill(clr color.Color) error {
|
|||||||
//
|
//
|
||||||
// This function is concurrent-safe.
|
// This function is concurrent-safe.
|
||||||
func (i *Image) DrawImage(image *Image, options *DrawImageOptions) error {
|
func (i *Image) DrawImage(image *Image, options *DrawImageOptions) error {
|
||||||
if err := theImagesForRestoring.resetPixelsIfNeeded(i, glContext()); err != nil {
|
if err := theImagesForRestoring.resetPixelsIfDependingOn(i, glContext()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return i.impl.DrawImage(image, options)
|
return i.impl.DrawImage(image, options)
|
||||||
@ -223,7 +223,7 @@ func (i *Image) At(x, y int) color.Color {
|
|||||||
//
|
//
|
||||||
// This function is concurrent-safe.
|
// This function is concurrent-safe.
|
||||||
func (i *Image) Dispose() error {
|
func (i *Image) Dispose() error {
|
||||||
if err := theImagesForRestoring.resetPixelsIfNeeded(i, glContext()); err != nil {
|
if err := theImagesForRestoring.resetPixelsIfDependingOn(i, glContext()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if i.impl.isDisposed() {
|
if i.impl.isDisposed() {
|
||||||
@ -240,7 +240,7 @@ func (i *Image) Dispose() error {
|
|||||||
//
|
//
|
||||||
// This function is concurrent-safe.
|
// This function is concurrent-safe.
|
||||||
func (i *Image) ReplacePixels(p []uint8) error {
|
func (i *Image) ReplacePixels(p []uint8) error {
|
||||||
if err := theImagesForRestoring.resetPixelsIfNeeded(i, glContext()); err != nil {
|
if err := theImagesForRestoring.resetPixelsIfDependingOn(i, glContext()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return i.impl.ReplacePixels(p)
|
return i.impl.ReplacePixels(p)
|
||||||
|
@ -214,7 +214,7 @@ func (i *imageImpl) ensurePixels(context *opengl.Context) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *imageImpl) resetPixelsIfNeeded(target *imageImpl, context *opengl.Context) error {
|
func (i *imageImpl) resetPixelsIfDependingOn(target *imageImpl, context *opengl.Context) error {
|
||||||
i.m.Lock()
|
i.m.Lock()
|
||||||
defer i.m.Unlock()
|
defer i.m.Unlock()
|
||||||
if i == target {
|
if i == target {
|
||||||
@ -231,7 +231,7 @@ func (i *imageImpl) resetPixelsIfNeeded(target *imageImpl, context *opengl.Conte
|
|||||||
}
|
}
|
||||||
// target is an image begin tried to mutate.
|
// target is an image begin tried to mutate.
|
||||||
// If pixels object is related to that image, the pixels must be reset.
|
// If pixels object is related to that image, the pixels must be reset.
|
||||||
if !i.pixels.NeedsReset(target.image) {
|
if !i.pixels.DependsOn(target.image) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if context == nil {
|
if context == nil {
|
||||||
|
@ -96,7 +96,7 @@ func (p *Pixels) At(idx int, context *opengl.Context) (color.Color, error) {
|
|||||||
return color.RGBA{r, g, b, a}, nil
|
return color.RGBA{r, g, b, a}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Pixels) hasHistoryWith(target *graphics.Image) bool {
|
func (p *Pixels) DependsOn(target *graphics.Image) bool {
|
||||||
for _, c := range p.drawImageHistory {
|
for _, c := range p.drawImageHistory {
|
||||||
if c.image == target {
|
if c.image == target {
|
||||||
return true
|
return true
|
||||||
@ -116,16 +116,6 @@ func (p *Pixels) Reset(context *opengl.Context) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Pixels) NeedsReset(target *graphics.Image) bool {
|
|
||||||
if p.drawImageHistory == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if !p.hasHistoryWith(target) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *Pixels) HasHistory() bool {
|
func (p *Pixels) HasHistory() bool {
|
||||||
return p.drawImageHistory != nil
|
return p.drawImageHistory != nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user