|
@@ -6183,10 +6183,12 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ bool gl_supported = true;
|
|
if (fallback && (rendering_driver == "opengl3")) {
|
|
if (fallback && (rendering_driver == "opengl3")) {
|
|
Dictionary gl_info = detect_wgl();
|
|
Dictionary gl_info = detect_wgl();
|
|
|
|
|
|
bool force_angle = false;
|
|
bool force_angle = false;
|
|
|
|
+ gl_supported = gl_info["version"].operator int() >= 30003;
|
|
|
|
|
|
Vector2i device_id = _get_device_ids(gl_info["name"]);
|
|
Vector2i device_id = _get_device_ids(gl_info["name"]);
|
|
Array device_list = GLOBAL_GET("rendering/gl_compatibility/force_angle_on_devices");
|
|
Array device_list = GLOBAL_GET("rendering/gl_compatibility/force_angle_on_devices");
|
|
@@ -6210,12 +6212,37 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
|
|
if (force_angle || (gl_info["version"].operator int() < 30003)) {
|
|
if (force_angle || (gl_info["version"].operator int() < 30003)) {
|
|
tested_drivers.set_flag(DRIVER_ID_COMPAT_OPENGL3);
|
|
tested_drivers.set_flag(DRIVER_ID_COMPAT_OPENGL3);
|
|
if (show_warning) {
|
|
if (show_warning) {
|
|
- WARN_PRINT("Your video card drivers seem not to support the required OpenGL 3.3 version, switching to ANGLE.");
|
|
|
|
|
|
+ if (gl_info["version"].operator int() < 30003) {
|
|
|
|
+ WARN_PRINT("Your video card drivers seem not to support the required OpenGL 3.3 version, switching to ANGLE.");
|
|
|
|
+ } else {
|
|
|
|
+ WARN_PRINT("Your video card drivers are known to have low quality OpenGL 3.3 support, switching to ANGLE.");
|
|
|
|
+ }
|
|
}
|
|
}
|
|
rendering_driver = "opengl3_angle";
|
|
rendering_driver = "opengl3_angle";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (rendering_driver == "opengl3_angle") {
|
|
|
|
+ gl_manager_angle = memnew(GLManagerANGLE_Windows);
|
|
|
|
+ tested_drivers.set_flag(DRIVER_ID_COMPAT_ANGLE_D3D11);
|
|
|
|
+
|
|
|
|
+ if (gl_manager_angle->initialize() != OK) {
|
|
|
|
+ memdelete(gl_manager_angle);
|
|
|
|
+ gl_manager_angle = nullptr;
|
|
|
|
+ bool fallback_to_native = GLOBAL_GET("rendering/gl_compatibility/fallback_to_native");
|
|
|
|
+ if (fallback_to_native && gl_supported) {
|
|
|
|
+#ifdef EGL_STATIC
|
|
|
|
+ WARN_PRINT("Your video card drivers seem not to support GLES3 / ANGLE, switching to native OpenGL.");
|
|
|
|
+#else
|
|
|
|
+ WARN_PRINT("Your video card drivers seem not to support GLES3 / ANGLE or ANGLE dynamic libraries (libEGL.dll and libGLESv2.dll) are missing, switching to native OpenGL.");
|
|
|
|
+#endif
|
|
|
|
+ rendering_driver = "opengl3";
|
|
|
|
+ } else {
|
|
|
|
+ r_error = ERR_UNAVAILABLE;
|
|
|
|
+ ERR_FAIL_MSG("Could not initialize ANGLE OpenGL.");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
if (rendering_driver == "opengl3") {
|
|
if (rendering_driver == "opengl3") {
|
|
gl_manager_native = memnew(GLManagerNative_Windows);
|
|
gl_manager_native = memnew(GLManagerNative_Windows);
|
|
tested_drivers.set_flag(DRIVER_ID_COMPAT_OPENGL3);
|
|
tested_drivers.set_flag(DRIVER_ID_COMPAT_OPENGL3);
|
|
@@ -6224,26 +6251,17 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
|
|
memdelete(gl_manager_native);
|
|
memdelete(gl_manager_native);
|
|
gl_manager_native = nullptr;
|
|
gl_manager_native = nullptr;
|
|
r_error = ERR_UNAVAILABLE;
|
|
r_error = ERR_UNAVAILABLE;
|
|
- return;
|
|
|
|
|
|
+ ERR_FAIL_MSG("Could not initialize native OpenGL.");
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ if (rendering_driver == "opengl3") {
|
|
RasterizerGLES3::make_current(true);
|
|
RasterizerGLES3::make_current(true);
|
|
}
|
|
}
|
|
if (rendering_driver == "opengl3_angle") {
|
|
if (rendering_driver == "opengl3_angle") {
|
|
- gl_manager_angle = memnew(GLManagerANGLE_Windows);
|
|
|
|
- tested_drivers.set_flag(DRIVER_ID_COMPAT_ANGLE_D3D11);
|
|
|
|
-
|
|
|
|
- if (gl_manager_angle->initialize() != OK) {
|
|
|
|
- memdelete(gl_manager_angle);
|
|
|
|
- gl_manager_angle = nullptr;
|
|
|
|
- r_error = ERR_UNAVAILABLE;
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
RasterizerGLES3::make_current(false);
|
|
RasterizerGLES3::make_current(false);
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
-
|
|
|
|
String appname;
|
|
String appname;
|
|
if (Engine::get_singleton()->is_editor_hint()) {
|
|
if (Engine::get_singleton()->is_editor_hint()) {
|
|
appname = "Godot.GodotEditor." + String(VERSION_FULL_CONFIG);
|
|
appname = "Godot.GodotEditor." + String(VERSION_FULL_CONFIG);
|