zoukankan      html  css  js  c++  java
  • OpenGL下多个sampler在shader中的使用


    在OpenGL中,sampler2D/Cube等做为uniform可以在fragment shader中使用。结合glActiveTexture和glUniform1i,实现texture与sampler的绑定。
    正常情况下的使用,可以参照各种GLSL教程里的例子。这里说一下非正常情况下在shader中使用多个sampler。
    比如在fragment shader中声明了多个sampler:

    uniform samplerCube environmentMap;
    uniform sampler2D baseTexture;
    uniform sampler2D bumpTexture;
    uniform bool enableEnvronmentMap;
    uniform bool useBaseTexture;
    uniform bool enableBump;
    

    从声明上可以看出,这里用了三个变量分别控制是否在shader program中使用对应的sampler。比如,把enableBump设置为false,shader中就不用调用bumpTexture这个sampler2D。从而,在程序中就可以少调用glActiveTexture、glBindTexture、glEnable(GL_TEXTURE_2D)等。 

    等等,真的可以少调用glActiveTexture了吗?

    之前,我是这样认为的。经过实践发现,确实是这样的。当然,与sampler对应的uniform必须设置。

    另外一个问题,把enableBump设置为false后,sampler uniform的值需要调整吗?

    假如baseTextue对应0, bumpTexture对应1,environmentMap对应2,那么如果把enableBump设置为false,不使用bumpTexture,也不为bump设置glActiveTexture,那其他两个unifrom应该设置何值?给bumpTexture设置何值?答案:0,1,2,即bumpTexture与environmentMap换位置了。从而可以得知,如果只使用environmentMap,应该为:environmentMap:0, baseTexture:1, bumpTexture:2,或者base与bump互换。


    至此,真相大白。



  • 相关阅读:
    经验1
    Caffe和MatConvNet安装
    Matconvet的学习笔记
    CNN数据准备
    深度学习之卷积和池化
    深度学习之CNN的推导
    深度学习八(总结)
    深度学习七(卷积神经网络)
    深度学习六
    深度学习五
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333108.html
Copyright © 2011-2022 走看看