【问题标题】:Non Power of Two texture on the Google Nexus 7 (and possibly other devices)Google Nexus 7(可能还有其他设备)上的非二次幂纹理
【发布时间】:2014-08-05 17:54:32
【问题描述】:

我请你参考这个问题:

GLSurfaceView displaying black on Nexus 7 with Android 4.2

事实证明,当提问者将纹理从 NPOT 更改为 POT 纹理时,提问者的问题得到了解决。

我的困惑源于官方的 OpenGL ES 2.0 规范,该规范声明 OpenGL ES 2.0 支持 NPOT 纹理(只是不支持 mipmap,只支持 CLAMP_TO_EDGE 环绕模式)

Nexus 7 支持 OpenGL ES 2.0,因此它不受规范规则的约束吗?是什么让 Nexus 7 如此与众不同?是什么阻止它支持 NPOT 纹理?我目前不知道有任何其他 OpenGL ES 2.0 设备有此限制(也许我错了)。

知道 Nexus 7 的纹理大小限制为 2048 x 2048,但仍不确定此 NPOT 限制。

如果有人能一劳永逸地为我解决这个问题,不胜感激。

【问题讨论】:

  • 我想你已经回答了你自己的问题。如您所说,保证仅支持GL_CLAMP_TO_EDGE 作为 NPOT 纹理的包装模式。您链接的代码将包装模式设置为GL_REPEAT
  • 哎呀:-/谢谢@RetoKoradi,不知道我是怎么错过的-我只是看了下面的评论“令人惊讶的是,有些设备仍然不支持两种纹理的非功率”,并且只是假设海报使用 CLAMP_TO_EDGE 没有检查:-) 谢谢!

标签: android textures opengl-es-2.0 nexus-7


【解决方案1】:

正如您在问题中已经提到的,OpenGL ES 2.0 规范定义仅支持 GL_CLAMP_TO_EDGE 作为 NPOT 纹理的包装模式。

你链接的代码使用GL_REPEAT:

GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,
        GLES20.GL_REPEAT);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,
        GLES20.GL_REPEAT);

因此,规范不需要支持这一点。许多设备都支持OES_texture_npot extension,这增加了对其他环绕模式和 NPOT 纹理 mipmapping 的支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 2017-03-25
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多