1 /* 2 * Copyright 2015 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef GrVkTexture_DEFINED 9 #define GrVkTexture_DEFINED 10 11 #include "GrGpu.h" 12 #include "GrTexture.h" 13 #include "GrVkImage.h" 14 15 class GrVkGpu; 16 class GrVkImageView; 17 struct GrVkImageInfo; 18 19 class GrVkTexture : public GrTexture, public virtual GrVkImage { 20 public: 21 static GrVkTexture* CreateNewTexture(GrVkGpu*, SkBudgeted budgeted, const GrSurfaceDesc&, 22 const GrVkImage::ImageDesc&); 23 24 static sk_sp<GrVkTexture> MakeWrappedTexture(GrVkGpu*, const GrSurfaceDesc&, 25 GrWrapOwnership, const GrVkImageInfo*); 26 27 ~GrVkTexture() override; 28 29 GrBackendObject getTextureHandle() const override; 30 textureParamsModified()31 void textureParamsModified() override {} 32 33 const GrVkImageView* textureView(bool allowSRGB); 34 35 bool reallocForMipmap(GrVkGpu* gpu, uint32_t mipLevels); 36 37 protected: 38 GrVkTexture(GrVkGpu*, const GrSurfaceDesc&, const GrVkImageInfo&, const GrVkImageView*, 39 GrVkImage::Wrapped wrapped); 40 41 GrVkGpu* getVkGpu() const; 42 43 void onAbandon() override; 44 void onRelease() override; 45 std::unique_ptr<GrExternalTextureData> detachBackendTexture() override; 46 47 private: 48 enum Wrapped { kWrapped }; 49 GrVkTexture(GrVkGpu*, SkBudgeted, const GrSurfaceDesc&, 50 const GrVkImageInfo&, const GrVkImageView* imageView); 51 GrVkTexture(GrVkGpu*, Wrapped, const GrSurfaceDesc&, 52 const GrVkImageInfo&, const GrVkImageView* imageView, GrVkImage::Wrapped wrapped); 53 54 const GrVkImageView* fTextureView; 55 const GrVkImageView* fLinearTextureView; 56 57 typedef GrTexture INHERITED; 58 }; 59 60 #endif 61