Utility/OBJParser: Prepare for saving

Former-commit-id: 90a78b4ca33ff8ce36fd5d37191799b196803c09 [formerly b39fe56eafb502516007de75ca77fdc6ab8a3391]
Former-commit-id: 5481142d659e43f687a5b8b4e1634405702bfc7b
This commit is contained in:
Lynix
2016-07-08 08:34:45 +02:00
parent 068465b6b9
commit b3e888563b
5 changed files with 117 additions and 32 deletions

View File

@@ -20,12 +20,41 @@ namespace Nz
class NAZARA_UTILITY_API OBJParser
{
public:
struct FaceVertex
{
int normal;
int position;
int texCoord;
};
struct Face;
struct FaceVertex;
struct Mesh;
OBJParser() = default;
~OBJParser() = default;
inline void Clear();
inline String* GetMaterials();
inline const String* GetMaterials() const;
inline unsigned int GetMaterialCount() const;
inline Mesh* GetMeshes();
inline const Mesh* GetMeshes() const;
inline unsigned int GetMeshCount() const;
inline const String& GetMtlLib() const;
inline Vector3f* GetNormals();
inline const Vector3f* GetNormals() const;
inline unsigned int GetNormalCount() const;
inline Vector4f* GetPositions();
inline const Vector4f* GetPositions() const;
inline unsigned int GetPositionCount() const;
inline Vector3f* GetTexCoords();
inline const Vector3f* GetTexCoords() const;
inline unsigned int GetTexCoordCount() const;
bool Parse(Stream& stream, std::size_t reservedVertexCount = 100);
bool Save(Stream& stream) const;
inline String* SetMaterialCount(std::size_t materialCount);
inline Mesh* SetMeshCount(std::size_t meshCount);
inline Vector3f* SetNormalCount(std::size_t normalCount);
inline Vector4f* SetPositionCount(std::size_t positionCount);
inline Vector3f* SetTexCoordCount(std::size_t texCoordCount);
struct Face
{
@@ -33,6 +62,13 @@ namespace Nz
std::size_t vertexCount;
};
struct FaceVertex
{
std::size_t normal;
std::size_t position;
std::size_t texCoord;
};
struct Mesh
{
std::vector<Face> faces;
@@ -41,25 +77,6 @@ namespace Nz
std::size_t material;
};
OBJParser() = default;
~OBJParser() = default;
inline const String* GetMaterials() const;
inline unsigned int GetMaterialCount() const;
inline const Mesh* GetMeshes() const;
inline unsigned int GetMeshCount() const;
inline const String& GetMtlLib() const;
inline const Vector3f* GetNormals() const;
inline unsigned int GetNormalCount() const;
inline const Vector4f* GetPositions() const;
inline unsigned int GetPositionCount() const;
inline const Vector3f* GetTexCoords() const;
inline unsigned int GetTexCoordCount() const;
bool Parse(Stream& stream, std::size_t reservedVertexCount = 100);
bool Save(Stream& stream) const;
private:
bool Advance(bool required = true);
template<typename T> void Emit(const T& text) const;