Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(219)

Unified Diff: include/gpu/GrContext.h

Issue 808703006: remove view matrix from context (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: one more fix Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/effects/SkPerlinNoiseShader.h ('k') | include/gpu/GrPaint.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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&,
« no previous file with comments | « include/effects/SkPerlinNoiseShader.h ('k') | include/gpu/GrPaint.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698