summaryrefslogtreecommitdiff
path: root/src/post/goom/ifs_display.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/post/goom/ifs_display.c')
-rw-r--r--src/post/goom/ifs_display.c168
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;
}
}