这个结构的大小是 36 字节:
struct Mat
{
enum Type { Lam, Met, Dia };
int type;
packed_float3 albedo;
packed_float3 emissive;
float roughness;
float ri;
};
float
当s 和int
s 分别为 4 个字节而 apacked_float3
为 12 个字节时,这是有道理的。
它的大小是 88 字节:
struct Cam
{
packed_float3 origin;
packed_float3 lowerLeftCorner;
packed_float3 horizontal;
packed_float3 vertical;
packed_float3 u, v, w;
float lensRadius;
};
float
当s 是 8 个字节而 thepacked_float3
是 16 个字节时,这是有道理的。
这些在同一个金属着色器中。这里的对齐发生了什么会导致这是真的?
如果 a 必须适合连续的 16 字节空间,我只能使匹配工作packed_float3
,因此在第一个示例中,它适合在第一个之后int
,但在第二个示例中,每个示例都必须开始自己的。是这样吗?16
如果是这样,我在 Metal Shading 指南中可以找到的任何地方似乎都没有记录这个幻数。