Added DeviceBufferMap, first used in ViewportInfo

This commit is contained in:
hyzboy 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;

View File

@ -16,9 +16,9 @@ IRenderTarget::IRenderTarget(RenderFramework *rf,const VkExtent2D &ext):desc_bin
{
render_framework=rf;
ubo_vp_info=GetDevice()->CreateUBO(sizeof(ViewportInfo),&vp_info);
ubo_vp_info=GetDevice()->CreateUBO<UBOViewportInfo>();
desc_binding.AddUBO(mtl::SBS_ViewportInfo.name,ubo_vp_info);
desc_binding.AddUBO(mtl::SBS_ViewportInfo.name,*ubo_vp_info);
OnResize(ext);
}
@ -31,8 +31,10 @@ IRenderTarget::~IRenderTarget()
void IRenderTarget::OnResize(const VkExtent2D &ext)
{
extent=ext;
vp_info.Set(ext.width,ext.height);
ubo_vp_info->Write(&vp_info);
ubo_vp_info->data()->Set(ext.width,ext.height);
ubo_vp_info->Update();
}
void RenderTargetData::Clear()