mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-02-03 22:44:28 +01:00
graphics: imageImpl has pixels as a pointer
This commit is contained in:
parent
7649236712
commit
b5f51dbccc
22
imageimpl.go
22
imageimpl.go
@ -33,7 +33,7 @@ type imageImpl struct {
|
|||||||
width int
|
width int
|
||||||
height int
|
height int
|
||||||
filter Filter
|
filter Filter
|
||||||
pixels pixels
|
pixels *pixels
|
||||||
volatile bool
|
volatile bool
|
||||||
screen bool
|
screen bool
|
||||||
m sync.Mutex
|
m sync.Mutex
|
||||||
@ -50,8 +50,10 @@ func newImageImpl(width, height int, filter Filter, volatile bool) (*imageImpl,
|
|||||||
height: height,
|
height: height,
|
||||||
filter: filter,
|
filter: filter,
|
||||||
volatile: volatile,
|
volatile: volatile,
|
||||||
|
pixels: &pixels{
|
||||||
|
image: img,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
i.pixels.image = i.image
|
|
||||||
i.pixels.resetWithPixels(make([]uint8, width*height*4))
|
i.pixels.resetWithPixels(make([]uint8, width*height*4))
|
||||||
runtime.SetFinalizer(i, (*imageImpl).Dispose)
|
runtime.SetFinalizer(i, (*imageImpl).Dispose)
|
||||||
return i, nil
|
return i, nil
|
||||||
@ -69,9 +71,9 @@ func newImageImplFromImage(source image.Image, filter Filter) (*imageImpl, error
|
|||||||
draw.Draw(newImg, newImg.Bounds(), origImg, origImg.Bounds().Min, draw.Src)
|
draw.Draw(newImg, newImg.Bounds(), origImg, origImg.Bounds().Min, draw.Src)
|
||||||
rgbaImg = newImg
|
rgbaImg = newImg
|
||||||
}
|
}
|
||||||
pixels := make([]uint8, 4*w*h)
|
p := make([]uint8, 4*w*h)
|
||||||
for j := 0; j < h; j++ {
|
for j := 0; j < h; j++ {
|
||||||
copy(pixels[j*w*4:(j+1)*w*4], rgbaImg.Pix[j*rgbaImg.Stride:])
|
copy(p[j*w*4:(j+1)*w*4], rgbaImg.Pix[j*rgbaImg.Stride:])
|
||||||
}
|
}
|
||||||
img, err := graphics.NewImageFromImage(rgbaImg, glFilter(filter))
|
img, err := graphics.NewImageFromImage(rgbaImg, glFilter(filter))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -83,9 +85,11 @@ func newImageImplFromImage(source image.Image, filter Filter) (*imageImpl, error
|
|||||||
width: w,
|
width: w,
|
||||||
height: h,
|
height: h,
|
||||||
filter: filter,
|
filter: filter,
|
||||||
|
pixels: &pixels{
|
||||||
|
image: img,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
i.pixels.image = i.image
|
i.pixels.resetWithPixels(p)
|
||||||
i.pixels.resetWithPixels(pixels)
|
|
||||||
runtime.SetFinalizer(i, (*imageImpl).Dispose)
|
runtime.SetFinalizer(i, (*imageImpl).Dispose)
|
||||||
return i, nil
|
return i, nil
|
||||||
}
|
}
|
||||||
@ -101,8 +105,10 @@ func newScreenImageImpl(width, height int) (*imageImpl, error) {
|
|||||||
height: height,
|
height: height,
|
||||||
volatile: true,
|
volatile: true,
|
||||||
screen: true,
|
screen: true,
|
||||||
|
pixels: &pixels{
|
||||||
|
image: img,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
i.pixels.image = i.image
|
|
||||||
i.pixels.resetWithPixels(make([]uint8, width*height*4))
|
i.pixels.resetWithPixels(make([]uint8, width*height*4))
|
||||||
runtime.SetFinalizer(i, (*imageImpl).Dispose)
|
runtime.SetFinalizer(i, (*imageImpl).Dispose)
|
||||||
return i, nil
|
return i, nil
|
||||||
@ -277,7 +283,7 @@ func (i *imageImpl) Dispose() error {
|
|||||||
}
|
}
|
||||||
i.image = nil
|
i.image = nil
|
||||||
i.disposed = true
|
i.disposed = true
|
||||||
i.pixels.clear()
|
i.pixels = nil
|
||||||
runtime.SetFinalizer(i, nil)
|
runtime.SetFinalizer(i, nil)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user