トップページ > 記事閲覧
DirectXの3フレーム遅延について
名前:マルチナ 日時: 2014/06/16 16:49

 ネットの記事で、Windows Vista,7は、Aeroの関係でWindowsのデフォルト設定で、DirectXが3フレーム遅延を発生するという記事を見つけたのですが、DXライブラリを使用して描画した場合、この3フレーム遅延は発生するものなのでしょうか?Aeroを切って、APIの設定によりフレーム遅延を1フレームに設定できるとも記載があったのですが、DXライブラリの関数で、何かこのような設定をすることは可能でしょうか?
メンテ

Page: 1 |

Re: DirectXの3フレーム遅延について ( No.1 )
名前:管理人 日時:2014/06/16 22:52

> DXライブラリの関数で、何かこのような設定をすることは可能でしょうか? 何もしなくても、DXライブラリではフルスクリーンモードで起動する場合は Aero はデフォルトでOFFになるようになっています ウインドウモードで起動する場合はデフォルトではONなので、もしウインドウモードで 起動する場合も Aero をOFFにしたい場合は非公開関数の SetAeroDisableFlag を使用して DxLib_Init の前に SetAeroDisableFlag( TRUE ) ; という記述を追加して明示的に Aero をOFFにしてください Aero の設定以外にフレーム遅延設定する機能が Direct3D 9 Ex にありますが、 それは常に遅延が最小になるようにしています
メンテ
Re: DirectXの3フレーム遅延について ( No.2 )
名前:マルチナ 日時:2014/06/17 11:02

早速のご回答ありがとうございます。    DXライブラリのソースコードを拝見したのですが、 動作は以下のようになっているという理解で間違いないでしょうか。 SetAeroDisableFlag:有効・無効のフラグの設定(処理の分岐に使用するフラグ)  ↓ SetEnableAero:Aeroを有効・無効にするAPI実行(引数にTRUE(有効)/FALSE(無効)を設定)  ↓関数内で DwmEnableComposition:WindowsAPIでDWMの有効無効を変更する。 ただ、DXライブラリはフルスクリーンモードで Aero(DWM)を無効としていますが、 終了時に有効としていないように見受けられます。 プロセスが終了すると自動的に有効となるものなのか、そもそもプロセス内のみで有効/無効となるのか ? (DXライブラリを起動したプロセスで無効に切り替えた場合、 他の動画再生プロセスでも無効となってしまうのか。) が分かりません。ご回答頂ければ幸いです。
メンテ
Re: DirectXの3フレーム遅延について ( No.3 )
名前:管理人 日時:2014/06/17 22:58

> プロセスが終了すると自動的に有効となるものなのか その通りです > そもそもプロセス内のみで有効/無効となるのか > (DXライブラリを起動したプロセスで無効に切り替えた場合、 他の動画再生プロセスでも無効となってしまうのか。) あるプロセスで Aero を無効にすると、全てのアプリを巻き込んだ Aero 無効となります ウインドウモードで Aero を無効にすると Aero の機能であるデスクトップの半透明表示などが 無効になるのでOS全体を巻き込んでいるのがよく分かると思います Aero のことを知らない方は単純に「ソフトを起動したら画面が変になった!」と思ってしまうことがあるので、 ウインドウモードでの Aero 無効は予めその辺りの説明をする必要があるかもしれません
メンテ
Re: DirectXの3フレーム遅延について ( No.4 )
名前:マルチナ 日時:2014/06/30 10:17

 少しDXライブラリから離れた質問になってしまいますが、AeroによるWindows7の3フレーム遅延について質問がありますので、ご回答頂けたら幸いです。 Q1: Aero ONでDirectXで描画をした時、3フレーム遅延 は必ず発生するか?  実はDirectX9実践プログラミング [WindowsXP/Vista/7対応版]という本を購入しま して、サンプルコードを動作させました。サンプル コードは[.kohgakusha.co.jp/support/sdx9xpv7 /index.html]から落とせるのですが、サンプル20で はMicrosoft SDK for Windows7のPerformance Tool Kitsに付いているGPUViewerというツールで、GPUの 挙動を解析したのですが、3フレーム遅延が生じて います。 (参考記事:shikihuiku.wordpress.com/2012/06/12/) ところが、sample29では、遅延が生じていませんで した。Windowsフリップで、アニメーションの描画 窓を表示できるので、AERO ONであることは間違い ありません。  なにか、レンダリングの仕方によって、AERO ONで も3フレーム遅延が発生しない場合があるのでしょうか? Q2:3フレーム遅延を発生しない設定。  Aero OFFだけで良いのでしょうか?ネットの記事には、ビデオカードドライバーの設定にて、レンダリ ング前最大フレーム数を1に設定する必要もあると書いてあるものもあります。  AERO OFF + レンダリング前フレーム数1設定が、directXでフレーム遅延3を発生しない設定という考えで間違いないでしょうか?  そうならば、DXライブラリのSetAeroDisableFlagの 設定以外にビデオドライバーの設定をしないと、3フレーム遅延が発生することになりますが、その点、いかがでしょうか?  ご多忙とは存じますが、ご回答頂ければ幸いです。 
メンテ
Re: DirectXの3フレーム遅延について ( No.5 )
名前:管理人 日時:2014/07/01 00:40

> Q1: >  Aero ONでDirectXで描画をした時、3フレーム遅延 > は必ず発生するか? すみません、分かりません 載せて頂いたサイトを参考に手元でも GPUViewer を使って色々試して 確認してみようと思ったのですが、Microsoft SDK for Windows7 の インストールが何度試してみても失敗してしまい使うことができませんでした sample29 と sample20 は基本的な処理は同じはずなのでこちらも何故 sample29 では 遅延が発生しないのかもわかりません > AERO OFF + レンダリング前フレーム数1設定が、directXでフレーム遅延3を発生しない設定という考えで間違いないでしょうか? GPUViewer を使って直に確認したわけではないので断言はできませんが、 その考えで問題ないと思います > そうならば、DXライブラリのSetAeroDisableFlagの > 設定以外にビデオドライバーの設定をしないと、3フレーム遅延が発生することになりますが、その点、いかがでしょうか? ビデオドライバーの設定というのは、私の最初のご返信( No.1 )の中の 「Aero の設定以外にフレーム遅延設定する機能が Direct3D 9 Ex にありますが、 それは常に遅延が最小になるようにしています」 ↑こちらのこととなります なので、DXライブラリではビデオドライバーの設定による「レンダリング前最大フレーム数」は Direct3D 9 Ex が使用できる環境では常に最小( 1 )にしています
メンテ
Re: DirectXの3フレーム遅延について ( No.6 )
名前:マルチナ 日時:2014/07/01 08:20

ご回答ありがとうございます。 .projectgroup.info/tips/Others/comm_0004.html Microsoft SDK for Windows7 は、上記のURLに記載がありましたが、 ・Microsoft Visual C++ 2010 x86 Redistributable ・Microsoft Visual C++ 2010 x64 Redistributable をアンインストールしないとエラーが起きるようです。また、Visual C++ 2010 SP1 がインストールされていると発生するようです。
メンテ
Re: DirectXの3フレーム遅延について ( No.7 )
名前:管理人 日時:2014/07/02 22:56

ご情報ありがとうございます、なんとかインストールできました sample20 と sample29、あとDXライブラリでも試してみましたが、 少なくとも私の環境では何れの場合も遅延は発生していませんでした ( 何れも 1ms 以内にGPUに処理されています ) sample20 Aero ON https://dxlib.xsrv.jp/temp/GPUView_D3D9Sample20.png sample29 Aero ON https://dxlib.xsrv.jp/temp/GPUView_D3D9Sample29.png DXライブラリ Aero ON https://dxlib.xsrv.jp/temp/GPUView_DxLibTest_Aero_ON.png DXライブラリ Aero OFF https://dxlib.xsrv.jp/temp/GPUView_DxLibTest_Aero_OFF.png うーん、謎です
メンテ
Re: DirectXの3フレーム遅延について ( No.8 )
名前:マルチナ 日時:2014/07/03 08:24

 お手数をおかけしました。サンプル20で、フルスクリーンで描画したときに、こちらでは3フレーム遅延が発生しています。(AERO ONです)。説明不足ですいません。いずれにしても、AEROの3フレーム遅延は、いつも発生するわけではなさそうですね。  また何か分かりましたら、こちらからも掲示板に情報アップさせて頂きます。
メンテ
Re: DirectXの3フレーム遅延について ( No.9 )
名前:管理人 日時:2014/07/06 04:24

ご情報ありがとうございます、私の環境でもフルスクリーンモードでは sample20 で 遅延が発生することが確認できました ただ、Aero が ON の状態でも必ずしも3フレーム遅延するわけではないというのは 私の環境でも同じで、思えばドライバの設定にある名称も 「レンダリング前最大フレーム数」 なので、お察しの通り条件次第で遅延が3フレーム以下になるのは仕様みたいです
メンテ
Re: DirectXの3フレーム遅延について ( No.10 )
名前:マルチナ 日時:2014/07/09 08:35

いろいろと調査ご協力ありがとうございました。マイクロソフトの方から、正式な仕様が開示されてないようですが、ネットの情報をいろいろ調べると、条件次第でフレーム遅延数は変わるようですね。あくまで3フレームは最大遅延量ということなのでしょう。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存