#include <ShaderCenter.h>
Public Member Functions | |
ShaderCenter () | |
Constructeur de ShaderCenter. | |
void | registerShader (Shader *shader, int type) |
Fonction d'enregistrement de shader. | |
void | unregisterShader (int type) |
Fonction de desenregistrement de shader. | |
void | registerParameter (int shaderType, int type, CGparameter paramName, bool refreshable, int pass=1) |
Fonction d'enregistrement de parametre pour un shader. | |
void | refreshParameters (int shaderType) |
Fonction de rafraichissement des parametres. | |
void | registerTexture (int shaderType, CGparameter texParamName, GLuint id) |
Fonction d'enregistrement d'une texture pour un shader. | |
void | unregisterParameters (int shaderType) |
Fonction de desenregistrement de parametres dans un shader. | |
void | unregisterTextures (int shaderType) |
Fonction de desenregistrement de toutes les textures pour un shader. | |
void | scheduleShaderForChange (unsigned int shaderType, Shader *newShader) |
Fonction de demande de swap de shader. | |
void | scheduleTextureForChange (unsigned int shaderType, CGparameter param, Texture *texToAdd, Texture *texToRemove) |
Fonction de demande de swap de texture. | |
void | flushScheduledShaders () |
Fonction de swap de shaders. | |
void | flushScheduledTextures () |
Fonction de swap de textures. | |
void | executeShader (int type, int pass=1) |
Fonction d'activation d'un shader. | |
void | endShader (int type) |
Fonction de desactivation d'un shader. | |
void | changeTexture (int shaderType, CGparameter texParamName, GLuint newId) |
Procede au swap immediat d'une texture. | |
Static Public Member Functions | |
static void | getShaderParam_ModelView (CGparameter p) |
static void | getShaderParam_ModelViewProj (CGparameter p) |
static void | getShaderParam_dirLumiere (CGparameter p) |
static void | getShaderParam_observateur (CGparameter p) |
static void | getShaderParam_couleurLumiere (CGparameter p) |
static void | getShaderParam_tailleLightMap (CGparameter p) |
static void | getShaderParam_gmLod (CGparameter p) |
static void | getShaderParam_gmLodX (CGparameter p) |
static void | getShaderParam_gmLodY (CGparameter p) |
static void | getShaderParam_gmPatchSize (CGparameter p) |
static void | getShaderParam_t (CGparameter p) |
static void | getShaderParam_lakeTranslation (CGparameter p) |
static void | getShaderParam_ModelViewInverseCube (CGparameter p) |
Static Public Attributes | |
static unsigned int | tailleLightMap |
Variable contenant la taille de la lightmap pour les shaders. | |
Private Attributes | |
map< int, shaderInfoPtr, ltint > | shaderList |
Liste des shaders enregistres. | |
vector< textureInfoPtr > | textureList [NUM_SHADER_TYPES] |
Liste des textures enregistrees. | |
int | activatedShader |
Code du shader active dans le ShaderCenter. | |
vector< shaderChangePtr > | scheduledShaders |
Liste des shaders a swapper. | |
vector< textureChangePtr > | scheduledTextures |
Liste des textures a swapper. | |
Static Private Attributes | |
static void * | paramTypesFuncs [NUM_PARAM_TYPES] |
Liste des fonctions associees aux parametres. |
Cette classe permet une gestion simplifiee des shaders. Lorsqu'un Shader doit etre utilise, un objet derivant de la classe Shader et cree et s'enregistre aupres du ShaderCenter. Pour cela, il s'enregistre comme shader en indiquant sur quels elements de la scene il doit etre utilise. Il indique ensuite de quels parametres et de quelles textures il aura besoin. Lors du dessin de l'element de scene correspondant, le renderer demandera au ShaderCenter d'activer le shader le temps du rendu, puis de le desactiver.
Le ShaderCenter supporte aussi le swapping de shaders et de textures. Pour cela, le shader ou la texture doit etre declares comme voulant etre changes, en indiquant le nouvel objet. Le changement se fera au debut du prochain rendu, puisqu'il ne faut pas changer d'objet en cours de rendu.
La procedure exacte est donc la suivante :
Pour ajouter un nouveau type de parametre, la procedure est la suivante :
|
Constructeur de ShaderCenter. Initialise les dictionnaires de shaders. |
|
Procede au swap immediat d'une texture.
|
|
Fonction de desactivation d'un shader.
|
|
Fonction d'activation d'un shader.
|
|
Fonction de swap de shaders. Effectue les changements de shaders demandes depuis le dernier flush. Tous les changements de shaders demandes par la fonction scheduleShaderForChange seront donc effectues. |
|
Fonction de swap de textures. Effectue les changements de textures demandes depuis le dernier flush. Tous les changements de textures demandes par la fonction scheduleTextureForChange seront donc effectues. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Fonction de rafraichissement des parametres.
|
|
Fonction d'enregistrement de parametre pour un shader.
|
|
Fonction d'enregistrement de shader.
|
|
Fonction d'enregistrement d'une texture pour un shader.
|
|
Fonction de demande de swap de shader.
|
|
Fonction de demande de swap de texture.
|
|
Fonction de desenregistrement de parametres dans un shader.
|
|
Fonction de desenregistrement de shader.
|
|
Fonction de desenregistrement de toutes les textures pour un shader.
|
|
Code du shader active dans le ShaderCenter. Ce code indique si un shader est actuellement active, et si oui, lequel. Cela permet ensuite de bloquer le desenregistrement d'un shader active, ou bien d'en activer deux simultanement. |
|
Initial value: { (void *)ShaderCenter::getShaderParam_ModelView, (void *)ShaderCenter::getShaderParam_ModelViewProj, (void *)ShaderCenter::getShaderParam_dirLumiere, (void *)ShaderCenter::getShaderParam_observateur, (void *)ShaderCenter::getShaderParam_couleurLumiere, (void *)ShaderCenter::getShaderParam_tailleLightMap, (void *)ShaderCenter::getShaderParam_gmLod, (void *)ShaderCenter::getShaderParam_gmLodX, (void *)ShaderCenter::getShaderParam_gmLodY, (void *)ShaderCenter::getShaderParam_gmPatchSize, (void *)ShaderCenter::getShaderParam_t, (void *)ShaderCenter::getShaderParam_lakeTranslation, (void *)ShaderCenter::getShaderParam_ModelViewInverseCube } Cette variable contient la liste ordonnee des fonctions utilisees pour le renseignement des parametres uniformes des shaders. Bien que le pointeur de fonction soit conserve en (void *), toutes ces fonctions ont comme signature void *func(CGparameter). |
|
Liste des shaders a swapper. Cette variable contient la liste des shaders pour lesquels un changement a ete demande depuis le dernier flushScheduledShaders(). |
|
Liste des textures a swapper. Cette variable contient la liste des textures pour lesquels un changement a ete demande depuis le dernier flushScheduledTextures(). |
|
Liste des shaders enregistres. Liste des shaders enregistres dans le ShaderCenter. La cle du dictionnaire est le type du shader et sa valeur est une structure d'information contenant le shader et la liste des parametres qui y sont associes. |
|
Variable contenant la taille de la lightmap pour les shaders. Parametre de shader contenant la taille de la lightmap pour effectuer les calculs de coordonnees de texture dans les shaders. |
|
Liste des textures enregistrees. Liste des textures enregistrees pour un shader dans le ShaderCenter. Elle contient pour chaque texture une structure d'information indiquant l'identifiant de la texture dans le programme Cg et l'identifiant OpenGL de la texture. |