osgGL2::ProgramObject Class Reference

osgGL2::ProgramObject is an application-level abstraction of the OpenGL Shading Language glProgramObject. More...

Inheritance diagram for osgGL2::ProgramObject:

Inheritance graph
[legend]
List of all members.

Public Member Functions

 ProgramObject ()
 ProgramObject (const ProgramObject &rhs, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)
 Copy constructor using CopyOp to manage deep vs shallow copy.
 META_StateAttribute (osgGL2, ProgramObject, PROGRAMOBJECT)
virtual int compare (const osg::StateAttribute &sa) const
 return -1 if *this < *rhs, 0 if *this==*rhs, 1 if *this>*rhs.
virtual void apply (osg::State &state) const
 If enabled, install our shader program in the GL pipeline, performing any shader program rebuild operations that might be pending.
virtual void compileGLObjects (osg::State &state) const
 default to nothing to compile - all state is applied immediately.
virtual void releaseGLObjects (osg::State *state=0) const
 release an OpenGL objects in specified graphics context if State object is passed, otherwise release OpenGL objexts for all graphics context if State object pointer NULL.
void dirtyProgramObject ()
 Mark us as "dirty" and in need of relinking.
void dirtyShaderObjects ()
 Mark our attached ShaderObjects as "dirty" and in need of recompilation.
void enable (bool enabled)
 An override to control whether the shader program will actually be installed when OSG attempts to apply().
void addShader (ShaderObject *shadObj)
 Attach a ShaderObject to this ProgramObject.
void setUniform (const char *uniformName, int value)
 Assign a value to a ProgramObject's uniform variable.
void setUniform (const char *uniformName, float value)
void setUniform (const char *uniformName, osg::Vec2 value)
void setUniform (const char *uniformName, osg::Vec3 value)
void setUniform (const char *uniformName, osg::Vec4 value)
void setSampler (const char *uniformName, int value)

Static Public Member Functions

static void deleteObject (unsigned int contextID, GLhandleARB handle)
 Mark internal GL objects for deletion.
static void flushDeletedGL2Objects (unsigned int contextID, double currentTime, double &availableTime)
 flush all the cached glProgramObjects which need to be deleted in the OpenGL context related to contextID.

Protected Types

typedef std::vector< ShaderObjectPtrShaderObjectList

Protected Member Functions

virtual ~ProgramObject ()
PerContextProgObjgetPCPO (unsigned int contextID) const
 Get the PCPO for a particular GL context.
void updateUniforms (int frameNumber) const
 Per frame, copy the list of pending UniformValue updates to each of the PCPOs.

Protected Attributes

bool _enabled
ShaderObjectList _shaderObjectList
osg::buffered_value< osg::ref_ptr<
PerContextProgObj > > 
_pcpoList
int _frameNumberOfLastPCPOUpdate
UniformValueList _univalList

Classes

class  PerContextProgObj
 PCPO is an OSG-internal encapsulation of glProgramObjects per-GL context. More...

Detailed Description

osgGL2::ProgramObject is an application-level abstraction of the OpenGL Shading Language glProgramObject.

It is an osg::StateAttribute that, when applied, will install an OGLSL shader program for subsequent rendering. osgGL2::ShaderObjects containing the actual shader source code are attached to the ProgramObject, which will then manage the compilation, linking, and installation of the GL shader program. ProgramObject will automatically manage per-context instancing of the internal objects, if that is necessary for a particular display configuration.


Member Typedef Documentation

typedef std::vector< ShaderObjectPtr > osgGL2::ProgramObject::ShaderObjectList [protected]
 


Constructor & Destructor Documentation

ProgramObject::ProgramObject  ) 
 

ProgramObject::ProgramObject const ProgramObject rhs,
const osg::CopyOp copyop = osg::CopyOp::SHALLOW_COPY
 

Copy constructor using CopyOp to manage deep vs shallow copy.

ProgramObject::~ProgramObject  )  [protected, virtual]
 


Member Function Documentation

void ProgramObject::addShader ShaderObject shadObj  ) 
 

Attach a ShaderObject to this ProgramObject.

void ProgramObject::apply osg::State state  )  const [virtual]
 

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

Implements osg::StateAttribute.

int ProgramObject::compare const osg::StateAttribute sa  )  const [virtual]
 

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

Implements osg::StateAttribute.

void ProgramObject::compileGLObjects osg::State state  )  const [virtual]
 

default to nothing to compile - all state is applied immediately.

Reimplemented from osg::StateAttribute.

void ProgramObject::deleteObject unsigned int  contextID,
GLhandleARB  handle
[static]
 

Mark internal GL objects for deletion.

Deletion requests are queued until they can be executed in the proper GL context.

void ProgramObject::dirtyProgramObject  ) 
 

Mark us as "dirty" and in need of relinking.

void ProgramObject::dirtyShaderObjects  ) 
 

Mark our attached ShaderObjects as "dirty" and in need of recompilation.

void osgGL2::ProgramObject::enable bool  enabled  )  [inline]
 

An override to control whether the shader program will actually be installed when OSG attempts to apply().

void ProgramObject::flushDeletedGL2Objects unsigned int  contextID,
double  currentTime,
double &  availableTime
[static]
 

flush all the cached glProgramObjects which need to be deleted in the OpenGL context related to contextID.

ProgramObject::PerContextProgObj * ProgramObject::getPCPO unsigned int  contextID  )  const [protected]
 

Get the PCPO for a particular GL context.

osgGL2::ProgramObject::META_StateAttribute osgGL2  ,
ProgramObject  ,
PROGRAMOBJECT 
 

void ProgramObject::releaseGLObjects osg::State state = 0  )  const [virtual]
 

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

Reimplemented from osg::StateAttribute.

void osgGL2::ProgramObject::setSampler const char *  uniformName,
int  value
[inline]
 

void ProgramObject::setUniform const char *  uniformName,
osg::Vec4  value
 

void ProgramObject::setUniform const char *  uniformName,
osg::Vec3  value
 

void ProgramObject::setUniform const char *  uniformName,
osg::Vec2  value
 

void ProgramObject::setUniform const char *  uniformName,
float  value
 

void ProgramObject::setUniform const char *  uniformName,
int  value
 

Assign a value to a ProgramObject's uniform variable.

void ProgramObject::updateUniforms int  frameNumber  )  const [protected]
 

Per frame, copy the list of pending UniformValue updates to each of the PCPOs.


Member Data Documentation

bool osgGL2::ProgramObject::_enabled [protected]
 

int osgGL2::ProgramObject::_frameNumberOfLastPCPOUpdate [mutable, protected]
 

osg::buffered_value< osg::ref_ptr<PerContextProgObj> > osgGL2::ProgramObject::_pcpoList [mutable, protected]
 

ShaderObjectList osgGL2::ProgramObject::_shaderObjectList [protected]
 

UniformValueList osgGL2::ProgramObject::_univalList [mutable, protected]
 


The documentation for this class was generated from the following files:
Generated at Wed Mar 8 21:52:58 2006 for the OpenSceneGraph by doxygen 1.4.6.