Showing and hiding geometry updates shadows
Showing and hiding geometry nodes was not showing or hiding their respective shadows. This fixes this by marking any affected lights as dirty. Fixes #29856
This commit is contained in:
parent
871a9d5d56
commit
236ce550c0
1 changed files with 12 additions and 0 deletions
|
@ -660,6 +660,18 @@ void VisualServerScene::instance_set_visible(RID p_instance, bool p_visible) {
|
|||
|
||||
instance->visible = p_visible;
|
||||
|
||||
// when showing or hiding geometry, lights must be kept up to date to show / hide shadows
|
||||
if ((1 << instance->base_type) & VS::INSTANCE_GEOMETRY_MASK) {
|
||||
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(instance->base_data);
|
||||
|
||||
if (geom->can_cast_shadows) {
|
||||
for (List<Instance *>::Element *E = geom->lighting.front(); E; E = E->next()) {
|
||||
InstanceLightData *light = static_cast<InstanceLightData *>(E->get()->base_data);
|
||||
light->shadow_dirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch (instance->base_type) {
|
||||
case VS::INSTANCE_LIGHT: {
|
||||
if (VSG::storage->light_get_type(instance->base) != VS::LIGHT_DIRECTIONAL && instance->octree_id && instance->scenario) {
|
||||
|
|
Loading…
Reference in a new issue