我正在尝试使用OpenGLES2.0为Android开发一款小游戏,我遇到这个问题阻止了我实现设备之间的兼容性。我在两个设备中测试我的应用程序,Xperia Z1和Galaxy S2(因为模拟器不能与OpenGLES2.0一起使用)。如果我调用GLUtils.texImage2D
加载带有位图的纹理,该位图来自分辨率低于或等于1024x1024的图像,则它在两个设备中都能正常工作。使用2048x2048的纹理适用于S2,但不再适用于Z1(它返回GL_INVALID_VALUE
)。加载高于此值的任何东西在Z1中都不起作用,也不在S2中起作用。但是,我已经检查了GL_MAX_TEXTURE_SIZE
,并且在两个设备中都设置为4096.我不知道出了什么问题,我按如下方式调用texImage2D:
GLES20.glGenTextures(1,texture,0);
Bitmap bmp = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.test);
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texture[0]);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bmp, 0);
提前致谢!
答案 0 :(得分:1)
好的,我会回答我自己的问题,因为我已经发现了什么问题。由于我处于Android开发的早期阶段,我将所有纹理都放在drawable
文件夹中。 Android自动缩放此图像取决于设备的dpi,Xperia Z1具有441dpi屏幕,与Galaxy S2的217dpi相比,导致调整大小的因素更大,达到GL_MAX_TEXTURE_SIZE
限制,纹理更小在创建位图时。我现在正在使用drawable-nodpi
文件夹并且它可以正常工作,但我会对此有更多了解。