6#ifndef MATERIALX_SHADERSTAGE_H
7#define MATERIALX_SHADERSTAGE_H
25#define BEGIN_SHADER_STAGE(stage, name) if (stage.getName() == name) {
26#define END_SHADER_STAGE(stage, name) }
39 extern MX_GENSHADER_API
const string PIXEL;
61 const string&
getName()
const {
return _name; }
64 void setName(
const string& name) { _name = name; }
70 void setInstance(
const string& instance) { _instance = instance; }
73 bool empty()
const {
return _variableOrder.empty(); }
76 size_t size()
const {
return _variableOrder.size(); }
93 const ShaderPort* operator[](
const string& name)
const;
101 const ShaderPort* find(
const string& name)
const;
115 std::unordered_map<string, ShaderPortPtr> _variableMap;
116 vector<ShaderPort*> _variableOrder;
130 const string&
getName()
const {
return _name; }
139 VariableBlockPtr createUniformBlock(
const string& name,
const string& instance = EMPTY_STRING);
142 VariableBlockPtr createInputBlock(
const string& name,
const string& instance = EMPTY_STRING);
145 VariableBlockPtr createOutputBlock(
const string& name,
const string& instance = EMPTY_STRING);
151 const VariableBlock& getUniformBlock(
const string& name)
const;
157 const VariableBlock& getInputBlock(
const string& name)
const;
163 const VariableBlock& getOutputBlock(
const string& name)
const;
194 void endScope(
bool semicolon =
false,
bool newline =
true);
200 void endLine(
bool semicolon =
true);
206 void addString(
const string& str);
209 void addLine(
const string& str,
bool semicolon =
true);
212 void addComment(
const string& str);
215 void addBlock(
const string& str,
GenContext& context);
219 void addInclude(
const string& file,
GenContext& context);
236 _functionName = functionName;
244 string _functionName;
253 vector<Syntax::Punctuation> _scopes;
259 std::set<size_t> _definedFunctions;
280using ShaderStagePtr = std::shared_ptr<ShaderStage>;
289 return uniforms.
add(type, name);
299 return inputs.
add(type, name);
309 return outputs.
add(type, name);
314 const string& instance,
Shader generation options class.
std::set< string > StringSet
A set of strings.
Definition: Library.h:60
Macros for declaring imported and exported symbols.
std::stringstream StringStream
A string stream.
Definition: Library.h:31
shared_ptr< class ShaderPort > ShaderPortPtr
Shared pointer to a ShaderPort.
Definition: ShaderNode.h:30
std::shared_ptr< VariableBlock > VariableBlockPtr
Shared pointer to a VariableBlock.
Definition: ShaderStage.h:44
ShaderPort * addStageUniform(const string &block, const TypeDesc *type, const string &name, ShaderStage &stage)
Utility function for adding a new shader port to a uniform block.
Definition: ShaderStage.h:283
ShaderPort * addStageOutput(const string &block, const TypeDesc *type, const string &name, ShaderStage &stage)
Utility function for adding a new shader port to an output block.
Definition: ShaderStage.h:303
std::unordered_map< string, VariableBlockPtr > VariableBlockMap
Shared pointer to a map between string identifiers and VariableBlocks.
Definition: ShaderStage.h:46
void addStageConnector(const string &block, const TypeDesc *type, const string &name, ShaderStage &from, ShaderStage &to)
Utility function for adding a variable to a stage connector block.
Definition: ShaderStage.h:323
void addStageConnectorBlock(const string &block, const string &instance, ShaderStage &from, ShaderStage &to)
Utility function for adding a connector block between stages.
Definition: ShaderStage.h:313
std::function< bool(ShaderPort *)> ShaderPortPredicate
A standard function predicate taking an ShaderPort pointer and returning a boolean.
Definition: ShaderStage.h:48
ShaderPort * addStageInput(const string &block, const TypeDesc *type, const string &name, ShaderStage &stage)
Utility function for adding a new shader port to an input block.
Definition: ShaderStage.h:293
Base class for syntax handling for shader generators.
shared_ptr< const Syntax > ConstSyntaxPtr
Shared pointer to a constant Syntax.
Definition: Syntax.h:28
shared_ptr< Value > ValuePtr
A shared pointer to a Value.
Definition: Value.h:30
A context class for shader generation.
Definition: GenContext.h:27
Base class for shader generators All third-party shader generators should derive from this class.
Definition: ShaderGenerator.h:30
Class representing a node in the shader generation DAG.
Definition: ShaderNode.h:326
An input or output port on a ShaderNode.
Definition: ShaderNode.h:125
A shader stage, containing the state and resulting source code for the stage.
Definition: ShaderStage.h:124
const VariableBlockMap & getUniformBlocks() const
Return a map of all uniform blocks.
Definition: ShaderStage.h:172
void setFunctionName(const string &functionName)
Set stage function name.
Definition: ShaderStage.h:234
void addValue(const T &value)
Add a value.
Definition: ShaderStage.h:223
VariableBlock & getOutputBlock(const string &name)
Return the output variable block with given name.
Definition: ShaderStage.cpp:169
const string & getName() const
Return the stage name.
Definition: ShaderStage.h:130
const VariableBlockMap & getInputBlocks() const
Return a map of all input blocks.
Definition: ShaderStage.h:178
VariableBlockPtr createOutputBlock(const string &name, const string &instance=EMPTY_STRING)
Create a new output variable block.
Definition: ShaderStage.cpp:127
const string & getFunctionName() const
Return the stage function name.
Definition: ShaderStage.h:133
VariableBlockPtr createInputBlock(const string &name, const string &instance=EMPTY_STRING)
Create a new input variable block.
Definition: ShaderStage.cpp:115
VariableBlock & getUniformBlock(const string &name)
Return the uniform variable block with given name.
Definition: ShaderStage.cpp:139
const string & getSourceCode() const
Return the stage source code.
Definition: ShaderStage.h:136
const VariableBlockMap & getOutputBlocks() const
Return a map of all output blocks.
Definition: ShaderStage.h:184
VariableBlock & getInputBlock(const string &name)
Return the input variable block with given name.
Definition: ShaderStage.cpp:154
Punctuation
Punctuation types.
Definition: Syntax.h:44
A type descriptor for MaterialX data types.
Definition: TypeDesc.h:29
A block of variables in a shader stage.
Definition: ShaderStage.h:53
size_t size() const
Return the number of variables in this block.
Definition: ShaderStage.h:76
const string & getName() const
Get the name of this block.
Definition: ShaderStage.h:61
void setName(const string &name)
Set the name of this block.
Definition: ShaderStage.h:64
ShaderPort * operator[](size_t index)
Return a variable by index.
Definition: ShaderStage.h:79
bool empty() const
Return true if the block has no variables.
Definition: ShaderStage.h:73
const string & getInstance() const
Get the instance name of this block.
Definition: ShaderStage.h:67
const ShaderPort * operator[](size_t index) const
Return a variable by index.
Definition: ShaderStage.h:82
const vector< ShaderPort * > & getVariableOrder() const
Return a const reference to our variable order vector.
Definition: ShaderStage.h:85
ShaderPort * add(const TypeDesc *type, const string &name, ValuePtr value=nullptr)
Add a new shader port to this block.
Definition: ShaderStage.cpp:67
void setInstance(const string &instance)
Set the instance name of this block.
Definition: ShaderStage.h:70