Package gaiasky.data

Class StreamingOctreeLoader

java.lang.Object
gaiasky.data.StreamingOctreeLoader
All Implemented Interfaces:
ISceneGraphLoader, IObserver
Direct Known Subclasses:
OctreeGroupLoader

public abstract class StreamingOctreeLoader
extends java.lang.Object
implements IObserver, ISceneGraphLoader
Contains the infrastructure common to all multifile octree loaders which streams data on-demand from disk and unloads unused data.
  • Field Details

    • PRELOAD_DEPTH

      protected static final int PRELOAD_DEPTH
      Data will be pre-loaded at startup down to this octree depth.
      See Also:
      Constant Field Values
    • LOAD_QUEUE_MAX_SIZE

      protected static final int LOAD_QUEUE_MAX_SIZE
      Default load queue size in octants
      See Also:
      Constant Field Values
    • MIN_QUEUE_CLEAR_MS

      protected static final long MIN_QUEUE_CLEAR_MS
      Minimum time to pass to be able to clear the queue again
      See Also:
      Constant Field Values
    • MAX_LOAD_CHUNK

      protected static final int MAX_LOAD_CHUNK
      Maximum number of pages to send to load every batch
      See Also:
      Constant Field Values
    • instance

      public static StreamingOctreeLoader instance
    • nLoadedStars

      protected int nLoadedStars
      Current number of stars that are loaded
    • maxLoadedStars

      protected final long maxLoadedStars
      Max number of stars loaded at once
    • toLoadQueue

      protected java.util.Queue<OctreeNode> toLoadQueue
      The octant loading queue
    • loadingPaused

      protected boolean loadingPaused
      Whether loading is paused or not
    • lastQueueClearMs

      protected long lastQueueClearMs
      Last time of a queue clear event went through
    • name

      protected java.lang.String name
    • description

      protected java.lang.String description
    • toUnloadQueue

      protected java.util.Queue<OctreeNode> toUnloadQueue
      This queue is sorted ascending by access date, so that we know which element to release if needed (oldest)
    • loadedIds

      protected long[] loadedIds
      Loaded octant ids, for logging
    • loadedObjects

      protected int loadedObjects
    • maxLoadedIds

      protected int maxLoadedIds
    • idxLoadedIds

      protected int idxLoadedIds
    • metadata

      protected java.lang.String metadata
    • particles

      protected java.lang.String particles
    • daemon

      Daemon thread that gets the data loading requests and serves them
  • Constructor Details

    • StreamingOctreeLoader

      public StreamingOctreeLoader()
  • Method Details

    • initialize

      public void initialize​(uk.ac.starlink.util.DataSource ds)
      Specified by:
      initialize in interface ISceneGraphLoader
    • initialize

      public void initialize​(java.lang.String[] files) throws java.lang.RuntimeException
      Specified by:
      initialize in interface ISceneGraphLoader
      Throws:
      java.lang.RuntimeException
    • loadData

      public com.badlogic.gdx.utils.Array<? extends SceneGraphNode> loadData()
      Specified by:
      loadData in interface ISceneGraphLoader
    • addLoadedInfo

      protected void addLoadedInfo​(long id, int nobjects)
    • flushLoadedIds

      protected void flushLoadedIds()
    • loadOctreeData

      protected abstract AbstractOctreeWrapper loadOctreeData()
      Loads the nodes and the octree
      Returns:
    • queue

      public static void queue​(OctreeNode octant)
      Adds the octant to the load queue
      Parameters:
      octant -
    • clearQueue

      public static void clearQueue()
      Clears the current load queue
    • getLoadQueueSize

      public static int getLoadQueueSize()
    • getNLoadedStars

      public static int getNLoadedStars()
    • touch

      public static void touch​(OctreeNode octant)
      Moves the octant to the end of the unload queue
      Parameters:
      octant -
    • emptyLoadQueue

      public void emptyLoadQueue()
      Removes all octants from the current load queue. This happens when the camera viewport changes radically (velocity is high, direction changes a lot, etc.) so that the old octants are dropped and newly observed octants are loaded right away
    • addToQueue

      public void addToQueue​(OctreeNode octant)
    • touchOctant

      public void touchOctant​(OctreeNode octant)
      Puts it at the end of the toUnloadQueue
    • flushLoadQueue

      public void flushLoadQueue()
      Tells the loader to start loading the octants in the queue.
    • abortCurrentLoading

      public void abortCurrentLoading()
      Tells the daemon to immediately stop the loading of octants and wait for new data
    • loadLod

      public void loadLod​(java.lang.Integer lod, AbstractOctreeWrapper octreeWrapper) throws java.io.IOException
      Loads all the levels of detail until the given one.
      Parameters:
      lod - The level of detail to load.
      octreeWrapper - The octree wrapper.
      Throws:
      java.io.IOException
    • loadOctant

      public void loadOctant​(OctreeNode octant, AbstractOctreeWrapper octreeWrapper, java.lang.Integer level) throws java.io.IOException
      Loads the data of the given octant and its children down to the given level
      Parameters:
      octant - The octant to load.
      octreeWrapper - The octree wrapper.
      level - The depth to load
      Throws:
      java.io.IOException
    • loadOctants

      public int loadOctants​(com.badlogic.gdx.utils.Array<OctreeNode> octants, AbstractOctreeWrapper octreeWrapper, java.util.concurrent.atomic.AtomicBoolean abort) throws java.io.IOException
      Loads the objects of the given octants
      Parameters:
      octants - The list holding the octants to load.
      octreeWrapper - The octree wrapper.
      abort - State variable that will be set to true if an abort is called.
      Returns:
      The actual number of loaded octants
      Throws:
      java.io.IOException
    • unloadOctant

      public void unloadOctant​(OctreeNode octant, AbstractOctreeWrapper octreeWrapper)
      Unloads the given octant
      Parameters:
      octant -
      octreeWrapper -
    • loadOctant

      public abstract boolean loadOctant​(OctreeNode octant, AbstractOctreeWrapper octreeWrapper, boolean fullinit) throws java.io.IOException
      Loads the data of the given octant
      Parameters:
      octant - The octant to load.
      octreeWrapper - The octree wrapper.
      fullinit - Whether to fully initialise the objects (on-demand load) or not (startup)
      Returns:
      True if the octant was loaded, false otherwise
      Throws:
      java.io.IOException
    • notify

      public void notify​(Events event, java.lang.Object... data)
      Specified by:
      notify in interface IObserver
    • setName

      public void setName​(java.lang.String name)
      Specified by:
      setName in interface ISceneGraphLoader
    • setDescription

      public void setDescription​(java.lang.String description)
      Specified by:
      setDescription in interface ISceneGraphLoader