80 lines
2.2 KiB
C++
80 lines
2.2 KiB
C++
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
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 ) ;
|
|
}
|
|
|
|
} ;
|
|
|
|
|