@@ -438,30 +438,41 @@ void ProjectDialog::_renderer_selected() {
438438
439439 String renderer_type = renderer_button_group->get_pressed_button ()->get_meta (SNAME (" rendering_method" ));
440440
441+ bool rd_error = false ;
442+
441443 if (renderer_type == " forward_plus" ) {
442444 renderer_info->set_text (
443445 String::utf8 (" • " ) + TTR (" Supports desktop platforms only." ) +
444446 String::utf8 (" \n • " ) + TTR (" Advanced 3D graphics available." ) +
445447 String::utf8 (" \n • " ) + TTR (" Can scale to large complex scenes." ) +
446448 String::utf8 (" \n • " ) + TTR (" Uses RenderingDevice backend." ) +
447449 String::utf8 (" \n • " ) + TTR (" Slower rendering of simple scenes." ));
450+ rd_error = !rendering_device_supported;
448451 } else if (renderer_type == " mobile" ) {
449452 renderer_info->set_text (
450453 String::utf8 (" • " ) + TTR (" Supports desktop + mobile platforms." ) +
451454 String::utf8 (" \n • " ) + TTR (" Less advanced 3D graphics." ) +
452455 String::utf8 (" \n • " ) + TTR (" Less scalable for complex scenes." ) +
453456 String::utf8 (" \n • " ) + TTR (" Uses RenderingDevice backend." ) +
454457 String::utf8 (" \n • " ) + TTR (" Fast rendering of simple scenes." ));
458+ rd_error = !rendering_device_supported;
455459 } else if (renderer_type == " gl_compatibility" ) {
456460 renderer_info->set_text (
457461 String::utf8 (" • " ) + TTR (" Supports desktop, mobile + web platforms." ) +
458- String::utf8 (" \n • " ) + TTR (" Least advanced 3D graphics (currently work-in-progress) ." ) +
462+ String::utf8 (" \n • " ) + TTR (" Least advanced 3D graphics." ) +
459463 String::utf8 (" \n • " ) + TTR (" Intended for low-end/older devices." ) +
460464 String::utf8 (" \n • " ) + TTR (" Uses OpenGL 3 backend (OpenGL 3.3/ES 3.0/WebGL2)." ) +
461465 String::utf8 (" \n • " ) + TTR (" Fastest rendering of simple scenes." ));
462466 } else {
463467 WARN_PRINT (" Unknown renderer type. Please report this as a bug on GitHub." );
464468 }
469+
470+ rd_not_supported->set_visible (rd_error);
471+ get_ok_button ()->set_disabled (rd_error);
472+ if (rd_error) {
473+ // Needs to be set here since theme colors aren't available at startup.
474+ rd_not_supported->add_theme_color_override (SceneStringName (font_color), get_theme_color (SNAME (" error_color" ), EditorStringName (Editor)));
475+ }
465476}
466477
467478void ProjectDialog::_nonempty_confirmation_ok_pressed () {
@@ -916,10 +927,16 @@ ProjectDialog::ProjectDialog() {
916927 default_renderer_type = EditorSettings::get_singleton ()->get_setting (" project_manager/default_renderer" );
917928 }
918929
930+ rendering_device_supported = DisplayServer::can_create_rendering_device ();
931+
932+ if (!rendering_device_supported) {
933+ default_renderer_type = " gl_compatibility" ;
934+ }
935+
919936 Button *rs_button = memnew (CheckBox);
920937 rs_button->set_button_group (renderer_button_group);
921938 rs_button->set_text (TTR (" Forward+" ));
922- #if defined(WEB_ENABLED)
939+ #ifndef RD_ENABLED
923940 rs_button->set_disabled (true );
924941#endif
925942 rs_button->set_meta (SNAME (" rendering_method" ), " forward_plus" );
@@ -931,7 +948,7 @@ ProjectDialog::ProjectDialog() {
931948 rs_button = memnew (CheckBox);
932949 rs_button->set_button_group (renderer_button_group);
933950 rs_button->set_text (TTR (" Mobile" ));
934- #if defined(WEB_ENABLED)
951+ #ifndef RD_ENABLED
935952 rs_button->set_disabled (true );
936953#endif
937954 rs_button->set_meta (SNAME (" rendering_method" ), " mobile" );
@@ -963,6 +980,15 @@ ProjectDialog::ProjectDialog() {
963980 renderer_info = memnew (Label);
964981 renderer_info->set_modulate (Color (1 , 1 , 1 , 0.7 ));
965982 rvb->add_child (renderer_info);
983+
984+ rd_not_supported = memnew (Label);
985+ rd_not_supported->set_text (TTR (" Rendering Device backend not available. Please use the Compatibility renderer." ));
986+ rd_not_supported->set_horizontal_alignment (HORIZONTAL_ALIGNMENT_CENTER);
987+ rd_not_supported->set_custom_minimum_size (Size2 (200 , 0 ) * EDSCALE);
988+ rd_not_supported->set_autowrap_mode (TextServer::AUTOWRAP_WORD_SMART);
989+ rd_not_supported->set_visible (false );
990+ renderer_container->add_child (rd_not_supported);
991+
966992 _renderer_selected ();
967993
968994 l = memnew (Label);
0 commit comments