1 /* 2 * Copyright 2019 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 GrImageContext_DEFINED 9 #define GrImageContext_DEFINED 10 11 #include "GrContext_Base.h" 12 #include "../private/GrSingleOwner.h" 13 14 class GrImageContextPriv; 15 class GrProxyProvider; 16 17 class SK_API GrImageContext : public GrContext_Base { 18 public: 19 ~GrImageContext() override; 20 21 // Provides access to functions that aren't part of the public API. 22 GrImageContextPriv priv(); 23 const GrImageContextPriv priv() const; 24 25 protected: 26 friend class GrImageContextPriv; // for hidden functions 27 28 GrImageContext(GrBackendApi, const GrContextOptions&, uint32_t contextID); 29 30 virtual void abandonContext(); 31 bool abandoned() const; 32 proxyProvider()33 GrProxyProvider* proxyProvider() { return fProxyProvider.get(); } proxyProvider()34 const GrProxyProvider* proxyProvider() const { return fProxyProvider.get(); } 35 36 /** This is only useful for debug purposes */ singleOwner()37 GrSingleOwner* singleOwner() const { return &fSingleOwner; } 38 asImageContext()39 GrImageContext* asImageContext() override { return this; } 40 41 private: 42 std::unique_ptr<GrProxyProvider> fProxyProvider; 43 bool fAbandoned = false; 44 45 // In debug builds we guard against improper thread handling 46 // This guard is passed to the GrDrawingManager and, from there to all the 47 // GrRenderTargetContexts. It is also passed to the GrResourceProvider and SkGpuDevice. 48 mutable GrSingleOwner fSingleOwner; 49 50 typedef GrContext_Base INHERITED; 51 }; 52 53 #endif 54