首页 > 解决方案 > SDL2:如何在不清除屏幕的情况下进行渲染

问题描述

我正在尝试为图形库制作 SDL2 适配器。我相信这个库假设它在屏幕上绘制的所有东西都保留在屏幕上,只要它从不在屏幕上绘制任何东西。(有关此问题的详细信息,请参阅问题的结尾)

最好的方法是什么?

我遇到了多种解决方案,包括:

我可能遗漏了一些关于 SDL2 的东西,当然还有关于图书馆(Adafruit-GFX-Library)的东西。在这种情况下,事务 api意味着什么?我找不到任何关于它的信息,我觉得它可能很重要。

标签: c++sdlsdl-2adafruit

解决方案


在我对 SDL2 和一般渲染应用程序编程的理解中,SDL2 被设计为每次都绘制一个完整的帧,这意味着您可以通过 OpenGL API 调用清除“当前窗口”

glClearColor(0, 1.0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT);

这会清除当前的 OpenGL 上下文,即帧缓冲区,您将拥有 2 个或使用我不熟悉的 SDL2 渲染器。然后你会交换缓冲区,然后重复。(这完全符合我所依赖的这个架构建议

因此,要么您必须以某种方式从库中重播第二帧的绘制命令,要么您也可以禁用双帧缓冲,至少对于 OpenGL 后端,通过

SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 0);

(有关其他 OpenGL SDL2 设置代码,请参阅此 GitHub 存储库以及我的通用帮助程序类


推荐阅读