Skip to content
  • Pekka Paalanen's avatar
    clients: add subsurfaces demo · 7ff7a800
    Pekka Paalanen authored
    
    
    Add a demo program with:
    - a main surface (green)
    - a Cairo-image sub-surface (red)
    - a raw GLESv2 widget (triangle)
    
    Sub-surface input region is set empty to avoid problems in toytoolkit.
    
    If Cairo links to libGL, then we will end up with also libGLESv2 linked
    to subsurfaces program, and both libs getting really used, which leads
    to disaster.
    
    Do not build subsurfaces demo, if Cairo links to libGL and cairo-egl is
    usable.
    
    The GL rendering loop is not tied to the toytoolkit or the widget, but
    runs directly from its own frame callback. Therefore it runs
    independent of the rest of the application. This also relies on one of
    two things:
    - eglSwapInterval(0) is implemented, and therefore eglSwapBuffers never
      blocks indefinitely, or
    - toytoolkit has a workaround, that guarantees that eglSwapBuffers will
      return soon, when we force a repaint on resize.
    Otherwise the demo will deadlock.
    
    The code is separated into three sections:
    
    1. The library component, using only EGL, GLESv2, and libwayland-client
       APIs, and not aware of any toolkit details of the parent application.
       This runs independently until the parent application tells otherwise.
    
    2. The glue code: a toytoolkit application widget, who has its own
       rendering machinery.
    
    3. The application written in toytoolkit.
    
    This patch also adds new toytoolkit interfaces:
    - widget_get_wl_surface()
    - widget_get_last_time()
    - widget_input_region_add()
    
    Toytoolkit applications have not had a possibility to change the input
    region. The frame widget (decorations) set the input region on its own
    when used, otherwise the default input region of everything has been
    used. If a window does not have a frame widget, it can now use
    widget_input_region_add() to set a custom input region.
    
    These are not window methods, because a widget may lie on a different
    wl_surface (sub-surface) than the window.
    
    Changes in v3:
    - replace set_commit_mode with set_sync and set_desync
    
    Signed-off-by: Pekka Paalanen's avatarPekka Paalanen <ppaalanen@gmail.com>
    7ff7a800