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) }
60 const string&
getName()
const {
return _name; }
69 void setInstance(
const string& instance) { _instance = instance; }
72 bool empty()
const {
return _variableOrder.empty(); }
75 size_t size()
const {
return _variableOrder.size(); }
114 std::unordered_map<string, ShaderPortPtr> _variableMap;
115 vector<ShaderPort*> _variableOrder;
138 const string&
getName()
const {
return _name; }
204 void endScope(
bool semicolon =
false,
bool newline =
true);
210 void endLine(
bool semicolon =
true);
216 void addString(
const string& str);
219 void addLine(
const string& str,
bool semicolon =
true);
222 void addComment(
const string& str);
225 void addBlock(
const string& str,
GenContext& context);
229 void addInclude(
const string& file,
GenContext& context);
252 _functionName = functionName;
260 string _functionName;
269 vector<Scope> _scopes;
275 std::set<size_t> _definedFunctions;
305 return uniforms.
add(type, name);
315 return inputs.
add(type, name);
325 return outputs.
add(type, name);
330 const string& instance,
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.
void addStageConnectorBlock(const string &block, const string &instance, ShaderStage &from, ShaderStage &to)
Utility function for adding a connector block between stages.
void addValue(const T &value)
Add a value.
#define MATERIALX_NAMESPACE_BEGIN
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.
bool empty() const
Return true if the block has no variables.
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.
MATERIALX_NAMESPACE_BEGIN MX_CORE_API const string EMPTY_STRING
VariableBlockPtr createOutputBlock(const string &name, const string &instance=EMPTY_STRING)
Create a new output variable block.
shared_ptr< const Syntax > ConstSyntaxPtr
Shared pointer to a constant Syntax.
const VariableBlockMap & getOutputBlocks() const
Return a map of all output blocks.
GLuint const GLchar * name
const VariableBlockMap & getInputBlocks() const
Return a map of all input blocks.
const string & getName() const
Return the stage name.
void setSourceCode(const string &code)
Set the stage source code.
std::shared_ptr< VariableBlock > VariableBlockPtr
Shared pointer to a VariableBlock.
const string & getName() const
Get the name of this block.
std::function< bool(ShaderPort *)> ShaderPortPredicate
A standard function predicate taking an ShaderPort pointer and returning a boolean.
Scope(Syntax::Punctuation p)
std::unordered_map< string, VariableBlockPtr > VariableBlockMap
Shared pointer to a map between string identifiers and VariableBlocks.
VariableBlock & getInputBlock(const string &name)
Return the input variable block with given name.
ShaderPort * operator[](size_t index)
Return a variable by index.
ShaderPort * add(const TypeDesc *type, const string &name, ValuePtr value=nullptr)
Add a new shader port to this block.
void setFunctionName(const string &functionName)
Set stage function name.
MX_GENSHADER_API const string PIXEL
Syntax::Punctuation punctuation
const vector< ShaderPort * > & getVariableOrder() const
Return a const reference to our variable order vector.
std::set< FunctionCallId > functions
size_t size() const
Return the number of variables in this block.
void setInstance(const string &instance)
Set the instance name of this block.
shared_ptr< ShaderStage > ShaderStagePtr
Shared pointer to a ShaderStage.
Punctuation
Punctuation types.
const VariableBlockMap & getUniformBlocks() const
Return a map of all uniform blocks.
void setName(const string &name)
Set the name of this block.
shared_ptr< class ShaderPort > ShaderPortPtr
Shared pointer to a ShaderPort.
VariableBlock & getUniformBlock(const string &name)
Return the uniform variable block with given name.
GLsizei const GLfloat * value
const ShaderPort * operator[](size_t index) const
Return a variable by index.
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.
std::set< string > StringSet
A set of strings.
#define MATERIALX_NAMESPACE_END
VariableBlock & getOutputBlock(const string &name)
Return the output variable block with given name.
ImageBuf OIIO_API add(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
const string & getFunctionName() const
Return the stage function name.
std::pair< const ShaderNode *, int > FunctionCallId
std::stringstream StringStream
A string stream.
const string & getInstance() const
Get the instance name of this block.
shared_ptr< Value > ValuePtr
A shared pointer to a Value.
VariableBlockPtr createInputBlock(const string &name, const string &instance=EMPTY_STRING)
Create a new input variable block.
FMT_CONSTEXPR auto find(Ptr first, Ptr last, T value, Ptr &out) -> bool
const string & getSourceCode() const
Return the stage source code.
VariableBlock(const string &name, const string &instance)