Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1578 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [OpenGL] Gestion des extensions

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[OpenGL] Gestion des extensions

n°844608
marmotte.t​ranquille
Posté le 07-09-2004 à 23:58:49  profilanswer
 

Edit : voir les derniers messages pour gérer efficacement les extensions dans OpenGL.
 
[Problème résolu]
Bonjour,
 
Pour commencer, je travaille sous Dev-c++, FLTK, OpenGL.
Des petits tests simples (genre un cube 3D qui tourne, etc...) semblent montrer que OpenGL est bien fonctionnel.
J'ai besoin d'utiliser des textures 3D (rendu de volume hardware).
La carte graphique dont je dispose (Geforce3) le supporte normalement.
Cependant le compilateur me sort un :
`glTexImage3D' undeclared (first use this function)
J'ai pourtant inclu les extensions (GL/glext.h)
 
Si je force la déclaration de glTexImage3D (dans gl.h ou glext.h) ca ne marche toujours pas (pb de liens). Ne sauriez-vous pas s'il faut une librairie spéciale ?
 
Merci


Message édité par marmotte.tranquille le 14-09-2004 à 21:33:11
mood
Publicité
Posté le 07-09-2004 à 23:58:49  profilanswer
 

n°844710
bjone
Insert booze to continue
Posté le 08-09-2004 à 02:54:21  profilanswer
 

je vais ptet dire une connerie, mais il faut récupérer le point d'entrée dynamiquement non ? (un GetProcAdress() je suppose)

n°845221
marmotte.t​ranquille
Posté le 08-09-2004 à 17:12:36  profilanswer
 

Merci, je regarde cela.
Mais mon problème serait plutôt de savoir dans quelle librairie cette fonction est déclarée.

n°845237
bjone
Insert booze to continue
Posté le 08-09-2004 à 17:27:12  profilanswer
 

grosso modo, si tu est sous Windows, nulle part.
les points d'entrée sont dans le driver OpenGl de la carte 3D.
c'est à toi de tester la présence de l'extension, et à récupérer le point d'entrée manuellement.
 
après je sais pas, il y a ptet des headers et des .lib (pour VS ou autre) chez nVidia/Ati ou autre pour tout récupérer par rapport à un niveau OpenGl (ie 1.2/1.4/1.5/2.0).
 
demande à Zeross, il code en OpenGl.

n°845239
Lam's
Profil: bas.
Posté le 08-09-2004 à 17:27:34  profilanswer
 

marmotte.tranquille a écrit :

Merci, je regarde cela.
Mais mon problème serait plutôt de savoir dans quelle librairie cette fonction est déclarée.


 
Je crois que bjone a raison : la fonction est implémentée, mais le glext.h que tu as est une vieille version.  
 
Donc, soit tu récupères un pointeur vers la fonction (ça te permet de faire un programme portable), soit tu déclares la fonction toi-même, soit tu voles le glext.h d'une implémentation plus récente.  
 
Un truc Linux par exemple, ou BSD si tu veux de la qualité. (ceci est un troll gratuit).
 

n°845248
cris56
Posté le 08-09-2004 à 17:37:46  profilanswer
 

cette declaration se trouve bien dans le glext.h de devcpp 4.9.8.0 si ca t'interesse

n°845258
marmotte.t​ranquille
Posté le 08-09-2004 à 17:53:16  profilanswer
 

Lam's a écrit :

Je crois que bjone a raison : la fonction est implémentée, mais le glext.h que tu as est une vieille version.  
 
Donc, soit tu récupères un pointeur vers la fonction (ça te permet de faire un programme portable), soit tu déclares la fonction toi-même, soit tu voles le glext.h d'une implémentation plus récente.  
 
Un truc Linux par exemple, ou BSD si tu veux de la qualité. (ceci est un troll gratuit).


 
Désolé, j'ai du mal à suivre :
- La fonction est déclarée dans 'glext.h', il faut juste définir
#define GL_GLEXT_PROTOTYPES avant d'inclure gl.h et glext.h (je viens de le voir)
- Par contre j'ai toujours un
  [Linker error] undefined reference to `glTexImage3D@40'  
- Pour utiliser GetProcAddress() j'ai vu qu'il fallait sortir un handle sur la librairie que l'on veut charger. Le probleme est que je ne connais pas cette librairie.
 
Edit : cris56 -> je viens de le voir j'avais oublié un petit truc (cf plus haut), merci :)


Message édité par marmotte.tranquille le 08-09-2004 à 17:54:19
n°845294
Lam's
Profil: bas.
Posté le 08-09-2004 à 18:30:10  profilanswer
 

marmotte.tranquille a écrit :


  [Linker error] undefined reference to `glTexImage3D@40'  


 
C'est donc que tu utilises la mauvaise librairie (le .lib).
 
As-tu downloadé les drivers nvidia ? http://developer.nvidia.com/object/sdk_home.html
 
Utilises-tu leur fichier ainsi que le .lib correct dans ta liste de linkage ?  
 
(désolé, ça fait vraiment 2 éternités que j'ai pas fait d'openGl.)

n°845324
marmotte.t​ranquille
Posté le 08-09-2004 à 19:12:36  profilanswer
 

Ca doit commencer à faire long deux éternités ;)
Mais bon ça doit être mon problème, je pensais que la lib d'opengl classique suffisait.
J'installe tout ça et je vous tiens au courant.

n°845445
marmotte.t​ranquille
Posté le 08-09-2004 à 22:19:17  profilanswer
 

Bon en fait dans leur SDK, il n'y a que les extensions propres à nVidia (que je n'utilise pas).
A priori la lib "libopengl32.a" fournie avec dev-c++ doit être < 1.2. C'est bizarre car le "glext.h" contient bien la déclaration de cette fonction : problème de version ??
Sans doute faut-il utiliser la dll windows (opengl32.dll), non ?

mood
Publicité
Posté le 08-09-2004 à 22:19:17  profilanswer
 

n°845625
bjone
Insert booze to continue
Posté le 09-09-2004 à 04:30:49  profilanswer
 

bah d'après ce que j'ai compris, sous Windows, tu utilises toujours la dll opengl32.dll, qui utilise la dll du driver de la carte 3D en fonction de la base du registre. (si y'a pas de driver déclaré, l'opengl32 fait un rendu software).
 
je suppose que la libopengl32.a doit justement "utiliser" (lier) l'opengl32.dll qui est en opengl 1.1.

n°846298
marmotte.t​ranquille
Posté le 09-09-2004 à 19:22:24  profilanswer
 

Je pense avoir trouvé la dll des drivers : "nvoglnt.dll".
D'après ce que tu dis, si je compile en liant avec libopengl32.a, je lie aussi avec opengl32.dll et nvoglnt.dll.
 
Ok je pense avoir compris il faut bien rajouter un wglGetProcAddress("glTexImage3D" );
 
 
En fait, j'ai trouvé une petite librairie (extgl) qui permet de s'affranchir de ce genre de subtilité sur http://www.levp.de/3d/
 
Merci de votre aide :hello:


Message édité par marmotte.tranquille le 10-09-2004 à 01:43:30
n°849114
retrox
Posté le 13-09-2004 à 20:18:16  profilanswer
 

Comme indiqué sur le site de Lev Povalahev, extgl n'est plus mis à jour depuis un bon moment.
 
GLEW est une nouvelle librairie basée sur extgl, un chouilla plus lourde à mettre en oeuvre, et mise à jour régulièrement. Ca se trouve ici : http://glew.sourceforge.net
 
 :hello:

n°850255
marmotte.t​ranquille
Posté le 14-09-2004 à 21:31:29  profilanswer
 

Merci, je vais éditer mon titre que ça puisse servir à d'autres personnes.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [OpenGL] Gestion des extensions

 

Sujets relatifs
gestion des temps[Javascript] gestion des longs entiers
question sur la gestion de fenetres et d'autres questions...{- Debutant -} Comment ça marche la gestion de contenu de site?
[PHP] Gestion d'un cache...Pour débutant : OpenGL ou DirectX ?
Gestion de dategestion d'affichage par page...
[CVS] & [WSAD 5] Gestion des branches : des problèmespetit pb gestion de news.
Plus de sujets relatifs à : [OpenGL] Gestion des extensions


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR