diff options
Diffstat (limited to 'src/post/goom/ifs_display.c')
-rw-r--r-- | src/post/goom/ifs_display.c | 168 |
1 files changed, 75 insertions, 93 deletions
diff --git a/src/post/goom/ifs_display.c b/src/post/goom/ifs_display.c index c3d3783f3..ed570f59a 100644 --- a/src/post/goom/ifs_display.c +++ b/src/post/goom/ifs_display.c @@ -1,61 +1,11 @@ #include "ifs.h" #include "goom_config.h" -#include "xineutils.h" -extern volatile int use_asm; - -#ifdef MMX -static void -ifs_fun_mmx(guint32 * data, guint32 * back, int width, int height, - int increment, int nbpt, IFSPoint *points, int couleursl) -{ - int i; - - movd_m2r(couleursl,mm1); - for (i = 0; i < nbpt; i += increment) { - int x = points[i].x; - int y = points[i].y; - - if ((x < width) && (y < height) && (x > 0) && (y > 0)) { - int pos = x + (y * width); - movd_m2r(back[pos],mm0); - paddusb_r2r(mm1,mm0); - movd_r2m(mm0,data[pos]); - } - } - emms(); -} +#ifdef HAVE_MMX +#include "mmx.h" #endif -static void -ifs_fun_c(guint32 * data, guint32 * back, int width, int height, - int increment, int nbpt, IFSPoint *points, int couleursl) -{ - int i; - for (i = 0; i < nbpt; i += increment) { - int x = (int) points[i].x & 0x7fffffff; - int y = (int) points[i].y & 0x7fffffff; - - if ((x < width) && (y < height)) { - int pos = x + (int) (y * width); - int tra = 0, i = 0; - unsigned char *bra = (unsigned char *) &back[pos]; - unsigned char *dra = (unsigned char *) &data[pos]; - unsigned char *cra = (unsigned char *) &couleursl; - - for (; i < 4; i++) { - tra = *cra; - tra += *bra; - if (tra > 255) - tra = 255; - *dra = tra; - ++dra; - ++cra; - ++bra; - } - } - } -} +#include "goom_tools.h" void ifs_update (guint32 * data, guint32 * back, int width, int height, @@ -100,13 +50,45 @@ ifs_update (guint32 * data, guint32 * back, int width, int height, points = draw_ifs (&nbpt); nbpt--; -#ifdef MMX - if (use_asm) - ifs_fun_mmx(data, back, width, height, increment, nbpt, points, couleursl); - else - ifs_fun_c(data, back, width, height, increment, nbpt, points, couleursl); +#ifdef HAVE_MMX + movd_m2r (couleursl, mm1); + punpckldq_r2r (mm1, mm1); + for (i = 0; i < nbpt; i += increment) { + int x = points[i].x; + int y = points[i].y; + + if ((x < width) && (y < height) && (x > 0) && (y > 0)) { + int pos = x + (y * width); + movd_m2r (back[pos], mm0); + paddusb_r2r (mm1, mm0); + movd_r2m (mm0, data[pos]); + } + } + emms();/*__asm__ __volatile__ ("emms");*/ #else - ifs_fun_c(data, back, width, height, increment, nbpt, points, couleursl); + for (i = 0; i < nbpt; i += increment) { + int x = (int) points[i].x & 0x7fffffff; + int y = (int) points[i].y & 0x7fffffff; + + if ((x < width) && (y < height)) { + int pos = x + (int) (y * width); + int tra = 0, i = 0; + unsigned char *bra = (unsigned char *) &back[pos]; + unsigned char *dra = (unsigned char *) &data[pos]; + unsigned char *cra = (unsigned char *) &couleursl; + + for (; i < 4; i++) { + tra = *cra; + tra += *bra; + if (tra > 255) + tra = 255; + *dra = tra; + ++dra; + ++cra; + ++bra; + } + } + } #endif /*MMX*/ justChanged--; @@ -119,17 +101,17 @@ ifs_update (guint32 * data, guint32 * back, int width, int height, col[BLEU] += v[BLEU]; if (col[BLEU] > 255) { col[BLEU] = 255; - v[BLEU] = -(rand () % 4) - 1; + v[BLEU] = -(RAND() % 4) - 1; } if (col[BLEU] < 32) { col[BLEU] = 32; - v[BLEU] = (rand () % 4) + 1; + v[BLEU] = (RAND() % 4) + 1; } col[VERT] += v[VERT]; if (col[VERT] > 200) { col[VERT] = 200; - v[VERT] = -(rand () % 3) - 2; + v[VERT] = -(RAND() % 3) - 2; } if (col[VERT] > col[BLEU]) { col[VERT] = col[BLEU]; @@ -137,33 +119,33 @@ ifs_update (guint32 * data, guint32 * back, int width, int height, } if (col[VERT] < 32) { col[VERT] = 32; - v[VERT] = (rand () % 3) + 2; + v[VERT] = (RAND() % 3) + 2; } col[ROUGE] += v[ROUGE]; if (col[ROUGE] > 64) { col[ROUGE] = 64; - v[ROUGE] = -(rand () % 4) - 1; + v[ROUGE] = -(RAND () % 4) - 1; } if (col[ROUGE] < 0) { col[ROUGE] = 0; - v[ROUGE] = (rand () % 4) + 1; + v[ROUGE] = (RAND () % 4) + 1; } col[ALPHA] += v[ALPHA]; if (col[ALPHA] > 0) { col[ALPHA] = 0; - v[ALPHA] = -(rand () % 4) - 1; + v[ALPHA] = -(RAND () % 4) - 1; } if (col[ALPHA] < 0) { col[ALPHA] = 0; - v[ALPHA] = (rand () % 4) + 1; + v[ALPHA] = (RAND () % 4) + 1; } if (((col[VERT] > 32) && (col[ROUGE] < col[VERT] + 40) && (col[VERT] < col[ROUGE] + 20) && (col[BLEU] < 64) - && (rand () % 20 == 0)) && (justChanged < 0)) { - mode = rand () % 3 ? MOD_FEU : MOD_MERVER; + && (RAND () % 20 == 0)) && (justChanged < 0)) { + mode = RAND () % 3 ? MOD_FEU : MOD_MERVER; justChanged = 250; } } @@ -171,17 +153,17 @@ ifs_update (guint32 * data, guint32 * back, int width, int height, col[BLEU] += v[BLEU]; if (col[BLEU] > 128) { col[BLEU] = 128; - v[BLEU] = -(rand () % 4) - 1; + v[BLEU] = -(RAND () % 4) - 1; } if (col[BLEU] < 16) { col[BLEU] = 16; - v[BLEU] = (rand () % 4) + 1; + v[BLEU] = (RAND () % 4) + 1; } col[VERT] += v[VERT]; if (col[VERT] > 200) { col[VERT] = 200; - v[VERT] = -(rand () % 3) - 2; + v[VERT] = -(RAND () % 3) - 2; } if (col[VERT] > col[ALPHA]) { col[VERT] = col[ALPHA]; @@ -189,33 +171,33 @@ ifs_update (guint32 * data, guint32 * back, int width, int height, } if (col[VERT] < 32) { col[VERT] = 32; - v[VERT] = (rand () % 3) + 2; + v[VERT] = (RAND () % 3) + 2; } col[ROUGE] += v[ROUGE]; if (col[ROUGE] > 128) { col[ROUGE] = 128; - v[ROUGE] = -(rand () % 4) - 1; + v[ROUGE] = -(RAND () % 4) - 1; } if (col[ROUGE] < 0) { col[ROUGE] = 0; - v[ROUGE] = (rand () % 4) + 1; + v[ROUGE] = (RAND () % 4) + 1; } col[ALPHA] += v[ALPHA]; if (col[ALPHA] > 255) { col[ALPHA] = 255; - v[ALPHA] = -(rand () % 4) - 1; + v[ALPHA] = -(RAND () % 4) - 1; } if (col[ALPHA] < 0) { col[ALPHA] = 0; - v[ALPHA] = (rand () % 4) + 1; + v[ALPHA] = (RAND () % 4) + 1; } if (((col[VERT] > 32) && (col[ROUGE] < col[VERT] + 40) && (col[VERT] < col[ROUGE] + 20) && (col[BLEU] < 64) - && (rand () % 20 == 0)) && (justChanged < 0)) { - mode = rand () % 3 ? MOD_FEU : MOD_MER; + && (RAND () % 20 == 0)) && (justChanged < 0)) { + mode = RAND () % 3 ? MOD_FEU : MOD_MER; justChanged = 250; } } @@ -224,57 +206,57 @@ ifs_update (guint32 * data, guint32 * back, int width, int height, col[BLEU] += v[BLEU]; if (col[BLEU] > 64) { col[BLEU] = 64; - v[BLEU] = -(rand () % 4) - 1; + v[BLEU] = -(RAND () % 4) - 1; } if (col[BLEU] < 0) { col[BLEU] = 0; - v[BLEU] = (rand () % 4) + 1; + v[BLEU] = (RAND () % 4) + 1; } col[VERT] += v[VERT]; if (col[VERT] > 200) { col[VERT] = 200; - v[VERT] = -(rand () % 3) - 2; + v[VERT] = -(RAND () % 3) - 2; } if (col[VERT] > col[ROUGE] + 20) { col[VERT] = col[ROUGE] + 20; - v[VERT] = -(rand () % 3) - 2; - v[ROUGE] = (rand () % 4) + 1; - v[BLEU] = (rand () % 4) + 1; + v[VERT] = -(RAND () % 3) - 2; + v[ROUGE] = (RAND () % 4) + 1; + v[BLEU] = (RAND () % 4) + 1; } if (col[VERT] < 0) { col[VERT] = 0; - v[VERT] = (rand () % 3) + 2; + v[VERT] = (RAND () % 3) + 2; } col[ROUGE] += v[ROUGE]; if (col[ROUGE] > 255) { col[ROUGE] = 255; - v[ROUGE] = -(rand () % 4) - 1; + v[ROUGE] = -(RAND () % 4) - 1; } if (col[ROUGE] > col[VERT] + 40) { col[ROUGE] = col[VERT] + 40; - v[ROUGE] = -(rand () % 4) - 1; + v[ROUGE] = -(RAND () % 4) - 1; } if (col[ROUGE] < 0) { col[ROUGE] = 0; - v[ROUGE] = (rand () % 4) + 1; + v[ROUGE] = (RAND () % 4) + 1; } col[ALPHA] += v[ALPHA]; if (col[ALPHA] > 0) { col[ALPHA] = 0; - v[ALPHA] = -(rand () % 4) - 1; + v[ALPHA] = -(RAND () % 4) - 1; } if (col[ALPHA] < 0) { col[ALPHA] = 0; - v[ALPHA] = (rand () % 4) + 1; + v[ALPHA] = (RAND () % 4) + 1; } if (((col[ROUGE] < 64) && (col[VERT] > 32) && (col[VERT] < col[BLEU]) && (col[BLEU] > 32) - && (rand () % 20 == 0)) && (justChanged < 0)) { - mode = rand () % 2 ? MOD_MER : MOD_MERVER; + && (RAND () % 20 == 0)) && (justChanged < 0)) { + mode = RAND () % 2 ? MOD_MER : MOD_MERVER; justChanged = 250; } } |