Ion
|
A ShaderSourceComposer is a generic interface for constructing a shader source string. More...
#include "shadersourcecomposer.h"
Public Member Functions | |
virtual const std::string | GetSource ()=0 |
Returns the source string of a shader. More... | |
virtual bool | DependsOn (const std::string &dependency) const =0 |
Returns whether this composer depends on the named dependency, which might be a filename or some other identifier that this recognizes. More... | |
virtual const std::string | GetDependencySource (const std::string &dependency) const =0 |
Returns the source of the passed dependency. More... | |
virtual bool | SetDependencySource (const std::string &dependency, const std::string &source)=0 |
Requests that the composer set the source of the dependency. More... | |
virtual const std::string | GetDependencyName (unsigned int id) const =0 |
Returns the name of a dependency identified by the passed id. More... | |
virtual const std::vector < std::string > | GetDependencyNames () const =0 |
Returns a vector containing all names that this composer depends on, or an empty vector if there are no dependencies. More... | |
virtual const std::vector < std::string > | GetChangedDependencies ()=0 |
Determines if any dependencies have changed (e.g., if a file has changed on disk since the last call to Get(Source|DependencySource)()) and updates them. 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... | |
Protected Member Functions | |
ShaderSourceComposer () | |
The constructor is protected since this is an abstract base class. More... | |
~ShaderSourceComposer () override | |
The destructor is protected since this is derived from base::Referent. More... | |
A ShaderSourceComposer is a generic interface for constructing a shader source string.
Subclasses implement the details of how the source is created. For example, a subclass may read shader code from a file, or construct a string programatically based on arguments passed to its constructor. A composer may inject strings into the source code of shaders, such as global #defines or forced includes.
Composers may be chained together. For example, ComposerA (which loads files) could hold an instance of ComposerB (which injects #defines). A trivial implementation of ComposerA's GetSource() might be:
const std::string ComposerA::GetSource() { const std::string defines = composer_b_->GetSource(); return defines + this->LoadFile(); }
Each Composer must support queries on the set of named dependencies (e.g., filenames) that the shader source depends on. OpenGL uses integers to identify files or other resources in shaders; Composers must support returning a meaningful name given an identifier. Base class for all composers.
Definition at line 60 of file shadersourcecomposer.h.
|
protected |
The constructor is protected since this is an abstract base class.
ShaderSourceComposer definition.
Definition at line 354 of file shadersourcecomposer.cc.
|
overrideprotected |
The destructor is protected since this is derived from base::Referent.
Definition at line 356 of file shadersourcecomposer.cc.
|
pure virtual |
Returns whether this composer depends on the named dependency, which might be a filename or some other identifier that this recognizes.
Implemented in ion::gfxutils::IncludeComposer, ion::gfxutils::FilterComposer, and ion::gfxutils::StringComposer.
|
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().
|
pure virtual |
Determines if any dependencies have changed (e.g., if a file has changed on disk since the last call to Get(Source|DependencySource)()) and updates them.
Returns a vector containing the names of the dependencies that have changed.
Implemented in ion::gfxutils::IncludeComposer, ion::gfxutils::FilterComposer, and ion::gfxutils::StringComposer.
|
pure virtual |
Returns the name of a dependency identified by the passed id.
The id is an integral value used by OpenGL to identify a shader file. Returns an empty string if the id is unknown or if there are no dependencies.
Implemented in ion::gfxutils::IncludeComposer, ion::gfxutils::FilterComposer, and ion::gfxutils::StringComposer.
|
pure virtual |
Returns a vector containing all names that this composer depends on, or an empty vector if there are no dependencies.
Implemented in ion::gfxutils::IncludeComposer, ion::gfxutils::FilterComposer, and ion::gfxutils::StringComposer.
|
pure virtual |
Returns the source of the passed dependency.
Implemented in ion::gfxutils::IncludeComposer, ion::gfxutils::FilterComposer, and ion::gfxutils::StringComposer.
|
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().
|
inlineinherited |
GetRefCount() is part of the interface necessary for SharedPtr.
Definition at line 34 of file shareable.h.
Referenced by ion::base::Notifier::RemoveReceiver().
|
pure virtual |
Returns the source string of a shader.
Implemented in ion::gfxutils::IncludeComposer, ion::gfxutils::FilterComposer, and ion::gfxutils::StringComposer.
|
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.
|
pure virtual |
Requests that the composer set the source of the dependency.
Returns whether the composer actually changes the source.
Implemented in ion::gfxutils::IncludeComposer, ion::gfxutils::FilterComposer, and ion::gfxutils::StringComposer.