blob: e65196489618583dcefba0a3ffca053de3c47540 [file] [log] [blame]
Robert Phillips4217ea72019-01-30 13:08:28 -05001/*
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
Mike Kleinc0bd9f92019-04-23 12:05:21 -050011#include "include/private/GrContext_Base.h"
12#include "include/private/GrSingleOwner.h"
Robert Phillips4217ea72019-01-30 13:08:28 -050013
14class GrImageContextPriv;
Robert Phillipsa41c6852019-02-07 10:44:10 -050015class GrProxyProvider;
Robert Phillips4217ea72019-01-30 13:08:28 -050016
Brian Salomon57f211b2019-08-21 15:21:09 -040017class GrImageContext : public GrContext_Base {
Robert Phillips4217ea72019-01-30 13:08:28 -050018public:
19 ~GrImageContext() override;
20
Robert Phillipsf7599642019-08-13 16:16:42 -040021 GrBackendFormat defaultBackendFormat(SkColorType ct, GrRenderable renderable) const {
22 return INHERITED::defaultBackendFormat(ct, renderable);
23 }
24
Robert Phillips4217ea72019-01-30 13:08:28 -050025 // Provides access to functions that aren't part of the public API.
26 GrImageContextPriv priv();
27 const GrImageContextPriv priv() const;
28
29protected:
30 friend class GrImageContextPriv; // for hidden functions
31
Robert Phillipsa41c6852019-02-07 10:44:10 -050032 GrImageContext(GrBackendApi, const GrContextOptions&, uint32_t contextID);
33
Brian Salomon57f211b2019-08-21 15:21:09 -040034 SK_API virtual void abandonContext();
35 SK_API bool abandoned() const;
Robert Phillipsa9162df2019-02-11 14:12:03 -050036
Robert Phillipsa41c6852019-02-07 10:44:10 -050037 GrProxyProvider* proxyProvider() { return fProxyProvider.get(); }
38 const GrProxyProvider* proxyProvider() const { return fProxyProvider.get(); }
39
40 /** This is only useful for debug purposes */
41 GrSingleOwner* singleOwner() const { return &fSingleOwner; }
Robert Phillips4217ea72019-01-30 13:08:28 -050042
43 GrImageContext* asImageContext() override { return this; }
44
45private:
Robert Phillipsa41c6852019-02-07 10:44:10 -050046 std::unique_ptr<GrProxyProvider> fProxyProvider;
Robert Phillipsa9162df2019-02-11 14:12:03 -050047 bool fAbandoned = false;
Robert Phillipsa41c6852019-02-07 10:44:10 -050048
49 // In debug builds we guard against improper thread handling
50 // This guard is passed to the GrDrawingManager and, from there to all the
51 // GrRenderTargetContexts. It is also passed to the GrResourceProvider and SkGpuDevice.
Robert Phillipsa9162df2019-02-11 14:12:03 -050052 mutable GrSingleOwner fSingleOwner;
Robert Phillipsa41c6852019-02-07 10:44:10 -050053
Robert Phillips4217ea72019-01-30 13:08:28 -050054 typedef GrContext_Base INHERITED;
55};
56
57#endif