OpenGL es 封装shader载入编译链接
来源:互联网 发布:h5页面分享到朋友圈js 编辑:程序博客网 时间:2024/06/11 00:55
static void CheckGLError(const char* printMsg){ for (GLint error = glGetError(); error; error = glGetError()) { ALog_E("after %s() glError (0x%x)", printMsg, error); }}/** * Compile a shader * shaderType is GL_VERTEX_SHADER or GL_FRAGMENT_SHADER */static GLuint LoadShader(GLenum shaderType, const char* shaderSource){// Create the shader objectGLuint shader = glCreateShader(shaderType);if (shader == 0){CheckGLError("glCreateShader");return shader;}// Load the shader sourceglShaderSource(shader, 1, &shaderSource, NULL);// Compile the shaderglCompileShader(shader);GLint compiled;// Check the compile statusglGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);if (!compiled){GLint infoLen;glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLen);if (infoLen != 0){char buf[infoLen];glGetShaderInfoLog(shader, infoLen, NULL, buf);ALog_E("Could not compile shader %d:%s", shaderType, buf);glDeleteShader(shader);return 0;}} return shader;}/** * Load vertex and fragment shader, create a program object, link program */static GLuint LoadProgram(const char* vertexSource, const char* fragmentSource){GLuint program;// Load the vertex shadersGLuint vertexShader = LoadShader(GL_VERTEX_SHADER, vertexSource);if (vertexShader == 0){return 0;}// Load the fragment shadersGLuint fragmentShader = LoadShader(GL_FRAGMENT_SHADER, fragmentSource);if (fragmentShader == 0){return 0;}// Create the program objectprogram = glCreateProgram();if (program == 0){CheckGLError("glCreateProgram");return 0;}glAttachShader(program, vertexShader);glAttachShader(program, fragmentShader);// Link the programglLinkProgram(program);GLint linkStatus;// Check the link statusglGetProgramiv(program, GL_LINK_STATUS, &linkStatus);if (!linkStatus){GLint bufLength;glGetProgramiv(program, GL_INFO_LOG_LENGTH, &bufLength);if (bufLength != 0){char buf[bufLength];glGetProgramInfoLog(program, bufLength, NULL, buf);ALog_E("Could not link program: %s", buf);}glDeleteProgram(program);return 0;}// Free up no longer needed shader resourcesglDeleteShader(vertexShader);glDeleteShader(fragmentShader);return program;}
可以载入顶点和片段shader,并编译附加到Program上,最后返回链接后的Program, 开箱即用,支持错误输出。
1 0
- OpenGL es 封装shader载入编译链接
- OpenGL ES 2.0 - Shader
- OpenGL ES 2.0 Shader
- OpenGL ES 2.0 Shader
- OpenGL ES 2.0 Shader
- OPenGL ES Shader
- OpenGL ES 2.0 Shader总结
- OpenGL ES Shader 多重纹理
- OpenGL ES Shader 纹理数组
- OpenGL ES Shader 实现代码
- [OpenGL]OpenGL ES 着色器(shader)介绍
- 【OpenGL】OpenGL ES 2.0 Shader相关介绍
- iOS 载入3d模型 OpenGL ES
- openGL ES 2.0 笔记 vertex shader
- openGL ES 2.0 fragment shader and framebuffer
- 15、OpenGL ES 2.0 Shader相关介绍
- OpenGL ES 着色器(shader)介绍
- OpenGL ES 2.0 Shader相关介绍
- unix系列设备驱动(字符设备驱动) 学习
- sdfasdfsdfa
- composer的安装使用
- MySQL---语句大全
- 12c环境中的cdb与pdb
- OpenGL es 封装shader载入编译链接
- maven 简单入门教学
- Java---静态块和静态导入
- lightoj 1287 Where to Run
- Android Scroller简单用法
- RecyclayerView通用Adapter
- C++11 并发编程教程 - Part 1 : thread 初探
- Linux 内核 Makefile 体系简单分析
- Zookeeper介绍