--- ray/src/rt/RtraceSimulManager.h 2024/12/16 20:18:36 2.20 +++ ray/src/rt/RtraceSimulManager.h 2025/01/02 16:16:49 2.21 @@ -1,4 +1,4 @@ -/* RCSid $Id: RtraceSimulManager.h,v 2.20 2024/12/16 20:18:36 greg Exp $ */ +/* RCSid $Id: RtraceSimulManager.h,v 2.21 2025/01/02 16:16:49 greg Exp $ */ /* * RtraceSimulManager.h * @@ -36,7 +36,7 @@ class RadSimulManager { (public) LoadOctree(octn); } ~RadSimulManager() { - Cleanup(); + // Cleanup(); } /// Load octree and prepare renderer bool LoadOctree(const char *octn); @@ -96,9 +96,9 @@ class RtraceSimulManager : public RadSimulManager { static void RTracer(RAY *r); // Call-back for FIFO static int Rfifout(RAY *r); +protected: // Check for changes to render flags, etc. bool UpdateMode(); -protected: RNUMBER lastRayID; // last ray ID assigned public: int rtFlags; // operation (RT*) flags @@ -112,6 +112,15 @@ class RtraceSimulManager : public RadSimulManager { ~RtraceSimulManager() { FlushQueue(); } + /// Load octree and prepare renderer + bool LoadOctree(const char *octn) { + if ((octn != NULL) & (octname != NULL) && + !strcmp(octn, octname)) + return true; + srcFollowed.NewBitMap(0); + curFlags &= ~RTtraceSources; + return RadSimulManager::LoadOctree(octn); + } /// Set number of computation threads (0 => #cores) int SetThreadCount(int nt = 0) { if (nt <= 0) nt = castonly ? 1 : GetNCores(); @@ -152,12 +161,17 @@ class RtraceSimulManager : public RadSimulManager { int FlushQueue(); /// Close octree, free data, return status int Cleanup(bool everything = false) { - SetCookedCall(NULL); - SetTraceCall(NULL); - rtFlags = 0; + int st = RadSimulManager::Cleanup(everything); + srcFollowed.NewBitMap(0); + curFlags &= ~RTtraceSources; + if (everything) { + SetCookedCall(NULL); + SetTraceCall(NULL); + rtFlags &= ~RTmask; + } UpdateMode(); lastRayID = 0; - return RadSimulManager::Cleanup(everything); + return st; } };