update Geometry2D/3D and RenderableCreater to best new
This commit is contained in:
parent
8c32fb4d3c
commit
ec3919626e
@ -34,9 +34,9 @@ private:
|
|||||||
vulkan::Material * material =nullptr;
|
vulkan::Material * material =nullptr;
|
||||||
vulkan::MaterialInstance * material_instance =nullptr;
|
vulkan::MaterialInstance * material_instance =nullptr;
|
||||||
|
|
||||||
vulkan::Renderable *ro_rectangle =nullptr;/*,
|
vulkan::Renderable *ro_rectangle =nullptr,
|
||||||
*ro_circle =nullptr,
|
*ro_circle =nullptr,
|
||||||
*ro_round_rectangle =nullptr;*/
|
*ro_round_rectangle =nullptr;
|
||||||
|
|
||||||
vulkan::Buffer * ubo_world_matrix =nullptr;
|
vulkan::Buffer * ubo_world_matrix =nullptr;
|
||||||
vulkan::Buffer * ubo_color_material =nullptr;
|
vulkan::Buffer * ubo_color_material =nullptr;
|
||||||
@ -69,29 +69,29 @@ private:
|
|||||||
ro_rectangle=CreateRenderableRectangle(db,material,&rci);
|
ro_rectangle=CreateRenderableRectangle(db,material,&rci);
|
||||||
}
|
}
|
||||||
|
|
||||||
//{
|
{
|
||||||
// struct RoundRectangleCreateInfo rrci;
|
struct RoundRectangleCreateInfo rrci;
|
||||||
|
|
||||||
// rrci.scope.Set(SCREEN_WIDTH-30,10,20,20);
|
rrci.scope.Set(SCREEN_WIDTH-30,10,20,20);
|
||||||
// rrci.radius=5;
|
rrci.radius=5;
|
||||||
// rrci.round_per=5;
|
rrci.round_per=5;
|
||||||
|
|
||||||
// ro_round_rectangle=CreateRenderableRoundRectangle(db,material,&rrci);
|
ro_round_rectangle=CreateRenderableRoundRectangle(db,material,&rrci);
|
||||||
//}
|
}
|
||||||
|
|
||||||
//{
|
{
|
||||||
// struct CircleCreateInfo cci;
|
struct CircleCreateInfo cci;
|
||||||
|
|
||||||
// cci.center.x=SCREEN_WIDTH/2;
|
cci.center.x=SCREEN_WIDTH/2;
|
||||||
// cci.center.y=SCREEN_HEIGHT/2;
|
cci.center.y=SCREEN_HEIGHT/2;
|
||||||
|
|
||||||
// cci.radius.x=SCREEN_WIDTH*0.35;
|
cci.radius.x=SCREEN_WIDTH*0.35;
|
||||||
// cci.radius.y=SCREEN_HEIGHT*0.35;
|
cci.radius.y=SCREEN_HEIGHT*0.35;
|
||||||
|
|
||||||
// cci.field_count=8;
|
cci.field_count=8;
|
||||||
|
|
||||||
// ro_circle=CreateRenderableCircle(db,material,&cci);
|
ro_circle=CreateRenderableCircle(db,material,&cci);
|
||||||
//}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vulkan::Buffer *CreateUBO(const AnsiString &name,const VkDeviceSize size,void *data)
|
vulkan::Buffer *CreateUBO(const AnsiString &name,const VkDeviceSize size,void *data)
|
||||||
@ -145,8 +145,8 @@ private:
|
|||||||
bool InitScene()
|
bool InitScene()
|
||||||
{
|
{
|
||||||
render_root.Add(db->CreateRenderableInstance(pipeline,material_instance,ro_rectangle));
|
render_root.Add(db->CreateRenderableInstance(pipeline,material_instance,ro_rectangle));
|
||||||
// render_root.Add(db->CreateRenderableInstance(pipeline,material_instance,ro_round_rectangle));
|
render_root.Add(db->CreateRenderableInstance(pipeline,material_instance,ro_round_rectangle));
|
||||||
// render_root.Add(db->CreateRenderableInstance(pipeline,material_instance,ro_circle));
|
render_root.Add(db->CreateRenderableInstance(pipeline,material_instance,ro_circle));
|
||||||
|
|
||||||
render_root.ExpendToList(&render_list);
|
render_root.ExpendToList(&render_list);
|
||||||
BuildCommandBuffer(&render_list);
|
BuildCommandBuffer(&render_list);
|
||||||
|
@ -30,9 +30,10 @@ namespace hgl
|
|||||||
|
|
||||||
struct ShaderStageBind
|
struct ShaderStageBind
|
||||||
{
|
{
|
||||||
AnsiString name;
|
AnsiString name;
|
||||||
uint binding;
|
uint binding;
|
||||||
VAD * data =nullptr;
|
VAD * data =nullptr;
|
||||||
|
vulkan::VAB * vab =nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -63,19 +64,21 @@ namespace hgl
|
|||||||
vulkan::IndexBuffer * ibo;
|
vulkan::IndexBuffer * ibo;
|
||||||
VADMaps vab_maps;
|
VADMaps vab_maps;
|
||||||
|
|
||||||
virtual VAD *CreateVAD(const AnsiString &name,const vulkan::ShaderStage *ss); ///<创建一个顶点属性缓冲区
|
protected:
|
||||||
|
|
||||||
|
virtual VAD *CreateVAD(const AnsiString &name,const vulkan::ShaderStage *ss); ///<创建一个顶点属性缓冲区
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RenderableCreater(SceneDB *sdb,vulkan::Material *m);
|
RenderableCreater(SceneDB *sdb,vulkan::Material *m);
|
||||||
virtual ~RenderableCreater()=default;
|
virtual ~RenderableCreater()=default;
|
||||||
|
|
||||||
virtual bool Init(const uint32 count); ///<初始化,参数为顶点数量
|
virtual bool Init(const uint32 count); ///<初始化,参数为顶点数量
|
||||||
|
|
||||||
VAD * CreateVAD(const AnsiString &name); ///<创建一个顶点属性缓冲区
|
VAD * CreateVAD(const AnsiString &name); ///<创建一个顶点属性缓冲区
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
T * CreateVADA(const AnsiString &name) ///<创建一个顶点属性缓冲区以及访问器
|
T * CreateVADA(const AnsiString &name) ///<创建一个顶点属性缓冲区以及访问器
|
||||||
{
|
{
|
||||||
const vulkan::ShaderStage *ss=vsm->GetStageInput(name);
|
const vulkan::ShaderStage *ss=vsm->GetStageInput(name);
|
||||||
|
|
||||||
@ -97,10 +100,12 @@ namespace hgl
|
|||||||
return vada;
|
return vada;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16 * CreateIBO16(uint count,const uint16 *data=nullptr); ///<创建16位的索引缓冲区
|
bool WriteVAD(const AnsiString &name,const void *data,const uint32_t bytes); ///<直接写入顶点属性数据
|
||||||
uint32 * CreateIBO32(uint count,const uint32 *data=nullptr); ///<创建32位的索引缓冲区
|
|
||||||
|
|
||||||
virtual vulkan::Renderable * Finish(); ///<结束并创建可渲染对象
|
uint16 * CreateIBO16(uint count,const uint16 *data=nullptr); ///<创建16位的索引缓冲区
|
||||||
|
uint32 * CreateIBO32(uint count,const uint32 *data=nullptr); ///<创建32位的索引缓冲区
|
||||||
|
|
||||||
|
virtual vulkan::Renderable * Finish(); ///<结束并创建可渲染对象
|
||||||
};//class RenderableCreater
|
};//class RenderableCreater
|
||||||
}//namespace graph
|
}//namespace graph
|
||||||
}//namespace hgl
|
}//namespace hgl
|
||||||
|
@ -77,6 +77,8 @@ public:
|
|||||||
}
|
}
|
||||||
};//class VertexAttribBuffer:public Buffer
|
};//class VertexAttribBuffer:public Buffer
|
||||||
|
|
||||||
|
using VAB=VertexAttribBuffer;
|
||||||
|
|
||||||
class IndexBuffer:public Buffer
|
class IndexBuffer:public Buffer
|
||||||
{
|
{
|
||||||
VkIndexType index_type;
|
VkIndexType index_type;
|
||||||
|
2
res
2
res
@ -1 +1 @@
|
|||||||
Subproject commit 394fe76188845b306575e0f68fe587a286ab1d14
|
Subproject commit c6eafccb4e3db9336cbfeef610c3a7f114016213
|
File diff suppressed because it is too large
Load Diff
@ -38,6 +38,8 @@ namespace hgl
|
|||||||
ssb->data =hgl::graph::CreateVertexAttribData(ss->base_type,ss->component,vertices_number);
|
ssb->data =hgl::graph::CreateVertexAttribData(ss->base_type,ss->component,vertices_number);
|
||||||
ssb->name =name;
|
ssb->name =name;
|
||||||
ssb->binding=ss->binding;
|
ssb->binding=ss->binding;
|
||||||
|
|
||||||
|
ssb->vab =nullptr;
|
||||||
|
|
||||||
vab_maps.Add(name,ssb);
|
vab_maps.Add(name,ssb);
|
||||||
|
|
||||||
@ -57,6 +59,39 @@ namespace hgl
|
|||||||
return this->CreateVAD(name,ss);
|
return this->CreateVAD(name,ss);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RenderableCreater::WriteVAD(const AnsiString &name,const void *data,const uint32_t bytes)
|
||||||
|
{
|
||||||
|
if(!vsm)return(false);
|
||||||
|
if(name.IsEmpty())return(false);
|
||||||
|
if(!data)return(false);
|
||||||
|
if(!bytes)return(false);
|
||||||
|
|
||||||
|
ShaderStageBind *ssb;
|
||||||
|
|
||||||
|
if(vab_maps.Get(name,ssb))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
const vulkan::ShaderStage *ss=vsm->GetStageInput(name);
|
||||||
|
|
||||||
|
if(!ss)
|
||||||
|
return(nullptr);
|
||||||
|
|
||||||
|
if(ss->stride*vertices_number!=bytes)
|
||||||
|
return(nullptr);
|
||||||
|
|
||||||
|
ssb=new ShaderStageBind;
|
||||||
|
|
||||||
|
ssb->data =nullptr;
|
||||||
|
ssb->name =name;
|
||||||
|
ssb->binding=ss->binding;
|
||||||
|
|
||||||
|
ssb->vab =db->CreateVAB(ss->format,vertices_number,data);
|
||||||
|
|
||||||
|
vab_maps.Add(name,ssb);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
uint16 *RenderableCreater::CreateIBO16(uint count,const uint16 *data)
|
uint16 *RenderableCreater::CreateIBO16(uint count,const uint16 *data)
|
||||||
{
|
{
|
||||||
if(!ibo)return(nullptr);
|
if(!ibo)return(nullptr);
|
||||||
@ -85,7 +120,10 @@ namespace hgl
|
|||||||
const auto *sp=vab_maps.GetDataList();
|
const auto *sp=vab_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->data));
|
if((*sp)->right->vab)
|
||||||
|
render_obj->Set((*sp)->right->binding,(*sp)->right->vab);
|
||||||
|
else
|
||||||
|
render_obj->Set((*sp)->right->binding,db->CreateVAB((*sp)->right->data));
|
||||||
|
|
||||||
++sp;
|
++sp;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user