Home | History | Annotate | Download | only in gpu
      1 /*
      2  * Copyright 2016 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 GrContextPriv_DEFINED
      9 #define GrContextPriv_DEFINED
     10 
     11 #include "GrContext.h"
     12 #include "GrSurfaceContext.h"
     13 
     14 class GrSemaphore;
     15 class GrSurfaceProxy;
     16 class GrPreFlushCallbackObject;
     17 
     18 /** Class that adds methods to GrContext that are only intended for use internal to Skia.
     19     This class is purely a privileged window into GrContext. It should never have additional
     20     data members or virtual methods. */
     21 class GrContextPriv {
     22 public:
     23     GrDrawingManager* drawingManager() { return fContext->fDrawingManager.get(); }
     24 
     25     // Create a renderTargetContext that wraps an existing renderTarget
     26     sk_sp<GrRenderTargetContext> makeWrappedRenderTargetContext(sk_sp<GrRenderTarget> rt,
     27                                                                 sk_sp<SkColorSpace> colorSpace,
     28                                                                 const SkSurfaceProps* = nullptr);
     29 
     30     // Create a surfaceContext that wraps an existing texture or renderTarget
     31     sk_sp<GrSurfaceContext> makeWrappedSurfaceContext(sk_sp<GrSurface> tex);
     32 
     33     sk_sp<GrSurfaceContext> makeWrappedSurfaceContext(sk_sp<GrSurfaceProxy> proxy,
     34                                                       sk_sp<SkColorSpace>);
     35 
     36     sk_sp<GrSurfaceContext> makeDeferredSurfaceContext(const GrSurfaceDesc& dstDesc,
     37                                                        SkBackingFit dstFit,
     38                                                        SkBudgeted isDstBudgeted);
     39 
     40     // TODO: Maybe add a 'surfaceProps' param (that is ignored for non-RTs) and remove
     41     // makeBackendTextureRenderTargetContext & makeBackendTextureAsRenderTargetRenderTargetContext
     42     sk_sp<GrSurfaceContext> makeBackendSurfaceContext(const GrBackendTextureDesc& desc,
     43                                                       sk_sp<SkColorSpace> colorSpace);
     44 
     45     sk_sp<GrRenderTargetContext> makeBackendTextureRenderTargetContext(
     46                                                          const GrBackendTextureDesc& desc,
     47                                                          sk_sp<SkColorSpace> colorSpace,
     48                                                          const SkSurfaceProps* = nullptr);
     49 
     50     sk_sp<GrRenderTargetContext> makeBackendRenderTargetRenderTargetContext(
     51                                                               const GrBackendRenderTargetDesc& desc,
     52                                                               sk_sp<SkColorSpace> colorSpace,
     53                                                               const SkSurfaceProps* = nullptr);
     54 
     55     sk_sp<GrRenderTargetContext> makeBackendTextureAsRenderTargetRenderTargetContext(
     56                                                                  const GrBackendTextureDesc& desc,
     57                                                                  sk_sp<SkColorSpace> colorSpace,
     58                                                                  const SkSurfaceProps* = nullptr);
     59 
     60     bool disableGpuYUVConversion() const { return fContext->fDisableGpuYUVConversion; }
     61 
     62     /*
     63      * A ref will be taken on the preFlushCallbackObject which will be removed when the
     64      * context is destroyed.
     65      */
     66     void addPreFlushCallbackObject(sk_sp<GrPreFlushCallbackObject>);
     67 
     68 private:
     69     explicit GrContextPriv(GrContext* context) : fContext(context) {}
     70     GrContextPriv(const GrContextPriv&); // unimpl
     71     GrContextPriv& operator=(const GrContextPriv&); // unimpl
     72 
     73     // No taking addresses of this type.
     74     const GrContextPriv* operator&() const;
     75     GrContextPriv* operator&();
     76 
     77     GrContext* fContext;
     78 
     79     friend class GrContext; // to construct/copy this type.
     80 };
     81 
     82 inline GrContextPriv GrContext::contextPriv() { return GrContextPriv(this); }
     83 
     84 inline const GrContextPriv GrContext::contextPriv () const {
     85     return GrContextPriv(const_cast<GrContext*>(this));
     86 }
     87 
     88 #endif
     89