Google Nexus 7(可能还有其他设备)上的Non Power of Two纹理

时间:2014-08-05 17:54:33

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

我推荐你这个问题:

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设备(可能我错了)。

am 意识到Nexus 7的纹理大小限制有限,为2048 x 2048,但仍不确定此NPOT限制。

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

1 个答案:

答案 0 :(得分:0)

正如您在问题中已经提到的,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的支持。