部分范例迁移到新WorkObject/CreateMaterialInstance结构
This commit is contained in:
parent
455cb0aa63
commit
66bb363035
@ -38,7 +38,7 @@ private:
|
||||
|
||||
MaterialInstance * mi_billboard =nullptr;
|
||||
Pipeline * pipeline_billboard =nullptr;
|
||||
Mesh * ro_billboard =nullptr;
|
||||
Mesh * ro_billboard =nullptr;
|
||||
|
||||
Texture2D * texture =nullptr;
|
||||
Sampler * sampler =nullptr;
|
||||
@ -47,7 +47,7 @@ private:
|
||||
|
||||
bool InitPlaneGridMP()
|
||||
{
|
||||
mtl::Material3DCreateConfig cfg(device->GetDevAttr(),"VertexLuminance3D",PrimitiveType::Lines);
|
||||
mtl::Material3DCreateConfig cfg(PrimitiveType::Lines);
|
||||
|
||||
cfg.local_to_world=true;
|
||||
|
||||
@ -73,14 +73,12 @@ private:
|
||||
|
||||
bool InitBillboardMP()
|
||||
{
|
||||
mtl::BillboardMaterialCreateConfig cfg(device->GetDevAttr(),"Billboard2D",PrimitiveType::Billboard);
|
||||
mtl::BillboardMaterialCreateConfig cfg(PrimitiveType::Billboard);
|
||||
|
||||
{
|
||||
cfg.fixed_size=true;
|
||||
|
||||
AutoDelete<mtl::MaterialCreateInfo> mci=mtl::CreateBillboard2D(&cfg);
|
||||
|
||||
mi_billboard=db->CreateMaterialInstance(mci);
|
||||
mi_billboard=CreateMaterialInstance(mtl::inline_material::Billboard2D,&cfg);
|
||||
if(!mi_billboard)return(false);
|
||||
|
||||
pipeline_billboard=CreatePipeline(mi_billboard,InlinePipeline::Solid3D,PrimitiveType::Billboard);
|
||||
|
@ -1,6 +1,6 @@
|
||||
macro(CreateProject name)
|
||||
|
||||
add_executable(${name} ${ARGN} ${VULKAN_APP_FRAMEWORK} MaterialLoader/MaterialLoader.cpp)
|
||||
add_executable(${name} ${ARGN} ${VULKAN_APP_FRAMEWORK})
|
||||
target_link_libraries(${name} ${ULRE})
|
||||
|
||||
IF(MSVC)
|
||||
|
@ -38,7 +38,7 @@ private:
|
||||
SceneNode render_root;
|
||||
|
||||
MaterialInstance * material_instance =nullptr;
|
||||
Mesh * render_obj =nullptr;
|
||||
Mesh * render_obj =nullptr;
|
||||
|
||||
Pipeline * pipeline =nullptr;
|
||||
|
||||
@ -47,18 +47,15 @@ private:
|
||||
bool InitMaterial()
|
||||
{
|
||||
{
|
||||
mtl::Material2DCreateConfig cfg(GetDevAttr(),"VertexColor2D",PrimitiveType::Triangles);
|
||||
|
||||
cfg.coordinate_system=CoordinateSystem2D::NDC;
|
||||
cfg.local_to_world=true;
|
||||
|
||||
AutoDelete<mtl::MaterialCreateInfo> mci=mtl::CreateVertexColor2D(&cfg);
|
||||
mtl::Material2DCreateConfig cfg(PrimitiveType::Triangles,
|
||||
CoordinateSystem2D::NDC,
|
||||
mtl::WithLocalToWorld::With);
|
||||
|
||||
VILConfig vil_config;
|
||||
|
||||
vil_config.Add(VAN::Color,VF_V4UN8);
|
||||
|
||||
material_instance=db->CreateMaterialInstance(mci,&vil_config);
|
||||
material_instance=CreateMaterialInstance(mtl::inline_material::VertexColor2D,&cfg,&vil_config);
|
||||
}
|
||||
|
||||
if(!material_instance)
|
||||
|
@ -38,7 +38,7 @@ private:
|
||||
struct
|
||||
{
|
||||
MaterialInstance * mi;
|
||||
Mesh * r;
|
||||
Mesh * mesh;
|
||||
}render_obj[DRAW_OBJECT_COUNT]{};
|
||||
|
||||
Pipeline * pipeline =nullptr;
|
||||
@ -48,10 +48,7 @@ private:
|
||||
bool InitMaterial()
|
||||
{
|
||||
{
|
||||
mtl::Material2DCreateConfig cfg(GetDevAttr(),"PureColor2D",PrimitiveType::Triangles);
|
||||
|
||||
cfg.coordinate_system=CoordinateSystem2D::NDC;
|
||||
cfg.local_to_world=true;
|
||||
mtl::Material2DCreateConfig cfg(PrimitiveType::Triangles,CoordinateSystem2D::NDC,mtl::WithLocalToWorld::With);
|
||||
|
||||
#ifndef USE_MATERIAL_FILE
|
||||
AutoDelete<mtl::MaterialCreateInfo> mci=mtl::CreatePureColor2D(&cfg); //走程序内置材质创建函数
|
||||
@ -95,14 +92,14 @@ private:
|
||||
|
||||
for(uint i=0;i<DRAW_OBJECT_COUNT;i++)
|
||||
{
|
||||
render_obj[i].r=db->CreateMesh(prim,render_obj[i].mi,pipeline);
|
||||
render_obj[i].mesh=db->CreateMesh(prim,render_obj[i].mi,pipeline);
|
||||
|
||||
if(!render_obj[i].r)
|
||||
if(!render_obj[i].mesh)
|
||||
return(false);
|
||||
|
||||
mat=rotate(deg2rad<double>(TRI_ROTATE_ANGLE*i),AxisVector::Z);
|
||||
|
||||
render_root.Add(new SceneNode(mat,render_obj[i].r));
|
||||
render_root.Add(new SceneNode(mat,render_obj[i].mesh));
|
||||
}
|
||||
|
||||
render_root.RefreshMatrix();
|
||||
|
@ -87,14 +87,11 @@ private:
|
||||
|
||||
bool InitAutoMaterial()
|
||||
{
|
||||
mtl::Material2DCreateConfig cfg(GetDevAttr(),"VertexColor2d",PrimitiveType::Triangles);
|
||||
mtl::Material2DCreateConfig cfg(PrimitiveType::Triangles,
|
||||
CoordinateSystem2D::NDC,
|
||||
mtl::WithLocalToWorld::Without);
|
||||
|
||||
cfg.coordinate_system=CoordinateSystem2D::NDC;
|
||||
cfg.local_to_world=false;
|
||||
|
||||
AutoDelete<mtl::MaterialCreateInfo> mci=mtl::CreateVertexColor2D(&cfg);
|
||||
|
||||
material_instance=db->CreateMaterialInstance(mci,&vil_config);
|
||||
material_instance=CreateMaterialInstance(mtl::inline_material::VertexColor2D,&cfg,&vil_config);
|
||||
|
||||
return material_instance;
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ private:
|
||||
Color4f clear_color =Color4f(0.2f,0.2f,0.2f,1.0f);
|
||||
|
||||
MaterialInstance * material_instance =nullptr;
|
||||
Mesh * render_obj =nullptr;
|
||||
Mesh * render_obj =nullptr;
|
||||
|
||||
Pipeline * pipeline =nullptr;
|
||||
|
||||
@ -46,12 +46,12 @@ private:
|
||||
|
||||
bool InitMaterial()
|
||||
{
|
||||
mtl::Material2DCreateConfig cfg(GetDevAttr(),"VertexColor2D",PrimitiveType::Triangles);
|
||||
mtl::Material2DCreateConfig cfg(PrimitiveType::Triangles,
|
||||
CoordinateSystem2D::Ortho,
|
||||
mtl::WithLocalToWorld::Without);
|
||||
|
||||
VILConfig vil_config;
|
||||
|
||||
cfg.coordinate_system =CoordinateSystem2D::Ortho;
|
||||
|
||||
cfg.position_format = POSITION_SHADER_FORMAT; //这里指定shader中使用ivec2当做顶点输入格式
|
||||
// ^
|
||||
// + 这上下两种格式要配套,否则会出错
|
||||
@ -60,11 +60,7 @@ private:
|
||||
|
||||
vil_config.Add(VAN::Color, COLOR_DATA_FORMAT); //这里指定VAB中使用RGBA8UNorm当做颜色数据格式
|
||||
|
||||
cfg.local_to_world=false;
|
||||
|
||||
AutoDelete<mtl::MaterialCreateInfo> mci=mtl::CreateVertexColor2D(&cfg);
|
||||
|
||||
material_instance=db->CreateMaterialInstance(mci,&vil_config);
|
||||
material_instance=CreateMaterialInstance(mtl::inline_material::VertexColor2D,&cfg,&vil_config);
|
||||
|
||||
if(!material_instance)
|
||||
return(false);
|
||||
|
@ -34,7 +34,7 @@ private:
|
||||
Color4f clear_color =Color4f(0.2f,0.2f,0.2f,1.0f);
|
||||
|
||||
MaterialInstance * material_instance =nullptr;
|
||||
Mesh * render_obj =nullptr;
|
||||
Mesh * render_obj =nullptr;
|
||||
|
||||
Pipeline * pipeline =nullptr;
|
||||
|
||||
@ -46,7 +46,7 @@ private:
|
||||
CoordinateSystem2D::NDC,
|
||||
mtl::WithLocalToWorld::Without);
|
||||
|
||||
material_instance=CreateMaterialInstance("VertexColor2D",&cfg); //这个是使用名称创建
|
||||
material_instance=CreateMaterialInstance(mtl::inline_material::VertexColor2D,&cfg); //这个是使用名称创建
|
||||
|
||||
return material_instance;
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ private:
|
||||
struct
|
||||
{
|
||||
MaterialInstance * mi;
|
||||
Mesh * r;
|
||||
Mesh * mesh;
|
||||
}render_obj[TexCount]{};
|
||||
|
||||
private:
|
||||
@ -144,14 +144,14 @@ private:
|
||||
|
||||
for(uint32_t i=0;i<TexCount;i++)
|
||||
{
|
||||
render_obj[i].r=db->CreateMesh(prim_rectangle,render_obj[i].mi,pipeline);
|
||||
render_obj[i].mesh=db->CreateMesh(prim_rectangle,render_obj[i].mi,pipeline);
|
||||
|
||||
if(!render_obj[i].r)
|
||||
if(!render_obj[i].mesh)
|
||||
return(false);
|
||||
|
||||
offset.x=position_data[2]*float(i);
|
||||
|
||||
render_root.CreateSubNode(translate(offset),render_obj[i].r);
|
||||
render_root.CreateSubNode(translate(offset),render_obj[i].mesh);
|
||||
}
|
||||
|
||||
render_root.RefreshMatrix();
|
||||
|
@ -45,6 +45,11 @@ public:
|
||||
};//class RegistryMaterialFactoryClass
|
||||
|
||||
#define DEFINE_MATERIAL_FACTORY_CLASS(name,cfg_type) \
|
||||
namespace inline_material \
|
||||
{ \
|
||||
constexpr const char name[]=#name; \
|
||||
} \
|
||||
\
|
||||
MaterialCreateInfo *Create##name(const VulkanDevAttr *dev_attr,cfg_type *); \
|
||||
\
|
||||
namespace \
|
||||
|
@ -74,6 +74,8 @@ namespace hgl::graph
|
||||
MaterialCreateInfo(const MaterialCreateConfig *);
|
||||
~MaterialCreateInfo()=default;
|
||||
|
||||
void SetDevice(const VulkanDevAttr *dev_attr);
|
||||
|
||||
bool SetMaterialInstance(const AnsiString &mi_glsl_codes,const uint32_t mi_struct_bytes,const uint32_t shader_stage_flag_bits);
|
||||
|
||||
bool SetLocalToWorld(const uint32_t shader_stage_flag_bits);
|
||||
@ -87,7 +89,7 @@ namespace hgl::graph
|
||||
|
||||
bool AddSampler(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name);
|
||||
|
||||
bool CreateShader(const VulkanDevAttr *dev_attr);
|
||||
bool CreateShader();
|
||||
};//class MaterialCreateInfo
|
||||
}//namespace mtl
|
||||
}//namespace hgl::graph
|
||||
|
@ -225,14 +225,17 @@ bool MaterialCreateInfo::SetLocalToWorld(const uint32_t shader_stage_flag_bits)
|
||||
return(true);
|
||||
}
|
||||
|
||||
bool MaterialCreateInfo::CreateShader(const VulkanDevAttr *dev_attr)
|
||||
void MaterialCreateInfo::SetDevice(const VulkanDevAttr *dev_attr)
|
||||
{
|
||||
ubo_range=dev_attr->physical_device->GetUBORange(); //Mali-T系/G71为16k,nVidia和Mali-G系列除G71外为64k,Intel/PowerVR为128M,AMD无限制。
|
||||
ssbo_range=dev_attr->physical_device->GetSSBORange();
|
||||
}
|
||||
|
||||
bool MaterialCreateInfo::CreateShader()
|
||||
{
|
||||
if(shader_map.IsEmpty())
|
||||
return(false);
|
||||
|
||||
ubo_range=dev_attr->physical_device->GetUBORange(); //Mali-T系/G71为16k,nVidia和Mali-G系列除G71外为64k,Intel/PowerVR为128M,AMD无限制。
|
||||
ssbo_range=dev_attr->physical_device->GetSSBORange();
|
||||
|
||||
mdi.Resort();
|
||||
|
||||
ShaderCreateInfo *sc,*last=nullptr;
|
||||
|
@ -10,6 +10,8 @@ StdMaterial::StdMaterial(const MaterialCreateConfig *mcc)
|
||||
|
||||
MaterialCreateInfo *StdMaterial::Create(const VulkanDevAttr *dev_attr)
|
||||
{
|
||||
mci->SetDevice(dev_attr);
|
||||
|
||||
if(!BeginCustomShader())
|
||||
return(nullptr);
|
||||
|
||||
@ -28,7 +30,7 @@ MaterialCreateInfo *StdMaterial::Create(const VulkanDevAttr *dev_attr)
|
||||
if(!EndCustomShader())
|
||||
return(nullptr);
|
||||
|
||||
if(!mci->CreateShader(dev_attr))
|
||||
if(!mci->CreateShader())
|
||||
return(nullptr);
|
||||
|
||||
return(mci);
|
||||
|
Loading…
x
Reference in New Issue
Block a user