used VABConfigInfo at CreateMaterialInstance of TextRenderable

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

View File

@@ -101,7 +101,7 @@ private:
Renderable *render_obj=db->CreateRenderable(VERTEX_COUNT);
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);
return(true);

View File

@@ -81,7 +81,7 @@ private:
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));

View File

@@ -171,18 +171,18 @@ private:
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)
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;
}
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;
}
@@ -287,20 +287,20 @@ private:
return(true);
}
void CreateRenderObject(Material *mtl)
void CreateRenderObject(const VAB *vab)
{
{
struct PlaneCreateInfo pci;
ro_plane=CreateRenderablePlane(db,mtl,&pci);
ro_plane=CreateRenderablePlane(db,vab,&pci);
}
{
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.y=1;
ro_torus=CreateRenderableTorus(db,mtl,&tci);
ro_torus=CreateRenderableTorus(db,vab,&tci);
}
{
@@ -325,7 +325,7 @@ private:
cci.radius=10;
cci.numberSlices=32;
ro_cylinder=CreateRenderableCylinder(db,mtl,&cci);
ro_cylinder=CreateRenderableCylinder(db,vab,&cci);
}
{
@@ -336,13 +336,13 @@ private:
cci.numberSlices=128;
cci.numberStacks=32;
ro_cone=CreateRenderableCone(db,mtl,&cci);
ro_cone=CreateRenderableCone(db,vab,&cci);
}
}
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);
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)
{
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( 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));

View File

@@ -27,6 +27,7 @@ class TestApp:public VulkanApplicationFramework
private:
Sampler * sampler =nullptr;
Material * material =nullptr;
MaterialInstance * material_instance =nullptr;
GPUBuffer * ubo_camera_info =nullptr;
GPUBuffer * ubo_color =nullptr;
@@ -56,8 +57,21 @@ private:
bool InitMaterial()
{
material_instance=db->CreateMaterialInstance(OS_TEXT("res/material/LumTextureRect2D"));
if(!material_instance)return(false);
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);
}
pipeline=CreatePipeline(material_instance,InlinePipeline::Solid2D,Prim::SolidRectangles);
if(!pipeline)return(false);

View File

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

View File

@@ -7,8 +7,8 @@
using namespace hgl;
using namespace hgl::graph;
constexpr uint32_t SCREEN_WIDTH=128;
constexpr uint32_t SCREEN_HEIGHT=128;
constexpr uint32_t SCREEN_WIDTH=256;
constexpr uint32_t SCREEN_HEIGHT=256;
constexpr uint32_t VERTEX_COUNT=4;
@@ -78,7 +78,7 @@ private:
auto render_obj=db->CreateRenderable(VERTEX_COUNT);
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);
return(true);
@@ -107,6 +107,8 @@ public:
void Resize(int w,int h)override
{
cam.width=w;
cam.height=h;
cam.vp_width=w;
cam.vp_height=h;

View File

@@ -85,16 +85,18 @@ private:
pgci.color.Set(0.5,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.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.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);
}

View File

@@ -85,7 +85,7 @@ private:
axis_mi=db->CreateMaterialInstance(axis_material);
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);
}
@@ -143,7 +143,7 @@ private:
pipeline_data=GetPipelineData(InlinePipeline::Solid3D);
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);
return(true);
@@ -156,18 +156,20 @@ private:
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;
cci.has_color=true;
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.y=1;
ro_torus=CreateRenderableTorus(db,material,&tci);
ro_torus=CreateRenderableTorus(db,vab,&tci);
}
{
@@ -192,7 +194,7 @@ private:
cci.radius=10;
cci.numberSlices=32;
ro_cylinder=CreateRenderableCylinder(db,material,&cci);
ro_cylinder=CreateRenderableCylinder(db,vab,&cci);
}
{
@@ -203,7 +205,7 @@ private:
cci.numberSlices=128;
cci.numberStacks=32;
ro_cone=CreateRenderableCone(db,material,&cci);
ro_cone=CreateRenderableCone(db,vab,&cci);
}
}

View File

@@ -56,6 +56,7 @@ public:
~TestApp()
{
SAFE_CLEAR(cube.render_list);
SAFE_CLEAR(os.pipeline);
SAFE_CLEAR(os.render_taget);
}
@@ -114,7 +115,7 @@ public:
cci.center_color=Vector4f(1,1,1,1);
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);
os.renderable_instance=db->CreateRenderableInstance(render_obj,os.material_instance,os.pipeline);
@@ -156,7 +157,7 @@ public:
{
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);
cube.renderable_instance=db->CreateRenderableInstance(render_obj,cube.material_instance,cube.pipeline);

View File

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

View File

@@ -87,8 +87,8 @@ private:
Renderable *render_obj=db->CreateRenderable(VERTEX_COUNT);
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::Color, db->CreateVBO(VF_VEC4,VERTEX_COUNT,color_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_V4F,VERTEX_COUNT,color_data)))return(false);
render_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline);
return(true);

View File

@@ -87,7 +87,7 @@ private:
auto render_obj=db->CreateRenderable(VERTEX_COUNT);
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);
renderable_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline);

View File

@@ -121,8 +121,8 @@ private:
auto render_obj=db->CreateRenderable(VERTEX_COUNT);
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::TexCoord,db->CreateVBO(VF_VEC2,VERTEX_COUNT,tex_coord_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_V2F,VERTEX_COUNT,tex_coord_data)))return(false);
if(!render_obj->Set(db->CreateIBO16(INDEX_COUNT,index_data)))return(false);
renderable_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline);

View File

@@ -87,8 +87,8 @@ private:
Renderable *render_obj=db->CreateRenderable(VERTEX_COUNT);
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::Color, db->CreateVBO(VF_VEC4,VERTEX_COUNT,color_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_V4F,VERTEX_COUNT,color_data)))return(false);
render_instance=db->CreateRenderableInstance(render_obj,material_instance,pipeline);