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

Windows Discussion :

OpenGL et HGLRC


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut OpenGL et HGLRC
    Bonjour,

    J'aimerais n'utiliser qu'une petite partie de mon HDC pour le dédier comme surface OpenGL, de façon à obtenir une fenêtre OpenGL dans la fenêtre principale.

    Est-ce possible et comment ?
    Merci.

  2. #2
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Avec glScissor() et glViewport(), j'obtiens un glClear() correct et un dessin au bon endroit mais lors du swapBuffers(), le reste de mon hdc est tout de même mis a jour avec des valeurs indéfinies.

    J'aimerais ne pas utiliser un hwnd a l'intérieur de ma fenetre.

    EDIT : le but est d'avoir un context Opengl comme ça (voire plusieurs) : au milieu d'autres dessins GDI.

  3. #3
    Membre confirmé Avatar de zabibof
    Inscrit en
    Février 2007
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 188
    Par défaut
    Bonjour,
    Il est effectivement possible d'avoir plusieurs HDC dans une même fenêtre, pour ça, on utilise GetDCEx() à la place de GetDC().
    Voici son prototype:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HDC GetDCEx(HWND hWnd,HRGN hrgnClip,DWORD flags);
    Un exemple:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //...
    HRGN hRgn1 = CreateRectRgn(0,0,150,300);
    HRGN hRgn2 = CreateRectRgn(150,0,300,300);
    HDC hDC1 = GetDCEx(hwnd,hRgn1,DCX_INTERSECTUPDATE);
    HDC hDC2 = GetDCEx(hwnd,hRgn2,DCX_INTERSECTRGN);
    //...
    for(int i=150,i<300;++i)
          SetPixel(hDC1,200,150,RGB(255,0,0));
    //..
    HGLRC hRC = wglCreateContext(hDC2);
    //...
    Le résultat:
    Nom : fenetre_avec_2HDC.jpg
Affichages : 209
Taille : 4,6 Ko
    Remarques que l'origine du repère d'OpenGL reste au centre de la fenêtre, donc, il faut faire un changement de repère pour avoir un résultat souhaitable.
    Pour plusieurs rendu OpenGL, c'est à vérifier (je n'ai pas encore essayé), mais je pense qu'il faut créer autant de threads que le nombre de rendu.

  4. #4
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Merci! c'est exactement ce qu'il me faut
    Par contre non on n'est pas obligé d'ouvrir des threads dédiés à opengl pour plusieurs rendus, il suffit de bien se servir de wglSetCurent().
    Mais si on peut le faire, il vaut mieux, ne serait ce que pour les perfs.

    Je vais tester ta solution.

  5. #5
    Membre confirmé Avatar de zabibof
    Inscrit en
    Février 2007
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 188
    Par défaut
    Citation Envoyé par NiamorH
    Par contre non on n'est pas obligé d'ouvrir des threads dédiés à opengl pour plusieurs rendus, il suffit de bien se servir de wglSetCurent().
    Merci pour cette précision.

  6. #6
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Hum.. 2 appels à GetDCEx avec deux region séparées renvoient le même DC avec une class de fenêtre CS_OWNDC et 0x000 si j'enleve CS_OWNDC.
    Lors du SwapBuffer mon problème persiste. Peut-être cela vient des flags que j'emploie mal ? J'ai essayé pas mal de combinaisons données par la MSDN...

Discussions similaires

  1. Directx ou opengl
    Par scorpiwolf dans le forum DirectX
    Réponses: 13
    Dernier message: 07/02/2003, 08h29
  2. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27
  3. OpenGL et *.3ds
    Par tintin22 dans le forum OpenGL
    Réponses: 4
    Dernier message: 06/05/2002, 13h51
  4. OpenGL ou DirectX
    Par Nadir dans le forum DirectX
    Réponses: 6
    Dernier message: 02/05/2002, 12h48
  5. Opengl -- Les surfaces
    Par Anonymous dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/05/2002, 10h14

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