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);
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);

View File

@ -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,01()
*/
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

View File

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

View File

@ -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:

View File

@ -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 *);

View File

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

2
res

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

View File

@ -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);

View File

@ -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)

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)
{
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));

View File

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

View File

@ -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

View File

@ -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));
}

View File

@ -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)

View File

@ -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);
}

View File

@ -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);
}
}