text: /*
   * Copyright 2016 Google Inc.
   *
   * Use of this source code is governed by a BSD-style license that can be
   * found in the LICENSE file.
   */
  
  #ifndef GrImageTextureMaker_DEFINED
  #define GrImageTextureMaker_DEFINED
  
  #include "include/core/SkImage.h"
  #include "src/gpu/GrTextureMaker.h"
  #include "src/gpu/SkGr.h"
  
  class SkImage_Lazy;
  class SkImage_GpuYUVA;
  
  /** This class manages the conversion of generator-backed images to GrTextures. If the caching hint
      is kAllow the image's ID is used for the cache key. */
  class GrImageTextureMaker final : public GrTextureMaker {
  public:
      GrImageTextureMaker(GrRecordingContext*, const SkImage* client, GrImageTexGenPolicy);
  
  private:
      GrSurfaceProxyView refOriginalTextureProxyView(GrMipmapped) override;
  
      const SkImage_Lazy*     fImage;
      GrImageTexGenPolicy     fTexGenPolicy;
  
      using INHERITED = GrTextureMaker;
  };
  
  /** This class manages the conversion of generator-backed YUVA images to GrTextures. */
  class GrYUVAImageTextureMaker final : public GrTextureMaker {
  public:
      GrYUVAImageTextureMaker(GrRecordingContext* context, const SkImage* client);
  
      std::unique_ptr<GrFragmentProcessor> createFragmentProcessor(const SkMatrix& textureMatrix,
                                                                   const SkRect* subset,
                                                                   const SkRect* domain,
                                                                   GrSamplerState) override;
  
      std::unique_ptr<GrFragmentProcessor> createBicubicFragmentProcessor(
              const SkMatrix& textureMatrix,
              const SkRect* subset,
              const SkRect* domain,
              GrSamplerState::WrapMode wrapX,
              GrSamplerState::WrapMode wrapY,
              SkImage::CubicResampler) override;
  
      bool isPlanar() const override { return true; }
  
  private:
      GrSurfaceProxyView refOriginalTextureProxyView(GrMipmapped) override;
  
      const SkImage_GpuYUVA*  fImage;
  
      using INHERITED = GrTextureMaker;
  };
  
  #endif
  