@@ -44,9 +44,9 @@ public enum LoadStatus {
4444 private LoadStatus loadStatus = LoadStatus .UNINITIALIZED ;
4545
4646 // One thread pool to load minimal representation of volume
47- private final TexturePreFetcher minResPreFetcher ; //!!!! = new TexturePreFetcher(MIN_RES_TILE_LOADER_CONCURRENCY, MIN_RES_TILE_LOADER_CONCURRENCY) ;
47+ private TexturePreFetcher minResPreFetcher ;
4848 // One thread pool to load current and prefetch textures
49- private final TexturePreFetcher futurePreFetcher ; //!!!! = new TexturePreFetcher(MIN_RES_TILE_LOADER_CONCURRENCY, HIGHER_RES_TILE_LOADER_CONCURRENCY) ;
49+ private TexturePreFetcher futurePreFetcher ;
5050
5151 // Refactoring 6/12/2013
5252 private SharedVolumeImage sharedVolumeImage ;
@@ -63,9 +63,6 @@ public enum LoadStatus {
6363 private Set <TileIndex > currentDisplayTiles = new HashSet <>();
6464
6565 public TileServer (SharedVolumeImage sharedVolumeImage , JadeStorageAttributes storageAttributes ) {
66- this .minResPreFetcher = new TexturePreFetcher (MIN_RES_TILE_LOADER_CONCURRENCY , MIN_RES_TILE_LOADER_CONCURRENCY );
67- this .futurePreFetcher = new TexturePreFetcher (MIN_RES_TILE_LOADER_CONCURRENCY , HIGHER_RES_TILE_LOADER_CONCURRENCY );
68-
6966 setSharedVolumeImage (sharedVolumeImage .setTileLoaderProvider (new BlockTiffOctreeTileLoaderProvider () {
7067 int concurrency = HIGHER_RES_TILE_LOADER_CONCURRENCY ;
7168
@@ -76,8 +73,6 @@ public BlockTiffOctreeLoadAdapter createLoadAdapter(String baseURI) {
7673 }
7774 }));
7875
79- minResPreFetcher .setTextureCache (getTextureCache ());
80- futurePreFetcher .setTextureCache (getTextureCache ());
8176 queueDrainedListener = new StatusUpdateListener () {
8277 @ Override
8378 public void update () {
@@ -99,8 +94,14 @@ private void startMinResPreFetch() {
9994 if (!sharedVolumeImage .isLoaded ()) {
10095 return ;
10196 }
97+ if (minResPreFetcher == null ) {
98+ minResPreFetcher = new TexturePreFetcher (MIN_RES_TILE_LOADER_CONCURRENCY , MIN_RES_TILE_LOADER_CONCURRENCY );
99+ minResPreFetcher .setTextureCache (getTextureCache ());
100+ minResPreFetcher .setLoadAdapter (sharedVolumeImage .getLoadAdapter ());
101+ } else {
102+ minResPreFetcher .clear ();
103+ }
102104 // queue load of all low resolution textures
103- minResPreFetcher .clear ();
104105 TileFormat format = sharedVolumeImage .getLoadAdapter ().getTileFormat ();
105106 List <MinResSliceGenerator > generators = new ArrayList <>();
106107 if (format .isHasXSlices ()) {
@@ -158,17 +159,18 @@ public void clearCache() {
158159 if (textureIds != null ) {
159160 textureCache .getHistoryCache ().storeObsoleteTextureIds (textureIds ); // so old texture ids can get deleted next draw
160161 }
161- minResPreFetcher .setTextureCache (textureCache );
162- futurePreFetcher .setTextureCache (textureCache );
162+ if (minResPreFetcher != null ) {
163+ minResPreFetcher .setTextureCache (textureCache );
164+ }
165+ if (futurePreFetcher != null ) {
166+ futurePreFetcher .setTextureCache (textureCache );
167+ }
163168 for (ViewTileManager vtm : viewTileManagers ) {
164169 vtm .clear ();
165170 vtm .setTextureCache (textureCache );
166171 }
167- if (!VolumeCache .useVolumeCache ()) {
168- startMinResPreFetch ();
169- }
170172 }
171-
173+
172174 public TileSet createLatestTiles () {
173175 TileSet result = new TileSet ();
174176 for (ViewTileManager vtm : viewTileManagers ) {
@@ -258,7 +260,17 @@ private void rearrangeLoadQueue(TileSet currentTiles) {
258260 }
259261 updateLoadStatus ();
260262
261- futurePreFetcher .clear ();
263+ if (!VolumeCache .useVolumeCache ()) {
264+ startMinResPreFetch ();
265+ }
266+
267+ if (futurePreFetcher == null ) {
268+ futurePreFetcher = new TexturePreFetcher (MIN_RES_TILE_LOADER_CONCURRENCY , HIGHER_RES_TILE_LOADER_CONCURRENCY );
269+ futurePreFetcher .setTextureCache (getTextureCache ());
270+ futurePreFetcher .setLoadAdapter (sharedVolumeImage .getLoadAdapter ());
271+ } else {
272+ futurePreFetcher .clear ();
273+ }
262274
263275 Set <TileIndex > cacheableTextures = new HashSet <TileIndex >();
264276 int maxCacheable = (int ) (0.90 * getTextureCache ().getFutureCache ().getMaxSize ());
@@ -415,8 +427,14 @@ public void componentHidden(ComponentEvent e) {
415427 }
416428
417429 public void stop () {
418- minResPreFetcher .clear ();
419- futurePreFetcher .clear ();
430+ if (minResPreFetcher != null ) {
431+ minResPreFetcher .clear ();
432+ minResPreFetcher = null ;
433+ }
434+ if (futurePreFetcher != null ) {
435+ futurePreFetcher .clear ();
436+ futurePreFetcher = null ;
437+ }
420438 }
421439
422440 //-------------------------------------------IMPLEMENTS VolumeLoadListener
@@ -425,11 +443,8 @@ public void volumeLoaded(URL url) {
425443 if (sharedVolumeImage == null ) {
426444 return ;
427445 }
428- // Initialize pre-fetchers
429- minResPreFetcher .setLoadAdapter (sharedVolumeImage .getLoadAdapter ());
430- futurePreFetcher .setLoadAdapter (sharedVolumeImage .getLoadAdapter ());
431446 clearCache ();
432- refreshCurrentTileSet ();
447+ // refreshCurrentTileSet();
433448 }
434449
435450}
0 commit comments