Skip to content

Commit e53dc80

Browse files
committed
Merge pull request #95777 from Calinou/command-line-improve-rendering-driver-method-error-messages
Improve error messages for invalid rendering drivers/methods on the command line
2 parents abce2ba + a2043f1 commit e53dc80

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

main/main.cpp

+28-2
Original file line numberDiff line numberDiff line change
@@ -2188,7 +2188,20 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
21882188
if (rendering_method != "forward_plus" &&
21892189
rendering_method != "mobile" &&
21902190
rendering_method != "gl_compatibility") {
2191-
OS::get_singleton()->print("Unknown renderer name '%s', aborting. Valid options are: %s\n", rendering_method.utf8().get_data(), renderer_hints.utf8().get_data());
2191+
OS::get_singleton()->print("Unknown rendering method '%s', aborting.\nValid options are ",
2192+
rendering_method.utf8().get_data());
2193+
2194+
const Vector<String> rendering_method_hints = renderer_hints.split(",");
2195+
for (int i = 0; i < rendering_method_hints.size(); i++) {
2196+
if (i == rendering_method_hints.size() - 1) {
2197+
OS::get_singleton()->print(" and ");
2198+
} else if (i != 0) {
2199+
OS::get_singleton()->print(", ");
2200+
}
2201+
OS::get_singleton()->print("'%s'", rendering_method_hints[i].utf8().get_data());
2202+
}
2203+
2204+
OS::get_singleton()->print(".\n");
21922205
goto error;
21932206
}
21942207
}
@@ -2214,12 +2227,25 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
22142227
OS::get_singleton()->print("Unknown rendering driver '%s', aborting.\nValid options are ",
22152228
rendering_driver.utf8().get_data());
22162229

2230+
// Deduplicate driver entries, as a rendering driver may be supported by several display servers.
2231+
Vector<String> unique_rendering_drivers;
22172232
for (int i = 0; i < DisplayServer::get_create_function_count(); i++) {
22182233
Vector<String> r_drivers = DisplayServer::get_create_function_rendering_drivers(i);
22192234

22202235
for (int d = 0; d < r_drivers.size(); d++) {
2221-
OS::get_singleton()->print("'%s', ", r_drivers[d].utf8().get_data());
2236+
if (!unique_rendering_drivers.has(r_drivers[d])) {
2237+
unique_rendering_drivers.append(r_drivers[d]);
2238+
}
2239+
}
2240+
}
2241+
2242+
for (int i = 0; i < unique_rendering_drivers.size(); i++) {
2243+
if (i == unique_rendering_drivers.size() - 1) {
2244+
OS::get_singleton()->print(" and ");
2245+
} else if (i != 0) {
2246+
OS::get_singleton()->print(", ");
22222247
}
2248+
OS::get_singleton()->print("'%s'", unique_rendering_drivers[i].utf8().get_data());
22232249
}
22242250

22252251
OS::get_singleton()->print(".\n");

0 commit comments

Comments
 (0)