OGRE
1.10.12
Object-Oriented Graphics Rendering Engine
|
Ogre assumes that there are separate vertex and fragment programs to deal with but GLSL has one program object that represents the active vertex and fragment shader objects during a rendering state. More...
#include <OgreGLSLProgramManager.h>
Public Member Functions | |
GLSLProgramManager (GL3PlusRenderSystem *renderSystem) | |
~GLSLProgramManager () | |
void | destroyAllByShader (GLSLShaderCommon *shader) |
Destroy all programs which referencing this shader. More... | |
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 *(&constantDefs)[6], GLUniformReferenceList &uniformList, GLAtomicCounterReferenceList &counterList, GLUniformBufferList &uniformBufferList, SharedParamsBufferMap &sharedParamsBufferMap, GLCounterBufferList &counterBufferList) |
Populate a list of uniforms based on an OpenGL program object. More... | |
GLSLProgram * | getActiveProgram (void) |
Get the program object that links the two active shader objects together if a program object was not already created and linked a new one is created and linked. More... | |
GL3PlusStateCacheManager * | getStateCacheManager () |
void | setActiveComputeShader (GLSLShader *computeGpuProgram) |
Set the shader for the next rendering state. More... | |
void | setActiveDomainShader (GLSLShader *domainGpuProgram) |
Set the shader for the next rendering state. More... | |
void | setActiveFragmentShader (GLSLShader *fragmentGpuProgram) |
Set the shader for the next rendering state. More... | |
void | setActiveGeometryShader (GLSLShader *geometryGpuProgram) |
Set the shader for the next rendering state. More... | |
void | setActiveHullShader (GLSLShader *hullGpuProgram) |
Set the shader for the next rendering state. More... | |
void | setActiveVertexShader (GLSLShader *vertexGpuProgram) |
Set the shader for the next rendering state. More... | |
Static Public Member Functions | |
static GLSLProgramManager & | getSingleton (void) |
static GLSLProgramManager * | getSingletonPtr (void) |
Ogre assumes that there are separate vertex and fragment programs to deal with but GLSL has one program object that represents the active vertex and fragment shader objects during a rendering state.
GLSL Vertex and fragment shader objects are compiled separately and then attached to a program object and then the program object is linked. Since Ogre can only handle one vertex program and one fragment program being active in a pass, the GLSL Link Program Manager does the same. The GLSL Link program manager acts as a state machine and activates a program object based on the active vertex and fragment program. Previously created program objects are stored along with a unique key in a hash_map for quick retrieval the next time the program object is required.
Ogre::GLSLProgramManager::GLSLProgramManager | ( | GL3PlusRenderSystem * | renderSystem | ) |
Ogre::GLSLProgramManager::~GLSLProgramManager | ( | ) |
GLSLProgram* Ogre::GLSLProgramManager::getActiveProgram | ( | void | ) |
Get the program object that links the two active shader objects together if a program object was not already created and linked a new one is created and linked.
void Ogre::GLSLProgramManager::setActiveVertexShader | ( | GLSLShader * | vertexGpuProgram | ) |
Set the shader for the next rendering state.
The active program object will be cleared. Normally called from the GLSLShader::bindProgram and unbindProgram methods
void Ogre::GLSLProgramManager::setActiveHullShader | ( | GLSLShader * | hullGpuProgram | ) |
Set the shader for the next rendering state.
The active program object will be cleared. Normally called from the GLSLShader::bindProgram and unbindProgram methods
void Ogre::GLSLProgramManager::setActiveDomainShader | ( | GLSLShader * | domainGpuProgram | ) |
Set the shader for the next rendering state.
The active program object will be cleared. Normally called from the GLSLShader::bindProgram and unbindProgram methods
void Ogre::GLSLProgramManager::setActiveGeometryShader | ( | GLSLShader * | geometryGpuProgram | ) |
Set the shader for the next rendering state.
The active program object will be cleared. Normally called from the GLSLShader::bindProgram and unbindProgram methods
void Ogre::GLSLProgramManager::setActiveFragmentShader | ( | GLSLShader * | fragmentGpuProgram | ) |
Set the shader for the next rendering state.
The active program object will be cleared. Normally called from the GLSLShader::bindProgram and unbindProgram methods
void Ogre::GLSLProgramManager::setActiveComputeShader | ( | GLSLShader * | computeGpuProgram | ) |
Set the shader for the next rendering state.
The active program object will be cleared. Normally called from the GLSLShader::bindProgram and unbindProgram methods
void Ogre::GLSLProgramManager::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.
GL3PlusStateCacheManager* Ogre::GLSLProgramManager::getStateCacheManager | ( | ) |
|
static |
|
static |
|
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 |
Destroy all programs which referencing this shader.