Page 1 sur 1

[V4 Beta3] OpenGL avec double en paramètre [Résolu/Reporté]

Publié : jeu. 16/févr./2006 17:50
par Niffo
Toujours pas possible d'appeler les fonctions Opengl comme gluPerspective() sans Wraper ?

Publié : jeu. 16/févr./2006 20:49
par Fred
Non, mais tu peux utiliser 'Import "OPENGL32.lib"' pour y remedier pour l'instant.

Publié : jeu. 16/févr./2006 20:55
par Niffo
Ah oui, effectivement :)

Publié : ven. 17/févr./2006 17:45
par Niffo
Ou est mon erreur, ça me répond "POLINK: error: Unresolved external symbol 'gluxxxxxx' ?

Code : Tout sélectionner

Import "glu32.lib"
   gluPerspective__(fovy.d, aspect.d, zNear.d, zFar.d) As "gluPerspective"
   gluPickMatrix__(x.d, y.d, Width.d, Height.d, viewport.l(1)) As "gluPickMatrix"
   gluCylinder__(*qobj.l, baseRadius.d, topRadius.d, Height.d, slices.l, stacks.l) As "gluCylinder"
   gluDisk__(*qobj.l, innerRadius.d, outerRadius.d, slices.l, loops.l) As "gluDisk"
EndImport

Publié : ven. 17/févr./2006 19:16
par Flype

Code : Tout sélectionner

Import "glu32.lib" 
  gluPerspective.l(fovy.d, aspect.d, zNear.d, zFar.d) As "_gluPerspective@32" 
  gluPickMatrix.l(x.d, y.d, Width.d, Height.d, viewport.l(1)) As "_gluPickMatrix@36" 
  gluCylinder.l(*qobj.l, baseRadius.d, topRadius.d, Height.d, slices.l, stacks.l) As "_gluCylinder@36" 
  gluDisk.l(*qobj.l, innerRadius.d, outerRadius.d, slices.l, loops.l) As "_gluDisk@28" 
EndImport

Debug gluPerspective(0,0,0,0)
1/
Tu peux définir le type de la valeur de retour d'une fonction (.l, .d, etc...)
C'est à dire gluPerspective.l() plutot que gluPerspective__()
Ca te servira surement.

2/
Tu dois définir le nom exact de la fonction et au format classique çà ressemble plus souvent à çà : _fonction@8 où 8 est la taille mémoire occupé par toutes les arguments...

Voilà :D Mais par contre méfies-toi de mon code ci dessus, je l'ai corrigé sans vérifié du tout. Faudrait regarder dans l'api opengl quels sont les types des valeurs de sortie, et les tailles...

Publié : ven. 17/févr./2006 19:54
par Niffo
Ces fonctions ne retournent pas de valeur (void) ;)

Sinon, j'avais ouvert les DLL avec "Dependency Walker" en pensant voir le bon nom des fonctions, mais visiblement ce n'est pas le cas :(

Publié : sam. 18/févr./2006 0:45
par Fred
Niffo a écrit :Ces fonctions ne retournent pas de valeur (void) ;)

Sinon, j'avais ouvert les DLL avec "Dependency Walker" en pensant voir le bon nom des fonctions, mais visiblement ce n'est pas le cas :(
Le probleme c'est que tu n'y accedes pas directement, tu passes par un .lib (OpenGL32.lib dans ce cas) qui se trouve dans PureLibraries\Windows\Libraries\ . Edite le et tu devrais voir les symbols exportés.

Publié : sam. 18/févr./2006 1:43
par Flype
Editeur purebasic -> Outils -> File Viewer (Visionneuse de fichier) -> purelibraries/windows/glu32.lib -> toutes les fonctions y sont.

Publié : sam. 18/févr./2006 2:16
par Niffo
Merci à tous les deux en tous cas, ça marche bien et sans wrapper maintenant :)

D'autre part, c'est un vrai bonheur maintenant d'accéder aux extensions Opengl grâce aux prototypes et sans CallFunctionFast !

Exemple :

Code : Tout sélectionner

Prototype PFNGLBINDBUFFERARBPROC(target.l, Buffer.l)
Global glBindBufferARB_.PFNGLBINDBUFFERARBPROC
glBindBufferARB_ = wglGetProcAddress_("glBindBufferARB")