Added UpdateMaterialInstance method. but no any test.
This commit is contained in:
@@ -96,5 +96,6 @@ public:
|
||||
void Render(RenderCmdBuffer *);
|
||||
|
||||
void UpdateLocalToWorld(); //刷新所有对象的LocalToWorld矩阵
|
||||
void UpdateMaterialInstance(SceneNode *);
|
||||
};//class MaterialRenderList
|
||||
VK_NAMESPACE_END
|
||||
|
@@ -40,6 +40,7 @@ namespace hgl
|
||||
virtual bool Render(RenderCmdBuffer *); ///<渲染所有对象
|
||||
|
||||
virtual void UpdateLocalToWorld(); ///<更新所有对象的变换数据
|
||||
virtual void UpdateMaterialInstance(SceneNode *); ///<有对象互换了材质实例
|
||||
|
||||
virtual void Clear(); ///<彻底清理
|
||||
};//class RenderList
|
||||
|
@@ -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>;
|
||||
|
@@ -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 *);
|
||||
|
Reference in New Issue
Block a user