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 // TM & (c) 2020 Lucasfilm Entertainment Company Ltd. and Lucasfilm Ltd.
3 // All rights reserved. See LICENSE.txt for license.
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  protected:
48  // Create and initialize a new MDL shader for shader generation.
49  ShaderPtr createShader(const string& name, ElementPtr element, GenContext& context) const;
50 
51  // Emit a block of shader inputs.
52  void emitShaderInputs(const VariableBlock& inputs, ShaderStage& stage) const;
53 };
54 
55 namespace MDL
56 {
57  // Identifiers for MDL variable blocks
58  extern MX_GENMDL_API const string INPUTS;
59  extern MX_GENMDL_API const string OUTPUTS;
60 }
61 
63 
64 #endif
shared_ptr< ShaderNodeImpl > ShaderNodeImplPtr
Shared pointer to a ShaderNodeImpl.
Definition: Library.h:40
#define MATERIALX_NAMESPACE_BEGIN
Definition: Generated.h:23
#define MX_GENMDL_API
Definition: Export.h:18
GLenum GLenum GLenum input
Definition: glew.h:14162
GLuint const GLchar * name
Definition: glcorearb.h:786
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 ShaderPtr generate(const string &name, ElementPtr element, GenContext &context) const =0
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
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:30
#define MATERIALX_NAMESPACE_END
Definition: Generated.h:24
shared_ptr< ShaderGenerator > ShaderGeneratorPtr
Shared pointer to a ShaderGenerator.
Definition: Library.h:38
static ShaderGeneratorPtr create()
shared_ptr< class MdlShaderGenerator > MdlShaderGeneratorPtr
Shared pointer to an MdlShaderGenerator.