36 |
|
LoadOctree(octn); |
37 |
|
} |
38 |
|
~RadSimulManager() { |
39 |
< |
Cleanup(); |
39 |
> |
// Cleanup(); |
40 |
> |
if (ray_pnprocs > 0) ray_pclose(0); |
41 |
|
} |
42 |
|
/// Load octree and prepare renderer |
43 |
|
bool LoadOctree(const char *octn); |
97 |
|
static void RTracer(RAY *r); |
98 |
|
// Call-back for FIFO |
99 |
|
static int Rfifout(RAY *r); |
100 |
+ |
protected: |
101 |
|
// Check for changes to render flags, etc. |
102 |
|
bool UpdateMode(); |
101 |
– |
protected: |
103 |
|
RNUMBER lastRayID; // last ray ID assigned |
104 |
|
public: |
105 |
|
int rtFlags; // operation (RT*) flags |
113 |
|
~RtraceSimulManager() { |
114 |
|
FlushQueue(); |
115 |
|
} |
116 |
+ |
/// Load octree and prepare renderer |
117 |
+ |
bool LoadOctree(const char *octn) { |
118 |
+ |
if ((octn != NULL) & (octname != NULL) && |
119 |
+ |
!strcmp(octn, octname)) |
120 |
+ |
return true; |
121 |
+ |
srcFollowed.NewBitMap(0); |
122 |
+ |
curFlags &= ~RTtraceSources; |
123 |
+ |
return RadSimulManager::LoadOctree(octn); |
124 |
+ |
} |
125 |
|
/// Set number of computation threads (0 => #cores) |
126 |
|
int SetThreadCount(int nt = 0) { |
127 |
|
if (nt <= 0) nt = castonly ? 1 : GetNCores(); |
162 |
|
int FlushQueue(); |
163 |
|
/// Close octree, free data, return status |
164 |
|
int Cleanup(bool everything = false) { |
165 |
< |
SetCookedCall(NULL); |
166 |
< |
SetTraceCall(NULL); |
167 |
< |
rtFlags = 0; |
165 |
> |
int st = RadSimulManager::Cleanup(everything); |
166 |
> |
srcFollowed.NewBitMap(0); |
167 |
> |
curFlags &= ~RTtraceSources; |
168 |
> |
if (everything) { |
169 |
> |
SetCookedCall(NULL); |
170 |
> |
SetTraceCall(NULL); |
171 |
> |
rtFlags &= ~RTmask; |
172 |
> |
} |
173 |
|
UpdateMode(); |
174 |
|
lastRayID = 0; |
175 |
< |
return RadSimulManager::Cleanup(everything); |
175 |
> |
return st; |
176 |
|
} |
177 |
|
}; |
178 |
|
|