MCPcopy Create free account
hub / github.com/Illation/ETEngine / MeshData

Method MeshData

Engine/source/EtRendering/GraphicsTypes/Mesh.cpp:265–397  ·  view source on GitHub ↗

--------------------------------- MeshData::c-tor Construct Mesh data from vertex data

Source from the content-addressed store, hash-verified

263// Construct Mesh data from vertex data
264//
265MeshData::MeshData(MeshDataContainer const* const cpuData)
266{
267 ET_ASSERT(cpuData != nullptr);
268
269 m_Name = cpuData->m_Name;
270
271 m_IndexCount = cpuData->m_Indices.size();
272 m_VertexCount = cpuData->m_VertexCount;
273 ET_ASSERT(m_VertexCount > 0u, "Expected mesh to have vertices!");
274
275 // Surface container will contain vertex arrays per material
276 m_Surfaces = new SurfaceContainer();
277
278 // derive flags from data sizes
279 //------------------------------
280 if (cpuData->m_Positions.size() == m_VertexCount)
281 {
282 m_SupportedFlags |= E_VertexFlag::POSITION;
283 }
284 if (cpuData->m_Normals.size() == m_VertexCount)
285 {
286 m_SupportedFlags |= E_VertexFlag::NORMAL;
287 }
288 if (cpuData->m_BiNormals.size() == m_VertexCount)
289 {
290 m_SupportedFlags |= E_VertexFlag::BINORMAL;
291 }
292 if (cpuData->m_Tangents.size() == m_VertexCount)
293 {
294 m_SupportedFlags |= E_VertexFlag::TANGENT;
295 }
296 if (cpuData->m_Colors.size() == m_VertexCount)
297 {
298 m_SupportedFlags |= E_VertexFlag::COLOR;
299 }
300 if (cpuData->m_TexCoords.size() == m_VertexCount)
301 {
302 m_SupportedFlags |= E_VertexFlag::TEXCOORD;
303 }
304
305 // calculate bounding sphere
306 //---------------------------
307
308 // get center
309 vec3 center = vec3(0);
310 for (size_t i = 0u; i < cpuData->m_Positions.size(); i++)
311 {
312 center = center + cpuData->m_Positions[i];
313 }
314
315 float rcp = 1.f / static_cast<float>(cpuData->m_Positions.size());
316 center = center * rcp;
317
318 // greatest distance from center
319 float maxRadius = 0.f;
320 for (size_t i = 0u; i < cpuData->m_Positions.size(); i++)
321 {
322 float dist = math::distanceSquared(center, cpuData->m_Positions[i]);

Callers

nothing calls this directly

Calls 4

SphereClass · 0.85
CreateBufferMethod · 0.80
BindBufferMethod · 0.80
SetBufferDataMethod · 0.80

Tested by

no test coverage detected