osg::Shader Class Reference

Inheritance diagram for osg::Shader:

osg::Object osg::Referenced

List of all members.

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 (Type type, ShaderBinary *shaderBinary)
 Shader (const Shader &rhs, const osg::CopyOp &copyop=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 setShaderBinary (ShaderBinary *shaderBinary)
ShaderBinarygetShaderBinary ()
const ShaderBinarygetShaderBinary () const
bool loadShaderSourceFromFile (const std::string &fileName)
virtual void resizeGLObjectBuffers (unsigned int maxSize)
void releaseGLObjects (osg::State *state=0) const
void dirtyShader ()
void compileShader (osg::State &state) const
void attachShader (unsigned int contextID, GLuint program) const
void detachShader (unsigned int contextID, GLuint program) const
bool getGlShaderInfoLog (unsigned int contextID, std::string &log) const

Static Public Member Functions

static ShaderreadShaderFile (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)

Protected Types

typedef std::set< osg::Program * > ProgramSet

Protected Member Functions

virtual ~Shader ()
PerContextShadergetPCS (unsigned int contextID) const
bool addProgramRef (osg::Program *program)
bool removeProgramRef (osg::Program *program)

Protected Attributes

Type _type
std::string _shaderFileName
std::string _shaderSource
osg::ref_ptr< ShaderBinary_shaderBinary
ProgramSet _programSet
osg::buffered_value
< osg::ref_ptr
< PerContextShader > > 
_pcsList

Friends

class osg::Program

Classes

class  PerContextShader


Detailed Description

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.

Member Typedef Documentation

typedef std::set< osg::Program* > osg::Shader::ProgramSet [protected]

osg::Programs that this osg::Shader is attached to


Member Enumeration Documentation

Enumerator:
VERTEX 
FRAGMENT 
GEOMETRY 
UNDEFINED 


Constructor & Destructor Documentation

osg::Shader::Shader ( Type  type = UNDEFINED  ) 

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.

virtual osg::Shader::~Shader (  )  [protected, virtual]


Member Function Documentation

osg::Shader::META_Object ( osg  ,
Shader   
)

int osg::Shader::compare ( const Shader rhs  )  const

bool osg::Shader::setType ( Type  t  ) 

Set the Shader type as an enum.

Referenced by osgDB::readShaderFile().

Type osg::Shader::getType (  )  const [inline]

Get the Shader type as an enum.

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.

void osg::Shader::setShaderSource ( const std::string &  sourceText  ) 

Set the Shader's source code text from a string.

const std::string& osg::Shader::getShaderSource (  )  const [inline]

Query the shader's source code text

void osg::Shader::setShaderBinary ( ShaderBinary shaderBinary  )  [inline]

Set the Shader using a ShaderBinary.

ShaderBinary* osg::Shader::getShaderBinary (  )  [inline]

Get the Shader's ShaderBinary, return NULL if none is assigned.

const ShaderBinary* osg::Shader::getShaderBinary (  )  const [inline]

Get the const Shader's ShaderBinary, return NULL if none is assigned.

static Shader* osg::Shader::readShaderFile ( Type  type,
const std::string &  fileName 
) [static]

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.

bool osg::Shader::loadShaderSourceFromFile ( const std::string &  fileName  ) 

Load the Shader's source code text from a file.

virtual void osg::Shader::resizeGLObjectBuffers ( unsigned int  maxSize  )  [virtual]

Resize any per context GLObject buffers to specified size.

Reimplemented from osg::Object.

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 ( osg::State state  )  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]


Friends And Related Function Documentation

friend class osg::Program [friend]


Member Data Documentation

Type osg::Shader::_type [protected]

std::string osg::Shader::_shaderFileName [protected]

std::string osg::Shader::_shaderSource [protected]


The documentation for this class was generated from the following file:

Generated on Fri Mar 19 19:52:52 2010 for openscenegraph by  doxygen 1.5.6