12 #include <rtti/objectptr.h>
13 #include <glm/glm.hpp>
14 #include <utility/dllexport.h>
15 #include <nap/resource.h>
20 class UniformInstance;
61 mUniformCreatedCallback(uniformCreatedCallback),
62 mDeclaration(declaration)
72 const std::vector<std::unique_ptr<UniformInstance>>&
getUniforms()
const {
return mUniforms; }
87 T* findUniform(
const std::string& name);
95 T* getOrCreateUniform(
const std::string& name);
124 std::vector<std::unique_ptr<UniformInstance>> mUniforms;
142 mDeclaration(declaration)
152 const std::vector<std::unique_ptr<UniformStructInstance>>&
getElements()
const {
return mElements; }
176 std::vector<std::unique_ptr<UniformStructInstance>> mElements;
182 void addElement(std::unique_ptr<UniformStructInstance> element);
201 virtual void push(
uint8* uniformBuffer)
const = 0;
219 mDeclaration(&declaration) { }
264 virtual void push(uint8_t* uniformBuffer)
const override;
284 mDeclaration(&declaration) { }
294 virtual void setDefault() = 0;
334 void setValue(T value,
int index) { assert(index < mValues.size()); mValues[index] = value; }
355 virtual void push(
uint8* uniformBuffer)
const override;
362 T&
operator[](
size_t index) { assert(index < mValues.size());
return mValues[index]; }
366 std::vector<T> mValues;
408 if (instance !=
nullptr)
409 return rtti_cast<T>(instance);
418 if (instance !=
nullptr)
420 assert(instance->get_type().is_derived_from<T>());
421 return rtti_cast<T>(instance);
426 if (declaration ==
nullptr)
429 std::unique_ptr<UniformInstance> new_instance = createUniformFromDeclaration(*declaration, mUniformCreatedCallback);
430 T* result = rtti_cast<T>(new_instance.get());
431 assert(result !=
nullptr);
432 mUniforms.emplace_back(std::move(new_instance));
435 if (mUniformCreatedCallback)
436 mUniformCreatedCallback();
443 assert(
sizeof(mValue) == mDeclaration->mSize);
444 memcpy(uniformBuffer + mDeclaration->mOffset, &mValue,
sizeof(mValue));
450 if (
sizeof(T) == mDeclaration->mStride)
452 size_t size = mValues.size() *
sizeof(T);
453 memcpy(uniformBuffer + mDeclaration->mOffset, mValues.data(), size);
457 uint8_t* dest = uniformBuffer + mDeclaration->mOffset;
458 for (
const T& value : mValues)
460 memcpy(dest, &value,
sizeof(value));
461 dest += mDeclaration->mStride;
Definition: shadervariabledeclarations.h:58
Definition: materialinstance.h:64
Definition: material.h:30
Definition: material.h:172
std::function< void()> UniformCreatedCallback
Definition: uniform.h:18
uint8_t uint8
Definition: numeric.h:16
int mNumElements
Total number of elements in list.
Definition: shadervariabledeclarations.h:153
Definition: errorstate.h:19
Definition: material.h:72
Definition: shadervariabledeclarations.h:113
Definition: materialinstance.h:217
Definition: shadervariabledeclarations.h:87
Definition: shadervariabledeclarations.h:74
Definition: shadervariabledeclarations.h:146