openscenegraph
osg::Program Class Reference

#include <Program>

Inheritance diagram for osg::Program:
osg::StateAttribute osg::Object osg::Referenced

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]

◆ 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 ( )
protectedvirtual

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

◆ isFixedFunction()

bool osg::Program::isFixedFunction ( ) const

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

◆ META_StateAttribute()

osg::Program::META_StateAttribute ( osg ,
Program ,
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.

◆ 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

◆ _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
mutableprotected

◆ _programBinary

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

◆ _shaderDefines

ShaderDefines osg::Program::_shaderDefines
protected

◆ _shaderList

ShaderList osg::Program::_shaderList
protected

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

◆ _uniformBlockBindingList

UniformBlockBindingList osg::Program::_uniformBlockBindingList
protected

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