From c73d10ab2933e03d426b50060abd2ac1a67a00a8 Mon Sep 17 00:00:00 2001 From: Lynix Date: Mon, 31 Dec 2012 11:14:40 +0100 Subject: [PATCH] Added non-constant access to vertex buffer Former-commit-id: c0fea611caf6fb48bd0b2ed56897c173f7acad41 --- include/Nazara/Utility/KeyframeMesh.hpp | 1 + include/Nazara/Utility/SkeletalMesh.hpp | 1 + include/Nazara/Utility/StaticMesh.hpp | 1 + include/Nazara/Utility/SubMesh.hpp | 1 + src/Nazara/Utility/KeyframeMesh.cpp | 13 +++++++++++++ src/Nazara/Utility/SkeletalMesh.cpp | 13 +++++++++++++ src/Nazara/Utility/StaticMesh.cpp | 5 +++++ 7 files changed, 35 insertions(+) diff --git a/include/Nazara/Utility/KeyframeMesh.hpp b/include/Nazara/Utility/KeyframeMesh.hpp index 981561f86..dd89fc79e 100644 --- a/include/Nazara/Utility/KeyframeMesh.hpp +++ b/include/Nazara/Utility/KeyframeMesh.hpp @@ -31,6 +31,7 @@ class NAZARA_API NzKeyframeMesh final : public NzSubMesh unsigned int GetFrameCount() const; const NzIndexBuffer* GetIndexBuffer() const override; void GetVertex(unsigned int frameIndex, unsigned int vertexIndex, NzMeshVertex* dest) const; + NzVertexBuffer* GetVertexBuffer() override; const NzVertexBuffer* GetVertexBuffer() const override; void Interpolate(const NzAnimation* animation, unsigned int frameA, unsigned int frameB, float interpolation) const; diff --git a/include/Nazara/Utility/SkeletalMesh.hpp b/include/Nazara/Utility/SkeletalMesh.hpp index a2b62e451..9131a0934 100644 --- a/include/Nazara/Utility/SkeletalMesh.hpp +++ b/include/Nazara/Utility/SkeletalMesh.hpp @@ -42,6 +42,7 @@ class NAZARA_API NzSkeletalMesh final : public NzSubMesh void* GetBindPoseBuffer(); const void* GetBindPoseBuffer() const; const NzIndexBuffer* GetIndexBuffer() const override; + NzVertexBuffer* GetVertexBuffer() override; const NzVertexBuffer* GetVertexBuffer() const override; NzVertexWeight* GetVertexWeight(unsigned int vertexIndex = 0); const NzVertexWeight* GetVertexWeight(unsigned int vertexIndex = 0) const; diff --git a/include/Nazara/Utility/StaticMesh.hpp b/include/Nazara/Utility/StaticMesh.hpp index 7fd14db0a..c78cff59c 100644 --- a/include/Nazara/Utility/StaticMesh.hpp +++ b/include/Nazara/Utility/StaticMesh.hpp @@ -27,6 +27,7 @@ class NAZARA_API NzStaticMesh final : public NzSubMesh, NzResourceListener const NzAxisAlignedBox& GetAABB() const override; nzAnimationType GetAnimationType() const final; const NzIndexBuffer* GetIndexBuffer() const override; + NzVertexBuffer* GetVertexBuffer() override; const NzVertexBuffer* GetVertexBuffer() const override; bool IsAnimated() const final; diff --git a/include/Nazara/Utility/SubMesh.hpp b/include/Nazara/Utility/SubMesh.hpp index 6034fdada..3be5e613b 100644 --- a/include/Nazara/Utility/SubMesh.hpp +++ b/include/Nazara/Utility/SubMesh.hpp @@ -33,6 +33,7 @@ class NAZARA_API NzSubMesh : public NzResource unsigned int GetMaterialIndex() const; const NzMesh* GetParent() const; nzPrimitiveType GetPrimitiveType() const; + virtual NzVertexBuffer* GetVertexBuffer() = 0; virtual const NzVertexBuffer* GetVertexBuffer() const = 0; virtual unsigned int GetVertexCount() const; diff --git a/src/Nazara/Utility/KeyframeMesh.cpp b/src/Nazara/Utility/KeyframeMesh.cpp index 0ec30e92f..bfc1cbfb4 100644 --- a/src/Nazara/Utility/KeyframeMesh.cpp +++ b/src/Nazara/Utility/KeyframeMesh.cpp @@ -198,6 +198,19 @@ void NzKeyframeMesh::GetVertex(unsigned int frameIndex, unsigned int vertexIndex dest->uv = m_impl->uv[vertexIndex]; } +NzVertexBuffer* NzKeyframeMesh::GetVertexBuffer() +{ + #if NAZARA_UTILITY_SAFE + if (!m_impl) + { + NazaraError("Keyframe mesh not created"); + return nullptr; + } + #endif + + return m_impl->vertexBuffer; +} + const NzVertexBuffer* NzKeyframeMesh::GetVertexBuffer() const { #if NAZARA_UTILITY_SAFE diff --git a/src/Nazara/Utility/SkeletalMesh.cpp b/src/Nazara/Utility/SkeletalMesh.cpp index 969777acb..f3f5099c1 100644 --- a/src/Nazara/Utility/SkeletalMesh.cpp +++ b/src/Nazara/Utility/SkeletalMesh.cpp @@ -146,6 +146,19 @@ const NzIndexBuffer* NzSkeletalMesh::GetIndexBuffer() const return m_impl->indexBuffer; } +NzVertexBuffer* NzSkeletalMesh::GetVertexBuffer() +{ + #if NAZARA_UTILITY_SAFE + if (!m_impl) + { + NazaraError("Skeletal mesh not created"); + return nullptr; + } + #endif + + return m_impl->vertexBuffer; +} + const NzVertexBuffer* NzSkeletalMesh::GetVertexBuffer() const { #if NAZARA_UTILITY_SAFE diff --git a/src/Nazara/Utility/StaticMesh.cpp b/src/Nazara/Utility/StaticMesh.cpp index 4fb625eee..bccd852e8 100644 --- a/src/Nazara/Utility/StaticMesh.cpp +++ b/src/Nazara/Utility/StaticMesh.cpp @@ -100,6 +100,11 @@ const NzIndexBuffer* NzStaticMesh::GetIndexBuffer() const return m_indexBuffer; } +NzVertexBuffer* NzStaticMesh::GetVertexBuffer() +{ + return m_vertexBuffer; +} + const NzVertexBuffer* NzStaticMesh::GetVertexBuffer() const { return m_vertexBuffer;