Skip to content
  • Sebastian Keller's avatar
    gsk/gl: Always align offscreen rendering with the pixel grid · 85a6517d
    Sebastian Keller authored
    This fixes two issues with the offscreen rendering code for nodes with
    bounds not aligned with the pixel grid:
    
    1.) When drawing to an offscreen buffer the size of the offscreen buffer
    was rounded up, but then later when used as texture the vertices
    correspond to the original bounds with the unrounded size. This could
    then result in the offscreen texture being drawn onscreen at a slightly
    smaller size, which then lead to it being visually shifted and blurry.
    
    This is fixed by adjusting the u/v coordinates to ignore the padding
    region in the offscreen texture that got added by the size increase from
    rounding.
    
    2.) The viewport used when rendering to the offscreen buffer was not
    aligned with the pixel grid for nodes at coordinates not aligned with
    the pixel grid. Then because the content of the offscreen buffer is not
    aligned with the pixel grid and later when used as textures sampling
    from it will result in interpolated values for an onscreen pixel. This
    could also result in shifting and blurriness, especially for nested
    offscreen rendering at different offsets.
    
    This is fixed by adding similar padding at the beginning of the
    texture and also adjusting the u/v coordinates to ignore this region.
    
    Fixes: GNOME/gtk#3833
    85a6517d