UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 3.49 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{_ as e}from"../../../../../chunks/tslib.es6.js";import{unitRGBAFromColor as s}from"../../../../../core/colorUtils.js";import{smoothstep as t,clamp as i}from"../../../../../core/mathUtils.js";import{watch as r,syncAndInitial as a}from"../../../../../core/reactiveUtils.js";import{property as o}from"../../../../../core/accessorSupport/decorators/property.js";import"../../../../../core/has.js";import"../../../../../core/Logger.js";import"../../../../../core/RandomLCG.js";import{subclass as h}from"../../../../../core/accessorSupport/decorators/subclass.js";import{n as c,i as p,f as n}from"../../../../../chunks/vec32.js";import{create as m}from"../../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{ViewingMode as d}from"../../../../ViewingMode.js";import{RenderCategory as l}from"../../../webgl.js";import g from"../../../webgl/RenderNode.js";import{ShadowHighlightPassParameters as u,ShadowHighlightTechnique as f}from"./ShadowHighlightTechnique.js";import{RenderRequestType as w}from"../../lib/basicInterfaces.js";import{defaultShadowOpacity as _,defaultShadowDifference as O,defaultShadowColor as y}from"../../../../support/HighlightDefaults.js";const P=1/512,b=4e4,j=5e4;let v=class extends g{constructor(e){super(e),this.produces=l.COMPOSITE,this.consumes={required:[l.COMPOSITE,"highlights"]},this._passParameters=new u,this._maxOpacity=1,this._shadowDifference=.2}initialize(){this.addHandles([r((()=>this.view.highlightOptions.shadowOpacity),(e=>{this._passParameters.shadowOpacity=e??_,this._updateOccludedShadowOpacity(),this._ensureMaxOpacity()}),a),r((()=>this.view.highlightOptions.shadowDifference),(e=>{this._shadowDifference=e??O,this._updateOccludedShadowOpacity(),this._ensureMaxOpacity()}),a),r((()=>this.view.highlightOptions.shadowColor),(e=>{this._passParameters.shadowColor=s(e??y),this._ensureMaxOpacity()}),a)])}_updateOccludedShadowOpacity(){this._passParameters.occludedShadowOpacity=this._passParameters.shadowOpacity*(1-this._shadowDifference)}_ensureMaxOpacity(){const e=Math.max(this._passParameters.shadowOpacity,this._passParameters.occludedShadowOpacity);this._maxOpacity=e*this._passParameters.shadowColor[3],this.requestRender(w.UPDATE)}precompile(){this.techniques.precompile(f)}render(e){const s=e.find((({name:e})=>e===l.COMPOSITE)),t=this.bindParameters;if(!t.shadowHighlightsVisible||!t.depth||!this._ensureIfVisible(t.camera,t.lighting.mainLight.direction))return s;const i=this.techniques.get(f);if(i.compiled){this._passParameters.highlight=e.find((({name:e})=>"highlights"===e))?.getTexture(),this._passParameters.origin=t.camera.center;const r=this.renderingContext;r.bindFramebuffer(s.fbo),r.bindTechnique(i,t,this._passParameters),r.screen.draw()}else this.requestRender(w.UPDATE);return s}_ensureIfVisible(e,s){this._passParameters.opacityElevation=1-t(b,j,e.relativeElevation);const r=this.viewingMode===d.Global?c(x,e.center):p(x,0,0,1),a=n(r,s);return this._passParameters.dayNightTerminator=t(0,1,i(30*a,0,1)),this._maxOpacity*this._passParameters.opacityElevation*this._passParameters.dayNightTerminator>=P}};e([o()],v.prototype,"produces",void 0),e([o()],v.prototype,"consumes",void 0),e([o({constructOnly:!0})],v.prototype,"viewingMode",void 0),v=e([h("esri.views.3d.webgl-engine.effects.highlight.ShadowHighlight")],v);const x=m();export{v as ShadowHighlight};