Registriert: Di Aug 09, 2011 07:33 Beiträge: 163
Programmiersprache: C/C++
Hey,
Ich bin gerade etwas verwirrt. Ich dachte eig. immer mit der neusten OpenGL Version zu programmieren aber dies scheint nicht der Fall zu sein. Ich habe hier letztens gelesen, dass z.B. Displaylisten in OpenGL 4.0 rausgeflogen sind oder auch Befehle wie glBegin oder glEnd nicht mehr vorhanden sein sollen. Da dies aber alle bei mir noch funktioniert, heißt es ja, dass ich eine ältere Version nehme (wobei ich 2.X vermute). Wie kann ich denn herausfinden welche Version nun exakt bei meinem Programm läuft und wie kann ich aufs neuere setzen
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
In neueren OpenGL-Versionen fallen alle Immediate-Funktionen weg, sofern man auf einen "puren" Renderkontext setzt. Sprich glBegin, glEnd, glColor, glVertex, Displayliste, etc. etc. fallen weg und man arbeitet nur noch mit VAs/VBOs und Co.
Welche Version du nutzen willst gibts du bei der Erstellung des Kontextes an, und auch ob du einen Kontext willst der rückwärtskompatibel ist (geht auch, also aktuelles OpenGL + alte Funktionen) oder einen der verschlankt ist und auf aktuelle Funktionen setzt.
Um die gewünschte Version (z.B. 3.1, 4.0) zu erhalten muss man zuerst einen normalen Renderkontext erstellen (damit man die Funktionszeiger hat), und dann mittels wglCreateContextAttribsARB (unter Windows) einen Kontext mit den gewünschten Parametern erstellen :
Code:
Attribs[0]:= WGL_CONTEXT_MAJOR_VERSION_ARB;
Attribs[1]:= MajorVersion;
Attribs[2]:= WGL_CONTEXT_MINOR_VERSION_ARB;
Attribs[3]:= MinorVersion;
MajorVersion dann z.B. 4 und Minor 0 für einen 4.0 Renderkontext.
Willst du dann noch einen nur "vorwärtskompatiblen" Kontext, der ohne Altlasten kommt, sprich bei dem immediate Funktionen nicht mehr nutzbar sind, dann muss noch folgendes Attribute dran :
Interessant ist hierbei welche Version deine Grafikkarte und der dazugehörige Treiber hat.
Eine Grafikkarte die OpenGL nur bis 2.0 unterstützt kann z.B. Probleme haben mit Funktionen für OpenGL 2.1 oder höher. Diese Funktionen umschifft der Treiber, was wesentlich langsamer ist weil die CPU das dann berechnet. (Im Grunde sollte es aber funktionieren.)
Kommt letztendlich 4 und 2 raus, also Version 4.2 ist verfügbar
Edit2// Hab nun mal bisschen probiert und es war auf 2.1 eingestellt. Ab Version 3.2 oder höher (3.3, 4.0 - 4.2) wird nix mehr gerendert bei mir - muss ich wohl mal die alten Befehle rausfischen Gibt es eigentlich eine Übersicht wo man sieht was alles entfernt wurde?
und im speziellen dies: http://www.khronos.org/files/opengl41-q ... e-card.pdf (sofern du nicht Farbenblind bist, diese... Übersicht... arbeitet viel mit Farben), das ist zwar 4.1, aber eine Referenz-Karte für 4.2 gibt es momentan (21.12.2011 22:43 GMT+1) auf der Seite nicht.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Man kann dann nur noch neue Funktionen nutzen, also VAs, VBOs und benötigt auch Shader um irgendwas zu sehen. Das führt dann dazu dass man konsequent nach neuen Standards entwickelt (bzw. entwickeln muss). Die sind dann auf passender Hardware natürlich auch teilweise performanter.
Registriert: Di Aug 09, 2011 07:33 Beiträge: 163
Programmiersprache: C/C++
Also wenn ich garkeinen Shader habe, dann wird mir auch nix angezeigt? Ich muss also mindest gl_Position festlegen und glColor (und alles was dazu gehört) mit einem Vertex-Shader und Fragment-Shader?!
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Bei nem Renderkontext der nur vorwärtskompatible ist ja, da muss man dann Shader nutzen, da es keine feste Funktionspipeline mehr gibt. Sprich man muss auch eigene Matrixberechnungen usw. machen.
Edit : Ich poste hier mal ne Funktion zum Erstellen eines Renderkontextes, bei der man auch die Versionsnummer angeben kann. Hab das während der Pulsar-Beta benutzt, im dglHeader ists nicht drin (kann ich aber bei Bedarf machen), KEINE Garantue dass es auch jederzeit und immer korrekt funktioniert :
Mitglieder in diesem Forum: 0 Mitglieder und 3 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.