From 5cbdd8832c86be469d13810c16f8e9f081e86c43 Mon Sep 17 00:00:00 2001 From: Lynix Date: Tue, 6 Jan 2015 13:36:58 +0100 Subject: [PATCH] Turned DataStorage enum into flags Allowing for example hybrid buffer implementation Former-commit-id: 74af1ba5b11b945abdfa6b46d0c11d600eca6d7c --- include/Nazara/Utility/Buffer.hpp | 14 +++++++------- include/Nazara/Utility/Enums.hpp | 11 ++++++----- include/Nazara/Utility/IndexBuffer.hpp | 6 +++--- include/Nazara/Utility/Mesh.hpp | 6 +++--- include/Nazara/Utility/VertexBuffer.hpp | 6 +++--- src/Nazara/Utility/Buffer.cpp | 14 +++++++------- src/Nazara/Utility/IndexBuffer.cpp | 6 +++--- src/Nazara/Utility/VertexBuffer.cpp | 6 +++--- 8 files changed, 35 insertions(+), 34 deletions(-) diff --git a/include/Nazara/Utility/Buffer.hpp b/include/Nazara/Utility/Buffer.hpp index b1b0b64b1..b7a81e094 100644 --- a/include/Nazara/Utility/Buffer.hpp +++ b/include/Nazara/Utility/Buffer.hpp @@ -28,19 +28,19 @@ class NAZARA_API NzBuffer : public NzResource, NzNonCopyable using BufferFactory = NzAbstractBuffer* (*)(NzBuffer* parent, nzBufferType type); NzBuffer(nzBufferType type); - NzBuffer(nzBufferType type, unsigned int size, nzDataStorage storage = nzDataStorage_Software, nzBufferUsage usage = nzBufferUsage_Static); + NzBuffer(nzBufferType type, unsigned int size, nzUInt32 storage = nzDataStorage_Software, nzBufferUsage usage = nzBufferUsage_Static); ~NzBuffer(); bool CopyContent(const NzBuffer& buffer); - bool Create(unsigned int size, nzDataStorage storage = nzDataStorage_Software, nzBufferUsage usage = nzBufferUsage_Static); + bool Create(unsigned int size, nzUInt32 storage = nzDataStorage_Software, nzBufferUsage usage = nzBufferUsage_Static); void Destroy(); bool Fill(const void* data, unsigned int offset, unsigned int size, bool forceDiscard = false); NzAbstractBuffer* GetImpl() const; unsigned int GetSize() const; - nzDataStorage GetStorage() const; + nzUInt32 GetStorage() const; nzBufferType GetType() const; nzBufferUsage GetUsage() const; @@ -50,12 +50,12 @@ class NAZARA_API NzBuffer : public NzResource, NzNonCopyable void* Map(nzBufferAccess access, unsigned int offset = 0, unsigned int size = 0); void* Map(nzBufferAccess access, unsigned int offset = 0, unsigned int size = 0) const; - bool SetStorage(nzDataStorage storage); + bool SetStorage(nzUInt32 storage); void Unmap() const; - static bool IsStorageSupported(nzDataStorage storage); - static void SetBufferFactory(nzDataStorage storage, BufferFactory func); + static bool IsStorageSupported(nzUInt32 storage); + static void SetBufferFactory(nzUInt32 storage, BufferFactory func); private: static bool Initialize(); @@ -63,7 +63,7 @@ class NAZARA_API NzBuffer : public NzResource, NzNonCopyable nzBufferType m_type; nzBufferUsage m_usage; - nzDataStorage m_storage; + nzUInt32 m_storage; NzAbstractBuffer* m_impl; unsigned int m_size; diff --git a/include/Nazara/Utility/Enums.hpp b/include/Nazara/Utility/Enums.hpp index 6d0ec4f2a..4c00fdad6 100644 --- a/include/Nazara/Utility/Enums.hpp +++ b/include/Nazara/Utility/Enums.hpp @@ -75,13 +75,14 @@ enum nzCubemapFace nzCubemapFace_Max = nzCubemapFace_NegativeZ }; -enum nzDataStorage +enum nzDataStorageFlags { - nzDataStorage_Both, - nzDataStorage_Hardware, - nzDataStorage_Software, + nzDataStorage_Hardware = 0x1, + nzDataStorage_Software = 0x2, - nzDataStorage_Max = nzDataStorage_Software + nzDataStorage_Both = nzDataStorage_Hardware | nzDataStorage_Software, + + nzDataStorage_Max = nzDataStorage_Software*2-1 }; enum nzEventType diff --git a/include/Nazara/Utility/IndexBuffer.hpp b/include/Nazara/Utility/IndexBuffer.hpp index 3f7eb59d6..cd1860199 100644 --- a/include/Nazara/Utility/IndexBuffer.hpp +++ b/include/Nazara/Utility/IndexBuffer.hpp @@ -23,7 +23,7 @@ class NAZARA_API NzIndexBuffer : public NzResource NzIndexBuffer() = default; NzIndexBuffer(bool largeIndices, NzBuffer* buffer); NzIndexBuffer(bool largeIndices, NzBuffer* buffer, unsigned int startOffset, unsigned int endOffset); - NzIndexBuffer(bool largeIndices, unsigned int length, nzDataStorage storage = nzDataStorage_Software, nzBufferUsage usage = nzBufferUsage_Static); + NzIndexBuffer(bool largeIndices, unsigned int length, nzUInt32 storage = nzDataStorage_Software, nzBufferUsage usage = nzBufferUsage_Static); NzIndexBuffer(const NzIndexBuffer& indexBuffer); NzIndexBuffer(NzIndexBuffer&& indexBuffer) noexcept; ~NzIndexBuffer(); @@ -54,11 +54,11 @@ class NAZARA_API NzIndexBuffer : public NzResource void Reset(); void Reset(bool largeIndices, NzBuffer* buffer); void Reset(bool largeIndices, NzBuffer* buffer, unsigned int startOffset, unsigned int endOffset); - void Reset(bool largeIndices, unsigned int length, nzDataStorage storage = nzDataStorage_Software, nzBufferUsage usage = nzBufferUsage_Static); + void Reset(bool largeIndices, unsigned int length, nzUInt32 storage = nzDataStorage_Software, nzBufferUsage usage = nzBufferUsage_Static); void Reset(const NzIndexBuffer& indexBuffer); void Reset(NzIndexBuffer&& indexBuffer) noexcept; - bool SetStorage(nzDataStorage storage); + bool SetStorage(nzUInt32 storage); void Unmap() const; diff --git a/include/Nazara/Utility/Mesh.hpp b/include/Nazara/Utility/Mesh.hpp index 6f4f83c61..296d72f7c 100644 --- a/include/Nazara/Utility/Mesh.hpp +++ b/include/Nazara/Utility/Mesh.hpp @@ -24,12 +24,12 @@ struct NAZARA_API NzMeshParams { NzMeshParams(); // Vérifie que le storage par défaut est supporté (software autrement) - // Si ceci sera le stockage utilisé par les buffers - nzDataStorage storage = nzDataStorage_Hardware; - // La mise à l'échelle éventuelle que subira le mesh NzVector3f scale = NzVector3f::Unit(); + // Si ceci sera le stockage utilisé par les buffers + nzUInt32 storage = nzDataStorage_Hardware; + // Charger une version animée du mesh si possible ? bool animated = true; diff --git a/include/Nazara/Utility/VertexBuffer.hpp b/include/Nazara/Utility/VertexBuffer.hpp index 6acada650..feb09ae16 100644 --- a/include/Nazara/Utility/VertexBuffer.hpp +++ b/include/Nazara/Utility/VertexBuffer.hpp @@ -24,7 +24,7 @@ class NAZARA_API NzVertexBuffer : public NzResource NzVertexBuffer() = default; NzVertexBuffer(const NzVertexDeclaration* vertexDeclaration, NzBuffer* buffer); NzVertexBuffer(const NzVertexDeclaration* vertexDeclaration, NzBuffer* buffer, unsigned int startOffset, unsigned int endOffset); - NzVertexBuffer(const NzVertexDeclaration* vertexDeclaration, unsigned int length, nzDataStorage storage = nzDataStorage_Software, nzBufferUsage usage = nzBufferUsage_Static); + NzVertexBuffer(const NzVertexDeclaration* vertexDeclaration, unsigned int length, nzUInt32 storage = nzDataStorage_Software, nzBufferUsage usage = nzBufferUsage_Static); NzVertexBuffer(const NzVertexBuffer& vertexBuffer); NzVertexBuffer(NzVertexBuffer&& vertexBuffer) noexcept; ~NzVertexBuffer(); @@ -50,11 +50,11 @@ class NAZARA_API NzVertexBuffer : public NzResource void Reset(); void Reset(const NzVertexDeclaration* vertexDeclaration, NzBuffer* buffer); void Reset(const NzVertexDeclaration* vertexDeclaration, NzBuffer* buffer, unsigned int startOffset, unsigned int endOffset); - void Reset(const NzVertexDeclaration* vertexDeclaration, unsigned int length, nzDataStorage storage = nzDataStorage_Software, nzBufferUsage usage = nzBufferUsage_Static); + void Reset(const NzVertexDeclaration* vertexDeclaration, unsigned int length, nzUInt32 storage = nzDataStorage_Software, nzBufferUsage usage = nzBufferUsage_Static); void Reset(const NzVertexBuffer& vertexBuffer); void Reset(NzVertexBuffer&& vertexBuffer) noexcept; - bool SetStorage(nzDataStorage storage); + bool SetStorage(nzUInt32 storage); void SetVertexDeclaration(const NzVertexDeclaration* vertexDeclaration); void Unmap() const; diff --git a/src/Nazara/Utility/Buffer.cpp b/src/Nazara/Utility/Buffer.cpp index 71b568f5b..1a631e990 100644 --- a/src/Nazara/Utility/Buffer.cpp +++ b/src/Nazara/Utility/Buffer.cpp @@ -30,7 +30,7 @@ m_size(0) { } -NzBuffer::NzBuffer(nzBufferType type, unsigned int size, nzDataStorage storage, nzBufferUsage usage) : +NzBuffer::NzBuffer(nzBufferType type, unsigned int size, nzUInt32 storage, nzBufferUsage usage) : m_type(type), m_impl(nullptr) { @@ -63,7 +63,7 @@ bool NzBuffer::CopyContent(const NzBuffer& buffer) return Fill(mapper.GetPointer(), 0, buffer.GetSize()); } -bool NzBuffer::Create(unsigned int size, nzDataStorage storage, nzBufferUsage usage) +bool NzBuffer::Create(unsigned int size, nzUInt32 storage, nzBufferUsage usage) { Destroy(); @@ -131,7 +131,7 @@ unsigned int NzBuffer::GetSize() const return m_size; } -nzDataStorage NzBuffer::GetStorage() const +nzUInt32 NzBuffer::GetStorage() const { return m_storage; } @@ -148,7 +148,7 @@ nzBufferUsage NzBuffer::GetUsage() const bool NzBuffer::IsHardware() const { - return m_storage == nzDataStorage_Hardware; + return m_storage & nzDataStorage_Hardware; } bool NzBuffer::IsValid() const @@ -200,7 +200,7 @@ void* NzBuffer::Map(nzBufferAccess access, unsigned int offset, unsigned int siz return m_impl->Map(access, offset, (size == 0) ? m_size-offset : size); } -bool NzBuffer::SetStorage(nzDataStorage storage) +bool NzBuffer::SetStorage(nzUInt32 storage) { #if NAZARA_UTILITY_SAFE if (!m_impl) @@ -275,12 +275,12 @@ void NzBuffer::Unmap() const NazaraWarning("Failed to unmap buffer (it's content may be undefined)"); ///TODO: Unexpected ? } -bool NzBuffer::IsStorageSupported(nzDataStorage storage) +bool NzBuffer::IsStorageSupported(nzUInt32 storage) { return s_bufferFactories[storage] != nullptr; } -void NzBuffer::SetBufferFactory(nzDataStorage storage, BufferFactory func) +void NzBuffer::SetBufferFactory(nzUInt32 storage, BufferFactory func) { s_bufferFactories[storage] = func; } diff --git a/src/Nazara/Utility/IndexBuffer.cpp b/src/Nazara/Utility/IndexBuffer.cpp index 65cc22757..5a4f5007a 100644 --- a/src/Nazara/Utility/IndexBuffer.cpp +++ b/src/Nazara/Utility/IndexBuffer.cpp @@ -24,7 +24,7 @@ NzIndexBuffer::NzIndexBuffer(bool largeIndices, NzBuffer* buffer, unsigned int s Reset(largeIndices, buffer, startOffset, endOffset); } -NzIndexBuffer::NzIndexBuffer(bool largeIndices, unsigned int length, nzDataStorage storage, nzBufferUsage usage) +NzIndexBuffer::NzIndexBuffer(bool largeIndices, unsigned int length, nzUInt32 storage, nzBufferUsage usage) { NzErrorFlags(nzErrorFlag_ThrowException, true); Reset(largeIndices, length, storage, usage); @@ -220,7 +220,7 @@ void NzIndexBuffer::Reset(bool largeIndices, NzBuffer* buffer, unsigned int star m_startOffset = startOffset; } -void NzIndexBuffer::Reset(bool largeIndices, unsigned int length, nzDataStorage storage, nzBufferUsage usage) +void NzIndexBuffer::Reset(bool largeIndices, unsigned int length, nzUInt32 storage, nzBufferUsage usage) { unsigned int stride = (largeIndices) ? sizeof(nzUInt32) : sizeof(nzUInt16); @@ -251,7 +251,7 @@ void NzIndexBuffer::Reset(NzIndexBuffer&& indexBuffer) noexcept m_startOffset = indexBuffer.m_startOffset; } -bool NzIndexBuffer::SetStorage(nzDataStorage storage) +bool NzIndexBuffer::SetStorage(nzUInt32 storage) { return m_buffer->SetStorage(storage); } diff --git a/src/Nazara/Utility/VertexBuffer.cpp b/src/Nazara/Utility/VertexBuffer.cpp index 31af8c2e9..12f72051f 100644 --- a/src/Nazara/Utility/VertexBuffer.cpp +++ b/src/Nazara/Utility/VertexBuffer.cpp @@ -20,7 +20,7 @@ NzVertexBuffer::NzVertexBuffer(const NzVertexDeclaration* vertexDeclaration, NzB Reset(vertexDeclaration, buffer, startOffset, endOffset); } -NzVertexBuffer::NzVertexBuffer(const NzVertexDeclaration* vertexDeclaration, unsigned int length, nzDataStorage storage, nzBufferUsage usage) +NzVertexBuffer::NzVertexBuffer(const NzVertexDeclaration* vertexDeclaration, unsigned int length, nzUInt32 storage, nzBufferUsage usage) { NzErrorFlags(nzErrorFlag_ThrowException, true); Reset(vertexDeclaration, length, storage, usage); @@ -230,7 +230,7 @@ void NzVertexBuffer::Reset(const NzVertexDeclaration* vertexDeclaration, NzBuffe m_vertexDeclaration = vertexDeclaration; } -void NzVertexBuffer::Reset(const NzVertexDeclaration* vertexDeclaration, unsigned int length, nzDataStorage storage, nzBufferUsage usage) +void NzVertexBuffer::Reset(const NzVertexDeclaration* vertexDeclaration, unsigned int length, nzUInt32 storage, nzBufferUsage usage) { m_endOffset = length * ((vertexDeclaration) ? vertexDeclaration->GetStride() : 1); m_startOffset = 0; @@ -259,7 +259,7 @@ void NzVertexBuffer::Reset(NzVertexBuffer&& vertexBuffer) noexcept m_vertexDeclaration = std::move(vertexBuffer.m_vertexDeclaration); } -bool NzVertexBuffer::SetStorage(nzDataStorage storage) +bool NzVertexBuffer::SetStorage(nzUInt32 storage) { return m_buffer->SetStorage(storage); }