diff options
author | Marcel Offermans <marrs@xs4all.nl> | 2023-12-12 13:20:41 +0100 |
---|---|---|
committer | Marcel Offermans <marrs@xs4all.nl> | 2024-01-20 08:07:31 +0100 |
commit | 25f573ca63d4fb99edb6e28255d55166c5efa84f (patch) | |
tree | 06da888cc915df38057241e46f3c879d90136f68 /servers/rendering/renderer_rd/storage_rd | |
parent | 96296e476ffda2d4c36680b2271e9eeff0c3b9f8 (diff) | |
download | redot-engine-25f573ca63d4fb99edb6e28255d55166c5efa84f.tar.gz |
Add a reflection mask to the reflection probes.
Co-authored-by: Bastiaan Olij <mux213@gmail.com>
Diffstat (limited to 'servers/rendering/renderer_rd/storage_rd')
-rw-r--r-- | servers/rendering/renderer_rd/storage_rd/light_storage.cpp | 19 | ||||
-rw-r--r-- | servers/rendering/renderer_rd/storage_rd/light_storage.h | 3 |
2 files changed, 20 insertions, 2 deletions
diff --git a/servers/rendering/renderer_rd/storage_rd/light_storage.cpp b/servers/rendering/renderer_rd/storage_rd/light_storage.cpp index 21c6425a87..f0e3d0090f 100644 --- a/servers/rendering/renderer_rd/storage_rd/light_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/light_storage.cpp @@ -1119,6 +1119,14 @@ void LightStorage::reflection_probe_set_cull_mask(RID p_probe, uint32_t p_layers reflection_probe->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_REFLECTION_PROBE); } +void LightStorage::reflection_probe_set_reflection_mask(RID p_probe, uint32_t p_layers) { + ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_probe); + ERR_FAIL_NULL(reflection_probe); + + reflection_probe->reflection_mask = p_layers; + reflection_probe->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_REFLECTION_PROBE); +} + void LightStorage::reflection_probe_set_resolution(RID p_probe, int p_resolution) { ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_probe); ERR_FAIL_NULL(reflection_probe); @@ -1168,6 +1176,13 @@ uint32_t LightStorage::reflection_probe_get_cull_mask(RID p_probe) const { return reflection_probe->cull_mask; } +uint32_t LightStorage::reflection_probe_get_reflection_mask(RID p_probe) const { + const ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_probe); + ERR_FAIL_NULL_V(reflection_probe, 0); + + return reflection_probe->reflection_mask; +} + Vector3 LightStorage::reflection_probe_get_size(RID p_probe) const { const ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_probe); ERR_FAIL_NULL_V(reflection_probe, Vector3()); @@ -1681,7 +1696,7 @@ void LightStorage::update_reflection_probe_buffer(RenderDataRD *p_render_data, c Vector3 extents = probe->size / 2; - rpi->cull_mask = probe->cull_mask; + rpi->cull_mask = probe->reflection_mask; reflection_ubo.box_extents[0] = extents.x; reflection_ubo.box_extents[1] = extents.y; @@ -1693,7 +1708,7 @@ void LightStorage::update_reflection_probe_buffer(RenderDataRD *p_render_data, c reflection_ubo.box_offset[0] = origin_offset.x; reflection_ubo.box_offset[1] = origin_offset.y; reflection_ubo.box_offset[2] = origin_offset.z; - reflection_ubo.mask = probe->cull_mask; + reflection_ubo.mask = probe->reflection_mask; reflection_ubo.intensity = probe->intensity; reflection_ubo.ambient_mode = probe->ambient_mode; diff --git a/servers/rendering/renderer_rd/storage_rd/light_storage.h b/servers/rendering/renderer_rd/storage_rd/light_storage.h index f5b846362a..45226ec47c 100644 --- a/servers/rendering/renderer_rd/storage_rd/light_storage.h +++ b/servers/rendering/renderer_rd/storage_rd/light_storage.h @@ -232,6 +232,7 @@ private: bool box_projection = false; bool enable_shadows = false; uint32_t cull_mask = (1 << 20) - 1; + uint32_t reflection_mask = (1 << 20) - 1; float mesh_lod_threshold = 0.01; float baked_exposure = 1.0; @@ -797,6 +798,7 @@ public: virtual void reflection_probe_set_enable_box_projection(RID p_probe, bool p_enable) override; virtual void reflection_probe_set_enable_shadows(RID p_probe, bool p_enable) override; virtual void reflection_probe_set_cull_mask(RID p_probe, uint32_t p_layers) override; + virtual void reflection_probe_set_reflection_mask(RID p_probe, uint32_t p_layers) override; virtual void reflection_probe_set_resolution(RID p_probe, int p_resolution) override; virtual void reflection_probe_set_mesh_lod_threshold(RID p_probe, float p_ratio) override; @@ -805,6 +807,7 @@ public: virtual AABB reflection_probe_get_aabb(RID p_probe) const override; virtual RS::ReflectionProbeUpdateMode reflection_probe_get_update_mode(RID p_probe) const override; virtual uint32_t reflection_probe_get_cull_mask(RID p_probe) const override; + virtual uint32_t reflection_probe_get_reflection_mask(RID p_probe) const override; virtual Vector3 reflection_probe_get_size(RID p_probe) const override; virtual Vector3 reflection_probe_get_origin_offset(RID p_probe) const override; virtual float reflection_probe_get_origin_max_distance(RID p_probe) const override; |