2010-07-26 81 views
3

我最近在使用Ubuntu或Cygwin編寫的opengl(使用freeglut)時編寫了一款迷宮遊戲,但在Fedora Core 12上使用freeglut構建時,遊戲崩潰了,我的教授當他在自己的機器上構建它時,他看不到任何東西(他未披露的操作系統)。編譯跨Linux發行版時的OpenGL問題

另外,在之前的任務中,即使我已經實現了雙緩衝並且在每次顯示後清空了緩衝區,我仍然閃爍。閃爍發生在我的Fedora機器上,很少出現在我的Ubunutu機器上,並且完全不在cygwin中。

最後,在Fedora機器上,霧非常密集,似乎忽略了對'glFogf(GL_FOG_DENSITY,0.1)'的調用。但是,在Cygwin和Ubuntu上,霧完美無瑕。

操作系統之間的Freeglut實現之間有很多不同之處,這將是一個問題?我的教授似乎準備在這些項目上讓我失望,但我不明白爲什麼opengl會在操作系統之間產生這種不穩定。

請讓我知道,如果你有任何洞察力和感謝您的時間。

+1

在每種情況下涉及哪些GPU? – 2010-07-26 17:57:57

+0

那麼,首先確保你都使用相同的庫和相同的版本。 此外,您的應用程序的性能高度依賴於視頻卡。你的教授擁有哪種GPU?這些都是需要考慮的事情。 – karlphillip 2010-07-26 17:59:57

回答

0

我的教學經驗OpenGL,這種事情發生時,以不同的方式使用過剩的方式。某些實現/驅動程序處理它,而其他實現/驅動程序則不這樣做 - 當它們以非標準方式使用時,實現之間存在相當大的差異。當以標準方式使用時,差異非常小。

我見過最常見的原因是每次更改屏幕後都不會調用glutPostRedisplay。

其他可能的原因是在顯示功能以外的位置繪製,或沒有正確設置回調。除此之外,我只能猜測發生了什麼,但如果一個實現沒有顯示任何內容,那麼我肯定會發現一些基本錯誤。

2

我把下面兩個電話按順序混合起來。應該是這樣。

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutCreateWindow(「My Window」);

我不得不這樣說:

glutCreateWindow( 「我的窗口」); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);因此我不能保證雙緩衝窗口,因此有時會閃爍,有時它不會。

同樣在Red-Hat發行版中,size_t被定義爲signed int,而Ubuntu使用unsigned int。當試圖使用函數fread()時,這導致我的教授機器上出現循環問題,它的返回類型在Fedora中爲-1,在Ubuntu中爲static_cast(-1),我認爲它不好:/。花了我幾天的時間來找出Ubuntu內核源代碼中的問題。