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

Commit aba72b6d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "libui: Standardize getting a mat4 from a Transform"

parents 6b243887 7e06e7ff
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
@@ -381,6 +381,37 @@ bool Transform::preserveRects() const
    return (getOrientation() & ROT_INVALID) ? false : true;
}

mat4 Transform::asMatrix4() const {
    // Internally Transform uses a 3x3 matrix since the transform is meant for
    // two-dimensional values. An equivalent 4x4 matrix means inserting an extra
    // row and column which adds as an identity transform on the third
    // dimension.

    mat4 m = mat4{mat4::NO_INIT}; // NO_INIT since we explicitly set every element

    m[0][0] = mMatrix[0][0];
    m[0][1] = mMatrix[0][1];
    m[0][2] = 0.f;
    m[0][3] = mMatrix[0][2];

    m[1][0] = mMatrix[1][0];
    m[1][1] = mMatrix[1][1];
    m[1][2] = 0.f;
    m[1][3] = mMatrix[1][2];

    m[2][0] = 0.f;
    m[2][1] = 0.f;
    m[2][2] = 1.f;
    m[2][3] = 0.f;

    m[3][0] = mMatrix[2][0];
    m[3][1] = mMatrix[2][1];
    m[3][2] = 0.f;
    m[3][3] = mMatrix[2][2];

    return m;
}

void Transform::dump(std::string& out, const char* name) const {
    using android::base::StringAppendF;

+4 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include <string>

#include <hardware/hardware.h>
#include <math/mat4.h>
#include <math/vec2.h>
#include <math/vec3.h>
#include <ui/Point.h>
@@ -88,6 +89,9 @@ public:
    vec2 transform(const vec2& v) const;
    vec3 transform(const vec3& v) const;

    // Expands from the internal 3x3 matrix to an equivalent 4x4 matrix
    mat4 asMatrix4() const;

    Transform inverse() const;

    // for debugging
+2 −23
Original line number Diff line number Diff line
@@ -3288,17 +3288,7 @@ bool SurfaceFlinger::doComposeSurfaces(const sp<DisplayDevice>& displayDevice,
        clientCompositionDisplay.physicalDisplay = displayState.scissor;
        clientCompositionDisplay.clip = displayState.scissor;
        const ui::Transform& displayTransform = displayState.transform;
        mat4 m;
        m[0][0] = displayTransform[0][0];
        m[0][1] = displayTransform[0][1];
        m[0][3] = displayTransform[0][2];
        m[1][0] = displayTransform[1][0];
        m[1][1] = displayTransform[1][1];
        m[1][3] = displayTransform[1][2];
        m[3][0] = displayTransform[2][0];
        m[3][1] = displayTransform[2][1];
        m[3][3] = displayTransform[2][2];
        clientCompositionDisplay.globalTransform = m;
        clientCompositionDisplay.globalTransform = displayTransform.asMatrix4();

        const auto* profile = display->getDisplayColorProfile();
        Dataspace outputDataspace = Dataspace::UNKNOWN;
@@ -5591,18 +5581,7 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea,
    // buffer bounds.
    clientCompositionDisplay.physicalDisplay = Rect(reqWidth, reqHeight);
    ui::Transform transform = renderArea.getTransform();
    mat4 m;
    m[0][0] = transform[0][0];
    m[0][1] = transform[0][1];
    m[0][3] = transform[0][2];
    m[1][0] = transform[1][0];
    m[1][1] = transform[1][1];
    m[1][3] = transform[1][2];
    m[3][0] = transform[2][0];
    m[3][1] = transform[2][1];
    m[3][3] = transform[2][2];

    clientCompositionDisplay.globalTransform = m;
    clientCompositionDisplay.globalTransform = transform.asMatrix4();
    mat4 rotMatrix;
    // Displacement for repositioning the clipping rectangle after rotating it
    // with the rotation hint.