問題タブ [double-buffering]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - PictureBox ダブル バッファ キープレス ラグ?
たとえば、左矢印キーを押したままにすると、pictureBox がキャラクターの座標の描画を停止することがあります。代表的な例は、赤で囲まれた黄色の点です。左矢印キーを押したままにすると、別のキーを押すか矢印キーを離すまで、pictureBox は常にキャラクターの位置を描画しませんでした。その後、picturebox が再び更新を開始しました (紫色で囲まれていることがわかります)。
また、私が経験している別のエラーは、場所ごとに 1 つの黄色い点と 1 つの「青い渦」だけを描画する必要があるという事実です。複数を描画している間(ご覧のとおり)。
以下のコードは、画像の結果を複製するために使用しているものです。
java - awt オブジェクトをダブルバッファリングする方法
これまでのところ、ペイントのように描画できるJavaプログラムを作成しようとしています。ペンのサイズと色が異なります。唯一の問題は、描画中に四角形がちらつくことです (四角形はそこにあるので、どこをクリックすればよいかがわかります)。これが私のコードです:
opengl - 画面のティアリングまたはカクつきを引き起こす最も信頼できる効果は何ですか?
さまざまな vsync 実装、手動フレーム レート タイミング、ダブル バッファリングなど、画面のティアリングを軽減または排除するためのさまざまな戦略を調査しようとしています。調査結果を説明するチュートリアルまたはペーパーを作成する予定です。
ただし、まず最初に、効果を実証する簡単な opengl プログラムを作成する必要があります。これにより、さまざまな戦略がどの程度うまく機能するかがわかります。テアリングが発生する可能性が最も高いのは、どのタイプのアニメーションとエフェクトですか? 素早い動きがそれを引き起こすことが多いことは知っていますが、使用できる何らかの方程式または経験則があると思います.
これについてグーグルで調べてみましたが、引き裂きを止める方法に関する無限のスレッドしか見つけることができず、それを作成するための系統的な方法はありません.
android - eglSwapBuffers 後のバック バッファー コンテンツの保持
私は Android とネイティブ C++ で Android 用のシーン描画を実装していegl 1.1
ます。glSurfaceView
現在、バックバッファとフロントバッファがスワップされているときに、「onDrawFrame」の最後に表示されるバックバッファに描画できるアンドロイドを使用しています。
私の問題はこれです-バックバッファーを表示し、スワップしていないかのように書き込みを続行できる必要があります。この要求の背後にある理由は、シーンが非常に大きく、各フレームを構築することは不可能であり、ユーザーが長時間待たなければならないため、描画の終了も待機していないためです。
つまり、段階的にシーンを構築する必要があります。レンダリング中の特定の時点で、時間だと判断しeglSwapBuffers
、バック バッファーから描画されたコンテンツを表示する を呼び出しますが、書き込みを続けると、明らかに同期していない「前のフロント バッファー」に書き込みます。 . (これまでに描いたものは含まれていません)。
私の唯一の選択肢は、スワップする前にバックバッファをコピーすることです。疑似:
- バックバッファに描画
- バックバッファを一時バッファにコピー
- スワップ
- 一時バッファを(新しい)バック バッファにコピーします
- より多くのものをバック バッファーに描画する
- 等々...
私の質問 - ステップ 2、4 を実行する方法はありますか?
glCopyPixels
この場合、役に立ちますか?例?- ですか
glBlitFramebuffer
?
それとも、私はこれにすべて間違って近づいていますか?
私がすでにやったこと:
- に設定
EGL_SWAP_BEHAVIOR
してみましEGL_BUFFER_PRESERVED
たが、特定のデバイスでしか動作しないようです ( khronos notesで説明されているように) :
一部のサーフェスでは、カラー バッファーの内容を保持するかどうかをアプリケーションで制御できます。
- 各フレームでシーンを再レンダリングする - 不可能。これが推奨されていることを何度も読みました。
delphi - より制御されたダブルバッファリング
この質問の文脈は、非クライアント領域をカスタムペイントできるように、WM_NCPAINT と WM_NCACTIVATE を処理しているということです。私が正確に何をしているか、私が直面している問題の詳細については、こちらを参照してください。この質問の目的のために、私が非クライアント領域に描画しようとしている方法は問題視されるべきではありません。(私がリンクした質問でそれを行うことができます)
私が直面した問題の 1 つは、非常に目立つちらつきがあったことでした。いくつかのコード ステップの後、問題の大部分が次のコードに起因することがわかりました。
問題は、継承された呼び出しの後、デフォルトの非クライアント領域全体が描画され、その後でのみフレームの独自のバージョンが描画されることです。ダブルバッファリングをオンにしてみましたが、問題は解決しませんでした。
私がこの問題を解決しようとした方法は、独自のバージョンのダブル バッファリングを実装することです。この場合、フォームにある時点でバッファリングを開始する (つまり、すべての描画をビットマップにリダイレクトする) ように指示し、別の時点で変更を表示することもできます。あなたによって。これを行う典型的な方法は、もちろんバッファに直接描画することですが、一部の描画は私が明示的に行っていないため、それはオプションではありません (私は思います)。
私が試してみることにしたのは、Canvas プロパティとその読み取り関数をオーバーライドし、バッファリングが開始されたときにビットマップを返すことです。そうすれば(私は思った)、フォームのキャンバスに直接描画しようとするすべての試みがビットマップになり、適切と思われるときに画面に描画できます。私が試したことは機能せず、必ずしも読む必要はありませんが、ここに私が一緒に投げたものがあります:
エラーなしでコンパイルおよび実行されましたが、残念ながら動作しませんでした。SSCCEを作ってみたのですが、ハッキングしたFCanvasのハンドルにアクセスしようとすると、なぜかExceptionエラーになります。完全なコードは次の場所にあります。
私は非常に間違ったことをたくさんしていると確信しています(コードで行う多くのことは一時的なものにすぎません。なぜなら、「正しい方法」で物事を行うことに時間を費やす前に、基本的なアイデアを機能させたいからです)。私がやろうとしていることの基本的な考え方は悪くなく、可能であるべきだと思います。
私の質問は次のとおりです。私は何を間違っていますか? そして更に重要なことに:
作成しようとしている種類のバッファを作成する正しい方法は何ですか?
edit Sertac は、非クライアント領域が描画されると、キャンバスへの参照が行われないことを指摘したため、私の場合、私のアプローチは役に立たないようです。おそらく、私がやっていることは、クライアント領域での頑固なちらつきを避けるのにまだ役立つかもしれませんが、わかりません. Peter は、TForm1 が TCustomForm を継承しないため、SSCCE が実行されないことを明らかにしました。そのため、インターポーザ クラスが機能せず、代わりにクラス ヘルパーが必要です。
swing - Java Applet_Dubble バッファリングが機能しない
Java で JApplet をコーディングしていますが、二重バッファリングではちらつきが取り除かれません!?
私は何をすべきか?
これはコードの重要な部分だと思います (もっと知りたい場合は教えてください):
私が得ることができるすべての助けに感謝します!:)
java - JPanel を使用する場合、いつ手動バック バッファを作成する必要がありますか?
ダブル バッファリング システムがあることを読みましたが、実際にレンダリングする前にユーザーがイメージに追加できるように、 をJPanel
使用して独自のバック バッファを手動で作成する人も見ました。BufferedImage
JPanel
JPanel のダブル バッファリングはどのように機能しますか? また、すでにダブル バッファリングが行われているのに、なぜ独自のバック バッファを作成するのでしょうか? BufferedImage
バッファが必要/推奨される時間の例は何ですか?
java - 画面のティアリング JPanel ゲームとダブル バッファリング
私は現在 JPanel を使用してゲームから要素を描画していますが、画面のティアリングとダブルバッファリングについていくつかの調査を行った後、グラフィックが途切れることがあります。これが私の問題の解決策であると信じていますが、現在私のコード 多くのコードを引き裂かずに実装するのは非常に難しいと感じています。
小さな 2D タイル ベースのゲームで画面のティアリングを修正する簡単な方法、または現在のコードでダブル バッファリングを行う方法を誰かが提供してくれるのではないかと思っています。どうもありがとうございました!
Frame.java
ゲーム.java
コードに示されているように、Game クラスには、Frame クラスを常に再描画する Game ループが含まれています。このコードを微調整して、ダブル バッファリングで画面のティアリングをなくすにはどうすればよいですか? ありがとう!