Skip to content

Commit

Permalink
Make primitive meshes react to texel size change
Browse files Browse the repository at this point in the history
  • Loading branch information
BastiaanOlij committed Jul 25, 2024
1 parent f0e20ef commit b2974c5
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 3 deletions.
23 changes: 20 additions & 3 deletions scene/resources/3d/primitive_meshes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -324,22 +324,39 @@ 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");

if (texel_size <= 0.0) {
texel_size = 0.2;
return 0.2;
}

return texel_size;
}

void PrimitiveMesh::_on_settings_changed() {
float new_texel_size = float(GLOBAL_GET("rendering/lightmapping/primitive_meshes/texel_size"));
if (texel_size != new_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();
texel_size = float(GLOBAL_GET("rendering/lightmapping/primitive_meshes/texel_size"));

ERR_FAIL_NULL(ProjectSettings::get_singleton());
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));
}

/**
Expand Down
3 changes: 3 additions & 0 deletions scene/resources/3d/primitive_meshes.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ class PrimitiveMesh : public Mesh {

bool add_uv2 = false;
float uv2_padding = 2.0;
float texel_size = 0.2;

// make sure we do an update after we've finished constructing our object
mutable bool pending_request = true;
Expand All @@ -76,6 +77,8 @@ class PrimitiveMesh : public Mesh {
float get_lightmap_texel_size() const;
virtual void _update_lightmap_size(){};

void _on_settings_changed();

public:
virtual int get_surface_count() const override;
virtual int surface_get_array_len(int p_idx) const override;
Expand Down

0 comments on commit b2974c5

Please sign in to comment.