bool D3D11EffectMaterial::SetVertexFormat(const VertexFormat& format) { if(m_pIL != NULL) { m_pIL->Release(); } int nElem = format.GetElementCount(); D3D11_INPUT_ELEMENT_DESC* layout = new D3D11_INPUT_ELEMENT_DESC[nElem]; for(int i = 0; i < nElem; ++i) { const VertexElement& e = format.GetElement(i); switch(e.semantic) { case VertexElement::POSITION: layout[i].SemanticName = "POSITION"; break; case VertexElement::NORMAL: layout[i].SemanticName = "NORMAL"; break; case VertexElement::COLOR: layout[i].SemanticName = "COLOR"; break; case VertexElement::POSITION_T: layout[i].SemanticName = "POSITIONT"; break; case VertexElement::TEXCOORD: layout[i].SemanticName = "TEXCOORD"; break; default: break; } layout[i].Format = D3D11Format::Convert(e.type); layout[i].SemanticIndex = e.element_slot; layout[i].InputSlot = 0; layout[i].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT ; layout[i].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA; layout[i].InstanceDataStepRate = 0; } ID3DX11EffectTechnique* pTech = m_pEffect->GetTechniqueByIndex(0); ID3DX11EffectPass* pPass = pTech->GetPassByIndex(0); D3DX11_PASS_DESC pass; ZeroMemory(&pass, sizeof(pass)); HRESULT hr = pPass->GetDesc(&pass); hr = m_pDevice->CreateInputLayout( layout, nElem, pass.pIAInputSignature, pass.IAInputSignatureSize, &m_pIL ); if(FAILED(hr)) { delete[] layout; return false; } delete[] layout; return true; }