FLTK logo

[master] 50d26b0 - Wayland platform: add support of gl_start() / gl_finish().

FLTK matrix user chat room
(using Element browser app)   FLTK gitter user chat room   GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 All Forums  |  Back to fltk.commit  ]
 
Previous Message ]Next Message ]

[master] 50d26b0 - Wayland platform: add support of gl_start() / gl_finish(). "ManoloFLTK" Jul 01, 2022  
 
commit 50d26b09a83d06ce057ec99a5ed54f0ce6d569ea
Author:     ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>
AuthorDate: Fri Jul 1 09:10:32 2022 +0200
Commit:     ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>
CommitDate: Fri Jul 1 09:10:32 2022 +0200

    Wayland platform: add support of gl_start() / gl_finish().

 src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx | 17 +++++++++++++++++
 src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx  |  1 +
 2 files changed, 18 insertions(+)

diff --git src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx
index ab1b379..fad32cb 100644
--- src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx
+++ 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 src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
index 7e7e1f0..f5de5d9 100644
--- src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
+++ 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);
Direct Link to Message ]
 
     
Previous Message ]Next Message ]
 
 

Comments are owned by the poster. All other content is copyright 1998-2024 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.