2015-08-27 123 views
1

我一直在做我的遊戲引擎一些基準測試,發現犯規的罪魁禍首:GLFW pollevents()真的,真的很慢

glfwPollevents();

我已經徹底計時了,95%的時間表現符合預期,但有時它會吃掉我更新間隔的5-200%(1/60秒)。我幾乎不知道是什麼原因造成的。在這些巨大的民意調查中,沒有定義的回調被調用。一切都安靜而靜止。這是完全不可預測的。

我有幾個理論: 1.調度程序中斷函數中的某個地方。這是不太可能的,我會在我的循環的其他部分看到相同的行爲,我不這樣做。

  1. 有一些邪惡的回調,我不知道什麼地方是beeing叫和吃時間。

  2. lwjgl問題。 LWJGL是glfw的一個包裝器,所以它可以在Java中使用,我也是這樣做的。

  3. 司機,但哪?

+0

你安裝了哪些回調?如果它實際上按照您討論的方式行事,我懷疑VSYNC已打開,並且可能卡住了您的刷新窗口回調。 –

+0

我只創建了鍵和鼠標的回調,而不是窗口。如果你還沒有創建它,它不能對你玩技巧,對吧? – Jake

回答

1

glfwPollEvents();是特定於操作系統的系統調用的一個包裝,它使您能夠檢查應用於窗口的任何事件。有很多東西可以算作事件,包括用戶級別的東西,比如選擇或調整窗口的大小,還包括GLFW無法訪問的系統級別的東西。有許多事情可能會導致短暫的中斷/掛起,就像你所描述的那樣。

一般來說,最好的建議是在不同的線程上處理渲染,並使用消息隊列指示主線程執行「主線程關鍵任務」(如打開新窗口或其他類似重要的任務)。