internal/atlas: bug fix: do not use the padding when a mask is specified

With paddings, a mask size was not appropriate.

As a simple solution, let's not use paddings when a mask is specified.
This commit is contained in:
Hajime Hoshi 2022-03-21 05:50:28 +09:00
parent dfc9eeaaec
commit 4f070915b2

View File

@ -567,6 +567,16 @@ func (i *Image) replacePixels(pix []byte, mask []byte) {
return return
} }
// When a mask is specified, this image should already be initialized.
// Then, the paddings are not needed.
// TODO: This is tricky. Refactor this.
if mask != nil {
x := px + paddingSize
y := py + paddingSize
i.backend.restorable.ReplacePixels(pix, mask, x, y, i.width, i.height)
return
}
ow, oh := pw-2*paddingSize, ph-2*paddingSize ow, oh := pw-2*paddingSize, ph-2*paddingSize
if l := 4 * ow * oh; len(pix) != l { if l := 4 * ow * oh; len(pix) != l {
panic(fmt.Sprintf("atlas: len(p) must be %d but %d", l, len(pix))) panic(fmt.Sprintf("atlas: len(p) must be %d but %d", l, len(pix)))
@ -598,7 +608,7 @@ func (i *Image) replacePixels(pix []byte, mask []byte) {
copy(pixb[4*((j+paddingSize)*pw+paddingSize):], pix[4*j*ow:4*(j+1)*ow]) copy(pixb[4*((j+paddingSize)*pw+paddingSize):], pix[4*j*ow:4*(j+1)*ow])
} }
i.backend.restorable.ReplacePixels(pixb, mask, px, py, pw, ph) i.backend.restorable.ReplacePixels(pixb, nil, px, py, pw, ph)
} }
func (img *Image) Pixels(graphicsDriver graphicsdriver.Graphics) ([]byte, error) { func (img *Image) Pixels(graphicsDriver graphicsdriver.Graphics) ([]byte, error) {