HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
OslNetworkShaderGenerator.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_OSLNETWORKSHADERGENERATOR_H
7 #define MATERIALX_OSLNETWORKSHADERGENERATOR_H
8 
9 /// @file
10 /// OSL shading language generator
11 
12 #include <MaterialXGenOsl/Export.h>
13 
15 
17 
18 using OslNetworkShaderGeneratorPtr = shared_ptr<class OslNetworkShaderGenerator>;
19 
20 /// @class OslNetworkShaderGenerator
21 /// OSL (Open Shading Language) Network shader generator.
22 /// Generates a command string that OSL can use to build a ShaderGroup.
24 {
25  public:
26  /// Constructor.
28 
29  /// Creator function.
30  /// If a TypeSystem is not provided it will be created internally.
31  /// Optionally pass in an externally created TypeSystem here,
32  /// if you want to keep type descriptions alive after the lifetime
33  /// of the shader generator.
34  static ShaderGeneratorPtr create(TypeSystemPtr typeSystem = nullptr)
35  {
36  return std::make_shared<OslNetworkShaderGenerator>(typeSystem ? typeSystem : TypeSystem::create());
37  }
38 
40 
41  /// Return a unique identifier for the target this generator is for
42  const string& getTarget() const override { return TARGET; }
43 
44  /// Generate a shader starting from the given element, translating
45  /// the element and all dependencies upstream into shader code.
46  ShaderPtr generate(const string& name, ElementPtr element, GenContext& context) const override;
47 
48  /// Unique identifier for this generator target
49  static const string TARGET;
50 
51  protected:
52  /// Create and initialize a new OSL shader for shader generation.
53  ShaderPtr createShader(const string& name, ElementPtr element, GenContext& context) const override;
54 };
55 
56 namespace OSLNetwork
57 {
58 
59 /// Identifiers for OSL variable blocks
60 extern MX_GENOSL_API const string UNIFORMS;
61 extern MX_GENOSL_API const string INPUTS;
62 extern MX_GENOSL_API const string OUTPUTS;
63 
64 } // namespace OSLNetwork
65 
67 
68 #endif
ShaderPtr generate(const string &name, ElementPtr element, GenContext &context) const override
shared_ptr< ShaderNodeImpl > ShaderNodeImplPtr
Shared pointer to a ShaderNodeImpl.
Definition: Library.h:39
#define MATERIALX_NAMESPACE_BEGIN
Definition: Generated.h:25
MX_GENOSL_API const string UNIFORMS
Identifiers for OSL variable blocks.
virtual ShaderPtr createShader(const string &name, ElementPtr element, GenContext &context) const
Create and initialize a new OSL shader for shader generation.
static TypeSystemPtr create()
Create a new type system.
shared_ptr< class TypeSystem > TypeSystemPtr
Definition: TypeDesc.h:219
#define MX_GENOSL_API
Definition: Export.h:18
shared_ptr< class OslNetworkShaderGenerator > OslNetworkShaderGeneratorPtr
static ShaderGeneratorPtr create(TypeSystemPtr typeSystem=nullptr)
MX_GENOSL_API const string OUTPUTS
GLuint const GLchar * name
Definition: glcorearb.h:786
const string & getTarget() const override
Return a unique identifier for the target this generator is for.
static const string TARGET
Unique identifier for this generator target.
static const string TARGET
Unique identifier for this generator target.
virtual ShaderNodeImplPtr createShaderNodeImplForImplementation(const Implementation &implementation) const
Create the shader node implementation for an Implementation implementation.
shared_ptr< Shader > ShaderPtr
Shared pointer to a Shader.
Definition: Library.h:33
shared_ptr< Element > ElementPtr
A shared pointer to an Element.
Definition: Element.h:31
#define MATERIALX_NAMESPACE_END
Definition: Generated.h:26
shared_ptr< ShaderGenerator > ShaderGeneratorPtr
Shared pointer to a ShaderGenerator.
Definition: Library.h:37
MX_GENOSL_API const string INPUTS