Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mär 28, 2024 20:21

Foren-Übersicht » DGL » Feedback
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: VBO ohne InterleavedArrays
BeitragVerfasst: Fr Mär 19, 2010 09:29 
Offline
DGL Member
Benutzeravatar

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. :evil: 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO ohne InterleavedArrays
BeitragVerfasst: Fr Mär 19, 2010 12:54 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Klingt gut. Mach ruhig. Du kannst deinen Code auch gern hier mal vorstellen und diskutieren lassen.
Aber poste den erstmal, bevor er "zerredet" wird.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO ohne InterleavedArrays
BeitragVerfasst: Sa Mär 20, 2010 10:41 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Erledigt. :wink:

Hier gehts zum Text: http://wiki.delphigl.com/index.php/VBO_ohne_glInterleavedArrays


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO ohne InterleavedArrays
BeitragVerfasst: Sa Mär 20, 2010 12:14 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO ohne InterleavedArrays
BeitragVerfasst: So Mär 28, 2010 02:11 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO ohne InterleavedArrays
BeitragVerfasst: So Mär 28, 2010 10:41 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Ich zitiere einen Beitrag vom 20.Dez.2009 in Deinem oben angeführten Thread:
Coolcat hat geschrieben:
Kapitel 2.8
http://www.opengl.org/registry/doc/glsp ... 091207.pdf
über den "pointer" kannst du wie bisher ein Array angeben.

....wobei...probiert habe ich das bisher nicht.

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO ohne InterleavedArrays
BeitragVerfasst: So Mär 28, 2010 13:01 
Offline
DGL Member

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO ohne InterleavedArrays
BeitragVerfasst: So Mär 28, 2010 13:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Also meiner Meinung nach wird bei VertexArrays automatisch ein VBO erzeugt und nach dem rendern wieder gelöscht. Aber probiert hab ich das nicht.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO ohne InterleavedArrays
BeitragVerfasst: So Mär 28, 2010 16:05 
Offline
DGL Member
Benutzeravatar

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. :evil:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO ohne InterleavedArrays
BeitragVerfasst: So Mär 28, 2010 17:19 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO ohne InterleavedArrays
BeitragVerfasst: So Mär 28, 2010 22:39 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Entschuldigung, aber ich muss noch einmal nachhaken. Ich habe etwas entdeckt, das in OpenGL zeichenfähig ist und KEIN VBO braucht.

glGetAttribLocation/glEnableVertexAttribArray/glVertexAttribPointer,

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. :wink:
Viele Grüße,
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO ohne InterleavedArrays
BeitragVerfasst: Mo Mär 29, 2010 00:15 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO ohne InterleavedArrays
BeitragVerfasst: Mo Mär 29, 2010 00:50 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO ohne InterleavedArrays
BeitragVerfasst: Sa Dez 31, 2011 17:30 
Offline
DGL Member

Registriert: Mo Aug 31, 2009 13:19
Beiträge: 151
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.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Foren-Übersicht » DGL » Feedback


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 15 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.033s | 17 Queries | GZIP : On ]