Anfängerfragen zu OpenGL unter Windows
-
Hallo,
unter Linux bin ich ein wenig mit OpenGL vertraut, doch nun möchte ich auch unter Windows programmieren, und zwar unter Verwendung von Version 3 oder höher. Dabei sind mir einige Zusammenhänge noch nicht klar.
Die Grafikkarten in meinen Rechnern sind beide OpenGL-3-fähig (eine Radeon und eine NVidia). Auch die Grafiktreiber sind relativ neu AMD bzw, NVidia. Von daher müsste es funktionieren. Dann habe ich mich ein wenig im Rechner umgeschaut und unter C:\Programme\Microsoft SDKs ... den Header GL\gl.h entdeckt. Schock, das Teil ist vom vorigen Jahrhundert (Version 1.1). Da muss wohl was neues her, aber auch das dürfte kein großes Problem sein.
Was ich nicht kapiere, ist die Funktion der anderen entdeckten Dateien:
OpenGL32.lib unter Microsoft SDKs. Wozu? Ich dachte, die Funktionen steckten direkt in der Grafikkarte. Ähnliche Frage zu opengl.dll in system32. Wozu, wenn die Funktionen in der Grafikkarte präsent sind?
Sorry, jemandem, der in der Sache steckt, mögen die Fragen ziemlich doof erscheinen. Wahrscheinlich sind sie so blöd, dass ich bisher noch keine vernünftige Antwort darauf gefunden habe.
-
Windows bringt nur eine grundlegende OpenGL Implementierung mit, die nur bis (ich meine) 1.2 unterstüzt. Alles was darüber hinaus geht wird vom Grafiktreiber mitgeliefert und kann über Extensions verwendet werden.
Und was verstehst du unter Funktionen, die auf der Grafikkarte präsent sind? OpenGL ist eine Schnittstelle, die vom Grafikkartentreiber implementiert wird. Dieser sorgt dafür das wenn du OpenGL Funktionen aufrufst, entsprechend Befehle an die Grafikkarte geschickt werden. Daher gibt es da natürlich eine lib und dlls für.
-
glew oder glut geben dir die anderen OpenGL-Funktionen.
-
glut nicht, glew schon, wobei glew inkompatibel mit OpenGl 3+ Core ist, daher würde ich dir eher zu gl3w raten...
-
OpenGL ist eine Schnittstelle, die vom Grafikkartentreiber implementiert wird. Dieser sorgt dafür das wenn du OpenGL Funktionen aufrufst, entsprechend Befehle an die Grafikkarte geschickt werden. Daher gibt es da natürlich eine lib und dlls für.
Ich habe, wie gesagt, den neuesten Grafikkartentreiber von NVidia installiert. Dann müssten doch eigentlich eine lib und dll mit installiert sein, die die Funktionen der Karte (bis OpenGL 3.3) unterstützen, z.B. ein ähnlicher Header wie gl3.h. Und natürlich auch die entsprechende lib und dll. Ich kann sie nicht finden.
Unter Linux war, wenn ich mich recht erinnere, der Header in einem Unterordner "nividia" zu finden, während die Lib über mesa installiert werden musste (oder umgekehrt?).
-
erin schrieb:
Dann müssten doch eigentlich eine lib und dll mit installiert sein, die die Funktionen der Karte (bis OpenGL 3.3) unterstützen, z.B. ein ähnlicher Header wie gl3.h. Und natürlich auch die entsprechende lib und dll. Ich kann sie nicht finden.
Ne, ebend nicht, weil es wie gesagt nur als Erweiterung der Grundimplementierung realisiert ist. Du verwendest immer die OpenGL lib von Microsoft. Wenn du Funktionalität über 1.2 benutzen willst und es von Hand machen willst, holst du dir den aktuellen OpenGL Header von der OpenGL Seite und holst dir über die Funktion wglGetProcAddress die Funktionspointer zu den nicht in der Lib enthaltenen OpenGL Funktionen. Da es aber eine Menge wiederholter Code ist, bietet es sich an die schon genannten Bibliotheken zu nutzen, die den Teil übernehmen. Die liefern auch einen passenden OpenGL Header mit.
-
Danke, jetzt sehe ich schon ein Stück klarer. Das Verhältnis von Windows (oder besser Mircrosoft) zu OpenGL scheint ja ziemlich gestört zu sein. (Ist aber wahrscheinlich schon mehr als genug diskutiert worden) Jetzt bleibt noch die Frage, ob die Vorteile von OpenGL 3 das umständliche Verfahren rechtfertigen, oder ob es nicht besser ist, einfach bei 1.2 zu bleiben. DirectX scheidet grundsätzlich aus, weil ich das Programm primär für Linux schreibe.
-
Also unter OpenGL 3.3 Core würd ichs heutzutage nimmer tun, wenn ich die Wahl hab. Das ist imo mehr oder weniger die erste brauchbare Version...