X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FScenery%2FFGTileLoader.cxx;h=07ab8408016b16cb22259a1a68840f715674a342;hb=b9e866cfdd765cc742a6c9b3e35c8a9c1ca08dfc;hp=a709b57f0fdb1b5b7ccaaa0393c93a2b04bef3ef;hpb=865fb56c5aab7a465b4ee726c8e8d360df80acd1;p=flightgear.git diff --git a/src/Scenery/FGTileLoader.cxx b/src/Scenery/FGTileLoader.cxx index a709b57f0..07ab84080 100644 --- a/src/Scenery/FGTileLoader.cxx +++ b/src/Scenery/FGTileLoader.cxx @@ -64,6 +64,19 @@ FGTileLoader::~FGTileLoader() #endif // ENABLE_THREADS } + +#if 0 // we don't ever want to do this I don't think +/** + * + */ +void FGTileLoader::reinit() { + while ( !tile_load_queue.empty() ) { + tile_load_queue.pop(); + } +} +#endif + + /** * */ @@ -89,12 +102,24 @@ FGTileLoader::add( FGTileEntry* tile ) tile_load_queue.push( tile ); } +#ifdef WISH_PLIB_WAS_THREADED // but it isn't +/** + * + */ +void +FGTileLoader::remove( FGTileEntry* tile ) +{ + tile_free_queue.push( tile ); +} +#endif + /** * */ void FGTileLoader::update() { + #ifdef ENABLE_THREADS // send a signal to the pager thread that it is allowed to load // another tile @@ -103,14 +128,29 @@ FGTileLoader::update() mutex.unlock(); #else if ( !tile_load_queue.empty() ) { - cout << "loading next tile ..." << endl; + // cout << "loading next tile ..." << endl; // load the next tile in the queue FGTileEntry* tile = tile_load_queue.front(); tile_load_queue.pop(); + tile->load( tile_path, true ); - FGTileMgr::loaded( tile ); + + FGTileMgr::ready_to_attach( tile ); + } + +#ifdef WISH_PLIB_WAS_THREADED // but it isn't + if ( !tile_free_queue.empty() ) { + // cout << "freeing next tile ..." << endl; + // free the next tile in the queue + FGTileEntry* tile = tile_free_queue.front(); + tile_free_queue.pop(); + tile->free_tile(); + delete tile; } +#endif + #endif // ENABLE_THREADS + } @@ -135,7 +175,19 @@ FGTileLoader::LoaderThread::run() tile->load( loader->tile_path, true ); set_cancel( SGThread::CANCEL_DEFERRED ); - FGTileMgr::loaded( tile ); + FGTileMgr::ready_to_attach( tile ); + +#ifdef WISH_PLIB_WAS_THREADED // but it isn't + // Handle and pending removals + while ( !loader->tile_free_queue.empty() ) { + // cout << "freeing next tile ..." << endl; + // free the next tile in the queue + FGTileEntry* tile = loader->tile_free_queue.pop(); + tile->free_tile(); + delete tile; + } +#endif + } pthread_cleanup_pop(1); }