import type { Tileset } from './tileset';
import type { Tile } from './tile';
import type { FrameState } from './types';
import { TilesetBaseTraverser } from './tileset-base-traverser';
declare class TilesetSkipTraverser extends TilesetBaseTraverser {
    private baseScreenSpaceError;
    private skipScreenSpaceErrorFactor;
    private skipLevels;
    private _traversalStack;
    private _descendantTraversalStack;
    private _selectionTraversalStack;
    private _selectionTraversalancestorStack;
    constructor(tileset: Tileset);
    traverse(root: Tile, frameState: FrameState, cacheFrameStates?: FrameState[]): void;
    reset(): void;
    private executeTraversal;
    private updateAndPushChildren;
    private selectDesiredTile;
    /**
     * Mark descendant tiles for rendering, and update as needed
     */
    private selectDescendants;
    /**
     * Determine if a tile has reached the limit of level of detail skipping.
     * If so, it should _not_ be skipped: it should be loaded and rendered
     *
     * @private
     * @param {Cesium3DTileset} tileset
     * @param {Cesium3DTile} tile
     * @returns {boolean} true if this tile should not be skipped
     */
    private reachedSkippingThreshold;
    /**
     * Update links to the ancestor tiles that have content
     */
    private updateTileAncestorContentLinks;
    /**
     * Determine if a tile is part of the base traversal.
     * If not, this tile could be considered for level of detail skipping
     */
    private inBaseTraversal;
    /**
     * Traverse the tree and check if their selected frame is the current frame. If so, add it to a selection queue.
     * This is a preorder traversal so children tiles are selected before ancestor tiles.
     *
     * The reason for the preorder traversal is so that tiles can easily be marked with their
     * selection depth. A tile's _selectionDepth is its depth in the tree where all non-selected tiles are removed.
     * This property is important for use in the stencil test because we want to render deeper tiles on top of their
     * ancestors. If a tileset is very deep, the depth is unlikely to fit into the stencil buffer.
     *
     * We want to select children before their ancestors because there is no guarantee on the relationship between
     * the children's z-depth and the ancestor's z-depth. We cannot rely on Z because we want the child to appear on top
     * of ancestor regardless of true depth. The stencil tests used require children to be drawn first.
     *
     * NOTE: 3D Tiles uses 3 bits from the stencil buffer meaning this will not work when there is a chain of
     * selected tiles that is deeper than 7. This is not very likely.
     */
    private traverseAndSelect;
}
export { TilesetSkipTraverser };
