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
|
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フレームは最大遅延量ということなのでしょう。
|