Fix Air inversion

This commit is contained in:
Simon Robertshaw 2011-11-02 19:37:52 +00:00
parent 7de6526a1e
commit 640d4e9e3a
2 changed files with 96 additions and 19 deletions

View File

@ -258,7 +258,7 @@ const char * lensVertex = "void main(void)\
gl_Position = ftransform();;\
gl_FrontColor = gl_Color;\
}";
const char * airFragment = "uniform sampler2D airX;\
const char * airVFragment = "uniform sampler2D airX;\
uniform sampler2D airY;\
uniform sampler2D airP;\
void main () {\
@ -267,7 +267,35 @@ void main () {\
vec4 texP = texture2D(airP, gl_TexCoord[0].st);\
gl_FragColor = vec4(abs(texX.r)/2.0, texP.b/2.0, abs(texY.g)/2.0, 1.0);\
}";
const char * airVertex = "void main(void)\
const char * airVVertex = "void main(void)\
{\
gl_TexCoord[0] = gl_MultiTexCoord0;\
gl_Position = ftransform();;\
gl_FrontColor = gl_Color;\
}";
const char * airPFragment = "uniform sampler2D airX;\
uniform sampler2D airY;\
uniform sampler2D airP;\
void main () {\
vec4 texP = texture2D(airP, gl_TexCoord[0].st);\
gl_FragColor = vec4(max(texP.b/2.0, 0), 0, abs(min(texP.b/2.0, 0)), 1.0);\
}";
const char * airPVertex = "void main(void)\
{\
gl_TexCoord[0] = gl_MultiTexCoord0;\
gl_Position = ftransform();;\
gl_FrontColor = gl_Color;\
}";
const char * airCFragment = "uniform sampler2D airX;\
uniform sampler2D airY;\
uniform sampler2D airP;\
void main () {\
vec4 texX = texture2D(airX, gl_TexCoord[0].st);\
vec4 texY = texture2D(airY, gl_TexCoord[0].st);\
vec4 texP = texture2D(airP, gl_TexCoord[0].st);\
gl_FragColor = vec4(max(texP.b/2.0, 0), 0, abs(min(texP.b/2.0, 0)), 1.0) + vec4(abs(texX.r)/8.0, abs(texX.r)/8.0, abs(texX.r)/8.0, 1.0) + vec4(abs(texY.g)/8.0, abs(texY.g)/8.0, abs(texY.g)/8.0, 1.0);\
}";
const char * airCVertex = "void main(void)\
{\
gl_TexCoord[0] = gl_MultiTexCoord0;\
gl_Position = ftransform();;\

View File

@ -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,6 +1301,24 @@ 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);
@ -1321,13 +1340,13 @@ void draw_air(pixel *vid)
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glBegin(GL_QUADS);
glTexCoord2d(1, 0);
glVertex3f(XRES*sdl_scale, YRES*sdl_scale, 1.0);
glTexCoord2d(0, 0);
glVertex3f(0, YRES*sdl_scale, 1.0);
glTexCoord2d(0, 1);
glVertex3f(0, 0, 1.0);
glTexCoord2d(1, 1);
glVertex3f(XRES*sdl_scale, 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, 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, &airVertex, NULL);
glShaderSource( fragmentShader, 1, &airFragment, NULL);
glShaderSource( vertexShader, 1, &airVVertex, NULL);
glShaderSource( fragmentShader, 1, &airVFragment, NULL);
glCompileShader( vertexShader );
glCompileShader( fragmentShader );
airProg = glCreateProgram();
glAttachShader( airProg, vertexShader );
glAttachShader( airProg, fragmentShader );
glLinkProgram( airProg );
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, &airCVertex, NULL);
glShaderSource( fragmentShader, 1, &airCFragment, NULL);
glCompileShader( vertexShader );
glCompileShader( fragmentShader );
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)