MCPcopy Create free account
hub / github.com/carbonengine/trinity / ConvertVertexDeclToCMF

Function ConvertVertexDeclToCMF

trinity/Tr2VertexDefinitionUtilities.cpp:388–471  ·  view source on GitHub ↗

-------------------------------------------------------------------------------------- Description: Convert Trinity vertex definition back to a CMF layout. Arguments: vd - input definition cmfVertexDecl - pointer to at least maxSize elements maxSize - size of cmfVertexDecl array Return Value: true - If successful false - On error --------------------------------------------------------------------

Source from the content-addressed store, hash-verified

386// false - On error
387// --------------------------------------------------------------------------------------
388bool ConvertVertexDeclToCMF( Tr2VertexDefinition vd, cmf::Span<cmf::VertexElement>& cmfVertexDecl, unsigned maxSize )
389{
390 // Note: This function assumes the D3D vertex layout is described in increasing offset order
391 // ... so make sure.
392 std::sort( begin( vd.m_items ), end( vd.m_items ) );
393
394 for( size_t i = 0; i != std::min( maxSize, (unsigned int)vd.m_items.size() ); ++i )
395 {
396 const auto& src = vd.m_items[i];
397
398 cmf::VertexElement& dst = cmfVertexDecl.begin()[i];
399
400 dst.elementCount = ( ( src.m_dataType & Tr2VertexDefinition::DT_SIZE_MASK ) >> Tr2VertexDefinition::DT_SIZE_OFFSET ) + 1;
401 const bool isUnsigned = ( src.m_dataType & Tr2VertexDefinition::DT_UNSIGNED_BIT ) != 0;
402 const bool isNormalized = ( src.m_dataType & Tr2VertexDefinition::DT_NORMALIZED_BIT ) != 0;
403
404 switch( src.m_dataType & Tr2VertexDefinition::DT_TYPE_MASK )
405 {
406 case Tr2VertexDefinition::DT_INT8:
407 dst.type = isUnsigned ?
408 ( isNormalized ? cmf::ElementType::UInt8Norm : cmf::ElementType::UInt8 ) :
409 ( isNormalized ? cmf::ElementType::Int8Norm : cmf::ElementType::Int8 );
410 break;
411
412 case Tr2VertexDefinition::DT_INT16:
413 dst.type = isUnsigned ?
414 ( isNormalized ? cmf::ElementType::UInt16Norm : cmf::ElementType::UInt16 ) :
415 ( isNormalized ? cmf::ElementType::Int16Norm : cmf::ElementType::Int16 );
416 break;
417
418 case Tr2VertexDefinition::DT_INT32:
419 CCP_ASSERT_M( false, "ConvertVertexDeclToCMF: INT32 is not supported by cmf" );
420 return false;
421
422 case Tr2VertexDefinition::DT_FLOAT16:
423 dst.type = cmf::ElementType::Float16;
424 break;
425
426 case Tr2VertexDefinition::DT_FLOAT32:
427 dst.type = cmf::ElementType::Float32;
428 break;
429
430 default:
431 CCP_ASSERT( false && "ConvertVertexDeclToCMF: Missing datatype support in cmf conversion" );
432 return false;
433 }
434
435 dst.offset = src.m_offset;
436 dst.usageIndex = src.m_usageIndex;
437
438 switch( src.m_usage )
439 {
440 case Tr2VertexDefinition::POSITION:
441 dst.usage = cmf::Usage::Position;
442 break;
443 case Tr2VertexDefinition::COLOR:
444 dst.usage = cmf::Usage::Color;
445 break;

Callers 3

SaveToCMFMethod · 0.85
SaveToCMFMethod · 0.85
SaveMeshToCMFFileMethod · 0.85

Calls 4

sizeMethod · 0.80
beginFunction · 0.70
endFunction · 0.70
beginMethod · 0.45

Tested by

no test coverage detected