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 :
Seulement, je me heurte à deux problèmes :
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" ); ... }
- 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 :
où _XXX_ est mon d'utilisateur et et _YYY_ le nom de ma machine.
Code : Sélectionner tout - Visualiser dans une fenêtre à part glBlendFunctionEXT_XXX_@_YYY_ cannot be resolved
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.
Partager