Bonjour,

je suis suis Debian et je cherche à logguer ( voir filtrer ) les appels à ma carte graphique faits via opengl.

Mon idée est d'écrire une libraririe proxy pour libGL.so qui réimplemente chaque fonction OpenGL de la manière suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
void (*glBegin_vraifonction) ( GL_ENUM );
void glBegin( GL_ENUM value ) {
  printf ( "appel à glBegin\n" );
  glBegin_vraifonction ( value );
}
 
// et à l'initialisation d'openGL
void initProxy() {
  void* vraiLibGL = dlopen ( "/usr/lib/libGL.so.XXX", RTDL_NOW );
  glBegin_vraifonction = dlsym ( laVraiLibGL , "glBegin" );
  ...
}
Seulement, je me heurte à deux problèmes :
- le premier est que je n'ai pas trouvé de fonction que semble initialiser OpenGL dans laquelle je pourrais faire appel à mon initProxy() .
- le second, auquel je ne m'attendais pas du tout, est qu'à l'execution il y a une ( et certainement plusieurs ) fonction qui n'est pas trouvée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
glBlendFunctionEXT_XXX_@_YYY_ cannot be resolved
où _XXX_ est mon d'utilisateur et et _YYY_ le nom de ma machine.
Cette fonction, glBlendFunctionEXT, est declarée dans glext.h.
Je peux essayer de refaire cette manip de proxy avec toutes les fonctions de glext.h mais dans quelle .so faudrait-il les mettre ? Il n'existe pas de libGLext.so...

Il y a sûrement des détails sur librairies partagées sous linux que je ne comprends pas encore bien. Quelqu'un pourrait-il m'expliquer pourquoi une fonction externe est suffixée avec user@machine ? et comment contourner ce problème ?

[edit]
Si ça a une incidence : j'utilise cette librairie proxy en la copiant sous le nom libGL.so.1 dans le dossier du programme avec laquelle je veux l'utiliser, puis en exportant LD_LIBRARY_PATH=.
Après je je lance mon programme opengl normalement.
[/edit]

ps
Avant de me lancer dans cette expérimentation hasardeuse j'ai quand même cherché voir si cela n'a pas été fait, en vain. Mais si cela existe je suis preneur.