/* * 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 GrTextureMaker_DEFINED #define GrTextureMaker_DEFINED #include "GrTextureProducer.h" /** * Base class for sources that start out as something other than a texture (encoded image, * picture, ...). */ class GrTextureMaker : public GrTextureProducer { public: enum class AllowedTexGenType : bool { kCheap, kAny }; std::unique_ptr createFragmentProcessor( const SkMatrix& textureMatrix, const SkRect& constraintRect, FilterConstraint filterConstraint, bool coordsLimitedToConstraintRect, const GrSamplerState::Filter* filterOrNullForBicubic, SkColorSpace* dstColorSpace) override; protected: GrTextureMaker(GrContext* context, int width, int height, bool isAlphaOnly) : INHERITED(context, width, height, isAlphaOnly) {} /** * Return the maker's "original" texture. It is the responsibility of the maker to handle any * caching of the original if desired. * If "genType" argument equals AllowedTexGenType::kCheap and the texture is not trivial to * construct then refOriginalTextureProxy should return nullptr (for example if texture is made * by drawing into a render target). */ virtual sk_sp refOriginalTextureProxy(bool willBeMipped, SkColorSpace* dstColorSpace, AllowedTexGenType genType) = 0; /** * Returns the color space of the maker's "original" texture, assuming it was retrieved with * the same destination color space. */ virtual sk_sp getColorSpace(SkColorSpace* dstColorSpace) = 0; GrContext* context() const { return fContext; } private: sk_sp onRefTextureProxyForParams(const GrSamplerState&, SkColorSpace* dstColorSpace, sk_sp* proxyColorSpace, bool willBeMipped, SkScalar scaleAdjust[2]) override; typedef GrTextureProducer INHERITED; }; #endif