HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MdlShaderGenerator.h
Go to the documentation of this file.
1 //
2 // Copyright Contributors to the MaterialX Project
3 // SPDX-License-Identifier: Apache-2.0
4 //
5 
6 #ifndef MATERIALX_MDLSHADERGENERATOR_H
7 #define MATERIALX_MDLSHADERGENERATOR_H
8 
9 /// @file
10 /// MDL shading language generator
11 
12 #include <MaterialXGenMdl/Export.h>
13 
15 
17 
18 /// Shared pointer to an MdlShaderGenerator
19 using MdlShaderGeneratorPtr = shared_ptr<class MdlShaderGenerator>;
20 
21 /// @class MdlShaderGenerator
22 /// Shader generator for MDL (Material Definition Language).
24 {
25  public:
27 
28  static ShaderGeneratorPtr create() { return std::make_shared<MdlShaderGenerator>(); }
29 
30  /// Return a unique identifier for the target this generator is for
31  const string& getTarget() const override { return TARGET; }
32 
33  /// Generate a shader starting from the given element, translating
34  /// the element and all dependencies upstream into shader code.
35  ShaderPtr generate(const string& name, ElementPtr element, GenContext& context) const override;
36 
37  /// Return a registered shader node implementation given an implementation element.
38  /// The element must be an Implementation or a NodeGraph acting as implementation.
39  ShaderNodeImplPtr getImplementation(const NodeDef& nodedef, GenContext& context) const override;
40 
41  /// Return the result of an upstream connection or value for an input.
42  string getUpstreamResult(const ShaderInput* input, GenContext& context) const override;
43 
44  /// Unique identifier for this generator target
45  static const string TARGET;
46 
47  /// Map of code snippets for geomprops in MDL.
48  static const std::unordered_map<string, string> GEOMPROP_DEFINITIONS;
49 
50  protected:
51  // Create and initialize a new MDL shader for shader generation.
52  ShaderPtr createShader(const string& name, ElementPtr element, GenContext& context) const;
53 
54  // Emit a block of shader inputs.
55  void emitShaderInputs(const VariableBlock& inputs, ShaderStage& stage) const;
56 };
57 
58 namespace MDL
59 {
60 
61 // Identifiers for MDL variable blocks
62 extern MX_GENMDL_API const string INPUTS;
63 extern MX_GENMDL_API const string OUTPUTS;
64 
65 } // namespace MDL
66 
68 
69 #endif
shared_ptr< ShaderNodeImpl > ShaderNodeImplPtr
Shared pointer to a ShaderNodeImpl.
Definition: Library.h:40
#define MATERIALX_NAMESPACE_BEGIN
Definition: Generated.h:25
#define MX_GENMDL_API
Definition: Export.h:18
static const string TARGET
Unique identifier for this generator target.
const string & getTarget() const override
Return a unique identifier for the target this generator is for.
virtual string getUpstreamResult(const ShaderInput *input, GenContext &context) const
Return the result of an upstream connection or value for an input.
virtual ShaderNodeImplPtr getImplementation(const NodeDef &nodedef, GenContext &context) const
Return a registered shader node implementation for the given nodedef.
MX_GENMDL_API const string OUTPUTS
GLuint const GLchar * name
Definition: glcorearb.h:786
MX_GENMDL_API const string INPUTS
MX_RENDER_API ShaderPtr createShader(const string &shaderName, GenContext &context, ElementPtr elem)
Create a shader for a given element.
shared_ptr< Shader > ShaderPtr
Shared pointer to a Shader.
Definition: Library.h:34
shared_ptr< Element > ElementPtr
A shared pointer to an Element.
Definition: Element.h:31
#define MATERIALX_NAMESPACE_END
Definition: Generated.h:26
static const std::unordered_map< string, string > GEOMPROP_DEFINITIONS
Map of code snippets for geomprops in MDL.
shared_ptr< ShaderGenerator > ShaderGeneratorPtr
Shared pointer to a ShaderGenerator.
Definition: Library.h:38
static ShaderGeneratorPtr create()
virtual ShaderPtr generate(const string &, ElementPtr, GenContext &) const
shared_ptr< class MdlShaderGenerator > MdlShaderGeneratorPtr
Shared pointer to an MdlShaderGenerator.