4

したがって、ウィンドウ化されたアプリケーションでD3Dを使用しています。

次のパラメータを使用してD3Dを初期化しました。

windowed: true;
backbufferformat: D3DFMT_X8R8G8B8;
presentinterval: D3DPRESENT_INTERVAL_ONE;
swapeffect: DISCARD

OnPaintが呼び出されるたびに、画像をバックバッファーにレンダリングして前面に表示します。

私の知る限り(そしてMSDNもそう言っています)、一度設定D3DPRESENT_INTERVAL_ONEすると、vsyncは機能します。

ただし、この場合、水平方向にドラッグすると画像が破れます。

(画像全体に線があるようです。線の下の画像がモニターに表示され、上の部分が続きます。)

一部のサイトでは、D3DPRESENT_INTERVAL_ONEはウィンドウ化されたアプリケーションでは機能しないと述べています。

とにかくvsyncを有効にするにはどうすればよいですか?

psついに、D3D vsyncが有効になっていることがわかりましたが、一部のウィンドウ設定が正しくないため、ウィンドウ自体が同期されていない可能性があります。しかし、私は設定を覗き見していません。

4

5 に答える 5

4

D3D9を使用していると思いますか?そのタグを追加する必要があります。あなたのD3DPRESENT_PARAMS変数で:

if (bVysncEnabled)
{
    presentParams.PresentationInterval = D3DPRESENT_INTERVAL_ONE;
    presentParams.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
}
else
{
    presentParams.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
    presentParams.FullScreen_RefreshRateInHz = 0;
}

これを行っていて、古い GDI のものを使用している場合、間違っているのは vsync の設定ではなく、ウィンドウの設定です。ダブル バッファリングを有効にする必要があります。そうしないと、ティアリングが発生します。

于 2015-10-13T06:38:13.517 に答える
0

これまで、Windowedはd3dに対してvsyncすることができませんでしたが、WinVistaまたはWin7でaeroが有効になっていて、アプリがプレゼンテーションモードで実行されていない場合、これが可能になったのはごく最近のことです。

于 2011-06-20T22:03:44.527 に答える
0

フルスクリーンでのみ、ウィンドウ表示中は vsync できません。ただし、デフォルトのディスプレイから情報を取得してリフレッシュレートを見つけ、レンダラーをそのレートでのみレンダリングするように弱体化することで、潜在的にゲットーすることができます...ただし、そのルートはお勧めしません.

于 2011-01-14T15:36:16.820 に答える
0

::OnPaint をどのくらいの頻度で呼び出しますか? 私が尋ねている理由は、接続されているモニターのリフレッシュ レートよりも頻繁に ::OnPaint を呼び出す必要があるからです。

私にとっては、ウィンドウを無効にしてメッセージループがアイドル状態になるたびに ::OnPaint を強制することで更新の問題を解決しました。これを行うとどうなるかというと、D3D の RenderPresent コマンドは、グラフィック カードのレンダリングが終了するまで待機します。これにより、実際のモニターのリフレッシュ レートと同期して ::OnPaint の非常に正確なタイミングが得られます。

私はこれでうまくいっています.ウィンドウモードがvsyncできないという上記のステートメントは間違いなく真実ではありません. DirectX 9 Win XP でも、これは機能します。

最後になりましたが、複数のディスプレイが接続されている場合は、ウィンドウを表示する実際のディスプレイと必ず vsync してください。これは少し難しいようです。

于 2013-06-20T11:01:10.757 に答える
0

厳密には D3D ではありませんが、AntiTearing.htmlでは、 MPC-HC がウィンドウ付き EVR などを使用して、ウィンドウ付きディスプレイのテアリングを回避する方法について説明しています。ここのリンク: http://betterlogic.com/roger/2012/05/gdi-vsync-to-avoid-tearing/も同期に役立つ場合があります (ただし、何らかの回避策があります)。

于 2012-05-09T15:24:54.287 に答える