![]() |
OGRE
1.10.8
Object-Oriented Graphics Rendering Engine
|
Ogre assumes that there are separate vertex and fragment programs to deal with but GLSL has one program pipeline object that represents the active vertex and fragment program objects during a rendering state. More...
#include <OgreGLSLSeparableProgramManager.h>
Public Member Functions | |
GLSLSeparableProgramManager (GL3PlusRenderSystem *renderSystem) | |
~GLSLSeparableProgramManager (void) | |
void | extractUniformsFromProgram (GLuint programObject, const GpuConstantDefinitionMap *(&constantDefs)[6], GLUniformReferenceList &uniformList, GLAtomicCounterReferenceList &counterList, GLUniformBufferList &uniformBufferList, SharedParamsBufferMap &sharedParamsBufferMap, GLCounterBufferList &counterBufferList) |
Populate a list of uniforms based on an OpenGL program object. More... | |
GLSLSeparableProgram * | getCurrentSeparableProgram (void) |
Get the program pipeline that combines the current program objects. More... | |
GL3PlusStateCacheManager * | getStateCacheManager () |
void | setActiveComputeShader (GLSLShader *computShader) |
void | setActiveFragmentShader (GLSLShader *fragmentShader) |
void | setActiveGeometryShader (GLSLShader *geometryShader) |
void | setActiveTessDomainShader (GLSLShader *domainShader) |
void | setActiveTessHullShader (GLSLShader *hullShader) |
void | setActiveVertexShader (GLSLShader *vertexShader) |
Set the active link programs for the next rendering state. More... | |
Static Public Member Functions | |
static GLSLSeparableProgramManager & | getSingleton (void) |
static GLSLSeparableProgramManager * | getSingletonPtr (void) |
Ogre assumes that there are separate vertex and fragment programs to deal with but GLSL has one program pipeline object that represents the active vertex and fragment program objects during a rendering state.
GLSL vertex and fragment program objects are compiled separately and then attached to a program object and then the program pipeline object is linked. Since Ogre can only handle one vertex program stage and one fragment program stage being active in a pass, the GLSL Program Pipeline Manager does the same. The GLSL Program Pipeline Manager acts as a state machine and activates a pipeline object based on the active vertex and fragment program. Previously created pipeline objects are stored along with a unique key in a hash map for quick retrieval the next time the pipeline object is required.
Ogre::GLSLSeparableProgramManager::GLSLSeparableProgramManager | ( | GL3PlusRenderSystem * | renderSystem | ) |
Ogre::GLSLSeparableProgramManager::~GLSLSeparableProgramManager | ( | void | ) |
GLSLSeparableProgram* Ogre::GLSLSeparableProgramManager::getCurrentSeparableProgram | ( | void | ) |
Get the program pipeline that combines the current program objects.
If the program pipeline object was not already created a new one is created. Note that this method does NOT link the program.
void Ogre::GLSLSeparableProgramManager::setActiveVertexShader | ( | GLSLShader * | vertexShader | ) |
Set the active link programs for the next rendering state.
The active program pipeline object will be cleared. Normally called from the GLSLShader::bindProgram and unbindProgram methods.
void Ogre::GLSLSeparableProgramManager::setActiveTessDomainShader | ( | GLSLShader * | domainShader | ) |
void Ogre::GLSLSeparableProgramManager::setActiveTessHullShader | ( | GLSLShader * | hullShader | ) |
void Ogre::GLSLSeparableProgramManager::setActiveGeometryShader | ( | GLSLShader * | geometryShader | ) |
void Ogre::GLSLSeparableProgramManager::setActiveFragmentShader | ( | GLSLShader * | fragmentShader | ) |
void Ogre::GLSLSeparableProgramManager::setActiveComputeShader | ( | GLSLShader * | computShader | ) |
|
static |
|
static |
|
inherited |
Populate a list of uniforms based on an OpenGL program object.
|
inherited |