我推荐你这个问题:
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限制。
如果有人能够一劳永逸地为我解决这个问题,请感激不尽。
答案 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的支持。