From 5048705702e45c2ebf34552a0b2ac95c359ffb44 Mon Sep 17 00:00:00 2001 From: Lynix Date: Fri, 29 Mar 2013 14:41:27 +0100 Subject: [PATCH] Added deferred mapping to BufferMapper Former-commit-id: f02e5c999560fbd00894fcda9c6a6f80a6fc9e13 --- include/Nazara/Utility/BufferMapper.hpp | 6 ++ include/Nazara/Utility/BufferMapper.inl | 96 +++++++++++++++++++------ 2 files changed, 81 insertions(+), 21 deletions(-) diff --git a/include/Nazara/Utility/BufferMapper.hpp b/include/Nazara/Utility/BufferMapper.hpp index d271a2ad1..041e4ce17 100644 --- a/include/Nazara/Utility/BufferMapper.hpp +++ b/include/Nazara/Utility/BufferMapper.hpp @@ -13,12 +13,18 @@ template class NzBufferMapper { public: + NzBufferMapper(); NzBufferMapper(T* buffer, nzBufferAccess access, unsigned int offset = 0, unsigned int length = 0); NzBufferMapper(T& buffer, nzBufferAccess access, unsigned int offset = 0, unsigned int length = 0); NzBufferMapper(const T* buffer, nzBufferAccess access, unsigned int offset = 0, unsigned int length = 0); NzBufferMapper(const T& buffer, nzBufferAccess access, unsigned int offset = 0, unsigned int length = 0); ~NzBufferMapper(); + bool Map(T* buffer, nzBufferAccess access, unsigned int offset = 0, unsigned int length = 0); + bool Map(T& buffer, nzBufferAccess access, unsigned int offset = 0, unsigned int length = 0); + bool Map(const T* buffer, nzBufferAccess access, unsigned int offset = 0, unsigned int length = 0); + bool Map(const T& buffer, nzBufferAccess access, unsigned int offset = 0, unsigned int length = 0); + const T* GetBuffer() const; void* GetPointer() const; diff --git a/include/Nazara/Utility/BufferMapper.inl b/include/Nazara/Utility/BufferMapper.inl index 4e2eb12a9..39310febb 100644 --- a/include/Nazara/Utility/BufferMapper.inl +++ b/include/Nazara/Utility/BufferMapper.inl @@ -1,23 +1,25 @@ // Copyright (C) 2013 Jérôme Leclercq -// This file is part of the "Nazara Engine - Core module" +// This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp #include #include -#include +#include +#include + +template +NzBufferMapper::NzBufferMapper() : +m_buffer(nullptr), +m_ptr(nullptr) +{ +} template NzBufferMapper::NzBufferMapper(T* buffer, nzBufferAccess access, unsigned int offset, unsigned int length) : -m_buffer(buffer) +m_buffer(nullptr) { - if (m_buffer) - { - m_ptr = buffer->Map(access, offset, length); - if (!m_ptr) - NazaraError("Failed to map buffer"); ///TODO: Unexpected - } - else - m_ptr = nullptr; + if (!Map(buffer, access, offset, length)) + NazaraError("Failed to map buffer"); ///TODO: Unexpected } template @@ -28,16 +30,10 @@ NzBufferMapper(&buffer, access, offset, length) template NzBufferMapper::NzBufferMapper(const T* buffer, nzBufferAccess access, unsigned int offset, unsigned int length) : -m_buffer(buffer) +m_buffer(nullptr) { - if (m_buffer) - { - m_ptr = buffer->Map(access, offset, length); - if (!m_ptr) - NazaraError("Failed to map buffer"); ///TODO: Unexpected - } - else - m_ptr = nullptr; + if (!Map(buffer, access, offset, length)) + NazaraError("Failed to map buffer"); ///TODO: Unexpected } template @@ -65,6 +61,64 @@ void* NzBufferMapper::GetPointer() const return m_ptr; } +template +bool NzBufferMapper::Map(T* buffer, nzBufferAccess access, unsigned int offset, unsigned int length) +{ + Unmap(); + + #if NAZARA_UTILITY_SAFE + if (!buffer) + { + NazaraError("Buffer must be valid"); + m_ptr = nullptr; + + return false; + } + #endif + + m_buffer = buffer; + m_ptr = buffer->Map(access, offset, length); + if (!m_ptr) + NazaraError("Failed to map buffer"); ///TODO: Unexpected + + return true; +} + +template +bool NzBufferMapper::Map(T& buffer, nzBufferAccess access, unsigned int offset, unsigned int length) +{ + return Map(&buffer, access, offset, length); +} + +template +bool NzBufferMapper::Map(const T* buffer, nzBufferAccess access, unsigned int offset, unsigned int length) +{ + Unmap(); + + #if NAZARA_UTILITY_SAFE + if (!buffer) + { + NazaraError("Buffer must be valid"); + m_ptr = nullptr; + + return false; + } + #endif + + m_buffer = buffer; + m_ptr = buffer->Map(access, offset, length); + if (!m_ptr) + NazaraError("Failed to map buffer"); ///TODO: Unexpected + + return true; +} + +template +bool NzBufferMapper::Map(const T& buffer, nzBufferAccess access, unsigned int offset, unsigned int length) +{ + return Map(&buffer, access, offset, length); +} + template void NzBufferMapper::Unmap() { @@ -75,4 +129,4 @@ void NzBufferMapper::Unmap() } } -#include +#include