add CreateVADA function in RenderableCreater
This commit is contained in:
parent
7ee902fcb7
commit
4898592c32
@ -32,13 +32,13 @@ namespace hgl
|
||||
{
|
||||
AnsiString name;
|
||||
uint binding;
|
||||
VAD *vabc =nullptr;
|
||||
VAD * data =nullptr;
|
||||
|
||||
public:
|
||||
|
||||
~ShaderStageBind()
|
||||
{
|
||||
SAFE_CLEAR(vabc);
|
||||
SAFE_CLEAR(data);
|
||||
}
|
||||
};//struct ShaderStageBind
|
||||
|
||||
@ -63,6 +63,8 @@ namespace hgl
|
||||
vulkan::IndexBuffer * ibo;
|
||||
VABCreaterMaps vabc_maps;
|
||||
|
||||
virtual VAD *CreateVAD(const AnsiString &name,const vulkan::ShaderStage *ss); ///<创建一个顶点属性缓冲区
|
||||
|
||||
public:
|
||||
|
||||
RenderableCreater(SceneDB *sdb,vulkan::Material *m);
|
||||
@ -70,12 +72,31 @@ namespace hgl
|
||||
|
||||
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位的索引缓冲区
|
||||
uint32 * CreateIBO32(uint count,const uint32 *data=nullptr); ///<创建32位的索引缓冲区
|
||||
|
||||
virtual vulkan::Renderable * Finish();
|
||||
virtual vulkan::Renderable * Finish(); ///<结束并创建可渲染对象
|
||||
};//class RenderableCreater
|
||||
}//namespace graph
|
||||
}//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,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); \
|
||||
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})
|
||||
|
||||
|
||||
SET(SG_VAB_SOURCE ${ROOT_INCLUDE_PATH}/hgl/graph/VertexAttribData.h
|
||||
${ROOT_INCLUDE_PATH}/hgl/graph/VertexAttribDataAccess.h)
|
||||
SET(SG_VAD_SOURCE ${ROOT_INCLUDE_PATH}/hgl/graph/VertexAttribData.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
|
||||
${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_SOURCE}
|
||||
|
||||
${SG_VAB_SOURCE}
|
||||
${SG_VAD_SOURCE}
|
||||
|
||||
${RENDERABLE_FILES}
|
||||
|
||||
|
@ -24,30 +24,37 @@ namespace hgl
|
||||
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;
|
||||
|
||||
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);
|
||||
|
||||
if(!ss)
|
||||
return(nullptr);
|
||||
|
||||
ssb=new ShaderStageBind;
|
||||
|
||||
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;
|
||||
return this->CreateVAD(name,ss);
|
||||
}
|
||||
|
||||
uint16 *RenderableCreater::CreateIBO16(uint count,const uint16 *data)
|
||||
@ -78,7 +85,7 @@ namespace hgl
|
||||
const auto *sp=vabc_maps.GetDataList();
|
||||
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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user