Libgdx在运行时更新纹理

时间:2014-02-08 20:45:10

标签: java android libgdx

我需要在运行时更新纹理,我的代码是:

    public void updateTexture(Bitmap bmp) {
        mTexture = new Texture( ImageHelper.bitmapToPixmap( bmp ) );
    }

但它不起作用。有人可以帮帮我吗? 感谢

更新

    public void render(PerspectiveCamera camera) {

        mTexture.bind();
        mShaderProgram.begin();

            mShaderProgram.setUniformMatrix("u_worldView", camera.combined );
            mShaderProgram.setUniformi("u_texture", 0);
                mMesh.render(mShaderProgram, GL20.GL_TRIANGLES);

        mShaderProgram.end();
    }

新问题

我在所有物体上得到第一个旧纹理。

2 个答案:

答案 0 :(得分:0)

你的问题是你在打电话

mTexture.disose();

释放对象,然后尝试为其分配另一个对象。这永远不会奏效。 你可以做的是:

public void updateTexture(Bitmap bmp) {
    mTexture = new Texture( ImageHelper.bitmapToPixmap( bmp ) );
}

这应该解决。虽然这实际上从未被推荐过,因为它在同一个实例中创建了另一个对象,但不管怎样,对吧?

答案 1 :(得分:0)

好的,我终于在这里找到了问题:

Converting Android Bitmap to LibGdx's Texture

工作代码:

public void updateTexture(final Bitmap bmp) {

     Gdx.app.postRunnable(new Runnable() {
            @Override
            public void run() {            
                mTexture    = new Texture( mImageHelper.bitmapToPixmap( bmp ) );
                mSprite.setTextureRegion(new TextureRegion(mTexture));
            }
     });

}