适用于Nexus One的OpenGL代码无法在Nexus S上正常运行。 纹理似乎没有渲染,我只剩下纹理应该是黑色。
有人有任何想法吗?
答案 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等)