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

Langage Delphi Discussion :

probleme avec GlutMouseFunc()


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 5
    Points
    5
    Par défaut probleme avec GlutMouseFunc()
    Bonjour tout le monde,

    J'ai un petit soucis avec cette fonction : GlutMouseFunc... J'ai vu quelques sites qui m'ont aide, mais quand je compile, il me met : "Exception EAccessViolation in Glut32.dll..." je ne connais pas cette erreur! si quelqu'un a une solution, je suis preneur! Je suis sous delphi, et j'utilise OpenGL.

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par seb_131 Voir le message
    Bonjour tout le monde,

    J'ai un petit soucis avec cette fonction : GlutMouseFunc... J'ai vu quelques sites qui m'ont aide, mais quand je compile, il me met : "Exception EAccessViolation in Glut32.dll..." je ne connais pas cette erreur! si quelqu'un a une solution, je suis preneur! Je suis sous delphi, et j'utilise OpenGL.
    il nous faudrait le code que tu utilises pour localiser l'erreur.

    si je me souviens bien cette fonction attend l'adresse d'une fonction callback, tu as sans doute une erreur de déclaration sur GlutMouseFunc ou sa callback...voir une erreur dans l'appel.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    mon code de ma fonction :
    procedure souris (button, etat, x, y : integer) ; cdecl ;
    begin
    if (button = GLUT_LEFT_BUTTON) and (etat = GLUT_DOWN) then
    begin
    presse := true ;
    px := x ;
    py := y ;
    end;
    if (button = GLUT_LEFT_BUTTON) and (etat = GLUT_UP) then
    begin
    presse := false ;
    end;
    end;
    ensuite, je l'appelle avec :

    glutmousefunc(souris) ;

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    il me semble que GLUT sous Windows est en stdcall, et non en cdecl.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    vi, je croyais aussi ! mais si je mets stdcall, il me met que les types sont incompatibles...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 42
    Points : 51
    Points
    51
    Par défaut
    salut, essaie avec :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glutmousefunc(@souris) ;

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    arg, j'ai cru que ca allait marcher... mais ca me met la meme erreur ! merci quand meme

  8. #8
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par seb_131 Voir le message
    vi, je croyais aussi ! mais si je mets stdcall, il me met que les types sont incompatibles...
    dans ce cas la déclaration de la fonction est elle même erronée
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    malheureusment, ça ne change rien... je remplace cdecl par stdcall lors de la déclaration de la fonction, mais il me met toujours la même erreur... mais, ça ne viendrait pas de glut32.dll ?? y a-t-il plusieurs versions ? je suis vraiment paumé, là...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 42
    Points : 51
    Points
    51
    Par défaut
    je viens de vérifier de mon coté,
    perso je n'ai jamais utilisé glutmousefunc dans mes projets,
    mais lorsque j'utilise un callback, je met bien un @ devant la référence de la fonction.

    exemple (extrait de code qui qui fonctionne) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gluTessCallBack(tess,GLU_TESS_VERTEX_DATA, TCallBack( @gtVertexData) )
    il faudrait vérifier quelques points dans ton glut.pas :

    glutmousefunc doit etre déclaré en stdcall (si tu est bien sur windows...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    glutMouseFunc: procedure(f: TGlut4IntCallback); stdcall;
    par contre le callback est bien en cdecl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     TGlut4IntCallback = procedure(v1, v2, v3, v4: Integer); cdecl;
    à tout hasard, il faudrait essayer comme je fait dans mes sources, ca donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    glutmousefunc(TGlut4IntCallback (@souris)) ;
    pour voir si ca change quelque chose...

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    grrr, ca m'énerve ! ça ne marche pas non plus... toujours la meme erreur ! je ne comprend vraiment pas... merci de t'etre donné autant de mal, DenDemble !

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    au fait, y a-t-il un endroit particulier où on doit appeler cette fonction ?? il faut créer une nouvelle procedure, ou bien le mettre dans une procedure comme glDraw, ou glInit ?? parce que pour l'instant, cette fonction est appelée dans la procedure glDraw...

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    j'ai réussis à régler l'erreur, mais apparament, je n'arrive pas trop à utiliser cette fonction... quelqu'un pourrait me donner un exemple ?? genre, comment faire apparaitre un cube en cliquant avec la souris ?? ça ne marche pas... besoin d'aide, encore... lol

  14. #14
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par seb_131 Voir le message
    j'ai réussis à régler l'erreur, mais apparament, je n'arrive pas trop à utiliser cette fonction... quelqu'un pourrait me donner un exemple ?? genre, comment faire apparaitre un cube en cliquant avec la souris ?? ça ne marche pas... besoin d'aide, encore... lol
    bon après vérification, glutMouseFunc est stdcall sous Windows MAIS la fonction en paramètre est bien cdecl.

    l'appel à glutMouseFunc doit se faire lors de l'initialisation de ton application, elle reviendrait sous Delphi à définir TForm1.OnMouseDown dans le constructor :

    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
     
    var
      i : integer;
      s : string;
      p : pchar;
    begin
      for i:=0 to ParamCount do s:=s+ParamStr(i)+' ';
      i:=ParamCount+1; p:=pchar(s);
      glutInit(i,p); 
     
      glutInitWindowPosition(0, 0);
      glutInitWindowSize(600, 450); 
     
      glutInitDisplayMode(GLUT_RGB or GLUT_DOUBLE);
     
      glutCreateWindow('Test'); // Application.CreateForm(Test, TTest)
     
      glutDisplayFunc(@draw); // OnPaint
      glutReshapeFunc(@reshape); // OnResize
      glutKeyboardFunc(@key); // OnKeyDown
      glutMouseFunc(@mouse); // OnMouseDown
     
      glutMainLoop; // Application.Run
    end.
    il ne reste plus qu'à définir les fontions callback
    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
    34
    35
    36
     
    procedure reshape(width,height:longint); cdecl;
    var
      aspect : glFloat;
    begin
      aspect := width/height;
      glViewport(0, 0, width, height);
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity();
      glOrtho(-6.0 * aspect, 6.0 * aspect, -6.0, 6.0, -6.0, 6.0);
      glMatrixMode(GL_MODELVIEW);
    end;
     
     
    procedure key(k:char;x,y:longint); cdecl;
    begin
      case k of
        #27 :
          halt(0);
      end;
    end;
     
    procedure mouse(button, state, x, y: integer); cdecl;
    begin
      halt(0);
    end;
     
    procedure draw; cdecl;
    var
      i : GLint;
    begin
      glClear(GL_COLOR_BUFFER_BIT);
    // ...
      glFlush();
      glutSwapBuffers();
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. probleme avec GlutMouseFunc()
    Par seb_131 dans le forum GLUT
    Réponses: 1
    Dernier message: 18/06/2009, 15h25
  2. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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