Ich verwende OpenGL3.2 Core Profile unter OSX. Und ich möchte instanced Zeichnung (glDrawArraysInstanced), wo ich eine Matrix für jede Instanz übergeben.Verwenden einer Matrix als Vertex-Attribut in OpenGL3-Core-Profil
Mein Vertex-Shader baut gerade fein:
#version 150
in mediump vec4 position;
in mediump mat4 trf;
in lowp vec4 rgb;
out lowp vec4 colour;
uniform highp mat4 modelcamviewprojmat;
void main()
{
mediump vec4 tpos = trf * position;
gl_Position = modelcamviewprojmat * tpos;
colour = rgb;
}
Die Bindung von 'trf' ging gut:
glBindAttribLocation(program, ATTRIB_TRF, "trf");
Aber wie kann ich meine Daten weitergeben? glVertexAttribPointer kann keine Werte übergeben, die größer als 4 Floats sind. So dieser Aufruf fehlschlägt:
glVertexAttribPointer(ATTRIB_TRF, 16, GL_FLOAT, 0, 16 * sizeof(float), ...);
Ich vermute, dass ich es mit 4 Anrufen glVertexAttribPointer, jeden 4 Schwimmer ersetzen muß. Aber welchen Wert könnte ich für 'Index' (erster Parm) verwenden? Muss ich stattdessen 4 Vektorattribute verwenden und die vier Vektoren im GLSL-Vertex-Shader zusammenstellen? Wenn ja, welche Art von GLSL-Code erfüllt dies? Oder kann ich den Rückgabewert von BindAttribLocation verwenden und val + 0, val + 1, val + 2 und val + 3 für alle Zeilen verwenden?
Ja, funktioniert für mich. Vielen Dank. – Bram
Ich sah für immer, dass die Lösung für mein Problem nur die fehlenden Aufrufe von glVertexAttribDivisor waren. Ich danke dir sehr! – ThePadawan