NAP
texturelink.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4 
5 #pragma once
6 
7 // Local includes
8 #include "texture.h"
9 #include "irendertarget.h"
10 
11 namespace nap
12 {
18  class NAPAPI Texture2DLink
19  {
20  public:
21  // Destructor
22  virtual ~Texture2DLink() = default;
23 
24  // Copy is not allowed
25  Texture2DLink(Texture2DLink&) = delete;
26  Texture2DLink& operator=(const Texture2DLink&) = delete;
27 
28  // Move is not allowed
29  Texture2DLink(Texture2DLink&&) = delete;
30  Texture2DLink& operator=(Texture2DLink&&) = delete;
31 
32  protected:
33  // Only derived classes can create it
34  Texture2DLink() = default;
35 
42  static void sync(Texture2D& tex, VkImageLayout layout) { tex.mImageData.mCurrentLayout = layout; }
43  };
44 
45 
51  class NAPAPI Texture2DTargetLink : public Texture2DLink
52  {
53  public:
54  // Constructor
55  Texture2DTargetLink(const IRenderTarget& target) : mTarget(target) {};
56 
61  void sync(Texture2D& tex) { Texture2DLink::sync(tex, mTarget.getFinalLayout()); }
62 
63  private:
64  const IRenderTarget& mTarget;
65  };
66 
67 
73  class NAPAPI TextureCubeLink
74  {
75  public:
76  // Destructor
77  virtual ~TextureCubeLink() = default;
78 
79  // Copy is not allowed
81  TextureCubeLink& operator=(const TextureCubeLink&) = delete;
82 
83  // Move is not allowed
84  TextureCubeLink(TextureCubeLink&&) = delete;
85  TextureCubeLink& operator=(TextureCubeLink&&) = delete;
86 
87  protected:
88  // Only derived classes can create it
89  TextureCubeLink() = default;
90 
97  static void sync(TextureCube& tex, VkImageLayout layout) { tex.mImageData.mCurrentLayout = layout; }
98  };
99 
100 
107  {
108  public:
109  TextureCubeTargetLink(const IRenderTarget& target) : mTarget(target) {};
110 
115  void sync(TextureCube& tex) { TextureCubeLink::sync(tex, mTarget.getFinalLayout()); }
116 
117  private:
118  const IRenderTarget& mTarget;
119  };
120 }
121 
nap::ImageData::mCurrentLayout
VkImageLayout mCurrentLayout
Vulkan image layout.
Definition: imagedata.h:66
nap::IRenderTarget
Definition: irendertarget.h:21
nap::TextureCube
Definition: texture.h:302
nap::Texture2D::mImageData
ImageData mImageData
2D Texture vulkan image buffers
Definition: texture.h:272
nap::Texture2D
Definition: texture.h:117
nap
Definition: templateapp.h:17
nap::TextureCube::mImageData
ImageData mImageData
Cube Texture vulkan image buffers.
Definition: texture.h:366