Graphics/OBJLoader: Allow users to specifiy a vertex count cache when loading

Former-commit-id: 87ebc2aefe2c2091fd483793f880724e1ed6ac3d
This commit is contained in:
Lynix 2016-03-08 13:39:08 +01:00
parent dce587bd63
commit c935c1a293
3 changed files with 11 additions and 7 deletions

View File

@ -54,7 +54,7 @@ namespace Nz
const Vector3f* GetTexCoords() const;
unsigned int GetTexCoordCount() const;
bool Parse();
bool Parse(std::size_t reservedVertexCount = 100);
private:
bool Advance(bool required = true);

View File

@ -133,8 +133,12 @@ namespace Nz
bool Load(Model* model, Stream& stream, const ModelParameters& parameters)
{
int reservedVertexCount;
if (!parameters.custom.GetIntegerParameter("NativeOBJLoader_VertexCount", &reservedVertexCount))
reservedVertexCount = 100;
OBJParser parser(stream);
if (!parser.Parse())
if (!parser.Parse(reservedVertexCount))
{
NazaraError("OBJ parser failed");
return false;

View File

@ -82,7 +82,7 @@ namespace Nz
return m_texCoords.size();
}
bool OBJParser::Parse()
bool OBJParser::Parse(std::size_t reservedVertexCount)
{
String matName, meshName;
matName = meshName = "default";
@ -95,10 +95,10 @@ namespace Nz
m_positions.clear();
m_texCoords.clear();
// Beaucoup de meshs font plus de 100 sommets, préparons le terrain
m_normals.reserve(100);
m_positions.reserve(100);
m_texCoords.reserve(100);
// Reserve some space for incoming vertices
m_normals.reserve(reservedVertexCount);
m_positions.reserve(reservedVertexCount);
m_texCoords.reserve(reservedVertexCount);
// On va regrouper les meshs par nom et par matériau
using FaceVec = std::vector<Face>;