openscenegraph
Classes | Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Friends | List of all members
osg::Program Class Reference
Inheritance diagram for osg::Program:
osg::StateAttribute osg::Object osg::Referenced

Classes

struct  ActiveVarInfo
 
class  PerContextProgram
 
class  ProgramBinary
 
struct  ProgramObjects
 
struct  UniformBlockInfo
 

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

◆ 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.

◆ ~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

◆ 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.

◆ 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

◆ getFragDataBindingList()

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

◆ 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

◆ getNumTransformFeedBackVaryings()

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

Get number of TransformFeedBack Varyings.

◆ 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.

◆ getProgramBinary() [2/2]

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

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

◆ getShader() [1/2]

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

◆ getShader() [2/2]

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

◆ getShaderDefines() [1/2]

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

◆ getShaderDefines() [2/2]

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

◆ getTransformFeedBackMode()

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

Get TransformFeedBack Mode.

◆ getTransformFeedBackVarying()

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

Get const TransformFeedBack Varying at index i.

◆ 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

◆ 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.

◆ 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.

◆ setShaderDefines()

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

Experimental.

◆ 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.

Friends And Related Function Documentation

◆ PerContextProgram

friend class PerContextProgram
friend

Member Data Documentation

◆ _attribBindingList

AttribBindingList osg::Program::_attribBindingList
protected

◆ _feedbackmode

GLenum osg::Program::_feedbackmode
protected

TransformFeedBack

◆ _feedbackout

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

◆ _fragDataBindingList

FragDataBindingList osg::Program::_fragDataBindingList
protected

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

◆ _uniformBlockBindingList

UniformBlockBindingList osg::Program::_uniformBlockBindingList
protected

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