@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 2.12 kB
JavaScript
import{smoothstep as t,clamp as e}from"../../../../core/mathUtils.js";import{isNone as s,disposeMaybe as a,releaseMaybe as i}from"../../../../core/maybe.js";import{n as r,s as h,e as o}from"../../../../chunks/vec3.js";import{c}from"../../../../chunks/vec3f64.js";import{ViewingMode as n}from"../../../ViewingMode.js";import{ReadShadowMapBindParameters as m}from"../core/shaderLibrary/shading/ReadShadowMap.glsl.js";import{createQuadVAO as _}from"./glUtil3D.js";import{ShadowHighlightPassParameters as p,ShadowHighlightTechnique as d}from"../shaders/ShadowHighlightTechnique.js";import{vertexCount as u}from"../../../webgl/Util.js";const l=.001953125,g=4e4,w=5e4;class v{constructor(t,e){this._rctx=t,this._viewingMode=e,this._maxOpacity=1,this._passParameters=new p,this._drawParameters=new m,this._vao=_(this._rctx)}get _technique(){return s(this._techniqueCached)&&(this._techniqueCached=new d({rctx:this._rctx,viewingMode:this._viewingMode})),this._techniqueCached}render(t,e){if(!t.shadowMap.enabled||!t.linearDepthTexture||!this.isVisible)return;const s=this._technique;this._drawParameters.origin=t.camera.center,this._rctx.bindFramebuffer(e),this._rctx.bindTechnique(s,this._passParameters,t).bindDraw(this._drawParameters,t,this._passParameters),this._rctx.bindVAO(this._vao),this._rctx.drawArrays(s.primitiveType,0,u(this._vao,"geometry"))}get gpuMemoryUsage(){return this._vao?.size??0}setDefaultOptions(t){this._passParameters={...this._passParameters,...t},this._updateMaxOpacity()}updateParameters(s,a){this._passParameters.opacityElevation=1-t(g,w,s.relativeElevation);const i=this._viewingMode===n.Global?r(y,s.center):h(y,0,0,1),c=o(i,a);this._passParameters.dayNightTerminator=t(0,1,e(30*c,0,1))}dispose(){this._vao=a(this._vao),this._techniqueCached=i(this._techniqueCached)}get isVisible(){const{opacityElevation:t,dayNightTerminator:e}=this._passParameters;return this._maxOpacity*t*e>=l}_updateMaxOpacity(){const t=Math.max(this._passParameters.shadowOpacity,this._passParameters.occludedShadowOpacity);this._maxOpacity=t*this._passParameters.shadowColor[3]}}const y=c();export{v as ShadowHighlight};