首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS上OpenGL ES 2.0中每个程序的纹理单位的澄清

iOS上OpenGL ES 2.0中每个程序的纹理单位的澄清
EN

Stack Overflow用户
提问于 2012-08-02 08:13:14
回答 1查看 1.4K关注 0票数 1

根据苹果对OpenGL ES 2.0限制的文档:"You can use up to 8 textures in a fragment shader."

这看起来并不是非常具体,所以我假设它意味着“您可以为片段着色器的每个过程引用最多8个纹理单元。”

所以我一直在做的是,在我的片段着色器的给定过程中,我只引用了一个纹理单元,从纹理单元0开始。下一遍,我引用单元1。下一遍,单元2,依此类推。基于我上面的假设,这应该可以很好地工作到GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS.

然而,它似乎只在单元7之前工作,并在任何>=单元8处中断。

这听起来是不是会让我达到最大的纹理单位?还是我错过了什么?

如果我确实达到了片段着色器中允许的纹理单位的上限,我想我要做的是持有一个可变的程序数组,并在运行时根据我定义的纹理数构建任意多的程序,当我点击纹理单位索引的倍数是8的倍数时,切换到适当的程序。

这听起来合理吗,还是我漏掉了什么?

EN

Stack Overflow用户

发布于 2012-08-02 23:00:34

您可以通过如下方式查询设备上的最大纹理单元数:

代码语言:javascript
运行
复制
+ (GLint)maximumTextureUnitsForThisDevice;
{
    GLint maxTextureUnits; 
    glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &maxTextureUnits);
    return maxTextureUnits;
}

在我拥有的最强大的设备视网膜iPad上运行,我得到了最多8个纹理单元。这意味着您将无法将纹理绑定到GL_TEXTURE7以上的任何内容,并将可以馈送到着色器的同步纹理数限制为8。

然而,正如Tim在他的评论中所建议的那样,如果您一次只需要访问一个纹理,那么没有什么可以阻止您将每个纹理顺序绑定到单个单元,对其进行处理,然后将下一个纹理绑定到该单元。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11769360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档