Print time taken and request attention when lightmaps are done baking

Since lightmap baking can take a very long time, printing the time
spent can be useful for users tweaking the lightmap settings
to optimize bake times.

Completing lightmap baking will also request attention, which is
useful if you're doing something else while waiting for lightmaps
to bake.
This commit is contained in:
Hugo Locurcio 2021-06-25 20:58:05 +02:00
parent 3a8bea3ae3
commit d9a2e34357
No known key found for this signature in database
GPG Key ID: 39E8F8BE30B0A49C
2 changed files with 11 additions and 3 deletions

View File

@ -33,13 +33,14 @@
void BakedLightmapEditorPlugin::_bake_select_file(const String &p_file) { void BakedLightmapEditorPlugin::_bake_select_file(const String &p_file) {
if (lightmap) { if (lightmap) {
BakedLightmap::BakeError err; BakedLightmap::BakeError err;
uint32_t time_started = OS::get_singleton()->get_ticks_msec();
if (get_tree()->get_edited_scene_root() && get_tree()->get_edited_scene_root() == lightmap) { if (get_tree()->get_edited_scene_root() && get_tree()->get_edited_scene_root() == lightmap) {
err = lightmap->bake(lightmap, p_file); err = lightmap->bake(lightmap, p_file);
} else { } else {
err = lightmap->bake(lightmap->get_parent(), p_file); err = lightmap->bake(lightmap->get_parent(), p_file);
} }
bake_func_end(); bake_func_end(time_started);
switch (err) { switch (err) {
case BakedLightmap::BAKE_ERROR_NO_SAVE_PATH: { case BakedLightmap::BAKE_ERROR_NO_SAVE_PATH: {
@ -122,7 +123,7 @@ bool BakedLightmapEditorPlugin::bake_func_substep(float p_progress, const String
return tmp_subprogress->step(p_description, p_progress * 1000, p_force_refresh); return tmp_subprogress->step(p_description, p_progress * 1000, p_force_refresh);
} }
void BakedLightmapEditorPlugin::bake_func_end() { void BakedLightmapEditorPlugin::bake_func_end(uint32_t p_time_started) {
if (tmp_progress != nullptr) { if (tmp_progress != nullptr) {
memdelete(tmp_progress); memdelete(tmp_progress);
tmp_progress = nullptr; tmp_progress = nullptr;
@ -132,6 +133,13 @@ void BakedLightmapEditorPlugin::bake_func_end() {
memdelete(tmp_subprogress); memdelete(tmp_subprogress);
tmp_subprogress = nullptr; tmp_subprogress = nullptr;
} }
const int time_taken = (OS::get_singleton()->get_ticks_msec() - p_time_started) * 0.001;
print_line(vformat("Done baking lightmaps in %02d:%02d:%02d.", time_taken / 3600, (time_taken % 3600) / 60, time_taken % 60));
// Request attention in case the user was doing something else.
// Baking lightmaps is likely the editor task that can take the most time,
// so only request the attention for baking lightmaps.
OS::get_singleton()->request_attention();
} }
void BakedLightmapEditorPlugin::_bind_methods() { void BakedLightmapEditorPlugin::_bind_methods() {

View File

@ -50,7 +50,7 @@ class BakedLightmapEditorPlugin : public EditorPlugin {
static bool bake_func_step(float p_progress, const String &p_description, void *, bool p_force_refresh); static bool bake_func_step(float p_progress, const String &p_description, void *, bool p_force_refresh);
static bool bake_func_substep(float p_progress, const String &p_description, void *, bool p_force_refresh); static bool bake_func_substep(float p_progress, const String &p_description, void *, bool p_force_refresh);
static void bake_func_end(); static void bake_func_end(uint32_t p_time_started);
void _bake_select_file(const String &p_file); void _bake_select_file(const String &p_file);
void _bake(); void _bake();