【问题标题】:ios, opengl es2.0., using multiple textures, but only get one active texture unitios,opengl es2.0.,使用多个纹理,但只获得一个活动纹理单元
【发布时间】:2014-10-16 22:35:11
【问题描述】:

我正在为 ios 开发一个 opengl es 应用程序。 我试图在我的着色器中混合两个纹理,但我总是只得到一个活动纹理单元。 我已经生成了两个纹理,并将它们与片段着色器中的两个“sampler2D”链接起来。 我使用 glUniform1f(); 将它们设置为单元 0 和 1;

我已经使用循环绑定纹理

for (int i = 0; i < 2; i++)
{
    glActiveTexture(GL_TEXTURE0 + i);
    glBindTexture(GL_TEXTURE_2D, textures[i]);
}

但是当我绘制 opengl 框架时,只有一个单元处于活动状态。如下图所示

那么,我做错了什么?

【问题讨论】:

    标签: ios opengl-es textures


    【解决方案1】:

    我读取该工具输出的方式(我没有使用它),左窗格显示当前活动的纹理单元。总是有一个活动的纹理单元,对应于您最后一次调用glActiveTexture()。这意味着在您调用之后:

    glActiveTexture(GL_TEXTURE0 + i);
    

    左侧圈出的字段中的值将是i 的值。

    右窗格显示绑定到每个纹理单元的纹理。由于您使用问题中显示的循环将纹理绑定到单元 0 和 1,因此它显示绑定到纹理单元 0 的纹理(id 为 201)和绑定到纹理单元 1 的纹理(id 为 202)。

    据我所知,屏幕截图中显示的状态正是您根据描述和代码片段设置的状态。

    根据您问题中的措辞,您可能认为glActiveTexture() 启用了纹理单元。事实并非如此。 glActiveTexture() 仅指定后续 glBindTexture() 调用对哪个纹理单元进行操作。

    然后,使用哪些纹理取决于您为着色器程序的采样器制服设置的值,以及您绑定到相应纹理单元的纹理。当前活动纹理单元的值对绘制调用没有影响,仅对纹理绑定有影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多