MaterialX 1.39.1
|
Base class for GLSL (OpenGL Shading Language) code generation. More...
#include <GlslShaderGenerator.h>
Public Member Functions | |
ShaderPtr | generate (const string &name, ElementPtr element, GenContext &context) const override |
Generate a shader starting from the given element, translating the element and all dependencies upstream into shader code. More... | |
const string & | getTarget () const override |
Return a unique identifier for the target this generator is for. More... | |
virtual const string & | getVersion () const |
Return the version string for the GLSL version this generator is for. More... | |
void | emitVariableDeclaration (const ShaderPort *variable, const string &qualifier, GenContext &context, ShaderStage &stage, bool assignValue=true) const override |
Emit a shader variable. More... | |
ShaderNodeImplPtr | getImplementation (const NodeDef &nodedef, GenContext &context) const override |
Return a registered shader node implementation given an implementation element. More... | |
string | getVertexDataPrefix (const VariableBlock &vertexData) const override |
Determine the prefix of vertex data variables. More... | |
Public Member Functions inherited from HwShaderGenerator | |
void | emitFunctionCall (const ShaderNode &node, GenContext &context, ShaderStage &stage) const override |
Add the function call for a single node. More... | |
virtual void | addStageLightingUniforms (GenContext &context, ShaderStage &stage) const |
Emit code for active light count definitions and uniforms. | |
void | getClosureContexts (const ShaderNode &node, vector< ClosureContext * > &cct) const override |
Return the closure contexts defined for the given node. More... | |
virtual string | getVertexDataPrefix (const VariableBlock &vertexData) const =0 |
Determine the prefix of vertex data variables. More... | |
Public Member Functions inherited from ShaderGenerator | |
virtual | ~ShaderGenerator () |
Destructor. | |
virtual const string & | getTarget () const |
Return the name of the target this generator is for. More... | |
virtual ShaderPtr | generate (const string &, ElementPtr, GenContext &) const |
Generate a shader starting from the given element, translating the element and all dependencies upstream into shader code. More... | |
virtual void | emitScopeBegin (ShaderStage &stage, Syntax::Punctuation punc=Syntax::CURLY_BRACKETS) const |
Start a new scope using the given bracket type. | |
virtual void | emitScopeEnd (ShaderStage &stage, bool semicolon=false, bool newline=true) const |
End the current scope. | |
virtual void | emitLineBegin (ShaderStage &stage) const |
Start a new line. | |
virtual void | emitLineEnd (ShaderStage &stage, bool semicolon=true) const |
End the current line. | |
virtual void | emitLineBreak (ShaderStage &stage) const |
Add a line break. | |
virtual void | emitString (const string &str, ShaderStage &stage) const |
Add a string. | |
virtual void | emitLine (const string &str, ShaderStage &stage, bool semicolon=true) const |
Add a single line of code, optionally appending a semicolon. | |
virtual void | emitComment (const string &str, ShaderStage &stage) const |
Add a single line code comment. | |
virtual void | emitBlock (const string &str, const FilePath &sourceFilename, GenContext &context, ShaderStage &stage) const |
Add a block of code. | |
virtual void | emitLibraryInclude (const FilePath &filename, GenContext &context, ShaderStage &stage) const |
Add the contents of a standard library include file if not already present. More... | |
template<typename T > | |
void | emitValue (const T &value, ShaderStage &stage) const |
Add a value. | |
virtual void | emitFunctionDefinition (const ShaderNode &node, GenContext &context, ShaderStage &stage) const |
Add the function definition for a single node. | |
virtual void | emitFunctionDefinitions (const ShaderGraph &graph, GenContext &context, ShaderStage &stage) const |
Add all function definitions for a graph. | |
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 |
Add all function calls for a graph. More... | |
virtual void | emitDependentFunctionCalls (const ShaderNode &node, GenContext &context, ShaderStage &stage, uint32_t classification=0u) const |
Add function calls for nodes connected directly upstream from the given node. More... | |
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. | |
virtual void | emitTypeDefinitions (GenContext &context, ShaderStage &stage) const |
Emit type definitions for all data types that needs it. | |
virtual void | emitInput (const ShaderInput *input, GenContext &context, ShaderStage &stage) const |
Emit the connected variable name for an input, or constant value if the port is not connected. | |
virtual void | emitOutput (const ShaderOutput *output, bool includeType, bool assignValue, GenContext &context, ShaderStage &stage) const |
Emit the output variable name for an output, optionally including it's type and default value assignment. | |
virtual void | emitVariableDeclarations (const VariableBlock &block, const string &qualifier, const string &separator, GenContext &context, ShaderStage &stage, bool assignValue=true) const |
Emit definitions for all shader variables in a block. More... | |
virtual void | emitVariableDeclaration (const ShaderPort *variable, const string &qualifier, GenContext &context, ShaderStage &stage, bool assignValue=true) const |
Emit definition of a single shader variable. More... | |
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. | |
void | registerImplementation (const string &name, CreatorFunction< ShaderNodeImpl > creator) |
Register a shader node implementation for a given implementation element name. | |
void | registerImplementation (const StringVec &nameVec, CreatorFunction< ShaderNodeImpl > creator) |
Register a shader node implementation for a given set of implementation element names. | |
bool | implementationRegistered (const string &name) const |
Determine if a shader node implementation has been registered for a given implementation element name. | |
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. | |
ColorManagementSystemPtr | getColorManagementSystem () const |
Returns the color management system. | |
void | setUnitSystem (UnitSystemPtr unitSystem) |
Sets the unit system. | |
UnitSystemPtr | getUnitSystem () const |
Returns the unit system. | |
const StringMap & | getTokenSubstitutions () const |
Return the map of token substitutions used by the generator. | |
virtual void | registerShaderMetadata (const DocumentPtr &doc, GenContext &context) const |
Register metadata that should be exported to the generated shaders. More... | |
Static Public Member Functions | |
static ShaderGeneratorPtr | create () |
Static Public Member Functions inherited from HwShaderGenerator | |
static void | bindLightShader (const NodeDef &nodeDef, unsigned int lightTypeId, GenContext &context) |
Bind a light shader to a light type id, for usage in surface shaders created by the generator. More... | |
static void | unbindLightShader (unsigned int lightTypeId, GenContext &context) |
Unbind a light shader previously bound to the given light type id. | |
static void | unbindLightShaders (GenContext &context) |
Unbind all light shaders previously bound. | |
Static Public Attributes | |
static const string | TARGET |
Unique identifier for this generator target. | |
static const string | VERSION |
Version string for the generator target. | |
Static Public Attributes inherited from HwShaderGenerator | |
static const string | CLOSURE_CONTEXT_SUFFIX_REFLECTION |
String constants for closure context suffixes. | |
static const string | CLOSURE_CONTEXT_SUFFIX_TRANSMISSION |
static const string | CLOSURE_CONTEXT_SUFFIX_INDIRECT |
Protected Member Functions | |
virtual void | emitVertexStage (const ShaderGraph &graph, GenContext &context, ShaderStage &stage) const |
virtual void | emitPixelStage (const ShaderGraph &graph, GenContext &context, ShaderStage &stage) const |
virtual void | emitDirectives (GenContext &context, ShaderStage &stage) const |
virtual void | emitConstants (GenContext &context, ShaderStage &stage) const |
virtual void | emitUniforms (GenContext &context, ShaderStage &stage) const |
virtual void | emitLightData (GenContext &context, ShaderStage &stage) const |
virtual void | emitInputs (GenContext &context, ShaderStage &stage) const |
virtual void | emitOutputs (GenContext &context, ShaderStage &stage) const |
virtual HwResourceBindingContextPtr | getResourceBindingContext (GenContext &context) const |
virtual bool | requiresLighting (const ShaderGraph &graph) const |
Logic to indicate whether code to support direct lighting should be emitted. More... | |
virtual void | emitSpecularEnvironment (GenContext &context, ShaderStage &stage) const |
Emit specular environment lookup code. | |
virtual void | emitTransmissionRender (GenContext &context, ShaderStage &stage) const |
Emit transmission rendering code. | |
virtual void | emitLightFunctionDefinitions (const ShaderGraph &graph, GenContext &context, ShaderStage &stage) const |
Emit function definitions for lighting code. | |
Protected Member Functions inherited from HwShaderGenerator | |
HwShaderGenerator (SyntaxPtr syntax) | |
virtual ShaderPtr | createShader (const string &name, ElementPtr element, GenContext &context) const |
Create and initialize a new HW shader for shader generation. | |
Protected Member Functions inherited from ShaderGenerator | |
ShaderGenerator (SyntaxPtr syntax) | |
Protected constructor. | |
virtual ShaderStagePtr | createStage (const string &name, Shader &shader) const |
Create a new stage in a shader. | |
void | setFunctionName (const string &functionName, ShaderStage &stage) const |
Set function name for a stage. | |
void | replaceTokens (const StringMap &substitutions, ShaderStage &stage) const |
Replace tokens with identifiers according to the given substitutions map. | |
void | createVariables (ShaderGraphPtr graph, GenContext &context, Shader &shader) const |
Create shader variables (e.g. More... | |
Static Protected Member Functions | |
static void | toVec4 (TypeDesc type, string &variable) |
static void | toVec4 (const TypeDesc *type, string &variable) |
Protected Attributes | |
vector< ShaderNodePtr > | _lightSamplingNodes |
Nodes used internally for light sampling. | |
Protected Attributes inherited from HwShaderGenerator | |
ClosureContext | _defDefault |
Closure contexts for defining closure functions. | |
ClosureContext | _defReflection |
ClosureContext | _defTransmission |
ClosureContext | _defIndirect |
ClosureContext | _defEmission |
Protected Attributes inherited from ShaderGenerator | |
SyntaxPtr | _syntax |
Factory< ShaderNodeImpl > | _implFactory |
ColorManagementSystemPtr | _colorManagementSystem |
UnitSystemPtr | _unitSystem |
StringMap | _tokenSubstitutions |
friend | ShaderGraph |
Additional Inherited Members | |
Public Types inherited from HwShaderGenerator | |
enum | ClosureContextType { DEFAULT , REFLECTION , TRANSMISSION , INDIRECT , EMISSION } |
Types of closure contexts for HW. | |
Static Protected Attributes inherited from ShaderGenerator | |
static const string | T_FILE_TRANSFORM_UV |
Base class for GLSL (OpenGL Shading Language) code generation.
A generator for a specific GLSL target should be derived from this class.
|
overridevirtual |
Emit a shader variable.
Reimplemented from ShaderGenerator.
|
overridevirtual |
Generate a shader starting from the given element, translating the element and all dependencies upstream into shader code.
Reimplemented from ShaderGenerator.
|
overridevirtual |
Return a registered shader node implementation given an implementation element.
The element must be an Implementation or a NodeGraph acting as implementation.
Reimplemented from ShaderGenerator.
|
inlineoverridevirtual |
Return a unique identifier for the target this generator is for.
Reimplemented from ShaderGenerator.
Reimplemented in VkShaderGenerator.
|
inlinevirtual |
Return the version string for the GLSL version this generator is for.
Reimplemented in EsslShaderGenerator, and VkShaderGenerator.
|
overridevirtual |
Determine the prefix of vertex data variables.
Implements HwShaderGenerator.
Reimplemented in VkShaderGenerator.
|
protectedvirtual |
Logic to indicate whether code to support direct lighting should be emitted.
By default if the graph is classified as a shader, or BSDF node then lighting is assumed to be required. Derived classes can override this logic.