HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MdlSyntax.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_MDLSYNTAX_H
7 #define MATERIALX_MDLSYNTAX_H
8 
9 /// @file
10 /// MDL syntax class
11 
12 #include <MaterialXGenMdl/Export.h>
13 
15 
17 
18 class MdlSyntax;
19 
20 /// Shared pointer to an MdlSyntax
21 using MdlSyntaxPtr = shared_ptr<MdlSyntax>;
22 
23 /// @class MdlSyntax
24 /// Syntax class for MDL (Material Definition Language)
26 {
27  public:
28  MdlSyntax(TypeSystemPtr typeSystem);
29 
30  static SyntaxPtr create(TypeSystemPtr typeSystem) { return std::make_shared<MdlSyntax>(typeSystem); }
31 
32  const string& getConstantQualifier() const override { return CONST_QUALIFIER; };
33  const string& getUniformQualifier() const override { return UNIFORM_QUALIFIER; };
34  const string& getSourceFileExtension() const override { return SOURCE_FILE_EXTENSION; };
35 
36  /// Override to return array type suffix.
37  string getArrayTypeSuffix(TypeDesc type, const Value& value) const override;
38 
39  /// Override to indicate array variables have no array suffix.
40  string getArrayVariableSuffix(TypeDesc, const Value&) const override { return EMPTY_STRING; };
41 
42  static const string CONST_QUALIFIER;
43  static const string UNIFORM_QUALIFIER;
44  static const string SOURCE_FILE_EXTENSION;
45  static const StringVec VECTOR2_MEMBERS;
46  static const StringVec VECTOR3_MEMBERS;
47  static const StringVec VECTOR4_MEMBERS;
48  static const StringVec COLOR3_MEMBERS;
49  static const StringVec COLOR4_MEMBERS;
57  static const string PORT_NAME_PREFIX; // Applied to input and output names to avoid collisions with reserved words in MDL
58 
59  /// Get an type description for an enumeration based on member value
60  TypeDesc getEnumeratedType(const string& value) const;
61 
62  /// Given an input specification attempt to remap this to an enumeration which is accepted by
63  /// the shader generator. The enumeration may be converted to a different type than the input.
64  bool remapEnumeration(const string& value, TypeDesc type, const string& enumNames, std::pair<TypeDesc, ValuePtr>& result) const override;
65 
66  /// Modify the given name string to remove any invalid characters or tokens.
67  void makeValidName(string& name) const override;
68 
69  /// To avoid collisions with reserved names in MDL, input and output names are prefixed.
70  string modifyPortName(const string& word) const;
71 
72  /// Replaces all markers in a source code string indicated by {{...}}.
73  /// The replacement is defined by a callback function.
74  string replaceSourceCodeMarkers(const string& nodeName, const string& soureCode, std::function<string(const string&)> lambda) const;
75 
76  /// Get the MDL language versing marker: {{MDL_VERSION_SUFFIX}}.
77  const string& getMdlVersionSuffixMarker() const;
78 };
79 
80 namespace Type
81 {
82 
83 TYPEDESC_DEFINE_TYPE(MDL_COORDINATESPACE, "coordinatespace", TypeDesc::BASETYPE_NONE, TypeDesc::SEMANTIC_ENUM, 0)
84 TYPEDESC_DEFINE_TYPE(MDL_ADDRESSMODE, "addressmode", TypeDesc::BASETYPE_NONE, TypeDesc::SEMANTIC_ENUM, 0)
85 TYPEDESC_DEFINE_TYPE(MDL_FILTERLOOKUPMODE, "filterlookup", TypeDesc::BASETYPE_NONE, TypeDesc::SEMANTIC_ENUM, 0)
87 TYPEDESC_DEFINE_TYPE(MDL_DISTRIBUTIONTYPE, "distributiontype", TypeDesc::BASETYPE_NONE, TypeDesc::SEMANTIC_ENUM, 0)
88 TYPEDESC_DEFINE_TYPE(MDL_SCATTER_MODE, "scatter_mode", TypeDesc::BASETYPE_NONE, TypeDesc::SEMANTIC_ENUM, 0)
90 
91 } // namespace Type
92 
94 
95 #endif
static const string SOURCE_FILE_EXTENSION
Definition: MdlSyntax.h:44
static const StringVec FILTERLOOKUPMODE_MEMBERS
Definition: MdlSyntax.h:52
#define MATERIALX_NAMESPACE_BEGIN
Definition: Generated.h:25
vector< string > StringVec
A vector of strings.
Definition: Library.h:60
virtual string getArrayTypeSuffix(TypeDesc, const Value &) const
Return the array suffix to use for declaring an array type.
Definition: Syntax.h:163
#define MX_GENMDL_API
Definition: Export.h:18
GLsizei const GLfloat * value
Definition: glcorearb.h:824
static const StringVec VECTOR3_MEMBERS
Definition: MdlSyntax.h:46
string getArrayVariableSuffix(TypeDesc, const Value &) const override
Override to indicate array variables have no array suffix.
Definition: MdlSyntax.h:40
MATERIALX_NAMESPACE_BEGIN MX_CORE_API const string EMPTY_STRING
shared_ptr< Syntax > SyntaxPtr
Shared pointer to a Syntax.
Definition: Syntax.h:28
**But if you need a result
Definition: thread.h:622
const string & getSourceFileExtension() const override
Return the file extension used for source code files in this language.
Definition: MdlSyntax.h:34
shared_ptr< class TypeSystem > TypeSystemPtr
Definition: TypeDesc.h:219
static const string PORT_NAME_PREFIX
Definition: MdlSyntax.h:57
static const StringVec SCATTER_MODE_MEMBERS
Definition: MdlSyntax.h:55
static const StringVec COLOR3_MEMBERS
Definition: MdlSyntax.h:48
GLint GLint GLsizei GLint GLenum GLenum type
Definition: glcorearb.h:108
static const StringVec DISTRIBUTIONTYPE_MEMBERS
Definition: MdlSyntax.h:54
static const StringVec FILTERTYPE_MEMBERS
Definition: MdlSyntax.h:53
static const string UNIFORM_QUALIFIER
Definition: MdlSyntax.h:43
static const StringVec VECTOR4_MEMBERS
Definition: MdlSyntax.h:47
A generic, discriminated value, whose type may be queried dynamically.
Definition: Value.h:45
static const StringVec ADDRESSMODE_MEMBERS
Definition: MdlSyntax.h:50
GLuint const GLchar * name
Definition: glcorearb.h:786
virtual bool remapEnumeration(const string &value, TypeDesc type, const string &enumNames, std::pair< TypeDesc, ValuePtr > &result) const
#define TYPEDESC_DEFINE_TYPE(T, name, basetype, semantic, size)
Macro to define global type descriptions for commonly used types.
Definition: TypeDesc.h:256
static const StringVec SHEEN_MODE_MEMBERS
Definition: MdlSyntax.h:56
static const StringVec VECTOR2_MEMBERS
Definition: MdlSyntax.h:45
const string & getConstantQualifier() const override
Definition: MdlSyntax.h:32
static const StringVec COORDINATESPACE_MEMBERS
Definition: MdlSyntax.h:51
shared_ptr< MdlSyntax > MdlSyntaxPtr
Shared pointer to an MdlSyntax.
Definition: MdlSyntax.h:21
#define MATERIALX_NAMESPACE_END
Definition: Generated.h:26
static const StringVec COLOR4_MEMBERS
Definition: MdlSyntax.h:49
Definition: Syntax.h:43
static SyntaxPtr create(TypeSystemPtr typeSystem)
Definition: MdlSyntax.h:30
virtual void makeValidName(string &name) const
Modify the given name string to remove any invalid characters or tokens.
const string & getUniformQualifier() const override
Definition: MdlSyntax.h:33