我需要在运行时更新纹理,我的代码是:
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();
}
新问题
我在所有物体上得到第一个旧纹理。
答案 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));
}
});
}