6#ifndef MATERIALX_HWSHADERGENERATOR_H
7#define MATERIALX_HWSHADERGENERATOR_H
17MATERIALX_NAMESPACE_BEGIN
91extern MX_GENSHADER_API
const string T_IN_NORMAL;
92extern MX_GENSHADER_API
const string T_IN_TANGENT;
93extern MX_GENSHADER_API
const string T_IN_BITANGENT;
94extern MX_GENSHADER_API
const string T_IN_TEXCOORD;
95extern MX_GENSHADER_API
const string T_IN_GEOMPROP;
96extern MX_GENSHADER_API
const string T_IN_COLOR;
97extern MX_GENSHADER_API
const string T_POSITION_WORLD;
98extern MX_GENSHADER_API
const string T_NORMAL_WORLD;
99extern MX_GENSHADER_API
const string T_TANGENT_WORLD;
100extern MX_GENSHADER_API
const string T_BITANGENT_WORLD;
101extern MX_GENSHADER_API
const string T_POSITION_OBJECT;
102extern MX_GENSHADER_API
const string T_NORMAL_OBJECT;
103extern MX_GENSHADER_API
const string T_TANGENT_OBJECT;
104extern MX_GENSHADER_API
const string T_BITANGENT_OBJECT;
105extern MX_GENSHADER_API
const string T_TEXCOORD;
106extern MX_GENSHADER_API
const string T_COLOR;
107extern MX_GENSHADER_API
const string T_WORLD_MATRIX;
108extern MX_GENSHADER_API
const string T_WORLD_INVERSE_MATRIX;
109extern MX_GENSHADER_API
const string T_WORLD_TRANSPOSE_MATRIX;
110extern MX_GENSHADER_API
const string T_WORLD_INVERSE_TRANSPOSE_MATRIX;
111extern MX_GENSHADER_API
const string T_VIEW_MATRIX;
112extern MX_GENSHADER_API
const string T_VIEW_INVERSE_MATRIX;
113extern MX_GENSHADER_API
const string T_VIEW_TRANSPOSE_MATRIX;
114extern MX_GENSHADER_API
const string T_VIEW_INVERSE_TRANSPOSE_MATRIX;
115extern MX_GENSHADER_API
const string T_PROJ_MATRIX;
116extern MX_GENSHADER_API
const string T_PROJ_INVERSE_MATRIX;
117extern MX_GENSHADER_API
const string T_PROJ_TRANSPOSE_MATRIX;
118extern MX_GENSHADER_API
const string T_PROJ_INVERSE_TRANSPOSE_MATRIX;
119extern MX_GENSHADER_API
const string T_WORLD_VIEW_MATRIX;
120extern MX_GENSHADER_API
const string T_VIEW_PROJECTION_MATRIX;
121extern MX_GENSHADER_API
const string T_WORLD_VIEW_PROJECTION_MATRIX;
122extern MX_GENSHADER_API
const string T_VIEW_POSITION;
123extern MX_GENSHADER_API
const string T_VIEW_DIRECTION;
124extern MX_GENSHADER_API
const string T_FRAME;
125extern MX_GENSHADER_API
const string T_TIME;
126extern MX_GENSHADER_API
const string T_GEOMPROP;
127extern MX_GENSHADER_API
const string T_ALPHA_THRESHOLD;
128extern MX_GENSHADER_API
const string T_NUM_ACTIVE_LIGHT_SOURCES;
129extern MX_GENSHADER_API
const string T_ENV_MATRIX;
130extern MX_GENSHADER_API
const string T_ENV_RADIANCE;
131extern MX_GENSHADER_API
const string T_ENV_RADIANCE_SAMPLER2D;
132extern MX_GENSHADER_API
const string T_ENV_RADIANCE_MIPS;
133extern MX_GENSHADER_API
const string T_ENV_RADIANCE_SAMPLES;
134extern MX_GENSHADER_API
const string T_ENV_IRRADIANCE;
135extern MX_GENSHADER_API
const string T_ENV_IRRADIANCE_SAMPLER2D;
136extern MX_GENSHADER_API
const string T_ENV_LIGHT_INTENSITY;
137extern MX_GENSHADER_API
const string T_ENV_PREFILTER_MIP;
138extern MX_GENSHADER_API
const string T_REFRACTION_TWO_SIDED;
139extern MX_GENSHADER_API
const string T_ALBEDO_TABLE;
140extern MX_GENSHADER_API
const string T_ALBEDO_TABLE_SIZE;
141extern MX_GENSHADER_API
const string T_AMB_OCC_MAP;
142extern MX_GENSHADER_API
const string T_AMB_OCC_GAIN;
143extern MX_GENSHADER_API
const string T_SHADOW_MAP;
144extern MX_GENSHADER_API
const string T_SHADOW_MATRIX;
145extern MX_GENSHADER_API
const string T_VERTEX_DATA_INSTANCE;
146extern MX_GENSHADER_API
const string T_LIGHT_DATA_INSTANCE;
147extern MX_GENSHADER_API
const string T_TEX_SAMPLER_SAMPLER2D;
148extern MX_GENSHADER_API
const string T_TEX_SAMPLER_SIGNATURE;
153extern MX_GENSHADER_API
const string IN_NORMAL;
154extern MX_GENSHADER_API
const string IN_TANGENT;
155extern MX_GENSHADER_API
const string IN_BITANGENT;
156extern MX_GENSHADER_API
const string IN_TEXCOORD;
157extern MX_GENSHADER_API
const string IN_GEOMPROP;
158extern MX_GENSHADER_API
const string IN_COLOR;
159extern MX_GENSHADER_API
const string POSITION_WORLD;
160extern MX_GENSHADER_API
const string NORMAL_WORLD;
161extern MX_GENSHADER_API
const string TANGENT_WORLD;
162extern MX_GENSHADER_API
const string BITANGENT_WORLD;
163extern MX_GENSHADER_API
const string POSITION_OBJECT;
164extern MX_GENSHADER_API
const string NORMAL_OBJECT;
165extern MX_GENSHADER_API
const string TANGENT_OBJECT;
166extern MX_GENSHADER_API
const string BITANGENT_OBJECT;
167extern MX_GENSHADER_API
const string TEXCOORD;
168extern MX_GENSHADER_API
const string COLOR;
169extern MX_GENSHADER_API
const string WORLD_MATRIX;
170extern MX_GENSHADER_API
const string WORLD_INVERSE_MATRIX;
171extern MX_GENSHADER_API
const string WORLD_TRANSPOSE_MATRIX;
172extern MX_GENSHADER_API
const string WORLD_INVERSE_TRANSPOSE_MATRIX;
173extern MX_GENSHADER_API
const string VIEW_MATRIX;
174extern MX_GENSHADER_API
const string VIEW_INVERSE_MATRIX;
175extern MX_GENSHADER_API
const string VIEW_TRANSPOSE_MATRIX;
176extern MX_GENSHADER_API
const string VIEW_INVERSE_TRANSPOSE_MATRIX;
177extern MX_GENSHADER_API
const string PROJ_MATRIX;
178extern MX_GENSHADER_API
const string PROJ_INVERSE_MATRIX;
179extern MX_GENSHADER_API
const string PROJ_TRANSPOSE_MATRIX;
180extern MX_GENSHADER_API
const string PROJ_INVERSE_TRANSPOSE_MATRIX;
181extern MX_GENSHADER_API
const string WORLD_VIEW_MATRIX;
182extern MX_GENSHADER_API
const string VIEW_PROJECTION_MATRIX;
183extern MX_GENSHADER_API
const string WORLD_VIEW_PROJECTION_MATRIX;
184extern MX_GENSHADER_API
const string VIEW_POSITION;
185extern MX_GENSHADER_API
const string VIEW_DIRECTION;
186extern MX_GENSHADER_API
const string FRAME;
187extern MX_GENSHADER_API
const string TIME;
188extern MX_GENSHADER_API
const string GEOMPROP;
189extern MX_GENSHADER_API
const string ALPHA_THRESHOLD;
190extern MX_GENSHADER_API
const string NUM_ACTIVE_LIGHT_SOURCES;
191extern MX_GENSHADER_API
const string ENV_MATRIX;
192extern MX_GENSHADER_API
const string ENV_RADIANCE;
193extern MX_GENSHADER_API
const string ENV_RADIANCE_SPLIT;
194extern MX_GENSHADER_API
const string ENV_RADIANCE_SAMPLER2D;
195extern MX_GENSHADER_API
const string ENV_RADIANCE_SAMPLER2D_SPLIT;
196extern MX_GENSHADER_API
const string ENV_RADIANCE_MIPS;
197extern MX_GENSHADER_API
const string ENV_RADIANCE_SAMPLES;
198extern MX_GENSHADER_API
const string ENV_IRRADIANCE;
199extern MX_GENSHADER_API
const string ENV_IRRADIANCE_SPLIT;
200extern MX_GENSHADER_API
const string ENV_IRRADIANCE_SAMPLER2D;
201extern MX_GENSHADER_API
const string ENV_IRRADIANCE_SAMPLER2D_SPLIT;
202extern MX_GENSHADER_API
const string ENV_LIGHT_INTENSITY;
203extern MX_GENSHADER_API
const string ENV_PREFILTER_MIP;
204extern MX_GENSHADER_API
const string REFRACTION_TWO_SIDED;
205extern MX_GENSHADER_API
const string ALBEDO_TABLE;
206extern MX_GENSHADER_API
const string ALBEDO_TABLE_SIZE;
207extern MX_GENSHADER_API
const string AMB_OCC_MAP;
208extern MX_GENSHADER_API
const string AMB_OCC_GAIN;
209extern MX_GENSHADER_API
const string SHADOW_MAP;
210extern MX_GENSHADER_API
const string SHADOW_MATRIX;
211extern MX_GENSHADER_API
const string VERTEX_DATA_INSTANCE;
212extern MX_GENSHADER_API
const string LIGHT_DATA_INSTANCE;
213extern MX_GENSHADER_API
const string LIGHT_DATA_MAX_LIGHT_SOURCES;
217extern MX_GENSHADER_API
const string TEX_SAMPLER_SAMPLER2D_SPLIT;
218extern MX_GENSHADER_API
const string TEX_SAMPLER_SIGNATURE;
219extern MX_GENSHADER_API
const string TEX_SAMPLER_SIGNATURE_SPLIT;
223extern MX_GENSHADER_API
const string VERTEX_DATA;
224extern MX_GENSHADER_API
const string PRIVATE_UNIFORMS;
225extern MX_GENSHADER_API
const string PUBLIC_UNIFORMS;
226extern MX_GENSHADER_API
const string LIGHT_DATA;
227extern MX_GENSHADER_API
const string PIXEL_OUTPUTS;
231extern MX_GENSHADER_API
const string CLOSURE_DATA_ARG;
232extern MX_GENSHADER_API
const string DIR_N;
233extern MX_GENSHADER_API
const string DIR_L;
234extern MX_GENSHADER_API
const string DIR_V;
235extern MX_GENSHADER_API
const string WORLD_POSITION;
236extern MX_GENSHADER_API
const string OCCLUSION;
243extern MX_GENSHADER_API
const string USER_DATA_BINDING_CONTEXT;
252extern MX_GENSHADER_API
const string VERTEX;
274 return std::make_shared<HwLightShaders>();
280 _shaders[type] = shader;
286 _shaders.erase(type);
299 auto it = _shaders.find(type);
300 return it != _shaders.end() ? it->second.get() :
nullptr;
304 const std::unordered_map<unsigned int, ShaderNodePtr>&
get()
const
310 std::unordered_map<unsigned int, ShaderNodePtr> _shaders;
369 HwImplementation() { }
382 static const string INDEX;
383 static const string GEOMPROP;
394 virtual void initialize() = 0;
404 ShaderStage& stage,
const std::string& structInstanceName,
405 const std::string& arraySuffix = EMPTY_STRING) = 0;
408MATERIALX_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:262
shared_ptr< class HwResourceBindingContext > HwResourceBindingContextPtr
Shared pointer to a HwResourceBindingContext.
Definition HwShaderGenerator.h:264
shared_ptr< class HwLightShaders > HwLightShadersPtr
Shared pointer to a HwLightShaders.
Definition HwShaderGenerator.h:260
Macros for declaring imported and exported symbols.
shared_ptr< Shader > ShaderPtr
Shared pointer to a Shader.
Definition Library.h:33
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:28
A context class for shader generation.
Definition GenContext.h:30
bool isEditable(const ShaderInput &input) const override
Returns true if an input is editable by users.
static const string SPACE
Internal string constants.
Definition HwShaderGenerator.h:381
Hardware light shader user data.
Definition HwShaderGenerator.h:269
void bind(unsigned int type, ShaderNodePtr shader)
Bind a light shader to a light type id.
Definition HwShaderGenerator.h:278
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:297
const std::unordered_map< unsigned int, ShaderNodePtr > & get() const
Return the map of bound light shaders.
Definition HwShaderGenerator.h:304
static HwLightShadersPtr create()
Create and return a new instance.
Definition HwShaderGenerator.h:272
void clear()
Clear all light shaders previously bound.
Definition HwShaderGenerator.h:290
void unbind(unsigned int type)
Unbind a light shader previously bound to a light type id.
Definition HwShaderGenerator.h:284
Class representing a context for resource binding for hardware resources.
Definition HwShaderGenerator.h:389
Base class for shader generators targeting HW rendering.
Definition HwShaderGenerator.h:316
static void unbindLightShader(unsigned int lightTypeId, GenContext &context)
Unbind a light shader previously bound to the given light type id.
virtual ShaderPtr createShader(const string &name, ElementPtr element, GenContext &context) const
Create and initialize a new HW shader for shader generation.
virtual void addStageLightingUniforms(GenContext &context, ShaderStage &stage) const
Emit code for active light count definitions and uniforms.
static void bindLightShader(const NodeDef &nodeDef, unsigned int lightTypeId, GenContext &context)
Bind a light shader to a light type id, for usage in surface shaders created by the generator.
static void unbindLightShaders(GenContext &context)
Unbind all light shaders previously bound.
bool nodeNeedsClosureData(const ShaderNode &node) const override
Return true if the node needs the ClosureData struct added.
ClosureContextType
Types of closure contexts for HW.
Definition HwShaderGenerator.h:344
virtual string getVertexDataPrefix(const VariableBlock &vertexData) const =0
Determine the prefix of vertex data variables.
A node definition element within a Document.
Definition Definition.h:82
ShaderGenerator(TypeSystemPtr typeSystem, SyntaxPtr syntax)
Protected constructor.
Class representing a node in the shader generation DAG.
Definition ShaderNode.h:320
ShaderNodeImpl()
Protected constructor.
A shader stage, containing the state and resulting source code for the stage.
Definition ShaderStage.h:141
A type descriptor for MaterialX data types.
Definition TypeDesc.h:40
A block of variables in a shader stage.
Definition ShaderStage.h:63
HW specific identifiers.
Definition HwShaderGenerator.h:88
MX_GENSHADER_API const string CLOSURE_DATA_TYPE
Variable names for lighting parameters.
MX_GENSHADER_API const string IN_POSITION
Default names for identifiers.
MX_GENSHADER_API const TypeDesc ClosureDataType
Type Descriptor for closure context data.
MX_GENSHADER_API const string T_IN_POSITION
Token identifiers.
MX_GENSHADER_API const string ATTR_TRANSPARENT
Attribute names.
MX_GENSHADER_API const string TEX_SAMPLER_SAMPLER2D
Texture sampler parameters (for both combined and separate values)
MX_GENSHADER_API const string VERTEX_INPUTS
Variable blocks names.
MX_GENSHADER_API const string USER_DATA_LIGHT_SHADERS
User data names.