IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

[C] proxy de libGL - questions librairies .so


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2
    Par défaut [C] proxy de libGL - questions librairies .so
    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.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2
    Par défaut une solution
    Un élement de réponse trouvé sur le code de quelqu'un qui surchargeait glXSwapBuffers pour enregister ce qui était affiché :

    Plutôt que d'utiliser LD_LIBRARY_PATH=<chemin>, avec chemin = où se situe la nouvelle 'libGL.so', exporter la variable d'environement LD_PRELOAD=<chemin>/manouvellelib.so. Ainsi les fonctions qui ne sont pas redéfinies dans 'manouvelleslib.so' sont puisées dans la librairie partagée 'libGL.so' originale.
    => plus de "glBlendFunctionEXT not found".

    Ca n'explique pas l'histoire du suffixage avec <user>@<host> des fonctions mais ça marche.


    Je pense que le problème original était donc lié à ma mauvaise connaissance des librairies Linux qu'à OpenGL. Il serait peut-être judicieux qu'un modérateur re-déplace ce topic dans [C/Linux] avant de le fermer (si besoin de fermer).

    à plus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question librairie d'arbres
    Par donkeyquote dans le forum C++
    Réponses: 1
    Dernier message: 18/10/2007, 02h02
  2. [Librairies] Questions relatives à l'impression de documents
    Par Ronin dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 07/12/2005, 15h53
  3. Question sur les Proxy
    Par Furius dans le forum Applications
    Réponses: 9
    Dernier message: 17/10/2005, 21h12
  4. Question sur les librairies .lib
    Par elvivo dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 05/10/2005, 20h06
  5. Réponses: 5
    Dernier message: 11/03/2003, 11h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo