Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Guten Morgen, Ich frage mich, ob das schon jemand gelöst hat: ein VBO mit selbstdefinierter Struktur aber ohne glInterleavedArrays sondern mit diversen glPointers. Also das, was hier http://www.opengl.org/wiki/Vertex_Buffer_Objects beschrieben wird.
Allerdings habe ich es nach dieser Beschreibung nicht hingekriegt, weil dort nicht alles drinsteht, was man braucht. Nach ziemlich langem Suchen hab ich die Lösung durch Trial and Error gefunden. Ich hätte einen funktionierenden Beispielcode. Wäre das nicht etwas fürs WIKI?
Der Platz, den ich dafür vorschlage, ist die Abteilung "Hintergrundwissen", direkt hinter "Optimierungen: VBO(VertexBufferObjects)", denn dort wird die ältere Methode mit glInterleavedArrays beschrieben, die für die neueren OpenGL-Versionen nicht mehr funktioniert, weil InterleavedArrays nicht mehr unterstützt werden. Viele Grüße, Traude
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich war so frei und hab deinem Code mal Pascal-Tags verpasst. Danke für dieses Stück Information
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7804 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Skeptiker im Wiki hat geschrieben:
Ich bin jetzt ein wenig verwirrt, ich hatte hier (http://delphigl.com/forum/viewtopic.php?f=2&t=8880) gefragt, ob VBOs die einzige Möglichkeit seien in OpenGL 3.x geringe Geometriedaten an die Grafikkarte zu schicken, die Antwort war, dass es auch über Vertex Arrays geht. Somit wäre die Aussage das VBOs die einzige Möglichkeit sind falsch.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Es ist ganz leicht, das zu widerlegen, denn man muss nur die angeführte Spezifikation genau lesen:
Zitat aus: "The OpenGL Graphics System:A Specification (Version 3.2 (Core Profile) - December 7, 2009)"
Zitat:
2.8 Vertex Arrays Vertex data is placed into arrays that are stored in the server’s address space (described in section 2.9).
An dieser Stelle liest man zunächst das Kapitel 2.9. Dort steht:
Zitat:
2.9 Buffer Objects Vertex array data are stored in high-performance server memory. GL buffer objects provide a mechanism that clients can use to allocate, initialize, and render from such memory.
Und das bedeutet im Klartetxt: um in OpenGL3 zu zeichnen braucht man unter anderem
1. Daten: Die befinden sich in einem VBO, das man vorher erzeugen muss und in den Grafikkartenspeicher laden ("...Vertex array data are stored in high-performance server memory...": ich wüßte nicht, wie diese Aussage sonst zu verstehen sein soll) 2. Einen Befehl zum Zeichnen: *DrawArrays*, *DrawElements*, usw. 3. ... und ein Haufen anderes Zeugs.
In der Spezifikation steht natürlich noch vieles andere, was man braucht. Ich habe in dem Artikel nur das Allernötigste hineingeschrieben. Aber Du kannst mir ruhig glauben, dass man in OpenGL3 VBOs braucht, obwohl ich es selber gar nicht ausprobieren kann, weil ich - wie üblich - nur eine unzureichende Grafikkarte habe. Was Grafikkarten angelangt, bin ich hier immer nur das Schlußlicht.
Es gibt doch bei Euch ein paar Leute, die OpenGL3 benutzen. Die sollten das doch eigentlich bestätigen können.
Mich müsst Ihr aber jetzt entschuldigen, denn es ist Sonntag vormittag, und da muss ich eigentlich ein Mittagessen kochen.
Registriert: Sa Mär 14, 2009 17:48 Beiträge: 99
Programmiersprache: D, Java, C++
Ah Es gibt einen Thread zum Artikel ... Okay, danke für die Beantwortung, ich muss zugeben in die Spezifikation hab ich nicht wirklich geschaut, ich nahm an Coolcat hätte mit seiner Aussage recht gehabt, es erschien mir auch irgendwie logisch. Ich kanns derzeit auch nicht wirklich testen, da ich immernoch keine OpenGL 3 Bindings für meine Sprache (D) kenne.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Ich dachte, das hätten wir schon lange vorher einmal geklärt, nämlich in diesem Thread: http://www.delphigl.com/forum/viewtopic.php?f=2&t=8442&start=15 ziemlich weit unten, der letzte Beitrag ist von mir. Und ich habe keine Quellen im Artikel dazu angegeben, weil OpenGL3 eben nicht das Thema dieses Artikels war.
Den Thread, in dem Skeptiker nachgefragt hat, habe ich nicht gesehen, sonst hätte ich etwas dazu gesagt. Ich wollte nur klarstellen, dass ich nichts Falsches in den Artikel geschrieben habe.
Coolcat hat geschrieben:
Also meiner Meinung nach wird bei VertexArrays automatisch ein VBO erzeugt und nach dem rendern wieder gelöscht.
Ich kann nicht sehen, worauf Du deine Annahme stützt.
Nochmaliges Zitat aus: "The OpenGL Graphics System: A Specification (Version 3.2 (Core Profile) - December 7, 2009)", diesmal aus dem Inhaltsverzeichnis:
Zitat:
2.9 Buffer Objects 2.9.1 Creating and Binding Buffer Objects 2.9.2 Creating Buffer Object Data Stores 2.9.3 Mapping and Unmapping Buffer Data 2.9.4 Effects of Accessing Outside Buffer Bounds 2.9.5 Copying Between Buffers 2.9.6 Vertex Arrays in Buffer Objects 2.9.7 Array Indices in Buffer Objects 2.9.8 Buffer Object State
Das haben die doch nicht aus Jux und Tollerei in die Spezifikationen geschrieben.
Ich kann zu OpenGL3 nichts aus der Praxis sagen. Aber die Theorie des Dateninputs sollte ich wissen, denn ich arbeite grade an einer Engine, die OpenGL 2.0 benutzt und schiele dabei immer auf die OpenGL 3 Spezifikationen, damit ich nachher nicht wieder alles umstellen muss.
Schluss jetzt. Wir verschwenden bloss unsere Zeit mit so einem Geplänkel. Weder brauchen wir irgendwelche Sündenböcke, noch ist das ein wirkliches Feedback zu dem Thema.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7804 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Sündenböcke brauchen wir definitiv nicht. Sehe auch gar keinen Grund dafür. Was wir brauchen ist jemand mit passender Hardware der nachprüfen kann, was geht und was nicht.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
das sind OpenGL-Befehle, die es seit Version 2.0 gibt.
Gefunden habe ich es an einer vertauenswürdigen Quelle: http://www.cg.tuwien.ac.at/courses/CG23/einfuehrung1.html, der zweite Download mit der Bezeichnung "OpenGL 3.x, Teil 1 (slides, demo *)" enthält ein C++-Programm, wo ein ein Würfel mit OpenGL3 gezeichnet wird, ohne dass ein VBO verwendet wird. Ich habe das Programm nicht ausprobiert, aber die Befehle im Wiki nachgeschlagen.
@Coolcat: Es tut mir leid, dass ich Dir nicht geglaubt habe, aber die Specs schienen eindeutig zu sein. Du hast recht und ich habe unrecht. Ich werde meinen Artikel ändern. Und dann danke ich Dir dafür, dass Du nochmal insistiert hast, denn dadurch hatte ich den nötigen "Drive" drauf, Dir beweisen zu wollen, dass ich recht habe. Dadurch habe ich etwas Neues erfahren. Viele Grüße, Traude
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7804 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich finde diesen Ausgang sogar wesentlich wertvoller. Auch als Zeichen an alle anderen sich ein Vorbild an Traude zu nehmen und nach zu recherchieren. Auch wenn hier der Antrieb der war sich selbst zu bestätigen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Es ist echt zum Totlachen: jedesmal, wenn ich nochmal nachstöbere, kommt was Neues heraus. Ich habe einen Thread gefunden, der das Programm betrifft, das ich oben verlinkt habe, und zwar hier: http://www.informatik-forum.at/showthread.php?79311-OpenGL-3-Demo-verf%FCgbar!. Dor steht unter anderem (ein Forumsbeitrag vom 18.03.2010, also ganz aktuell):
Zitat:
Wen es interessiert: Der GL_INVALID_OPERATION error entsteht wenn man in der render-Funktion die Vertex Pointer mit glVertexAttribPointer(...) setzt. Laut Spezifikation sollte das nur passieren, wenn kein VBO gesetzt ist. In der Demo verwenden wir bisher keine VBOs, weil wir bisher gedacht haben, dass auch reine Vertex Arrays mit Client Daten noch erlaubt sind. Das ist aber leider nicht der Fall. Ich habe die Demo umgeschrieben, so dass sie VBOs verwendet und trotzdem kommt noch der gleiche Fehler. Deshalb duerfte es sich wirklich um einen Treiber-Bug handeln......
@Coolcat: Also hab vielleicht doch ich recht. Wie man sieht, ist das ein Gebiet, wo noch große Verwirrung herrscht. Wenn Du gestattest, halte ich mich an diesen Beitrag: http://www.opengl.org/wiki/Tutorial:_OpenGL_3.1_The_First_Triangle_(C%2B%2B/Win). Die Behauptung, dass man in OpenGL3 nur mehr mit VBO zeichnen kann, nehme ich allerdings doch raus. Wer weiß, was sich noch alles herausstellt. Ich trau mich einfach nicht mehr, irgend etwas vorauszusagen, wenn schon nicht mal die Burschen von der TU Wien Bescheid wissen.
Wenn man sich allerdings ansieht, was sie für einen Aufwand treiben müssen, um ein Dreieck zu zeichnen ohne VBO (rund 500 Programmzeilen hat die "Program.cpp"), dann wären die paar Zeilen für den VBO auch nicht mehr ins Gewicht gefallen.
Hab mit dem Code gerade auch mein erstes VBO mit eigener Vertex-Struktur gerendert. Meiner Meinung nach ist die Methode auch irgendwie "geradliniger" als die, die im VBO-Tutorial beschrieben wird.
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.