Pyrogenesis  trunk
Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | List of all members
CShaderProgram Class Referenceabstract

A compiled vertex+fragment shader program. More...

#include <ShaderProgram.h>

Inheritance diagram for CShaderProgram:
Inheritance graph
[legend]

Classes

struct  Binding
 Represents a uniform attribute or texture binding. More...
 

Public Types

typedef CStrIntern attrib_id_t
 
typedef CStrIntern texture_id_t
 
typedef CStrIntern uniform_id_t
 
typedef std::pair< int, GLenum > frag_index_pair_t
 

Public Member Functions

virtual ~CShaderProgram ()
 
virtual void Reload ()=0
 
bool IsValid () const
 Returns whether this shader was successfully loaded. More...
 
virtual void Bind ()=0
 Binds the shader into the GL context. More...
 
virtual void Unbind ()=0
 Unbinds the shader from the GL context. More...
 
int GetStreamFlags () const
 Returns bitset of STREAM_* value, indicating what vertex data streams the vertex shader needs (e.g. More...
 
virtual Binding GetTextureBinding (texture_id_t id)=0
 
void BindTexture (texture_id_t id, CTexturePtr tex)
 
virtual void BindTexture (texture_id_t id, Handle tex)=0
 
virtual void BindTexture (texture_id_t id, GLuint tex)=0
 
virtual void BindTexture (Binding id, Handle tex)=0
 
virtual Binding GetUniformBinding (uniform_id_t id)=0
 
virtual void Uniform (Binding id, float v0, float v1, float v2, float v3)=0
 
virtual void Uniform (Binding id, const CMatrix3D &v)=0
 
virtual void Uniform (Binding id, size_t count, const CMatrix3D *v)=0
 
void Uniform (Binding id, int v)
 
void Uniform (Binding id, float v)
 
void Uniform (Binding id, float v0, float v1)
 
void Uniform (Binding id, const CVector3D &v)
 
void Uniform (Binding id, const CColor &v)
 
void Uniform (uniform_id_t id, int v)
 
void Uniform (uniform_id_t id, float v)
 
void Uniform (uniform_id_t id, float v0, float v1)
 
void Uniform (uniform_id_t id, const CVector3D &v)
 
void Uniform (uniform_id_t id, const CColor &v)
 
void Uniform (uniform_id_t id, float v0, float v1, float v2, float v3)
 
void Uniform (uniform_id_t id, const CMatrix3D &v)
 
void Uniform (uniform_id_t id, size_t count, const CMatrix3D *v)
 
virtual void VertexPointer (GLint size, GLenum type, GLsizei stride, const void *pointer)
 
virtual void NormalPointer (GLenum type, GLsizei stride, const void *pointer)
 
virtual void ColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer)
 
virtual void TexCoordPointer (GLenum texture, GLint size, GLenum type, GLsizei stride, const void *pointer)
 
virtual void VertexAttribPointer (attrib_id_t id, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer)
 
virtual void VertexAttribIPointer (attrib_id_t id, GLint size, GLenum type, GLsizei stride, const void *pointer)
 
void AssertPointersBound ()
 Checks that all the required vertex attributes have been set. More...
 

Static Public Member Functions

static CShaderProgramConstructARB (const VfsPath &vertexFile, const VfsPath &fragmentFile, const CShaderDefines &defines, const std::map< CStrIntern, int > &vertexIndexes, const std::map< CStrIntern, frag_index_pair_t > &fragmentIndexes, int streamflags)
 Construct based on ARB vertex/fragment program files. More...
 
static CShaderProgramConstructGLSL (const VfsPath &vertexFile, const VfsPath &fragmentFile, const CShaderDefines &defines, const std::map< CStrIntern, int > &vertexAttribs, int streamflags)
 Construct based on GLSL vertex/fragment shader files. More...
 
static CShaderProgramConstructFFP (const std::string &id, const CShaderDefines &defines)
 Construct an instance of a pre-defined fixed-function pipeline setup. More...
 

Protected Member Functions

 CShaderProgram (int streamflags)
 
void BindClientStates ()
 
void UnbindClientStates ()
 

Protected Attributes

bool m_IsValid
 
int m_StreamFlags
 
int m_ValidStreams
 

Private Member Functions

 NONCOPYABLE (CShaderProgram)
 

Detailed Description

A compiled vertex+fragment shader program.

The implementation may use GL_ARB_{vertex,fragment}_program (ARB assembly syntax) or GL_ARB_{vertex,fragment}_shader (GLSL), or may use hard-coded fixed-function multitexturing setup code; the difference is hidden from the caller.

Texture/uniform IDs are typically strings, corresponding to the names defined in the shader .xml file. Alternatively (and more efficiently, if used very frequently), call GetTextureBinding/GetUniformBinding and pass its return value as the ID. Setting uniforms that the shader .xml doesn't support is harmless.

For a high-level overview of shaders and materials, see http://trac.wildfiregames.com/wiki/MaterialSystem

Member Typedef Documentation

typedef std::pair<int, GLenum> CShaderProgram::frag_index_pair_t

Constructor & Destructor Documentation

virtual CShaderProgram::~CShaderProgram ( )
inlinevirtual
CShaderProgram::CShaderProgram ( int  streamflags)
protected

Member Function Documentation

void CShaderProgram::AssertPointersBound ( )

Checks that all the required vertex attributes have been set.

Call this before calling glDrawArrays/glDrawElements etc to avoid potential crashes.

virtual void CShaderProgram::Bind ( )
pure virtual
void CShaderProgram::BindClientStates ( )
protected
void CShaderProgram::BindTexture ( texture_id_t  id,
CTexturePtr  tex 
)
virtual void CShaderProgram::BindTexture ( texture_id_t  id,
Handle  tex 
)
pure virtual
virtual void CShaderProgram::BindTexture ( texture_id_t  id,
GLuint  tex 
)
pure virtual
virtual void CShaderProgram::BindTexture ( Binding  id,
Handle  tex 
)
pure virtual
void CShaderProgram::ColorPointer ( GLint  size,
GLenum  type,
GLsizei  stride,
const void *  pointer 
)
virtual

Reimplemented in CShaderProgramGLSL.

CShaderProgram * CShaderProgram::ConstructARB ( const VfsPath vertexFile,
const VfsPath fragmentFile,
const CShaderDefines defines,
const std::map< CStrIntern, int > &  vertexIndexes,
const std::map< CStrIntern, frag_index_pair_t > &  fragmentIndexes,
int  streamflags 
)
static

Construct based on ARB vertex/fragment program files.

CShaderProgram * CShaderProgram::ConstructFFP ( const std::string &  id,
const CShaderDefines defines 
)
static

Construct an instance of a pre-defined fixed-function pipeline setup.

CShaderProgram * CShaderProgram::ConstructGLSL ( const VfsPath vertexFile,
const VfsPath fragmentFile,
const CShaderDefines defines,
const std::map< CStrIntern, int > &  vertexAttribs,
int  streamflags 
)
static

Construct based on GLSL vertex/fragment shader files.

int CShaderProgram::GetStreamFlags ( ) const

Returns bitset of STREAM_* value, indicating what vertex data streams the vertex shader needs (e.g.

position, color, UV, ...).

virtual Binding CShaderProgram::GetTextureBinding ( texture_id_t  id)
pure virtual
virtual Binding CShaderProgram::GetUniformBinding ( uniform_id_t  id)
pure virtual
bool CShaderProgram::IsValid ( ) const

Returns whether this shader was successfully loaded.

CShaderProgram::NONCOPYABLE ( CShaderProgram  )
private
void CShaderProgram::NormalPointer ( GLenum  type,
GLsizei  stride,
const void *  pointer 
)
virtual

Reimplemented in CShaderProgramGLSL.

virtual void CShaderProgram::Reload ( )
pure virtual
void CShaderProgram::TexCoordPointer ( GLenum  texture,
GLint  size,
GLenum  type,
GLsizei  stride,
const void *  pointer 
)
virtual

Reimplemented in CShaderProgramGLSL.

virtual void CShaderProgram::Unbind ( )
pure virtual
void CShaderProgram::UnbindClientStates ( )
protected
virtual void CShaderProgram::Uniform ( Binding  id,
float  v0,
float  v1,
float  v2,
float  v3 
)
pure virtual
virtual void CShaderProgram::Uniform ( Binding  id,
const CMatrix3D v 
)
pure virtual
virtual void CShaderProgram::Uniform ( Binding  id,
size_t  count,
const CMatrix3D v 
)
pure virtual
void CShaderProgram::Uniform ( Binding  id,
int  v 
)
void CShaderProgram::Uniform ( Binding  id,
float  v 
)
void CShaderProgram::Uniform ( Binding  id,
float  v0,
float  v1 
)
void CShaderProgram::Uniform ( Binding  id,
const CVector3D v 
)
void CShaderProgram::Uniform ( Binding  id,
const CColor v 
)
void CShaderProgram::Uniform ( uniform_id_t  id,
int  v 
)
void CShaderProgram::Uniform ( uniform_id_t  id,
float  v 
)
void CShaderProgram::Uniform ( uniform_id_t  id,
float  v0,
float  v1 
)
void CShaderProgram::Uniform ( uniform_id_t  id,
const CVector3D v 
)
void CShaderProgram::Uniform ( uniform_id_t  id,
const CColor v 
)
void CShaderProgram::Uniform ( uniform_id_t  id,
float  v0,
float  v1,
float  v2,
float  v3 
)
void CShaderProgram::Uniform ( uniform_id_t  id,
const CMatrix3D v 
)
void CShaderProgram::Uniform ( uniform_id_t  id,
size_t  count,
const CMatrix3D v 
)
void CShaderProgram::VertexAttribIPointer ( attrib_id_t  id,
GLint  size,
GLenum  type,
GLsizei  stride,
const void *  pointer 
)
virtual

Reimplemented in CShaderProgramGLSL.

void CShaderProgram::VertexAttribPointer ( attrib_id_t  id,
GLint  size,
GLenum  type,
GLboolean  normalized,
GLsizei  stride,
const void *  pointer 
)
virtual

Reimplemented in CShaderProgramGLSL.

void CShaderProgram::VertexPointer ( GLint  size,
GLenum  type,
GLsizei  stride,
const void *  pointer 
)
virtual

Reimplemented in CShaderProgramGLSL.

Member Data Documentation

bool CShaderProgram::m_IsValid
protected
int CShaderProgram::m_StreamFlags
protected
int CShaderProgram::m_ValidStreams
protected

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