2013-02-06 45 views
0

這裏的情況:SFML繪製OpenGL到多個窗口非常緩慢

我有4個SFML窗口,這是在我已經建立的容器內。容器爲每個窗口調用獨立的重繪方法,從第一個開始,最後一個結束。

如果每個窗口的繪圖代碼包含行drawMyCube()glClear(...),則幀速率變慢。

drawMyCube()只繪製一個根據sf :: Clock對象的值旋轉的立方體。

如果一個窗口調用這兩個函數中的任何一個,則幀速率爲〜60fps。 如果兩個窗口調用(任一)這些函數,幀速率爲〜30fps。 如果三個窗口調用(這兩個函數中的任何一個),則幀速率爲〜20fps。 最後,如果全部四個呼叫(任一)這些功能,幀速率是〜15fps。

這看起來像一個新興的模式,所以我試圖從3個窗口中刪除功能,並從一個窗口調用它們10次。我期待的幀速率是〜6fps,但它仍然是60.

有誰知道爲什麼會發生這種情況?如果我從窗口繪圖方法中刪除任何其他功能,似乎沒有任何影響,例如,gluLookAt()似乎沒有減慢速度。

編輯:幀率限制設置爲零,並且vsync爲false。

回答

0

這聽起來和垂直同步一模一樣。你的每個窗口都在等待垂直刷新,這就是爲什麼你的速度不斷下降的原因。

我知道你說vsync已關閉,但視頻驅動程序可能會強制它。檢查你的驅動設置。

+0

其實這聽起來是正確的。我不知道如何使用運行在MacBook Pro上的(X)Ubuntu Linux。 我記得過去大概一個月前就有過這樣的問題,因此我訂購了一臺帶有真正圖形處理器的新筆記本電腦。仍然在等待它,雖然... 但是:有什麼辦法可以解決這個問題? – user3728501

+0

如果驅動程序強制執行vsync,則只能在驅動程序中禁用它。從個人經驗來看,nvidia Linux驅動似乎在這方面有一個缺陷,並默認強制vsync。我發現啓動和退出nvidia-settings應用程序會關閉它。 –

+0

這對我不起作用 - 在啓動時,我收到錯誤消息「您似乎沒有使用nvidia驅動程序」 - 猜測我使用的是英特爾? – user3728501