Apparently, calling emit signal and set_process_internal form a separate thread is not smart.

This commit is contained in:
Relintai 2020-03-24 18:42:01 +01:00
parent 3689371503
commit 87d387388c
2 changed files with 15 additions and 7 deletions

View File

@ -293,7 +293,6 @@ void VoxelChunkDefault::next_phase() {
if (_abort_build) { if (_abort_build) {
_current_build_phase = BUILD_PHASE_DONE; _current_build_phase = BUILD_PHASE_DONE;
_is_generating = false; _is_generating = false;
set_process_internal(false);
return; return;
} }
@ -303,13 +302,8 @@ void VoxelChunkDefault::next_phase() {
if (_current_build_phase >= _max_build_phases) { if (_current_build_phase >= _max_build_phases) {
_current_build_phase = BUILD_PHASE_DONE; _current_build_phase = BUILD_PHASE_DONE;
_is_generating = false; _is_generating = false;
set_process_internal(false);
emit_signal("mesh_generation_finished", this); call_deferred("emit_build_finished");
if (_voxel_world != NULL) {
_voxel_world->on_chunk_mesh_generation_finished(this);
}
} }
} }
@ -317,6 +311,14 @@ void VoxelChunkDefault::clear() {
_voxel_lights.clear(); _voxel_lights.clear();
} }
void VoxelChunkDefault::emit_build_finished() {
emit_signal("mesh_generation_finished", this);
if (_voxel_world != NULL) {
_voxel_world->on_chunk_mesh_generation_finished(this);
}
}
void VoxelChunkDefault::create_colliders() { void VoxelChunkDefault::create_colliders() {
ERR_FAIL_COND(_voxel_world == NULL); ERR_FAIL_COND(_voxel_world == NULL);
@ -1069,6 +1071,10 @@ void VoxelChunkDefault::_notification(int p_what) {
} break; } break;
case NOTIFICATION_INTERNAL_PROCESS: { case NOTIFICATION_INTERNAL_PROCESS: {
if (!get_is_generating()) {
set_process_internal(false);
}
if (!get_is_generating() || !has_next_phase() || _build_step_in_progress) { if (!get_is_generating() || !has_next_phase() || _build_step_in_progress) {
return; return;
} }

View File

@ -209,6 +209,8 @@ public:
//free //free
void free_chunk(); void free_chunk();
void emit_build_finished();
VoxelChunkDefault(); VoxelChunkDefault();
~VoxelChunkDefault(); ~VoxelChunkDefault();