@@ -428,30 +428,41 @@ void ProjectDialog::_renderer_selected() {
428428
429429 String renderer_type = renderer_button_group->get_pressed_button ()->get_meta (SNAME (" rendering_method" ));
430430
431+ bool rd_error = false ;
432+
431433 if (renderer_type == " forward_plus" ) {
432434 renderer_info->set_text (
433435 String::utf8 (" • " ) + TTR (" Supports desktop platforms only." ) +
434436 String::utf8 (" \n • " ) + TTR (" Advanced 3D graphics available." ) +
435437 String::utf8 (" \n • " ) + TTR (" Can scale to large complex scenes." ) +
436438 String::utf8 (" \n • " ) + TTR (" Uses RenderingDevice backend." ) +
437439 String::utf8 (" \n • " ) + TTR (" Slower rendering of simple scenes." ));
440+ rd_error = !rendering_device_supported;
438441 } else if (renderer_type == " mobile" ) {
439442 renderer_info->set_text (
440443 String::utf8 (" • " ) + TTR (" Supports desktop + mobile platforms." ) +
441444 String::utf8 (" \n • " ) + TTR (" Less advanced 3D graphics." ) +
442445 String::utf8 (" \n • " ) + TTR (" Less scalable for complex scenes." ) +
443446 String::utf8 (" \n • " ) + TTR (" Uses RenderingDevice backend." ) +
444447 String::utf8 (" \n • " ) + TTR (" Fast rendering of simple scenes." ));
448+ rd_error = !rendering_device_supported;
445449 } else if (renderer_type == " gl_compatibility" ) {
446450 renderer_info->set_text (
447451 String::utf8 (" • " ) + TTR (" Supports desktop, mobile + web platforms." ) +
448- String::utf8 (" \n • " ) + TTR (" Least advanced 3D graphics (currently work-in-progress) ." ) +
452+ String::utf8 (" \n • " ) + TTR (" Least advanced 3D graphics." ) +
449453 String::utf8 (" \n • " ) + TTR (" Intended for low-end/older devices." ) +
450454 String::utf8 (" \n • " ) + TTR (" Uses OpenGL 3 backend (OpenGL 3.3/ES 3.0/WebGL2)." ) +
451455 String::utf8 (" \n • " ) + TTR (" Fastest rendering of simple scenes." ));
452456 } else {
453457 WARN_PRINT (" Unknown renderer type. Please report this as a bug on GitHub." );
454458 }
459+
460+ rd_not_supported->set_visible (rd_error);
461+ get_ok_button ()->set_disabled (rd_error);
462+ if (rd_error) {
463+ // Needs to be set here since theme colors aren't available at startup.
464+ rd_not_supported->add_theme_color_override (SceneStringName (font_color), get_theme_color (SNAME (" error_color" ), EditorStringName (Editor)));
465+ }
455466}
456467
457468void ProjectDialog::_nonempty_confirmation_ok_pressed () {
@@ -903,10 +914,16 @@ ProjectDialog::ProjectDialog() {
903914 default_renderer_type = EditorSettings::get_singleton ()->get_setting (" project_manager/default_renderer" );
904915 }
905916
917+ rendering_device_supported = DisplayServer::can_create_rendering_device ();
918+
919+ if (!rendering_device_supported) {
920+ default_renderer_type = " gl_compatibility" ;
921+ }
922+
906923 Button *rs_button = memnew (CheckBox);
907924 rs_button->set_button_group (renderer_button_group);
908925 rs_button->set_text (TTR (" Forward+" ));
909- #if defined(WEB_ENABLED)
926+ #ifndef RD_ENABLED
910927 rs_button->set_disabled (true );
911928#endif
912929 rs_button->set_meta (SNAME (" rendering_method" ), " forward_plus" );
@@ -918,7 +935,7 @@ ProjectDialog::ProjectDialog() {
918935 rs_button = memnew (CheckBox);
919936 rs_button->set_button_group (renderer_button_group);
920937 rs_button->set_text (TTR (" Mobile" ));
921- #if defined(WEB_ENABLED)
938+ #ifndef RD_ENABLED
922939 rs_button->set_disabled (true );
923940#endif
924941 rs_button->set_meta (SNAME (" rendering_method" ), " mobile" );
@@ -950,6 +967,15 @@ ProjectDialog::ProjectDialog() {
950967 renderer_info = memnew (Label);
951968 renderer_info->set_modulate (Color (1 , 1 , 1 , 0.7 ));
952969 rvb->add_child (renderer_info);
970+
971+ rd_not_supported = memnew (Label);
972+ rd_not_supported->set_text (TTR (" Rendering Device backend not available. Please use the Compatibility renderer." ));
973+ rd_not_supported->set_horizontal_alignment (HORIZONTAL_ALIGNMENT_CENTER);
974+ rd_not_supported->set_custom_minimum_size (Size2 (200 , 0 ) * EDSCALE);
975+ rd_not_supported->set_autowrap_mode (TextServer::AUTOWRAP_WORD_SMART);
976+ rd_not_supported->set_visible (false );
977+ renderer_container->add_child (rd_not_supported);
978+
953979 _renderer_selected ();
954980
955981 l = memnew (Label);
0 commit comments