diff --git a/ebitenutil/debugprint.go b/ebitenutil/debugprint.go index 7fbd2183c..712b98aae 100644 --- a/ebitenutil/debugprint.go +++ b/ebitenutil/debugprint.go @@ -22,12 +22,29 @@ import ( ) var ( - debugPrintTextImage *ebiten.Image + debugPrintTextImage *ebiten.Image + debugPrintTextShadowImage *ebiten.Image ) func init() { img := assets.CreateTextImage() debugPrintTextImage, _ = ebiten.NewImageFromImage(img, ebiten.FilterDefault) + + // Using color matrices for shadow color is not efficient. + // Instead, use a different image, that shares the same texture in highly possibility. + s := img.Bounds().Size() + for j := 0; j < s.Y; j++ { + for i := 0; i < s.X; i++ { + idx := (img.Stride)*j + 4*i + if img.Pix[idx+3] != 0 { + img.Pix[idx] = 0 + img.Pix[idx+1] = 0 + img.Pix[idx+2] = 0 + img.Pix[idx+3] = 0x80 + } + } + } + debugPrintTextShadowImage, _ = ebiten.NewImageFromImage(img, ebiten.FilterDefault) } // DebugPrint draws the string str on the image. @@ -36,16 +53,13 @@ func init() { // // DebugPrint always returns nil as of 1.5.0-alpha. func DebugPrint(image *ebiten.Image, str string) error { - drawDebugText(image, str, 1, 1, true) - drawDebugText(image, str, 0, 0, false) + drawDebugText(image, str, 1, 1, debugPrintTextShadowImage) + drawDebugText(image, str, 0, 0, debugPrintTextImage) return nil } -func drawDebugText(rt *ebiten.Image, str string, ox, oy int, shadow bool) { +func drawDebugText(rt *ebiten.Image, str string, ox, oy int, src *ebiten.Image) { op := &ebiten.DrawImageOptions{} - if shadow { - op.ColorM.Scale(0, 0, 0, 0.5) - } x := 0 y := 0 w, _ := debugPrintTextImage.Size() @@ -71,7 +85,7 @@ func drawDebugText(rt *ebiten.Image, str string, ox, oy int, shadow bool) { op.GeoM.Reset() op.GeoM.Translate(float64(x), float64(y)) op.GeoM.Translate(float64(ox+1), float64(oy)) - _ = rt.DrawImage(debugPrintTextImage, op) + _ = rt.DrawImage(src, op) x += cw } }