-------------------------------------------------------------------------------------- Description: Combines two vertex declarations into a single multi-stream declaration. Usage indexes for instanced declaration are shifted by 8, so shader would expect POSITION8, etc. for instance data. Arguments: meshVD - Vertex definition of the base mesh instanceVD - Vertex definition of the instance data Retu
| 471 | // UNINITIALIZED_DECLARATION on failure |
| 472 | // -------------------------------------------------------------------------------------- |
| 473 | static unsigned int MergeVertexDeclarations( const Tr2VertexDefinition& meshVD, |
| 474 | const Tr2VertexDefinition& instanceVD ) |
| 475 | { |
| 476 | const unsigned usageOffset = 8; |
| 477 | |
| 478 | if( meshVD.m_items.empty() || instanceVD.m_items.empty() ) |
| 479 | { |
| 480 | return Tr2EffectStateManager::UNINITIALIZED_DECLARATION; |
| 481 | } |
| 482 | |
| 483 | Tr2VertexDefinition merged; |
| 484 | merged = meshVD; |
| 485 | merged.m_items.insert( merged.m_items.end(), instanceVD.m_items.begin(), instanceVD.m_items.end() ); |
| 486 | |
| 487 | for( size_t i = 0; i != instanceVD.m_items.size(); ++i ) |
| 488 | { |
| 489 | merged.m_items[i + meshVD.m_items.size()].m_stream = 1; |
| 490 | merged.m_items[i + meshVD.m_items.size()].m_instanceStepRate = 1; |
| 491 | merged.m_items[i + meshVD.m_items.size()].m_usageIndex += usageOffset; |
| 492 | } |
| 493 | |
| 494 | return Tr2EffectStateManager::GetVertexDeclarationHandle( merged ); |
| 495 | } |
| 496 | |
| 497 | // -------------------------------------------------------------------------------------- |
| 498 | // Description: |
no test coverage detected