HDK
|
#include <ShaderGenerator.h>
Public Member Functions | |
virtual | ~ShaderGenerator () |
Destructor. More... | |
virtual const string & | getTarget () const |
Return the name of the target this generator is for. More... | |
virtual ShaderPtr | generate (const string &, ElementPtr, GenContext &) const |
virtual void | emitScopeBegin (ShaderStage &stage, Syntax::Punctuation punc=Syntax::CURLY_BRACKETS) const |
Start a new scope using the given bracket type. More... | |
virtual void | emitScopeEnd (ShaderStage &stage, bool semicolon=false, bool newline=true) const |
End the current scope. More... | |
virtual void | emitLineBegin (ShaderStage &stage) const |
Start a new line. More... | |
virtual void | emitLineEnd (ShaderStage &stage, bool semicolon=true) const |
End the current line. More... | |
virtual void | emitLineBreak (ShaderStage &stage) const |
Add a line break. More... | |
virtual void | emitString (const string &str, ShaderStage &stage) const |
Add a string. More... | |
virtual void | emitLine (const string &str, ShaderStage &stage, bool semicolon=true) const |
Add a single line of code, optionally appending a semicolon. More... | |
virtual void | emitComment (const string &str, ShaderStage &stage) const |
Add a single line code comment. More... | |
virtual void | emitBlock (const string &str, const FilePath &sourceFilename, GenContext &context, ShaderStage &stage) const |
Add a block of code. More... | |
virtual void | emitLibraryInclude (const FilePath &filename, GenContext &context, ShaderStage &stage) const |
template<typename T > | |
void | emitValue (const T &value, ShaderStage &stage) const |
Add a value. More... | |
virtual void | emitFunctionDefinition (const ShaderNode &node, GenContext &context, ShaderStage &stage) const |
Add the function definition for a single node. More... | |
virtual void | emitFunctionDefinitions (const ShaderGraph &graph, GenContext &context, ShaderStage &stage) const |
Add all function definitions for a graph. More... | |
virtual void | emitFunctionCall (const ShaderNode &node, GenContext &context, ShaderStage &stage) const |
Add the function call for a single node. More... | |
virtual void | emitFunctionCall (const ShaderNode &node, GenContext &context, ShaderStage &stage, bool checkScope) const |
virtual void | emitFunctionCalls (const ShaderGraph &graph, GenContext &context, ShaderStage &stage, uint32_t classification=0u) const |
virtual void | emitDependentFunctionCalls (const ShaderNode &node, GenContext &context, ShaderStage &stage, uint32_t classification=0u) const |
virtual void | emitFunctionBodyBegin (const ShaderNode &node, GenContext &context, ShaderStage &stage, Syntax::Punctuation punc=Syntax::CURLY_BRACKETS) const |
Emit code for starting a new function body. More... | |
virtual void | emitFunctionBodyEnd (const ShaderNode &node, GenContext &context, ShaderStage &stage) const |
Emit code for ending a function body. More... | |
virtual void | emitTypeDefinitions (GenContext &context, ShaderStage &stage) const |
Emit type definitions for all data types that needs it. More... | |
virtual void | emitInput (const ShaderInput *input, GenContext &context, ShaderStage &stage) const |
virtual void | emitOutput (const ShaderOutput *output, bool includeType, bool assignValue, GenContext &context, ShaderStage &stage) const |
virtual void | emitVariableDeclarations (const VariableBlock &block, const string &qualifier, const string &separator, GenContext &context, ShaderStage &stage, bool assignValue=true) const |
virtual void | emitVariableDeclaration (const ShaderPort *variable, const string &qualifier, GenContext &context, ShaderStage &stage, bool assignValue=true) const |
virtual void | getClosureContexts (const ShaderNode &node, vector< ClosureContext * > &cct) const |
Return the closure contexts defined for the given node. More... | |
virtual string | getUpstreamResult (const ShaderInput *input, GenContext &context) const |
Return the result of an upstream connection or value for an input. More... | |
const Syntax & | getSyntax () const |
Return the syntax object for the language used by the code generator. More... | |
void | registerImplementation (const string &name, CreatorFunction< ShaderNodeImpl > creator) |
Register a shader node implementation for a given implementation element name. More... | |
void | registerImplementation (const StringVec &nameVec, CreatorFunction< ShaderNodeImpl > creator) |
Register a shader node implementation for a given set of implementation element names. More... | |
bool | implementationRegistered (const string &name) const |
Determine if a shader node implementation has been registered for a given implementation element name. More... | |
virtual ShaderNodeImplPtr | getImplementation (const NodeDef &nodedef, GenContext &context) const |
Return a registered shader node implementation for the given nodedef. More... | |
void | setColorManagementSystem (ColorManagementSystemPtr colorManagementSystem) |
Sets the color management system. More... | |
ColorManagementSystemPtr | getColorManagementSystem () const |
Returns the color management system. More... | |
void | setUnitSystem (UnitSystemPtr unitSystem) |
Sets the unit system. More... | |
UnitSystemPtr | getUnitSystem () const |
Returns the unit system. More... | |
const StringMap & | getTokenSubstitutions () const |
Return the map of token substitutions used by the generator. More... | |
virtual void | registerShaderMetadata (const DocumentPtr &doc, GenContext &context) const |
Protected Member Functions | |
ShaderGenerator (SyntaxPtr syntax) | |
Protected constructor. More... | |
virtual ShaderStagePtr | createStage (const string &name, Shader &shader) const |
Create a new stage in a shader. More... | |
void | setFunctionName (const string &functionName, ShaderStage &stage) const |
Set function name for a stage. More... | |
void | replaceTokens (const StringMap &substitutions, ShaderStage &stage) const |
Replace tokens with identifiers according to the given substitutions map. More... | |
void | createVariables (ShaderGraphPtr graph, GenContext &context, Shader &shader) const |
Protected Attributes | |
SyntaxPtr | _syntax |
Factory< ShaderNodeImpl > | _implFactory |
ColorManagementSystemPtr | _colorManagementSystem |
UnitSystemPtr | _unitSystem |
StringMap | _tokenSubstitutions |
friend | ShaderGraph |
Static Protected Attributes | |
static const string | T_FILE_TRANSFORM_UV |
Base class for shader generators All third-party shader generators should derive from this class. Derived classes should use DECLARE_SHADER_GENERATOR / DEFINE_SHADER_GENERATOR in their declaration / definition, and register with the Registry class.
Definition at line 30 of file ShaderGenerator.h.
|
inlinevirtual |
Destructor.
Definition at line 34 of file ShaderGenerator.h.
|
protected |
Protected constructor.
|
protectedvirtual |
Create a new stage in a shader.
|
protected |
Create shader variables (e.g. uniforms, inputs and outputs) for nodes that require input data from the application.
|
virtual |
Add a block of code.
|
virtual |
Add a single line code comment.
|
virtual |
Add function calls for nodes connected directly upstream from the given node. If a classification mask is given only functions for nodes matching this classification will be emitted.
|
virtual |
Emit code for starting a new function body.
Reimplemented in OslShaderGenerator.
|
virtual |
Emit code for ending a function body.
|
virtual |
Add the function call for a single node.
Reimplemented in HwShaderGenerator.
|
virtual |
|
virtual |
Add all function calls for a graph. If a classification mask is given only functions for nodes matching this classification will be emitted.
Reimplemented in OslShaderGenerator.
|
virtual |
Add the function definition for a single node.
|
virtual |
Add all function definitions for a graph.
|
virtual |
Emit the connected variable name for an input, or constant value if the port is not connected
|
virtual |
Add the contents of a standard library include file if not already present. The library file prefix of the given context, if any, will be prepended to the given filename.
|
virtual |
Add a single line of code, optionally appending a semicolon.
|
virtual |
Start a new line.
|
virtual |
Add a line break.
|
virtual |
End the current line.
|
virtual |
Emit the output variable name for an output, optionally including it's type and default value assignment.
|
virtual |
Start a new scope using the given bracket type.
|
virtual |
End the current scope.
|
virtual |
Add a string.
|
virtual |
Emit type definitions for all data types that needs it.
|
inline |
Add a value.
Definition at line 83 of file ShaderGenerator.h.
|
virtual |
Emit definition of a single shader variable.
variable | Shader port representing the variable. |
qualifier | Optional qualifier to add before the variable declaration. |
context | Context for generation. |
stage | The stage to emit code into. |
assignValue | If true the variable is initialized with its value. |
Reimplemented in MslShaderGenerator, and GlslShaderGenerator.
|
virtual |
Emit definitions for all shader variables in a block.
block | Block to emit. |
qualifier | Optional qualifier to add before the variable declaration. |
separator | Separator to use between the declarations. |
context | Context for generation. |
stage | The stage to emit code into. |
assignValue | If true the variables are initialized with their value. |
|
inlinevirtual |
Generate a shader starting from the given element, translating the element and all dependencies upstream into shader code.
Reimplemented in MdlShaderGenerator, OslShaderGenerator, MslShaderGenerator, and GlslShaderGenerator.
Definition at line 44 of file ShaderGenerator.h.
|
virtual |
Return the closure contexts defined for the given node.
Reimplemented in HwShaderGenerator.
|
inline |
Returns the color management system.
Definition at line 171 of file ShaderGenerator.h.
|
virtual |
Return a registered shader node implementation for the given nodedef.
Reimplemented in MdlShaderGenerator, MslShaderGenerator, and GlslShaderGenerator.
|
inline |
Return the syntax object for the language used by the code generator.
Definition at line 150 of file ShaderGenerator.h.
|
inlinevirtual |
Return the name of the target this generator is for.
Reimplemented in MdlShaderGenerator, MslShaderGenerator, GlslShaderGenerator, OslShaderGenerator, VkShaderGenerator, and EsslShaderGenerator.
Definition at line 37 of file ShaderGenerator.h.
|
inline |
Return the map of token substitutions used by the generator.
Definition at line 189 of file ShaderGenerator.h.
|
inline |
Returns the unit system.
Definition at line 183 of file ShaderGenerator.h.
|
virtual |
Return the result of an upstream connection or value for an input.
Reimplemented in MdlShaderGenerator.
bool ShaderGenerator::implementationRegistered | ( | const string & | name | ) | const |
Determine if a shader node implementation has been registered for a given implementation element name.
void ShaderGenerator::registerImplementation | ( | const string & | name, |
CreatorFunction< ShaderNodeImpl > | creator | ||
) |
Register a shader node implementation for a given implementation element name.
void ShaderGenerator::registerImplementation | ( | const StringVec & | nameVec, |
CreatorFunction< ShaderNodeImpl > | creator | ||
) |
Register a shader node implementation for a given set of implementation element names.
|
virtual |
Register metadata that should be exported to the generated shaders. Supported metadata includes standard UI attributes like "uiname", "uifolder", "uimin", "uimax", etc. But it is also extendable by defining custom attributes using AttributeDefs. Any AttributeDef in the given document with exportable="true" will be exported as shader metadata when found on nodes during shader generation. Derived shader generators may override this method to change the registration. Applications must explicitly call this method before shader generation to enable export of metadata.
Reimplemented in OslShaderGenerator.
|
protected |
Replace tokens with identifiers according to the given substitutions map.
|
inline |
Sets the color management system.
Definition at line 165 of file ShaderGenerator.h.
|
inlineprotected |
Set function name for a stage.
Definition at line 213 of file ShaderGenerator.h.
|
inline |
Sets the unit system.
Definition at line 177 of file ShaderGenerator.h.
|
protected |
Definition at line 230 of file ShaderGenerator.h.
|
protected |
Definition at line 229 of file ShaderGenerator.h.
|
protected |
Definition at line 228 of file ShaderGenerator.h.
|
mutableprotected |
Definition at line 232 of file ShaderGenerator.h.
|
protected |
Definition at line 231 of file ShaderGenerator.h.
|
protected |
Definition at line 234 of file ShaderGenerator.h.
|
staticprotected |
Definition at line 226 of file ShaderGenerator.h.