diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index b8ee9e1293c..477da53b196 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -52,6 +52,11 @@ #include "scene/gui/texture_rect.h" #include "scene/gui/tool_button.h" +// Used to test for GLES3 support. +#ifndef SERVER_ENABLED +#include "drivers/gles3/rasterizer_gles3.h" +#endif + static inline String get_project_key_from_path(const String &dir) { return dir.replace("/", "::"); } @@ -878,7 +883,14 @@ public: rasterizer_container->add_child(rshb); rasterizer_button_group.instance(); - bool is_gles3 = OS::get_singleton()->get_current_video_driver() == OS::VIDEO_DRIVER_GLES3; + // Enable GLES3 by default as it's the default value for the project setting. +#ifndef SERVER_ENABLED + bool gles3_viable = RasterizerGLES3::is_viable() == OK; +#else + // Whatever, project manager isn't even used in headless builds. + bool gles3_viable = false; +#endif + Container *rvb = memnew(VBoxContainer); rvb->set_h_size_flags(SIZE_EXPAND_FILL); rshb->add_child(rvb); @@ -886,9 +898,14 @@ public: rs_button->set_button_group(rasterizer_button_group); rs_button->set_text(TTR("OpenGL ES 3.0")); rs_button->set_meta("driver_name", "GLES3"); - rs_button->set_pressed(is_gles3); + rs_button->set_pressed(gles3_viable); + // If GLES3 can't be used, don't let users shoot themselves in the foot. + rs_button->set_disabled(!gles3_viable); rvb->add_child(rs_button); l = memnew(Label); + l->set_text(TTR("Not supported by your GPU drivers.")); + rvb->add_child(l); + l = memnew(Label); l->set_text(TTR("Higher visual quality\nAll features available\nIncompatible with older hardware\nNot recommended for web games")); rvb->add_child(l); @@ -901,7 +918,7 @@ public: rs_button->set_button_group(rasterizer_button_group); rs_button->set_text(TTR("OpenGL ES 2.0")); rs_button->set_meta("driver_name", "GLES2"); - rs_button->set_pressed(!is_gles3); + rs_button->set_pressed(!gles3_viable); rvb->add_child(rs_button); l = memnew(Label); l->set_text(TTR("Lower visual quality\nSome features not available\nWorks on most hardware\nRecommended for web games")); diff --git a/main/main.cpp b/main/main.cpp index 81bc9a58f0c..d50076e612b 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1022,7 +1022,11 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph GLOBAL_DEF("rendering/quality/driver/driver_name", "GLES3"); ProjectSettings::get_singleton()->set_custom_property_info("rendering/quality/driver/driver_name", PropertyInfo(Variant::STRING, "rendering/quality/driver/driver_name", PROPERTY_HINT_ENUM, "GLES2,GLES3")); if (video_driver == "") { - video_driver = GLOBAL_GET("rendering/quality/driver/driver_name"); + if (project_manager) { + video_driver = "GLES2"; // Force GLES2 for maximum compatibility, unless specified from command line. + } else { + video_driver = GLOBAL_GET("rendering/quality/driver/driver_name"); + } } GLOBAL_DEF("rendering/quality/driver/fallback_to_gles2", false);