@@ -8,15 +8,16 @@ import (
88 "tinygo.org/x/drivers/examples/ili9341/initdisplay"
99 "tinygo.org/x/drivers/examples/ili9341/pyportal_boing/graphics"
1010 "tinygo.org/x/drivers/ili9341"
11+ "tinygo.org/x/drivers/pixel"
1112)
1213
1314const (
14- BGCOLOR = 0xAD75
15- GRIDCOLOR = 0xA815
16- BGSHADOW = 0x5285
17- GRIDSHADOW = 0x600C
18- RED = 0xF800
19- WHITE = 0xFFFF
15+ BGCOLOR = pixel . RGB565BE ( 0x75AD )
16+ GRIDCOLOR = pixel . RGB565BE ( 0x15A8 )
17+ BGSHADOW = pixel . RGB565BE ( 0x8552 )
18+ GRIDSHADOW = pixel . RGB565BE ( 0x0C60 )
19+ RED = pixel . RGB565BE ( 0x00F8 )
20+ WHITE = pixel . RGB565BE ( 0xFFFF )
2021
2122 YBOTTOM = 123 // Ball Y coord at bottom
2223 YBOUNCE = - 3.5 // Upward velocity on ball bounce
@@ -25,7 +26,7 @@ const (
2526)
2627
2728var (
28- frameBuffer = [ (graphics .BALLHEIGHT + 8 ) * ( graphics .BALLWIDTH + 8 ) * 2 ] uint8 {}
29+ frameBuffer = pixel . NewImage [pixel. RGB565BE ] (graphics .BALLWIDTH + 8 , graphics .BALLHEIGHT + 8 )
2930
3031 startTime int64
3132 frame int64
4142 balloldy float32
4243
4344 // Color table for ball rotation effect
44- palette [16 ]uint16
45+ palette [16 ]pixel. RGB565BE
4546)
4647
4748var (
@@ -108,6 +109,7 @@ func main() {
108109
109110 width = maxx - minx + 1
110111 height = maxy - miny + 1
112+ buffer := frameBuffer .Rescale (int (width ), int (height ))
111113
112114 // Ball animation frame # is incremented opposite the ball's X velocity
113115 ballframe -= ballvx * 0.5
@@ -128,7 +130,7 @@ func main() {
128130 }
129131
130132 // Only the changed rectangle is drawn into the 'renderbuf' array...
131- var c uint16 //, *destPtr;
133+ var c pixel. RGB565BE //, *destPtr;
132134 bx := minx - int16 (ballx ) // X relative to ball bitmap (can be negative)
133135 by := miny - int16 (bally ) // Y relative to ball bitmap (can be negative)
134136 bgx := minx // X relative to background bitmap (>= 0)
@@ -149,19 +151,20 @@ func main() {
149151 (by >= 0 ) && (by < graphics .BALLHEIGHT ) { // inside the ball bitmap area?
150152 // Yes, do ball compositing math...
151153 p = graphics .Ball [int (by * (graphics .BALLWIDTH / 2 ))+ int (bx1 / 2 )] // Get packed value (2 pixels)
154+ var nibble uint8
152155 if (bx1 & 1 ) != 0 {
153- c = uint16 ( p & 0xF )
156+ nibble = p & 0xF
154157 } else {
155- c = uint16 ( p >> 4 )
158+ nibble = p >> 4
156159 } // Unpack high or low nybble
157- if c == 0 { // Outside ball - just draw grid
160+ if nibble == 0 { // Outside ball - just draw grid
158161 if graphics .Background [bgidx ]& (0x80 >> (bgx1 & 7 )) != 0 {
159162 c = GRIDCOLOR
160163 } else {
161164 c = BGCOLOR
162165 }
163- } else if c > 1 { // In ball area...
164- c = palette [c ]
166+ } else if nibble > 1 { // In ball area...
167+ c = palette [nibble ]
165168 } else { // In shadow area...
166169 if graphics .Background [bgidx ]& (0x80 >> (bgx1 & 7 )) != 0 {
167170 c = GRIDSHADOW
@@ -176,8 +179,7 @@ func main() {
176179 c = BGCOLOR
177180 }
178181 }
179- frameBuffer [(y * int (width )+ x )* 2 ] = byte (c >> 8 )
180- frameBuffer [(y * int (width )+ x )* 2 + 1 ] = byte (c )
182+ buffer .Set (x , y , c )
181183 bx1 ++ // Increment bitmap position counters (X axis)
182184 bgx1 ++
183185 }
@@ -188,7 +190,7 @@ func main() {
188190 bgy ++
189191 }
190192
191- display .DrawRGBBitmap8 (minx , miny , frameBuffer [: width * height * 2 ], width , height )
193+ display .DrawBitmap (minx , miny , buffer )
192194
193195 // Show approximate frame rate
194196 frame ++
@@ -205,6 +207,7 @@ func DrawBackground() {
205207 w , h := display .Size ()
206208 byteWidth := (w + 7 ) / 8 // Bitmap scanline pad = whole byte
207209 var b uint8
210+ buffer := frameBuffer .Rescale (int (w ), 1 )
208211 for j := int16 (0 ); j < h ; j ++ {
209212 for k := int16 (0 ); k < w ; k ++ {
210213 if k & 7 > 0 {
@@ -213,13 +216,11 @@ func DrawBackground() {
213216 b = graphics .Background [j * byteWidth + k / 8 ]
214217 }
215218 if b & 0x80 == 0 {
216- frameBuffer [2 * k ] = byte (BGCOLOR >> 8 )
217- frameBuffer [2 * k + 1 ] = byte (BGCOLOR & 0xFF )
219+ buffer .Set (int (k ), 0 , BGCOLOR )
218220 } else {
219- frameBuffer [2 * k ] = byte (GRIDCOLOR >> 8 )
220- frameBuffer [2 * k + 1 ] = byte (GRIDCOLOR & 0xFF )
221+ buffer .Set (int (k ), 0 , GRIDCOLOR )
221222 }
222223 }
223- display .DrawRGBBitmap8 (0 , j , frameBuffer [ 0 : w * 2 ], w , 1 )
224+ display .DrawBitmap (0 , j , buffer )
224225 }
225226}
0 commit comments