Fix Air inversion
This commit is contained in:
parent
7de6526a1e
commit
640d4e9e3a
@ -258,16 +258,44 @@ const char * lensVertex = "void main(void)\
|
|||||||
gl_Position = ftransform();;\
|
gl_Position = ftransform();;\
|
||||||
gl_FrontColor = gl_Color;\
|
gl_FrontColor = gl_Color;\
|
||||||
}";
|
}";
|
||||||
const char * airFragment = "uniform sampler2D airX;\
|
const char * airVFragment = "uniform sampler2D airX;\
|
||||||
uniform sampler2D airY;\
|
uniform sampler2D airY;\
|
||||||
uniform sampler2D airP;\
|
uniform sampler2D airP;\
|
||||||
void main () {\
|
void main () {\
|
||||||
vec4 texX = texture2D(airX, gl_TexCoord[0].st);\
|
vec4 texX = texture2D(airX, gl_TexCoord[0].st);\
|
||||||
vec4 texY = texture2D(airY, gl_TexCoord[0].st);\
|
vec4 texY = texture2D(airY, gl_TexCoord[0].st);\
|
||||||
vec4 texP = texture2D(airP, gl_TexCoord[0].st);\
|
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);\
|
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_TexCoord[0] = gl_MultiTexCoord0;\
|
||||||
gl_Position = ftransform();;\
|
gl_Position = ftransform();;\
|
||||||
|
@ -33,7 +33,8 @@ SDL_Surface *sdl_scrn;
|
|||||||
int sdl_scale = 1;
|
int sdl_scale = 1;
|
||||||
|
|
||||||
#ifdef OGLR
|
#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
|
#endif
|
||||||
|
|
||||||
int emp_decor = 0;
|
int emp_decor = 0;
|
||||||
@ -1300,11 +1301,29 @@ void draw_air(pixel *vid)
|
|||||||
vid[(x*CELL+i) + (y*CELL+j)*(XRES+BARSIZE)] = c;
|
vid[(x*CELL+i) + (y*CELL+j)*(XRES+BARSIZE)] = c;
|
||||||
}
|
}
|
||||||
#else
|
#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 );
|
glEnable( GL_TEXTURE_2D );
|
||||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, partsFbo);
|
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, partsFbo);
|
||||||
|
|
||||||
glUseProgram(airProg);
|
glUseProgram(airProg);
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glBindTexture(GL_TEXTURE_2D, airVX);
|
glBindTexture(GL_TEXTURE_2D, airVX);
|
||||||
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, XRES/CELL, YRES/CELL, GL_RED, GL_FLOAT, vx);
|
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);
|
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
glBegin(GL_QUADS);
|
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);
|
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);
|
glVertex3f(XRES*sdl_scale, 0, 1.0);
|
||||||
glEnd();
|
glEnd();
|
||||||
|
|
||||||
@ -3966,20 +3985,50 @@ void loadShaders()
|
|||||||
glAttachShader( lensProg, fragmentShader );
|
glAttachShader( lensProg, fragmentShader );
|
||||||
glLinkProgram( lensProg );
|
glLinkProgram( lensProg );
|
||||||
|
|
||||||
//Air
|
//Air Velocity
|
||||||
vertexShader = glCreateShader(GL_VERTEX_SHADER);
|
vertexShader = glCreateShader(GL_VERTEX_SHADER);
|
||||||
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
|
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
|
||||||
|
|
||||||
glShaderSource( vertexShader, 1, &airVertex, NULL);
|
glShaderSource( vertexShader, 1, &airVVertex, NULL);
|
||||||
glShaderSource( fragmentShader, 1, &airFragment, NULL);
|
glShaderSource( fragmentShader, 1, &airVFragment, NULL);
|
||||||
|
|
||||||
glCompileShader( vertexShader );
|
glCompileShader( vertexShader );
|
||||||
glCompileShader( fragmentShader );
|
glCompileShader( fragmentShader );
|
||||||
|
|
||||||
airProg = glCreateProgram();
|
airProg_Velocity = glCreateProgram();
|
||||||
glAttachShader( airProg, vertexShader );
|
glAttachShader( airProg_Velocity, vertexShader );
|
||||||
glAttachShader( airProg, fragmentShader );
|
glAttachShader( airProg_Velocity, fragmentShader );
|
||||||
glLinkProgram( airProg );
|
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
|
#endif
|
||||||
int draw_debug_info(pixel* vid, int lm, int lx, int ly, int cx, int cy, int line_x, int line_y)
|
int draw_debug_info(pixel* vid, int lm, int lx, int ly, int cx, int cy, int line_x, int line_y)
|
||||||
|
Reference in New Issue
Block a user