4

ライブ壁紙を作成していますが、問題が1つあります。画像を背景として設定したいのですが、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 システムが 2 の累乗ではないテクスチャ拡張をサポートしていることがわかっている場合にのみ使用できると思います。このフラグを設定しても、実際には 2 のべき乗テクスチャをサポートしていないハードウェアは修正されません。(そのようなハードウェアが世界にどれだけ残っているかはわかりませんが、最近では無害かもしれません。)

2 の累乗のテクスチャ要件は、ハードウェアと OpenGL ES の制限です。この要件は、OpenGL ES 2.0 から削除されました。

この要件を回避するもう 1 つの方法は、サイズが 2 の累乗であり、その中に 2 の累乗でないテクスチャが含まれているテクスチャ アトラスを構築することです。次に、アトラス イメージのサブセクションをレンダリングします。http://bitiotic.com/blog/2012/05/10/tutorial-for-texturepacker-and-libgdx/を参照してください。

于 2013-01-10T17:26:21.950 に答える