Exemple #1
0
        /// <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);
        }