Nexus S上的OpenGL ES黑色纹理

时间:2011-01-24 11:21:14

标签: android opengl-es opengl-es-2.0 nexus-s

适用于Nexus One的OpenGL代码无法在Nexus S上正常运行。 纹理似乎没有渲染,我只剩下纹理应该是黑色。

有人有任何想法吗?

2 个答案:

答案 0 :(得分:2)

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);

答案 1 :(得分:0)

Nexus S对OpenGL ES中用作纹理的图像大小更为严格。

纹理的大小必须为2 ^ n(例如256,512,1024等)