Add details to documentation of Fl_Wayland_Gl_Window_Driver::swap_buffers()

This commit is contained in:
ManoloFLTK
2023-07-08 09:23:38 +02:00
parent 3d03a5426b
commit 18befa5e81
+9 -3
View File
@@ -1052,12 +1052,12 @@ and puts in the returned \c Fl_Gl_Choice object the first matching configuration
The filtering gets done with bits \c EGL_WINDOW_BIT, to support the creation of window The filtering gets done with bits \c EGL_WINDOW_BIT, to support the creation of window
surfaces, and \c EGL_OPENGL_BIT, to support the creation of OpenGL contexts. surfaces, and \c EGL_OPENGL_BIT, to support the creation of OpenGL contexts.
EGL needs 2 more objects created for each \c Fl_Gl_Window of type EGL needs 2 more objects created for each \c Fl_Gl_Window. They have types
<tt>struct wl_egl_window</tt> and \c EGLSurface. Both are created by member <tt>struct wl_egl_window</tt> and \c EGLSurface, and are created by member
function \c Fl_Wayland_Gl_Window_Driver::make_current_before() which runs at the function \c Fl_Wayland_Gl_Window_Driver::make_current_before() which runs at the
beginning of \c Fl_Gl_Window::make_current(). beginning of \c Fl_Gl_Window::make_current().
The first argument of the call to \c wl_egl_window_create() therein has type The first argument of the call to \c wl_egl_window_create() therein has type
<tt>struct wl_surface *</tt> and is what connects EGL with the desired Wayland window. <tt>struct wl_surface *</tt> and is what connects EGL with the targetted Wayland window.
EGL creates with \c eglCreateContext() an object of type \c EGLContext via member EGL creates with \c eglCreateContext() an object of type \c EGLContext via member
function \c Fl_Wayland_Gl_Window_Driver::create_gl_context() called by function \c Fl_Wayland_Gl_Window_Driver::create_gl_context() called by
@@ -1078,6 +1078,12 @@ emulate an overlay buffer to support Fl_Gl_Window objects overriding their
Then, it calls function \c eglSwapBuffers() after having called Then, it calls function \c eglSwapBuffers() after having called
\c wl_display_dispatch_pending() to synchronize EGL use \c wl_display_dispatch_pending() to synchronize EGL use
with the rest of the Wayland compositor's activity. with the rest of the Wayland compositor's activity.
Function \c wl_display_dispatch_pending() calls the listeners attached to
commands the Wayland compositor recently sent to the client.
The fact that this function gets called during the process of drawing an Fl_Gl_Window
makes possible a scenario that cannot occur with other FLTK platforms : a GL window can be
closed while being drawn. Function \c Fl_Wayland_Window_Driver::hide() is written to
handle such scenario without error (see comments therein).
The overridden \c Fl_Wayland_Gl_Window_Driver::resize() function is implemented with The overridden \c Fl_Wayland_Gl_Window_Driver::resize() function is implemented with
calls to \c wl_egl_window_get_attached_size() and \c wl_egl_window_resize(). calls to \c wl_egl_window_get_attached_size() and \c wl_egl_window_resize().