HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GlslShaderGenerator Class Reference

#include <GlslShaderGenerator.h>

+ Inheritance diagram for GlslShaderGenerator:

Public Member Functions

 GlslShaderGenerator ()
 
ShaderPtr generate (const string &name, ElementPtr element, GenContext &context) const override
 
const stringgetTarget () const override
 Return a unique identifier for the target this generator is for. More...
 
virtual const stringgetVersion () const
 Return the version string for the GLSL version this generator is for. More...
 
void emitVariableDeclaration (const ShaderPort *variable, const string &qualifier, GenContext &context, ShaderStage &stage, bool assignValue=true) const override
 Emit a shader variable. More...
 
ShaderNodeImplPtr getImplementation (const NodeDef &nodedef, GenContext &context) const override
 
virtual string getVertexDataPrefix (const VariableBlock &vertexData) const
 Determine the prefix of vertex data variables. More...
 
- Public Member Functions inherited from HwShaderGenerator
void emitFunctionCall (const ShaderNode &node, GenContext &context, ShaderStage &stage) const override
 Add the function call for a single node. More...
 
virtual void addStageLightingUniforms (GenContext &context, ShaderStage &stage) const
 Emit code for active light count definitions and uniforms. More...
 
void getClosureContexts (const ShaderNode &node, vector< ClosureContext * > &cct) const override
 Return the closure contexts defined for the given node. More...
 
- Public Member Functions inherited from ShaderGenerator
virtual ~ShaderGenerator ()
 Destructor. More...
 
virtual void emitScopeBegin (ShaderStage &stage, Syntax::Punctuation punc=Syntax::CURLY_BRACKETS) const
 Start a new scope using the given bracket type. More...
 
virtual void emitScopeEnd (ShaderStage &stage, bool semicolon=false, bool newline=true) const
 End the current scope. More...
 
virtual void emitLineBegin (ShaderStage &stage) const
 Start a new line. More...
 
virtual void emitLineEnd (ShaderStage &stage, bool semicolon=true) const
 End the current line. More...
 
virtual void emitLineBreak (ShaderStage &stage) const
 Add a line break. More...
 
virtual void emitString (const string &str, ShaderStage &stage) const
 Add a string. More...
 
virtual void emitLine (const string &str, ShaderStage &stage, bool semicolon=true) const
 Add a single line of code, optionally appending a semicolon. More...
 
virtual void emitComment (const string &str, ShaderStage &stage) const
 Add a single line code comment. More...
 
virtual void emitBlock (const string &str, const FilePath &sourceFilename, GenContext &context, ShaderStage &stage) const
 Add a block of code. More...
 
virtual void emitLibraryInclude (const FilePath &filename, GenContext &context, ShaderStage &stage) const
 
template<typename T >
void emitValue (const T &value, ShaderStage &stage) const
 Add a value. More...
 
virtual void emitFunctionDefinition (const ShaderNode &node, GenContext &context, ShaderStage &stage) const
 Add the function definition for a single node. More...
 
virtual void emitFunctionDefinitions (const ShaderGraph &graph, GenContext &context, ShaderStage &stage) const
 Add all function definitions for a graph. More...
 
virtual void emitFunctionCall (const ShaderNode &node, GenContext &context, ShaderStage &stage, bool checkScope) const
 
virtual void emitFunctionCalls (const ShaderGraph &graph, GenContext &context, ShaderStage &stage, uint32_t classification=0u) const
 
virtual void emitDependentFunctionCalls (const ShaderNode &node, GenContext &context, ShaderStage &stage, uint32_t classification=0u) const
 
virtual void emitFunctionBodyBegin (const ShaderNode &node, GenContext &context, ShaderStage &stage, Syntax::Punctuation punc=Syntax::CURLY_BRACKETS) const
 Emit code for starting a new function body. More...
 
virtual void emitFunctionBodyEnd (const ShaderNode &node, GenContext &context, ShaderStage &stage) const
 Emit code for ending a function body. More...
 
virtual void emitTypeDefinitions (GenContext &context, ShaderStage &stage) const
 Emit type definitions for all data types that needs it. More...
 
virtual void emitInput (const ShaderInput *input, GenContext &context, ShaderStage &stage) const
 
virtual void emitOutput (const ShaderOutput *output, bool includeType, bool assignValue, GenContext &context, ShaderStage &stage) const
 
virtual void emitVariableDeclarations (const VariableBlock &block, const string &qualifier, const string &separator, GenContext &context, ShaderStage &stage, bool assignValue=true) const
 
virtual string getUpstreamResult (const ShaderInput *input, GenContext &context) const
 Return the result of an upstream connection or value for an input. More...
 
const SyntaxgetSyntax () const
 Return the syntax object for the language used by the code generator. More...
 
void registerImplementation (const string &name, CreatorFunction< ShaderNodeImpl > creator)
 Register a shader node implementation for a given implementation element name. More...
 
void registerImplementation (const StringVec &nameVec, CreatorFunction< ShaderNodeImpl > creator)
 Register a shader node implementation for a given set of implementation element names. More...
 
bool implementationRegistered (const string &name) const
 Determine if a shader node implementation has been registered for a given implementation element name. More...
 
void setColorManagementSystem (ColorManagementSystemPtr colorManagementSystem)
 Sets the color management system. More...
 
ColorManagementSystemPtr getColorManagementSystem () const
 Returns the color management system. More...
 
void setUnitSystem (UnitSystemPtr unitSystem)
 Sets the unit system. More...
 
UnitSystemPtr getUnitSystem () const
 Returns the unit system. More...
 
const StringMapgetTokenSubstitutions () const
 Return the map of token substitutions used by the generator. More...
 
virtual void registerShaderMetadata (const DocumentPtr &doc, GenContext &context) const
 

Static Public Member Functions

static ShaderGeneratorPtr create ()
 
- Static Public Member Functions inherited from HwShaderGenerator
static void bindLightShader (const NodeDef &nodeDef, unsigned int lightTypeId, GenContext &context)
 
static void unbindLightShader (unsigned int lightTypeId, GenContext &context)
 Unbind a light shader previously bound to the given light type id. More...
 
static void unbindLightShaders (GenContext &context)
 Unbind all light shaders previously bound. More...
 

Static Public Attributes

static const string TARGET
 Unique identifier for this generator target. More...
 
static const string VERSION
 Version string for the generator target. More...
 
- Static Public Attributes inherited from HwShaderGenerator
static const string CLOSURE_CONTEXT_SUFFIX_REFLECTION
 String constants for closure context suffixes. More...
 
static const string CLOSURE_CONTEXT_SUFFIX_TRANSMISSION
 
static const string CLOSURE_CONTEXT_SUFFIX_INDIRECT
 

Protected Member Functions

virtual void emitVertexStage (const ShaderGraph &graph, GenContext &context, ShaderStage &stage) const
 
virtual void emitPixelStage (const ShaderGraph &graph, GenContext &context, ShaderStage &stage) const
 
virtual void emitDirectives (GenContext &context, ShaderStage &stage) const
 
virtual void emitConstants (GenContext &context, ShaderStage &stage) const
 
virtual void emitUniforms (GenContext &context, ShaderStage &stage) const
 
virtual void emitLightData (GenContext &context, ShaderStage &stage) const
 
virtual void emitInputs (GenContext &context, ShaderStage &stage) const
 
virtual void emitOutputs (GenContext &context, ShaderStage &stage) const
 
virtual HwResourceBindingContextPtr getResourceBindingContext (GenContext &context) const
 
virtual bool requiresLighting (const ShaderGraph &graph) const
 
virtual void emitSpecularEnvironment (GenContext &context, ShaderStage &stage) const
 Emit specular environment lookup code. More...
 
virtual void emitTransmissionRender (GenContext &context, ShaderStage &stage) const
 Emit transmission rendering code. More...
 
virtual void emitLightFunctionDefinitions (const ShaderGraph &graph, GenContext &context, ShaderStage &stage) const
 Emit function definitions for lighting code. More...
 
- Protected Member Functions inherited from HwShaderGenerator
 HwShaderGenerator (SyntaxPtr syntax)
 
virtual ShaderPtr createShader (const string &name, ElementPtr element, GenContext &context) const
 Create and initialize a new HW shader for shader generation. More...
 
- Protected Member Functions inherited from ShaderGenerator
 ShaderGenerator (SyntaxPtr syntax)
 Protected constructor. More...
 
virtual ShaderStagePtr createStage (const string &name, Shader &shader) const
 Create a new stage in a shader. More...
 
void setFunctionName (const string &functionName, ShaderStage &stage) const
 Set function name for a stage. More...
 
void replaceTokens (const StringMap &substitutions, ShaderStage &stage) const
 Replace tokens with identifiers according to the given substitutions map. More...
 
void createVariables (ShaderGraphPtr graph, GenContext &context, Shader &shader) const
 

Static Protected Member Functions

static void toVec4 (const TypeDesc *type, string &variable)
 

Protected Attributes

vector< ShaderNodePtr_lightSamplingNodes
 Nodes used internally for light sampling. More...
 
- Protected Attributes inherited from HwShaderGenerator
ClosureContext _defDefault
 Closure contexts for defining closure functions. More...
 
ClosureContext _defReflection
 
ClosureContext _defTransmission
 
ClosureContext _defIndirect
 
ClosureContext _defEmission
 
- Protected Attributes inherited from ShaderGenerator
SyntaxPtr _syntax
 
Factory< ShaderNodeImpl_implFactory
 
ColorManagementSystemPtr _colorManagementSystem
 
UnitSystemPtr _unitSystem
 
StringMap _tokenSubstitutions
 
friend ShaderGraph
 

Additional Inherited Members

- Public Types inherited from HwShaderGenerator
enum  ClosureContextType {
  DEFAULT, REFLECTION, TRANSMISSION, INDIRECT,
  EMISSION
}
 Types of closure contexts for HW. More...
 
- Static Protected Attributes inherited from ShaderGenerator
static const string T_FILE_TRANSFORM_UV
 

Detailed Description

Base class for GLSL (OpenGL Shading Language) code generation. A generator for a specific GLSL target should be derived from this class.

Definition at line 22 of file GlslShaderGenerator.h.

Constructor & Destructor Documentation

GlslShaderGenerator::GlslShaderGenerator ( )

Member Function Documentation

static ShaderGeneratorPtr GlslShaderGenerator::create ( )
inlinestatic

Definition at line 27 of file GlslShaderGenerator.h.

virtual void GlslShaderGenerator::emitConstants ( GenContext context,
ShaderStage stage 
) const
protectedvirtual
virtual void GlslShaderGenerator::emitDirectives ( GenContext context,
ShaderStage stage 
) const
protectedvirtual

Reimplemented in VkShaderGenerator, and EsslShaderGenerator.

virtual void GlslShaderGenerator::emitInputs ( GenContext context,
ShaderStage stage 
) const
protectedvirtual

Reimplemented in VkShaderGenerator, and EsslShaderGenerator.

virtual void GlslShaderGenerator::emitLightData ( GenContext context,
ShaderStage stage 
) const
protectedvirtual
virtual void GlslShaderGenerator::emitLightFunctionDefinitions ( const ShaderGraph graph,
GenContext context,
ShaderStage stage 
) const
protectedvirtual

Emit function definitions for lighting code.

virtual void GlslShaderGenerator::emitOutputs ( GenContext context,
ShaderStage stage 
) const
protectedvirtual

Reimplemented in VkShaderGenerator, and EsslShaderGenerator.

virtual void GlslShaderGenerator::emitPixelStage ( const ShaderGraph graph,
GenContext context,
ShaderStage stage 
) const
protectedvirtual
virtual void GlslShaderGenerator::emitSpecularEnvironment ( GenContext context,
ShaderStage stage 
) const
protectedvirtual

Emit specular environment lookup code.

virtual void GlslShaderGenerator::emitTransmissionRender ( GenContext context,
ShaderStage stage 
) const
protectedvirtual

Emit transmission rendering code.

virtual void GlslShaderGenerator::emitUniforms ( GenContext context,
ShaderStage stage 
) const
protectedvirtual

Reimplemented in EsslShaderGenerator.

void GlslShaderGenerator::emitVariableDeclaration ( const ShaderPort variable,
const string qualifier,
GenContext context,
ShaderStage stage,
bool  assignValue = true 
) const
overridevirtual

Emit a shader variable.

Reimplemented from ShaderGenerator.

virtual void GlslShaderGenerator::emitVertexStage ( const ShaderGraph graph,
GenContext context,
ShaderStage stage 
) const
protectedvirtual
ShaderPtr GlslShaderGenerator::generate ( const string name,
ElementPtr  element,
GenContext context 
) const
overridevirtual

Generate a shader starting from the given element, translating the element and all dependencies upstream into shader code.

Reimplemented from ShaderGenerator.

ShaderNodeImplPtr GlslShaderGenerator::getImplementation ( const NodeDef nodedef,
GenContext context 
) const
overridevirtual

Return a registered shader node implementation given an implementation element. The element must be an Implementation or a NodeGraph acting as implementation.

Reimplemented from ShaderGenerator.

virtual HwResourceBindingContextPtr GlslShaderGenerator::getResourceBindingContext ( GenContext context) const
protectedvirtual

Reimplemented in VkShaderGenerator, and EsslShaderGenerator.

const string& GlslShaderGenerator::getTarget ( ) const
inlineoverridevirtual

Return a unique identifier for the target this generator is for.

Reimplemented from ShaderGenerator.

Reimplemented in VkShaderGenerator.

Definition at line 34 of file GlslShaderGenerator.h.

virtual const string& GlslShaderGenerator::getVersion ( ) const
inlinevirtual

Return the version string for the GLSL version this generator is for.

Reimplemented in VkShaderGenerator, and EsslShaderGenerator.

Definition at line 37 of file GlslShaderGenerator.h.

virtual string GlslShaderGenerator::getVertexDataPrefix ( const VariableBlock vertexData) const
virtual

Determine the prefix of vertex data variables.

Reimplemented in VkShaderGenerator, and EsslShaderGenerator.

virtual bool GlslShaderGenerator::requiresLighting ( const ShaderGraph graph) const
protectedvirtual

Logic to indicate whether code to support direct lighting should be emitted. By default if the graph is classified as a shader, or BSDF node then lighting is assumed to be required. Derived classes can override this logic.

static void GlslShaderGenerator::toVec4 ( const TypeDesc type,
string variable 
)
staticprotected

Member Data Documentation

vector<ShaderNodePtr> GlslShaderGenerator::_lightSamplingNodes
protected

Nodes used internally for light sampling.

Definition at line 87 of file GlslShaderGenerator.h.

const string GlslShaderGenerator::TARGET
static

Unique identifier for this generator target.

Definition at line 52 of file GlslShaderGenerator.h.

const string GlslShaderGenerator::VERSION
static

Version string for the generator target.

Definition at line 55 of file GlslShaderGenerator.h.


The documentation for this class was generated from the following file: