NAP
uniformcontainer.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 "samplerinstance.h"
9 #include "uniforminstance.h"
10 #include "bufferbindinginstance.h"
11 #include "shaderconstant.h"
12 
13 namespace nap
14 {
20  class NAPAPI UniformContainer
21  {
22  RTTI_ENABLE()
23  public:
24  using UniformStructInstanceList = std::vector<std::unique_ptr<UniformStructInstance>>;
25  using BufferBindingInstanceList = std::vector<std::unique_ptr<BufferBindingInstance>>;
26  using SamplerInstanceList = std::vector<std::unique_ptr<SamplerInstance>>;
27  using ShaderConstantInstanceList = std::vector<std::unique_ptr<ShaderConstantInstance>>;
28 
29  UniformContainer() = default;
30  virtual ~UniformContainer() = default;
31 
32  UniformContainer(const UniformContainer&) = delete;
33  UniformContainer& operator=(const UniformContainer&) = delete;
34 
40  UniformStructInstance* findUniform(const std::string& name) const;
41 
47  SamplerInstance* findSampler(const std::string& name) const;
48 
54  BufferBindingInstance* findBinding(const std::string& name) const;
55 
61  ShaderConstantInstance* findConstant(const std::string& name) const;
62 
66  const SamplerInstanceList& getSamplers() const { return mSamplerInstances; }
67 
71  const BufferBindingInstanceList& getBufferBindings() const { return mBindingInstances; }
72 
76  const ShaderConstantInstanceList& getConstants() const { return mConstantInstances; }
77 
81  const UniformStructInstanceList& getUniformStructs() const { return mUniformRootStructs; }
82 
83  protected:
84  UniformStructInstance& createUniformRootStruct(const ShaderVariableStructDeclaration& declaration, const UniformCreatedCallback& uniformCreatedCallback);
85  BufferBindingInstance& addBindingInstance(std::unique_ptr<BufferBindingInstance> instance);
86  SamplerInstance& addSamplerInstance(std::unique_ptr<SamplerInstance> instance);
87  ShaderConstantInstance& addConstantInstance(std::unique_ptr<ShaderConstantInstance> instance);
88 
89  private:
90  UniformStructInstanceList mUniformRootStructs;
91  BufferBindingInstanceList mBindingInstances;
92  SamplerInstanceList mSamplerInstances;
93  ShaderConstantInstanceList mConstantInstances;
94  };
95 }
nap::UniformContainer::BufferBindingInstanceList
std::vector< std::unique_ptr< BufferBindingInstance > > BufferBindingInstanceList
Definition: uniformcontainer.h:25
nap::UniformContainer::UniformStructInstanceList
std::vector< std::unique_ptr< UniformStructInstance > > UniformStructInstanceList
Definition: uniformcontainer.h:24
nap::UniformContainer::ShaderConstantInstanceList
std::vector< std::unique_ptr< ShaderConstantInstance > > ShaderConstantInstanceList
Definition: uniformcontainer.h:27
nap::UniformCreatedCallback
std::function< void()> UniformCreatedCallback
Definition: uniform.h:17
nap::UniformContainer::SamplerInstanceList
std::vector< std::unique_ptr< SamplerInstance > > SamplerInstanceList
Definition: uniformcontainer.h:26
nap::UniformContainer::getConstants
const ShaderConstantInstanceList & getConstants() const
Definition: uniformcontainer.h:76
nap::BufferBindingInstance
Definition: bufferbindinginstance.h:73
nap::SamplerInstance
Definition: samplerinstance.h:18
nap::UniformContainer::getSamplers
const SamplerInstanceList & getSamplers() const
Definition: uniformcontainer.h:66
nap::ShaderConstantInstance
Definition: shaderconstant.h:96
nap::ShaderVariableStructDeclaration
Definition: shadervariabledeclarations.h:95
nap
Definition: templateapp.h:17
nap::UniformStructInstance
Definition: uniforminstance.h:53
nap::UniformContainer
Definition: uniformcontainer.h:20
nap::UniformContainer::getBufferBindings
const BufferBindingInstanceList & getBufferBindings() const
Definition: uniformcontainer.h:71
nap::UniformContainer::getUniformStructs
const UniformStructInstanceList & getUniformStructs() const
Definition: uniformcontainer.h:81