2012-04-03 89 views
0

我正在嘗試將球體繪製到屏幕上,但沒有使用OpenGL(glut)將它們移除(獲得一些「trail」效果的王者)。全屏閃爍

我在屏幕上也有我想要閱讀的文本,所以我必須在舊文本上手動繪製一個黑色矩形,然後繪製新文本。

關鍵是我也想開啓/關閉,同時運行的「創新」,但香港專業教育學院遇到了一個很奇怪的問題:

當我使用單緩衝,一切都蠻好,但是當我切換到雙緩衝和只使用前緩衝區,我開始閃爍的文字。 這隻發生在全屏。在具有相同分辨率(1920x1080)的窗口模式下,沒有閃爍,儘管我獲得了相同的fps(約250)。

有沒有人知道是什麼原因造成這種情況,爲什麼?

+0

「只使用前端緩衝區」是什麼意思?您是否在使用'glutSwapBuffers()',這是如何避免雙緩衝應用程序閃爍的。 – psalvaggio 2012-04-03 18:16:08

+0

不,正好相反。我避免使用glutSwapBuffers來獲得單緩衝。我希望能夠在單緩衝和雙緩衝之間切換。我需要單緩衝才能獲得足跡效果,而不是兩次繪製所有內容。 – 2012-04-03 18:19:19

+1

我一直覺得你通過將'GLUT_SINGLE'或'GLUT_DOUBLE'傳遞給'glutInitDisplayMode'來切換兩者。我發現這個例子,也許它可以幫助:http://www.sgi.com/products/software/opengl/examples/glut/examples/source/sb2db.c – psalvaggio 2012-04-03 18:22:56

回答

1

雙緩衝的整個想法在this wikipedia article中有解釋。我不知道爲什麼你沒有看到任何問題沒有雙緩衝,但據我瞭解你的問題,你需要正確使用雙緩衝。

編輯:你可能有興趣在Is double buffering needed any more的答案。 This answer to PiP in OpenGL causing flickering也可能與您的程序有關。

+0

我知道雙緩衝的想法,但正如我所說的,我有時需要獲得「跟蹤」效果。如果我使用了雙緩衝,那麼我需要將所有內容都繪製兩次。 – 2012-04-03 18:24:25

+0

此外,它並沒有解釋爲什麼這隻發生在全屏模式下 – 2012-04-03 18:24:50

+0

並繪製兩次 - 雙緩衝更多的CPU /內存密集;; wrt閃爍的文字 - 這是預期的,因爲你也說你先畫黑色的舊文本,然後再次繪製文本;; wrt **不**在窗口模式下閃爍 - 我想知道您使用的是什麼操作系統,當我很久以前使用Windows時,發現窗口與非窗口應用程序性能存在很大差異。我猜測看到或看不到閃爍將取決於平臺。也許試試看看在另一個平臺或至少另一臺機器上會發生什麼? – akostadinov 2012-04-03 19:02:53