diff options
author | RĂ©mi Verschelde <remi@verschelde.fr> | 2021-06-17 00:58:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-17 00:58:02 +0200 |
commit | ae44e7ed9c1a12e339092e1af0599db87674530d (patch) | |
tree | 5191d90e436da24e7eb69ca14694740cba1b70e2 /servers/rendering/renderer_scene_cull.h | |
parent | 341cb8da311698d685b390524d0f20795f1774d7 (diff) | |
parent | 6e98c4cd502949fc3659c882ac671a69457251b4 (diff) |
Merge pull request #49666 from reduz/refactor-visibility-notifier-3d
Refactor VisibilityNotifier3D
Diffstat (limited to 'servers/rendering/renderer_scene_cull.h')
-rw-r--r-- | servers/rendering/renderer_scene_cull.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/servers/rendering/renderer_scene_cull.h b/servers/rendering/renderer_scene_cull.h index bdfbea95a2..d9466d8b04 100644 --- a/servers/rendering/renderer_scene_cull.h +++ b/servers/rendering/renderer_scene_cull.h @@ -118,6 +118,8 @@ public: virtual void occluder_initialize(RID p_occluder); virtual void occluder_set_mesh(RID p_occluder, const PackedVector3Array &p_vertices, const PackedInt32Array &p_indices); + /* VISIBILITY NOTIFIER API */ + RendererSceneOcclusionCull *dummy_occlusion_culling; /* SCENARIO API */ @@ -243,6 +245,8 @@ public: } }; + struct InstanceVisibilityNotifierData; + struct InstanceData { // Store instance pointer as well as common instance processing information, // to make processing more cache friendly. @@ -271,6 +275,7 @@ public: union { uint64_t instance_data_rid; RendererSceneRender::GeometryInstance *instance_geometry; + InstanceVisibilityNotifierData *visibility_notifier; }; Instance *instance = nullptr; int32_t parent_array_index = -1; @@ -611,6 +616,18 @@ public: RID instance; }; + struct InstanceVisibilityNotifierData : public InstanceBaseData { + bool just_visible = false; + uint64_t visible_in_frame = 0; + RID base; + SelfList<InstanceVisibilityNotifierData> list_element; + InstanceVisibilityNotifierData() : + list_element(this) {} + }; + + SpinLock visible_notifier_list_lock; + SelfList<InstanceVisibilityNotifierData>::List visible_notifier_list; + struct InstanceLightData : public InstanceBaseData { RID instance; uint64_t last_version; @@ -1123,6 +1140,8 @@ public: void set_scene_render(RendererSceneRender *p_scene_render); + virtual void update_visibility_notifiers(); + RendererSceneCull(); virtual ~RendererSceneCull(); }; |