Skip to content
  • Jonas Ådahl's avatar
    Introduce regional stage rendering · 566c28bd
    Jonas Ådahl authored
    Add support for drawing a stage using multiple framebuffers each making
    up one part of the stage. This works by the stage backend
    (ClutterStageWindow) providing a list of views which will be for
    splitting up the stage in different regions.
    
    A view layout, for now, is a set of rectangles. The stage window (i.e.
    stage "backend" will use this information when drawing a frame, using
    one framebuffer for each view. The scene graph is adapted to explictly
    take a view when painting the stage. It will use this view, its
    assigned framebuffer and layout to offset and clip the drawing
    accordingly.
    
    This effectively removes any notion of "stage framebuffer", since each
    stage now may consist of multiple framebuffers. Therefore, API
    involving this has been deprecated and made no-ops; namely
    clutter_stage_ensure_context(). Callers are now assumed to either
    always use a framebuffer reference explicitly, or push/pop the
    framebuffer of a given view where the code has not yet changed to use
    the explicit-buffer-using cogl API.
    
    Currently only the nested X11 backend supports this mode fully, and the
    per view framebuffers are all offscreen. Upon frame completion, it'll
    blit each view's framebuffer onto the onscreen framebuffer before
    swapping.
    
    Other backends (X11 CM and native/KMS) are adapted to manage a
    full-stage view. The X11 CM backend will continue to use this method,
    while the native/KMS backend will be adopted to use multiple view
    drawing.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=768976
    566c28bd