mirror of
https://github.com/glfw/glfw.git
synced 2026-04-19 03:13:17 +02:00
Wayland: Fix EGL buffer swap blocking indefinitely
When the swap interval was nonzero, EGL on Wayland would wait indefinitely for a frame callback on a suspended window, causing applications that call eglSwapBuffers to halt. This re-implements the wait for a surface frame so that we can add a reasonable timeout, while setting the EGL swap interval to zero. That allows applications to make progress despite the window being suspended. Some insights for how to structure this workaround were gleaned from dri2_wl_swap_buffers_with_damage in Mesa. This initial implementation still has a race between glfwHideWindow and glfwSwapBuffers when rendering on a separate thread. This could lead to a window becoming visible again after being hidden on the main thread. Related to #1350 Fixes #2582 Fixes #2640 Fixes #2719 Fixes #2723 Fixes #2800 Fixes #2827
This commit is contained in:
@@ -6174,6 +6174,10 @@ GLFWAPI GLFWwindow* glfwGetCurrentContext(void);
|
||||
* @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
|
||||
* GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR.
|
||||
*
|
||||
* @remark __Wayland:__ When the swap interval is greater than zero and the
|
||||
* window is not in view, this function may take a few extra milliseconds to
|
||||
* return.
|
||||
*
|
||||
* @remark __EGL:__ The context of the specified window must be current on the
|
||||
* calling thread.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user