text: /*
   * Copyright 2015 Google Inc.
   *
   * Use of this source code is governed by a BSD-style license that can be
   * found in the LICENSE file.
   */
  
  #ifndef SkImageCacherator_DEFINED
  #define SkImageCacherator_DEFINED
  
  #include "SkImage.h"
  #include "SkImageInfo.h"
  
  class GrCaps;
  class GrContext;
  class GrTextureProxy;
  class GrUniqueKey;
  class SkColorSpace;
  
  /*
   *  Interface used by GrImageTextureMaker to construct textures from instances of SkImage
   *  (specifically, SkImage_Lazy).
   */
  class SkImageCacherator {
  public:
      virtual ~SkImageCacherator() {}
  
      enum CachedFormat {
          kLegacy_CachedFormat,    // The format from the generator, with any color space stripped out
          kLinearF16_CachedFormat, // Half float RGBA with linear gamma
          kSRGB8888_CachedFormat,  // sRGB bytes
          kSBGR8888_CachedFormat,  // sRGB bytes, in BGR order
  
          kNumCachedFormats,
      };
  
      virtual CachedFormat chooseCacheFormat(SkColorSpace* dstColorSpace,
                                             const GrCaps* = nullptr) const = 0;
      virtual SkImageInfo buildCacheInfo(CachedFormat) const = 0;
  
  #if SK_SUPPORT_GPU
      // Returns the texture proxy. If the cacherator is generating the texture and wants to cache it,
      // it should use the passed in key (if the key is valid).
      virtual sk_sp<GrTextureProxy> lockTextureProxy(GrContext*,
                                                     const GrUniqueKey& key,
                                                     SkImage::CachingHint,
                                                     bool willBeMipped,
                                                     SkColorSpace* dstColorSpace) = 0;
  
      // Returns the color space of the texture that would be returned if you called lockTexture.
      // Separate code path to allow querying of the color space for textures that cached (even
      // externally).
      virtual sk_sp<SkColorSpace> getColorSpace(GrContext*, SkColorSpace* dstColorSpace) = 0;
      virtual void makeCacheKeyFromOrigKey(const GrUniqueKey& origKey, CachedFormat,
                                           GrUniqueKey* cacheKey) = 0;
  #endif
  };
  
  #endif
  