我有一个瓷砖地图数组[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
答案 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
呈现的所有内容。