OSDN Git Service

SlimDX から SharpDX へ機械的に移行。
[dtxmania/dtxmania.git] / FDK17プロジェクト / コード / 01.フレームワーク / Rendering / GraphicsDeviceManager.cs
index 8da51da..f47c62d 100644 (file)
 using System;\r
 using System.ComponentModel;\r
 using System.Drawing;\r
+using System.Runtime.InteropServices;\r
 using System.Text;\r
 using System.Threading;\r
 using System.Windows.Forms;\r
-using SlimDX;\r
-using SlimDX.Direct3D9;\r
-using SlimDX.DXGI;\r
+using SharpDX;\r
+using SharpDX.Direct3D9;\r
+using SharpDX.DXGI;\r
 using System.Diagnostics;\r
+\r
+using Rectangle = System.Drawing.Rectangle;\r
+\r
 namespace SampleFramework\r
 {\r
     /// <summary>\r
@@ -128,7 +132,9 @@ namespace SampleFramework
 \r
                        DeviceSettings validSettings = DeviceSettings.FindValidSettings( settings );\r
 \r
-                       validSettings.Direct3D9.PresentParameters.DeviceWindowHandle = game.Window.Handle;\r
+                       var pp = validSettings.Direct3D9.PresentParameters;\r
+                       pp.DeviceWindowHandle = game.Window.Handle;\r
+                       validSettings.Direct3D9.PresentParameters = pp;\r
 \r
                        CreateDevice( validSettings );\r
                }\r
@@ -251,14 +257,14 @@ namespace SampleFramework
             }\r
 \r
             // check if the device can be reset, or if we need to completely recreate it\r
-            Result result = SlimDX.Direct3D9.ResultCode.Success;\r
+            Result result = SharpDX.Direct3D9.ResultCode.Success;\r
             bool canReset = CanDeviceBeReset(oldSettings, settings);\r
             if (canReset)\r
                 result = ResetDevice();\r
 \r
-            if (result == SlimDX.Direct3D9.ResultCode.DeviceLost)\r
+            if (result == SharpDX.Direct3D9.ResultCode.DeviceLost)\r
                 deviceLost = true;\r
-            else if (!canReset || result.IsFailure)\r
+            else if (!canReset || result.Failure)\r
             {\r
                 if (oldSettings != null)\r
                     ReleaseDevice();\r
@@ -346,8 +352,10 @@ namespace SampleFramework
                         newSettings.BackBufferHeight = 0;\r
                         if (newSettings.Direct3D9 != null)\r
                         {\r
-                                                       newSettings.Direct3D9.PresentParameters.BackBufferWidth = GameWindowSize.Width; // #23510 2010.10.31 add yyagi: to avoid setting BackBufferSize=ClientSize\r
-                                                       newSettings.Direct3D9.PresentParameters.BackBufferHeight = GameWindowSize.Height;       // #23510 2010.10.31 add yyagi: to avoid setting BackBufferSize=ClientSize\r
+                                                       var pp = newSettings.Direct3D9.PresentParameters;\r
+                                                       pp.BackBufferWidth = GameWindowSize.Width;      // #23510 2010.10.31 add yyagi: to avoid setting BackBufferSize=ClientSize\r
+                                                       pp.BackBufferHeight = GameWindowSize.Height;   // #23510 2010.10.31 add yyagi: to avoid setting BackBufferSize=ClientSize\r
+                                                       newSettings.Direct3D9.PresentParameters = pp;\r
                         }\r
 \r
                         CreateDevice(newSettings);\r
@@ -380,8 +388,10 @@ namespace SampleFramework
                        {\r
                                newSettings.BackBufferWidth = 0;\r
                                newSettings.BackBufferHeight = 0;\r
-                               newSettings.Direct3D9.PresentParameters.BackBufferWidth = GameWindowSize.Width;         // #23510 2010.10.31 add yyagi: to avoid setting BackBufferSize=ClientSize\r
-                               newSettings.Direct3D9.PresentParameters.BackBufferHeight = GameWindowSize.Height;       // \r
+                               var pp = newSettings.Direct3D9.PresentParameters;\r
+                               pp.BackBufferWidth = GameWindowSize.Width;              // #23510 2010.10.31 add yyagi: to avoid setting BackBufferSize=ClientSize\r
+                               pp.BackBufferHeight = GameWindowSize.Height;   // \r
+                               newSettings.Direct3D9.PresentParameters = pp;\r
                                CreateDevice( newSettings );\r
                        }\r
                }\r
@@ -399,25 +409,30 @@ namespace SampleFramework
                        newSettings.Direct3D9.AdapterOrdinal = adapterOrdinal;\r
 \r
                        newSettings.BackBufferWidth = 0;                                                                // #23510 2010.11.1 add yyagi to avoid to reset to 640x480 for the first time in XP.\r
-                       newSettings.BackBufferHeight = 0;                                                               //\r
-                       newSettings.Direct3D9.PresentParameters.BackBufferWidth = GameWindowSize.Width;         //\r
-                       newSettings.Direct3D9.PresentParameters.BackBufferHeight = GameWindowSize.Height;       //\r
+                       newSettings.BackBufferHeight = 0;                               //\r
+                       var pp = newSettings.Direct3D9.PresentParameters;\r
+                       pp.BackBufferWidth = GameWindowSize.Width;              //\r
+                       pp.BackBufferHeight = GameWindowSize.Height;   //\r
+                       newSettings.Direct3D9.PresentParameters = pp;\r
 \r
-                       CreateDevice(newSettings);\r
+                       CreateDevice( newSettings);\r
                }\r
 \r
                void game_FrameEnd( object sender, EventArgs e )\r
                {\r
-                       Result result = SlimDX.Direct3D9.ResultCode.Success;\r
+                       Result result = SharpDX.Direct3D9.ResultCode.Success;\r
+\r
                        try\r
                        {\r
-                               result = Direct3D9.Device.Present();\r
+                               //result = Direct3D9.Device.TestCooperativeLevel();\r
+                               Direct3D9.Device.Present();\r
                        }\r
-                       catch (Direct3D9Exception)                              // #23842 2011.1.6 yyagi: catch D3D9Exception to avoid unexpected termination by changing VSyncWait in fullscreen.\r
+                       catch                   // #23842 2011.1.6 yyagi: catch D3D9Exception to avoid unexpected termination by changing VSyncWait in fullscreen.\r
                        {\r
                                deviceLost = true;\r
                        }\r
-                       if( result == SlimDX.Direct3D9.ResultCode.DeviceLost )\r
+\r
+                       if( result == SharpDX.Direct3D9.ResultCode.DeviceLost )\r
                                deviceLost = true;\r
                }\r
         void game_FrameStart(object sender, CancelEventArgs e)\r
@@ -428,16 +443,16 @@ namespace SampleFramework
                 return;\r
             }\r
 \r
-//            if (!game.IsActive || deviceLost)                // #23568 2010.11.3 yyagi: separate conditions to support valiable sleep value when !IsActive.\r
-                       if (deviceLost)\r
-                               Thread.Sleep(50);\r
-                       else if (!game.IsActive && !this.CurrentSettings.EnableVSync)   // #23568 2010.11.4 yyagi: Don't add sleep() while VSync is enabled.\r
-                               Thread.Sleep(this.game.InactiveSleepTime.Milliseconds);\r
+                       //if (!game.IsActive || deviceLost)             // #23568 2010.11.3 yyagi: separate conditions to support valiable sleep value when !IsActive.\r
+                       if( deviceLost )\r
+                               Thread.Sleep( 50 );\r
+                       else if( !game.IsActive && !this.CurrentSettings.EnableVSync )  // #23568 2010.11.4 yyagi: Don't add sleep() while VSync is enabled.\r
+                               Thread.Sleep( this.game.InactiveSleepTime.Milliseconds );\r
 \r
             if (deviceLost)\r
             {\r
                 Result result = Direct3D9.Device.TestCooperativeLevel();\r
-                if (result == SlimDX.Direct3D9.ResultCode.DeviceLost)\r
+                if (result == SharpDX.Direct3D9.ResultCode.DeviceLost)\r
                 {\r
                     e.Cancel = true;\r
                     return;\r
@@ -458,7 +473,7 @@ namespace SampleFramework
                 }\r
 \r
                 result = ResetDevice();\r
-                if (result.IsFailure)\r
+                if (result.Failure)\r
                 {\r
                     e.Cancel = true;\r
                     return;\r
@@ -514,11 +529,15 @@ namespace SampleFramework
                                }\r
                                Direct3D9.Device.MaximumFrameLatency = 1;\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
+                               Direct3D9.Device = new SharpDX.Direct3D9.Device(\r
+                                       Direct3D9Object,\r
+                                       CurrentSettings.Direct3D9.AdapterOrdinal,\r
+                                       CurrentSettings.Direct3D9.DeviceType,\r
+                                       game.Window.Handle,\r
+                                       CurrentSettings.Direct3D9.CreationFlags,\r
+                                       CurrentSettings.Direct3D9.PresentParameters );\r
 #endif\r
-                               if ( Result.Last == SlimDX.Direct3D9.ResultCode.DeviceLost )\r
+                               if ( Result.GetResultFromWin32Error( Marshal.GetLastWin32Error() ) == SharpDX.Direct3D9.ResultCode.DeviceLost )\r
                                {\r
                                        deviceLost = true;\r
                                        return;\r
@@ -544,22 +563,26 @@ namespace SampleFramework
                {\r
                        game.UnloadContent();\r
 \r
-                       Result result = Direct3D9.Device.Reset( CurrentSettings.Direct3D9.PresentParameters );\r
-                       if( result == SlimDX.Direct3D9.ResultCode.DeviceLost )\r
+                       Direct3D9.Device.Reset( CurrentSettings.Direct3D9.PresentParameters );\r
+\r
+                       var result = Result.GetResultFromWin32Error( Marshal.GetLastWin32Error() );\r
+\r
+                       if( result == SharpDX.Direct3D9.ResultCode.DeviceLost )\r
                                return result;\r
 \r
                        PropogateSettings();\r
                        UpdateDeviceStats();\r
                        game.LoadContent();\r
 \r
-                       return Result.Last;\r
+                       return result;\r
                }\r
 \r
                void ReleaseDevice()\r
         {\r
             ReleaseDevice9();\r
         }\r
-        void ReleaseDevice9()\r
+\r
+               void ReleaseDevice9()\r
         {\r
             if (Direct3D9.Device == null)\r
                 return;\r
@@ -591,9 +614,9 @@ namespace SampleFramework
                        CurrentSettings.BackBufferFormat = CurrentSettings.Direct3D9.PresentParameters.BackBufferFormat;\r
                        CurrentSettings.DepthStencilFormat = CurrentSettings.Direct3D9.PresentParameters.AutoDepthStencilFormat;\r
                        CurrentSettings.DeviceType = CurrentSettings.Direct3D9.DeviceType;\r
-                       CurrentSettings.MultisampleQuality = CurrentSettings.Direct3D9.PresentParameters.MultisampleQuality;\r
-                       CurrentSettings.MultisampleType = CurrentSettings.Direct3D9.PresentParameters.Multisample;\r
-                       CurrentSettings.RefreshRate = CurrentSettings.Direct3D9.PresentParameters.FullScreenRefreshRateInHertz;\r
+                       CurrentSettings.MultisampleQuality = CurrentSettings.Direct3D9.PresentParameters.MultiSampleQuality;\r
+                       CurrentSettings.MultisampleType = CurrentSettings.Direct3D9.PresentParameters.MultiSampleType;\r
+                       CurrentSettings.RefreshRate = CurrentSettings.Direct3D9.PresentParameters.FullScreenRefreshRateInHz;\r
                        CurrentSettings.Windowed = CurrentSettings.Direct3D9.PresentParameters.Windowed;\r
                }\r
 \r
@@ -651,18 +674,18 @@ namespace SampleFramework
                        builder.AppendFormat( " ({0}x{1}), ", CurrentSettings.Direct3D9.PresentParameters.BackBufferWidth, CurrentSettings.Direct3D9.PresentParameters.BackBufferHeight );\r
 \r
                        if( CurrentSettings.Direct3D9.AdapterFormat == CurrentSettings.Direct3D9.PresentParameters.BackBufferFormat )\r
-                               builder.Append( Enum.GetName( typeof( SlimDX.Direct3D9.Format ), CurrentSettings.Direct3D9.AdapterFormat ) );\r
+                               builder.Append( Enum.GetName( typeof( SharpDX.Direct3D9.Format ), CurrentSettings.Direct3D9.AdapterFormat ) );\r
                        else\r
                                builder.AppendFormat( "backbuf {0}, adapter {1}",\r
-                                       Enum.GetName( typeof( SlimDX.Direct3D9.Format ), CurrentSettings.Direct3D9.AdapterFormat ),\r
-                                       Enum.GetName( typeof( SlimDX.Direct3D9.Format ), CurrentSettings.Direct3D9.PresentParameters.BackBufferFormat ) );\r
+                                       Enum.GetName( typeof( SharpDX.Direct3D9.Format ), CurrentSettings.Direct3D9.AdapterFormat ),\r
+                                       Enum.GetName( typeof( SharpDX.Direct3D9.Format ), CurrentSettings.Direct3D9.PresentParameters.BackBufferFormat ) );\r
 \r
-                       builder.AppendFormat( " ({0})", Enum.GetName( typeof( SlimDX.Direct3D9.Format ), CurrentSettings.Direct3D9.PresentParameters.AutoDepthStencilFormat ) );\r
+                       builder.AppendFormat( " ({0})", Enum.GetName( typeof( SharpDX.Direct3D9.Format ), CurrentSettings.Direct3D9.PresentParameters.AutoDepthStencilFormat ) );\r
 \r
-                       if( CurrentSettings.Direct3D9.PresentParameters.Multisample == MultisampleType.NonMaskable )\r
+                       if( CurrentSettings.Direct3D9.PresentParameters.MultiSampleType == MultisampleType.NonMaskable )\r
                                builder.Append( " (Nonmaskable Multisample)" );\r
-                       else if( CurrentSettings.Direct3D9.PresentParameters.Multisample != MultisampleType.None )\r
-                               builder.AppendFormat( " ({0}x Multisample)", (int) CurrentSettings.Direct3D9.PresentParameters.Multisample );\r
+                       else if( CurrentSettings.Direct3D9.PresentParameters.MultiSampleType != MultisampleType.None )\r
+                               builder.AppendFormat( " ({0}x Multisample)", (int) CurrentSettings.Direct3D9.PresentParameters.MultiSampleQuality );\r
 \r
                        DeviceStatistics = builder.ToString();\r
                }\r