12 #include <rtti/objectptr.h>
13 #include <glm/glm.hpp>
14 #include <utility/dllexport.h>
15 #include <nap/resource.h>
20 class UniformInstance;
60 mUniformCreatedCallback(uniformCreatedCallback),
61 mDeclaration(declaration)
71 const std::vector<std::unique_ptr<UniformInstance>>&
getUniforms()
const {
return mUniforms; }
86 T* findUniform(
const std::string& name);
94 T* getOrCreateUniform(
const std::string& name);
122 std::vector<std::unique_ptr<UniformInstance>> mUniforms;
140 mDeclaration(declaration)
150 const std::vector<std::unique_ptr<UniformStructInstance>>&
getElements()
const {
return mElements; }
184 std::vector<std::unique_ptr<UniformStructInstance>> mElements;
190 void addElement(std::unique_ptr<UniformStructInstance> element);
209 virtual void push(
uint8* uniformBuffer)
const = 0;
227 mDeclaration(&declaration) { }
272 virtual void push(uint8_t* uniformBuffer)
const override;
292 mDeclaration(&declaration) { }
307 virtual void setDefault() = 0;
347 void setValue(T value,
int index) { assert(index < mValues.size()); mValues[index] = value; }
368 virtual void push(
uint8* uniformBuffer)
const override;
375 T&
operator[](
size_t index) { assert(index < mValues.size());
return mValues[index]; }
379 std::vector<T> mValues;
421 if (instance !=
nullptr)
422 return rtti_cast<T>(instance);
431 if (instance !=
nullptr)
433 assert(instance->get_type().is_derived_from<T>());
434 return rtti_cast<T>(instance);
439 if (declaration ==
nullptr)
442 std::unique_ptr<UniformInstance> new_instance = createUniformFromDeclaration(*declaration, mUniformCreatedCallback);
443 T* result = rtti_cast<T>(new_instance.get());
444 assert(result !=
nullptr);
445 mUniforms.emplace_back(std::move(new_instance));
448 if (mUniformCreatedCallback)
449 mUniformCreatedCallback();
456 assert(
sizeof(mValue) == mDeclaration->mSize);
457 memcpy(uniformBuffer + mDeclaration->mOffset, &mValue,
sizeof(mValue));
463 if (
sizeof(T) == mDeclaration->mStride)
465 size_t size = mValues.size() *
sizeof(T);
466 memcpy(uniformBuffer + mDeclaration->mOffset, mValues.data(), size);
470 uint8_t* dest = uniformBuffer + mDeclaration->mOffset;
471 for (
const T& value : mValues)
473 memcpy(dest, &value,
sizeof(value));
474 dest += mDeclaration->mStride;
Definition: shadervariabledeclarations.h:58
Definition: materialinstance.h:101
Definition: material.h:41
Definition: material.h:183
std::function< void()> UniformCreatedCallback
Definition: uniform.h:17
uint8_t uint8
Definition: numeric.h:16
int mNumElements
Total number of elements in list.
Definition: shadervariabledeclarations.h:162
Definition: errorstate.h:19
Definition: material.h:83
Definition: shadervariabledeclarations.h:119
Definition: materialinstance.h:297
Definition: shadervariabledeclarations.h:95
Definition: templateapp.h:17
Definition: shadervariabledeclarations.h:82
Definition: shadervariabledeclarations.h:155