マルチスレッドゲーム-更新、レンダリング、およびそれらを分割する方法


8

StackOverflow投稿から(これを移動することをお勧めしました):

それで、私はゲームエンジンに取り組んでいて、かなり良い進歩を遂げました。ただし、私のエンジンはシングルスレッドであり、更新とレンダリングを別々のスレッドに分割することの利点は非常に良い考えのように思えます。

どうすればよいですか?シングルスレッドのゲームエンジンは(概念的には)作成が非常に簡単で、更新->レンダリング->スリープ->繰り返すというループがあります。ただし、特に更新レートを変更した場合(たとえば、更新ループを25秒に1回実行し、レンダリングに60fpsを使用している場合)は、更新とレンダリングを分解する適切な方法を考えることができません-途中で更新を開始するとどうなりますか?レンダーループを介して、またはその逆?


回答:


6

更新パスで変更されるレンダリングに必要なすべてのデータをダブル/トリプルバッファしたいとします。そうすれば、部分的に変更されたものでレンダリングされなくなります。おそらくトリプルバッファーが必要になる理由は、1)更新中のコピー、2)完全に更新した最後のコピー、3)変更したくないレンダリングに現在使用されているコピーが必要です。 。

最も難しいのは、おそらくこれのためにデータを整理するための最良の方法を考え出すことです。


4

このウェブサイトは問題を議論し、ロジャーが示唆したようにトリプルバッファソリューションを実装しました:

http://blog.slapware.eu/game-engine/programming/multithreaded-renderloop-part1/ http://blog.slapware.eu/game-engine/programming/multithreaded-renderloop-part2/ http:// blog。 slapware.eu/game-engine/programming/multithreaded-renderloop-part3/ http://blog.slapware.eu/game-engine/programming/multithreaded-renderloop-part4/

実装するのは静かですが、興味があれば、Webサイトには実装のソースとバイナリの両方の配布があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.