贴图层OpenGL——glUniform1i 用法

[cpp] 
1.  
为了使用第二个纹理(以及第一个),我们必须改变一点渲染流程, 先绑定两个纹理到对应的纹理单元,然后定义哪个uniform采样器对应哪个纹理单元: 注意,我们使用glform1i设置uniform采样器的位置值,或者说纹理单元。 通过glUniform1i的设置,我们保证每个uniform采样器对应着正确的纹理单元。


[cpp] view plain copy
glActiveTexture(GL_TEXTURE0);  
glBindTexture(GL_TEXTURE_2D, texture1);  
glUniform1i(glGetUniformLocation(ourShader.Program, "ourTexture1"), 0);  
glActiveTexture(GL_TEXTURE1);  
glBindTexture(GL_TEXTURE_2D, texture2);  
glUniform1i(glGetUniformLocation(ourShader.Program, "ourTexture2"), 1);  
  
glBindVertexArray(VAO);  
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);  
glBindVertexArray(0);  


[cpp] view plain copy
  
[cpp] view plain copy
//获取shader里面uniform变量的地址  
int tex1_location=glGetUniformLocation(m_uProgram, "tex1");  
int tex2_location=glGetUniformLocation(m_uProgram, "tex2");  
int tex3_location=glGetUniformLocation(m_uProgram, "tex3");  
  
//对这几个纹理采样器变量进行设置  
glUniform1i( (GLint)tex1_location, 0);//对应纹理第一层  
glUniform1i( (GLint)tex2_location, 1);//对应纹理第二层  
glUniform1i( (GLint)tex3_location, 2);//对应纹理第三层  
  
//后面渲染的时候,设置三成纹理  
 glActiveTexture(GL_TEXTURE0 + 0);  
 glBindTexture(GL_TEXTURE_2D, texture1Id);  
   
 glActiveTexture(GL_TEXTURE0 + 1);  
 glBindTexture(GL_TEXTURE_2D, texture2Id);  
   
 glActiveTexture(GL_TEXTURE0 + 2);  
 glBindTexture(GL_TEXTURE_2D, texture3Id);  
   
 //所以glActiveTexture第几层,并不表示是shader里面第几个采样器,  
 //中间有glUniform1i进行纹理层和采样器地址进行绑定  
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值