OpenGL ES Shader 实现代码
来源:互联网 发布:mac os x启动盘制作 编辑:程序博客网 时间:2024/05/08 09:43
OpenGL ES Shader 实现代码
一、顶点shader代码
//定义代码段const char vscode[] = \"uniform highp mat4 mvpMatrix;\attribute highp vec3 position;\attribute highp vec2 texcoord; \varying mediump vec2 vTexCoord;\void main ()\{\ gl_Position = (mvpMatrix * vec4(position.x, position.y, position.z, 1.0));\ vTexCoord.x = texcoord.x;\ vTexCoord.y = texcoord.y;\} \n";//创建shaderGLuint handle = glCreateShader(GL_VERTEX_SHADER);//绑定代码GLuint codeSize = sizeof(vscode);glShaderSource(handle,1,&vscode,(GLint*)&codeSize);//编译glCompileShader(handle);//检查编译结果GLint comResult = 0;glGetShaderiv(handle, GL_COMPILE_STATUS, &comResult);if ( comResult == 0 ){ char logInfo[256]={0}; GLint bufSize; GLsizei logLength; glGetShaderInfoLog(handle,bufSize,&logLength,logInfo); glDeleteShader(handle);}
二、片段shader代码
const char fscode[] = \"uniform sampler2D uTexSampler;\varying mediump vec2 vTexCoord; \void main ()\{\ lowp vec4 color = texture2D (uTexSampler, vTexCoord);\ gl_FragColor = color;\}\n";//创建shaderGLuint handle = glCreateShader(GL_FRAGMENT_SHADER);//绑定代码GLuint codeSize = sizeof(fscode);glShaderSource(handle,1,&fscode,(GLint*)&codeSize);//编译glCompileShader(handle);//检查编译结果GLint comResult = 0;glGetShaderiv(handle, GL_COMPILE_STATUS, &comResult);if ( comResult == 0 ){ char logInfo[256]={0}; GLint bufSize; GLsizei logLength; glGetShaderInfoLog(handle,bufSize,&logLength,logInfo); glDeleteShader(handle);}
三、Program代码
GLuint program = glCreateProgram();glAttachShader(program,vhandle);glAttachShader(program,fhandle);glLinkProgram(program);GLint linkResult = 0;glGetProgramiv( program, GL_LINK_STATUS, &linkResult );if(0 == linkResult){ char logInfo[256]={0}; GLint bufSize; GLsizei logLength; glGetProgramInfoLog(program,bufSize,&length,infoLog); glDetachShader(program,vhandle); glDetachShader(program,fhandle); glDeleteProgram(program); return 0;}
四、生成
//生成并绑定纹理GLuint nWidth = 256;GLuint nHeight = 256;char pBits[] = {...};GLuint iTexID;glGenTextures(1, &iTexID);glBindTexture(GL_TEXTURE_2D, iTexID);glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, nWidth, nHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, pBits);glTexGenMipmap();
五、生成VBO、IBO
char pVertexBuffer[]={...};GLuint uVertexSize = sizeof(pVertexBuffer);GLuint uVboID;glGenBuffers(1, &uVboID);glBindBuffer(GL_ARRAY_BUFFER, uVboID);glBufferData(GL_ARRAY_BUFFER, uVertexSize, pVertexBuffer, GL_STATIC_DRAW);char pIndexBuffer[]={...};GLuint uIndexSize = sizeof(pIndexBuffer);GLuint uIboID;glGenBuffers(1, &uIboID);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, uIboID);glBufferData(GL_ELEMENT_ARRAY_BUFFER, uIndexSize, pIndexBuffer, GL_STATIC_DRAW);
六、使用逻辑
// 选择使用的programglUseProgram(program);// 设定顶点shader变量数值GLfloat *mvpValue[16]={...};GLint locMVP = glGetUniformLocation(program,"mvpMatrix");glUniformMatrix4fv(locMVP,1,GL_FALSE,mvpValue);//设定片段shader纹理GLint locTex = glGetUniformLocation(program,"uTexSampler");glUniform1i(locMVP,0);// 纹理单元0//绑定vbo、iboglBindBuffer(GL_ARRAY_BUFFER, uVboID);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, uiboID);//设定顶点坐标数值GLfloat *posValue[4]={...};GLuint u16VertCnt = ...;GLuint uIBOOffset = 0;GLUint locPos = glGetAttribLocation(program,"position");glVertexAttribPointer(locPos,4,GL_FLOAT,GL_FALSE,sizeof(GLfloat)*4,posValue);//设定顶点纹理坐标GLfloat *texCoordValue[2]={...};GLUint locTexCoord = glGetAttribLocation(program,"texcoord");glVertexAttribPointer(locTexCoord,2,GL_FLOAT,GL_FALSE,sizeof(GLfloat)*2, texCoordValue);//绑定纹理glActiveTexture(GL_TEXTURE0);glBindTexture(GL_TEXTURE_2D, iTexID);// 绘制glDrawElements(GL_TRIANGLES, u16VertCnt, GL_UNSIGNED_SHORT, (void *)&uIBOOffset);//解绑vbo、iboglBindBuffer(GL_ARRAY_BUFFER, 0);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
0 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]OpenGL ES 着色器(shader)介绍
- 【OpenGL】OpenGL ES 2.0 Shader相关介绍
- OpenGL加载shader代码
- 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相关介绍
- OpenGL ES渲染之Shader准备
- 屏幕下雪特效的jQuery实现
- 嵌入式系统开发概述
- 一次较为完整的oracle数据库数据迁移过程
- codeforces contest 750
- PS命令
- OpenGL ES Shader 实现代码
- 特殊的数字
- matlab中xlswrite函数写数据出现服务器异常情况的解决办法
- Anddroid 下拉列表
- 扫盲 HTTPS 和 SSL/TLS 协议[3]:密钥交换(密钥协商)算法及其原理
- 文本预处理,去除词频数为1的文档
- Python 图片爬虫
- mssql 之在作业中执行sql 失败,sql中包含链接服务器的库
- react-native开发:创建项目报错:Command `npm install --save --save-exact react-native` failed.