SDL2:如何在不清除屏幕的情况下渲染

SDL2: How to render without clearing the screen

本文关键字:屏幕 情况下 清除 SDL2      更新时间:2023-10-16

我正在尝试为图形库做一个SDL2适配器。我相信该库假定它在屏幕中绘制的所有内容都可以保留在屏幕上,只要它永远不会在其顶部画出某些内容。(有关此的详细信息,请参见问题的结尾)

最好的方法是什么?

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

  • 硬件渲染而无需致电SDL_RenderClear。问题是SDL使用双重缓冲区,因此内容可以最终进入其中的任何一个,而我最终只看到了一次渲染的子集。
  • 软件渲染,如果我正确理解SDL,则意味着将我映射到纹理的表面,因此我可以呈现纹理,我将编辑pixels字段主内存中的表面。这将非常慢,而且正如图书馆期望的那样,一切都立即呈现,并且没有框架的概念意味着每次有更新时将数据发送到GPU(甚至是单个像素)。

我可能缺少有关SDL2的内容,并且肯定是关于库(Adafruit-GFX-Library)。在这种情况下,事务API意味着什么?我无法找到有关它的任何信息,我觉得这可能很重要。

在我对SDL2和常规渲染应用程序编程的理解中,SDL2设计为您每次都会绘制一个完整的帧,这意味着您可以通过OpenGL API调用

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

清除当前的OpenGL上下文,即帧缓冲区,其中您将拥有2个或使用我不熟悉的SDL2渲染器。然后,您将交换缓冲区,然后重复。(非常适合我依靠的架构建议)

因此,要么您必须以某种方式从库中重播Draw命令,要么您也可以禁用Double框架缓冲,至少对于OpenGL后端,

SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 0);

(对于其他OpenGL SDL2设置代码