Registriert: Sa Jul 10, 2010 16:22 Beiträge: 16
Programmiersprache: C++
Hi, ich habe ein paar grundlegende Fragen die ihr mir hoffentlich noch beantworten könnt:
1.) Die bei Visual Studio 2010 enthaltene gl.h besitzt ja einen total veralteten Header (glaube Version 1.2). Steht irgendwo im Netz ein aktueller Header zum Download?
2.) Mit OpenGL 3.0 und höher soll man ja VBO's verwenden. Mir scheint diese sind vor allem sinnvoll wenn man Objekte mehrfach rendern möchte. Aber ist dann der Einsatz z.B. beim Rendern einer GUI überhaupt sinnvoll? In der GUI muss ich ja jeden z.B. Button individuell behandeln und als eigenes VBO ablegen. Zudem muss dieser dann auch noch ständig verändert werden, wenn der User mit dem Button agiert. Bzw. das VBO würde genau genommen eigentlich nur einmal gerendert, da dieser i.d.R. nur dann neu gerendet wird wenn sich der Status, Größe, Position usw. geändert hat, was wiederum die Erzeugung eines neuen VBO's erfordet.
3.) Die Fixedfunction Pipeline von OpenGL ist ja deprecated. Woran kann ich nun erkennen dass eine Funktion von OpenGL mittlerweile veraltet ist. Ist dies in der http://wiki.delphigl.com/index.php/OpenGL-Funktions%C3%BCbersicht irgendwie ersichtlich? Bzw. bedeutet dieses "ARB" im Funktionsnamen dass die Funktion veraltet ist? Warum heißt es dann aber nicht z.B. glBeginARB?
zu 1) Vernünftige Betriebssysteme (aka Linux) liefern den Header eigentlich mit. Windows ist halt nicht vernünftig Ich habe keine Ahnung wo man den Header für Windows her bekommt, aber ich würde mal diesen versuchen: http://www.opengl.org/registry/#headers
zu 2) Solange du den Inhalt des VBO nur änderst und nicht seine Größe änderst ist das eigentlich ziemlich schnell. Bei mir sieht das so aus:
Ich ändere also die Buffergröße nur wenn der neue Buffer nicht in den alten passt oder mehr als 2mal so groß ist wie nötig. Dadurch pendelt sich die Buffergröße bei der benötigten Größe ein.
Alternativ kannst du natürlich auch einfach nur eine Reihe von statischen Quads in den VBO legen. Also pro Quad nur 2D-Positionen: (0,0), (0,1), (1,0), (1,1) Der Vertexshader bekommt dann pro Quad z.B. einen vec4 mit Position+Größe des Quads und schiebt die Vertices an die richtige Stelle:
Texturkoordinaten und was du sonst noch brauchst wird dann alles im Shader erzeugt.
zu 3) ARB steht für Architectural Review Board und bedeutet das die entsprechende Funktion nicht Teil von Standard-OpenGL ist, sondern zu einer ARB-Extension gehört. Häufig gibt es eine Funktion mit und ohne Namenserweiterung. Im Normalfall sind beide Funktionen äquivalent, aber es ist möglich das sie nicht gleich sein. Die Namenserweiterung ist nämlich dafür da das man das Verhalten einer Funktion noch einmal ändern kann. Es gibt auch weitere Namenserweiterungen, siehe ARB.
Zitat:
Woran kann ich nun erkennen dass eine Funktion von OpenGL mittlerweile veraltet ist.
Ich weiß nicht ob das hier im Wiki zu finden ist, da noch relativ wenige mit OpenGL 3.0+ arbeiten. In jedem Fall kannst du z.B. checken ob die Funktion in der Spezifikation auftaucht.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Warum sollte denn der OpenGL Header Bestandteil des Betriebssystems sein? Nenn mich kleinlich aber für mich wäre so etwas krautig.
Sonst kann ich dir aber zustimmen. Auf opengl.org/registry gibt es immer den neusten Header. Wobei viele auch bewusst auf Frameworks wie glew setzen. Damit ist das Handling wohl einfacher. Denn die Header auf OpenGL.org definieren nur die Prototypen und Typen. Es bleibt also noch Handarbeit an dir hängen.
Zum Thema deprecated. Die offizielle Spezification kann ich da echt nicht empfehlen. Ich blicke da drinne überhaupt nicht was jetzt deprecated ist und was nicht. Da würde ich dir eher empfehlen in die glext.h zu schauen. Di ganzen Sachen sind in defines gekappselt. GL_VERSION_1_2 und GL_VERSION_1_2_DEPRECATED. Alternativ dazu gibt es auch einen blanken gl3.h. Da sind dann nur die OpenGL3+ Sachen enthalten.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Zitat:
Alternativ kannst du natürlich auch einfach nur eine Reihe von statischen Quads in den VBO legen. Also pro Quad nur 2D-Positionen: (0,0), (0,1), (1,0), (1,1)
Wenn Du vorwärtskompatibel sein willst, bitte keine Quads verwenden, sondern Triangles.
Registriert: Sa Jul 10, 2010 16:22 Beiträge: 16
Programmiersprache: C++
Wow, das muss man sich mal auf der Zunge zergehen lassen. Weil Microsoft die Opengl-Lib und den gl.h Header aus nachvollziehbaren Gründen (zum Vorteil von DX) seit 1995 nicht mehr aktualisiert hat, hat man den glext.h Header entworfen, der dann neuere Extensions included. Da aber nicht alle Extensions von allen Grafikkarten unterstützt werden, muss man sie manuell einbinden bzw. irgendwelche libs die das machen verwenden. Sorrry, aber so einen Murks habe ich schon lange nicht mehr gesehen. Leider hat man mit dem gl3.h Header scheinbar nichts dazugelernt, da man in Zukunft auch einen gl3ext.h Header zur Verfügung stellen möchte. Wäre doch zu schön gewesen alles in die gl.h (die man dann auf opengl.org anbieten würde) zu packen.
Ich habe mir mal GLee und GLew angeschaut. Glee lässt sich nicht mit VS2010 verwenden, da die Library mit einer älteren Version kompiliert wurde. Außerdem sprechen für mich die Lizenzbedingugen der beiden Header gegen eine Verwendung. Ich möchte bei meiner Software nicht noch darauf Hinweisen müssen, dass ich diesen oder jenen Header verwende.
Registriert: Sa Jul 10, 2010 16:22 Beiträge: 16
Programmiersprache: C++
Und das nächste Problem. Wenn ich versuche eine MessageBox zu öffnen erscheint diese je nachdem wo im Code ich diese aufrufe gar nicht oder nur solange der Openglcontext noch nicht erstellt wurde. Stand hier schonmal jemand vor diesem Problem und kennt eine Lösung?
EDIT: Habe den Fehler gefunden. Ich hatte die WM_PAINT Message abgefangen, so dass die Messageboxen nicht gerendert wurden.
Mitglieder in diesem Forum: Bing [Bot] und 7 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.