MCPcopy Create free account
hub / github.com/TheRealMJP/Shadows / Initialize

Method Initialize

Shadows/SampleFramework11/Model.cpp:82–147  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

80}
81
82void Mesh::Initialize(ID3D11Device* device, SDKMesh& sdkMesh, uint32 meshIdx, bool generateTangents)
83{
84 const SDKMESH_MESH& sdkMeshData = *sdkMesh.GetMesh(meshIdx);
85
86 uint32 indexSize = 2;
87 indexType = Mesh::Index16Bit;
88 if(sdkMesh.GetIndexType(meshIdx) == IT_32BIT)
89 {
90 indexSize = 4;
91 indexType = Mesh::Index32Bit;
92 }
93
94 vertexStride = sdkMesh.GetVertexStride(meshIdx, 0);
95 numVertices = static_cast<uint32>(sdkMesh.GetNumVertices(meshIdx, 0));
96 numIndices = static_cast<uint32>(sdkMesh.GetNumIndices(meshIdx));
97 const uint32 vbIdx = sdkMeshData.VertexBuffers[0];
98 const uint32 ibIdx = sdkMeshData.IndexBuffer;
99
100 CreateInputElements(sdkMesh.VBElements(0));
101
102 vertices.resize(vertexStride * numVertices, 0);
103 memcpy(vertices.data(), sdkMesh.GetRawVerticesAt(vbIdx), vertexStride * numVertices);
104
105 indices.resize(indexSize * numIndices, 0);
106 memcpy(indices.data(), sdkMesh.GetRawIndicesAt(ibIdx), indexSize * numIndices);
107
108 name = sdkMeshData.Name;
109
110 if(generateTangents)
111 GenerateTangentFrame();
112
113 D3D11_BUFFER_DESC bufferDesc;
114 bufferDesc.Usage = D3D11_USAGE_IMMUTABLE;
115 bufferDesc.ByteWidth = vertexStride * numVertices;
116 bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
117 bufferDesc.CPUAccessFlags = 0;
118 bufferDesc.MiscFlags = 0;
119 bufferDesc.StructureByteStride = 0;
120
121 D3D11_SUBRESOURCE_DATA initData;
122 initData.pSysMem = vertices.data();
123 initData.SysMemPitch = 0;
124 initData.SysMemSlicePitch = 0;
125 DXCall(device->CreateBuffer(&bufferDesc, &initData, &vertexBuffer));
126
127 bufferDesc.ByteWidth = indexSize * numIndices;
128 bufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
129 bufferDesc.MiscFlags = 0;
130 bufferDesc.StructureByteStride = 0;
131
132 initData.pSysMem = indices.data();
133 DXCall(device->CreateBuffer(&bufferDesc, &initData, &indexBuffer));
134
135 const uint32 numSubsets = sdkMesh.GetNumSubsets(meshIdx);
136 meshParts.resize(numSubsets);
137 for(uint32 i = 0; i < numSubsets; ++i)
138 {
139 const SDKMESH_SUBSET& subset = *sdkMesh.GetSubset(meshIdx, i);

Callers 2

CreateFromSDKMeshFileMethod · 0.45
WriteToFileMethod · 0.45

Calls 11

DXCallFunction · 0.85
GetMeshMethod · 0.80
GetIndexTypeMethod · 0.80
GetVertexStrideMethod · 0.80
GetNumVerticesMethod · 0.80
GetNumIndicesMethod · 0.80
VBElementsMethod · 0.80
GetRawVerticesAtMethod · 0.80
GetRawIndicesAtMethod · 0.80
GetNumSubsetsMethod · 0.80
GetSubsetMethod · 0.80

Tested by

no test coverage detected