diff options
-rw-r--r-- | libs/hwui/Canvas.h | 4 | ||||
-rw-r--r-- | libs/hwui/DisplayListCanvas.cpp | 5 | ||||
-rw-r--r-- | libs/hwui/DisplayListCanvas.h | 1 | ||||
-rw-r--r-- | libs/hwui/DisplayListOp.h | 23 | ||||
-rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 7 | ||||
-rwxr-xr-x | libs/hwui/OpenGLRenderer.h | 6 | ||||
-rw-r--r-- | libs/hwui/RenderNode.cpp | 2 | ||||
-rw-r--r-- | libs/hwui/SkiaCanvas.cpp | 1 | ||||
-rw-r--r-- | libs/hwui/SkiaCanvasProxy.cpp | 6 |
9 files changed, 14 insertions, 41 deletions
diff --git a/libs/hwui/Canvas.h b/libs/hwui/Canvas.h index 3c77b3d1cac9..4bd4ac8d4c37 100644 --- a/libs/hwui/Canvas.h +++ b/libs/hwui/Canvas.h @@ -85,10 +85,6 @@ 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; diff --git a/libs/hwui/DisplayListCanvas.cpp b/libs/hwui/DisplayListCanvas.cpp index 61c5883cfbfb..bb149fe09d69 100644 --- a/libs/hwui/DisplayListCanvas.cpp +++ b/libs/hwui/DisplayListCanvas.cpp @@ -168,11 +168,6 @@ 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); diff --git a/libs/hwui/DisplayListCanvas.h b/libs/hwui/DisplayListCanvas.h index 3b619046612f..f29e835c4858 100644 --- a/libs/hwui/DisplayListCanvas.h +++ b/libs/hwui/DisplayListCanvas.h @@ -143,7 +143,6 @@ 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; diff --git a/libs/hwui/DisplayListOp.h b/libs/hwui/DisplayListOp.h index 8ff58d4f64f5..8bb892f8e9d4 100644 --- a/libs/hwui/DisplayListOp.h +++ b/libs/hwui/DisplayListOp.h @@ -472,7 +472,9 @@ public: : mMatrix(matrix) {} virtual void applyState(OpenGLRenderer& renderer, int saveCount) const override { - renderer.setMatrix(mMatrix); + // Setting a matrix on a Canvas isn't equivalent to setting a total matrix on the scene. + // Set a canvas-relative matrix on the renderer instead. + renderer.setLocalMatrix(mMatrix); } virtual void output(int level, uint32_t logFlags) const override { @@ -489,25 +491,6 @@ 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) diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index e63a579fe2b4..b35c0179193a 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -1151,7 +1151,7 @@ bool OpenGLRenderer::storeDisplayState(DeferredDisplayState& state, int stateDef } void OpenGLRenderer::restoreDisplayState(const DeferredDisplayState& state, bool skipClipRestore) { - setMatrix(state.mMatrix); + setGlobalMatrix(state.mMatrix); writableSnapshot()->alpha = state.mAlpha; writableSnapshot()->roundRectClipState = state.mRoundRectClipState; writableSnapshot()->projectionPathMask = state.mProjectionPathMask; @@ -2098,8 +2098,9 @@ void OpenGLRenderer::skew(float sx, float sy) { mState.skew(sx, sy); } -void OpenGLRenderer::setMatrix(const Matrix4& matrix) { - mState.setMatrix(matrix); +void OpenGLRenderer::setLocalMatrix(const Matrix4& matrix) { + mState.setMatrix(mBaseTransform); + mState.concatMatrix(matrix); } void OpenGLRenderer::setLocalMatrix(const SkMatrix& matrix) { diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h index 4f75482f06e5..45662a77cfdd 100755 --- a/libs/hwui/OpenGLRenderer.h +++ b/libs/hwui/OpenGLRenderer.h @@ -367,8 +367,10 @@ public: void restore(); void restoreToCount(int saveCount); - void getMatrix(SkMatrix* outMatrix) const { mState.getMatrix(outMatrix); } - void setMatrix(const SkMatrix& matrix) { mState.setMatrix(matrix); } + void setGlobalMatrix(const Matrix4& matrix) { + mState.setMatrix(matrix); + } + void setLocalMatrix(const Matrix4& matrix); void setLocalMatrix(const SkMatrix& matrix); void concatMatrix(const SkMatrix& matrix) { mState.concatMatrix(matrix); } diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp index 4e159e3bf9ae..73c01075e842 100644 --- a/libs/hwui/RenderNode.cpp +++ b/libs/hwui/RenderNode.cpp @@ -719,7 +719,7 @@ void RenderNode::issueOperationsOf3dChildren(ChildrenSelectMode mode, // Apply the base transform of the parent of the 3d children. This isolates // 3d children of the current chunk from transformations made in previous chunks. int rootRestoreTo = renderer.save(SkCanvas::kMatrix_SaveFlag); - renderer.setMatrix(initialTransform); + renderer.setGlobalMatrix(initialTransform); /** * Draw shadows and (potential) casters mostly in order, but allow the shadows of casters diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp index c122d9904ecc..0c5b4b7c8e24 100644 --- a/libs/hwui/SkiaCanvas.cpp +++ b/libs/hwui/SkiaCanvas.cpp @@ -74,7 +74,6 @@ public: virtual void getMatrix(SkMatrix* outMatrix) const override; virtual void setMatrix(const SkMatrix& matrix) override; - virtual void setLocalMatrix(const SkMatrix& matrix) override { this->setMatrix(matrix); } virtual void concat(const SkMatrix& matrix) override; virtual void rotate(float degrees) override; virtual void scale(float sx, float sy) override; diff --git a/libs/hwui/SkiaCanvasProxy.cpp b/libs/hwui/SkiaCanvasProxy.cpp index 5e6d77474e5b..41152dcb879d 100644 --- a/libs/hwui/SkiaCanvasProxy.cpp +++ b/libs/hwui/SkiaCanvasProxy.cpp @@ -142,7 +142,7 @@ void SkiaCanvasProxy::onDrawSprite(const SkBitmap& bitmap, int left, int top, const SkPaint* paint) { // TODO: if bitmap is a subset, do we need to add pixelRefOrigin to src? mCanvas->save(SkCanvas::kMatrixClip_SaveFlag); - mCanvas->setLocalMatrix(SkMatrix::I()); + mCanvas->setMatrix(SkMatrix::I()); mCanvas->drawBitmap(bitmap, left, top, paint); mCanvas->restore(); } @@ -192,9 +192,7 @@ void SkiaCanvasProxy::didConcat(const SkMatrix& matrix) { } void SkiaCanvasProxy::didSetMatrix(const SkMatrix& matrix) { - // SkCanvas setMatrix() is relative to the Canvas origin, but OpenGLRenderer's - // setMatrix() is relative to device origin; call setLocalMatrix() instead. - mCanvas->setLocalMatrix(matrix); + mCanvas->setMatrix(matrix); } void SkiaCanvasProxy::onDrawDRRect(const SkRRect& outer, const SkRRect& inner, |