如果成员是标量或向量的数组,则为基本对齐 + *和数组步幅设置为匹配单个基本对齐 + *数组元素,根据规则(1),(2)和(3),并向上舍入 + *到vec4的基本对齐。该阵列可能有填充 + *结束;数组后面的成员的基本偏移量被向上舍入 + *到基本对齐的下一个倍数。
这是否意味着如果我有一个(浮动)vec3的大小为3的数组,那么它是
vec3,vec3,vec3,(12个空字节到达vec4倍数),(由于最后一句话有16个空字节)
或
vec3,(4个空字节),vec3,(4个空字节)vec3,(4个空字节),(由于最后一个句子,16个空字节)
答案 0 :(得分:3)
来自实际 OpenGL Specification, version 4.3 (PDF):
3:如果成员是三分量向量,其中组件消耗N. 基本机器单元,基准线是4N。
4:如果成员是标量或向量的数组,则为基本对齐和数组 根据,stride被设置为匹配单个数组元素的基本对齐 规则(1),(2)和(3),并向上舍入到vec4的基本对齐。该 数组末尾可能有填充;以下成员的基本偏移量 数组向上舍入到基本对齐的下一个倍数。
因此vec3
的基本对齐为4 * 4。因此,vec3
数组的基本对齐和数组步长为4 * 4。步幅是从一个元素到下一个元素的字节数。因此每个元素的大小为16个字节,前12个是实际的vec3
数据。
最后,有一个填充等于最后的基本对齐,所以有空的空格。
或者,在图表形式中,vec3[3]
看起来像这样:
|#|#|#|0|#|#|#|0|#|#|#|0|
每个单元格为4个字节,#
为实际数据,0
为未使用数据。
答案 1 :(得分:1)
都不是。
红皮书中的appendix L说明了这一点:
所以正确答案是vec3,(4空),vec3,(4空),vec3,(4空) - > 48字节