2016-08-09 10 views
0

Als eine Folge zu Can I make opengl extension pointers global?, wo ich fragte nach OpenGL Funktionszeiger globale Variablen.Glew und mehrere opengl-Kontexte (Funktioniert es?)

Es wurde darauf hingewiesen, dass die Funktionszeiger unter Windows nur für einen einzigen OpenGL-Kontext gültig sind. Ich entschied, dass ich einfach eine Ladeprogrammbibliothek verwenden würde, um es für mich zu tun.

Ich habe bei der Umsetzung sah in glew und gl3w, die sowohl auf der opengl Website empfohlen werden, und diese beiden scheinen die Funktionszeiger in globale Variablen einfach abladen und so wird nicht funktionieren, wenn Sie mehr als eine haben window/opengl context im Prozess.

Fehle ich etwas hier, oder können diese Bibliotheken einfach nicht verwendet werden, wenn die Möglichkeit besteht, dass mehr als ein Fenster opengl in einem Prozess verwendet?

+4

Verwenden Sie GLEW MX. Tutorial zur Verwendung mit GLFW: https://blog.gvnott.com/2013/05/18/tutorial-multiple-windows-with-glfw3-and-glew-mx/ – Mars

+0

@Mars: Sie haben MX eingestellt [letzten Monat in GLEW 2.0.0] (http://glew.sourceforge.net/log.html). – genpfault

+0

Zwei Fenster/Kontexte sind nicht unbedingt zwei verschiedene Implementierungen. Wenn sie auf der gleichen Hardware laufen, ist es sehr wahrscheinlich, dass die Prozeduren für die Erweiterungen an denselben Ort gehen. Wenn Sie wirklich darüber besorgt sind, können Sie jedem Kontext einen Thread zuweisen und dann Thread Local Storage verwenden, um die Funktionszeiger zu speichern, das ist tatsächlich effektiv, wie WGL-Kontexte sowieso funktionieren. –

Antwort

1

Diese Bibliotheken funktionieren nicht mit mehreren Kontexten.

Das bedeutet nicht, dass sie nicht werden. Nur, dass sie nicht tun, was notwendig ist, um sicherzustellen, dass es in mehreren Kontexten funktioniert.

Sie würden im Allgemeinen fehlschlagen, wenn die beiden Kontexte nicht mit der gleichen OpenGL-Implementierung kommunizieren. Zum Beispiel, wenn Sie die Intel Embedded-GPU mit einem Kontext und einer separaten Grafikkarte in der anderen haben. Das OpenGL-ICD-Treibermodell macht dies jedoch etwas unwahrscheinlich (wenn auch nicht unmöglich).

Verwandte Themen