Developer Documentation
ACG::ShaderProgGenerator Class Reference

#include <OpenFlipper/libs_required/ACG/GL/ShaderGenerator.hh>

Public Member Functions

 ShaderProgGenerator (const ShaderGenDesc *_desc)
 
 ShaderProgGenerator (const ShaderGenDesc *_desc, const std::vector< unsigned int > &_modifierIDs)
 
 ShaderProgGenerator (const ShaderGenDesc *_desc, const std::vector< unsigned int > *_modifierIDs)
 
 ShaderProgGenerator (const ShaderGenDesc *_desc, const unsigned int *_modifierIDs, unsigned int _numModifiers)
 
 ShaderProgGenerator (const ShaderGenDesc *_desc, ShaderModifier *const *_modifiers, unsigned int _numModifiers)
 
 ShaderProgGenerator (const ShaderGenDesc *_desc, const std::vector< ShaderModifier * > &_modifiers)
 
 ShaderProgGenerator (const ShaderGenDesc *_desc, const std::vector< ShaderModifier * > *_modifiers)
 
void saveVertexShToFile (const char *_fileName)
 
void saveGeometryShToFile (const char *_fileName)
 
void saveFragmentShToFile (const char *_fileName)
 
const QStringList & getVertexShaderCode ()
 Returns generated vertex shader code. More...
 
const QStringList & getTessControlShaderCode ()
 Returns generated vertex shader code. More...
 
const QStringList & getTessEvaluationShaderCode ()
 Returns generated tessellation control shader code. More...
 
const QStringList & getGeometryShaderCode ()
 Returns generated tessellation evaluation shader code. More...
 
const QStringList & getFragmentShaderCode ()
 Returns generated fragment shader code. More...
 
int getNumActiveModifiers () const
 Get the number of active modifiers. More...
 
ShaderModifiergetActiveModifier (int _i)
 Get active modfiers for this program. More...
 
bool hasGeometryShader () const
 check whether there is a geometry shader present More...
 
bool hasTessControlShader () const
 check whether there is a tess-control shader present More...
 
bool hasTessEvaluationShader () const
 check whether there is a tess-evaluation shader present More...
 
void generateShaders ()
 Generates the shader code. More...
 

Static Public Member Functions

static void setShaderDir (QString _dir)
 
static QString getShaderDir ()
 
static unsigned int registerModifier (ShaderModifier *_modifier)
 Shader modifiers have to be registered before they can be used. They also must remain allocated for the rest of the applications runtime. Use a combination of modifier-IDs in the constructor of ShaderProgGen to active them. More...
 
static bool loadStringListFromFile (QString _fileName, QStringList *_out)
 Load a text file as string list. More...
 
static QString getAbsFilePath (QString _fileName)
 Convert a filename to an absolute filename. More...
 

Private Member Functions

void loadShaderTemplateFromFile ()
 Loads external shader templates. More...
 
void scanShaderTemplate (QStringList &_templateSrc, QString _templateFilename, QStringList *_outLayoutDirectives=0)
 Scans loaded shader template for requested inputs, glsl version or includes. More...
 
void init (const ShaderGenDesc *_desc, ShaderModifier *const *_modifiers, unsigned int _numActiveMods)
 Called in constructor. More...
 
void init (const ShaderGenDesc *_desc, const unsigned int *_modifiers, unsigned int _numActiveMods)
 
void buildVertexShader ()
 
void buildTessControlShader ()
 
void buildTessEvalShader ()
 
void buildGeometryShader ()
 
void buildFragmentShader ()
 
void addVertexBeginCode (QStringList *_code)
 
void addVertexEndCode (QStringList *_code)
 
void addFragmentBeginCode (QStringList *_code)
 
void addFragmentEndCode (QStringList *_code)
 
void addLightingFunctions (QStringList *_code)
 Adds lighting definition functions. More...
 
void addLightingCode (QStringList *_code)
 Adds lighting function calls to code. More...
 
void modifyLightingCode (QStringList *_code, ShaderModifier *_modifier)
 Calls lighting modifier for each light. More...
 
void addTexGenCode (QStringList *_code, bool _fragmentShader)
 Add texture coordinate generation code. More...
 
int checkForIncludes (QString _str, ShaderGenerator *_gen, QString _includePath)
 
int checkForIncludes (QString _str, QStringList *_outImport, QString _includePath)
 
void initGenDefines (ShaderGenerator *_gen)
 provide generated defines to shader More...
 

Static Private Member Functions

static QString getPathName (QString _strFileName)
 returns path to _strFileName without last slash More...
 
static void loadLightingFunctions ()
 

Private Attributes

ShaderGeneratorvertex_
 
ShaderGeneratortessControl_
 
ShaderGeneratortessEval_
 
ShaderGeneratorgeometry_
 
ShaderGeneratorfragment_
 
QStringList vertexTemplate_
 
QStringList tessControlTemplate_
 
QStringList tessEvalTemplate_
 
QStringList geometryTemplate_
 
QStringList fragmentTemplate_
 
ShaderGenDesc desc_
 
std::vector< ShaderModifier * > activeMods_
 
QString vertexShaderFile_
 path + filename to shader templates More...
 
QString tessControlShaderFile_
 
QString tessEvalShaderFile_
 
QString geometryShaderFile_
 
QString fragmentShaderFile_
 
QStringList tessControlLayout_
 layout() directives scanned from loaded templates More...
 
QStringList tessEvalLayout_
 
ShaderGenerator::DefaultIODesc ioDesc_
 default IO descriptor for the vertex shader More...
 

Static Private Attributes

static int numRegisteredModifiers_ = 0
 registered shader modifier More...
 
static std::vector< ShaderModifier * > registeredModifiers_
 
static QString shaderDir_
 
static QStringList lightingCode_
 

Detailed Description

ShaderProgGenerator is responsible for generating a matching pair of vertex and fragment shaders.

Definition at line 1189 of file ShaderGenerator.hh.

Constructor & Destructor Documentation

◆ ShaderProgGenerator() [1/7]

ACG::ShaderProgGenerator::ShaderProgGenerator ( const ShaderGenDesc _desc)
explicit
Parameters
_descdescription-set of shader properties.

Definition at line 826 of file ShaderGenerator.cc.

◆ ShaderProgGenerator() [2/7]

ACG::ShaderProgGenerator::ShaderProgGenerator ( const ShaderGenDesc _desc,
const std::vector< unsigned int > &  _modifierIDs 
)
Parameters
_descdescription-set of shader properties.
_modifierIDsarray of modifier-IDs that should be used for the generation.

Definition at line 838 of file ShaderGenerator.cc.

◆ ShaderProgGenerator() [3/7]

ACG::ShaderProgGenerator::ShaderProgGenerator ( const ShaderGenDesc _desc,
const std::vector< unsigned int > *  _modifierIDs 
)
Parameters
_descdescription-set of shader properties.
_modifierIDsarray of modifier-IDs that should be used for the generation.

Definition at line 844 of file ShaderGenerator.cc.

◆ ShaderProgGenerator() [4/7]

ACG::ShaderProgGenerator::ShaderProgGenerator ( const ShaderGenDesc _desc,
const unsigned int *  _modifierIDs,
unsigned int  _numModifiers 
)
Parameters
_descdescription-set of shader properties.
_modifierIDsarray of modifier-IDs that should be used for the generation.
_numModifiersnumber of modifiers in _modifierIDs

Definition at line 832 of file ShaderGenerator.cc.

◆ ShaderProgGenerator() [5/7]

ACG::ShaderProgGenerator::ShaderProgGenerator ( const ShaderGenDesc _desc,
ShaderModifier *const *  _modifiers,
unsigned int  _numModifiers 
)
Parameters
_descdescription-set of shader properties.
_modifiersarray of modifiers that should be used for the generation.
_numModifiersnumber of modifiers in _modifierIDs

Definition at line 851 of file ShaderGenerator.cc.

◆ ShaderProgGenerator() [6/7]

ACG::ShaderProgGenerator::ShaderProgGenerator ( const ShaderGenDesc _desc,
const std::vector< ShaderModifier * > &  _modifiers 
)
Parameters
_descdescription-set of shader properties.
_modifiersarray of modifiers that should be used for the generation.

Definition at line 857 of file ShaderGenerator.cc.

◆ ShaderProgGenerator() [7/7]

ACG::ShaderProgGenerator::ShaderProgGenerator ( const ShaderGenDesc _desc,
const std::vector< ShaderModifier * > *  _modifiers 
)
Parameters
_descdescription-set of shader properties.
_modifiersarray of modifiers that should be used for the generation.

Definition at line 863 of file ShaderGenerator.cc.

◆ ~ShaderProgGenerator()

ACG::ShaderProgGenerator::~ShaderProgGenerator ( void  )
virtual

Definition at line 952 of file ShaderGenerator.cc.

Member Function Documentation

◆ addFragmentBeginCode()

void ACG::ShaderProgGenerator::addFragmentBeginCode ( QStringList *  _code)
private

Definition at line 1804 of file ShaderGenerator.cc.

◆ addFragmentEndCode()

void ACG::ShaderProgGenerator::addFragmentEndCode ( QStringList *  _code)
private

Definition at line 1864 of file ShaderGenerator.cc.

◆ addLightingCode()

void ACG::ShaderProgGenerator::addLightingCode ( QStringList *  _code)
private

Adds lighting function calls to code.

Definition at line 1875 of file ShaderGenerator.cc.

◆ addLightingFunctions()

void ACG::ShaderProgGenerator::addLightingFunctions ( QStringList *  _code)
private

Adds lighting definition functions.

LitPointLight() ...

Definition at line 1960 of file ShaderGenerator.cc.

◆ addTexGenCode()

void ACG::ShaderProgGenerator::addTexGenCode ( QStringList *  _code,
bool  _fragmentShader 
)
private

Add texture coordinate generation code.

Definition at line 1968 of file ShaderGenerator.cc.

◆ addVertexBeginCode()

void ACG::ShaderProgGenerator::addVertexBeginCode ( QStringList *  _code)
private

Definition at line 1172 of file ShaderGenerator.cc.

◆ addVertexEndCode()

void ACG::ShaderProgGenerator::addVertexEndCode ( QStringList *  _code)
private

Definition at line 1209 of file ShaderGenerator.cc.

◆ buildFragmentShader()

void ACG::ShaderProgGenerator::buildFragmentShader ( )
private

Definition at line 1668 of file ShaderGenerator.cc.

◆ buildGeometryShader()

void ACG::ShaderProgGenerator::buildGeometryShader ( )
private

Definition at line 1574 of file ShaderGenerator.cc.

◆ buildTessControlShader()

void ACG::ShaderProgGenerator::buildTessControlShader ( )
private

Definition at line 1296 of file ShaderGenerator.cc.

◆ buildTessEvalShader()

void ACG::ShaderProgGenerator::buildTessEvalShader ( )
private

Definition at line 1376 of file ShaderGenerator.cc.

◆ buildVertexShader()

void ACG::ShaderProgGenerator::buildVertexShader ( )
private

Definition at line 1081 of file ShaderGenerator.cc.

◆ checkForIncludes() [1/2]

int ACG::ShaderProgGenerator::checkForIncludes ( QString  _str,
QStringList *  _outImport,
QString  _includePath 
)
private

checks if _str is an include directive eventually imports the included file to the specified stringlist

Definition at line 1269 of file ShaderGenerator.cc.

◆ checkForIncludes() [2/2]

int ACG::ShaderProgGenerator::checkForIncludes ( QString  _str,
ShaderGenerator _gen,
QString  _includePath 
)
private

checks if _str is an include directive eventually imports the included file to the specified generator

Definition at line 1248 of file ShaderGenerator.cc.

◆ generateShaders()

void ACG::ShaderProgGenerator::generateShaders ( )

Generates the shader code.

Definition at line 2101 of file ShaderGenerator.cc.

◆ getAbsFilePath()

QString ACG::ShaderProgGenerator::getAbsFilePath ( QString  _fileName)
static

Convert a filename to an absolute filename.

Parameters
_fileNamerelative (from shader dir) or absolute file name

Definition at line 2426 of file ShaderGenerator.cc.

◆ getActiveModifier()

ShaderModifier * ACG::ShaderProgGenerator::getActiveModifier ( int  _i)

Get active modfiers for this program.

Definition at line 2468 of file ShaderGenerator.cc.

◆ getFragmentShaderCode()

const QStringList & ACG::ShaderProgGenerator::getFragmentShaderCode ( )

Returns generated fragment shader code.

Definition at line 2250 of file ShaderGenerator.cc.

◆ getGeometryShaderCode()

const QStringList & ACG::ShaderProgGenerator::getGeometryShaderCode ( )

Returns generated tessellation evaluation shader code.

Definition at line 2245 of file ShaderGenerator.cc.

◆ getNumActiveModifiers()

int ACG::ShaderProgGenerator::getNumActiveModifiers ( ) const

Get the number of active modifiers.

Definition at line 2477 of file ShaderGenerator.cc.

◆ getPathName()

QString ACG::ShaderProgGenerator::getPathName ( QString  _strFileName)
staticprivate

returns path to _strFileName without last slash

Definition at line 2420 of file ShaderGenerator.cc.

◆ getShaderDir()

QString ACG::ShaderProgGenerator::getShaderDir ( )
static

Return shader directory path as previosly specified by user

Definition at line 2442 of file ShaderGenerator.cc.

◆ getTessControlShaderCode()

const QStringList & ACG::ShaderProgGenerator::getTessControlShaderCode ( )

Returns generated vertex shader code.

Definition at line 2235 of file ShaderGenerator.cc.

◆ getTessEvaluationShaderCode()

const QStringList & ACG::ShaderProgGenerator::getTessEvaluationShaderCode ( )

Returns generated tessellation control shader code.

Definition at line 2240 of file ShaderGenerator.cc.

◆ getVertexShaderCode()

const QStringList & ACG::ShaderProgGenerator::getVertexShaderCode ( )

Returns generated vertex shader code.

Definition at line 2230 of file ShaderGenerator.cc.

◆ hasGeometryShader()

bool ACG::ShaderProgGenerator::hasGeometryShader ( ) const

check whether there is a geometry shader present

Definition at line 2483 of file ShaderGenerator.cc.

◆ hasTessControlShader()

bool ACG::ShaderProgGenerator::hasTessControlShader ( ) const

check whether there is a tess-control shader present

Definition at line 2488 of file ShaderGenerator.cc.

◆ hasTessEvaluationShader()

bool ACG::ShaderProgGenerator::hasTessEvaluationShader ( ) const

check whether there is a tess-evaluation shader present

Definition at line 2493 of file ShaderGenerator.cc.

◆ init() [1/2]

void ACG::ShaderProgGenerator::init ( const ShaderGenDesc _desc,
const unsigned int *  _modifiers,
unsigned int  _numActiveMods 
)
private

Definition at line 871 of file ShaderGenerator.cc.

◆ init() [2/2]

void ACG::ShaderProgGenerator::init ( const ShaderGenDesc _desc,
ShaderModifier *const *  _modifiers,
unsigned int  _numActiveMods 
)
private

Called in constructor.

Definition at line 884 of file ShaderGenerator.cc.

◆ initGenDefines()

void ACG::ShaderProgGenerator::initGenDefines ( ShaderGenerator _gen)
private

provide generated defines to shader

Definition at line 1019 of file ShaderGenerator.cc.

◆ loadLightingFunctions()

void ACG::ShaderProgGenerator::loadLightingFunctions ( )
staticprivate

Definition at line 998 of file ShaderGenerator.cc.

◆ loadShaderTemplateFromFile()

void ACG::ShaderProgGenerator::loadShaderTemplateFromFile ( )
private

Loads external shader templates.

Definition at line 2272 of file ShaderGenerator.cc.

◆ loadStringListFromFile()

bool ACG::ShaderProgGenerator::loadStringListFromFile ( QString  _fileName,
QStringList *  _out 
)
static

Load a text file as string list.

Parameters
_fileNamerelative (from shader dir) or absolute file name
_outlines from text file
Returns
true on success, false otherwise

Definition at line 963 of file ShaderGenerator.cc.

◆ modifyLightingCode()

void ACG::ShaderProgGenerator::modifyLightingCode ( QStringList *  _code,
ShaderModifier _modifier 
)
private

Calls lighting modifier for each light.

Definition at line 1947 of file ShaderGenerator.cc.

◆ registerModifier()

unsigned int ACG::ShaderProgGenerator::registerModifier ( ShaderModifier _modifier)
static

Shader modifiers have to be registered before they can be used. They also must remain allocated for the rest of the applications runtime. Use a combination of modifier-IDs in the constructor of ShaderProgGen to active them.

Parameters
_modifieraddress of a modifier implementation
Returns
modifier ID

Definition at line 2448 of file ShaderGenerator.cc.

◆ saveFragmentShToFile()

void ACG::ShaderProgGenerator::saveFragmentShToFile ( const char *  _fileName)

Definition at line 2266 of file ShaderGenerator.cc.

◆ saveGeometryShToFile()

void ACG::ShaderProgGenerator::saveGeometryShToFile ( const char *  _fileName)

Definition at line 2261 of file ShaderGenerator.cc.

◆ saveVertexShToFile()

void ACG::ShaderProgGenerator::saveVertexShToFile ( const char *  _fileName)

Definition at line 2256 of file ShaderGenerator.cc.

◆ scanShaderTemplate()

void ACG::ShaderProgGenerator::scanShaderTemplate ( QStringList &  _templateSrc,
QString  _templateFilename,
QStringList *  _outLayoutDirectives = 0 
)
private

Scans loaded shader template for requested inputs, glsl version or includes.

Definition at line 2308 of file ShaderGenerator.cc.

◆ setShaderDir()

void ACG::ShaderProgGenerator::setShaderDir ( QString  _dir)
static

The shader directory has to be defined first before making use of the generator! For example: setShaderDir(OpenFlipper::Options::shaderDirStr())

Definition at line 2437 of file ShaderGenerator.cc.

Member Data Documentation

◆ activeMods_

std::vector<ShaderModifier*> ACG::ShaderProgGenerator::activeMods_
private

Definition at line 1395 of file ShaderGenerator.hh.

◆ desc_

ShaderGenDesc ACG::ShaderProgGenerator::desc_
private

Definition at line 1394 of file ShaderGenerator.hh.

◆ fragment_

ShaderGenerator* ACG::ShaderProgGenerator::fragment_
private

Definition at line 1386 of file ShaderGenerator.hh.

◆ fragmentShaderFile_

QString ACG::ShaderProgGenerator::fragmentShaderFile_
private

Definition at line 1407 of file ShaderGenerator.hh.

◆ fragmentTemplate_

QStringList ACG::ShaderProgGenerator::fragmentTemplate_
private

Definition at line 1392 of file ShaderGenerator.hh.

◆ geometry_

ShaderGenerator* ACG::ShaderProgGenerator::geometry_
private

Definition at line 1385 of file ShaderGenerator.hh.

◆ geometryShaderFile_

QString ACG::ShaderProgGenerator::geometryShaderFile_
private

Definition at line 1406 of file ShaderGenerator.hh.

◆ geometryTemplate_

QStringList ACG::ShaderProgGenerator::geometryTemplate_
private

Definition at line 1391 of file ShaderGenerator.hh.

◆ ioDesc_

ShaderGenerator::DefaultIODesc ACG::ShaderProgGenerator::ioDesc_
private

default IO descriptor for the vertex shader

Definition at line 1415 of file ShaderGenerator.hh.

◆ lightingCode_

QStringList ACG::ShaderProgGenerator::lightingCode_
staticprivate

Definition at line 1419 of file ShaderGenerator.hh.

◆ numRegisteredModifiers_

int ACG::ShaderProgGenerator::numRegisteredModifiers_ = 0
staticprivate

registered shader modifier

Definition at line 1399 of file ShaderGenerator.hh.

◆ registeredModifiers_

std::vector< ShaderModifier * > ACG::ShaderProgGenerator::registeredModifiers_
staticprivate

Definition at line 1400 of file ShaderGenerator.hh.

◆ shaderDir_

QString ACG::ShaderProgGenerator::shaderDir_
staticprivate

Definition at line 1418 of file ShaderGenerator.hh.

◆ tessControl_

ShaderGenerator* ACG::ShaderProgGenerator::tessControl_
private

Definition at line 1383 of file ShaderGenerator.hh.

◆ tessControlLayout_

QStringList ACG::ShaderProgGenerator::tessControlLayout_
private

layout() directives scanned from loaded templates

Definition at line 1410 of file ShaderGenerator.hh.

◆ tessControlShaderFile_

QString ACG::ShaderProgGenerator::tessControlShaderFile_
private

Definition at line 1404 of file ShaderGenerator.hh.

◆ tessControlTemplate_

QStringList ACG::ShaderProgGenerator::tessControlTemplate_
private

Definition at line 1389 of file ShaderGenerator.hh.

◆ tessEval_

ShaderGenerator* ACG::ShaderProgGenerator::tessEval_
private

Definition at line 1384 of file ShaderGenerator.hh.

◆ tessEvalLayout_

QStringList ACG::ShaderProgGenerator::tessEvalLayout_
private

Definition at line 1411 of file ShaderGenerator.hh.

◆ tessEvalShaderFile_

QString ACG::ShaderProgGenerator::tessEvalShaderFile_
private

Definition at line 1405 of file ShaderGenerator.hh.

◆ tessEvalTemplate_

QStringList ACG::ShaderProgGenerator::tessEvalTemplate_
private

Definition at line 1390 of file ShaderGenerator.hh.

◆ vertex_

ShaderGenerator* ACG::ShaderProgGenerator::vertex_
private

Definition at line 1382 of file ShaderGenerator.hh.

◆ vertexShaderFile_

QString ACG::ShaderProgGenerator::vertexShaderFile_
private

path + filename to shader templates

Definition at line 1403 of file ShaderGenerator.hh.

◆ vertexTemplate_

QStringList ACG::ShaderProgGenerator::vertexTemplate_
private

Definition at line 1388 of file ShaderGenerator.hh.


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