我有一种情况,我要求并获得双缓冲的OpenGL上下文,但是当我绘制它时,前后缓冲区都会受到影响。绘制缓冲区设置为后台缓冲区(仅后台缓冲区)。如果我查看OpenGL Profiler,我确实看到了所有这些:GL_DRAW_BUFFER(GL_BACK)的值以及绘制到的实际后台和前台缓冲区。
由于我正在与拥有支持商店的NSWindow合作,我们在屏幕上看不到任何这种情况。问题是我正在使用CGWindowListCreateImage获取此窗口的屏幕截图。此函数似乎是从前缓冲区获取图像,而不是从屏幕缓冲区(无论在哪里......)中获取图像。因此返回的图像是不完整的:它只包含在抓取时绘制的元素,即使没有调用刷新。
mac开发人员包中有一个名为Pixie的实用程序。它基本上抓住鼠标位置的屏幕,并显示它放大,以便您可以分析它。此程序与调用CGWindowListCreateImage具有相同的行为:您可以看到不完整的图像。所以我想问题不在于我使用CGWindowListCreateImage的方式,而在于我的窗口或我的显示...
此外,它似乎并不总是发生。并非每个窗口都显示此行为,即使对于给定的窗口,它似乎来来去去,特别是如果我将窗口移动到不同的屏幕(在双显示屏中)。
之前有人遇到过这个问题吗?