Verwenden einer Matrix als Scheitelpunktattribut in OpenGL3 Core Profile

Ich verwende OpenGL3.2 Core Profile unter OSX. Und ich möchte Instanzzeichnen (glDrawArraysInstanced) ausführen, wobei ich für jede Instanz eine Matrix übergebe.

Mein Vertex-Shader funktioniert einwandfrei:

#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;
}

Das Binden von 'trf' ging gut:

glBindAttribLocation(program, ATTRIB_TRF, "trf" );

Aber wie kann ich meine Daten weitergeben? glVertexAttribPointer kann keine Werte über 4 Gleitkommazahlen übergeben. Also dieser Aufruf schlägt fehl:

glVertexAttribPointer( ATTRIB_TRF,   16, GL_FLOAT, 0, 16 * sizeof(float), ... );

Ich vermute, dass ich es durch 4 Aufrufe von glVertexAttribPointer ersetzen muss, die jeweils 4 Floats übergeben. Aber welchen Wert könnte ich für 'index' (first parm) verwenden? Muss ich stattdessen 4 Vektorattribute verwenden und die vier Vektoren im GLSL Vertex Shader zusammenstellen? Wenn ja, welche Art von GLSL-Code erreicht 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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage