SDL2:如何在不清除屏幕的情况下渲染
SDL2: How to render without clearing the screen
我正在尝试为图形库做一个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设置代码
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在已经使用Git的情况下减少编译时间
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如何在没有信号的情况下从C++执行QML插槽
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 为什么在某些情况下不写入此文件?
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 如何在不影响原始内容的情况下审查计算机屏幕上的内容
- SDL2:如何在不清除屏幕的情况下渲染
- 如何在不保存文件的情况下制作打印屏幕并将其发送到FTP服务器?我的工作代码将文件保存到HDD
- 如何在不使用任何框架或库的情况下在屏幕上绘制图形
- C++应用程序在没有屏幕输出的情况下执行
- 如何在不删除屏幕图片的情况下,将invalide替换为转到OnDraw的函数
- 如何输出到控制台,并在不清除屏幕和重写所有内容的情况下覆盖文本