diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2022-07-01 09:10:32 +0200 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2022-07-01 09:10:32 +0200 |
| commit | 50d26b09a83d06ce057ec99a5ed54f0ce6d569ea (patch) | |
| tree | 919e09c37329bf3fea2a85ad2b7a3d9fadc81607 | |
| parent | 4d85b154175f83e2af5c1adf90e7768ed319a82f (diff) | |
Wayland platform: add support of gl_start() / gl_finish().
| -rw-r--r-- | src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx | 17 | ||||
| -rw-r--r-- | src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx | 1 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx index ab1b37964..fad32cb15 100644 --- a/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx +++ b/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx @@ -170,6 +170,12 @@ GLContext Fl_Wayland_Gl_Window_Driver::create_gl_context(Fl_Window* window, cons //fprintf(stderr, "eglCreateContext=%p shared_ctx=%p\n", ctx, shared_ctx); if (ctx) add_context(ctx); + if (!egl_surface) { // useful for gl_start() + struct wld_window *xid = fl_xid(window); + float s = Fl::screen_scale(window->screen_num()); + egl_window = wl_egl_window_create(xid->wl_surface, window->w() * s, window->h() * s); + egl_surface = eglCreateWindowSurface(egl_display, ((Fl_Wayland_Gl_Choice*)g)->egl_conf, egl_window, NULL); + } return ctx; } @@ -349,10 +355,21 @@ char Fl_Wayland_Gl_Window_Driver::swap_type() { return copy; } + void Fl_Wayland_Gl_Window_Driver::waitGL() { + struct wld_window *window = fl_xid(Fl_Window::current()); + window->buffer->draw_buffer_needs_commit = false; } + void Fl_Wayland_Gl_Window_Driver::gl_start() { + struct wld_window *win = fl_xid(Fl_Window::current()); + float f = Fl::screen_scale(Fl_Window::current()->screen_num()); + int W = Fl_Window::current()->w() * f; + int H = Fl_Window::current()->h() * f; + int W2, H2; + wl_egl_window_get_attached_size(egl_window, &W2, &H2); + if (W2 != W || H2 != H) wl_egl_window_resize(egl_window, W, H, 0, 0); } diff --git a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx index 7e7e1f0d7..f5de5d94d 100644 --- a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx +++ b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx @@ -79,6 +79,7 @@ struct fl_wld_buffer *Fl_Wayland_Graphics_Driver::create_shm_buffer(int width, i void Fl_Wayland_Graphics_Driver::buffer_commit(struct wld_window *window) { + if (!window->buffer->draw_buffer_needs_commit) return; cairo_surface_t *surf = cairo_get_target(window->buffer->cairo_); cairo_surface_flush(surf); memcpy(window->buffer->data, window->buffer->draw_buffer, window->buffer->data_size); |
