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 GrTextureProxy_DEFINED 9#define GrTextureProxy_DEFINED 10 11#include "GrSamplerParams.h" 12#include "GrSurfaceProxy.h" 13 14class GrCaps; 15class GrResourceProvider; 16class GrTextureOpList; 17 18// This class delays the acquisition of textures until they are actually required 19class GrTextureProxy : virtual public GrSurfaceProxy { 20public: 21 GrTextureProxy* asTextureProxy() override { return this; } 22 const GrTextureProxy* asTextureProxy() const override { return this; } 23 24 // Actually instantiate the backing texture, if necessary 25 bool instantiate(GrResourceProvider*) override; 26 27 void setMipColorMode(SkDestinationSurfaceColorMode colorMode); 28 29 GrSamplerParams::FilterMode highestFilterMode() const; 30 31 GrSLType imageStorageType() const { 32 if (GrPixelConfigIsSint(this->config())) { 33 return kIImageStorage2D_GrSLType; 34 } else { 35 return kImageStorage2D_GrSLType; 36 } 37 } 38 39 bool isMipMapped() const { return fIsMipMapped; } 40 41protected: 42 friend class GrSurfaceProxy; // for ctors 43 44 // Deferred version 45 GrTextureProxy(const GrSurfaceDesc& srcDesc, SkBackingFit, SkBudgeted, 46 const void* srcData, size_t srcRowBytes, uint32_t flags); 47 // Wrapped version 48 GrTextureProxy(sk_sp<GrSurface>); 49 50 SkDestinationSurfaceColorMode mipColorMode() const { return fMipColorMode; } 51 52 sk_sp<GrSurface> createSurface(GrResourceProvider*) const override; 53 54private: 55 bool fIsMipMapped; 56 SkDestinationSurfaceColorMode fMipColorMode; 57 58 size_t onUninstantiatedGpuMemorySize() const override; 59 60 // For wrapped proxies the GrTexture pointer is stored in GrIORefProxy. 61 // For deferred proxies that pointer will be filled in when we need to instantiate 62 // the deferred resource 63 64 typedef GrSurfaceProxy INHERITED; 65}; 66 67#endif 68