From 57ffe2211b850bc0d93a2092fac8c1b01061f1da Mon Sep 17 00:00:00 2001 From: Relintai Date: Thu, 24 Mar 2022 21:50:16 +0100 Subject: [PATCH] Added material cache support for Voxelman, and Terraman's bake texture mesher step type. --- modules/terraman/world/jobs/terrain_prop_job.cpp | 12 ++++++++++-- .../terraman/world/jobs/terrain_terrain_job.cpp | 12 ++++++++++-- modules/voxelman/world/jobs/voxel_prop_job.cpp | 14 +++++++++++--- modules/voxelman/world/jobs/voxel_terrain_job.cpp | 14 +++++++++++--- 4 files changed, 42 insertions(+), 10 deletions(-) diff --git a/modules/terraman/world/jobs/terrain_prop_job.cpp b/modules/terraman/world/jobs/terrain_prop_job.cpp index 843eab1e1..d2da717aa 100644 --- a/modules/terraman/world/jobs/terrain_prop_job.cpp +++ b/modules/terraman/world/jobs/terrain_prop_job.cpp @@ -524,8 +524,16 @@ void TerrainPropJob::step_type_merge_verts() { void TerrainPropJob::step_type_bake_texture() { Ref chunk = _chunk; - Ref mat = chunk->get_library()->material_lod_get(0); - Ref spmat = chunk->get_library()->material_lod_get(0); + Ref lmat; + + if (chunk->material_cache_key_has()) { + lmat = chunk->get_library()->material_cache_get(_chunk->material_cache_key_get())->material_lod_get(_current_mesh); + } else { + lmat = chunk->get_library()->material_lod_get(_current_mesh); + } + + Ref mat = lmat; + Ref spmat = lmat; Ref tex; if (mat.is_valid()) { diff --git a/modules/terraman/world/jobs/terrain_terrain_job.cpp b/modules/terraman/world/jobs/terrain_terrain_job.cpp index e27a59487..f4a89eb97 100644 --- a/modules/terraman/world/jobs/terrain_terrain_job.cpp +++ b/modules/terraman/world/jobs/terrain_terrain_job.cpp @@ -598,8 +598,16 @@ void TerrainTerrainJob::step_type_merge_verts() { void TerrainTerrainJob::step_type_bake_texture() { Ref chunk = _chunk; - Ref mat = chunk->get_library()->material_lod_get(0); - Ref spmat = chunk->get_library()->material_lod_get(0); + Ref lmat; + + if (chunk->material_cache_key_has()) { + lmat = chunk->get_library()->material_cache_get(_chunk->material_cache_key_get())->material_lod_get(_current_mesh); + } else { + lmat = chunk->get_library()->material_lod_get(_current_mesh); + } + + Ref mat = lmat; + Ref spmat = lmat; Ref tex; if (mat.is_valid()) { diff --git a/modules/voxelman/world/jobs/voxel_prop_job.cpp b/modules/voxelman/world/jobs/voxel_prop_job.cpp index 841b6b1f8..d92accf93 100644 --- a/modules/voxelman/world/jobs/voxel_prop_job.cpp +++ b/modules/voxelman/world/jobs/voxel_prop_job.cpp @@ -76,7 +76,7 @@ int VoxelPropJob::get_jobs_step_count() const { void VoxelPropJob::phase_physics_process() { ERR_FAIL_COND(!_chunk.is_valid()); - + Ref chunk = _chunk; //TODO this should only update the differences @@ -525,8 +525,16 @@ void VoxelPropJob::step_type_merge_verts() { void VoxelPropJob::step_type_bake_texture() { Ref chunk = _chunk; - Ref mat = chunk->get_library()->material_lod_get(0); - Ref spmat = chunk->get_library()->material_lod_get(0); + Ref lmat; + + if (chunk->material_cache_key_has()) { + lmat = chunk->get_library()->material_cache_get(_chunk->material_cache_key_get())->material_lod_get(_current_mesh); + } else { + lmat = chunk->get_library()->material_lod_get(_current_mesh); + } + + Ref mat = lmat; + Ref spmat = lmat; Ref tex; if (mat.is_valid()) { diff --git a/modules/voxelman/world/jobs/voxel_terrain_job.cpp b/modules/voxelman/world/jobs/voxel_terrain_job.cpp index eaaff61ca..a0ecb912b 100644 --- a/modules/voxelman/world/jobs/voxel_terrain_job.cpp +++ b/modules/voxelman/world/jobs/voxel_terrain_job.cpp @@ -283,7 +283,7 @@ void VoxelTerrainJob::phase_collider() { void VoxelTerrainJob::phase_physics_process() { ERR_FAIL_COND(!_chunk.is_valid()); - + Ref chunk = _chunk; if (temp_arr_collider.size() != 0) { @@ -806,8 +806,16 @@ void VoxelTerrainJob::step_type_merge_verts() { void VoxelTerrainJob::step_type_bake_texture() { Ref chunk = _chunk; - Ref mat = chunk->get_library()->material_lod_get(0); - Ref spmat = chunk->get_library()->material_lod_get(0); + Ref lmat; + + if (chunk->material_cache_key_has()) { + lmat = chunk->get_library()->material_cache_get(_chunk->material_cache_key_get())->material_lod_get(_current_mesh); + } else { + lmat = chunk->get_library()->material_lod_get(_current_mesh); + } + + Ref mat = lmat; + Ref spmat = lmat; Ref tex; if (mat.is_valid()) {