6

我正在尝试使用 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 用于剔除、混合、抖动等,但没有任何解决问题的方法。

我到底做错了什么,或者只是不理解这里?我没有设置正确的东西吗?

4

1 回答 1

3

那是因为双缓冲

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

我看到三个解决方案:

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

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

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

于 2012-05-31T22:23:02.890 回答