glActiveTexture
2015-07-20 19:04
288 查看
GLSL的很多信息都是英文的,即使有中文资料大多都是照搬书或者是直接复制的官方SDK的Google解释。这里给出一些GLSL应用纹理的基础知识
首先是 glActiveTexture(GL_TEXTURE0+i);
glBindTexture(texTarget, texture[i]);
关于glActiveTexture这个函数,在多重纹理当中,最好让他的GL_TEXTUREi和实际纹理数组序号一致,因为一旦你在某个纹理上绑定了glActiveTexture,那么后面要取消掉就非常困难,反正我试了好多次都没有成功。
然后是 texLoc = glGetUniformLocation(p2, "tex0"); //tex0用于在GLSL中定义采样器名称
glUniform1i(texLoc, 2);//texLoc在获得定位之后,被glUniform1i绑定至GLSL
这里的tex0和你GLSL中的tex0是对应的,如果你有多个纹理,可以将其命名为tex1,tex2..等等,只要保证和GLSL里面的一致就可以。但是如果你在多个FBO中用的话,显然tex12这样的命名会给你的GLSL编写带来烦恼,所以在每个shader program里面,你可以独立的指定。比方说在一个shader program0中的,你要把纹理0和纹理1处理下,那么把他们命名为tex0和tex1;接下来你要在shader program1中,处理纹理3和纹理4,那么也可以把他们也命名为tex0和tex1,和之前的不存在冲突,这个是实测的结果。这样的好处是,不用在编写某个GLSL的时候,还要记得自己用了多少个tex
至于glUniform1i,这个网上也很少有个人理解的解释。其实它是指定了一个一致性变量,具体的含义不说了,重点说说glUniform1i(texLoc, 2)中2的含义。官方SDK说是Specifies the new values to be used for the specified uniform variable.是什么意思呢?其实texLoc这个变量是可以复用的,多个纹理都可以用他作为location传入,但是不同的是,这个type必须保持不一致。你可以把他看成是第一个location,第二个location等等,如果type重复了,那就意味着纹理的入口位置被重叠了,所以在不太理解这个type的含义之前,保持它的递增
做完上面两个步骤,就可以进入GLSL函数编写了
首先是 glActiveTexture(GL_TEXTURE0+i);
glBindTexture(texTarget, texture[i]);
关于glActiveTexture这个函数,在多重纹理当中,最好让他的GL_TEXTUREi和实际纹理数组序号一致,因为一旦你在某个纹理上绑定了glActiveTexture,那么后面要取消掉就非常困难,反正我试了好多次都没有成功。
然后是 texLoc = glGetUniformLocation(p2, "tex0"); //tex0用于在GLSL中定义采样器名称
glUniform1i(texLoc, 2);//texLoc在获得定位之后,被glUniform1i绑定至GLSL
这里的tex0和你GLSL中的tex0是对应的,如果你有多个纹理,可以将其命名为tex1,tex2..等等,只要保证和GLSL里面的一致就可以。但是如果你在多个FBO中用的话,显然tex12这样的命名会给你的GLSL编写带来烦恼,所以在每个shader program里面,你可以独立的指定。比方说在一个shader program0中的,你要把纹理0和纹理1处理下,那么把他们命名为tex0和tex1;接下来你要在shader program1中,处理纹理3和纹理4,那么也可以把他们也命名为tex0和tex1,和之前的不存在冲突,这个是实测的结果。这样的好处是,不用在编写某个GLSL的时候,还要记得自己用了多少个tex
至于glUniform1i,这个网上也很少有个人理解的解释。其实它是指定了一个一致性变量,具体的含义不说了,重点说说glUniform1i(texLoc, 2)中2的含义。官方SDK说是Specifies the new values to be used for the specified uniform variable.是什么意思呢?其实texLoc这个变量是可以复用的,多个纹理都可以用他作为location传入,但是不同的是,这个type必须保持不一致。你可以把他看成是第一个location,第二个location等等,如果type重复了,那就意味着纹理的入口位置被重叠了,所以在不太理解这个type的含义之前,保持它的递增
做完上面两个步骤,就可以进入GLSL函数编写了
相关文章推荐
- 解决Vista系统OpenGL驱动问题的方法整理
- Delphi下OpenGL2d绘图之画四边形的方法
- Delphi下OpenGL2d绘图之画点的方法
- Delphi下OpenGL2d绘图之初始化流程详解
- Delphi使用OpenGL2d绘图之画图片Bmp的方法
- 通过OpenGL ES混合模式缩放视频缓冲区来适应显示尺寸
- VC运用OPENGL加载BMP纹理图的实现方法汇总
- java实现OpenGL ES纹理映射的方法
- java基于OpenGL ES实现渲染实例
- OpenGL坐标系介绍
- linux下opengl的安装(with qt)
- OpenGL超级宝典笔记——显示列表
- OpenGL超级宝典笔记——顶点数组
- OpenGL生成轮廓
- OpenGL超级宝典笔记——性能比较
- OpenGL超级宝典笔记——顶点缓冲区对象
- OpenGL超级宝典笔记——选择
- OpenGL超级宝典笔记——反馈
- OpenGL超级宝典笔记——遮挡查询
- OpenGL超级宝典笔记——深度纹理和阴影