class GLSL_Shader ; class FrameBufferObject ; class GLSL_ShaderPair { GLSL_Shader *vertShader ; GLSL_Shader *fragShader ; GLhandleARB handle ; char *name ; bool success ; bool link () ; public: GLSL_ShaderPair ( const char *_name, const char *vertFname, const char *fragFname ) ; GLSL_ShaderPair ( const char *_name, const char *vertSource, const char *vertName, const char *fragSource, const char *fragName ) ; ~GLSL_ShaderPair () ; bool compiledOK () { return success ; } /* Debug functions */ void showActiveUniforms ( FILE *fd = NULL ) ; void showActiveAttribs ( FILE *fd = NULL ) ; GLint getUniformLocation ( const char *varname ) ; void applyTexture ( const char *uniformName, FrameBufferObject *fbo, int slot ) ; void setUniform1f ( const char *uniformName, float valueX ) { glUniform1fARB ( getUniformLocation ( uniformName ), valueX ) ; } void setUniform2f ( const char *uniformName, float valueX, float valueY ) { glUniform2fARB ( getUniformLocation ( uniformName ), valueX, valueY ) ; } void setUniform3f ( const char *uniformName, float valueX, float valueY, float valueZ ) { glUniform3fARB ( getUniformLocation ( uniformName ), valueX, valueY, valueZ ) ; } void setUniform4f ( const char *uniformName, float valueX, float valueY, float valueZ, float valueW ) { glUniform4fARB ( getUniformLocation ( uniformName ), valueX, valueY, valueZ, valueW ) ; } /* To apply the shaders for rendering */ void use () { assert ( success ) ; glUseProgramObjectARB ( handle ) ; } } ;