|
@@ -324,22 +324,43 @@ Vector2 PrimitiveMesh::get_uv2_scale(Vector2 p_margin_scale) const {
|
|
|
}
|
|
|
|
|
|
float PrimitiveMesh::get_lightmap_texel_size() const {
|
|
|
- float texel_size = GLOBAL_GET("rendering/lightmapping/primitive_meshes/texel_size");
|
|
|
+ return texel_size;
|
|
|
+}
|
|
|
|
|
|
- if (texel_size <= 0.0) {
|
|
|
- texel_size = 0.2;
|
|
|
+void PrimitiveMesh::_on_settings_changed() {
|
|
|
+ float new_texel_size = float(GLOBAL_GET("rendering/lightmapping/primitive_meshes/texel_size"));
|
|
|
+ if (new_texel_size <= 0.0) {
|
|
|
+ new_texel_size = 0.2;
|
|
|
+ }
|
|
|
+ if (texel_size == new_texel_size) {
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
- return texel_size;
|
|
|
+ texel_size = new_texel_size;
|
|
|
+ _update_lightmap_size();
|
|
|
+ request_update();
|
|
|
}
|
|
|
|
|
|
PrimitiveMesh::PrimitiveMesh() {
|
|
|
+ ERR_FAIL_NULL(RenderingServer::get_singleton());
|
|
|
mesh = RenderingServer::get_singleton()->mesh_create();
|
|
|
+
|
|
|
+ ERR_FAIL_NULL(ProjectSettings::get_singleton());
|
|
|
+ texel_size = float(GLOBAL_GET("rendering/lightmapping/primitive_meshes/texel_size"));
|
|
|
+ if (texel_size <= 0.0) {
|
|
|
+ texel_size = 0.2;
|
|
|
+ }
|
|
|
+ ProjectSettings *project_settings = ProjectSettings::get_singleton();
|
|
|
+ project_settings->connect("settings_changed", callable_mp(this, &PrimitiveMesh::_on_settings_changed));
|
|
|
}
|
|
|
|
|
|
PrimitiveMesh::~PrimitiveMesh() {
|
|
|
ERR_FAIL_NULL(RenderingServer::get_singleton());
|
|
|
RenderingServer::get_singleton()->free(mesh);
|
|
|
+
|
|
|
+ ERR_FAIL_NULL(ProjectSettings::get_singleton());
|
|
|
+ ProjectSettings *project_settings = ProjectSettings::get_singleton();
|
|
|
+ project_settings->disconnect("settings_changed", callable_mp(this, &PrimitiveMesh::_on_settings_changed));
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -350,7 +371,6 @@ void CapsuleMesh::_update_lightmap_size() {
|
|
|
if (get_add_uv2()) {
|
|
|
// size must have changed, update lightmap size hint
|
|
|
Size2i _lightmap_size_hint;
|
|
|
- float texel_size = get_lightmap_texel_size();
|
|
|
float padding = get_uv2_padding();
|
|
|
|
|
|
float radial_length = radius * Math_PI * 0.5; // circumference of 90 degree bend
|
|
@@ -365,7 +385,6 @@ void CapsuleMesh::_update_lightmap_size() {
|
|
|
|
|
|
void CapsuleMesh::_create_mesh_array(Array &p_arr) const {
|
|
|
bool _add_uv2 = get_add_uv2();
|
|
|
- float texel_size = get_lightmap_texel_size();
|
|
|
float _uv2_padding = get_uv2_padding() * texel_size;
|
|
|
|
|
|
create_mesh_array(p_arr, radius, height, radial_segments, rings, _add_uv2, _uv2_padding);
|
|
@@ -613,7 +632,6 @@ void BoxMesh::_update_lightmap_size() {
|
|
|
if (get_add_uv2()) {
|
|
|
// size must have changed, update lightmap size hint
|
|
|
Size2i _lightmap_size_hint;
|
|
|
- float texel_size = get_lightmap_texel_size();
|
|
|
float padding = get_uv2_padding();
|
|
|
|
|
|
float width = (size.x + size.z) / texel_size;
|
|
@@ -632,7 +650,6 @@ void BoxMesh::_create_mesh_array(Array &p_arr) const {
|
|
|
// With 3 faces along the width and 2 along the height of the texture we need to adjust our scale
|
|
|
// accordingly.
|
|
|
bool _add_uv2 = get_add_uv2();
|
|
|
- float texel_size = get_lightmap_texel_size();
|
|
|
float _uv2_padding = get_uv2_padding() * texel_size;
|
|
|
|
|
|
BoxMesh::create_mesh_array(p_arr, size, subdivide_w, subdivide_h, subdivide_d, _add_uv2, _uv2_padding);
|
|
@@ -937,7 +954,6 @@ void CylinderMesh::_update_lightmap_size() {
|
|
|
if (get_add_uv2()) {
|
|
|
// size must have changed, update lightmap size hint
|
|
|
Size2i _lightmap_size_hint;
|
|
|
- float texel_size = get_lightmap_texel_size();
|
|
|
float padding = get_uv2_padding();
|
|
|
|
|
|
float top_circumference = top_radius * Math_PI * 2.0;
|
|
@@ -957,7 +973,6 @@ void CylinderMesh::_update_lightmap_size() {
|
|
|
|
|
|
void CylinderMesh::_create_mesh_array(Array &p_arr) const {
|
|
|
bool _add_uv2 = get_add_uv2();
|
|
|
- float texel_size = get_lightmap_texel_size();
|
|
|
float _uv2_padding = get_uv2_padding() * texel_size;
|
|
|
|
|
|
create_mesh_array(p_arr, top_radius, bottom_radius, height, radial_segments, rings, cap_top, cap_bottom, _add_uv2, _uv2_padding);
|
|
@@ -1244,7 +1259,6 @@ void PlaneMesh::_update_lightmap_size() {
|
|
|
if (get_add_uv2()) {
|
|
|
// size must have changed, update lightmap size hint
|
|
|
Size2i _lightmap_size_hint;
|
|
|
- float texel_size = get_lightmap_texel_size();
|
|
|
float padding = get_uv2_padding();
|
|
|
|
|
|
_lightmap_size_hint.x = MAX(1.0, (size.x / texel_size) + padding);
|
|
@@ -1416,7 +1430,6 @@ void PrismMesh::_update_lightmap_size() {
|
|
|
if (get_add_uv2()) {
|
|
|
// size must have changed, update lightmap size hint
|
|
|
Size2i _lightmap_size_hint;
|
|
|
- float texel_size = get_lightmap_texel_size();
|
|
|
float padding = get_uv2_padding();
|
|
|
|
|
|
// left_to_right does not effect the surface area of the prism so we ignore that.
|
|
@@ -1440,7 +1453,6 @@ void PrismMesh::_create_mesh_array(Array &p_arr) const {
|
|
|
|
|
|
// Only used if we calculate UV2
|
|
|
bool _add_uv2 = get_add_uv2();
|
|
|
- float texel_size = get_lightmap_texel_size();
|
|
|
float _uv2_padding = get_uv2_padding() * texel_size;
|
|
|
|
|
|
float horizontal_total = size.x + size.z + 2.0 * _uv2_padding;
|
|
@@ -1762,7 +1774,6 @@ void SphereMesh::_update_lightmap_size() {
|
|
|
if (get_add_uv2()) {
|
|
|
// size must have changed, update lightmap size hint
|
|
|
Size2i _lightmap_size_hint;
|
|
|
- float texel_size = get_lightmap_texel_size();
|
|
|
float padding = get_uv2_padding();
|
|
|
|
|
|
float _width = radius * Math_TAU;
|
|
@@ -1776,7 +1787,6 @@ void SphereMesh::_update_lightmap_size() {
|
|
|
|
|
|
void SphereMesh::_create_mesh_array(Array &p_arr) const {
|
|
|
bool _add_uv2 = get_add_uv2();
|
|
|
- float texel_size = get_lightmap_texel_size();
|
|
|
float _uv2_padding = get_uv2_padding() * texel_size;
|
|
|
|
|
|
create_mesh_array(p_arr, radius, height, radial_segments, rings, is_hemisphere, _add_uv2, _uv2_padding);
|
|
@@ -1950,7 +1960,6 @@ void TorusMesh::_update_lightmap_size() {
|
|
|
if (get_add_uv2()) {
|
|
|
// size must have changed, update lightmap size hint
|
|
|
Size2i _lightmap_size_hint;
|
|
|
- float texel_size = get_lightmap_texel_size();
|
|
|
float padding = get_uv2_padding();
|
|
|
|
|
|
float min_radius = inner_radius;
|
|
@@ -2000,7 +2009,6 @@ void TorusMesh::_create_mesh_array(Array &p_arr) const {
|
|
|
|
|
|
// Only used if we calculate UV2
|
|
|
bool _add_uv2 = get_add_uv2();
|
|
|
- float texel_size = get_lightmap_texel_size();
|
|
|
float _uv2_padding = get_uv2_padding() * texel_size;
|
|
|
|
|
|
float horizontal_total = max_radius * Math_TAU + _uv2_padding;
|