Added deferred mapping to BufferMapper
Former-commit-id: f02e5c999560fbd00894fcda9c6a6f80a6fc9e13
This commit is contained in:
parent
e617783999
commit
5048705702
|
|
@ -13,12 +13,18 @@ template<class T>
|
|||
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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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 <Nazara/Utility/BufferMapper.hpp>
|
||||
#include <Nazara/Core/Error.hpp>
|
||||
#include <Nazara/Core/Debug.hpp>
|
||||
#include <Nazara/Utility/Config.hpp>
|
||||
#include <Nazara/Utility/Debug.hpp>
|
||||
|
||||
template<typename T>
|
||||
NzBufferMapper<T>::NzBufferMapper() :
|
||||
m_buffer(nullptr),
|
||||
m_ptr(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzBufferMapper<T>::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<typename T>
|
||||
|
|
@ -28,16 +30,10 @@ NzBufferMapper(&buffer, access, offset, length)
|
|||
|
||||
template<typename T>
|
||||
NzBufferMapper<T>::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<typename T>
|
||||
|
|
@ -65,6 +61,64 @@ void* NzBufferMapper<T>::GetPointer() const
|
|||
return m_ptr;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
bool NzBufferMapper<T>::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<typename T>
|
||||
bool NzBufferMapper<T>::Map(T& buffer, nzBufferAccess access, unsigned int offset, unsigned int length)
|
||||
{
|
||||
return Map(&buffer, access, offset, length);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
bool NzBufferMapper<T>::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<typename T>
|
||||
bool NzBufferMapper<T>::Map(const T& buffer, nzBufferAccess access, unsigned int offset, unsigned int length)
|
||||
{
|
||||
return Map(&buffer, access, offset, length);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void NzBufferMapper<T>::Unmap()
|
||||
{
|
||||
|
|
@ -75,4 +129,4 @@ void NzBufferMapper<T>::Unmap()
|
|||
}
|
||||
}
|
||||
|
||||
#include <Nazara/Core/DebugOff.hpp>
|
||||
#include <Nazara/Utility/DebugOff.hpp>
|
||||
|
|
|
|||
Loading…
Reference in New Issue