used VABConfigInfo at CreateMaterialInstance of TextRenderable
This commit is contained in:
parent
f55186a9c8
commit
e7ad21c82e
@ -1 +1 @@
|
||||
Subproject commit 41b0c430ed3cc09384a59f3d29e6d6405b8a045d
|
||||
Subproject commit 3031a9e4e4881060352475686cb6b9b6b84e9b24
|
@ -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);
|
||||
|
@ -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));
|
||||
|
||||
|
@ -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));
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -18,12 +18,12 @@ namespace hgl
|
||||
RectScope2f scope;
|
||||
};//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; ///<圆角精度
|
||||
};//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圆形(扇形/线圈)
|
||||
*/
|
||||
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
|
||||
{
|
||||
@ -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
|
||||
{
|
||||
@ -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,0,半径为1的球体(三角形)
|
||||
*/
|
||||
Renderable *CreateRenderableSphere(RenderResource *db,Material *mtl,const uint numberSlices);
|
||||
Renderable *CreateRenderableSphere(RenderResource *db,const VAB *vab,const uint numberSlices);
|
||||
|
||||
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
|
||||
{
|
||||
@ -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
|
||||
{
|
||||
@ -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
|
||||
{
|
||||
@ -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
|
||||
{
|
||||
@ -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 hgl
|
||||
#endif//HGL_GRAPH_INLINE_GEOMETRY_INCLUDE
|
||||
|
@ -117,8 +117,8 @@ class Pipeline;
|
||||
|
||||
struct VAConfig
|
||||
{
|
||||
VkFormat format;
|
||||
bool instance;
|
||||
VkFormat format=PF_UNDEFINED;
|
||||
bool instance=false;
|
||||
|
||||
public:
|
||||
|
||||
|
@ -52,8 +52,8 @@ public:
|
||||
|
||||
public:
|
||||
|
||||
Pipeline *CreatePipeline(MaterialInstance *, PipelineData *);
|
||||
Pipeline *CreatePipeline(MaterialInstance *,const InlinePipeline &);
|
||||
Pipeline *CreatePipeline(MaterialInstance *, PipelineData *);
|
||||
Pipeline *CreatePipeline(MaterialInstance *, const InlinePipeline &);
|
||||
|
||||
public:
|
||||
|
||||
|
@ -90,8 +90,8 @@ public: //Material
|
||||
const ShaderModule *CreateShaderModule(const OSString &filename,ShaderResource *shader_resource);
|
||||
|
||||
Material * CreateMaterial(const OSString &);
|
||||
MaterialInstance * CreateMaterialInstance(Material *);
|
||||
MaterialInstance * CreateMaterialInstance(const OSString &);
|
||||
MaterialInstance * CreateMaterialInstance(Material *,const VABConfigInfo *vab_cfg=nullptr);
|
||||
MaterialInstance * CreateMaterialInstance(const OSString &,const VABConfigInfo *vab_cfg=nullptr);
|
||||
|
||||
Renderable * CreateRenderable(const uint32_t vertex_count=0);
|
||||
TextRenderable * CreateTextRenderable(Material *);
|
||||
|
@ -15,8 +15,6 @@ struct ShaderStage
|
||||
|
||||
VertexAttribType type; ///<成份数量(如vec4中的4)
|
||||
|
||||
uint binding;
|
||||
|
||||
bool global; ///<是否全局数据
|
||||
bool dynamic; ///<是否动态数量
|
||||
};//struct ShaderStage
|
||||
|
2
res
2
res
@ -1 +1 @@
|
||||
Subproject commit 10431c5bb52464f73911c503e236baa3d0663037
|
||||
Subproject commit cff431d24a2e511112e26b6d75b74286cf697dfd
|
@ -12,9 +12,9 @@ namespace hgl
|
||||
{
|
||||
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))
|
||||
return(nullptr);
|
||||
@ -29,18 +29,18 @@ namespace hgl
|
||||
return rc.Finish();
|
||||
}
|
||||
|
||||
Renderable *CreateRenderableGBufferComposition(RenderResource *db,Material *mtl)
|
||||
Renderable *CreateRenderableGBufferComposition(RenderResource *db,const VAB *vab)
|
||||
{
|
||||
RectangleCreateInfo rci;
|
||||
|
||||
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) //这是要画矩形
|
||||
{
|
||||
@ -112,9 +112,9 @@ namespace hgl
|
||||
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;
|
||||
|
||||
@ -160,9 +160,9 @@ namespace hgl
|
||||
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))
|
||||
return(nullptr);
|
||||
@ -207,14 +207,14 @@ namespace hgl
|
||||
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 };
|
||||
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_tangent(1.0f,0.0f,0.0f);
|
||||
|
||||
RenderableCreater rc(db,mtl);
|
||||
RenderableCreater rc(db,vab);
|
||||
|
||||
if(!rc.Init(4))
|
||||
return(nullptr);
|
||||
@ -248,7 +248,7 @@ namespace hgl
|
||||
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.
|
||||
/* 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,
|
||||
@ -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,
|
||||
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))
|
||||
return(nullptr);
|
||||
@ -426,9 +426,9 @@ namespace hgl
|
||||
* @param numberSlices 切片数
|
||||
* @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 numberVertices = (numberParallels + 1) * (numberSlices + 1);
|
||||
@ -502,9 +502,9 @@ namespace hgl
|
||||
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;
|
||||
|
||||
@ -621,9 +621,9 @@ namespace hgl
|
||||
}
|
||||
}//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]
|
||||
float s = 0;
|
||||
@ -777,14 +777,14 @@ namespace hgl
|
||||
}
|
||||
}//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;
|
||||
|
||||
if(numberIndices<=0)
|
||||
return(nullptr);
|
||||
|
||||
RenderableCreater rc(db,mtl);
|
||||
RenderableCreater rc(db,vab);
|
||||
|
||||
uint numberVertices = (cci->numberSlices + 2) * 2 + (cci->numberSlices + 1) * 2;
|
||||
|
||||
@ -996,9 +996,9 @@ namespace hgl
|
||||
}
|
||||
}//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;
|
||||
|
||||
@ -1123,11 +1123,11 @@ namespace hgl
|
||||
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))
|
||||
return(nullptr);
|
||||
@ -1150,7 +1150,7 @@ namespace hgl
|
||||
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.
|
||||
/* 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
|
||||
};
|
||||
|
||||
RenderableCreater rc(db,mtl);
|
||||
RenderableCreater rc(db,vab);
|
||||
|
||||
if(!rc.Init(8))
|
||||
return(nullptr);
|
||||
|
@ -38,9 +38,14 @@ namespace hgl
|
||||
if(ssb_map.Get(name,ssb))
|
||||
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->data =hgl::graph::CreateVertexAttribData(vertices_number,va->format,va->vec_size,va->stride);
|
||||
ssb->data =vad;
|
||||
ssb->name =name;
|
||||
ssb->binding=va->binding;
|
||||
|
||||
@ -49,7 +54,6 @@ namespace hgl
|
||||
ssb_map.Add(name,ssb);
|
||||
|
||||
return ssb->data;
|
||||
|
||||
}
|
||||
|
||||
bool RenderableCreater::WriteVAD(const AnsiString &name,const void *data,const uint32_t bytes)
|
||||
|
@ -6,10 +6,10 @@ namespace hgl
|
||||
{
|
||||
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
|
||||
||stride<1||stride>8*4
|
||||
||CheckVulkanFormat(fmt))
|
||||
||!CheckVulkanFormat(fmt))
|
||||
return(nullptr);
|
||||
|
||||
return(new VertexAttribData(vertex_count,vec_size,stride,fmt));
|
||||
|
@ -15,7 +15,6 @@ void GPUDevice::InitRenderPassManage()
|
||||
|
||||
void GPUDevice::ClearRenderPassManage()
|
||||
{
|
||||
SAFE_CLEAR(device_render_pass);
|
||||
SAFE_CLEAR(render_pass_manage);
|
||||
}
|
||||
|
||||
|
@ -195,6 +195,19 @@ DeviceRenderPassManage::DeviceRenderPassManage(VkDevice dev,VkPipelineCache pc)
|
||||
DeviceRenderPassManage::~DeviceRenderPassManage()
|
||||
{
|
||||
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
|
||||
|
@ -17,12 +17,6 @@ MaterialInstance *GPUDevice::CreateMI(Material *mtl,const VABConfigInfo *vab_cfg
|
||||
|
||||
MaterialParameters *mp=CreateMP(mtl,DescriptorSetsType::Value);
|
||||
|
||||
if(!mp)
|
||||
{
|
||||
delete vab;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return(new MaterialInstance(mtl,vab,mp));
|
||||
}
|
||||
|
||||
|
@ -50,11 +50,11 @@ IndexBuffer *RenderResource::CreateIBO(IndexType index_type,uint32_t count,const
|
||||
return(buf);
|
||||
}
|
||||
|
||||
MaterialInstance *RenderResource::CreateMaterialInstance(Material *mtl)
|
||||
MaterialInstance *RenderResource::CreateMaterialInstance(Material *mtl,const VABConfigInfo *vab_cfg)
|
||||
{
|
||||
if(!mtl)return(nullptr);
|
||||
|
||||
MaterialInstance *mi=device->CreateMI(mtl);
|
||||
MaterialInstance *mi=device->CreateMI(mtl,vab_cfg);
|
||||
|
||||
if(mi)
|
||||
Add(mi);
|
||||
@ -62,14 +62,14 @@ MaterialInstance *RenderResource::CreateMaterialInstance(Material *mtl)
|
||||
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);
|
||||
|
||||
if(!mtl)
|
||||
return(nullptr);
|
||||
|
||||
return CreateMaterialInstance(mtl);
|
||||
return CreateMaterialInstance(mtl,vab_cfg);
|
||||
}
|
||||
|
||||
Renderable *RenderResource::CreateRenderable(const uint32_t vertex_count)
|
||||
|
@ -42,14 +42,10 @@ VK_NAMESPACE_BEGIN
|
||||
ss->type.basetype =(VertexAttribBaseType)*data++;
|
||||
ss->type.vec_size =*data++;
|
||||
|
||||
// ss->format =VK_NAMESPACE::GetVulkanFormat(&(ss->type));
|
||||
|
||||
str_len=*data++;
|
||||
ss->name.SetString((char *)data,str_len);
|
||||
data+=str_len;
|
||||
|
||||
ss->binding=i;
|
||||
|
||||
ss_list.Add(ss);
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,7 @@ namespace hgl
|
||||
if(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);
|
||||
}
|
||||
|
||||
@ -43,7 +43,7 @@ namespace hgl
|
||||
if(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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user