OSDN Git Service

マクロ TEST_Direct3D9Ex をつけてビルドすると、Direct3D9ExのSetMaximumFrameLatency()でキューイングフレーム数を0にする...
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Thu, 7 Apr 2011 13:24:45 +0000 (13:24 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Thu, 7 Apr 2011 13:24:45 +0000 (13:24 +0000)
Vistaと7で描画遅延が小さくなったはずだが、代わりに描画FPSが半減している。何かが足らないのかな。
なおまだ実験段階なので、上記マクロつきでビルドすると、XPでの起動不可、フルスクリーンでの起動不可(ウインドウで起動してフルスクリーンに切り替えるのはOK)など、
数々の制限事項あり。

git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@154 16f42ceb-6dc6-49c8-ba94-f2d53467949d

DTXManiaプロジェクト/コード/全体/Program.cs
FDK17プロジェクト/コード/01.フレームワーク/Rendering/Direct3D9Manager.cs
FDK17プロジェクト/コード/01.フレームワーク/Rendering/GraphicsDeviceManager.cs
FDK17プロジェクト/コード/04.グラフィック/CAero.cs [new file with mode: 0644]
FDK17プロジェクト/コード/04.グラフィック/CTexture.cs

index c61d02d..6e2651d 100644 (file)
@@ -6,6 +6,7 @@ using System.Runtime.InteropServices;
 using System.Threading;\r
 using System.Diagnostics;\r
 using System.Windows.Forms;\r
+using FDK;\r
 \r
 namespace DTXMania\r
 {\r
@@ -80,15 +81,7 @@ namespace DTXMania
                                        Thread.CurrentThread.CurrentCulture = new CultureInfo( "en-US" );\r
 #endif\r
 \r
-                                       // turn off Aero Glass\r
-//                                     try\r
-//                                     {\r
-//                                             DwmEnableComposition( false );\r
-//                                     }\r
-//                                     catch ( DllNotFoundException )\r
-//                                     {\r
-//                                             // DLLがなければXP以下とみなし何もしない\r
-//                                     }\r
+                                       DWM.EnableComposition(false);\r
 \r
                                        // BEGIN #23670 2010.11.13 from: キャッチされない例外は放出せずに、ログに詳細を出力する。\r
                                        // BEGIM #24606 2011.03.08 from: DEBUG 時は例外発生箇所を直接デバッグできるようにするため、例外をキャッチしないようにする。\r
index 3f60904..fdb4db6 100644 (file)
@@ -40,8 +40,12 @@ namespace SampleFramework
         /// Gets the graphics device.\r
         /// </summary>\r
         /// <value>The graphics device.</value>\r
-        public Device Device\r
-        {\r
+#if TEST_Direct3D9Ex\r
+               public DeviceEx Device                                                  //yyagi\r
+#else\r
+               public Device Device\r
+#endif\r
+               {\r
             get;\r
             internal set;\r
         }\r
index d2f99a2..d05f205 100644 (file)
@@ -50,8 +50,12 @@ namespace SampleFramework
         long windowedStyle;\r
         bool savedTopmost;\r
 \r
-        internal static Direct3D Direct3D9Object\r
-        {\r
+#if TEST_Direct3D9Ex\r
+               internal static Direct3DEx Direct3D9Object                      // yyagi\r
+#else\r
+               internal static Direct3D Direct3D9Object\r
+#endif\r
+               {\r
             get;\r
             private set;\r
         }\r
@@ -481,15 +485,24 @@ namespace SampleFramework
                        {\r
                                EnsureD3D9();\r
 \r
+#if TEST_Direct3D9Ex\r
+                               Direct3D9.Device = new SlimDX.Direct3D9.DeviceEx( Direct3D9Object, CurrentSettings.Direct3D9.AdapterOrdinal,\r
+                                       CurrentSettings.Direct3D9.DeviceType, game.Window.Handle,\r
+                                       CurrentSettings.Direct3D9.CreationFlags, CurrentSettings.Direct3D9.PresentParameters );\r
+// yyagi\r
+#else\r
                                Direct3D9.Device = new SlimDX.Direct3D9.Device( Direct3D9Object, CurrentSettings.Direct3D9.AdapterOrdinal,\r
                                        CurrentSettings.Direct3D9.DeviceType, game.Window.Handle,\r
                                        CurrentSettings.Direct3D9.CreationFlags, CurrentSettings.Direct3D9.PresentParameters );\r
-\r
-                               if( Result.Last == SlimDX.Direct3D9.ResultCode.DeviceLost )\r
+#endif\r
+                               if ( Result.Last == SlimDX.Direct3D9.ResultCode.DeviceLost )\r
                                {\r
                                        deviceLost = true;\r
                                        return;\r
                                }\r
+#if TEST_Direct3D9Ex\r
+                               Direct3D9.Device.MaximumFrameLatency = 0;                       // yyagi\r
+#endif\r
                        }\r
                        catch( Exception e )\r
                        {\r
@@ -651,8 +664,12 @@ namespace SampleFramework
 \r
         internal static void EnsureD3D9()\r
         {\r
-            if (Direct3D9Object == null)\r
-                Direct3D9Object = new Direct3D();\r
+                       if ( Direct3D9Object == null )\r
+#if TEST_Direct3D9Ex\r
+                               Direct3D9Object = new Direct3DEx();             // yyagi\r
+#else\r
+                               Direct3D9Object = new Direct3D();\r
+#endif\r
         }\r
     }\r
 }\r
diff --git a/FDK17プロジェクト/コード/04.グラフィック/CAero.cs b/FDK17プロジェクト/コード/04.グラフィック/CAero.cs
new file mode 100644 (file)
index 0000000..959a15a
--- /dev/null
@@ -0,0 +1,52 @@
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using SlimDX;\r
+\r
+namespace FDK\r
+{\r
+       //http://spazzarama.wordpress.com/2009/09/30/enable-or-disable-dwm-composition-aero/\r
+       /// <summary>\r
+       /// To control Aerograph in Vista and Windows7. Don't use this class in XP.\r
+       /// </summary>\r
+       public static class DWM\r
+       {\r
+               const uint DWM_EC_DISABLECOMPOSITION = 0;\r
+               const uint DWM_EC_ENABLECOMPOSITION = 1;\r
+\r
+               [DllImport( "dwmapi.dll", EntryPoint = "DwmEnableComposition" )]\r
+               extern static uint DwmEnableComposition( uint compositionAction );\r
+\r
+               /// <summary>  \r
+               /// Enable/Disable DWM composition (aka Aero)  \r
+               /// </summary>  \r
+               /// <param name="bIsAeroEnabled">True to enable composition, false to disable composition.</param>  \r
+               /// <returns>True if the operation was successful.</returns>  \r
+               public static bool EnableComposition( bool bIsAeroEnabled )\r
+               {\r
+#if TEST_Direct3D9Ex\r
+                       try\r
+                       {\r
+                               if ( bIsAeroEnabled )\r
+                               {\r
+                                       DwmEnableComposition( DWM_EC_ENABLECOMPOSITION );\r
+                               }\r
+                               else\r
+                               {\r
+                                       DwmEnableComposition( DWM_EC_DISABLECOMPOSITION );\r
+                               }\r
+                               return true;\r
+                       }\r
+                       catch ( DllNotFoundException )\r
+                       {\r
+                               return false;\r
+                       }\r
+#else\r
+                       return true;\r
+#endif\r
+               }       \r
+       }\r
+}\r
+\r
index 1f5176d..bccddd0 100644 (file)
@@ -102,7 +102,11 @@ namespace FDK
                                        stream.Seek( 0L, SeekOrigin.Begin );\r
                                        int colorKey = 0;\r
                                        colorKey = -16777216;\r
+#if TEST_Direct3D9Ex\r
+                                       this.texture = Texture.FromStream( device, stream, this.szテクスチャサイズ.Width, this.szテクスチャサイズ.Height, 1, Usage.None, format, Pool.Default, Filter.Point, Filter.None, colorKey );\r
+#else\r
                                        this.texture = Texture.FromStream( device, stream, this.szテクスチャサイズ.Width, this.szテクスチャサイズ.Height, 1, Usage.None, format, Pool.Managed, Filter.Point, Filter.None, colorKey );\r
+#endif\r
                                }\r
                                this.t頂点バッファの作成( device );\r
                        }\r
@@ -176,7 +180,11 @@ namespace FDK
                                        {\r
                                                bitmap.Save( stream, ImageFormat.Bmp );\r
                                                stream.Seek( 0L, SeekOrigin.Begin );\r
+#if TEST_Direct3D9Ex\r
+                                               this.texture = Texture.FromStream( device, stream, n幅, n高さ, 1, Usage.None, format, Pool.Default, Filter.Point, Filter.None, 0 );\r
+#else\r
                                                this.texture = Texture.FromStream( device, stream, n幅, n高さ, 1, Usage.None, format, pool, Filter.Point, Filter.None, 0 );\r
+#endif\r
                                        }\r
                                }\r
                                this.t頂点バッファの作成( device );\r
@@ -209,7 +217,11 @@ namespace FDK
                                ImageInformation information = ImageInformation.FromFile( strファイル名 );\r
                                this.sz画像サイズ = new Size( information.Width, information.Height );\r
                                this.szテクスチャサイズ = this.t指定されたサイズを超えない最適なテクスチャサイズを返す( device, this.sz画像サイズ );\r
+#if TEST_Direct3D9Ex\r
+                               this.texture = Texture.FromFile( device, strファイル名, this.sz画像サイズ.Width, this.sz画像サイズ.Height, 1, Usage.None, format, Pool.Default, Filter.Point, Filter.None, b黒を透過する ? -16777216 : 0 );\r
+#else\r
                                this.texture = Texture.FromFile( device, strファイル名, this.sz画像サイズ.Width, this.sz画像サイズ.Height, 1, Usage.None, format, pool, Filter.Point, Filter.None, b黒を透過する ? -16777216 : 0 );\r
+#endif\r
                                this.t頂点バッファの作成( device );\r
                        }\r
                        catch\r
@@ -472,7 +484,11 @@ namespace FDK
                }\r
                private void t頂点バッファの作成( Device device )\r
                {\r
+#if TEST_Direct3D9Ex\r
+                       this.vbPositionColoredVertexBuffer = new VertexBuffer( device, 4 * PositionColoredTexturedVertex.SizeInBytes, Usage.WriteOnly, VertexFormat.None, Pool.Default );\r
+#else\r
                        this.vbPositionColoredVertexBuffer = new VertexBuffer( device, 4 * PositionColoredTexturedVertex.SizeInBytes, Usage.WriteOnly, VertexFormat.None, Pool.Managed );\r
+#endif\r
                }\r
                //-----------------\r
                #endregion\r