Enqueue是什么意思?

nmj2086 / 2023-09-03 / 原文

加入队列。

反义词:dequeue。

代码示例:

        // Enqueue the root tiles that are renderable and visible.
        for (i = 0, len = levelZeroTiles.length; i < len; ++i) {
            tile = levelZeroTiles[i];
            primitive._tileReplacementQueue.markTileRendered(tile);
            if (tile.needsLoading) {
                queueTileLoad(primitive, tile);
            }
            if (tile.renderable && tileProvider.computeTileVisibility(tile, frameState, occluders) !== Visibility.NONE) {
                traversalQueue.enqueue(tile);
            } else {
                ++debug.tilesCulled;
                if (!tile.renderable) {
                    ++debug.tilesWaitingForChildren;
                }
            }
        }

>>tilereplacementqueue和tileloadqueue和traversalQueue三个队列的区别:

 好像还有一个tilestorender数组。

一共两个数组,两个队列。

在一开始beginFrame时,_tileLoadQueue置为空,_tileReplacementQueue标记为开始。

tilestoRender表示已经加载好的,可以进行渲染了。

traversalQueue用于遍历四叉树。一开始队列里只有两个根节点,在一次while循环里要依次把里面的切片dequeue()直到里面为空每一次循环中,都会遍历它的children,将它在视野内的children加到队列里。如果children还有的不满足视差条件怎么办?继续遍历知道traversalQueue里的每一个切片都满足条件。

>>traversalQueue跟tilestoRender变量感觉是等价的。前者满足条件的都会加到tilestoRender里。只不过好像每一帧tilstoRender都会置空。但是traversalQueue不会。

那随着时间的增长,traversalQueue会不会爆炸呢?