- function gsVertIndex(gs: TGeoSphere; v: TVec): integer;
- var
- VIndex : PIntegers;
- vi, i: integer;
- pv: PVec;
- begin
- vi := Round(v.z * 2048) + 2048;
- VIndex := gsVIndex[vi];
- for i:=0 to gsVNum[vi]-1 do begin
- pv := @gs.gsVert[VIndex[i]];
- if (integer(Addr(pv.x)^)=integer(Addr(v.x)^)) and
- (integer(Addr(pv.y)^)=integer(Addr(v.y)^)) and
- (integer(Addr(pv.z)^)=integer(Addr(v.z)^)) then begin
- result := VIndex[i];
- exit;
- end;
- end;
- gs.gsVert[gs.gsVerts] := v;
- result := gs.gsVerts;
- inc(gs.gsVerts);
- if gsVNum[vi]=0 then
- GetMem(gsVIndex[vi], 256 * 4)
- else begin
- if gsVNum[vi] and $ff = $ff then
- ReallocMem(gsVIndex[vi], (gsVNum[vi] + 1 + 256) * 4);
- end;
- gsVIndex[vi][gsVNum[vi]] := result;
- inc(gsVNum[vi]);
- end;