MaterialX 1.39.5
Loading...
Searching...
No Matches
OslNetworkShaderGenerator Class Reference

OSL (Open Shading Language) Network shader generator. More...

#include <OslNetworkShaderGenerator.h>

Inheritance diagram for OslNetworkShaderGenerator:
OslShaderGenerator ShaderGenerator

Public Member Functions

 OslNetworkShaderGenerator (TypeSystemPtr typeSystem)
 Constructor.
 
ShaderNodeImplPtr createShaderNodeImplForImplementation (const Implementation &implElement) const override
 Create the shader node implementation for an Implementation implementation.
 
const string & getTarget () const override
 Return a unique identifier for the target this generator is for.
 
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.
 
- Public Member Functions inherited from OslShaderGenerator
 OslShaderGenerator (TypeSystemPtr typeSystem)
 Constructor.
 
const string & getTarget () const override
 Return a unique identifier for the target this generator is for.
 
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.
 
void emitAllDependentFunctionCalls (const ShaderNode &node, GenContext &context, ShaderStage &stage) const
 Add all function calls for a node, and all upstream nodes.
 
void registerShaderMetadata (const DocumentPtr &doc, GenContext &context) const override
 Register metadata that should be exported to the generated shaders.
 
- Public Member Functions inherited from ShaderGenerator
virtual ~ShaderGenerator ()
 Destructor.
 
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.
 
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 emitFunctionDefinitionParameter (const ShaderPort *shaderPort, bool isOutput, GenContext &context, ShaderStage &stage) const
 
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.
 
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.
 
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.
 
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.
 
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.
 
virtual void emitVariableDeclaration (const ShaderPort *variable, const string &qualifier, GenContext &context, ShaderStage &stage, bool assignValue=true) const
 Emit definition of a single shader variable.
 
virtual bool nodeNeedsClosureData (const ShaderNode &) const
 Return true if the node needs the additional ClosureData added.
 
virtual void emitClosureDataArg (const ShaderNode &, GenContext &, ShaderStage &) const
 Emit the closure data argument if required Note this is an affordance for HwShaderGenerator.
 
virtual void emitClosureDataParameter (const ShaderNode &, GenContext &, ShaderStage &) const
 Emit the closure data parameter if required.
 
virtual string getUpstreamResult (const ShaderInput *input, GenContext &context) const
 Return the result of an upstream connection or value for an input.
 
const SyntaxgetSyntax () 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 createShaderNodeImplForNodeGraph (const NodeGraph &nodegraph) const
 Create the shader node implementation for a NodeGraph implementation.
 
virtual ShaderNodeImplPtr getImplementation (const NodeDef &nodedef, GenContext &context) const
 Return a registered shader node implementation for the given nodedef.
 
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.
 
TypeSystemPtr getTypeSystem () const
 Returns the type system.
 
const StringMapgetTokenSubstitutions () const
 Return the map of token substitutions used by the generator.
 
void registerRefactor (ShaderGraphRefactorPtr refactor)
 Register a shader graph refactoring pass.
 
const vector< ShaderGraphRefactorPtr > & getRefactors () const
 Return the registered graph refactoring passes.
 
virtual void applyDefaultOptions (GenOptions &options) const
 Apply the default GenOptions for this generator's target.
 
virtual void registerTypeDefs (const DocumentPtr &doc)
 Register type definitions from the document.
 
virtual const string & getLightDataTypevarString () const
 

Static Public Member Functions

static ShaderGeneratorPtr create (TypeSystemPtr typeSystem=nullptr)
 Creator function.
 
- Static Public Member Functions inherited from OslShaderGenerator
static ShaderGeneratorPtr create (TypeSystemPtr typeSystem=nullptr)
 Creator function.
 

Static Public Attributes

static const string TARGET
 Unique identifier for this generator target.
 
- Static Public Attributes inherited from OslShaderGenerator
static const string TARGET
 Unique identifier for this generator target.
 

Protected Member Functions

ShaderPtr createShader (const string &name, ElementPtr element, GenContext &context) const override
 Create and initialize a new OSL shader for shader generation.
 
- Protected Member Functions inherited from OslShaderGenerator
virtual void emitLibraryIncludes (ShaderStage &stage, GenContext &context) const
 Emit include headers needed by the generated shader code.
 
virtual void emitShaderInputs (const VariableBlock &inputs, ShaderStage &stage) const
 Emit a block of shader inputs.
 
virtual void emitShaderOutputs (const VariableBlock &inputs, ShaderStage &stage) const
 Emit a block of shader outputs.
 
virtual void emitMetadata (const ShaderPort *port, ShaderStage &stage) const
 Emit metadata for a shader parameter.
 
void addSetCiTerminalNode (ShaderGraph &graph, ConstDocumentPtr document, GenContext &context) const
 
- Protected Member Functions inherited from ShaderGenerator
 ShaderGenerator (TypeSystemPtr typeSystem, 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.
 

Additional Inherited Members

- Protected Attributes inherited from ShaderGenerator
TypeSystemPtr _typeSystem
 
SyntaxPtr _syntax
 
Factory< ShaderNodeImpl_implFactory
 
ColorManagementSystemPtr _colorManagementSystem
 
UnitSystemPtr _unitSystem
 
StringMap _tokenSubstitutions
 
vector< ShaderGraphRefactorPtr_refactors
 
friend ShaderGraph
 
- Static Protected Attributes inherited from ShaderGenerator
static const string T_FILE_TRANSFORM_UV
 
static const string LIGHTDATA_TYPEVAR_STRING
 

Detailed Description

OSL (Open Shading Language) Network shader generator.

Generates a command string that OSL can use to build a ShaderGroup.

Member Function Documentation

◆ create()

static ShaderGeneratorPtr create ( TypeSystemPtr typeSystem = nullptr)
inlinestatic

Creator function.

If a TypeSystem is not provided it will be created internally. Optionally pass in an externally created TypeSystem here, if you want to keep type descriptions alive after the lifetime of the shader generator.

◆ createShader()

ShaderPtr createShader ( const string & name,
ElementPtr element,
GenContext & context ) const
overrideprotectedvirtual

Create and initialize a new OSL shader for shader generation.

Reimplemented from OslShaderGenerator.

◆ createShaderNodeImplForImplementation()

ShaderNodeImplPtr createShaderNodeImplForImplementation ( const Implementation & implementation) const
overridevirtual

Create the shader node implementation for an Implementation implementation.

Reimplemented from ShaderGenerator.

◆ generate()

ShaderPtr generate ( const string & name,
ElementPtr element,
GenContext & context ) const
overridevirtual

Generate a shader starting from the given element, translating the element and all dependencies upstream into shader code.

Reimplemented from ShaderGenerator.

◆ getTarget()

const string & getTarget ( ) const
inlineoverridevirtual

Return a unique identifier for the target this generator is for.

Reimplemented from ShaderGenerator.


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