Merge pull request #114922 from DarioSamo/android-platform-gl3-fallback-fix

Fix fallback to OpenGL3 from Vulkan initialization on Android.
This commit is contained in:
Thaddeus Crews 2026-01-27 09:04:14 -06:00
commit ed0ae97d98
No known key found for this signature in database
GPG key ID: 8C6E5FEB5FC03CCC
17 changed files with 218 additions and 162 deletions

View file

@ -196,8 +196,6 @@ static bool _start_success = false;
String display_driver = "";
String tablet_driver = "";
String text_driver = "";
String rendering_driver = "";
String rendering_method = "";
static int text_driver_idx = -1;
static int audio_driver_idx = -1;
@ -1083,6 +1081,10 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
bool delta_smoothing_override = false;
bool load_shell_env = false;
String rendering_driver = "";
String rendering_method = "";
OS::RenderingSource rendering_driver_source = OS::RenderingSource::RENDERING_SOURCE_DEFAULT;
OS::RenderingSource rendering_method_source = OS::RenderingSource::RENDERING_SOURCE_DEFAULT;
String default_renderer = "";
String default_renderer_mobile = "";
String renderer_hints = "";
@ -1280,6 +1282,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
} else if (arg == "--rendering-driver") {
if (N) {
rendering_driver = N->get();
rendering_driver_source = OS::RenderingSource::RENDERING_SOURCE_COMMANDLINE;
N = N->next();
} else {
OS::get_singleton()->print("Missing rendering driver argument, aborting.\n");
@ -2572,6 +2575,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
// Default to ProjectSettings default if nothing set on the command line.
if (rendering_method.is_empty()) {
rendering_method = GLOBAL_GET("rendering/renderer/rendering_method");
rendering_method_source = OS::RenderingSource::RENDERING_SOURCE_PROJECT_SETTING;
}
if (rendering_driver.is_empty()) {
@ -2579,16 +2583,18 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
rendering_driver = "dummy";
} else if (rendering_method == "gl_compatibility") {
rendering_driver = GLOBAL_GET("rendering/gl_compatibility/driver");
rendering_driver_source = OS::RenderingSource::RENDERING_SOURCE_PROJECT_SETTING;
} else {
rendering_driver = GLOBAL_GET("rendering/rendering_device/driver");
rendering_driver_source = OS::RenderingSource::RENDERING_SOURCE_PROJECT_SETTING;
}
}
// always convert to lower case for consistency in the code
rendering_driver = rendering_driver.to_lower();
OS::get_singleton()->set_current_rendering_driver_name(rendering_driver);
OS::get_singleton()->set_current_rendering_method(rendering_method);
OS::get_singleton()->set_current_rendering_driver_name(rendering_driver, rendering_driver_source);
OS::get_singleton()->set_current_rendering_method(rendering_method, rendering_method_source);
#ifdef TOOLS_ENABLED
if (!force_res && project_manager) {
@ -3227,7 +3233,7 @@ Error Main::setup2(bool p_show_boot_logo) {
}
DisplayServer::accessibility_set_mode(accessibility_mode);
// rendering_driver now held in static global String in main and initialized in setup()
String rendering_driver = OS::get_singleton()->get_current_rendering_driver_name();
Error err;
display_server = DisplayServer::create(display_driver_idx, rendering_driver, window_mode, window_vsync_mode, window_flags, window_position, window_size, init_screen, context, init_embed_parent_window_id, err);
if (err != OK || display_server == nullptr) {
@ -3864,10 +3870,6 @@ void Main::setup_boot_logo() {
GLOBAL_GET("rendering/environment/defaults/default_clear_color"));
}
String Main::get_rendering_driver_name() {
return rendering_driver;
}
String Main::get_locale_override() {
return locale;
}