|
OpenSceneGraph
3.0.1
|
osg::Shader is an application-level abstraction of an OpenGL glShader. More...

Classes | |
| class | PerContextShader |
| PerContextShader (PCS) is an OSG-internal encapsulation of glShader per-GL context. More... | |
Public Types | |
| enum | Type { VERTEX = GL_VERTEX_SHADER, TESSCONTROL = GL_TESS_CONTROL_SHADER, TESSEVALUATION = GL_TESS_EVALUATION_SHADER, GEOMETRY = GL_GEOMETRY_SHADER_EXT, FRAGMENT = GL_FRAGMENT_SHADER, UNDEFINED = -1 } |
| typedef std::multimap< float, std::string > | CodeInjectionMap |
| The code injection map used when generating the main shader during main shader composition. | |
Public Types inherited from osg::Object | |
| enum | DataVariance { DYNAMIC, STATIC, UNSPECIFIED } |
Public Member Functions | |
| Shader (Type type=UNDEFINED) | |
| Shader (Type type, const std::string &source) | |
| Shader (Type type, ShaderBinary *shaderBinary) | |
| Shader (const Shader &rhs, const osg::CopyOp ©op=osg::CopyOp::SHALLOW_COPY) | |
| Copy constructor using CopyOp to manage deep vs shallow copy. | |
| META_Object (osg, Shader) | |
| int | compare (const Shader &rhs) const |
| bool | setType (Type t) |
| Set the Shader type as an enum. | |
| Type | getType () const |
| Get the Shader type as an enum. | |
| const char * | getTypename () const |
| Get the Shader type as a descriptive string. | |
| void | setFileName (const std::string &fileName) |
| Set file name for the shader source code. | |
| const std::string & | getFileName () const |
| Get filename to which the shader source code belongs. | |
| void | setShaderSource (const std::string &sourceText) |
| Set the Shader's source code text from a string. | |
| const std::string & | getShaderSource () const |
| Query the shader's source code text. | |
| void | setShaderBinary (ShaderBinary *shaderBinary) |
| Set the Shader using a ShaderBinary. | |
| ShaderBinary * | getShaderBinary () |
| Get the Shader's ShaderBinary, return NULL if none is assigned. | |
| const ShaderBinary * | getShaderBinary () const |
| Get the const Shader's ShaderBinary, return NULL if none is assigned. | |
| bool | loadShaderSourceFromFile (const std::string &fileName) |
| Load the Shader's source code text from a file. | |
| void | addCodeInjection (float position, const std::string &code) |
| Add code injection that will be placed in the main shader to enable support for this shader. | |
| CodeInjectionMap & | getCodeInjectionMap () |
| Get the code injection map. | |
| const CodeInjectionMap & | getCodeInjectionMap () const |
| Get the const code injection map. | |
| virtual void | resizeGLObjectBuffers (unsigned int maxSize) |
| Resize any per context GLObject buffers to specified size. | |
| 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 | dirtyShader () |
| Mark our PCSs as needing recompilation. | |
| void | compileShader (osg::State &state) const |
| If needed, compile the PCS's glShader. | |
| void | attachShader (unsigned int contextID, GLuint program) const |
| For a given GL context, attach a glShader to a glProgram. | |
| void | detachShader (unsigned int contextID, GLuint program) const |
| For a given GL context, detach a glShader to a glProgram. | |
| bool | getGlShaderInfoLog (unsigned int contextID, std::string &log) const |
| Query InfoLog from a glShader. | |
| PerContextShader * | getPCS (unsigned int contextID) const |
Public Member Functions inherited from osg::Object | |
| Object () | |
| Construct an object. | |
| Object (bool threadSafeRefUnref) | |
| Object (const Object &, const CopyOp ©op=CopyOp::SHALLOW_COPY) | |
| Copy constructor, optional CopyOp object can be used to control shallow vs deep copying of dynamic data. | |
| virtual Object * | cloneType () const =0 |
| Clone the type of an object, with Object* return type. | |
| virtual Object * | clone (const CopyOp &) const =0 |
| Clone an object, with Object* return type. | |
| virtual bool | isSameKindAs (const Object *) const |
| virtual const char * | libraryName () const =0 |
| return the name of the object's library. | |
| virtual const char * | className () const =0 |
| return the name of the object's class type. | |
| virtual void | setThreadSafeRefUnref (bool threadSafe) |
| Set whether to use a mutex to ensure ref() and unref() are thread safe. | |
| virtual void | setName (const std::string &name) |
| Set the name of object using C++ style string. | |
| void | setName (const char *name) |
| Set the name of object using a C style string. | |
| const std::string & | getName () const |
| Get the name of object. | |
| void | setDataVariance (DataVariance dv) |
| Set the data variance of this object. | |
| DataVariance | getDataVariance () const |
| Get the data variance of this object. | |
| virtual void | computeDataVariance () |
| Compute the DataVariance based on an assessment of callback etc. | |
| void | setUserDataContainer (osg::UserDataContainer *udc) |
| set the UserDataContainer object. | |
| osg::UserDataContainer * | getUserDataContainer () |
| get the UserDataContainer attached to this object. | |
| const osg::UserDataContainer * | getUserDataContainer () const |
| get the const UserDataContainer attached to this object. | |
| osg::UserDataContainer * | getOrCreateUserDataContainer () |
| Convinience method that returns the UserDataContainer, and if one doesn't already exist creates and assigns a DefaultUserDataContainer to the Object and then return this new UserDataContainer. | |
| virtual void | setUserData (Referenced *obj) |
| Set user data, data must be subclassed from Referenced to allow automatic memory handling. | |
| virtual Referenced * | getUserData () |
| Get user data. | |
| virtual const Referenced * | getUserData () const |
| Get const user data. | |
| template<typename T > | |
| bool | getUserValue (const std::string &name, T &value) const |
| Convinience method that casts the named UserObject to osg::TemplateValueObject<T> and gets the value. | |
| template<typename T > | |
| void | setUserValue (const std::string &name, const T &value) |
| Convinience method that creates the osg::TemplateValueObject<T> to store the specified value and adds it as a named UserObject. | |
Public Member Functions inherited from osg::Referenced | |
| Referenced () | |
| Referenced (bool threadSafeRefUnref) | |
| Referenced (const Referenced &) | |
| Referenced & | operator= (const Referenced &) |
| bool | getThreadSafeRefUnref () const |
| Get whether a mutex is used to ensure ref() and unref() are thread safe. | |
| OpenThreads::Mutex * | getRefMutex () const |
| Get the mutex used to ensure thread safety of ref()/unref(). | |
| int | ref () const |
| Increment the reference count by one, indicating that this object has another pointer which is referencing it. | |
| int | unref () const |
| Decrement the reference count by one, indicating that a pointer to this object is referencing it. | |
| int | unref_nodelete () const |
| Decrement the reference count by one, indicating that a pointer to this object is referencing it. | |
| int | referenceCount () const |
| Return the number of pointers currently referencing this object. | |
| ObserverSet * | getObserverSet () const |
| Get the ObserverSet if one is attached, otherwise return NULL. | |
| ObserverSet * | getOrCreateObserverSet () const |
| Get the ObserverSet if one is attached, otherwise create an ObserverSet, attach it, then return this newly created ObserverSet. | |
| void | addObserver (Observer *observer) const |
| Add a Observer that is observing this object, notify the Observer when this object gets deleted. | |
| void | removeObserver (Observer *observer) const |
| Remove Observer that is observing this object. | |
Static Public Member Functions | |
| static Shader * | readShaderFile (Type type, const std::string &fileName) |
| Read shader source from file and then constructor shader of specified type. | |
| static void | deleteGlShader (unsigned int contextID, GLuint shader) |
| Mark internal glShader for deletion. | |
| static void | flushDeletedGlShaders (unsigned int contextID, double currentTime, double &availableTime) |
| flush all the cached glShaders which need to be deleted in the OpenGL context related to contextID. | |
| static void | discardDeletedGlShaders (unsigned int contextID) |
| discard all the cached glShaders which need to be deleted in the OpenGL context related to contextID. | |
| static Shader::Type | getTypeId (const std::string &tname) |
Protected Types | |
| typedef std::set< osg::Program * > | ProgramSet |
| osg::Programs that this osg::Shader is attached to | |
Protected Member Functions | |
| virtual | ~Shader () |
| bool | addProgramRef (osg::Program *program) |
| bool | removeProgramRef (osg::Program *program) |
Protected Member Functions inherited from osg::Object | |
| virtual | ~Object () |
| Object destructor. | |
Protected Member Functions inherited from osg::Referenced | |
| virtual | ~Referenced () |
| void | signalObserversAndDelete (bool signalDelete, bool doDelete) const |
| void | deleteUsingDeleteHandler () const |
Protected Attributes | |
| Type | _type |
| std::string | _shaderFileName |
| std::string | _shaderSource |
| osg::ref_ptr< ShaderBinary > | _shaderBinary |
| CodeInjectionMap | _codeInjectionMap |
| ProgramSet | _programSet |
| osg::buffered_value < osg::ref_ptr < PerContextShader > > | _pcsList |
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 | osg::Program |
osg::Shader is an application-level abstraction of an OpenGL glShader.
It is a container to load the shader source code text and manage its compilation. An osg::Shader may be attached to more than one osg::Program. Shader will automatically manage per-context instancing of the internal objects, if that is necessary for a particular display configuration.
| typedef std::multimap<float, std::string> osg::Shader::CodeInjectionMap |
The code injection map used when generating the main shader during main shader composition.
|
protected |
osg::Programs that this osg::Shader is attached to
| enum osg::Shader::Type |
| osg::Shader::Shader | ( | Type | type, |
| const std::string & | source | ||
| ) |
| osg::Shader::Shader | ( | Type | type, |
| ShaderBinary * | shaderBinary | ||
| ) |
| osg::Shader::Shader | ( | const Shader & | rhs, |
| const osg::CopyOp & | copyop = osg::CopyOp::SHALLOW_COPY |
||
| ) |
Copy constructor using CopyOp to manage deep vs shallow copy.
|
protectedvirtual |
|
inline |
Add code injection that will be placed in the main shader to enable support for this shader.
The position is set up so that code to be inserted before the main() will have a negative value, a position between 0 and 1.0 will be inserted in main() and a position greater than 1.0 will be placed after the main(). During shader composition all the code injections are sorted in ascending order and then placed in the appropriate section of the main shader.
|
protected |
| void osg::Shader::attachShader | ( | unsigned int | contextID, |
| GLuint | program | ||
| ) | const |
For a given GL context, attach a glShader to a glProgram.
| int osg::Shader::compare | ( | const Shader & | rhs | ) | const |
| void osg::Shader::compileShader | ( | osg::State & | state | ) | const |
If needed, compile the PCS's glShader.
|
static |
Mark internal glShader for deletion.
Deletion requests are queued until they can be executed in the proper GL context.
| void osg::Shader::detachShader | ( | unsigned int | contextID, |
| GLuint | program | ||
| ) | const |
For a given GL context, detach a glShader to a glProgram.
| void osg::Shader::dirtyShader | ( | ) |
Mark our PCSs as needing recompilation.
Also mark Programs that depend on us as needing relink
|
static |
discard all the cached glShaders which need to be deleted in the OpenGL context related to contextID.
Note, unlike flush no OpenGL calls are made, instead the handles are all removed. this call is useful for when an OpenGL context has been destroyed.
|
static |
flush all the cached glShaders which need to be deleted in the OpenGL context related to contextID.
|
inline |
Get the code injection map.
|
inline |
Get the const code injection map.
|
inline |
Get filename to which the shader source code belongs.
| bool osg::Shader::getGlShaderInfoLog | ( | unsigned int | contextID, |
| std::string & | log | ||
| ) | const |
Query InfoLog from a glShader.
| PerContextShader* osg::Shader::getPCS | ( | unsigned int | contextID | ) | const |
|
inline |
Get the Shader's ShaderBinary, return NULL if none is assigned.
|
inline |
Get the const Shader's ShaderBinary, return NULL if none is assigned.
|
inline |
Query the shader's source code text.
|
static |
| const char* osg::Shader::getTypename | ( | ) | const |
Get the Shader type as a descriptive string.
| bool osg::Shader::loadShaderSourceFromFile | ( | const std::string & | fileName | ) |
Load the Shader's source code text from a file.
| osg::Shader::META_Object | ( | osg | , |
| Shader | |||
| ) |
Read shader source from file and then constructor shader of specified type.
Return the resulting Shader or 0 if no valid shader source could be read.
|
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::Object.
|
protected |
|
virtual |
Resize any per context GLObject buffers to specified size.
Reimplemented from osg::Object.
|
inline |
Set file name for the shader source code.
|
inline |
Set the Shader using a ShaderBinary.
| void osg::Shader::setShaderSource | ( | const std::string & | sourceText | ) |
Set the Shader's source code text from a string.
| bool osg::Shader::setType | ( | Type | t | ) |
Set the Shader type as an enum.
Referenced by osgDB::readShaderFile().
|
friend |
|
protected |
|
mutableprotected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
| Generated at Fri Sep 7 2012 17:48:14 for the OpenSceneGraph by doxygen 1.8.1.2. |