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

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

Merge "extend recordingcanvas overrides for mat4"

parents 4672efb1 a4973d84
Loading
Loading
Loading
Loading
+25 −23
Original line number Diff line number Diff line
@@ -19,8 +19,10 @@ X(Save)
X(Restore)
X(SaveLayer)
X(SaveBehind)
X(Concat44)
X(Concat)
X(SetMatrix)
X(Scale)
X(Translate)
X(ClipPath)
X(ClipRect)
+24 −0
Original line number Diff line number Diff line
@@ -130,6 +130,12 @@ struct SaveBehind final : Op {
    }
};

struct Concat44 final : Op {
    static const auto kType = Type::Concat44;
    Concat44(const SkScalar m[16]) { memcpy(colMajor, m, sizeof(colMajor)); }
    SkScalar colMajor[16];
    void draw(SkCanvas* c, const SkMatrix&) const { c->experimental_concat44(colMajor); }
};
struct Concat final : Op {
    static const auto kType = Type::Concat;
    Concat(const SkMatrix& matrix) : matrix(matrix) {}
@@ -144,6 +150,12 @@ struct SetMatrix final : Op {
        c->setMatrix(SkMatrix::Concat(original, matrix));
    }
};
struct Scale final : Op {
    static const auto kType = Type::Scale;
    Scale(SkScalar sx, SkScalar sy) : sx(sx), sy(sy) {}
    SkScalar sx, sy;
    void draw(SkCanvas* c, const SkMatrix&) const { c->scale(sx, sy); }
};
struct Translate final : Op {
    static const auto kType = Type::Translate;
    Translate(SkScalar dx, SkScalar dy) : dx(dx), dy(dy) {}
@@ -562,12 +574,18 @@ void DisplayListData::saveBehind(const SkRect* subset) {
    this->push<SaveBehind>(0, subset);
}

void DisplayListData::concat44(const SkScalar colMajor[16]) {
    this->push<Concat44>(0, colMajor);
}
void DisplayListData::concat(const SkMatrix& matrix) {
    this->push<Concat>(0, matrix);
}
void DisplayListData::setMatrix(const SkMatrix& matrix) {
    this->push<SetMatrix>(0, matrix);
}
void DisplayListData::scale(SkScalar sx, SkScalar sy) {
    this->push<Scale>(0, sx, sy);
}
void DisplayListData::translate(SkScalar dx, SkScalar dy) {
    this->push<Translate>(0, dx, dy);
}
@@ -823,12 +841,18 @@ bool RecordingCanvas::onDoSaveBehind(const SkRect* subset) {
    return false;
}

void RecordingCanvas::didConcat44(const SkScalar colMajor[16]) {
    fDL->concat44(colMajor);
}
void RecordingCanvas::didConcat(const SkMatrix& matrix) {
    fDL->concat(matrix);
}
void RecordingCanvas::didSetMatrix(const SkMatrix& matrix) {
    fDL->setMatrix(matrix);
}
void RecordingCanvas::didScale(SkScalar sx, SkScalar sy) {
    fDL->scale(sx, sy);
}
void RecordingCanvas::didTranslate(SkScalar dx, SkScalar dy) {
    fDL->translate(dx, dy);
}
+4 −0
Original line number Diff line number Diff line
@@ -82,8 +82,10 @@ private:
    void saveBehind(const SkRect*);
    void restore();

    void concat44(const SkScalar colMajor[16]);
    void concat(const SkMatrix&);
    void setMatrix(const SkMatrix&);
    void scale(SkScalar, SkScalar);
    void translate(SkScalar, SkScalar);
    void translateZ(SkScalar);

@@ -153,8 +155,10 @@ public:

    void onFlush() override;

    void didConcat44(const SkScalar[16]) override;
    void didConcat(const SkMatrix&) override;
    void didSetMatrix(const SkMatrix&) override;
    void didScale(SkScalar, SkScalar) override;
    void didTranslate(SkScalar, SkScalar) override;

    void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override;
+5 −4
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include "SkAndroidFrameworkUtils.h"
#include "SkClipStack.h"
#include "SkRect.h"
#include "include/private/SkM44.h"

namespace android {
namespace uirenderer {
@@ -92,7 +93,7 @@ void GLFunctorDrawable::onDraw(SkCanvas* canvas) {

    SkIRect surfaceBounds = canvas->internal_private_getTopLayerBounds();
    SkIRect clipBounds = canvas->getDeviceClipBounds();
    SkMatrix44 mat4(canvas->getTotalMatrix());
    SkM44 mat4(canvas->experimental_getLocalToDevice());
    SkRegion clipRegion;
    canvas->temporary_internal_getRgnClip(&clipRegion);

@@ -118,7 +119,7 @@ void GLFunctorDrawable::onDraw(SkCanvas* canvas) {

        // update the matrix and clip that we pass to the WebView to match the coordinates of
        // the offscreen layer
        mat4.preTranslate(-clipBounds.fLeft, -clipBounds.fTop, 0);
        mat4.preTranslate(-clipBounds.fLeft, -clipBounds.fTop);
        clipBounds.offsetTo(0, 0);
        clipRegion.translate(-surfaceBounds.fLeft, -surfaceBounds.fTop);

@@ -126,7 +127,7 @@ void GLFunctorDrawable::onDraw(SkCanvas* canvas) {
        // we are drawing into a (clipped) offscreen layer so we must update the clip and matrix
        // from device coordinates to the layer's coordinates
        clipBounds.offset(-surfaceBounds.fLeft, -surfaceBounds.fTop);
        mat4.preTranslate(-surfaceBounds.fLeft, -surfaceBounds.fTop, 0);
        mat4.preTranslate(-surfaceBounds.fLeft, -surfaceBounds.fTop);
    }

    DrawGlInfo info;
@@ -137,7 +138,7 @@ void GLFunctorDrawable::onDraw(SkCanvas* canvas) {
    info.isLayer = fboID != 0;
    info.width = fboSize.width();
    info.height = fboSize.height();
    mat4.asColMajorf(&info.transform[0]);
    mat4.getColMajor(&info.transform[0]);
    info.color_space_ptr = canvas->imageInfo().colorSpace();

    // ensure that the framebuffer that the webview will render into is bound before we clear
+3 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <GrBackendDrawableInfo.h>
#include <SkAndroidFrameworkUtils.h>
#include <SkImage.h>
#include "include/private/SkM44.h"
#include <utils/Color.h>
#include <utils/Trace.h>
#include <utils/TraceUtils.h>
@@ -62,7 +63,7 @@ void VkFunctorDrawHandler::draw(const GrBackendDrawableInfo& info) {
            renderthread::RenderThread::getInstance().vulkanManager();
    mFunctorHandle->initVk(vk_manager.getVkFunctorInitParams());

    SkMatrix44 mat4(mMatrix);
    SkM44 mat4(mMatrix);
    VkFunctorDrawParams params{
            .width = mImageInfo.width(),
            .height = mImageInfo.height(),
@@ -72,7 +73,7 @@ void VkFunctorDrawHandler::draw(const GrBackendDrawableInfo& info) {
            .clip_right = mClip.fRight,
            .clip_bottom = mClip.fBottom,
    };
    mat4.asColMajorf(&params.transform[0]);
    mat4.getColMajor(&params.transform[0]);
    params.secondary_command_buffer = vulkan_info.fSecondaryCommandBuffer;
    params.color_attachment_index = vulkan_info.fColorAttachmentIndex;
    params.compatible_render_pass = vulkan_info.fCompatibleRenderPass;
Loading