NAP
uniform.h
1 #pragma once
2 
3 // Local Includes
4 #include "shadervariabledeclarations.h"
5 #include "gpubuffer.h"
6 
7 // External Includes
8 #include <rtti/objectptr.h>
9 #include <glm/glm.hpp>
10 #include <utility/dllexport.h>
11 #include <nap/resource.h>
12 
13 namespace nap
14 {
15  // Forward Declares
16  class UniformInstance;
17 
18  using UniformCreatedCallback = std::function<void()>;
19 
23  class NAPAPI Uniform : public Resource
24  {
25  RTTI_ENABLE(Resource)
26  public:
27  std::string mName;
28  };
29 
30 
43  class NAPAPI UniformStruct : public Uniform
44  {
45  RTTI_ENABLE(Uniform)
46  public:
47 
52  void addUniform(Uniform& uniform);
53 
58  Uniform* findUniform(const std::string& name);
59 
64  const Uniform* findUniform(const std::string& name) const;
65 
66  public:
67  std::vector<rtti::ObjectPtr<Uniform>> mUniforms;
68  };
69 
70 
89  class NAPAPI UniformStructArray : public Uniform
90  {
91  RTTI_ENABLE(Uniform)
92  public:
98  void insertStruct(int index, UniformStruct& uniformStruct);
99 
100  public:
101  std::vector<rtti::ObjectPtr<UniformStruct>> mStructs;
102  };
103 
104 
108  class NAPAPI UniformValue : public Uniform
109  {
110  RTTI_ENABLE(Uniform)
111  };
112 
113 
127  template<typename T>
129  {
130  RTTI_ENABLE(UniformValue)
131  public:
132  T mValue = T();
133  };
134 
135 
148  class NAPAPI UniformValueArray : public UniformValue
149  {
150  RTTI_ENABLE(UniformValue)
151 
152  public:
156  virtual int getCount() const = 0;
157  };
158 
159 
172  template<typename T>
174  {
175  RTTI_ENABLE(UniformValueArray)
176  public:
180  virtual int getCount() const override { return mValues.size(); }
181  std::vector<T> mValues;
182  };
183 
184 
191  template<class T>
192  const Uniform* findUniformStructMember(const std::vector<T>& members, const ShaderVariableDeclaration& declaration)
193  {
194  for (auto& member : members)
195  if (member->mName == declaration.mName)
196  return member.get();
197  return nullptr;
198  }
199 
200 
202  // Uniform value type definitions
204 
214 
215 
217  // Uniform value array type definitions
219 
229 }
nap::ShaderVariableDeclaration
Definition: shadervariabledeclarations.h:58
nap::TypedUniformValueArray::getCount
virtual int getCount() const override
Definition: uniform.h:180
nap::UniformCreatedCallback
std::function< void()> UniformCreatedCallback
Definition: uniform.h:18
nap::UniformValueArray
Definition: uniform.h:148
nap::TypedUniformValueArray::mValues
std::vector< T > mValues
Definition: uniform.h:181
nap::Uniform::mName
std::string mName
Name of uniform in shader.
Definition: uniform.h:27
nap::UniformValue
Definition: uniform.h:108
nap::UniformStructArray
Definition: uniform.h:89
nap::UniformStructArray::mStructs
std::vector< rtti::ObjectPtr< UniformStruct > > mStructs
Definition: uniform.h:101
nap::Uniform
Definition: uniform.h:23
nap::TypedUniformValueArray
Definition: uniform.h:173
nap::TypedUniformValue::mValue
T mValue
Definition: uniform.h:132
nap::findUniformStructMember
const Uniform * findUniformStructMember(const std::vector< T > &members, const ShaderVariableDeclaration &declaration)
Definition: uniform.h:192
nap
Definition: assert.h:10
nap::TypedUniformValue
Definition: uniform.h:128
nap::ShaderVariableDeclaration::mName
std::string mName
Name of the declaration.
Definition: shadervariabledeclarations.h:65
nap::Resource
Definition: resource.h:19
nap::UniformStruct::mUniforms
std::vector< rtti::ObjectPtr< Uniform > > mUniforms
Definition: uniform.h:67
nap::UniformStruct
Definition: uniform.h:43