| /* | |
| * Copyright 2023 Google LLC | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef GrExternalTextureGenerator_DEFINED | |
| #define GrExternalTextureGenerator_DEFINED | |
| #include "include/core/SkRefCnt.h" | |
| #include "include/gpu/ganesh/GrBackendSurface.h" | |
| #include "include/private/SkAPI.h" | |
| #include "include/private/gpu/ganesh/GrTextureGenerator.h" | |
| #include <memory> | |
| class GrRecordingContext; | |
| class GrSurfaceProxyView; | |
| class SkImage; | |
| enum class GrImageTexGenPolicy : int; | |
| namespace skgpu { enum class Mipmapped : bool; } | |
| struct SkImageInfo; | |
| class GrExternalTexture { | |
| public: | |
| virtual ~GrExternalTexture() = default; | |
| virtual GrBackendTexture getBackendTexture() = 0; | |
| virtual void dispose() = 0; | |
| }; | |
| class SK_API GrExternalTextureGenerator : public GrTextureGenerator { | |
| public: | |
| explicit GrExternalTextureGenerator(const SkImageInfo& info); | |
| GrSurfaceProxyView onGenerateTexture(GrRecordingContext*, | |
| const SkImageInfo&, | |
| skgpu::Mipmapped, | |
| GrImageTexGenPolicy) override; | |
| virtual std::unique_ptr<GrExternalTexture> generateExternalTexture(GrRecordingContext *, | |
| skgpu::Mipmapped) = 0; | |
| }; | |
| namespace SkImages { | |
| /** | |
| * Like SkImages::DeferredFromGenerator except allows for the use of GrTextureGenerator. | |
| * | |
| * @param gen producer of textures | |
| * @return created SkImage, or nullptr | |
| */ | |
| SK_API sk_sp<SkImage> DeferredFromTextureGenerator(std::unique_ptr<GrTextureGenerator> gen); | |
| } | |
| #endif // GrExternalTextureGenerator_DEFINED |