| 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 | 
|  |