/* * glsl.h * * Created on: 12 sept. 2011 * Author: laurent */ #ifndef GLSL_H_ #define GLSL_H_ #define GL3_PROTOTYPES 1 #include "GL3/gl3.h" #define GLSL_VERTEX 0 #define GLSL_COLOR 1 #define GLSL_TEXCOORD 2 #define GLSL_NORMAL 3 typedef struct { GLuint programID; GLuint vertexID; GLuint fragmentID; //glsl_value *_value; GLboolean asVertex; GLboolean asColor; GLboolean asTexcoord; GLboolean asNormal; } glsl; glsl * GLSLInit(const char *vertexSource, const char *fragmentSource); void GLSLUseProgram(glsl *shader); void GLSLClearProgram(glsl *shader); void GLSLFree(glsl *); #define GLSLUniform4fv(shader,name,qty,data) \ glUniform4fv(glGetUniformLocation(shader->programID, name), qty, data) #define GLSLUniform3fv(shader,name,qty,data) \ glUniform3fv(glGetUniformLocation(shader->programID, name), qty, data) #define GLSLUniform1fv(shader,name,qty,data) \ glUniform1fv(glGetUniformLocation(shader->programID, name), qty, data) #define GLSLUniformMatrix4fv(shader,name,qty,data) \ glUniformMatrix4fv(glGetUniformLocation(shader->programID, name), qty, GL_TRUE, data) #define GLSLUniformMatrix3fv(shader,name,qty,data) \ glUniformMatrix3fv(glGetUniformLocation(shader->programID, name), qty, GL_TRUE, data) typedef enum { t4fv, t1fv, tMatrix4fv } glsl_type; typedef struct _glslv { char *name; glsl_type type; int qty; void *data; struct _glslv *next; } glsl_value; typedef struct { struct _glslv *_value; } glslStack; glslStack * glslStackInit(); void GLSLUseStack(glslStack *st, glsl *shader); void GLSLStackUniform4fv(glslStack *st, char *name, int qty, GLfloat *data); void GLSLStackUniform1fv(glslStack *st, char *name, int qty, GLfloat *data); void GLSLStackUniformMatrix4fv(glslStack *st, char *name, int qty, GLfloat *data); void GLSLStackUniformPrint(glslStack *st); void GLSLStackFree(glslStack *st); #endif /* GLSL_H_ */