Change GenerateInitialVerticesIndexList to slices

This commit is contained in:
Layl 2019-05-04 20:22:17 +02:00
parent 54a4a4ed8e
commit e0d086dc69

View File

@ -184,10 +184,10 @@ pub unsafe fn genTangSpace<I: Geometry>(
let mut pTriInfos = vec![STriInfo::zero(); iNrTrianglesIn]; let mut pTriInfos = vec![STriInfo::zero(); iNrTrianglesIn];
iNrTSPaces = GenerateInitialVerticesIndexList( iNrTSPaces = GenerateInitialVerticesIndexList(
pTriInfos.as_mut_ptr(), &mut pTriInfos,
piTriListIn.as_mut_ptr(), &mut piTriListIn,
geometry, geometry,
iNrTrianglesIn as c_int, iNrTrianglesIn,
); );
GenerateSharedVerticesIndexList(piTriListIn.as_mut_ptr(), geometry, iNrTrianglesIn); GenerateSharedVerticesIndexList(piTriListIn.as_mut_ptr(), geometry, iNrTrianglesIn);
iTotTris = iNrTrianglesIn; iTotTris = iNrTrianglesIn;
@ -1887,39 +1887,33 @@ unsafe fn GenerateSharedVerticesIndexListSlow<I: Geometry>(
} }
} }
unsafe fn GenerateInitialVerticesIndexList<I: Geometry>( unsafe fn GenerateInitialVerticesIndexList<I: Geometry>(
mut pTriInfos: *mut STriInfo, pTriInfos: &mut [STriInfo],
mut piTriList_out: *mut libc::c_int, piTriList_out: &mut [i32],
geometry: &mut I, geometry: &mut I,
iNrTrianglesIn: libc::c_int, iNrTrianglesIn: usize,
) -> usize { ) -> usize {
let mut iTSpacesOffs: usize = 0; let mut iTSpacesOffs: usize = 0;
let mut f = 0; let mut f = 0;
let mut t: libc::c_int = 0i32; let mut t: usize = 0;
let mut iDstTriIndex: libc::c_int = 0i32; let mut iDstTriIndex = 0;
f = 0; f = 0;
while f < geometry.get_num_faces() { while f < geometry.get_num_faces() {
let verts = geometry.get_num_vertices_of_face(f); let verts = geometry.get_num_vertices_of_face(f);
if !(verts != 3 && verts != 4) { if !(verts != 3 && verts != 4) {
(*pTriInfos.offset(iDstTriIndex as isize)).iOrgFaceNumber = f as c_int; pTriInfos[iDstTriIndex].iOrgFaceNumber = f as c_int;
(*pTriInfos.offset(iDstTriIndex as isize)).iTSpacesOffs = iTSpacesOffs as c_int; pTriInfos[iDstTriIndex].iTSpacesOffs = iTSpacesOffs as c_int;
if verts == 3 { if verts == 3 {
let mut pVerts: *mut libc::c_uchar = (*pTriInfos.offset(iDstTriIndex as isize)) let mut pVerts = &mut pTriInfos[iDstTriIndex].vert_num;
.vert_num pVerts[0] = 0;
.as_mut_ptr(); pVerts[1] = 1;
*pVerts.offset(0isize) = 0i32 as libc::c_uchar; pVerts[2] = 2;
*pVerts.offset(1isize) = 1i32 as libc::c_uchar; piTriList_out[iDstTriIndex * 3 + 0] = face_vert_to_index(f, 0) as c_int;
*pVerts.offset(2isize) = 2i32 as libc::c_uchar; piTriList_out[iDstTriIndex * 3 + 1] = face_vert_to_index(f, 1) as c_int;
*piTriList_out.offset((iDstTriIndex * 3i32 + 0i32) as isize) = piTriList_out[iDstTriIndex * 3 + 2] = face_vert_to_index(f, 2) as c_int;
face_vert_to_index(f, 0) as c_int;
*piTriList_out.offset((iDstTriIndex * 3i32 + 1i32) as isize) =
face_vert_to_index(f, 1) as c_int;
*piTriList_out.offset((iDstTriIndex * 3i32 + 2i32) as isize) =
face_vert_to_index(f, 2) as c_int;
iDstTriIndex += 1 iDstTriIndex += 1
} else { } else {
(*pTriInfos.offset((iDstTriIndex + 1i32) as isize)).iOrgFaceNumber = f as c_int; pTriInfos[iDstTriIndex + 1].iOrgFaceNumber = f as c_int;
(*pTriInfos.offset((iDstTriIndex + 1i32) as isize)).iTSpacesOffs = pTriInfos[iDstTriIndex + 1].iTSpacesOffs = iTSpacesOffs as c_int;
iTSpacesOffs as c_int;
let i0 = face_vert_to_index(f, 0); let i0 = face_vert_to_index(f, 0);
let i1 = face_vert_to_index(f, 1); let i1 = face_vert_to_index(f, 1);
let i2 = face_vert_to_index(f, 2); let i2 = face_vert_to_index(f, 2);
@ -1949,50 +1943,40 @@ unsafe fn GenerateInitialVerticesIndexList<I: Geometry>(
} }
} }
if bQuadDiagIs_02 { if bQuadDiagIs_02 {
let mut pVerts_A: *mut libc::c_uchar = (*pTriInfos let mut pVerts_A = &mut pTriInfos[iDstTriIndex].vert_num;
.offset(iDstTriIndex as isize)) pVerts_A[0] = 0;
.vert_num pVerts_A[1] = 1;
.as_mut_ptr(); pVerts_A[2] = 2;
*pVerts_A.offset(0isize) = 0i32 as libc::c_uchar; piTriList_out[iDstTriIndex * 3 + 0] = i0 as c_int;
*pVerts_A.offset(1isize) = 1i32 as libc::c_uchar; piTriList_out[iDstTriIndex * 3 + 1] = i1 as c_int;
*pVerts_A.offset(2isize) = 2i32 as libc::c_uchar; piTriList_out[iDstTriIndex * 3 + 2] = i2 as c_int;
*piTriList_out.offset((iDstTriIndex * 3i32 + 0i32) as isize) = i0 as c_int;
*piTriList_out.offset((iDstTriIndex * 3i32 + 1i32) as isize) = i1 as c_int;
*piTriList_out.offset((iDstTriIndex * 3i32 + 2i32) as isize) = i2 as c_int;
iDstTriIndex += 1; iDstTriIndex += 1;
let mut pVerts_B: *mut libc::c_uchar = (*pTriInfos
.offset(iDstTriIndex as isize)) let mut pVerts_B = &mut pTriInfos[iDstTriIndex].vert_num;
.vert_num pVerts_B[0] = 0;
.as_mut_ptr(); pVerts_B[1] = 2;
*pVerts_B.offset(0isize) = 0i32 as libc::c_uchar; pVerts_B[2] = 3;
*pVerts_B.offset(1isize) = 2i32 as libc::c_uchar; piTriList_out[iDstTriIndex * 3 + 0] = i0 as c_int;
*pVerts_B.offset(2isize) = 3i32 as libc::c_uchar; piTriList_out[iDstTriIndex * 3 + 1] = i2 as c_int;
*piTriList_out.offset((iDstTriIndex * 3i32 + 0i32) as isize) = i0 as c_int; piTriList_out[iDstTriIndex * 3 + 2] = i3 as c_int;
*piTriList_out.offset((iDstTriIndex * 3i32 + 1i32) as isize) = i2 as c_int;
*piTriList_out.offset((iDstTriIndex * 3i32 + 2i32) as isize) = i3 as c_int;
iDstTriIndex += 1 iDstTriIndex += 1
} else { } else {
let mut pVerts_A_0: *mut libc::c_uchar = (*pTriInfos let mut pVerts_A_0 = &mut pTriInfos[iDstTriIndex].vert_num;
.offset(iDstTriIndex as isize)) pVerts_A_0[0] = 0;
.vert_num pVerts_A_0[1] = 1;
.as_mut_ptr(); pVerts_A_0[2] = 3;
*pVerts_A_0.offset(0isize) = 0i32 as libc::c_uchar; piTriList_out[iDstTriIndex * 3 + 0] = i0 as c_int;
*pVerts_A_0.offset(1isize) = 1i32 as libc::c_uchar; piTriList_out[iDstTriIndex * 3 + 1] = i1 as c_int;
*pVerts_A_0.offset(2isize) = 3i32 as libc::c_uchar; piTriList_out[iDstTriIndex * 3 + 2] = i3 as c_int;
*piTriList_out.offset((iDstTriIndex * 3i32 + 0i32) as isize) = i0 as c_int;
*piTriList_out.offset((iDstTriIndex * 3i32 + 1i32) as isize) = i1 as c_int;
*piTriList_out.offset((iDstTriIndex * 3i32 + 2i32) as isize) = i3 as c_int;
iDstTriIndex += 1; iDstTriIndex += 1;
let mut pVerts_B_0: *mut libc::c_uchar = (*pTriInfos
.offset(iDstTriIndex as isize)) let mut pVerts_B_0 = &mut pTriInfos[iDstTriIndex].vert_num;
.vert_num pVerts_B_0[0] = 1;
.as_mut_ptr(); pVerts_B_0[1] = 2;
*pVerts_B_0.offset(0isize) = 1i32 as libc::c_uchar; pVerts_B_0[2] = 3;
*pVerts_B_0.offset(1isize) = 2i32 as libc::c_uchar; piTriList_out[iDstTriIndex * 3 + 0] = i1 as c_int;
*pVerts_B_0.offset(2isize) = 3i32 as libc::c_uchar; piTriList_out[iDstTriIndex * 3 + 1] = i2 as c_int;
*piTriList_out.offset((iDstTriIndex * 3i32 + 0i32) as isize) = i1 as c_int; piTriList_out[iDstTriIndex * 3 + 2] = i3 as c_int;
*piTriList_out.offset((iDstTriIndex * 3i32 + 1i32) as isize) = i2 as c_int;
*piTriList_out.offset((iDstTriIndex * 3i32 + 2i32) as isize) = i3 as c_int;
iDstTriIndex += 1 iDstTriIndex += 1
} }
} }
@ -2000,9 +1984,9 @@ unsafe fn GenerateInitialVerticesIndexList<I: Geometry>(
} }
f += 1 f += 1
} }
t = 0i32; t = 0;
while t < iNrTrianglesIn { while t < iNrTrianglesIn {
(*pTriInfos.offset(t as isize)).iFlag = 0i32; pTriInfos[t].iFlag = 0;
t += 1 t += 1
} }
return iTSpacesOffs; return iTSpacesOffs;