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; const Vector3f* GetTexCoords() const;
unsigned int GetTexCoordCount() const; unsigned int GetTexCoordCount() const;
bool Parse(); bool Parse(std::size_t reservedVertexCount = 100);
private: private:
bool Advance(bool required = true); bool Advance(bool required = true);

View File

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

View File

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