0

わかりました、それが問題です。現在、ゲーム用の OCX/NPAPI プラグインを作成しているため、ゲームを Web ブラウザーで実行できます。現在の実装では、SetTimer を使用してゲーム (プラグイン dll) の更新とレンダリングを「チェック」していますが、私のマシンでは FPS (1 秒あたりのフレーム数) が最大で 64 しかないことがわかりました。Windows タイマーの問題であることがわかりました。タイマーは、変更できないブラウザーのプラグイン実装のメッセージ ピーク プロセスによってのみ呼び出すことができるためです。つまり、タイマーは、ブラウザーのプロセス処理速度よりも速くすることはできません。


だから私の質問は、

  1. ブラウザのメッセージ処理によって制限されている 64 フレーム レートを解除したり、タイマー プロセスを高速化したりすることはできますか?
  2. または、ゲームを別のスレッドに移動する必要がありますが、ウィンドウ メッセージ (ユーザー入力、ウィンドウのサイズ変更など) を処理する方法とゲーム スレッドが受け取ることができます。

前もって感謝します!

4

1 に答える 1

1

ウィンドウ化されたプラグインを使用している場合、最善の策は、すべてのレンダリングなどを別のスレッドで行うことです。ある種のスレッドセーフ キューなどを使用して、ウィンドウ メッセージをスレッド間で渡すだけです。もちろんミューテックスを使うのは楽しいですが、それほど難しいことではありません。

FireBreath を使用している場合 (非常に簡単になります)、使用できる FB::SafeQueue クラスがあります。FireBreath を使用していない場合は、boost が必要ですが、それを盗むことができますが、とにかくスレッドセーフなメッセージ キューを作成するのはそれほど難しくありません。

すべてのゲーム ロジックを実行しようとしているメイン スレッドを使用している場合は、とにかくパフォーマンスの問題が発生する可能性があります。

ウィンドウのないプラグインの場合は、運が悪いです。

于 2013-07-06T15:57:49.123 に答える