add CreateVADA function in RenderableCreater
This commit is contained in:
parent
7ee902fcb7
commit
4898592c32
@ -32,13 +32,13 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
AnsiString name;
|
AnsiString name;
|
||||||
uint binding;
|
uint binding;
|
||||||
VAD *vabc =nullptr;
|
VAD * data =nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
~ShaderStageBind()
|
~ShaderStageBind()
|
||||||
{
|
{
|
||||||
SAFE_CLEAR(vabc);
|
SAFE_CLEAR(data);
|
||||||
}
|
}
|
||||||
};//struct ShaderStageBind
|
};//struct ShaderStageBind
|
||||||
|
|
||||||
@ -63,6 +63,8 @@ namespace hgl
|
|||||||
vulkan::IndexBuffer * ibo;
|
vulkan::IndexBuffer * ibo;
|
||||||
VABCreaterMaps vabc_maps;
|
VABCreaterMaps vabc_maps;
|
||||||
|
|
||||||
|
virtual VAD *CreateVAD(const AnsiString &name,const vulkan::ShaderStage *ss); ///<创建一个顶点属性缓冲区
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RenderableCreater(SceneDB *sdb,vulkan::Material *m);
|
RenderableCreater(SceneDB *sdb,vulkan::Material *m);
|
||||||
@ -70,12 +72,31 @@ namespace hgl
|
|||||||
|
|
||||||
virtual bool Init(const uint32 count); ///<初始化,参数为顶点数量
|
virtual bool Init(const uint32 count); ///<初始化,参数为顶点数量
|
||||||
|
|
||||||
virtual VAD * CreateVAD(const AnsiString &name); ///<创建一个顶点属性缓冲区创建器
|
VAD * CreateVAD(const AnsiString &name); ///<创建一个顶点属性缓冲区
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
T * CreateVADA(const AnsiString &name) ///<创建一个顶点属性缓冲区以及访问器
|
||||||
|
{
|
||||||
|
const vulkan::ShaderStage *ss=vsm->GetStageInput(name);
|
||||||
|
|
||||||
|
if(!ss)
|
||||||
|
return(nullptr);
|
||||||
|
|
||||||
|
if(ss->format!=T::GetVulkanFormat())
|
||||||
|
return(nullptr);
|
||||||
|
|
||||||
|
VAD *vad=this->CreateVAD(name);
|
||||||
|
|
||||||
|
if(!vad)
|
||||||
|
return(nullptr);
|
||||||
|
|
||||||
|
return T::Create(vad);
|
||||||
|
}
|
||||||
|
|
||||||
uint16 * CreateIBO16(uint count,const uint16 *data=nullptr); ///<创建16位的索引缓冲区
|
uint16 * CreateIBO16(uint count,const uint16 *data=nullptr); ///<创建16位的索引缓冲区
|
||||||
uint32 * CreateIBO32(uint count,const uint32 *data=nullptr); ///<创建32位的索引缓冲区
|
uint32 * CreateIBO32(uint count,const uint32 *data=nullptr); ///<创建32位的索引缓冲区
|
||||||
|
|
||||||
virtual vulkan::Renderable * Finish();
|
virtual vulkan::Renderable * Finish(); ///<结束并创建可渲染对象
|
||||||
};//class RenderableCreater
|
};//class RenderableCreater
|
||||||
}//namespace graph
|
}//namespace graph
|
||||||
}//namespace hgl
|
}//namespace hgl
|
||||||
|
@ -66,7 +66,7 @@ namespace hgl
|
|||||||
|
|
||||||
vulkan::VertexAttribBuffer *CreateVAB(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
|
vulkan::VertexAttribBuffer *CreateVAB(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
|
||||||
vulkan::VertexAttribBuffer *CreateVAB(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVAB(format,count,nullptr,sharing_mode);}
|
vulkan::VertexAttribBuffer *CreateVAB(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVAB(format,count,nullptr,sharing_mode);}
|
||||||
vulkan::VertexAttribBuffer *CreateVAB(const VertexAttribData *vbc,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVAB(vbc->GetDataType(),vbc->GetCount(),vbc->GetData(),sharing_mode);}
|
vulkan::VertexAttribBuffer *CreateVAB(const VertexAttribData *vad,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVAB(vad->GetVulkanFormat(),vad->GetCount(),vad->GetData(),sharing_mode);}
|
||||||
|
|
||||||
#define SCENE_DB_CREATE_FUNC(name) vulkan::Buffer *Create##name(VkDeviceSize size,void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE); \
|
#define SCENE_DB_CREATE_FUNC(name) vulkan::Buffer *Create##name(VkDeviceSize size,void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE); \
|
||||||
vulkan::Buffer *Create##name(VkDeviceSize size,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
|
vulkan::Buffer *Create##name(VkDeviceSize size,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
|
||||||
|
@ -12,10 +12,11 @@ SOURCE_GROUP("Material" FILES ${SG_MATERIAL_HEADER}
|
|||||||
SOURCE_GROUP("Material\\Shader" FILES ${SHADER_RESOURCE_FILES})
|
SOURCE_GROUP("Material\\Shader" FILES ${SHADER_RESOURCE_FILES})
|
||||||
|
|
||||||
|
|
||||||
SET(SG_VAB_SOURCE ${ROOT_INCLUDE_PATH}/hgl/graph/VertexAttribData.h
|
SET(SG_VAD_SOURCE ${ROOT_INCLUDE_PATH}/hgl/graph/VertexAttribData.h
|
||||||
${ROOT_INCLUDE_PATH}/hgl/graph/VertexAttribDataAccess.h)
|
${ROOT_INCLUDE_PATH}/hgl/graph/VertexAttribDataAccess.h
|
||||||
|
VertexAttribData.cpp)
|
||||||
|
|
||||||
SOURCE_GROUP("VertexAttribBuffer" FILES ${SG_VAB_SOURCE})
|
SOURCE_GROUP("VertexAttribData" FILES ${SG_VAD_SOURCE})
|
||||||
|
|
||||||
SET(SCENE_GRAPH_HEADER ${ROOT_INCLUDE_PATH}/hgl/graph/Light.h
|
SET(SCENE_GRAPH_HEADER ${ROOT_INCLUDE_PATH}/hgl/graph/Light.h
|
||||||
${ROOT_INCLUDE_PATH}/hgl/graph/SceneDB.h
|
${ROOT_INCLUDE_PATH}/hgl/graph/SceneDB.h
|
||||||
@ -78,7 +79,7 @@ add_cm_library(ULRE.SceneGraph "ULRE" ${SCENE_GRAPH_HEADER}
|
|||||||
${SG_MATERIAL_HEADER}
|
${SG_MATERIAL_HEADER}
|
||||||
${SG_MATERIAL_SOURCE}
|
${SG_MATERIAL_SOURCE}
|
||||||
|
|
||||||
${SG_VAB_SOURCE}
|
${SG_VAD_SOURCE}
|
||||||
|
|
||||||
${RENDERABLE_FILES}
|
${RENDERABLE_FILES}
|
||||||
|
|
||||||
|
@ -24,30 +24,37 @@ namespace hgl
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
VertexAttribData *RenderableCreater::CreateVAD(const AnsiString &name)
|
VAD *RenderableCreater::CreateVAD(const AnsiString &name,const vulkan::ShaderStage *ss)
|
||||||
{
|
{
|
||||||
if(!vsm)return(false);
|
if(!ss)return(nullptr);
|
||||||
|
|
||||||
ShaderStageBind *ssb;
|
ShaderStageBind *ssb;
|
||||||
|
|
||||||
if(vabc_maps.Get(name,ssb))
|
if(vabc_maps.Get(name,ssb))
|
||||||
return ssb->vabc;
|
return ssb->data;
|
||||||
|
|
||||||
|
ssb=new ShaderStageBind;
|
||||||
|
|
||||||
|
ssb->data =hgl::graph::CreateVertexAttribData(ss->base_type,ss->component,vertices_number);
|
||||||
|
ssb->name =name;
|
||||||
|
ssb->binding=ss->binding;
|
||||||
|
|
||||||
|
vabc_maps.Add(name,ssb);
|
||||||
|
|
||||||
|
return ssb->data;
|
||||||
|
}
|
||||||
|
|
||||||
|
VertexAttribData *RenderableCreater::CreateVAD(const AnsiString &name)
|
||||||
|
{
|
||||||
|
if(!vsm)return(nullptr);
|
||||||
|
if(name.IsEmpty())return(nullptr);
|
||||||
|
|
||||||
const vulkan::ShaderStage *ss=vsm->GetStageInput(name);
|
const vulkan::ShaderStage *ss=vsm->GetStageInput(name);
|
||||||
|
|
||||||
if(!ss)
|
if(!ss)
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
|
|
||||||
ssb=new ShaderStageBind;
|
return this->CreateVAD(name,ss);
|
||||||
|
|
||||||
ssb->vabc=hgl::graph::CreateVertexAttribData(ss->base_type,ss->component,vertices_number);
|
|
||||||
|
|
||||||
ssb->name=name;
|
|
||||||
ssb->binding=ss->binding;
|
|
||||||
|
|
||||||
vabc_maps.Add(name,ssb);
|
|
||||||
|
|
||||||
return ssb->vabc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16 *RenderableCreater::CreateIBO16(uint count,const uint16 *data)
|
uint16 *RenderableCreater::CreateIBO16(uint count,const uint16 *data)
|
||||||
@ -78,7 +85,7 @@ namespace hgl
|
|||||||
const auto *sp=vabc_maps.GetDataList();
|
const auto *sp=vabc_maps.GetDataList();
|
||||||
for(uint i=0;i<si_count;i++)
|
for(uint i=0;i<si_count;i++)
|
||||||
{
|
{
|
||||||
render_obj->Set((*sp)->right->binding,db->CreateVAB((*sp)->right->vabc));
|
render_obj->Set((*sp)->right->binding,db->CreateVAB((*sp)->right->data));
|
||||||
|
|
||||||
++sp;
|
++sp;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user