/// <summary> /// /// </summary> /// <param name="dev"></param> /// <param name="pass"></param> /// <returns></returns> public int CreateInputLayout(Device dev, EffectPass pass) { int hr; D3D11_INPUT_ELEMENT_DESC_EX[] aDecl = new D3D11_INPUT_ELEMENT_DESC_EX[15]; MCDeclElementVertexBuffer tmpSP = new MCDeclElementVertexBuffer(); int nSt = 0, nOffset, nCpyNum = 0; nOffset = 0; // 頂点 if (m_meshGroup.meshGeometry != null) { tmpSP = m_meshGroup.meshGeometry.GetDeclElementVertexBuffer(); nCpyNum = tmpSP.GetInputElementDesc(aDecl, nSt, nOffset); if (nCpyNum != 0) { ++nSt; nOffset += nCpyNum; } } // テクスチャ if (m_meshGroup.meshTexture != null) { tmpSP = m_meshGroup.meshTexture.GetDeclElementVertexBuffer(); nCpyNum = tmpSP.GetInputElementDesc(aDecl, nSt, nOffset); if (nCpyNum != 0) { ++nSt; nOffset += nCpyNum; } } // スキンメッシュ if (m_meshGroup.meshVBlendBone != null) { tmpSP = m_meshGroup.meshVBlendBone.GetDeclElementVertexBuffer(); nCpyNum = tmpSP.GetInputElementDesc(aDecl, nSt, nOffset); if (nCpyNum != 0) { ++nSt; nOffset += nCpyNum; } } // 頂点宣言オブジェクト作成 hr = App.LayoutMgr.GetLayoutID(aDecl, nCpyNum, out m_meshGroup.layoutID); return(hr); }
/// <summary> /// D3D11_INPUT_ELEMENT_DESCの値をセットする。オフセット値は内部で計算しセットする。 /// </summary> /// <param name="semanticType">シェーダー入力署名でこの要素に関連付けられている HLSL セマンティクス名の種類</param> /// <param name="semanticNo">semanticTypeの名前の最後につく番号。10以上は付かない</param> /// <param name="semanticIndex">要素のセマンティクス インデックスです</param> /// <param name="format">要素データのデータ型です</param> /// <param name="inputSlot">入力アセンブラーを識別する整数値です</param> /// <param name="inputSlotClass">単一の入力スロットの入力データ クラスを識別します</param> /// <param name="instanceDataStepRate">バッファーの中で要素の 1 つ分進む前に、インスタンス単位の同じデータを使用して描画するインスタンスの数です</param> /// <returns>D3D11_INPUT_ELEMENT_DESCの総数を返す。</returns> public int DeclarationElementInsert( MC_SEMANTIC semanticType, int semanticNo, int semanticIndex, Format format, int inputSlot, InputClassification inputSlotClass, int instanceDataStepRate ) { D3D11_INPUT_ELEMENT_DESC_EX element = new D3D11_INPUT_ELEMENT_DESC_EX(); element.Set( semanticType, semanticNo, semanticIndex, format, inputSlot, -1, inputSlotClass, instanceDataStepRate ); //D3DX11_PASS_DESC pass; if (m_vaVertexElement.Count != 0) { element.AlignedByteOffset = m_offset; } m_offset += GetFormatSize(format); m_vaVertexElement.Add(element); return(m_vaVertexElement.Count); }