Browse Source

Merge pull request #97416 from Calinou/lightmapgi-check-rendering-device-availability

Check RenderingDevice availability to display LightmapGI configuration warnings
Rémi Verschelde 10 months ago
parent
commit
1da8a2a1ba
2 changed files with 28 additions and 2 deletions
  1. 17 0
      editor/plugins/lightmap_gi_editor_plugin.cpp
  2. 11 2
      scene/3d/lightmap_gi.cpp

+ 17 - 0
editor/plugins/lightmap_gi_editor_plugin.cpp

@@ -179,6 +179,23 @@ LightmapGIEditorPlugin::LightmapGIEditorPlugin() {
 	// when the editor theme updates.
 	// when the editor theme updates.
 	bake->set_icon(EditorNode::get_singleton()->get_editor_theme()->get_icon(SNAME("Bake"), EditorStringName(EditorIcons)));
 	bake->set_icon(EditorNode::get_singleton()->get_editor_theme()->get_icon(SNAME("Bake"), EditorStringName(EditorIcons)));
 	bake->set_text(TTR("Bake Lightmaps"));
 	bake->set_text(TTR("Bake Lightmaps"));
+
+#ifdef MODULE_LIGHTMAPPER_RD_ENABLED
+	// Disable lightmap baking if not supported on the current GPU.
+	if (!DisplayServer::get_singleton()->can_create_rendering_device()) {
+		bake->set_disabled(true);
+		bake->set_tooltip_text(vformat(TTR("Lightmap baking is not supported on this GPU (%s)."), RenderingServer::get_singleton()->get_video_adapter_name()));
+	}
+#else
+	// Disable lightmap baking if the module is disabled at compile-time.
+	bake->set_disabled(true);
+#if defined(ANDROID_ENABLED) || defined(IOS_ENABLED)
+	bake->set_tooltip_text(vformat(TTR("Lightmaps cannot be baked on %s."), OS::get_singleton()->get_name()));
+#else
+	bake->set_tooltip_text(TTR("Lightmaps cannot be baked, as the `lightmapper_rd` module was disabled at compile-time."));
+#endif
+#endif // MODULE_LIGHTMAPPER_RD_ENABLED
+
 	bake->hide();
 	bake->hide();
 	bake->connect(SceneStringName(pressed), Callable(this, "_bake"));
 	bake->connect(SceneStringName(pressed), Callable(this, "_bake"));
 	add_control_to_container(CONTAINER_SPATIAL_EDITOR_MENU, bake);
 	add_control_to_container(CONTAINER_SPATIAL_EDITOR_MENU, bake);

+ 11 - 2
scene/3d/lightmap_gi.cpp

@@ -1602,8 +1602,17 @@ Ref<CameraAttributes> LightmapGI::get_camera_attributes() const {
 PackedStringArray LightmapGI::get_configuration_warnings() const {
 PackedStringArray LightmapGI::get_configuration_warnings() const {
 	PackedStringArray warnings = VisualInstance3D::get_configuration_warnings();
 	PackedStringArray warnings = VisualInstance3D::get_configuration_warnings();
 
 
-	if (OS::get_singleton()->get_current_rendering_method() == "gl_compatibility") {
-		warnings.push_back(RTR("Lightmap can only be baked from a device that supports the RD backends. Lightmap baking may fail."));
+#ifndef MODULE_LIGHTMAPPER_RD_ENABLED
+#if defined(ANDROID_ENABLED) || defined(IOS_ENABLED)
+	warnings.push_back(vformat(RTR("Lightmaps cannot be baked on %s. Rendering existing baked lightmaps will still work."), OS::get_singleton()->get_name()));
+#else
+	warnings.push_back(RTR("Lightmaps cannot be baked, as the `lightmapper_rd` module was disabled at compile-time. Rendering existing baked lightmaps will still work."));
+#endif
+	return warnings;
+#endif
+
+	if (!DisplayServer::get_singleton()->can_create_rendering_device()) {
+		warnings.push_back(vformat(RTR("Lightmaps can only be baked from a GPU that supports the RenderingDevice backends.\nYour GPU (%s) does not support RenderingDevice, as it does not support Vulkan, Direct3D 12, or Metal.\nLightmap baking will not be available on this device, although rendering existing baked lightmaps will work."), RenderingServer::get_singleton()->get_video_adapter_name()));
 		return warnings;
 		return warnings;
 	}
 	}