GL4Dummies  0.1.7
Référence du fichier gl4du.h

The GL4Dummies Utilities. Plus de détails...

#include "gl4dummies.h"
#include "gl4dm.h"
#include "gl4dg.h"
Graphe des dépendances par inclusion de gl4du.h:
Ce graphe montre quels fichiers incluent directement ou indirectement ce fichier :

Aller au code source de ce fichier.

Définitions de type

typedef enum GL4DUenum GL4DUenum
 

Énumérations

enum  GL4DUenum {
  GL4DU_VERTEX_SHADER = 1, GL4DU_FRAGMENT_SHADER = 2, GL4DU_GEOMETRY_SHADER = 4, GL4DU_MATRIX = 1024,
  GL4DU_MATRIX_TYPE = 1025, GL4DU_SHADER = ((unsigned long long)1) << 32, GL4DU_PROGRAM = ((unsigned long long)1) << 33, GL4DU_MATRICES = ((unsigned long long)1) << 34,
  GL4DU_GEOMETRY = ((unsigned long long)1) << 35, GL4DU_DEMO_HELPER = ((unsigned long long)1) << 36, GL4DU_AT_EXIT = ((unsigned long long)1) << 36, GL4DU_ALL = (unsigned long long)0xffffffffffffffffLL
}
 

Fonctions

GL4DAPI void GL4DAPIENTRY gl4duInit (int argc, char **argv)
 Initialise la bibliothèque. Plus de détails...
 
GL4DAPI int GL4DAPIENTRY gl4duHasInit (void)
 indique si la bibliothèque a été initialisée Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duMakeBinRelativePath (char *dst, size_t dst_size, const char *filename)
 Ajoute _pathOfMe au chemin filename passé en argument et stocke l'ensemble dans dst. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duPrintShaderInfoLog (GLuint object, FILE *f)
 imprime s'il existe l'infoLog de la compilation du Shader object dans fp. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duPrintProgramInfoLog (GLuint object, FILE *f)
 imprime s'il existe l'infoLog de l'édition de liens pour le Program object dans fp. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duPrintFPS (FILE *fp)
 imprime dans le fichier pointé par fp le Frame-Per-Second. Plus de détails...
 
GL4DAPI GLuint GL4DAPIENTRY gl4duCreateShader (GLenum shadertype, const char *filename)
 retourne l'identifiant du shader décrit dans filename. Plus de détails...
 
GL4DAPI GLuint GL4DAPIENTRY gl4duCreateShaderIM (GLenum shadertype, const char *filename, const char *shadercode)
 retourne l'identifiant du shader dont le code source est shadercode et le nom de fichier est filename ; le nom de fichier est fictif et sert seulement d'identifiant. Plus de détails...
 
GL4DAPI GLuint GL4DAPIENTRY gl4duCreateShaderFED (const char *decData, GLenum shadertype, const char *filename)
 retourne l'identifiant du shader décrit dans filename. Version FED de la précédente Plus de détails...
 
GL4DAPI GLuint GL4DAPIENTRY gl4duFindShader (const char *filename)
 retourne l'identifiant du shader décrit dans filename. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duDeleteShader (GLuint id)
 supprime le shader dont l'identifiant openGL est id de la liste de shaders shaders_list. Plus de détails...
 
GL4DAPI GLuint GL4DAPIENTRY gl4duCreateProgram (const char *firstone,...)
 créé un program à partir d'une liste (variable) de nom de fichiers shaders et renvoie l'identifiant openGL du program créé. Plus de détails...
 
GL4DAPI GLuint GL4DAPIENTRY gl4duCreateProgramFED (const char *encData, const char *firstone,...)
 créé un program à partir d'une liste (variable) de nom de fichiers shaders encapsulés dans un fichier crypté préalablement décrypté en ram et renvoie l'identifiant openGL du program créé. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duDeleteProgram (GLuint id)
 supprime le program dont l'identifiant openGL est id de la liste de programs programs_list. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duCleanUnattached (GL4DUenum what)
 supprime programs et/ou shaders non liés. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duAtExit (void(*func)(void))
 ajoute func dans la liste des fonctions à appeler lors du gl4duClean avec l'argument GL4DU_AT_EXIT ou GL4DU_ALL. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duClean (GL4DUenum what)
 supprime tous les programs et/ou tous les shaders. Plus de détails...
 
GL4DAPI int GL4DAPIENTRY gl4duUpdateShaders (void)
 parcours la liste des shaders shaders_list et vérifie s'il y a besoin de mettre à jour le shader (recompiler et relinker). Plus de détails...
 
GL4DAPI GLboolean GL4DAPIENTRY gl4duGenMatrix (GLenum type, const char *name)
 génère et gère une matrice (pile de "une matrice 4x4") liée au nom name et de type type. Plus de détails...
 
GL4DAPI GLboolean GL4DAPIENTRY gl4duIsMatrix (const char *name)
 indique s'il existe une matrice est liée au nom name passé en argument. Plus de détails...
 
GL4DAPI GLboolean GL4DAPIENTRY gl4duBindMatrix (const char *name)
 active (met en current) la matrice liée au nom name passé en argument. Plus de détails...
 
GL4DAPI GLboolean GL4DAPIENTRY gl4duDeleteMatrix (const char *name)
 supprime la matrice liée au nom name passé en argument. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duPushMatrix (void)
 empile (sauvegarde) la matrice courante et utilise une nouvelle matrice dont le contenu est le meme que celle empilée. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duPopMatrix (void)
 dépile la matrice courante en restaurant l'état précédemment sauvegardé à l'aide de gl4duPushMatrix. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duSendMatrix (void)
 envoie la matrice courante au program shader en cours et en utilisant le nom de la matrice pour obtenir le uniform location. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duSendMatrices (void)
 envoie toutes matrices au program shader en cours et en utilisant leurs noms pour obtenir le uniform location. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duFrustumf (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f)
 Création d'une matrice de projection perspective selon l'ancienne fonction glFrustum et la multiplie dans la matrice en cours. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duFrustumd (GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f)
 Création d'une matrice de projection perspective selon l'ancienne fonction glFrustum et la multiplie dans la matrice en cours. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duOrthof (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f)
 Création d'une matrice de projection orthogonale selon l'ancienne fonction glOrtho et la multiplie dans la matrice en cours. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duOrthod (GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f)
 Création d'une matrice de projection orthogonale selon l'ancienne fonction glOrtho et la multiplie dans la matrice en cours. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duPerspectivef (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)
 Création d'une matrice de projection perspective selon l'ancienne fonction gluPerspective et la multiplie dans la matrice en cours. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duPerspectived (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)
 Création d'une matrice de projection perspective selon l'ancienne fonction gluPerspective et la multiplie dans la matrice en cours. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duLoadIdentityf (void)
 Chargement d'une matrice identité dans la matrice en cours. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duLoadIdentityd (void)
 Chargement d'une matrice identité dans la matrice en cours. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duLoadMatrixf (const GLfloat *matrix)
 Chargement d'une matrice matrix dans la matrice en cours. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duLoadMatrixd (const GLdouble *matrix)
 Chargement d'une matrice matrix dans la matrice en cours. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duMultMatrixf (const GLfloat *matrix)
 Multiplication de la matrice en cours par une matrice matrix. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duMultMatrixd (const GLdouble *matrix)
 Multiplication de la matrice en cours par une matrice matrix. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duMultMatrixByName (const char *name)
 Multiplication de la matrice en cours par une des matrices connues dans GL4Dummies. Cette fonction utilise le nom de la matrice name afin de la récupérer et réaliser la multiplication à droite, le tout dans la matrice courante : currentMatrix = currentMatrix x matrixBy(name) Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
 Multiplication de la matrice en cours par une matrice de rotation définie par un angle angle donné en degrés autour de l'axe (x, y, z). Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
 Multiplication de la matrice en cours par une matrice de rotation définie par un angle angle donné en degrés autour de l'axe (x, y, z). Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duTranslatef (GLfloat tx, GLfloat ty, GLfloat tz)
 Multiplication de la matrice en cours par une matrice de translation (tx, ty, tz). Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duTranslated (GLdouble tx, GLdouble ty, GLdouble tz)
 Multiplication de la matrice en cours par une matrice de translation (tx, ty, tz). Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duScalef (GLfloat sx, GLfloat sy, GLfloat sz)
 Multiplication de la matrice en cours par une matrice d'homothétie (sx, sy, sz). Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duScaled (GLdouble sx, GLdouble sy, GLdouble sz)
 Multiplication de la matrice en cours par une matrice d'homothétie (sx, sy, sz). Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duLookAtf (GLfloat eyeX, GLfloat eyeY, GLfloat eyeZ, GLfloat centerX, GLfloat centerY, GLfloat centerZ, GLfloat upX, GLfloat upY, GLfloat upZ)
 Définie des transformations pour simuler un point de vue avec direction de regard et orientation. Plus de détails...
 
GL4DAPI void GL4DAPIENTRY gl4duLookAtd (GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLdouble centerZ, GLdouble upX, GLdouble upY, GLdouble upZ)
 Définie des transformations pour simuler un point de vue avec direction de regard et orientation. Plus de détails...
 
GL4DAPI void *GL4DAPIENTRY gl4duGetMatrixData (void)
 retourne le pointeur vers les données de la matrice (pile de "une matrice 4x4") courante. Plus de détails...
 
GL4DAPI GLboolean GL4DAPIENTRY gl4duGetIntegerv (GL4DUenum pname, GLint *params)
 Renseigne sur la valeur du paramètre demandé. Le paramètre est envoyé via pname et sera stocké dans params. Plus de détails...
 

Description détaillée

The GL4Dummies Utilities.

Auteur
Fares BELHADJ amsi@.nosp@m.graf.nosp@m.eet.f.nosp@m.r (ou amsi@.nosp@m.ai.u.nosp@m.niv-p.nosp@m.aris.nosp@m.8.fr)
Date
March 28, 2008

Définition dans le fichier gl4du.h.

Documentation des définitions de type

◆ GL4DUenum

typedef enum GL4DUenum GL4DUenum

Documentation du type de l'énumération

◆ GL4DUenum

enum GL4DUenum
Valeurs énumérées
GL4DU_VERTEX_SHADER 
GL4DU_FRAGMENT_SHADER 
GL4DU_GEOMETRY_SHADER 
GL4DU_MATRIX 
GL4DU_MATRIX_TYPE 
GL4DU_SHADER 
GL4DU_PROGRAM 
GL4DU_MATRICES 
GL4DU_GEOMETRY 
GL4DU_DEMO_HELPER 
GL4DU_AT_EXIT 
GL4DU_ALL 
20  {
24  GL4DU_MATRIX = 1024, /* les data de la matrice */
25  GL4DU_MATRIX_TYPE = 1025,
26 #if defined(_MSC_VER) /* ENUM n'est que 32bits sous MSC !!! */
27  GL4DU_SHADER = 1 << 20,
28  GL4DU_PROGRAM = 1 << 21,
29  GL4DU_MATRICES = 1 << 22,
30  GL4DU_GEOMETRY = 1 << 23,
31  GL4DU_DEMO_HELPER = 1 << 24,
32  GL4DU_AT_EXIT = 1 << 25,
33  GL4DU_ALL = 0xffffffff
34 #else
35  GL4DU_SHADER = ((unsigned long long)1) << 32,
36  GL4DU_PROGRAM = ((unsigned long long)1) << 33,
37  GL4DU_MATRICES = ((unsigned long long)1) << 34,
38  GL4DU_GEOMETRY = ((unsigned long long)1) << 35,
39  GL4DU_DEMO_HELPER = ((unsigned long long)1) << 36,
40  GL4DU_AT_EXIT = ((unsigned long long)1) << 36,
41  GL4DU_ALL = (unsigned long long)0xffffffffffffffffLL
42 #endif
43  };

Documentation des fonctions

◆ gl4duAtExit()

GL4DAPI void GL4DAPIENTRY gl4duAtExit ( void(*)(void)  func)

ajoute func dans la liste des fonctions à appeler lors du gl4duClean avec l'argument GL4DU_AT_EXIT ou GL4DU_ALL.

Paramètres
funcla fonction à ajouter dans la liste.
616  {
617  if(_aelist == NULL) {
618  _aelist = llNew();
619  }
620  llPush(_aelist, func);
621 }

Références _aelist, llNew(), et llPush().

Référencé par fheapCreate(), et init().

◆ gl4duBindMatrix()

GL4DAPI GLboolean GL4DAPIENTRY gl4duBindMatrix ( const char *  name)

active (met en current) la matrice liée au nom name passé en argument.

Si la matrice existe l'active et renvoie GL_TRUE, sinon renvoie GL_FALSE. Si le paramètre name est NULL, désactive toute matrice et renvoie GL_TRUE.

Paramètres
namele nom de la matrice à rechercher pour activer. Si NULL désactive (dé-bind) tout.
Renvoie
GL_TRUE si la matrice existe (et elle est préalablement activée), GL_FALSE sinon. Si le paramètre name est NULL, désactive toute matrice et renvoie GL_TRUE.
1064  {
1065  bin_tree_t ** bt;
1066  if(!name) {
1067  _gl4dCurMatrix = NULL;
1068  return GL_TRUE;
1069  }
1070  bt = findMatrix(name);
1071  if(bt) {
1072  _gl4dCurMatrix = (_GL4DUMatrix *)((*bt)->data);
1073  return GL_TRUE;
1074  }
1075  return GL_FALSE;
1076 }

Références _gl4dCurMatrix, et findMatrix().

◆ gl4duClean()

GL4DAPI void GL4DAPIENTRY gl4duClean ( GL4DUenum  what)

supprime tous les programs et/ou tous les shaders.

581  {
582  if(what & GL4DU_AT_EXIT) {
583  if(_aelist) {
584  while(!llEmpty(_aelist))
585  ((void (*)(void))llPop(_aelist))();
586  llFree(_aelist, NULL);
587  _aelist = NULL;
588  }
589  }
590  if(what & GL4DU_PROGRAM) {
591  program_t ** ptr = &programs_list;
592  while(*ptr)
594  }
595  if(what & GL4DU_SHADER) {
596  shader_t ** ptr = &shaders_list;
597  while(*ptr)
599  }
600  if(what & GL4DU_MATRICES)
602  if(what & GL4DU_GEOMETRY)
603  gl4dgClean();
604 #ifndef __GLES4D__
605  if(what & GL4DU_DEMO_HELPER)
606  gl4dhClean();
607 #endif
608  _hasInit = 0;
609 }

Références _aelist, _gl4duMatrices, _hasInit, btFree(), deleteFromProgramsList(), deleteFromShadersList(), freeGL4DUMatrix(), gl4dgClean(), gl4dhClean(), GL4DU_AT_EXIT, GL4DU_DEMO_HELPER, GL4DU_GEOMETRY, GL4DU_MATRICES, GL4DU_PROGRAM, GL4DU_SHADER, llEmpty(), llFree(), llPop(), programs_list, et shaders_list.

◆ gl4duCleanUnattached()

GL4DAPI void GL4DAPIENTRY gl4duCleanUnattached ( GL4DUenum  what)

supprime programs et/ou shaders non liés.

626  {
627  if(what & GL4DU_PROGRAM) {
628  program_t ** ptr = &programs_list;
629  while(*ptr) {
630  if((*ptr)->nshaders <= 0) /* ne devrait pas être négatif */
632  else
633  ptr = &((*ptr)->next);
634  }
635  }
636  if(what & GL4DU_SHADER) {
637  shader_t ** ptr = &shaders_list;
638  while(*ptr) {
639  if((*ptr)->nprograms <= 0) /* ne devrait pas être négatif */
641  else
642  ptr = &((*ptr)->next);
643  }
644  }
645 }

Références deleteFromProgramsList(), deleteFromShadersList(), GL4DU_PROGRAM, GL4DU_SHADER, programs_list, et shaders_list.

◆ gl4duCreateProgram()

GL4DAPI GLuint GL4DAPIENTRY gl4duCreateProgram ( const char *  firstone,
  ... 
)

créé un program à partir d'une liste (variable) de nom de fichiers shaders et renvoie l'identifiant openGL du program créé.

Les arguments sont les noms des fichiers shaders précédés d'un tag indiquant le type de shader : <vs> pour un vertex shader, <tcs> pour un tessellation control shader, <tes> pour un tessellation evaluation shader, <gs> pour un geometry shader, <fs> pour un fragment shader et <cs> pour un compute shader.

Sur le même principe, au lieu d'avoir le tag suivi du nom de fichier shader correspondant, utiliser le tag ouvrant <im*> et fermant </im*> pour inclure directement le code du shader dans la chaîne en mémoire (im => in memory). Ce qui donne par exemple pour le vertex shader : "<imvs> ... le code du vertex shader ... </imvs>".

Renvoie
l'identifiant openGL du program créé sinon 0. Dans ce dernier cas les shaders créés (compilés) avant l'échec ne sont pas supprimés ; un appel à gl4duCleanUnattached peut s'en charger.
368  {
369  va_list pa;
370  const char * filename;
371  program_t ** prg;
372  GLuint sId, pId = glCreateProgram();
373  char fn[BUFSIZ], format[BUFSIZ];
374  if(!pId) return pId;
375  prg = addInProgramsList(pId);
376 
377  filename = firstone;
378  va_start(pa, firstone);
379  fprintf(stderr, "%s (%d): Creation du programme %d a l'aide des Shaders :\n", __FILE__, __LINE__, pId);
380  do {
381  if(!strncmp("<vs>", filename, 4)) { /* vertex shader */
382  fprintf(stderr, "%s : vertex shader\n", &filename[4]);
383  if(!(sId = gl4duCreateShader(GL_VERTEX_SHADER, &filename[4]))) goto gl4duCreateProgram_ERROR;
384  attachShader(*prg, *findidInShadersList(sId));
385  } else if(!strncmp("<imvs>", filename, 6)) { /* in memory vertex shader */
386  fn[0] = 0;
387  snprintf(format, sizeof format, "<imvs>%%%d[^\t\n<>$!:;,=\"|]</imvs>", BUFSIZ - 1);
388  if(sscanf(filename, format, fn) != 1 || strncmp("</imvs>", &filename[6 + strlen(fn)], 7)) {
389  fprintf(stderr, "%s (%d): %s: erreur lors du parsing de %s\n",
390  __FILE__, __LINE__, __func__, filename);
391  continue;
392  }
393  fprintf(stderr, "%s : vertex shader\n", fn);
394  if(!(sId = gl4duCreateShaderIM(GL_VERTEX_SHADER, fn, &filename[13 + strlen(fn)]))) goto gl4duCreateProgram_ERROR;
395  attachShader(*prg, *findidInShadersList(sId));
396  } else if(!strncmp("<fs>", filename, 4)) { /* fragment shader */
397  fprintf(stderr, "%s : fragment shader\n", &filename[4]);
398  if(!(sId = gl4duCreateShader(GL_FRAGMENT_SHADER, &filename[4]))) goto gl4duCreateProgram_ERROR;
399  attachShader(*prg, *findidInShadersList(sId));
400  } else if(!strncmp("<imfs>", filename, 6)) { /* in memory fragment shader */
401  fn[0] = 0;
402  snprintf(format, sizeof format, "<imfs>%%%d[^\t\n<>$!:;,=\"|]</imfs>", BUFSIZ - 1);
403  if(sscanf(filename, format, fn) != 1 || strncmp("</imfs>", &filename[6 + strlen(fn)], 7)) {
404  fprintf(stderr, "%s (%d): %s: erreur lors du parsing de %s\n",
405  __FILE__, __LINE__, __func__, filename);
406  continue;
407  }
408  fprintf(stderr, "%s : fragment shader\n", fn);
409  if(!(sId = gl4duCreateShaderIM(GL_FRAGMENT_SHADER, fn, &filename[13 + strlen(fn)]))) goto gl4duCreateProgram_ERROR;
410  attachShader(*prg, *findidInShadersList(sId));
411  }
412 #ifndef __ANDROID__
413  else if(!strncmp("<cs>", filename, 4)) { /* compute shader */
414  fprintf(stderr, "%s : compute shader\n", &filename[4]);
415  if(!(sId = gl4duCreateShader(GL_COMPUTE_SHADER, &filename[4]))) goto gl4duCreateProgram_ERROR;
416  attachShader(*prg, *findidInShadersList(sId));
417  } else if(!strncmp("<imcs>", filename, 6)) { /* in memory compute shader */
418  fn[0] = 0;
419  snprintf(format, sizeof format, "<imcs>%%%d[^\t\n<>$!:;,=\"|]</imcs>", BUFSIZ - 1);
420  if(sscanf(filename, format, fn) != 1 || strncmp("</imcs>", &filename[6 + strlen(fn)], 7)) {
421  fprintf(stderr, "%s (%d): %s: erreur lors du parsing de %s\n",
422  __FILE__, __LINE__, __func__, filename);
423  continue;
424  }
425  fprintf(stderr, "%s : compute shader\n", fn);
426  if(!(sId = gl4duCreateShaderIM(GL_COMPUTE_SHADER, fn, &filename[13 + strlen(fn)]))) goto gl4duCreateProgram_ERROR;
427  attachShader(*prg, *findidInShadersList(sId));
428  } else if(!strncmp("<gs>", filename, 4)) { /* geometry shader */
429  fprintf(stderr, "%s : geometry shader\n", &filename[4]);
430  if(!(sId = gl4duCreateShader(GL_GEOMETRY_SHADER, &filename[4]))) goto gl4duCreateProgram_ERROR;
431  attachShader(*prg, *findidInShadersList(sId));
432  } else if(!strncmp("<imgs>", filename, 6)) { /* in memory geometry shader */
433  fn[0] = 0;
434  snprintf(format, sizeof format, "<imgs>%%%d[^\t\n<>$!:;,=\"|]</imgs>", BUFSIZ - 1);
435  if(sscanf(filename, format, fn) != 1 || strncmp("</imgs>", &filename[6 + strlen(fn)], 7)) {
436  fprintf(stderr, "%s (%d): %s: erreur lors du parsing de %s\n",
437  __FILE__, __LINE__, __func__, filename);
438  continue;
439  }
440  fprintf(stderr, "%s : geometry shader\n", fn);
441  if(!(sId = gl4duCreateShaderIM(GL_GEOMETRY_SHADER, fn, &filename[13 + strlen(fn)]))) goto gl4duCreateProgram_ERROR;
442  attachShader(*prg, *findidInShadersList(sId));
443  } else if(!strncmp("<tcs>", filename, 5)) { /* tessellation control shader */
444  fprintf(stderr, "%s : tessellation control shader\n", &filename[5]);
445  if(!(sId = gl4duCreateShader(GL_TESS_CONTROL_SHADER, &filename[5]))) goto gl4duCreateProgram_ERROR;
446  attachShader(*prg, *findidInShadersList(sId));
447  } else if(!strncmp("<imtcs>", filename, 7)) { /* in memory tessellation control shader */
448  fn[0] = 0;
449  snprintf(format, sizeof format, "<imtcs>%%%d[^\t\n<>$!:;,=\"|]</imtcs>", BUFSIZ - 1);
450  if(sscanf(filename, format, fn) != 1 || strncmp("</imtcs>", &filename[7 + strlen(fn)], 8)) {
451  fprintf(stderr, "%s (%d): %s: erreur lors du parsing de %s\n",
452  __FILE__, __LINE__, __func__, filename);
453  continue;
454  }
455  fprintf(stderr, "%s : tessellation control shader\n", fn);
456  if(!(sId = gl4duCreateShaderIM(GL_TESS_CONTROL_SHADER, fn, &filename[15 + strlen(fn)]))) goto gl4duCreateProgram_ERROR;
457  attachShader(*prg, *findidInShadersList(sId));
458  } else if(!strncmp("<tes>", filename, 5)) { /* tessellation evaluation shader */
459  fprintf(stderr, "%s : tessellation evaluation shader\n", &filename[5]);
460  if(!(sId = gl4duCreateShader(GL_TESS_EVALUATION_SHADER, &filename[5]))) goto gl4duCreateProgram_ERROR;
461  attachShader(*prg, *findidInShadersList(sId));
462  } else if(!strncmp("<imtes>", filename, 7)) { /* in memory tessellation evaluation shader */
463  fn[0] = 0;
464  snprintf(format, sizeof format, "<imtes>%%%d[^\t\n<>$!:;,=\"|]</imtes>", BUFSIZ - 1);
465  if(sscanf(filename, format, fn) != 1 || strncmp("</imtes>", &filename[7 + strlen(fn)], 8)) {
466  fprintf(stderr, "%s (%d): %s: erreur lors du parsing de %s\n",
467  __FILE__, __LINE__, __func__, filename);
468  continue;
469  }
470  fprintf(stderr, "%s : tessellation evaluation shader\n", fn);
471  if(!(sId = gl4duCreateShaderIM(GL_TESS_EVALUATION_SHADER, fn, &filename[15 + strlen(fn)]))) goto gl4duCreateProgram_ERROR;
472  attachShader(*prg, *findidInShadersList(sId));
473  }
474 #endif
475  else { /* ??? shader */
476  fprintf(stderr, "%s (%d): %s: erreur de syntaxe dans \"%s\"\n",
477  __FILE__, __LINE__, __func__, filename);
478  }
479  } while((filename = va_arg(pa, const char *)) != NULL);
480  va_end(pa);
481  glLinkProgram(pId);
482  gl4duPrintProgramInfoLog(pId, stderr);
483  return pId;
484  gl4duCreateProgram_ERROR:
485  va_end(pa);
487  return 0;
488 }

Références addInProgramsList(), attachShader(), deleteFromProgramsList(), findidInShadersList(), gl4duCreateShader(), gl4duCreateShaderIM(), et gl4duPrintProgramInfoLog().

Référencé par gl4dpInitScreenWithDimensions(), et init().

◆ gl4duCreateProgramFED()

GL4DAPI GLuint GL4DAPIENTRY gl4duCreateProgramFED ( const char *  encData,
const char *  firstone,
  ... 
)

créé un program à partir d'une liste (variable) de nom de fichiers shaders encapsulés dans un fichier crypté préalablement décrypté en ram et renvoie l'identifiant openGL du program créé.

Paramètres
encDatafichier contenant un ensemble de shaders cryptés.
firstonepremier des n paramètres de la présente fonction à arguments variables ; ces arguments donnent les noms de fichiers contenus dans l'archive cryptée endCata. Ces noms de fichiers shaders sont précédés d'un tag indiquant le type de shader : <vs> pour un vertex shader, <tcs> pour un tessellation control shader, <tes> pour un tessellation evaluation shader, <gs> pour un geometry shader, <fs> pour un fragment shader et <cs> pour un compute shader.
Renvoie
l'identifiant openGL du program créé sinon 0. Dans ce dernier cas les shaders créés (compilés) avant l'échec ne sont pas supprimés ; un appel à gl4duCleanUnattached peut s'en charger.
509  {
510  static const char * prevEncData = NULL;
511  static char * decData = NULL;
512  va_list pa;
513  const char * filename;
514  program_t ** prg;
515  GLuint sId, pId = glCreateProgram();
516  if(!pId) return pId;
517  if(prevEncData != encData) {
518  if(decData)
519  free(decData);
520  decData = aes_from_tar(prevEncData = encData);
521  }
522  prg = addInProgramsList(pId);
523 
524  filename = firstone;
525  va_start(pa, firstone);
526  fprintf(stderr, "%s (%d): Creation du programme %d a l'aide des Shaders :\n", __FILE__, __LINE__, pId);
527  do {
528  if(!strncmp("<vs>", filename, 4)) { /* vertex shader */
529  fprintf(stderr, "%s : vertex shader\n", &filename[4]);
530  if(!(sId = gl4duCreateShaderFED(decData, GL_VERTEX_SHADER, &filename[4]))) goto gl4duCreateProgram_ERROR;
531  attachShader(*prg, *findidInShadersList(sId));
532  } else if(!strncmp("<fs>", filename, 4)) { /* fragment shader */
533  fprintf(stderr, "%s : fragment shader\n", &filename[4]);
534  if(!(sId = gl4duCreateShaderFED(decData, GL_FRAGMENT_SHADER, &filename[4]))) goto gl4duCreateProgram_ERROR;
535  attachShader(*prg, *findidInShadersList(sId));
536  }
537 #ifndef __ANDROID__
538  else if(!strncmp("<cs>", filename, 4)) { /* compute shader */
539  fprintf(stderr, "%s : compute shader\n", &filename[4]);
540  if(!(sId = gl4duCreateShaderFED(decData, GL_COMPUTE_SHADER, &filename[4]))) goto gl4duCreateProgram_ERROR;
541  attachShader(*prg, *findidInShadersList(sId));
542  } else if(!strncmp("<gs>", filename, 4)) { /* geometry shader */
543  fprintf(stderr, "%s : geometry shader\n", &filename[4]);
544  if(!(sId = gl4duCreateShaderFED(decData, GL_GEOMETRY_SHADER, &filename[4]))) goto gl4duCreateProgram_ERROR;
545  attachShader(*prg, *findidInShadersList(sId));
546  } else if(!strncmp("<tcs>", filename, 5)) { /* tessellation control shader */
547  fprintf(stderr, "%s : tessellation control shader\n", &filename[5]);
548  if(!(sId = gl4duCreateShaderFED(decData, GL_TESS_CONTROL_SHADER, &filename[5]))) goto gl4duCreateProgram_ERROR;
549  attachShader(*prg, *findidInShadersList(sId));
550  } else if(!strncmp("<tes>", filename, 5)) { /* tessellation evaluation shader */
551  fprintf(stderr, "%s : tessellation evaluation shader\n", &filename[5]);
552  if(!(sId = gl4duCreateShaderFED(decData, GL_TESS_EVALUATION_SHADER, &filename[5]))) goto gl4duCreateProgram_ERROR;
553  attachShader(*prg, *findidInShadersList(sId));
554  }
555 #endif
556  else { /* ??? shader */
557  fprintf(stderr, "%s (%d): %s: erreur de syntaxe dans \"%s\"\n",
558  __FILE__, __LINE__, __func__, filename);
559  }
560  } while((filename = va_arg(pa, const char *)) != NULL);
561  va_end(pa);
562  glLinkProgram(pId);
563  gl4duPrintProgramInfoLog(pId, stderr);
564  return pId;
565  gl4duCreateProgram_ERROR:
566  va_end(pa);
568  return 0;
569 }

Références addInProgramsList(), aes_from_tar(), attachShader(), deleteFromProgramsList(), findidInShadersList(), gl4duCreateShaderFED(), et gl4duPrintProgramInfoLog().

◆ gl4duCreateShader()

GL4DAPI GLuint GL4DAPIENTRY gl4duCreateShader ( GLenum  shadertype,
const char *  filename 
)

retourne l'identifiant du shader décrit dans filename.

Soit le shader existe déjà et l'identifiant est juste retourné avec findfnInShadersList, soit il est créer en utilisant gl4duCreateShader, glShaderSource et glCompileShader. Il se peut que le shader soit mis à jour si la date de modification du fichier est differente de celle stoquée dans shaders_list. Dans ce cas le shader est détruit puis recréé et la modification doit être répercuté sur tous les PROGRAMs liés.

Renvoie
l'identifiant du shader décrit dans filename.
277  {
278  char temp[BUFSIZ << 1];
279  shader_t ** sh = findfnInShadersList(filename);
280  if(*sh) return (*sh)->id;
281  gl4duMakeBinRelativePath(temp, sizeof temp, filename);
282  // la ligne précédente fait ça snprintf(temp, sizeof temp, "%s/%s", _pathOfMe, filename);
283  sh = findfnInShadersList(temp);
284  if(*sh) return (*sh)->id;
285  sh = addInShadersList(shadertype, filename, NULL);
286  if(!sh) {
287  fprintf(stderr, "trying with another path (%s)\n", temp);
288  sh = addInShadersList(shadertype, temp, NULL);
289  }
290  return (sh) ? (*sh)->id : 0;
291 }

Références addInShadersList(), findfnInShadersList(), et gl4duMakeBinRelativePath().

Référencé par gl4duCreateProgram().

◆ gl4duCreateShaderFED()

GL4DAPI GLuint GL4DAPIENTRY gl4duCreateShaderFED ( const char *  decData,
GLenum  shadertype,
const char *  filename 
)

retourne l'identifiant du shader décrit dans filename. Version FED de la précédente

A faire:

commenter

ajouter la gestion des chemins relatifs à l'emplacement du binaire comme pour gl4duCreateShader.

315  {
316  shader_t ** sh = findfnInShadersList(filename);
317  if(*sh) return (*sh)->id;
318  sh = addInShadersListFED(decData, shadertype, filename);
319  return (sh) ? (*sh)->id : 0;
320 }

Références addInShadersListFED(), findfnInShadersList(), et shader_t::id.

Référencé par gl4duCreateProgramFED().

◆ gl4duCreateShaderIM()

GL4DAPI GLuint GL4DAPIENTRY gl4duCreateShaderIM ( GLenum  shadertype,
const char *  filename,
const char *  shadercode 
)

retourne l'identifiant du shader dont le code source est shadercode et le nom de fichier est filename ; le nom de fichier est fictif et sert seulement d'identifiant.

Soit le shader existe déjà et l'identifiant est juste retourné avec findfnInShadersList, soit il est créer en utilisant gl4duCreateShader, glShaderSource et glCompileShader.

Renvoie
l'identifiant du shader correspondant au code source shadercode.
303  {
304  shader_t ** sh = findfnInShadersList(filename);
305  if(*sh) return (*sh)->id;
306  sh = addInShadersList(shadertype, filename, shadercode);
307  return (sh) ? (*sh)->id : 0;
308 }

Références addInShadersList(), findfnInShadersList(), et shader_t::id.

Référencé par gl4duCreateProgram().

◆ gl4duDeleteMatrix()

GL4DAPI GLboolean GL4DAPIENTRY gl4duDeleteMatrix ( const char *  name)

supprime la matrice liée au nom name passé en argument.

Si la matrice existe la supprime et renvoie GL_TRUE, sinon renvoie GL_FALSE. Si la matrice supprimée est la meme que la matrice courante (active), la matrice courante passe à NULL.

Paramètres
namele nom de la matrice à rechercher pour suppression.
Renvoie
GL_TRUE si la matrice existe et est supprimée, GL_FALSE sinon.
1089  {
1090  bin_tree_t ** bt = findMatrix(name);
1091  if(bt) {
1092  if(_gl4dCurMatrix == (_GL4DUMatrix *)((*bt)->data))
1093  _gl4dCurMatrix = NULL;
1095  if(_gl4dLastMatrixn == bt)
1096  _gl4dLastMatrixn = NULL;
1097  return GL_TRUE;
1098  }
1099  return GL_FALSE;
1100 }

Références _gl4dCurMatrix, _gl4dLastMatrixn, btDelete(), findMatrix(), et freeGL4DUMatrix().

◆ gl4duDeleteProgram()

GL4DAPI void GL4DAPIENTRY gl4duDeleteProgram ( GLuint  id)

supprime le program dont l'identifiant openGL est id de la liste de programs programs_list.

574  {
575  program_t ** prg = findInProgramsList(id);
576  if(*prg) deleteFromProgramsList(prg);
577 }

Références deleteFromProgramsList(), et findInProgramsList().

◆ gl4duDeleteShader()

GL4DAPI void GL4DAPIENTRY gl4duDeleteShader ( GLuint  id)

supprime le shader dont l'identifiant openGL est id de la liste de shaders shaders_list.

338  {
339  shader_t ** sh = findidInShadersList(id);
340  if(*sh) {
341  if((*sh)->nprograms > 0)
342  (*sh)->todelete = 1;
343  else
345  }
346 }

Références deleteFromShadersList(), et findidInShadersList().

◆ gl4duFindShader()

GL4DAPI GLuint GL4DAPIENTRY gl4duFindShader ( const char *  filename)

retourne l'identifiant du shader décrit dans filename.

Soit le shader existe et l'identifiant est retourné soit la fonction retourne 0.

Renvoie
l'identifiant du shader décrit dans filename ou 0 s'il n'a pas été chargé.
330  {
331  shader_t ** sh = findfnInShadersList(filename);
332  return (*sh) ? (*sh)->id : 0;
333 }

Références findfnInShadersList().

◆ gl4duFrustumd()

GL4DAPI void GL4DAPIENTRY gl4duFrustumd ( GLdouble  l,
GLdouble  r,
GLdouble  b,
GLdouble  t,
GLdouble  n,
GLdouble  f 
)

Création d'une matrice de projection perspective selon l'ancienne fonction glFrustum et la multiplie dans la matrice en cours.

La matrice en cours doit être de type GLdouble sinon utiliser gl4duFrustumf si le type est GLfloat.

Voir également
gl4duFrustumf
1191  {
1192  GLdouble frustum[16];
1193  MFRUSTUM(frustum, l, r, b, t, n, f);
1194  gl4duMultMatrixd(frustum);
1195 }

Références gl4duMultMatrixd(), et MFRUSTUM.

◆ gl4duFrustumf()

GL4DAPI void GL4DAPIENTRY gl4duFrustumf ( GLfloat  l,
GLfloat  r,
GLfloat  b,
GLfloat  t,
GLfloat  n,
GLfloat  f 
)

Création d'une matrice de projection perspective selon l'ancienne fonction glFrustum et la multiplie dans la matrice en cours.

La matrice en cours doit être de type GLfloat sinon utiliser gl4duFrustumd si le type est GLdouble.

Voir également
gl4duFrustumd
1176  {
1177  GLfloat frustum[16];
1178  MFRUSTUM(frustum, l, r, b, t, n, f);
1179  gl4duMultMatrixf(frustum);
1180 }

Références gl4duMultMatrixf(), et MFRUSTUM.

◆ gl4duGenMatrix()

GL4DAPI GLboolean GL4DAPIENTRY gl4duGenMatrix ( GLenum  type,
const char *  name 
)

génère et gère une matrice (pile de "une matrice 4x4") liée au nom name et de type type.

Le type peut etre GL_FLOAT ou GL_DOUBLE.

Paramètres
typele type de la matrice à créer : GL_FLOAT ou GL_DOUBLE.
namele nom de la matrice à créer.
Renvoie
GL_TRUE si la création est réussie, GL_FALSE sinon (apriori si le nom existe déjà).
1024  {
1025  _GL4DUMatrix m, * p;
1026  pair_t pair;
1027  m.name = (char *)name;
1028  pair = btFind(&_gl4duMatrices, &m, matrixCmpFunc);
1029  if(pair.compResult) {
1030  p = newGL4DUMatrix(type, name);
1032  return GL_TRUE;
1033  }
1034  return GL_FALSE;
1035 }

Références _gl4dLastMatrixn, _gl4duMatrices, btFind(), btInsert(), pair_t::compResult, matrixCmpFunc(), _GL4DUMatrix::name, newGL4DUMatrix(), et pair_t::ptr.

◆ gl4duGetIntegerv()

GL4DAPI GLboolean GL4DAPIENTRY gl4duGetIntegerv ( GL4DUenum  pname,
GLint *  params 
)

Renseigne sur la valeur du paramètre demandé. Le paramètre est envoyé via pname et sera stocké dans params.

Paramètres
pnamele paramètre demandé.
paramslà où sera stockée la/les valeur(s) du paramètre demandé.
Renvoie
GL_TRUE si l'opération est réussie, GL_FALSE sinon (ex. le pname est non géré par cette fonction).
A faire:
compléter cette fonction et bien la documenter (tous les cas gérés).
A faire:
faire la meme mais pour les float, double ...
1696  {
1697  switch(pname) {
1698  case GL4DU_MATRIX_TYPE:
1699  assert(_gl4dCurMatrix);
1700  *params = (GLint)_gl4dCurMatrix->type;
1701  return GL_TRUE;
1702  default:
1703  return GL_FALSE;
1704  }
1705  return GL_FALSE;
1706 }

Références _gl4dCurMatrix, GL4DU_MATRIX_TYPE, et _GL4DUMatrix::type.

◆ gl4duGetMatrixData()

GL4DAPI void* GL4DAPIENTRY gl4duGetMatrixData ( void  )

retourne le pointeur vers les données de la matrice (pile de "une matrice 4x4") courante.

En pratique, prend la donnée en haut de la pile. Le type de retour est (void *), il faut le caster dans le type correspondant au type de la matrice.

Renvoie
retourne le pointeur vers les données de la matrice.
1678  {
1679  assert(_gl4dCurMatrix);
1680  return matrixData(_gl4dCurMatrix);
1681 }

Références _gl4dCurMatrix, et matrixData().

◆ gl4duHasInit()

GL4DAPI int GL4DAPIENTRY gl4duHasInit ( void  )

indique si la bibliothèque a été initialisée

201  {
202  return _hasInit;
203 }

Références _hasInit.

◆ gl4duInit()

GL4DAPI void GL4DAPIENTRY gl4duInit ( int  argc,
char **  argv 
)

Initialise la bibliothèque.

Récupère le chemin relatif à partir duquel le binaire a été exécuté et le stocke dans _pathOfMe.

Initialise gl4dg via gl4dgInit

Voir également
_pathOfMe
194  {
195  findPathOfMe(argc > 0 ? argv[0] : "");
196  gl4dgInit();
197  _hasInit = 1;
198 }

Références _hasInit, findPathOfMe(), et gl4dgInit().

Référencé par initGL4DUW().

◆ gl4duIsMatrix()

GL4DAPI GLboolean GL4DAPIENTRY gl4duIsMatrix ( const char *  name)

indique s'il existe une matrice est liée au nom name passé en argument.

Paramètres
namele nom de la matrice à rechercher.
Renvoie
GL_TRUE si la matrice existe, GL_FALSE sinon.
1044  {
1045  _GL4DUMatrix m;
1046  m.name = (char *)name;
1048 }

Références _gl4duMatrices, btFind(), pair_t::compResult, matrixCmpFunc(), et _GL4DUMatrix::name.

◆ gl4duLoadIdentityd()

GL4DAPI void GL4DAPIENTRY gl4duLoadIdentityd ( void  )

Chargement d'une matrice identité dans la matrice en cours.

La matrice en cours doit être de type GLdouble sinon utiliser gl4duLoadIdentityf si le type est GLfloat.

Voir également
gl4duLoadIdentityf
1277  {
1278  GLdouble * mat;
1279  assert(_gl4dCurMatrix);
1280  assert(_gl4dCurMatrix->type == GL_DOUBLE);
1281  mat = (GLdouble *)&(((GLubyte *)_gl4dCurMatrix->data)[_gl4dCurMatrix->top * _gl4dCurMatrix->size]);
1282  MIDENTITY(mat);
1283 }

Références _gl4dCurMatrix, _GL4DUMatrix::data, MIDENTITY, _GL4DUMatrix::size, _GL4DUMatrix::top, et _GL4DUMatrix::type.

◆ gl4duLoadIdentityf()

GL4DAPI void GL4DAPIENTRY gl4duLoadIdentityf ( void  )

Chargement d'une matrice identité dans la matrice en cours.

La matrice en cours doit être de type GLfloat sinon utiliser gl4duLoadIdentityd si le type est GLdouble.

Voir également
gl4duLoadIdentityd
1262  {
1263  GLfloat * mat;
1264  assert(_gl4dCurMatrix);
1265  assert(_gl4dCurMatrix->type == GL_FLOAT);
1266  mat = (GLfloat *)&(((GLubyte *)_gl4dCurMatrix->data)[_gl4dCurMatrix->top * _gl4dCurMatrix->size]);
1267  MIDENTITY(mat);
1268 }

Références _gl4dCurMatrix, _GL4DUMatrix::data, MIDENTITY, _GL4DUMatrix::size, _GL4DUMatrix::top, et _GL4DUMatrix::type.

◆ gl4duLoadMatrixd()

GL4DAPI void GL4DAPIENTRY gl4duLoadMatrixd ( const GLdouble *  matrix)

Chargement d'une matrice matrix dans la matrice en cours.

La matrice en cours doit être de type GLdouble sinon utiliser gl4duLoadMatrixf si le type est GLfloat.

Paramètres
matrixla matrice 4x4 à charger.
Voir également
gl4duLoadMatrixf
1309  {
1310  assert(_gl4dCurMatrix);
1311  assert(_gl4dCurMatrix->type == GL_DOUBLE);
1312  memcpy(&(((GLubyte *)_gl4dCurMatrix->data)[_gl4dCurMatrix->top * _gl4dCurMatrix->size]), matrix, _gl4dCurMatrix->size);
1313 }

Références _gl4dCurMatrix, _GL4DUMatrix::data, _GL4DUMatrix::size, _GL4DUMatrix::top, et _GL4DUMatrix::type.

◆ gl4duLoadMatrixf()

GL4DAPI void GL4DAPIENTRY gl4duLoadMatrixf ( const GLfloat *  matrix)

Chargement d'une matrice matrix dans la matrice en cours.

La matrice en cours doit être de type GLfloat sinon utiliser gl4duLoadMatrixd si le type est GLdouble.

Paramètres
matrixla matrice 4x4 à charger.
Voir également
gl4duLoadMatrixd
1294  {
1295  assert(_gl4dCurMatrix);
1296  assert(_gl4dCurMatrix->type == GL_FLOAT);
1297  memcpy(&(((GLubyte *)_gl4dCurMatrix->data)[_gl4dCurMatrix->top * _gl4dCurMatrix->size]), matrix, _gl4dCurMatrix->size);
1298 }

Références _gl4dCurMatrix, _GL4DUMatrix::data, _GL4DUMatrix::size, _GL4DUMatrix::top, et _GL4DUMatrix::type.

◆ gl4duLookAtd()

GL4DAPI void GL4DAPIENTRY gl4duLookAtd ( GLdouble  eyeX,
GLdouble  eyeY,
GLdouble  eyeZ,
GLdouble  centerX,
GLdouble  centerY,
GLdouble  centerZ,
GLdouble  upX,
GLdouble  upY,
GLdouble  upZ 
)

Définie des transformations pour simuler un point de vue avec direction de regard et orientation.

Version GL4Dummies de la fonction gluLookAt pour les types GLdouble (les matrices GL_DOUBLE). Pour la version gérant les double voir

Voir également
gl4duLookAtf.
Paramètres
eyeXabcsisse de l'oeil.
eyeYordonnée de l'oeil.
eyeZcote de l'oeil.
centerXabcsisse du point observé.
centerYordonnée du point observé.
centerZcote du point observé.
upXX du vecteur décrivant l'orientation de la "tete" de l'observateur (vecteur haut)
upYY du vecteur décrivant l'orientation de la "tete" de l'observateur (vecteur haut)
upZY du vecteur décrivant l'orientation de la "tete" de l'observateur (vecteur haut)
1625  {
1626  GLdouble forward[3], side[3], up[3];
1627  GLdouble m[] = {
1628  1.0, 0.0, 0.0, 0.0,
1629  0.0, 1.0, 0.0, 0.0,
1630  0.0, 0.0, 1.0, 0.0,
1631  0.0, 0.0, 0.0, 1.0
1632  };
1633  forward[0] = centerX - eyeX;
1634  forward[1] = centerY - eyeY;
1635  forward[2] = centerZ - eyeZ;
1636  up[0] = upX;
1637  up[1] = upY;
1638  up[2] = upZ;
1639  MVEC3NORMALIZE(forward);
1640  /* side = forward x up */
1641  MVEC3CROSS(side, forward, up);
1642  MVEC3NORMALIZE(side);
1643  /* up = side x forward */
1644  MVEC3CROSS(up, side, forward);
1645  m[0] = side[0];
1646  m[1] = side[1];
1647  m[2] = side[2];
1648  m[4] = up[0];
1649  m[5] = up[1];
1650  m[6] = up[2];
1651  m[8] = -forward[0];
1652  m[9] = -forward[1];
1653  m[10] = -forward[2];
1654  gl4duMultMatrixd(m);
1655  gl4duTranslated(-eyeX, -eyeY, -eyeZ);
1656 }

Références gl4duMultMatrixd(), gl4duTranslated(), MVEC3CROSS, et MVEC3NORMALIZE.

◆ gl4duLookAtf()

GL4DAPI void GL4DAPIENTRY gl4duLookAtf ( GLfloat  eyeX,
GLfloat  eyeY,
GLfloat  eyeZ,
GLfloat  centerX,
GLfloat  centerY,
GLfloat  centerZ,
GLfloat  upX,
GLfloat  upY,
GLfloat  upZ 
)

Définie des transformations pour simuler un point de vue avec direction de regard et orientation.

Version GL4Dummies de la fonction gluLookAt pour les types GLfloat (les matrices GL_FLOAT). Pour la version gérant les double voir

Voir également
gl4duLookAtd.
Paramètres
eyeXabcsisse de l'oeil.
eyeYordonnée de l'oeil.
eyeZcote de l'oeil.
centerXabcsisse du point observé.
centerYordonnée du point observé.
centerZcote du point observé.
upXX du vecteur décrivant l'orientation de la "tete" de l'observateur (vecteur haut)
upYY du vecteur décrivant l'orientation de la "tete" de l'observateur (vecteur haut)
upZY du vecteur décrivant l'orientation de la "tete" de l'observateur (vecteur haut)
1574  {
1575  GLfloat forward[3], side[3], up[3];
1576  GLfloat m[] = {
1577  1.0f, 0.0f, 0.0f, 0.0f,
1578  0.0f, 1.0f, 0.0f, 0.0f,
1579  0.0f, 0.0f, 1.0f, 0.0f,
1580  0.0f, 0.0f, 0.0f, 1.0f
1581  };
1582  forward[0] = centerX - eyeX;
1583  forward[1] = centerY - eyeY;
1584  forward[2] = centerZ - eyeZ;
1585  up[0] = upX;
1586  up[1] = upY;
1587  up[2] = upZ;
1588  MVEC3NORMALIZE(forward);
1589  /* side = forward x up */
1590  MVEC3CROSS(side, forward, up);
1591  MVEC3NORMALIZE(side);
1592  /* up = side x forward */
1593  MVEC3CROSS(up, side, forward);
1594  m[0] = side[0];
1595  m[1] = side[1];
1596  m[2] = side[2];
1597  m[4] = up[0];
1598  m[5] = up[1];
1599  m[6] = up[2];
1600  m[8] = -forward[0];
1601  m[9] = -forward[1];
1602  m[10] = -forward[2];
1603  gl4duMultMatrixf(m);
1604  gl4duTranslatef(-eyeX, -eyeY, -eyeZ);
1605 }

Références gl4duMultMatrixf(), gl4duTranslatef(), MVEC3CROSS, et MVEC3NORMALIZE.

◆ gl4duMakeBinRelativePath()

GL4DAPI void GL4DAPIENTRY gl4duMakeBinRelativePath ( char *  dst,
size_t  dst_size,
const char *  filename 
)

Ajoute _pathOfMe au chemin filename passé en argument et stocke l'ensemble dans dst.

Voir également
_pathOfMe
210  {
211  snprintf(dst, dst_size, "%s/%s", _pathOfMe, filename);
212  if(!_pathOfMeInit) fprintf(stderr, "Binary path unknown, you should call gl4duInit(argc, argv) at program init\n");
213 }

Références _pathOfMe, et _pathOfMeInit.

Référencé par gl4duCreateShader().

◆ gl4duMultMatrixByName()

GL4DAPI void GL4DAPIENTRY gl4duMultMatrixByName ( const char *  name)

Multiplication de la matrice en cours par une des matrices connues dans GL4Dummies. Cette fonction utilise le nom de la matrice name afin de la récupérer et réaliser la multiplication à droite, le tout dans la matrice courante : currentMatrix = currentMatrix x matrixBy(name)

Paramètres
namele nom de la matrice GL4Dummies à utiliser pour la multiplication (currentMatrix x matrixBy(name)).
1360  {
1361  bin_tree_t ** bt;
1362  assert(_gl4dCurMatrix);
1363  if(_gl4dCurMatrix->type == GL_FLOAT) {
1364  GLfloat cpy[16], *mat = (GLfloat *)&(((GLubyte *)_gl4dCurMatrix->data)[_gl4dCurMatrix->top * _gl4dCurMatrix->size]);
1365  memcpy(cpy, mat, _gl4dCurMatrix->size);
1366  if(name && (bt = findMatrix(name))) {
1367  _GL4DUMatrix * namedMatrix = (_GL4DUMatrix *)((*bt)->data);
1368  if(namedMatrix->type == GL_FLOAT) {
1369  GLfloat *matrix = (GLfloat *)&(((GLubyte *)namedMatrix->data)[namedMatrix->top * namedMatrix->size]);
1370  MMAT4XMAT4(mat, cpy, matrix);
1371  } else { /* GL_DOUBLE */
1372  GLdouble *matrix = (GLdouble *)&(((GLubyte *)namedMatrix->data)[namedMatrix->top * namedMatrix->size]);
1373  MMAT4XMAT4(mat, cpy, matrix);
1374  }
1375  }
1376  } else {
1377  GLdouble cpy[16], *mat = (GLdouble *)&(((GLubyte *)_gl4dCurMatrix->data)[_gl4dCurMatrix->top * _gl4dCurMatrix->size]);
1378  memcpy(cpy, mat, _gl4dCurMatrix->size);
1379  if(name && (bt = findMatrix(name))) {
1380  _GL4DUMatrix * namedMatrix = (_GL4DUMatrix *)((*bt)->data);
1381  if(namedMatrix->type == GL_FLOAT) {
1382  GLfloat *matrix = (GLfloat *)&(((GLubyte *)namedMatrix->data)[namedMatrix->top * namedMatrix->size]);
1383  MMAT4XMAT4(mat, cpy, matrix);
1384  } else { /* GL_DOUBLE */
1385  GLdouble *matrix = (GLdouble *)&(((GLubyte *)namedMatrix->data)[namedMatrix->top * namedMatrix->size]);
1386  MMAT4XMAT4(mat, cpy, matrix);
1387  }
1388  }
1389  }
1390 }

Références _gl4dCurMatrix, _GL4DUMatrix::data, findMatrix(), MMAT4XMAT4, _GL4DUMatrix::size, _GL4DUMatrix::top, et _GL4DUMatrix::type.

◆ gl4duMultMatrixd()

GL4DAPI void GL4DAPIENTRY gl4duMultMatrixd ( const GLdouble *  matrix)

Multiplication de la matrice en cours par une matrice matrix.

La matrice en cours doit être de type GLdouble sinon utiliser gl4duMultMatrixf si le type est GLfloat.

Paramètres
matrixla matrice 4x4 utilisée pour la multiplication (curMatrix x matrix).
Voir également
gl4duMultMatrixf
1342  {
1343  GLdouble * mat, cpy[16];
1344  assert(_gl4dCurMatrix);
1345  assert(_gl4dCurMatrix->type == GL_DOUBLE);
1346  mat = (GLdouble *)&(((GLubyte *)_gl4dCurMatrix->data)[_gl4dCurMatrix->top * _gl4dCurMatrix->size]);
1347  memcpy(cpy, mat, _gl4dCurMatrix->size);
1348  MMAT4XMAT4(mat, cpy, matrix);
1349 }

Références _gl4dCurMatrix, _GL4DUMatrix::data, MMAT4XMAT4, _GL4DUMatrix::size, _GL4DUMatrix::top, et _GL4DUMatrix::type.

Référencé par gl4duFrustumd(), gl4duLookAtd(), gl4duOrthod(), gl4duPerspectived(), gl4duRotated(), gl4duScaled(), et gl4duTranslated().

◆ gl4duMultMatrixf()

GL4DAPI void GL4DAPIENTRY gl4duMultMatrixf ( const GLfloat *  matrix)

Multiplication de la matrice en cours par une matrice matrix.

La matrice en cours doit être de type GLfloat sinon utiliser gl4duMultMatrixd si le type est GLdouble.

Paramètres
matrixla matrice 4x4 utilisée pour la multiplication (curMatrix x matrix).
Voir également
gl4duMultMatrixd
1324  {
1325  GLfloat * mat, cpy[16];
1326  assert(_gl4dCurMatrix);
1327  assert(_gl4dCurMatrix->type == GL_FLOAT);
1328  mat = (GLfloat *)&(((GLubyte *)_gl4dCurMatrix->data)[_gl4dCurMatrix->top * _gl4dCurMatrix->size]);
1329  memcpy(cpy, mat, _gl4dCurMatrix->size);
1330  MMAT4XMAT4(mat, cpy, matrix);
1331 }

Références _gl4dCurMatrix, _GL4DUMatrix::data, MMAT4XMAT4, _GL4DUMatrix::size, _GL4DUMatrix::top, et _GL4DUMatrix::type.

Référencé par gl4duFrustumf(), gl4duLookAtf(), gl4duLookAtf_DNW(), gl4duOrthof(), gl4duPerspectivef(), gl4duRotatef(), gl4duScalef(), et gl4duTranslatef().

◆ gl4duOrthod()

GL4DAPI void GL4DAPIENTRY gl4duOrthod ( GLdouble  l,
GLdouble  r,
GLdouble  b,
GLdouble  t,
GLdouble  n,
GLdouble  f 
)

Création d'une matrice de projection orthogonale selon l'ancienne fonction glOrtho et la multiplie dans la matrice en cours.

La matrice en cours doit être de type GLdouble sinon utiliser gl4duOrthof si le type est GLfloat.

Voir également
gl4duOrthof
1219  {
1220  GLdouble ortho[16];
1221  MORTHO(ortho, l, r, b, t, n, f);
1222  gl4duMultMatrixd(ortho);
1223 }

Références gl4duMultMatrixd(), et MORTHO.

◆ gl4duOrthof()

GL4DAPI void GL4DAPIENTRY gl4duOrthof ( GLfloat  l,
GLfloat  r,
GLfloat  b,
GLfloat  t,
GLfloat  n,
GLfloat  f 
)

Création d'une matrice de projection orthogonale selon l'ancienne fonction glOrtho et la multiplie dans la matrice en cours.

La matrice en cours doit être de type GLfloat sinon utiliser gl4duOrthod si le type est GLdouble.

Voir également
gl4duOrthod
1205  {
1206  GLfloat ortho[16];
1207  MORTHO(ortho, l, r, b, t, n, f);
1208  gl4duMultMatrixf(ortho);
1209 }

Références gl4duMultMatrixf(), et MORTHO.

◆ gl4duPerspectived()

GL4DAPI void GL4DAPIENTRY gl4duPerspectived ( GLdouble  fovy,
GLdouble  aspect,
GLdouble  zNear,
GLdouble  zFar 
)

Création d'une matrice de projection perspective selon l'ancienne fonction gluPerspective et la multiplie dans la matrice en cours.

La matrice en cours doit être de type GLdouble sinon utiliser gl4duPerspectivef si le type est GLfloat.

Voir également
gl4duPerspectivef
1249  {
1250  GLdouble perspective[16];
1251  MPERSPECTIVE(perspective, fovy, aspect, zNear, zFar);
1252  gl4duMultMatrixd(perspective);
1253 }

Références gl4duMultMatrixd(), et MPERSPECTIVE.

◆ gl4duPerspectivef()

GL4DAPI void GL4DAPIENTRY gl4duPerspectivef ( GLdouble  fovy,
GLdouble  aspect,
GLdouble  zNear,
GLdouble  zFar 
)

Création d'une matrice de projection perspective selon l'ancienne fonction gluPerspective et la multiplie dans la matrice en cours.

La matrice en cours doit être de type GLfloat sinon utiliser gl4duPerspectived si le type est GLdouble.

Voir également
gl4duPerspectived
1234  {
1235  GLfloat perspective[16];
1236  MPERSPECTIVE(perspective, fovy, aspect, zNear, zFar);
1237  gl4duMultMatrixf(perspective);
1238 }

Références gl4duMultMatrixf(), et MPERSPECTIVE.

◆ gl4duPopMatrix()

GL4DAPI void GL4DAPIENTRY gl4duPopMatrix ( void  )

dépile la matrice courante en restaurant l'état précédemment sauvegardé à l'aide de gl4duPushMatrix.

1121  {
1122  assert(_gl4dCurMatrix);
1123  if(_gl4dCurMatrix->top)
1124  --_gl4dCurMatrix->top;
1125 }

Références _gl4dCurMatrix, et _GL4DUMatrix::top.

◆ gl4duPrintFPS()

GL4DAPI void GL4DAPIENTRY gl4duPrintFPS ( FILE *  fp)

imprime dans le fichier pointé par fp le Frame-Per-Second.

Cette fonction doit être appelée dans la loop.

252  {
253  double t;
254  static double t0 = 0;
255  static unsigned int f = 0;
256  f++;
257  t = gl4dGetElapsedTime();
258  if(t - t0 > 2000.0) {
259  fprintf(fp, "%8.2f\n", (1000.0 * f / (t - t0)));
260  t0 = t;
261  f = 0;
262  }
263 }

Références gl4dGetElapsedTime(), et t0.

Référencé par gl4duwMainLoop().

◆ gl4duPrintProgramInfoLog()

GL4DAPI void GL4DAPIENTRY gl4duPrintProgramInfoLog ( GLuint  object,
FILE *  f 
)

imprime s'il existe l'infoLog de l'édition de liens pour le Program object dans fp.

234  {
235  char * log = NULL;
236  int maxLen = 0, len = 0;
237  glGetProgramiv(object, GL_INFO_LOG_LENGTH, &maxLen);
238  if(maxLen > 1) {
239  log = malloc(maxLen * sizeof * log);
240  assert(log);
241  glGetProgramInfoLog(object, maxLen, &len, log);
242  fprintf(fp, "%s (%d): %s (ID = %d)\n%s\n", __FILE__, __LINE__, __func__, object, log);
243  free(log);
244  }
245 }

Référencé par gl4duCreateProgram(), et gl4duCreateProgramFED().

◆ gl4duPrintShaderInfoLog()

GL4DAPI void GL4DAPIENTRY gl4duPrintShaderInfoLog ( GLuint  object,
FILE *  f 
)

imprime s'il existe l'infoLog de la compilation du Shader object dans fp.

218  {
219  char * log = NULL;
220  int maxLen = 0, len = 0;
221  glGetShaderiv(object, GL_INFO_LOG_LENGTH, &maxLen);
222  if(maxLen > 1) {
223  log = malloc(maxLen * sizeof * log);
224  assert(log);
225  glGetShaderInfoLog(object, maxLen, &len, log);
226  fprintf(fp, "%s (%d): %s (ID = %d)\n%s\n", __FILE__, __LINE__, __func__, object, log);
227  free(log);
228  }
229 }

Référencé par addInShadersList(), et addInShadersListFED().

◆ gl4duPushMatrix()

GL4DAPI void GL4DAPIENTRY gl4duPushMatrix ( void  )

empile (sauvegarde) la matrice courante et utilise une nouvelle matrice dont le contenu est le meme que celle empilée.

La pile est dynamique, sa taille non limitée.

1107  {
1108  assert(_gl4dCurMatrix);
1109  if(++_gl4dCurMatrix->top == _gl4dCurMatrix->nmemb) {
1111  assert(_gl4dCurMatrix->data);
1112  }
1113  memcpy(&(((GLubyte *)_gl4dCurMatrix->data)[_gl4dCurMatrix->top * _gl4dCurMatrix->size]),
1114  &(((GLubyte *)_gl4dCurMatrix->data)[(_gl4dCurMatrix->top - 1) * _gl4dCurMatrix->size]),
1115  _gl4dCurMatrix->size);
1116 }

Références _gl4dCurMatrix, _GL4DUMatrix::data, _GL4DUMatrix::nmemb, _GL4DUMatrix::size, et _GL4DUMatrix::top.

◆ gl4duRotated()

GL4DAPI void GL4DAPIENTRY gl4duRotated ( GLdouble  angle,
GLdouble  x,
GLdouble  y,
GLdouble  z 
)

Multiplication de la matrice en cours par une matrice de rotation définie par un angle angle donné en degrés autour de l'axe (x, y, z).

Paramètres
angleangle de rotation en degrés.
xabcsisse de l'axe de rotation.
yordonnée de l'axe de rotation.
zcote de l'axe de rotation.
1441  {
1442  GLdouble n = sqrt(x * x + y * y + z * z);
1443  if ( n > 0.0 ) {
1444  GLdouble a, s, c, cc, x2, y2, z2, xy, yz, zx, xs, ys, zs;
1445  GLdouble mat[] = { 0.0, 0.0, 0.0, 0.0,
1446  0.0, 0.0, 0.0, 0.0,
1447  0.0, 0.0, 0.0, 0.0,
1448  0.0, 0.0, 0.0, 1.0 };
1449  s = sin ( a = (angle * GL4DM_PI / 180.0) );
1450  cc = 1.0 - (c = cos ( a ));
1451  x /= n; y /= n; z /= n;
1452  x2 = x * x; y2 = y * y; z2 = z * z;
1453  xy = x * y; yz = y * z; zx = z * x;
1454  xs = x * s; ys = y * s; zs = z * s;
1455  mat[0] = (cc * x2) + c;
1456  mat[1] = (cc * xy) - zs;
1457  mat[2] = (cc * zx) + ys;
1458  /* mat[3] = 0.0; */
1459  mat[4] = (cc * xy) + zs;
1460  mat[5] = (cc * y2) + c;
1461  mat[6] = (cc * yz) - xs;
1462  /* mat[7] = 0.0; */
1463  mat[8] = (cc * zx) - ys;
1464  mat[9] = (cc * yz) + xs;
1465  mat[10] = (cc * z2) + c;
1466  /* mat[11] = 0.0; */
1467  /* mat[12] = 0.0; mat[13] = 0.0; mat[14] = 0.0; mat[15] = 1.0; */
1468  gl4duMultMatrixd(mat);
1469  }
1470 }

Références GL4DM_PI, et gl4duMultMatrixd().

◆ gl4duRotatef()

GL4DAPI void GL4DAPIENTRY gl4duRotatef ( GLfloat  angle,
GLfloat  x,
GLfloat  y,
GLfloat  z 
)

Multiplication de la matrice en cours par une matrice de rotation définie par un angle angle donné en degrés autour de l'axe (x, y, z).

Paramètres
angleangle de rotation en degrés.
xabcsisse de l'axe de rotation.
yordonnée de l'axe de rotation.
zcote de l'axe de rotation.
1401  {
1402  GLfloat n = sqrtf(x * x + y * y + z * z);
1403  if ( n > 0.0f ) {
1404  GLfloat a, s, c, cc, x2, y2, z2, xy, yz, zx, xs, ys, zs;
1405  GLfloat mat[] = { 0.0f, 0.0f, 0.0f, 0.0f,
1406  0.0f, 0.0f, 0.0f, 0.0f,
1407  0.0f, 0.0f, 0.0f, 0.0f,
1408  0.0f, 0.0f, 0.0f, 1.0f };
1409  s = sinf ( a = (angle * (GLfloat)GL4DM_PI / 180.0f) );
1410  cc = 1.0f - (c = cosf ( a ));
1411  x /= n; y /= n; z /= n;
1412  x2 = x * x; y2 = y * y; z2 = z * z;
1413  xy = x * y; yz = y * z; zx = z * x;
1414  xs = x * s; ys = y * s; zs = z * s;
1415  mat[0] = (cc * x2) + c;
1416  mat[1] = (cc * xy) - zs;
1417  mat[2] = (cc * zx) + ys;
1418  /* mat[3] = 0.0f; */
1419  mat[4] = (cc * xy) + zs;
1420  mat[5] = (cc * y2) + c;
1421  mat[6] = (cc * yz) - xs;
1422  /* mat[7] = 0.0f; */
1423  mat[8] = (cc * zx) - ys;
1424  mat[9] = (cc * yz) + xs;
1425  mat[10] = (cc * z2) + c;
1426  /* mat[11] = 0.0f; */
1427  /* mat[12] = 0.0f; mat[13] = 0.0f; mat[14] = 0.0f; mat[15] = 1.0f; */
1428  gl4duMultMatrixf(mat);
1429  }
1430 }

Références GL4DM_PI, et gl4duMultMatrixf().

◆ gl4duScaled()

GL4DAPI void GL4DAPIENTRY gl4duScaled ( GLdouble  sx,
GLdouble  sy,
GLdouble  sz 
)

Multiplication de la matrice en cours par une matrice d'homothétie (sx, sy, sz).

Paramètres
sxabcsisse de l'homothétie.
syordonnée de l'homothétie.
szcote de l'homothétie.
1524  {
1525  GLdouble mat[] = { sx , 0.0, 0.0, 0.0,
1526  0.0, sy, 0.0, 0.0,
1527  0.0, 0.0, sz, 0.0,
1528  0.0, 0.0, 0.0, 1.0 };
1529  gl4duMultMatrixd(mat);
1530 }

Références gl4duMultMatrixd().

◆ gl4duScalef()

GL4DAPI void GL4DAPIENTRY gl4duScalef ( GLfloat  sx,
GLfloat  sy,
GLfloat  sz 
)

Multiplication de la matrice en cours par une matrice d'homothétie (sx, sy, sz).

Paramètres
sxabcsisse de l'homothétie.
syordonnée de l'homothétie.
szcote de l'homothétie.
1509  {
1510  GLfloat mat[] = { sx , 0.0f, 0.0f, 0.0f,
1511  0.0f, sy, 0.0f, 0.0f,
1512  0.0f, 0.0f, sz, 0.0f,
1513  0.0f, 0.0f, 0.0f, 1.0f };
1514  gl4duMultMatrixf(mat);
1515 }

Références gl4duMultMatrixf().

◆ gl4duSendMatrices()

GL4DAPI void GL4DAPIENTRY gl4duSendMatrices ( void  )

envoie toutes matrices au program shader en cours et en utilisant leurs noms pour obtenir le uniform location.

1161  {
1162  GLint pId;
1163  glGetIntegerv(GL_CURRENT_PROGRAM, &pId);
1164  btForAll(_gl4duMatrices, sendMatrix, (void **)&pId);
1165 }

Références _gl4duMatrices, btForAll(), et sendMatrix().

◆ gl4duSendMatrix()

GL4DAPI void GL4DAPIENTRY gl4duSendMatrix ( void  )

envoie la matrice courante au program shader en cours et en utilisant le nom de la matrice pour obtenir le uniform location.

1151  {
1152  GLint pId;
1153  assert(_gl4dCurMatrix);
1154  glGetIntegerv(GL_CURRENT_PROGRAM, &pId);
1155  sendMatrix(_gl4dCurMatrix, (void **)&pId);
1156 }

Références _gl4dCurMatrix, et sendMatrix().

◆ gl4duTranslated()

GL4DAPI void GL4DAPIENTRY gl4duTranslated ( GLdouble  tx,
GLdouble  ty,
GLdouble  tz 
)

Multiplication de la matrice en cours par une matrice de translation (tx, ty, tz).

Paramètres
txabcsisse de la translation.
tyordonnée de la translation.
tzcote de la translation.
1494  {
1495  GLdouble mat[] = { 1.0, 0.0, 0.0, tx,
1496  0.0, 1.0, 0.0, ty,
1497  0.0, 0.0, 1.0, tz,
1498  0.0, 0.0, 0.0, 1.0 };
1499  gl4duMultMatrixd(mat);
1500 }

Références gl4duMultMatrixd().

Référencé par gl4duLookAtd().

◆ gl4duTranslatef()

GL4DAPI void GL4DAPIENTRY gl4duTranslatef ( GLfloat  tx,
GLfloat  ty,
GLfloat  tz 
)

Multiplication de la matrice en cours par une matrice de translation (tx, ty, tz).

Paramètres
txabcsisse de la translation.
tyordonnée de la translation.
tzcote de la translation.
1479  {
1480  GLfloat mat[] = { 1.0f, 0.0f, 0.0f, tx,
1481  0.0f, 1.0f, 0.0f, ty,
1482  0.0f, 0.0f, 1.0f, tz,
1483  0.0f, 0.0f, 0.0f, 1.0f };
1484  gl4duMultMatrixf(mat);
1485 }

Références gl4duMultMatrixf().

Référencé par gl4duLookAtf(), et gl4duLookAtf_DNW().

◆ gl4duUpdateShaders()

GL4DAPI int GL4DAPIENTRY gl4duUpdateShaders ( void  )

parcours la liste des shaders shaders_list et vérifie s'il y a besoin de mettre à jour le shader (recompiler et relinker).

La vérification est effectuée sur la date de modification du fichier representant le shader.

Renvoie
1 s'il y a eu une mise à jour (recompilation et relink) sinon 0.
A faire:
peut être ajouter un test sur le temps passé pour ne parcourir la liste qu'un fois tous les 1/10 de secondes ????
659  {
660  GLenum ot;
661  char * fn;
662  int maj = 0, i, n;
663  struct stat buf;
664  program_t ** p;
665  shader_t ** ptr = &shaders_list;
666 #ifdef COMMERCIAL_V
667  return 0;
668 #endif
669  while(*ptr) {
670  if(!(*ptr)->verify_timestamp) {
671  ptr = &((*ptr)->next);
672  continue;
673  }
674  if(stat((*ptr)->filename, &buf) != 0) {
675  fprintf(stderr, "%s:%d:In %s: erreur %d: %s\n",
676  __FILE__, __LINE__, __func__, errno, strerror(errno));
677  return 0;
678  }
679  if((*ptr)->mod_time != buf.st_mtime) {
680  if((n = (*ptr)->nprograms)) {
681  p = malloc(n * sizeof * p);
682  assert(p);
683  memcpy(p, (*ptr)->programs, n * sizeof * p);
684  for(i = 0; i < n; i++)
685  detachShader(p[i], *ptr);
686  ot = (*ptr)->shadertype;
687  fn = strdup((*ptr)->filename);
689  ptr = addInShadersList(ot, fn, NULL);
690  for(i = 0; i < n; i++) {
691  attachShader(p[i], *ptr);
692  glLinkProgram(p[i]->id);
693  }
694  free(p);
695  free(fn);
696  } else {
697  ot = (*ptr)->shadertype;
698  fn = strdup((*ptr)->filename);
700  ptr = addInShadersList(ot, fn, NULL);
701  }
702  maj = 1;
703  } else
704  ptr = &((*ptr)->next);
705  }
706  return maj;
707 }

Références addInShadersList(), attachShader(), deleteFromShadersList(), detachShader(), et shaders_list.

Référencé par gl4duwMainLoop().

llEmpty
int llEmpty(linked_list_t *ll)
Definition: linked_list.c:44
gl4duMakeBinRelativePath
void gl4duMakeBinRelativePath(char *dst, size_t dst_size, const char *filename)
Ajoute _pathOfMe au chemin filename passé en argument et stocke l'ensemble dans dst.
Definition: gl4du.c:210
GL4DU_MATRIX
@ GL4DU_MATRIX
Definition: gl4du.h:24
btInsert
pair_t btInsert(bin_tree_t **tree, void *data, int(*compar)(const void *newData, const void *nodeData))
Definition: bin_tree.c:13
gl4duCreateShader
GLuint gl4duCreateShader(GLenum shadertype, const char *filename)
retourne l'identifiant du shader décrit dans filename.
Definition: gl4du.c:277
MMAT4XMAT4
#define MMAT4XMAT4(r, a, b)
Multiplication de deux matrices 4x4. Les matrices a et b sont multipliées et le résultat est stocké d...
Definition: gl4dm.h:68
pair_t::ptr
void ** ptr
Definition: bin_tree.h:23
btFree
void btFree(bin_tree_t **tree, void(*freeData)(void *))
Definition: bin_tree.c:104
gl4dgClean
void gl4dgClean(void)
Libère les structures nécessaire au stockage des géométries proposées par GL4Dummies en supprimant au...
Definition: gl4dg.c:187
MFRUSTUM
#define MFRUSTUM(mat, l, r, b, t, n, f)
Création d'une matrice de projection en perspective selon l'ancienne fonction glFrustum.
Definition: gl4dm.h:281
gl4duMultMatrixf
void gl4duMultMatrixf(const GLfloat *matrix)
Multiplication de la matrice en cours par une matrice matrix.
Definition: gl4du.c:1324
gl4duMultMatrixd
void gl4duMultMatrixd(const GLdouble *matrix)
Multiplication de la matrice en cours par une matrice matrix.
Definition: gl4du.c:1342
findidInShadersList
static shader_t ** findidInShadersList(GLuint id)
recherche un shader à partir de son identifiant openGL dans la liste shaders_list.
Definition: gl4du.c:738
gl4duCreateShaderFED
GLuint gl4duCreateShaderFED(const char *decData, GLenum shadertype, const char *filename)
retourne l'identifiant du shader décrit dans filename. Version FED de la précédente
Definition: gl4du.c:315
matrixData
static void * matrixData(_GL4DUMatrix *matrix)
retourne le pointeur vers les données de la matrice (pile de "une matrice 4x4") courante.
Definition: gl4du.c:1666
attachShader
static void attachShader(program_t *prg, shader_t *sh)
attache (lie) un program à un shader et vice versa.
Definition: gl4du.c:902
sendMatrix
void sendMatrix(void *m, void **ppId)
utilisée par btForAll pour envoyer la matrice m sur le program Id pointé par ppId.
Definition: gl4du.c:1131
program_t
Definition: gl4du.c:53
btFind
pair_t btFind(bin_tree_t **tree, const void *data, int(*compar)(const void *newData, const void *nodeData))
Definition: bin_tree.c:32
_aelist
static linked_list_t * _aelist
pile des fonctions à appeler lors du "at exit" de gl4duClean. Cette liste est remplie par gl4duAtExit...
Definition: gl4du.c:89
_GL4DUMatrix::name
char * name
Definition: gl4du.c:62
GL4DM_PI
#define GL4DM_PI
Definition: gl4dm.h:28
gl4duTranslatef
void gl4duTranslatef(GLfloat tx, GLfloat ty, GLfloat tz)
Multiplication de la matrice en cours par une matrice de translation (tx, ty, tz).
Definition: gl4du.c:1479
llFree
static void llFree(ll_t **head)
Definition: gl4dfFractalPainting.c:770
GL4DU_GEOMETRY_SHADER
@ GL4DU_GEOMETRY_SHADER
Definition: gl4du.h:23
gl4duTranslated
void gl4duTranslated(GLdouble tx, GLdouble ty, GLdouble tz)
Multiplication de la matrice en cours par une matrice de translation (tx, ty, tz).
Definition: gl4du.c:1494
gl4duPrintProgramInfoLog
void gl4duPrintProgramInfoLog(GLuint object, FILE *fp)
imprime s'il existe l'infoLog de l'édition de liens pour le Program object dans fp.
Definition: gl4du.c:234
findPathOfMe
static void findPathOfMe(const char *argv0)
Definition: gl4du.c:131
findMatrix
static bin_tree_t ** findMatrix(const char *name)
recherche et renvoie le pointeur de pointeur vers le noeud de l'arbre binaire pointant vers la matric...
Definition: gl4du.c:1001
detachShader
static void detachShader(program_t *prg, shader_t *sh)
détache (délie) un program à un shader et vice versa.
Definition: gl4du.c:923
bin_tree_t
Definition: bin_tree.h:28
GL4DU_GEOMETRY
@ GL4DU_GEOMETRY
Definition: gl4du.h:38
_GL4DUMatrix::top
GLuint top
Definition: gl4du.c:66
GL4DU_VERTEX_SHADER
@ GL4DU_VERTEX_SHADER
Definition: gl4du.h:21
MIDENTITY
#define MIDENTITY(m)
Chargement d'une matrice identitéé dans m.
Definition: gl4dm.h:338
newGL4DUMatrix
static _GL4DUMatrix * newGL4DUMatrix(GLenum type, const char *name)
créé une nouvelle pile de "une matrice 4x4" dont le nom est name et le type est type.
Definition: gl4du.c:951
MPERSPECTIVE
#define MPERSPECTIVE(mat, fovy, aspect, zNear, zFar)
Création d'une matrice de projection en perspective selon l'ancienne fonction gluPerspective.
Definition: gl4dm.h:327
GL4DU_SHADER
@ GL4DU_SHADER
Definition: gl4du.h:35
addInShadersList
static shader_t ** addInShadersList(GLenum shadertype, const char *filename, const char *shadercode)
ajoute un nouveau shader dans la liste de shaders shaders_list.
Definition: gl4du.c:755
pair_t
Definition: bin_tree.h:22
deleteFromProgramsList
static void deleteFromProgramsList(program_t **pp)
supprime le program pointé par pp de la liste des programs programs_list.
Definition: gl4du.c:889
MORTHO
#define MORTHO(mat, l, r, b, t, n, f)
Création d'une matrice de projection orthogonale selon l'ancienne fonction glOrtho.
Definition: gl4dm.h:303
_gl4duMatrices
static bin_tree_t * _gl4duMatrices
arbre binaire contenant l'ensemble des matrices _GL4DUMatrix gérées.
Definition: gl4du.c:82
gl4dGetElapsedTime
double gl4dGetElapsedTime(void)
Donne le temps ecoule en millisecondes depuis t0.
Definition: gl4dummies.c:220
_pathOfMe
static char _pathOfMe[BUFSIZ]
stocke le chemin relatif à partir duquel le binaire a été exécuté. Est initialisée dans gl4dInit.
Definition: gl4du.c:113
_GL4DUMatrix
structure de données pour une pile de "une matrice 4x4".
Definition: gl4du.c:61
pair_t::compResult
int compResult
Definition: bin_tree.h:24
freeGL4DUMatrix
static void freeGL4DUMatrix(void *matrix)
libère la pile de "une matrice 4x4".
Definition: gl4du.c:968
_GL4DUMatrix::nmemb
size_t nmemb
Definition: gl4du.c:65
gl4duCreateShaderIM
GLuint gl4duCreateShaderIM(GLenum shadertype, const char *filename, const char *shadercode)
retourne l'identifiant du shader dont le code source est shadercode et le nom de fichier est filename...
Definition: gl4du.c:303
programs_list
static program_t * programs_list
liste de programs. Chaque program est composé d'un id (GL), il est lié à une liste de shaders.
Definition: gl4du.c:78
_GL4DUMatrix::type
GLenum type
Definition: gl4du.c:63
GL4DU_AT_EXIT
@ GL4DU_AT_EXIT
Definition: gl4du.h:40
gl4dgInit
void gl4dgInit(void)
Initialise les structures nécessaire au stockage des géométries proposées par GL4Dummies....
Definition: gl4dg.c:174
shader_t
Definition: gl4du.c:41
GL4DU_MATRIX_TYPE
@ GL4DU_MATRIX_TYPE
Definition: gl4du.h:25
addInShadersListFED
static shader_t ** addInShadersListFED(const char *decData, GLenum shadertype, const char *filename)
ajoute un nouveau shader dans la liste de shaders shaders_list. Version FED
Definition: gl4du.c:805
aes_from_tar
char * aes_from_tar(const char *file)
Definition: aes.c:899
_pathOfMeInit
static int _pathOfMeInit
Definition: gl4du.c:114
matrixCmpFunc
static int matrixCmpFunc(const void *m1, const void *m2)
fonction de comparaison de deux matrices en fonction du nom pour insertion dans l'arbre binaire.
Definition: gl4du.c:987
findInProgramsList
static program_t ** findInProgramsList(GLuint id)
recherche un program à partir de son identifiant openGL dans la liste programs_list.
Definition: gl4du.c:858
GL4DU_FRAGMENT_SHADER
@ GL4DU_FRAGMENT_SHADER
Definition: gl4du.h:22
GL4DU_PROGRAM
@ GL4DU_PROGRAM
Definition: gl4du.h:36
_GL4DUMatrix::data
void * data
Definition: gl4du.c:67
t0
static struct timeval t0
Le temps initial du programme. A initialiser avec gl4dInitTime0.
Definition: gl4dummies.c:186
llPush
void llPush(linked_list_t *ll, void *data)
Definition: linked_list.c:28
_hasInit
static int _hasInit
Definition: gl4du.c:115
btDelete
void btDelete(bin_tree_t **ptr, void(*freeData)(void *))
Definition: bin_tree.c:63
GL4DU_MATRICES
@ GL4DU_MATRICES
Definition: gl4du.h:37
btForAll
void btForAll(bin_tree_t *ptr, void(*todo)(void *, void **), void **ldata)
Definition: bin_tree.c:113
llPop
void * llPop(linked_list_t *ll)
Definition: linked_list.c:38
deleteFromShadersList
static void deleteFromShadersList(shader_t **shp)
supprime le shader pointé par shp de la liste de shaders shaders_list.
Definition: gl4du.c:842
_gl4dLastMatrixn
static bin_tree_t ** _gl4dLastMatrixn
le noeud vers la dernière matrice _GL4DUMatrix créée.
Definition: gl4du.c:86
addInProgramsList
static program_t ** addInProgramsList(GLuint id)
ajoute un nouveau program dans la liste de program programs_list.
Definition: gl4du.c:873
llNew
linked_list_t * llNew(void)
Definition: linked_list.c:12
MVEC3CROSS
#define MVEC3CROSS(r, u, v)
Produit vectoriel 3D entre u et v écrit dans r.
Definition: gl4dm.h:226
MVEC3NORMALIZE
#define MVEC3NORMALIZE(v)
Normalise le vecteur 3D v.
Definition: gl4dm.h:260
findfnInShadersList
static shader_t ** findfnInShadersList(const char *filename)
recherche un shader à partir du nom de fichier dans la liste shaders_list.
Definition: gl4du.c:719
gl4dhClean
void gl4dhClean(void)
demande l'état libération à tous les éléments du tableau d'animations.
Definition: gl4dhAnimeManager.c:76
GL4DU_ALL
@ GL4DU_ALL
Definition: gl4du.h:41
shader_t::id
GLuint id
Definition: gl4du.c:42
_GL4DUMatrix::size
size_t size
Definition: gl4du.c:64
shaders_list
static shader_t * shaders_list
liste de vertex et fragment shaders. Chaque shader est composé d'un id (GL), du type,...
Definition: gl4du.c:73
GL4DU_DEMO_HELPER
@ GL4DU_DEMO_HELPER
Definition: gl4du.h:39
_gl4dCurMatrix
static _GL4DUMatrix * _gl4dCurMatrix
la matrice _GL4DUMatrix courante.
Definition: gl4du.c:84