LCOV - code coverage report
Current view: top level - gfx/skia/skia/src/gpu - SkGpuDevice.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 4 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 5 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright 2010 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 SkGpuDevice_DEFINED
       9             : #define SkGpuDevice_DEFINED
      10             : 
      11             : #include "SkGr.h"
      12             : #include "SkBitmap.h"
      13             : #include "SkClipStackDevice.h"
      14             : #include "SkPicture.h"
      15             : #include "SkRegion.h"
      16             : #include "SkSurface.h"
      17             : #include "GrClipStackClip.h"
      18             : #include "GrRenderTargetContext.h"
      19             : #include "GrContext.h"
      20             : #include "GrSurfacePriv.h"
      21             : #include "GrTypes.h"
      22             : 
      23             : class GrAccelData;
      24             : class GrTextureProducer;
      25             : struct GrCachedLayer;
      26             : 
      27             : class SkSpecialImage;
      28             : 
      29             : /**
      30             :  *  Subclass of SkBaseDevice, which directs all drawing to the GrGpu owned by the
      31             :  *  canvas.
      32             :  */
      33             : class SK_API SkGpuDevice : public SkClipStackDevice {
      34             : public:
      35             :     enum InitContents {
      36             :         kClear_InitContents,
      37             :         kUninit_InitContents
      38             :     };
      39             : 
      40             :     /**
      41             :      * Creates an SkGpuDevice from a GrRenderTargetContext whose backing width/height is
      42             :      * different than its actual width/height (e.g., approx-match scratch texture).
      43             :      */
      44             :     static sk_sp<SkGpuDevice> Make(GrContext*, sk_sp<GrRenderTargetContext> renderTargetContext,
      45             :                                    int width, int height, InitContents);
      46             : 
      47             :     /**
      48             :      * New device that will create an offscreen renderTarget based on the ImageInfo and
      49             :      * sampleCount. The Budgeted param controls whether the device's backing store counts against
      50             :      * the resource cache budget. On failure, returns nullptr.
      51             :      * This entry point creates a kExact backing store. It is used when creating SkGpuDevices
      52             :      * for SkSurfaces.
      53             :      */
      54             :     static sk_sp<SkGpuDevice> Make(GrContext*, SkBudgeted, const SkImageInfo&,
      55             :                                    int sampleCount, GrSurfaceOrigin,
      56             :                                    const SkSurfaceProps*, InitContents);
      57             : 
      58           0 :     ~SkGpuDevice() override {}
      59             : 
      60           0 :     GrContext* context() const override { return fContext.get(); }
      61             : 
      62             :     // set all pixels to 0
      63             :     void clearAll();
      64             : 
      65             :     void replaceRenderTargetContext(bool shouldRetainContent);
      66             : 
      67             :     GrRenderTargetContext* accessRenderTargetContext() override;
      68             : 
      69             :     void drawPaint(const SkPaint& paint) override;
      70             :     void drawPoints(SkCanvas::PointMode mode, size_t count, const SkPoint[],
      71             :                     const SkPaint& paint) override;
      72             :     void drawRect(const SkRect& r, const SkPaint& paint) override;
      73             :     void drawRRect(const SkRRect& r, const SkPaint& paint) override;
      74             :     void drawDRRect(const SkRRect& outer, const SkRRect& inner,
      75             :                     const SkPaint& paint) override;
      76             :     void drawRegion(const SkRegion& r, const SkPaint& paint) override;
      77             :     void drawOval(const SkRect& oval, const SkPaint& paint) override;
      78             :     void drawArc(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle,
      79             :                  bool useCenter, const SkPaint& paint) override;
      80             :     void drawPath(const SkPath& path, const SkPaint& paint,
      81             :                   const SkMatrix* prePathMatrix, bool pathIsMutable) override;
      82             :     void drawBitmap(const SkBitmap& bitmap, const SkMatrix&,
      83             :                     const SkPaint&) override;
      84             :     void drawBitmapRect(const SkBitmap&, const SkRect* srcOrNull, const SkRect& dst,
      85             :                         const SkPaint& paint, SkCanvas::SrcRectConstraint) override;
      86             :     void drawSprite(const SkBitmap& bitmap, int x, int y,
      87             :                     const SkPaint& paint) override;
      88             :     void drawText(const void* text, size_t len, SkScalar x, SkScalar y,
      89             :                   const SkPaint&) override;
      90             :     void drawPosText(const void* text, size_t len, const SkScalar pos[],
      91             :                      int scalarsPerPos, const SkPoint& offset, const SkPaint&) override;
      92             :     void drawTextBlob(const SkTextBlob*, SkScalar x, SkScalar y,
      93             :                       const SkPaint& paint, SkDrawFilter* drawFilter) override;
      94             :     void drawVertices(const SkVertices*, SkBlendMode, const SkPaint&) override;
      95             :     void drawAtlas(const SkImage* atlas, const SkRSXform[], const SkRect[],
      96             :                    const SkColor[], int count, SkBlendMode, const SkPaint&) override;
      97             :     void drawDevice(SkBaseDevice*, int x, int y, const SkPaint&) override;
      98             : 
      99             :     void drawImage(const SkImage*, SkScalar x, SkScalar y, const SkPaint&) override;
     100             :     void drawImageRect(const SkImage*, const SkRect* src, const SkRect& dst,
     101             :                        const SkPaint&, SkCanvas::SrcRectConstraint) override;
     102             : 
     103             :     void drawImageNine(const SkImage* image, const SkIRect& center,
     104             :                        const SkRect& dst, const SkPaint& paint) override;
     105             :     void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
     106             :                         const SkRect& dst, const SkPaint& paint) override;
     107             : 
     108             :     void drawImageLattice(const SkImage*, const SkCanvas::Lattice&,
     109             :                           const SkRect& dst, const SkPaint&) override;
     110             :     void drawBitmapLattice(const SkBitmap&, const SkCanvas::Lattice&,
     111             :                            const SkRect& dst, const SkPaint&) override;
     112             : 
     113             :     void drawSpecial(SkSpecialImage*,
     114             :                      int left, int top, const SkPaint& paint) override;
     115             :     sk_sp<SkSpecialImage> makeSpecial(const SkBitmap&) override;
     116             :     sk_sp<SkSpecialImage> makeSpecial(const SkImage*) override;
     117             :     sk_sp<SkSpecialImage> snapSpecial() override;
     118             : 
     119             :     void flush() override;
     120             : 
     121             :     bool onAccessPixels(SkPixmap*) override;
     122             : 
     123             : protected:
     124             :     bool onReadPixels(const SkImageInfo&, void*, size_t, int, int) override;
     125             :     bool onWritePixels(const SkImageInfo&, const void*, size_t, int, int) override;
     126             :     bool onShouldDisableLCD(const SkPaint&) const final;
     127             : 
     128             : private:
     129             :     // We want these unreffed in RenderTargetContext, GrContext order.
     130             :     sk_sp<GrContext>             fContext;
     131             :     sk_sp<GrRenderTargetContext> fRenderTargetContext;
     132             : 
     133             :     SkISize                      fSize;
     134             :     bool                         fOpaque;
     135             : 
     136             :     enum Flags {
     137             :         kNeedClear_Flag = 1 << 0,  //!< Surface requires an initial clear
     138             :         kIsOpaque_Flag  = 1 << 1,  //!< Hint from client that rendering to this device will be
     139             :                                    //   opaque even if the config supports alpha.
     140             :     };
     141             :     static bool CheckAlphaTypeAndGetFlags(const SkImageInfo* info, InitContents init,
     142             :                                           unsigned* flags);
     143             : 
     144             :     SkGpuDevice(GrContext*, sk_sp<GrRenderTargetContext>, int width, int height, unsigned flags);
     145             : 
     146             :     SkBaseDevice* onCreateDevice(const CreateInfo&, const SkPaint*) override;
     147             : 
     148             :     sk_sp<SkSurface> makeSurface(const SkImageInfo&, const SkSurfaceProps&) override;
     149             : 
     150             :     SkImageFilterCache* getImageFilterCache() override;
     151             : 
     152           0 :     bool forceConservativeRasterClip() const override { return true; }
     153             : 
     154           0 :     GrClipStackClip clip() const { return GrClipStackClip(&this->cs()); }
     155             : 
     156             :     /**
     157             :      * Helper functions called by drawBitmapCommon. By the time these are called the SkDraw's
     158             :      * matrix, clip, and the device's render target has already been set on GrContext.
     159             :      */
     160             : 
     161             :     // The tileSize and clippedSrcRect will be valid only if true is returned.
     162             :     bool shouldTileImageID(uint32_t imageID, const SkIRect& imageRect,
     163             :                            const SkMatrix& viewMatrix,
     164             :                            const SkMatrix& srcToDstRectMatrix,
     165             :                            const GrSamplerParams& params,
     166             :                            const SkRect* srcRectPtr,
     167             :                            int maxTileSize,
     168             :                            int* tileSize,
     169             :                            SkIRect* clippedSubset) const;
     170             :     // Just returns the predicate, not the out-tileSize or out-clippedSubset, as they are not
     171             :     // needed at the moment.
     172             :     bool shouldTileImage(const SkImage* image, const SkRect* srcRectPtr,
     173             :                          SkCanvas::SrcRectConstraint constraint, SkFilterQuality quality,
     174             :                          const SkMatrix& viewMatrix, const SkMatrix& srcToDstRect) const;
     175             : 
     176             :     sk_sp<SkSpecialImage> filterTexture(SkSpecialImage*,
     177             :                                         int left, int top,
     178             :                                         SkIPoint* offset,
     179             :                                         const SkImageFilter* filter);
     180             : 
     181             :     // Splits bitmap into tiles of tileSize and draws them using separate textures for each tile.
     182             :     void drawTiledBitmap(const SkBitmap& bitmap,
     183             :                          const SkMatrix& viewMatrix,
     184             :                          const SkMatrix& srcToDstMatrix,
     185             :                          const SkRect& srcRect,
     186             :                          const SkIRect& clippedSrcRect,
     187             :                          const GrSamplerParams& params,
     188             :                          const SkPaint& paint,
     189             :                          SkCanvas::SrcRectConstraint,
     190             :                          int tileSize,
     191             :                          bool bicubic);
     192             : 
     193             :     // Used by drawTiledBitmap to draw each tile.
     194             :     void drawBitmapTile(const SkBitmap&,
     195             :                         const SkMatrix& viewMatrix,
     196             :                         const SkRect& dstRect,
     197             :                         const SkRect& srcRect,
     198             :                         const GrSamplerParams& params,
     199             :                         const SkPaint& paint,
     200             :                         SkCanvas::SrcRectConstraint,
     201             :                         bool bicubic,
     202             :                         bool needsTextureDomain);
     203             : 
     204             :     void drawTextureProducer(GrTextureProducer*,
     205             :                              const SkRect* srcRect,
     206             :                              const SkRect* dstRect,
     207             :                              SkCanvas::SrcRectConstraint,
     208             :                              const SkMatrix& viewMatrix,
     209             :                              const GrClip&,
     210             :                              const SkPaint&);
     211             : 
     212             :     void drawTextureProducerImpl(GrTextureProducer*,
     213             :                                  const SkRect& clippedSrcRect,
     214             :                                  const SkRect& clippedDstRect,
     215             :                                  SkCanvas::SrcRectConstraint,
     216             :                                  const SkMatrix& viewMatrix,
     217             :                                  const SkMatrix& srcToDstMatrix,
     218             :                                  const GrClip&,
     219             :                                  const SkPaint&);
     220             : 
     221             :     bool drawFilledDRRect(const SkMatrix& viewMatrix, const SkRRect& outer,
     222             :                           const SkRRect& inner, const SkPaint& paint);
     223             : 
     224             :     void drawProducerNine(GrTextureProducer*, const SkIRect& center,
     225             :                           const SkRect& dst, const SkPaint&);
     226             : 
     227             :     void drawProducerLattice(GrTextureProducer*, const SkCanvas::Lattice& lattice,
     228             :                              const SkRect& dst, const SkPaint&);
     229             : 
     230             :     bool drawDashLine(const SkPoint pts[2], const SkPaint& paint);
     231             :     void drawStrokedLine(const SkPoint pts[2], const SkPaint&);
     232             : 
     233             :     void wireframeVertices(SkVertices::VertexMode, int vertexCount, const SkPoint verts[],
     234             :                            SkBlendMode, const uint16_t indices[], int indexCount, const SkPaint&);
     235             : 
     236             :     static sk_sp<GrRenderTargetContext> MakeRenderTargetContext(GrContext*,
     237             :                                                                 SkBudgeted,
     238             :                                                                 const SkImageInfo&,
     239             :                                                                 int sampleCount,
     240             :                                                                 GrSurfaceOrigin,
     241             :                                                                 const SkSurfaceProps*);
     242             : 
     243             :     friend class GrAtlasTextContext;
     244             :     friend class SkSurface_Gpu;      // for access to surfaceProps
     245             :     typedef SkClipStackDevice INHERITED;
     246             : };
     247             : 
     248             : #endif

Generated by: LCOV version 1.13