Nexus S上的OpenGL ES黑色纹理

Rab*_*oss 6 android opengl-es opengl-es-2.0 nexus-s

在Nexus One上运行的OpenGL代码在Nexus S上无法正常工作.纹理似乎不会渲染,而我只剩下纹理所在的黑色.

有人有任何想法吗?

Dan*_*ith 2

这里给出的公认答案比我更深入地解决了这个问题,但是虽然这个黑屏问题确实是由于 Nexus S(和其他一些设备)对二次幂纹理的严格要求而引起的,但这并不意味着纹理需要具有 Po2 尺寸

在纹理加载代码中,可能有以下几行:

        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);
Run Code Online (Sandbox Code Playgroud)

如果修改此代码以添加另外两行用于夹紧,那么手机支持 nPo2 纹理,前提是可以进行夹紧。这是添加了钳位的代码:

        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
Run Code Online (Sandbox Code Playgroud)