NAP
samplerinstance.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 "sampler.h"
9 
10 namespace nap
11 {
12  // Called when the bound sampler resource changes
13  using SamplerChangedCallback = std::function<void(SamplerInstance&)>;
14 
18  class NAPAPI SamplerInstance
19  {
20  RTTI_ENABLE()
21  public:
29  SamplerInstance(RenderService& renderService, const SamplerDeclaration& declaration, const Sampler* sampler, const SamplerChangedCallback& samplerChangedCallback);
30  virtual ~SamplerInstance();
31 
37  bool init(utility::ErrorState& errorState);
38 
42  const SamplerDeclaration& getDeclaration() const { assert(mDeclaration != nullptr); return *mDeclaration; }
43 
47  VkSampler getVulkanSampler() const { return mVulkanSampler; }
48 
49  protected:
53  void raiseChanged() { if (mSamplerChangedCallback) mSamplerChangedCallback(*this); }
54 
55  private:
56  RenderService* mRenderService = nullptr;
57  VkDevice mDevice = VK_NULL_HANDLE;
58  VkSampler mVulkanSampler = VK_NULL_HANDLE;
59  const Sampler* mSampler = nullptr;
60  const SamplerDeclaration* mDeclaration = nullptr;
61  SamplerChangedCallback mSamplerChangedCallback;
62  };
63 
64 
66  // Sampler2DInstance
68 
73  class NAPAPI Sampler2DInstance : public SamplerInstance
74  {
75  RTTI_ENABLE(SamplerInstance)
76  public:
84  Sampler2DInstance(RenderService& renderService, const SamplerDeclaration& declaration, const Sampler2D* sampler2D, const SamplerChangedCallback& samplerChangedCallback);
85 
90  void setTexture(Texture2D& texture);
91 
95  bool hasTexture() const { return mTexture2D != nullptr; }
96 
100  const Texture2D& getTexture() const { return *mTexture2D; }
101 
102  private:
106  void onTextureChanged(const Texture2D&);
107  rtti::ObjectPtr<Texture2D> mTexture2D = nullptr;
108  };
109 
110 
112  // Sampler2DArrayInstance
114 
120  {
121  RTTI_ENABLE(SamplerInstance)
122  public:
130  Sampler2DArrayInstance(RenderService& renderService, const SamplerDeclaration& declaration, const Sampler2DArray* sampler2DArray, const SamplerChangedCallback& samplerChangedCallback);
131 
135  int getNumElements() const { return static_cast<int>(mTextures.size()); }
136 
140  bool hasTexture(int index) const { assert(index < mTextures.size()); return mTextures[index] != nullptr; }
141 
146  const Texture2D& getTexture(int index) const { assert(index < mTextures.size()); return *mTextures[index]; }
147 
153  void setTexture(int index, Texture2D& texture);
154 
160  rtti::ObjectPtr<Texture2D>& operator[](size_t index) { assert(index < mTextures.size()); return mTextures[index]; }
161 
162  private:
163  std::vector<rtti::ObjectPtr<Texture2D>> mTextures;
164  };
165 }
nap::SamplerInstance::getVulkanSampler
VkSampler getVulkanSampler() const
Definition: samplerinstance.h:47
nap::Sampler2DArrayInstance::operator[]
rtti::ObjectPtr< Texture2D > & operator[](size_t index)
Definition: samplerinstance.h:160
nap::Sampler2DInstance::getTexture
const Texture2D & getTexture() const
Definition: samplerinstance.h:100
nap::Sampler2D
Definition: sampler.h:93
nap::rtti::ObjectPtr
Definition: objectptr.h:184
nap::SamplerInstance::raiseChanged
void raiseChanged()
Definition: samplerinstance.h:53
nap::Sampler2DArrayInstance::getTexture
const Texture2D & getTexture(int index) const
Definition: samplerinstance.h:146
nap::SamplerInstance::getDeclaration
const SamplerDeclaration & getDeclaration() const
Definition: samplerinstance.h:42
nap::Sampler2DInstance::hasTexture
bool hasTexture() const
Definition: samplerinstance.h:95
nap::utility::ErrorState
Definition: errorstate.h:19
nap::SamplerChangedCallback
std::function< void(SamplerInstance &)> SamplerChangedCallback
Definition: samplerinstance.h:13
nap::Sampler
Definition: sampler.h:63
nap::Texture2D
Definition: texture2d.h:43
nap::RenderService
Definition: renderservice.h:268
nap::Sampler2DArray
Definition: sampler.h:131
nap::SamplerInstance
Definition: samplerinstance.h:18
nap::Sampler2DArrayInstance::getNumElements
int getNumElements() const
Definition: samplerinstance.h:135
nap::Sampler2DArrayInstance::hasTexture
bool hasTexture(int index) const
Definition: samplerinstance.h:140
nap::Sampler2DArrayInstance
Definition: samplerinstance.h:119
nap::SamplerDeclaration
Definition: samplerdeclaration.h:15
nap
Definition: assert.h:10
nap::Sampler2DInstance
Definition: samplerinstance.h:73