Używam profilu rdzeniowego OpenGL3.2 na OSX. I chcę wykonać instancyjny rysunek (glDrawArraysInstanced), gdzie przekazuję macierz dla każdej instancji.Używanie macierzy jako atrybutu wierzchołka w profilu OpenGL3 Core
Moja vertex shader buduje dobrze:
#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;
}
Wiązanie '' TRF poszło dobrze:
glBindAttribLocation(program, ATTRIB_TRF, "trf");
Ale jak mogę przekazać w moich danych? glVertexAttribPointer nie może przekazać wartości większych niż 4 pływaki. Więc ta rozmowa kończy się niepowodzeniem:
glVertexAttribPointer(ATTRIB_TRF, 16, GL_FLOAT, 0, 16 * sizeof(float), ...);
Podejrzewam, że muszę go zastąpić 4 wywołań glVertexAttribPointer, każdą mijającą 4 pływaków. Ale jakiej wartości mógłbym użyć dla "indeksu" (pierwszy parm)? Czy zamiast tego muszę użyć 4 atrybutów wektorowych i złożyć cztery wektory w module cieniującym GLSL? Jeśli tak, jaki rodzaj kodu GLSL to osiąga? Czy mogę użyć wartości zwracanej z BindAttribLocation i użyć wartości val + 0, val + 1, val + 2 i val + 3 dla wszystkich wierszy?
Tak, działa dla mnie. Dzięki. – Bram
Spojrzałem na zawsze, aby znaleźć rozwiązanie mojego problemu tylko brakujące wywołania glVertexAttribDivisor. Dziękuję bardzo! – ThePadawan