Usando uma matriz como atributo de vértice no OpenGL3 Core Profile
Eu estou usando o OpenGL3.2 Core Profile no OSX. E eu quero fazer desenho instanciado (glDrawArraysInstanced), onde eu passo uma matriz para cada instância.
Meu shader de vértice é muito bem:
#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;
}
A ligação de 'trf' correu bem:
glBindAttribLocation(program, ATTRIB_TRF, "trf" );
Mas como posso passar meus dados? glVertexAttribPointer não pode passar valores maiores que 4 flutuantes. Então esta chamada falha:
glVertexAttribPointer( ATTRIB_TRF, 16, GL_FLOAT, 0, 16 * sizeof(float), ... );
Eu suspeito que eu preciso substituí-lo com 4 chamadas para glVertexAttribPointer, cada um passando 4 carros alegóricos. Mas qual valor eu poderia usar para 'index' (first parm)? Preciso usar 4 atributos de vetores e montar os quatro vetores no shader de vértice GLSL? Em caso afirmativo, que tipo de código GLSL realiza isso? Ou posso usar o valor de retorno de BindAttribLocation e usar val + 0, val + 1, val + 2 e val + 3 para todas as linhas?