mirror of
https://github.com/Relintai/voxelman.git
synced 2025-02-04 15:55:54 +01:00
Now BUILD_PHASE_COLLIDER, and BUILD_PHASE_LIGHTS can both distribute their work onto multiple frames.
This commit is contained in:
parent
0a4d07c582
commit
469927cc3b
@ -1234,7 +1234,18 @@ void VoxelChunkDefault::_build_phase(int phase) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < _meshers.size(); ++i) {
|
int starti = 0;
|
||||||
|
|
||||||
|
if (_job->has_meta("bpc_aa")) {
|
||||||
|
starti = _job->get_meta("bpc_aa");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = starti; i < _meshers.size(); ++i) {
|
||||||
|
if (_job->should_return()) {
|
||||||
|
_job->set_meta("bpc_aa", i);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Ref<VoxelMesher> mesher = _meshers.get(i);
|
Ref<VoxelMesher> mesher = _meshers.get(i);
|
||||||
|
|
||||||
ERR_CONTINUE(!mesher.is_valid());
|
ERR_CONTINUE(!mesher.is_valid());
|
||||||
@ -1254,7 +1265,19 @@ void VoxelChunkDefault::_build_phase(int phase) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (Engine::get_singleton()->is_editor_hint()) {
|
if (Engine::get_singleton()->is_editor_hint()) {
|
||||||
|
|
||||||
|
starti = 0;
|
||||||
|
|
||||||
|
if (_job->has_meta("bpc_laa")) {
|
||||||
|
starti = _job->get_meta("bpc_laa");
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < _liquid_meshers.size(); ++i) {
|
for (int i = 0; i < _liquid_meshers.size(); ++i) {
|
||||||
|
if (_job->should_return()) {
|
||||||
|
_job->set_meta("bpc_laa", i);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Ref<VoxelMesher> mesher = _liquid_meshers.get(i);
|
Ref<VoxelMesher> mesher = _liquid_meshers.get(i);
|
||||||
|
|
||||||
ERR_CONTINUE(!mesher.is_valid());
|
ERR_CONTINUE(!mesher.is_valid());
|
||||||
@ -1274,6 +1297,14 @@ void VoxelChunkDefault::_build_phase(int phase) {
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_job->has_meta("bpc_aa")) {
|
||||||
|
_job->remove_meta("bpc_aa");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_job->has_meta("bpc_laa")) {
|
||||||
|
_job->remove_meta("bpc_laa");
|
||||||
|
}
|
||||||
|
|
||||||
if (temp_arr_collider.size() == 0 && temp_arr_collider_liquid.size() == 0
|
if (temp_arr_collider.size() == 0 && temp_arr_collider_liquid.size() == 0
|
||||||
#ifdef MESH_DATA_RESOURCE_PRESENT
|
#ifdef MESH_DATA_RESOURCE_PRESENT
|
||||||
&& get_mesh_data_resource_count() == 0
|
&& get_mesh_data_resource_count() == 0
|
||||||
@ -1296,15 +1327,29 @@ void VoxelChunkDefault::_build_phase(int phase) {
|
|||||||
|
|
||||||
bool bl = (_build_flags & BUILD_FLAG_BAKE_LIGHTS) != 0;
|
bool bl = (_build_flags & BUILD_FLAG_BAKE_LIGHTS) != 0;
|
||||||
|
|
||||||
if (bl)
|
if (bl && _job->should_do()) {
|
||||||
clear_baked_lights();
|
clear_baked_lights();
|
||||||
|
|
||||||
if (gr)
|
if (_job->should_return())
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gr && _job->should_do()) {
|
||||||
generate_random_ao(_voxel_world->get_current_seed());
|
generate_random_ao(_voxel_world->get_current_seed());
|
||||||
|
|
||||||
if (bl)
|
if (_job->should_return())
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bl && _job->should_do()) {
|
||||||
bake_lights();
|
bake_lights();
|
||||||
|
|
||||||
|
if (_job->should_return())
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_job->reset_stages();
|
||||||
|
|
||||||
next_phase();
|
next_phase();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user