纹理仅在某些设备上显示

时间:2012-09-07 20:12:03

标签: android opengl-es textures

我目前正在编写一个适用于OpenGL ES 1.1的Android应用程序。 它在我开发的HTC Desire(Android 2.3.7)上运行良好。现在我想在Nexus 7上测试它,但它只显示黑屏。我发现所有纹理都只是呈现黑色。在没有对象和没有纹理的部分上,我得到(几乎)黑色背景颜色。

所以我的问题是为什么纹理在某些设备上呈现得很好而在其他设备上却没有?

纹理都是二次的,尺寸幂为2(即512x512,1024x1024)。 这些是创建纹理时使用的设置:

gl.glBindTexture(GL10.GL_TEXTURE_2D, getTextureId());   

// Create Nearest Filtered Texture
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
        GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
        GL10.GL_LINEAR);

// Different possible texture parameters, e.g. GL10.GL_CLAMP_TO_EDGE
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,
        GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,
        GL10.GL_REPEAT);

gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, /*GL10.GL_REPLACE*/ GL10.GL_MODULATE);

// Use the Android GLUtils to specify a two-dimensional texture image
// from our bitmap
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);

我可以尝试在两个设备上渲染纹理吗?

1 个答案:

答案 0 :(得分:8)

如果您从drawables获取位图,请确保它们都在drawable-nodpi文件夹中。

否则,在不同的android密度上放大后,两个图像的功率可能不是2的幂(drawable文件夹中的1024x1024图像在HDPI设备上变为1536x1536)。