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 GrTexturePriv; 18 19 class GrTexture : virtual public GrSurface { 20 public: 21 GrTexture* asTexture() override { return this; } 22 const GrTexture* asTexture() const override { return this; } 23 24 /** 25 * Return the native ID or handle to the texture, depending on the 26 * platform. e.g. on OpenGL, return the texture ID. 27 */ 28 virtual GrBackendObject getTextureHandle() const = 0; 29 30 /** 31 * This function indicates that the texture parameters (wrap mode, filtering, ...) have been 32 * changed externally to Skia. 33 */ 34 virtual void textureParamsModified() = 0; 35 36 #ifdef SK_DEBUG 37 void validate() const { 38 this->INHERITED::validate(); 39 } 40 #endif 41 42 // These match the definitions in SkImage, for whence they came 43 typedef void* ReleaseCtx; 44 typedef void (*ReleaseProc)(ReleaseCtx); 45 46 virtual void setRelease(ReleaseProc proc, ReleaseCtx ctx) = 0; 47 48 /** Access methods that are only to be used within Skia code. */ 49 inline GrTexturePriv texturePriv(); 50 inline const GrTexturePriv texturePriv() const; 51 52 protected: 53 GrTexture(GrGpu*, const GrSurfaceDesc&, GrSLType samplerType, 54 GrSamplerParams::FilterMode highestFilterMode, bool wasMipMapDataProvided); 55 56 private: 57 void computeScratchKey(GrScratchKey*) const override; 58 size_t onGpuMemorySize() const override; 59 void dirtyMipMaps(bool mipMapsDirty); 60 61 enum MipMapsStatus { 62 kNotAllocated_MipMapsStatus, 63 kAllocated_MipMapsStatus, 64 kValid_MipMapsStatus 65 }; 66 67 GrSLType fSamplerType; 68 GrSamplerParams::FilterMode fHighestFilterMode; 69 MipMapsStatus fMipMapsStatus; 70 int fMaxMipMapLevel; 71 SkDestinationSurfaceColorMode fMipColorMode; 72 friend class GrTexturePriv; 73 74 typedef GrSurface INHERITED; 75 }; 76 77 #endif 78