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 abandoned()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 getContext()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: GrDrawingManager(GrContext * context,const GrDrawTarget::Options & optionsForDrawTargets,GrSingleOwner * singleOwner)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