0

我在带有 Android ICS 的 HTC One x 上看到了一个问题,但在我迄今为止测试的任何其他设备上都没有:

所有没有 alpha 通道(24 位 png)并且我没有启用 alpha 混合的纹理在该设备上都是白色的。请参阅下面我用来绘制纹理的代码,对于没有 alpha 通道的纹理,m_alpha_blend 为 false:

if (m_alpha_blend) {
    gl.glEnable(GL10.GL_BLEND);

    gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
}

gl.glEnable(GL10.GL_TEXTURE_2D);

gl.glBindTexture(GL10.GL_TEXTURE_2D, m_texture_id);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, m_texture_buffer);

... (drawing)

gl.glDisable(GL10.GL_TEXTURE_2D);
if (m_alpha_blend) {
    gl.glDisable(GL10.GL_BLEND);
}
4

2 回答 2

1

我找到了解决方案。这不是 alpha / 透明度的问题,而是纹理大小的问题。所有边大于 1024 像素的纹理都会在该设备上显示为白色。

于 2012-04-19T22:17:26.353 回答
0

你可能想要运行类似的东西:

int max;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max);

在每个设备上,如果设备不支持您的最大分辨率纹理,则将您的纹理降级为更小的尺寸。

于 2012-04-19T23:09:56.820 回答