Open CASCADE Technology  6.9.1
Public Member Functions | Protected Member Functions | Protected Attributes
OpenGl_ShaderManager Class Reference

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

#include <OpenGl_ShaderManager.hxx>

Inheritance diagram for OpenGl_ShaderManager:
Inheritance graph
[legend]

Public Member Functions

 OpenGl_ShaderManager (OpenGl_Context *theContext)
 Creates new empty shader manager. More...
 
virtual ~OpenGl_ShaderManager ()
 Releases resources of shader manager. More...
 
void clear ()
 Release all resources. More...
 
Standard_Boolean Create (const Handle< Graphic3d_ShaderProgram > &theProxy, TCollection_AsciiString &theShareKey, Handle< OpenGl_ShaderProgram > &theProgram)
 Creates new shader program or re-use shared instance. More...
 
void Unregister (TCollection_AsciiString &theShareKey, Handle< OpenGl_ShaderProgram > &theProgram)
 Unregisters specified shader program. More...
 
const OpenGl_ShaderProgramListShaderPrograms () const
 Returns list of registered shader programs. More...
 
Standard_Boolean IsEmpty () const
 Returns true if no program objects are registered in the manager. More...
 
Standard_Boolean BindProgram (const OpenGl_AspectFace *theAspect, const Handle< OpenGl_Texture > &theTexture, const Standard_Boolean theToLightOn, const Standard_Boolean theHasVertColor, const Handle< OpenGl_ShaderProgram > &theCustomProgram)
 Bind program for filled primitives rendering. More...
 
Standard_Boolean BindProgram (const OpenGl_AspectLine *theAspect, const Handle< OpenGl_Texture > &theTexture, const Standard_Boolean theToLightOn, const Standard_Boolean theHasVertColor, const Handle< OpenGl_ShaderProgram > &theCustomProgram)
 Bind program for line rendering. More...
 
Standard_Boolean BindProgram (const OpenGl_AspectMarker *theAspect, const Handle< OpenGl_Texture > &theTexture, const Standard_Boolean theToLightOn, const Standard_Boolean theHasVertColor, const Handle< OpenGl_ShaderProgram > &theCustomProgram)
 Bind program for point rendering. More...
 
Standard_Boolean BindProgram (const OpenGl_AspectText *theAspect, const Handle< OpenGl_ShaderProgram > &theCustomProgram)
 Bind program for rendering alpha-textured font. More...
 
Standard_Boolean BindFboBlitProgram ()
 Bind program for FBO blit operation. More...
 
Standard_Boolean BindStereoProgram (const Graphic3d_StereoMode theStereoMode)
 Bind program for rendering stereoscopic image. More...
 
const OpenGl_LightSourceStateLightSourceState () const
 Returns current state of OCCT light sources. More...
 
void UpdateLightSourceStateTo (const OpenGl_ListOfLight *theLights)
 Updates state of OCCT light sources. More...
 
void PushLightSourceState (const Handle< OpenGl_ShaderProgram > &theProgram) const
 Pushes current state of OCCT light sources to specified program. More...
 
const OpenGl_ProjectionStateProjectionState () const
 Returns current state of OCCT projection transform. More...
 
void UpdateProjectionStateTo (const OpenGl_Mat4 &theProjectionMatrix)
 Updates state of OCCT projection transform. More...
 
void PushProjectionState (const Handle< OpenGl_ShaderProgram > &theProgram) const
 Pushes current state of OCCT projection transform to specified program. More...
 
const OpenGl_ModelWorldStateModelWorldState () const
 Returns current state of OCCT model-world transform. More...
 
void UpdateModelWorldStateTo (const OpenGl_Mat4 &theModelWorldMatrix)
 Updates state of OCCT model-world transform. More...
 
void PushModelWorldState (const Handle< OpenGl_ShaderProgram > &theProgram) const
 Pushes current state of OCCT model-world transform to specified program. More...
 
const OpenGl_WorldViewStateWorldViewState () const
 Returns current state of OCCT world-view transform. More...
 
void UpdateWorldViewStateTo (const OpenGl_Mat4 &theWorldViewMatrix)
 Updates state of OCCT world-view transform. More...
 
void PushWorldViewState (const Handle< OpenGl_ShaderProgram > &theProgram) const
 Pushes current state of OCCT world-view transform to specified program. More...
 
void UpdateClippingState ()
 Updates state of OCCT clipping planes. More...
 
void RevertClippingState ()
 Reverts state of OCCT clipping planes. More...
 
void PushClippingState (const Handle< OpenGl_ShaderProgram > &theProgram) const
 Pushes current state of OCCT clipping planes to specified program. More...
 
void ResetMaterialStates ()
 Resets state of OCCT material for all programs. More...
 
void UpdateMaterialStateTo (const Handle< OpenGl_ShaderProgram > &theProgram, const OpenGl_Element *theAspect)
 Updates state of OCCT material for specified program. More...
 
void PushMaterialState (const Handle< OpenGl_ShaderProgram > &theProgram) const
 Pushes current state of OCCT material to specified program. More...
 
const OpenGl_MaterialStateMaterialState (const Handle< OpenGl_ShaderProgram > &theProgram) const
 Returns current state of OCCT material for specified program. More...
 
const OpenGl_SurfaceDetailStateSurfaceDetailState () const
 Returns current state of OCCT surface detail. More...
 
void UpdateSurfaceDetailStateTo (const Visual3d_TypeOfSurfaceDetail theDetail)
 Updates state of OCCT surface detail. More...
 
void PushState (const Handle< OpenGl_ShaderProgram > &theProgram) const
 Pushes current state of OCCT graphics parameters to specified program. More...
 
void SetContext (OpenGl_Context *theCtx)
 Overwrites context. More...
 
void SetShadingModel (const Visual3d_TypeOfModel theModel)
 Sets shading model. More...
 
void SetLastView (const OpenGl_View *theLastView)
 Sets last view manger used with. Helps to handle matrix states in multi-view configurations. More...
 
bool IsSameView (const OpenGl_View *theView) const
 Returns true when provided view is the same as cached one. 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 Handle_Standard_Type & DynamicType () const
 Returns a type information object about this object. More...
 
Standard_Boolean IsInstance (const 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 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...
 
virtual Handle_Standard_Transient This () const
 Returns a Handle which references this object. Must never be called to objects created in stack. More...
 
Standard_Integer GetRefCount () const
 Get the reference counter of this object. More...
 

Protected Member Functions

Standard_Integer getProgramBits (const Handle< OpenGl_Texture > &theTexture, const Standard_Boolean theHasVertColor, const Standard_Boolean theEnableEnvMap=Standard_False)
 Define program bits. More...
 
Handle< OpenGl_ShaderProgram > & getStdProgram (const Standard_Boolean theToLightOn, const Standard_Integer theBits)
 Prepare standard GLSL program. More...
 
Standard_Boolean prepareStdProgramFont ()
 Prepare standard GLSL program for textured font. More...
 
Standard_Boolean prepareStdProgramFboBlit ()
 Prepare standard GLSL program for FBO blit operation. More...
 
Standard_Boolean prepareStdProgramFlat (Handle< OpenGl_ShaderProgram > &theProgram, const Standard_Integer theBits)
 Prepare standard GLSL program without lighting. More...
 
Standard_Boolean prepareStdProgramLight (Handle< OpenGl_ShaderProgram > &theProgram, const Standard_Integer theBits)
 Prepare standard GLSL program with lighting. More...
 
Standard_Boolean prepareStdProgramGouraud (Handle< OpenGl_ShaderProgram > &theProgram, const Standard_Integer theBits)
 Prepare standard GLSL program with per-vertex lighting. More...
 
Standard_Boolean prepareStdProgramPhong (Handle< OpenGl_ShaderProgram > &theProgram, const Standard_Integer theBits)
 Prepare standard GLSL program with per-pixel lighting. More...
 
TCollection_AsciiString stdComputeLighting (const Standard_Boolean theHasVertColor)
 Define computeLighting GLSL function depending on current lights configuration. More...
 
Standard_Boolean bindProgramWithState (const Handle< OpenGl_ShaderProgram > &theProgram, const OpenGl_Element *theAspect)
 Bind specified program to current context and apply state. More...
 
void switchLightPrograms ()
 Set pointer myLightPrograms to active lighting programs set from myMapOfLightPrograms. More...
 
Standard_Boolean prepareStdProgramStereo (Handle< OpenGl_ShaderProgram > &theProgram, const Graphic3d_StereoMode theStereoMode)
 Prepare standard GLSL program for stereoscopic image. More...
 

Protected Attributes

Visual3d_TypeOfModel myShadingModel
 lighting shading model More...
 
OpenGl_ShaderProgramList myProgramList
 The list of shader programs. More...
 
Handle< OpenGl_SetOfShaderProgramsmyLightPrograms
 pointer to active lighting programs matrix More...
 
OpenGl_SetOfShaderPrograms myFlatPrograms
 programs matrix without lighting More...
 
Handle< OpenGl_ShaderProgrammyFontProgram
 standard program for textured text More...
 
Handle< OpenGl_ShaderProgrammyBlitProgram
 standard program for FBO blit emulation More...
 
OpenGl_MapOfShaderPrograms myMapOfLightPrograms
 map of lighting programs depending on shading model and lights configuration More...
 
Handle< OpenGl_ShaderProgrammyStereoPrograms [Graphic3d_StereoMode_NB]
 standard stereo programs More...
 
OpenGl_ContextmyContext
 OpenGL context. More...
 
OpenGl_MaterialStates myMaterialStates
 Per-program state of OCCT material. More...
 
OpenGl_ProjectionState myProjectionState
 State of OCCT projection transformation. More...
 
OpenGl_ModelWorldState myModelWorldState
 State of OCCT model-world transformation. More...
 
OpenGl_WorldViewState myWorldViewState
 State of OCCT world-view transformation. More...
 
OpenGl_ClippingState myClippingState
 State of OCCT clipping planes. More...
 
OpenGl_LightSourceState myLightSourceState
 State of OCCT light sources. More...
 
OpenGl_SurfaceDetailState mySurfaceDetailState
 State of OCCT surface detail. More...
 

Detailed Description

This class is responsible for managing shader programs.

Constructor & Destructor Documentation

OpenGl_ShaderManager::OpenGl_ShaderManager ( OpenGl_Context theContext)

Creates new empty shader manager.

virtual OpenGl_ShaderManager::~OpenGl_ShaderManager ( )
virtual

Releases resources of shader manager.

Member Function Documentation

Standard_Boolean OpenGl_ShaderManager::BindFboBlitProgram ( )
inline

Bind program for FBO blit operation.

Standard_Boolean OpenGl_ShaderManager::BindProgram ( const OpenGl_AspectFace theAspect,
const Handle< OpenGl_Texture > &  theTexture,
const Standard_Boolean  theToLightOn,
const Standard_Boolean  theHasVertColor,
const Handle< OpenGl_ShaderProgram > &  theCustomProgram 
)
inline

Bind program for filled primitives rendering.

Standard_Boolean OpenGl_ShaderManager::BindProgram ( const OpenGl_AspectLine theAspect,
const Handle< OpenGl_Texture > &  theTexture,
const Standard_Boolean  theToLightOn,
const Standard_Boolean  theHasVertColor,
const Handle< OpenGl_ShaderProgram > &  theCustomProgram 
)
inline

Bind program for line rendering.

Standard_Boolean OpenGl_ShaderManager::BindProgram ( const OpenGl_AspectMarker theAspect,
const Handle< OpenGl_Texture > &  theTexture,
const Standard_Boolean  theToLightOn,
const Standard_Boolean  theHasVertColor,
const Handle< OpenGl_ShaderProgram > &  theCustomProgram 
)
inline

Bind program for point rendering.

Standard_Boolean OpenGl_ShaderManager::BindProgram ( const OpenGl_AspectText theAspect,
const Handle< OpenGl_ShaderProgram > &  theCustomProgram 
)
inline

Bind program for rendering alpha-textured font.

Standard_Boolean OpenGl_ShaderManager::bindProgramWithState ( const Handle< OpenGl_ShaderProgram > &  theProgram,
const OpenGl_Element theAspect 
)
protected

Bind specified program to current context and apply state.

Standard_Boolean OpenGl_ShaderManager::BindStereoProgram ( const Graphic3d_StereoMode  theStereoMode)
inline

Bind program for rendering stereoscopic image.

void OpenGl_ShaderManager::clear ( )

Release all resources.

Standard_Boolean OpenGl_ShaderManager::Create ( const Handle< Graphic3d_ShaderProgram > &  theProxy,
TCollection_AsciiString theShareKey,
Handle< OpenGl_ShaderProgram > &  theProgram 
)

Creates new shader program or re-use shared instance.

Parameters
theProxy[IN] program definition
theShareKey[OUT] sharing key
theProgram[OUT] OpenGL program
Returns
true on success
Standard_Integer OpenGl_ShaderManager::getProgramBits ( const Handle< OpenGl_Texture > &  theTexture,
const Standard_Boolean  theHasVertColor,
const Standard_Boolean  theEnableEnvMap = Standard_False 
)
inlineprotected

Define program bits.

Handle< OpenGl_ShaderProgram >& OpenGl_ShaderManager::getStdProgram ( const Standard_Boolean  theToLightOn,
const Standard_Integer  theBits 
)
inlineprotected

Prepare standard GLSL program.

Standard_Boolean OpenGl_ShaderManager::IsEmpty ( ) const

Returns true if no program objects are registered in the manager.

bool OpenGl_ShaderManager::IsSameView ( const OpenGl_View theView) const
inline

Returns true when provided view is the same as cached one.

const OpenGl_LightSourceState& OpenGl_ShaderManager::LightSourceState ( ) const

Returns current state of OCCT light sources.

const OpenGl_MaterialState* OpenGl_ShaderManager::MaterialState ( const Handle< OpenGl_ShaderProgram > &  theProgram) const

Returns current state of OCCT material for specified program.

const OpenGl_ModelWorldState& OpenGl_ShaderManager::ModelWorldState ( ) const

Returns current state of OCCT model-world transform.

Standard_Boolean OpenGl_ShaderManager::prepareStdProgramFboBlit ( )
protected

Prepare standard GLSL program for FBO blit operation.

Standard_Boolean OpenGl_ShaderManager::prepareStdProgramFlat ( Handle< OpenGl_ShaderProgram > &  theProgram,
const Standard_Integer  theBits 
)
protected

Prepare standard GLSL program without lighting.

Standard_Boolean OpenGl_ShaderManager::prepareStdProgramFont ( )
protected

Prepare standard GLSL program for textured font.

Standard_Boolean OpenGl_ShaderManager::prepareStdProgramGouraud ( Handle< OpenGl_ShaderProgram > &  theProgram,
const Standard_Integer  theBits 
)
protected

Prepare standard GLSL program with per-vertex lighting.

Standard_Boolean OpenGl_ShaderManager::prepareStdProgramLight ( Handle< OpenGl_ShaderProgram > &  theProgram,
const Standard_Integer  theBits 
)
inlineprotected

Prepare standard GLSL program with lighting.

Standard_Boolean OpenGl_ShaderManager::prepareStdProgramPhong ( Handle< OpenGl_ShaderProgram > &  theProgram,
const Standard_Integer  theBits 
)
protected

Prepare standard GLSL program with per-pixel lighting.

Standard_Boolean OpenGl_ShaderManager::prepareStdProgramStereo ( Handle< OpenGl_ShaderProgram > &  theProgram,
const Graphic3d_StereoMode  theStereoMode 
)
protected

Prepare standard GLSL program for stereoscopic image.

const OpenGl_ProjectionState& OpenGl_ShaderManager::ProjectionState ( ) const

Returns current state of OCCT projection transform.

void OpenGl_ShaderManager::PushClippingState ( const Handle< OpenGl_ShaderProgram > &  theProgram) const

Pushes current state of OCCT clipping planes to specified program.

void OpenGl_ShaderManager::PushLightSourceState ( const Handle< OpenGl_ShaderProgram > &  theProgram) const

Pushes current state of OCCT light sources to specified program.

void OpenGl_ShaderManager::PushMaterialState ( const Handle< OpenGl_ShaderProgram > &  theProgram) const

Pushes current state of OCCT material to specified program.

void OpenGl_ShaderManager::PushModelWorldState ( const Handle< OpenGl_ShaderProgram > &  theProgram) const

Pushes current state of OCCT model-world transform to specified program.

void OpenGl_ShaderManager::PushProjectionState ( const Handle< OpenGl_ShaderProgram > &  theProgram) const

Pushes current state of OCCT projection transform to specified program.

void OpenGl_ShaderManager::PushState ( const Handle< OpenGl_ShaderProgram > &  theProgram) const

Pushes current state of OCCT graphics parameters to specified program.

void OpenGl_ShaderManager::PushWorldViewState ( const Handle< OpenGl_ShaderProgram > &  theProgram) const

Pushes current state of OCCT world-view transform to specified program.

void OpenGl_ShaderManager::ResetMaterialStates ( )

Resets state of OCCT material for all programs.

void OpenGl_ShaderManager::RevertClippingState ( )

Reverts state of OCCT clipping planes.

void OpenGl_ShaderManager::SetContext ( OpenGl_Context theCtx)
inline

Overwrites context.

void OpenGl_ShaderManager::SetLastView ( const OpenGl_View theLastView)
inline

Sets last view manger used with. Helps to handle matrix states in multi-view configurations.

void OpenGl_ShaderManager::SetShadingModel ( const Visual3d_TypeOfModel  theModel)

Sets shading model.

const OpenGl_ShaderProgramList& OpenGl_ShaderManager::ShaderPrograms ( ) const

Returns list of registered shader programs.

TCollection_AsciiString OpenGl_ShaderManager::stdComputeLighting ( const Standard_Boolean  theHasVertColor)
protected

Define computeLighting GLSL function depending on current lights configuration.

Parameters
theHasVertColorflag to use getVertColor() instead of Ambient and Diffuse components of active material
const OpenGl_SurfaceDetailState& OpenGl_ShaderManager::SurfaceDetailState ( ) const

Returns current state of OCCT surface detail.

void OpenGl_ShaderManager::switchLightPrograms ( )
protected

Set pointer myLightPrograms to active lighting programs set from myMapOfLightPrograms.

void OpenGl_ShaderManager::Unregister ( TCollection_AsciiString theShareKey,
Handle< OpenGl_ShaderProgram > &  theProgram 
)

Unregisters specified shader program.

void OpenGl_ShaderManager::UpdateClippingState ( )

Updates state of OCCT clipping planes.

void OpenGl_ShaderManager::UpdateLightSourceStateTo ( const OpenGl_ListOfLight theLights)

Updates state of OCCT light sources.

void OpenGl_ShaderManager::UpdateMaterialStateTo ( const Handle< OpenGl_ShaderProgram > &  theProgram,
const OpenGl_Element theAspect 
)

Updates state of OCCT material for specified program.

void OpenGl_ShaderManager::UpdateModelWorldStateTo ( const OpenGl_Mat4 theModelWorldMatrix)

Updates state of OCCT model-world transform.

void OpenGl_ShaderManager::UpdateProjectionStateTo ( const OpenGl_Mat4 theProjectionMatrix)

Updates state of OCCT projection transform.

void OpenGl_ShaderManager::UpdateSurfaceDetailStateTo ( const Visual3d_TypeOfSurfaceDetail  theDetail)

Updates state of OCCT surface detail.

void OpenGl_ShaderManager::UpdateWorldViewStateTo ( const OpenGl_Mat4 theWorldViewMatrix)

Updates state of OCCT world-view transform.

const OpenGl_WorldViewState& OpenGl_ShaderManager::WorldViewState ( ) const

Returns current state of OCCT world-view transform.

Field Documentation

Handle< OpenGl_ShaderProgram > OpenGl_ShaderManager::myBlitProgram
protected

standard program for FBO blit emulation

OpenGl_ClippingState OpenGl_ShaderManager::myClippingState
protected

State of OCCT clipping planes.

OpenGl_Context* OpenGl_ShaderManager::myContext
protected

OpenGL context.

OpenGl_SetOfShaderPrograms OpenGl_ShaderManager::myFlatPrograms
protected

programs matrix without lighting

Handle< OpenGl_ShaderProgram > OpenGl_ShaderManager::myFontProgram
protected

standard program for textured text

Handle< OpenGl_SetOfShaderPrograms > OpenGl_ShaderManager::myLightPrograms
protected

pointer to active lighting programs matrix

OpenGl_LightSourceState OpenGl_ShaderManager::myLightSourceState
protected

State of OCCT light sources.

OpenGl_MapOfShaderPrograms OpenGl_ShaderManager::myMapOfLightPrograms
protected

map of lighting programs depending on shading model and lights configuration

OpenGl_MaterialStates OpenGl_ShaderManager::myMaterialStates
protected

Per-program state of OCCT material.

OpenGl_ModelWorldState OpenGl_ShaderManager::myModelWorldState
protected

State of OCCT model-world transformation.

OpenGl_ShaderProgramList OpenGl_ShaderManager::myProgramList
protected

The list of shader programs.

OpenGl_ProjectionState OpenGl_ShaderManager::myProjectionState
protected

State of OCCT projection transformation.

Visual3d_TypeOfModel OpenGl_ShaderManager::myShadingModel
protected

lighting shading model

Handle< OpenGl_ShaderProgram > OpenGl_ShaderManager::myStereoPrograms[Graphic3d_StereoMode_NB]
protected

standard stereo programs

OpenGl_SurfaceDetailState OpenGl_ShaderManager::mySurfaceDetailState
protected

State of OCCT surface detail.

OpenGl_WorldViewState OpenGl_ShaderManager::myWorldViewState
protected

State of OCCT world-view transformation.


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