#include <queue>
-#include <plib/ssg.h>
-
#include <simgear/bucket/newbucket.hxx>
-#ifdef ENABLE_THREADS
+#if defined(ENABLE_THREADS) && ENABLE_THREADS
# include <simgear/threads/SGQueue.hxx>
#endif // ENABLE_THREADS
// forward declaration
+class ssgBranch;
+class ssgEntity;
class FGTileEntry;
class FGDeferredModel;
void initialize_queue();
// schedule a tile for loading
- void sched_tile( const SGBucket& b );
+ void sched_tile( const SGBucket& b, const bool is_inner_ring );
// schedule a needed buckets for loading
void schedule_needed(double visibility_meters, SGBucket curr_bucket);
- // see comment at prep_ssg_nodes()
- void prep_ssg_node( int idx );
-
FGHitList hit_list;
SGBucket previous_bucket;
// current longitude latitude
double longitude;
double latitude;
- double last_longitude;
- double last_latitude;
+ double altitude_m;
/**
* tile cache
* Queue tiles for loading.
*/
FGTileLoader loader;
- int counter_hack;
/**
* Work queues.
* model_queue is the set of models that need to be loaded by the
* primary render thread.
*/
-#ifdef ENABLE_THREADS
+#if defined(ENABLE_THREADS) && ENABLE_THREADS
static SGLockedQueue<FGTileEntry *> attach_queue;
static SGLockedQueue<FGDeferredModel *> model_queue;
#else
#endif // ENABLE_THREADS
static queue<FGTileEntry *> delete_queue;
+ /**
+ * Tile filter indicator, to implement multipass rendering
+ */
+ static bool tile_filter;
+
public:
/**
// internal function, do not call directly.)
void update_queues();
+ // get state of all the scenery loading queues
+ bool all_queues_empty();
+
// given the current lon/lat (in degrees), fill in the array of
// local chunks. If the chunk isn't already in the cache, then
// read it from disk.
int update( SGLocation *location, double visibility_meters,
sgdVec3 abs_pos_vector );
- int updateCurrentElevAtPos(sgdVec3 abs_pos_vector, Point3D center );
+ int updateCurrentElevAtPos( sgdVec3 abs_pos_vector, double altitude_m,
+ Point3D center );
// Determine scenery altitude. Normally this just happens when we
// render the scene, but we'd also like to be able to do this
inline SGBucket get_current_bucket () { return current_bucket; }
inline SGBucket get_previous_bucket () { return previous_bucket; }
+
+ static bool set_tile_filter( bool f );
+ static int tile_filter_cb( ssgEntity *, int );
};