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:
parent
57580224a4
commit
b0f05809d5
3 changed files with 62 additions and 5 deletions
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -167,4 +167,4 @@ Imre Herceg
|
||||||
Seven Le Mesle
|
Seven Le Mesle
|
||||||
Craig Bachelor
|
Craig Bachelor
|
||||||
Nikolaj Christensen
|
Nikolaj Christensen
|
||||||
|
Mikael Magnusson
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue