1 /* 2 * Copyright 2017 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 GrPreFlushResourceProvider_DEFINED 9 #define GrPreFlushResourceProvider_DEFINED 10 11 #include "GrTypes.h" 12 #include "GrNonAtomicRef.h" 13 14 // These two are just for GrPreFlushCallbackObject 15 #include "SkRefCnt.h" 16 #include "SkTDArray.h" 17 18 class GrDrawingManager; 19 class GrOpList; 20 class GrPreFlushResourceProvider; 21 class GrRenderTargetOpList; 22 class GrRenderTargetContext; 23 class GrSurfaceProxy; 24 25 class SkColorSpace; 26 class SkSurfaceProps; 27 28 /* 29 * This is the base class from which all per-flush callback objects must be derived. It 30 * provides the "preFlush" interface. 31 */ 32 class GrPreFlushCallbackObject : public GrNonAtomicRef<GrPreFlushCallbackObject> { 33 public: 34 virtual ~GrPreFlushCallbackObject() { } 35 36 /* 37 * The preFlush callback allows subsystems (e.g., text, path renderers) to create atlases 38 * for a specific flush. All the GrOpList IDs required for the flush are passed into the 39 * callback. The callback should return the render target contexts used to render the atlases 40 * in 'results'. 41 */ 42 virtual void preFlush(GrPreFlushResourceProvider*, 43 const uint32_t* opListIDs, int numOpListIDs, 44 SkTArray<sk_sp<GrRenderTargetContext>>* results) = 0; 45 46 private: 47 typedef SkRefCnt INHERITED; 48 }; 49 50 /* 51 * This class is a shallow wrapper around the drawing manager. It is passed into the 52 * preFlush callbacks and is intended to limit the functionality available to them. 53 * It should never have additional data members or virtual methods. 54 */ 55 class GrPreFlushResourceProvider { 56 public: 57 sk_sp<GrRenderTargetContext> makeRenderTargetContext(const GrSurfaceDesc& desc, 58 sk_sp<SkColorSpace> colorSpace, 59 const SkSurfaceProps* props); 60 61 // TODO: we only need this entry point as long as we have to pre-allocate the atlas. 62 // Remove it ASAP. 63 sk_sp<GrRenderTargetContext> makeRenderTargetContext(sk_sp<GrSurfaceProxy> proxy, 64 sk_sp<SkColorSpace> colorSpace, 65 const SkSurfaceProps* props); 66 67 private: 68 explicit GrPreFlushResourceProvider(GrDrawingManager* drawingMgr) : fDrawingMgr(drawingMgr) {} 69 GrPreFlushResourceProvider(const GrPreFlushResourceProvider&); // unimpl 70 GrPreFlushResourceProvider& operator=(const GrPreFlushResourceProvider&); // unimpl 71 72 GrDrawingManager* fDrawingMgr; 73 74 friend class GrDrawingManager; // to construct this type. 75 }; 76 77 #endif 78