29 #include "DebugUtilities.h" 46 template<
typename DataType,
bool KeepStrongReferences = false>
53 m_pMappedData(nullptr),
56 m_MapType(static_cast<
MAP_TYPE>(-1)),
57 m_MapFlags(static_cast<Uint32>(-1))
66 Map(pContext, pBuffer, MapType, MapFlags);
71 m_pBuffer(
std::move(Helper.m_pBuffer) ),
72 m_pMappedData(
std::move(Helper.m_pMappedData) ),
73 m_pContext(
std::move(Helper.m_pContext) ),
74 m_MapType(
std::move(Helper.m_MapType) ),
75 m_MapFlags(
std::move(Helper.m_MapFlags) )
77 Helper.m_pBuffer =
nullptr;
78 Helper.m_pContext =
nullptr;
79 Helper.m_pMappedData =
nullptr;
80 Helper.m_MapType =
static_cast<MAP_TYPE>(-1);
81 Helper.m_MapFlags =
static_cast<Uint32
>(-1);
87 m_pBuffer = std::move(Helper.m_pBuffer);
88 m_pMappedData = std::move(Helper.m_pMappedData);
89 m_pContext = std::move( Helper.m_pContext );
90 m_MapType = std::move(Helper.m_MapType);
91 m_MapFlags = std::move(Helper.m_MapFlags);
92 Helper.m_pBuffer =
nullptr;
93 Helper.m_pContext =
nullptr;
94 Helper.m_pMappedData =
nullptr;
95 Helper.m_MapType =
static_cast<MAP_TYPE>(-1);
96 Helper.m_MapFlags =
static_cast<Uint32
>(-1);
108 VERIFY(!m_pBuffer && !m_pMappedData && !m_pContext,
"Object already mapped");
111 auto &BuffDesc = pBuffer->
GetDesc();
112 VERIFY(
sizeof(DataType) <= BuffDesc.uiSizeInBytes,
"Data type size exceeds buffer size");
114 m_pContext = pContext;
117 m_MapFlags = MapFlags;
118 m_pBuffer->Map(m_pContext, MapType, MapFlags, (PVoid&)m_pMappedData);
119 VERIFY( m_pMappedData,
"Map failed" );
127 m_pBuffer->Unmap(m_pContext, m_MapType, m_MapFlags);
129 m_MapType =
static_cast<MAP_TYPE>(-1);
130 m_MapFlags =
static_cast<Uint32
>(-1);
132 m_pContext =
nullptr;
133 m_pMappedData =
nullptr;
137 operator DataType* (){
return m_pMappedData;}
140 operator const DataType* ()
const{
return m_pMappedData;}
158 template<
typename PtrType,
bool UseStrongReference>
159 struct PtrTypeSelector{};
161 template<
typename PtrType>
162 struct PtrTypeSelector<PtrType, true>
164 typedef RefCntAutoPtr<PtrType> Type;
167 template<
typename PtrType>
168 struct PtrTypeSelector<PtrType, false>
170 typedef PtrType* Type;
174 typename PtrTypeSelector<IBuffer, KeepStrongReferences>::Type m_pBuffer;
177 typename PtrTypeSelector<IDeviceContext, KeepStrongReferences>::Type m_pContext;
180 DataType *m_pMappedData;
const DataType * operator->() const
Operator const ->
Definition: MapHelper.h:146
Facilitates resource mapping.
Definition: MapHelper.h:47
Namespace for the OpenGL implementation of the graphics engine.
Definition: BufferD3D11Impl.h:34
void Unmap()
Unamps the resource and resets the object state to default.
Definition: MapHelper.h:123
Definition: AdvancedMath.h:316
MapHelper(MapHelper &&Helper)
Move constructor: takes over resource ownership from Helper.
Definition: MapHelper.h:70
MapHelper()
Initializes the class member with null values.
Definition: MapHelper.h:52
MapHelper(IDeviceContext *pContext, IBuffer *pBuffer, MAP_TYPE MapType, Uint32 MapFlags)
Initializes the object and maps the provided resource. See Map() for details.
Definition: MapHelper.h:63
Buffer interface.
Definition: Buffer.h:200
Device context interface.
Definition: DeviceContext.h:443
DataType * operator->()
Operator ->
Definition: MapHelper.h:143
~MapHelper()
Unamps the resource.
Definition: MapHelper.h:149
void Map(IDeviceContext *pContext, IBuffer *pBuffer, MAP_TYPE MapType, Uint32 MapFlags)
Maps the provided resource.
Definition: MapHelper.h:106
MapHelper & operator=(MapHelper &&Helper)
Move-assignement operator: takes over resource ownership from Helper.
Definition: MapHelper.h:85
MAP_TYPE
Resource mapping type.
Definition: GraphicsTypes.h:125
virtual const BufferDesc & GetDesc() const =0
Returns the buffer description used to create the object.