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  virtual size_t getElementSize() const { assert(mBuffer != nullptr); return mBuffer->getElementSize(); }
94 
98  const GPUBuffer* getBuffer() const { return mBuffer; }
99 
100  std::string mName;
101 
102  protected:
103  // Buffer, set by derived classes
104  const GPUBuffer* mBuffer = nullptr;
105  };
106 
107 
111  class NAPAPI BufferBindingNumeric : public BufferBinding
112  {
113  RTTI_ENABLE(BufferBinding)
114  public:
115 
121  virtual bool init(utility::ErrorState& errorState) override { return BufferBinding::init(errorState); }
122 
126  const GPUBufferNumeric* getBuffer() const { return static_cast<const GPUBufferNumeric*>(BufferBinding::mBuffer); }
127  };
128 
129 
134  template <typename T>
136  {
137  RTTI_ENABLE(BufferBindingNumeric)
138  public:
144  virtual bool init(utility::ErrorState& errorState);
145 
147  };
148 
149 
154  class NAPAPI BufferBindingStruct : public BufferBinding
155  {
156  RTTI_ENABLE(BufferBinding)
157  public:
158 
164  virtual bool init(utility::ErrorState& errorState) override;
165 
169  virtual const StructBuffer* getBuffer() const { return mBuffer.get(); };
170 
171  rtti::ObjectPtr<StructBuffer> mBuffer = nullptr;
172  };
173 
174 
176  // TypedBufferBindingNumeric type definitions
178 
187 
188 
190  // Template definitions
192 
193  template <typename T>
195  {
197  return BufferBindingNumeric::init(errorState);
198  }
199 
200 }
nap::BufferBindingNumeric::getBuffer
const GPUBufferNumeric * getBuffer() const
Definition: bufferbinding.h:126
nap::BufferBinding
Definition: bufferbinding.h:68
nap::GPUBufferNumeric
Definition: gpubuffer.h:222
nap::rtti::ObjectPtr
Definition: objectptr.h:150
nap::BufferBindingNumeric
Definition: bufferbinding.h:111
nap::utility::ErrorState
Definition: errorstate.h:19
nap::TypedBufferBindingNumeric::mBuffer
rtti::ObjectPtr< TypedGPUBufferNumeric< T > > mBuffer
Definition: bufferbinding.h:146
nap::TypedBufferBindingNumeric::init
virtual bool init(utility::ErrorState &errorState)
Definition: bufferbinding.h:194
nap::BufferBinding::mBuffer
const GPUBuffer * mBuffer
Definition: bufferbinding.h:104
nap::BufferBinding::getBuffer
const GPUBuffer * getBuffer() const
Definition: bufferbinding.h:98
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:100
nap::StructBuffer
Definition: structbuffer.h:36
nap::TypedBufferBindingNumeric
Definition: bufferbinding.h:135
nap
Definition: templateapp.h:17
nap::BufferBinding::getElementSize
virtual size_t getElementSize() const
Definition: bufferbinding.h:93
nap::BufferBindingStruct::getBuffer
virtual const StructBuffer * getBuffer() const
Definition: bufferbinding.h:169
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:121
nap::Resource
Definition: resource.h:19
nap::BufferBindingStruct
Definition: bufferbinding.h:154
nap::BufferBinding::getSize
virtual size_t getSize() const
Definition: bufferbinding.h:88