diff options
author | Jens Arnold <amiconn@rockbox.org> | 2008-01-09 23:48:26 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2008-01-09 23:48:26 +0000 |
commit | 6a56c14e17f6ba113ec0d4d40e75bffd61b293cc (patch) | |
tree | 64bcdd8d5d4afa2ca6dd1aa0976cdafa9a346b26 /firmware/target/coldfire/iriver/h100/lcd-h100.c | |
parent | 75380fd27d175bab1818ef35a9100e74fc6a461b (diff) | |
download | rockbox-6a56c14e17f6ba113ec0d4d40e75bffd61b293cc.tar.gz rockbox-6a56c14e17f6ba113ec0d4d40e75bffd61b293cc.zip |
Greyscale library: Changed the internal data format once more (separated pixel values and phases), allowing for further optimisation of drawing, scrolling etc. * Optimised grey phase blitting in the core reduces CPU load on all architectures, most significantly on coldfire. Previous version was too slow to keep up at 45MHz, leading to unwanted graininess (update frequency was halved). Also fixed screendump on 2bpp targets with vertical pixel packing.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16043 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/coldfire/iriver/h100/lcd-h100.c')
-rw-r--r-- | firmware/target/coldfire/iriver/h100/lcd-h100.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/firmware/target/coldfire/iriver/h100/lcd-h100.c b/firmware/target/coldfire/iriver/h100/lcd-h100.c index c17de952c3..2ba19255da 100644 --- a/firmware/target/coldfire/iriver/h100/lcd-h100.c +++ b/firmware/target/coldfire/iriver/h100/lcd-h100.c | |||
@@ -180,10 +180,13 @@ void lcd_blit(const unsigned char* data, int x, int by, int width, | |||
180 | } | 180 | } |
181 | } | 181 | } |
182 | 182 | ||
183 | /* Helper function for lcd_grey_phase_blit(). */ | ||
184 | void lcd_grey_data(unsigned char *values, unsigned char *phases, int count); | ||
185 | |||
183 | /* Performance function that works with an external buffer | 186 | /* Performance function that works with an external buffer |
184 | note that by and bheight are in 4-pixel units! */ | 187 | note that by and bheight are in 4-pixel units! */ |
185 | void lcd_grey_phase_blit(const struct grey_data *data, int x, int by, | 188 | void lcd_grey_phase_blit(unsigned char *values, unsigned char *phases, |
186 | int width, int bheight, int stride) | 189 | int x, int by, int width, int bheight, int stride) |
187 | { | 190 | { |
188 | stride <<= 2; /* 4 pixels per block */ | 191 | stride <<= 2; /* 4 pixels per block */ |
189 | while (bheight--) | 192 | while (bheight--) |
@@ -191,8 +194,9 @@ void lcd_grey_phase_blit(const struct grey_data *data, int x, int by, | |||
191 | lcd_write_command_ex(LCD_CNTL_PAGE, by++, -1); | 194 | lcd_write_command_ex(LCD_CNTL_PAGE, by++, -1); |
192 | lcd_write_command_ex(LCD_CNTL_COLUMN, x, -1); | 195 | lcd_write_command_ex(LCD_CNTL_COLUMN, x, -1); |
193 | lcd_write_command(LCD_CNTL_DATA_WRITE); | 196 | lcd_write_command(LCD_CNTL_DATA_WRITE); |
194 | lcd_grey_data(data, width); | 197 | lcd_grey_data(values, phases, width); |
195 | data += stride; | 198 | values += stride; |
199 | phases += stride; | ||
196 | } | 200 | } |
197 | } | 201 | } |
198 | 202 | ||