在后缓冲区和前缓冲区之间交换时,后台缓冲区中的内容变为未定义。我想使用“窗口系统”来定义它,例如GLX,EGL,WGL。使用“本机”渲染器,如OpenGL(glClear)是我的备份计划,不用再提了。它是备份的原因是因为我不想搞乱本机渲染上下文。我会坚持使用X / GLX来解决这个问题,但是如果你想在其他环境中描述如何做到这一点,那就继续吧。
从Xlib文档(http://www.x.org/docs/X11/xlib.pdf)中,我找到了一个操作,XClearWindow,用于清除带有“背景像素”的窗口(顺便说一句,名字很棒......)。
关于如何在使用窗口系统(GLX)进行交换后清除后台缓冲区的其他建议是适用的。
干杯!
答案 0 :(得分:1)
在后缓冲区和前缓冲区之间交换时,后台缓冲区中的内容将变为未定义。
是的,这是一件好事。
我想使用“窗口系统”来定义它,例如GLX,EGL,WGL
为什么呢?除此之外,这也是未定义的,因为交换后的背景没有任何好处将来自它。
如果OpenGL DDX知道它将同步的XClearWindow,它最多只会降低性能。在最坏的情况下,你会引入一种竞争条件,在此条件下结果是不可预测的。
关于如何在使用窗口系统(GLX)进行交换后清除后台缓冲区的其他建议是适用的。
使用正确的OpenGL操作:glClear(…)
。
答案 1 :(得分:0)
XClearWindow是清除前/后还是两个缓冲区?
X没有双缓冲区的概念。每当与双缓冲窗口交互X时,两个缓冲区都会受到影响。唯一的例外是读取操作,例如只在前缓冲区上运行的XGetImage
。
X通过X双缓冲区扩展或xdbe扩展了双缓冲区概念:http://www.x.org/releases/X11R7.6/doc/xextproto/dbe.html#dbeswapbuffers
xdbe提供类似于GLX提供的XdbeSwapBuffers
的{{1}}操作。有一些重要的区别:
glxSwapBuffers
和glxWaitGL
)
执行。这几乎是我第二个问题的答案。 glxWaitX
)
上下文。 XdbeSwapBuffers没有。何时冲洗或不冲洗
应用程序设计师决定。为了在交换到预定义颜色后清除,“背景”交换行为是可行的方法。要清除的内容可以通过X配置,可能是像素图或单色(背景像素)。
命令是否阻塞,即停止直到完成?履行 依赖
使用X的应用程序必须在许多情况下提供自己的同步机制。这将指示异步执行模式,但标准本身并不需要它。我将使用“实现已定义”,强烈建议大多数平台的大多数命令都是异步执行的。