/// <summary> /// セットする /// </summary> /// <param name="a"></param> /// <param name="b">セマティク名の最後につく番号(0-9) 例えば、0と入力した場合、POSTION なら POTION0 となる。9より大きい数値の場合、番号はつかない。</param> /// <param name="c">要素のセマンティクス インデックスです。セマンティクス インデックスは、整数のインデックス番号によってセマンティクスを修飾するものです。 /// セマンティクス インデックスは、同じセマンティクスの要素が複数ある場合にのみ必要です。 /// たとえば、4x4 のマトリクスには 4 個の構成要素があり、それぞれの構成要素にはセマンティクス名として matrix が付けられますが、 /// 4 個の構成要素にはそれぞれ異なるセマンティクス インデックス(0、1、2、3) が割り当てられます。 /// </param> /// <param name="d">要素データのデータ型です。「DXGI_FORMAT」を参照してください。</param> /// <param name="e">入力アセンブラーを識別する整数値です(「入力スロット」を参照してください)。有効な値は 0 ~ 15 であり、D3D11.h で定義されています。</param> /// <param name="f">(省略可能)各要素間のオフセット(バイト単位) です。前の要素の直後で現在の要素を定義するには、D3D11_APPEND_ALIGNED_ELEMENT を使用すると便利です。必要に応じてパッキング処理も指定できます。</param> /// <param name="g">単一の入力スロットの入力データ クラスを識別します(「D3D11_INPUT_CLASSIFICATION」を参照してください)。</param> /// <param name="h">バッファーの中で要素の 1 つ分進む前に、インスタンス単位の同じデータを使用して描画するインスタンスの数です。 /// 頂点単位のデータを持つ要素(スロット クラスは InputClassification.PerVertexData に設定されています) では、この値が 0 であることが必要です。</param> public void Set(MC_SEMANTIC a, int b, int c, Format d, int e, int f, InputClassification g, int h) { SemanticType = a; SemanticNo = b > 9 ? 10 : b; // シェーダー入力署名でこの要素に関連付けられている HLSL セマンティクスです。 SemanticName = DefinedSemanticName.Get(a, SemanticNo); SemanticIndex = c; Format = d; Slot = e; AlignedByteOffset = f; Classification = g; InstanceDataStepRate = h; }
/// <summary> /// セットする /// </summary> public void Set(D3D11_INPUT_ELEMENT_DESC_EX [] a, int len) { int min = System.Math.Min(a.Length, len); aDesc = new InputElement[min]; aAsemanticType = new MC_SEMANTIC[min]; for (int i = 0; i < min; ++i) { a[i].Get(ref aDesc[i]); aAsemanticType[i] = a[i].SemanticType; aDesc[i].SemanticName = DefinedSemanticName.Get(a[i].SemanticType, a[i].SemanticNo); } numAry = len; }
/// <summary> /// コンストラクタ /// </summary> public MCInputLayoutMgr(Application app) { App = app; // レイアウトidは1から m_nowLayoutID = 1; // int layoutID; D3D11_INPUT_ELEMENT_DESC_EX[] a = new D3D11_INPUT_ELEMENT_DESC_EX[8]; Action <int, MC_SEMANTIC, int, int, Format, int, InputClassification, int> SET_IEDE = (i, b, c, d, e, f, g, h) => { a[i].SemanticType = b; a[i].SemanticNo = c; a[i].SemanticName = DefinedSemanticName.Get(b, c); a[i].SemanticIndex = d; a[i].Format = e; a[i].Slot = f; a[i].AlignedByteOffset = -1; // APPEND_ALIGNED_ELEMENT a[i].Classification = g; a[i].InstanceDataStepRate = h; }; // LAYOUT_PC a = new D3D11_INPUT_ELEMENT_DESC_EX[2]; SET_IEDE(0, MC_SEMANTIC.P, 10, 0, Format.R32G32B32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(1, MC_SEMANTIC.C, 10, 0, Format.R32G32B32A32_Float, 0, InputClassification.PerVertexData, 0); GetLayoutID(a, 2, out layoutID); // LAYOUT_PTx a = new D3D11_INPUT_ELEMENT_DESC_EX[2]; SET_IEDE(0, MC_SEMANTIC.P, 10, 0, Format.R32G32B32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(1, MC_SEMANTIC.Tx, 10, 0, Format.R32G32_Float, 0, InputClassification.PerVertexData, 0); GetLayoutID(a, 2, out layoutID); // LAYOUT_P_Tx a = new D3D11_INPUT_ELEMENT_DESC_EX[2]; SET_IEDE(0, MC_SEMANTIC.P, 10, 0, Format.R32G32B32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(1, MC_SEMANTIC.Tx, 10, 0, Format.R32G32_Float, 1, InputClassification.PerVertexData, 0); GetLayoutID(a, 2, out layoutID); // LAYOUT_PNC a = new D3D11_INPUT_ELEMENT_DESC_EX[3]; SET_IEDE(0, MC_SEMANTIC.P, 10, 0, Format.R32G32B32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(1, MC_SEMANTIC.N, 10, 0, Format.R32G32B32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(2, MC_SEMANTIC.Tx, 10, 0, Format.R32G32_Float, 0, InputClassification.PerVertexData, 0); GetLayoutID(a, 3, out layoutID); // LAYOUT_PCTx a = new D3D11_INPUT_ELEMENT_DESC_EX[3]; SET_IEDE(0, MC_SEMANTIC.P, 10, 0, Format.R32G32B32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(1, MC_SEMANTIC.C, 10, 0, Format.R32G32B32A32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(2, MC_SEMANTIC.Tx, 10, 0, Format.R32G32_Float, 0, InputClassification.PerVertexData, 0); GetLayoutID(a, 3, out layoutID); // LAYOUT_P_Tx_Tx a = new D3D11_INPUT_ELEMENT_DESC_EX[3]; SET_IEDE(0, MC_SEMANTIC.P, 10, 0, Format.R32G32B32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(1, MC_SEMANTIC.Tx, 0, 0, Format.R32G32_Float, 1, InputClassification.PerVertexData, 0); SET_IEDE(2, MC_SEMANTIC.Tx, 1, 1, Format.R32G32_Float, 2, InputClassification.PerVertexData, 0); GetLayoutID(a, 3, out layoutID); // LAYOUT_PCTxTx a = new D3D11_INPUT_ELEMENT_DESC_EX[4]; SET_IEDE(0, MC_SEMANTIC.P, 10, 0, Format.R32G32B32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(1, MC_SEMANTIC.C, 10, 0, Format.R32G32B32A32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(2, MC_SEMANTIC.Tx, 0, 0, Format.R32G32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(3, MC_SEMANTIC.Tx, 1, 1, Format.R32G32_Float, 0, InputClassification.PerVertexData, 0); GetLayoutID(a, 4, out layoutID); // LAYOUT_PNCTx a = new D3D11_INPUT_ELEMENT_DESC_EX[4]; SET_IEDE(0, MC_SEMANTIC.P, 10, 0, Format.R32G32B32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(1, MC_SEMANTIC.N, 10, 0, Format.R32G32B32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(2, MC_SEMANTIC.C, 10, 0, Format.R32G32B32A32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(3, MC_SEMANTIC.Tx, 10, 0, Format.R32G32_Float, 0, InputClassification.PerVertexData, 0); GetLayoutID(a, 4, out layoutID); // LAYOUT_PNCCTx a = new D3D11_INPUT_ELEMENT_DESC_EX[5]; SET_IEDE(0, MC_SEMANTIC.P, 10, 0, Format.R32G32B32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(1, MC_SEMANTIC.N, 10, 0, Format.R32G32B32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(2, MC_SEMANTIC.C, 0, 0, Format.R32G32B32A32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(3, MC_SEMANTIC.C, 1, 0, Format.R32G32B32A32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(4, MC_SEMANTIC.Tx, 10, 0, Format.R32G32_Float, 0, InputClassification.PerVertexData, 0); GetLayoutID(a, 5, out layoutID); a = new D3D11_INPUT_ELEMENT_DESC_EX[8]; SET_IEDE(0, MC_SEMANTIC.P, 10, 0, Format.R32G32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(1, MC_SEMANTIC.Tn, 10, 0, Format.R32G32_Float, 0, InputClassification.PerVertexData, 0); SET_IEDE(2, MC_SEMANTIC.Tn, 0, 0, Format.R32G32B32A32_Float, 1, InputClassification.PerInstanceData, 1); SET_IEDE(3, MC_SEMANTIC.Tn, 1, 1, Format.R32G32B32A32_Float, 1, InputClassification.PerInstanceData, 1); SET_IEDE(4, MC_SEMANTIC.Tn, 2, 2, Format.R32G32B32A32_Float, 1, InputClassification.PerInstanceData, 1); SET_IEDE(5, MC_SEMANTIC.Tn, 3, 3, Format.R32G32B32A32_Float, 1, InputClassification.PerInstanceData, 1); SET_IEDE(6, MC_SEMANTIC.C, 10, 0, Format.R32G32B32A32_Float, 1, InputClassification.PerInstanceData, 1); SET_IEDE(7, MC_SEMANTIC.S, 10, 0, Format.R32G32B32A32_Float, 1, InputClassification.PerInstanceData, 1); GetLayoutID(a, 8, out layoutID); }