GrDrawingManager.h revision 69cfe95b7be386cf7d349b61388e93ea7c3cd386
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 17class GrContext; 18class GrDrawContext; 19class GrSoftwarePathRenderer; 20class GrTextContext; 21 22// Currently the DrawingManager creates a separate GrTextContext for each 23// combination of text drawing options (pixel geometry x DFT use) 24// and hands the appropriate one back given the DrawContext's request. 25// 26// It allocates a new GrDrawContext for each GrRenderTarget 27// but all of them still land in the same GrDrawTarget! 28// 29// In the future this class will allocate a new GrDrawContext for 30// each GrRenderTarget/GrDrawTarget and manage the DAG. 31class GrDrawingManager { 32public: 33 ~GrDrawingManager(); 34 35 bool abandoned() const { return fAbandoned; } 36 void freeGpuResources(); 37 38 GrDrawContext* drawContext(GrRenderTarget* rt, const SkSurfaceProps* surfaceProps); 39 40 GrTextContext* textContext(const SkSurfaceProps& props, GrRenderTarget* rt); 41 42 // The caller automatically gets a ref on the returned drawTarget. It must 43 // be balanced by an unref call. 44 GrDrawTarget* newDrawTarget(GrRenderTarget* rt); 45 46 GrContext* getContext() { return fContext; } 47 48 GrPathRenderer* getPathRenderer(const GrPathRenderer::CanDrawPathArgs& args, 49 bool allowSW, 50 GrPathRendererChain::DrawType drawType, 51 GrPathRenderer::StencilSupport* stencilSupport = NULL); 52 53 static bool ProgramUnitTest(GrContext* context, int maxStages); 54 55private: 56 GrDrawingManager(GrContext* context, const GrDrawTarget::Options& optionsForDrawTargets) 57 : fContext(context) 58 , fOptionsForDrawTargets(optionsForDrawTargets) 59 , fAbandoned(false) 60 , fNVPRTextContext(nullptr) 61 , fPathRendererChain(nullptr) 62 , fSoftwarePathRenderer(nullptr) 63 , fFlushState(context->getGpu(), context->resourceProvider()) { 64 sk_bzero(fTextContexts, sizeof(fTextContexts)); 65 } 66 67 void abandon(); 68 void cleanup(); 69 void reset(); 70 void flush(); 71 72 friend class GrContext; // for access to: ctor, abandon, reset & flush 73 74 static const int kNumPixelGeometries = 5; // The different pixel geometries 75 static const int kNumDFTOptions = 2; // DFT or no DFT 76 77 GrContext* fContext; 78 GrDrawTarget::Options fOptionsForDrawTargets; 79 80 bool fAbandoned; 81 SkTDArray<GrDrawTarget*> fDrawTargets; 82 83 GrTextContext* fNVPRTextContext; 84 GrTextContext* fTextContexts[kNumPixelGeometries][kNumDFTOptions]; 85 86 GrPathRendererChain* fPathRendererChain; 87 GrSoftwarePathRenderer* fSoftwarePathRenderer; 88 89 GrBatchFlushState fFlushState; 90}; 91 92#endif 93