public:
+ /* CLO123 FROM HERE TO THE CORRESPONDING MARKER ARE THINGS THAT
+ CAN BE DELETED AFTER WE DROP THE ASCII SCENERY FORMAT */
typedef vector < sgVec3 * > free_vec3_list;
typedef vector < sgVec2 * > free_vec2_list;
typedef vector < unsigned short * > free_index_list;
// node list
point_list nodes;
int ncount;
+ /* CLO123 MARKER */
// global tile culling data
Point3D center;
// pointer to ssg transform for this tile
ssgTransform *terra_transform;
- ssgTransform *lights_transform;
+ ssgTransform *rwy_lights_transform;
+ ssgTransform *gnd_lights_transform;
// pointer to ssg range selector for this tile
ssgRangeSelector *terra_range;
- ssgRangeSelector *lights_range;
+ ssgRangeSelector *rwy_lights_range;
+ ssgRangeSelector *gnd_lights_range;
// we create several preset brightness and can choose which one we
// want based on lighting conditions.
- ssgSelector *lights_brightness;
+ ssgSelector *gnd_lights_brightness;
// ADA --->
// Runway centre coords.
*/
volatile int pending_models;
- ssgBranch* obj_load( const std::string& path,
- ssgVertexArray* lights, bool is_base );
+ bool obj_load( const std::string& path,
+ ssgBranch* geometry,
+ ssgBranch* rwy_lights,
+ ssgVertexArray* gound_lights,
+ bool is_base );
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.
/**
* Add terrain mesh and ground lighting to scene graph.
*/
- void add_ssg_nodes( ssgBranch* terrain, ssgBranch* ground );
+ void add_ssg_nodes( ssgBranch* terrain_branch,
+ ssgBranch* gnd_lights_branch,
+ ssgBranch* rwy_lights_branch );
/**
* disconnect terrain mesh and ground lighting nodes from scene
* graph for this tile.
*/
void disconnect_ssg_nodes();
+
+
+ /**
+ * 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; }
+
};