Public Types | |
typedef std::map < std::string, GLuint > | AttribBindingList |
typedef std::map < std::string, GLuint > | FragDataBindingList |
typedef std::map < std::string, ActiveVarInfo > | ActiveVarInfoMap |
Public Member Functions | |
Program () | |
Program (const Program &rhs, const osg::CopyOp ©op=osg::CopyOp::SHALLOW_COPY) | |
Copy constructor using CopyOp to manage deep vs shallow copy. | |
META_StateAttribute (osg, Program, PROGRAM) | |
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, activate our program in the GL pipeline, performing any rebuild operations that might be pending. | |
virtual void | setThreadSafeRefUnref (bool threadSafe) |
Set whether to use a mutex to ensure ref() and unref() are thread safe. | |
virtual void | compileGLObjects (osg::State &state) const |
Compile program and associated shaders. | |
virtual void | resizeGLObjectBuffers (unsigned int maxSize) |
Resize any per context GLObject buffers to specified size. | |
virtual void | releaseGLObjects (osg::State *state=0) const |
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. | |
void | dirtyProgram () |
Mark our PCSOs as needing relink. | |
bool | addShader (Shader *shader) |
Attach an osg::Shader to this osg::Program. | |
unsigned int | getNumShaders () const |
Shader * | getShader (unsigned int i) |
const Shader * | getShader (unsigned int i) const |
bool | removeShader (Shader *shader) |
Remove osg::Shader from this osg::Program. | |
void | addBindAttribLocation (const std::string &name, GLuint index) |
Add an attribute location binding. | |
void | removeBindAttribLocation (const std::string &name) |
Remove an attribute location binding. | |
void | addBindFragDataLocation (const std::string &name, GLuint index) |
Add an frag data location binding. | |
void | removeBindFragDataLocation (const std::string &name) |
Remove an frag data location binding. | |
const AttribBindingList & | getAttribBindingList () const |
const FragDataBindingList & | getFragDataBindingList () const |
bool | isFixedFunction () const |
Return true if this Program represents "fixed-functionality" rendering. | |
bool | getGlProgramInfoLog (unsigned int contextID, std::string &log) const |
Query InfoLog from a glProgram. | |
const ActiveVarInfoMap & | getActiveUniforms (unsigned int contextID) const |
const ActiveVarInfoMap & | getActiveAttribs (unsigned int contextID) const |
PerContextProgram * | getPCP (unsigned int contextID) const |
Get the PCP for a particular GL context. | |
Static Public Member Functions | |
static void | deleteGlProgram (unsigned int contextID, GLuint program) |
Mark internal glProgram for deletion. | |
static void | flushDeletedGlPrograms (unsigned int contextID, double currentTime, double &availableTime) |
flush all the cached glPrograms which need to be deleted in the OpenGL context related to contextID. | |
Protected Types | |
typedef std::vector < ref_ptr< Shader > > | ShaderList |
Protected Member Functions | |
virtual | ~Program () |
Protected Attributes | |
osg::buffered_value < osg::ref_ptr < PerContextProgram > > | _pcpList |
AttribBindingList | _attribBindingList |
FragDataBindingList | _fragDataBindingList |
ShaderList | _shaderList |
Friends | |
class | PerContextProgram |
Classes | |
struct | ActiveVarInfo |
class | PerContextProgram |
PerContextProgram (PCP) is an OSG-internal encapsulation of glPrograms per-GL context. More... |
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.
typedef std::map<std::string,GLuint> osg::Program::AttribBindingList |
typedef std::map<std::string,GLuint> osg::Program::FragDataBindingList |
typedef std::map< std::string, ActiveVarInfo > osg::Program::ActiveVarInfoMap |
typedef std::vector< ref_ptr<Shader> > osg::Program::ShaderList [protected] |
osg::Program::Program | ( | ) |
osg::Program::Program | ( | const Program & | rhs, | |
const osg::CopyOp & | copyop = osg::CopyOp::SHALLOW_COPY | |||
) |
Copy constructor using CopyOp to manage deep vs shallow copy.
virtual osg::Program::~Program | ( | ) | [protected, virtual] |
osg::Program::META_StateAttribute | ( | osg | , | |
Program | , | |||
PROGRAM | ||||
) |
virtual int osg::Program::compare | ( | const osg::StateAttribute & | sa | ) | const [virtual] |
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.
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::Referenced.
virtual void osg::Program::compileGLObjects | ( | osg::State & | state | ) | const [virtual] |
virtual void osg::Program::resizeGLObjectBuffers | ( | unsigned int | maxSize | ) | [virtual] |
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.
void osg::Program::dirtyProgram | ( | ) |
Mark our PCSOs as needing relink.
bool osg::Program::addShader | ( | Shader * | shader | ) |
Attach an osg::Shader to this osg::Program.
Mark Program as needing relink. Return true for success
unsigned int osg::Program::getNumShaders | ( | ) | const [inline] |
Shader* osg::Program::getShader | ( | unsigned int | i | ) | [inline] |
const Shader* osg::Program::getShader | ( | unsigned int | i | ) | const [inline] |
bool osg::Program::removeShader | ( | Shader * | shader | ) |
Remove osg::Shader from this osg::Program.
Mark Program as needing relink. Return true for success
void osg::Program::addBindAttribLocation | ( | const std::string & | name, | |
GLuint | index | |||
) |
Add an attribute location binding.
void osg::Program::removeBindAttribLocation | ( | const std::string & | name | ) |
Remove an attribute location binding.
void osg::Program::addBindFragDataLocation | ( | const std::string & | name, | |
GLuint | index | |||
) |
Add an frag data location binding.
See EXT_gpu_shader4 for BindFragDataLocationEXT
void osg::Program::removeBindFragDataLocation | ( | const std::string & | name | ) |
Remove an frag data location binding.
const AttribBindingList& osg::Program::getAttribBindingList | ( | ) | const [inline] |
const FragDataBindingList& osg::Program::getFragDataBindingList | ( | ) | const [inline] |
bool osg::Program::isFixedFunction | ( | ) | const |
Return true if this Program represents "fixed-functionality" rendering.
bool osg::Program::getGlProgramInfoLog | ( | unsigned int | contextID, | |
std::string & | log | |||
) | const |
Query InfoLog from a glProgram.
static void osg::Program::deleteGlProgram | ( | unsigned int | contextID, | |
GLuint | program | |||
) | [static] |
Mark internal glProgram for deletion.
Deletion requests are queued until they can be executed in the proper GL context.
static void osg::Program::flushDeletedGlPrograms | ( | unsigned int | contextID, | |
double | currentTime, | |||
double & | availableTime | |||
) | [static] |
flush all the cached glPrograms which need to be deleted in the OpenGL context related to contextID.
const ActiveVarInfoMap& osg::Program::getActiveUniforms | ( | unsigned int | contextID | ) | const |
const ActiveVarInfoMap& osg::Program::getActiveAttribs | ( | unsigned int | contextID | ) | const |
PerContextProgram* osg::Program::getPCP | ( | unsigned int | contextID | ) | const |
Get the PCP for a particular GL context.
friend class PerContextProgram [friend] |
osg::buffered_value< osg::ref_ptr<PerContextProgram> > osg::Program::_pcpList [mutable, protected] |
AttribBindingList osg::Program::_attribBindingList [protected] |
ShaderList osg::Program::_shaderList [protected] |