/// <summary> /// <p>Creates an effect from a binary effect or file.</p> /// </summary> /// <param name="dataRef"><dd> <p>Blob of compiled effect data.</p> </dd></param> /// <param name="dataLength"><dd> <p>Length of the data blob.</p> </dd></param> /// <param name="fXFlags"><dd> <p>No effect flags exist. Set to zero.</p> </dd></param> /// <param name="deviceRef"><dd> <p>Pointer to the <strong><see cref="SharpDX.Direct3D11.Device"/></strong> on which to create Effect resources.</p> </dd></param> /// <param name="effectOut"><dd> <p>Address of the newly created <strong><see cref="SharpDX.Direct3D11.Effect"/></strong> interface.</p> </dd></param> /// <param name="srcName">No documentation.</param> /// <returns><p>The return value is one of the values listed in Direct3D 11 Return Codes.</p></returns> /// <remarks> /// <p><strong>Note</strong>??You must use Effects 11 source to build your effects-type application. For more info about using Effects 11 source, see Differences Between Effects 10 and Effects 11.</p> /// </remarks> /// <include file='.\..\Documentation\CodeComments.xml' path="/comments/comment[@id='D3DX11CreateEffectFromMemory']/*"/> /// <msdn-id>ff476273</msdn-id> /// <unmanaged>HRESULT D3DX11CreateEffectFromMemory([In, Buffer] const void* pData,[In] SIZE_T DataLength,[In] unsigned int FXFlags,[In] ID3D11Device* pDevice,[Out, Fast] ID3DX11Effect** ppEffect,[In, Optional] const char* srcName)</unmanaged> /// <unmanaged-short>D3DX11CreateEffectFromMemory</unmanaged-short> public static void CreateEffectFromMemory(System.IntPtr dataRef, SharpDX.PointerSize dataLength, int fXFlags, SharpDX.Direct3D11.Device deviceRef, SharpDX.Direct3D11.Effect effectOut, string srcName) { unsafe { IntPtr effectOut_ = IntPtr.Zero; IntPtr srcName_ = Utilities.StringToHGlobalAnsi(srcName); SharpDX.Result __result__; if (IntPtr.Size == 4) { __result__ = D3DX11CreateEffectFromMemory_11_1_x86(dataRef, dataLength, fXFlags, deviceRef.NativePointer, out effectOut_, srcName_); } else { __result__ = D3DX11CreateEffectFromMemory_11_1_x64(dataRef, dataLength, fXFlags, deviceRef.NativePointer, out effectOut_, srcName_); } ((SharpDX.Direct3D11.Effect)effectOut).NativePointer = effectOut_; Marshal.FreeHGlobal(srcName_); __result__.CheckError(); } }
protected override void DisposeResource() { if (effect != null) { effect.Dispose(); effect = null; } }
public Effect(PPDDevice device, byte[] bytes) : base(device) { textureSetHandles = new HashSet <EffectHandleBase>(); effect = new SharpDX.Direct3D11.Effect((SharpDX.Direct3D11.Device)((PPDFramework.DX11.PPDDevice)device).Device, bytes); var tech = effect.GetTechniqueByIndex(0); vertexDeclaration = Vertex.VertexDeclarationFactoryManager.Factory.Create(device, this); }
public void 初期化する(object model, SharpDX.Direct3D11.Effect d3dEffect) { var d3dDevice = RenderContext.Instance.DeviceManager.D3DDevice; var モデル = (PMXモデル)model; // 入力頂点リストを作成する。 var 頂点リスト = new List <CS_INPUT>(); for (int i = 0; i < モデル.頂点リスト.Count; i++) { this._頂点データを頂点レイアウトリストに追加する(モデル.頂点リスト[i], 頂点リスト); } this.入力頂点リスト = 頂点リスト.ToArray(); // インデックスバッファを作成する。内容は モデルの面リスト で初期化。 var インデックスリスト = new List <uint>(); foreach (面 surface in モデル.面リスト) { インデックスリスト.Add(surface.頂点1); インデックスリスト.Add(surface.頂点2); インデックスリスト.Add(surface.頂点3); } this.D3Dインデックスバッファ = CGHelper.D3Dバッファを作成する(インデックスリスト, d3dDevice, SharpDX.Direct3D11.BindFlags.IndexBuffer); // 頂点データストリームを作成する。内容は空。 this._頂点データストリーム = new DataStream(this.入力頂点リスト.Length * CS_INPUT.SizeInBytes, canRead: true, canWrite: true); // D3Dスキニングバッファを作成する。内容は空。 this.D3Dスキニングバッファ = new SharpDX.Direct3D11.Buffer( d3dDevice, new SharpDX.Direct3D11.BufferDescription { SizeInBytes = CS_INPUT.SizeInBytes * this.入力頂点リスト.Length, Usage = SharpDX.Direct3D11.ResourceUsage.Default, BindFlags = SharpDX.Direct3D11.BindFlags.ShaderResource | SharpDX.Direct3D11.BindFlags.UnorderedAccess, CpuAccessFlags = SharpDX.Direct3D11.CpuAccessFlags.None, OptionFlags = SharpDX.Direct3D11.ResourceOptionFlags.BufferStructured, // 構造化バッファ StructureByteStride = CS_INPUT.SizeInBytes, }); D3Dスキニングバッファをリセットする = true; // 今はストリームもスキニングバッファも空なので、描画前に設定するようフラグを立てておく。 // 頂点バッファを作成する。 this.D3D頂点バッファ = new SharpDX.Direct3D11.Buffer( d3dDevice, new SharpDX.Direct3D11.BufferDescription { SizeInBytes = VS_INPUT.SizeInBytes * this.入力頂点リスト.Length, Usage = SharpDX.Direct3D11.ResourceUsage.Default, BindFlags = SharpDX.Direct3D11.BindFlags.VertexBuffer | SharpDX.Direct3D11.BindFlags.ShaderResource | SharpDX.Direct3D11.BindFlags.UnorderedAccess, // 非順序アクセス CpuAccessFlags = SharpDX.Direct3D11.CpuAccessFlags.None, OptionFlags = SharpDX.Direct3D11.ResourceOptionFlags.BufferAllowRawViews, // 生ビューバッファ }); // 頂点シェーダー用の入力レイアウトを作成する。 this.D3D頂点レイアウト = new SharpDX.Direct3D11.InputLayout( d3dDevice, d3dEffect.GetTechniqueByName("DefaultObject").GetPassByIndex(0).Description.Signature, VS_INPUT.VertexElements); // コンピュートシェーダー入力用のシェーダーリソースビューを作成する。 this.D3DスキニングバッファSRView = new SharpDX.Direct3D11.ShaderResourceView( d3dDevice, this.D3Dスキニングバッファ, // 構造化バッファ new SharpDX.Direct3D11.ShaderResourceViewDescription { Format = SharpDX.DXGI.Format.Unknown, Dimension = SharpDX.Direct3D.ShaderResourceViewDimension.ExtendedBuffer, BufferEx = new SharpDX.Direct3D11.ShaderResourceViewDescription.ExtendedBufferResource { FirstElement = 0, ElementCount = this.入力頂点リスト.Length, }, }); // コンピュートシェーダー出力用の非順序アクセスビューを作成する。 this.D3D頂点バッファビューUAView = new SharpDX.Direct3D11.UnorderedAccessView( d3dDevice, this.D3D頂点バッファ, new SharpDX.Direct3D11.UnorderedAccessViewDescription { Format = SharpDX.DXGI.Format.R32_Typeless, Dimension = SharpDX.Direct3D11.UnorderedAccessViewDimension.Buffer, Buffer = new SharpDX.Direct3D11.UnorderedAccessViewDescription.BufferResource { FirstElement = 0, ElementCount = VS_INPUT.SizeInBytes * 入力頂点リスト.Length / 4, Flags = SharpDX.Direct3D11.UnorderedAccessViewBufferFlags.Raw, }, }); // 定数バッファを作成する。 this._D3DBoneTransデータストリーム = new DataStream(this.入力頂点リスト.Length * _D3DBoneTrans.SizeInBytes, canRead: true, canWrite: true); this._D3DBoneTrans定数バッファ = new SharpDX.Direct3D11.Buffer( d3dDevice, new SharpDX.Direct3D11.BufferDescription { SizeInBytes = 入力頂点リスト.Length * _D3DBoneTrans.SizeInBytes, BindFlags = SharpDX.Direct3D11.BindFlags.ConstantBuffer, }); this._D3DBoneLocalPositionデータストリーム = new DataStream(this.入力頂点リスト.Length * _D3DBoneLocalPosition.SizeInBytes, canRead: true, canWrite: true); this._D3DBoneLocalPosition定数バッファ = new SharpDX.Direct3D11.Buffer( d3dDevice, new SharpDX.Direct3D11.BufferDescription { SizeInBytes = 入力頂点リスト.Length * _D3DBoneLocalPosition.SizeInBytes, BindFlags = SharpDX.Direct3D11.BindFlags.ConstantBuffer, }); this._D3DBoneQuaternionデータストリーム = new DataStream(this.入力頂点リスト.Length * _D3DBoneQuaternion.SizeInBytes, canRead: true, canWrite: true); this._D3DBoneQuaternion定数バッファ = new SharpDX.Direct3D11.Buffer( d3dDevice, new SharpDX.Direct3D11.BufferDescription { SizeInBytes = 入力頂点リスト.Length * _D3DBoneQuaternion.SizeInBytes, BindFlags = SharpDX.Direct3D11.BindFlags.ConstantBuffer, }); }