From 014c1fbad669b0cf1abd881e696f0c7e432b3707 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Sat, 22 Oct 2011 19:24:32 +0100 Subject: [PATCH] Embed shaders --- includes/graphics.h | 44 ++++++++++++++++++++++++++++++++++++++++++-- src/graphics.c | 17 +++++++---------- 2 files changed, 49 insertions(+), 12 deletions(-) diff --git a/includes/graphics.h b/includes/graphics.h index a5703964f..962a04ee6 100644 --- a/includes/graphics.h +++ b/includes/graphics.h @@ -193,14 +193,54 @@ void ogl_blit(int x, int y, int w, int h, pixel *src, int pitch, int scale); #endif #ifdef INCLUDE_SHADERS -const char * fragment = "uniform sampler2D fireAlpha;\ +const char * fireFragment = "uniform sampler2D fireAlpha;\ void main () {\ vec4 texColor = texture2D(fireAlpha, gl_PointCoord);\ gl_FragColor = vec4(gl_Color.rgb, texColor.a*gl_Color.a);\ }"; -const char * vertex = "void main(void)\ +const char * fireVertex = "void main(void)\ {\ gl_Position = ftransform();;\ gl_FrontColor = gl_Color;\ }"; +const char * lensFragment = "uniform sampler2D pTex;\ +uniform sampler2D tfX;\ +uniform sampler2D tfY;\ +uniform float xres = 612.0;\ +uniform float yres = 384.0;\ +void main () {\ + vec4 transformX = texture2D(tfX, vec2(gl_TexCoord[0].s, -gl_TexCoord[0].t));\ + vec4 transformY = -texture2D(tfY, vec2(gl_TexCoord[0].s, -gl_TexCoord[0].t));\ + transformX.r /= xres;\ + transformY.g /= yres;\ + vec4 texColor = vec4(\ + texture2D(pTex, gl_TexCoord[0].st-vec2(transformX.r*0.75, transformY.g*0.75)).r,\ + texture2D(pTex, gl_TexCoord[0].st-vec2(transformX.r*0.875, transformY.g*0.875)).g,\ + texture2D(pTex, gl_TexCoord[0].st-vec2(transformX.r, transformY.g)).b,\ + 1.0\ + );\ + gl_FragColor = texColor;\ +}"; +const char * lensVertex = "void main(void)\ +{\ + gl_TexCoord[0] = gl_MultiTexCoord0;\ + gl_Position = ftransform();;\ + gl_FrontColor = gl_Color;\ +}"; +const char * airFragment = "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(abs(texX.r)/2.0, texP.b/2.0, abs(texY.g)/2.0, 1.0);\ +}"; +const char * airVertex = "void main(void)\ +{\ + gl_TexCoord[0] = gl_MultiTexCoord0;\ + gl_Position = ftransform();;\ + gl_FrontColor = gl_Color;\ +}"; + #endif diff --git a/src/graphics.c b/src/graphics.c index e3a27c784..844c1af45 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -3333,17 +3333,14 @@ int sdl_open(void) #ifdef OGLR void loadShaders() { - GLuint avsize, afsize, vsize, fsize, vertexShader, fragmentShader; - //const char *vertex = file_load("test.vert", &vsize), * fragment = file_load("test.frag", &fsize); - const char *lensVertex = file_load("ltest.vert", &vsize), * lensFragment = file_load("ltest.frag", &fsize); - const char *airVertex = file_load("atest.vert", &avsize), * airFragment = file_load("atest.frag", &afsize); + GLuint vertexShader, fragmentShader; //Particle texture vertexShader = glCreateShader(GL_VERTEX_SHADER); fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource( vertexShader, 1, &vertex, NULL);//&vsize); - glShaderSource( fragmentShader, 1, &fragment, NULL);//&fsize); + glShaderSource( vertexShader, 1, &fireVertex, NULL); + glShaderSource( fragmentShader, 1, &fireFragment, NULL); glCompileShader( vertexShader ); glCompileShader( fragmentShader ); @@ -3357,8 +3354,8 @@ void loadShaders() vertexShader = glCreateShader(GL_VERTEX_SHADER); fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource( vertexShader, 1, &lensVertex, &vsize); - glShaderSource( fragmentShader, 1, &lensFragment, &fsize); + glShaderSource( vertexShader, 1, &lensVertex, NULL); + glShaderSource( fragmentShader, 1, &lensFragment, NULL); glCompileShader( vertexShader ); glCompileShader( fragmentShader ); @@ -3372,8 +3369,8 @@ void loadShaders() vertexShader = glCreateShader(GL_VERTEX_SHADER); fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource( vertexShader, 1, &airVertex, &avsize); - glShaderSource( fragmentShader, 1, &airFragment, &afsize); + glShaderSource( vertexShader, 1, &airVertex, NULL); + glShaderSource( fragmentShader, 1, &airFragment, NULL); glCompileShader( vertexShader ); glCompileShader( fragmentShader );