4

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

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

4

1 回答 1

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 系统支持非二次幂纹理扩展的情况。设置此标志不会修复真正不支持二次幂纹理的硬件。(我不知道世界上还剩下多少这样的硬件,所以这些天它可能是无害的。)

二次幂纹理要求是硬件和 OpenGL ES 的限制。此要求已从 OpenGL ES 2.0 中删除。

绕过这个要求的另一种方法是构建一个大小为二次方的纹理图集,其中包含非二次方纹理。然后渲染图集图像的子部分。见http://bitiotic.com/blog/2012/05/10/tutorial-for-texturepacker-and-libgdx/

于 2013-01-10T17:26:21.950 回答