Ich benutze MinGW und würde gerne OpenGL 3 benutzen. Header vom Compiler sind von Mesa-3D von 1999. Also steinalt. Nach langem Googlen habe ich folgendes gefunden: http://www.opengl.org/wiki/Getting_started
Zitat:
If you will be programming for Windows, typically compilers comes with a standard OpenGL 1.1 .h and .lib. Microsoft will never update gl.h and opengl32.lib that comes with their compiler. It hasn't been updated since 1995. Basically, the solution is to use glext.h and wglext.h (wglext.h is for Windows only) which define all the GL 1.2, 1.3, 1.4, 1.5, 2.0, 2.1 and above tokens and functions. Keep reading. Also, for other compilers for Windows, the same applies : gl.h and opengl32.a is limited to GL 1.1. For Linux and others, you might want to borrow the same idea (getting function pointers for the GL functions) To access higher OpenGL functions, you would have to get the function pointers. For example, in C or C++, this is what you would do PS : The info here applies also to GL 3.0
Das Lustige ist aber immernoch, dass man ja keine Importbibliothek hat. Wie soll man das dann bitteschön benutzen?
/EDIT: In der gl3.h sind alle Funktionen durch typedefs definiert. Hach super, immernoch tonnenweise Code für nichts schreiben. Ich glaube ich lerne lieber noch schnell auf DirectX um...
Wenn du DirectX lernen möchtest ist das auchnicht verkehrt, kommt eben darauf an wie und wofür du programmieren möchtest, wenn dir der typische Windows DAU reicht dann bist du mit DirectX nicht schlecht bedient, wird nur lustig wenn du dann auf DirectX 11 willst, dann geht ohne Windows 7/Vista nichtsmehr, und die Funktionalität die DirectX 11 bringt kriegst du mit OpenGL auch unter XP, Linux derivaten usw. usf.
Das OpenGL nicht weit verbreitet ist ist übrigens - mit Verlaub - unfug.
Jetzt wird mir irgendwie klar, warum OpenGL keine große Verbreitung hat...
Das ist nur unter Windows so....weil M$ nun mal möchte das du DirectX benutzt...unter Linux und ich glaube auch allen anderen Betriebssystemen (Mac, BSD, ...) kommt der OpenGL-Header einfach mit dem Grafiktreiber. Da brauchst du auch nicht mit irgendwelchen Funktionspointern rumfummeln.
OpenGL ist übrigens der Industrie-Standard für 3D-Grafik. Linux und Mac nutzen OpenGL, auch die Playstation nutzt OpenGL. Ist sicher weiter verbreitet als DirectX.
Bei GLEW kann ich die OpenGL Funktionen aber nicht einfach so benutzen, sondern muss eben die Funktionen mit dem Präfix glew benutzen. Das ist nichts halbes und nichts ganzes.
Es kann doch nicht so schwer sein, es muss doch irgendwo ein Alles-Drin-Packet geben!?!?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
csderats hat geschrieben:
Es kann doch nicht so schwer sein, es muss doch irgendwo ein Alles-Drin-Packet geben!?!?
Aber das ist nicht das Prinzip von OpenGL. Denn OpenGL hat einen Kern und zusätzlich dazu gibt es Erweiterungen. Warum der Header von opengl.org so komisch aufgebaut ist. Dafür gibt es eine ganz einfache Erklärung. Die Treiber installieren/registrieren eine DLL im Windows. Die OpenGL32.dll greift auf diese DLLs zu sobald OpenGL erstellt werden soll. Die OpenGL32.dll selber hat kaum funktionalität sondern sie bietet nur die Möglichkeit auf die Treiberbestandteile zuzugreifen ohne genau zu wissen wie die aussehen. Denn du kannst 1 Karte von ATI/AMD in deine System haben und eine von NVidia. Aus genau diesem Grund sind die ganzen Funktionen in den Headern alle nur Typen. Denn du musst die Pointer mittels wglGetProcAddress erfragen. Eine Methode die wieder aus dem Treiber kommt. Deswegen kann man das nicht statisch linken. Was bei 2 unterschiedlichen Herstellern auch nahezu unmöglich wäre. Außerdem kann man bei dynamischen Linken auch auf das Fehlen von Erweiterungen reagieren etc.
Wenn du bei DirectX neue Funktionen haben willst musst im übrigen auf eine komplett neue DirectX Version zurückgreifen. Damit ist der bereits geschriebene Code hinfällig (funktioniert nicht mehr) und wenn du Glück hast (OpenGL 3.0 = DX 10+) dann benötigst du auch noch eine neue Platform (Vista+). Bei OpenGL nicht.
Ich weiß allerdings nicht warum dich ein Präfix so sehr stört. OpenGL bleibt OpenGL. Ob es nun glew heißt oder gl. In den Dokumentationen zu den Erweiterungen wird auf das GL im übrigen auch überall verzichtet. Und von glew habe ich bisher auch nur gutes gehört. Aber na ja. Kann ja nicht jeder so etwas wie die dglOpenGL.pas haben.
Registriert: Sa Mär 14, 2009 17:48 Beiträge: 99
Programmiersprache: D, Java, C++
csderats hat geschrieben:
Bei GLEW kann ich die OpenGL Funktionen aber nicht einfach so benutzen, sondern muss eben die Funktionen mit dem Präfix glew benutzen. Das ist nichts halbes und nichts ganzes.
Es kann doch nicht so schwer sein, es muss doch irgendwo ein Alles-Drin-Packet geben!?!?
Quatsch, die funktionspointer die von glew initialisiert werden haben als präfix auch nur ein gl, du kannst die OpenGL Funktionen also wie gewohnt aufrufen. Die Funktionen mit dem "glew" als Prefix sind glew Spezifisch, diese initialisieren bspw. deine Funktionspointer, erstellen dir nen Context, laden extensions usw. usf.
Gucks dir an, dass ist das was du suchst . Du kannst bis einschließlich OpenGL 3 alle Core & Extension Funktionen nutzen.
// Edit: Siehe auch hier: http://glew.sourceforge.net/advanced.html unter "Separate Namespace", du hast du glXXX Funktionen immer als alias auf die glewXXX Funktionen, warum wird erklärt.
(btw. GLee ist ja mal ziemlich cool, der Sourcecode wird vor dem Kompilieren von einem Script generiert - Was aber auch sinnvoll ist, wenn man bedenkt, dass der Src fast nur dasselbe ist. Anyway werde ich jetzt GLEW benutzen.)
Also ist GLEW_GET_VAR(x) dé facto x. Und __GLEW_VERSION_3_0 ist so im Header definiert:
Code:
GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_3_0;
Code:
#define GLEW_VAR_EXPORT GLEWAPI
#define GLEWAPI extern __declspec(dllimport)
Also sieht GLEW_VERSION_3_0 nach dem Präprozessor so aus:
Code:
__GLEW_VERSION_3_0()
In der glew32.dll ist diese Funktion auch enthalten, aber der Linker scheint sie in der Importbibliothek nicht zu finden!?
/EDIT: Ich habe mir jetzt kurzerhand eine neue Importbibliothek für MinGW erstellt (1): http://dl.28398.org/libglew32.dll.a Die ist ca. 2 MiB groß. Die Originale war nur ca. 300 kB groß, offenbar fehlten da viele Funktionen. Jetzt läuft es.
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.