diff options
| author | assiduous <assiduous@diligentgraphics.com> | 2020-01-26 20:55:35 +0000 |
|---|---|---|
| committer | assiduous <assiduous@diligentgraphics.com> | 2020-01-26 20:55:35 +0000 |
| commit | 1d575c1fdaeea112397b5542ae21c7c3da0e5e49 (patch) | |
| tree | 0c825ecd88a7cec713ee4a2817e2dd3ac3d40ac8 /Graphics/GraphicsEngine | |
| parent | Fixed formatting (diff) | |
| download | DiligentCore-1d575c1fdaeea112397b5542ae21c7c3da0e5e49.tar.gz DiligentCore-1d575c1fdaeea112397b5542ae21c7c3da0e5e49.zip | |
Moved MapHelper to GraphicsTools
Diffstat (limited to 'Graphics/GraphicsEngine')
| -rw-r--r-- | Graphics/GraphicsEngine/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | Graphics/GraphicsEngine/interface/MapHelper.h | 202 |
2 files changed, 0 insertions, 203 deletions
diff --git a/Graphics/GraphicsEngine/CMakeLists.txt b/Graphics/GraphicsEngine/CMakeLists.txt index 2ebddc5b..f28c3db1 100644 --- a/Graphics/GraphicsEngine/CMakeLists.txt +++ b/Graphics/GraphicsEngine/CMakeLists.txt @@ -43,7 +43,6 @@ set(INTERFACE interface/Fence.h interface/GraphicsTypes.h interface/InputLayout.h - interface/MapHelper.h interface/PipelineState.h interface/Query.h interface/RasterizerState.h diff --git a/Graphics/GraphicsEngine/interface/MapHelper.h b/Graphics/GraphicsEngine/interface/MapHelper.h deleted file mode 100644 index 147ec316..00000000 --- a/Graphics/GraphicsEngine/interface/MapHelper.h +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright 2019-2020 Diligent Graphics LLC - * Copyright 2015-2019 Egor Yusov - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * In no event and under no legal theory, whether in tort (including negligence), - * contract, or otherwise, unless required by applicable law (such as deliberate - * and grossly negligent acts) or agreed to in writing, shall any Contributor be - * liable for any damages, including any direct, indirect, special, incidental, - * or consequential damages of any character arising as a result of this License or - * out of the use or inability to use the software (including but not limited to damages - * for loss of goodwill, work stoppage, computer failure or malfunction, or any and - * all other commercial damages or losses), even if such Contributor has been advised - * of the possibility of such damages. - */ - -#pragma once - -/// \file -/// Definition of the Diligent::MapHelper helper template class - -#include "../../../Platforms/Basic/interface/DebugUtilities.h" -#include "../../../Common/interface/RefCntAutoPtr.h" -#include "DeviceContext.h" -#include "Buffer.h" - -namespace Diligent -{ - -/// Facilitates resource mapping - -/// \tparam DataType - type of the mapped data. -/// -/// This class is designed to automate resource mapping/unmapping process. -/// The class automatically unmaps the resource when the class instance gets out of scope.\n -/// Usage example: -/// -/// { -/// MapHelper<float> UniformData( pDeviceContext, pUniformBuff, MAP_WRITE, MAP_FLAG_DISCARD ); -/// UniformData[0] = UniformData[1] = UniformData[2] = UniformData[3] = 1; -/// } -template <typename DataType, bool KeepStrongReferences = false> -class MapHelper -{ -public: - /// Initializes the class member with null values - // clang-format off - MapHelper() : - m_pBuffer {nullptr}, - m_pContext {nullptr}, - m_pMappedData {nullptr}, - m_MapType {static_cast<MAP_TYPE>(-1)}, - m_MapFlags {static_cast<Uint32>(-1) } - // clang-format on - { - } - - /// Initializes the object and maps the provided resource. - /// See Map() for details. - MapHelper(IDeviceContext* pContext, IBuffer* pBuffer, MAP_TYPE MapType, MAP_FLAGS MapFlags) : - MapHelper() - { - Map(pContext, pBuffer, MapType, MapFlags); - } - - /// Move constructor: takes over resource ownership from Helper - // clang-format off - MapHelper(MapHelper&& Helper) : - m_pBuffer {std::move(Helper.m_pBuffer) }, - m_pMappedData {std::move(Helper.m_pMappedData)}, - m_pContext {std::move(Helper.m_pContext) }, - m_MapType {std::move(Helper.m_MapType) }, - m_MapFlags {std::move(Helper.m_MapFlags) } - // clang-format on - { - Helper.m_pBuffer = nullptr; - Helper.m_pContext = nullptr; - Helper.m_pMappedData = nullptr; - Helper.m_MapType = static_cast<MAP_TYPE>(-1); - Helper.m_MapFlags = static_cast<Uint32>(-1); - } - - /// Move-assignement operator: takes over resource ownership from Helper - MapHelper& operator=(MapHelper&& Helper) - { - m_pBuffer = std::move(Helper.m_pBuffer); - m_pMappedData = std::move(Helper.m_pMappedData); - m_pContext = std::move(Helper.m_pContext); - m_MapType = std::move(Helper.m_MapType); - m_MapFlags = std::move(Helper.m_MapFlags); - - Helper.m_pBuffer = nullptr; - Helper.m_pContext = nullptr; - Helper.m_pMappedData = nullptr; - Helper.m_MapType = static_cast<MAP_TYPE>(-1); - Helper.m_MapFlags = static_cast<Uint32>(-1); - - return *this; - } - - /// Maps the provided resource. - - /// \param pContext - Pointer to the device context to perform mapping with. - /// \param pBuffer - Pointer to the buffer interface to map. - /// \param MapType - Type of the map operation, see Diligent::MAP_TYPE for details. - /// \param MapFlags - Additional map flags, see Diligent::MAP_FLAGS. - void Map(IDeviceContext* pContext, IBuffer* pBuffer, MAP_TYPE MapType, MAP_FLAGS MapFlags) - { - VERIFY(!m_pBuffer && !m_pMappedData && !m_pContext, "Object already mapped"); - Unmap(); -#ifdef _DEBUG - auto& BuffDesc = pBuffer->GetDesc(); - VERIFY(sizeof(DataType) <= BuffDesc.uiSizeInBytes, "Data type size exceeds buffer size"); -#endif - pContext->MapBuffer(pBuffer, MapType, MapFlags, (PVoid&)m_pMappedData); - if (m_pMappedData != nullptr) - { - m_pContext = pContext; - m_pBuffer = pBuffer; - m_MapType = MapType; - m_MapFlags = MapFlags; - } - } - - /// Unamps the resource and resets the object state to default. - void Unmap() - { - if (m_pBuffer) - { - m_pContext->UnmapBuffer(m_pBuffer, m_MapType); - m_pBuffer = nullptr; - m_MapType = static_cast<MAP_TYPE>(-1); - m_MapFlags = static_cast<Uint32>(-1); - } - m_pContext = nullptr; - m_pMappedData = nullptr; - } - - /// Converts mapped data pointer to DataType* - operator DataType*() { return m_pMappedData; } - - /// Converts mapped data pointer to const DataType* - operator const DataType*() const { return m_pMappedData; } - - /// Operator -> - DataType* operator->() { return m_pMappedData; } - - /// Operator const -> - const DataType* operator->() const { return m_pMappedData; } - - /// Unamps the resource - ~MapHelper() - { - Unmap(); - } - -private: - MapHelper(const MapHelper&); - MapHelper& operator=(const MapHelper&); - - template <typename PtrType, bool UseStrongReference> - struct PtrTypeSelector - {}; - - template <typename PtrType> - struct PtrTypeSelector<PtrType, true> - { - typedef RefCntAutoPtr<PtrType> Type; - }; - - template <typename PtrType> - struct PtrTypeSelector<PtrType, false> - { - typedef PtrType* Type; - }; - - /// Pointer / strong auto pointer to the resource - typename PtrTypeSelector<IBuffer, KeepStrongReferences>::Type m_pBuffer; - - /// Pointer / strong auto pointer to the context - typename PtrTypeSelector<IDeviceContext, KeepStrongReferences>::Type m_pContext; - - /// Pointer to the mapped data - DataType* m_pMappedData; - - MAP_TYPE m_MapType; - - Uint32 m_MapFlags; -}; - -} // namespace Diligent |
