問題タブ [vsync]
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.
android - 表示サブシステムでの vblank の必要性
ディスプレイ パネルでの垂直ブランク( vblank )の使用については明確ではありません。
誰か説明してくれませんか
- vblankの意義?
- How it can be utilized in the display subsystem?
wpf - CompositionTarget.Rendering 内で何ができますか?
CompositionTarget.Renderingイベントは、ゲームのメイン ループを構築するのに最適です。基本的には、vsync のレート (通常は 60 Hz) で起動します。
構成ツリー内のオブジェクトがレンダリングされる直前に発生します。Rendering イベントは、アニメーションとレイアウトがコンポジション ツリーに適用された後、指定されたイベント ハンドラーにルーティングされます。
フレームごとのアニメーションのハウツー記事で、もう少し詳しく説明しています。
イベント ハンドラー メソッドは、レイアウトが計算された後に呼び出されることに注意してください。ただし、イベント ハンドラー メソッドでレイアウトを変更できます。つまり、レンダリングの前にレイアウトがもう一度計算されます。
それに基づいて、そのハンドラー内のコードのルールは次のとおりです。
- レイアウトの変更を避ける
- すぐに戻る
他にどんな落とし穴がありますか?別のレイアウト パスを引き起こす、自明ではないアクションは何ですか? ハンドラー内にある時間は正確にどれくらいですか?
python - 複数の OpenGL キャンバスと垂直同期で SwapBuffers() を使用していますか?
「表示」キャンバスと「プレビュー」キャンバスの2 つの es を含む wxPython を使用して作成された GUI があり、そのGLCanvas
上に PyOpenGL を使用して非常に単純なジオメトリを描画しています。「プレビュー」キャンバスと「表示」キャンバスは、同じフレームバッファの内容を表示します:
これらのキャンバスの両方を、テアリングなしで一貫したフレームレートで同期的に更新する必要があります。
今まで電話してただけ
レンダリング ループ内のプレビュー キャンバスと表示キャンバスの両方に対して。ドライバー設定で vsync を無効にすると、これはかなりうまく機能します。
ただし、vsync を有効にすると、フレームレートが 30Hz まで低下し、ディスプレイの垂直リフレッシュ レートの半分になります。おそらくこれは、レンダリング ループの実行がSwapBuffers()
次の垂直方向の更新を待つ各呼び出しで停止するためです。2 つのSwapBuffers()
呼び出しのいずれかをコメント アウトすると、フレームレートが 60 Hz に戻りますが、もちろんキャンバスの 1 つだけが更新されます。 .
私が本当に望んでいるのは、両方のキャンバスが vsync 間隔ごとに 1 回、同期的に更新されることです。wx.glcanvas.GLCanvas
クラスを使用してこれを達成する方法はありますか?
opengl - SDL_SetVideoMode を vsync することは可能ですか?
アプリのウィンドウのサイズを次のように変更しようとしています:
vsync swapbuffers (ドライバー xorg-video-ati 内) を使用していますが、ウィンドウ サイズが変更されるとちらつきが見られます (1 つ以上の黒いフレームだと思います)。
SDL_GL_SwapBuffers() のように、
SDL_SetVideoMode は vsync されていませんか?
または、ウィンドウを破棄して別のウィンドウを作成し、その間バッファは黒ですか?
誰かがこれを行うための作業コードを知っていますか? 多分フリーグルで?
gtk - GdkFrameClock を使用して GtkDrawingArea を画面のリフレッシュ レートと同期させる
バックグラウンド
を使用して、ウィジェットの更新を画面のリフレッシュ レートに同期させたいと考えていますGdkFrameClock
。これは、LCD 画面から離れた視覚刺激応答測定用です (したがって、信号の純度のために、できるだけ正確に近いフレーム同期が必要です)。
クラスのドキュメントを読みましたが、範囲が限られています。GTK の世界における GdkFrameClock の位置付けに関する包括的な理解が欠けています。GitHub の GTK ソース ツリーにあるデモを精査しても、私には何の成果もありませんでした。
質問
できると仮定すると、 (カイロを想定)の画面表現の更新を画面のリフレッシュレートGdkFrameClock
に同期するにはどうすればよいですか?GtkDrawingArea
できない場合、目的はGdkFrameClock
何ですか?
opengl - 表示したものが完全に画面に描画されていることをどのように確認できますか?
コンピューターのモニターに画像を表示するには、一連の非同期呼び出しをディスパッチするグラフィック API を使用する必要があります...そして、ある時点で、必要なものをコンピューターの画面に表示します。
しかし、必要な画像が完全に描画される (そしてユーザーに表示される) 時点での正確なCPU 時間を知りたい場合はどうでしょうか?
この時点を私が行った他の測定値と関連付けるために、すべてが表示されたときに CPU タイムスタンプを取得する必要があります。
グラフィック スタックの非同期動作を考慮しないと、多くのことがジッターへのグラフィック呼び出しの長さを取得できます。
- マルチスレッド;
- V-BLANK に同期します (残念ながらティアリングを避けるために必要です)。
- 私は他に何を忘れましたか?:P
Linux でのソリューションをターゲットにしていますが、他の OS にもオープンです。X.org サーバーのxvideo 拡張機能と OpenGL API の一部については既に調査しましたが、効果的な解決策はまだ見つかっていません。
解決策がビデオ ドライバーやハードウェアへのハッキングを伴わないことを願うばかりです。
注: 必要なハードウェアで最近の Nvidia G-SYNC を使用することはできません。この技術は、予測できないジッターの一部を取り除きますが、この問題を完全に解決することはできないと思います.
OpenGL Wikiでは次のように提案されています。
GPUキューでswapBuffer呼び出しが完了した直後に、そのような高精度/マルチメディアタイマー値を適切に取得する方法を誰かが知っていますか?