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 :

Shader OpenGL dans Delphi XE5


Sujet :

Langage Delphi

  1. #21
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par anapurna Voir le message
    Delphi est déjà livré avec l'unité OpenGL, mais celle-ci est obsolète .
    par curiosité ? même pour les dernières versions ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #22
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Bonjour et merci le montagnard,
    J'ai importé dlgopengl. Ca me pose un problème car quand je crée la forme par
    DC:=GetDC(batdisgnfrm.perspanel.Handle);
    SetupPixelFormat(DC);
    RC:=wglCreateContext(DC); //makes OpenGL window out of DC
    wglMakeCurrent(DC, RC); //makes OpenGL window active
    GLInit; //initialize vue projection ...OpenGL
    Dans l'execution, il n'accepte pas la ligne "RC:=wglCreateContext(DC);"
    La valeur de DC est très élevée et il bloque.
    Ca ne se passait pas avec l'opengl que j'avais.

    Merci d'avance,

    Fred

  3. #23
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Pardon,
    C'est "glmatrixmode(GL_PROJECTION) qu'il n'accepte pas.
    Il s'arrète avec une exception

  4. #24
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 410
    Points : 5 801
    Points
    5 801
    Par défaut
    salut

    pour @sergio ... sur les dernieres version je ne sais pas ... ont il fait evoluer l'unité pour cela il faudrais que j'ai les sources, je n'ai pas les moyens
    de m'acheter la version avec les sources ...

    pour @AlfredKr il nous est difficile de repondre sans voir le debut d'une esquise d'un bout de code
    l'openg gl est il bien initialisé quand tu fait appel à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glmatrixmode(GL_PROJECTION)
    cette fonction ne devrais etre appeller quand dans la methode onpaint de ton element fenêtré
    d'apres ce que j'ai vu c'est celle d'un panel
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #25
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Avec l’opengl initial ça fonctionnait parfaitement.
    Est-ce que cette instruction réagit différemment avec les 2 «*OpenGL*» ?
    Théoriquement, si après cette instruction j’écris [EDIT] «*glloadidentitymatrix Glloadidentity il ne peut pas y avoir un débordement du stack car cette dernière instruction réinitialise la pile de projection.

    Je vais essayer d’enlever ce couple d’instructions.
    Je passe souvent par ces instructions car dans mon programme l’utilisateur modifie les position, direction et le Near du glulookat.
    Concernant l’utilisation du panel,je me suis aperçu que le dessin 3D sur un paintbox ne fonctionne pas.
    Le programme fonctionne sans faute avec l’opengl original

    Merci
    Cordialement
    Fred

  6. #26
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 410
    Points : 5 801
    Points
    5 801
    Par défaut
    salut

    tu n'utiliserais pas glLoadIdentity entre un glBegin et un glEnd ?
    ceci declenche un GL_INVALID_OPERATION

    La fonction glLoadIdentity remplace la matrice actuelle par la matrice unitaire
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  7. #27
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Non, non,
    je l'utilise juste après chaque glmatrixmode pour l'initialiser.
    L'erreur arrive sur la ligne de glloadidentity (ACCES VIOLATION)
    Questions :
    Faut-il rappeler le couple glmatrixmode(GL_PROJECTION)/glidentity avant un glulookat ou un glfrustum ?
    Pourquoi le programme fonctionne vraiment très bien avec l'ancien opengl ?

  8. #28
    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 430
    Points
    28 430
    Par défaut
    parceque l'ancienne unité contient une section d'initialisation, il suffit de l'ajouter dans le Uses avec les autres (de préférence avant) ou d'ajouter ce code dans ton projet avec System.Math

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    begin
      SetExceptionMask([exInvalidOp..exPrecision]);
    end.
    EDIT: dans les derniers Delphi il y a une unité complémentaire Winapi.OpenGLext
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #29
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Bonjour Mr TOTH,
    Merci pour votre réponse.
    D'abord voici quelques détails:
    - J'ai delphi XE5 pro.
    - Je travaille avec un portable PC dont l'écran est un 12.5".
    - Jusqu'à aujourd'hui, dans mon programme c'était une plateforme 64 b. En modifiant en 32 b, l'erreur fatale ne se produit pas au même endroit.
    - La surface dans laquelle est dessiné l'objet en perspective (un bâtiment) en 3D est un panel. Je ne voulais pas utiliser une forme entière lui étant dévouée parce que je voulais placer un écran paintbox auxiliaire qui me permettait de modifier les position, focale et direction de la caméra. En dynamique j'avais le bâtiment qui se déplaçait automatiquement. Tout ceci fonctionne et fonctionnait à merveille avec l'opengl de base inclus dans le delphi que j'ai acheté il y a plus de 5 ans à sa sortie.
    J'ai opté pour un panel car ça ne passait pas avec un paintbox. Je ne sais pas pourquoi.
    Je n'ai pas encore essayé de dessiner dans une forme annexe avec le nouveau dglopengl.

    Ca a l'air de bloquer à ou après l'initialisation de prise en main de l'écran.
    Voici la procédure:

    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
     
    procedure GLInit;
    const
       light0_position:TGLArrayf4=( 0.0, 5.0, 5.0, 1.0);
       ambient:  TGLArrayf4=( 0.98, 0.878, 0.478, 1.0);
    var
      stri : string;
    begin
      SetExceptionMask([exInvalidOp..exPrecision]);
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity;
      with batdisgnfrm.perspanel do
      glFrustum(-xfrustum, xfrustum, -xfrustum * height / width, xfrustum * height / width, poseecran, 12000.0);
    //  glFrustum(-1.0, 1.0, -1.0, 1.0, poseecran, 12000.0);
      glMatrixMode(GL_MODELVIEW);
      glLoadIdentity;
      glEnable(GL_DEPTH_TEST);
      glclearcolor(0.0, 0.0, 0.0, 1.0);
    //  glclearcolor(0.149, 0.490, 0.929, 1.0); // ciel
      glEnable(GL_LIGHTING);
      glLightfv(GL_LIGHT0, GL_POSITION, @light0_position);
      glLightfv(GL_LIGHT0, GL_AMBIENT, @ambient);
      glEnable(GL_LIGHT0);
      gldisable(GL_LIGHTING);
    //  stri := glgetstring(GL_VERSION);
    //  showmessage(stri);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure Tbatdisgnfrm.FormCreate(Sender: TObject);
    begin
      DC:=GetDC(batdisgnfrm.perspanel.Handle);
      SetupPixelFormat(DC);
      RC:=wglCreateContext(DC);
      wglMakeCurrent(DC, RC);
      GLInit;
    end;
    Glinit est appelé par formcreate et une autre fois quand je modifie glulookat.

    Votre "setexception..." n'a pas résolu le problème. Je l'avais placé au début
    Voilà.
    N'hesitez pas à me proposer d'autres investigations si nécessaire.

    Est-ce que votre openglext serait plus sûr pour mon cas ?

    Merci encore
    cordialement
    Fred

  10. #30
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Voici un dessin de la form en exe
    Nom : bat3D.png
Affichages : 302
Taille : 167,3 Ko

  11. #31
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 410
    Points : 5 801
    Points
    5 801
    Par défaut
    salut

    quelque petites question

    dans ton setupPixelFormat tu fait bien un truc de ce genre là ?
    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 
       nPixelFormat: Integer; 
       pfd: TPIXELFORMATDESCRIPTOR; 
    Begin 
        Result := False;
        FillChar(pfd, SizeOf(TPIXELFORMATDESCRIPTOR),0); 
        pfd.nSize         := sizeof(TPixelFormatDescriptor);  // Size of this structure 
        pfd.nVersion    := 1;  // Version number 
        pfd.dwFlags     := PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
        pfd.iPixelType  := PFD_TYPE_RGBA;      // RGBA pixel values 
        pfd.cColorBits  := 24; 
        pfd.cDepthBits := 24; 
        pfd.iLayerType:= PFD_MAIN_PLANE; // Layer type 
        SetLastError(0); // on remet les erreurs a zero
         nPixelFormat := ChoosePixelFormat(GlMemDC, @pfd); 
         If nPixelFormat <> 0 then 
         Begin 
            if not SetPixelFormat(GlMemDC, nPixelFormat, @pfd) then 
                raise Exception.CreateFmt('Unable to Set Pixel Format  %d ', [getlasterror]);
         end 
         else 
           raise Exception.CreateFmt(''Unable to Pick Pixel Format %d ', [getlasterror]);
        Result := true;
    Quelle type de valeur est DC ? THandle,integer,... ?

    D'apres ce que tu dis
    - Jusqu'à aujourd'hui, dans mon programme c'était une plateforme 64 b. En modifiant en 32 b, l'erreur fatale ne se produit pas au même endroit.
    cela ressemble fortement a un soucis d'étendu(changement de type)
    tu n'utiliserais pas des Extended dans ton code ?

    ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetExceptionMask([exInvalidOp..exPrecision]);
    n'a besoin d'etre appelé qu'une seul fois
    c'est pour "trapper les erreur mathematique due aux nombres reel"

    de plus si tu veut utiliser un tpanel il faut que tu accede a son canvas pour ce faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TPanel = class(ExtCtrls.TPanel)
      public
        property Canvas;             // TPanel contient un canvas qu'il faut publié!
      end;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  12. #32
    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 430
    Points
    28 430
    Par défaut
    j'ai voulu tester ton code mais il manque la moitié des choses

    sinon j'aime bien utiliser un TFrame pour OpenGL

    https://www.developpez.net/forums/d1...ame-plusieurs/
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  13. #33
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Bonjour,
    Je vais essayer de répondre le plus clairement possible et si possible à toutes tes interrogations.
    D'abord, j'avais oublié de mentionner que j'utilise des "double" pour des glfloatf, en toute rigueur je devrai utiliser des Simple.
    Bon, voici mes réponses.
    - ça ne me dérangerait pas de remplacer le panel par un frame. Comme ça marchait avec opengl, tu penses bien que j'ai utilisé le handle du panel et la bonne unité pour le DC.
    Je te communique les codes
    Voici les déclarations de DC et RC:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      DC:HDC;
      RC:HGLRC;
    Voici ce qui manquait concernant la partie opengl

    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
     
    procedure setupPixelFormat(DC:HDC);
    const
       pfd:TPIXELFORMATDESCRIPTOR = (
            nSize:sizeof(TPIXELFORMATDESCRIPTOR);	// size
            nVersion:1;			// version
            dwFlags:PFD_SUPPORT_OPENGL or PFD_DRAW_TO_WINDOW or
                    PFD_DOUBLEBUFFER;	// support double-buffering
            iPixelType:PFD_TYPE_RGBA;	// color type
            cColorBits:24;			// preferred color depth
            cRedBits:0; cRedShift:0;	// color bits (ignored)
            cGreenBits:0;  cGreenShift:0;
            cBlueBits:0; cBlueShift:0;
            cAlphaBits:0;  cAlphaShift:0;   // no alpha buffer
            cAccumBits: 0;
            cAccumRedBits: 0;  		// no accumulation buffer,
            cAccumGreenBits: 0;     	// accum bits (ignored)
            cAccumBlueBits: 0;
            cAccumAlphaBits: 0;
            cDepthBits:16;			// depth buffer
            cStencilBits:0;			// no stencil buffer
            cAuxBuffers:0;			// no auxiliary buffers
            iLayerType:PFD_MAIN_PLANE;  	// main layer
       bReserved: 0;
       dwLayerMask: 0;
       dwVisibleMask: 0;
       dwDamageMask: 0;
       );
    var
      pixelFormat:integer;
    begin
      pixelFormat := ChoosePixelFormat(DC, @pfd);
      if (pixelFormat = 0) then exit;
      if (SetPixelFormat(DC, pixelFormat, @pfd) <> TRUE) then exit;
    end;
    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
     
    procedure GLInit;
    const
       light0_position:TGLArrayf4=( 0.0, 5.0, 5.0, 1.0);
       ambient:  TGLArrayf4=( 0.98, 0.878, 0.478, 1.0);
    var
      stri : string;
    begin
      SetExceptionMask([exInvalidOp..exPrecision]);
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity;
      with batdisgnfrm.perspanel do
      glFrustum(-xfrustum, xfrustum, -xfrustum * height / width, xfrustum * height / width, poseecran, 12000.0);
      glMatrixMode(GL_MODELVIEW);
      glLoadIdentity;
      glEnable(GL_DEPTH_TEST);
      glclearcolor(0.0, 0.0, 0.0, 1.0);
      glEnable(GL_LIGHTING);
      glLightfv(GL_LIGHT0, GL_POSITION, @light0_position);
      glLightfv(GL_LIGHT0, GL_AMBIENT, @ambient);
      glEnable(GL_LIGHT0);
      gldisable(GL_LIGHTING);
    end;
    procédures
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure Tbatdisgnfrm.FormDestroy(Sender: TObject);
    begin
      wglmakecurrent(dc,0);
      wgldeletecontext(RC);
    end;
     
    procedure Tbatdisgnfrm.FormPaint(Sender: TObject);
    begin
      glinit;
      draw;
    end;
    La procédure draw met dans le buffer du pipeline tous les éléments du bâtiment et l'envoie dans le panel.
    Pour anapurna:
    C'est vrai que dans pixelformatdescriptor je ne gère pas les erreurs.
    Je pourrai le faire.
    Je n'utilise jamais d'Extended.

    Les autres feuilles de cette forme m'aident à créer et positionner les poteaux et voiles sous chaque plancher. Ensuite j'effectue une analyse temporelle du bâtiment ainsi créé durant un séisme horizontal.

    Cordialement,

    Fred

  14. #34
    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 430
    Points
    28 430
    Par défaut
    Citation Envoyé par AlfredKr Voir le message
    Bonjour,
    Je vais essayer de répondre le plus clairement possible et si possible à toutes tes interrogations.
    D'abord, j'avais oublié de mentionner que j'utilise des "double" pour des glfloatf, en toute rigueur je devrai utiliser des Simple.
    euh...dans OpenGL toutes les fonctions qui se terminent pas "f" (float) attendent des Single, et celles qui se terminent pas "d" (double) des Double...et on peut avoir les deux comme glVertex3f ou glVertex3d

    Citation Envoyé par AlfredKr Voir le message
    Bon, voici mes réponses.
    - ça ne me dérangerait pas de remplacer le panel par un frame. Comme ça marchait avec opengl, tu penses bien que j'ai utilisé le handle du panel et la bonne unité pour le DC.
    il y a tout de même un défaut dans ta logique puisque tu dessines dans le Handle du Panel sur le OnPaint de la fiche qui possède son propre Handle, ça peut fonctionner mais ce n'est pas logique. Si tu regardes mon code de TGLFrame je surcharge les méthodes adaptée aux besoins.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  15. #35
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Bonjour Paul et Anapurna,
    D'abord avec mon delphi XE5 pro je n'ai pas de Tframe. Comment l'obtenir ?
    Le programme bloque à la création de la form à l'instruction "RC:=wglCreateContext(DC)"

    Question à Anapurna:
    Est-ce que dglopengl est valable avec delphi XE5 pro ?
    Dans dglopengl.pas, la fonction createrenderingcontext regroupe toutes les fonctions de l'écran 3D->2D.
    Le PFD et la création du context.
    Peut-être que dans le formcreate il faut seulement écrire DC:=GetDC(batdisgnfrm.perspanel.Handle) et ensuite appeler createrenderingcontext qui, aussi, remplacera cette fonction.
    J'ai essayé et obtiens toujours l'erreur !!!

    Cordialement,

    Fred

  16. #36
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Hourrah !!!!Hourrah !!!
    J'ai trouvé la solution à mon problème.
    Avec dglopengl il faut ce formcreate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure Tbatdisgnfrm.FormCreate(Sender: TObject);
    var
      opt : TRCoptions;
    begin
      InitOpenGL;
      DC:=GetDC(batdisgnfrm.perspanel.Handle);
      opt := [opDoubleBuffered];
      RC := CreateRenderingContext(DC, opt, 24, 24,0, 0, 0, 0);
      SetupPixelFormat(DC);
      ActivateRenderingContext(DC, RC);
      GLInit;
    end;
    Avec ça, ca fonctionne, je l'espère comme avant ...
    Bonnes fêtes de Pâques

    Fred

  17. #37
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    J'ai oublié de mentionner que la réponse était dans le site ("ici") de chargement de dglopengl.pas communiqué par Anapurna.
    Le code suivant qui m'a aidé se trouve dans dglopengl.html.
    Soit
    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
     
    procedure MyGLInit;
    begin
      InitOpenGL; // Don't forget, or first gl-Call will result in an access violation!
      MyDC := GetDC(...);
      MyRC := CreateRenderingContext(...);
      ActivateRenderingContext(MyDC, MyRC); // Necessary, will also read some extension
      ...
    end;
     
    // After doing the above initialisation, you're ready to use all OpenGL-Functions and extensions your card supports. And also don't forget to release your context properly when exiting :
     
    procedure MyDeInit;
    begin
      DeactivateRenderingContext; // Deactivates the current context
      wglDeleteContext(myRC);
      ReleaseDC(Handle, myDC);
    end;
    Merci encore à vous 2
    Paul TOTH et Anapurna

    Fred

  18. #38
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Bonjour,

    J'ai relancé cette discussion parce qu'en l'indiquant comme résolue et comme la finalité se trouve en 2ème feuillet, le lecteur intéressé n'aurait pas vu le résultat final.

    Cordialement,

    Fred

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 30
    Dernier message: 12/12/2013, 10h37
  2. Shaders dans OpenGL 4
    Par forum dans le forum Contribuez
    Réponses: 0
    Dernier message: 10/07/2012, 21h37
  3. Arrêt de l'exécution d'une requête MySQL dans DELPHI.
    Par joelmarc dans le forum Bases de données
    Réponses: 9
    Dernier message: 11/10/2004, 17h11
  4. [Débutant] Modifs dans Delphi
    Par J-P-B dans le forum XMLRAD
    Réponses: 6
    Dernier message: 20/06/2003, 16h55

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