Public Types | |
enum | Type { VERTEX = GL_VERTEX_SHADER, FRAGMENT = GL_FRAGMENT_SHADER, GEOMETRY = GL_GEOMETRY_SHADER_EXT, UNDEFINED = -1 } |
Public Member Functions | |
Shader (Type type=UNDEFINED) | |
Shader (Type type, const std::string &source) | |
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) |
void | setShaderSource (const std::string &sourceText) |
Load the Shader's source code text from a string. | |
bool | loadShaderSourceFromFile (const std::string &fileName) |
Load the Shader's source code text from a file. | |
const std::string & | getShaderSource () const |
Query the shader's source code text. | |
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. | |
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 (unsigned int contextID) 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. | |
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 () |
PerContextShader * | getPCS (unsigned int contextID) const |
bool | addProgramRef (osg::Program *program) |
bool | removeProgramRef (osg::Program *program) |
Protected Attributes | |
Type | _type |
std::string | _shaderSource |
std::string | _shaderFileName |
ProgramSet | _programSet |
osg::buffered_value < osg::ref_ptr < PerContextShader > > | _pcsList |
Friends | |
class | osg::Program |
Classes | |
class | PerContextShader |
PerContextShader (PCS) is an OSG-internal encapsulation of glShader per-GL context. More... |
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::set< osg::Program* > osg::Shader::ProgramSet [protected] |
osg::Programs that this osg::Shader is attached to
enum osg::Shader::Type |
osg::Shader::Shader | ( | Type | type = UNDEFINED |
) |
osg::Shader::Shader | ( | Type | type, | |
const std::string & | source | |||
) |
osg::Shader::Shader | ( | const Shader & | rhs, | |
const osg::CopyOp & | copyop = osg::CopyOp::SHALLOW_COPY | |||
) |
Copy constructor using CopyOp to manage deep vs shallow copy.
virtual osg::Shader::~Shader | ( | ) | [protected, virtual] |
osg::Shader::META_Object | ( | osg | , | |
Shader | ||||
) |
int osg::Shader::compare | ( | const Shader & | rhs | ) | const |
bool osg::Shader::setType | ( | Type | t | ) |
void osg::Shader::setShaderSource | ( | const std::string & | sourceText | ) |
Load the Shader's source code text from a string.
Read shader source from file and then constructor shader of specified type.
Return the resulting Shader or 0 if no valid shader source code be read.
bool osg::Shader::loadShaderSourceFromFile | ( | const std::string & | fileName | ) |
Load the Shader's source code text from a file.
const std::string& osg::Shader::getShaderSource | ( | ) | const [inline] |
Query the shader's source code text.
const char* osg::Shader::getTypename | ( | ) | const |
Get the Shader type as a descriptive string.
void osg::Shader::setFileName | ( | const std::string & | fileName | ) | [inline] |
Set file name for the shader source code.
const std::string& osg::Shader::getFileName | ( | ) | const [inline] |
Get filename to which the shader source code belongs.
virtual void osg::Shader::resizeGLObjectBuffers | ( | unsigned int | maxSize | ) | [virtual] |
void osg::Shader::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::Object.
void osg::Shader::dirtyShader | ( | ) |
Mark our PCSs as needing recompilation.
Also mark Programs that depend on us as needing relink
void osg::Shader::compileShader | ( | unsigned int | contextID | ) | const |
If needed, compile the PCS's glShader.
void osg::Shader::attachShader | ( | unsigned int | contextID, | |
GLuint | program | |||
) | const |
For a given GL context, attach a glShader to a glProgram.
void osg::Shader::detachShader | ( | unsigned int | contextID, | |
GLuint | program | |||
) | const |
For a given GL context, detach a glShader to a glProgram.
bool osg::Shader::getGlShaderInfoLog | ( | unsigned int | contextID, | |
std::string & | log | |||
) | const |
Query InfoLog from a glShader.
static void osg::Shader::deleteGlShader | ( | unsigned int | contextID, | |
GLuint | shader | |||
) | [static] |
Mark internal glShader for deletion.
Deletion requests are queued until they can be executed in the proper GL context.
static void osg::Shader::flushDeletedGlShaders | ( | unsigned int | contextID, | |
double | currentTime, | |||
double & | availableTime | |||
) | [static] |
flush all the cached glShaders which need to be deleted in the OpenGL context related to contextID.
static void osg::Shader::discardDeletedGlShaders | ( | unsigned int | contextID | ) | [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 Shader::Type osg::Shader::getTypeId | ( | const std::string & | tname | ) | [static] |
PerContextShader* osg::Shader::getPCS | ( | unsigned int | contextID | ) | const [protected] |
bool osg::Shader::addProgramRef | ( | osg::Program * | program | ) | [protected] |
bool osg::Shader::removeProgramRef | ( | osg::Program * | program | ) | [protected] |
friend class osg::Program [friend] |
Type osg::Shader::_type [protected] |
std::string osg::Shader::_shaderSource [protected] |
std::string osg::Shader::_shaderFileName [protected] |
ProgramSet osg::Shader::_programSet [protected] |
osg::buffered_value< osg::ref_ptr<PerContextShader> > osg::Shader::_pcsList [mutable, protected] |