Home | History | Annotate | Download | only in gpu
      1 /*
      2  * Copyright 2015 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 GrDrawingManager_DEFINED
      9 #define GrDrawingManager_DEFINED
     10 
     11 #include "GrDrawTarget.h"
     12 #include "GrBatchFlushState.h"
     13 #include "GrPathRendererChain.h"
     14 #include "GrPathRenderer.h"
     15 #include "SkTDArray.h"
     16 
     17 class GrContext;
     18 class GrDrawContext;
     19 class GrSingleOWner;
     20 class GrSoftwarePathRenderer;
     21 
     22 // The GrDrawingManager allocates a new GrDrawContext for each GrRenderTarget
     23 // but all of them still land in the same GrDrawTarget!
     24 //
     25 // In the future this class will allocate a new GrDrawContext for
     26 // each GrRenderTarget/GrDrawTarget and manage the DAG.
     27 class GrDrawingManager {
     28 public:
     29     ~GrDrawingManager();
     30 
     31     bool abandoned() const { return fAbandoned; }
     32     void freeGpuResources();
     33 
     34     GrDrawContext* drawContext(GrRenderTarget* rt, const SkSurfaceProps*);
     35 
     36     // The caller automatically gets a ref on the returned drawTarget. It must
     37     // be balanced by an unref call.
     38     GrDrawTarget* newDrawTarget(GrRenderTarget* rt);
     39 
     40     GrContext* getContext() { return fContext; }
     41 
     42     GrPathRenderer* getPathRenderer(const GrPathRenderer::CanDrawPathArgs& args,
     43                                     bool allowSW,
     44                                     GrPathRendererChain::DrawType drawType,
     45                                     GrPathRenderer::StencilSupport* stencilSupport = NULL);
     46 
     47     static bool ProgramUnitTest(GrContext* context, int maxStages);
     48 
     49 private:
     50     GrDrawingManager(GrContext* context, const GrDrawTarget::Options& optionsForDrawTargets,
     51                      GrSingleOwner* singleOwner)
     52         : fContext(context)
     53         , fOptionsForDrawTargets(optionsForDrawTargets)
     54         , fSingleOwner(singleOwner)
     55         , fAbandoned(false)
     56         , fPathRendererChain(nullptr)
     57         , fSoftwarePathRenderer(nullptr)
     58         , fFlushState(context->getGpu(), context->resourceProvider())
     59         , fFlushing(false) {
     60     }
     61 
     62     void abandon();
     63     void cleanup();
     64     void reset();
     65     void flush();
     66 
     67     friend class GrContext;  // for access to: ctor, abandon, reset & flush
     68 
     69     static const int kNumPixelGeometries = 5; // The different pixel geometries
     70     static const int kNumDFTOptions = 2;      // DFT or no DFT
     71 
     72     GrContext*                  fContext;
     73     GrDrawTarget::Options       fOptionsForDrawTargets;
     74 
     75     // In debug builds we guard against improper thread handling
     76     GrSingleOwner*              fSingleOwner;
     77 
     78     bool                        fAbandoned;
     79     SkTDArray<GrDrawTarget*>    fDrawTargets;
     80 
     81     GrPathRendererChain*        fPathRendererChain;
     82     GrSoftwarePathRenderer*     fSoftwarePathRenderer;
     83 
     84     GrBatchFlushState           fFlushState;
     85     bool                        fFlushing;
     86 };
     87 
     88 #endif
     89