Hi,
Ryan Joseph wrote 14 lines
I have a struct I need to port from C but the size I’m getting in Pascal
is wrong. From C sizeof(AAPLVertex) = 32 but in Pascal
sizeof(AAPLVertex) = 24.
The alignment of the struct is on 32 bit bounds I think but how do I
replicate this in Pascal so it behaves exactly like c? I tried using
$align but it didn’t seem to have any effect.
{$align 32}
type
TAAPLVertex = packed record
position: vector_float2;
color: vector_float4;
end;
The whole idea of a packed record is to ignore alignment and "pack" the fields ignoring padding and alignment. Use a normal record without "packed", or add the padding fields manually, if you still have to use a packed record for whatever reason.
BTW, $align specifies the alignment in *BYTES* not in bits. So to align to 32bits you need {$align 4}. But Free Pascal also supports {$packrecords C}, where it will try to mimic the C compiler's alignment as native to the target platform. In any unit which needs to interface to a C library, I'd use {$packrecords C} and no {$align}
This is all documented BTW at the respective directives...
Charlie