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

gestion simplifiée de GL sous différents OS et fonctionnalité de cryptage des shaders. Plus de détails...

#include <unistd.h>
#include "gl4dummies.h"
#include <math.h>
#include <time.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
Graphe des dépendances par inclusion de gl4dummies.c:

Aller au code source de ce fichier.

Macros

#define getProcAddress(name)   (*SDL_GL_GetProcAddress)(name)
 

Fonctions

static int kmpSearch (const char *p, const char *t)
 recherche un motif dans un text Plus de détails...
 
int GL4DAPIENTRY gl4dExtensionSupported (const char *extension)
 recherche une extension dans glGetString(GL_EXTENSIONS) Plus de détails...
 
void gl4dQuit (void)
 se charge de desalouer la memoire eventuellement utilisee par gl4dummies Plus de détails...
 
char * gl4dReadTextFile (const char *filename)
 recopie un fichier texte en mémoire et renvoie un pointeur vers la donnée recopiée. Plus de détails...
 
char * gl4dExtractFromDecData (const char *decData, const char *filename)
 recherche le shader filename dans le dat décrypté decData et retourne une copie du code. Plus de détails...
 
static double getElapsedTime_sub1 (void)
 
static double getElapsedTime_sub2 (void)
 
void gl4dInitTime0 (void)
 Initialise t0. Plus de détails...
 
double gl4dGetElapsedTime (void)
 Donne le temps ecoule en millisecondes depuis t0. Plus de détails...
 
void gl4dInitTime (void)
 Initialise ti. Plus de détails...
 
double gl4dGetTime (void)
 Donne le temps ecoule en millisecondes depuis ti. Plus de détails...
 
double gl4dGetFps (void)
 Calcule le FPS - Frames Per Second. Plus de détails...
 
int mv (const char *src, const char *dst)
 Déplace un fichier. Plus de détails...
 
char * pathOf (const char *path)
 Renvoie le chemin vers le dossier contenant le fichier passé en argument. Plus de détails...
 
char * filenameOf (const char *path)
 Renvoie le nom de fichier sans le chemin. Plus de détails...
 

Variables

static struct timeval t0
 Le temps initial du programme. A initialiser avec gl4dInitTime0. Plus de détails...
 
static double(* getET )(void) = getElapsedTime_sub1
 
static struct timeval ti
 Une variable de temps. A initialiser avec gl4dInitTime. Plus de détails...
 

Description détaillée

gestion simplifiée de GL sous différents OS et fonctionnalité de cryptage des shaders.

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 - February 07, 2014

Définition dans le fichier gl4dummies.c.

Documentation des macros

◆ getProcAddress

#define getProcAddress (   name)    (*SDL_GL_GetProcAddress)(name)

Documentation des fonctions

◆ filenameOf()

char* filenameOf ( const char *  path)

Renvoie le nom de fichier sans le chemin.

Prend le nom du fichier à  partir de la dernière occurence du '/'. Cette chaîne doit être libérée avec free après usage.

Paramètres
pathle chemin vers le fichier/dossier
Renvoie
le nom de fichier sans le chemin. La chaîne renvoyée doit être libérée avec free après usage.
A faire:
renommer et bouger ailleurs
346  {
347  char * tmp = strrchr(path, '/');
348  if (tmp == NULL)
349  return strdup(path);
350  return strdup(++tmp);
351 }

◆ getElapsedTime_sub1()

static double getElapsedTime_sub1 ( void  )
static
193  {
194  gl4dInitTime0();
196  return 0.0;
197 }

Références getElapsedTime_sub2(), getET, et gl4dInitTime0().

◆ getElapsedTime_sub2()

static double getElapsedTime_sub2 ( void  )
static
199  {
200  struct timeval t;
201  double diff;
202  gettimeofday(&t, (struct timezone*) 0);
203  diff = (t.tv_sec - t0.tv_sec) * 1000000
204  + (t.tv_usec - t0.tv_usec);
205  return diff/1000.;
206 }

Références t0.

Référencé par getElapsedTime_sub1().

◆ gl4dExtensionSupported()

int GL4DAPIENTRY gl4dExtensionSupported ( const char *  extension)

recherche une extension dans glGetString(GL_EXTENSIONS)

Renvoie
vrai si l'extension est trouvée
50  {
51  const char * extensions = (const char *)glGetString(GL_EXTENSIONS);
52  return kmpSearch(extension, extensions) < (int)strlen(extensions) ? 1 : 0;
53 }

Références kmpSearch().

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

105  {
106  int i, j;
107  char a[BUFSIZ], * r;
108  snprintf(a, BUFSIZ, "<shader %s>", filename);
109  if((i = kmpSearch(a, decData)) < 0)
110  return NULL;
111  if((j = kmpSearch("</shader>", &decData[i + strlen(a)])) < 0)
112  return NULL;
113  r = malloc((j + 1) * sizeof * r);
114  assert(r);
115  strncpy(r, &decData[i + strlen(a)], j);
116  r[j] = 0;
117  return r;
118 }

Références kmpSearch().

Référencé par addInShadersListFED().

◆ gl4dGetElapsedTime()

double gl4dGetElapsedTime ( void  )

Donne le temps ecoule en millisecondes depuis t0.

Voir également
initTime0
Renvoie
le temps ecoule en millisecondes.
220  {
221  return getET();
222 }

Références getET.

Référencé par gl4duPrintFPS().

◆ gl4dGetFps()

double gl4dGetFps ( void  )

Calcule le FPS - Frames Per Second.

Mettre un appel a cette fonction juste apres (ou avant) chaque affichage.

Voir également
gl4dInitTime0
getElapsedTime
Renvoie
le nombre d'images par seconde.
262  {
263  static int f = 0;
264  static double t0 = 0, t1 = 0, fps = 0.0;
265  t1 = gl4dGetTime(); f++;
266  if(t1 - t0 > 1000) {
267  fps = 1000.0 * f / (t1 - t0);
268  t0 = t1; f = 0;
269  }
270  return fps;
271 }

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

◆ gl4dGetTime()

double gl4dGetTime ( void  )

Donne le temps ecoule en millisecondes depuis ti.

Voir également
gl4dInitTime
Renvoie
le temps ecoule en millisecondes.
243  {
244  struct timeval t;
245  double diff;
246  gettimeofday(&t, (struct timezone*) 0);
247  diff = (t.tv_sec - ti.tv_sec) * 1000000
248  + (t.tv_usec - ti.tv_usec);
249  return diff/1000.;
250 }

Références ti.

Référencé par gl4dGetFps().

◆ gl4dInitTime()

void gl4dInitTime ( void  )

Initialise ti.

233  {
234  gettimeofday(&ti, (struct timezone*) 0);
235 }

Références ti.

◆ gl4dInitTime0()

void gl4dInitTime0 ( void  )

Initialise t0.

210  {
211  gettimeofday(&t0, (struct timezone*) 0);
212 }

Références t0.

Référencé par getElapsedTime_sub1().

◆ gl4dQuit()

void gl4dQuit ( void  )

se charge de desalouer la memoire eventuellement utilisee par gl4dummies

58  {
59  kmpSearch(NULL, NULL);
60 }

Références kmpSearch().

◆ gl4dReadTextFile()

char* gl4dReadTextFile ( const char *  filename)

recopie un fichier texte en mémoire et renvoie un pointeur vers la donnée recopiée.

Renvoie
un pointeur vers le texte recopié en mémoire. La mémoire doit être libérée par free.
68  {
69  int l;
70  char * data = NULL;
71  FILE * f;
72  struct stat buf;
73  if(stat(filename, &buf) != 0) {
74  fprintf(stderr, "%s:%d:In %s: error %d: %s (%s)\n",
75  __FILE__, __LINE__, __func__, errno, strerror(errno), filename);
76  return NULL;
77  }
78  data = malloc( (buf.st_size + 1) * sizeof * data );
79  assert(data);
80  if( (f = fopen(filename, "rb")) == NULL ) {
81  fprintf(stderr, "%s:%d:In %s: error %d: %s (%s)\n",
82  __FILE__, __LINE__, __func__, errno, strerror(errno), filename);
83  free(data);
84  return NULL;
85  }
86 #ifdef _WIN32
87  if( (l = (int)fread(data, sizeof * data, buf.st_size, f)) == 0) {
88 #else
89  if( (l = (int)fread(data, sizeof * data, buf.st_size, f)) != buf.st_size) {
90 #endif
91  fprintf(stderr, "%s:%d:In %s: une erreur s'est produite lors de la lecture du fichier %s\n",
92  __FILE__, __LINE__, __func__, filename);
93  free(data);
94  fclose(f);
95  return NULL;
96  }
97  data[l] = '\0';
98  fclose(f);
99  return data;
100 }

Référencé par addInShadersList().

◆ kmpSearch()

static int kmpSearch ( const char *  p,
const char *  t 
)
static

recherche un motif dans un text

Utilise l'algorithme ameliore Knuth-Morris-Pratt. Ici l'initialisation de l'automate est faite si besoin dans la meme fonction. Pour liberer l'automate appeler la fonction avec le premier argument egal a NULL.

Renvoie
l'indice de la premiere occurence su motif
129  {
130  int i, j, lt;
131  static int lm = 0, * back = NULL;
132  static const char * m = NULL;
133  if(m != p || !p) {
134  if(back){
135  free(back);
136  back = NULL;
137  }
138  if(!p) return -1;
139  lm = (int)strlen(m = p);
140  back = malloc(lm * sizeof * back);
141  assert(back);
142  for(back[i = 0] = j = -1; i < lm - 1; i++, j++, back[i] = (m[i] == m[j]) ? back[j] : j)
143  while( j >= 0 && m[i] != m[j] ) j = back[j];
144  }
145  lt = (int)strlen(t);
146  for(i = j = 0; j < lm && i < lt; i++, j++)
147  while( j >= 0 && t[i] != m[j] ) { j = back[j]; }
148  if(j == lm) return i - lm;
149  return lt;
150 }

Référencé par gl4dExtensionSupported(), gl4dExtractFromDecData(), et gl4dQuit().

◆ mv()

int mv ( const char *  src,
const char *  dst 
)

Déplace un fichier.

Paramètres
srcle chemin vers le fichier à  déplacer
dstle nouveau chemin/nom
Renvoie
1 en cas de succès sinon 0.
A faire:
gérer les dossiers, les unlink (liés à l'OS) ...
A faire:
renommer et bouger ailleurs
285  {
286  size_t l;
287  char buf[BUFSIZ] = {0};
288  FILE *in = fopen(src, "rb");
289  if(!in) {
290  return 0;
291  }
292  FILE* out = fopen(dst, "wb");
293  if(!out) {
294  fclose(in);
295  return 0;
296  }
297  while((l = fread(buf, 1, sizeof buf, in)) > 0)
298  fwrite(buf, 1, l, out);
299  fclose(out); fclose(in);
300  if(remove(src))
301  return 1;
302  return 0;
303 }

Références in().

◆ pathOf()

char* pathOf ( const char *  path)

Renvoie le chemin vers le dossier contenant le fichier passé en argument.

Fabrique la chaîne allant jusqu'à la dernière occurence du '/'. Cette chaîne doit être libérée avec free après usage.

Paramètres
pathle chemin vers le fichier/dossier
Renvoie
le chemin vers le dossier contenant le fichier passé en argument. La chaîne renvoyée doit être libérée avec free après usage.
A faire:
renommer et bouger ailleurs
319  {
320  int spos = -1;
321  char * tmp, * ptr;
322  tmp = malloc((strlen(path) + 1) * sizeof * tmp); assert(tmp); strcpy(tmp, path); //strdup(path);
323  ptr = tmp;
324  while(*ptr) {
325  if(*ptr == '/' || *ptr == '\\')
326  spos = ptr - tmp;
327  ++ptr;
328  }
329  tmp[spos >= 0 ? spos : 0] = 0;
330  return tmp;
331 }

Référencé par findPathOfMe().

Documentation des variables

◆ getET

double(* getET) (void) = getElapsedTime_sub1
static

◆ t0

struct timeval t0
static

Le temps initial du programme. A initialiser avec gl4dInitTime0.

Voir également
gl4dInitTime0

Référencé par getElapsedTime_sub2(), gl4dGetFps(), gl4dInitTime0(), gl4dpCopyFromSDLSurfaceWithTransforms(), et gl4duPrintFPS().

◆ ti

struct timeval ti
static

Une variable de temps. A initialiser avec gl4dInitTime.

Voir également
gl4dInitTime

Référencé par gl4dGetTime(), et gl4dInitTime().

in
static int in(void *func, void **funcList, int n)
regarde si le pointeur func est un élément du tableau funcList
Definition: gl4dhAnimeManager.c:143
ti
static struct timeval ti
Une variable de temps. A initialiser avec gl4dInitTime.
Definition: gl4dummies.c:229
getET
static double(* getET)(void)
Definition: gl4dummies.c:191
getElapsedTime_sub2
static double getElapsedTime_sub2(void)
Definition: gl4dummies.c:199
gl4dInitTime0
void gl4dInitTime0(void)
Initialise t0.
Definition: gl4dummies.c:210
t0
static struct timeval t0
Le temps initial du programme. A initialiser avec gl4dInitTime0.
Definition: gl4dummies.c:186
kmpSearch
static int kmpSearch(const char *p, const char *t)
recherche un motif dans un text
Definition: gl4dummies.c:129
gl4dGetTime
double gl4dGetTime(void)
Donne le temps ecoule en millisecondes depuis ti.
Definition: gl4dummies.c:243