From ecb47dae4d9d9f5ce1b8df49bc255e5f74d5795a Mon Sep 17 00:00:00 2001 From: hyzboy Date: Mon, 20 May 2024 18:04:30 +0800 Subject: [PATCH] moved to VKPrimitiveData.cpp from VKPrimitiveData.h --- inc/hgl/graph/PrimitiveCreater.h | 7 ++- inc/hgl/graph/VKPrimitive.h | 38 ++++-------- inc/hgl/graph/VKPrimitiveData.h | 70 ++--------------------- src/SceneGraph/CMakeLists.txt | 1 + src/SceneGraph/Vulkan/VKPrimitive.cpp | 6 +- src/SceneGraph/Vulkan/VKPrimitiveData.cpp | 69 ++++++++++++++++++++++ 6 files changed, 94 insertions(+), 97 deletions(-) create mode 100644 src/SceneGraph/Vulkan/VKPrimitiveData.cpp diff --git a/inc/hgl/graph/PrimitiveCreater.h b/inc/hgl/graph/PrimitiveCreater.h index 2837687a..5f91075d 100644 --- a/inc/hgl/graph/PrimitiveCreater.h +++ b/inc/hgl/graph/PrimitiveCreater.h @@ -4,9 +4,11 @@ #include #include #include +#include VK_NAMESPACE_BEGIN class VertexDataManager; +struct PrimitiveData; /** * 可绘制图元创建器 @@ -18,12 +20,13 @@ protected: GPUDevice *device; const GPUPhysicalDevice *phy_device; - VertexDataManager *vdm; - const VIL *vil; protected: + PrimitiveData * prim_data; + + VkDeviceSize vertices_number; VkDeviceSize index_number; diff --git a/inc/hgl/graph/VKPrimitive.h b/inc/hgl/graph/VKPrimitive.h index 3b69c115..6a820fda 100644 --- a/inc/hgl/graph/VKPrimitive.h +++ b/inc/hgl/graph/VKPrimitive.h @@ -23,48 +23,32 @@ VK_NAMESPACE_BEGIN */ class Primitive { - GPUDevice *device; +protected: + AnsiString prim_name; protected: - VkDeviceSize vertex_count; - - VABAccessMap buffer_list; - - IBAccess ib_access; - AABB BoundingBox; -protected: - - bool SetVAB(const AnsiString &name,VAB *vb,VkDeviceSize start=0); - - bool SetIndex(IndexBuffer *ib,VkDeviceSize start,const VkDeviceSize index_count); - - void SetBoundingBox(const AABB &aabb){BoundingBox=aabb;} - - friend class PrimitiveCreater; - friend class RenderablePrimitiveCreater; - public: - Primitive(GPUDevice *dev,const AnsiString &n,const VkDeviceSize vc=0) + Primitive(const AnsiString &n) { - device=dev; prim_name=n; - vertex_count=vc; } - virtual ~Primitive()=default; + virtual ~Primitive()=0; public: - const VkDeviceSize GetVertexCount ()const{return vertex_count;} - const int GetVACount ()const{return buffer_list.GetCount();} - const bool GetVABAccess (const AnsiString &,VABAccess *); - const IBAccess * GetIBAccess ()const{return ib_access.buffer?&ib_access:nullptr;} + virtual const VkDeviceSize GetVertexCount ()const=0; + virtual const int GetVACount ()const=0; + virtual const bool GetVABAccess (const AnsiString &,VABAccess *)=0; + virtual const IBAccess * GetIBAccess ()const=0; - const AABB & GetBoundingBox ()const{return BoundingBox;} + const AABB & GetBoundingBox ()const{return BoundingBox;} };//class Primitive + +Primitive *CreatePrimitive(const PrimitiveData *); VK_NAMESPACE_END diff --git a/inc/hgl/graph/VKPrimitiveData.h b/inc/hgl/graph/VKPrimitiveData.h index 3f2f5766..de9258f0 100644 --- a/inc/hgl/graph/VKPrimitiveData.h +++ b/inc/hgl/graph/VKPrimitiveData.h @@ -31,71 +31,11 @@ struct PrimitiveData VABAccess vab_access[HGL_MAX_VERTEX_ATTRIB_COUNT]; IBAccess ib_access; -}; +};//struct PrimitiveData -inline bool Init(PrimitiveData *pd,const VIL *_vil,const VkDeviceSize vc,const VkDeviceSize ic=0) -{ - if(!pd)return(false); - if(!_vil)return(false); - if(vc<=0)return(false); - - hgl_zero(*pd); - - pd->vil=_vil; - pd->vertex_count=vc; - pd->ib_access.count=ic; - - return(true); -} - -inline int GetVABIndex(const PrimitiveData *pd,const AnsiString &name) -{ - if(!pd)return(-1); - if(!pd->vil)return(-1); - if(name.IsEmpty())return(-1); - - return pd->vil->GetIndex(name); -} - -inline const VABAccess *GetVAB(const PrimitiveData *pd,const AnsiString &name) -{ - if(!pd)return(nullptr); - if(name.IsEmpty())return(nullptr); - - const int index=GetVABIndex(pd,name); - - if(index==-1) - return(nullptr); - - return pd->vab_access+index; -} - -inline VABAccess *SetVAB(PrimitiveData *pd,const AnsiString &name,VAB *vab,VkDeviceSize start=0) -{ - if(!pd)return(nullptr); - if(name.IsEmpty())return(nullptr); - - const int index=GetVABIndex(pd,name); - - if(index==-1) - return(nullptr); - - VABAccess *vaba=pd->vab_access+index; - - vaba->vab=vab; - vaba->start=start; - - //#ifdef _DEBUG - // DebugUtils *du=device->GetDebugUtils(); - - // if(du) - // { - // du->SetBuffer(vab->GetBuffer(),prim_name+":VAB:Buffer:"+name); - // du->SetDeviceMemory(vab->GetVkMemory(),prim_name+":VAB:Memory:"+name); - // } - //#endif//_DEBUG - - return vaba; -} + bool Init( PrimitiveData *pd,const VIL *_vil,const VkDeviceSize vc,const VkDeviceSize ic=0); + int GetVABIndex(const PrimitiveData *pd,const AnsiString &name); +const VABAccess * GetVAB(const PrimitiveData *pd,const AnsiString &name); + VABAccess * SetVAB( PrimitiveData *pd,const AnsiString &name,VAB *vab,VkDeviceSize start=0); VK_NAMESPACE_END diff --git a/src/SceneGraph/CMakeLists.txt b/src/SceneGraph/CMakeLists.txt index 8657f669..fda1bd5c 100644 --- a/src/SceneGraph/CMakeLists.txt +++ b/src/SceneGraph/CMakeLists.txt @@ -16,6 +16,7 @@ SOURCE_GROUP("VertexDataManager" FILES ${SG_VDM_SOURCE}) SET(SG_PRIMITIVE_SOURCE ${SG_INCLUDE_PATH}/VKPrimitiveData.h ${SG_INCLUDE_PATH}/VKPrimitive.h Vulkan/VKPrimitive.cpp + Vulkan/VKPrimitiveData.cpp ${SG_INCLUDE_PATH}/VKRenderablePrimitiveCreater.h ${SG_INCLUDE_PATH}/PrimitiveCreater.h PrimitiveCreater.cpp) diff --git a/src/SceneGraph/Vulkan/VKPrimitive.cpp b/src/SceneGraph/Vulkan/VKPrimitive.cpp index 91c29e8d..52ba5695 100644 --- a/src/SceneGraph/Vulkan/VKPrimitive.cpp +++ b/src/SceneGraph/Vulkan/VKPrimitive.cpp @@ -31,14 +31,14 @@ VK_NAMESPACE_BEGIN bool Primitive::SetVAB(const AnsiString &name,VAB *vab,VkDeviceSize start) { if(!vab)return(false); - if(buffer_list.KeyExist(name))return(false); + if(vab_access_map.KeyExist(name))return(false); VABAccess vad; vad.vab=vab; vad.start=start; - buffer_list.Add(name,vad); + vab_access_map.Add(name,vad); #ifdef _DEBUG DebugUtils *du=device->GetDebugUtils(); @@ -58,7 +58,7 @@ const bool Primitive::GetVABAccess(const AnsiString &name,VABAccess *vad) if(name.IsEmpty())return(false); if(!vad)return(false); - return buffer_list.Get(name,*vad); + return vab_access_map.Get(name,*vad); } bool Primitive::SetIndex(IndexBuffer *ib,VkDeviceSize start,const VkDeviceSize index_count) diff --git a/src/SceneGraph/Vulkan/VKPrimitiveData.cpp b/src/SceneGraph/Vulkan/VKPrimitiveData.cpp new file mode 100644 index 00000000..5f310845 --- /dev/null +++ b/src/SceneGraph/Vulkan/VKPrimitiveData.cpp @@ -0,0 +1,69 @@ +#include + +VK_NAMESPACE_BEGIN +bool Init(PrimitiveData *pd,const VIL *_vil,const VkDeviceSize vc,const VkDeviceSize ic=0) +{ + if(!pd)return(false); + if(!_vil)return(false); + if(vc<=0)return(false); + + hgl_zero(*pd); + + pd->vil=_vil; + pd->vertex_count=vc; + pd->ib_access.count=ic; + + return(true); +} + +int GetVABIndex(const PrimitiveData *pd,const AnsiString &name) +{ + if(!pd)return(-1); + if(!pd->vil)return(-1); + if(name.IsEmpty())return(-1); + + return pd->vil->GetIndex(name); +} + +const VABAccess *GetVAB(const PrimitiveData *pd,const AnsiString &name) +{ + if(!pd)return(nullptr); + if(name.IsEmpty())return(nullptr); + + const int index=GetVABIndex(pd,name); + + if(index==-1) + return(nullptr); + + return pd->vab_access+index; +} + +VABAccess *SetVAB(PrimitiveData *pd,const AnsiString &name,VAB *vab,VkDeviceSize start=0) +{ + if(!pd)return(nullptr); + if(name.IsEmpty())return(nullptr); + + const int index=GetVABIndex(pd,name); + + if(index==-1) + return(nullptr); + + VABAccess *vaba=pd->vab_access+index; + + vaba->vab=vab; + vaba->start=start; + + //#ifdef _DEBUG + // DebugUtils *du=device->GetDebugUtils(); + + // if(du) + // { + // du->SetBuffer(vab->GetBuffer(),prim_name+":VAB:Buffer:"+name); + // du->SetDeviceMemory(vab->GetVkMemory(),prim_name+":VAB:Memory:"+name); + // } + //#endif//_DEBUG + + return vaba; +} + +VK_NAMESPACE_END \ No newline at end of file