本文来自http://blog.csdn.net/runaying ,引用必须注明出处!
温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记
顶点着色器 相关操作
///cocos2d-x-3.0alpha0/cocos2dx/shaders //顶点着色器 相关操作 #ifndef __CCGLPROGRAM_H__ #define __CCGLPROGRAM_H__ #include "ccMacros.h" #include "cocoa/CCObject.h" #include "CCGL.h" NS_CC_BEGIN /** * @addtogroup shaders * @{ */ struct _hashUniformEntry; typedef void (*GLInfoFunction)(GLuint program, GLenum pname, GLint* params); typedef void (*GLLogFunction) (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog); /** GLProgram Class that implements a glProgram @since v2.0.0 */ class CC_DLL GLProgram : public Object { public: enum { VERTEX_ATTRIB_POSITION, VERTEX_ATTRIB_COLOR, VERTEX_ATTRIB_TEX_COORDS, VERTEX_ATTRIB_MAX, }; enum { UNIFORM_P_MATRIX, UNIFORM_MV_MATRIX, UNIFORM_MVP_MATRIX, UNIFORM_TIME, UNIFORM_SIN_TIME, UNIFORM_COS_TIME, UNIFORM_RANDOM01, UNIFORM_SAMPLER, UNIFORM_MAX, }; static const char* SHADER_NAME_POSITION_TEXTURE_COLOR; static const char* SHADER_NAME_POSITION_TEXTURE_ALPHA_TEST; static const char* SHADER_NAME_POSITION_COLOR; static const char* SHADER_NAME_POSITION_TEXTURE; static const char* SHADER_NAME_POSITION_TEXTURE_U_COLOR; static const char* SHADER_NAME_POSITION_TEXTURE_A8_COLOR; static const char* SHADER_NAME_POSITION_U_COLOR; static const char* SHADER_NAME_POSITION_LENGTH_TEXTURE_COLOR; // uniform names static const char* UNIFORM_NAME_P_MATRIX; static const char* UNIFORM_NAME_MV_MATRIX; static const char* UNIFORM_NAME_MVP_MATRIX; static const char* UNIFORM_NAME_TIME; static const char* UNIFORM_NAME_SIN_TIME; static const char* UNIFORM_NAME_COS_TIME; static const char* UNIFORM_NAME_RANDOM01; static const char* UNIFORM_NAME_SAMPLER; static const char* UNIFORM_NAME_ALPHA_TEST_VALUE; // Attribute names static const char* ATTRIBUTE_NAME_COLOR; static const char* ATTRIBUTE_NAME_POSITION; static const char* ATTRIBUTE_NAME_TEX_COORD; /** * @js ctor */ GLProgram(); /** * @js NA * @lua NA */ virtual ~GLProgram(); /** 使用 a vertex 、 fragment with bytes array(字节数组片段) 初始化一个 GLProgram * @js initWithString * @lua initWithString */ bool initWithVertexShaderByteArray(const GLchar* vShaderByteArray, const GLchar* fShaderByteArray); /** 使用 vShaderFilename、 fShaderFilename 初始化一个 GLProgram * @js init * @lua init */ bool initWithVertexShaderFilename(const char* vShaderFilename, const char* fShaderFilename); /** 这将增加一个新的属性到shader */ void addAttribute(const char* attributeName, GLuint index); /** links the glProgram */ bool link(); /** it will call glUseProgram() */ void use(); /** It will create 4 uniforms(标准): - kUniformPMatrix - kUniformMVMatrix - kUniformMVPMatrix - GLProgram::UNIFORM_SAMPLER And it will bind(绑定) "GLProgram::UNIFORM_SAMPLER" to 0 */ void updateUniforms(); /** 检索这个本地的shader程序命名统一时调用. */ GLint getUniformLocationForName(const char* name) const; /** 相同的shader程序,只有这次调用和上次调用值是不同的它才调用 glUniform1i * @js setUniformLocationI32 * @lua setUniformLocationI32 */ void setUniformLocationWith1i(GLint location, GLint i1); /** 相同的shader程序,只有这次调用和上次调用值是不同的它才调用 glUniform2i . */ void setUniformLocationWith2i(GLint location, GLint i1, GLint i2); /** 相同的shader程序,只有这次调用和上次调用值是不同的它才调用 glUniform3i . */ void setUniformLocationWith3i(GLint location, GLint i1, GLint i2, GLint i3); /** 相同的shader程序,只有这次调用和上次调用值是不同的它才调用 glUniform4i . */ void setUniformLocationWith4i(GLint location, GLint i1, GLint i2, GLint i3, GLint i4); /** 相同的shader程序,只有这次调用和上次调用值是不同的它才调用 glUniform2iv . */ void setUniformLocationWith2iv(GLint location, GLint* ints, unsigned int numberOfArrays); /** 相同的shader程序,只有这次调用和上次调用值是不同的它才调用 glUniform3iv . */ void setUniformLocationWith3iv(GLint location, GLint* ints, unsigned int numberOfArrays); /** 相同的shader程序,只有这次调用和上次调用值是不同的它才调用 glUniform4iv . */ void setUniformLocationWith4iv(GLint location, GLint* ints, unsigned int numberOfArrays); /** 相同的shader程序,只有这次调用和上次调用值是不同的它才调用 glUniform1f * In js or lua,please use setUniformLocationF32 * @js NA */ void setUniformLocationWith1f(GLint location, GLfloat f1); /** 相同的shader程序,只有这次调用和上次调用值是不同的它才调用 glUniform2f . * In js or lua,please use setUniformLocationF32 * @js NA */ void setUniformLocationWith2f(GLint location, GLfloat f1, GLfloat f2); /** 相同的shader程序,只有这次调用和上次调用值是不同的它才调用 glUniform3f . * In js or lua,please use setUniformLocationF32 * @js NA */ void setUniformLocationWith3f(GLint location, GLfloat f1, GLfloat f2, GLfloat f3); /** 相同的shader程序,只有这次调用和上次调用值是不同的它才调用 glUniform4f . * In js or lua,please use setUniformLocationF32 * @js NA */ void setUniformLocationWith4f(GLint location, GLfloat f1, GLfloat f2, GLfloat f3, GLfloat f4); /** 相同的shader程序,只有这次调用和上次调用值是不同的它才调用 glUniform2fv . */ void setUniformLocationWith2fv(GLint location, GLfloat* floats, unsigned int numberOfArrays); /** 相同的shader程序,只有这次调用和上次调用值是不同的它才调用 glUniform3fv . */ void setUniformLocationWith3fv(GLint location, GLfloat* floats, unsigned int numberOfArrays); /** 相同的shader程序,只有这次调用和上次调用值是不同的它才调用 glUniform4fv . */ void setUniformLocationWith4fv(GLint location, GLfloat* floats, unsigned int numberOfArrays); /** 相同的shader程序,只有这次调用和上次调用值是不同的它才调用 glUniformMatrix4fv . */ void setUniformLocationWithMatrix4fv(GLint location, GLfloat* matrixArray, unsigned int numberOfMatrices); /** 相同的shader程序,如果这次调用和上次调用值是不同的,它才调用更新内置的标准. */ void setUniformsForBuiltins(); /** returns the vertexShader error log */ const char* getVertexShaderLog() const; /** @过时不再需要建议使用新的 API ,可以使用getVertexShaderLog() 代替 * @js NA * @lua NA */ CC_DEPRECATED_ATTRIBUTE const char* vertexShaderLog() const { return getVertexShaderLog(); } /** returns the fragmentShader error log */ const char* getFragmentShaderLog() const; /** @过时不再需要建议使用新的 API ,可以使用 getFragmentShaderLog() 代替 * @js NA * @lua NA */ CC_DEPRECATED_ATTRIBUTE const char* fragmentShaderLog() const{ return getFragmentShaderLog();} /** returns the program error log */ const char* getProgramLog() const; /** @过时不再需要建议使用新的 API ,可以使用 getProgramLog() 代替 * @js NA * @lua NA */ CC_DEPRECATED_ATTRIBUTE const char* programLog() const { return getProgramLog(); } // 这个功能是专为Android,重新加载所有着色器, // 当OpenGL上下文丢失时,不调用它. void reset(); inline const GLuint getProgram() const { return _program; } private: bool updateUniformLocation(GLint location, GLvoid* data, unsigned int bytes); const char* description() const; bool compileShader(GLuint * shader, GLenum type, const GLchar* source); const char* logForOpenGLObject(GLuint object, GLInfoFunction infoFunc, GLLogFunction logFunc) const; private: GLuint _program; GLuint _vertShader; GLuint _fragShader; GLint _uniforms[UNIFORM_MAX]; struct _hashUniformEntry* _hashForUniforms; bool _usesTime; }; // end of shaders group /// @} NS_CC_END #endif /* __CCGLPROGRAM_H__ */