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;
132 auto it = _userData.find(name);
133 if (it != _userData.end())
135 it->second.push_back(data);
139 _userData[name] = { data };
146 auto it = _userData.find(name);
147 if (it != _userData.end())
149 it->second.pop_back();
154 void clearUserData();
161 auto it = _userData.find(name);
162 return it != _userData.end() && !it->second.empty() ? it->second.back()->asA<T>() :
nullptr;
168 void addInputSuffix(
const ShaderInput* input,
const string& suffix);
177 void getInputSuffix(
const ShaderInput* input,
string& suffix)
const;
182 void addOutputSuffix(
const ShaderOutput* output,
const string& suffix);
191 void getOutputSuffix(
const ShaderOutput* output,
string& suffix)
const;
196 _applicationVariableHandler = handler;
202 return _applicationVariableHandler;
213 std::unordered_map<string, ShaderNodeImplPtr> _nodeImpls;
214 std::unordered_map<string, vector<GenUserDataPtr>> _userData;
215 std::unordered_map<const ShaderInput*, string> _inputSuffix;
216 std::unordered_map<const ShaderOutput*, string> _outputSuffix;
218 vector<ClosureContext*> _closureContexts;
234 using Argument = std::pair<const TypeDesc*, string>;
251 _arguments[nodeType].push_back(arg);
257 auto it = _arguments.find(nodeType);
258 return it != _arguments.end() ? it->second : EMPTY_ARGUMENTS;
264 _suffix[nodeType] = suffix;
270 auto it = _suffix.find(nodeType);
271 return it != _suffix.end() ? it->second : EMPTY_STRING;
279 _params[closure] = params;
283 _params.erase(closure);
291 auto it = _params.find(closure);
292 return it != _params.end() ? it->second :
nullptr;
297 std::unordered_map<const TypeDesc*, Arguments> _arguments;
298 std::unordered_map<const TypeDesc*, string> _suffix;
299 std::unordered_map<const ShaderNode*, const ClosureParams*> _params;
301 static const Arguments EMPTY_ARGUMENTS;
339MATERIALX_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
Classes for nodes created during shader generation.
Class representing a context for closure evaluation.
Definition: GenContext.h:229
void setClosureParams(const ShaderNode *closure, const ClosureParams *params)
Set extra parameters to use for evaluating a closure.
Definition: GenContext.h:275
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:268
vector< Argument > Arguments
An array of arguments.
Definition: GenContext.h:236
ClosureContext(int type=0)
Constructor.
Definition: GenContext.h:242
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:262
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:249
std::pair< const TypeDesc *, string > Argument
An extra argument for closure functions.
Definition: GenContext.h:234
std::unordered_map< string, const ShaderInput * > ClosureParams
Extra parameters for closure evaluation.
Definition: GenContext.h:239
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:255
int getType() const
Return the identifier for this context.
Definition: GenContext.h:246
const ClosureParams * getClosureParams(const ShaderNode *closure) const
Return extra parameters to use for evaluating a closure.
Definition: GenContext.h:289
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
GenOptions & getOptions()
Return shader generation options.
Definition: GenContext.h:43
void setApplicationVariableHandler(ApplicationVariableHandler handler)
Set handler for application variables.
Definition: GenContext.h:194
ShaderGenerator & getShaderGenerator()
Return shader generatior.
Definition: GenContext.h:37
void popUserData(const string &name)
Remove user data from the context.
Definition: GenContext.h:144
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:130
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:200
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:159
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:307
A RAII class for overriding port variable names.
Definition: GenContext.h:326
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:323
An output on a ShaderNode.
Definition: ShaderNode.h:298
An input or output port on a ShaderNode.
Definition: ShaderNode.h:123
A type descriptor for MaterialX data types.
Definition: TypeDesc.h:28