MeVisLab Resolution Independence API
SoGLShaderProgram Class Reference

Class managing an OpenGL shader program. More...

#include <SoGLShaderProgram.h>

Inheritance diagram for SoGLShaderProgram:
SoGLShader SoUniformParameterBase SoGLCompleteShader SoGLInventorShaderProgram

Classes

struct  UniformInfo
 Information structure for SoGLShaderObject containing location, type, and size. More...

Public Types

enum  LinkageResult { LR_FAILURE = 0 , LR_SUCCESS = 1 , LR_SKIPPED = 2 }
Public Types inherited from SoUniformParameterBase
enum  SamplerType { SAMPLER_1D , SAMPLER_2D , SAMPLER_3D , SAMPLER_CUBEMAP }

Public Member Functions

 SoGLShaderProgram ()
 Constructor.
 ~SoGLShaderProgram () override
 Destructor.
void reset () override
 Free all resources (OpenGL too) and reset instance to initial state.
void addShaderObject (SoGLShaderObject *shaderObject)
void removeShaderObject (SoGLShaderObject *shaderObject)
void removeAllShaderObjects ()
void enable ()
void disable ()
void scheduleLinking ()
void setGeometryInputType (GLint type)
void setGeometryOutputType (GLint type)
void setGeometryVerticesOut (GLint number)
virtual void updateUniformsFromState (SoState *)
virtual void preLinkSetup ()
virtual void postLinkSetup ()
virtual SbBool isActiveUniform (const SbString &name)
virtual void clearAssignedTextureUnits ()
 Clears the assigned texture units to 0.
int getNumAssignedTextureUnits ()
void setNumAssignedTextureUnits (int num)
int addTextureSampler (const SbString &name) override
 Adds a new texture sampler with given name and returns the assigned texture unit.
void set1f (const SbString &name, const float value) override
void set2f (const SbString &name, const float *value) override
void set3f (const SbString &name, const float *value) override
void set4f (const SbString &name, const float *value) override
void set2f (const SbString &name, const float value0, const float value1) override
void set3f (const SbString &name, const float value0, const float value1, const float value2) override
void set4f (const SbString &name, const float value0, const float value1, const float value2, const float value3) override
void set1fv (const SbString &name, const int num, const float *value) override
void set2fv (const SbString &name, const int num, const float *value) override
void set3fv (const SbString &name, const int num, const float *value) override
void set4fv (const SbString &name, const int num, const float *value) override
void set1i (const SbString &name, const int32_t value) override
void set2i (const SbString &name, const int32_t *value) override
void set2i (const SbString &name, const SbVec2s &value) override
void set3i (const SbString &name, const int32_t *value) override
void set3i (const SbString &name, const SbVec3s &value) override
void set4i (const SbString &name, const int32_t *value) override
void setMatrix3fv (const SbString &, int, const float *, SbBool=FALSE) override
void setMatrix4fv (const SbString &, int, const float *, SbBool=FALSE) override
void setName (const SbString &name)
const SbString & getName () const
int shaderVersion (SoShader::ShaderType type) const
 Get the used GLSL version for the given shader type.
ml::GLSLProgramgetProgramResource ()
GLuint getProgramHandle () const
bool isValid ()
 returns if the shader is valid or needs re-creation
SbBool isExecutable () const
SbBool shouldLink () const
LinkageResult link ()
void updateUniformInfo (GLint programHandle)
void setAlwaysReadErrorLog (bool flag)
bool alwaysReadErrorLog ()
bool hadLinkError ()
const SbString & getErrorLog ()
Public Member Functions inherited from SoUniformParameterBase
virtual void setMatrix3f (const SbString &name, const float *values, SbBool transpose=FALSE)
virtual void setMatrix4f (const SbString &name, const float *values, SbBool transpose=FALSE)
virtual void setSamplerInfo (const SbString &, SamplerType, uint32_t)

Protected Member Functions

GLint getUniform (const SbString &name, GLenum type, int *num=nullptr)
Protected Member Functions inherited from SoGLShader
 SoGLShader ()
 Constructor.
virtual ~SoGLShader ()
 Destructor.
void errClear (const char *string=nullptr) const
 Clear OpenGL error state and print any previously not displayed error message.
void errCheck (const char *string=nullptr) const
 Check for OpenGL errors and print error message if one is found.
SbBool error (const char *string=nullptr) const
 Returns 'TRUE' if OpenGL error is found.
Protected Member Functions inherited from SoUniformParameterBase
 SoUniformParameterBase ()
 Hidden constructor.
virtual ~SoUniformParameterBase ()
 Hidden destructor.

Protected Attributes

ml::GLSLProgram _programRes
GLint _geometryInputType
GLint _geometryOutputType
GLint _geometryVerticesOut
std::list< SoGLShaderObject * > _shaderObjects
SbBool _shouldLink
SbBool _isExecutable
SbString _name
int _assignedTextureUnits
std::map< std::string, UniformInfo_uniformInfo
bool _alwaysReadErrorLog
bool _hadError
SbString _errorLog

Additional Inherited Members

Static Public Member Functions inherited from SoGLShader
static SbBool isSupported ()
 Returns 'TRUE' if vertex and fragment shaders are supported by OpenGL.
static bool supportsGeometryShaders ()
 Returns if the hardware supports geometry shaders.
static void printCapabilities ()
 Prints capabilities of the OpenGL implementation.

Detailed Description

Class managing an OpenGL shader program.

Definition at line 32 of file SoGLShaderProgram.h.

Member Enumeration Documentation

◆ LinkageResult

Enumerator
LR_FAILURE 
LR_SUCCESS 
LR_SKIPPED 

Definition at line 123 of file SoGLShaderProgram.h.

Constructor & Destructor Documentation

◆ SoGLShaderProgram()

SoGLShaderProgram::SoGLShaderProgram ( )

Constructor.

◆ ~SoGLShaderProgram()

SoGLShaderProgram::~SoGLShaderProgram ( )
override

Destructor.

Member Function Documentation

◆ addShaderObject()

void SoGLShaderProgram::addShaderObject ( SoGLShaderObject * shaderObject)

◆ addTextureSampler()

int SoGLShaderProgram::addTextureSampler ( const SbString & name)
overridevirtual

Adds a new texture sampler with given name and returns the assigned texture unit.

Reimplemented from SoUniformParameterBase.

◆ alwaysReadErrorLog()

bool SoGLShaderProgram::alwaysReadErrorLog ( )
inline

Definition at line 153 of file SoGLShaderProgram.h.

References _alwaysReadErrorLog.

◆ clearAssignedTextureUnits()

virtual void SoGLShaderProgram::clearAssignedTextureUnits ( )
inlinevirtual

Clears the assigned texture units to 0.

Definition at line 83 of file SoGLShaderProgram.h.

References _assignedTextureUnits.

◆ disable()

void SoGLShaderProgram::disable ( )

◆ enable()

void SoGLShaderProgram::enable ( )

◆ getErrorLog()

const SbString & SoGLShaderProgram::getErrorLog ( )
inline

Definition at line 156 of file SoGLShaderProgram.h.

References _errorLog.

◆ getName()

const SbString & SoGLShaderProgram::getName ( ) const
inline

Definition at line 116 of file SoGLShaderProgram.h.

References _name.

◆ getNumAssignedTextureUnits()

int SoGLShaderProgram::getNumAssignedTextureUnits ( )
inline

Definition at line 85 of file SoGLShaderProgram.h.

References _assignedTextureUnits.

◆ getProgramHandle()

GLuint SoGLShaderProgram::getProgramHandle ( ) const
inline

Definition at line 133 of file SoGLShaderProgram.h.

References _programRes.

◆ getProgramResource()

ml::GLSLProgram & SoGLShaderProgram::getProgramResource ( )
inline

Definition at line 129 of file SoGLShaderProgram.h.

References _programRes.

◆ getUniform()

GLint SoGLShaderProgram::getUniform ( const SbString & name,
GLenum type,
int * num = nullptr )
protected

◆ hadLinkError()

bool SoGLShaderProgram::hadLinkError ( )
inline

Definition at line 155 of file SoGLShaderProgram.h.

References _hadError.

◆ isActiveUniform()

virtual SbBool SoGLShaderProgram::isActiveUniform ( const SbString & name)
virtual

◆ isExecutable()

SbBool SoGLShaderProgram::isExecutable ( ) const
inline

Definition at line 140 of file SoGLShaderProgram.h.

References _isExecutable.

◆ isValid()

bool SoGLShaderProgram::isValid ( )

returns if the shader is valid or needs re-creation

◆ link()

LinkageResult SoGLShaderProgram::link ( )

◆ postLinkSetup()

virtual void SoGLShaderProgram::postLinkSetup ( )
inlinevirtual

Reimplemented in SoGLInventorShaderProgram.

Definition at line 78 of file SoGLShaderProgram.h.

◆ preLinkSetup()

virtual void SoGLShaderProgram::preLinkSetup ( )
inlinevirtual

Reimplemented in SoGLInventorShaderProgram.

Definition at line 77 of file SoGLShaderProgram.h.

◆ removeAllShaderObjects()

void SoGLShaderProgram::removeAllShaderObjects ( )

◆ removeShaderObject()

void SoGLShaderProgram::removeShaderObject ( SoGLShaderObject * shaderObject)

◆ reset()

void SoGLShaderProgram::reset ( )
overridevirtual

Free all resources (OpenGL too) and reset instance to initial state.

Reimplemented from SoGLShader.

◆ scheduleLinking()

void SoGLShaderProgram::scheduleLinking ( )

◆ set1f()

void SoGLShaderProgram::set1f ( const SbString & name,
const float value )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ set1fv()

void SoGLShaderProgram::set1fv ( const SbString & name,
const int num,
const float * value )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ set1i()

void SoGLShaderProgram::set1i ( const SbString & name,
const int32_t value )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ set2f() [1/2]

void SoGLShaderProgram::set2f ( const SbString & name,
const float * value )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ set2f() [2/2]

void SoGLShaderProgram::set2f ( const SbString & name,
const float value0,
const float value1 )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ set2fv()

void SoGLShaderProgram::set2fv ( const SbString & name,
const int num,
const float * value )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ set2i() [1/2]

void SoGLShaderProgram::set2i ( const SbString & name,
const int32_t * value )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ set2i() [2/2]

void SoGLShaderProgram::set2i ( const SbString & name,
const SbVec2s & value )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ set3f() [1/2]

void SoGLShaderProgram::set3f ( const SbString & name,
const float * value )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ set3f() [2/2]

void SoGLShaderProgram::set3f ( const SbString & name,
const float value0,
const float value1,
const float value2 )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ set3fv()

void SoGLShaderProgram::set3fv ( const SbString & name,
const int num,
const float * value )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ set3i() [1/2]

void SoGLShaderProgram::set3i ( const SbString & name,
const int32_t * value )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ set3i() [2/2]

void SoGLShaderProgram::set3i ( const SbString & name,
const SbVec3s & value )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ set4f() [1/2]

void SoGLShaderProgram::set4f ( const SbString & name,
const float * value )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ set4f() [2/2]

void SoGLShaderProgram::set4f ( const SbString & name,
const float value0,
const float value1,
const float value2,
const float value3 )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ set4fv()

void SoGLShaderProgram::set4fv ( const SbString & name,
const int num,
const float * value )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ set4i()

void SoGLShaderProgram::set4i ( const SbString & name,
const int32_t * value )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ setAlwaysReadErrorLog()

void SoGLShaderProgram::setAlwaysReadErrorLog ( bool flag)
inline

Definition at line 152 of file SoGLShaderProgram.h.

References _alwaysReadErrorLog.

◆ setGeometryInputType()

void SoGLShaderProgram::setGeometryInputType ( GLint type)
inline

Definition at line 64 of file SoGLShaderProgram.h.

References _geometryInputType, and scheduleLinking().

◆ setGeometryOutputType()

void SoGLShaderProgram::setGeometryOutputType ( GLint type)
inline

Definition at line 67 of file SoGLShaderProgram.h.

References _geometryOutputType, and scheduleLinking().

◆ setGeometryVerticesOut()

void SoGLShaderProgram::setGeometryVerticesOut ( GLint number)
inline

Definition at line 70 of file SoGLShaderProgram.h.

References _geometryVerticesOut, and scheduleLinking().

◆ setMatrix3fv()

void SoGLShaderProgram::setMatrix3fv ( const SbString & ,
int ,
const float * ,
SbBool = FALSE )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ setMatrix4fv()

void SoGLShaderProgram::setMatrix4fv ( const SbString & ,
int ,
const float * ,
SbBool = FALSE )
overridevirtual

Reimplemented from SoUniformParameterBase.

◆ setName()

void SoGLShaderProgram::setName ( const SbString & name)
inline

Definition at line 114 of file SoGLShaderProgram.h.

References _name.

◆ setNumAssignedTextureUnits()

void SoGLShaderProgram::setNumAssignedTextureUnits ( int num)
inline

Definition at line 86 of file SoGLShaderProgram.h.

References _assignedTextureUnits.

◆ shaderVersion()

int SoGLShaderProgram::shaderVersion ( SoShader::ShaderType type) const

Get the used GLSL version for the given shader type.

◆ shouldLink()

SbBool SoGLShaderProgram::shouldLink ( ) const
inline

Definition at line 144 of file SoGLShaderProgram.h.

References _shouldLink.

◆ updateUniformInfo()

void SoGLShaderProgram::updateUniformInfo ( GLint programHandle)

◆ updateUniformsFromState()

virtual void SoGLShaderProgram::updateUniformsFromState ( SoState * )
inlinevirtual

Update the shader uniforms according to the current Inventor state. To be reimplemented in derived classes.

Reimplemented in SoGLInventorShaderProgram.

Definition at line 76 of file SoGLShaderProgram.h.

Member Data Documentation

◆ _alwaysReadErrorLog

bool SoGLShaderProgram::_alwaysReadErrorLog
protected

Definition at line 180 of file SoGLShaderProgram.h.

Referenced by alwaysReadErrorLog(), and setAlwaysReadErrorLog().

◆ _assignedTextureUnits

int SoGLShaderProgram::_assignedTextureUnits
protected

◆ _errorLog

SbString SoGLShaderProgram::_errorLog
protected

Definition at line 182 of file SoGLShaderProgram.h.

Referenced by getErrorLog().

◆ _geometryInputType

GLint SoGLShaderProgram::_geometryInputType
protected

Definition at line 40 of file SoGLShaderProgram.h.

Referenced by setGeometryInputType().

◆ _geometryOutputType

GLint SoGLShaderProgram::_geometryOutputType
protected

Definition at line 41 of file SoGLShaderProgram.h.

Referenced by setGeometryOutputType().

◆ _geometryVerticesOut

GLint SoGLShaderProgram::_geometryVerticesOut
protected

Definition at line 42 of file SoGLShaderProgram.h.

Referenced by setGeometryVerticesOut().

◆ _hadError

bool SoGLShaderProgram::_hadError
protected

Definition at line 181 of file SoGLShaderProgram.h.

Referenced by hadLinkError().

◆ _isExecutable

SbBool SoGLShaderProgram::_isExecutable
protected

Definition at line 162 of file SoGLShaderProgram.h.

Referenced by isExecutable().

◆ _name

SbString SoGLShaderProgram::_name
protected

Definition at line 164 of file SoGLShaderProgram.h.

Referenced by getName(), and setName().

◆ _programRes

ml::GLSLProgram SoGLShaderProgram::_programRes
protected

Definition at line 38 of file SoGLShaderProgram.h.

Referenced by getProgramHandle(), and getProgramResource().

◆ _shaderObjects

std::list<SoGLShaderObject *> SoGLShaderProgram::_shaderObjects
protected

Definition at line 160 of file SoGLShaderProgram.h.

◆ _shouldLink

SbBool SoGLShaderProgram::_shouldLink
protected

Definition at line 161 of file SoGLShaderProgram.h.

Referenced by shouldLink().

◆ _uniformInfo

std::map<std::string, UniformInfo> SoGLShaderProgram::_uniformInfo
protected

Definition at line 176 of file SoGLShaderProgram.h.


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