source: GTP/trunk/Lib/Vis/Preprocessing/src/Halton.cpp @ 2575

Revision 2575, 1.7 KB checked in by bittner, 17 years ago (diff)

big merge: preparation for havran ray caster, check if everything works

Line 
1#include "Halton.h"
2
3#ifdef PERFTIMER 
4#include "Timer/PerfTimer.h"
5#endif
6
7#define PREGENERATE_HALTON 0
8
9namespace GtpVisibilityPreprocessor {
10
11 
12#ifdef PERFTIMER 
13PerfTimer haltonTimer;
14#endif
15 
16// global halton generator
17
18  Halton2 halton2;
19  float Halton2::_invBases[2];
20
21  //float Halton<6>::_invBases[6];
22 
23  template<int T> float Halton<T>::_invBases[T];
24 
25  Halton<1> dummmyHalton1(true);
26  Halton<2> dummmyHalton2(true);
27  Halton<3> dummmyHalton3(true);
28  Halton<4> dummmyHalton4(true);
29  Halton<5> dummmyHalton5(true);
30  Halton<6> dummmyHalton6(true);
31
32
33  int HaltonSequence::sPregeneratedDim = 0;
34  int HaltonSequence::sPregeneratedNumber = 0;
35  float *HaltonSequence::sPregeneratedValues = NULL;
36 
37#if PREGENERATE_HALTON
38  // pregenerate first 100k numbers for 6 dimensions
39  static HaltonSequence staticHalton(6, 200000);
40#endif
41 
42  // special construtor for pregenerating static halton sequences
43  HaltonSequence::HaltonSequence(const int dim,
44                                                                 const int number) {
45
46        sPregeneratedDim = 0;
47        sPregeneratedNumber = 0;
48        sPregeneratedValues = new float[number*dim];
49
50        float *p = sPregeneratedValues;
51        int i;
52        for (i=0; i < number; i++, p+=dim) {
53          GetNext(dim, p);
54        }
55       
56        sPregeneratedDim = dim;
57        sPregeneratedNumber = number;
58  }
59
60void
61HaltonSequence::GetNext(const int dimensions, float *p)
62{
63  //  haltonTimer.Entry();
64#if PREGENERATE_HALTON
65  if (index <= sPregeneratedNumber && dimensions <= sPregeneratedDim) {
66        float *pp = sPregeneratedValues + (sPregeneratedDim*(index-1));
67        for (int i=0; i < dimensions; i++)
68          p[i] = pp[i];
69  } else
70#endif
71        {
72          for (int i=0; i < dimensions; i++)
73                p[i] = (float)GetNumber(i+1);
74        }
75  GenerateNext();
76  //  haltonTimer.Exit();
77}
78
79}
Note: See TracBrowser for help on using the repository browser.