Hinzufügen von Texturen – Teil 2
Als nächstes ist die Funktion glGenTextures verantwortlich für die Erstellung der IDs der Texturen (und die Textur an sich? Eine darauf folgende Funktion generiert nämlich die Textur erst noch…). Man kann in dieser Funktion angeben wie viele Texturen man beabsichtigt zu Erstellung und soviele IDs werden dann in einem Array gespeichert. Auch diese Texture wird dann wieder gebunden mit glBindTexture. Die Funktion glTexImage2D generiert jetzt erst die Textur. Diesmal gibt es sogar ganze sieben Parameter die man angeben muss. Nachdem die Funktion jedoch aufgerufen wird, soll dass Texturen-Objekt nun mit der Textur überzogen sein.
Um die Mipmaps zu erzeugen muss nun glGenerateMipmap aufgerufen werden. Anschließend soll das Bild aus dem Speichern gelöscht werden mit stbi_image_free(data).
Anwendung der Texturen
Da man die Texturen-Koordinaten direkt in den Daten mitgibt, muss nun wieder ein weiterer Attribut-Pointer eingerichtet werden. Dieses mal mit dem ständigen Offset von 8 floats (also S bis S) und einmaligem Offset von 6 floats (also X bis S). Wenn ich das richtig verstanden habe… (siehe Abb. 1).

Natürlich wird nun auch wieder der Vertex Shader angepasst, sodass er die neuen Koordinaten aufnimmt und anschließend an den Fragment Shader weiterreicht. Da der Fragment Shader Zugriff auf das Texturen-Objekt haben soll, wird hier eine Art globale Variable (Uniform genannt) hinzugefügt und in einem Sampler gespeichert.
Uniform soll den Vorteil haben, dass ein Speicherort angegeben werden kann, sodass mehrere Texturen auf einmal festgelegt werden können (verstehe ich hier noch nicht so ganz). Auf jeden Fall wieder dieser Speicherort als Texture Unit bezeichnet.
Anscheinend kann schließlich mit der Funktion glActiveTexture bestimmt werden, welche Textur aktuell genutzt werden soll.

Nach ein wenig rumprobieren, konnte ich den Source-Code in meinem System problemlos ausführen. Nun folgt noch eine kleine Ergänzung mit einem Smiley und dann die Aufgaben zum Texturen-Kapitel.
No Comment