java - OpenGL 在 Android 2.3.7(CyanogenMod-7) 上绑定(bind)空白纹理,而在其他 Android 版本上绑定(bind)实际图像

标签 java android opengl-es

绑定(bind)代码:

gl.glBindTexture (GL10.GL_TEXTURE_2D, id);

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

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

gl.glTexEnvf (GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_REPLACE);

GLUtils.texImage2D (GL10.GL_TEXTURE_2D, 0, bitmaps.get (resource), 0);

在 Android 2.3.3 和 Android 4.x.x 上:

Screen good

在 Android 2.3.7 上我有:

Screen bad

附加信息:我的纹理宽度和高度不是 2 的幂。纹理位于drawable-nodpi 文件夹中。纹理被拉伸(stretch)以适应不同的屏幕尺寸,第一个屏幕截图是从屏幕尺寸为 854x480 的设备获取的,第二个屏幕截图是从屏幕尺寸为 800x480 的设备获取的。

  • 设备运行 CyanogenMod-7。

我的第一个怀疑是 gl.glTexParameterf (GL10.GL_TEXTURE_2D, settings 但我不是它们的专家。我尝试了一些替代方案,但没有多大帮助。

最佳答案

对于 Android 上的 OpenGLES,您需要保持安全,因为许多供应商不使用非两个纹理的幂。您可以离线调整所有纹理的大小,也可以在加载期间调整它们的大小。检查此类以获取有关如何轻松调整两个纹理的非幂大小的更多信息:https://github.com/TraxNet/ShadingZen/blob/master/library/src/main/java/org/traxnet/shadingzen/core/BitmapTexture.java

关于java - OpenGL 在 Android 2.3.7(CyanogenMod-7) 上绑定(bind)空白纹理,而在其他 Android 版本上绑定(bind)实际图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14629902/

相关文章:

三星 Galaxy 变体上的 Android opengl 白色纹理

iphone - 如何在 iPhone 上的 OpenGL ES 中设置/获取纹理上的像素?

java - log4j.properties 应该是什么样子?

java - 使用 Android 从 SIM 卡中检索 SMS 消息

java - 返回类型与 <Interface.functionName> 不兼容

安卓架构组件 : ViewModel keeps getting re-initialised

java - 如何在Javasound中选择麦克风?

android - Android 中 string.xml 中的字符串数组

android - 确定偶数/奇数(整数)?

android - 如何在 OpenGL ES 2.0 中设置背景?