1
0
Fork 0
forked from len0rd/rockbox

Patch #1432941 - Colour support for Plasma by Mikael Magnusson

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8702 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Dave Chapman 2006-02-16 16:07:21 +00:00
parent 57580224a4
commit b0f05809d5
3 changed files with 62 additions and 5 deletions

View file

@ -26,8 +26,8 @@ metronome.c
#if CONFIG_LCD != LCD_IPOD2BPP #if CONFIG_LCD != LCD_IPOD2BPP
#ifndef HAVE_LCD_COLOR #ifndef HAVE_LCD_COLOR
fire.c fire.c
plasma.c
#endif #endif
plasma.c
jpeg.c jpeg.c
mandelbrot.c mandelbrot.c
#endif #endif

View file

@ -26,18 +26,26 @@
#include "plugin.h" #include "plugin.h"
#ifdef HAVE_LCD_BITMAP /* and also not for the Player */ #ifdef HAVE_LCD_BITMAP /* and also not for the Player */
#ifdef HAVE_LCD_COLOR
#include "xlcd.h"
#else
#include "gray.h" #include "gray.h"
#endif
PLUGIN_HEADER PLUGIN_HEADER
/******************************* Globals ***********************************/ /******************************* Globals ***********************************/
static struct plugin_api* rb; /* global api struct pointer */ static struct plugin_api* rb; /* global api struct pointer */
static unsigned char *gbuf;
static unsigned int gbuf_size = 0;
static unsigned char wave_array[256]; /* Pre calculated wave array */ static unsigned char wave_array[256]; /* Pre calculated wave array */
static unsigned char colours[256]; /* Smooth transition of shades */ static unsigned char colours[256]; /* Smooth transition of shades */
#ifdef HAVE_LCD_COLOR
static unsigned char colorbuffer[3*LCD_HEIGHT*LCD_WIDTH]; /* off screen buffer */
#else
static unsigned char graybuffer[LCD_HEIGHT*LCD_WIDTH]; /* off screen buffer */ static unsigned char graybuffer[LCD_HEIGHT*LCD_WIDTH]; /* off screen buffer */
static unsigned char *gbuf;
static unsigned int gbuf_size = 0;
#endif
static unsigned char sp1, sp2, sp3, sp4; /* Speed of plasma */ static unsigned char sp1, sp2, sp3, sp4; /* Speed of plasma */
static int plasma_frequency; static int plasma_frequency;
@ -52,6 +60,16 @@ static int plasma_frequency;
#define PLASMA_DECREASE_FREQUENCY BUTTON_DOWN #define PLASMA_DECREASE_FREQUENCY BUTTON_DOWN
#endif #endif
#ifdef HAVE_LCD_COLOR
#if CONFIG_KEYPAD == IAUDIO_X5_PAD
#define PLASMA_REGEN_COLORS BUTTON_SELECT
#elif CONFIG_KEYPAD == IPOD_4G_PAD
#define PLASMA_REGEN_COLORS BUTTON_SELECT
#elif CONFIG_KEYPAD == IRIVER_H300_PAD
#define PLASMA_REGEN_COLORS BUTTON_SELECT
#endif
#endif
#define WAV_AMP 90 #define WAV_AMP 90
@ -152,7 +170,9 @@ void cleanup(void *parameter)
{ {
(void)parameter; (void)parameter;
#ifndef HAVE_LCD_COLOR
gray_release(); gray_release();
#endif
rb->backlight_set_timeout(rb->global_settings->backlight_timeout); rb->backlight_set_timeout(rb->global_settings->backlight_timeout);
} }
@ -167,19 +187,32 @@ int main(void)
int shades, button, x, y; int shades, button, x, y;
unsigned char p1,p2,p3,p4,t1,t2,t3,t4, z; unsigned char p1,p2,p3,p4,t1,t2,t3,t4, z;
int n=0; int n=0;
#ifdef HAVE_LCD_COLOR
int time=0;
int redfactor=1, greenfactor=2, bluefactor=3;
int redphase=0, greenphase=50, bluephase=100; /* lower chance of gray at *
* regular intervals */
#endif
/*Generate the neccesary pre calced stuff*/ /*Generate the neccesary pre calced stuff*/
wave_table_generate(); wave_table_generate();
shades_generate(); shades_generate();
#ifdef HAVE_LCD_COLOR
shades = 256;
#else
/* get the remainder of the plugin buffer */ /* get the remainder of the plugin buffer */
gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size); gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size);
shades = gray_init(rb, gbuf, gbuf_size, false, LCD_WIDTH, LCD_HEIGHT/8, shades = gray_init(rb, gbuf, gbuf_size, false, LCD_WIDTH, LCD_HEIGHT/8,
32, NULL) + 1; 32, NULL) + 1;
#endif
#ifdef HAVE_LCD_COLOR
xlcd_init(rb);
#else
/* switch on grayscale overlay */ /* switch on grayscale overlay */
gray_show(true); gray_show(true);
#endif
sp1 = 4; sp1 = 4;
sp2 = 2; sp2 = 2;
sp3 = 4; sp3 = 4;
@ -198,7 +231,15 @@ int main(void)
{ {
z = wave_array[t1] + wave_array[t2] + wave_array[t3] z = wave_array[t1] + wave_array[t2] + wave_array[t3]
+ wave_array[t4]; + wave_array[t4];
#ifdef HAVE_LCD_COLOR
colorbuffer[n] = colours[(z+time*redfactor+redphase)%256];
++n;
colorbuffer[n] = colours[(z+time*greenfactor+greenphase)%256];
++n;
colorbuffer[n] = colours[(z+time*bluefactor+bluephase)%256];
#else
graybuffer[n] = colours[z]; graybuffer[n] = colours[z];
#endif
t3+=1; t3+=1;
t4+=2; t4+=2;
++n; ++n;
@ -211,7 +252,13 @@ int main(void)
p2-=sp2; p2-=sp2;
p3+=sp3; p3+=sp3;
p4-=sp4; p4-=sp4;
#ifdef HAVE_LCD_COLOR
time++;
xlcd_color_bitmap(colorbuffer, 0, 0, LCD_WIDTH, LCD_HEIGHT);
rb->lcd_update();
#else
gray_ub_gray_bitmap(graybuffer, 0, 0, LCD_WIDTH, LCD_HEIGHT); gray_ub_gray_bitmap(graybuffer, 0, 0, LCD_WIDTH, LCD_HEIGHT);
#endif
button = rb->button_get(false); button = rb->button_get(false);
@ -234,6 +281,16 @@ int main(void)
wave_table_generate(); wave_table_generate();
} }
break; break;
#ifdef HAVE_LCD_COLOR
case (PLASMA_REGEN_COLORS):
redfactor=rb->rand()%4;
greenfactor=rb->rand()%4;
bluefactor=rb->rand()%4;
redphase=rb->rand()%256;
greenphase=rb->rand()%256;
bluephase=rb->rand()%256;
break;
#endif
default: default:
if (rb->default_event_handler_ex(button, cleanup, NULL) if (rb->default_event_handler_ex(button, cleanup, NULL)

View file

@ -167,4 +167,4 @@ Imre Herceg
Seven Le Mesle Seven Le Mesle
Craig Bachelor Craig Bachelor
Nikolaj Christensen Nikolaj Christensen
Mikael Magnusson