Hab ne lösung die geht:
Code: Alles auswählen
struct PointLight
{
glm::vec3 color;
float intensity;
glm::vec2 pos;
float pad[2];
};
und halt
Code: Alles auswählen
struct PointLight {
vec3 color;
float intensity;
vec2 pos;
};
layout (std140)
uniform LightList {
PointLight light[MAX_NUM_TOTAL_LIGHTS];
float numLights;
} lights;
ich kann mir zwar aus den specs irgendwas aus den fingern saugen wieso das jetzt geht aber so richtig glücklich bin ich mit der antwort nicht. das hätte ich nämlich beim vorherigen auch gekonnt... :D Ich finde die regeln lesen sich ziemlich kompliziert. Vielleicht muss man das aber auch nur mal genauer durchgehen. Für Interessierte:
Code: Alles auswählen
1. If the member is a scalar consuming N basic machine units, the base alignment is N.
2. If the member is a two- or four-component vector with components consuming N basic machine units, the base alignment is 2N or 4N, respectively.
3. If the member is a three-component vector with components consuming N basic machine units, the base alignment is 4N.
4. If the member is an array of scalars or vectors, the base alignment and array stride are set to match the base alignment of a single array element, according to rules (1), (2), and (3), and rounded up to the base alignment of a vec4. The array may have padding at the end; the base offset of the member following the array is rounded up to the next multiple of the base alignment.
5. If the member is a column-major matrix with C columns and R rows, the matrix is stored identically to an array of C column vectors with R components each, according to rule (4).
6. If the member is an array of S column-major matrices with C columns and R rows, the matrix is stored identically to a row of S C column vectors with R components each, according to rule (4).
7. If the member is a row-major matrix with C columns and R rows, the matrix is stored identically to an array of R row vectors with C components each, according to rule (4).
8. If the member is an array of S row-major matrices with C columns and R rows, the matrix is stored identically to a row of S R row vectors with C components each, according to rule (4).
9. If the member is a structure, the base alignment of the structure is N, where N is the largest base alignment value of any of its members, and rounded up to the base alignment of a vec4. The individual members of this substructure are then assigned offsets by applying this set of rules recursively, where the base offset of the first member of the sub-structure is equal to the aligned offset of the structure. The structure may have padding at the end; the base offset of the member following the sub-structure is rounded up to the next multiple of the base alignment of the structure.
10. If the member is an array of S structures, the S elements of the array are laid out in order, according to rule (9).