我試圖在多線程遊戲引擎之上編寫一個編輯器。理論上,通過編輯器,場景的內容可以完全改變,但是我還沒有能夠找到引擎應對變化的好方法。 (即在渲染器繪製它時刪除一個實體)。另外,我很猶豫在每個使用可能被刪除的實體或資源的實例上編寫代碼來管理鎖。我想應該有一個相對更優雅的解決方案。多線程策略? (通過編輯器修改多線程引擎中的場景)
有沒有人有任何想法或策略,我可以開始看?
謝謝!
我試圖在多線程遊戲引擎之上編寫一個編輯器。理論上,通過編輯器,場景的內容可以完全改變,但是我還沒有能夠找到引擎應對變化的好方法。 (即在渲染器繪製它時刪除一個實體)。另外,我很猶豫在每個使用可能被刪除的實體或資源的實例上編寫代碼來管理鎖。我想應該有一個相對更優雅的解決方案。多線程策略? (通過編輯器修改多線程引擎中的場景)
有沒有人有任何想法或策略,我可以開始看?
謝謝!
除了@lassevk建議的兩階段過程之外,您還可以使用Pipe structure將命令「推」到渲染器,以便這些更改獲取渲染引擎的另一個工作項的形式。
例如,假設您的引擎遵循一個流程,比如:
您可以只添加位置0中的工作流程的新項目,稱爲Process Changes,它從Pip中提取信息並將其融入現場。
如果內存不是問題,您可以有兩階段的過程,其中更改在一個模型中完成,然後爲渲染器拍攝快照,這樣渲染器將始終看到一致的視圖的模型。
不知道確切的需求,我很難評論細節,但我認爲如果寫入時複製和無鎖數據結構的組合可能有所幫助。
當你在渲染時,你需要只讀訪問權限,所以沒有問題。在編輯時,從一組對象中刪除對象,使用原子操作將當前對象標記爲「已刪除」,並且您的渲染器可以在下一個渲染循環之前跳過或移除該對象。當一個對象被改變時,你創建一個副本並更改副本,並使用無鎖技術「提交」更改。
我同意,這種方式你只需要鎖定在一個地方,「視圖」。 – Groo 2009-04-28 15:03:57
雖然它取決於需要多少內存,另一方面是您需要始終準備好快照,而不是在請求時傳遞數據。 – Groo 2009-04-28 15:08:37