glTexImage2D( )
-
Hallo,
glTexImage2D( ) scheint intern zu crashen wenn ich meine Daten übergebe. Wie dem auch sei, wo kann man sich den Funktionsrumpf zu dieser Funktion ansehen? Würde dann nochmal alles durchgehen.
Danke.
-
Die Frage erledigt sich wenn mir einer sagen kann, ob die Daten richtig vorliegen, wenn ich die RGB-Werte in einem char-array habe? Also:
pixeldata[0] = 0xff; //R = 255 pixeldata[1] = 0x0; pixeldata[2] = 0x0; ...
Und dann in dieser Formatierung an glTexImage2D( ) so übergebe.
Danke im Voraus!
-
Zeig mal, wie du die Funktion aufrufst. Sagst du ihm auch, dass es RGB- Werte sind und die als char vorliegen? Anderfalls (z.B. mit RGBA oder Float), würde auf mehr Elemente des Arrays zugegriffen als dieser hat und somit natürlich ein Fehler auftreten (können).
-
Powerpaule schrieb:
Zeig mal, wie du die Funktion aufrufst. Sagst du ihm auch, dass es RGB- Werte sind und die als char vorliegen? Anderfalls (z.B. mit RGBA oder Float), würde auf mehr Elemente des Arrays zugegriffen als dieser hat und somit natürlich ein Fehler auftreten (können).
glTexImage2D( GL_TEXTURE_2D, 0, 3, img.width, img.height, 0, GL_RGB, GL_UNSIGNED_BYTE, &img.data );
Übrigens liegt data als Vector vor...
-
Wenn img.data ein std::vector<unsigned char> ist, uebergibst Du glTexImage2D ja jetzt einen Zeiger auf Dein Vector-Objekt.
Du willst aber das darin enthaltene Array uebergeben, zB so:glTexImage2D( GL_TEXTURE_2D, 0, 3, img.width, img.height, 0, GL_RGB, GL_UNSIGNED_BYTE, &img.data[0] );
-
Ja, funktioniert so. Ich versetehe allerdings nicht warum eine Referenz auf das erste Element übergeben wird, kannst du mir erklären warum man das so machen muss?
-
std::vector ist intern ein Array, im Array stehen alle Elemente hintereinander und an der Adresse vom ersten Element faengt's eben an.
Vielleicht bietet Vector da auch irgend 'ne Funktion fuer, ich benutze diese Klassen selten...
-
Weil die Funktion ja ein Array erwartet - und in C++ ist das einfach nur ein Zeiger auf das erste Element eines Arrays, alle Positionen der Nachfolgenden Elemente ergeben sich dann aus dem Variablentyp (in dem Fall char, also 1 Byte, also folgt nach jedem Byte der nächste Wert) - das wird mit hellihjbs Code dann auch gemacht.
Du hast ihm aber einen Zeiger auf den vector übergeben, jetzt interpretiert die Funktion glTexImage2D das als Char-Array, was aber völliger Blödsinn ist, denn es handelt sich ja nur um ein Objekt der Klasse vector, so dass 1. falsche Daten eingelesen werden und 2. dann wohl ungültiger Bereich betreten wird (das Objekt belegt ja auch viel weniger Speicher als der eigentliche Inhalt, also das Char-Array, was aber an einer völlig anderen Stelle liegen kann).(Edit: oh ich hab mir wohl beim Schreiben zu viel Zeit gelassen^^)
-
Ah alles klar. Danke euch Beiden.