[英]Android OpenGL ES 2.0 Textures not working at some sizes
我刚刚发现我的应用程序存在一个非常奇怪的问题。
在我的手机上运行时会出现此问题。
我正在像这样加载位图(用作Open GL Texture):
tiles = BitmapFactory.decodeResource(view.getResources(), R.drawable.tilespic, BMFOptions);
BMFOptions设置以下行:
BMFOptions.inPreferredConfig = Bitmap.Config.RGB_565;
当我运行我的应用程序时,最初发生的是纹理显示为一个黑色正方形。 所以,我在另一台设备(平板电脑)上尝试过,它运行得很好。
我知道,如果位图具有alpha通道,如果已指定Bitmap.Config.RGB_565,并且已与其他位图(通过调用getConfig)确认,则BitmapFactory会将其加载为ARGB_8888。 此位图确实具有Alpha。
但是,当我调用getConfig时,它返回null (仅当指定了RGB_565且仅在此设备上的此位图/纹理上)。
我试过的
如果我将其设置为ARGB_8888或只是省略此位图的BMFOptions,则所有内容都会正确显示。
如果我将其设置为ARGB_4444(仅用于测试),则它会显示,但纹理是弯曲的/倾斜的(再次是该位图/纹理)。
所以,我所做的是调整原始位图的大小(原始大小 - 100 x 909)。
我将其调整为505 x 201、506 x 201以及其他多种尺寸,但仍然无法正常工作(请注意,这些是Sprite工作表,因此,这些尺寸只是他们的工作方式)。
然后,我将其尺寸调整为506 x 204,它确实起作用了。 然后,我以1880 x 921进行了尝试,然后再次工作。
我没有使用NPOT纹理,以前也从未遇到过问题,请记住,我还具有其他尺寸奇怪的纹理,例如1880 x 921和1000 x 885,这些在手机上表现完美(但显然它们的像素数据/布局不同)。
由于此位图具有Alpha(我需要),因此我现在只是删除该特定位图的BMFOptions并允许将其加载为ARGB_8888,但是,我想知道这种奇怪行为的任何可能原因。
如果它有帮助,这是我用来加载纹理的代码....
public static int LoadTexture(GLSurfaceView view, Bitmap imgTex){
int textures[] = new int[1];
try {
GLES20.glGenTextures(1, textures, 0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, imgTex, 0);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,GLES20.GL_CLAMP_TO_EDGE);
} catch (Exception e){
}
textureCount++;
return textures[0];
}
某些手机只能使用2大小幂的纹理。
例如256x256,512x512,1024x128将起作用
300x300、512x100等无法正常工作。
这是OpenGL ES 2.0标准的要求(afaik 3.0放宽了这一点)。 有些手机可以使用2-pow-of-2纹理,但并非必须这样做。 如果您希望尽可能多地定位手机,那么坚持使用2-pow-of2纹理是一种安全的方法。
如果这不是问题,请查看是否有任何GLErrors。
我也注意到:你正在使用GL10.GL_TEXTURE_2D,而在其他行中你正在使用GLES20。*。 我查了一下,GL_TEXTURE_2D在这两个地方被定义为3553,但如果你在那里使用GLES20,它看起来会更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.