mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-01-26 02:42:02 +01:00
shareable: Use color vertex values instead of ColorM
This is an optimization: using ColorM might cause graphics command separation.
This commit is contained in:
parent
d818fc3b5a
commit
1150fc69d0
@ -257,6 +257,17 @@ func (i *Image) DrawImage(img *Image, vertices []float32, indices []uint16, colo
|
|||||||
// Do not call Fill on emptyImage or the program causes infinite recursion.
|
// Do not call Fill on emptyImage or the program causes infinite recursion.
|
||||||
var emptyImage = NewImage(16, 16)
|
var emptyImage = NewImage(16, 16)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// Initialize emptyImage. As emptyImage is used for Fill, emptyImage itself cannot be initialized with Fill.
|
||||||
|
// Call ReplacePixels instead.
|
||||||
|
w, h := emptyImage.Size()
|
||||||
|
pix := make([]byte, 4*w*h)
|
||||||
|
for i := range pix {
|
||||||
|
pix[i] = 0xff
|
||||||
|
}
|
||||||
|
emptyImage.ReplacePixels(pix)
|
||||||
|
}
|
||||||
|
|
||||||
// Fill fills the image with a color. This affects not only the (0, 0)-(width, height) region but also the whole
|
// Fill fills the image with a color. This affects not only the (0, 0)-(width, height) region but also the whole
|
||||||
// framebuffer region.
|
// framebuffer region.
|
||||||
func (i *Image) Fill(r, g, b, a uint8) {
|
func (i *Image) Fill(r, g, b, a uint8) {
|
||||||
@ -267,22 +278,25 @@ func (i *Image) Fill(r, g, b, a uint8) {
|
|||||||
i.ensureNotShared()
|
i.ensureNotShared()
|
||||||
backendsM.Unlock()
|
backendsM.Unlock()
|
||||||
|
|
||||||
|
rf := float32(0)
|
||||||
|
gf := float32(0)
|
||||||
|
bf := float32(0)
|
||||||
|
af := float32(0)
|
||||||
|
if a > 0 {
|
||||||
|
rf = float32(r) / float32(a)
|
||||||
|
gf = float32(g) / float32(a)
|
||||||
|
bf = float32(b) / float32(a)
|
||||||
|
af = float32(a) / 0xff
|
||||||
|
}
|
||||||
|
|
||||||
dw, dh := i.backend.restorable.SizePowerOf2()
|
dw, dh := i.backend.restorable.SizePowerOf2()
|
||||||
sw, sh := emptyImage.Size()
|
sw, sh := emptyImage.Size()
|
||||||
vs := emptyImage.QuadVertices(0, 0, sw, sh,
|
vs := emptyImage.QuadVertices(0, 0, sw, sh,
|
||||||
float32(dw)/float32(sw), 0, 0, float32(dh)/float32(sh), 0, 0,
|
float32(dw)/float32(sw), 0, 0, float32(dh)/float32(sh), 0, 0,
|
||||||
1, 1, 1, 1)
|
rf, gf, bf, af)
|
||||||
is := graphics.QuadIndices()
|
is := graphics.QuadIndices()
|
||||||
|
|
||||||
var colorm *affine.ColorM
|
i.DrawImage(emptyImage, vs, is, nil, graphics.CompositeModeCopy, graphics.FilterNearest, graphics.AddressClampToZero)
|
||||||
if a > 0 {
|
|
||||||
rf := float32(r) / float32(a)
|
|
||||||
gf := float32(g) / float32(a)
|
|
||||||
bf := float32(b) / float32(a)
|
|
||||||
af := float32(a) / 0xff
|
|
||||||
colorm = colorm.Translate(rf, gf, bf, af)
|
|
||||||
}
|
|
||||||
i.DrawImage(emptyImage, vs, is, colorm, graphics.CompositeModeCopy, graphics.FilterNearest, graphics.AddressClampToZero)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *Image) ReplacePixels(p []byte) {
|
func (i *Image) ReplacePixels(p []byte) {
|
||||||
|
Loading…
Reference in New Issue
Block a user