Open CASCADE Technology  7.6.0
Public Member Functions | Static Public Member Functions | Static Public Attributes

Graphic3d_ShaderProgram Class Reference

This class is responsible for managing shader programs. More...

#include <Graphic3d_ShaderProgram.hxx>

Inheritance diagram for Graphic3d_ShaderProgram:
Inheritance graph
[legend]

Public Member Functions

 Graphic3d_ShaderProgram ()
 Creates new empty program object. More...
 
virtual ~Graphic3d_ShaderProgram ()
 Releases resources of program object. More...
 
virtual Standard_Boolean IsDone () const
 Checks if the program object is valid or not. More...
 
const TCollection_AsciiStringGetId () const
 Returns unique ID used to manage resource in graphic driver. More...
 
void SetId (const TCollection_AsciiString &theId)
 Sets unique ID used to manage resource in graphic driver. WARNING! Graphic3d_ShaderProgram constructor generates a unique id for proper resource management; however if application overrides it, it is responsibility of application to avoid name collisions. More...
 
const TCollection_AsciiStringHeader () const
 Returns GLSL header (version code and extensions). More...
 
void SetHeader (const TCollection_AsciiString &theHeader)
 Setup GLSL header containing language version code and used extensions. Will be prepended to the very beginning of the source code. Example: More...
 
void AppendToHeader (const TCollection_AsciiString &theHeaderLine)
 Append line to GLSL header. More...
 
Standard_Integer NbLightsMax () const
 Return the length of array of light sources (THE_MAX_LIGHTS), to be used for initialization occLightSources. Default value is THE_MAX_LIGHTS_DEFAULT. More...
 
void SetNbLightsMax (Standard_Integer theNbLights)
 Specify the length of array of light sources (THE_MAX_LIGHTS). More...
 
Standard_Integer NbShadowMaps () const
 Return the length of array of shadow maps (THE_NB_SHADOWMAPS); 0 by default. More...
 
void SetNbShadowMaps (Standard_Integer theNbMaps)
 Specify the length of array of shadow maps (THE_NB_SHADOWMAPS). More...
 
Standard_Integer NbClipPlanesMax () const
 Return the length of array of clipping planes (THE_MAX_CLIP_PLANES), to be used for initialization occClipPlaneEquations. Default value is THE_MAX_CLIP_PLANES_DEFAULT. More...
 
void SetNbClipPlanesMax (Standard_Integer theNbPlanes)
 Specify the length of array of clipping planes (THE_MAX_CLIP_PLANES). More...
 
Standard_Boolean AttachShader (const Handle< Graphic3d_ShaderObject > &theShader)
 Attaches shader object to the program object. More...
 
Standard_Boolean DetachShader (const Handle< Graphic3d_ShaderObject > &theShader)
 Detaches shader object from the program object. More...
 
const Graphic3d_ShaderObjectListShaderObjects () const
 Returns list of attached shader objects. More...
 
const Graphic3d_ShaderVariableListVariables () const
 The list of currently pushed but not applied custom uniform variables. This list is automatically cleared after applying to GLSL program. More...
 
const Graphic3d_ShaderAttributeListVertexAttributes () const
 Return the list of custom vertex attributes. More...
 
void SetVertexAttributes (const Graphic3d_ShaderAttributeList &theAttributes)
 Assign the list of custom vertex attributes. Should be done before GLSL program initialization. More...
 
Standard_Integer NbFragmentOutputs () const
 Returns the number (1+) of Fragment Shader outputs to be written to (more than 1 can be in case of multiple draw buffers); 1 by default. More...
 
void SetNbFragmentOutputs (const Standard_Integer theNbOutputs)
 Sets the number of Fragment Shader outputs to be written to. Should be done before GLSL program initialization. More...
 
Standard_Boolean HasAlphaTest () const
 Return true if Fragment Shader should perform alpha test; FALSE by default. More...
 
void SetAlphaTest (Standard_Boolean theAlphaTest)
 Set if Fragment Shader should perform alpha test. Note that this flag is designed for usage with - custom shader program may discard fragment regardless this flag. More...
 
Standard_Boolean HasDefaultSampler () const
 Return TRUE if standard program header should define default texture sampler occSampler0; TRUE by default for compatibility. More...
 
void SetDefaultSampler (Standard_Boolean theHasDefSampler)
 Set if standard program header should define default texture sampler occSampler0. More...
 
Graphic3d_RenderTransparentMethod OitOutput () const
 Return if Fragment Shader color should output to OIT buffers; OFF by default. More...
 
void SetOitOutput (Graphic3d_RenderTransparentMethod theOutput)
 Set if Fragment Shader color should output to OIT buffers. Note that weighted OIT also requires at least 2 Fragment Outputs (color + coverage), and Depth Peeling requires at least 3 Fragment Outputs (depth + front color + back color),. More...
 
Standard_Boolean IsPBR () const
 Return TRUE if standard program header should define functions and variables used in PBR pipeline. FALSE by default. More...
 
void SetPBR (Standard_Boolean theIsPBR)
 Sets whether standard program header should define functions and variables used in PBR pipeline. More...
 
Standard_Integer TextureSetBits () const
 Return texture units declared within the program,. More...
 
void SetTextureSetBits (Standard_Integer theBits)
 Set texture units declared within the program. More...
 
template<class T >
Standard_Boolean PushVariable (const TCollection_AsciiString &theName, const T &theValue)
 Pushes custom uniform variable to the program. The list of pushed variables is automatically cleared after applying to GLSL program. Thus after program recreation even unchanged uniforms should be pushed anew. More...
 
void ClearVariables ()
 Removes all custom uniform variables from the program. More...
 
Standard_Boolean PushVariableFloat (const TCollection_AsciiString &theName, const float theValue)
 Pushes float uniform. More...
 
Standard_Boolean PushVariableVec2 (const TCollection_AsciiString &theName, const Graphic3d_Vec2 &theValue)
 Pushes vec2 uniform. More...
 
Standard_Boolean PushVariableVec3 (const TCollection_AsciiString &theName, const Graphic3d_Vec3 &theValue)
 Pushes vec3 uniform. More...
 
Standard_Boolean PushVariableVec4 (const TCollection_AsciiString &theName, const Graphic3d_Vec4 &theValue)
 Pushes vec4 uniform. More...
 
Standard_Boolean PushVariableInt (const TCollection_AsciiString &theName, const int theValue)
 Pushes int uniform. More...
 
Standard_Boolean PushVariableVec2i (const TCollection_AsciiString &theName, const Graphic3d_Vec2i &theValue)
 Pushes vec2i uniform. More...
 
Standard_Boolean PushVariableVec3i (const TCollection_AsciiString &theName, const Graphic3d_Vec3i &theValue)
 Pushes vec3i uniform. More...
 
Standard_Boolean PushVariableVec4i (const TCollection_AsciiString &theName, const Graphic3d_Vec4i &theValue)
 Pushes vec4i uniform. More...
 
- Public Member Functions inherited from Standard_Transient
 Standard_Transient ()
 Empty constructor. More...
 
 Standard_Transient (const Standard_Transient &)
 Copy constructor – does nothing. More...
 
Standard_Transientoperator= (const Standard_Transient &)
 Assignment operator, needed to avoid copying reference counter. More...
 
virtual ~Standard_Transient ()
 Destructor must be virtual. More...
 
virtual void Delete () const
 Memory deallocator for transient classes. More...
 
virtual const opencascade::handle< Standard_Type > & DynamicType () const
 Returns a type descriptor about this object. More...
 
Standard_Boolean IsInstance (const opencascade::handle< Standard_Type > &theType) const
 Returns a true value if this is an instance of Type. More...
 
Standard_Boolean IsInstance (const Standard_CString theTypeName) const
 Returns a true value if this is an instance of TypeName. More...
 
Standard_Boolean IsKind (const opencascade::handle< Standard_Type > &theType) const
 Returns true if this is an instance of Type or an instance of any class that inherits from Type. Note that multiple inheritance is not supported by OCCT RTTI mechanism. More...
 
Standard_Boolean IsKind (const Standard_CString theTypeName) const
 Returns true if this is an instance of TypeName or an instance of any class that inherits from TypeName. Note that multiple inheritance is not supported by OCCT RTTI mechanism. More...
 
Standard_TransientThis () const
 Returns non-const pointer to this object (like const_cast). For protection against creating handle to objects allocated in stack or call from constructor, it will raise exception Standard_ProgramError if reference counter is zero. More...
 
Standard_Integer GetRefCount () const
 Get the reference counter of this object. More...
 
void IncrementRefCounter () const
 Increments the reference counter of this object. More...
 
Standard_Integer DecrementRefCounter () const
 Decrements the reference counter of this object; returns the decremented value. More...
 

Static Public Member Functions

static const TCollection_AsciiStringShadersFolder ()
 The path to GLSL programs determined from CSF_ShadersDirectory or CASROOT environment variables. More...
 
- Static Public Member Functions inherited from Standard_Transient
static const char * get_type_name ()
 Returns a type descriptor about this object. More...
 
static const opencascade::handle< Standard_Type > & get_type_descriptor ()
 Returns type descriptor of Standard_Transient class. More...
 

Static Public Attributes

static const Standard_Integer THE_MAX_LIGHTS_DEFAULT = 8
 Default value of THE_MAX_LIGHTS macros within GLSL program (see Declarations.glsl). More...
 
static const Standard_Integer THE_MAX_CLIP_PLANES_DEFAULT = 8
 Default value of THE_MAX_CLIP_PLANES macros within GLSL program (see Declarations.glsl). More...
 
static const Standard_Integer THE_NB_FRAG_OUTPUTS = 1
 Default value of THE_NB_FRAG_OUTPUTS macros within GLSL program (see Declarations.glsl). More...
 

Additional Inherited Members

- Public Types inherited from Standard_Transient
typedef void base_type
 Returns a type descriptor about this object. More...
 

Detailed Description

This class is responsible for managing shader programs.

Constructor & Destructor Documentation

◆ Graphic3d_ShaderProgram()

Graphic3d_ShaderProgram::Graphic3d_ShaderProgram ( )

Creates new empty program object.

◆ ~Graphic3d_ShaderProgram()

virtual Graphic3d_ShaderProgram::~Graphic3d_ShaderProgram ( )
virtual

Releases resources of program object.

Member Function Documentation

◆ AppendToHeader()

void Graphic3d_ShaderProgram::AppendToHeader ( const TCollection_AsciiString theHeaderLine)
inline

Append line to GLSL header.

◆ AttachShader()

Standard_Boolean Graphic3d_ShaderProgram::AttachShader ( const Handle< Graphic3d_ShaderObject > &  theShader)

Attaches shader object to the program object.

◆ ClearVariables()

void Graphic3d_ShaderProgram::ClearVariables ( )

Removes all custom uniform variables from the program.

◆ DetachShader()

Standard_Boolean Graphic3d_ShaderProgram::DetachShader ( const Handle< Graphic3d_ShaderObject > &  theShader)

Detaches shader object from the program object.

◆ GetId()

const TCollection_AsciiString& Graphic3d_ShaderProgram::GetId ( ) const
inline

Returns unique ID used to manage resource in graphic driver.

◆ HasAlphaTest()

Standard_Boolean Graphic3d_ShaderProgram::HasAlphaTest ( ) const
inline

Return true if Fragment Shader should perform alpha test; FALSE by default.

◆ HasDefaultSampler()

Standard_Boolean Graphic3d_ShaderProgram::HasDefaultSampler ( ) const
inline

Return TRUE if standard program header should define default texture sampler occSampler0; TRUE by default for compatibility.

◆ Header()

const TCollection_AsciiString& Graphic3d_ShaderProgram::Header ( ) const
inline

Returns GLSL header (version code and extensions).

◆ IsDone()

virtual Standard_Boolean Graphic3d_ShaderProgram::IsDone ( ) const
virtual

Checks if the program object is valid or not.

◆ IsPBR()

Standard_Boolean Graphic3d_ShaderProgram::IsPBR ( ) const
inline

Return TRUE if standard program header should define functions and variables used in PBR pipeline. FALSE by default.

◆ NbClipPlanesMax()

Standard_Integer Graphic3d_ShaderProgram::NbClipPlanesMax ( ) const
inline

Return the length of array of clipping planes (THE_MAX_CLIP_PLANES), to be used for initialization occClipPlaneEquations. Default value is THE_MAX_CLIP_PLANES_DEFAULT.

◆ NbFragmentOutputs()

Standard_Integer Graphic3d_ShaderProgram::NbFragmentOutputs ( ) const
inline

Returns the number (1+) of Fragment Shader outputs to be written to (more than 1 can be in case of multiple draw buffers); 1 by default.

◆ NbLightsMax()

Standard_Integer Graphic3d_ShaderProgram::NbLightsMax ( ) const
inline

Return the length of array of light sources (THE_MAX_LIGHTS), to be used for initialization occLightSources. Default value is THE_MAX_LIGHTS_DEFAULT.

◆ NbShadowMaps()

Standard_Integer Graphic3d_ShaderProgram::NbShadowMaps ( ) const
inline

Return the length of array of shadow maps (THE_NB_SHADOWMAPS); 0 by default.

◆ OitOutput()

Graphic3d_RenderTransparentMethod Graphic3d_ShaderProgram::OitOutput ( ) const
inline

Return if Fragment Shader color should output to OIT buffers; OFF by default.

◆ PushVariable()

template<class T >
Standard_Boolean Graphic3d_ShaderProgram::PushVariable ( const TCollection_AsciiString theName,
const T &  theValue 
)
inline

Pushes custom uniform variable to the program. The list of pushed variables is automatically cleared after applying to GLSL program. Thus after program recreation even unchanged uniforms should be pushed anew.

◆ PushVariableFloat()

Standard_Boolean Graphic3d_ShaderProgram::PushVariableFloat ( const TCollection_AsciiString theName,
const float  theValue 
)
inline

Pushes float uniform.

◆ PushVariableInt()

Standard_Boolean Graphic3d_ShaderProgram::PushVariableInt ( const TCollection_AsciiString theName,
const int  theValue 
)
inline

Pushes int uniform.

◆ PushVariableVec2()

Standard_Boolean Graphic3d_ShaderProgram::PushVariableVec2 ( const TCollection_AsciiString theName,
const Graphic3d_Vec2 theValue 
)
inline

Pushes vec2 uniform.

◆ PushVariableVec2i()

Standard_Boolean Graphic3d_ShaderProgram::PushVariableVec2i ( const TCollection_AsciiString theName,
const Graphic3d_Vec2i theValue 
)
inline

Pushes vec2i uniform.

◆ PushVariableVec3()

Standard_Boolean Graphic3d_ShaderProgram::PushVariableVec3 ( const TCollection_AsciiString theName,
const Graphic3d_Vec3 theValue 
)
inline

Pushes vec3 uniform.

◆ PushVariableVec3i()

Standard_Boolean Graphic3d_ShaderProgram::PushVariableVec3i ( const TCollection_AsciiString theName,
const Graphic3d_Vec3i theValue 
)
inline

Pushes vec3i uniform.

◆ PushVariableVec4()

Standard_Boolean Graphic3d_ShaderProgram::PushVariableVec4 ( const TCollection_AsciiString theName,
const Graphic3d_Vec4 theValue 
)
inline

Pushes vec4 uniform.

◆ PushVariableVec4i()

Standard_Boolean Graphic3d_ShaderProgram::PushVariableVec4i ( const TCollection_AsciiString theName,
const Graphic3d_Vec4i theValue 
)
inline

Pushes vec4i uniform.

◆ SetAlphaTest()

void Graphic3d_ShaderProgram::SetAlphaTest ( Standard_Boolean  theAlphaTest)
inline

Set if Fragment Shader should perform alpha test. Note that this flag is designed for usage with - custom shader program may discard fragment regardless this flag.

◆ SetDefaultSampler()

void Graphic3d_ShaderProgram::SetDefaultSampler ( Standard_Boolean  theHasDefSampler)
inline

Set if standard program header should define default texture sampler occSampler0.

◆ SetHeader()

void Graphic3d_ShaderProgram::SetHeader ( const TCollection_AsciiString theHeader)
inline

Setup GLSL header containing language version code and used extensions. Will be prepended to the very beginning of the source code. Example:

#version 300 es
#extension GL_ARB_bindless_texture : require

◆ SetId()

void Graphic3d_ShaderProgram::SetId ( const TCollection_AsciiString theId)
inline

Sets unique ID used to manage resource in graphic driver. WARNING! Graphic3d_ShaderProgram constructor generates a unique id for proper resource management; however if application overrides it, it is responsibility of application to avoid name collisions.

◆ SetNbClipPlanesMax()

void Graphic3d_ShaderProgram::SetNbClipPlanesMax ( Standard_Integer  theNbPlanes)
inline

Specify the length of array of clipping planes (THE_MAX_CLIP_PLANES).

◆ SetNbFragmentOutputs()

void Graphic3d_ShaderProgram::SetNbFragmentOutputs ( const Standard_Integer  theNbOutputs)
inline

Sets the number of Fragment Shader outputs to be written to. Should be done before GLSL program initialization.

◆ SetNbLightsMax()

void Graphic3d_ShaderProgram::SetNbLightsMax ( Standard_Integer  theNbLights)
inline

Specify the length of array of light sources (THE_MAX_LIGHTS).

◆ SetNbShadowMaps()

void Graphic3d_ShaderProgram::SetNbShadowMaps ( Standard_Integer  theNbMaps)
inline

Specify the length of array of shadow maps (THE_NB_SHADOWMAPS).

◆ SetOitOutput()

void Graphic3d_ShaderProgram::SetOitOutput ( Graphic3d_RenderTransparentMethod  theOutput)
inline

Set if Fragment Shader color should output to OIT buffers. Note that weighted OIT also requires at least 2 Fragment Outputs (color + coverage), and Depth Peeling requires at least 3 Fragment Outputs (depth + front color + back color),.

◆ SetPBR()

void Graphic3d_ShaderProgram::SetPBR ( Standard_Boolean  theIsPBR)
inline

Sets whether standard program header should define functions and variables used in PBR pipeline.

◆ SetTextureSetBits()

void Graphic3d_ShaderProgram::SetTextureSetBits ( Standard_Integer  theBits)
inline

Set texture units declared within the program.

◆ SetVertexAttributes()

void Graphic3d_ShaderProgram::SetVertexAttributes ( const Graphic3d_ShaderAttributeList theAttributes)

Assign the list of custom vertex attributes. Should be done before GLSL program initialization.

◆ ShaderObjects()

const Graphic3d_ShaderObjectList& Graphic3d_ShaderProgram::ShaderObjects ( ) const
inline

Returns list of attached shader objects.

◆ ShadersFolder()

static const TCollection_AsciiString& Graphic3d_ShaderProgram::ShadersFolder ( )
static

The path to GLSL programs determined from CSF_ShadersDirectory or CASROOT environment variables.

Returns
the root folder with default GLSL programs.

◆ TextureSetBits()

Standard_Integer Graphic3d_ShaderProgram::TextureSetBits ( ) const
inline

Return texture units declared within the program,.

See also
Graphic3d_TextureSetBits.

◆ Variables()

const Graphic3d_ShaderVariableList& Graphic3d_ShaderProgram::Variables ( ) const
inline

The list of currently pushed but not applied custom uniform variables. This list is automatically cleared after applying to GLSL program.

◆ VertexAttributes()

const Graphic3d_ShaderAttributeList& Graphic3d_ShaderProgram::VertexAttributes ( ) const
inline

Return the list of custom vertex attributes.

Field Documentation

◆ THE_MAX_CLIP_PLANES_DEFAULT

const Standard_Integer Graphic3d_ShaderProgram::THE_MAX_CLIP_PLANES_DEFAULT = 8
static

Default value of THE_MAX_CLIP_PLANES macros within GLSL program (see Declarations.glsl).

◆ THE_MAX_LIGHTS_DEFAULT

const Standard_Integer Graphic3d_ShaderProgram::THE_MAX_LIGHTS_DEFAULT = 8
static

Default value of THE_MAX_LIGHTS macros within GLSL program (see Declarations.glsl).

◆ THE_NB_FRAG_OUTPUTS

const Standard_Integer Graphic3d_ShaderProgram::THE_NB_FRAG_OUTPUTS = 1
static

Default value of THE_NB_FRAG_OUTPUTS macros within GLSL program (see Declarations.glsl).


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