2013-09-30 53 views
1

我沒有正確理解glutSwapBuffer的功能。在我的代碼中,如果我不使用glutSwapBuffer比沒有背景色進入窗口並且它保持透明,捕獲其背景中的任何內容。我認爲背景顏色實際上是由glClearColor分配的,比沒有使用glutSwapBuffer的我沒有獲得任何背景顏色。獲取背景色是否需要glutSwapBuffer命令?

+0

所有的opengl函數*包括glClear *只更新後臺緩衝區。 完成繪圖後,將繪圖交換到前臺緩衝區。 – jcoder

+1

...假設你已經請求['GLUT_DOUBLE'](http://www.opengl.org/documentation/specs/glut/spec3/node12.html) – jozxyqk

+0

glClearColor只選擇顏色,framebuffer被清除帶有GL_COLOR_BUFFER_BIT集合的'glClear'調用。 – datenwolf

回答

1

opengl通常配置爲使用雙緩衝。

您首先繪製到一個緩衝區......然後用第二個對象交換並顯示在屏幕上。 沒有調用glutSwapBuffer,你將看不到任何東西,這是正確的行爲。

about double (and more) buffering in opengl

+0

謝謝。我知道了。 – pcoder

2

這個問題來了一遍又一遍,我想您所描述的實際上是當你完全吸引到的複合窗口管理器前緩衝時會發生什麼。

沒有交換緩衝區,它不會正確繪製窗口,所以窗口顯示爲透明。複合窗口管理器需要雙緩衝,而且似乎也需要許多混合集成/獨立GPU實現(例如nVIDIA Optimus)。簡而言之,目前沒有真正的理由在桌面平臺上使用單緩衝渲染。

可以肯定,你的情況是否像這樣?該屏幕截圖顯示了在合成窗口管理器中移動僅使用單緩衝的窗口時發生的情況。

如果是這樣,一個更透徹的解釋可以發現here