使用libgdx绘画会使对象闪烁

Dav*_*ave 5 graphics android opengl-es libgdx

我正在尝试使用Libgdx创建一个非常简单的绘画应用程序.我一直在寻找intertubes几天试图解决这个问题,这可能是由于我的openGL noobness.

当我在屏幕上绘制一个对象时,只要render()方法正在运行,我绘制的东西就会很快闪烁(我假设每次调用render()方法时都会闪烁).如果我禁用连续渲染,则闪烁将停止,直到我绘制其他内容(同样,未调用render()).

假设我正在将一个新的Texture加载到Sprite中 - 它确实绘制了所有 - 而且我在render()方法中所做的就是这样:

batch.begin();
myShape.setPosition(Gdx.input.getX(), Gdx.input.getY());
batch.setColor(Color.BLUE);
myShape.draw(batch);
batch.end();
Run Code Online (Sandbox Code Playgroud)

我不是在调用glClear,因为我不想(我想)每次渲染都要清除屏幕.我盲目地尝试了各种glEnable和glDisable用于剔除,混合,dithernig等,但没有任何帮助这个问题.

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

Pio*_*zmo 3

那是因为双缓冲

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

我看到三种解决方案:

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

  • 您可以清除屏幕并绘制每一帧的所有内容。当你绘制时,这会变得更慢。

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