我没有正确理解glutSwapBuffer的功能。在我的代码中,如果我不使用glutSwapBuffer而不是窗口中没有背景颜色并且它保持透明,则捕获其背景中的任何内容。我认为背景颜色实际上是由glClearColor指定的,比如果不使用glutSwapBuffer,我没有得到任何背景颜色。
答案 0 :(得分:2)
这个问题反复出现,我认为你所描述的实际上是当你在合成窗口管理器中专门绘制前缓冲区时会发生什么。
没有交换缓冲区,它不会正确地绘制窗口,因此窗口显示为透明。合成窗口管理器需要双缓冲,并且似乎许多混合集成/离散GPU实现(例如nVIDIA Optimus)也需要它。简而言之,目前没有理由在桌面平台上使用单缓冲渲染。
可以肯定的是,你的情况是否与此类似?此屏幕截图显示了在合成窗口管理器中移动仅使用单缓冲的窗口时会发生什么。
如果是这样,可以找到更详尽的解释here。
答案 1 :(得分:1)
opengl通常配置为使用双缓冲。
首先绘制到一个缓冲区...然后用第二个交换它并将其显示在屏幕上。 如果不调用glutSwapBuffer,您将看不到任何内容,这是正确的行为。