Ion
|
A ShaderInputRegistry is used to manage a collection of shader inputs to a specific ShaderProgram (both uniforms and attributes). More...
#include "shaderinputregistry.h"
Classes | |
struct | CombineFunction |
This type defines a function that is used to combine values for two instances of a registered shader input. More... | |
struct | GenerateFunction |
A GenerateFunction is similar to a CombineFunction, above, but generates additional inputs based on the value of a single input. More... | |
struct | Spec |
This struct is stored for each registered ShaderInput. More... | |
Public Types | |
enum | { kUniformAdded = kNumBaseChanges, kNumChanges } |
Changes that affect this resource. More... | |
typedef Spec< Attribute > | AttributeSpec |
typedef Spec< Uniform > | UniformSpec |
enum | BaseChanges { kLabelChanged, kResourceChanged, kNumBaseChanges } |
All ResourceHolders derived from this should start their own change enums from kNumBaseChanges. More... | |
Public Member Functions | |
ShaderInputRegistry () | |
ShaderInputRegistry class definition. More... | |
size_t | GetId () const |
Each ShaderInputRegistry instance is assigned a unique integer ID. More... | |
bool | Include (const ShaderInputRegistryPtr ®) |
Includes another ShaderInputRegistry in this one. More... | |
bool | IncludeGlobalRegistry () |
Includes the global registry in this registry. More... | |
const base::AllocVector < ShaderInputRegistryPtr > & | GetIncludes () const |
Returns the vector of included registries. More... | |
bool | CheckInputsAreUnique () const |
Returns whether the inputs in this registry and its includes are unique. More... | |
template<typename T > | |
bool | Add (const Spec< T > &spec) |
Adds a type specification to the registry. More... | |
bool | Contains (const std::string &name) const |
Returns if a Spec for an input of the passed name exists in the registry or its includes. More... | |
template<typename T > | |
const Spec< T > * | Find (const std::string &name) const |
Returns the Spec for an input, or NULL if there isn't yet one. More... | |
template<typename T > | |
const base::AllocDeque< Spec < T > > & | GetSpecs () const |
Returns a vector of all Specs of type T added to this registry. More... | |
template<typename ShaderInputType , typename T > | |
const ShaderInputType | Create (const std::string &name_in, const T &value) |
Constructs a ShaderInput with the given name and value. More... | |
template<typename ShaderInputType , typename T > | |
const ShaderInputType | Create (const std::string &name_in, const T &value) const |
template<typename T > | |
const Uniform | CreateArrayUniform (const std::string &name_in, const T *values, size_t count, const base::AllocatorPtr &allocator) |
Constructs an array Uniform with the given name and values, using the passed allocator to construct the values in the returned Uniform. More... | |
template<typename T > | |
const Uniform | CreateArrayUniform (const std::string &name_in, const T *values, size_t count, const base::AllocatorPtr &allocator) const |
template<> | |
ION_API base::AllocDeque < ShaderInputRegistry::AttributeSpec > * | GetMutableSpecs () |
template<> | |
ION_API base::AllocDeque < ShaderInputRegistry::UniformSpec > * | GetMutableSpecs () |
template<> | |
ION_API const base::AllocDeque < ShaderInputRegistry::AttributeSpec > & | GetSpecs () const |
template<> | |
ION_API const base::AllocDeque < ShaderInputRegistry::UniformSpec > & | GetSpecs () const |
void | SetResource (size_t index, ResourceKey key, ResourceBase *resource) const |
Sets the resource at the passed index and key. More... | |
ResourceBase * | GetResource (size_t index, ResourceKey key) const |
Returns the Resource at the given index and key, or NULL if no resource was previously set at that location. More... | |
int | GetResourceCount () const |
Returns the number of resources that this holder holds. More... | |
size_t | GetGpuMemoryUsed () const |
Returns the total amount of GPU memory used by this Holder's resource. More... | |
const std::string & | GetLabel () const |
Returns/sets the label of this. More... | |
void | SetLabel (const std::string &label) |
void | AddReceiver (Notifier *receiver) |
Adds a Notifier to be notified. More... | |
void | RemoveReceiver (Notifier *receiver) |
Removes a Notifier to be notified. More... | |
size_t | GetReceiverCount () const |
Returns the number of Notifiers that will be notified. More... | |
const AllocatorPtr & | GetAllocator () const |
Returns the Allocator that was used for the instance. More... | |
const AllocatorPtr & | GetNonNullAllocator () const |
Return our allocator, or the default allocator if the instance was declared on the stack. More... | |
const AllocatorPtr & | GetAllocatorForLifetime (AllocationLifetime lifetime) const |
Convenience function that returns the Allocator to use to allocate an object with a specific lifetime. More... | |
void * | operator new (size_t size) |
The standard no-parameter new operator uses the default Allocator. More... | |
void * | operator new (size_t size, AllocationLifetime lifetime) |
This overloaded version of the new operator uses the AllocationManager's default Allocator for the specified lifetime. More... | |
void * | operator new (size_t size, const AllocatorPtr &allocator) |
This overloaded version of the new operator takes the Allocator to use directly as a parameter. More... | |
void * | operator new (size_t size, const AllocatorPtr &allocator, void *ptr) |
Special operator new for using placement new with Allocatables. More... | |
void * | operator new (size_t size, void *ptr) |
The placement new operator is defined conventionally. More... | |
void | operator delete (void *ptr) |
Define the delete operator to use specialized functions dealing with an Allocator. More... | |
void | operator delete (void *ptr, AllocationLifetime lifetime) |
Windows requires these (or it issues C4291 warnings). More... | |
void | operator delete (void *ptr, const AllocatorPtr &allocator) |
void | operator delete (void *ptr, void *ptr2) |
The placement delete operator does nothing, as usual. More... | |
int | GetRefCount () const |
GetRefCount() is part of the interface necessary for SharedPtr. More... | |
Static Public Member Functions | |
template<typename T > | |
static const Spec< T > * | GetSpec (const T &input) |
Convenience function that returns a pointer to the Spec associated with an Attribute or Uniform instance. More... | |
static const ShaderInputRegistryPtr & | GetGlobalRegistry () |
Returns the ShaderInputRegistry instance representing all supported global uniforms and attributes. More... | |
Protected Types | |
typedef WeakReferentPtr< Notifier > | NotifierPtr |
typedef AllocVector< NotifierPtr > | NotifierPtrVector |
Protected Member Functions | |
~ShaderInputRegistry () override | |
The destructor is protected because all base::Referent classes must have protected or private destructors. More... | |
void | OnChanged (int bit) const |
Forwards OnChanged to all resources. More... | |
const NotifierPtrVector & | GetReceivers () const |
Returns the set of Notifiers that will be notified. More... | |
void | Notify () const |
Notifies all contained Notifiers by calling their OnNotify(). More... | |
virtual void | OnNotify (const Notifier *notifier) |
Subclasses can override this to provide custom behavior on notifications. More... | |
A ShaderInputRegistry is used to manage a collection of shader inputs to a specific ShaderProgram (both uniforms and attributes).
The registry provides Create<Attribute>() and Create<Uniform>() functions that are the only way to construct valid Attribute and Uniform instances.
A registry must be specified for each ShaderProgram instance that is created. There is also a ShaderInputRegistry instance representing some predefined attributes and uniforms, returned by GetGlobalRegistry(). It contains specs for the following attributes as buffer object elements:
vec3 aVertex: The vertex position.
vec3 aColor: The vertex color.
vec3 aNormal: The normal direction.
vec2 aTexCoords: Texture coordinates.
and specs for the following uniforms:
ivec2 uViewportSize: Replaces the active viewport size (in pixels). Default Value: (0,0)
mat4 uProjectionMatrix: Replaces the current projection matrix. Default Value: Identity
mat4 uModelviewMatrix: Accumulates into the current modelview matrix. Default Value: Identity
vec4 uBaseColor: Replaces the base color for shapes. Default Value: (1,1,1,1)
Definition at line 88 of file shaderinputregistry.h.
Definition at line 162 of file shaderinputregistry.h.
|
protectedinherited |
Definition at line 49 of file notifier.h.
|
protectedinherited |
Definition at line 50 of file notifier.h.
Definition at line 163 of file shaderinputregistry.h.
anonymous enum |
Changes that affect this resource.
Enumerator | |
---|---|
kUniformAdded | |
kNumChanges |
Definition at line 91 of file shaderinputregistry.h.
|
inherited |
All ResourceHolders derived from this should start their own change enums from kNumBaseChanges.
Enumerator | |
---|---|
kLabelChanged | |
kResourceChanged | |
kNumBaseChanges |
Definition at line 56 of file resourceholder.h.
ion::gfx::ShaderInputRegistry::ShaderInputRegistry | ( | ) |
ShaderInputRegistry class definition.
Definition at line 164 of file shaderinputregistry.cc.
|
overrideprotected |
The destructor is protected because all base::Referent classes must have protected or private destructors.
Definition at line 174 of file shaderinputregistry.cc.
Adds a type specification to the registry.
This returns false if one already exists with the same name in this or any included registry.
Definition at line 194 of file shaderinputregistry.h.
References LOG, ion::gfx::ShaderInputRegistry::Spec< T >::name, name, and ion::port::WARNING.
|
inherited |
Adds a Notifier to be notified.
Does nothing if the receiver is NULL or is already in the receiver vector.
Definition at line 25 of file notifier.cc.
bool ion::gfx::ShaderInputRegistry::CheckInputsAreUnique | ( | ) | const |
Returns whether the inputs in this registry and its includes are unique.
Any duplicate inputs are logged as warnings.
Definition at line 225 of file shaderinputregistry.cc.
References LOG, and ion::port::WARNING.
bool ion::gfx::ShaderInputRegistry::Contains | ( | const std::string & | name | ) | const |
Returns if a Spec for an input of the passed name exists in the registry or its includes.
Definition at line 177 of file shaderinputregistry.cc.
Referenced by ion::gfxutils::BufferToAttributeBinder< T >::AreBindingsPacked().
|
inline |
Constructs a ShaderInput with the given name and value.
If the name is not found in the registry or its includes, the input is added to this registry, but if the value type is inconsistent with the registered type, this logs an error and returns an invalid ShaderInput instance (i.e., calling IsValid() on it will return false).
Definition at line 258 of file shaderinputregistry.h.
References name.
|
inline |
Definition at line 279 of file shaderinputregistry.h.
|
inline |
Constructs an array Uniform with the given name and values, using the passed allocator to construct the values in the returned Uniform.
If values is NULL then the array is still created but values are left unset as 0s. If the name is not found in the registry or its includes, the input is added to this registry, but if the value type is inconsistent with the registered type, this logs an error and returns an invalid ShaderInput instance (i.e., calling IsValid() on it will return false).
Definition at line 306 of file shaderinputregistry.h.
References name.
|
inline |
Definition at line 327 of file shaderinputregistry.h.
References name.
|
inline |
Returns the Spec for an input, or NULL if there isn't yet one.
The returned pointer is not guaranteed to be persistent if Add() is called again.
Definition at line 227 of file shaderinputregistry.h.
References name.
|
inlineinherited |
Returns the Allocator that was used for the instance.
This will be NULL if the instance was declared on the stack or created with normal placement new.
Definition at line 68 of file allocatable.h.
References allocator_.
Referenced by ion::base::DataContainer::CreateAndCopy(), ion::text::DynamicFontImage::FindContainingImageDataIndex(), and ion::text::DynamicFontImage::FindImageDataIndex().
|
inlineinherited |
Convenience function that returns the Allocator to use to allocate an object with a specific lifetime.
Definition at line 78 of file allocatable.h.
References ion::base::Allocator::GetAllocatorForLifetime().
Referenced by ion::text::BasicBuilder::BuildVertexData(), ion::text::OutlineBuilder::BuildVertexData(), ion::gfxutils::ShaderManager::CreateShaderProgram(), ion::text::DynamicFontImage::FindContainingImageDataIndex(), ion::text::DynamicFontImage::FindImageDataIndex(), ion::gfx::Renderer::Renderer(), and ion::gfx::UpdateStateTable().
|
static |
Returns the ShaderInputRegistry instance representing all supported global uniforms and attributes.
Definition at line 280 of file shaderinputregistry.cc.
Referenced by ion::text::BasicBuilder::BindAttributes(), ion::text::OutlineBuilder::BindAttributes(), and IncludeGlobalRegistry().
|
inlineinherited |
Returns the total amount of GPU memory used by this Holder's resource.
Definition at line 78 of file resourceholder.h.
|
inline |
Each ShaderInputRegistry instance is assigned a unique integer ID.
This returns that ID.
Definition at line 169 of file shaderinputregistry.h.
Referenced by ion::gfx::AttributeArray::AddAttribute(), and Include().
|
inline |
Returns the vector of included registries.
Definition at line 184 of file shaderinputregistry.h.
|
inlineinherited |
Returns/sets the label of this.
Definition at line 89 of file resourceholder.h.
ION_API base::AllocDeque<ShaderInputRegistry::AttributeSpec>* ion::gfx::ShaderInputRegistry::GetMutableSpecs | ( | ) |
Definition at line 248 of file shaderinputregistry.cc.
ION_API base::AllocDeque<ShaderInputRegistry::UniformSpec>* ion::gfx::ShaderInputRegistry::GetMutableSpecs | ( | ) |
Definition at line 253 of file shaderinputregistry.cc.
|
inlineinherited |
Return our allocator, or the default allocator if the instance was declared on the stack.
Definition at line 72 of file allocatable.h.
References allocator_, and ion::base::AllocationManager::GetNonNullAllocator().
|
inherited |
Returns the number of Notifiers that will be notified.
Definition at line 71 of file notifier.cc.
|
protectedinherited |
Returns the set of Notifiers that will be notified.
Definition at line 77 of file notifier.cc.
|
inlineinherited |
GetRefCount() is part of the interface necessary for SharedPtr.
Definition at line 34 of file shareable.h.
Referenced by ion::base::Notifier::RemoveReceiver().
|
inherited |
Returns the Resource at the given index and key, or NULL if no resource was previously set at that location.
Definition at line 122 of file resourceholder.cc.
|
inlineinherited |
Returns the number of resources that this holder holds.
Note that this is not necessarily the number of indices that have non-NULL resources. This can be used as a fast trivial check to see if the holder has any resources.
Definition at line 73 of file resourceholder.h.
|
inlinestatic |
Convenience function that returns a pointer to the Spec associated with an Attribute or Uniform instance.
These returns NULL if the Attribute or Uniform is not valid.
Definition at line 350 of file shaderinputregistry.h.
Referenced by ion::gfx::AttributeArray::GetAttributeIndexByName().
const base::AllocDeque<Spec<T> >& ion::gfx::ShaderInputRegistry::GetSpecs | ( | ) | const |
Returns a vector of all Specs of type T added to this registry.
Referenced by ion::gfx::UniformHolder::GetUniformIndex().
ION_API const base::AllocDeque<ShaderInputRegistry::AttributeSpec>& ion::gfx::ShaderInputRegistry::GetSpecs | ( | ) | const |
Definition at line 270 of file shaderinputregistry.cc.
ION_API const base::AllocDeque<ShaderInputRegistry::UniformSpec>& ion::gfx::ShaderInputRegistry::GetSpecs | ( | ) | const |
Definition at line 276 of file shaderinputregistry.cc.
bool ion::gfx::ShaderInputRegistry::Include | ( | const ShaderInputRegistryPtr & | reg | ) |
Includes another ShaderInputRegistry in this one.
Any shader that implements the current registry may also Create() inputs from an included registry. If the passed registry defines an input defined by this registry or its includes an error is printed and the registry is not included. Returns whether the registry was included.
Definition at line 193 of file shaderinputregistry.cc.
References ion::port::ERROR, ion::base::SharedPtr< T >::Get(), GetId(), and LOG.
Referenced by IncludeGlobalRegistry().
bool ion::gfx::ShaderInputRegistry::IncludeGlobalRegistry | ( | ) |
Includes the global registry in this registry.
See the above comment for Include() for failure conditions. Returns whether the global registry was included.
Definition at line 221 of file shaderinputregistry.cc.
References GetGlobalRegistry(), and Include().
|
protectedinherited |
Notifies all contained Notifiers by calling their OnNotify().
Any receivers that have been destroyed will be removed from the vector of receivers.
Definition at line 81 of file notifier.cc.
References ion::base::SharedPtr< T >::Get().
|
inlineprotectedinherited |
Forwards OnChanged to all resources.
Definition at line 326 of file resourceholder.h.
|
protectedvirtualinherited |
Subclasses can override this to provide custom behavior on notifications.
Definition at line 96 of file notifier.cc.
|
inlineinherited |
Define the delete operator to use specialized functions dealing with an Allocator.
Definition at line 109 of file allocatable.h.
|
inlineinherited |
Windows requires these (or it issues C4291 warnings).
Definition at line 112 of file allocatable.h.
|
inlineinherited |
Definition at line 113 of file allocatable.h.
|
inlineinherited |
The placement delete operator does nothing, as usual.
Definition at line 118 of file allocatable.h.
|
inlineinherited |
The standard no-parameter new operator uses the default Allocator.
Definition at line 84 of file allocatable.h.
|
inlineinherited |
This overloaded version of the new operator uses the AllocationManager's default Allocator for the specified lifetime.
Definition at line 88 of file allocatable.h.
|
inlineinherited |
This overloaded version of the new operator takes the Allocator to use directly as a parameter.
If the Allocator pointer is NULL, this uses the default Allocator.
Definition at line 95 of file allocatable.h.
|
inlineinherited |
Special operator new for using placement new with Allocatables.
Definition at line 100 of file allocatable.h.
|
inlineinherited |
The placement new operator is defined conventionally.
Definition at line 105 of file allocatable.h.
|
inherited |
Removes a Notifier to be notified.
Does nothing if the receiver is NULL or not in the set of receivers.
Definition at line 38 of file notifier.cc.
References ion::base::Shareable::GetRefCount().
Referenced by ion::gfx::AttributeArray::~AttributeArray().
|
inlineinherited |
Definition at line 90 of file resourceholder.h.
|
inherited |
Sets the resource at the passed index and key.
The size of the internal vector is automatically managed so that it has the smallest possible size.
Definition at line 51 of file resourceholder.cc.
References DCHECK, DCHECK_EQ, ion::gfx::ResourceBase::GetKey(), and ion::gfx::ResourceBase::OnChanged().