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 |