NAP
bufferbinding.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 "gpubuffer.h"
9 #include "structbuffer.h"
10 
11 // External Includes
12 #include <rtti/objectptr.h>
13 #include <glm/glm.hpp>
14 #include <utility/dllexport.h>
15 #include <nap/resource.h>
16 
17 namespace nap
18 {
19  // Forward Declares
20  class BufferBindingInstance;
21  class BufferBinding;
22 
68  class NAPAPI BufferBinding : public Resource
69  {
70  RTTI_ENABLE(Resource)
71  public:
72 
78  virtual bool init(utility::ErrorState& errorState) override;
79 
83  virtual int getCount() const { assert(mBuffer != nullptr); return mBuffer->getCount(); }
84 
88  virtual size_t getSize() const { assert(mBuffer != nullptr); return mBuffer->getSize(); }
89 
93  const GPUBuffer* getBuffer() const { return mBuffer; }
94 
95  std::string mName;
96 
97  protected:
98  // Buffer, set by derived classes
99  const GPUBuffer* mBuffer = nullptr;
100  };
101 
102 
106  class NAPAPI BufferBindingNumeric : public BufferBinding
107  {
108  RTTI_ENABLE(BufferBinding)
109  public:
110 
116  virtual bool init(utility::ErrorState& errorState) override { return BufferBinding::init(errorState); }
117 
121  const GPUBufferNumeric* getBuffer() const { return static_cast<const GPUBufferNumeric*>(BufferBinding::mBuffer); }
122  };
123 
124 
129  template <typename T>
131  {
132  RTTI_ENABLE(BufferBindingNumeric)
133  public:
139  virtual bool init(utility::ErrorState& errorState);
140 
142  };
143 
144 
149  class NAPAPI BufferBindingStruct : public BufferBinding
150  {
151  RTTI_ENABLE(BufferBinding)
152  public:
153 
159  virtual bool init(utility::ErrorState& errorState) override;
160 
164  virtual const StructBuffer* getBuffer() const { return mBuffer.get(); };
165 
166  rtti::ObjectPtr<StructBuffer> mBuffer = nullptr;
167  };
168 
169 
171  // TypedBufferBindingNumeric type definitions
173 
183 
184 
186  // Template definitions
188 
189  template <typename T>
191  {
193  return BufferBindingNumeric::init(errorState);
194  }
195 
196 }
nap::BufferBindingNumeric::getBuffer
const GPUBufferNumeric * getBuffer() const
Definition: bufferbinding.h:121
nap::BufferBinding
Definition: bufferbinding.h:68
nap::GPUBufferNumeric
Definition: gpubuffer.h:222
nap::rtti::ObjectPtr
Definition: objectptr.h:154
nap::BufferBindingNumeric
Definition: bufferbinding.h:106
nap::utility::ErrorState
Definition: errorstate.h:19
nap::TypedBufferBindingNumeric::mBuffer
rtti::ObjectPtr< TypedGPUBufferNumeric< T > > mBuffer
Definition: bufferbinding.h:141
nap::TypedBufferBindingNumeric::init
virtual bool init(utility::ErrorState &errorState)
Definition: bufferbinding.h:190
nap::BufferBinding::mBuffer
const GPUBuffer * mBuffer
Definition: bufferbinding.h:99
nap::BufferBinding::getBuffer
const GPUBuffer * getBuffer() const
Definition: bufferbinding.h:93
nap::BufferBinding::init
virtual bool init(utility::ErrorState &errorState) override
nap::BufferBinding::mName
std::string mName
Property: 'Name' name of buffer binding uniform in shader.
Definition: bufferbinding.h:95
nap::StructBuffer
Definition: structbuffer.h:36
nap::TypedBufferBindingNumeric
Definition: bufferbinding.h:130
nap
Definition: templateapp.h:17
nap::BufferBindingStruct::getBuffer
virtual const StructBuffer * getBuffer() const
Definition: bufferbinding.h:164
nap::GPUBuffer
Definition: gpubuffer.h:64
nap::BufferBinding::getCount
virtual int getCount() const
Definition: bufferbinding.h:83
nap::BufferBindingNumeric::init
virtual bool init(utility::ErrorState &errorState) override
Definition: bufferbinding.h:116
nap::Resource
Definition: resource.h:19
nap::BufferBindingStruct
Definition: bufferbinding.h:149
nap::BufferBinding::getSize
virtual size_t getSize() const
Definition: bufferbinding.h:88