From b5398df9713cf3e242d9e7b3401632dbb534862d Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E3=81=8F=E3=81=BE=E3=81=8B=E3=81=BF=E5=B7=A5=E6=88=BF?= Date: Sat, 17 Sep 2016 20:14:51 +0900 Subject: [PATCH] =?utf8?q?=E3=82=B9=E3=83=AF=E3=83=83=E3=83=97=E3=83=81?= =?utf8?q?=E3=82=A7=E3=83=BC=E3=83=B3=E3=81=AE=E3=83=AA=E3=82=B5=E3=82=A4?= =?utf8?q?=E3=82=BA=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92=E3=80=81Applicatio?= =?utf8?q?nFormBase=20=E3=81=8B=E3=82=89=20=E3=83=87=E3=83=90=E3=82=A4?= =?utf8?q?=E3=82=B9=E3=83=AA=E3=82=BD=E3=83=BC=E3=82=B9=20=E3=81=B8?= =?utf8?q?=E7=A7=BB=E5=8B=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- FDK24/ApplicationFormBase.cs | 22 ++++-------------- FDK24/メディア/デバイスリソース.cs | 32 +++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/FDK24/ApplicationFormBase.cs b/FDK24/ApplicationFormBase.cs index 0f07698..40a2bd8 100644 --- a/FDK24/ApplicationFormBase.cs +++ b/FDK24/ApplicationFormBase.cs @@ -165,7 +165,8 @@ namespace FDK protected override void OnSizeChanged( EventArgs e ) { - // 実行時条件チェック。 + #region " 実行時チェック。" + //---------------- if( null == this.デバイスリソース ) { return; // まだ初期化されてない(ので何もしない)。 @@ -180,25 +181,12 @@ namespace FDK Trace.WriteLine( "最小化されました。" ); return; // 何もしない } - - // 描画ターゲットを解除する。 - this.デバイスリソース.D3DDevice.ImmediateContext.OutputMerger.ResetTargets(); // 描画ターゲットの解除 - - // サイズに依存するリソースを解放する。 - this.デバイスリソース.サイズに依存するリソースを解放する(); - - // バックバッファのサイズを変更する。 - this.デバイスリソース.SwapChain.ResizeBuffers( - bufferCount: 3, - width: this.ClientSize.Width, - height: this.ClientSize.Height, - newFormat: SharpDX.DXGI.Format.R8G8B8A8_UNorm, - swapChainFlags: SharpDX.DXGI.SwapChainFlags.AllowModeSwitch ); + //---------------- + #endregion // サイズに依存するリソースを再作成する。 + this.デバイスリソース.サイズに依存するリソースを解放する(); this.デバイスリソース.サイズに依存するリソースを作成する(); - - base.OnSizeChanged( e ); } [System.Runtime.InteropServices.DllImport( "winmm.dll" )] diff --git a/FDK24/メディア/デバイスリソース.cs b/FDK24/メディア/デバイスリソース.cs index be1b5a2..397c74d 100644 --- a/FDK24/メディア/デバイスリソース.cs +++ b/FDK24/メディア/デバイスリソース.cs @@ -8,9 +8,14 @@ namespace FDK.メディア public class デバイスリソース { public SharpDX.Size2F 設計画面サイズdpx = new SharpDX.Size2F( 640f, 480f ); - public SharpDX.Size2F 物理画面サイズpx; + public SharpDX.Size2F 物理画面サイズpx = new SharpDX.Size2F( 0, 0 ); // (0, 0) は、サイズ依存リソース無効の印。 public IntPtr ウィンドウハンドル = IntPtr.Zero; + + public SharpDX.Vector3 カメラの位置; + public SharpDX.Vector3 カメラの注視点; + public SharpDX.Vector3 カメラの上方向; public float 視野角 = 45f; + public float 不透明度 = 0.5f; // 0:透明~1:不透明 public struct ST定数バッファの転送元データ { @@ -265,7 +270,19 @@ namespace FDK.メディア } public void サイズに依存するリソースを作成する() { - // バックバッファを取得 + #region " スワップチェーンのサイズを変更する。" + //---------------- + Debug.Assert( null != this.SwapChain ); // スワップチェーンは、デバイスとともに、すでに生成される。 + this.SwapChain.ResizeBuffers( + bufferCount: 2, + width: (int) this.物理画面サイズpx.Width, + height: (int) this.物理画面サイズpx.Height, + newFormat: SharpDX.DXGI.Format.R8G8B8A8_UNorm, + swapChainFlags: SharpDX.DXGI.SwapChainFlags.AllowModeSwitch ); + //---------------- + #endregion + + // 新しいサイズになったバックバッファを取得して、リソースを作成する。 using( var backBuffer = SharpDX.Direct3D11.Texture2D.FromSwapChain( this.bs_SwapChain, 0 ) ) { #region " RenderTargetView の作成 " @@ -324,10 +341,17 @@ namespace FDK.メディア } public void サイズに依存するリソースを解放する() { + // 描画ターゲットを解除する。 + this.D3DDevice.ImmediateContext.OutputMerger.ResetTargets(); + FDK.メディア.テクスチャ.共有リソースを解放する(); this.bs_DepthStencilView?.Dispose(); this.bs_DepthStencil?.Dispose(); this.bs_RenderTargetView?.Dispose(); + //this.bs_SwapChain?.Dispose(); → スワップチェーンは解放しない(生成・解放はデバイスとセット)。 + + // (0,0)は、サイズ依存リソース無効の印。 + this.物理画面サイズpx = new SharpDX.Size2F( 0, 0 ); } public void D3Dデバイスが消失していれば再構築する( out bool 異常状態なのでアプリを終了せよ ) { @@ -360,10 +384,12 @@ namespace FDK.メディア private SharpDX.Direct3D11.Device bs_D3DDevice = null; private SharpDX.DXGI.SwapChain bs_SwapChain = null; + private SharpDX.Direct3D11.RenderTargetView bs_RenderTargetView = null; - private SharpDX.Mathematics.Interop.RawViewportF[] bs_ViewPort = new SharpDX.Mathematics.Interop.RawViewportF[ 1 ]; private SharpDX.Direct3D11.Texture2D bs_DepthStencil = null; private SharpDX.Direct3D11.DepthStencilView bs_DepthStencilView = null; + + private SharpDX.Mathematics.Interop.RawViewportF[] bs_ViewPort = new SharpDX.Mathematics.Interop.RawViewportF[ 1 ]; private SharpDX.Direct3D11.DepthStencilState bs_DepthStencilState = null; private SharpDX.Direct3D11.VertexShader bs_VertexShader = null; private SharpDX.Direct3D11.PixelShader bs_PixelShader = null; -- 2.11.0