diff options
author | Eric Anholt <[email protected]> | 2010-05-21 09:32:38 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2010-05-21 12:20:39 -0700 |
commit | 68fc4b415e322f6744299e39864fbc377c6eff74 (patch) | |
tree | 4bafffd8b0105174f3c5c0ae327a005be9145990 /progs/util/shaderutil.c | |
parent | e4f4489e3fc0b36d72821b55794fb843b2b7fa5f (diff) |
Remove demos that have moved to git+ssh://git.freedesktop.org/git/mesa/demos.
The remaining programs are ones I've had difficulty finding a build
environment for to make the build system or are unit tests that should
probably live next to their code instead. Hopefully people can bring
over the build for remaining pieces they care about.
Diffstat (limited to 'progs/util/shaderutil.c')
-rw-r--r-- | progs/util/shaderutil.c | 323 |
1 files changed, 0 insertions, 323 deletions
diff --git a/progs/util/shaderutil.c b/progs/util/shaderutil.c deleted file mode 100644 index 2f44c388d8a..00000000000 --- a/progs/util/shaderutil.c +++ /dev/null @@ -1,323 +0,0 @@ -/** - * Utilities for OpenGL shading language - * - * Brian Paul - * 9 April 2008 - */ - - -#include <assert.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <GL/glew.h> -#include <GL/glut.h> -#include "shaderutil.h" - -/** time to compile previous shader */ -static GLdouble CompileTime = 0.0; - -/** time to linke previous program */ -static GLdouble LinkTime = 0.0; - - -GLboolean -ShadersSupported(void) -{ - const char *version = (const char *) glGetString(GL_VERSION); - - /* NVIDIA binary drivers will return "3.0.0", and they clearly support - * shaders. - */ - if (version[0] >= '2' && version[1] == '.') { - return GL_TRUE; - } - else if (glutExtensionSupported("GL_ARB_vertex_shader") - && glutExtensionSupported("GL_ARB_fragment_shader") - && glutExtensionSupported("GL_ARB_shader_objects")) { - fprintf(stderr, "Warning: Trying ARB GLSL instead of OpenGL 2.x. This may not work.\n"); - return GL_TRUE; - } - fprintf(stderr, "Sorry, GLSL not supported with this OpenGL.\n"); - return GL_FALSE; -} - - -GLuint -CompileShaderText(GLenum shaderType, const char *text) -{ - GLuint shader; - GLint stat; - GLdouble t0, t1; - - shader = glCreateShader(shaderType); - glShaderSource(shader, 1, (const GLchar **) &text, NULL); - - t0 = glutGet(GLUT_ELAPSED_TIME) * 0.001; - glCompileShader(shader); - t1 = glutGet(GLUT_ELAPSED_TIME) * 0.001; - - CompileTime = t1 - t0; - - glGetShaderiv(shader, GL_COMPILE_STATUS, &stat); - if (!stat) { - GLchar log[1000]; - GLsizei len; - glGetShaderInfoLog(shader, 1000, &len, log); - fprintf(stderr, "Error: problem compiling shader: %s\n", log); - exit(1); - } - else { - /*printf("Shader compiled OK\n");*/ - } - return shader; -} - - -/** - * Read a shader from a file. - */ -GLuint -CompileShaderFile(GLenum shaderType, const char *filename) -{ - const int max = 100*1000; - int n; - char *buffer = (char*) malloc(max); - GLuint shader; - FILE *f; - - f = fopen(filename, "r"); - if (!f) { - fprintf(stderr, "Unable to open shader file %s\n", filename); - free(buffer); - return 0; - } - - n = fread(buffer, 1, max, f); - /*printf("read %d bytes from shader file %s\n", n, filename);*/ - if (n > 0) { - buffer[n] = 0; - shader = CompileShaderText(shaderType, buffer); - } - else { - fclose(f); - free(buffer); - return 0; - } - - fclose(f); - free(buffer); - - return shader; -} - - -GLuint -LinkShaders(GLuint vertShader, GLuint fragShader) -{ - GLuint program = glCreateProgram(); - GLdouble t0, t1; - - assert(vertShader || fragShader); - - if (fragShader) - glAttachShader(program, fragShader); - if (vertShader) - glAttachShader(program, vertShader); - - t0 = glutGet(GLUT_ELAPSED_TIME) * 0.001; - glLinkProgram(program); - t1 = glutGet(GLUT_ELAPSED_TIME) * 0.001; - - LinkTime = t1 - t0; - - /* check link */ - { - GLint stat; - glGetProgramiv(program, GL_LINK_STATUS, &stat); - if (!stat) { - GLchar log[1000]; - GLsizei len; - glGetProgramInfoLog(program, 1000, &len, log); - fprintf(stderr, "Shader link error:\n%s\n", log); - return 0; - } - } - - return program; -} - - -GLboolean -ValidateShaderProgram(GLuint program) -{ - GLint stat; - glValidateProgramARB(program); - glGetProgramiv(program, GL_VALIDATE_STATUS, &stat); - - if (!stat) { - GLchar log[1000]; - GLsizei len; - glGetProgramInfoLog(program, 1000, &len, log); - fprintf(stderr, "Program validation error:\n%s\n", log); - return 0; - } - - return (GLboolean) stat; -} - - -GLdouble -GetShaderCompileTime(void) -{ - return CompileTime; -} - - -GLdouble -GetShaderLinkTime(void) -{ - return LinkTime; -} - - -void -SetUniformValues(GLuint program, struct uniform_info uniforms[]) -{ - GLuint i; - - for (i = 0; uniforms[i].name; i++) { - uniforms[i].location - = glGetUniformLocation(program, uniforms[i].name); - - switch (uniforms[i].type) { - case GL_INT: - case GL_SAMPLER_1D: - case GL_SAMPLER_2D: - case GL_SAMPLER_3D: - case GL_SAMPLER_CUBE: - case GL_SAMPLER_2D_RECT_ARB: - assert(uniforms[i].value[0] >= 0.0F); - glUniform1i(uniforms[i].location, - (GLint) uniforms[i].value[0]); - break; - case GL_FLOAT: - glUniform1fv(uniforms[i].location, 1, uniforms[i].value); - break; - case GL_FLOAT_VEC2: - glUniform2fv(uniforms[i].location, 1, uniforms[i].value); - break; - case GL_FLOAT_VEC3: - glUniform3fv(uniforms[i].location, 1, uniforms[i].value); - break; - case GL_FLOAT_VEC4: - glUniform4fv(uniforms[i].location, 1, uniforms[i].value); - break; - default: - if (strncmp(uniforms[i].name, "gl_", 3) == 0) { - /* built-in uniform: ignore */ - } - else { - fprintf(stderr, - "Unexpected uniform data type in SetUniformValues\n"); - abort(); - } - } - } -} - - -/** Get list of uniforms used in the program */ -GLuint -GetUniforms(GLuint program, struct uniform_info uniforms[]) -{ - GLint n, max, i; - - glGetProgramiv(program, GL_ACTIVE_UNIFORMS, &n); - glGetProgramiv(program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &max); - - for (i = 0; i < n; i++) { - GLint size, len; - GLenum type; - char name[100]; - - glGetActiveUniform(program, i, 100, &len, &size, &type, name); - - uniforms[i].name = strdup(name); - uniforms[i].size = size; - uniforms[i].type = type; - uniforms[i].location = glGetUniformLocation(program, name); - } - - uniforms[i].name = NULL; /* end of list */ - - return n; -} - - -void -PrintUniforms(const struct uniform_info uniforms[]) -{ - GLint i; - - printf("Uniforms:\n"); - - for (i = 0; uniforms[i].name; i++) { - printf(" %d: %s size=%d type=0x%x loc=%d value=%g, %g, %g, %g\n", - i, - uniforms[i].name, - uniforms[i].size, - uniforms[i].type, - uniforms[i].location, - uniforms[i].value[0], - uniforms[i].value[1], - uniforms[i].value[2], - uniforms[i].value[3]); - } -} - - -/** Get list of attribs used in the program */ -GLuint -GetAttribs(GLuint program, struct attrib_info attribs[]) -{ - GLint n, max, i; - - glGetProgramiv(program, GL_ACTIVE_ATTRIBUTES, &n); - glGetProgramiv(program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &max); - - for (i = 0; i < n; i++) { - GLint size, len; - GLenum type; - char name[100]; - - glGetActiveAttrib(program, i, 100, &len, &size, &type, name); - - attribs[i].name = strdup(name); - attribs[i].size = size; - attribs[i].type = type; - attribs[i].location = glGetAttribLocation(program, name); - } - - attribs[i].name = NULL; /* end of list */ - - return n; -} - - -void -PrintAttribs(const struct attrib_info attribs[]) -{ - GLint i; - - printf("Attribs:\n"); - - for (i = 0; attribs[i].name; i++) { - printf(" %d: %s size=%d type=0x%x loc=%d\n", - i, - attribs[i].name, - attribs[i].size, - attribs[i].type, - attribs[i].location); - } -} |