source: trunk/packages/vizservers/nanovis/BucketSort.cpp @ 2844

Last change on this file since 2844 was 2798, checked in by ldelgass, 12 years ago

Add emacs mode magic line in preparation for indentation cleanup

  • Property svn:eol-style set to native
File size: 933 bytes
Line 
1/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2#include "BucketSort.h"
3
4using namespace PCA;
5
6void
7BucketSort::init()
8{
9    _count = 0;
10    memset(_buffer, 0, sizeof(ClusterList*) * _size);
11}
12
13void
14BucketSort::sort(ClusterAccel* clusterAccel, const Mat4x4& cameraMat, int level)
15{
16    if (clusterAccel == 0) {
17        return;
18    }
19    Cluster* cluster = clusterAccel->startPointerCluster[level - 1];
20    Cluster* c = &(cluster[0]);
21    Cluster* end = &(cluster[clusterAccel->numOfClusters[level - 1] - 1]);
22
23    Vector3 pos;
24    for (; c <= end; c = (Cluster*) ((char *)c + sizeof(Cluster))) {
25        pos.transform(c->centroid, cameraMat);
26        addBucket(c, pos.length()*_invMaxLength);
27    }
28}       
29
30void
31BucketSort::addBucket(Cluster* cluster, float ratio)
32{
33    int index = (int) (ratio * _size);
34    ClusterList* c = &(_memChunck[_count++]);
35    c->data = cluster;
36    c->next =_buffer[index];
37    _buffer[index] = c;
38}
39
Note: See TracBrowser for help on using the repository browser.