6#ifndef MATERIALX_GENCONTEXT_H
7#define MATERIALX_GENCONTEXT_H
20MATERIALX_NAMESPACE_BEGIN
58 _sourceCodeSearchPath.append(path);
65 _sourceCodeSearchPath.append(path);
84 _reservedWords.insert(names.begin(), names.end());
91 return _reservedWords;
102 void getNodeImplementationNames(
StringSet& names);
105 void clearNodeImplementations();
110 _closureContexts.push_back(cct);
116 if (_closureContexts.size())
118 _closureContexts.pop_back();
125 return _closureContexts.size() ? _closureContexts.back() :
nullptr;
131 _parentNodes.push_back(node);
137 _parentNodes.pop_back();
150 auto it = _userData.find(name);
151 if (it != _userData.end())
153 it->second.push_back(data);
157 _userData[name] = { data };
164 auto it = _userData.find(name);
165 if (it != _userData.end())
167 it->second.pop_back();
172 void clearUserData();
179 auto it = _userData.find(name);
180 return it != _userData.end() && !it->second.empty() ? it->second.back()->asA<T>() :
nullptr;
186 void addInputSuffix(
const ShaderInput* input,
const string& suffix);
195 void getInputSuffix(
const ShaderInput* input,
string& suffix)
const;
200 void addOutputSuffix(
const ShaderOutput* output,
const string& suffix);
209 void getOutputSuffix(
const ShaderOutput* output,
string& suffix)
const;
214 _applicationVariableHandler = handler;
220 return _applicationVariableHandler;
231 std::unordered_map<string, ShaderNodeImplPtr> _nodeImpls;
232 std::unordered_map<string, vector<GenUserDataPtr>> _userData;
233 std::unordered_map<const ShaderInput*, string> _inputSuffix;
234 std::unordered_map<const ShaderOutput*, string> _outputSuffix;
236 vector<ClosureContext*> _closureContexts;
237 vector<ConstNodePtr> _parentNodes;
253 using Argument = std::pair<const TypeDesc*, string>;
270 _arguments[nodeType].push_back(arg);
276 auto it = _arguments.find(nodeType);
277 return it != _arguments.end() ? it->second : EMPTY_ARGUMENTS;
283 _suffix[nodeType] = suffix;
289 auto it = _suffix.find(nodeType);
290 return it != _suffix.end() ? it->second : EMPTY_STRING;
298 _params[closure] = params;
302 _params.erase(closure);
310 auto it = _params.find(closure);
311 return it != _params.end() ? it->second :
nullptr;
316 std::unordered_map<const TypeDesc*, Arguments> _arguments;
317 std::unordered_map<const TypeDesc*, string> _suffix;
318 std::unordered_map<const ShaderNode*, const ClosureParams*> _params;
320 static const Arguments EMPTY_ARGUMENTS;
358MATERIALX_NAMESPACE_END
Cross-platform support for file and search paths.
std::function< void(ShaderNode *, GenContext &)> ApplicationVariableHandler
A standard function to allow for handling of application variables for a given node.
Definition: GenContext.h:25
Shader generation options class.
User data base class for shader generation.
std::shared_ptr< GenUserData > GenUserDataPtr
Shared pointer to a GenUserData.
Definition: GenUserData.h:19
std::set< string > StringSet
A set of strings.
Definition: Library.h:61
Macros for declaring imported and exported symbols.
shared_ptr< ShaderNodeImpl > ShaderNodeImplPtr
Shared pointer to a ShaderNodeImpl.
Definition: Library.h:40
shared_ptr< ShaderGenerator > ShaderGeneratorPtr
Shared pointer to a ShaderGenerator.
Definition: Library.h:38
shared_ptr< const Node > ConstNodePtr
A shared pointer to a const Node.
Definition: Node.h:26
Classes for nodes created during shader generation.
Class representing a context for closure evaluation.
Definition: GenContext.h:248
void setClosureParams(const ShaderNode *closure, const ClosureParams *params)
Set extra parameters to use for evaluating a closure.
Definition: GenContext.h:294
const string & getSuffix(const TypeDesc *nodeType) const
Return the function name suffix to be used for the given node in this context.
Definition: GenContext.h:287
vector< Argument > Arguments
An array of arguments.
Definition: GenContext.h:255
ClosureContext(int type=0)
Constructor.
Definition: GenContext.h:261
void setSuffix(const TypeDesc *nodeType, const string &suffix)
For the given node type set a function name suffix to be used for the function in this context.
Definition: GenContext.h:281
void addArgument(const TypeDesc *nodeType, const Argument &arg)
For the given node type add an extra argument to be used for the function in this context.
Definition: GenContext.h:268
std::pair< const TypeDesc *, string > Argument
An extra argument for closure functions.
Definition: GenContext.h:253
std::unordered_map< string, const ShaderInput * > ClosureParams
Extra parameters for closure evaluation.
Definition: GenContext.h:258
const Arguments & getArguments(const TypeDesc *nodeType) const
Return a list of extra argument to be used for the given node in this context.
Definition: GenContext.h:274
int getType() const
Return the identifier for this context.
Definition: GenContext.h:265
const ClosureParams * getClosureParams(const ShaderNode *closure) const
Return extra parameters to use for evaluating a closure.
Definition: GenContext.h:308
A generic file path, supporting both syntactic and file system operations.
Definition: File.h:27
bool isEmpty() const
Return true if the given path is empty.
Definition: File.h:92
FilePath getNormalized() const
Return a normalized version of the given path, collapsing current path and parent path references so ...
Definition: File.cpp:136
A sequence of file paths, which may be queried to find the first instance of a given filename on the ...
Definition: File.h:219
void prepend(const FilePath &path)
Prepend the given path to the sequence.
Definition: File.h:274
FilePath find(const FilePath &filename) const
Given an input filename, iterate through each path in this sequence, returning the first combined pat...
Definition: File.h:313
A context class for shader generation.
Definition: GenContext.h:31
void registerSourceCodeSearchPath(const FilePath &path)
Register a user search path for finding source code during code generation.
Definition: GenContext.h:56
void popParentNode()
Pop the current parent node from the stack.
Definition: GenContext.h:135
GenOptions & getOptions()
Return shader generation options.
Definition: GenContext.h:43
const vector< ConstNodePtr > & getParentNodes()
Return the current stack of parent nodes.
Definition: GenContext.h:141
void setApplicationVariableHandler(ApplicationVariableHandler handler)
Set handler for application variables.
Definition: GenContext.h:212
ShaderGenerator & getShaderGenerator()
Return shader generatior.
Definition: GenContext.h:37
void popUserData(const string &name)
Remove user data from the context.
Definition: GenContext.h:162
void pushClosureContext(ClosureContext *cct)
Push a new closure context to use for closure evaluation.
Definition: GenContext.h:108
void popClosureContext()
Pop the current closure context.
Definition: GenContext.h:114
void addReservedWords(const StringSet &names)
Add reserved words that should not be used as identifiers during code generation.
Definition: GenContext.h:82
void pushUserData(const string &name, GenUserDataPtr data)
Add user data to the context to make it available during shader generator.
Definition: GenContext.h:148
void registerSourceCodeSearchPath(const FileSearchPath &path)
Register a user search path for finding source code during code generation.
Definition: GenContext.h:63
FilePath resolveSourceFile(const FilePath &filename, const FilePath &localPath) const
Resolve a source code filename, first checking the given local path then checking any file paths regi...
Definition: GenContext.h:70
ApplicationVariableHandler getApplicationVariableHandler() const
Get handler for application variables.
Definition: GenContext.h:218
void pushParentNode(ConstNodePtr node)
Push a parent node onto the stack.
Definition: GenContext.h:129
ClosureContext * getClosureContext()
Return the current closure context.
Definition: GenContext.h:123
const GenOptions & getOptions() const
Return shader generation options.
Definition: GenContext.h:49
std::shared_ptr< T > getUserData(const string &name)
Return user data with given name, or nullptr if no data is found.
Definition: GenContext.h:177
const StringSet & getReservedWords() const
Return the set of reserved words that should not be used as identifiers during code generation.
Definition: GenContext.h:89
Class holding options to configure shader generation.
Definition: GenOptions.h:76
A RAII class for setting extra parameters for closure evaluation, stored in the closure context.
Definition: GenContext.h:326
A RAII class for overriding port variable names.
Definition: GenContext.h:345
Base class for shader generators All third-party shader generators should derive from this class.
Definition: ShaderGenerator.h:31
Class representing a node in the shader generation DAG.
Definition: ShaderNode.h:326
An output on a ShaderNode.
Definition: ShaderNode.h:301
An input or output port on a ShaderNode.
Definition: ShaderNode.h:123
A type descriptor for MaterialX data types.
Definition: TypeDesc.h:28