@@ -64,6 +64,9 @@ HashMap<String, bool *> OpenXROpenGLExtension::get_requested_extensions() {
6464#else
6565 request_extensions[XR_KHR_OPENGL_ENABLE_EXTENSION_NAME] = nullptr ;
6666#endif
67+ #if defined(LINUXBSD_ENABLED) && defined(EGL_ENABLED)
68+ request_extensions[XR_MNDX_EGL_ENABLE_EXTENSION_NAME] = &egl_extension_enabled;
69+ #endif
6770
6871 return request_extensions;
6972}
@@ -128,9 +131,14 @@ bool OpenXROpenGLExtension::check_graphics_api_support(XrVersion p_desired_versi
128131XrGraphicsBindingOpenGLWin32KHR OpenXROpenGLExtension::graphics_binding_gl;
129132#elif defined(ANDROID_ENABLED)
130133XrGraphicsBindingOpenGLESAndroidKHR OpenXROpenGLExtension::graphics_binding_gl;
131- #elif defined(X11_ENABLED)
134+ #elif defined(LINUXBSD_ENABLED)
135+ #ifdef X11_ENABLED
132136XrGraphicsBindingOpenGLXlibKHR OpenXROpenGLExtension::graphics_binding_gl;
133137#endif
138+ #ifdef EGL_ENABLED
139+ XrGraphicsBindingEGLMNDX OpenXROpenGLExtension::graphics_binding_egl;
140+ #endif
141+ #endif
134142
135143void *OpenXROpenGLExtension::set_session_create_and_get_next_pointer (void *p_next_pointer) {
136144 XrVersion desired_version = XR_MAKE_VERSION (3 , 3 , 0 );
@@ -142,10 +150,6 @@ void *OpenXROpenGLExtension::set_session_create_and_get_next_pointer(void *p_nex
142150
143151 DisplayServer *display_server = DisplayServer::get_singleton ();
144152
145- #ifdef WAYLAND_ENABLED
146- ERR_FAIL_COND_V_MSG (display_server->get_name () == " Wayland" , p_next_pointer, " OpenXR is not yet supported on OpenGL Wayland." );
147- #endif
148-
149153#ifdef WIN32
150154 graphics_binding_gl.type = XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR,
151155 graphics_binding_gl.next = p_next_pointer;
@@ -159,7 +163,23 @@ void *OpenXROpenGLExtension::set_session_create_and_get_next_pointer(void *p_nex
159163 graphics_binding_gl.display = (void *)display_server->window_get_native_handle (DisplayServer::DISPLAY_HANDLE);
160164 graphics_binding_gl.config = (EGLConfig)0 ; // https://github.com/KhronosGroup/OpenXR-SDK-Source/blob/master/src/tests/hello_xr/graphicsplugin_opengles.cpp#L122
161165 graphics_binding_gl.context = (void *)display_server->window_get_native_handle (DisplayServer::OPENGL_CONTEXT);
162- #elif defined(X11_ENABLED)
166+ #else
167+ #if defined(EGL_ENABLED) && defined(WAYLAND_ENABLED)
168+ if (display_server->get_name () == " Wayland" ) {
169+ ERR_FAIL_COND_V_MSG (!egl_extension_enabled, p_next_pointer, " OpenXR cannot initialize on Wayland without the XR_MNDX_egl_enable extension." );
170+
171+ graphics_binding_egl.type = XR_TYPE_GRAPHICS_BINDING_EGL_MNDX;
172+ graphics_binding_egl.next = p_next_pointer;
173+
174+ graphics_binding_egl.getProcAddress = eglGetProcAddress;
175+ graphics_binding_egl.display = (void *)display_server->window_get_native_handle (DisplayServer::EGL_DISPLAY);
176+ graphics_binding_egl.config = (void *)display_server->window_get_native_handle (DisplayServer::EGL_CONFIG);
177+ graphics_binding_egl.context = (void *)display_server->window_get_native_handle (DisplayServer::OPENGL_CONTEXT);
178+
179+ return &graphics_binding_egl;
180+ }
181+ #endif
182+ #if defined(X11_ENABLED)
163183 graphics_binding_gl.type = XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR;
164184 graphics_binding_gl.next = p_next_pointer;
165185
@@ -175,8 +195,13 @@ void *OpenXROpenGLExtension::set_session_create_and_get_next_pointer(void *p_nex
175195 graphics_binding_gl.visualid = 0 ;
176196 graphics_binding_gl.glxFBConfig = 0 ;
177197#endif
198+ #endif
178199
200+ #if defined(WIN32) || defined(ANDROID_ENABLED) || defined(X11_ENABLED)
179201 return &graphics_binding_gl;
202+ #else
203+ return p_next_pointer;
204+ #endif
180205}
181206
182207void OpenXROpenGLExtension::get_usable_swapchain_formats (Vector<int64_t > &p_usable_swap_chains) {
0 commit comments