Overview | Modules | Class Hierarchy | Classes | Members

Public Member Functions | Friends
tlp::GlShader Class Reference

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

`#include <GlShaderProgram.h>`

List of all members.

## 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:

  shaderType | Type 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:

  inputPrimitiveType | the 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)
  outputPrimitiveType | the 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:

  shaderSrc | a 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:

  shaderSrc | a 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:

  shaderSrcFilename | the 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:

  inputPrimitiveType | the 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:

  outputPrimitiveType | the 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