在Nexus One上运行的OpenGL代码在Nexus S上无法正常工作。
纹理似乎没有渲染,我只剩下应该放置纹理的黑色区域。

任何人有任何想法吗?

最佳答案

accepted answer given here比我更深入地解决了这个问题,但是这个黑屏问题的确是由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);

如果修改此代码以添加更多两行用于夹持,则电话将支持支持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);

10-07 22:21