mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 18:17:39 -04:00
All-new greyscale library, replacing the old one. Features: (1) Drawing/updating is faster than the old grayscale lib at full depth. (2) Always 129 shades instead of 2..33 shades. (3) No graininess caused by frequent updates (mpegplayer, doom, ...). (4) Needs less memory than the old grayscale lib at full depth. * The tradeoff is slightly higher CPU load in the ISR (frames are calculated 'live') and an extra function in the core. * Ported all plugins which used the graylib to use the new one. * Some slight optimisations for archos and H1x0 LCD update.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15998 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
d3586837fa
commit
feb5b15e9b
35 changed files with 2872 additions and 357 deletions
|
@ -19,7 +19,7 @@
|
|||
*
|
||||
***************************************************************************/
|
||||
#include "plugin.h"
|
||||
#include "gray.h"
|
||||
#include "grey.h"
|
||||
#include "playergfx.h"
|
||||
#include "xlcd.h"
|
||||
#include "fixedpoint.h"
|
||||
|
@ -221,16 +221,16 @@ struct my_lcd {
|
|||
void (*putsxy)(int x, int y, const unsigned char *string);
|
||||
};
|
||||
|
||||
static struct my_lcd grayfuncs = {
|
||||
gray_update, gray_clear_display, gray_drawline, gray_putsxy
|
||||
static struct my_lcd greyfuncs = {
|
||||
grey_update, grey_clear_display, grey_drawline, grey_putsxy
|
||||
};
|
||||
static struct my_lcd lcdfuncs; /* initialised at runtime */
|
||||
static struct my_lcd *mylcd = &grayfuncs;
|
||||
static struct my_lcd *mylcd = &greyfuncs;
|
||||
|
||||
#define MYLCD(fn) mylcd->fn
|
||||
#define MY_FILLTRIANGLE(x1, y1, x2, y2, x3, y3) gray_filltriangle(x1, y1, x2, y2, x3, y3)
|
||||
#define MY_SET_FOREGROUND(fg) gray_set_foreground(fg)
|
||||
#define MY_GET_FOREGROUND() gray_get_foreground()
|
||||
#define MY_FILLTRIANGLE(x1, y1, x2, y2, x3, y3) grey_filltriangle(x1, y1, x2, y2, x3, y3)
|
||||
#define MY_SET_FOREGROUND(fg) grey_set_foreground(fg)
|
||||
#define MY_GET_FOREGROUND() grey_get_foreground()
|
||||
|
||||
#else
|
||||
#define MYLCD(fn) rb->lcd_ ## fn
|
||||
|
@ -314,8 +314,8 @@ static const unsigned face_colors[6] =
|
|||
LCD_RGBPACK(255, 0, 0), LCD_RGBPACK(255, 0, 0), LCD_RGBPACK(0, 255, 0),
|
||||
LCD_RGBPACK(0, 255, 0), LCD_RGBPACK(0, 0, 255), LCD_RGBPACK(0, 0, 255)
|
||||
#elif defined(USE_GSLIB)
|
||||
GRAY_LIGHTGRAY, GRAY_LIGHTGRAY, GRAY_DARKGRAY,
|
||||
GRAY_DARKGRAY, GRAY_BLACK, GRAY_BLACK
|
||||
GREY_LIGHTGRAY, GREY_LIGHTGRAY, GREY_DARKGRAY,
|
||||
GREY_DARKGRAY, GREY_BLACK, GREY_BLACK
|
||||
#else
|
||||
LCD_LIGHTGRAY, LCD_LIGHTGRAY, LCD_DARKGRAY,
|
||||
LCD_DARKGRAY, LCD_BLACK, LCD_BLACK
|
||||
|
@ -490,7 +490,7 @@ void cleanup(void *parameter)
|
|||
(void)parameter;
|
||||
|
||||
#ifdef USE_GSLIB
|
||||
gray_release();
|
||||
grey_release();
|
||||
#elif defined HAVE_LCD_CHARCELLS
|
||||
pgfx_release();
|
||||
#endif
|
||||
|
@ -527,10 +527,9 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
|
|||
xlcd_init(rb);
|
||||
#elif defined(USE_GSLIB)
|
||||
gbuf = (unsigned char *)rb->plugin_get_buffer(&gbuf_size);
|
||||
if (gray_init(rb, gbuf, gbuf_size, true, LCD_WIDTH, LCD_HEIGHT, 3, 0, NULL)
|
||||
!= 3)
|
||||
if (!grey_init(rb, gbuf, gbuf_size, true, LCD_WIDTH, LCD_HEIGHT, NULL))
|
||||
{
|
||||
rb->splash(HZ, "Couldn't get grayscale buffer");
|
||||
rb->splash(HZ, "Couldn't init greyscale display");
|
||||
return PLUGIN_ERROR;
|
||||
}
|
||||
/* init lcd_ function pointers */
|
||||
|
@ -539,7 +538,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
|
|||
lcdfuncs.drawline = rb->lcd_drawline;
|
||||
lcdfuncs.putsxy = rb->lcd_putsxy;
|
||||
|
||||
gray_setfont(FONT_SYSFIXED);
|
||||
grey_setfont(FONT_SYSFIXED);
|
||||
#endif
|
||||
rb->lcd_setfont(FONT_SYSFIXED);
|
||||
#else /* LCD_CHARCELLS */
|
||||
|
@ -603,7 +602,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
|
|||
#ifdef USE_GSLIB
|
||||
if (mode_switch)
|
||||
{
|
||||
gray_show(mode == SOLID);
|
||||
grey_show(mode == SOLID);
|
||||
mode_switch = false;
|
||||
}
|
||||
#endif
|
||||
|
@ -744,7 +743,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
|
|||
if (++mode >= NUM_MODES)
|
||||
mode = 0;
|
||||
#ifdef USE_GSLIB
|
||||
mylcd = (mode == SOLID) ? &grayfuncs : &lcdfuncs;
|
||||
mylcd = (mode == SOLID) ? &greyfuncs : &lcdfuncs;
|
||||
mode_switch = true;
|
||||
#endif
|
||||
redraw = true;
|
||||
|
@ -785,7 +784,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
|
|||
}
|
||||
|
||||
#ifdef USE_GSLIB
|
||||
gray_release();
|
||||
grey_release();
|
||||
#elif defined(HAVE_LCD_CHARCELLS)
|
||||
pgfx_release();
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue