Added DeviceBufferMap, first used in ViewportInfo

This commit is contained in:
2025-03-06 01:22:35 +08:00
parent c5e9f151fc
commit 55765cf112
5 changed files with 57 additions and 6 deletions

View File

@@ -70,6 +70,7 @@ class TileData;
class DeviceMemory;
class DeviceBuffer;
struct DeviceBufferData;
template<typename T> class DeviceBufferMap;
struct PrimitiveDataBuffer;
struct PrimitiveRenderData;

View File

@@ -51,4 +51,39 @@ public:
bool Write (const void *ptr) {return buf.memory->Write(ptr);}
};//class DeviceBuffer
template<typename T> class DeviceBufferMap
{
DeviceBuffer *dev_buf;
T data_map;
public:
static const VkDeviceSize GetSize()
{
return sizeof(T);
}
public:
DeviceBufferMap(DeviceBuffer *buf)
{
dev_buf=buf;
}
virtual ~DeviceBufferMap()
{
delete dev_buf;
}
operator DeviceBuffer *(){return dev_buf;}
T *data(){return &data_map;}
void Update()
{
if(dev_buf)
dev_buf->Write(&data_map,sizeof(T));
}
};
VK_NAMESPACE_END

View File

@@ -126,6 +126,17 @@ public: //Buffer相关
#undef CREATE_BUFFER_OBJECT
template<typename T>
T *CreateUBO()
{
DeviceBuffer *buf=CreateUBO(T::GetSize());
if(!buf)
return(nullptr);
return(new T(buf));
}
GPUArrayBuffer *CreateArrayInUBO(const VkDeviceSize &uint_size);
GPUArrayBuffer *CreateArrayInSSBO(const VkDeviceSize &uint_size);

View File

@@ -14,6 +14,8 @@ VK_NAMESPACE_BEGIN
class RenderFramework;
using UBOViewportInfo=DeviceBufferMap<graph::ViewportInfo>;
/**
* RenderTarget 存在几种情况:
*
@@ -29,8 +31,8 @@ class IRenderTarget
RenderFramework *render_framework;
VkExtent2D extent;
graph::ViewportInfo vp_info;
graph::DeviceBuffer *ubo_vp_info;
UBOViewportInfo *ubo_vp_info;
DescriptorBinding desc_binding;