used VABConfigInfo at CreateMaterialInstance of TextRenderable

This commit is contained in:
hyzboy 2021-11-30 15:01:55 +08:00
parent f55186a9c8
commit e7ad21c82e
30 changed files with 142 additions and 117 deletions

@ -1 +1 @@
Subproject commit 41b0c430ed3cc09384a59f3d29e6d6405b8a045d Subproject commit 3031a9e4e4881060352475686cb6b9b6b84e9b24

View File

@ -101,7 +101,7 @@ private:
Renderable *render_obj=db->CreateRenderable(VERTEX_COUNT); Renderable *render_obj=db->CreateRenderable(VERTEX_COUNT);
if(!render_obj)return(false); if(!render_obj)return(false);
if(!render_obj->Set(VAN::Position, db->CreateVBO(VF_VEC2,VERTEX_COUNT,vertex_data)))return(false); if(!render_obj->Set(VAN::Position, db->CreateVBO(VF_V2F,VERTEX_COUNT,vertex_data)))return(false);
render_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline); render_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline);
return(true); return(true);

View File

@ -81,7 +81,7 @@ private:
bool InitScene() bool InitScene()
{ {
ro_sphere=CreateRenderableSphere(db,material_instance->GetMaterial(),128); ro_sphere=CreateRenderableSphere(db,material_instance->GetVAB(),128);
render_root.CreateSubNode(scale(100),db->CreateRenderableInstance(ro_sphere,material_instance,pipeline_solid)); render_root.CreateSubNode(scale(100),db->CreateRenderableInstance(ro_sphere,material_instance,pipeline_solid));

View File

@ -171,18 +171,18 @@ private:
bool InitGBufferPipeline(SubpassParam *sp) bool InitGBufferPipeline(SubpassParam *sp)
{ {
sp->pipeline_triangles =gbuffer.rp->CreatePipeline(sp->material,InlinePipeline::Solid3D,Prim::Triangles); sp->pipeline_triangles =gbuffer.rp->CreatePipeline(sp->material_instance,InlinePipeline::Solid3D,Prim::Triangles);
if(!sp->pipeline_triangles) if(!sp->pipeline_triangles)
return(false); return(false);
sp->pipeline_fan =gbuffer.rp->CreatePipeline(sp->material,InlinePipeline::Solid3D,Prim::Fan); sp->pipeline_fan =gbuffer.rp->CreatePipeline(sp->material_instance,InlinePipeline::Solid3D,Prim::Fan);
return sp->pipeline_fan; return sp->pipeline_fan;
} }
bool InitCompositionPipeline(SubpassParam *sp) bool InitCompositionPipeline(SubpassParam *sp)
{ {
sp->pipeline_fan=device_render_pass->CreatePipeline(sp->material,InlinePipeline::Solid2D,Prim::Fan); sp->pipeline_fan=device_render_pass->CreatePipeline(sp->material_instance,InlinePipeline::Solid2D,Prim::Fan);
return sp->pipeline_fan; return sp->pipeline_fan;
} }
@ -287,20 +287,20 @@ private:
return(true); return(true);
} }
void CreateRenderObject(Material *mtl) void CreateRenderObject(const VAB *vab)
{ {
{ {
struct PlaneCreateInfo pci; struct PlaneCreateInfo pci;
ro_plane=CreateRenderablePlane(db,mtl,&pci); ro_plane=CreateRenderablePlane(db,vab,&pci);
} }
{ {
struct CubeCreateInfo cci; struct CubeCreateInfo cci;
ro_cube=CreateRenderableCube(db,mtl,&cci); ro_cube=CreateRenderableCube(db,vab,&cci);
} }
{ {
ro_sphere=CreateRenderableSphere(db,mtl,64); ro_sphere=CreateRenderableSphere(db,vab,64);
} }
{ {
@ -315,7 +315,7 @@ private:
tci.uv_scale.x=4; tci.uv_scale.x=4;
tci.uv_scale.y=1; tci.uv_scale.y=1;
ro_torus=CreateRenderableTorus(db,mtl,&tci); ro_torus=CreateRenderableTorus(db,vab,&tci);
} }
{ {
@ -325,7 +325,7 @@ private:
cci.radius=10; cci.radius=10;
cci.numberSlices=32; cci.numberSlices=32;
ro_cylinder=CreateRenderableCylinder(db,mtl,&cci); ro_cylinder=CreateRenderableCylinder(db,vab,&cci);
} }
{ {
@ -336,13 +336,13 @@ private:
cci.numberSlices=128; cci.numberSlices=128;
cci.numberStacks=32; cci.numberStacks=32;
ro_cone=CreateRenderableCone(db,mtl,&cci); ro_cone=CreateRenderableCone(db,vab,&cci);
} }
} }
bool InitCompositionRenderable() bool InitCompositionRenderable()
{ {
ro_gbc_plane=CreateRenderableGBufferComposition(db,sp_composition.material); ro_gbc_plane=CreateRenderableGBufferComposition(db,sp_composition.material_instance->GetVAB());
if(!ro_gbc_plane)return(false); if(!ro_gbc_plane)return(false);
ro_gbc_plane_ri=db->CreateRenderableInstance(ro_gbc_plane,sp_composition.material_instance,sp_composition.pipeline_fan); ro_gbc_plane_ri=db->CreateRenderableInstance(ro_gbc_plane,sp_composition.material_instance,sp_composition.pipeline_fan);
@ -353,7 +353,7 @@ private:
bool InitScene(SubpassParam *sp) bool InitScene(SubpassParam *sp)
{ {
CreateRenderObject(sp->material); CreateRenderObject(sp->material_instance->GetVAB());
render_root.CreateSubNode( scale(100,100,1), db->CreateRenderableInstance(ro_plane ,sp->material_instance,sp->pipeline_fan )); render_root.CreateSubNode( scale(100,100,1), db->CreateRenderableInstance(ro_plane ,sp->material_instance,sp->pipeline_fan ));
render_root.CreateSubNode( db->CreateRenderableInstance(ro_torus ,sp->material_instance,sp->pipeline_triangles)); render_root.CreateSubNode( db->CreateRenderableInstance(ro_torus ,sp->material_instance,sp->pipeline_triangles));
render_root.CreateSubNode( scale(20,20,20), db->CreateRenderableInstance(ro_sphere ,sp->material_instance,sp->pipeline_triangles)); render_root.CreateSubNode( scale(20,20,20), db->CreateRenderableInstance(ro_sphere ,sp->material_instance,sp->pipeline_triangles));

View File

@ -27,6 +27,7 @@ class TestApp:public VulkanApplicationFramework
private: private:
Sampler * sampler =nullptr; Sampler * sampler =nullptr;
Material * material =nullptr;
MaterialInstance * material_instance =nullptr; MaterialInstance * material_instance =nullptr;
GPUBuffer * ubo_camera_info =nullptr; GPUBuffer * ubo_camera_info =nullptr;
GPUBuffer * ubo_color =nullptr; GPUBuffer * ubo_color =nullptr;
@ -56,8 +57,21 @@ private:
bool InitMaterial() bool InitMaterial()
{ {
material_instance=db->CreateMaterialInstance(OS_TEXT("res/material/LumTextureRect2D")); material=db->CreateMaterial(OS_TEXT("res/material/LumTextureRect2D"));
//文本渲染Position坐标全部是使用整数这里强制要求Position输入流使用RGBA16I格式
{
VABConfigInfo vab_config;
VAConfig va_cfg;
va_cfg.format=VF_V4I16;
va_cfg.instance=false;
vab_config.Add("Position",va_cfg);
material_instance=db->CreateMaterialInstance(material,&vab_config);
if(!material_instance)return(false); if(!material_instance)return(false);
}
pipeline=CreatePipeline(material_instance,InlinePipeline::Solid2D,Prim::SolidRectangles); pipeline=CreatePipeline(material_instance,InlinePipeline::Solid2D,Prim::SolidRectangles);
if(!pipeline)return(false); if(!pipeline)return(false);

View File

@ -215,8 +215,8 @@ private:
render_obj=db->CreateRenderable(tile_count); render_obj=db->CreateRenderable(tile_count);
if(!render_obj)return(false); if(!render_obj)return(false);
render_obj->Set(VAN::Position,db->CreateVBO(VF_VEC4,tile_count,vertex_data)); render_obj->Set(VAN::Position,db->CreateVBO(VF_V4F,tile_count,vertex_data));
render_obj->Set(VAN::TexCoord,db->CreateVBO(VF_VEC4,tile_count,tex_coord_data)); render_obj->Set(VAN::TexCoord,db->CreateVBO(VF_V4F,tile_count,tex_coord_data));
render_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline); render_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline);

View File

@ -7,8 +7,8 @@
using namespace hgl; using namespace hgl;
using namespace hgl::graph; using namespace hgl::graph;
constexpr uint32_t SCREEN_WIDTH=128; constexpr uint32_t SCREEN_WIDTH=256;
constexpr uint32_t SCREEN_HEIGHT=128; constexpr uint32_t SCREEN_HEIGHT=256;
constexpr uint32_t VERTEX_COUNT=4; constexpr uint32_t VERTEX_COUNT=4;
@ -78,7 +78,7 @@ private:
auto render_obj=db->CreateRenderable(VERTEX_COUNT); auto render_obj=db->CreateRenderable(VERTEX_COUNT);
if(!render_obj)return(false); if(!render_obj)return(false);
if(!render_obj->Set(VAN::Position,db->CreateVBO(VF_VEC2,VERTEX_COUNT,vertex_data)))return(false); if(!render_obj->Set(VAN::Position,db->CreateVBO(VF_V2F,VERTEX_COUNT,vertex_data)))return(false);
renderable_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline); renderable_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline);
return(true); return(true);
@ -107,6 +107,8 @@ public:
void Resize(int w,int h)override void Resize(int w,int h)override
{ {
cam.width=w;
cam.height=h;
cam.vp_width=w; cam.vp_width=w;
cam.vp_height=h; cam.vp_height=h;

View File

@ -85,16 +85,18 @@ private:
pgci.color.Set(0.5,0,0,1); pgci.color.Set(0.5,0,0,1);
pgci.side_color.Set(1,0,0,1); pgci.side_color.Set(1,0,0,1);
ro_plane_grid[0]=CreateRenderablePlaneGrid(db,material,&pgci); const VAB *vab=material_instance->GetVAB();
ro_plane_grid[0]=CreateRenderablePlaneGrid(db,vab,&pgci);
pgci.color.Set(0,0.5,0,1); pgci.color.Set(0,0.5,0,1);
pgci.side_color.Set(0,1,0,1); pgci.side_color.Set(0,1,0,1);
ro_plane_grid[1]=CreateRenderablePlaneGrid(db,material,&pgci); ro_plane_grid[1]=CreateRenderablePlaneGrid(db,vab,&pgci);
pgci.color.Set(0,0,0.5,1); pgci.color.Set(0,0,0.5,1);
pgci.side_color.Set(0,0,1,1); pgci.side_color.Set(0,0,1,1);
ro_plane_grid[2]=CreateRenderablePlaneGrid(db,material,&pgci); ro_plane_grid[2]=CreateRenderablePlaneGrid(db,vab,&pgci);
camera->pos=Vector4f(200,200,200,1.0); camera->pos=Vector4f(200,200,200,1.0);
} }

View File

@ -85,7 +85,7 @@ private:
axis_mi=db->CreateMaterialInstance(axis_material); axis_mi=db->CreateMaterialInstance(axis_material);
if(!axis_mi)return(false); if(!axis_mi)return(false);
axis_pipeline=CreatePipeline(axis_material,InlinePipeline::Solid3D,Prim::Lines); axis_pipeline=CreatePipeline(axis_mi,InlinePipeline::Solid3D,Prim::Lines);
if(!axis_pipeline)return(false); if(!axis_pipeline)return(false);
} }
@ -143,7 +143,7 @@ private:
pipeline_data=GetPipelineData(InlinePipeline::Solid3D); pipeline_data=GetPipelineData(InlinePipeline::Solid3D);
if(!pipeline_data)return(false); if(!pipeline_data)return(false);
pipeline_solid=CreatePipeline(material,pipeline_data,Prim::Triangles); pipeline_solid=CreatePipeline(material_instance,pipeline_data,Prim::Triangles);
if(!pipeline_solid)return(false); if(!pipeline_solid)return(false);
return(true); return(true);
@ -156,18 +156,20 @@ private:
aci.size=200; aci.size=200;
ro_axis=CreateRenderableAxis(db,axis_material,&aci); ro_axis=CreateRenderableAxis(db,axis_mi->GetVAB(),&aci);
} }
const VAB *vab=material_instance->GetVAB();
{ {
struct CubeCreateInfo cci; struct CubeCreateInfo cci;
cci.has_color=true; cci.has_color=true;
cci.color=Vector4f(1,1,1,1); cci.color=Vector4f(1,1,1,1);
ro_cube=CreateRenderableCube(db,material,&cci); ro_cube=CreateRenderableCube(db,vab,&cci);
} }
{ {
ro_sphere=CreateRenderableSphere(db,material,64); ro_sphere=CreateRenderableSphere(db,vab,64);
} }
{ {
@ -182,7 +184,7 @@ private:
tci.uv_scale.x=4; tci.uv_scale.x=4;
tci.uv_scale.y=1; tci.uv_scale.y=1;
ro_torus=CreateRenderableTorus(db,material,&tci); ro_torus=CreateRenderableTorus(db,vab,&tci);
} }
{ {
@ -192,7 +194,7 @@ private:
cci.radius=10; cci.radius=10;
cci.numberSlices=32; cci.numberSlices=32;
ro_cylinder=CreateRenderableCylinder(db,material,&cci); ro_cylinder=CreateRenderableCylinder(db,vab,&cci);
} }
{ {
@ -203,7 +205,7 @@ private:
cci.numberSlices=128; cci.numberSlices=128;
cci.numberStacks=32; cci.numberStacks=32;
ro_cone=CreateRenderableCone(db,material,&cci); ro_cone=CreateRenderableCone(db,vab,&cci);
} }
} }

View File

@ -56,6 +56,7 @@ public:
~TestApp() ~TestApp()
{ {
SAFE_CLEAR(cube.render_list); SAFE_CLEAR(cube.render_list);
SAFE_CLEAR(os.pipeline);
SAFE_CLEAR(os.render_taget); SAFE_CLEAR(os.render_taget);
} }
@ -114,7 +115,7 @@ public:
cci.center_color=Vector4f(1,1,1,1); cci.center_color=Vector4f(1,1,1,1);
cci.border_color=Vector4f(1,1,1,0); cci.border_color=Vector4f(1,1,1,0);
Renderable *render_obj=CreateRenderableCircle(db,os.material_instance->GetMaterial(),&cci); Renderable *render_obj=CreateRenderableCircle(db,os.material_instance->GetVAB(),&cci);
if(!render_obj)return(false); if(!render_obj)return(false);
os.renderable_instance=db->CreateRenderableInstance(render_obj,os.material_instance,os.pipeline); os.renderable_instance=db->CreateRenderableInstance(render_obj,os.material_instance,os.pipeline);
@ -156,7 +157,7 @@ public:
{ {
CubeCreateInfo cci; CubeCreateInfo cci;
Renderable *render_obj=CreateRenderableCube(db,cube.material_instance->GetMaterial(),&cci); Renderable *render_obj=CreateRenderableCube(db,cube.material_instance->GetVAB(),&cci);
if(!render_obj)return(false); if(!render_obj)return(false);
cube.renderable_instance=db->CreateRenderableInstance(render_obj,cube.material_instance,cube.pipeline); cube.renderable_instance=db->CreateRenderableInstance(render_obj,cube.material_instance,cube.pipeline);

View File

@ -109,8 +109,8 @@ private:
if(!render_obj)return(false); if(!render_obj)return(false);
render_obj->Set(VAN::Position,db->CreateVBO(VF_VEC4,VERTEX_COUNT,vertex_data)); render_obj->Set(VAN::Position,db->CreateVBO(VF_V4F,VERTEX_COUNT,vertex_data));
render_obj->Set(VAN::TexCoord,db->CreateVBO(VF_VEC4,VERTEX_COUNT,tex_coord_data)); render_obj->Set(VAN::TexCoord,db->CreateVBO(VF_V4F,VERTEX_COUNT,tex_coord_data));
render_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline); render_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline);

View File

@ -87,8 +87,8 @@ private:
Renderable *render_obj=db->CreateRenderable(VERTEX_COUNT); Renderable *render_obj=db->CreateRenderable(VERTEX_COUNT);
if(!render_obj)return(false); if(!render_obj)return(false);
if(!render_obj->Set(VAN::Position, db->CreateVBO(VF_VEC2,VERTEX_COUNT,vertex_data)))return(false); if(!render_obj->Set(VAN::Position, db->CreateVBO(VF_V2F,VERTEX_COUNT,vertex_data)))return(false);
if(!render_obj->Set(VAN::Color, db->CreateVBO(VF_VEC4,VERTEX_COUNT,color_data)))return(false); if(!render_obj->Set(VAN::Color, db->CreateVBO(VF_V4F,VERTEX_COUNT,color_data)))return(false);
render_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline); render_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline);
return(true); return(true);

View File

@ -87,7 +87,7 @@ private:
auto render_obj=db->CreateRenderable(VERTEX_COUNT); auto render_obj=db->CreateRenderable(VERTEX_COUNT);
if(!render_obj)return(false); if(!render_obj)return(false);
if(!render_obj->Set(VAN::Position,db->CreateVBO(VF_VEC2,VERTEX_COUNT,vertex_data)))return(false); if(!render_obj->Set(VAN::Position,db->CreateVBO(VF_V2F,VERTEX_COUNT,vertex_data)))return(false);
if(!render_obj->Set(db->CreateIBO16(INDEX_COUNT,index_data)))return(false); if(!render_obj->Set(db->CreateIBO16(INDEX_COUNT,index_data)))return(false);
renderable_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline); renderable_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline);

View File

@ -121,8 +121,8 @@ private:
auto render_obj=db->CreateRenderable(VERTEX_COUNT); auto render_obj=db->CreateRenderable(VERTEX_COUNT);
if(!render_obj)return(false); if(!render_obj)return(false);
if(!render_obj->Set(VAN::Position,db->CreateVBO(VF_VEC2,VERTEX_COUNT,vertex_data)))return(false); if(!render_obj->Set(VAN::Position,db->CreateVBO(VF_V2F,VERTEX_COUNT,vertex_data)))return(false);
if(!render_obj->Set(VAN::TexCoord,db->CreateVBO(VF_VEC2,VERTEX_COUNT,tex_coord_data)))return(false); if(!render_obj->Set(VAN::TexCoord,db->CreateVBO(VF_V2F,VERTEX_COUNT,tex_coord_data)))return(false);
if(!render_obj->Set(db->CreateIBO16(INDEX_COUNT,index_data)))return(false); if(!render_obj->Set(db->CreateIBO16(INDEX_COUNT,index_data)))return(false);
renderable_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline); renderable_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline);

View File

@ -87,8 +87,8 @@ private:
Renderable *render_obj=db->CreateRenderable(VERTEX_COUNT); Renderable *render_obj=db->CreateRenderable(VERTEX_COUNT);
if(!render_obj)return(false); if(!render_obj)return(false);
if(!render_obj->Set(VAN::Position, db->CreateVBO(VF_VEC2,VERTEX_COUNT,vertex_data)))return(false); if(!render_obj->Set(VAN::Position, db->CreateVBO(VF_V2F,VERTEX_COUNT,vertex_data)))return(false);
if(!render_obj->Set(VAN::Color, db->CreateVBO(VF_VEC4,VERTEX_COUNT,color_data)))return(false); if(!render_obj->Set(VAN::Color, db->CreateVBO(VF_V4F,VERTEX_COUNT,color_data)))return(false);
render_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline); render_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline);

View File

@ -18,12 +18,12 @@ namespace hgl
RectScope2f scope; RectScope2f scope;
};//struct RectangleCreateInfo };//struct RectangleCreateInfo
Renderable *CreateRenderableRectangle(RenderResource *db,Material *mtl,const RectangleCreateInfo *rci); Renderable *CreateRenderableRectangle(RenderResource *db,const VAB *vab,const RectangleCreateInfo *rci);
/** /**
* *
*/ */
Renderable *CreateRenderableGBufferComposition(RenderResource *db,Material *mtl); Renderable *CreateRenderableGBufferComposition(RenderResource *db,const VAB *vab);
/** /**
* (/线) * (/线)
@ -34,7 +34,7 @@ namespace hgl
uint32_t round_per; ///<圆角精度 uint32_t round_per; ///<圆角精度
};//struct RoundRectangleCreateInfo:public RectangleCreateInfo };//struct RoundRectangleCreateInfo:public RectangleCreateInfo
Renderable *CreateRenderableRoundRectangle(RenderResource *db,Material *mtl,const RoundRectangleCreateInfo *rci); Renderable *CreateRenderableRoundRectangle(RenderResource *db,const VAB *vab,const RoundRectangleCreateInfo *rci);
/** /**
* *
@ -54,7 +54,7 @@ namespace hgl
/** /**
* 2D圆形(/线) * 2D圆形(/线)
*/ */
Renderable *CreateRenderableCircle(RenderResource *db,Material *mtl,const CircleCreateInfo *cci); Renderable *CreateRenderableCircle(RenderResource *db,const VAB *vab,const CircleCreateInfo *cci);
/** /**
* *
@ -73,7 +73,7 @@ namespace hgl
/** /**
* (线) * (线)
*/ */
Renderable *CreateRenderablePlaneGrid(RenderResource *db,Material *mtl,const PlaneGridCreateInfo *pgci); Renderable *CreateRenderablePlaneGrid(RenderResource *db,const VAB *vab,const PlaneGridCreateInfo *pgci);
struct PlaneCreateInfo struct PlaneCreateInfo
{ {
@ -91,7 +91,7 @@ namespace hgl
/** /**
* () * ()
*/ */
Renderable *CreateRenderablePlane(RenderResource *db,Material *mtl,const PlaneCreateInfo *pci); Renderable *CreateRenderablePlane(RenderResource *db,const VAB *vab,const PlaneCreateInfo *pci);
struct CubeCreateInfo struct CubeCreateInfo
{ {
@ -131,17 +131,17 @@ namespace hgl
/** /**
* () * ()
*/ */
Renderable *CreateRenderableCube(RenderResource *db,Material *mtl,const CubeCreateInfo *cci); Renderable *CreateRenderableCube(RenderResource *db,const VAB *vab,const CubeCreateInfo *cci);
/** /**
* (线) * (线)
*/ */
Renderable *CreateRenderableBoundingBox(RenderResource *db,Material *mtl,const CubeCreateInfo *cci); Renderable *CreateRenderableBoundingBox(RenderResource *db,const VAB *vab,const CubeCreateInfo *cci);
/** /**
* 0,0,01() * 0,0,01()
*/ */
Renderable *CreateRenderableSphere(RenderResource *db,Material *mtl,const uint numberSlices); Renderable *CreateRenderableSphere(RenderResource *db,const VAB *vab,const uint numberSlices);
struct DomeCreateInfo struct DomeCreateInfo
{ {
@ -152,7 +152,7 @@ namespace hgl
/** /**
* () * ()
*/ */
Renderable *CreateRenderableDome(RenderResource *db,Material *mtl, const DomeCreateInfo *); Renderable *CreateRenderableDome(RenderResource *db,const VAB *vab, const DomeCreateInfo *);
struct TorusCreateInfo struct TorusCreateInfo
{ {
@ -168,7 +168,7 @@ namespace hgl
/** /**
* () * ()
*/ */
Renderable *CreateRenderableTorus(RenderResource *db,Material *mtl,const TorusCreateInfo *tci); Renderable *CreateRenderableTorus(RenderResource *db,const VAB *vab,const TorusCreateInfo *tci);
struct CylinderCreateInfo struct CylinderCreateInfo
{ {
@ -180,7 +180,7 @@ namespace hgl
/** /**
* () * ()
*/ */
Renderable *CreateRenderableCylinder(RenderResource *db,Material *mtl,const CylinderCreateInfo *cci); Renderable *CreateRenderableCylinder(RenderResource *db,const VAB *vab,const CylinderCreateInfo *cci);
struct ConeCreateInfo struct ConeCreateInfo
{ {
@ -193,7 +193,7 @@ namespace hgl
/** /**
* () * ()
*/ */
Renderable *CreateRenderableCone(RenderResource *db,Material *mtl,const ConeCreateInfo *cci); Renderable *CreateRenderableCone(RenderResource *db,const VAB *vab,const ConeCreateInfo *cci);
struct AxisCreateInfo struct AxisCreateInfo
{ {
@ -214,7 +214,7 @@ namespace hgl
/** /**
* 线(线) * 线(线)
*/ */
Renderable *CreateRenderableAxis(RenderResource *db,Material *mtl,const AxisCreateInfo *aci); Renderable *CreateRenderableAxis(RenderResource *db,const VAB *vab,const AxisCreateInfo *aci);
}//namespace graph }//namespace graph
};//namespace hgl };//namespace hgl
#endif//HGL_GRAPH_INLINE_GEOMETRY_INCLUDE #endif//HGL_GRAPH_INLINE_GEOMETRY_INCLUDE

View File

@ -117,8 +117,8 @@ class Pipeline;
struct VAConfig struct VAConfig
{ {
VkFormat format; VkFormat format=PF_UNDEFINED;
bool instance; bool instance=false;
public: public:

View File

@ -53,7 +53,7 @@ public:
public: public:
Pipeline *CreatePipeline(MaterialInstance *, PipelineData *); Pipeline *CreatePipeline(MaterialInstance *, PipelineData *);
Pipeline *CreatePipeline(MaterialInstance *,const InlinePipeline &); Pipeline *CreatePipeline(MaterialInstance *, const InlinePipeline &);
public: public:

View File

@ -90,8 +90,8 @@ public: //Material
const ShaderModule *CreateShaderModule(const OSString &filename,ShaderResource *shader_resource); const ShaderModule *CreateShaderModule(const OSString &filename,ShaderResource *shader_resource);
Material * CreateMaterial(const OSString &); Material * CreateMaterial(const OSString &);
MaterialInstance * CreateMaterialInstance(Material *); MaterialInstance * CreateMaterialInstance(Material *,const VABConfigInfo *vab_cfg=nullptr);
MaterialInstance * CreateMaterialInstance(const OSString &); MaterialInstance * CreateMaterialInstance(const OSString &,const VABConfigInfo *vab_cfg=nullptr);
Renderable * CreateRenderable(const uint32_t vertex_count=0); Renderable * CreateRenderable(const uint32_t vertex_count=0);
TextRenderable * CreateTextRenderable(Material *); TextRenderable * CreateTextRenderable(Material *);

View File

@ -15,8 +15,6 @@ struct ShaderStage
VertexAttribType type; ///<成份数量(如vec4中的4) VertexAttribType type; ///<成份数量(如vec4中的4)
uint binding;
bool global; ///<是否全局数据 bool global; ///<是否全局数据
bool dynamic; ///<是否动态数量 bool dynamic; ///<是否动态数量
};//struct ShaderStage };//struct ShaderStage

2
res

@ -1 +1 @@
Subproject commit 10431c5bb52464f73911c503e236baa3d0663037 Subproject commit cff431d24a2e511112e26b6d75b74286cf697dfd

View File

@ -12,9 +12,9 @@ namespace hgl
{ {
namespace graph namespace graph
{ {
Renderable *CreateRenderableRectangle(RenderResource *db,Material *mtl,const RectangleCreateInfo *rci) Renderable *CreateRenderableRectangle(RenderResource *db,const VAB *vab,const RectangleCreateInfo *rci)
{ {
RenderableCreater rc(db,mtl); RenderableCreater rc(db,vab);
if(!rc.Init(4)) if(!rc.Init(4))
return(nullptr); return(nullptr);
@ -29,18 +29,18 @@ namespace hgl
return rc.Finish(); return rc.Finish();
} }
Renderable *CreateRenderableGBufferComposition(RenderResource *db,Material *mtl) Renderable *CreateRenderableGBufferComposition(RenderResource *db,const VAB *vab)
{ {
RectangleCreateInfo rci; RectangleCreateInfo rci;
rci.scope.Set(-1,-1,2,2); rci.scope.Set(-1,-1,2,2);
return CreateRenderableRectangle(db,mtl,&rci); return CreateRenderableRectangle(db,vab,&rci);
} }
Renderable *CreateRenderableRoundRectangle(RenderResource *db,Material *mtl,const RoundRectangleCreateInfo *rci) Renderable *CreateRenderableRoundRectangle(RenderResource *db,const VAB *vab,const RoundRectangleCreateInfo *rci)
{ {
RenderableCreater rc(db,mtl); RenderableCreater rc(db,vab);
if(rci->radius==0||rci->round_per<=1) //这是要画矩形 if(rci->radius==0||rci->round_per<=1) //这是要画矩形
{ {
@ -112,9 +112,9 @@ namespace hgl
return rc.Finish(); return rc.Finish();
} }
Renderable *CreateRenderableCircle(RenderResource *db,Material *mtl,const CircleCreateInfo *cci) Renderable *CreateRenderableCircle(RenderResource *db,const VAB *vab,const CircleCreateInfo *cci)
{ {
RenderableCreater rc(db,mtl); RenderableCreater rc(db,vab);
uint edge; uint edge;
@ -160,9 +160,9 @@ namespace hgl
return rc.Finish(); return rc.Finish();
} }
Renderable *CreateRenderablePlaneGrid(RenderResource *db,Material *mtl,const PlaneGridCreateInfo *pgci) Renderable *CreateRenderablePlaneGrid(RenderResource *db,const VAB *vab,const PlaneGridCreateInfo *pgci)
{ {
RenderableCreater rc(db,mtl); RenderableCreater rc(db,vab);
if(!rc.Init(((pgci->step.x+1)+(pgci->step.y+1))*2)) if(!rc.Init(((pgci->step.x+1)+(pgci->step.y+1))*2))
return(nullptr); return(nullptr);
@ -207,14 +207,14 @@ namespace hgl
return rc.Finish(); return rc.Finish();
} }
Renderable *CreateRenderablePlane(RenderResource *db,Material *mtl,const PlaneCreateInfo *pci) Renderable *CreateRenderablePlane(RenderResource *db,const VAB *vab,const PlaneCreateInfo *pci)
{ {
const float xy_vertices [] = { -0.5f,-0.5f,0.0f, +0.5f,-0.5f,0.0f, +0.5f,+0.5f,0.0f, -0.5f,+0.5f,0.0f }; const float xy_vertices [] = { -0.5f,-0.5f,0.0f, +0.5f,-0.5f,0.0f, +0.5f,+0.5f,0.0f, -0.5f,+0.5f,0.0f };
float xy_tex_coord[] = { 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f }; float xy_tex_coord[] = { 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f };
const Vector3f xy_normal(0.0f,0.0f,1.0f); const Vector3f xy_normal(0.0f,0.0f,1.0f);
const Vector3f xy_tangent(1.0f,0.0f,0.0f); const Vector3f xy_tangent(1.0f,0.0f,0.0f);
RenderableCreater rc(db,mtl); RenderableCreater rc(db,vab);
if(!rc.Init(4)) if(!rc.Init(4))
return(nullptr); return(nullptr);
@ -248,7 +248,7 @@ namespace hgl
return rc.Finish(); return rc.Finish();
} }
Renderable *CreateRenderableCube(RenderResource *db,Material *mtl,const CubeCreateInfo *cci) Renderable *CreateRenderableCube(RenderResource *db,const VAB *vab,const CubeCreateInfo *cci)
{ // Points of a cube. { // Points of a cube.
/* 4 5 */ constexpr float points[]={ -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, +0.5f, +0.5f, -0.5f, +0.5f, +0.5f, -0.5f, -0.5f, -0.5f, +0.5f, -0.5f, -0.5f, +0.5f, +0.5f, /* 4 5 */ constexpr float points[]={ -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, +0.5f, +0.5f, -0.5f, +0.5f, +0.5f, -0.5f, -0.5f, -0.5f, +0.5f, -0.5f, -0.5f, +0.5f, +0.5f,
/* *------------* */ +0.5f, +0.5f, +0.5f, +0.5f, +0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, +0.5f, -0.5f, +0.5f, +0.5f, -0.5f, +0.5f, -0.5f, -0.5f, /* *------------* */ +0.5f, +0.5f, +0.5f, +0.5f, +0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, +0.5f, -0.5f, +0.5f, +0.5f, -0.5f, +0.5f, -0.5f, -0.5f,
@ -271,7 +271,7 @@ namespace hgl
1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f }; 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f };
RenderableCreater rc(db,mtl); RenderableCreater rc(db,vab);
if(!rc.Init(24)) if(!rc.Init(24))
return(nullptr); return(nullptr);
@ -426,9 +426,9 @@ namespace hgl
* @param numberSlices * @param numberSlices
* @return * @return
*/ */
Renderable *CreateRenderableSphere(RenderResource *db,Material *mtl,const uint numberSlices) Renderable *CreateRenderableSphere(RenderResource *db,const VAB *vab,const uint numberSlices)
{ {
RenderableCreater rc(db,mtl); RenderableCreater rc(db,vab);
uint numberParallels = (numberSlices+1) / 2; uint numberParallels = (numberSlices+1) / 2;
uint numberVertices = (numberParallels + 1) * (numberSlices + 1); uint numberVertices = (numberParallels + 1) * (numberSlices + 1);
@ -502,9 +502,9 @@ namespace hgl
return rc.Finish(); return rc.Finish();
} }
Renderable *CreateRenderableDome(RenderResource *db,Material *mtl,const DomeCreateInfo *dci) Renderable *CreateRenderableDome(RenderResource *db,const VAB *vab,const DomeCreateInfo *dci)
{ {
RenderableCreater rc(db,mtl); RenderableCreater rc(db,vab);
uint i, j; uint i, j;
@ -621,9 +621,9 @@ namespace hgl
} }
}//namespace }//namespace
Renderable *CreateRenderableTorus(RenderResource *db,Material *mtl,const TorusCreateInfo *tci) Renderable *CreateRenderableTorus(RenderResource *db,const VAB *vab,const TorusCreateInfo *tci)
{ {
RenderableCreater rc(db,mtl); RenderableCreater rc(db,vab);
// s, t = parametric values of the equations, in the range [0,1] // s, t = parametric values of the equations, in the range [0,1]
float s = 0; float s = 0;
@ -777,14 +777,14 @@ namespace hgl
} }
}//namespace }//namespace
Renderable *CreateRenderableCylinder(RenderResource *db,Material *mtl,const CylinderCreateInfo *cci) Renderable *CreateRenderableCylinder(RenderResource *db,const VAB *vab,const CylinderCreateInfo *cci)
{ {
uint numberIndices = cci->numberSlices * 3 * 2 + cci->numberSlices * 6; uint numberIndices = cci->numberSlices * 3 * 2 + cci->numberSlices * 6;
if(numberIndices<=0) if(numberIndices<=0)
return(nullptr); return(nullptr);
RenderableCreater rc(db,mtl); RenderableCreater rc(db,vab);
uint numberVertices = (cci->numberSlices + 2) * 2 + (cci->numberSlices + 1) * 2; uint numberVertices = (cci->numberSlices + 2) * 2 + (cci->numberSlices + 1) * 2;
@ -996,9 +996,9 @@ namespace hgl
} }
}//namespace }//namespace
Renderable *CreateRenderableCone(RenderResource *db,Material *mtl,const ConeCreateInfo *cci) Renderable *CreateRenderableCone(RenderResource *db,const VAB *vab,const ConeCreateInfo *cci)
{ {
RenderableCreater rc(db,mtl); RenderableCreater rc(db,vab);
uint i, j; uint i, j;
@ -1123,11 +1123,11 @@ namespace hgl
return rc.Finish(); return rc.Finish();
} }
Renderable *CreateRenderableAxis(RenderResource *db,Material *mtl,const AxisCreateInfo *aci) Renderable *CreateRenderableAxis(RenderResource *db,const VAB *vab,const AxisCreateInfo *aci)
{ {
if(!db||!mtl||!aci)return(nullptr); if(!db||!vab||!aci)return(nullptr);
RenderableCreater rc(db,mtl); RenderableCreater rc(db,vab);
if(!rc.Init(6)) if(!rc.Init(6))
return(nullptr); return(nullptr);
@ -1150,7 +1150,7 @@ namespace hgl
return rc.Finish(); return rc.Finish();
} }
Renderable *CreateRenderableBoundingBox(RenderResource *db,Material *mtl,const CubeCreateInfo *cci) Renderable *CreateRenderableBoundingBox(RenderResource *db,const VAB *vab,const CubeCreateInfo *cci)
{ {
// Points of a cube. // Points of a cube.
/* 4 5 */ const float points[]={ -0.5,-0.5, 0.5, 0.5,-0.5,0.5, 0.5,-0.5,-0.5, -0.5,-0.5,-0.5, /* 4 5 */ const float points[]={ -0.5,-0.5, 0.5, 0.5,-0.5,0.5, 0.5,-0.5,-0.5, -0.5,-0.5,-0.5,
@ -1172,7 +1172,7 @@ namespace hgl
0,4, 1,5, 2,6, 3,7 0,4, 1,5, 2,6, 3,7
}; };
RenderableCreater rc(db,mtl); RenderableCreater rc(db,vab);
if(!rc.Init(8)) if(!rc.Init(8))
return(nullptr); return(nullptr);

View File

@ -38,9 +38,14 @@ namespace hgl
if(ssb_map.Get(name,ssb)) if(ssb_map.Get(name,ssb))
return ssb->data; return ssb->data;
VAD *vad=hgl::graph::CreateVertexAttribData(vertices_number,va->format,va->vec_size,va->stride);
if(!vad)
return(nullptr);
ssb=new ShaderStageBind; ssb=new ShaderStageBind;
ssb->data =hgl::graph::CreateVertexAttribData(vertices_number,va->format,va->vec_size,va->stride); ssb->data =vad;
ssb->name =name; ssb->name =name;
ssb->binding=va->binding; ssb->binding=va->binding;
@ -49,7 +54,6 @@ namespace hgl
ssb_map.Add(name,ssb); ssb_map.Add(name,ssb);
return ssb->data; return ssb->data;
} }
bool RenderableCreater::WriteVAD(const AnsiString &name,const void *data,const uint32_t bytes) bool RenderableCreater::WriteVAD(const AnsiString &name,const void *data,const uint32_t bytes)

View File

@ -6,10 +6,10 @@ namespace hgl
{ {
VAD *CreateVertexAttribData(const uint32_t vertex_count,const VkFormat fmt,const int vec_size,const uint stride) VAD *CreateVertexAttribData(const uint32_t vertex_count,const VkFormat fmt,const int vec_size,const uint stride)
{ {
if(!vertex_count<=0 if(vertex_count<=0
||vec_size<1||vec_size>4 ||vec_size<1||vec_size>4
||stride<1||stride>8*4 ||stride<1||stride>8*4
||CheckVulkanFormat(fmt)) ||!CheckVulkanFormat(fmt))
return(nullptr); return(nullptr);
return(new VertexAttribData(vertex_count,vec_size,stride,fmt)); return(new VertexAttribData(vertex_count,vec_size,stride,fmt));

View File

@ -15,7 +15,6 @@ void GPUDevice::InitRenderPassManage()
void GPUDevice::ClearRenderPassManage() void GPUDevice::ClearRenderPassManage()
{ {
SAFE_CLEAR(device_render_pass);
SAFE_CLEAR(render_pass_manage); SAFE_CLEAR(render_pass_manage);
} }

View File

@ -195,6 +195,19 @@ DeviceRenderPassManage::DeviceRenderPassManage(VkDevice dev,VkPipelineCache pc)
DeviceRenderPassManage::~DeviceRenderPassManage() DeviceRenderPassManage::~DeviceRenderPassManage()
{ {
SAFE_CLEAR(hash); SAFE_CLEAR(hash);
const int count=RenderPassList.GetCount();
auto *obj=RenderPassList.GetDataList();
for(int i=0;i<count;i++)
{
delete (*obj)->right;
++obj;
}
RenderPassList.Clear();
} }
namespace namespace

View File

@ -17,12 +17,6 @@ MaterialInstance *GPUDevice::CreateMI(Material *mtl,const VABConfigInfo *vab_cfg
MaterialParameters *mp=CreateMP(mtl,DescriptorSetsType::Value); MaterialParameters *mp=CreateMP(mtl,DescriptorSetsType::Value);
if(!mp)
{
delete vab;
return nullptr;
}
return(new MaterialInstance(mtl,vab,mp)); return(new MaterialInstance(mtl,vab,mp));
} }

View File

@ -50,11 +50,11 @@ IndexBuffer *RenderResource::CreateIBO(IndexType index_type,uint32_t count,const
return(buf); return(buf);
} }
MaterialInstance *RenderResource::CreateMaterialInstance(Material *mtl) MaterialInstance *RenderResource::CreateMaterialInstance(Material *mtl,const VABConfigInfo *vab_cfg)
{ {
if(!mtl)return(nullptr); if(!mtl)return(nullptr);
MaterialInstance *mi=device->CreateMI(mtl); MaterialInstance *mi=device->CreateMI(mtl,vab_cfg);
if(mi) if(mi)
Add(mi); Add(mi);
@ -62,14 +62,14 @@ MaterialInstance *RenderResource::CreateMaterialInstance(Material *mtl)
return mi; return mi;
} }
MaterialInstance *RenderResource::CreateMaterialInstance(const OSString &mtl_filename) MaterialInstance *RenderResource::CreateMaterialInstance(const OSString &mtl_filename,const VABConfigInfo *vab_cfg)
{ {
Material *mtl=this->CreateMaterial(mtl_filename); Material *mtl=this->CreateMaterial(mtl_filename);
if(!mtl) if(!mtl)
return(nullptr); return(nullptr);
return CreateMaterialInstance(mtl); return CreateMaterialInstance(mtl,vab_cfg);
} }
Renderable *RenderResource::CreateRenderable(const uint32_t vertex_count) Renderable *RenderResource::CreateRenderable(const uint32_t vertex_count)

View File

@ -42,14 +42,10 @@ VK_NAMESPACE_BEGIN
ss->type.basetype =(VertexAttribBaseType)*data++; ss->type.basetype =(VertexAttribBaseType)*data++;
ss->type.vec_size =*data++; ss->type.vec_size =*data++;
// ss->format =VK_NAMESPACE::GetVulkanFormat(&(ss->type));
str_len=*data++; str_len=*data++;
ss->name.SetString((char *)data,str_len); ss->name.SetString((char *)data,str_len);
data+=str_len; data+=str_len;
ss->binding=i;
ss_list.Add(ss); ss_list.Add(ss);
} }

View File

@ -35,7 +35,7 @@ namespace hgl
if(vbo_position) if(vbo_position)
delete vbo_position; delete vbo_position;
vbo_position =device->CreateVBO(PF_RGBA16I,max_count); vbo_position =device->CreateVBO(VF_V4I16,max_count);
Set(VAN::Position,vbo_position); Set(VAN::Position,vbo_position);
} }
@ -43,7 +43,7 @@ namespace hgl
if(vbo_tex_coord) if(vbo_tex_coord)
delete vbo_tex_coord; delete vbo_tex_coord;
vbo_tex_coord =device->CreateVBO(VF_VEC4,max_count); vbo_tex_coord =device->CreateVBO(VF_V4F,max_count);
Set(VAN::TexCoord,vbo_tex_coord); Set(VAN::TexCoord,vbo_tex_coord);
} }
} }