From 1403faf737057ccd4ab0c55bee72a9d93525c174 Mon Sep 17 00:00:00 2001 From: Hans-Gert Dahmen Date: Sun, 30 Oct 2011 03:07:13 +0000 Subject: [PATCH] removed ambiguous (wannabe) multi-platform lib --- animations/fpmath_patterns.c | 60 ++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/animations/fpmath_patterns.c b/animations/fpmath_patterns.c index f4fccfb..a47e0d9 100644 --- a/animations/fpmath_patterns.c +++ b/animations/fpmath_patterns.c @@ -4,6 +4,7 @@ #include "../pixel.h" #include "../util.h" #include "fpmath_patterns.h" +#include #define DOUBLE_BUFFERING #ifdef DOUBLE_BUFFERING @@ -91,6 +92,63 @@ static void fpmath_pattern(double const t_start, #ifdef ANIMATION_PLASMA #define PLASMA_X (1.0 / (NUM_COLS / (2.0 * M_PI))) +#define INTEGERFUN 1 +#ifdef INTEGERFUN + +//XXX this is inefficient, as we could as this is a 2*PI sine and we'd really need only half of it - hansi +const uint8_t sine_table[32] = +{ + 128,152,176,198,218,234,245,253,255,253,245,234,218,198,176,152, + 128,103,79,57,37,21,10,2,0,2,10,21,37,57,79,103 +}; + +uint8_t sin_i(uint8_t phase) +{ + return sine_table[phase >> 3]; +} + +#define SQRT0x8000 181 +#define SQRT25x3 0x45483 +void plasma(void) +{ + uint8_t sqx, x, y, scale = 3, off = 0; + +#ifdef DOUBLE_BUFFERING + // double buffering to reduce half painted pictures + unsigned char pixmap_buffer[NUMPLANE][NUM_ROWS][LINEBYTES]; +#endif + + while (off < 200) + { + for(x = 0; x < NUM_COLS; x++) + { + sqx = x*x; + for(y = 0; y < NUM_ROWS; y++) + { + unsigned char const mask = shl_table[y % 8U]; + unsigned char const color = (uint16_t)sin_i(sqrt((uint16_t)sqx + ((uint16_t)y*(uint16_t)y)) * (255*255 / ((scale * NUM_COLS) / 2)) + off) * (NUMPLANE - 1) / 255 ; + unsigned char const x_8 = x / 8u; + for (unsigned char p = 0; p < NUMPLANE; ++p) + { + if (p <= (color - 1)) + { + BUFFER[p][y][x_8] |= mask; + } + else + { + BUFFER[p][y][x_8] &= ~mask; + } + } + } + } + +#ifdef DOUBLE_BUFFERING + memcpy(pixmap, pixmap_buffer, sizeof(pixmap)); +#endif + } +} + +#else /** * Draws a simple plasma like pattern. */ @@ -123,6 +181,8 @@ void plasma(void) } #endif +#endif /* INTEGERFUN */ + #ifdef ANIMATION_PSYCHEDELIC /**