if DISPLAY->SupportsPerVertexMatrixScale, then merge meshes with equal names. The allows some NoteSkins to be drawn in either 2 meshes or only 1 if vertex shaders are supported.

This commit is contained in:
Chris Danford
2005-10-21 06:36:08 +00:00
parent 2513b7aac1
commit 1903e07f56
6 changed files with 22 additions and 5 deletions
+12 -4
View File
@@ -61,12 +61,12 @@ void RageModelGeometry::MergeMeshes( int iFromIndex, int iToIndex )
msMesh& meshTo = m_Meshes[ iToIndex ];
int iShiftTriangleVertexIndicesBy = meshTo.Vertices.size();
int iStartShiftingTriangleAtIndex = meshTo.Triangles.size();
int iStartShiftingAtTriangleIndex = meshTo.Triangles.size();
meshTo.Vertices.insert( meshTo.Vertices.end(), meshFrom.Vertices.end(), meshFrom.Vertices.end() );
meshTo.Triangles.insert( meshTo.Triangles.end(), meshFrom.Triangles.end(), meshFrom.Triangles.end() );
meshTo.Vertices.insert( meshTo.Vertices.end(), meshFrom.Vertices.begin(), meshFrom.Vertices.end() );
meshTo.Triangles.insert( meshTo.Triangles.end(), meshFrom.Triangles.begin(), meshFrom.Triangles.end() );
for( unsigned i=iStartShiftingTriangleAtIndex; i<meshTo.Triangles.size(); i++ )
for( unsigned i=iStartShiftingAtTriangleIndex; i<meshTo.Triangles.size(); i++ )
{
for( int j=0; j<3; j++ )
meshTo.Triangles[i].nVertexIndices[j] += iShiftTriangleVertexIndicesBy;
@@ -262,6 +262,14 @@ void RageModelGeometry::LoadMilkshapeAscii( const CString& _sPath, bool bNeedsNo
OptimizeBones();
if( DISPLAY->SupportsPerVertexMatrixScale() )
{
if( m_Meshes.size() == 2 && m_Meshes[0].sName == m_Meshes[1].sName )
{
MergeMeshes( 1, 0 );
}
}
// send the finalized vertices to the graphics card
m_pCompiledGeometry->Set( m_Meshes, bNeedsNormals );