Home | History | Annotate | Download | only in vk
      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 
     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