summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2011-10-22 18:24:32 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2011-10-22 18:24:32 (GMT)
commit014c1fbad669b0cf1abd881e696f0c7e432b3707 (patch)
tree049005945e5e63aad3a5d856e24058f5152fa9a9
parentba59ba8b7c9fc12ba9ff349c1d35d73fbfc54624 (diff)
downloadpowder-014c1fbad669b0cf1abd881e696f0c7e432b3707.zip
powder-014c1fbad669b0cf1abd881e696f0c7e432b3707.tar.gz
Embed shaders
-rw-r--r--includes/graphics.h44
-rw-r--r--src/graphics.c17
2 files changed, 49 insertions, 12 deletions
diff --git a/includes/graphics.h b/includes/graphics.h
index a570396..962a04e 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 e3a27c7..844c1af 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 );