OGRE
2.2.4
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 (const GL3PlusSupport &support) | |
~GLSLSeparableProgramManager (void) | |
void | extractUniformsFromGLSL (const String &src, GpuNamedConstants &constantDefs, const String &filename) |
Populate a list of uniforms based on GLSL source and store them in GpuNamedConstants. More... | |
void | extractUniformsFromProgram (GLuint programObject, const GpuConstantDefinitionMap *vertexConstantDefs, const GpuConstantDefinitionMap *hullConstantDefs, const GpuConstantDefinitionMap *domainConstantDefs, const GpuConstantDefinitionMap *geometryConstantDefs, const GpuConstantDefinitionMap *fragmentConstantDefs, const GpuConstantDefinitionMap *computeConstantDefs, 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... | |
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 | ( | const GL3PlusSupport & | support | ) |
Ogre::GLSLSeparableProgramManager::~GLSLSeparableProgramManager | ( | void | ) |
|
inherited |
Populate a list of uniforms based on GLSL source and store them in GpuNamedConstants.
src | Reference to the source code. |
constantDefs | The defs to populate (will not be cleared before adding, clear it yourself before calling this if that's what you want). |
filename | The file name this came from, for logging errors. |
|
inherited |
Populate a list of uniforms based on an OpenGL program object.
programObject | Handle to the program object to query. |
vertexConstantDefs | Definition of the uniforms extracted from the vertex program, used to match up physical buffer indexes with program uniforms. May be null if there is no vertex program. |
fragmentConstantDefs | Definition of the uniforms extracted from the fragment program, used to match up physical buffer indexes with program uniforms. May be null if there is no fragment program. |
list | The list to populate (will not be cleared before adding, clear it yourself before calling this if that's what you want). |
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.
|
static |
|
static |
void Ogre::GLSLSeparableProgramManager::setActiveComputeShader | ( | GLSLShader * | computShader | ) |
void Ogre::GLSLSeparableProgramManager::setActiveFragmentShader | ( | GLSLShader * | fragmentShader | ) |
void Ogre::GLSLSeparableProgramManager::setActiveGeometryShader | ( | GLSLShader * | geometryShader | ) |
void Ogre::GLSLSeparableProgramManager::setActiveTessDomainShader | ( | GLSLShader * | domainShader | ) |
void Ogre::GLSLSeparableProgramManager::setActiveTessHullShader | ( | GLSLShader * | hullShader | ) |
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.