| 71 | }; |
| 72 | |
| 73 | void Mesh::InitFromSDKMesh(ID3D11Device* device, SDKMesh& sdkMesh, uint32 meshIdx, bool generateTangents) |
| 74 | { |
| 75 | const SDKMESH_MESH& sdkMeshData = *sdkMesh.GetMesh(meshIdx); |
| 76 | |
| 77 | uint32 indexSize = 2; |
| 78 | indexType = IndexType::Index16Bit; |
| 79 | if(sdkMesh.GetIndexType(meshIdx) == IT_32BIT) |
| 80 | { |
| 81 | indexSize = 4; |
| 82 | indexType = IndexType::Index32Bit; |
| 83 | } |
| 84 | |
| 85 | vertexStride = sdkMesh.GetVertexStride(meshIdx, 0); |
| 86 | numVertices = static_cast<uint32>(sdkMesh.GetNumVertices(meshIdx, 0)); |
| 87 | numIndices = static_cast<uint32>(sdkMesh.GetNumIndices(meshIdx)); |
| 88 | const uint32 vbIdx = sdkMeshData.VertexBuffers[0]; |
| 89 | const uint32 ibIdx = sdkMeshData.IndexBuffer; |
| 90 | |
| 91 | CreateInputElements(sdkMesh.VBElements(0)); |
| 92 | |
| 93 | vertices.resize(vertexStride * numVertices, 0); |
| 94 | memcpy(vertices.data(), sdkMesh.GetRawVerticesAt(vbIdx), vertexStride * numVertices); |
| 95 | |
| 96 | indices.resize(indexSize * numIndices, 0); |
| 97 | memcpy(indices.data(), sdkMesh.GetRawIndicesAt(ibIdx), indexSize * numIndices); |
| 98 | |
| 99 | if(generateTangents) |
| 100 | GenerateTangentFrame(); |
| 101 | |
| 102 | CreateVertexAndIndexBuffers(device); |
| 103 | |
| 104 | const uint32 numSubsets = sdkMesh.GetNumSubsets(meshIdx); |
| 105 | meshParts.resize(numSubsets); |
| 106 | for(uint32 i = 0; i < numSubsets; ++i) |
| 107 | { |
| 108 | const SDKMESH_SUBSET& subset = *sdkMesh.GetSubset(meshIdx, i); |
| 109 | MeshPart& part = meshParts[i]; |
| 110 | part.IndexStart = static_cast<uint32>(subset.IndexStart); |
| 111 | part.IndexCount = static_cast<uint32>(subset.IndexCount); |
| 112 | part.VertexStart = static_cast<uint32>(subset.VertexStart); |
| 113 | part.VertexCount = static_cast<uint32>(subset.VertexCount); |
| 114 | part.MaterialIdx = subset.MaterialID; |
| 115 | } |
| 116 | } |
| 117 | |
| 118 | void Mesh::InitFromAssimpMesh(ID3D11Device* device, const aiMesh& assimpMesh) |
| 119 | { |
no test coverage detected