Bonjour à tous,

J'ai présentement un problème avec les entiers à passer en paramètre à OpenGL.

Voici trois définition de fonction openGL:
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
void glGetIntegerv(GLenum pname, GLint *params);
void glGetDoublev(GLenum pname, GLdouble *params);
 
int gluUnProject(GLdouble winx,
                 GLdouble winy,
                 GLdouble winz,
                 const GLdouble modelMatrix[16],
                 const GLdouble projMatrix[16],
                 const GLint viewport[4],
                 GLdouble *objx,
                 GLdouble *objy,
                 GLdouble *objz)

Je dois utiliser la fonction gluUnProject pour gérer le clic de la souris et savoir les coordonnées modifiées selon le scale, viewport ...

Voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
ParamMatrix est un réel
ParamProjection est un réel
ParamViewPort est un entier sur 2 octets
 
AppelDLL32("Opengl32.dll", "glGetDoublev",::GL_MATRIX_MODE,&ParamMatrix)
AppelDLL32("Opengl32.dll","glGetDoublev",::GL_PROJECTION_MATRIX,&ParamProjection)
AppelDLL32("Opengl32.dll", "glGetIntegerv",::GL_VIEWPORT,&ParamViewPort)
 
API("Glu32.dll", "gluUnProject",rX,rY,0.0,ParamMatrix,ParamProjection,ParamViewPort,...
    &retourX,&retourY,&retourZ)
La fonction glGetDoublev passe très bien avec les réels avec pointeur. Dès que j'arrive à la fonctione glGetIntegerv, le parametre entier ne passe passe pas. J'ai essayer tout les types d'entier (signe ou non ... 2 4 8 octects ..) J'ai également essayer d'utiliser le type numérique, réels, monétaire, variant.

J'ai besoin de cette information pour gérer le clic de la souris. Quelqu'un a une idée pourquoi. L'erreur donné est une erreur de pile:

[WD100VM.DLL (25E60000), 10.01Bs, 01F100050o] 25E63039
[WD100VM.DLL (25E60000), 10.01Bs, 01F100050o] 25E71460 : WL_SetParam() + 81398 bytes-> INVALID, stack increased by 4
[???] 00ABB6E0
[WDTST.EXE (00000000), 10.00Af, 01F100045p] C98525F7
Pile invalide

Quelqu'un a une idée pour régler ce type de problème ?