libgdx在运行时生成纹理

时间:2015-08-09 00:13:56

标签: dynamic libgdx textures

我需要创建一个由覆盖的其他纹理组成的纹理。我尝试过使用pixmap,但速度非常慢。我们的想法是创建一个"快照"一个对话框,以便它可以显示动画,当它被解除时。请帮忙

这是我正在使用的代码:

texture_dialog.getTextureData().prepare();
Pixmap pm1 = texture_dialog.getTextureData().consumePixmap();
btn_ok.getTexture().getTextureData().prepare();
Pixmap pm = btn_ok.getTexture().getTextureData().consumePixmap();
pm1.drawPixmap(pm, pm1.getWidth()/2 - pm.getWidth()/2, pm1.getHeight() - pm.getHeight() - 52);
textureSnapShot = new Texture(pm1, true);
pm1.dispose();
pm.dispose();

textureSnapShot.setFilter(TextureFilter.MipMapLinearLinear, TextureFilter.MipMapLinearLinear);
spriteSnapShot = new Sprite(textureSnapShot);

我尝试过如下使用FrameBuffer:

SpriteBatch sb = new SpriteBatch();
sb.setProjectionMatrix(camera.combined);
FrameBuffer fbo = new FrameBuffer(Format.RGBA8888, texture_dialog.getWidth(),  texture_dialog.getHeight(), false);

fbo.begin();
sb.begin();
sb.draw(texture_dialog, 0, 0);
sb.draw(btn_ok.getTexture(), texture_dialog.getWidth()/2 - btn_ok.getWidth()/2, 52);
sb.end();
fbo.end();
sb.dispose();
textureSnapShot = fbo.getColorBufferTexture();

//textureSnapShot.setFilter(TextureFilter.MipMapLinearLinear, TextureFilter.MipMapLinearLinear);
spriteSnapShot = new Sprite(textureSnapShot);

结果如下: http://medialinestudio.co.za/screens.png

左:Pixmap右:FrameBuffer

Pixmap的结果正确但速度太慢。 FrameBuffer更快但结果不正确

1 个答案:

答案 0 :(得分:0)

FBO绝对是您应该根据自己的需要使用的。

阅读这篇文章:libgdx SpriteBatch render to texture

你错过的是:

  • 创建一个具有正确宽度/高度和位置的相机,以使您的绘图适合FBO视口(0,0,宽度,高度)
  • 翻转输出纹理(m_fboRegion.flip(false,true))