@@ -205,6 +205,7 @@ String display_driver = "";
205205String tablet_driver = " " ;
206206String text_driver = " " ;
207207String rendering_driver = " " ;
208+ bool rendering_driver_available = false ;
208209String rendering_method = " " ;
209210static int text_driver_idx = -1 ;
210211static int audio_driver_idx = -1 ;
@@ -2598,6 +2599,56 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
25982599 // always convert to lower case for consistency in the code
25992600 rendering_driver = rendering_driver.to_lower ();
26002601
2602+ // Verify rendering driver is available
2603+ #ifdef D3D12_ENABLED
2604+ if (rendering_driver == " d3d12" ) {
2605+ rendering_driver_available = true ;
2606+ }
2607+ #endif
2608+ #ifdef VULKAN_ENABLED
2609+ if (rendering_driver == " vulkan" ) {
2610+ rendering_driver_available = true ;
2611+ }
2612+ #endif
2613+ #ifdef GLES3_ENABLED
2614+ if (rendering_driver == " opengl3" || rendering_driver == " opengl3_angle" || rendering_driver == " opengl3_es" ) {
2615+ rendering_driver_available = true ;
2616+ }
2617+ #endif
2618+ if (rendering_driver == " dummy" ) {
2619+ rendering_driver_available = true ;
2620+ }
2621+ if (!rendering_driver_available) {
2622+ Vector<String> unique_rendering_drivers;
2623+ for (int i = 0 ; i < DisplayServer::get_create_function_count (); i++) {
2624+ Vector<String> r_drivers = DisplayServer::get_create_function_rendering_drivers (i);
2625+
2626+ for (int d = 0 ; d < r_drivers.size (); d++) {
2627+ if (!unique_rendering_drivers.has (r_drivers[d])) {
2628+ unique_rendering_drivers.append (r_drivers[d]);
2629+ }
2630+ }
2631+ }
2632+
2633+ String supported_drivers = " " ;
2634+ for (int i = 0 ; i < unique_rendering_drivers.size (); i++) {
2635+ if (i == unique_rendering_drivers.size () - 1 ) {
2636+ supported_drivers += " and " ;
2637+ } else if (i != 0 ) {
2638+ supported_drivers += " , " ;
2639+ }
2640+ supported_drivers += unique_rendering_drivers[i];
2641+ }
2642+ supported_drivers += " ." ;
2643+
2644+ ERR_PRINT (vformat (
2645+ " Rendering driver '%s' is not available in this engine build.\n "
2646+ " Edit your project file (project.godot) and change rendering_device/driver from '%s' to an available rendering driver.\n "
2647+ " Valid options are %s" ,
2648+ rendering_driver, rendering_driver, supported_drivers));
2649+ goto error;
2650+ }
2651+
26012652 OS::get_singleton ()->set_current_rendering_driver_name (rendering_driver);
26022653 OS::get_singleton ()->set_current_rendering_method (rendering_method);
26032654
0 commit comments