private warp_Triangle[] getTransparentQueue() { if (transparentQueue.Count == 0) { return(null); } IEnumerator enumerator = transparentQueue.GetEnumerator(); warp_Triangle[] tri = new warp_Triangle[transparentQueue.Count]; int id = 0; while (enumerator.MoveNext()) { tri[id++] = (warp_Triangle)enumerator.Current; } return(sortTriangles(tri, 0, tri.GetLength(0) - 1)); }
private warp_Triangle[] getTransparentQueue() { if (transparentQueue.Count==0) return null; IEnumerator enumerator=transparentQueue.GetEnumerator(); warp_Triangle[] tri=new warp_Triangle[transparentQueue.Count]; int id=0; while (enumerator.MoveNext()) tri[id++]=(warp_Triangle)enumerator.Current; return sortTriangles(tri,0,tri.GetLength(0)-1); }
private warp_Triangle[] sortTriangles(warp_Triangle[] tri, int L, int R) { //FIX: Added Index bounds checking. (Was causing random exceptions) - Created by: X if (L < 0) L = 0; if (L > tri.GetLength(0)) L = tri.GetLength(0); if (R < 0) R = 0; if (R > tri.GetLength(0)) R = tri.GetLength(0); // - Created by: X float m = (tri[L].dist + tri[R].dist) / 2; int i=L; int j=R; warp_Triangle temp; do { while (tri[i].dist>m) i++; while (tri[j].dist<m) j--; if (i<=j) { temp=tri[i]; tri[i]=tri[j]; tri[j]=temp; i++; j--; } } while (j>=i); if (L<j) sortTriangles(tri,L,j); if (R>i) sortTriangles(tri,i,R); return tri; }