From 16ae84980958dabdc704856ced3c5287bc8d4799 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Sat, 1 Jun 2024 12:08:49 +0800 Subject: [PATCH] added VKBufferMap.cpp/.h --- inc/hgl/graph/PrimitiveCreater.h | 5 ++-- inc/hgl/graph/VKBufferMap.h | 27 +++++++++++++++++ src/SceneGraph/CMakeLists.txt | 2 ++ src/SceneGraph/Vulkan/VKBufferMap.cpp | 43 +++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 inc/hgl/graph/VKBufferMap.h create mode 100644 src/SceneGraph/Vulkan/VKBufferMap.cpp diff --git a/inc/hgl/graph/PrimitiveCreater.h b/inc/hgl/graph/PrimitiveCreater.h index f09cb521..ce65be34 100644 --- a/inc/hgl/graph/PrimitiveCreater.h +++ b/inc/hgl/graph/PrimitiveCreater.h @@ -1,11 +1,10 @@ #pragma once -#include +#include #include #include VK_NAMESPACE_BEGIN - /** * 可绘制原始图形创建器 */ @@ -232,4 +231,4 @@ using IBMapU8=IBMap; using IBMapU16=IBMap; using IBMapU32=IBMap; -VK_NAMESPACE_END \ No newline at end of file +VK_NAMESPACE_END diff --git a/inc/hgl/graph/VKBufferMap.h b/inc/hgl/graph/VKBufferMap.h new file mode 100644 index 00000000..4fe71eca --- /dev/null +++ b/inc/hgl/graph/VKBufferMap.h @@ -0,0 +1,27 @@ +#pragma once + +#include +#include + +VK_NAMESPACE_BEGIN +class VKBufferMap +{ +protected: + + DeviceBuffer *buffer; + VkDeviceSize offset; + VkDeviceSize size; + + void *map_ptr; + +public: + + VKBufferMap(DeviceBuffer *buf_ptr,VkDeviceSize off,VkDeviceSize s); + virtual ~VKBufferMap(); + + const bool IsValid()const{ return buffer; } + + void *Map(); + void Unmap(); +};//class VKBufferMap +VK_NAMESPACE_END diff --git a/src/SceneGraph/CMakeLists.txt b/src/SceneGraph/CMakeLists.txt index 8132e2a7..74e04b00 100644 --- a/src/SceneGraph/CMakeLists.txt +++ b/src/SceneGraph/CMakeLists.txt @@ -121,9 +121,11 @@ SET(VK_MEMORY_SOURCE ${SG_INCLUDE_PATH}/VKMemory.h ${SG_INCLUDE_PATH}/VKBuffer.h ${SG_INCLUDE_PATH}/VKIndexBuffer.h ${SG_INCLUDE_PATH}/VKArrayBuffer.h + ${SG_INCLUDE_PATH}/VKBufferMap.h Vulkan/VKMemory.cpp Vulkan/VKMemoryAllocator.cpp Vulkan/VKBuffer.cpp + Vulkan/VKBufferMap.cpp Vulkan/VKArrayBuffer.cpp ) diff --git a/src/SceneGraph/Vulkan/VKBufferMap.cpp b/src/SceneGraph/Vulkan/VKBufferMap.cpp new file mode 100644 index 00000000..6346d86c --- /dev/null +++ b/src/SceneGraph/Vulkan/VKBufferMap.cpp @@ -0,0 +1,43 @@ +#include +#include + +VK_NAMESPACE_BEGIN + +VKBufferMap::VKBufferMap(DeviceBuffer *buf,VkDeviceSize off,VkDeviceSize s) +{ + buffer=buf; + offset=off; + size=s; + + map_ptr=nullptr; +} + +VKBufferMap::~VKBufferMap() +{ + if(map_ptr) + buffer->DeviceBuffer::Unmap(); +} + +void *VKBufferMap::Map() +{ + if(map_ptr) + return(map_ptr); + + if(!buffer) + return(nullptr); + + map_ptr=buffer->DeviceBuffer::Map(offset,size); + return map_ptr; + +} + +void VKBufferMap::Unmap() +{ + if(map_ptr) + { + buffer->DeviceBuffer::Unmap(); + map_ptr=nullptr; + } +} + +VK_NAMESPACE_END \ No newline at end of file