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
|
class NzBufferMapper
|
||||||
{
|
{
|
||||||
public:
|
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(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(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();
|
~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;
|
const T* GetBuffer() const;
|
||||||
void* GetPointer() const;
|
void* GetPointer() const;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,25 @@
|
||||||
// Copyright (C) 2013 Jérôme Leclercq
|
// 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
|
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||||
|
|
||||||
#include <Nazara/Utility/BufferMapper.hpp>
|
#include <Nazara/Utility/BufferMapper.hpp>
|
||||||
#include <Nazara/Core/Error.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>
|
template<typename T>
|
||||||
NzBufferMapper<T>::NzBufferMapper(T* buffer, nzBufferAccess access, unsigned int offset, unsigned int length) :
|
NzBufferMapper<T>::NzBufferMapper(T* buffer, nzBufferAccess access, unsigned int offset, unsigned int length) :
|
||||||
m_buffer(buffer)
|
m_buffer(nullptr)
|
||||||
{
|
{
|
||||||
if (m_buffer)
|
if (!Map(buffer, access, offset, length))
|
||||||
{
|
NazaraError("Failed to map buffer"); ///TODO: Unexpected
|
||||||
m_ptr = buffer->Map(access, offset, length);
|
|
||||||
if (!m_ptr)
|
|
||||||
NazaraError("Failed to map buffer"); ///TODO: Unexpected
|
|
||||||
}
|
|
||||||
else
|
|
||||||
m_ptr = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
|
@ -28,16 +30,10 @@ NzBufferMapper(&buffer, access, offset, length)
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
NzBufferMapper<T>::NzBufferMapper(const T* buffer, nzBufferAccess access, unsigned int offset, unsigned int length) :
|
NzBufferMapper<T>::NzBufferMapper(const T* buffer, nzBufferAccess access, unsigned int offset, unsigned int length) :
|
||||||
m_buffer(buffer)
|
m_buffer(nullptr)
|
||||||
{
|
{
|
||||||
if (m_buffer)
|
if (!Map(buffer, access, offset, length))
|
||||||
{
|
NazaraError("Failed to map buffer"); ///TODO: Unexpected
|
||||||
m_ptr = buffer->Map(access, offset, length);
|
|
||||||
if (!m_ptr)
|
|
||||||
NazaraError("Failed to map buffer"); ///TODO: Unexpected
|
|
||||||
}
|
|
||||||
else
|
|
||||||
m_ptr = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
|
@ -65,6 +61,64 @@ void* NzBufferMapper<T>::GetPointer() const
|
||||||
return m_ptr;
|
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>
|
template<typename T>
|
||||||
void NzBufferMapper<T>::Unmap()
|
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