Flag dirty dependencies when GeometryInstance dependencies change in renderer
Normally dependencies are only set dirty when changed during culling, but that misses changes that happen in the renderer (like a new shader being set in a material)
This commit is contained in:
parent
f0326297b3
commit
c4a8284dec
@ -145,6 +145,7 @@ void RasterizerSceneGLES3::_geometry_instance_dependency_changed(Dependency::Dep
|
|||||||
case Dependency::DEPENDENCY_CHANGED_MULTIMESH:
|
case Dependency::DEPENDENCY_CHANGED_MULTIMESH:
|
||||||
case Dependency::DEPENDENCY_CHANGED_SKELETON_DATA: {
|
case Dependency::DEPENDENCY_CHANGED_SKELETON_DATA: {
|
||||||
static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
|
static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
|
||||||
|
static_cast<GeometryInstanceGLES3 *>(p_tracker->userdata)->data->dirty_dependencies = true;
|
||||||
} break;
|
} break;
|
||||||
case Dependency::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES: {
|
case Dependency::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES: {
|
||||||
GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_tracker->userdata);
|
GeometryInstanceGLES3 *ginstance = static_cast<GeometryInstanceGLES3 *>(p_tracker->userdata);
|
||||||
@ -160,6 +161,7 @@ void RasterizerSceneGLES3::_geometry_instance_dependency_changed(Dependency::Dep
|
|||||||
|
|
||||||
void RasterizerSceneGLES3::_geometry_instance_dependency_deleted(const RID &p_dependency, DependencyTracker *p_tracker) {
|
void RasterizerSceneGLES3::_geometry_instance_dependency_deleted(const RID &p_dependency, DependencyTracker *p_tracker) {
|
||||||
static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
|
static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
|
||||||
|
static_cast<GeometryInstanceGLES3 *>(p_tracker->userdata)->data->dirty_dependencies = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneGLES3::_geometry_instance_add_surface_with_material(GeometryInstanceGLES3 *ginstance, uint32_t p_surface, GLES3::SceneMaterialData *p_material, uint32_t p_material_id, uint32_t p_shader_id, RID p_mesh) {
|
void RasterizerSceneGLES3::_geometry_instance_add_surface_with_material(GeometryInstanceGLES3 *ginstance, uint32_t p_surface, GLES3::SceneMaterialData *p_material, uint32_t p_material_id, uint32_t p_shader_id, RID p_mesh) {
|
||||||
|
@ -3771,6 +3771,7 @@ void RenderForwardClustered::_geometry_instance_dependency_changed(Dependency::D
|
|||||||
case Dependency::DEPENDENCY_CHANGED_MULTIMESH:
|
case Dependency::DEPENDENCY_CHANGED_MULTIMESH:
|
||||||
case Dependency::DEPENDENCY_CHANGED_SKELETON_DATA: {
|
case Dependency::DEPENDENCY_CHANGED_SKELETON_DATA: {
|
||||||
static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
|
static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
|
||||||
|
static_cast<GeometryInstanceForwardClustered *>(p_tracker->userdata)->data->dirty_dependencies = true;
|
||||||
} break;
|
} break;
|
||||||
case Dependency::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES: {
|
case Dependency::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES: {
|
||||||
GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_tracker->userdata);
|
GeometryInstanceForwardClustered *ginstance = static_cast<GeometryInstanceForwardClustered *>(p_tracker->userdata);
|
||||||
@ -3785,6 +3786,7 @@ void RenderForwardClustered::_geometry_instance_dependency_changed(Dependency::D
|
|||||||
}
|
}
|
||||||
void RenderForwardClustered::_geometry_instance_dependency_deleted(const RID &p_dependency, DependencyTracker *p_tracker) {
|
void RenderForwardClustered::_geometry_instance_dependency_deleted(const RID &p_dependency, DependencyTracker *p_tracker) {
|
||||||
static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
|
static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
|
||||||
|
static_cast<GeometryInstanceForwardClustered *>(p_tracker->userdata)->data->dirty_dependencies = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderGeometryInstance *RenderForwardClustered::geometry_instance_create(RID p_base) {
|
RenderGeometryInstance *RenderForwardClustered::geometry_instance_create(RID p_base) {
|
||||||
|
@ -2674,6 +2674,7 @@ void RenderForwardMobile::_geometry_instance_dependency_changed(Dependency::Depe
|
|||||||
case Dependency::DEPENDENCY_CHANGED_MULTIMESH:
|
case Dependency::DEPENDENCY_CHANGED_MULTIMESH:
|
||||||
case Dependency::DEPENDENCY_CHANGED_SKELETON_DATA: {
|
case Dependency::DEPENDENCY_CHANGED_SKELETON_DATA: {
|
||||||
static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
|
static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
|
||||||
|
static_cast<GeometryInstanceForwardMobile *>(p_tracker->userdata)->data->dirty_dependencies = true;
|
||||||
} break;
|
} break;
|
||||||
case Dependency::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES: {
|
case Dependency::DEPENDENCY_CHANGED_MULTIMESH_VISIBLE_INSTANCES: {
|
||||||
GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_tracker->userdata);
|
GeometryInstanceForwardMobile *ginstance = static_cast<GeometryInstanceForwardMobile *>(p_tracker->userdata);
|
||||||
@ -2688,6 +2689,7 @@ void RenderForwardMobile::_geometry_instance_dependency_changed(Dependency::Depe
|
|||||||
}
|
}
|
||||||
void RenderForwardMobile::_geometry_instance_dependency_deleted(const RID &p_dependency, DependencyTracker *p_tracker) {
|
void RenderForwardMobile::_geometry_instance_dependency_deleted(const RID &p_dependency, DependencyTracker *p_tracker) {
|
||||||
static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
|
static_cast<RenderGeometryInstance *>(p_tracker->userdata)->_mark_dirty();
|
||||||
|
static_cast<GeometryInstanceForwardMobile *>(p_tracker->userdata)->data->dirty_dependencies = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* misc */
|
/* misc */
|
||||||
|
Loading…
Reference in New Issue
Block a user