OSDN Git Service

頂点シェーダを、デバイスリソース から テクスチャ の共通項目(static) へ委譲。
authorくまかみ工房 <kumakamikoubou@gmail.com>
Sat, 17 Sep 2016 14:31:41 +0000 (23:31 +0900)
committerくまかみ工房 <kumakamikoubou@gmail.com>
Sat, 17 Sep 2016 14:31:41 +0000 (23:31 +0900)
FDK24/メディア/テクスチャ.cs
FDK24/メディア/デバイスリソース.cs

index 31b8282..6a2b507 100644 (file)
@@ -7,13 +7,38 @@ namespace FDK.メディア
 {
        public class テクスチャ : FDK.Activity
        {
+               // 全インスタンス共通項目(static)
+
                public static void 共有リソースを作成する( FDK.メディア.デバイスリソース dr )
                {
+                       var シェーダコンパイルのオプション =
+                               SharpDX.D3DCompiler.ShaderFlags.Debug |
+                               SharpDX.D3DCompiler.ShaderFlags.SkipOptimization |
+                               SharpDX.D3DCompiler.ShaderFlags.EnableStrictness |
+                               SharpDX.D3DCompiler.ShaderFlags.PackMatrixColumnMajor;
+
+                       #region " 頂点シェーダ "
+                       //----------------
+                       // シェーダコードをコンパイルする。
+                       using( var code = SharpDX.D3DCompiler.ShaderBytecode.Compile(
+                               FDK.Properties.Resources.テクスチャ用シェーダコード,
+                               "VS", "vs_4_0", シェーダコンパイルのオプション ) )
+                       {
+                               // 頂点シェーダを生成する。
+                               テクスチャ.VertexShader = new SharpDX.Direct3D11.VertexShader( dr.D3DDevice, code );
+                       }
+                       //----------------
+                       #endregion
                }
                public static void 共有リソースを解放する()
                {
+                       テクスチャ.VertexShader?.Dispose();
                }
 
+               protected static SharpDX.Direct3D11.VertexShader VertexShader;
+
+               // 個別項目
+
                public float 不透明度 { get; set; } = 1f;    // 0:透明~1:不透明
 
                public テクスチャ( string 画像ファイルパス )
@@ -91,7 +116,7 @@ namespace FDK.メディア
                        d3dContext.InputAssembler.PrimitiveTopology = SharpDX.Direct3D.PrimitiveTopology.TriangleStrip;
 
                        // 頂点シェーダ
-                       d3dContext.VertexShader.Set( dr.VertexShader );
+                       d3dContext.VertexShader.Set( テクスチャ.VertexShader );
                        d3dContext.VertexShader.SetConstantBuffers( 0, this.ConstantBuffer );
 
                        // ジオメトリシェーダ
index c29b171..462089d 100644 (file)
@@ -44,7 +44,6 @@ namespace FDK.メディア
                public SharpDX.Direct3D11.Texture2D DepthStencil => this.bs_DepthStencil;
                public SharpDX.Direct3D11.DepthStencilView DepthStencilView => this.bs_DepthStencilView;
                public SharpDX.Direct3D11.DepthStencilState DepthStencilState => this.bs_DepthStencilState;
-               public SharpDX.Direct3D11.VertexShader VertexShader => this.bs_VertexShader;
                public SharpDX.Direct3D11.PixelShader PixelShader => this.bs_PixelShader;
                public SharpDX.Direct3D11.BlendState BlendState => this.bs_BlendState;
                public SharpDX.Direct3D11.RasterizerState RasterizerState => this.bs_RasterizerState;
@@ -109,26 +108,13 @@ namespace FDK.メディア
                        }
                        //----------------
                        #endregion
-                       #region " 頂点シェーダ "
+                       #region " ピクセルシェーダ "
                        //----------------
                        var シェーダコンパイルのオプション =
                                SharpDX.D3DCompiler.ShaderFlags.Debug |
                                SharpDX.D3DCompiler.ShaderFlags.SkipOptimization |
                                SharpDX.D3DCompiler.ShaderFlags.EnableStrictness |
                                SharpDX.D3DCompiler.ShaderFlags.PackMatrixColumnMajor;
-
-                       // コードをコンパイルする。
-                       using( var code = SharpDX.D3DCompiler.ShaderBytecode.Compile(
-                               FDK.Properties.Resources.テクスチャ用シェーダコード,
-                               "VS", "vs_4_0", シェーダコンパイルのオプション ) )
-                       {
-                               // 頂点シェーダを作成する。
-                               this.bs_VertexShader = new SharpDX.Direct3D11.VertexShader( this.bs_D3DDevice, code );
-                       }
-                       //----------------
-                       #endregion
-                       #region " ピクセルシェーダ "
-                       //----------------
                        // コードをコンパイルする。
                        using( var code = SharpDX.D3DCompiler.ShaderBytecode.Compile(
                                FDK.Properties.Resources.テクスチャ用シェーダコード, 
@@ -252,7 +238,6 @@ namespace FDK.メディア
                        this.bs_RasterizerState?.Dispose();
                        this.bs_BlendState?.Dispose();
                        this.bs_PixelShader?.Dispose();
-                       this.bs_VertexShader?.Dispose();
                        this.bs_SwapChain?.Dispose();
                        this.bs_D3DDevice?.Dispose();
                }
@@ -381,7 +366,6 @@ namespace FDK.メディア
                private SharpDX.DXGI.SwapChain bs_SwapChain = 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;
                private SharpDX.Direct3D11.BlendState bs_BlendState = null;
                private SharpDX.Direct3D11.RasterizerState bs_RasterizerState = null;