Plusieurs fenêtres en OpenGL?
Est-il possible d'avoir openGL dans les 2 windows? comme dans les 2 fenêtres différentes (disons que le premier est de 640x480 et l'autre est de 1024x768) le rendu des choses différentes (disons une fenêtre est un rédacteur en chef et l'autre est le principal/la normale de la fenêtre d'affichage)
Bien que cette question est assez vieux, il convient de noter que la libération du comportement de plusieurs partagé contextes doivent être considérés, comme l'évolution des contextes peuvent causer partielle ou même complète de bouffées de chaleur. ("Flush", ce qui signifie toutes les commandes opengl sont exécutées avant de revenir, ce qui est un absolu clou du spectacle.)
OriginalL'auteur | 2009-01-17
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez GLUT vous pouvez utiliser le glutSetWindow() /glutGetWindow() appelle à sélectionner la bonne fenêtre (après la création d'eux avec glutCreateSubWindow()). Cependant, parfois, la SURSATURATION peut-être pas le bon outil pour le travail.
Si vous travaillez sous Windows, vous aurez envie de regarder dans le wglMakeCurrent() et wglCreateContext(). Sur OS X, il est aglSetCurrentContext() et cetera, et nécessite X11 glXMakeCurrent().
Ces fonctions activer l'actuel contexte OpenGL à qui vous pouvez rendre. Chaque plate-forme spécifique de la bibliothèque a ses propres façons de faire de la création d'une fenêtre et de la liaison d'un contexte OpenGL.
Sur Windows, une fois que vous avez acquis votre HWND et HDC pour une fenêtre (après un CreateWindow et GetDC appel). Vous pouvez généralement faire quelque chose de ce genre pour configurer OpenGL:
Vous utilisez ce code pour créer plusieurs fenêtres et lier OpenGL pour elle, à chaque fois que vous voulez dessiner sur une fenêtre spécifique, vous devez appeler wglMakeCurrent avant - vous faire quelque chose et que vous passez dans les paramètres correspondant à cette fenêtre.
Comme une note, OpenGL permet de partager des données entre différents contextes, cependant, comme par spec les données que vous pouvez partager est assez limité. Cependant, la plupart des Systèmes d'exploitation vous permettent de partager plus de données que spécifié dans le cahier des charges.
OriginalL'auteur Jasper Bekkers
Oui, c'est possible. Pour chaque fenêtre, vous aurez besoin de créer un dispositif unique et contexte de contexte render.
Avant de prendre GL appels à la fenêtre, vous devez appeler wglMakeCurrent comme ceci:
OriginalL'auteur postfuturist
Sur Windows, vous pouvez partager OpenGL objets tels que des textures et des shaders avec wglShareLists(). Habituellement, elle ne partage pas tout ce que vous aimez, en dépit de ce que MSDN dit.
OriginalL'auteur Richard Viney
J'ai fait plusieurs fenêtres OpenGL dans une application MFC avant. Voici une classe qui peuvent vous être utiles: car il ne peut y avoir un rendu en cours du contexte dans le thread de l'INTERFACE utilisateur à un moment, j'ai écrit une classe wrapper pour rendre la gestion plus facile.
SaveRestoreRC.h
//this class helps to manage multiple RCs using an RAII design pattern
SaveRestoreRC.cpp:
Maintenant dériver une classe à partir de CWnd et ajouter ces variables de membre:
Alors, dans chaque fonction membre où vous appelez les commandes OpenGL, utilisez CSaveRestoreRC de sorte que votre contexte render n'est pas de se faire défoncer.
OriginalL'auteur user244795
Si vous le souhaitez en utilisant uniquement bibliothèque glut, s'il vous plaît regardez un code par Eric Stringer.
J'ai couru l'exemple de code à Windows 7, mais j'ai dû remplacer une ligne de glutIntit à
OriginalL'auteur Cloud Cho