Class StreamingOctreeLoader

    • Field Detail

      • 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
      • 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
    • Constructor Detail

      • StreamingOctreeLoader

        public StreamingOctreeLoader()
    • Method Detail

      • initialize

        public void initialize​(java.lang.String[] files)
                        throws java.lang.RuntimeException
        Specified by:
        initialize in interface ISceneGraphLoader
        Throws:
        java.lang.RuntimeException
      • 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)
      • addToQueue

        public void addToQueue​(OctreeNode... octants)
        Adds a list of octants to the queue to be loaded
      • 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