Ion
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ion::gfx::ShaderInputRegistry Class Reference

A ShaderInputRegistry is used to manage a collection of shader inputs to a specific ShaderProgram (both uniforms and attributes). More...

#include "shaderinputregistry.h"

Inheritance diagram for ion::gfx::ShaderInputRegistry:
Collaboration diagram for ion::gfx::ShaderInputRegistry:

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< AttributeAttributeSpec
 
typedef Spec< UniformUniformSpec
 
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 &reg)
 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...
 
ResourceBaseGetResource (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< NotifierNotifierPtr
 
typedef AllocVector< NotifierPtrNotifierPtrVector
 

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 NotifierPtrVectorGetReceivers () 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...
 

Detailed Description

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.

Member Typedef Documentation

Definition at line 49 of file notifier.h.

typedef AllocVector<NotifierPtr> ion::base::Notifier::NotifierPtrVector
protectedinherited

Definition at line 50 of file notifier.h.

Member Enumeration Documentation

anonymous enum

Changes that affect this resource.

Enumerator
kUniformAdded 
kNumChanges 

Definition at line 91 of file shaderinputregistry.h.

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.

Constructor & Destructor Documentation

ion::gfx::ShaderInputRegistry::ShaderInputRegistry ( )

ShaderInputRegistry class definition.

Definition at line 164 of file shaderinputregistry.cc.

ion::gfx::ShaderInputRegistry::~ShaderInputRegistry ( )
overrideprotected

The destructor is protected because all base::Referent classes must have protected or private destructors.

Definition at line 174 of file shaderinputregistry.cc.

Member Function Documentation

template<typename T >
bool ion::gfx::ShaderInputRegistry::Add ( const Spec< T > &  spec)
inline

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.

void ion::base::Notifier::AddReceiver ( Notifier receiver)
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().

template<typename ShaderInputType , typename T >
const ShaderInputType ion::gfx::ShaderInputRegistry::Create ( const std::string &  name_in,
const T value 
)
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.

template<typename ShaderInputType , typename T >
const ShaderInputType ion::gfx::ShaderInputRegistry::Create ( const std::string &  name_in,
const T value 
) const
inline

Definition at line 279 of file shaderinputregistry.h.

References name, and value.

template<typename T >
const Uniform ion::gfx::ShaderInputRegistry::CreateArrayUniform ( const std::string &  name_in,
const T values,
size_t  count,
const base::AllocatorPtr allocator 
)
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.

template<typename T >
const Uniform ion::gfx::ShaderInputRegistry::CreateArrayUniform ( const std::string &  name_in,
const T values,
size_t  count,
const base::AllocatorPtr allocator 
) const
inline

Definition at line 327 of file shaderinputregistry.h.

References name.

template<typename T >
const Spec<T>* ion::gfx::ShaderInputRegistry::Find ( const std::string &  name) const
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.

const AllocatorPtr& ion::base::Allocatable::GetAllocator ( ) const
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().

const AllocatorPtr& ion::base::Allocatable::GetAllocatorForLifetime ( AllocationLifetime  lifetime) const
inlineinherited
const ShaderInputRegistryPtr & ion::gfx::ShaderInputRegistry::GetGlobalRegistry ( )
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().

size_t ion::gfx::ResourceHolder::GetGpuMemoryUsed ( ) const
inlineinherited

Returns the total amount of GPU memory used by this Holder's resource.

Definition at line 78 of file resourceholder.h.

size_t ion::gfx::ShaderInputRegistry::GetId ( ) const
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().

const base::AllocVector<ShaderInputRegistryPtr>& ion::gfx::ShaderInputRegistry::GetIncludes ( ) const
inline

Returns the vector of included registries.

Definition at line 184 of file shaderinputregistry.h.

const std::string& ion::gfx::ResourceHolder::GetLabel ( ) const
inlineinherited

Returns/sets the label of this.

Definition at line 89 of file resourceholder.h.

template<>
ION_API base::AllocDeque<ShaderInputRegistry::AttributeSpec>* ion::gfx::ShaderInputRegistry::GetMutableSpecs ( )

Definition at line 248 of file shaderinputregistry.cc.

template<>
ION_API base::AllocDeque<ShaderInputRegistry::UniformSpec>* ion::gfx::ShaderInputRegistry::GetMutableSpecs ( )

Definition at line 253 of file shaderinputregistry.cc.

const AllocatorPtr& ion::base::Allocatable::GetNonNullAllocator ( ) const
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().

size_t ion::base::Notifier::GetReceiverCount ( ) const
inherited

Returns the number of Notifiers that will be notified.

Definition at line 71 of file notifier.cc.

const Notifier::NotifierPtrVector & ion::base::Notifier::GetReceivers ( ) const
protectedinherited

Returns the set of Notifiers that will be notified.

Definition at line 77 of file notifier.cc.

int ion::base::Shareable::GetRefCount ( ) const
inlineinherited

GetRefCount() is part of the interface necessary for SharedPtr.

Definition at line 34 of file shareable.h.

Referenced by ion::base::Notifier::RemoveReceiver().

ResourceBase * ion::gfx::ResourceHolder::GetResource ( size_t  index,
ResourceKey  key 
) const
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.

int ion::gfx::ResourceHolder::GetResourceCount ( ) const
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.

template<typename T >
static const Spec<T>* ion::gfx::ShaderInputRegistry::GetSpec ( const T input)
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().

template<typename T >
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().

template<>
ION_API const base::AllocDeque<ShaderInputRegistry::AttributeSpec>& ion::gfx::ShaderInputRegistry::GetSpecs ( ) const

Definition at line 270 of file shaderinputregistry.cc.

template<>
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().

void ion::base::Notifier::Notify ( ) const
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().

void ion::gfx::ResourceHolder::OnChanged ( int  bit) const
inlineprotectedinherited

Forwards OnChanged to all resources.

Definition at line 326 of file resourceholder.h.

void ion::base::Notifier::OnNotify ( const Notifier notifier)
protectedvirtualinherited

Subclasses can override this to provide custom behavior on notifications.

Definition at line 96 of file notifier.cc.

void ion::base::Allocatable::operator delete ( void *  ptr)
inlineinherited

Define the delete operator to use specialized functions dealing with an Allocator.

Definition at line 109 of file allocatable.h.

void ion::base::Allocatable::operator delete ( void *  ptr,
AllocationLifetime  lifetime 
)
inlineinherited

Windows requires these (or it issues C4291 warnings).

Definition at line 112 of file allocatable.h.

void ion::base::Allocatable::operator delete ( void *  ptr,
const AllocatorPtr allocator 
)
inlineinherited

Definition at line 113 of file allocatable.h.

void ion::base::Allocatable::operator delete ( void *  ptr,
void *  ptr2 
)
inlineinherited

The placement delete operator does nothing, as usual.

Definition at line 118 of file allocatable.h.

void* ion::base::Allocatable::operator new ( size_t  size)
inlineinherited

The standard no-parameter new operator uses the default Allocator.

Definition at line 84 of file allocatable.h.

void* ion::base::Allocatable::operator new ( size_t  size,
AllocationLifetime  lifetime 
)
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.

void* ion::base::Allocatable::operator new ( size_t  size,
const AllocatorPtr allocator 
)
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.

void* ion::base::Allocatable::operator new ( size_t  size,
const AllocatorPtr allocator,
void *  ptr 
)
inlineinherited

Special operator new for using placement new with Allocatables.

Definition at line 100 of file allocatable.h.

void* ion::base::Allocatable::operator new ( size_t  size,
void *  ptr 
)
inlineinherited

The placement new operator is defined conventionally.

Definition at line 105 of file allocatable.h.

void ion::base::Notifier::RemoveReceiver ( Notifier receiver)
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().

void ion::gfx::ResourceHolder::SetLabel ( const std::string &  label)
inlineinherited

Definition at line 90 of file resourceholder.h.

void ion::gfx::ResourceHolder::SetResource ( size_t  index,
ResourceKey  key,
ResourceBase resource 
) const
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().


The documentation for this class was generated from the following files: