Skip to content
  • Vlad Zahorodnii's avatar
    Use bilinear interpolation to compute texture coords of subquads · 7301564e
    Vlad Zahorodnii authored
    On Wayland, a surface must be displayed the same way no matter how the
    attached buffer is transformed. In order to guarantee that, we build the
    surface-to-buffer matrix, which is used to compute the texture coords.
    
    The surface-to-buffer matrix represents an affine transformation. Thus,
    performing linear interpolation between texture coordinates won't end up
    in corrupted rendered results. This is the main assumption that we make
    during generation of contents window quads. After creating a sub-quad,
    the new quad's texture coordinates are computed by interpolating between
    the source quad's texture coords.
    
    However, WindowQuad::makeSubQuad() makes a concrete assumption about the
    order of texture coords, which might be false if the attached wayland
    buffer is rotated 90 or 270 degrees.
    
    This issue went unnoticed after merging the viewporter patches because
    the developer who was working on it had been using primarily nested
    kwin_wayland for testing purposes. And it appears like kwin schedules
    full screen repaints even though it supports buffer age. It still needs
    some investigation why that happens.
    
    BUG: 428003
    7301564e