From e3c63958d77af74c4e396d0ddafbe6a11b0c95b6 Mon Sep 17 00:00:00 2001 From: Relintai Date: Sun, 24 Mar 2024 18:02:13 +0100 Subject: [PATCH] VertexLights2D singleton better data setup. --- modules/vertex_lights_2d/SCsub | 1 + .../vertex_lights_2d/vertex_light_data.cpp | 33 ++++++++ modules/vertex_lights_2d/vertex_light_data.h | 83 +++++++++++++++++++ modules/vertex_lights_2d/vertex_lights_2d.cpp | 7 ++ modules/vertex_lights_2d/vertex_lights_2d.h | 33 ++------ 5 files changed, 133 insertions(+), 24 deletions(-) create mode 100644 modules/vertex_lights_2d/vertex_light_data.cpp create mode 100644 modules/vertex_lights_2d/vertex_light_data.h diff --git a/modules/vertex_lights_2d/SCsub b/modules/vertex_lights_2d/SCsub index 32429a9a2..8a4e41ca5 100644 --- a/modules/vertex_lights_2d/SCsub +++ b/modules/vertex_lights_2d/SCsub @@ -6,3 +6,4 @@ module_env = env.Clone() module_env.add_source_files(env.modules_sources,"register_types.cpp") module_env.add_source_files(env.modules_sources,"vertex_lights_2d.cpp") +module_env.add_source_files(env.modules_sources,"vertex_light_data.cpp") diff --git a/modules/vertex_lights_2d/vertex_light_data.cpp b/modules/vertex_lights_2d/vertex_light_data.cpp new file mode 100644 index 000000000..95cef854e --- /dev/null +++ b/modules/vertex_lights_2d/vertex_light_data.cpp @@ -0,0 +1,33 @@ +/*************************************************************************/ +/* vertex_light_data.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* PANDEMONIUM ENGINE */ +/* https://github.com/Relintai/pandemonium_engine */ +/*************************************************************************/ +/* Copyright (c) 2022-present Péter Magyar. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "vertex_light_data.h" + diff --git a/modules/vertex_lights_2d/vertex_light_data.h b/modules/vertex_lights_2d/vertex_light_data.h new file mode 100644 index 000000000..b3fca57ea --- /dev/null +++ b/modules/vertex_lights_2d/vertex_light_data.h @@ -0,0 +1,83 @@ +#ifndef VERTEX_LIGHT_DATA_H +#define VERTEX_LIGHT_DATA_H + +/*************************************************************************/ +/* vertex_light_data.h */ +/*************************************************************************/ +/* This file is part of: */ +/* PANDEMONIUM ENGINE */ +/* https://github.com/Relintai/pandemonium_engine */ +/*************************************************************************/ +/* Copyright (c) 2022-present Péter Magyar. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "core/containers/hash_map.h" +#include "core/containers/rid.h" +#include "core/containers/vector.h" +#include "core/math/color.h" +#include "core/math/vector2i.h" + +#include "vertex_lights_2d.h" + +class VertexLightMap2D; +class VertexLightQuadrant2D; +class VertexLightData2D; + +class VertexLightData2D : public RID_Data { +public: + Vector2 position; + Color color; + VertexLights2D::VertexLight2DMode mode; + Vector2i z_range; + Vector2i layer_range; + int item_cull_mask; + + VertexLightMap2D *map; + VertexLightQuadrant2D *quadrant; + + VertexLightData2D() { + item_cull_mask = 1; + map = NULL; + quadrant = NULL; + } +}; + +class VertexLightQuadrant2D : public RID_Data { +public: + LocalVector lights; + + VertexLightMap2D *map; + + VertexLightQuadrant2D() { + map = NULL; + } +}; + +class VertexLightMap2D : public RID_Data { +public: + HashMap quadrants; + Vector2i quadrant_size; +}; + +#endif diff --git a/modules/vertex_lights_2d/vertex_lights_2d.cpp b/modules/vertex_lights_2d/vertex_lights_2d.cpp index 956164f5b..fba721fc7 100644 --- a/modules/vertex_lights_2d/vertex_lights_2d.cpp +++ b/modules/vertex_lights_2d/vertex_lights_2d.cpp @@ -31,6 +31,10 @@ #include "vertex_lights_2d.h" +#include "core/config/project_settings.h" + +#include "vertex_light_data.h" + /* Transform VertexLights2D::get_transform() const { return _transform; @@ -93,6 +97,9 @@ VertexLights2D::VertexLights2D() { ERR_FAIL_COND(_self); _self = this; + + GLOBAL_DEF("vertex_lights_2d/default_quadrant_size", Vector2i(256, 256)); + _default_quadrant_size = GLOBAL_GET("vertex_lights_2d/default_quadrant_size"); } VertexLights2D::~VertexLights2D() { diff --git a/modules/vertex_lights_2d/vertex_lights_2d.h b/modules/vertex_lights_2d/vertex_lights_2d.h index 05bee6926..216f6f362 100644 --- a/modules/vertex_lights_2d/vertex_lights_2d.h +++ b/modules/vertex_lights_2d/vertex_lights_2d.h @@ -37,8 +37,12 @@ #include "core/containers/hash_map.h" #include "core/containers/vector.h" #include "core/math/color.h" +#include "core/math/vector2i.h" + +class VertexLightMap2D; +class VertexLightQuadrant2D; +class VertexLightData2D; -#include "core/math/transform.h" class VertexLights2D : public Object { GDCLASS(VertexLights2D, Object); @@ -87,29 +91,10 @@ public: protected: static void _bind_methods(); - struct VertexLightData2D { - Vector2 position; - Color color; - VertexLight2DMode mode; - Vector2i z_range; - Vector2i layer_range; - int item_cull_mask; - - VertexLightData2D() { - item_cull_mask = 1; - } - }; - - struct VertexLightQuadrant2D { - HashMap lights; - Vector2i size; - }; - - struct VertexLightMap2D { - HashMap quadrants; - }; - - HashMap _maps; + mutable RID_Owner map_owner; + mutable RID_Owner quadrant_owner; + mutable RID_Owner light_data_owner; + Vector2i _default_quadrant_size; static VertexLights2D *_self;