| Index: include/gpu/GrContext.h
|
| diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h
|
| index c3c11b7be7900ebbffaa97786184df782f69e9a1..4df1dac381437673d787764d364bfcb05053ed91 100644
|
| --- a/include/gpu/GrContext.h
|
| +++ b/include/gpu/GrContext.h
|
| @@ -387,34 +387,6 @@ public:
|
| GrRenderTarget* wrapBackendRenderTarget(const GrBackendRenderTargetDesc& desc);
|
|
|
| ///////////////////////////////////////////////////////////////////////////
|
| - // Matrix state
|
| -
|
| - /**
|
| - * Gets the current transformation matrix.
|
| - * @return the current matrix.
|
| - */
|
| - const SkMatrix& getMatrix() const { return fViewMatrix; }
|
| -
|
| - /**
|
| - * Sets the transformation matrix.
|
| - * @param m the matrix to set.
|
| - */
|
| - void setMatrix(const SkMatrix& m) { fViewMatrix = m; }
|
| -
|
| - /**
|
| - * Sets the current transformation matrix to identity.
|
| - */
|
| - void setIdentityMatrix() { fViewMatrix.reset(); }
|
| -
|
| - /**
|
| - * Concats the current matrix. The passed matrix is applied before the
|
| - * current matrix.
|
| - * @param m the matrix to concat.
|
| - */
|
| - void concatMatrix(const SkMatrix& m) { fViewMatrix.preConcat(m); }
|
| -
|
| -
|
| - ///////////////////////////////////////////////////////////////////////////
|
| // Clip state
|
| /**
|
| * Gets the current clip.
|
| @@ -444,11 +416,12 @@ public:
|
| /**
|
| * Draw everywhere (respecting the clip) with the paint.
|
| */
|
| - void drawPaint(const GrPaint& paint);
|
| + void drawPaint(const GrPaint&, const SkMatrix& viewMatrix);
|
|
|
| /**
|
| * Draw the rect using a paint.
|
| * @param paint describes how to color pixels.
|
| + * @param viewMatrix transformation matrix
|
| * @param strokeInfo the stroke information (width, join, cap), and.
|
| * the dash information (intervals, count, phase).
|
| * If strokeInfo == NULL, then the rect is filled.
|
| @@ -458,6 +431,7 @@ public:
|
| * The rects coords are used to access the paint (through texture matrix)
|
| */
|
| void drawRect(const GrPaint& paint,
|
| + const SkMatrix& viewMatrix,
|
| const SkRect&,
|
| const GrStrokeInfo* strokeInfo = NULL);
|
|
|
| @@ -468,24 +442,26 @@ public:
|
| * provided to transform the local rect.
|
| *
|
| * @param paint describes how to color pixels.
|
| + * @param viewMatrix transformation matrix
|
| * @param dstRect the destination rect to draw.
|
| * @param localRect rect of local coordinates to be mapped onto dstRect
|
| - * @param localMatrix Optional matrix to transform localRect.
|
| */
|
| void drawRectToRect(const GrPaint& paint,
|
| + const SkMatrix& viewMatrix,
|
| const SkRect& dstRect,
|
| - const SkRect& localRect,
|
| - const SkMatrix* localMatrix = NULL);
|
| + const SkRect& localRect);
|
|
|
| /**
|
| * Draw a roundrect using a paint.
|
| *
|
| * @param paint describes how to color pixels.
|
| + * @param viewMatrix transformation matrix
|
| * @param rrect the roundrect to draw
|
| * @param strokeInfo the stroke information (width, join, cap) and
|
| * the dash information (intervals, count, phase).
|
| */
|
| - void drawRRect(const GrPaint& paint, const SkRRect& rrect, const GrStrokeInfo& strokeInfo);
|
| + void drawRRect(const GrPaint&, const SkMatrix& viewMatrix, const SkRRect& rrect,
|
| + const GrStrokeInfo&);
|
|
|
| /**
|
| * Shortcut for drawing an SkPath consisting of nested rrects using a paint.
|
| @@ -493,26 +469,30 @@ public:
|
| * inner.
|
| *
|
| * @param paint describes how to color pixels.
|
| + * @param viewMatrix transformation matrix
|
| * @param outer the outer roundrect
|
| * @param inner the inner roundrect
|
| */
|
| - void drawDRRect(const GrPaint& paint, const SkRRect& outer, const SkRRect& inner);
|
| + void drawDRRect(const GrPaint&, const SkMatrix& viewMatrix, const SkRRect& outer,
|
| + const SkRRect& inner);
|
|
|
|
|
| /**
|
| * Draws a path.
|
| *
|
| * @param paint describes how to color pixels.
|
| + * @param viewMatrix transformation matrix
|
| * @param path the path to draw
|
| * @param strokeInfo the stroke information (width, join, cap) and
|
| * the dash information (intervals, count, phase).
|
| */
|
| - void drawPath(const GrPaint& paint, const SkPath& path, const GrStrokeInfo& strokeInfo);
|
| + void drawPath(const GrPaint&, const SkMatrix& viewMatrix, const SkPath&, const GrStrokeInfo&);
|
|
|
| /**
|
| * Draws vertices with a paint.
|
| *
|
| * @param paint describes how to color pixels.
|
| + * @param viewMatrix transformation matrix
|
| * @param primitiveType primitives type to draw.
|
| * @param vertexCount number of vertices.
|
| * @param positions array of vertex positions, required.
|
| @@ -526,6 +506,7 @@ public:
|
| * number of indices.
|
| */
|
| void drawVertices(const GrPaint& paint,
|
| + const SkMatrix& viewMatrix,
|
| GrPrimitiveType primitiveType,
|
| int vertexCount,
|
| const SkPoint positions[],
|
| @@ -538,11 +519,13 @@ public:
|
| * Draws an oval.
|
| *
|
| * @param paint describes how to color pixels.
|
| + * @param viewMatrix transformation matrix
|
| * @param oval the bounding rect of the oval.
|
| * @param strokeInfo the stroke information (width, join, cap) and
|
| * the dash information (intervals, count, phase).
|
| */
|
| void drawOval(const GrPaint& paint,
|
| + const SkMatrix& viewMatrix,
|
| const SkRect& oval,
|
| const GrStrokeInfo& strokeInfo);
|
|
|
| @@ -709,113 +692,6 @@ public:
|
| GrRenderTarget* fPrevTarget;
|
| };
|
|
|
| - /**
|
| - * Save/restore the view-matrix in the context. It can optionally adjust a paint to account
|
| - * for a coordinate system change. Here is an example of how the paint param can be used:
|
| - *
|
| - * A GrPaint is setup with GrProcessors. The stages will have access to the pre-matrix source
|
| - * geometry positions when the draw is executed. Later on a decision is made to transform the
|
| - * geometry to device space on the CPU. The effects now need to know that the space in which
|
| - * the geometry will be specified has changed.
|
| - *
|
| - * Note that when restore is called (or in the destructor) the context's matrix will be
|
| - * restored. However, the paint will not be restored. The caller must make a copy of the
|
| - * paint if necessary. Hint: use SkTCopyOnFirstWrite if the AutoMatrix is conditionally
|
| - * initialized.
|
| - */
|
| - class AutoMatrix : public ::SkNoncopyable {
|
| - public:
|
| - AutoMatrix() : fContext(NULL) {}
|
| -
|
| - ~AutoMatrix() { this->restore(); }
|
| -
|
| - /**
|
| - * Initializes by pre-concat'ing the context's current matrix with the preConcat param.
|
| - */
|
| - void setPreConcat(GrContext* context, const SkMatrix& preConcat, GrPaint* paint = NULL) {
|
| - SkASSERT(context);
|
| -
|
| - this->restore();
|
| -
|
| - fContext = context;
|
| - fMatrix = context->getMatrix();
|
| - this->preConcat(preConcat, paint);
|
| - }
|
| -
|
| - /**
|
| - * Sets the context's matrix to identity. Returns false if the inverse matrix is required to
|
| - * update a paint but the matrix cannot be inverted.
|
| - */
|
| - bool setIdentity(GrContext* context, GrPaint* paint = NULL) {
|
| - SkASSERT(context);
|
| -
|
| - this->restore();
|
| -
|
| - if (paint) {
|
| - if (!paint->localCoordChangeInverse(context->getMatrix())) {
|
| - return false;
|
| - }
|
| - }
|
| - fMatrix = context->getMatrix();
|
| - fContext = context;
|
| - context->setIdentityMatrix();
|
| - return true;
|
| - }
|
| -
|
| - /**
|
| - * Replaces the context's matrix with a new matrix. Returns false if the inverse matrix is
|
| - * required to update a paint but the matrix cannot be inverted.
|
| - */
|
| - bool set(GrContext* context, const SkMatrix& newMatrix, GrPaint* paint = NULL) {
|
| - if (paint) {
|
| - if (!this->setIdentity(context, paint)) {
|
| - return false;
|
| - }
|
| - this->preConcat(newMatrix, paint);
|
| - } else {
|
| - this->restore();
|
| - fContext = context;
|
| - fMatrix = context->getMatrix();
|
| - context->setMatrix(newMatrix);
|
| - }
|
| - return true;
|
| - }
|
| -
|
| - /**
|
| - * If this has been initialized then the context's matrix will be further updated by
|
| - * pre-concat'ing the preConcat param. The matrix that will be restored remains unchanged.
|
| - * The paint is assumed to be relative to the context's matrix at the time this call is
|
| - * made, not the matrix at the time AutoMatrix was first initialized. In other words, this
|
| - * performs an incremental update of the paint.
|
| - */
|
| - void preConcat(const SkMatrix& preConcat, GrPaint* paint = NULL) {
|
| - if (paint) {
|
| - paint->localCoordChange(preConcat);
|
| - }
|
| - fContext->concatMatrix(preConcat);
|
| - }
|
| -
|
| - /**
|
| - * Returns false if never initialized or the inverse matrix was required to update a paint
|
| - * but the matrix could not be inverted.
|
| - */
|
| - bool succeeded() const { return SkToBool(fContext); }
|
| -
|
| - /**
|
| - * If this has been initialized then the context's original matrix is restored.
|
| - */
|
| - void restore() {
|
| - if (fContext) {
|
| - fContext->setMatrix(fMatrix);
|
| - fContext = NULL;
|
| - }
|
| - }
|
| -
|
| - private:
|
| - GrContext* fContext;
|
| - SkMatrix fMatrix;
|
| - };
|
| -
|
| class AutoClip : public ::SkNoncopyable {
|
| public:
|
| // This enum exists to require a caller of the constructor to acknowledge that the clip will
|
| @@ -861,15 +737,11 @@ public:
|
| AutoWideOpenIdentityDraw(GrContext* ctx, GrRenderTarget* rt)
|
| : fAutoClip(ctx, AutoClip::kWideOpen_InitialClip)
|
| , fAutoRT(ctx, rt) {
|
| - fAutoMatrix.setIdentity(ctx);
|
| - // should never fail with no paint param.
|
| - SkASSERT(fAutoMatrix.succeeded());
|
| }
|
|
|
| private:
|
| AutoClip fAutoClip;
|
| AutoRenderTarget fAutoRT;
|
| - AutoMatrix fAutoMatrix;
|
| };
|
|
|
| ///////////////////////////////////////////////////////////////////////////
|
| @@ -934,7 +806,6 @@ public:
|
|
|
| private:
|
| GrGpu* fGpu;
|
| - SkMatrix fViewMatrix;
|
| SkAutoTUnref<GrRenderTarget> fRenderTarget;
|
| const GrClipData* fClip; // TODO: make this ref counted
|
|
|
| @@ -979,10 +850,14 @@ private:
|
| class AutoCheckFlush;
|
| /// Sets the paint and returns the target to draw into. The paint can be NULL in which case the
|
| /// draw state is left unmodified.
|
| - GrDrawTarget* prepareToDraw(GrDrawState* ds, const GrPaint* paint, const AutoCheckFlush*);
|
| + GrDrawTarget* prepareToDraw(GrDrawState* ds,
|
| + const GrPaint* paint,
|
| + const SkMatrix* viewMatrix,
|
| + const AutoCheckFlush*);
|
|
|
| void internalDrawPath(GrDrawTarget*,
|
| GrDrawState*,
|
| + const SkMatrix& viewMatrix,
|
| GrColor,
|
| bool useAA,
|
| const SkPath&,
|
|
|