タグ付けされた質問 「double-buffering」

1
現代のゲームでダブルまたはトリプルバッファリングはどのような問題を解決しますか?
ダブル(またはトリプル)バッファリングを使用する原因の理解が正しいかどうかを確認したい: 60Hz更新のモニターは、モニター表示を1秒間に60回更新します。モニターがモニター表示を更新する場合、彼はピクセルのピクセルとラインのラインを更新します。モニターは、ビデオメモリからピクセルのカラー値を要求します。 今ゲームを実行している場合、このゲームは常にこのビデオメモリを操作しています。 このゲームがバッファ戦略(ダブルバッファリングなど)を使用しない場合、次の問題が発生する可能性があります。 これで、モニターはモニター表示を更新しています。この時点で、モニターは前半のモニター表示を既に更新していました。同時に、ゲームは新しいデータでビデオメモリを操作していました。これで、モニターは後半のモニターにアクセスし、ビデオメモリからこの新しい操作データを表示します。問題は裂け目またはちらつきです。 バッファ戦略を使用する場合の私の理解は正しいですか?他の理由はありますか?

3
HTML5 Canvasゲームのダブルバッファリング?
私のシンプルなキャンバスゲームは、Chromeでは正常に動作し、Mac / LinuxではFFで動作するようです。スマートフォンやWindows環境でテストする機会はまだありません。ダブルバッファリングは使用しませんが、それを使用するJS Canvasの例をいくつか見ました。 ダブルバッファリングの使用はいつ推奨されますか?特定のブラウザでのみ違いがありますか?重大なパフォーマンスヒットはありますか? ありがとう!

1
トリプルバッファリングの利点は何ですか?
前の質問で書かれたすべてを読みました。ダブルバッファリングで理解していることから、プログラムは、完成した図面がコピーまたはスワップされるまで待ってから次の図面を開始する必要があります。トリプルバッファリングでは、プログラムに2つのバックバッファがあり、そのようなコピーに関係しないものですぐに描画を開始できます。 ただし、3番目のバッファを利用できる状況にある場合、トリプルバッファリングでは、モニタが更新できるよりも速くフレームを描画していることを示唆しません。そのため、実際にはより高いフレームレートは得られません。それでは、トリプルバッファリングの利点は何ですか?

3
OpenGLが実際に画面を更新するのにどのくらい時間がかかりますか?
キー入力に応じてさまざまなものを描画する単純なOpenGLテストアプリをCで作成しています。(Mesa 8.0.4、Mesa-EGLおよびGLFW、NVIDIA GTX650を搭載したPC上のUbuntu 12.04LTSで試した)。ドローは非常にシンプル/高速です(回転三角形タイプのもの)。私のテストコードは、フレームレートを意図的に制限するものではなく、次のようになっています。 while (true) { draw(); swap_buffers(); } 私はこれを非常に注意深く計時しており、1つのeglSwapBuffers()(またはglfwSwapBuffers、同じもの)呼び出しから次の呼び出しまでの時間は〜16.6ミリ秒であることがわかりました。eglSwapBuffers()描画されたものは非常に単純ですが、呼び出し後から次の呼び出しの直前までの時間は、それより少しだけ短くなります。スワップバッファの呼び出しにかかる時間は1ミリ秒未満です。 ただし、アプリがキーの押下に応じて描画内容を変更してから実際に画面に表示されるまでの時間は、> 150ms(約8〜9フレーム)です。これは、画面とキーボードを60 fpsでカメラで記録して測定されます。 したがって、質問: スワップバッファーの呼び出しと実際に画面に表示される呼び出しの間の描画はどこにバッファーされますか?なぜ遅れるの?アプリが常に画面の前に多くのフレームを描画しているようです。 OpenGLアプリケーションは、画面にすぐに描画するために何ができますか?(つまり、バッファリングなし、描画が完了するまでブロックするだけです。高スループットは必要ありません。低遅延が必要です) 上記の即時抽選をできるだけ早く行うためにアプリケーションは何ができますか? アプリケーションは現在、実際に画面上にあるものをどのようにして知ることができますか?(または、現在のバッファリング遅延はどのくらいの長さ/何フレームですか?)

3
フレームレートがオブジェクトの速度に影響しています
私はJavaでゼロからゲームエンジンを構築する実験をしており、いくつか質問があります。私のメインゲームループは次のようになります。 int FPS = 60; while(isRunning){ /* Current time, before frame update */ long time = System.currentTimeMillis(); update(); draw(); /* How long each frame should last - time it took for one frame */ long delay = (1000 / FPS) - (System.currentTimeMillis() - time); if(delay > 0){ try{ Thread.sleep(delay); }catch(Exception …

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