Graphics/OBJLoader: Allow users to specifiy a vertex count cache when loading
Former-commit-id: 87ebc2aefe2c2091fd483793f880724e1ed6ac3d
This commit is contained in:
parent
dce587bd63
commit
c935c1a293
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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>;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue