none
WPFの垂直同期について RRS feed

  • 質問

  • いつもお世話になっています。

     

    WPFで作成したアプリをWinXP上で動作させた時の描画について教えてください。

    (開発環境 Windows XP SP2 + VisualStudio2005 + WPF)

     

    画像を30fpsぐらいの速さで描画させたいと思っています。

    過去にMFCで同じようなアプリを作成した時に、垂直同期を取らないとちらつきが発生していました。


    WPFで作成したアプリはDirectXを使用して描画を行うようですが、垂直同期は行われて描画されるのでしょうか。
    Vista上で動作させる時にはDWMのおかげでちらつきは出なくなっている事は分かったのですが、WinXP上で動作させた時にどうなのかの情報が見つけられませんでした。

    ちなみに実際にWinXP上で動作させてみたところ、ちらつきが出ている様に見えます。

     

    もし垂直同期が行われていない様なら、どのようにしたら良いのかまで教えていただけると助かります。

     

    以上、よろしくお願いします。

    2008年2月12日 10:08

回答

  • 以下に、「there is no mitigation for WPF on XP」って書いてありますね・・・。無理っぽいです。

     

    Strange Lines in animated Images (Vertical Syncing issue)
    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2061666&SiteID=1

    2008年2月12日 15:53
    モデレータ
  •  いろは さんからの引用

    っと言うかこの方法は行けるのでしょうか。

     

    WindowsFormsHostと言うクラスを使用して、FormsのコントロールをWPFに張り付ける事が出来ますので、まずは、Fromsのコントロールとして実装してみてはどうでしょうか。

     

     いろは さんからの引用

    ちなみに実際にWinXP上で動作させてみたところ、ちらつきが出ている様に見えます。

     

    どのようなWPFのコードで動作させたのでしょうか ?

    とても気になります。

    2008年2月13日 4:46

すべての返信

  • 以下に、「there is no mitigation for WPF on XP」って書いてありますね・・・。無理っぽいです。

     

    Strange Lines in animated Images (Vertical Syncing issue)
    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2061666&SiteID=1

    2008年2月12日 15:53
    モデレータ
  •  

    trapemiyaさん ありがとうございます。

     

    そうですか・・・ やはり出来ませんか。。。

    OSをVistaに変更することが出来ないので、非WPFな垂直同期を取って描画するコントロールを作って、WPFアプリに貼り付けたいと思います。

    っと言うかこの方法は行けるのでしょうか。まずは少し格闘してみます。

     

    ありがとうございました。

    2008年2月13日 0:45
  •  いろは さんからの引用

    っと言うかこの方法は行けるのでしょうか。

     

    WindowsFormsHostと言うクラスを使用して、FormsのコントロールをWPFに張り付ける事が出来ますので、まずは、Fromsのコントロールとして実装してみてはどうでしょうか。

     

     いろは さんからの引用

    ちなみに実際にWinXP上で動作させてみたところ、ちらつきが出ている様に見えます。

     

    どのようなWPFのコードで動作させたのでしょうか ?

    とても気になります。

    2008年2月13日 4:46
  • FC-Shiroさん ありがとうございます。

     

     FC-Shiro さんからの引用

    WindowsFormsHostと言うクラスを使用して、FormsのコントロールをWPFに張り付ける事が出来ますので、まずは、Fromsのコントロールとして実装してみてはどうでしょうか。

     

    はい、この方法でやってみようと思っていますが、DirectXを使うのが初めて(前のアプリは他の人が作った)なので、今情報をかき集めているところです。

     

     FC-Shiro さんからの引用

    どのようなWPFのコードで動作させたのでしょうか ?

    とても気になります。

     

    確かに、少し特殊なのかもしれませんね。

     

    ソースはのせられないのですが、やったことだけ。

    1.MFCを用いたDLLとWPFのEXEを作成(WPFではImageコントロールを乗せてある)

    2.DLL内部で真っ白、真っ黒画像の2枚をHBITMAPにロード

    3.DLL内部でタイマーを作成し、WPFにHBITMAPをメッセージを使って白黒交互に投げる

    4.EXEでメッセージを受け取りBitmapSourceに変換し、Image.Sourceに設定

    っという感じです。

     

    画像処理をC++でやりたいので、とりあえずの検討用に上記の様にやってみました。

     

    2008年2月13日 5:10
  • その後、実際にやってみて検討しました。

    (いろいろごちゃごちゃやってみていたので時間がかかりました)

     

    FC-Shiroさんから提案していただいたように、WindowsFormコントロールにDirectXで描画し、このコントロールをWindowsFormsHostを用いて使用する方法が可能なことが確認できました。

     

    一応、報告だけしておきます。

    ありがとうございました。

    2008年2月19日 0:22
  • こんにちは。中川俊輔 です。

     

    trapemiyaさん、FC-Shiroさん、大変参考になる回答ありがとうございます。

     

    いろはさん、フォーラムのご利用ありがとうございます。

    問題解決の参考になったようなので、

    勝手ながらtrapemiyaさん、FC-Shiroさんの回答へ回答済みチェックをつけさせていただきました。

     

    回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
    問題解決につながる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。

    いろはさんはチェックを解除することもできますので、ご確認ください。

     

    それでは!

    2008年2月25日 9:09