ssgLeaf* gen_lights( ssgVertexArray *lights, int inc, float bright );
+ double timestamp;
+
+
+ // this variable tracks the status of the incremental memory freeing.
+ enum {
+ NODES = 0x01,
+ VEC_PTRS = 0x02,
+ TERRA_NODE = 0x04,
+ GROUND_LIGHTS = 0x08,
+ RWY_LIGHTS = 0x10,
+ LIGHTMAPS = 0x20
+ };
+ int free_tracker;
+
public:
// ADA --->
// Destructor
~FGTileEntry();
-#ifdef WISH_PLIB_WAS_THREADED // but it isn't
- // Schedule tile to be freed/removed
- void sched_removal();
-#endif
-
// Clean up the memory used by this tile and delete the arrays
- // used by ssg as well as the whole ssg branch
- void free_tile();
+ // used by ssg as well as the whole ssg branch. This does a
+ // partial clean up and exits so we can spread the load across
+ // multiple frames. Returns false if work remaining to be done,
+ // true if dynamically allocated memory used by this tile is
+ // completely freed.
+ bool free_tile();
// Calculate this tile's offset
void SetOffset( const Point3D& p)
// Update the ssg transform node for this tile so it can be
// properly drawn relative to our (0,0,0) point
- void prep_ssg_node( const Point3D& p, float vis);
+ void prep_ssg_node( const Point3D& p, sgVec3 up, float vis);
/**
* Load tile data from a file.
* return the SSG Transform node for the terrain
*/
inline ssgTransform *get_terra_transform() { return terra_transform; }
+
+ void set_timestamp(double time_ms) { timestamp = time_ms; }
+
+ inline double get_timestamp() const { return timestamp; }
+
};