MaterialX 1.39.5
Loading...
Searching...
No Matches
SlangShaderGenerator.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_SLANGSHADERGENERATOR_H
7#define MATERIALX_SLANGSHADERGENERATOR_H
8
11
13
14#include <MaterialXGenHw/HwShaderGenerator.h>
15
16MATERIALX_NAMESPACE_BEGIN
17
18using SlangShaderGeneratorPtr = shared_ptr<class SlangShaderGenerator>;
19
22class MX_GENSLANG_API SlangShaderGenerator : public HwShaderGenerator
23{
24 public:
26 SlangShaderGenerator(TypeSystemPtr typeSystem);
27
33 static ShaderGeneratorPtr create(TypeSystemPtr typeSystem = nullptr)
34 {
35 return std::make_shared<SlangShaderGenerator>(typeSystem ? typeSystem : TypeSystem::create());
36 }
37
40 ShaderPtr generate(const string& name, ElementPtr element, GenContext& context) const override;
41
43 const string& getTarget() const override { return TARGET; }
44
46 virtual const string& getVersion() const { return VERSION; }
47
49 void emitVariableDeclaration(const ShaderPort* variable, const string& qualifier, GenContext& context, ShaderStage& stage,
50 bool assignValue = true) const override;
51
53 string getVertexDataPrefix(const VariableBlock& vertexData) const override;
54
55 public:
57 static const string TARGET;
58
60 static const string VERSION;
61
62 protected:
63 virtual void emitVertexStage(const ShaderGraph& graph, GenContext& context, ShaderStage& stage) const;
64 virtual void emitPixelStage(const ShaderGraph& graph, GenContext& context, ShaderStage& stage) const;
65
66 virtual void emitDirectives(GenContext& context, ShaderStage& stage) const;
67 virtual void emitConstants(GenContext& context, ShaderStage& stage) const;
68 virtual void emitUniforms(GenContext& context, ShaderStage& stage, bool emitLighting) const;
69 virtual void emitInputs(GenContext& context, ShaderStage& stage) const;
70 virtual void emitOutputs(GenContext& context, ShaderStage& stage) const;
71
75 virtual bool requiresLighting(const ShaderGraph& graph) const override;
76
78 virtual void emitSpecularEnvironment(GenContext& context, ShaderStage& stage) const;
79
81 virtual void emitTransmissionRender(GenContext& context, ShaderStage& stage) const;
82
84 virtual void emitLightFunctionDefinitions(const ShaderGraph& graph, GenContext& context, ShaderStage& stage) const;
85
86 static void toVec4(TypeDesc type, string& variable);
87 [[deprecated]] static void toVec4(const TypeDesc* type, string& variable) { toVec4(*type, variable); }
88
89 void SlangSyntaxFromGlsl(ShaderStage& shaderStage) const;
90
92 vector<ShaderNodePtr> _lightSamplingNodes;
93};
94
95MATERIALX_NAMESPACE_END
96
97#endif
shared_ptr< Element > ElementPtr
A shared pointer to an Element.
Definition Element.h:31
shared_ptr< Shader > ShaderPtr
Shared pointer to a Shader.
Definition Library.h:33
shared_ptr< ShaderGenerator > ShaderGeneratorPtr
Shared pointer to a ShaderGenerator.
Definition Library.h:37
Macros for declaring imported and exported symbols.
A context class for shader generation.
Definition GenContext.h:30
Class representing a graph (DAG) for shader generation.
Definition ShaderGraph.h:45
An input or output port on a ShaderNode.
Definition ShaderNode.h:124
A shader stage, containing the state and resulting source code for the stage.
Definition ShaderStage.h:145
const string & getTarget() const override
Return a unique identifier for the target this generator is for.
Definition SlangShaderGenerator.h:43
virtual void emitLightFunctionDefinitions(const ShaderGraph &graph, GenContext &context, ShaderStage &stage) const
Emit function definitions for lighting code.
virtual const string & getVersion() const
Return the version string for the Slang version this generator is for.
Definition SlangShaderGenerator.h:46
static ShaderGeneratorPtr create(TypeSystemPtr typeSystem=nullptr)
Creator function.
Definition SlangShaderGenerator.h:33
SlangShaderGenerator(TypeSystemPtr typeSystem)
Constructor.
vector< ShaderNodePtr > _lightSamplingNodes
Nodes used internally for light sampling.
Definition SlangShaderGenerator.h:92
static const string TARGET
Unique identifier for this generator target.
Definition SlangShaderGenerator.h:57
ShaderPtr generate(const string &name, ElementPtr element, GenContext &context) const override
Generate a shader starting from the given element, translating the element and all dependencies upstr...
void emitVariableDeclaration(const ShaderPort *variable, const string &qualifier, GenContext &context, ShaderStage &stage, bool assignValue=true) const override
Emit a shader variable.
virtual bool requiresLighting(const ShaderGraph &graph) const override
Logic to indicate whether code to support direct lighting should be emitted.
virtual void emitSpecularEnvironment(GenContext &context, ShaderStage &stage) const
Emit specular environment lookup code.
string getVertexDataPrefix(const VariableBlock &vertexData) const override
Determine the prefix of vertex data variables.
virtual void emitTransmissionRender(GenContext &context, ShaderStage &stage) const
Emit transmission rendering code.
static const string VERSION
Version string for the generator target.
Definition SlangShaderGenerator.h:60
A type descriptor for MaterialX data types.
Definition TypeDesc.h:40
static TypeSystemPtr create()
Create a new type system.
A block of variables in a shader stage.
Definition ShaderStage.h:67