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

Unified Diff: include/gpu/GrDrawContext.h

Issue 1151283004: Split drawing functionality out of GrContext and into new GrDrawContext (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix no-GPU builds Created 5 years, 7 months 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/gpu/GrContext.h ('k') | src/core/SkImageFilter.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/gpu/GrDrawContext.h
diff --git a/include/gpu/GrDrawContext.h b/include/gpu/GrDrawContext.h
new file mode 100644
index 0000000000000000000000000000000000000000..1ed99c1891a1a2178de90bc0a2ee662c88f2e78f
--- /dev/null
+++ b/include/gpu/GrDrawContext.h
@@ -0,0 +1,252 @@
+/*
+ * Copyright 2015 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrDrawContext_DEFINED
+#define GrDrawContext_DEFINED
+
+#include "GrColor.h"
+#include "SkRefCnt.h"
+
+class GrBatch;
+class GrClip;
+class GrContext;
+class GrDrawTarget;
+class GrPaint;
+class GrPathProcessor;
+class GrPathRange;
+class GrPipelineBuilder;
+class GrRenderTarget;
+class GrStrokeInfo;
+class GrSurface;
+struct SkIPoint;
+struct SkIRect;
+class SkMatrix;
+class SkPath;
+struct SkPoint;
+struct SkRect;
+class SkRRect;
+
+
+/*
+ * A helper object to orchestrate draws
+ */
+class SK_API GrDrawContext : public SkRefCnt {
+public:
+ SK_DECLARE_INST_COUNT(GrDrawContext)
+
+ void copySurface(GrRenderTarget* dst, GrSurface* src,
+ const SkIRect& srcRect, const SkIPoint& dstPoint);
+
+ // drawText and drawPaths are thanks to the GrAtlasTextContext and the
+ // GrStencilAndCoverTextContext respectively
+ // TODO: remove these two
+ void drawText(GrPipelineBuilder* pipelineBuilder, GrBatch* batch);
+
+ void drawPaths(GrPipelineBuilder* pipelineBuilder,
+ const GrPathProcessor* pathProc,
+ const GrPathRange* pathRange,
+ const void* indices,
+ int /*GrDrawTarget::PathIndexType*/ indexType,
+ const float transformValues[],
+ int /*GrDrawTarget::PathTransformType*/ transformType,
+ int count,
+ int /*GrPathRendering::FillType*/ fill);
+
+ /**
+ * Provides a perfomance hint that the render target's contents are allowed
+ * to become undefined.
+ */
+ void discard(GrRenderTarget*);
+
+ /**
+ * Clear the entire or rect of the render target, ignoring any clips.
+ * @param target The render target to clear.
+ * @param rect the rect to clear or the whole thing if rect is NULL.
+ * @param color the color to clear to.
+ * @param canIgnoreRect allows partial clears to be converted to whole
+ * clears on platforms for which that is cheap
+ */
+ void clear(GrRenderTarget*, const SkIRect* rect, GrColor color, bool canIgnoreRect);
+
+ /**
+ * Draw everywhere (respecting the clip) with the paint.
+ */
+ void drawPaint(GrRenderTarget*, const GrClip&, 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.
+ * Otherwise, if stroke width == 0, then the stroke
+ * is always a single pixel thick, else the rect is
+ * mitered/beveled stroked based on stroke width.
+ * The rects coords are used to access the paint (through texture matrix)
+ */
+ void drawRect(GrRenderTarget*,
+ const GrClip&,
+ const GrPaint& paint,
+ const SkMatrix& viewMatrix,
+ const SkRect&,
+ const GrStrokeInfo* strokeInfo = NULL);
+
+ /**
+ * Maps a rectangle of shader coordinates to a rectangle and draws that rectangle
+ *
+ * @param paint describes how to color pixels.
+ * @param viewMatrix transformation matrix which applies to rectToDraw
+ * @param rectToDraw the rectangle to draw
+ * @param localRect the rectangle of shader coordinates applied to rectToDraw
+ * @param localMatrix an optional matrix to transform the shader coordinates before applying
+ * to rectToDraw
+ */
+ void drawNonAARectToRect(GrRenderTarget*,
+ const GrClip&,
+ const GrPaint& paint,
+ const SkMatrix& viewMatrix,
+ const SkRect& rectToDraw,
+ const SkRect& localRect,
+ const SkMatrix* localMatrix = NULL);
+
+ /**
+ * Draws a non-AA rect with paint and a localMatrix
+ */
+ void drawNonAARectWithLocalMatrix(GrRenderTarget* rt,
+ const GrClip& clip,
+ const GrPaint& paint,
+ const SkMatrix& viewMatrix,
+ const SkRect& rect,
+ const SkMatrix& localMatrix) {
+ this->drawNonAARectToRect(rt, clip, paint, viewMatrix, rect, rect, &localMatrix);
+ }
+
+ /**
+ * 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(GrRenderTarget*,
+ const GrClip&,
+ const GrPaint&,
+ const SkMatrix& viewMatrix,
+ const SkRRect& rrect,
+ const GrStrokeInfo&);
+
+ /**
+ * Shortcut for drawing an SkPath consisting of nested rrects using a paint.
+ * Does not support stroking. The result is undefined if outer does not contain
+ * inner.
+ *
+ * @param paint describes how to color pixels.
+ * @param viewMatrix transformation matrix
+ * @param outer the outer roundrect
+ * @param inner the inner roundrect
+ */
+ void drawDRRect(GrRenderTarget*,
+ const GrClip&,
+ 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(GrRenderTarget*,
+ const GrClip&,
+ 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.
+ * @param texCoords optional array of texture coordinates used
+ * to access the paint.
+ * @param colors optional array of per-vertex colors, supercedes
+ * the paint's color field.
+ * @param indices optional array of indices. If NULL vertices
+ * are drawn non-indexed.
+ * @param indexCount if indices is non-null then this is the
+ * number of indices.
+ */
+ void drawVertices(GrRenderTarget*,
+ const GrClip&,
+ const GrPaint& paint,
+ const SkMatrix& viewMatrix,
+ GrPrimitiveType primitiveType,
+ int vertexCount,
+ const SkPoint positions[],
+ const SkPoint texs[],
+ const GrColor colors[],
+ const uint16_t indices[],
+ int indexCount);
+
+ /**
+ * 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(GrRenderTarget*,
+ const GrClip&,
+ const GrPaint& paint,
+ const SkMatrix& viewMatrix,
+ const SkRect& oval,
+ const GrStrokeInfo& strokeInfo);
+
+
+private:
+ friend class GrContext; // for ctor
+
+ GrDrawContext(GrContext* context, GrDrawTarget* drawTarget);
+
+ // Sets the paint. Returns true on success; false on failure.
+ bool prepareToDraw(GrPipelineBuilder*,
+ GrRenderTarget* rt,
+ const GrClip&,
+ const GrPaint* paint);
+
+ // A simpler version of the above which just returns true on success; false on failure.
+ // Clip is *NOT* set
+ bool prepareToDraw(GrRenderTarget* rt);
+
+ void internalDrawPath(GrDrawTarget*,
+ GrPipelineBuilder*,
+ const SkMatrix& viewMatrix,
+ GrColor,
+ bool useAA,
+ const SkPath&,
+ const GrStrokeInfo&);
+
+ GrContext* fContext; // owning context -> no ref
+ SkAutoTUnref<GrDrawTarget> fDrawTarget;
+};
+
+#endif
« no previous file with comments | « include/gpu/GrContext.h ('k') | src/core/SkImageFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698