mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-26 03:38:55 +01:00
parent
40d2dd3ba7
commit
91a7288027
@ -55,6 +55,8 @@ func temporaryPixelsByteSize(size int) int {
|
|||||||
return l
|
return l
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// alloc allocates the pixels and reutrns it.
|
||||||
|
// Be careful that the returned pixels might not be zero-cleared.
|
||||||
func (t *temporaryPixels) alloc(size int) []byte {
|
func (t *temporaryPixels) alloc(size int) []byte {
|
||||||
if len(t.pixels) < t.pos+size {
|
if len(t.pixels) < t.pos+size {
|
||||||
t.pixels = make([]byte, temporaryPixelsByteSize(t.pos+size))
|
t.pixels = make([]byte, temporaryPixelsByteSize(t.pos+size))
|
||||||
@ -79,8 +81,11 @@ func (t *temporaryPixels) resetAtFrameEnd() {
|
|||||||
// Let the pixels GCed if this is not used for a while.
|
// Let the pixels GCed if this is not used for a while.
|
||||||
if t.notFullyUsedTime == maxNotFullyUsedTime && len(t.pixels) > 0 {
|
if t.notFullyUsedTime == maxNotFullyUsedTime && len(t.pixels) > 0 {
|
||||||
t.pixels = nil
|
t.pixels = nil
|
||||||
t.pos = 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset the position and reuse the allocated bytes.
|
||||||
|
// t.pixels should already be sent to GPU, then this can be reused.
|
||||||
|
t.pos = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func max(a, b int) int {
|
func max(a, b int) int {
|
||||||
@ -533,6 +538,25 @@ func (i *Image) replacePixels(pix []byte) {
|
|||||||
|
|
||||||
pixb := theTemporaryPixels.alloc(4 * w * h)
|
pixb := theTemporaryPixels.alloc(4 * w * h)
|
||||||
|
|
||||||
|
// Clear the edges. pixb might not be zero-cleared.
|
||||||
|
rowPixels := 4 * w
|
||||||
|
for i := 0; i < rowPixels; i++ {
|
||||||
|
pixb[i] = 0
|
||||||
|
}
|
||||||
|
for j := 1; j < h-1; j++ {
|
||||||
|
pixb[rowPixels*j] = 0
|
||||||
|
pixb[rowPixels*j+1] = 0
|
||||||
|
pixb[rowPixels*j+2] = 0
|
||||||
|
pixb[rowPixels*j+3] = 0
|
||||||
|
pixb[rowPixels*(j+1)-4] = 0
|
||||||
|
pixb[rowPixels*(j+1)-3] = 0
|
||||||
|
pixb[rowPixels*(j+1)-2] = 0
|
||||||
|
pixb[rowPixels*(j+1)-1] = 0
|
||||||
|
}
|
||||||
|
for i := 0; i < rowPixels; i++ {
|
||||||
|
pixb[rowPixels*(h-1)+i] = 0
|
||||||
|
}
|
||||||
|
|
||||||
// Copy the content.
|
// Copy the content.
|
||||||
for j := 0; j < oh; j++ {
|
for j := 0; j < oh; j++ {
|
||||||
copy(pixb[4*((j+paddingSize)*w+paddingSize):], pix[4*j*ow:4*(j+1)*ow])
|
copy(pixb[4*((j+paddingSize)*w+paddingSize):], pix[4*j*ow:4*(j+1)*ow])
|
||||||
|
Loading…
Reference in New Issue
Block a user