osg::Program Class Reference

`#include <Program>`

Inheritance diagram for osg::Program:

## Classes

class | ProgramBinary
struct | ActiveVarInfo
struct | UniformBlockInfo
class | PerContextProgram
struct | ProgramObjects

## Public Types

typedef std::map< std::string, GLuint > | AttribBindingList
typedef std::map< std::string, GLuint > | FragDataBindingList
typedef std::map< std::string, GLuint > | UniformBlockBindingList
typedef std::map< unsigned int, ActiveVarInfo > | ActiveUniformMap
typedef std::map< std::string, ActiveVarInfo > | ActiveVarInfoMap
typedef std::map< std::string, UniformBlockInfo > | UniformBlockMap
Public Types inherited from osg::StateAttribute
enum | Values { OFF = 0x0 , ON = 0x1 , OVERRIDE = 0x2 , PROTECTED = 0x4 , INHERIT = 0x8 }

enum

Type {
TEXTURE , POLYGONMODE , POLYGONOFFSET , MATERIAL ,
ALPHAFUNC , ANTIALIAS , COLORTABLE , CULLFACE ,
FOG , FRONTFACE , LIGHT , POINT ,
LINEWIDTH , LINESTIPPLE , POLYGONSTIPPLE , SHADEMODEL ,
TEXENV , TEXENVFILTER , TEXGEN , TEXMAT ,
LIGHTMODEL , BLENDFUNC , BLENDEQUATION , LOGICOP ,
STENCIL , COLORMASK , DEPTH , VIEWPORT ,
SCISSOR , BLENDCOLOR , MULTISAMPLE , CLIPPLANE ,
COLORMATRIX , VERTEXPROGRAM , FRAGMENTPROGRAM , POINTSPRITE ,
PROGRAM , CLAMPCOLOR , HINT , SAMPLEMASKI ,
PRIMITIVERESTARTINDEX , CLIPCONTROL , VALIDATOR , VIEWMATRIXEXTRACTOR ,
OSGNV_PARAMETER_BLOCK , OSGNVEXT_TEXTURE_SHADER , OSGNVEXT_VERTEX_PROGRAM , OSGNVEXT_REGISTER_COMBINERS ,
OSGNVCG_PROGRAM , OSGNVSLANG_PROGRAM , OSGNVPARSE_PROGRAM_PARSER , UNIFORMBUFFERBINDING ,
TRANSFORMFEEDBACKBUFFERBINDING , ATOMICCOUNTERBUFFERBINDING , PATCH_PARAMETER , FRAME_BUFFER_OBJECT ,
VERTEX_ATTRIB_DIVISOR , SHADERSTORAGEBUFFERBINDING , INDIRECTDRAWBUFFERBINDING , VIEWPORTINDEXED ,
DEPTHRANGEINDEXED , SCISSORINDEXED , BINDIMAGETEXTURE , SAMPLER ,
CAPABILITY = 100
}

typedef GLenum | GLMode
typedef unsigned int | GLModeValue
typedef unsigned int | OverrideValue
typedef std::pair< Type, unsigned int > | TypeMemberPair
typedef std::vector< StateSet * > | ParentList
typedef osg::StateAttributeCallback | Callback
Public Types inherited from osg::Object
enum | DataVariance { DYNAMIC , STATIC , UNSPECIFIED }

## Public Member Functions

| Program ()
| Program (const Program &rhs, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)
| META_StateAttribute (osg, Program, PROGRAM)
virtual int | compare (const osg::StateAttribute &sa) const
virtual void | apply (osg::State &state) const
virtual void | setThreadSafeRefUnref (bool threadSafe)
virtual void | compileGLObjects (osg::State &state) const
virtual void | resizeGLObjectBuffers (unsigned int maxSize)
virtual void | releaseGLObjects (osg::State *state=0) const
void | dirtyProgram ()
bool | addShader (Shader *shader)
template<class T>
bool | addShader (const ref_ptr< T > &shader)
unsigned int | getNumShaders () const
Shader * | getShader (unsigned int i)
const Shader * | getShader (unsigned int i) const
bool | removeShader (Shader *shader)
template<class T>
bool | removeShader (const ref_ptr< T > &shader)
void | setParameter (GLenum pname, GLint value)
GLint | getParameter (GLenum pname) const
void | addBindAttribLocation (const std::string &name, GLuint index)
void | removeBindAttribLocation (const std::string &name)
void | addBindFragDataLocation (const std::string &name, GLuint index)
void | removeBindFragDataLocation (const std::string &name)
void | addBindUniformBlock (const std::string &name, GLuint index)
void | removeBindUniformBlock (const std::string &name)
void | removeTransformFeedBackVarying (const std::string &name)
void | addTransformFeedBackVarying (const std::string &outname)
unsigned int | getNumTransformFeedBackVaryings () const
const std::string & | getTransformFeedBackVarying (unsigned int i) const
void | setTransformFeedBackMode (GLenum e)
GLenum | getTransformFeedBackMode () const
void | setShaderDefines (const ShaderDefines &shaderDefs)
ShaderDefines & | getShaderDefines ()
const ShaderDefines & | getShaderDefines () const
void | setProgramBinary (ProgramBinary *programBinary)
ProgramBinary * | getProgramBinary ()
const ProgramBinary * | getProgramBinary () const
const AttribBindingList & | getAttribBindingList () const
const FragDataBindingList & | getFragDataBindingList () const
const UniformBlockBindingList & | getUniformBlockBindingList () const
bool | isFixedFunction () const
bool | getGlProgramInfoLog (unsigned int contextID, std::string &log) const
PerContextProgram * | getPCP (State &state) const
Public Member Functions inherited from osg::StateAttribute
| StateAttribute ()
| StateAttribute (const StateAttribute &sa, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
virtual Object * | cloneType () const =0
virtual Object * | clone (const CopyOp &) const =0
virtual bool | isSameKindAs (const Object *obj) const
virtual const char * | libraryName () const
virtual const char * | className () const
virtual StateAttribute * | asStateAttribute ()
virtual const StateAttribute * | asStateAttribute () const
virtual Texture * | asTexture ()
virtual const Texture * | asTexture () const
virtual Type | getType () const =0
virtual unsigned int | getMember () const
TypeMemberPair | getTypeMemberPair () const
virtual bool | isTextureAttribute () const
bool | operator< (const StateAttribute &rhs) const
bool | operator== (const StateAttribute &rhs) const
bool | operator!= (const StateAttribute &rhs) const
const ParentList & | getParents () const
StateSet * | getParent (unsigned int i)
const StateSet * | getParent (unsigned int i) const
unsigned int | getNumParents () const
void | setShaderComponent (ShaderComponent *sc)
ShaderComponent * | getShaderComponent ()
const ShaderComponent * | getShaderComponent () const
virtual bool | getModeUsage (ModeUsage &) const
virtual bool | checkValidityOfAssociatedModes (osg::State &) const
void | setUpdateCallback (StateAttributeCallback *uc)
StateAttributeCallback * | getUpdateCallback ()
const StateAttributeCallback * | getUpdateCallback () const
void | setEventCallback (StateAttributeCallback *ec)
StateAttributeCallback * | getEventCallback ()
const StateAttributeCallback * | getEventCallback () const
Public Member Functions inherited from osg::Object
| Object ()
| Object (bool threadSafeRefUnref)
| Object (const Object &, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
std::string | getCompoundClassName () const
virtual Node * | asNode ()
virtual const Node * | asNode () const
virtual NodeVisitor * | asNodeVisitor ()
virtual const NodeVisitor * | asNodeVisitor () const
virtual StateSet * | asStateSet ()
virtual const StateSet * | asStateSet () const
virtual Uniform * | asUniform ()
virtual const Uniform * | asUniform () const
virtual Camera * | asCamera ()
virtual const Camera * | asCamera () const
virtual Drawable * | asDrawable ()
virtual const Drawable * | asDrawable () const
virtual Callback * | asCallback ()
virtual const Callback * | asCallback () const
virtual CallbackObject * | asCallbackObject ()
virtual const CallbackObject * | asCallbackObject () const
virtual UserDataContainer * | asUserDataContainer ()
virtual const UserDataContainer * | asUserDataContainer () const
virtual ValueObject * | asValueObject ()
virtual const ValueObject * | asValueObject () const
virtual Image * | asImage ()
virtual const Image * | asImage () const
virtual void | setName (const std::string &name)
void | setName (const char *name)
const std::string & | getName () const
void | setDataVariance (DataVariance dv)
DataVariance | getDataVariance () const
virtual void | computeDataVariance ()
void | setUserDataContainer (osg::UserDataContainer *udc)
template<class T>
void | setUserDataContainer (const ref_ptr< T > &udc)
osg::UserDataContainer * | getUserDataContainer ()
const osg::UserDataContainer * | getUserDataContainer () const
osg::UserDataContainer * | getOrCreateUserDataContainer ()
virtual void | setUserData (Referenced *obj)
template<class T>
void | setUserData (const ref_ptr< T > &ud)
virtual Referenced * | getUserData ()
virtual const Referenced * | getUserData () const
template<typename T>
bool | getUserValue (const std::string &name, T &value) const
template<typename T>
void | setUserValue (const std::string &name, const T &value)
template<typename T>
BoolValueObject UCharValueObject UShortValueObject UIntValueObject DoubleValueObject Vec3fValueObject Vec2dValueObject Vec4dValueObject PlaneValueObject MatrixdValueObject BoundingBoxdValueObject BoundingSpheredValueObject bool | getUserValue (const std::string &name, T &value) const
Public Member Functions inherited from osg::Referenced
| Referenced ()
| Referenced (bool threadSafeRefUnref)
| Referenced (const Referenced &)
Referenced & | operator= (const Referenced &)
bool | getThreadSafeRefUnref () const
OpenThreads::Mutex * | getRefMutex () const
int | ref () const
int | unref () const
int | unref_nodelete () const
int | referenceCount () const
ObserverSet * | getObserverSet () const
ObserverSet * | getOrCreateObserverSet () const
void | addObserver (Observer *observer) const
void | removeObserver (Observer *observer) const

## Protected Types

typedef std::vector< ref_ptr< Shader > > | ShaderList

## Protected Member Functions

virtual | ~Program ()
Protected Member Functions inherited from osg::StateAttribute
virtual | ~StateAttribute ()
void | addParent (osg::StateSet *object)
void | removeParent (osg::StateSet *object)
Protected Member Functions inherited from osg::Object
virtual | ~Object ()
Protected Member Functions inherited from osg::Referenced
virtual | ~Referenced ()
void | signalObserversAndDelete (bool signalDelete, bool doDelete) const
void | deleteUsingDeleteHandler () const

## Protected Attributes

osg::buffered_value< osg::ref_ptr< ProgramObjects > > | _pcpList
AttribBindingList | _attribBindingList
FragDataBindingList | _fragDataBindingList
UniformBlockBindingList | _uniformBlockBindingList
ShaderList | _shaderList
osg::ref_ptr< ProgramBinary > | _programBinary
GLint | _geometryVerticesOut
GLint | _geometryInputType
GLint | _geometryOutputType
GLenum | _feedbackmode
std::vector< std::string > | _feedbackout
ShaderDefines | _shaderDefines
Protected Attributes inherited from osg::StateAttribute
ParentList | _parents
ref_ptr< ShaderComponent > | _shaderComponent
ref_ptr< StateAttributeCallback > | _updateCallback
ref_ptr< StateAttributeCallback > | _eventCallback
Protected Attributes inherited from osg::Object
std::string | _name
DataVariance | _dataVariance
osg::UserDataContainer * | _userDataContainer
Protected Attributes inherited from osg::Referenced
OpenThreads::AtomicPtr | _observerSet
OpenThreads::Atomic | _refCount

## Friends

class | PerContextProgram

## Additional Inherited Members

Static Public Member Functions inherited from osg::Referenced
static OpenThreads::Mutex * | getGlobalReferencedMutex ()
static void | setDeleteHandler (DeleteHandler *handler)
static DeleteHandler * | getDeleteHandler ()

## Detailed Description

osg::Program is an application-level abstraction of an OpenGL glProgram. It is an osg::StateAttribute that, when applied, will activate a glProgram for subsequent rendering. osg::Shaders containing the actual shader source code are attached to a Program, which will then manage the compilation, linking, and activation of the GLSL program. osg::Program will automatically manage per-context instancing of the OpenGL glPrograms, if that is necessary for a particular display configuration.

## Member Typedef Documentation

## ActiveUniformMap

typedef std::map< unsigned int, ActiveVarInfo > osg::Program::ActiveUniformMap

## ActiveVarInfoMap

typedef std::map< std::string, ActiveVarInfo > osg::Program::ActiveVarInfoMap

## AttribBindingList

typedef std::map<std::string,GLuint> osg::Program::AttribBindingList

## FragDataBindingList

typedef std::map<std::string,GLuint> osg::Program::FragDataBindingList

## ShaderList

typedef std::vector< ref_ptr<Shader> > osg::Program::ShaderList

protected

## UniformBlockBindingList

typedef std::map<std::string,GLuint> osg::Program::UniformBlockBindingList

## UniformBlockMap

typedef std::map<std::string, UniformBlockInfo> osg::Program::UniformBlockMap

## Constructor & Destructor Documentation

## Program() [1/2]

osg::Program::Program | ( |  | ) |

Referenced by META_StateAttribute(), osg::Program::PerContextProgram::PerContextProgram(), Program(), and osg::Program::ProgramObjects::ProgramObjects().

## Program() [2/2]

osg::Program::Program | ( | const Program & | rhs,
|  | const osg::CopyOp & | copyop = osg::CopyOp::SHALLOW_COPY )

Copy constructor using CopyOp to manage deep vs shallow copy.

References Program(), and osg::CopyOp::SHALLOW_COPY.

## ~Program()

virtual osg::Program::~Program | ( |  | ) |

protected virtual

## Member Function Documentation

## addBindAttribLocation()

void osg::Program::addBindAttribLocation | ( | const std::string & | name,
|  | GLuint | index )

Add an attribute location binding.

## addBindFragDataLocation()

void osg::Program::addBindFragDataLocation | ( | const std::string & | name,
|  | GLuint | index )

Add an frag data location binding. See EXT_gpu_shader4 for BindFragDataLocationEXT

## addBindUniformBlock()

void osg::Program::addBindUniformBlock | ( | const std::string & | name,
|  | GLuint | index )

Add a uniform block binding to an index target. XXX This should not be an attribute of the program. It should be a pseudo-uniform that can live in StateSet objects because it is cheap to set.

## addShader() [1/2]

template<class T>

bool osg::Program::addShader | ( | const ref_ptr< T > & | shader | ) |

inline

References addShader(), and osg::ref_ptr< T >::get().

Referenced by addShader().

## addShader() [2/2]

bool osg::Program::addShader | ( | Shader * | shader | ) |

Attach an osg::Shader to this osg::Program. Mark Program as needing relink. Return true for success

## addTransformFeedBackVarying()

void osg::Program::addTransformFeedBackVarying | ( | const std::string & | outname | ) |

inline

Add a TransformFeedBack Varying Name.

References _feedbackout.

## apply()

virtual void osg::Program::apply | ( | osg::State & | state | ) | const

virtual

If enabled, activate our program in the GL pipeline, performing any rebuild operations that might be pending.

Reimplemented from osg::StateAttribute.

## compare()

virtual int osg::Program::compare | ( | const osg::StateAttribute & | sa | ) | const

virtual

return -1 if *this < *rhs, 0 if *this==*rhs, 1 if *this>*rhs.

Implements osg::StateAttribute.

## compileGLObjects()

virtual void osg::Program::compileGLObjects | ( | osg::State & | state | ) | const

virtual

Compile program and associated shaders.

Reimplemented from osg::StateAttribute.

## dirtyProgram()

void osg::Program::dirtyProgram | ( |  | ) |

Mark our PCSOs as needing relink

## getAttribBindingList()

const AttribBindingList & osg::Program::getAttribBindingList | ( |  | ) | const

inline

References _attribBindingList.

## getFragDataBindingList()

const FragDataBindingList & osg::Program::getFragDataBindingList | ( |  | ) | const

inline

References _fragDataBindingList.

## getGlProgramInfoLog()

bool osg::Program::getGlProgramInfoLog | ( | unsigned int | contextID,
|  | std::string & | log ) const

Query InfoLog from a glProgram

## getNumShaders()

unsigned int osg::Program::getNumShaders | ( |  | ) | const

inline

References _shaderList.

## getNumTransformFeedBackVaryings()

unsigned int osg::Program::getNumTransformFeedBackVaryings | ( |  | ) | const

inline

Get number of TransformFeedBack Varyings.

References _feedbackout.

## getParameter()

GLint osg::Program::getParameter | ( | GLenum | pname | ) | const

## getPCP()

PerContextProgram * osg::Program::getPCP | ( | State & | state | ) | const

Get the PCP for a particular GL context

## getProgramBinary() [1/2]

ProgramBinary * osg::Program::getProgramBinary | ( |  | ) |

inline

Get the Program's ProgramBinary, return NULL if none is assigned.

References _programBinary.

## getProgramBinary() [2/2]

const ProgramBinary * osg::Program::getProgramBinary | ( |  | ) | const

inline

Get the const Program's ProgramBinary, return NULL if none is assigned.

References _programBinary.

## getShader() [1/2]

Shader * osg::Program::getShader | ( | unsigned int | i | ) |

inline

References _shaderList.

## getShader() [2/2]

const Shader * osg::Program::getShader | ( | unsigned int | i | ) | const

inline

References _shaderList.

## getShaderDefines() [1/2]

ShaderDefines & osg::Program::getShaderDefines | ( |  | ) |

inline

References _shaderDefines.

## getShaderDefines() [2/2]

const ShaderDefines & osg::Program::getShaderDefines | ( |  | ) | const

inline

References _shaderDefines.

## getTransformFeedBackMode()

GLenum osg::Program::getTransformFeedBackMode | ( |  | ) | const

inline

Get TransformFeedBack Mode.

References _feedbackmode.

## getTransformFeedBackVarying()

const std::string & osg::Program::getTransformFeedBackVarying | ( | unsigned int | i | ) | const

inline

Get const TransformFeedBack Varying at index i.

References _feedbackout.

## getUniformBlockBindingList()

const UniformBlockBindingList & osg::Program::getUniformBlockBindingList | ( |  | ) | const

inline

References _uniformBlockBindingList.

## isFixedFunction()

bool osg::Program::isFixedFunction | ( |  | ) | const

Return true if this Program represents "fixed-functionality" rendering

## META_StateAttribute()

osg::Program::META_StateAttribute | ( | osg | ,
|  | Program | ,
|  | PROGRAM | )

References osg::StateAttribute::PROGRAM, and Program().

## releaseGLObjects()

virtual void osg::Program::releaseGLObjects | ( | osg::State * | state = 0 | ) | const

virtual

release OpenGL objects in specified graphics context if State object is passed, otherwise release OpenGL objects for all graphics context if State object pointer NULL.

Reimplemented from osg::StateAttribute.

## removeBindAttribLocation()

void osg::Program::removeBindAttribLocation | ( | const std::string & | name | ) |

Remove an attribute location binding.

## removeBindFragDataLocation()

void osg::Program::removeBindFragDataLocation | ( | const std::string & | name | ) |

Remove an frag data location binding.

## removeBindUniformBlock()

void osg::Program::removeBindUniformBlock | ( | const std::string & | name | ) |

Remove a uniform block binding.

## removeShader() [1/2]

template<class T>

bool osg::Program::removeShader | ( | const ref_ptr< T > & | shader | ) |

inline

References osg::ref_ptr< T >::get(), and removeShader().

Referenced by removeShader().

## removeShader() [2/2]

bool osg::Program::removeShader | ( | Shader * | shader | ) |

Remove osg::Shader from this osg::Program. Mark Program as needing relink. Return true for success

## removeTransformFeedBackVarying()

void osg::Program::removeTransformFeedBackVarying | ( | const std::string & | name | ) |

inline

Remove a TransformFeedBackVarying.

References _feedbackout.

## resizeGLObjectBuffers()

virtual void osg::Program::resizeGLObjectBuffers | ( | unsigned int | maxSize | ) |

virtual

Resize any per context GLObject buffers to specified size.

Reimplemented from osg::StateAttribute.

## setParameter()

void osg::Program::setParameter | ( | GLenum | pname,
|  | GLint | value )

Set/get GL program parameters

## setProgramBinary()

void osg::Program::setProgramBinary | ( | ProgramBinary * | programBinary | ) |

inline

Set the Program using a ProgramBinary. If a ProgramBinary is not yet available then setting an empty one signals that compileProgramBinary will be called later.

References _programBinary.

## setShaderDefines()

void osg::Program::setShaderDefines | ( | const ShaderDefines & | shaderDefs | ) |

inline

Experimental.

References _shaderDefines.

## setThreadSafeRefUnref()

virtual void osg::Program::setThreadSafeRefUnref | ( | bool | threadSafe | ) |

virtual

Set whether to use a mutex to ensure ref() and unref() are thread safe.

Reimplemented from osg::Object.

## setTransformFeedBackMode()

void osg::Program::setTransformFeedBackMode | ( | GLenum | e | ) |

inline

Set TransformFeedBack Mode.

References _feedbackmode.

## Friends And Related Symbol Documentation

## PerContextProgram

friend class PerContextProgram

friend

## Member Data Documentation

## _attribBindingList

AttribBindingList osg::Program::_attribBindingList

protected

Referenced by getAttribBindingList().

## _feedbackmode

GLenum osg::Program::_feedbackmode

protected

TransformFeedBack

Referenced by getTransformFeedBackMode(), and setTransformFeedBackMode().

## _feedbackout

std::vector<std::string> osg::Program::_feedbackout

protected

Referenced by addTransformFeedBackVarying(), getNumTransformFeedBackVaryings(), getTransformFeedBackVarying(), and removeTransformFeedBackVarying().

## _fragDataBindingList

FragDataBindingList osg::Program::_fragDataBindingList

protected

Referenced by getFragDataBindingList().

## _geometryInputType

GLint osg::Program::_geometryInputType

protected

## _geometryOutputType

GLint osg::Program::_geometryOutputType

protected

## _geometryVerticesOut

GLint osg::Program::_geometryVerticesOut

protected

Parameters maintained with glProgramParameteriEXT

## _pcpList

osg::buffered_value< osg::ref_ptr<ProgramObjects> > osg::Program::_pcpList

mutable protected

## _programBinary

osg::ref_ptr<ProgramBinary> osg::Program::_programBinary

protected

Referenced by getProgramBinary(), getProgramBinary(), and setProgramBinary().

## _shaderDefines

ShaderDefines osg::Program::_shaderDefines

protected

Referenced by getShaderDefines(), getShaderDefines(), and setShaderDefines().

## _shaderList

ShaderList osg::Program::_shaderList

protected

Referenced by getNumShaders(), getShader(), and getShader().

## _uniformBlockBindingList

UniformBlockBindingList osg::Program::_uniformBlockBindingList

protected

Referenced by getUniformBlockBindingList().

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

- osg/Program