Ogre assumes that there are separate vertex and fragment programs to deal with but GLSL ES has one program object that represents the active vertex and fragment shader objects during a rendering state. More...
#include <OgreGLSLESLinkProgramManager.h>
Public Member Functions | |
GLSLESLinkProgramManager (void) | |
~GLSLESLinkProgramManager (void) | |
GLSLESLinkProgram * | 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. | |
void | setActiveFragmentShader (GLSLESGpuProgram *fragmentGpuProgram) |
Set the active fragment shader for the next rendering state. | |
void | setActiveVertexShader (GLSLESGpuProgram *vertexGpuProgram) |
Set the active vertex shader for the next rendering state. | |
void | optimiseShaderSource (GLSLESGpuProgram *gpuProgram) |
void | extractUniforms (GLuint programObject, const GpuConstantDefinitionMap *vertexConstantDefs, const GpuConstantDefinitionMap *fragmentConstantDefs, GLUniformReferenceList &list) |
Populate a list of uniforms based on a program object. | |
void | extractConstantDefs (const String &src, GpuNamedConstants &constantDefs, const String &filename) |
Populate a list of uniforms based on GLSL ES source. | |
Static Public Member Functions | |
static GLSLESLinkProgramManager & | getSingleton (void) |
static GLSLESLinkProgramManager * | getSingletonPtr (void) |
Protected Member Functions | |
void | completeDefInfo (GLenum gltype, GpuConstantDefinition &defToUpdate) |
Use type to complete other information. | |
bool | completeParamSource (const String ¶mName, const GpuConstantDefinitionMap *vertexConstantDefs, const GpuConstantDefinitionMap *fragmentConstantDefs, GLUniformReference &refToUpdate) |
Find where the data for a specific uniform should come from, populate. | |
Protected Attributes | |
GLSLESGpuProgram * | mActiveVertexGpuProgram |
Active objects defining the active rendering gpu state. | |
GLSLESGpuProgram * | mActiveFragmentGpuProgram |
struct glslopt_ctx * | mGLSLOptimiserContext |
Static Protected Attributes | |
static GLSLESLinkProgramManager * | msSingleton |
Private Types | |
typedef map< uint64, GLSLESLinkProgram * >::type | LinkProgramMap |
typedef LinkProgramMap::iterator | LinkProgramIterator |
typedef map< String, GLenum >::type | StringToEnumMap |
Private Attributes | |
LinkProgramMap | mLinkPrograms |
Container holding previously created program objects. | |
GLSLESLinkProgram * | mActiveLinkProgram |
Active objects defining the active rendering gpu state. | |
StringToEnumMap | mTypeEnumMap |
Ogre assumes that there are separate vertex and fragment programs to deal with but GLSL ES 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 ES Link Program Manager does the same. The GLSL ES 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 52 of file OgreGLSLESLinkProgramManager.h.
typedef LinkProgramMap::iterator Ogre::GLSLESLinkProgramManager::LinkProgramIterator [private] |
Definition at line 58 of file OgreGLSLESLinkProgramManager.h.
typedef map<uint64, GLSLESLinkProgram*>::type Ogre::GLSLESLinkProgramManager::LinkProgramMap [private] |
Definition at line 57 of file OgreGLSLESLinkProgramManager.h.
typedef map<String, GLenum>::type Ogre::GLSLESLinkProgramManager::StringToEnumMap [private] |
Reimplemented from Ogre::GLSLESProgramManagerCommon.
Definition at line 66 of file OgreGLSLESLinkProgramManager.h.
void Ogre::GLSLESProgramManagerCommon::completeDefInfo | ( | GLenum | gltype, |
GpuConstantDefinition & | defToUpdate | ||
) | [protected, inherited] |
Use type to complete other information.
bool Ogre::GLSLESProgramManagerCommon::completeParamSource | ( | const String & | paramName, |
const GpuConstantDefinitionMap * | vertexConstantDefs, | ||
const GpuConstantDefinitionMap * | fragmentConstantDefs, | ||
GLUniformReference & | refToUpdate | ||
) | [protected, inherited] |
Find where the data for a specific uniform should come from, populate.
void Ogre::GLSLESProgramManagerCommon::extractConstantDefs | ( | const String & | src, |
GpuNamedConstants & | constantDefs, | ||
const String & | filename | ||
) | [inherited] |
Populate a list of uniforms based on GLSL ES source.
src | Reference to the source code |
list | 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. |
void Ogre::GLSLESProgramManagerCommon::extractUniforms | ( | GLuint | programObject, |
const GpuConstantDefinitionMap * | vertexConstantDefs, | ||
const GpuConstantDefinitionMap * | fragmentConstantDefs, | ||
GLUniformReferenceList & | list | ||
) | [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). |
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 GLSLESLinkProgramManager& Ogre::GLSLESLinkProgramManager::getSingleton | ( | void | ) | [static] |
Reimplemented from Ogre::Singleton< GLSLESLinkProgramManager >.
static GLSLESLinkProgramManager* Ogre::GLSLESLinkProgramManager::getSingletonPtr | ( | void | ) | [static] |
Reimplemented from Ogre::Singleton< GLSLESLinkProgramManager >.
void Ogre::GLSLESProgramManagerCommon::optimiseShaderSource | ( | GLSLESGpuProgram * | gpuProgram | ) | [inherited] |
void Ogre::GLSLESLinkProgramManager::setActiveFragmentShader | ( | GLSLESGpuProgram * | fragmentGpuProgram | ) |
Set the active fragment shader for the next rendering state.
The active program object will be cleared. Normally called from the GLSLESGpuProgram::bindProgram and unbindProgram methods
void Ogre::GLSLESLinkProgramManager::setActiveVertexShader | ( | GLSLESGpuProgram * | vertexGpuProgram | ) |
Set the active vertex shader for the next rendering state.
The active program object will be cleared. Normally called from the GLSLESGpuProgram::bindProgram and unbindProgram methods
GLSLESGpuProgram* Ogre::GLSLESProgramManagerCommon::mActiveFragmentGpuProgram [protected, inherited] |
Definition at line 59 of file OgreGLSLESProgramManagerCommon.h.
Active objects defining the active rendering gpu state.
Definition at line 64 of file OgreGLSLESLinkProgramManager.h.
GLSLESGpuProgram* Ogre::GLSLESProgramManagerCommon::mActiveVertexGpuProgram [protected, inherited] |
Active objects defining the active rendering gpu state.
Definition at line 58 of file OgreGLSLESProgramManagerCommon.h.
struct glslopt_ctx* Ogre::GLSLESProgramManagerCommon::mGLSLOptimiserContext [protected, inherited] |
Definition at line 64 of file OgreGLSLESProgramManagerCommon.h.
Container holding previously created program objects.
Definition at line 61 of file OgreGLSLESLinkProgramManager.h.
GLSLESLinkProgramManager * Ogre::Singleton< GLSLESLinkProgramManager >::msSingleton [static, protected, inherited] |
Definition at line 75 of file OgreSingleton.h.
Reimplemented from Ogre::GLSLESProgramManagerCommon.
Definition at line 67 of file OgreGLSLESLinkProgramManager.h.
Copyright © 2012 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Fri May 25 2012 21:49:30