如何在LibGDx中加载图像作为背景?

时间:2013-01-10 10:56:43

标签: android libgdx live-wallpaper

我制作动态壁纸,我有一个问题。我想将图像设置为背景,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() {
    }
}

我正在寻找我的问题的解决方案,但我没有找到。

1 个答案:

答案 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/