@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 1.97 kB
JavaScript
import{isNone as t,isSome as e}from"../../../../../core/maybe.js";import{ComponentRangeRunLengthEncoded as h}from"./IndexRange/ComponentRangeRunLengthEncoded.js";class i{constructor(t,e){this.pickability=null,this.highlightCounts=null,this.verticalOffsets=null,this.cachedGeometryRanges=null,this.cachedHighlightRanges=null,this.cachedDefaultRanges=null,this.offsets=e.slice();const i=this.count;this.visibility=new h(i),this.materialDataBuffer=t.getBuffer(i),this.materialDataIndices=new Uint16Array(i);for(let h=0;h<i;h++)this.materialDataIndices[h]=this.materialDataBuffer.acquireIndex()}destroy(){for(let t=0;t<this.count;t++)this.materialDataBuffer.releaseIndex(this.materialDataIndices[t])}get count(){return this.offsets.length-1}get geometryRanges(){return t(this.cachedGeometryRanges)&&(this.cachedGeometryRanges=this.visibility.computeOffsetRanges(this.offsets)),this.cachedGeometryRanges}get highlightRanges(){return t(this.highlightCounts)?null:(this._updateCachedHighlightRanges(),this.cachedHighlightRanges)}get defaultShadowMapRanges(){return t(this.highlightCounts)?this.geometryRanges:(this._updateCachedHighlightRanges(),this.cachedDefaultRanges)}highlightsDirty(){this.cachedHighlightRanges=null,this.cachedDefaultRanges=null}visibilityDirty(){this.cachedGeometryRanges=null,this.highlightsDirty()}_updateCachedHighlightRanges(){if((t(this.cachedHighlightRanges)||t(this.cachedDefaultRanges))&&e(this.highlightCounts)){const{highlightRanges:t,defaultRanges:e}=s(this.highlightCounts,this.visibility,this.offsets);this.cachedHighlightRanges=t,this.cachedDefaultRanges=e}}}function s(t,e,h){const i=[],s=[];let a=h.length,n=h.length;return e.forEachComponent((e=>(t[e]>0?(a!==e-1&&(i.length&&i.push(h[a+1]-i[i.length-1]),i.push(h[e])),a=e):(n!==e-1&&(s.length&&s.push(h[n+1]-s[s.length-1]),s.push(h[e])),n=e),!0))),i.length&&i.push(h[a+1]-i[i.length-1]),s.length&&s.push(h[n+1]-s[s.length-1]),{highlightRanges:i,defaultRanges:s}}export{i as default};