Added UpdateMaterialInstance method. but no any test.

This commit is contained in:
2024-08-30 03:36:01 +08:00
parent 726a8ec635
commit 72ceffeda2
8 changed files with 81 additions and 7 deletions

View File

@@ -96,5 +96,6 @@ public:
void Render(RenderCmdBuffer *);
void UpdateLocalToWorld(); //刷新所有对象的LocalToWorld矩阵
void UpdateMaterialInstance(SceneNode *);
};//class MaterialRenderList
VK_NAMESPACE_END

View File

@@ -40,6 +40,7 @@ namespace hgl
virtual bool Render(RenderCmdBuffer *); ///<渲染所有对象
virtual void UpdateLocalToWorld(); ///<更新所有对象的变换数据
virtual void UpdateMaterialInstance(SceneNode *); ///<有对象互换了材质实例
virtual void Clear(); ///<彻底清理
};//class RenderList

View File

@@ -13,13 +13,15 @@ namespace hgl
struct RenderNode
{
SceneNode *scene_node;
uint index; ///<在MaterialRenderList中的索引
uint32 l2w_version;
uint32 l2w_index;
SceneNode * scene_node;
Vector3f world_position;
float to_camera_distance;
uint32 l2w_version;
uint32 l2w_index;
Vector3f world_position;
float to_camera_distance;
};
using RenderNodeList=List<RenderNode>;

View File

@@ -103,6 +103,20 @@ public:
const PrimitiveDataBuffer *GetDataBuffer ()const{return primitive_data_buffer;}
const PrimitiveRenderData *GetRenderData ()const{return primitive_render_data;}
public:
bool ChangeMaterialInstance(MaterialInstance *mi)
{
if(!mi)
return(false);
if(mi->GetMaterial()!=mat_inst->GetMaterial()) //不能换母材质
return(false);
mat_inst=mi;
return(true);
}
};//class Renderable
Renderable *CreateRenderable(Primitive *,MaterialInstance *,Pipeline *);