summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2011-11-02 19:37:52 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2011-11-02 19:37:52 (GMT)
commit640d4e9e3a1aee1f99a4e43025a1301ec19bfdc1 (patch)
tree6384cc9919492f44d95c59640ade8c0ce393154d /src
parent7de6526a1e545d258a0c83ceab7acc6ca89d6b98 (diff)
downloadpowder-640d4e9e3a1aee1f99a4e43025a1301ec19bfdc1.zip
powder-640d4e9e3a1aee1f99a4e43025a1301ec19bfdc1.tar.gz
Fix Air inversion
Diffstat (limited to 'src')
-rw-r--r--src/graphics.c77
1 files changed, 63 insertions, 14 deletions
diff --git a/src/graphics.c b/src/graphics.c
index 0d2167d..baba02c 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -33,7 +33,8 @@ SDL_Surface *sdl_scrn;
int sdl_scale = 1;
#ifdef OGLR
-GLuint airProg, zoomTex, vidBuf, airBuf, fireAlpha, glowAlpha, blurAlpha, fireProg, partsFboTex, partsFbo, lensProg, partsTFX, partsTFY, airPV, airVY, airVX;
+GLuint zoomTex, vidBuf, airBuf, fireAlpha, glowAlpha, blurAlpha, partsFboTex, partsFbo, partsTFX, partsTFY, airPV, airVY, airVX;
+GLuint fireProg, airProg_Pressure, airProg_Velocity, airProg_Cracker, lensProg;
#endif
int emp_decor = 0;
@@ -1300,11 +1301,29 @@ void draw_air(pixel *vid)
vid[(x*CELL+i) + (y*CELL+j)*(XRES+BARSIZE)] = c;
}
#else
+ GLuint airProg;
+ if(cmode == CM_CRACK)
+ {
+ airProg = airProg_Cracker;
+ }
+ else if(cmode == CM_VEL)
+ {
+ airProg = airProg_Velocity;
+ }
+ else if(cmode == CM_PRESS)
+ {
+ airProg = airProg_Pressure;
+ }
+ else
+ {
+ return;
+ }
+
glEnable( GL_TEXTURE_2D );
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, partsFbo);
- glUseProgram(airProg);
-
+ glUseProgram(airProg);
+
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, airVX);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, XRES/CELL, YRES/CELL, GL_RED, GL_FLOAT, vx);
@@ -1321,13 +1340,13 @@ void draw_air(pixel *vid)
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glBegin(GL_QUADS);
- glTexCoord2d(1, 0);
+ glTexCoord2d(1, 1);
glVertex3f(XRES*sdl_scale, YRES*sdl_scale, 1.0);
- glTexCoord2d(0, 0);
- glVertex3f(0, YRES*sdl_scale, 1.0);
glTexCoord2d(0, 1);
+ glVertex3f(0, YRES*sdl_scale, 1.0);
+ glTexCoord2d(0, 0);
glVertex3f(0, 0, 1.0);
- glTexCoord2d(1, 1);
+ glTexCoord2d(1, 0);
glVertex3f(XRES*sdl_scale, 0, 1.0);
glEnd();
@@ -3966,20 +3985,50 @@ void loadShaders()
glAttachShader( lensProg, fragmentShader );
glLinkProgram( lensProg );
- //Air
+ //Air Velocity
+ vertexShader = glCreateShader(GL_VERTEX_SHADER);
+ fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
+
+ glShaderSource( vertexShader, 1, &airVVertex, NULL);
+ glShaderSource( fragmentShader, 1, &airVFragment, NULL);
+
+ glCompileShader( vertexShader );
+ glCompileShader( fragmentShader );
+
+ airProg_Velocity = glCreateProgram();
+ glAttachShader( airProg_Velocity, vertexShader );
+ glAttachShader( airProg_Velocity, fragmentShader );
+ glLinkProgram( airProg_Velocity );
+
+ //Air Pressure
+ vertexShader = glCreateShader(GL_VERTEX_SHADER);
+ fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
+
+ glShaderSource( vertexShader, 1, &airPVertex, NULL);
+ glShaderSource( fragmentShader, 1, &airPFragment, NULL);
+
+ glCompileShader( vertexShader );
+ glCompileShader( fragmentShader );
+
+ airProg_Pressure = glCreateProgram();
+ glAttachShader( airProg_Pressure, vertexShader );
+ glAttachShader( airProg_Pressure, fragmentShader );
+ glLinkProgram( airProg_Pressure );
+
+ //Air cracker
vertexShader = glCreateShader(GL_VERTEX_SHADER);
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource( vertexShader, 1, &airVertex, NULL);
- glShaderSource( fragmentShader, 1, &airFragment, NULL);
+ glShaderSource( vertexShader, 1, &airCVertex, NULL);
+ glShaderSource( fragmentShader, 1, &airCFragment, NULL);
glCompileShader( vertexShader );
glCompileShader( fragmentShader );
- airProg = glCreateProgram();
- glAttachShader( airProg, vertexShader );
- glAttachShader( airProg, fragmentShader );
- glLinkProgram( airProg );
+ airProg_Cracker = glCreateProgram();
+ glAttachShader( airProg_Cracker, vertexShader );
+ glAttachShader( airProg_Cracker, fragmentShader );
+ glLinkProgram( airProg_Cracker );
}
#endif
int draw_debug_info(pixel* vid, int lm, int lx, int ly, int cx, int cy, int line_x, int line_y)