6#ifndef MATERIALX_HWSHADERGENERATOR_H
7#define MATERIALX_HWSHADERGENERATOR_H
17MATERIALX_NAMESPACE_BEGIN
86extern MX_GENSHADER_API
const string T_IN_NORMAL;
87extern MX_GENSHADER_API
const string T_IN_TANGENT;
88extern MX_GENSHADER_API
const string T_IN_BITANGENT;
89extern MX_GENSHADER_API
const string T_IN_TEXCOORD;
90extern MX_GENSHADER_API
const string T_IN_GEOMPROP;
91extern MX_GENSHADER_API
const string T_IN_COLOR;
92extern MX_GENSHADER_API
const string T_POSITION_WORLD;
93extern MX_GENSHADER_API
const string T_NORMAL_WORLD;
94extern MX_GENSHADER_API
const string T_TANGENT_WORLD;
95extern MX_GENSHADER_API
const string T_BITANGENT_WORLD;
96extern MX_GENSHADER_API
const string T_POSITION_OBJECT;
97extern MX_GENSHADER_API
const string T_NORMAL_OBJECT;
98extern MX_GENSHADER_API
const string T_TANGENT_OBJECT;
99extern MX_GENSHADER_API
const string T_BITANGENT_OBJECT;
100extern MX_GENSHADER_API
const string T_TEXCOORD;
101extern MX_GENSHADER_API
const string T_COLOR;
102extern MX_GENSHADER_API
const string T_WORLD_MATRIX;
103extern MX_GENSHADER_API
const string T_WORLD_INVERSE_MATRIX;
104extern MX_GENSHADER_API
const string T_WORLD_TRANSPOSE_MATRIX;
105extern MX_GENSHADER_API
const string T_WORLD_INVERSE_TRANSPOSE_MATRIX;
106extern MX_GENSHADER_API
const string T_VIEW_MATRIX;
107extern MX_GENSHADER_API
const string T_VIEW_INVERSE_MATRIX;
108extern MX_GENSHADER_API
const string T_VIEW_TRANSPOSE_MATRIX;
109extern MX_GENSHADER_API
const string T_VIEW_INVERSE_TRANSPOSE_MATRIX;
110extern MX_GENSHADER_API
const string T_PROJ_MATRIX;
111extern MX_GENSHADER_API
const string T_PROJ_INVERSE_MATRIX;
112extern MX_GENSHADER_API
const string T_PROJ_TRANSPOSE_MATRIX;
113extern MX_GENSHADER_API
const string T_PROJ_INVERSE_TRANSPOSE_MATRIX;
114extern MX_GENSHADER_API
const string T_WORLD_VIEW_MATRIX;
115extern MX_GENSHADER_API
const string T_VIEW_PROJECTION_MATRIX;
116extern MX_GENSHADER_API
const string T_WORLD_VIEW_PROJECTION_MATRIX;
117extern MX_GENSHADER_API
const string T_VIEW_POSITION;
118extern MX_GENSHADER_API
const string T_VIEW_DIRECTION;
119extern MX_GENSHADER_API
const string T_FRAME;
120extern MX_GENSHADER_API
const string T_TIME;
121extern MX_GENSHADER_API
const string T_GEOMPROP;
122extern MX_GENSHADER_API
const string T_ALPHA_THRESHOLD;
123extern MX_GENSHADER_API
const string T_NUM_ACTIVE_LIGHT_SOURCES;
124extern MX_GENSHADER_API
const string T_ENV_MATRIX;
125extern MX_GENSHADER_API
const string T_ENV_RADIANCE;
126extern MX_GENSHADER_API
const string T_ENV_RADIANCE_MIPS;
127extern MX_GENSHADER_API
const string T_ENV_RADIANCE_SAMPLES;
128extern MX_GENSHADER_API
const string T_ENV_IRRADIANCE;
129extern MX_GENSHADER_API
const string T_REFRACTION_TWO_SIDED;
130extern MX_GENSHADER_API
const string T_ALBEDO_TABLE;
131extern MX_GENSHADER_API
const string T_ALBEDO_TABLE_SIZE;
132extern MX_GENSHADER_API
const string T_AMB_OCC_MAP;
133extern MX_GENSHADER_API
const string T_AMB_OCC_GAIN;
134extern MX_GENSHADER_API
const string T_SHADOW_MAP;
135extern MX_GENSHADER_API
const string T_SHADOW_MATRIX;
136extern MX_GENSHADER_API
const string T_VERTEX_DATA_INSTANCE;
137extern MX_GENSHADER_API
const string T_LIGHT_DATA_INSTANCE;
142extern MX_GENSHADER_API
const string IN_NORMAL;
143extern MX_GENSHADER_API
const string IN_TANGENT;
144extern MX_GENSHADER_API
const string IN_BITANGENT;
145extern MX_GENSHADER_API
const string IN_TEXCOORD;
146extern MX_GENSHADER_API
const string IN_GEOMPROP;
147extern MX_GENSHADER_API
const string IN_COLOR;
148extern MX_GENSHADER_API
const string POSITION_WORLD;
149extern MX_GENSHADER_API
const string NORMAL_WORLD;
150extern MX_GENSHADER_API
const string TANGENT_WORLD;
151extern MX_GENSHADER_API
const string BITANGENT_WORLD;
152extern MX_GENSHADER_API
const string POSITION_OBJECT;
153extern MX_GENSHADER_API
const string NORMAL_OBJECT;
154extern MX_GENSHADER_API
const string TANGENT_OBJECT;
155extern MX_GENSHADER_API
const string BITANGENT_OBJECT;
156extern MX_GENSHADER_API
const string TEXCOORD;
157extern MX_GENSHADER_API
const string COLOR;
158extern MX_GENSHADER_API
const string WORLD_MATRIX;
159extern MX_GENSHADER_API
const string WORLD_INVERSE_MATRIX;
160extern MX_GENSHADER_API
const string WORLD_TRANSPOSE_MATRIX;
161extern MX_GENSHADER_API
const string WORLD_INVERSE_TRANSPOSE_MATRIX;
162extern MX_GENSHADER_API
const string VIEW_MATRIX;
163extern MX_GENSHADER_API
const string VIEW_INVERSE_MATRIX;
164extern MX_GENSHADER_API
const string VIEW_TRANSPOSE_MATRIX;
165extern MX_GENSHADER_API
const string VIEW_INVERSE_TRANSPOSE_MATRIX;
166extern MX_GENSHADER_API
const string PROJ_MATRIX;
167extern MX_GENSHADER_API
const string PROJ_INVERSE_MATRIX;
168extern MX_GENSHADER_API
const string PROJ_TRANSPOSE_MATRIX;
169extern MX_GENSHADER_API
const string PROJ_INVERSE_TRANSPOSE_MATRIX;
170extern MX_GENSHADER_API
const string WORLD_VIEW_MATRIX;
171extern MX_GENSHADER_API
const string VIEW_PROJECTION_MATRIX;
172extern MX_GENSHADER_API
const string WORLD_VIEW_PROJECTION_MATRIX;
173extern MX_GENSHADER_API
const string VIEW_POSITION;
174extern MX_GENSHADER_API
const string VIEW_DIRECTION;
175extern MX_GENSHADER_API
const string FRAME;
176extern MX_GENSHADER_API
const string TIME;
177extern MX_GENSHADER_API
const string GEOMPROP;
178extern MX_GENSHADER_API
const string ALPHA_THRESHOLD;
179extern MX_GENSHADER_API
const string NUM_ACTIVE_LIGHT_SOURCES;
180extern MX_GENSHADER_API
const string ENV_MATRIX;
181extern MX_GENSHADER_API
const string ENV_RADIANCE;
182extern MX_GENSHADER_API
const string ENV_RADIANCE_MIPS;
183extern MX_GENSHADER_API
const string ENV_RADIANCE_SAMPLES;
184extern MX_GENSHADER_API
const string ENV_IRRADIANCE;
185extern MX_GENSHADER_API
const string REFRACTION_TWO_SIDED;
186extern MX_GENSHADER_API
const string ALBEDO_TABLE;
187extern MX_GENSHADER_API
const string ALBEDO_TABLE_SIZE;
188extern MX_GENSHADER_API
const string AMB_OCC_MAP;
189extern MX_GENSHADER_API
const string AMB_OCC_GAIN;
190extern MX_GENSHADER_API
const string SHADOW_MAP;
191extern MX_GENSHADER_API
const string SHADOW_MATRIX;
192extern MX_GENSHADER_API
const string VERTEX_DATA_INSTANCE;
193extern MX_GENSHADER_API
const string LIGHT_DATA_INSTANCE;
194extern MX_GENSHADER_API
const string LIGHT_DATA_MAX_LIGHT_SOURCES;
198extern MX_GENSHADER_API
const string VERTEX_DATA;
199extern MX_GENSHADER_API
const string PRIVATE_UNIFORMS;
200extern MX_GENSHADER_API
const string PUBLIC_UNIFORMS;
201extern MX_GENSHADER_API
const string LIGHT_DATA;
202extern MX_GENSHADER_API
const string PIXEL_OUTPUTS;
205extern MX_GENSHADER_API
const string DIR_N;
206extern MX_GENSHADER_API
const string DIR_L;
207extern MX_GENSHADER_API
const string DIR_V;
208extern MX_GENSHADER_API
const string WORLD_POSITION;
209extern MX_GENSHADER_API
const string OCCLUSION;
216extern MX_GENSHADER_API
const string USER_DATA_BINDING_CONTEXT;
222extern MX_GENSHADER_API
const string VERTEX;
244 return std::make_shared<HwLightShaders>();
250 _shaders[type] = shader;
256 _shaders.erase(type);
269 auto it = _shaders.find(type);
270 return it != _shaders.end() ? it->second.get() :
nullptr;
274 const std::unordered_map<unsigned int, ShaderNodePtr>&
get()
const
280 std::unordered_map<unsigned int, ShaderNodePtr> _shaders;
295 void getClosureContexts(
const ShaderNode& node, vector<ClosureContext*>& cct)
const override;
301 static void bindLightShader(
const NodeDef& nodeDef,
unsigned int lightTypeId,
GenContext& context);
304 static void unbindLightShader(
unsigned int lightTypeId,
GenContext& context);
307 static void unbindLightShaders(
GenContext& context);
321 static const string CLOSURE_CONTEXT_SUFFIX_TRANSMISSION;
322 static const string CLOSURE_CONTEXT_SUFFIX_INDIRECT;
346 virtual void initialize() = 0;
356 ShaderStage& stage,
const std::string& structInstanceName,
357 const std::string& arraySuffix = EMPTY_STRING) = 0;
360MATERIALX_NAMESPACE_END
shared_ptr< Element > ElementPtr
A shared pointer to an Element.
Definition: Element.h:31
Context classes for shader generation.
shared_ptr< class HwShaderGenerator > HwShaderGeneratorPtr
Shared pointer to a HwShaderGenerator.
Definition: HwShaderGenerator.h:232
shared_ptr< class HwResourceBindingContext > HwResourceBindingContextPtr
Shared pointer to a HwResourceBindingContext.
Definition: HwShaderGenerator.h:234
shared_ptr< class HwLightShaders > HwLightShadersPtr
Shared pointer to a HwLightShaders.
Definition: HwShaderGenerator.h:230
Macros for declaring imported and exported symbols.
shared_ptr< Shader > ShaderPtr
Shared pointer to a Shader.
Definition: Library.h:34
Base shader generator class.
shared_ptr< class ShaderNode > ShaderNodePtr
Shared pointer to a ShaderNode.
Definition: ShaderNode.h:35
shared_ptr< Syntax > SyntaxPtr
Shared pointer to a Syntax.
Definition: Syntax.h:26
Class representing a context for closure evaluation.
Definition: GenContext.h:229
A context class for shader generation.
Definition: GenContext.h:31
Base class for custom user data needed during shader generation.
Definition: GenUserData.h:27
Hardware light shader user data.
Definition: HwShaderGenerator.h:239
void bind(unsigned int type, ShaderNodePtr shader)
Bind a light shader to a light type id.
Definition: HwShaderGenerator.h:248
const ShaderNode * get(unsigned int type) const
Return the light shader bound to the given light type, or nullptr if not light shader is bound to thi...
Definition: HwShaderGenerator.h:267
const std::unordered_map< unsigned int, ShaderNodePtr > & get() const
Return the map of bound light shaders.
Definition: HwShaderGenerator.h:274
static HwLightShadersPtr create()
Create and return a new instance.
Definition: HwShaderGenerator.h:242
void clear()
Clear all light shaders previously bound.
Definition: HwShaderGenerator.h:260
void unbind(unsigned int type)
Unbind a light shader previously bound to a light type id.
Definition: HwShaderGenerator.h:254
Class representing a context for resource binding for hardware resources.
Definition: HwShaderGenerator.h:341
Base class for shader generators targeting HW rendering.
Definition: HwShaderGenerator.h:286
static const string CLOSURE_CONTEXT_SUFFIX_REFLECTION
String constants for closure context suffixes.
Definition: HwShaderGenerator.h:320
ClosureContext _defDefault
Closure contexts for defining closure functions.
Definition: HwShaderGenerator.h:331
ClosureContextType
Types of closure contexts for HW.
Definition: HwShaderGenerator.h:311
A node definition element within a Document.
Definition: Definition.h:82
Base class for shader generators All third-party shader generators should derive from this class.
Definition: ShaderGenerator.h:31
Class representing a node in the shader generation DAG.
Definition: ShaderNode.h:323
A shader stage, containing the state and resulting source code for the stage.
Definition: ShaderStage.h:132
A block of variables in a shader stage.
Definition: ShaderStage.h:61
HW specific identifiers.
Definition: HwShaderGenerator.cpp:16
const string IN_POSITION
Default names for identifiers.
Definition: HwShaderGenerator.cpp:72
const string T_IN_POSITION
Token identifiers.
Definition: HwShaderGenerator.cpp:18
const string ATTR_TRANSPARENT
Attribute names.
Definition: HwShaderGenerator.cpp:138
const string VERTEX_INPUTS
Variable blocks names.
Definition: HwShaderGenerator.cpp:127
const string DIR_N
Variable names for lighting parameters.
Definition: HwShaderGenerator.cpp:133
const string USER_DATA_LIGHT_SHADERS
User data names.
Definition: HwShaderGenerator.cpp:140