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

Loads a shader source from a resource that may include other resources using the special directive '$input "name"'. More...

#include "shadersourcecomposer.h"

Inheritance diagram for ion::gfxutils::IncludeComposer:
Collaboration diagram for ion::gfxutils::IncludeComposer:

Public Types

typedef std::function< const
std::string(const std::string
&name)> 
SourceLoader
 A function that returns a string source given a filename. More...
 
typedef std::function< bool(const
std::string &name, const
std::string &source)> 
SourceSaver
 A function that saves a string source given a filename. More...
 
typedef std::function< bool(const
std::string &filename,
std::chrono::system_clock::time_point
*timestamp)> 
SourceModificationTime
 A function that returns the last time the source in filename was modified. More...
 

Public Member Functions

 IncludeComposer (const std::string &filename, const SourceLoader &source_loader, const SourceSaver &source_saver, const SourceModificationTime &source_time, bool insert_line_directives)
 The constructor requires a base filename that represents the top-level file, functions for loading, saving, and seeing if sources have changed, and whether #line directives should be injected in the source when $input directives are processed. More...
 
void SetBasePath (const std::string &path)
 Sets a path that will be prepended to all files (including the top-level filename) loaded by this composer. More...
 
const std::string GetSource () override
 Returns the source string of a shader. More...
 
bool DependsOn (const std::string &dependency) const override
 Returns whether this composer depends on the named dependency, which might be a filename or some other identifier that this recognizes. More...
 
const std::string GetDependencySource (const std::string &dependency) const override
 Returns the source of the passed dependency. More...
 
bool SetDependencySource (const std::string &dependency, const std::string &source) override
 Requests that the composer set the source of the dependency. More...
 
const std::string GetDependencyName (unsigned int id) const override
 Returns the name of a dependency identified by the passed id. More...
 
const std::vector< std::string > GetDependencyNames () const override
 Returns a vector containing all names that this composer depends on, or an empty vector if there are no dependencies. More...
 
const std::vector< std::string > GetChangedDependencies () override
 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

 ~IncludeComposer () override
 The destructor is protected since this is derived from base::Referent. More...
 

Detailed Description

Loads a shader source from a resource that may include other resources using the special directive '$input "name"'.

The function passed to the constructor loads data given a resource name. Optionally injects #line directives in the shader source if it contains any $input directives. The filenames in $input directives should have UNIX style path separators ('/'). Filenames passed to the loader and saver also contain UNIX style path separators ('/'), and can be converted to the local platform style using port::GetCanonicalFilePath().

Definition at line 206 of file shadersourcecomposer.h.

Member Typedef Documentation

typedef std::function<const std::string(const std::string& name)> ion::gfxutils::IncludeComposer::SourceLoader

A function that returns a string source given a filename.

Definition at line 210 of file shadersourcecomposer.h.

typedef std::function<bool(const std::string& filename, std::chrono::system_clock::time_point* timestamp)> ion::gfxutils::IncludeComposer::SourceModificationTime

A function that returns the last time the source in filename was modified.

Definition at line 218 of file shadersourcecomposer.h.

typedef std::function<bool(const std::string& name, const std::string& source)> ion::gfxutils::IncludeComposer::SourceSaver

A function that saves a string source given a filename.

Returns whether the file was successfully saved.

Definition at line 214 of file shadersourcecomposer.h.

Constructor & Destructor Documentation

ion::gfxutils::IncludeComposer::IncludeComposer ( const std::string &  filename,
const SourceLoader source_loader,
const SourceSaver source_saver,
const SourceModificationTime source_time,
bool  insert_line_directives 
)

The constructor requires a base filename that represents the top-level file, functions for loading, saving, and seeing if sources have changed, and whether #line directives should be injected in the source when $input directives are processed.

IncludeComposer definition.

Definition at line 365 of file shadersourcecomposer.cc.

ion::gfxutils::IncludeComposer::~IncludeComposer ( )
overrideprotected

The destructor is protected since this is derived from base::Referent.

Definition at line 372 of file shadersourcecomposer.cc.

Member Function Documentation

bool ion::gfxutils::IncludeComposer::DependsOn ( const std::string &  dependency) const
overridevirtual

Returns whether this composer depends on the named dependency, which might be a filename or some other identifier that this recognizes.

Implements ion::gfxutils::ShaderSourceComposer.

Definition at line 396 of file shadersourcecomposer.cc.

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 std::vector< std::string > ion::gfxutils::IncludeComposer::GetChangedDependencies ( )
overridevirtual

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.

Implements ion::gfxutils::ShaderSourceComposer.

Definition at line 378 of file shadersourcecomposer.cc.

const std::string ion::gfxutils::IncludeComposer::GetDependencyName ( unsigned int  id) const
overridevirtual

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.

Implements ion::gfxutils::ShaderSourceComposer.

Definition at line 400 of file shadersourcecomposer.cc.

const std::vector< std::string > ion::gfxutils::IncludeComposer::GetDependencyNames ( ) const
overridevirtual

Returns a vector containing all names that this composer depends on, or an empty vector if there are no dependencies.

Implements ion::gfxutils::ShaderSourceComposer.

Definition at line 404 of file shadersourcecomposer.cc.

const std::string ion::gfxutils::IncludeComposer::GetDependencySource ( const std::string &  dependency) const
overridevirtual

Returns the source of the passed dependency.

Implements ion::gfxutils::ShaderSourceComposer.

Definition at line 386 of file shadersourcecomposer.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().

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

const std::string ion::gfxutils::IncludeComposer::GetSource ( )
overridevirtual

Returns the source string of a shader.

Implements ion::gfxutils::ShaderSourceComposer.

Definition at line 382 of file shadersourcecomposer.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::gfxutils::IncludeComposer::SetBasePath ( const std::string &  path)

Sets a path that will be prepended to all files (including the top-level filename) loaded by this composer.

Definition at line 374 of file shadersourcecomposer.cc.

bool ion::gfxutils::IncludeComposer::SetDependencySource ( const std::string &  dependency,
const std::string &  source 
)
overridevirtual

Requests that the composer set the source of the dependency.

Returns whether the composer actually changes the source.

Implements ion::gfxutils::ShaderSourceComposer.

Definition at line 391 of file shadersourcecomposer.cc.


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