From 213a57ccafdf2f4fcc472801c60332d40cfe6464 Mon Sep 17 00:00:00 2001 From: "Daniel J. Ramirez" Date: Mon, 25 Jul 2016 21:45:20 -0500 Subject: Stop baking process if there is no geometry in the BakedLightInstance. moved missing baked light warning to BakedLightInstance configuration warning --- scene/3d/baked_light_instance.cpp | 10 ++++++++++ scene/3d/baked_light_instance.h | 2 ++ tools/editor/plugins/baked_light_baker.cpp | 4 ++++ tools/editor/plugins/baked_light_editor_plugin.cpp | 6 ++++-- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/scene/3d/baked_light_instance.cpp b/scene/3d/baked_light_instance.cpp index fafa62866f..ca3a309568 100644 --- a/scene/3d/baked_light_instance.cpp +++ b/scene/3d/baked_light_instance.cpp @@ -60,6 +60,8 @@ void BakedLightInstance::set_baked_light(const Ref& p_baked_light) { // VS::get_singleton()->instance_geometry_set_baked_light(E->get()->get_instance(),baked_light.is_valid()?get_instance():RID()); // } } + + update_configuration_warning(); } Ref BakedLightInstance::get_baked_light() const{ @@ -77,6 +79,14 @@ DVector BakedLightInstance::get_faces(uint32_t p_usage_flags) const { } +String BakedLightInstance::get_configuration_warning() const { + if (get_baked_light().is_null()) { + return TTR("BakedLightInstance does not contain a BakedLight resource."); + } + return String(); +} + + void BakedLightInstance::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_baked_light","baked_light"),&BakedLightInstance::set_baked_light); diff --git a/scene/3d/baked_light_instance.h b/scene/3d/baked_light_instance.h index 92c2d50986..002e55df1d 100644 --- a/scene/3d/baked_light_instance.h +++ b/scene/3d/baked_light_instance.h @@ -55,6 +55,8 @@ public: virtual AABB get_aabb() const; virtual DVector get_faces(uint32_t p_usage_flags) const; + String get_configuration_warning() const; + BakedLightInstance(); }; diff --git a/tools/editor/plugins/baked_light_baker.cpp b/tools/editor/plugins/baked_light_baker.cpp index 6a88ba4cbe..a2e94e8855 100644 --- a/tools/editor/plugins/baked_light_baker.cpp +++ b/tools/editor/plugins/baked_light_baker.cpp @@ -1772,6 +1772,10 @@ void BakedLightBaker::bake(const Ref &p_light, Node* p_node) { mat_map.clear(); tex_map.clear(); print_line("\ttotal triangles: "+itos(triangles.size())); + // no geometry + if (triangles.size() == 0) { + return; + } ep.step(TTR("Fixing Lights"),1); _fix_lights(); ep.step(TTR("Making BVH"),2); diff --git a/tools/editor/plugins/baked_light_editor_plugin.cpp b/tools/editor/plugins/baked_light_editor_plugin.cpp index df76f28ae0..a58a0c25e2 100644 --- a/tools/editor/plugins/baked_light_editor_plugin.cpp +++ b/tools/editor/plugins/baked_light_editor_plugin.cpp @@ -206,8 +206,9 @@ void BakedLightEditor::_menu_option(int p_option) { void BakedLightEditor::_bake_pressed() { ERR_FAIL_COND(!node); - if (node->get_baked_light().is_null()) { - err_dialog->set_text(TTR("BakedLightInstance does not contain a BakedLight resource.")); + const String conf_warning = node->get_configuration_warning(); + if (!conf_warning.empty()) { + err_dialog->set_text(conf_warning); err_dialog->popup_centered_minsize(); button_bake->set_pressed(false); return; @@ -236,6 +237,7 @@ void BakedLightEditor::_bake_pressed() { update_timeout=0; last_rays_time=0; + button_bake->set_pressed(false); set_process(true); } -- cgit v1.2.3