【问题标题】:OpenGL ES 2.0 on iPhone - How many texture units can i use?iPhone 上的 OpenGL ES 2.0 - 我可以使用多少个纹理单元?
【发布时间】:2012-06-03 13:52:08
【问题描述】:

在苹果的文档中:(http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/OpenGLESPlatforms/OpenGLESPlatforms.html)

它表示“PowerVR SGX 上的 OpenGL ES 1.1”“有 8 个纹理单元可用。”

它没有说明 OpenGL ES 2.0 上有多少可用的单元,这是否意味着没有限制?

【问题讨论】:

    标签: iphone ios opengl-es


    【解决方案1】:

    您的应用应该在运行时使用以下方式以编程方式进行检查,而不是询问并获得将来可能正确或不正确的答案:

    glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &MaxTextureUnits);
    

    请注意,顶点着色器和片段着色器中允许的纹理单元数量也有单独的数字。他们将使用常量GL_MAX_VERTEX_TEXTURE_IMAGE_UNITSGL_MAX_TEXTURE_IMAGE_UNITSCOMBINED 号码是两者同时可用的号码。

    【讨论】:

    • GL_MAX_TEXTURE_UNITS 未在 gl.h iOS 上定义
    • 抱歉 - 在 ES 2.0 中,它是 GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
    • 其实有GL_MAX_VERTEX_TEXTURE_IMAGE_UNITSGL_MAX_TEXTURE_IMAGE_UNITSGL_MAX_COMBINED_TEXTURE_IMAGE_UNITS枚举。第一个用于计算顶点着色器中允许使用的纹理单元数,第二个用于片段着色器,第三个用于组合两个着色器。
    【解决方案2】:

    在 Apple 的 iOS Device Compatibility Reference 上有 iPhone 和 iPad 上所有硬件的详细列表

    基于此,您可以安全地在 任何 iOS 设备上使用多达 8 纹理单位

    【讨论】:

    • 有用的答案 - 很高兴知道预期的最小值,而不仅仅是运行时的任意数字,因为它会影响我们着色器的核心设计。
    【解决方案3】:

    实际上答案在您链接的同一页面中:

    PowerVR SGX 上的 OpenGL ES 2.0

    限制

    ...

    您可以在片段着色器中使用多达 8 个纹理。您不能在顶点着色器中使用纹理查找。

    ....

    【讨论】:

    • "在片段着色器中最多可以使用 8 个纹理。"与最大纹理单位不同。我可以使用超过 1 个片段着色器。
    • 如果我使用 2 个片段着色器会怎样?我可以将 16 个纹理单元加载到内存中吗?
    猜你喜欢
    • 2012-01-12
    • 2011-05-19
    • 2011-11-23
    • 1970-01-01
    • 2011-11-08
    • 2014-10-28
    • 1970-01-01
    • 2013-01-06
    • 2012-04-08
    相关资源
    最近更新 更多