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  using UniformCreatedCallback = std::function<void()>;
18 
19  // Common uniform property names
20  namespace uniform
21  {
22  constexpr const char* uniforms = "Uniforms";
23  constexpr const char* value = "Value";
24  constexpr const char* values = "Values";
25  constexpr const char* structs = "Structs";
26  }
27 
31  class NAPAPI Uniform : public Resource
32  {
33  RTTI_ENABLE(Resource)
34  public:
35  std::string mName;
36  };
37 
38 
51  class NAPAPI UniformStruct : public Uniform
52  {
53  RTTI_ENABLE(Uniform)
54  public:
55 
60  void addUniform(Uniform& uniform);
61 
66  Uniform* findUniform(const std::string& name);
67 
72  const Uniform* findUniform(const std::string& name) const;
73 
74  public:
75  std::vector<rtti::ObjectPtr<Uniform>> mUniforms;
76  };
77 
78 
97  class NAPAPI UniformStructArray : public Uniform
98  {
99  RTTI_ENABLE(Uniform)
100  public:
106  void insertStruct(int index, UniformStruct& uniformStruct);
107 
108  public:
109  std::vector<rtti::ObjectPtr<UniformStruct>> mStructs;
110  };
111 
112 
116  class NAPAPI UniformValue : public Uniform
117  {
118  RTTI_ENABLE(Uniform)
119  };
120 
121 
135  template<typename T>
137  {
138  RTTI_ENABLE(UniformValue)
139  public:
140  T mValue = T();
141  };
142 
143 
156  class NAPAPI UniformValueArray : public UniformValue
157  {
158  RTTI_ENABLE(UniformValue)
159 
160  public:
164  virtual int getCount() const = 0;
165  };
166 
167 
180  template<typename T>
182  {
183  RTTI_ENABLE(UniformValueArray)
184  public:
188  virtual int getCount() const override { return mValues.size(); }
189  std::vector<T> mValues;
190  };
191 
192 
199  template<class T>
200  const Uniform* findUniformStructMember(const std::vector<T>& members, const ShaderVariableDeclaration& declaration)
201  {
202  for (auto& member : members)
203  if (member->mName == declaration.mName)
204  return member.get();
205  return nullptr;
206  }
207 
208 
210  // Uniform value type definitions
212 
222 
223 
225  // Uniform value array type definitions
227 
237 }
nap::uniform::uniforms
constexpr const char * uniforms
Definition: uniform.h:22
nap::ShaderVariableDeclaration
Definition: shadervariabledeclarations.h:58
nap::uniform::value
constexpr const char * value
Definition: uniform.h:23
nap::TypedUniformValueArray::getCount
virtual int getCount() const override
Definition: uniform.h:188
nap::UniformCreatedCallback
std::function< void()> UniformCreatedCallback
Definition: uniform.h:17
nap::UniformValueArray
Definition: uniform.h:156
nap::TypedUniformValueArray::mValues
std::vector< T > mValues
Definition: uniform.h:189
nap::Uniform::mName
std::string mName
Name of uniform in shader.
Definition: uniform.h:35
nap::UniformValue
Definition: uniform.h:116
nap::UniformStructArray
Definition: uniform.h:97
nap::UniformStructArray::mStructs
std::vector< rtti::ObjectPtr< UniformStruct > > mStructs
Definition: uniform.h:109
nap::Uniform
Definition: uniform.h:31
nap::TypedUniformValueArray
Definition: uniform.h:181
nap::TypedUniformValue::mValue
T mValue
Definition: uniform.h:140
nap::findUniformStructMember
const Uniform * findUniformStructMember(const std::vector< T > &members, const ShaderVariableDeclaration &declaration)
Definition: uniform.h:200
nap::uniform::values
constexpr const char * values
Definition: uniform.h:24
nap
Definition: templateapp.h:17
nap::TypedUniformValue
Definition: uniform.h:136
nap::ShaderVariableDeclaration::mName
std::string mName
Name of the declaration.
Definition: shadervariabledeclarations.h:73
nap::Resource
Definition: resource.h:19
nap::UniformStruct::mUniforms
std::vector< rtti::ObjectPtr< Uniform > > mUniforms
Definition: uniform.h:75
nap::uniform::structs
constexpr const char * structs
Definition: uniform.h:25
nap::UniformStruct
Definition: uniform.h:51