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

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

#include "gl4du.h"
#include <string.h>
#include "gl4dh.h"
#include "bin_tree.h"
#include "linked_list.h"
#include <sys/stat.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include "aes.h"
#include <errno.h>
#include <limits.h>
#include <unistd.h>
Graphe des dépendances par inclusion de gl4du.c:

Aller au code source de ce fichier.

Structures de données

struct  shader_t
 
struct  program_t
 
struct  _GL4DUMatrix
 structure de données pour une pile de "une matrice 4x4". Plus de détails...
 

Définitions de type

typedef struct shader_t shader_t
 
typedef struct program_t program_t
 
typedef struct _GL4DUMatrix _GL4DUMatrix
 type de données lié à la structure struct _GL4DUMatrix. Plus de détails...
 

Fonctions

static shader_t ** findfnInShadersList (const char *filename)
 recherche un shader à partir du nom de fichier dans la liste shaders_list. Plus de détails...
 
static shader_t ** findidInShadersList (GLuint id)
 recherche un shader à partir de son identifiant openGL dans la liste shaders_list. Plus de détails...
 
static shader_t ** addInShadersList (GLenum shadertype, const char *filename, const char *shadercode)
 ajoute un nouveau shader dans la liste de shaders shaders_list. Plus de détails...
 
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 Plus de détails...
 
static void deleteFromShadersList (shader_t **shp)
 supprime le shader pointé par shp de la liste de shaders shaders_list. Plus de détails...
 
static program_t ** findInProgramsList (GLuint id)
 recherche un program à partir de son identifiant openGL dans la liste programs_list. Plus de détails...
 
static program_t ** addInProgramsList (GLuint id)
 ajoute un nouveau program dans la liste de program programs_list. Plus de détails...
 
static void deleteFromProgramsList (program_t **pp)
 supprime le program pointé par pp de la liste des programs programs_list. Plus de détails...
 
static void attachShader (program_t *prg, shader_t *sh)
 attache (lie) un program à un shader et vice versa. Plus de détails...
 
static void detachShader (program_t *prg, shader_t *sh)
 détache (délie) un program à un shader et vice versa. Plus de détails...
 
static _GL4DUMatrixnewGL4DUMatrix (GLenum type, const char *name)
 créé une nouvelle pile de "une matrice 4x4" dont le nom est name et le type est type. Plus de détails...
 
static void freeGL4DUMatrix (void *matrix)
 libère la pile de "une matrice 4x4". Plus de détails...
 
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. Plus de détails...
 
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 matrice dont le nom est passé en argument (name). Plus de détails...
 
static void * matrixData (_GL4DUMatrix *matrix)
 retourne le pointeur vers les données de la matrice (pile de "une matrice 4x4") courante. Plus de détails...
 
static void findPathOfMe (const char *argv0)
 
void gl4duInit (int argc, char **argv)
 Initialise la bibliothèque. Plus de détails...
 
int gl4duHasInit (void)
 indique si la bibliothèque a été initialisée Plus de détails...
 
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. Plus de détails...
 
void gl4duPrintShaderInfoLog (GLuint object, FILE *fp)
 imprime s'il existe l'infoLog de la compilation du Shader object dans fp. Plus de détails...
 
void gl4duPrintProgramInfoLog (GLuint object, FILE *fp)
 imprime s'il existe l'infoLog de l'édition de liens pour le Program object dans fp. Plus de détails...
 
void gl4duPrintFPS (FILE *fp)
 imprime dans le fichier pointé par fp le Frame-Per-Second. Plus de détails...
 
GLuint gl4duCreateShader (GLenum shadertype, const char *filename)
 retourne l'identifiant du shader décrit dans filename. Plus de détails...
 
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 ; le nom de fichier est fictif et sert seulement d'identifiant. Plus de détails...
 
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 Plus de détails...
 
GLuint gl4duFindShader (const char *filename)
 retourne l'identifiant du shader décrit dans filename. Plus de détails...
 
void gl4duDeleteShader (GLuint id)
 supprime le shader dont l'identifiant openGL est id de la liste de shaders shaders_list. Plus de détails...
 
GLuint 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...
 
GLuint 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...
 
void gl4duDeleteProgram (GLuint id)
 supprime le program dont l'identifiant openGL est id de la liste de programs programs_list. Plus de détails...
 
void gl4duClean (GL4DUenum what)
 supprime tous les programs et/ou tous les shaders. Plus de détails...
 
void 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...
 
void gl4duCleanUnattached (GL4DUenum what)
 supprime programs et/ou shaders non liés. Plus de détails...
 
int 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...
 
GLboolean 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...
 
GLboolean gl4duIsMatrix (const char *name)
 indique s'il existe une matrice est liée au nom name passé en argument. Plus de détails...
 
GLboolean gl4duBindMatrix (const char *name)
 active (met en current) la matrice liée au nom name passé en argument. Plus de détails...
 
GLboolean gl4duDeleteMatrix (const char *name)
 supprime la matrice liée au nom name passé en argument. Plus de détails...
 
void 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...
 
void gl4duPopMatrix (void)
 dépile la matrice courante en restaurant l'état précédemment sauvegardé à l'aide de gl4duPushMatrix. Plus de détails...
 
void sendMatrix (void *m, void **ppId)
 utilisée par btForAll pour envoyer la matrice m sur le program Id pointé par ppId. Plus de détails...
 
void 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...
 
void gl4duSendMatrices (void)
 envoie toutes matrices au program shader en cours et en utilisant leurs noms pour obtenir le uniform location. Plus de détails...
 
void 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...
 
void 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...
 
void 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...
 
void 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...
 
void 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...
 
void 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...
 
void gl4duLoadIdentityf (void)
 Chargement d'une matrice identité dans la matrice en cours. Plus de détails...
 
void gl4duLoadIdentityd (void)
 Chargement d'une matrice identité dans la matrice en cours. Plus de détails...
 
void gl4duLoadMatrixf (const GLfloat *matrix)
 Chargement d'une matrice matrix dans la matrice en cours. Plus de détails...
 
void gl4duLoadMatrixd (const GLdouble *matrix)
 Chargement d'une matrice matrix dans la matrice en cours. Plus de détails...
 
void gl4duMultMatrixf (const GLfloat *matrix)
 Multiplication de la matrice en cours par une matrice matrix. Plus de détails...
 
void gl4duMultMatrixd (const GLdouble *matrix)
 Multiplication de la matrice en cours par une matrice matrix. Plus de détails...
 
void 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...
 
void 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...
 
void 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...
 
void 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...
 
void 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...
 
void 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...
 
void 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...
 
void gl4duLookAtf_DNW (GLfloat eyeX, GLfloat eyeY, GLfloat eyeZ, GLfloat centerX, GLfloat centerY, GLfloat centerZ, GLfloat upX, GLfloat upY, GLfloat upZ)
 
void 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...
 
void 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...
 
void * gl4duGetMatrixData (void)
 retourne le pointeur vers les données de la matrice (pile de "une matrice 4x4") courante. Plus de détails...
 
GLboolean 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...
 

Variables

static shader_tshaders_list = NULL
 liste de vertex et fragment shaders. Chaque shader est composé d'un id (GL), du type, du nom de fichier et de la date de modification du fichier. Plus de détails...
 
static program_tprograms_list = NULL
 liste de programs. Chaque program est composé d'un id (GL), il est lié à une liste de shaders. Plus de détails...
 
static bin_tree_t_gl4duMatrices = NULL
 arbre binaire contenant l'ensemble des matrices _GL4DUMatrix gérées. Plus de détails...
 
static _GL4DUMatrix_gl4dCurMatrix = NULL
 la matrice _GL4DUMatrix courante. Plus de détails...
 
static bin_tree_t ** _gl4dLastMatrixn = NULL
 le noeud vers la dernière matrice _GL4DUMatrix créée. Plus de détails...
 
static linked_list_t_aelist = NULL
 pile des fonctions à appeler lors du "at exit" de gl4duClean. Cette liste est remplie par gl4duAtExit. Plus de détails...
 
static char _pathOfMe [BUFSIZ] = {0}
 stocke le chemin relatif à partir duquel le binaire a été exécuté. Est initialisée dans gl4dInit. Plus de détails...
 
static int _pathOfMeInit = 0
 
static int _hasInit = 0
 

Description détaillée

The GL4Dummies Utilities.

Auteur
Farès 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
A faire:
ajouter la prise en compte de différents contextes GL dans la structure shader_t et ainsi différencier les shaders (même quand c'est les mêmes) créés dans différents contextes
A faire:
ajouter, pour pas mal de fonctions, une gestion des erreurs à la errno ...
A faire:
la macro PI_180 a été ajoutée et le code antérieur n'a pas été modifié par manque de temps sur les tests de non regression.

Définition dans le fichier gl4du.c.

Documentation des définitions de type

◆ _GL4DUMatrix

typedef struct _GL4DUMatrix _GL4DUMatrix

type de données lié à la structure struct _GL4DUMatrix.

◆ program_t

typedef struct program_t program_t

◆ shader_t

typedef struct shader_t shader_t

Documentation des fonctions

◆ addInProgramsList()

static program_t ** addInProgramsList ( GLuint  id)
static

ajoute un nouveau program dans la liste de program programs_list.

Renvoie
l'adresse du program ajouté sinon NULL.
873  {
874  program_t * ptr = programs_list;
875  programs_list = malloc(sizeof * programs_list);
876  assert(programs_list);
877  programs_list->id = id;
878  programs_list->nshaders = 0;
879  programs_list->sshaders = 4;
880  programs_list->next = ptr;
882  assert(programs_list->shaders);
883  return &programs_list;
884 }

Références program_t::id, program_t::next, program_t::nshaders, programs_list, program_t::shaders, et program_t::sshaders.

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

◆ addInShadersList()

static shader_t ** addInShadersList ( GLenum  shadertype,
const char *  filename,
const char *  shadercode 
)
static

ajoute un nouveau shader dans la liste de shaders shaders_list.

Paramètres
shadertypetype de shader (vertex, fragment et geometry)
filenamenom du fichier shader
shadercodesource du shader, si NULL sera récupéré depuis filename
Renvoie
l'adresse du shader ajouté sinon NULL.
755  {
756  GLuint id;
757  char * txt = NULL;
758  struct stat buf;
759  shader_t * ptr;
760  if(!(id = glCreateShader(shadertype))) {
761  fprintf(stderr, "%s (%d): %s: impossible de créer le shader\nglCreateShader a retourné 0\n",
762  __FILE__, __LINE__, __func__);
763  return NULL;
764  }
765  if(shadercode == NULL) {
766  if(!(txt = gl4dReadTextFile(filename))) {
767  glDeleteShader(id);
768  return NULL;
769  }
770  if(stat(filename, &buf) != 0) {
771  fprintf(stderr, "%s:%d:In %s: erreur %d: %s\n",
772  __FILE__, __LINE__, __func__, errno, strerror(errno));
773  glDeleteShader(id);
774  return NULL;
775  }
776  } else
777  txt = (char *)shadercode;
778  ptr = shaders_list;
779  shaders_list = malloc(sizeof * shaders_list);
780  assert(shaders_list);
781  shaders_list->id = id;
782  shaders_list->shadertype = shadertype;
783  shaders_list->filename = strdup(filename);
784  shaders_list->mod_time = shadercode ? INT_MAX : buf.st_mtime;
785  shaders_list->verify_timestamp = shadercode ? GL_FALSE : GL_TRUE;
786  shaders_list->todelete = 0;
787  shaders_list->nprograms = 0;
788  shaders_list->sprograms = 2;
789  shaders_list->next = ptr;
791  assert(shaders_list->programs);
792  glShaderSource(id, 1, (const char **)&txt, NULL);
793  glCompileShader(id);
794  gl4duPrintShaderInfoLog(id, stderr);
795  if(shadercode == NULL)
796  free(txt);
797  return &shaders_list;
798 }

Références shader_t::filename, gl4dReadTextFile(), gl4duPrintShaderInfoLog(), shader_t::id, shader_t::mod_time, shader_t::next, shader_t::nprograms, shader_t::programs, shaders_list, shader_t::shadertype, shader_t::sprograms, shader_t::todelete, et shader_t::verify_timestamp.

Référencé par gl4duCreateShader(), gl4duCreateShaderIM(), et gl4duUpdateShaders().

◆ addInShadersListFED()

static shader_t ** addInShadersListFED ( const char *  decData,
GLenum  shadertype,
const char *  filename 
)
static

ajoute un nouveau shader dans la liste de shaders shaders_list. Version FED

Renvoie
l'adresse du shader ajouté sinon NULL.
805  {
806  GLuint id;
807  char * txt;
808  shader_t * ptr;
809  if(!(id = glCreateShader(shadertype))) {
810  fprintf(stderr, "%s (%d): %s: impossible de créer le shader\nglCreateShader a retourné 0\n",
811  __FILE__, __LINE__, __func__);
812  return NULL;
813  }
814  if(!(txt = gl4dExtractFromDecData(decData, filename))) {
815  glDeleteShader(id);
816  return NULL;
817  }
818  ptr = shaders_list;
819  shaders_list = malloc(sizeof * shaders_list);
820  assert(shaders_list);
821  shaders_list->id = id;
822  shaders_list->shadertype = shadertype;
823  shaders_list->filename = strdup(filename);
824  shaders_list->mod_time = INT_MAX;
825  shaders_list->verify_timestamp = GL_FALSE;
826  shaders_list->todelete = 0;
827  shaders_list->nprograms = 0;
828  shaders_list->sprograms = 2;
829  shaders_list->next = ptr;
831  assert(shaders_list->programs);
832  glShaderSource(id, 1, (const char **)&txt, NULL);
833  glCompileShader(id);
834  gl4duPrintShaderInfoLog(id, stderr);
835  free(txt);
836  return &shaders_list;
837 }

Références shader_t::filename, gl4dExtractFromDecData(), gl4duPrintShaderInfoLog(), shader_t::id, shader_t::mod_time, shader_t::next, shader_t::nprograms, shader_t::programs, shaders_list, shader_t::shadertype, shader_t::sprograms, shader_t::todelete, et shader_t::verify_timestamp.

Référencé par gl4duCreateShaderFED().

◆ attachShader()

static void attachShader ( program_t prg,
shader_t sh 
)
static

attache (lie) un program à un shader et vice versa.

902  {
903  int i;
904  for(i = 0; i < prg->nshaders; i++)
905  if(prg->shaders[i] == sh) return;
906  for(i = 0; i < sh->nprograms; i++)
907  if(sh->programs[i] == prg) return;
908  if(prg->nshaders >= prg->sshaders) { /* ne devrait pas être supérieur */
909  prg->shaders = realloc(prg->shaders, (prg->sshaders <<= 1) * sizeof * prg->shaders);
910  assert(prg->shaders);
911  }
912  if(sh->nprograms >= sh->sprograms) { /* ne devrait pas être supérieur */
913  sh->programs = realloc(sh->programs, (sh->sprograms <<= 1) * sizeof * sh->programs);
914  assert(sh->programs);
915  }
916  prg->shaders[prg->nshaders++] = sh;
917  sh->programs[sh->nprograms++] = prg;
918  glAttachShader(prg->id, sh->id);
919 }

Références shader_t::id, program_t::id, shader_t::nprograms, program_t::nshaders, shader_t::programs, program_t::shaders, shader_t::sprograms, et program_t::sshaders.

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

◆ deleteFromProgramsList()

static void deleteFromProgramsList ( program_t **  pp)
static

supprime le program pointé par pp de la liste des programs programs_list.

889  {
890  int i;
891  program_t * ptr = *pp;
892  *pp = (*pp)->next;
893  for(i = 0; i < ptr->nshaders; i++)
894  detachShader(ptr, ptr->shaders[i]);
895  free(ptr->shaders);
896  glDeleteProgram(ptr->id);
897  free(ptr);
898 }

Références detachShader(), program_t::id, program_t::next, program_t::nshaders, et program_t::shaders.

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

◆ deleteFromShadersList()

static void deleteFromShadersList ( shader_t **  shp)
static

supprime le shader pointé par shp de la liste de shaders shaders_list.

842  {
843  shader_t * ptr = *shp;
844  *shp = (*shp)->next;
845  free(ptr->filename);
846  free(ptr->programs);
847  glDeleteShader(ptr->id);
848  free(ptr);
849 }

Références shader_t::filename, shader_t::id, shader_t::next, et shader_t::programs.

Référencé par detachShader(), gl4duClean(), gl4duCleanUnattached(), gl4duDeleteShader(), et gl4duUpdateShaders().

◆ detachShader()

static void detachShader ( program_t prg,
shader_t sh 
)
static

détache (délie) un program à un shader et vice versa.

923  {
924  int i;
925  glDetachShader(prg->id, sh->id);
926  for(i = 0; i < prg->nshaders; i++)
927  if(prg->shaders[i] == sh) break;
928  for(prg->nshaders--; i < prg->nshaders; i++)
929  prg->shaders[i] = prg->shaders[i + 1];
930  for(i = 0; i < sh->nprograms; i++)
931  if(sh->programs[i] == prg) break;
932  for(sh->nprograms--; i < sh->nprograms; i++)
933  sh->programs[i] = sh->programs[i + 1];
934  if(sh->nprograms <= 0 && sh->todelete) /* ne devrait pas être négatif */
936 }

Références deleteFromShadersList(), findidInShadersList(), shader_t::id, program_t::id, shader_t::nprograms, program_t::nshaders, shader_t::programs, program_t::shaders, et shader_t::todelete.

Référencé par deleteFromProgramsList(), et gl4duUpdateShaders().

◆ findfnInShadersList()

static shader_t ** findfnInShadersList ( const char *  filename)
static

recherche un shader à partir du nom de fichier dans la liste shaders_list.

Si le shader n'existe pas la fonction retourne NULL;

Paramètres
filenamele nom (le chemin entier (relatif)) du fichier contenant le shader
Renvoie
le pointeur de pointeur vers le shader.
719  {
720  shader_t ** ptr = &shaders_list;
721  while(*ptr) {
722  if(!strcmp(filename, (*ptr)->filename))
723  return ptr;
724  ptr = &((*ptr)->next);
725  }
726  return ptr;
727 }

Références shaders_list.

Référencé par gl4duCreateShader(), gl4duCreateShaderFED(), gl4duCreateShaderIM(), et gl4duFindShader().

◆ findidInShadersList()

static shader_t ** findidInShadersList ( GLuint  id)
static

recherche un shader à partir de son identifiant openGL dans la liste shaders_list.

Si le shader n'existe pas la fonction retourne NULL;

Paramètres
idl'identifiant openGL du shader.
Renvoie
le pointeur de pointeur vers le shader.
738  {
739  shader_t ** ptr = &shaders_list;
740  while(*ptr) {
741  if(id == (*ptr)->id)
742  return ptr;
743  ptr = &((*ptr)->next);
744  }
745  return ptr;
746 }

Références shaders_list.

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

◆ findInProgramsList()

static program_t ** findInProgramsList ( GLuint  id)
static

recherche un program à partir de son identifiant openGL dans la liste programs_list.

Si le program n'existe pas la fonction retourne NULL;

Renvoie
le pointeur de pointeur vers le program.
858  {
859  program_t ** ptr = &programs_list;
860  while(*ptr) {
861  if(id == (*ptr)->id)
862  return ptr;
863  ptr = &((*ptr)->next);
864  }
865  return ptr;
866 }

Références programs_list.

Référencé par gl4duDeleteProgram().

◆ findMatrix()

static bin_tree_t ** findMatrix ( const char *  name)
inlinestatic

recherche et renvoie le pointeur de pointeur vers le noeud de l'arbre binaire pointant vers la matrice dont le nom est passé en argument (name).

Paramètres
namele nom de la matrice recherchée.
Renvoie
le pointeur de pointeur vers le noeud de l'arbre binaire pointant vers la matrice dont le nom est passé en argument (name).
1001  {
1002  pair_t pair;
1003  _GL4DUMatrix m;
1004  if(_gl4dLastMatrixn && strcmp(((_GL4DUMatrix *)((*_gl4dLastMatrixn)->data))->name, name) == 0)
1005  return _gl4dLastMatrixn;
1006  m.name = (char *)name;
1007  pair = btFind(&_gl4duMatrices, &m, matrixCmpFunc);
1008  if(!pair.compResult)
1009  return (bin_tree_t **)pair.ptr;
1010  return NULL;
1011 }

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

Référencé par gl4duBindMatrix(), gl4duDeleteMatrix(), et gl4duMultMatrixByName().

◆ findPathOfMe()

static void findPathOfMe ( const char *  argv0)
static
131  {
132  char buf[BUFSIZ] = {0};
133  ssize_t len = 0;
134 #if defined(_WIN32)
135  /* tous les compilateurs sous windows ? */
136  if(GetModuleFileNameA(NULL, buf, sizeof buf - 1) == 0)
137  fprintf(stderr, "%s (%s:%d) - error while GetModuleFileNameA(), error: %s\n",
138  __func__, __FILE__, __LINE__, GetLastError());
139 #elif defined(__FreeBSD__)
140  struct kinfo_proc *proc = kinfo_getproc(getpid());
141  if(proc) {
142  strncpy(buf, proc->ki_comm, sizeof buf - 1);
143  free(proc);
144  } else {
145  fprintf(stderr, "%s (%s:%d) - error while kinfo_getproc(getpid()), trying with readlink\n",
146  __func__, __FILE__, __LINE__);
147  if((len = readlink("/proc/curproc/file", buf, sizeof buf - 1)) < 0) { /* only if it has procfs which it does not by default */
148  fprintf(stderr, "%s (%s:%d) - finding exec path failed with readlink, error: %s\n",
149  __func__, __FILE__, __LINE__, strerror(errno));
150  /* sinon essayer sysctl CTL_KERN KERN_PROC KERN_PROC_PATHNAME -1 ??? */
151  } else {
152  buf[len] = '\0';
153  }
154  }
155 #elif defined(__MACOSX__)
156  pid_t pid = getpid();
157  char symlinkpath[BUFSIZ];
158  uint32_t size = BUFSIZ;
159  if(proc_pidpath(pid, buf, sizeof buf) <= 0) {
160  fprintf(stderr, "%s (%s:%d) - proc_pidpath(%d ...) error: %s\n",
161  __func__, __FILE__, __LINE__, pid, strerror(errno));
162  }
163  if (_NSGetExecutablePath(symlinkpath, &size) == 0)
164  realpath(symlinkpath, buf);
165  else
166  fprintf(stderr, "%s (%s:%d) - _NSGetExecutablePath() returns a path that exceeds the buffer size, size needed: %d\n",
167  __func__, __FILE__, __LINE__, size);
168 #else /* autres unices */
169  if((len = readlink("/proc/self/exe", buf, sizeof buf - 1)) > 0) /* (Linux) */
170  buf[len] = '\0';
171  else if((len = readlink("/proc/curproc/file", buf, sizeof buf - 1)) > 0) /* (BSD ?) */
172  buf[len] = '\0';
173  else if((len = readlink("/proc/curproc/exe", buf, sizeof buf - 1)) > 0) /* (NetBSD) */
174  buf[len] = '\0';
175  else if((len = readlink("/proc/self/path/a.out", buf, sizeof buf - 1)) > 0) /* (Solaris) sinon strncpy(buf, getexecname(), sizeof buf) ?? */
176  buf[len] = '\0';
177  else
178  fprintf(stderr, "%s (%s:%d) - finding exec path failed with readlink, error: %s\n",
179  __func__, __FILE__, __LINE__, strerror(errno));
180 #endif
181  strncpy(_pathOfMe, pathOf(strlen(buf) > 0 ? buf : argv0), sizeof _pathOfMe - 1);
182  _pathOfMeInit = 1;
183 }

Références _pathOfMe, _pathOfMeInit, et pathOf().

Référencé par gl4duInit().

◆ freeGL4DUMatrix()

static void freeGL4DUMatrix ( void *  matrix)
inlinestatic

libère la pile de "une matrice 4x4".

Paramètres
matrixest la pile de "une matrice 4x4".
968  {
969  free(((_GL4DUMatrix *)matrix)->name);
970  free(((_GL4DUMatrix *)matrix)->data);
971  free(matrix);
972 }

Référencé par gl4duClean(), et gl4duDeleteMatrix().

◆ gl4duAtExit()

void 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()

GLboolean 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()

void 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()

void 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()

GLuint 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()

GLuint 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()

GLuint 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()

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

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()

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 ; 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()

GLboolean 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()

void 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()

void 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()

GLuint 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()

void 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()

void 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()

GLboolean 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()

GLboolean 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()

void* 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()

int gl4duHasInit ( void  )

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

201  {
202  return _hasInit;
203 }

Références _hasInit.

◆ gl4duInit()

void 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()

GLboolean 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()

void 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()

void 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()

void 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()

void 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()

void 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()

void 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.

◆ gl4duLookAtf_DNW()

void gl4duLookAtf_DNW ( GLfloat  eyeX,
GLfloat  eyeY,
GLfloat  eyeZ,
GLfloat  centerX,
GLfloat  centerY,
GLfloat  centerZ,
GLfloat  upX,
GLfloat  upY,
GLfloat  upZ 
)
1532  {
1533  GLfloat haut[3] = { upX, upY, upZ }, dirVue[] = { centerX - eyeX, centerY - eyeY, centerZ - eyeZ };
1534  GLfloat mat[] = {
1535  0.0f, 0.0f, 0.0f, 0.0f,
1536  0.0f, 0.0f, 0.0f, 0.0f,
1537  -dirVue[0], -dirVue[1], -dirVue[2], 0.0f,
1538  0.0f, 0.0f, 0.0f, 1.0f
1539  };
1540  //MMAT4TRANSPOSE(mat);
1541  MVEC3NORMALIZE(dirVue);
1542  /* Première version
1543  GLfloat cote[3];
1544  MVEC3CROSS(cote, dirVue, haut); // j'ai envie de faire haut x dirVue
1545  MVEC3NORMALIZE(cote);
1546  mat[0] = cote[0]; mat[1] = cote[1]; mat[2] = cote[2];
1547  //\todo dire pourquoi (lié à la normalisation de cote)
1548  MVEC3CROSS(haut, cote, dirVue); // j'ai envie de faire dirVue x coté
1549  mat[4] = haut[0]; mat[5] = haut[1]; mat[6] = haut[2]; */
1550  MVEC3CROSS(mat, dirVue, haut);
1551  MVEC3NORMALIZE(mat);
1552  MVEC3CROSS(&mat[4], mat, dirVue);
1553  gl4duMultMatrixf(mat);
1554  gl4duTranslatef(-eyeX, -eyeY, -eyeZ);
1555 }

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

◆ 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.

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()

void 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()

void 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()

void 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()

void 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()

void 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()

void 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()

void 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()

void 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()

void 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()

void gl4duPrintProgramInfoLog ( GLuint  object,
FILE *  fp 
)

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()

void gl4duPrintShaderInfoLog ( GLuint  object,
FILE *  fp 
)

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()

void 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()

void 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()

void 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()

void 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()

void 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()

void 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()

void 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()

void 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()

void 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()

int 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().

◆ matrixCmpFunc()

static int matrixCmpFunc ( const void *  m1,
const void *  m2 
)
inlinestatic

fonction de comparaison de deux matrices en fonction du nom pour insertion dans l'arbre binaire.

Cette fonction utilise strcmp.

Paramètres
m1première matrice (de type _GL4DUMatrix).
m2seconde matrice (de type _GL4DUMatrix).
Renvoie
entier négatif, nul ou positif selon que le nom de la première soit respectivement inférieur, égal ou supérieur à la seconde.
987  {
988  return strcmp( ((_GL4DUMatrix *)m1)->name, ((_GL4DUMatrix *)m2)->name );
989 }

Référencé par findMatrix(), gl4duGenMatrix(), et gl4duIsMatrix().

◆ matrixData()

static void * matrixData ( _GL4DUMatrix matrix)
inlinestatic

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.
1666  {
1667  return (void *)&(((GLubyte *)matrix->data)[matrix->top * matrix->size]);
1668 }

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

Référencé par gl4duGetMatrixData(), et sendMatrix().

◆ newGL4DUMatrix()

static _GL4DUMatrix * newGL4DUMatrix ( GLenum  type,
const char *  name 
)
inlinestatic

créé une nouvelle pile de "une matrice 4x4" dont le nom est name et le type est type.

La (pile de) matrice créée n'est pas initialisée et le haut de la pile pointe déjà sur une matrice.

Paramètres
typeest le type de données utilisé dans la matrice, peut etre GL_FLOAT ou GL_DOUBLE.
nameest le nom unique donné à la matrice.
Renvoie
la nouvelle pile de "une matrice 4x4" créée.
951  {
952  _GL4DUMatrix * m = malloc(sizeof *m);
953  assert(m);
954  m->name = strdup(name);
955  m->type = type;
956  m->size = 16 * ( (type == GL_FLOAT) ? sizeof (GLfloat) : /* type == GL_DOUBLE */ sizeof (GLdouble) );
957  m->nmemb = 16;
958  m->top = 0; /* déjà une matrice en haut de la pile */
959  m->data = malloc(m->size * m->nmemb);
960  assert(m->data);
961  return m;
962 }

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

Référencé par gl4duGenMatrix().

◆ sendMatrix()

void sendMatrix ( void *  m,
void **  ppId 
)

utilisée par btForAll pour envoyer la matrice m sur le program Id pointé par ppId.

A faire:
ajouter la gestion des GLdouble
1131  {
1132  _GL4DUMatrix * matrix = (_GL4DUMatrix * )m;
1133  GLint pId = *(GLint *)ppId;
1134 #ifdef __ANDROID__
1135 
1136  GLfloat t[16], * M = matrixData(matrix);
1137  t[0] = M[0]; t[1] = M[4]; t[2] = M[8]; t[3] = M[12];
1138  t[4] = M[1]; t[5] = M[5]; t[6] = M[9]; t[7] = M[13];
1139  t[8] = M[2]; t[9] = M[6]; t[10] = M[10]; t[11] = M[14];
1140  t[12] = M[3]; t[13] = M[7]; t[14] = M[11]; t[15] = M[15];
1141  glUniformMatrix4fv(glGetUniformLocation(pId, matrix->name), 1, GL_FALSE, t);
1142  //__android_log_print(ANDROID_LOG_ERROR, "AndroidGL4D", "PROGRAM %d, Matrix %s : %d\n", pId, matrix->name, glGetUniformLocation(pId, matrix->name));
1143 #else
1144  glUniformMatrix4fv(glGetUniformLocation(pId, matrix->name), 1, GL_TRUE, matrixData(matrix));
1145 #endif
1146 }

Références matrixData(), et _GL4DUMatrix::name.

Référencé par gl4duSendMatrices(), et gl4duSendMatrix().

Documentation des variables

◆ _aelist

linked_list_t* _aelist = NULL
static

pile des fonctions à appeler lors du "at exit" de gl4duClean. Cette liste est remplie par gl4duAtExit.

Référencé par gl4duAtExit(), et gl4duClean().

◆ _gl4dCurMatrix

◆ _gl4dLastMatrixn

bin_tree_t** _gl4dLastMatrixn = NULL
static

le noeud vers la dernière matrice _GL4DUMatrix créée.

Référencé par findMatrix(), gl4duDeleteMatrix(), et gl4duGenMatrix().

◆ _gl4duMatrices

bin_tree_t* _gl4duMatrices = NULL
static

arbre binaire contenant l'ensemble des matrices _GL4DUMatrix gérées.

Référencé par findMatrix(), gl4duClean(), gl4duGenMatrix(), gl4duIsMatrix(), et gl4duSendMatrices().

◆ _hasInit

int _hasInit = 0
static

Référencé par gl4duClean(), gl4duHasInit(), et gl4duInit().

◆ _pathOfMe

char _pathOfMe[BUFSIZ] = {0}
static

stocke le chemin relatif à partir duquel le binaire a été exécuté. Est initialisée dans gl4dInit.

Voir également
gl4dInit

Référencé par findPathOfMe(), et gl4duMakeBinRelativePath().

◆ _pathOfMeInit

int _pathOfMeInit = 0
static

◆ programs_list

program_t* programs_list = NULL
static

liste de programs. Chaque program est composé d'un id (GL), il est lié à une liste de shaders.

Référencé par addInProgramsList(), findInProgramsList(), gl4duClean(), et gl4duCleanUnattached().

◆ shaders_list

shader_t* shaders_list = NULL
static

liste de vertex et fragment shaders. Chaque shader est composé d'un id (GL), du type, du nom de fichier et de la date de modification du fichier.

Référencé par addInShadersList(), addInShadersListFED(), findfnInShadersList(), findidInShadersList(), gl4duClean(), gl4duCleanUnattached(), et gl4duUpdateShaders().

program_t::sshaders
int sshaders
Definition: gl4du.c:55
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
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
shader_t::sprograms
int sprograms
Definition: gl4du.c:48
shader_t::programs
program_t ** programs
Definition: gl4du.c:49
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
program_t::shaders
shader_t ** shaders
Definition: gl4du.c:56
_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
shader_t::mod_time
time_t mod_time
Definition: gl4du.c:45
_GL4DUMatrix::name
char * name
Definition: gl4du.c:62
shader_t::nprograms
int nprograms
Definition: gl4du.c:48
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
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
shader_t::filename
char * filename
Definition: gl4du.c:44
MIDENTITY
#define MIDENTITY(m)
Chargement d'une matrice identitéé dans m.
Definition: gl4dm.h:338
shader_t::todelete
unsigned todelete
Definition: gl4du.c:47
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
gl4duPrintShaderInfoLog
void gl4duPrintShaderInfoLog(GLuint object, FILE *fp)
imprime s'il existe l'infoLog de la compilation du Shader object dans fp.
Definition: gl4du.c:218
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
program_t::nshaders
int nshaders
Definition: gl4du.c:55
program_t::id
GLuint id
Definition: gl4du.c:54
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
program_t::next
program_t * next
Definition: gl4du.c:57
_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
shader_t::verify_timestamp
GLboolean verify_timestamp
Definition: gl4du.c:46
gl4dgInit
void gl4dgInit(void)
Initialise les structures nécessaire au stockage des géométries proposées par GL4Dummies....
Definition: gl4dg.c:174
pathOf
char * pathOf(const char *path)
Renvoie le chemin vers le dossier contenant le fichier passé en argument.
Definition: gl4dummies.c:319
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
shader_t::next
shader_t * next
Definition: gl4du.c:50
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
gl4dReadTextFile
char * gl4dReadTextFile(const char *filename)
recopie un fichier texte en mémoire et renvoie un pointeur vers la donnée recopiée.
Definition: gl4dummies.c:68
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
shader_t::id
GLuint id
Definition: gl4du.c:42
_GL4DUMatrix::size
size_t size
Definition: gl4du.c:64
gl4dExtractFromDecData
char * gl4dExtractFromDecData(const char *decData, const char *filename)
recherche le shader filename dans le dat décrypté decData et retourne une copie du code.
Definition: gl4dummies.c:105
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
shader_t::shadertype
GLenum shadertype
Definition: gl4du.c:43
_gl4dCurMatrix
static _GL4DUMatrix * _gl4dCurMatrix
la matrice _GL4DUMatrix courante.
Definition: gl4du.c:84