OpenGL 使用两个缓冲区,一个用来在屏幕上显示,另一个用来做渲染。它们被交换以避免闪烁。 (双缓冲。)
是否可以在(我假设是视频内存)中创建另一个“缓冲区”,以便可以在其他地方进行绘图。我问的原因是我有几个 SFML 窗口,我希望能够指示 OpenGL 为每个窗口绘制一个独立的缓冲区。目前我无法控制渲染缓冲区。有一个用于编辑:所有(不是每个)窗口。调用 window.Display() 后,此缓冲区的内容将复制到出现在窗口内的另一个缓冲区。 (我认为这就是它的工作原理。)
最佳答案
您要查找的术语是“离屏渲染”。使用 OpenGL 有两种方法可以做到这一点。
一种是使用操作系统底层图形层提供的专用离屏可绘制对象。这称为 PBuffer。 PBuffer 可以像窗口一样使用,它不映射到屏幕。 PBuffers 是第一个使用 OpenGL 实现离屏渲染的可靠方法;它们于 1998 年推出。由于 PBuffers 是功能齐全的可绘制对象,因此可以将 OpenGL 上下文附加到它们。
另一种方法是使用 OpenGL 本身而非操作系统提供的离屏渲染目标。这称为帧缓冲区对象。 FBO 需要功能齐全的 OpenGL 上下文才能工作。但是 FBO 无法提供 OpenGL 上下文需要附加到的可绘制对象,才能发挥作用。所以 FBO 的主要用途是向它们渲染中间图片,稍后在屏幕上渲染可见图片时使用。幸运的是,对于 FBO 的工作,OpenGL 上下文绑定(bind)到的可绘制对象可能是隐藏的。因此,您可以使用对用户隐藏的常规窗口。
如果您的愿望是纯粹的离屏渲染,PBuffer 仍然是一个非常可行的选择,尤其是在 GLX/X11 (Linux) 上,它们可以立即可用,而无需修改扩展。
关于c++ - 如何在(视频)内存中创建缓冲区以使用 OpenGL 进行绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14738181/