6

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

有人有什么想法吗?

4

2 回答 2

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

如果修改此代码以添加另外两行用于夹紧,那么手机支持 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);
于 2012-11-06T22:24:06.107 回答
0

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

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

于 2011-01-24T11:50:41.797 回答