如何在SDL 2.0中进行双缓冲?

时间:2015-02-05 10:14:05

标签: sdl-2

我有一个瓷砖地图数组[50] [50]。

当我单击鼠标移动该阵列中每个单个图块的x和y时,我看到每个图块之间有空白区域 - 我相信这称为“撕裂”,这是不合适的。

我用谷歌搜索了双缓冲并阅读了维基,http://en.wikipedia.org/wiki/Multiple_buffering#Double_buffering_in_computer_graphics

如何在SDL2中完成,特别是使用' for循环创建的大型磁贴阵列?

...我怀疑你将瓷砖纹理复制到缓冲区纹理上并在完全加载后将其复制到渲染器 - 虽然我无法使其工作,但是我希望看到一个完整的工作示例!

这是我之前发布的当前代码: SDL2 double buffer not working, still tearing

2 个答案:

答案 0 :(得分:2)

从SDL2开始,所有硬件渲染都必须进行双重缓冲,因此首先需要确保通过the hardware rendering library进行所有绘制。

然后你只需要调用SDL_RenderPresent来翻转双缓冲区。

如果您目前使用software rendering system,则应该修复它。但是,如果您已经这样做了,我会怀疑还有其他一些问题,您可能想检查一下是否使用了vsync,并查看您的绘图代码中是否还有其他错误可能导致此问题。

请注意,如果您当前没有使用vsync,这也可能是原因。 您需要通过设置SDL_HINT_RENDER_VSYNC提示来解决此问题。

答案 1 :(得分:1)

SDL2自动为您处理双缓冲:

  • SDL_RenderClear将清除当前的渲染缓冲区。
  • SDL_RenderCopy会将纹理渲染到当前渲染缓冲区。
  • SDL_RenderPresent将交换缓冲区,显示自上次SDL_RenderCopy调用以来使用SDL_RenderClear呈现的所有内容。