move vertex buffers into a separate object in perparation for HW vertex buffers
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
#include "RageUtil.h"
|
||||
#include "RageFile.h"
|
||||
#include "RageMath.h"
|
||||
#include "RageDisplay.h"
|
||||
|
||||
|
||||
RageModelGeometry::RageModelGeometry ()
|
||||
@@ -22,6 +23,13 @@ RageModelGeometry::RageModelGeometry ()
|
||||
|
||||
RageModelGeometry::~RageModelGeometry ()
|
||||
{
|
||||
for (unsigned i = 0; i < m_Meshes.size(); i++)
|
||||
{
|
||||
msMesh& mesh = m_Meshes[i];
|
||||
RageModelVertexArray *&pVertices = mesh.Vertices;
|
||||
DISPLAY->DeleteRageModelVertexArray( pVertices );
|
||||
pVertices = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void RageModelGeometry::OptimizeBones()
|
||||
@@ -32,13 +40,12 @@ void RageModelGeometry::OptimizeBones()
|
||||
|
||||
// check to see if all vertices have the same bone index
|
||||
bool bAllVertsUseSameBone = true;
|
||||
char nBoneIndex = !mesh.Vertices.empty() ? mesh.Vertices[0].boneIndex : (char) -1;
|
||||
char nBoneIndex = !mesh.Vertices->sizeVerts()==0 ? mesh.Vertices->Bone(0) : (char) -1;
|
||||
if( nBoneIndex != -1 )
|
||||
{
|
||||
for (unsigned j = 1; j < mesh.Vertices.size(); j++)
|
||||
for (unsigned j = 1; j < mesh.Vertices->sizeVerts(); j++)
|
||||
{
|
||||
RageModelVertex& vertex = mesh.Vertices[j];
|
||||
if( vertex.boneIndex != nBoneIndex )
|
||||
if( mesh.Vertices->Bone(j) != nBoneIndex )
|
||||
{
|
||||
bAllVertsUseSameBone = false;
|
||||
break;
|
||||
@@ -50,10 +57,9 @@ void RageModelGeometry::OptimizeBones()
|
||||
mesh.nBoneIndex = nBoneIndex;
|
||||
|
||||
// clear all vertex/bone associations;
|
||||
for (unsigned j = 0; j < mesh.Vertices.size(); j++)
|
||||
for (unsigned j = 0; j < mesh.Vertices->sizeVerts(); j++)
|
||||
{
|
||||
RageModelVertex& vertex = mesh.Vertices[j];
|
||||
vertex.boneIndex = -1;
|
||||
mesh.Vertices->Bone(j) = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -99,11 +105,14 @@ void RageModelGeometry::LoadMilkshapeAscii( CString sPath )
|
||||
int nNumMeshes = 0;
|
||||
if (sscanf (sLine, "Meshes: %d", &nNumMeshes) == 1)
|
||||
{
|
||||
ASSERT( m_Meshes.empty() );
|
||||
m_Meshes.resize( nNumMeshes );
|
||||
|
||||
for (i = 0; i < nNumMeshes; i++)
|
||||
{
|
||||
msMesh& mesh = m_Meshes[i];
|
||||
RageModelVertexArray *&pVertices = mesh.Vertices;
|
||||
pVertices = DISPLAY->CreateRageModelVertexArray();
|
||||
|
||||
if( f.GetLine( sLine ) <= 0 )
|
||||
THROW
|
||||
@@ -128,18 +137,18 @@ void RageModelGeometry::LoadMilkshapeAscii( CString sPath )
|
||||
if (sscanf (sLine, "%d", &nNumVertices) != 1)
|
||||
THROW
|
||||
|
||||
mesh.Vertices.resize( nNumVertices );
|
||||
pVertices->resizeVerts( nNumVertices );
|
||||
|
||||
for (j = 0; j < nNumVertices; j++)
|
||||
{
|
||||
if( f.GetLine( sLine ) <= 0 )
|
||||
THROW
|
||||
|
||||
RageVector3 Vertex;
|
||||
RageVector3 pos;
|
||||
RageVector2 uv;
|
||||
if (sscanf (sLine, "%d %f %f %f %f %f %d",
|
||||
&nFlags,
|
||||
&Vertex[0], &Vertex[1], &Vertex[2],
|
||||
&pos[0], &pos[1], &pos[2],
|
||||
&uv[0], &uv[1],
|
||||
&nIndex
|
||||
) != 7)
|
||||
@@ -147,12 +156,11 @@ void RageModelGeometry::LoadMilkshapeAscii( CString sPath )
|
||||
THROW
|
||||
}
|
||||
|
||||
RageModelVertex& vertex = mesh.Vertices[j];
|
||||
// vertex.nFlags = nFlags;
|
||||
memcpy( vertex.p, Vertex, sizeof(vertex.p) );
|
||||
memcpy( vertex.t, uv, sizeof(vertex.t) );
|
||||
vertex.boneIndex = (byte)nIndex;
|
||||
RageVec3AddToBounds( RageVector3(Vertex), m_vMins, m_vMaxs );
|
||||
pVertices->Position(j) = pos;
|
||||
pVertices->TexCoord(j) = uv;
|
||||
pVertices->Bone(j) = (byte)nIndex;
|
||||
RageVec3AddToBounds( RageVector3(pos), m_vMins, m_vMaxs );
|
||||
}
|
||||
|
||||
|
||||
@@ -193,7 +201,7 @@ void RageModelGeometry::LoadMilkshapeAscii( CString sPath )
|
||||
if (sscanf (sLine, "%d", &nNumTriangles) != 1)
|
||||
THROW
|
||||
|
||||
mesh.Triangles.resize( nNumTriangles );
|
||||
pVertices->resizeTriangles( nNumTriangles );
|
||||
|
||||
for (j = 0; j < nNumTriangles; j++)
|
||||
{
|
||||
@@ -215,12 +223,13 @@ void RageModelGeometry::LoadMilkshapeAscii( CString sPath )
|
||||
// deflate the normals into vertices
|
||||
for( int k=0; k<3; k++ )
|
||||
{
|
||||
RageModelVertex& vertex = mesh.Vertices[ nIndices[k] ];
|
||||
RageVector3& normal = Normals[ nNormalIndices[k] ];
|
||||
vertex.n = normal;
|
||||
//RageModelVertex& vertex = mesh.Vertices[ nIndices[k] ];
|
||||
//RageVector3& normal = Normals[ nNormalIndices[k] ];
|
||||
//vertex.n = normal;
|
||||
mesh.Vertices->Normal( nIndices[k] ) = Normals[ nNormalIndices[k] ];
|
||||
}
|
||||
|
||||
msTriangle& Triangle = mesh.Triangles[j];
|
||||
msTriangle& Triangle = pVertices->Triangle(j);
|
||||
// Triangle.nFlags = nFlags;
|
||||
memcpy( &Triangle.nVertexIndices, nIndices, sizeof(Triangle.nVertexIndices) );
|
||||
// Triangle.nSmoothingGroup = nIndex;
|
||||
|
||||
Reference in New Issue
Block a user