[翻译]关于GLSL中std140布局中vec3和float的对齐问题

初学者在理解GLSL布局规则时可能会感觉很困惑,通常来讲,一个数据类型的大小和这个数据类型的对齐要求是不同的,例如,vec3的大小是3个float,也就是12个字节,但是他的对齐要求是16字节.

对齐规定了给定类型的下一个值可以从多少字节的倍数开始对于vec3来说对其要求是16字节,因此每当声明一个vec3时,在vec3开始之间会填充一些字节,以确保vec3符合对齐要求.

比如:

struct
{
   
	float a;
	vec3 b;
}

此时,float将从偏移量0字节开始,但是由于vec3的对齐要求(16字节),所以在float之后和vec3之前会有填充12个字节,所以,实际上float会变成一个只有第一个分量被使用的vec4,在16个字节之后(其中float占用4个字节,填充了12个字节),才是Vec3 b.

所以在这种情况下,更高效利用空间的方式是在float之前声明vec3.

struct
{
   
	vec3 b;
	float a;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值