none
Renderingのタイミングと画面のリフレッシュレートの関係について RRS feed

  • 質問

  • 外池と申します。遅ればせながら、WPFに手を出してみようとしています。

    今手元の環境では、ディスプレイのリフレッシュレートは50Hzになっています。一方で、ごく簡単なWPFのプログラムを書いてCompositionTarget.Renderingイベントを数え上げてやると、概ね64fps出ているようです。

    50Hzと64fpsが一致しないことは、同期する機能が無いのであれば、あたりまえなのでしょうが、できれば一致させたいと思っています。良い方法はありますでしょうか? (DirectXだと、リフレッシュレートに同期させてレンダリングする方法があったと聞いていますが。)


    (ホームページを再開しました)
    2010年11月10日 13:56

すべての返信

  • こちらも自己レスです。外池です。

    いろいろ調べて回ったところ、WPFの範囲ではプログラマーが描画のタイミングをディスプレイのリフレッシュレートと一致させる機構は無いことがわかってきました。特にWindows XPの場合はダメなようです。Vista以降だとOSの側で同期させる面倒を見てくれるようですが、このあたりネット上の記事の伝聞情報です。

    DirectXだと確かにディスプレイの画面走査の様子を読み取る機構がありました。これをWPFから利用するためには準備とひしてかなり面倒なことをしないといけないようです。とにかく、DirectXを.Net Frameworkからアクセスできるようにしなければならず、自身でDirectXのAPIをラップするクラスを書くか、既存のものを用いるか、です。

    既存のものとしては、Microsoftが以前に一度供給されたDirectX.Netがありますが、開発は打ち切られたと聞いています。DirectX9までのサポートでよければ、DirectX SDKに含まれていて利用はできます。

    あと、サードパーティー製のものとしてSlimDXがあり、無償です。MITが中心になってオープンソースで整備を続けているものです。こちらは最新のDirectXまでサポートされています。


    (ホームページを再開しました)
    2010年11月13日 2:17