unsafe private void updateHistogram(uint *pimage, uint *pilut, OctreeNode *ptree, ushort *plist, ref ushort *pfree, nint cp, nint sr) { nuint level = leafLevel; nuint prnod = 0; uint ppix = 0; uint *ip = pimage, ipe = ip + cp; for (; ip < ipe; ip += sr) { uint cpix = *ip; if (cpix == 0) { continue; } OctreeNode *pnode; if (ppix == cpix & prnod != 0) { pnode = ptree + prnod; goto Accumulate; } ppix = cpix; nuint idx = pilut[(nuint)(byte)(ppix)] | pilut[(nuint)(byte)(ppix >> 8) + 256] | pilut[(nuint)(byte)(ppix >> 16) + 512]; nuint parent = idx & 7; pnode = ptree + parent; for (nuint i = 1; i <= level; i++) { idx >>= 3; ushort *childloc = (ushort *)pnode + (idx & 7); nuint next = *childloc; if (next == 0) { if (*pfree == 0) { pfree = plist; pruneTree(ptree, pfree); level = leafLevel; prnod = 0; if (i > level) { break; } } next = *pfree++; *childloc = (ushort)next; OctreeNode.SetLevel(ptree + next, (uint)i); } parent = next; pnode = ptree + parent; } prnod = parent; Accumulate: OctreeNode.AddSample(pnode, ppix); } }