2012-03-05 8 views
1

私はOpenGLを使ったアンドロイドゲームに取り組んでいます。ゲームアップデートスレッドとOpenGLレンダリングスレッドがあります。レンダリング/更新同期:レンダリング可能な1ロック?

現在、私は彼らが同期しているような更新()とレンダリング()単一のロックを共有し、そしてI基本的にpingを実行/更新およびレンダリングの間で前後にピンポン。これは基本的にupdateとrunを連続して実行するのと同じです。私のゲームでは

は、すべてのオブジェクトがレンダリング可能ですので、私が代わりに一つのグローバルロックを有していると考えていた、私は、各レンダリング可能なオブジェクトは、独自のロックを持ってみましょうことができます。これにより、更新によってオブジェクトが更新されるたびに、レンダラーは他のオブジェクトのいずれかをレンダリングすることができ、その逆も可能です。オブジェクトがレンダリングスレッドまたは更新スレッドのいずれかにアクセスしようとしたときにロックされている場合、オブジェクトをスキップしてキューの後ろにプッシュすることができます(更新/レンダリングの順序は関係ありません)。

今、このゲームは、私は同期の問題を扱ってきた私は初めてなので、非常に多くのロックは常にすべてのフレームの間に、ロックやアンロックしたとの深刻なパフォーマンスの問題が存在することになるかと思いまして?これは、アップデートとレンダリングのスレッドを同期させる通常の方法ですか、それとも明白な欠陥を見落としていますか?

私が考えることができる唯一の欠点は、レンダラーがゲームの2つの異なる「ステップ」からオブジェクトを描画できることです。一部のオブジェクトが描画されている間にゲームマップNに表示​​されます。ステップN + 1にいてください。しかし、それが私の特定のゲームにとって目立つかどうかはわかりません。

ありがとうございました。

答えて

2

私はゲーム開発者ではないですが、レプリカ島のメーカーから、この記事に遭遇していますRendering With Two Threads

もGameDev StackExchange上でこのスレッドは役に立つかもしれません:https://gamedev.stackexchange.com/questions/95/how-many-threads-should-an-android-game-use

+0

うん、私はそのReplicaIslandのブログを見てきました、:)私が見てきたアンドロイドゲームスレッドのすべてのGoogle検索したりディスカッションに出てくるようです。それは有効な解決策に見えますが、上記で提案したものとは少し異なります。あなたの入力をありがとう。 – Tim

+0

私はもう少しお手伝いできる:) – Soham