2 #include <unordered_map> 14 struct _hashUniformEntry;
17 typedef void(*GLInfoFunction)(GLuint program, GLenum pname, GLint* params);
18 typedef void(*GLLogFunction) (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog);
45 friend class GLProgramState;
50 VERTEX_ATTRIB_POSITION,
52 VERTEX_ATTRIB_TEX_COORD,
54 VERTEX_ATTRIB_BLEND_WEIGHT,
55 VERTEX_ATTRIB_BLEND_INDEX,
60 VERTEX_ATTRIB_TEX_COORDS = VERTEX_ATTRIB_TEX_COORD,
80 static const char* SHADER_NAME_POSITION_TEXTURE_COLOR;
81 static const char* SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP;
82 static const char* SHADER_NAME_POSITION_TEXTURE_ALPHA_TEST;
83 static const char* SHADER_NAME_POSITION_TEXTURE_ALPHA_TEST_NO_MV;
84 static const char* SHADER_NAME_POSITION_COLOR;
85 static const char* SHADER_NAME_POSITION_COLOR_NO_MVP;
86 static const char* SHADER_NAME_POSITION_TEXTURE;
87 static const char* SHADER_NAME_POSITION_TEXTURE_U_COLOR;
88 static const char* SHADER_NAME_POSITION_TEXTURE_A8_COLOR;
89 static const char* SHADER_NAME_POSITION_U_COLOR;
90 static const char* SHADER_NAME_POSITION_LENGTH_TEXTURE_COLOR;
92 static const char* SHADER_NAME_LABEL_NORMAL;
93 static const char* SHADER_NAME_LABEL_OUTLINE;
95 static const char* SHADER_NAME_LABEL_DISTANCEFIELD_NORMAL;
96 static const char* SHADER_NAME_LABEL_DISTANCEFIELD_GLOW;
99 static const char* SHADER_3D_POSITION;
100 static const char* SHADER_3D_POSITION_TEXTURE;
101 static const char* SHADER_3D_SKINPOSITION_TEXTURE;
104 static const char* UNIFORM_NAME_P_MATRIX;
105 static const char* UNIFORM_NAME_MV_MATRIX;
106 static const char* UNIFORM_NAME_MVP_MATRIX;
107 static const char* UNIFORM_NAME_TIME;
108 static const char* UNIFORM_NAME_SIN_TIME;
109 static const char* UNIFORM_NAME_COS_TIME;
110 static const char* UNIFORM_NAME_RANDOM01;
111 static const char* UNIFORM_NAME_SAMPLER0;
112 static const char* UNIFORM_NAME_SAMPLER1;
113 static const char* UNIFORM_NAME_SAMPLER2;
114 static const char* UNIFORM_NAME_SAMPLER3;
115 static const char* UNIFORM_NAME_ALPHA_TEST_VALUE;
118 static const char* ATTRIBUTE_NAME_COLOR;
119 static const char* ATTRIBUTE_NAME_POSITION;
120 static const char* ATTRIBUTE_NAME_TEX_COORD;
121 static const char* ATTRIBUTE_NAME_NORMAL;
122 static const char* ATTRIBUTE_NAME_BLEND_WEIGHT;
123 static const char* ATTRIBUTE_NAME_BLEND_INDEX;
138 static GLProgram* createWithByteArrays(
const GLchar* vShaderByteArray,
const GLchar* fShaderByteArray);
139 bool initWithByteArrays(
const GLchar* vShaderByteArray,
const GLchar* fShaderByteArray);
145 static GLProgram* createWithFilenames(
const std::string& vShaderFilename,
const std::string& fShaderFilename);
146 bool initWithFilenames(
const std::string& vShaderFilename,
const std::string& fShaderFilename);
149 Uniform* getUniform(
const std::string& name);
153 void bindAttribLocation(
const std::string& attributeName, GLuint index)
const;
156 GLint getAttribLocation(
const std::string& attributeName)
const;
159 GLint getUniformLocation(
const std::string& attributeName)
const;
174 void updateUniforms();
177 GLint getUniformLocationForName(
const char* name)
const;
183 void setUniformLocationWith1i(GLint location, GLint i1);
186 void setUniformLocationWith2i(GLint location, GLint i1, GLint i2);
189 void setUniformLocationWith3i(GLint location, GLint i1, GLint i2, GLint i3);
192 void setUniformLocationWith4i(GLint location, GLint i1, GLint i2, GLint i3, GLint i4);
195 void setUniformLocationWith2iv(GLint location, GLint* ints,
unsigned int numberOfArrays);
198 void setUniformLocationWith3iv(GLint location, GLint* ints,
unsigned int numberOfArrays);
202 void setUniformLocationWith4iv(GLint location, GLint* ints,
unsigned int numberOfArrays);
208 void setUniformLocationWith1f(GLint location, GLfloat f1);
214 void setUniformLocationWith2f(GLint location, GLfloat f1, GLfloat f2);
220 void setUniformLocationWith3f(GLint location, GLfloat f1, GLfloat f2, GLfloat f3);
226 void setUniformLocationWith4f(GLint location, GLfloat f1, GLfloat f2, GLfloat f3, GLfloat f4);
229 void setUniformLocationWith2fv(GLint location,
const GLfloat* floats,
unsigned int numberOfArrays);
232 void setUniformLocationWith3fv(GLint location,
const GLfloat* floats,
unsigned int numberOfArrays);
235 void setUniformLocationWith4fv(GLint location,
const GLfloat* floats,
unsigned int numberOfArrays);
238 void setUniformLocationWithMatrix2fv(GLint location,
const GLfloat* matrixArray,
unsigned int numberOfMatrices);
241 void setUniformLocationWithMatrix3fv(GLint location,
const GLfloat* matrixArray,
unsigned int numberOfMatrices);
244 void setUniformLocationWithMatrix4fv(GLint location,
const GLfloat* matrixArray,
unsigned int numberOfMatrices);
251 std::string getVertexShaderLog()
const;
254 std::string getFragmentShaderLog()
const;
257 std::string getProgramLog()
const;
263 inline const GLuint getProgram()
const {
return _program; }
266 bool initWithVertexShaderByteArray(
const GLchar* vertexByteArray,
const GLchar* fragByteArray)
268 return initWithByteArrays(vertexByteArray, fragByteArray);
270 bool initWithVertexShaderFilename(
const std::string &vertexFilename,
const std::string& fragFilename)
272 return initWithFilenames(vertexFilename, fragFilename);
274 void addAttribute(
const std::string &attributeName, GLuint index)
const {
return bindAttribLocation(attributeName, index); }
278 bool updateUniformLocation(GLint location,
const GLvoid* data,
unsigned int bytes);
281 void bindPredefinedVertexAttribs();
282 void parseVertexAttribs();
283 void parseUniforms();
285 bool compileShader(GLuint * shader, GLenum type,
const GLchar* source);
286 std::string logForOpenGLObject(GLuint
object, GLInfoFunction infoFunc, GLLogFunction logFunc)
const;
291 GLint _builtInUniforms[UNIFORM_MAX];
293 bool _hasShaderCompiler;
298 unsigned int usesTime : 1;
299 unsigned int usesMVP : 1;
300 unsigned int usesMV : 1;
301 unsigned int usesP : 1;
302 unsigned int usesRandom : 1;
308 std::unordered_map<std::string, Uniform> _userUniforms;
309 std::unordered_map<std::string, VertexAttrib> _vertexAttribs;
Definition: GLProgram.cpp:24
Base class for a reference counted asset.
Definition: PERef.h:55
different physics engine has different winding order.
Definition: EventBinding.h:32
Definition: GLProgram.h:21
Definition: GLProgram.h:297
GLProgram Class that implements a glProgram.
Definition: GLProgram.h:43