好吧,所以这些纹理让我很困惑.我一直在看这个教程(我认为很棒),特别是"你可以定义最多32个纹理单元,但每个着色器最多可以定义8个纹理"的图片.据我了解,这是它的工作原理:
您激活纹理单位.然后,将纹理对象(类似于图像中的"纹理数据"立方体)绑定到该单元内的某个目标.所以,glGenTextures制作对象并得到它们的名字,然后glBindTexture将该纹理绑定到TEXTURE_2D或其他东西(我现在对其他目标不感兴趣).然后,您可以使用glTexImage2D指定纹理数据.
现在.我正在使用3个着色器程序,每个程序都需要不同的纹理.这就是我想要做的事情:
在初始化阶段,我浏览每个纹理单元,然后去
对于着色器,我glUniform将每个着色器中的一个制服与glActiveTexture的GL_TEXTUREi中指定的'i'值相匹配.我总共只需要四个纹理,而且它们非常小.
现在,在渲染过程中,我应该能够很好地切换程序,一切正常,对吧?每个程序都有一个统一指定要使用的单元,每个单元已经有一个绑定到其TEXTURE_2D目标的对象,每个对象都有glTexImage2D指定的数据,对吗?所以我的渲染功能不需要绑定或激活单元?至少这是我理解它的方式,但是我在错误的地方绘制了错误的纹理.
此外,在我的一个程序中,我想在单个表面的三个纹理之间切换.所以我想我将每个纹理加载到一个对象中,并将每个对象绑定到一个单元,然后在渲染时我可以通过glUniform告诉程序使用哪个纹理单元.
所以我想知道我是否误解了OpenGL中纹理的基本结构,或者当程序切换时对象与单元的绑定是否会过期,或类似的东西.或者我是否需要多次绑定纹理 - 但何时,为什么?