gpt4 book ai didi

macos - 有没有办法确定 CGLFlushDrawable 对后台缓冲区做了什么?

转载 作者:行者123 更新时间:2023-12-03 17:57:39 24 4
gpt4 key购买 nike

根据 Apple 的文档,CGLFlushDrawable 或其 Cocoa 等效项 flushBuffer 可能有几种不同的行为方式。通常,对于窗口应用程序,后台缓冲区的内容会复制到可见缓冲区,如 here 所示。 :

CGLFlushDrawable

Copies the back buffer of a double-buffered context to the front buffer.

我假设绘图缓冲区的内容保持不变(参见问题 1)。即使我错了,也可以通过将 kCGLPFABackingStore 属性传递给 CGLChoosePixelFormat 来确保这一点。

但进一步阅读表明,在某些情况下,缓冲区可能会被交换,而不是执行复制:

If the backing store attribute is set to false, the buffers can be exchanged rather than copied. This is often the case in full-screen mode.

还有this

When there is no content above your full-screen window, Mac OS X automatically attempts to optimize this context’s performance. For example, when your application calls flushBuffer on the NSOpenGLContext object, the system may swap the buffers rather than copying the contents of the back buffer to the front buffer. (...) Because the system may choose to swap the buffers rather than copy them, your application must completely redraw the scene after every call to flushBuffer.

这是我的问题:

  1. 如果复制后台缓冲区,是否可以保证即使没有后备存储属性,其内容也会被保留?
  2. 如果缓冲区被交换,后缓冲区是否获取前缓冲区的内容,或者它是否未定义,因此它也可以获取随机内容?
  3. 系统可能选择交换缓冲区,但有什么方法可以确定它是否确实确实选择这样做?
  4. 在任何这些情况下,是否有办法确定缓冲区是否被保留、与前端缓冲区交换或是否被搞乱?

此外,如果您能提供有关如何在 WGL、GLX 或 EGL 中制作它的任何信息,我们将不胜感激。我特别需要问题 4 的答案。

最佳答案

  1. 不,我们无法保证。
  2. 可能是随机的。
  3. 不,我不这么认为。
  4. 没有。如果您不指定 kCGLPFABackingStore 或 NSOpenGLPFABackingStore ,那么您无法对后台缓冲区的内容做出任何假设,这就是文档说您必须从中重绘的原因每一帧都从头开始。

我不确定您对 WGL、GLX 和 EGL 有何疑问。

关于macos - 有没有办法确定 CGLFlushDrawable 对后台缓冲区做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10961803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com