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 <OgreGLSLLinkProgramManager.h>
Public Member Functions | |
GLSLLinkProgramManager (void) | |
~GLSLLinkProgramManager (void) | |
void | extractConstantDefs (const String &src, GpuNamedConstants &constantDefs, const String &filename) |
Populate a list of uniforms based on GLSL ES source. More... | |
void | extractUniforms (GLuint programObject, const GpuConstantDefinitionMap *vertexConstantDefs, const GpuConstantDefinitionMap *geometryConstantDefs, const GpuConstantDefinitionMap *fragmentConstantDefs, const GpuConstantDefinitionMap *hullConstantDefs, const GpuConstantDefinitionMap *domainConstantDefs, const GpuConstantDefinitionMap *computeConstantDefs, GLUniformReferenceList &list, GLUniformBufferList &sharedList) |
Populate a list of uniforms based on a program object. More... | |
GLSLLinkProgram * | getActiveLinkProgram (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... | |
void | setActiveComputeShader (GLSLGpuProgram *computeGpuProgram) |
Set the active compute shader for the next rendering state. More... | |
void | setActiveDomainShader (GLSLGpuProgram *domainGpuProgram) |
Set the active domain(evaluation) shader for the next rendering state. More... | |
void | setActiveFragmentShader (GLSLGpuProgram *fragmentGpuProgram) |
Set the active fragment shader for the next rendering state. More... | |
void | setActiveGeometryShader (GLSLGpuProgram *geometryGpuProgram) |
Set the active geometry shader for the next rendering state. More... | |
void | setActiveHullShader (GLSLGpuProgram *hullGpuProgram) |
Set the active hull(control) shader for the next rendering state. More... | |
void | setActiveVertexShader (GLSLGpuProgram *vertexGpuProgram) |
Set the active vertex shader for the next rendering state. More... | |
Static Public Member Functions | |
static GLSLLinkProgramManager & | getSingleton (void) |
static GLSLLinkProgramManager * | getSingletonPtr (void) |
Protected Member Functions | |
void | completeDefInfo (GLenum gltype, GpuConstantDefinition &defToUpdate) |
Use type to complete other information. More... | |
bool | completeParamSource (const String ¶mName, const GpuConstantDefinitionMap *vertexConstantDefs, const GpuConstantDefinitionMap *geometryConstantDefs, const GpuConstantDefinitionMap *fragmentConstantDefs, const GpuConstantDefinitionMap *hullConstantDefs, const GpuConstantDefinitionMap *domainConstantDefs, const GpuConstantDefinitionMap *computeConstantDefs, GLUniformReference &refToUpdate) |
Find where the data for a specific uniform should come from, populate. More... | |
void | parseIndividualConstant (const String &src, GpuNamedConstants &defs, String::size_type currPos, const String &filename, GpuSharedParametersPtr sharedParams) |
Protected Attributes | |
GLSLGpuProgram * | mActiveComputeGpuProgram |
GLSLGpuProgram * | mActiveDomainGpuProgram |
GLSLGpuProgram * | mActiveFragmentGpuProgram |
GLSLGpuProgram * | mActiveGeometryGpuProgram |
GLSLGpuProgram * | mActiveHullGpuProgram |
GLSLGpuProgram * | mActiveVertexGpuProgram |
Active objects defining the active rendering gpu state. More... | |
Static Protected Attributes | |
static GLSLLinkProgramManager * | msSingleton |
Private Types | |
typedef LinkProgramMap::iterator | LinkProgramIterator |
typedef map< uint32, GLSLLinkProgram * >::type | LinkProgramMap |
typedef map< String, GLenum >::type | StringToEnumMap |
Private Attributes | |
GLSLLinkProgram * | mActiveLinkProgram |
active objects defining the active rendering gpu state More... | |
LinkProgramMap | mLinkPrograms |
container holding previously created program objects More... | |
StringToEnumMap | mTypeEnumMap |
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.
Definition at line 53 of file Plus/src/GLSL/include/OgreGLSLLinkProgramManager.h.
|
private |
Definition at line 59 of file Plus/src/GLSL/include/OgreGLSLLinkProgramManager.h.
|
private |
Definition at line 58 of file Plus/src/GLSL/include/OgreGLSLLinkProgramManager.h.
|
private |
Definition at line 67 of file Plus/src/GLSL/include/OgreGLSLLinkProgramManager.h.
Ogre::GLSLLinkProgramManager::GLSLLinkProgramManager | ( | void | ) |
Ogre::GLSLLinkProgramManager::~GLSLLinkProgramManager | ( | void | ) |
|
protectedinherited |
Use type to complete other information.
|
protectedinherited |
Find where the data for a specific uniform should come from, populate.
|
inherited |
Populate a list of uniforms based on GLSL ES source.
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 a program object.
programObject | Handle to the program object to query |
vertexConstantDefs | Definition of the constants 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 constants 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). |
GLSLLinkProgram* Ogre::GLSLLinkProgramManager::getActiveLinkProgram | ( | 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.
|
static |
|
static |
|
protectedinherited |
void Ogre::GLSLLinkProgramManager::setActiveComputeShader | ( | GLSLGpuProgram * | computeGpuProgram | ) |
Set the active compute shader for the next rendering state.
The active program object will be cleared. Normally called from the GLSLGpuProgram::bindProgram and unbindProgram methods
void Ogre::GLSLLinkProgramManager::setActiveDomainShader | ( | GLSLGpuProgram * | domainGpuProgram | ) |
Set the active domain(evaluation) shader for the next rendering state.
The active program object will be cleared. Normally called from the GLSLGpuProgram::bindProgram and unbindProgram methods
void Ogre::GLSLLinkProgramManager::setActiveFragmentShader | ( | GLSLGpuProgram * | fragmentGpuProgram | ) |
Set the active fragment shader for the next rendering state.
The active program object will be cleared. Normally called from the GLSLGpuProgram::bindProgram and unbindProgram methods
void Ogre::GLSLLinkProgramManager::setActiveGeometryShader | ( | GLSLGpuProgram * | geometryGpuProgram | ) |
Set the active geometry shader for the next rendering state.
The active program object will be cleared. Normally called from the GLSLGpuProgram::bindProgram and unbindProgram methods
void Ogre::GLSLLinkProgramManager::setActiveHullShader | ( | GLSLGpuProgram * | hullGpuProgram | ) |
Set the active hull(control) shader for the next rendering state.
The active program object will be cleared. Normally called from the GLSLGpuProgram::bindProgram and unbindProgram methods
void Ogre::GLSLLinkProgramManager::setActiveVertexShader | ( | GLSLGpuProgram * | vertexGpuProgram | ) |
Set the active vertex shader for the next rendering state.
The active program object will be cleared. Normally called from the GLSLGpuProgram::bindProgram and unbindProgram methods
|
protectedinherited |
Definition at line 58 of file OgreGLSLProgramManagerCommon.h.
|
protectedinherited |
Definition at line 57 of file OgreGLSLProgramManagerCommon.h.
|
protectedinherited |
Definition at line 55 of file OgreGLSLProgramManagerCommon.h.
|
protectedinherited |
Definition at line 54 of file OgreGLSLProgramManagerCommon.h.
|
protectedinherited |
Definition at line 56 of file OgreGLSLProgramManagerCommon.h.
|
private |
active objects defining the active rendering gpu state
Definition at line 65 of file Plus/src/GLSL/include/OgreGLSLLinkProgramManager.h.
|
protectedinherited |
Active objects defining the active rendering gpu state.
Definition at line 53 of file OgreGLSLProgramManagerCommon.h.
|
private |
container holding previously created program objects
Definition at line 62 of file Plus/src/GLSL/include/OgreGLSLLinkProgramManager.h.
|
staticprotectedinherited |
Definition at line 75 of file OgreSingleton.h.
|
private |
Definition at line 68 of file Plus/src/GLSL/include/OgreGLSLLinkProgramManager.h.