Overview     Modules     Class Hierarchy     Classes     Members  
tlp::GlShader Class Reference

A class to manage shader objects, components of a shader program. More...

#include <GlShaderProgram.h>

Public Member Functions

 GlShader (ShaderType shaderType)
 GlShader (GLenum inputPrimitiveType, GLenum outputPrimitiveType)
 ~GlShader ()
GLuint getShaderId () const
ShaderType getShaderType () const
GLenum getInputPrimitiveType () const
GLenum getOutputPrimitiveType () const
void setInputPrimitiveType (const GLenum inputPrimitiveType)
void setOutputPrimitiveType (const GLenum outputPrimitiveType)
void compileFromSourceCode (const char *shaderSrc)
void compileFromSourceCode (const std::string &shaderSrc)
void compileFromSourceFile (const std::string &shaderSrcFilename)
bool isCompiled () const
std::string getCompilationLog () const

Friends

class GlShaderProgram

Detailed Description

A class to manage shader objects, components of a shader program.

This class allow to create and compile OpenGL shader object. Shaders are used to program the graphics processing unit (GPU) rendering pipeline. The three existing types of shaders are managed :

-> Vertex shader : run once for each vertex given to the graphics processor. The purpose is to transform each vertex's 3D position in virtual space to the 2D coordinate at which it appears on the screen (as well as a depth value for the Z-buffer). Vertex shaders can manipulate properties such as position, color, and texture coordinate, but cannot create new vertices. The output of the vertex shader goes to the next stage in the pipeline, which is either a geometry shader if present or the rasterizer otherwise.

-> Geometry shader : can add and remove vertices from a mesh. Geometry shaders can be used to generate geometry procedurally or to add volumetric detail to existing meshes that would be too costly to process on the CPU. If geometry shaders are being used, the output is then sent to the rasterizer.

-> Fragment shader (Pixel shader) : calculate the color of individual pixels. The input to this stage comes from the rasterizer, which fills in the polygons being sent through the graphics pipeline.

Shaders source codes have to be written with the "OpenGL Shading Language (GLSL)"

Constructor & Destructor Documentation

tlp::GlShader::GlShader ( ShaderType  shaderType)

Vertex and Fragment shader constructor

Use this constructor to create either a vertex shader or a fragment shader

Parameters
shaderTypeType of the shader to create, Vertex or Fragment
tlp::GlShader::GlShader ( GLenum  inputPrimitiveType,
GLenum  outputPrimitiveType 
)

Geometry shader constructor

Use this constructor to create a geometry shader

Parameters
inputPrimitiveTypethe type of graphic primitive the geometry shader takes as input. (must be one from the following list : GL_POINTS, GL_LINES, GL_LINES_ADJACENCY_EXT, GL_TRIANGLES, GL_TRIANGLES_ADJACENCY_EXT)
outputPrimitiveTypethe type of graphics primitives the geometry shader will output (must be one of the following list : GL_POINTS, GL_LINE_STRIP, GL_TRIANGLE_STRIP)
tlp::GlShader::~GlShader ( )

GlShader destructor

Member Function Documentation

void tlp::GlShader::compileFromSourceCode ( const char *  shaderSrc)

Set the shader source code from a C string and compile it.

Parameters
shaderSrca C string containing the shader source code
void tlp::GlShader::compileFromSourceCode ( const std::string &  shaderSrc)

Set the shader source code from a C++ string and compile it.

Parameters
shaderSrca C++ string containing the shader source code
void tlp::GlShader::compileFromSourceFile ( const std::string &  shaderSrcFilename)

Set the shader source code from a file and compile it.

Parameters
shaderSrcFilenamethe absolute path of the file containing the shader source code
std::string tlp::GlShader::getCompilationLog ( ) const
inline

Return the log output by the shader compiler

GLenum tlp::GlShader::getInputPrimitiveType ( ) const
inline

Method only relevant for geometry shaders. Return the graphic primitive type this geometry shader takes as input.

GLenum tlp::GlShader::getOutputPrimitiveType ( ) const
inline

Method only relevant for geometry shaders. Return the graphics primitives type this geometry shader will output.

GLuint tlp::GlShader::getShaderId ( ) const
inline

Return the GL identifier of this shader object

ShaderType tlp::GlShader::getShaderType ( ) const
inline

Return the type of the shader (Vertex, Geometry or Fragment)

bool tlp::GlShader::isCompiled ( ) const
inline

Return true if the shader compilation was successfull, false otherwise

void tlp::GlShader::setInputPrimitiveType ( const GLenum  inputPrimitiveType)
inline

Method only relevant for geometry shaders. Set the graphic primitive type this geometry shader takes as input. Note that when modifying the input primitive type, the associated shader program (whose object is from type GlShaderProgram) has to be relinked for changes to take effect.

Parameters
inputPrimitiveTypethe type of graphic primitive the geometry shader takes as input. (must be one from the following list : GL_POINTS, GL_LINES, GL_LINES_ADJACENCY_EXT, GL_TRIANGLES, GL_TRIANGLES_ADJACENCY_EXT)
void tlp::GlShader::setOutputPrimitiveType ( const GLenum  outputPrimitiveType)
inline

Method only relevant for geometry shaders. Set the graphics primitives type this geometry shader will output. Note that when modifying the output primitive type, the associated shader program (whose object is from type GlShaderProgram) has to be relinked for changes to take effect.

Parameters
outputPrimitiveTypethe type of graphics primitives the geometry shader will output (must be one of the following list : GL_POINTS, GL_LINE_STRIP, GL_TRIANGLE_STRIP)

Friends And Related Function Documentation

friend class GlShaderProgram
friend


Tulip Software by LaBRI Visualization Team    2001 - 2012