Mit stride gibt man die Block(Vertex)-Grösse an, mit Pointer wo der Anfang des Atributes ist. Obwohl beide Werte eine Zahl bekommen, kommt bei strike ein Integer und bei Pointer ein Zeiger auf ein Integer.
Meine Frage, wieso haben nicht beide Werte einen Integer ?
Was noch komisch ist, beim obigen Link, sind 2 Integer-Werte vorhanden, ist dies ein Fehler des Tutorials ?
Code:
glVertexAttribPointer(0,3, GL_FLOAT, GL_FALSE,12,0);// alternativ auch stride=0
glVertexAttribPointer(1,3, GL_FLOAT, GL_FALSE,12,36);// alternativ auch stride=0
Auch das alternativ bei der 2. Zeile ist etwas komisch. Wie kann dies 0 sein ?
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Mit dem letzten Parameter gibst du an, wo das Attribut zum ersten Mal vorkommt und mit dem vorletzten, nach wie viel Byte es sich wiederholt. Ob die Parameter jetzt als Pointer oder Integer deklariert sind, ist doch völlig wurscht. Ein Pointer ist für den Computer letztlich nichts anderes als ein unsigned integer. Sie dennoch als unterschiedliche Typen aufzufassen ist eine (willkürliche) Design-Entscheidung deiner Programmiersprache.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Wen ich es richtig verstehe, wurde bei OpenGL 2.0, der letzte Parameter als Zeiger auf die Vertex-Daten gebraucht, aus deisem Grund ist es noch als Pointer deklariert ?
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Ja, scheint so als konnte man zu Zeiten von OpenGL 2.x tatsächlich Vertexdaten direkt aus dem RAM übergeben, ohne vorher ein VBO zu erzeugen. Das hat sich geändert. Dass du explizit von Int nach Pointer casten musst, bezweifle ich. In C(++) geht das auch implizit.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
g++ haut dir das mit einer Fehlermeldung um die Ohren gar:
Code:
#include <stdint.h>
int main(){
uintptr_t y =123;
void*x = y;
return0;
}
Code:
$ g++ -o test test.cc
test.cc: In function ‘int main()’:
test.cc:5:15: error: invalid conversion from ‘uintptr_t {aka long unsigned int}’ to ‘void*’ [-fpermissive]
void *x = y;
Das ist ja einer der Vorteile von C++ gegenüber C, dass es strikteres Typechecking gibt, gerade in der Gegend von Pointern.
viele Grüße, Horazont
_________________ 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: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Man müsste in der Beschreibung auch noch einmal darauf hinweisen das es nur bei einen gebundenen Array tatsächlich ein Offset und ansonsten tatsächlich der Pointer zum ersten Element ist.
Mitglieder in diesem Forum: Google [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.