@@ -5984,13 +5984,32 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
59845984// Init context and rendering device
59855985#if defined(GLES3_ENABLED)
59865986
5987- #if defined(__arm__) || defined(__aarch64__) || defined(_M_ARM) || defined(_M_ARM64)
5988- // There's no native OpenGL drivers on Windows for ARM, switch to ANGLE over DX.
5987+ bool fallback = GLOBAL_GET (" rendering/gl_compatibility/fallback_to_angle" );
5988+ bool show_warning = true ;
5989+
59895990 if (rendering_driver == " opengl3" ) {
5990- rendering_driver = " opengl3_angle" ;
5991+ // There's no native OpenGL drivers on Windows for ARM, always enable fallback.
5992+ #if defined(__arm__) || defined(__aarch64__) || defined(_M_ARM) || defined(_M_ARM64)
5993+ fallback = true ;
5994+ show_warning = false ;
5995+ #else
5996+ typedef BOOL (WINAPI * IsWow64Process2Ptr)(HANDLE, USHORT *, USHORT *);
5997+
5998+ IsWow64Process2Ptr IsWow64Process2 = (IsWow64Process2Ptr)GetProcAddress (GetModuleHandle (TEXT (" kernel32" )), " IsWow64Process2" );
5999+ if (IsWow64Process2) {
6000+ USHORT process_arch = 0 ;
6001+ USHORT machine_arch = 0 ;
6002+ if (!IsWow64Process2 (GetCurrentProcess (), &process_arch, &machine_arch)) {
6003+ machine_arch = 0 ;
6004+ }
6005+ if (machine_arch == 0xAA64 ) {
6006+ fallback = true ;
6007+ show_warning = false ;
6008+ }
6009+ }
6010+ #endif
59916011 }
5992- #elif defined(EGL_STATIC)
5993- bool fallback = GLOBAL_GET (" rendering/gl_compatibility/fallback_to_angle" );
6012+
59946013 if (fallback && (rendering_driver == " opengl3" )) {
59956014 Dictionary gl_info = detect_wgl ();
59966015
@@ -6016,11 +6035,12 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
60166035 }
60176036
60186037 if (force_angle || (gl_info[" version" ].operator int () < 30003 )) {
6019- WARN_PRINT (" Your video card drivers seem not to support the required OpenGL 3.3 version, switching to ANGLE." );
6038+ if (show_warning) {
6039+ WARN_PRINT (" Your video card drivers seem not to support the required OpenGL 3.3 version, switching to ANGLE." );
6040+ }
60206041 rendering_driver = " opengl3_angle" ;
60216042 }
60226043 }
6023- #endif
60246044
60256045 if (rendering_driver == " opengl3" ) {
60266046 gl_manager_native = memnew (GLManagerNative_Windows);
0 commit comments