根据Apple的文档,CGLFlushDrawable
或它的Cocoa等价物flushBuffer
可能会以不同的方式表现。通常,对于窗口化应用程序,后台缓冲区的内容将被复制到可见缓冲区,如here所述:
CGLFlushDrawable
将双缓冲上下文的后台缓冲区复制到前台缓冲区。
我假设绘图缓冲区的内容保持不变(参见问题1)。即使我错了,也可以通过将kCGLPFABackingStore
属性传递给CGLChoosePixelFormat
来确保。
但是进一步的阅读重新开始,在某些情况下,缓冲区可能会被交换而不是执行复制:
如果后备存储属性设置为false,则可以交换缓冲区而不是复制缓冲区。在全屏模式下通常就是这种情况。
还有this个州
当全屏窗口上方没有任何内容时,Mac OS X会自动尝试优化此上下文的性能。例如,当您的应用程序在
flushBuffer
对象上调用NSOpenGLContext
时,系统可以交换缓冲区而不是将后台缓冲区的内容复制到前台缓冲区。 (...)因为系统可能选择交换缓冲区而不是复制缓冲区,所以每次调用flushBuffer
后,应用程序必须完全重绘场景。
这是我的问题:
此外,任何有关如何在WGL,GLX或EGL中制作的信息都将受到赞赏。我特别需要问题4的答案。
答案 0 :(得分:1)
kCGLPFABackingStore
或NSOpenGLPFABackingStore
,那么就不能对后台缓冲区的内容做任何假设,这就是为什么文档说你必须从头开始为每一帧重绘。< / LI>
醇>
我不确定您对WGL,GLX和EGL的要求。