1 /* 2 * Copyright 2012 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef GrSWMaskHelper_DEFINED 9 #define GrSWMaskHelper_DEFINED 10 11 #include "GrTypesPriv.h" 12 #include "SkAutoPixmapStorage.h" 13 #include "SkDraw.h" 14 #include "SkMatrix.h" 15 #include "SkRasterClip.h" 16 #include "SkRegion.h" 17 #include "SkTypes.h" 18 19 class GrShape; 20 class GrRecordingContext; 21 class GrTextureProxy; 22 23 /** 24 * The GrSWMaskHelper helps generate clip masks using the software rendering 25 * path. It is intended to be used as: 26 * 27 * GrSWMaskHelper helper(context); 28 * helper.init(...); 29 * 30 * draw one or more paths/rects specifying the required boolean ops 31 * 32 * toTextureProxy(); // to get it from the internal bitmap to the GPU 33 * 34 * The result of this process will be the final mask (on the GPU) in the 35 * upper left hand corner of the texture. 36 */ 37 class GrSWMaskHelper : SkNoncopyable { 38 public: 39 GrSWMaskHelper(SkAutoPixmapStorage* pixels = nullptr) 40 : fPixels(pixels ? pixels : &fPixelsStorage) { } 41 42 // set up the internal state in preparation for draws. Since many masks 43 // may be accumulated in the helper during creation, "resultBounds" 44 // allows the caller to specify the region of interest - to limit the 45 // amount of work. 46 bool init(const SkIRect& resultBounds); 47 48 // Draw a single rect into the accumulation bitmap using the specified op 49 void drawRect(const SkRect& rect, const SkMatrix& matrix, SkRegion::Op op, GrAA, uint8_t alpha); 50 51 // Draw a single path into the accumuation bitmap using the specified op 52 void drawShape(const GrShape&, const SkMatrix& matrix, SkRegion::Op op, GrAA, uint8_t alpha); 53 54 sk_sp<GrTextureProxy> toTextureProxy(GrRecordingContext*, SkBackingFit fit); 55 56 // Reset the internal bitmap clear(uint8_t alpha)57 void clear(uint8_t alpha) { 58 fPixels->erase(SkColorSetARGB(alpha, 0xFF, 0xFF, 0xFF)); 59 } 60 61 private: 62 SkVector fTranslate; 63 SkAutoPixmapStorage* fPixels; 64 SkAutoPixmapStorage fPixelsStorage; 65 SkDraw fDraw; 66 SkRasterClip fRasterClip; 67 68 typedef SkNoncopyable INHERITED; 69 }; 70 71 #endif // GrSWMaskHelper_DEFINED 72