public void ResetDrawState(int 頂点数, int 頂点の開始インデックス, MMDPass pass種別, DeviceContext d3ddc) { this._頂点数 = 頂点数; this._頂点の開始インデックス = 頂点の開始インデックス; this.MMDPass = pass種別; this._d3ddc = d3ddc; // 既定のパイプラインステートを設定。 switch (pass種別) { case MMDPass.Edge: this._d3ddc.VertexShader.Set(this._DefaultMaterialShader.VertexShaderForEdge); // Edge this._d3ddc.HullShader.Set(this._DefaultMaterialShader.HullShader); this._d3ddc.DomainShader.Set(this._DefaultMaterialShader.DomainShader); this._d3ddc.GeometryShader.Set(this._DefaultMaterialShader.GeometryShader); this._d3ddc.PixelShader.Set(this._DefaultMaterialShader.PixelShaderForEdge); // Edge break; default: this._d3ddc.VertexShader.Set(this._DefaultMaterialShader.VertexShaderForObject); this._d3ddc.HullShader.Set(this._DefaultMaterialShader.HullShader); this._d3ddc.DomainShader.Set(this._DefaultMaterialShader.DomainShader); this._d3ddc.GeometryShader.Set(this._DefaultMaterialShader.GeometryShader); this._d3ddc.PixelShader.Set(this._DefaultMaterialShader.PixelShaderForObject); break; } this._選択中のVertexShader = null; this._選択中のHullShader = null; this._選択中のDomainShader = null; this._選択中のGeometryShader = null; this._選択中のPixelShader = null; }
public void Draw(int 頂点数, int 頂点の開始インデックス, MMDPass pass種別, DeviceContext d3ddc) { this._PipelineState.ResetDrawState(頂点数, 頂点の開始インデックス, pass種別, d3ddc); this._PipelineState.Reason = Reason.Run; this._ShaderScript.RunAsync(this._PipelineState); }
/// <summary> /// 材質を描画する。 /// </summary> /// <remarks> /// このメソッドの呼び出し前に、<paramref name="d3ddc"/> には以下の設定が行われている。 /// - InputAssembler /// - 頂点バッファ(モデル全体)の割り当て /// - 頂点インデックスバッファ(モデル全体)の割り当て /// - 頂点レイアウトの割り当て /// - PrimitiveTopology の割り当て(PatchListWith3ControlPoints固定) /// - VertexShader /// - slot( b0 ) …… グローバルパラメータ /// - HullShader /// - slot( b0 ) …… グローバルパラメータ /// - DomainShader /// - slot( b0 ) …… グローバルパラメータ /// - GeometryShader /// - slot( b0 ) …… グローバルパラメータ /// - PixelShader /// - slot( b0 ) …… グローバルパラメータ /// - slot( t0 ) …… テクスチャ /// - slot( t1 ) …… スフィアマップテクスチャ /// - slot( t2 ) …… トゥーンテクスチャ /// - Rasterizer /// - Viewport の設定 /// - RasterizerState の設定(材質に応じた固定値) /// - OutputMerger /// - RengerTargetView の割り当て /// - DepthStencilView の割り当て /// - DepthStencilState の割り当て(固定) /// </remarks> public void Draw(int 頂点数, int 頂点の開始インデックス, MMDPass pass種別, DeviceContext d3ddc) { switch (pass種別) { case MMDPass.Object: d3ddc.VertexShader.Set(this.VertexShaderForObject); d3ddc.HullShader.Set(this.HullShader); d3ddc.DomainShader.Set(this.DomainShader); d3ddc.GeometryShader.Set(this.GeometryShader); d3ddc.PixelShader.Set(this.PixelShaderForObject); d3ddc.DrawIndexed(頂点数, 頂点の開始インデックス, 0); break; case MMDPass.Edge: d3ddc.VertexShader.Set(this.VertexShaderForEdge); d3ddc.HullShader.Set(this.HullShader); d3ddc.DomainShader.Set(this.DomainShader); d3ddc.GeometryShader.Set(this.GeometryShader); d3ddc.PixelShader.Set(this.PixelShaderForEdge); d3ddc.DrawIndexed(頂点数, 頂点の開始インデックス, 0); break; case MMDPass.ObjectWithSelfShadow: break; case MMDPass.Shadow: break; case MMDPass.ZPlotForSelfShadow: break; } }
/// <summary> /// 材質を描画する。 /// </summary> /// <param name="d3ddc"> /// 描画に使用するDeviceContext。 /// </param> /// <param name="頂点数"> /// 材質の頂点数。 /// </param> /// <param name="頂点の開始インデックス"> /// 頂点バッファにおける、材質の開始インデックス。 /// </param> /// <param name="pass種別"> /// 材質の描画種別。 /// </param> /// <param name="グローバルパラメータ"> /// グローバルパラメータ。 /// </param> /// <param name="グローバルパラメータ定数バッファ"> /// グローバルパラメータの内容が格納された定数バッファ。 /// </param> /// <param name="テクスチャSRV"> /// 材質が使用するテクスチャリソースのSRV。未使用なら null。 /// </param> /// <param name="スフィアマップテクスチャSRV"> /// 材質が使用するスフィアマップテクスチャリソースのSRV。未使用なら null。 /// </param> /// <param name="トゥーンテクスチャSRV"> /// 材質が使用するトゥーンテクスチャリソースのSRV。未使用なら null。 /// </param> /// <remarks> /// このメソッドの呼び出し時には、<paramref name="d3ddc"/> には事前に以下のように設定される。 /// - InputAssembler /// - 頂点バッファ(モデル全体)の割り当て /// - 頂点インデックスバッファ(モデル全体)の割り当て /// - 頂点レイアウトの割り当て /// - PrimitiveTopology の割り当て(PatchListWith3ControlPoints固定) /// - VertexShader /// - slot( b0 ) …… <paramref name="グローバルパラメータ定数バッファ"/> /// - HullShader /// - slot( b0 ) …… <paramref name="グローバルパラメータ定数バッファ"/> /// - DomainShader /// - slot( b0 ) …… <paramref name="グローバルパラメータ定数バッファ"/> /// - GeometryShader /// - slot( b0 ) …… <paramref name="グローバルパラメータ定数バッファ"/> /// - PixelShader /// - slot( b0 ) …… <paramref name="グローバルパラメータ定数バッファ"/> /// - slot( t0 ) …… <paramref name="テクスチャSRV"/> /// - slot( t1 ) …… <paramref name="スフィアマップテクスチャSRV"/> /// - slot( t2 ) …… <paramref name="トゥーンテクスチャSRV"/> /// - slot( s0 ) …… ピクセルシェーダー用サンプルステート /// - Rasterizer /// - Viewport の設定 /// - RasterizerState の設定 /// - OutputMerger /// - RengerTargetView の割り当て /// - DepthStencilView の割り当て /// - DepthStencilState の割り当て /// </remarks> public void Draw( DeviceContext d3ddc, int 頂点数, int 頂点の開始インデックス, MMDPass pass種別, in GlobalParameters グローバルパラメータ,