Home | History | Annotate | Download | only in private
      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 GrContext_Base_DEFINED
      9 #define GrContext_Base_DEFINED
     10 
     11 #include "SkRefCnt.h"
     12 #include "GrContextOptions.h"
     13 #include "GrTypes.h"
     14 
     15 class GrBaseContextPriv;
     16 class GrCaps;
     17 class GrContext;
     18 class GrImageContext;
     19 class GrRecordingContext;
     20 class GrSkSLFPFactoryCache;
     21 
     22 class SK_API GrContext_Base : public SkRefCnt {
     23 public:
     24     virtual ~GrContext_Base();
     25 
     26     /*
     27      * The 3D API backing this context
     28      */
     29     GrBackendApi backend() const { return fBackend; }
     30 
     31     // Provides access to functions that aren't part of the public API.
     32     GrBaseContextPriv priv();
     33     const GrBaseContextPriv priv() const;
     34 
     35 protected:
     36     friend class GrBaseContextPriv; // for hidden functions
     37 
     38     GrContext_Base(GrBackendApi backend, const GrContextOptions& options, uint32_t contextID);
     39 
     40     virtual bool init(sk_sp<const GrCaps>, sk_sp<GrSkSLFPFactoryCache>);
     41 
     42     /**
     43      * An identifier for this context. The id is used by all compatible contexts. For example,
     44      * if SkImages are created on one thread using an image creation context, then fed into a
     45      * DDL Recorder on second thread (which has a recording context) and finally replayed on
     46      * a third thread with a direct context, then all three contexts will report the same id.
     47      * It is an error for an image to be used with contexts that report different ids.
     48      */
     49     uint32_t contextID() const { return fContextID; }
     50 
     51     bool matches(GrContext_Base* candidate) const {
     52         return candidate->contextID() == this->contextID();
     53     }
     54 
     55     /*
     56      * The options in effect for this context
     57      */
     58     const GrContextOptions& options() const { return fOptions; }
     59 
     60     bool explicitlyAllocateGPUResources() const;
     61 
     62     const GrCaps* caps() const;
     63     sk_sp<const GrCaps> refCaps() const;
     64 
     65     sk_sp<GrSkSLFPFactoryCache> fpFactoryCache();
     66 
     67     virtual GrImageContext* asImageContext() { return nullptr; }
     68     virtual GrRecordingContext* asRecordingContext() { return nullptr; }
     69     virtual GrContext* asDirectContext() { return nullptr; }
     70 
     71 private:
     72     const GrBackendApi          fBackend;
     73     const GrContextOptions      fOptions;
     74     const uint32_t              fContextID;
     75     sk_sp<const GrCaps>         fCaps;
     76     sk_sp<GrSkSLFPFactoryCache> fFPFactoryCache;
     77 
     78     typedef SkRefCnt INHERITED;
     79 };
     80 
     81 #endif
     82