Home | History | Annotate | Download | only in gpu
      1 
      2 /*
      3  * Copyright 2011 Google Inc.
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 #ifndef GrTexture_DEFINED
     10 #define GrTexture_DEFINED
     11 
     12 #include "GrSurface.h"
     13 #include "GrSamplerParams.h"
     14 #include "SkPoint.h"
     15 #include "SkRefCnt.h"
     16 
     17 class GrExternalTextureData;
     18 class GrTexturePriv;
     19 
     20 class GrTexture : virtual public GrSurface {
     21 public:
     22     GrTexture* asTexture() override { return this; }
     23     const GrTexture* asTexture() const override { return this; }
     24 
     25     /**
     26      *  Return the native ID or handle to the texture, depending on the
     27      *  platform. e.g. on OpenGL, return the texture ID.
     28      */
     29     virtual GrBackendObject getTextureHandle() const = 0;
     30 
     31     /**
     32      * This function indicates that the texture parameters (wrap mode, filtering, ...) have been
     33      * changed externally to Skia.
     34      */
     35     virtual void textureParamsModified() = 0;
     36 
     37 #ifdef SK_DEBUG
     38     void validate() const {
     39         this->INHERITED::validate();
     40         this->validateDesc();
     41     }
     42 #endif
     43 
     44     /** Access methods that are only to be used within Skia code. */
     45     inline GrTexturePriv texturePriv();
     46     inline const GrTexturePriv texturePriv() const;
     47 
     48 protected:
     49     GrTexture(GrGpu*, const GrSurfaceDesc&, GrSLType samplerType,
     50               GrSamplerParams::FilterMode highestFilterMode, bool wasMipMapDataProvided);
     51 
     52     void validateDesc() const;
     53     virtual std::unique_ptr<GrExternalTextureData> detachBackendTexture() = 0;
     54 
     55 private:
     56     void computeScratchKey(GrScratchKey*) const override;
     57     size_t onGpuMemorySize() const override;
     58     void dirtyMipMaps(bool mipMapsDirty);
     59 
     60     enum MipMapsStatus {
     61         kNotAllocated_MipMapsStatus,
     62         kAllocated_MipMapsStatus,
     63         kValid_MipMapsStatus
     64     };
     65 
     66     GrSLType                      fSamplerType;
     67     GrSamplerParams::FilterMode   fHighestFilterMode;
     68     MipMapsStatus                 fMipMapsStatus;
     69     int                           fMaxMipMapLevel;
     70     SkDestinationSurfaceColorMode fMipColorMode;
     71     friend class GrTexturePriv;
     72 
     73     typedef GrSurface INHERITED;
     74 };
     75 
     76 #endif
     77