remove RenderablePrimitiveCreater.h, fixed auto_instance.cpp/auto_merge_material_instance.cpp examples, can RUN.

This commit is contained in:
2024-05-25 22:47:26 +08:00
parent 6740764f07
commit 8d3cd8d561
11 changed files with 74 additions and 80 deletions

View File

@@ -35,10 +35,10 @@ public:
PrimitiveCreater(VertexDataManager *);
virtual ~PrimitiveCreater();
virtual bool Init(const AnsiString &name,const VkDeviceSize vertices_count,const VkDeviceSize index_count,IndexType it=IndexType::AUTO); ///<初始化,参数为顶点数量
virtual bool Init(const AnsiString &name,const VkDeviceSize vertices_count,const VkDeviceSize index_count=0,IndexType it=IndexType::AUTO); ///<初始化,参数为顶点数量
void Clear(); ///<清除创建器数据
public: //顶点缓冲区
const VkDeviceSize GetVertexCount()const{ return vertices_number; } ///<取得顶点数量

View File

@@ -5,6 +5,7 @@
#include<hgl/graph/VKPipeline.h>
#include<hgl/graph/VKDescriptorSet.h>
#include<hgl/graph/VKPrimitive.h>
#include<hgl/graph/PrimitiveCreater.h>
#include<hgl/graph/VKBuffer.h>
#include<hgl/graph/VKSampler.h>
#include<hgl/graph/VKTexture.h>
@@ -148,6 +149,7 @@ public: //Material
MaterialInstance * CreateMaterialInstance(const mtl::MaterialCreateInfo *,const VILConfig *vil_cfg=nullptr);
Renderable * CreateRenderable(Primitive *r,MaterialInstance *mi,Pipeline *p);
Renderable * CreateRenderable(PrimitiveCreater *pc,MaterialInstance *mi,Pipeline *p);
Sampler * CreateSampler(VkSamplerCreateInfo *sci=nullptr);
Sampler * CreateSampler(Texture *);

View File

@@ -1,56 +0,0 @@
#ifndef HGL_VK_RENDERABLE_PRIMITIVE_CREATER_INCLUDE
#define HGL_VK_RENDERABLE_PRIMITIVE_CREATER_INCLUDE
#include<hgl/graph/VKRenderResource.h>
VK_NAMESPACE_BEGIN
/**
* 可绘制图元创建器
*/
class RenderablePrimitiveCreater
{
RenderResource *rr;
VkDeviceSize vertex_count;
Primitive *prim;
public:
RenderablePrimitiveCreater(RenderResource *_rr,const AnsiString &name,VkDeviceSize vc)
{
rr=_rr;
vertex_count=vc;
prim=rr->CreatePrimitive(name,vertex_count);
}
VAB *SetVAB(const AnsiString &name,const VkFormat &fmt,const void *buf)
{
VAB *vab=rr->CreateVAB(fmt,vertex_count,buf);
if(!vab)
return(nullptr);
prim->SetVAB(name,vab);
return(vab);
}
IndexBuffer *SetIndex(const IndexType &it,const void *buf,const VkDeviceSize index_count)
{
IndexBuffer *ibo=rr->CreateIBO(it,index_count,buf);
if(!ibo)
return(nullptr);
prim->SetIndex(ibo,0,index_count);
return(ibo);
}
Renderable *Create(MaterialInstance *mi,Pipeline *p)
{
return rr->CreateRenderable(prim,mi,p);
}
};//class RenderablePrimitiveCreater
VK_NAMESPACE_END
#endif // HGL_VK_RENDERABLE_PRIMITIVE_CREATER_INCLUDE

View File

@@ -16,7 +16,7 @@ struct Material2DCreateConfig:public MaterialCreateConfig
public:
Material2DCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name,const bool &mi,const Prim &p):MaterialCreateConfig(da,name,mi,p)
Material2DCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name,const Prim &p):MaterialCreateConfig(da,name,p)
{
rt_output.color=1; //输出一个颜色
rt_output.depth=false; //不输出深度
@@ -45,7 +45,7 @@ public:
if(off)return off;
off=position_format.Comp(cfg.position_format);
return off;
}

View File

@@ -17,7 +17,7 @@ struct Material3DCreateConfig:public MaterialCreateConfig
public:
Material3DCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name,const bool &mi,const Prim &p):MaterialCreateConfig(da,name,mi,p)
Material3DCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name,const Prim &p):MaterialCreateConfig(da,name,p)
{
rt_output.color=1; //输出一个颜色
rt_output.depth=true; //不输出深度

View File

@@ -29,32 +29,35 @@ struct MaterialCreateConfig
public:
MaterialCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name,const bool mi,const Prim &p)
MaterialCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name,const Prim &p)
{
dev_attr=da;
mtl_name=name;
material_instance=mi;
material_instance=false;
shader_stage_flag_bit=VK_SHADER_STAGE_VERTEX_BIT|VK_SHADER_STAGE_FRAGMENT_BIT;
prim=p;
}
int Comp(const MaterialCreateConfig &cfg)const
virtual int Comp(const MaterialCreateConfig &cfg)const
{
int off;
off=material_instance-cfg.material_instance;
if(off)return(off);
off=hgl_cmp(rt_output,cfg.rt_output);
if(off)return(off);
off=(int)prim-(int)cfg.prim;
if(off)return(off);
return shader_stage_flag_bit-cfg.shader_stage_flag_bit;
off=shader_stage_flag_bit-cfg.shader_stage_flag_bit;
return off;
}
CompOperator(const MaterialCreateConfig &,Comp)