我制作动态壁纸,我有一个问题。我想将图像设置为背景,Eclipse显示错误:
01-10 10:37:18.206: E/AndroidRuntime(1045): FATAL EXCEPTION: GLThread 99
01-10 10:37:18.206: E/AndroidRuntime(1045): com.badlogic.gdx.utils.GdxRuntimeException: Texture width and height must be powers of two: 480x800
我的代码如下:
public class Tapeta implements ApplicationListener {
private SpriteBatch batch;
private Texture texture;
private TextureRegion region;
@Override
public void create() {
texture = new Texture(Gdx.files.internal("data/cat.jpg"));
Texture.setEnforcePotImages(false);
}
@Override
public void dispose() {
texture.dispose();
}
@Override
public void render() {
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.draw(texture, 0, 0);
batch.end();
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}
我正在寻找我的问题的解决方案,但我没有找到。
答案 0 :(得分:5)
在这种情况下,libGDX错误消息实际上是有用的!
Texture width and height must be powers of two: 480x800
因此纹理宽度和高度必须是以下之一:2,4,8,16,32,64,128,256,512,1024,2048(该列表中既不是480也不是800 ......)
你有这条神奇的界限:
Texture.setEnforcePotImages(false);
但是在加载纹理之后。如果在纹理加载之前将放在之前,异常是否会消失? (在您的问题中包含更多的异常回溯会很有帮助)。我相信这种方法仅适用于您知道底层OpenGL ES 1.0系统支持非二次幂纹理扩展的情况。设置此标志不会修复真正不支持2次幂纹理的硬件。 (我不知道这个世界上剩下多少这样的硬件,所以这些天它可能是无害的。)
二次幂纹理要求是硬件和OpenGL ES的限制。此要求已从OpenGL ES 2.0中删除。
解决这个问题的另一种方法是构建一个两个大小的纹理图集,它包含你不是两个幂的纹理。然后渲染图集图像的子部分。见http://bitiotic.com/blog/2012/05/10/tutorial-for-texturepacker-and-libgdx/