/* * Copyright 2021 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrYUVATextureProxies_DEFINED #define GrYUVATextureProxies_DEFINED #include "include/core/SkYUVAInfo.h" #include "src/core/SkYUVAInfoLocation.h" #include "src/gpu/GrSurfaceProxy.h" #include "src/gpu/GrSurfaceProxyView.h" class GrSurfaceProxyView; class GrYUVATextureProxies { public: GrYUVATextureProxies() = default; /** Assumes all planes are sampled with a default "rgba" swizzle. */ GrYUVATextureProxies(const SkYUVAInfo&, sk_sp[SkYUVAInfo::kMaxPlanes], GrSurfaceOrigin textureOrigin); /** * When uploading pixmaps to textures it is important that we account for how the original * pixmaps' channels are swizzled into the texture during upload. This will compute a swizzle * for each texture based on the original color types and the views' swizzles. The views must * all have the same origin or the result will be an invalid GrYUVATextureProxies. */ GrYUVATextureProxies(const SkYUVAInfo&, GrSurfaceProxyView[SkYUVAInfo::kMaxPlanes], GrColorType[SkYUVAInfo::kMaxPlanes]); GrYUVATextureProxies(const GrYUVATextureProxies&) = default; GrYUVATextureProxies(GrYUVATextureProxies&&) = default; GrYUVATextureProxies& operator=(const GrYUVATextureProxies&) = default; GrYUVATextureProxies& operator=(GrYUVATextureProxies&&) = default; const SkYUVAInfo& yuvaInfo() const { return fYUVAInfo; } int numPlanes() const { return fYUVAInfo.numPlanes(); } GrSurfaceOrigin textureOrigin() const { return fTextureOrigin; } // Overall set of YUVA proxies is mip mapped if each plane is mip mapped. GrMipmapped mipmapped() const { return fMipmapped; } GrSurfaceProxy* proxy(int i) const { return fProxies[i].get(); } const std::array, SkYUVAInfo::kMaxPlanes>& proxies() const { return fProxies; } sk_sp refProxy(int i) const { return fProxies[i]; } GrSurfaceProxyView makeView(int i) const { return {fProxies[i], fTextureOrigin, GrSwizzle::RGBA()}; } bool isValid() const { return fYUVAInfo.isValid(); } const SkYUVAInfo::YUVALocations& yuvaLocations() const { return fYUVALocations; } private: std::array, SkYUVAInfo::kMaxPlanes> fProxies; SkYUVAInfo fYUVAInfo; GrSurfaceOrigin fTextureOrigin = kTopLeft_GrSurfaceOrigin; GrMipmapped fMipmapped = GrMipmapped::kNo; SkYUVAInfo::YUVALocations fYUVALocations = {}; }; #endif