summaryrefslogtreecommitdiffstats
path: root/progs/glsl/convolutions.c
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2008-08-16 09:54:07 -0600
committerBrian Paul <[email protected]>2008-08-16 09:54:07 -0600
commit35479fd4b47b5488bab2b6230909e8716b858d49 (patch)
tree719eaf51dbcd2cdd2fad91d6ab692aa3ed8a0985 /progs/glsl/convolutions.c
parent7970b2a908822ad009d29312e69be9eb2b7a5dd2 (diff)
fix convolutions test to consistanty use the ARB shader extension functions
Was using a mix of the ARB functions and the OpenGL 2.0 shader functions.
Diffstat (limited to 'progs/glsl/convolutions.c')
-rw-r--r--progs/glsl/convolutions.c41
1 files changed, 28 insertions, 13 deletions
diff --git a/progs/glsl/convolutions.c b/progs/glsl/convolutions.c
index 9b9ee532453..13c7eab0ea9 100644
--- a/progs/glsl/convolutions.c
+++ b/progs/glsl/convolutions.c
@@ -1,3 +1,10 @@
+/**
+ * Convolution with GLSL.
+ * Note: uses GL_ARB_shader_objects, GL_ARB_vertex_shader, GL_ARB_fragment_shader,
+ * not the OpenGL 2.0 shader API.
+ * Author: Zack Rusin
+ */
+
#define GL_GLEXT_PROTOTYPES
#include "readtex.h"
@@ -54,15 +61,15 @@ static void loadAndCompileShader(GLuint shader, const char *text)
{
GLint stat;
- glShaderSource(shader, 1, (const GLchar **) &text, NULL);
+ glShaderSourceARB(shader, 1, (const GLchar **) &text, NULL);
- glCompileShader(shader);
+ glCompileShaderARB(shader);
- glGetShaderiv(shader, GL_COMPILE_STATUS, &stat);
+ glGetObjectParameterivARB(shader, GL_COMPILE_STATUS, &stat);
if (!stat) {
GLchar log[1000];
GLsizei len;
- glGetShaderInfoLog(shader, 1000, &len, log);
+ glGetInfoLogARB(shader, 1000, &len, log);
fprintf(stderr, "Problem compiling shader: %s\n", log);
exit(1);
}
@@ -98,11 +105,11 @@ static void
checkLink(GLuint prog)
{
GLint stat;
- glGetProgramiv(prog, GL_LINK_STATUS, &stat);
+ glGetObjectParameterivARB(prog, GL_LINK_STATUS, &stat);
if (!stat) {
GLchar log[1000];
GLsizei len;
- glGetProgramInfoLog(prog, 1000, &len, log);
+ glGetInfoLogARB(prog, 1000, &len, log);
fprintf(stderr, "Linker error:\n%s\n", log);
}
else {
@@ -193,12 +200,12 @@ static void setupConvolution()
}
loc = glGetUniformLocationARB(program, "KernelValue");
- glUniform4fv(loc, 9, vecKer);
+ glUniform4fvARB(loc, 9, vecKer);
loc = glGetUniformLocationARB(program, "ScaleFactor");
- glUniform4f(loc, scale, scale, scale, scale);
+ glUniform4fARB(loc, scale, scale, scale, scale);
loc = glGetUniformLocationARB(program, "BaseColor");
- glUniform4f(loc, baseColor[0], baseColor[1],
- baseColor[2], baseColor[3]);
+ glUniform4fARB(loc, baseColor[0], baseColor[1],
+ baseColor[2], baseColor[3]);
free(vecKer);
free(kernel);
@@ -222,14 +229,16 @@ static void createProgram(const char *vertProgFile,
glAttachShader(program, fragShader);
}
- glLinkProgram(program);
+ glLinkProgramARB(program);
checkLink(program);
- glUseProgram(program);
+ glUseProgramObjectARB(program);
+ /*
assert(glIsProgram(program));
assert(glIsShader(fragShader));
assert(glIsShader(vertShader));
+ */
checkError(__LINE__);
{/*texture*/
@@ -247,7 +256,7 @@ static void createProgram(const char *vertProgFile,
0.0 , -1.0 / texture.height,
-1.0 / texture.width, -1.0 / texture.height };
GLuint offsetLoc = glGetUniformLocationARB(program, "Offset");
- glUniform2fv(offsetLoc, 9, offsets);
+ glUniform2fvARB(offsetLoc, 9, offsets);
}
setupConvolution();
@@ -316,6 +325,12 @@ static void menuInit()
static void init()
{
+ if (!glutExtensionSupported("GL_ARB_shader_objects") ||
+ !glutExtensionSupported("GL_ARB_vertex_shader") ||
+ !glutExtensionSupported("GL_ARB_fragment_shader")) {
+ fprintf(stderr, "Sorry, this program requires GL_ARB_shader_objects, GL_ARB_vertex_shader, and GL_ARB_fragment_shader\n");
+ exit(1);
+ }
fprintf(stderr, "GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
fprintf(stderr, "GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
fprintf(stderr, "GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));