Hi again,

I have changed the code to use pointers instead, however i am getting an access violation error when i add data to the pointer (around the 20th item to be added)

am i doing something wrong...

heres the code im using:
[pascal]
//---- load cloud data
GetMem(Cloud.vBuffer, (SizeOf(TVector3f)*(Length(Cloud.Puffs)*4)));
GetMem(Cloud.tBuffer, (SizeOf(TVector3f)*(Length(Cloud.Puffs)*4)));
GetMem(Cloud.cBuffer, (SizeOf(TVector3f)*(Length(Cloud.Puffs)*4)));

//---- add data to pointers
procedure AddToMem(Cloud: TVolumetricCloud; v2: TVector2f; v3: TVector3f; v4a,v4b: TVector4f);
begin
Cloud.vBuffer^ := v3;
Inc(Cloud.vBuffer); <-------------- ERROR HERE
Cloud.cBuffer^ := v4a;
Inc(Cloud.cBuffer);
Cloud.IcBuffer^ := v4b;
Inc(Cloud.IcBuffer);
Cloud.tBuffer^ := v2;
Inc(Cloud.tBuffer);
end;

//

For i := 0 To High(Cloud.Puffs) Do
Begin

iv3 := Vector3fMake(Cloud.Puffs[i].Position[0]+Corner1[0]*Cloud.Puffs[i].Size,
Cloud.Puffs[i].Position[1]+Corner1[1]*Cloud.Puffs[i].Size,
Cloud.Puffs[i].Position[2]+Corner1[2]*Cloud.Puffs[i].Size);
AddToMem(Cloud, v1, iv3, pColor, pColor2);
iv3 := Vector3fMake(Cloud.Puffs[i].Position[0]+Corner2[0]*Cloud.Puffs[i].Size,
Cloud.Puffs[i].Position[1]+Corner2[1]*Cloud.Puffs[i].Size,
Cloud.Puffs[i].Position[2]+Corner2[2]*Cloud.Puffs[i].Size);
AddToMem(Cloud, v2, iv3, pColor, pColor2);
iv3 := Vector3fMake(Cloud.Puffs[i].Position[0]+Corner3[0]*Cloud.Puffs[i].Size,
Cloud.Puffs[i].Position[1]+Corner3[1]*Cloud.Puffs[i].Size,
Cloud.Puffs[i].Position[2]+Corner3[2]*Cloud.Puffs[i].Size);
AddToMem(Cloud, v3, iv3, pColor, pColor2);
iv3 := Vector3fMake(Cloud.Puffs[i].Position[0]+Corner4[0]*Cloud.Puffs[i].Size,
Cloud.Puffs[i].Position[1]+Corner4[1]*Cloud.Puffs[i].Size,
Cloud.Puffs[i].Position[2]+Corner4[2]*Cloud.Puffs[i].Size);
AddToMem(Cloud, v4, iv3, pColor, pColor2);
End;
[/pascal]

im sure i've missed something really dumb..

Thanks
Nic