[英]How is it possible to use dual core in opengl game loop?
我的問題是關於opengl中的游戲循環設計。
我相信游戲循環可以通過3個主要步驟完成
為簡單起見,我們只關注第2步和第3步。
我認為以並行順序運行它們或將它們混合到一個步驟中是錯誤的。 我舉一個例子。
老兄說,您正在創建一個戰爭游戲,您需要在屏幕上繪制100名戰士,邏輯將是更新其位置,更新背景區域,然后繪制結果。 在更新另一位士兵的位置之前,您不能開始繪制一位士兵。
因此,根據這些簡單的步驟,很明顯,步驟2和3需要以某種方式進行同步,並且步驟2必須在步驟3之前完成。
現在告訴我,如何可能在一個以上線程和一個以上進程上運行游戲循環? opnegl是否使用multiCore? 怎么樣?
編輯:使用多線程的一種方法是預先計算游戲邏輯,或者換句話說,使用向量。 但是向量有兩個很大的缺點,使它們幾乎不被推薦使用。
現在告訴我如何在一個以上的線程上運行游戲循環
多核計算的思想是並行化,即將計算密集型任務拆分為可以並行處理的獨立工作集。 正如您發現的那樣,游戲的並行化空間極少。
在游戲中使用多個內核的通常方法是將I / O與邏輯操作並行化。 即在一個線程中進行所有網絡和用戶交互,在另一個線程中進行AI和場景管理。 聲音通常也被並行化。
OpenGL是否使用multiCore? 怎么樣?
OpenGL規范未指定。 但是某些實現可能選擇利用多個內核。 盡管這不太可能。 為什么? 因為這會產生不必要的緩存管理開銷。
我將嘗試以圖形方式進行解釋,為什么2個線程(一個用於渲染,一個用於邏輯)更好,並且不會導致不一致:
您建議的單線程設計將如下運行:
logic |-----| |-----|
graphics |-----| |-----| and so forth.
但是,如果您有多個cpus,則應該利用它們。 這意味着,在邏輯第一次完成后,圖形即可呈現該游戲狀態。 同時,可以計算下一個邏輯步驟:
logic |-----||-----||-----|
graphics |-----||-----| and so forth.
如您所見,您幾乎可以通過這種方式將性能提高一倍:當然會有一些開銷,但是無論如何它都會比單線程版本更快。
此外,您可以假設游戲邏輯將比渲染線程花費更少的時間:這使線程變得相當容易,因為您可以在邏輯線程中等待從renderthread進行的回調,從而為渲染線程提供新的指令並然后計算下一個邏輯步驟。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.