Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: Spiele-/Grafikprogrammierung ::  Verständnisfrage: glBufferData vs glXXXPointer     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
DocJunioR
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.04.2001
Beiträge: 3149
Beitrag DocJunioR Mitglied 11:13:32 24.01.2018   Titel:   Verständnisfrage: glBufferData vs glXXXPointer            Zitieren

Servus Kollegen..
Ich hab da so ein paar Kopfschmerzen mit Vertexlisten, etc..
Mal ganz abgesehen davon, dass ich es partout nicht hinbekommen habe einen Vertexbuffer mit Indice zu erstellen und darzustellen..
Hier mal der Code dazu, vielleicht kanns mir ja wer erklären warum hier nix zu sehen ist...

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        GLuint vbuf;
        GLuint tbuf;
        // erzeuge buffer mit vertexdaten
        glGenBuffers(1, &vbuf);
        // erzeuge buffer mit indexdaten
        glGenBuffers(1, &tbuf);
 
        // lade Vertexdaten in Vertexbuffer
        glBindBuffer(GL_ARRAY_BUFFER, vbuf);
        glBufferData(GL_ARRAY_BUFFER, this->vertice.size() * sizeof(GLfloat), &(this->vertice[0]), GL_STATIC_DRAW);
        std::cout << " loaded " << this->vertice.size() <<" vertice:" << glGetError() ;
 
        // lade Dreiecksdaten in Dreiecksbuffer
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, tbuf);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER, this->indice.size() * sizeof(GLuint), &(this->indice[0]), GL_STATIC_DRAW);
        std::cout << " loaded " << this->indice.size() << " indice: " << glGetError() ;
 
        glDrawElements(GL_TRIANGLES, this->indice.size(), GL_UNSIGNED_INT, 0);


Meine eigentliche Frage ist der Unterschied zur offenkundig einfacher zu handhabenden Variante mittels VertexPointer und direkter Übergabe der Indize?

Das hier funktionierte zumindest
C++:
1
2
3
4
5
6
7
8
9
        glEnableClientState(GL_VERTEX_ARRAY);
        glEnableClientState(GL_COLOR_ARRAY);
 
        glColorPointer(4,GL_UNSIGNED_SHORT,4*sizeof(GLushort),&(this->colors[0]));
        glVertexPointer(3, GL_FLOAT, 3 *sizeof(float), &(vertice[0]));
        glDrawElements(GL_TRIANGLES, this->indice.size(), GL_UNSIGNED_INT,  &(this->indice[0]));
 
        glDisableClientState(GL_COLOR_ARRAY);
        glDisableClientState(GL_VERTEX_ARRAY);


Meine Vermutung ist, dass es auf diese Weise dann nicht über den Grafikkartenspeicher läuft. Ist dies korrekt? Wenn ja, wie äußert sich das in der Performance?

Die Grafik ist bei mir aktuell nur Mittel zum Zweck, es kommt nicht sonderlich auf Schönheit oder Performance an- auf der anderen Seite bin ich, was Ressourcen angeht, eher knausrig..

BTW: Tut das not, dass fast alle Tutorials zum Thema der VertexArrays in ihrem Source code noch ewig shadern, etc. obwohl das laut Beschreibung gar nicht notwendig ist? Mich persönlich lenkt das immer etwas vom eigentlichen Thema ab..

_________________
^]:wq
Das Ding links an deinem Lenkrad ist ein BLINKER! Nutze ihn weise..
Ich hoffe du weißt, dass das dass das das sein sollte..
rapso
Moderator

Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 8807
Beitrag rapso Moderator 12:56:39 24.01.2018   Titel:   Re: Verständnisfrage: glBufferData vs glXXXPointer            Zitieren

DocJunioR schrieb:

Hier mal der Code dazu, vielleicht kanns mir ja wer erklären warum hier nix zu sehen ist...
schaut ok aus, wie sind die daten?

Zitat:

Das hier funktionierte zumindest
C++:
1
2
3
4
5
6
7
8
9
        glEnableClientState(GL_VERTEX_ARRAY);
        glEnableClientState(GL_COLOR_ARRAY);
 
        glColorPointer(4,GL_UNSIGNED_SHORT,4*sizeof(GLushort),&(this->colors[0]));
        glVertexPointer(3, GL_FLOAT, 3 *sizeof(float), &(vertice[0]));
        glDrawElements(GL_TRIANGLES, this->indice.size(), GL_UNSIGNED_INT,  &(this->indice[0]));
 
        glDisableClientState(GL_COLOR_ARRAY);
        glDisableClientState(GL_VERTEX_ARRAY);
rufst du glEnableClientState, glColorPointer usw. bei den VBOs nicht auf aus irgendeinen grund? oder hast du oben nur die verkuertze fassung?

Zitat:

Meine Vermutung ist, dass es auf diese Weise dann nicht über den Grafikkartenspeicher läuft. Ist dies korrekt?

du vermutest die buffer mit denen du auf der CPU per pointer verweist sind nicht auf der Graka? :o)
Zitat:

Wenn ja, wie äußert sich das in der Performance?

performance = Grafikkartenspeicherbandbreite/Hauptspeicherbandbreite;

Zitat:

BTW: Tut das not, dass fast alle Tutorials zum Thema der VertexArrays in ihrem Source code noch ewig shadern, etc. obwohl das laut Beschreibung gar nicht notwendig ist? Mich persönlich lenkt das immer etwas vom eigentlichen Thema ab..

Korrekt, VBOs sind aus GeForce256 zeiten, da gab es noch lange keine shader, entsprechend funzt das auch so. Die tutorials benutzen shader, weil heute allte Grakas nur noch mit shadern laufen, ist im allgemeinen trivialer, aber natuerlich zum lernen erstmal mehr.

_________________
follow me|
-Mod im Spiele-/Grafikprogrammierung
DocJunioR
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.04.2001
Beiträge: 3149
Beitrag DocJunioR Mitglied 13:22:28 24.01.2018   Titel:   Re: Verständnisfrage: glBufferData vs glXXXPointer            Zitieren

rapso schrieb:
schaut ok aus, wie sind die daten?


C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        this->vertice = {
                0.5f,  0.5f, 0.0f,   // top right
                0.5f, -0.5f, 0.0f,   // bottom right
               -0.5f, -0.5f, 0.0f,   // bottom left
               -0.5f,  0.5f, 0.0f,   // top left
        };
 
        // create index list
        this->indice = {
                0, 1, 3,
                1, 2, 3
        };
 
        this->colors = {
                0xff,0xff,0xff,0xff,
                0xff,0xaf,0xff,0xff,
                0xff,0x00,0xff,0xff,
                0xff,0xff,0xa0,0xff
        };


Zitat:

Das hier funktionierte zumindest
..
rufst du glEnableClientState, glColorPointer usw. bei den VBOs nicht auf aus irgendeinen grund? oder hast du oben nur die verkuertze fassung?



müsste ich denn? hab ich so nirgends gefunden?

Zitat:

Korrekt, VBOs sind aus GeForce256 zeiten, da gab es noch lange keine shader, entsprechend funzt das auch so. Die tutorials benutzen shader, weil heute allte Grakas nur noch mit shadern laufen, ist im allgemeinen trivialer, aber natuerlich zum lernen erstmal mehr.


irgendwie find ich die online-tutorials zumeist eher suboptimal aber vielleicht sollte ich auch einfach vergessen, dass ich das vor >10 jahren schon mal gemacht habe und einfach mal von vorne anfangen...

_________________
^]:wq
Das Ding links an deinem Lenkrad ist ein BLINKER! Nutze ihn weise..
Ich hoffe du weißt, dass das dass das das sein sollte..
rapso
Moderator

Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 8807
Beitrag rapso Moderator 14:17:31 24.01.2018   Titel:   Re: Verständnisfrage: glBufferData vs glXXXPointer            Zitieren

DocJunioR schrieb:

müsste ich denn? hab ich so nirgends gefunden?

macht das irgendein tutorial nicht? welche nutzt du denn gerade?

_________________
follow me|
-Mod im Spiele-/Grafikprogrammierung
DocJunioR
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.04.2001
Beiträge: 3149
Beitrag DocJunioR Mitglied 19:27:52 24.01.2018   Titel:              Zitieren

machen tun das etliche tutorials aber keines sagt, warum. notwendig für das verständnis der vertexlisten ist das offensichtlich nicht.

_________________
^]:wq
Das Ding links an deinem Lenkrad ist ein BLINKER! Nutze ihn weise..
Ich hoffe du weißt, dass das dass das das sein sollte..
rapso
Moderator

Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 8807
Beitrag rapso Moderator 14:24:32 25.01.2018   Titel:              Zitieren

DocJunioR schrieb:
machen tun das etliche tutorials aber keines sagt, warum. notwendig für das verständnis der vertexlisten ist das offensichtlich nicht.
VBOs bauen auf diesem vorwissen auf.

_________________
follow me|
-Mod im Spiele-/Grafikprogrammierung
C++ Forum :: Spiele-/Grafikprogrammierung ::  Verständnisfrage: glBufferData vs glXXXPointer   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.