summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPhilip <philip@philip-linuxlaptop.(none)>2010-11-09 00:59:03 (GMT)
committer Philip <philip@philip-linuxlaptop.(none)>2010-11-09 00:59:03 (GMT)
commit16265e3736d5cf9e5620d423e03ed1df0ede50eb (patch)
treefad9a64e776b22660536d797737c6489af4e4266 /src
parentb8ed9035f7d3af3b1b7e8d404b277abcb53df083 (diff)
downloadpowder-16265e3736d5cf9e5620d423e03ed1df0ede50eb.zip
powder-16265e3736d5cf9e5620d423e03ed1df0ede50eb.tar.gz
made faster
Diffstat (limited to 'src')
-rw-r--r--src/graphics.c6
-rw-r--r--src/misc.c8
-rw-r--r--src/powder.c64
3 files changed, 46 insertions, 32 deletions
diff --git a/src/graphics.c b/src/graphics.c
index e108e99..9ac815b 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -757,7 +757,7 @@ void draw_menu(pixel *vid_buf, int i, int hover)
}
}
-#ifdef WIN32
+#if defined(WIN32) && !defined(__GNUC__)
_inline void drawpixel(pixel *vid, int x, int y, int r, int g, int b, int a)
#else
inline void drawpixel(pixel *vid, int x, int y, int r, int g, int b, int a)
@@ -776,7 +776,7 @@ inline void drawpixel(pixel *vid, int x, int y, int r, int g, int b, int a)
vid[y*(XRES+BARSIZE)+x] = PIXRGB(r,g,b);
}
-#ifdef WIN32
+#if defined(WIN32) && !defined(__GNUC__)
_inline int drawchar(pixel *vid, int x, int y, int c, int r, int g, int b, int a)
#else
inline int drawchar(pixel *vid, int x, int y, int c, int r, int g, int b, int a)
@@ -1030,7 +1030,7 @@ int textwidthx(char *s, int w)
return n;
}
-#ifdef WIN32
+#if defined(WIN32) && !defined(__GNUC__)
_inline void blendpixel(pixel *vid, int x, int y, int r, int g, int b, int a)
#else
inline void blendpixel(pixel *vid, int x, int y, int r, int g, int b, int a)
diff --git a/src/misc.c b/src/misc.c
index 7c551e2..87615cd 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -7,7 +7,7 @@
#include "graphics.h"
//Signum function
-#ifdef WIN32
+#if defined(WIN32) && !defined(__GNUC__)
_inline int isign(float i)
#else
inline int isign(float i)
@@ -20,7 +20,7 @@ inline int isign(float i)
return 0;
}
-#ifdef WIN32
+#if defined(WIN32) && !defined(__GNUC__)
_inline unsigned clamp_flt(float f, float min, float max)
#else
inline unsigned clamp_flt(float f, float min, float max)
@@ -33,7 +33,7 @@ inline unsigned clamp_flt(float f, float min, float max)
return (int)(255.0f*(f-min)/(max-min));
}
-#ifdef WIN32
+#if defined(WIN32) && !defined(__GNUC__)
_inline float restrict_flt(float f, float min, float max)
#else
inline float restrict_flt(float f, float min, float max)
@@ -280,4 +280,4 @@ int cpu_check(void)
#endif
#endif
return 0;
-} \ No newline at end of file
+}
diff --git a/src/powder.c b/src/powder.c
index 71e3031..1c63255 100644
--- a/src/powder.c
+++ b/src/powder.c
@@ -354,7 +354,7 @@ void kill_part(int i)
pfree = i;
}
-#ifdef WIN32
+#if defined(WIN32) && !defined(__GNUC__)
_inline int create_part(int p, int x, int y, int t)
#else
inline int create_part(int p, int x, int y, int t)
@@ -650,7 +650,7 @@ static void create_cherenkov_photon(int pp)
parts[i].vy *= r;
}
-#ifdef WIN32
+#if defined(WIN32) && !defined(__GNUC__)
_inline void delete_part(int x, int y)
#else
inline void delete_part(int x, int y)
@@ -672,7 +672,7 @@ inline void delete_part(int x, int y)
return;
}
-#ifdef WIN32
+#if defined(WIN32) && !defined(__GNUC__)
_inline int is_wire(int x, int y)
#else
inline int is_wire(int x, int y)
@@ -681,7 +681,7 @@ inline int is_wire(int x, int y)
return bmap[y][x]==6 || bmap[y][x]==7 || bmap[y][x]==3 || bmap[y][x]==8 || bmap[y][x]==11 || bmap[y][x]==12;
}
-#ifdef WIN32
+#if defined(WIN32) && !defined(__GNUC__)
_inline int is_wire_off(int x, int y)
#else
inline int is_wire_off(int x, int y)
@@ -772,7 +772,7 @@ void set_emap(int x, int y)
}
}
-#ifdef WIN32
+#if defined(WIN32) && !defined(__GNUC__)
_inline int parts_avg(int ci, int ni)
#else
inline int parts_avg(int ci, int ni)
@@ -845,24 +845,42 @@ void update_particles_i(pixel *vid, int start, int inc)
for(int nnx=-1;nnx<2;nnx++)
for(int nny=-1;nny<2;nny++)
{
- if(ny+nny<4&&nx+nnx<4)//any way to make wrapping code smaller?
+ if(ny+nny<4&&nx+nnx<4){//any way to make wrapping code smaller?
gol2[XRES-5][YRES-5][golnum] ++;
- else if(ny+nny<4&&nx+nnx>=XRES-4)
+ gol2[XRES-5][YRES-5][0] ++;
+ }
+ else if(ny+nny<4&&nx+nnx>=XRES-4){
gol2[4][YRES-5][golnum] ++;
- else if(ny+nny>=YRES-4&&nx+nnx<4)
+ gol2[4][YRES-5][0] ++;
+ }
+ else if(ny+nny>=YRES-4&&nx+nnx<4){
gol2[XRES-5][4][golnum] ++;
- else if(nx+nnx<4)
+ gol2[XRES-5][4][0] ++;
+ }
+ else if(nx+nnx<4){
gol2[XRES-5][ny+nny][golnum] ++;
- else if(ny+nny<4)
+ gol2[XRES-5][ny+nny][0] ++;
+ }
+ else if(ny+nny<4){
gol2[nx+nnx][YRES-5][golnum] ++;
- else if(ny+nny>=YRES-4&&nx+nnx>=XRES-4)
+ gol2[nx+nnx][YRES-5][0] ++;
+ }
+ else if(ny+nny>=YRES-4&&nx+nnx>=XRES-4){
gol2[4][4][golnum] ++;
- else if(ny+nny>=YRES-4)
+ gol2[4][4][0] ++;
+ }
+ else if(ny+nny>=YRES-4){
gol2[nx+nnx][4][golnum] ++;
- else if(nx+nnx>=XRES-4)
+ gol2[nx+nnx][4][0] ++;
+ }
+ else if(nx+nnx>=XRES-4){
gol2[4][ny+nny][golnum] ++;
- else
+ gol2[4][ny+nny][0] ++;
+ }
+ else{
gol2[nx+nnx][ny+nny][golnum] ++;
+ gol2[nx+nnx][ny+nny][0] ++;
+ }
}
@@ -872,15 +890,11 @@ void update_particles_i(pixel *vid, int start, int inc)
for(nx=4;nx<XRES-4;nx++)
for(ny=4;ny<YRES-4;ny++)
{
- int neighbors = 0;
+ int neighbors = gol2[nx][ny][0];
+ if(neighbors==0)
+ continue;
for(int golnum = 1;golnum<NGOL;golnum++)
- {
- neighbors += gol2[nx][ny][golnum];
- }
- if(neighbors!=0)
- {
- for(int golnum = 1;golnum<NGOL;golnum++)
- for(int goldelete = 1;goldelete<10;goldelete++)
+ for(int goldelete = 1;goldelete<10;goldelete++)
{
if(neighbors==goldelete&&gol[nx][ny]==0&&grule[golnum][goldelete]>=2&&gol2[nx][ny][golnum]>=(goldelete%2)+goldelete/2)
{
@@ -889,9 +903,9 @@ void update_particles_i(pixel *vid, int start, int inc)
else if(neighbors==goldelete&&gol[nx][ny]==golnum&&(grule[golnum][goldelete-1]==0||grule[golnum][goldelete-1]==2))
parts[pmap[ny][nx]>>8].type = PT_NONE;
}
- for(int z = 1;z<NGOL;z++)
+ gol2[nx][ny][0] = 0;
+ for(int z = 1;z<NGOL;z++)
gol2[nx][ny][z] = 0;
- }
}
}
if(CGOL==0)
@@ -1019,7 +1033,7 @@ void update_particles_i(pixel *vid, int start, int inc)
}
// interpolator
-#ifdef WIN32
+#if defined(WIN32) && !defined(__GNUC__)
mv = max(fabsf(parts[i].vx), fabsf(parts[i].vy));
#else
mv = fmaxf(fabsf(parts[i].vx), fabsf(parts[i].vy));