00001
00002 #ifndef _TP_PROGRAM_NAME_H
00003 #define _TP_PROGRAM_NAME_H
00004
00005 #include "GL/GLPlatform.h"
00006
00007 namespace gk {
00008
00009 class GLShaderProgram;
00010
00011
00012 class ProgramName
00013 {
00014 const GLShaderProgram *m_program;
00015 GLint m_location;
00016 GLint m_index;
00017 bool m_is_integer;
00018
00019 public:
00020 ProgramName( )
00021 :
00022 m_program(NULL),
00023 m_location(-1),
00024 m_index(-1),
00025 m_is_integer(false)
00026 {}
00027
00028 explicit ProgramName( const GLint index )
00029 :
00030 m_program(NULL),
00031 m_location(index),
00032 m_index(index),
00033 m_is_integer(false)
00034 {}
00035
00036 explicit ProgramName( const GLShaderProgram *program, const GLint location, const GLint index= -1, const bool is_integer= false )
00037 :
00038 m_program(program),
00039 m_location(location),
00040 m_index(index),
00041 m_is_integer(is_integer)
00042 {}
00043
00044 ~ProgramName( ) {}
00045
00046 const GLShaderProgram *program( ) const
00047 {
00048 return m_program;
00049 }
00050
00051 const GLShaderProgram *program( )
00052 {
00053 return m_program;
00054 }
00055
00056 GLint location( ) const
00057 {
00058 return m_location;
00059 }
00060
00061 GLint index( ) const
00062 {
00063 return m_index;
00064 }
00065
00066 bool isValid( ) const
00067 {
00068 return (m_program != NULL && m_location >= 0);
00069 }
00070
00071 operator GLint ( ) const
00072 {
00073 return m_location;
00074 }
00075
00076 bool isIntegerType( ) const
00077 {
00078 return m_is_integer;
00079 }
00080 };
00081
00082
00083
00084 typedef ProgramName ProgramUniform;
00085
00086 typedef ProgramName ProgramAttribute;
00087
00088 typedef ProgramName ProgramDrawbuffer;
00089
00090 typedef ProgramName ProgramFeedback;
00091
00092 typedef ProgramName ProgramSampler;
00093
00094
00095
00096 int setSamplerUniform( const ProgramSampler& sampler, const int unit );
00097
00098
00099 int setUniform( const ProgramUniform& uniform, const unsigned int x );
00100
00101 int setUniform( const ProgramUniform& uniform, const unsigned int x, const unsigned int y );
00102
00103 int setUniform( const ProgramUniform& uniform, const unsigned int x, const unsigned int y, const unsigned int z );
00104
00105 int setUniform( const ProgramUniform& uniform, const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int w );
00106
00107
00108 int setUniform( const ProgramUniform& uniform, const int x );
00109
00110 int setUniform( const ProgramUniform& uniform, const int x, const int y );
00111
00112 int setUniform( const ProgramUniform& uniform, const int x, const int y, const int z );
00113
00114 int setUniform( const ProgramUniform& uniform, const int x, const int y, const int z, const int w );
00115
00116
00117 int setUniform( const ProgramUniform& uniform, const float x );
00118
00119 int setUniform( const ProgramUniform& uniform, const float x, const float y );
00120
00121 int setUniform( const ProgramUniform& uniform, const float x, const float y, const float z );
00122
00123 int setUniform( const ProgramUniform& uniform, const float x, const float y, const float z, const float w );
00124
00125
00126 int setUniform( const ProgramUniform& uniform, const float *m, const GLboolean transpose= GL_TRUE );
00127
00128 }
00129
00130 #endif