diff --git a/src/neuroglancer/datasource/graphene/frontend.ts b/src/neuroglancer/datasource/graphene/frontend.ts index 2a674fce9..408ece3ce 100644 --- a/src/neuroglancer/datasource/graphene/frontend.ts +++ b/src/neuroglancer/datasource/graphene/frontend.ts @@ -61,8 +61,6 @@ import {Uint64} from 'neuroglancer/util/uint64'; import {makeDeleteButton} from 'neuroglancer/widget/delete_button'; import {DependentViewContext} from 'neuroglancer/widget/dependent_view_widget'; import {makeIcon} from 'neuroglancer/widget/icon'; -import {TrackableBoolean, TrackableBooleanCheckbox} from 'neuroglancer/trackable_boolean'; -import {makeDeleteButton} from 'neuroglancer/widget/delete_button'; import {VertexPositionFormat} from 'neuroglancer/mesh/base'; function vec4FromVec3(vec: vec3, alpha = 0) { diff --git a/src/neuroglancer/mesh/multiscale.ts b/src/neuroglancer/mesh/multiscale.ts index 3f4e9dad6..0cd31b060 100644 --- a/src/neuroglancer/mesh/multiscale.ts +++ b/src/neuroglancer/mesh/multiscale.ts @@ -134,7 +134,7 @@ export function getDesiredMultiscaleMeshChunks( const size = 1 << lod; const rowOffset = row * 5; const gridX = octree[rowOffset], gridY = octree[rowOffset + 1], gridZ = octree[rowOffset + 2], - childBegin = octree[rowOffset + 3], childEndAndEmpty = octree[rowOffset + 4]; + childBeginAndVirtual = octree[rowOffset + 3], childEndAndEmpty = octree[rowOffset + 4]; let xLower = gridX * size * chunkShape[0] + chunkGridSpatialOrigin[0], yLower = gridY * size * chunkShape[1] + chunkGridSpatialOrigin[1], zLower = gridZ * size * chunkShape[2] + chunkGridSpatialOrigin[2]; @@ -152,13 +152,18 @@ export function getDesiredMultiscaleMeshChunks( const pixelSize = minW / scaleFactor; if (priorLodScale === 0 || pixelSize * detailCutoff < priorLodScale) { - const lodScale = lodScales[lod]; + let lodScale = lodScales[lod]; + if ((childBeginAndVirtual & (1 << 31)) !== 0) { + lodScale = 0; + } + if (lodScale !== 0) { callback(lod, row, lodScale / pixelSize, (childEndAndEmpty >>> 31)); } if (lod > 0 && (lodScale === 0 || pixelSize * detailCutoff < lodScale)) { const nextPriorLodScale = lodScale === 0 ? priorLodScale : lodScale; + const childBegin = (childBeginAndVirtual & 0x7FFFFFFF) >>> 0; const childEnd = (childEndAndEmpty & 0x7FFFFFFF) >>> 0; for (let childRow = childBegin; childRow < childEnd; ++childRow) { handleChunk(lod - 1, childRow, nextPriorLodScale);