| 116 | } |
| 117 | |
| 118 | void Mesh::InitFromAssimpMesh(ID3D11Device* device, const aiMesh& assimpMesh) |
| 119 | { |
| 120 | numVertices = assimpMesh.mNumVertices; |
| 121 | numIndices = assimpMesh.mNumFaces * 3; |
| 122 | |
| 123 | uint32 indexSize = 2; |
| 124 | indexType = IndexType::Index16Bit; |
| 125 | if(numVertices > 0xFFFF) |
| 126 | { |
| 127 | indexSize = 4; |
| 128 | indexType = IndexType::Index32Bit; |
| 129 | } |
| 130 | |
| 131 | // Figure out the vertex layout |
| 132 | uint32 currOffset = 0; |
| 133 | D3D11_INPUT_ELEMENT_DESC elemDesc; |
| 134 | elemDesc.InputSlot = 0; |
| 135 | elemDesc.InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA; |
| 136 | elemDesc.InstanceDataStepRate = 0; |
| 137 | std::vector<const aiVector3D*> vertexData; |
| 138 | |
| 139 | if(assimpMesh.HasPositions()) |
| 140 | { |
| 141 | elemDesc.Format = DXGI_FORMAT_R32G32B32_FLOAT; |
| 142 | elemDesc.AlignedByteOffset = currOffset; |
| 143 | elemDesc.SemanticName = "POSITION"; |
| 144 | elemDesc.SemanticIndex = 0; |
| 145 | inputElements.push_back(elemDesc); |
| 146 | currOffset += 12; |
| 147 | vertexData.push_back(assimpMesh.mVertices); |
| 148 | } |
| 149 | |
| 150 | if(assimpMesh.HasNormals()) |
| 151 | { |
| 152 | elemDesc.Format = DXGI_FORMAT_R32G32B32_FLOAT; |
| 153 | elemDesc.AlignedByteOffset = currOffset; |
| 154 | elemDesc.SemanticName = "NORMAL"; |
| 155 | elemDesc.SemanticIndex = 0; |
| 156 | inputElements.push_back(elemDesc); |
| 157 | currOffset += 12; |
| 158 | vertexData.push_back(assimpMesh.mNormals); |
| 159 | } |
| 160 | |
| 161 | for(uint32 i = 0; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++i) |
| 162 | { |
| 163 | if(assimpMesh.HasTextureCoords(i)) |
| 164 | { |
| 165 | elemDesc.Format = DXGI_FORMAT_R32G32_FLOAT; |
| 166 | elemDesc.AlignedByteOffset = currOffset; |
| 167 | elemDesc.SemanticName = "TEXCOORD"; |
| 168 | elemDesc.SemanticIndex = i; |
| 169 | inputElements.push_back(elemDesc); |
| 170 | currOffset += 8; |
| 171 | vertexData.push_back(assimpMesh.mTextureCoords[i]); |
| 172 | } |
| 173 | } |
| 174 | |
| 175 | if(assimpMesh.HasTangentsAndBitangents()) |
no test coverage detected