Skip to content

Commit 85993f5

Browse files
committed
Added Validation Pass for Rendering Driver Availability
1 parent a8f52d2 commit 85993f5

1 file changed

Lines changed: 51 additions & 0 deletions

File tree

main/main.cpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ String display_driver = "";
205205
String tablet_driver = "";
206206
String text_driver = "";
207207
String rendering_driver = "";
208+
bool rendering_driver_available = false;
208209
String rendering_method = "";
209210
static int text_driver_idx = -1;
210211
static 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

Comments
 (0)