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

Commit ac7b6d33 authored by Tom Hudson's avatar Tom Hudson
Browse files

New setLocalMatrix() operation for HWUI

Concats any matrix passed through from DisplayListCanvas with the
initialTransform of the containing RenderNode.

BUG:22189925

Change-Id: I5ea54a6e2a29520c79a8860bde7682694e8595d2
parent 937edac8
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -80,6 +80,10 @@ public:
    virtual void getMatrix(SkMatrix* outMatrix) const = 0;
    virtual void setMatrix(const SkMatrix& matrix) = 0;

    /// Like setMatrix(), but to be translated into local / view-relative coordinates
    /// rather than executed in global / device coordinates at rendering time.
    virtual void setLocalMatrix(const SkMatrix& matrix) = 0;

    virtual void concat(const SkMatrix& matrix) = 0;
    virtual void rotate(float degrees) = 0;
    virtual void scale(float sx, float sy) = 0;
+5 −0
Original line number Diff line number Diff line
@@ -176,6 +176,11 @@ void DisplayListCanvas::setMatrix(const SkMatrix& matrix) {
    mState.setMatrix(matrix);
}

void DisplayListCanvas::setLocalMatrix(const SkMatrix& matrix) {
    addStateOp(new (alloc()) SetLocalMatrixOp(matrix));
    mState.setMatrix(matrix);
}

void DisplayListCanvas::concat(const SkMatrix& matrix) {
    addStateOp(new (alloc()) ConcatMatrixOp(matrix));
    mState.concatMatrix(matrix);
+1 −0
Original line number Diff line number Diff line
@@ -165,6 +165,7 @@ public:
    // Matrix
    virtual void getMatrix(SkMatrix* outMatrix) const override { mState.getMatrix(outMatrix); }
    virtual void setMatrix(const SkMatrix& matrix) override;
    virtual void setLocalMatrix(const SkMatrix& matrix) override;

    virtual void concat(const SkMatrix& matrix) override;
    virtual void rotate(float degrees) override;
+19 −0
Original line number Diff line number Diff line
@@ -489,6 +489,25 @@ private:
    const SkMatrix mMatrix;
};

class SetLocalMatrixOp : public StateOp {
public:
    SetLocalMatrixOp(const SkMatrix& matrix)
            : mMatrix(matrix) {}

    virtual void applyState(OpenGLRenderer& renderer, int saveCount) const override {
        renderer.setLocalMatrix(mMatrix);
    }

    virtual void output(int level, uint32_t logFlags) const override {
        OP_LOG("SetLocalMatrix " SK_MATRIX_STRING, SK_MATRIX_ARGS(&mMatrix));
    }

    virtual const char* name() override { return "SetLocalMatrix"; }

private:
    const SkMatrix mMatrix;
};

class ConcatMatrixOp : public StateOp {
public:
    ConcatMatrixOp(const SkMatrix& matrix)
+6 −0
Original line number Diff line number Diff line
@@ -2148,6 +2148,7 @@ void OpenGLRenderer::restoreToCount(int saveCount) {
    mState.restoreToCount(saveCount);
}


void OpenGLRenderer::translate(float dx, float dy, float dz) {
    mState.translate(dx, dy, dz);
}
@@ -2168,6 +2169,11 @@ void OpenGLRenderer::setMatrix(const Matrix4& matrix) {
    mState.setMatrix(matrix);
}

void OpenGLRenderer::setLocalMatrix(const SkMatrix& matrix) {
    mState.setMatrix(mBaseTransform);
    mState.concatMatrix(matrix);
}

void OpenGLRenderer::concatMatrix(const Matrix4& matrix) {
    mState.concatMatrix(matrix);
}
Loading