使用libgdx绘画会使对象闪烁

时间:2012-05-31 21:40:29

标签: android graphics opengl-es libgdx

我试图使用Libgdx创建一个非常简单的绘画应用程序。我已经在intertubes上搜索了几天,试图解决这个问题,这可能是由于我的openGL noobness。

当我在屏幕上绘制一个对象时,只要render()方法正在运行,我画的东西就会很快闪烁(我假设它每次都是render()方法)叫做)。如果我禁用连续渲染,则闪烁停止,直到我绘制其他东西(再次,render()没有被调用)。

假设我正在将一个新纹理适当地加载到一个Sprite中 - 它确实绘制了所有 - 而且我在render()方法中所做的全部是:

batch.begin();
myShape.setPosition(Gdx.input.getX(), Gdx.input.getY());
batch.setColor(Color.BLUE);
myShape.draw(batch);
batch.end();

我没有打电话给glClear,因为我不想(我想)我想在每次渲染时清除屏幕。我盲目地尝试了各种glEnable和glDisable用于剔除,混合,dithernig等,但没有任何帮助解决这个问题。

世界上我做错了什么,或者只是不理解这里?我没有正确设置吗?

1 个答案:

答案 0 :(得分:2)

那是因为double buffering

启用双缓冲后,您不会覆盖前一帧,而是覆盖前一帧。这意味着,偶数帧和奇数帧被绘制到两个不同的缓冲区。更改这些缓冲区会产生闪烁。

我看到了三个解决方案:

  • 您可以禁用双缓冲。我不确定这是否可以在libgdx中使用。

  • 您可以清除屏幕并在每一帧中绘制所有内容。绘制时会变慢。

  • 您可以将图像保存到纹理,并在每个帧的开头将其绘制回屏幕。这是首选解决方案,但可能需要一些工作。这种技术称为“渲染到纹理”。