X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FScenery%2Ftileentry.hxx;h=574018e4f532d88922aa908589681a3888e41109;hb=2e4f836a9883f90690c11a7d0dcebd4cb7e46445;hp=091110212d15b8c16e26f9795092d881bab93d9e;hpb=606b8d13d9d02198fea282bfe75f9c02c7a0d07e;p=flightgear.git diff --git a/src/Scenery/tileentry.hxx b/src/Scenery/tileentry.hxx index 091110212..574018e4f 100644 --- a/src/Scenery/tileentry.hxx +++ b/src/Scenery/tileentry.hxx @@ -2,7 +2,7 @@ // // Written by Curtis Olson, started May 1998. // -// Copyright (C) 1998, 1999 Curtis L. Olson - curt@flightgear.org +// Copyright (C) 1998 - 2001 Curtis L. Olson - curt@flightgear.org // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as @@ -38,7 +38,7 @@ #endif #include -#include +#include #include @@ -49,6 +49,7 @@ #include #include +#include #if defined( sgi ) #include @@ -62,6 +63,39 @@ typedef vector < Point3D > point_list; typedef point_list::iterator point_list_iterator; typedef point_list::const_iterator const_point_list_iterator; +class FGTileEntry; + + +/** + * A class to hold deferred model loading info + */ +class FGDeferredModel { + +private: + + string model_path; + string texture_path; + FGTileEntry *tile; + ssgTransform *obj_trans; + +public: + + inline FGDeferredModel() { } + inline FGDeferredModel( const string mp, const string tp, + FGTileEntry *t, ssgTransform *ot ) + { + model_path = mp; + texture_path = tp; + tile = t; + obj_trans = ot; + } + inline ~FGDeferredModel() { } + inline string get_model_path() const { return model_path; } + inline string get_texture_path() const { return texture_path; } + inline FGTileEntry *get_tile() const { return tile; } + inline ssgTransform *get_obj_trans() const { return obj_trans; } +}; + /** * A class to encapsulate everything we need to know about a scenery tile. @@ -117,12 +151,32 @@ private: // want based on lighting conditions. ssgSelector *lights_brightness; + // ADA ---> + // Runway centre coords. + Point3D rway_center; // Reqd. for switching as function of distance from runway center + //pointers for Runway lights + ssgTransform *lightmaps_transform; // branch for runway lights + ssgRangeSelector *lightmaps_range; // tried to maintain same structure as Curt's ground + ssgSelector *lightmaps_brightness; // selector node for points/ lightmaps + + ssgSimpleState *lightmap_state; // OpenGL state of the polygons that make up runway lights + ssgVertexArray *light_points; // array of runway light coords. + // <--- ADA + /** - * Indicates this tile has been loaded from a file. - * Note that this may be set asynchronously by another thread. + * Indicates this tile has been loaded from a file and connected + * into the scene graph. Note that this may be set asynchronously + * by another thread. */ volatile bool loaded; + /** + * Count of pending models to load for this tile. This tile + * cannot be removed until this number reaches zero (i.e. no + * pending models to load for this tile.) + */ + volatile int pending_models; + ssgBranch* obj_load( const std::string& path, ssgVertexArray* lights, bool is_base ); @@ -130,12 +184,23 @@ private: public: + // ADA ---> + ssgTransform *ols_transform; // transform node for flols simulation + ssgSelector *lightmaps_sequence; // selector node for points/ lightmaps + ssgBranch* gen_runway_lights(ssgVertexArray *points,ssgVertexArray *normal, ssgVertexArray *dir, int *type); + // <--- ADA + // Constructor FGTileEntry( const SGBucket& b ); // 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(); @@ -157,9 +222,40 @@ public: * Load tile data from a file. * @param base name of directory containing tile data file. * @param is_base is this a base terrain object for which we should generate - * random ground light points - */ + * random ground light points */ void load( const SGPath& base, bool is_base ); + + /** + * Return true if the tile entry is loaded, otherwise return false + * indicating that the loading thread is still working on this. + */ + inline bool is_loaded() const { return loaded; } + + /** + * decrement the pending models count + */ + inline void dec_pending_models() { pending_models--; } + + /** + * return the number of remaining pending models for this tile + */ + inline int get_pending_models() const { return pending_models; } + + /** + * Return the "bucket" for this tile + */ + inline SGBucket get_tile_bucket() const { return tile_bucket; } + + /** + * Add terrain mesh and ground lighting to scene graph. + */ + void add_ssg_nodes( ssgBranch* terrain, ssgBranch* ground ); + + /** + * disconnect terrain mesh and ground lighting nodes from scene + * graph for this tile. + */ + void disconnect_ssg_nodes(); };