@@ -64,6 +64,9 @@ HashMap<String, bool *> OpenXROpenGLExtension::get_requested_extensions() {
64
64
#else
65
65
request_extensions[XR_KHR_OPENGL_ENABLE_EXTENSION_NAME] = nullptr ;
66
66
#endif
67
+ #if defined(LINUXBSD_ENABLED) && defined(EGL_ENABLED)
68
+ request_extensions[XR_MNDX_EGL_ENABLE_EXTENSION_NAME] = &egl_extension_enabled;
69
+ #endif
67
70
68
71
return request_extensions;
69
72
}
@@ -128,9 +131,14 @@ bool OpenXROpenGLExtension::check_graphics_api_support(XrVersion p_desired_versi
128
131
XrGraphicsBindingOpenGLWin32KHR OpenXROpenGLExtension::graphics_binding_gl;
129
132
#elif defined(ANDROID_ENABLED)
130
133
XrGraphicsBindingOpenGLESAndroidKHR OpenXROpenGLExtension::graphics_binding_gl;
131
- #elif defined(X11_ENABLED)
134
+ #elif defined(LINUXBSD_ENABLED)
135
+ #ifdef X11_ENABLED
132
136
XrGraphicsBindingOpenGLXlibKHR OpenXROpenGLExtension::graphics_binding_gl;
133
137
#endif
138
+ #ifdef EGL_ENABLED
139
+ XrGraphicsBindingEGLMNDX OpenXROpenGLExtension::graphics_binding_egl;
140
+ #endif
141
+ #endif
134
142
135
143
void *OpenXROpenGLExtension::set_session_create_and_get_next_pointer (void *p_next_pointer) {
136
144
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
142
150
143
151
DisplayServer *display_server = DisplayServer::get_singleton ();
144
152
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
-
149
153
#ifdef WIN32
150
154
graphics_binding_gl.type = XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR,
151
155
graphics_binding_gl.next = p_next_pointer;
@@ -159,7 +163,23 @@ void *OpenXROpenGLExtension::set_session_create_and_get_next_pointer(void *p_nex
159
163
graphics_binding_gl.display = (void *)display_server->window_get_native_handle (DisplayServer::DISPLAY_HANDLE);
160
164
graphics_binding_gl.config = (EGLConfig)0 ; // https://github.com/KhronosGroup/OpenXR-SDK-Source/blob/master/src/tests/hello_xr/graphicsplugin_opengles.cpp#L122
161
165
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)
163
183
graphics_binding_gl.type = XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR;
164
184
graphics_binding_gl.next = p_next_pointer;
165
185
@@ -175,8 +195,13 @@ void *OpenXROpenGLExtension::set_session_create_and_get_next_pointer(void *p_nex
175
195
graphics_binding_gl.visualid = 0 ;
176
196
graphics_binding_gl.glxFBConfig = 0 ;
177
197
#endif
198
+ #endif
178
199
200
+ #if defined(WIN32) || defined(ANDROID_ENABLED) || defined(X11_ENABLED)
179
201
return &graphics_binding_gl;
202
+ #else
203
+ return p_next_pointer;
204
+ #endif
180
205
}
181
206
182
207
void OpenXROpenGLExtension::get_usable_swapchain_formats (Vector<int64_t > &p_usable_swap_chains) {
0 commit comments