デベロップ掲示板
このフォームからは投稿できません。
name
e-mail
url
subject
comment

HOME HELP 新着記事 ツリー表示 スレッド表示 トピック表示 発言ランク ファイル一覧 検索 過去ログ

ツリー一括表示

Nomal Managed Directx の垂直同期とフリップに.. /yuki (07/12/24(Mon) 03:53) #424
Nomal Re[1]: Managed Directx の垂直同期とフ.. /オノデラ (07/12/24(Mon) 11:17) #425
  ├Nomal Re[2]: Managed Directx の垂直同期とフ.. /yuki (07/12/24(Mon) 16:40) #426
  │└Nomal Re[3]: Managed Directx の垂直同期とフ.. /オノデラ (07/12/24(Mon) 22:28) #429
  └Nomal ロレックスコピー /ロレックスコピー (13/07/05(Fri) 16:50) #510


親記事 / ▼[ 425 ]
■424 / 親階層)  Managed Directx の垂直同期とフリップについて
□投稿者/ yuki Lv 1(1回)-(2007/12/24(Mon) 03:53:57)
    今更ながらMDXに関する質問ですいません。

    PresentationIntervalをOneにしたデバイスのPresent()を行うと、
    垂直同期を取りつつフリップ処理を行います。
    上記とは異なり、垂直同期だけを行いフリップせず、同じサーフェスを続けてフロントバッファとして表示する方法はあるでしょうか?

    というのも、60fpsで作ったソフトを描画回数30psに抑えて動作させる時に、
    そのようなメソッドがあれば適当な分岐と描画関連のマルチスレッドで実装できると思ったもので。
    恐縮ですが、アドバイスなどをいただけるとうれしいです。


[ □ Tree ] 返信 削除キー/

▲[ 424 ] / ▼[ 426 ] ▼[ 510 ]
■425 / 1階層)  Re[1]: Managed Directx の垂直同期とフリップについて
□投稿者/ オノデラ Lv20(198回)-(2007/12/24(Mon) 11:17:19)
http://sorceryforce.com/
     yuki さんこんにちは。オノデラです。

     私が調べた限りでの答えになるのですが、DirectX では垂直同期を行うには Device.Present メソッドを使うことになります。しかし、DirectX の垂直動機は最小でも 60 pfs になってしまうため、30 fps で制御することはできません。

     30pfs で更新したい場合は、垂直同期をONにした状態で、更新間隔を時間パラメータなどで自分で制御する方法になるかと思います。
[ 親 424 / □ Tree ] 返信 削除キー/

▲[ 425 ] / ▼[ 429 ]
■426 / 2階層)  Re[2]: Managed Directx の垂直同期とフリップについて
□投稿者/ yuki Lv 1(2回)-(2007/12/24(Mon) 16:40:39)
    すばやい返信ありがとうございます。

    実は垂直同期タイミングを飛び越える実装は先の考えの前にしてみたのですが、
    そのときはどうもうまくいかなかったのを覚えています。
    しかしながら結局こちらで実装、という形で落ち着きました。

    で、今日色々弄って見て以下の事が予想されることがわかりました。
    ・Present()が完了してから実際の画面更新開始までタイムラグがかなりある。
    ・フルスクリーンとウィンドウでは垂直同期に関する挙動に差が出る。

    例えば毎秒30回Presentしたい場合に、
    Present後の時間を基準にしてPresentの手前で1/60+α秒になるまで調整すると
    大抵何事もなかったかのように60Fps出ます。(αは0.005秒程度。)
    環境依存と予想されますが、1/60+αではなく2/60-α秒にしなければダメなようです。

    また、ウィンドウモードでは上記の前者でも30回になる場合もあるのに対し、
    フルスクリーンモードでは後者、しかもα=0.002秒程度のかなりぎりぎりでないと
    30回の描画更新にならないことから、同期の挙動に差が出ていることが予想されます。





[ 親 424 / □ Tree ] 返信 削除キー/

▲[ 426 ] / 返信無し
■429 / 3階層)  Re[3]: Managed Directx の垂直同期とフリップについて
□投稿者/ オノデラ Lv20(199回)-(2007/12/24(Mon) 22:28:05)
http://sorceryforce.com/
     私自身そこまで更新間隔について微調整をしたことがないのですが、環境依存などが存在するとなると SDK レベルで設定できるような仕組みがあるとうれしいですね。

     ウインドウモードとフルスクリーンモードは DirectX 8 あたりから同じ感覚で扱えるようになりましたが、両者は根本的に違う部分があったりするのでその調整も意外とくせものだったりしますね。

[ 親 424 / □ Tree ] 返信 削除キー/

▲[ 425 ] / 返信無し
■510 / 2階層)  ロレックスコピー
□投稿者/ ロレックスコピー Lv 1(1回)-(2013/07/05(Fri) 16:50:18)
    No425に返信(オノデラさんの記事)
    >  yuki さんこんにちは。オノデラです。
    >
    >  私が調べた限りでの答えになるのですが、DirectX では垂直同期を行うには Device.Present メソッドを使うことになります。しかし、DirectX の垂直動機は最小でも 60 pfs になってしまうため、30 fps で制御することはできません。
    >
    >  30pfs で更新したい場合は、垂直同期をONにした状態で、更新間隔を時間パラメータなどで自分で制御する方法になるかと思います。
    http://www.jpwatch2019.com/product/p1/index.html

[ 親 424 / □ Tree ] 返信 削除キー/


Mode/  Pass/

HOME HELP 新着記事 ツリー表示 スレッド表示 トピック表示 発言ランク ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -