我有Uniform缓冲区对象:
layout (std140) uniform ubo{
vec3 A;
float B;
vec4 C;
vec4 D;
vec4 E;
vec4 F;
float G;
};
我假设每个人的偏移为A:0,B:12,C:16,D:32 E:48 F:64 G:80
但如果我将所有这些都用作vec4s,那么它似乎并非如此。 他们每个人的抵消会是什么?
我尝试了这些新的补偿: 答:0,B:16,C:32,D:48 E:64 F:80 G:96但它仍然无法正常工作
答案 0 :(得分:-1)
来自ARB_uniform_buffer_object
(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 2<N> or 4<N>, respectively. (3) If the member is a three-component vector with components consuming <N> basic machine units, the base alignment is 4<N>. (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 sub-structure 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).
根据规范,每个vec3计为vec4。我认为只会给你带来麻烦,这只是一件惊喜。