Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0e65e6c2 authored by Dan Stoza's avatar Dan Stoza
Browse files

libgui: Fix surface damage on rotated buffers

Flips the width and height when the buffer comes in with a 90 degree
rotation so that performing the Y-flip from GL works correctly.

Bug: 20761426
Change-Id: I41c9edc8549c6cbdb534277b996ff20c59034582
parent 20828e63
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -335,10 +335,14 @@ int Surface::queueBuffer(android_native_buffer_t* buffer, int fenceFd) {
        // the origin being in the bottom-left corner. Here we flip to the
        // convention that the rest of the system uses (top-left corner) by
        // subtracting all top/bottom coordinates from the buffer height.
        int height = buffer->height;
        if ((mTransform ^ mStickyTransform) & NATIVE_WINDOW_TRANSFORM_ROT_90) {
            height = buffer->width;
        }
        Region flippedRegion;
        for (auto rect : mDirtyRegion) {
            auto top = buffer->height - rect.bottom;
            auto bottom = buffer->height - rect.top;
            auto top = height - rect.bottom;
            auto bottom = height - rect.top;
            Rect flippedRect{rect.left, top, rect.right, bottom};
            flippedRegion.orSelf(flippedRect);
        }