OSG
3.4.0
|
#include <Shader.h>
Classes | |
class | PerContextShader |
struct | ShaderObjects |
Public Types | |
enum | Type { VERTEX = GL_VERTEX_SHADER, TESSCONTROL = GL_TESS_CONTROL_SHADER, TESSEVALUATION = GL_TESS_EVALUATION_SHADER, GEOMETRY = GL_GEOMETRY_SHADER, FRAGMENT = GL_FRAGMENT_SHADER, COMPUTE = GL_COMPUTE_SHADER, UNDEFINED = -1 } |
enum | ShaderDefinesMode { USE_SHADER_PRAGMA, USE_MANUAL_SETTINGS } |
typedef std::multimap< float, std::string > | CodeInjectionMap |
![]() | |
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) | |
META_Object (osg, Shader) | |
int | compare (const Shader &rhs) const |
bool | setType (Type t) |
Type | getType () const |
const char * | getTypename () const |
void | setFileName (const std::string &fileName) |
const std::string & | getFileName () const |
void | setShaderSource (const std::string &sourceText) |
const std::string & | getShaderSource () const |
void | setShaderDefinesMode (ShaderDefinesMode sdm) |
ShaderDefinesMode | getShaderDefinesMode () const |
void | setShaderDefines (const ShaderDefines &shaderDefs) |
ShaderDefines & | getShaderDefines () |
const ShaderDefines & | getShaderDefines () const |
void | setShaderRequirements (const ShaderDefines &shaderDefs) |
ShaderDefines & | getShaderRequirements () |
const ShaderDefines & | getShaderRequirements () const |
void | setShaderBinary (ShaderBinary *shaderBinary) |
ShaderBinary * | getShaderBinary () |
const ShaderBinary * | getShaderBinary () const |
bool | loadShaderSourceFromFile (const std::string &fileName) |
void | addCodeInjection (float position, const std::string &code) |
CodeInjectionMap & | getCodeInjectionMap () |
const CodeInjectionMap & | getCodeInjectionMap () const |
virtual void | resizeGLObjectBuffers (unsigned int maxSize) |
void | releaseGLObjects (osg::State *state=0) const |
void | dirtyShader () |
void | compileShader (osg::State &state) const |
PerContextShader * | getPCS (osg::State &state) const |
![]() | |
Object () | |
Object (bool threadSafeRefUnref) | |
Object (const Object &, const CopyOp ©op=CopyOp::SHALLOW_COPY) | |
virtual Object * | cloneType () const =0 |
virtual Object * | clone (const CopyOp &) const =0 |
virtual bool | isSameKindAs (const Object *) const |
virtual const char * | libraryName () const =0 |
virtual const char * | className () const =0 |
std::string | getCompoundClassName () const |
virtual Node * | asNode () |
virtual const Node * | asNode () const |
virtual NodeVisitor * | asNodeVisitor () |
virtual const NodeVisitor * | asNodeVisitor () const |
virtual StateAttribute * | asStateAttribute () |
virtual const StateAttribute * | asStateAttribute () const |
virtual Uniform * | asUniform () |
virtual const Uniform * | asUniform () const |
virtual void | setThreadSafeRefUnref (bool threadSafe) |
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) |
osg::UserDataContainer * | getUserDataContainer () |
const osg::UserDataContainer * | getUserDataContainer () const |
osg::UserDataContainer * | getOrCreateUserDataContainer () |
virtual void | setUserData (Referenced *obj) |
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 |
![]() | |
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 |
Static Public Member Functions | |
static Shader * | readShaderFile (Type type, const std::string &fileName) |
static void | deleteGlShader (unsigned int contextID, GLuint shader) |
static void | flushDeletedGlShaders (unsigned int contextID, double currentTime, double &availableTime) |
static void | discardDeletedGlShaders (unsigned int contextID) |
static Shader::Type | getTypeId (const std::string &tname) |
![]() | |
static OpenThreads::Mutex * | getGlobalReferencedMutex () |
static void | setThreadSafeReferenceCounting (bool enableThreadSafeReferenceCounting) |
static bool | getThreadSafeReferenceCounting () |
static void | setDeleteHandler (DeleteHandler *handler) |
static DeleteHandler * | getDeleteHandler () |
Protected Types | |
typedef std::set< osg::Program * > | ProgramSet |
Protected Member Functions | |
virtual | ~Shader () |
bool | addProgramRef (osg::Program *program) |
bool | removeProgramRef (osg::Program *program) |
void | _computeShaderDefines () |
void | _parseShaderDefines (const std::string &str, ShaderDefines &defines) |
![]() | |
virtual | ~Object () |
![]() | |
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 |
ShaderDefinesMode | _shaderDefinesMode |
ShaderDefines | _shaderDefines |
ShaderDefines | _shaderRequirements |
ProgramSet | _programSet |
osg::buffered_value < osg::ref_ptr< ShaderObjects > > | _pcsList |
![]() | |
std::string | _name |
DataVariance | _dataVariance |
osg::UserDataContainer * | _userDataContainer |
![]() | |
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 |
|
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 |
|
protected |
|
protected |
|
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 |
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::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 |
|
inline |
|
inline |
PerContextShader* osg::Shader::getPCS | ( | osg::State & | state | ) | 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 |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
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 |
|
inline |
Set the Shader using a ShaderBinary.
|
inline |
|
inline |
|
inline |
void osg::Shader::setShaderSource | ( | const std::string & | sourceText | ) |
Set the Shader's source code text from a string.
bool osg::Shader::setType | ( | Type | t | ) |
|
friend |
|
protected |
|
mutableprotected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |