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 :

[OpenGl] fonction wglGetProcAddress


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Par défaut [OpenGl] fonction wglGetProcAddress
    Bonjour,

    je débute avec OpenGl et j'essaie d'apprendre un peu à utiliser cette bibliothéque en suivant le cours de NEHE.
    Je suis sous Linux et je combine le cours avec GTK+en utilisant GtkGlExt. J'en suis au cours 22 sur le bump mapping et je n'arrive pas à faire un rendu pour l'exemple proposé.

    NEHE cours 22

    Je ne comprends pas à quoi sert la fonction wglGetProcAddress :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glMultiTexCoord1fARB = (PFNGLMULTITEXCOORD1FARBPROC) wglGetProcAddress("glMultiTexCoord1fARB");
    Sous Linux je l'ai remplacée par glXGetProcAddressARB. J'ai également essayé gdk_gl_get_proc_address.
    Pour modifier le code pour GTK+ j'ai besoin de le comprendre un minimum. Et là j'avoue que je patoge. Peut être que mon problème d'affichage ne vient pas de là, mais j'aimerais déjà tester cette éventualité.

    Quelqu'un pourrait-il m'expliquer à quoi sert cette fonction ?
    Voici un petit récapitulatif de mes recherches.

    Merci pour vos réponses.

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 034
    Billets dans le blog
    12
    Par défaut
    wglGetProcAddress te permet de récupérer la fonction d'extension (ARB, EXT, ...) dont le nom est passé en argument.
    Ici elle te permet de récupérer la fonction d'assignation de coordonnées de texture 1 Dimension en version multi-texturing.
    Je suppose que glXGetProcAddress fait la même chose, ainsi que gdk_gl_get_proc_address. Par contre, il faut vérifier la valeur de retour (le pointeur sur la fonction). Peut-être est-il nul et à ce moment là tu n'as pas accès au multitexturing et donc aux effets de bump-mapping qui nécessitent le multiteexturing. Si c'est le cas, je te conseille de mettre tes pilotes de carte graphique à jour. (sous linux aussi OpenGL est fourni avec le pilote de carte graphique ?)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre confirmé Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Par défaut
    Merci pour ta réponse.

    Citation Envoyé par dragonjoker59 Voir le message
    Par contre, il faut vérifier la valeur de retour (le pointeur sur la fonction). Peut-être est-il nul et à ce moment là tu n'as pas accès au multitexturing et donc aux effets de bump-mapping qui nécessitent le multiteexturing. Si c'est le cas, je te conseille de mettre tes pilotes de carte graphique à jour.
    Le pointeur sur la fonction n'est pas nul, j'ai vérifié. Je vais expliqué un peu mieux mon problème. Dans l'exemple du cours de Nehe, les variables sont déclarées au début du code et ça suffit.
    Dans le cours on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PFNGLMULTITEXCOORD1FARBPROC    glMultiTexCoord1fARB    = NULL;
    PFNGLMULTITEXCOORD2FARBPROC    glMultiTexCoord2fARB    = NULL;
    PFNGLMULTITEXCOORD3FARBPROC    glMultiTexCoord3fARB    = NULL;
    PFNGLMULTITEXCOORD4FARBPROC    glMultiTexCoord4fARB    = NULL;
    PFNGLACTIVETEXTUREARBPROC    glActiveTextureARB    = NULL;
    PFNGLCLIENTACTIVETEXTUREARBPROC    glClientActiveTextureARB= NULL;
    Et voici la fonction du cours où wglGetProcAddress est utilisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    bool initMultitexture(void) {
    	char *extensions;
    	extensions=strdup((char *) glGetString(GL_EXTENSIONS));			// Fetch Extension String
    	int len=strlen(extensions);
    	for (int i=0; i<len; i++)						// Separate It By Newline Instead Of Blank
    		if (extensions[i]==' ') extensions[i]='\n';
     
    #ifdef EXT_INFO
    	MessageBox(hWnd,extensions,"supported GL extensions",MB_OK | MB_ICONINFORMATION);
    #endif
     
    	if (isInString(extensions,"GL_ARB_multitexture")			// Is Multitexturing Supported?
    		&& __ARB_ENABLE							// Override Flag
    		&& isInString(extensions,"GL_EXT_texture_env_combine"))		// texture-environment-combining supported?
    	{       
    		glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB,&maxTexelUnits);
    		glMultiTexCoord1fARB = (PFNGLMULTITEXCOORD1FARBPROC) wglGetProcAddress("glMultiTexCoord1fARB");
    		glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC) wglGetProcAddress("glMultiTexCoord2fARB");
    		glMultiTexCoord3fARB = (PFNGLMULTITEXCOORD3FARBPROC) wglGetProcAddress("glMultiTexCoord3fARB");
    		glMultiTexCoord4fARB = (PFNGLMULTITEXCOORD4FARBPROC) wglGetProcAddress("glMultiTexCoord4fARB");
    		glActiveTextureARB   = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress("glActiveTextureARB");
    		glClientActiveTextureARB= (PFNGLCLIENTACTIVETEXTUREARBPROC) wglGetProcAddress("glClientActiveTextureARB");
     
    #ifdef EXT_INFO
    		MessageBox(hWnd,"The GL_ARB_multitexture extension will be used.","feature supported!",MB_OK | MB_ICONINFORMATION);
    #endif
     
    		return true;
    	}
    	useMultitexture=false;							// We Can't Use It If It Isn't Supported!
    	return false;
    }
    Et plus tard pour créer la vue on à dans une autre fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                glMultiTexCoord2fARB(GL_TEXTURE0_ARB,data[5*i], data[5*i+1]);
                glMultiTexCoord2fARB(GL_TEXTURE1_ARB,data[5*i]+c[0], data[5*i+1]+c[1]);
    Pour mon programme GTK j'ai coupé le code en fonctions et pour chaque fonction j'associe des paramètres. Jusqu'à la rien de spécial. Mais je ne sais pas du tout ce que je dois faire avec ces pointeurs. S'il faut que je les passe en argument à l'autre fonction ? sous quelle forme ? comment utiliser la fonction avec ce pointeur ? Vraiment c'est une enigme pour moi
    J'ai une structure qui passe les variables dont j'ai besoin à mes fonctions, est ce que je peux utiliser ces pointeurs via ma structure et comment ?
    (Désolée si mes questions sont naïves. )

    Citation Envoyé par dragonjoker59 Voir le message
    (sous linux aussi OpenGL est fourni avec le pilote de carte graphique ?)
    On dirait que oui, en tout cas pour ma part je n'ai pas eu à me poser la question. Il doit y avoir des exceptions je pense mais aussi des solutions.
    Pour utiliser GtkGlExt j'ai installé ces paquets (peut être pas tous utiles) : libgtkglext1, libgtkglext1-dbg, libgtkglext1-dev, glutg3, glutg3-dev, freeglut3, freeglut3-dev, libglut3 .

  4. #4
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 034
    Billets dans le blog
    12
    Par défaut
    En fait je te conseille de déclarer tes pointeurs de fonctions en global ou en variable de classe. ça t'évitera d'avoir à te les trimballer d'une fonction à l'autre (en global c'est le meilleur choix, comme ça ce n'est pas limité à une classe)

    Sinon, pour passer un pointeur de fonction en paramètre d'une autre fonction, on fait ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void maFonction( int param1, float param2)
    {
    	// mais tu vas faire quelque chose avec tes params ?
    }
     
    void executeMaFonction( void( * p_fonction)( int, float), int param1, float param2)
    {
    	(* p_fonction)( param1, param2);
    }
     
    executeMaFonction( & maFonction, 1, 0.0f);
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

Discussions similaires

  1. [OpenGL] Fonctions non reconnues
    Par zenux dans le forum Eclipse C & C++
    Réponses: 3
    Dernier message: 08/04/2012, 00h25
  2. Fonctions de la bibliothèque OpenGL
    Par lia dans le forum OpenGL
    Réponses: 8
    Dernier message: 12/08/2006, 21h01
  3. [WD10] Utiliser une fonction OpenGL avec pointeur (int)
    Par Zoons dans le forum WinDev
    Réponses: 3
    Dernier message: 06/07/2006, 16h38
  4. Réponses: 1
    Dernier message: 22/11/2004, 10h46
  5. opengl et pointeur de fonction
    Par Oldhar dans le forum C
    Réponses: 5
    Dernier message: 06/11/2003, 23h56

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