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.![]()
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.![]()
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.
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:
Un exemple:
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 HDC GetDCEx(HWND hWnd,HRGN hrgnClip,DWORD flags);
Le résultat:
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); //...
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.
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.
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...
Partager