UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) 5.74 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import{__decorate as e}from"tslib";import t from"../../../../../core/Logger.js";import{destroyMaybe as i}from"../../../../../core/maybe.js";import{watch as r,initial as s}from"../../../../../core/reactiveUtils.js";import{property as o,cast as n,subclass as l}from"../../../../../core/accessorSupport/decorators.js";import{ZEROS as d}from"../../../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{RenderNodeVisualizerNode as h}from"./RenderNodeVisualizerNode.js";import{ColorAttachment0 as a}from"../../../../webgl/enums.js";import c from"../../../../../widgets/Widget.js";import{tsx as p}from"../../../../../widgets/support/widget.js";let u=class extends c{constructor(){super(...arguments),this.clearColor=d,this.previewSize=v,this.node=null,this.active=!0,this._previews=new Map,this._allPreviews=new Set,this._dirty=!0,this.previewEnabled=!0}castPreviewSize(e){return Math.max(e,v)}get _namedFilters(){const e=this.filter?.filter(e=>"color"!==e&&"depth"!==e);return e&&e.length>0?e:null}initialize(){this.node||(this.node=new h({view:this.view,destroyedCB:()=>{this.node=null,this.destroy()},clearColor:this.clearColor}));const e=this.node;this.addHandles([r(()=>this.active,i=>{this.view.stage.renderer.fboCache.debugCallback=i?(i,r,s)=>{if(null==i||null==r||!this.view.stage.renderView.renderingContext)return this._previews.forEach(([e])=>e.release()),void this._previews.clear();if("fbo visualizer"===i||null!=this._namedFilters&&!this._namedFilters.includes(i)||r&&0===r.colorAttachments.length&&null==r.depthStencilTexture)return;const{width:o,height:n}=r,l=n>this.previewSize?Math.round(o*this.previewSize/n):o,d=n>this.previewSize?this.previewSize:n;if(l/d>4)return void t.getLogger(this).warnOnce(`Skipping preview of wide ${i} FBO (${l}x${d}px)`);const h=this._fboInFocus?.startsWith(`${i}\n`)??!1,a=e.getDownscaledFBO(r,h,i,l,d),c=null!=r.depthStencilTexture,p=this.filter?.includes("color")||!this.filter?.includes("depth"),u=this.filter?.includes("depth")||!this.filter?.includes("color");a.fbo?.colorAttachments.forEach((e,t)=>{const s=a.getAttachment(e);if(s){s.retain();const l=c&&t===r.colorAttachments.length;if(l&&!u||!l&&!p)return;const d=l?`${i}\ndepth`:`${i}\n${w(r,e)}`,h=this._previews.get(d);h?.[0]?.release(),this._previews.set(d,[s,o,n]),this._allPreviews.add(d)}}),a.detachAllColors(),a.release(),this._dirty=!0}:null},s),r(()=>this.previewEnabled,e=>{e?(this._updatePreviews(),this._updateInterval=setInterval(()=>this._updatePreviews())):this._removeUpdate()},s)])}destroy(){this.removeHandles(),this.view.stage?.renderer&&(this.view.stage.renderer.fboCache.debugCallback=null),this._removeUpdate(),this.node&&(this.node.destroyedCB=()=>{},this.node=i(this.node)),this._previews.forEach(([e])=>e.release()),this._previews.clear()}_updatePreviews(){if(!this._dirty)return;this._dirty=!1,this.renderNow();let e=!1;this._previews.forEach((t,i)=>e=i===this._fboInFocus||e),this._fboInFocus&&!e&&this._deselectFocusFBO(),this._allPreviews.forEach((e,t)=>{const i=this._getElement(t);if(!i)return;i.getContext("2d").clearRect(0,0,i.width,i.height)}),this._previews.forEach(([e,t,i],r)=>{const s=this._getElement(r);if(!s)return;const o=i>this.previewSize?Math.round(t*this.previewSize/i):t,n=i>this.previewSize?this.previewSize:i;s.style.width=`${o}px`,s.style.height=`${n}px`;const l=s.width,d=s.height,h=this._getElement(`label-${r}`);h&&(h.innerText=`${r} (${t}x${i})`);const a=this.node?.getPreviewContent(l,d,e,r),c=s.getContext("2d");c.clearRect(0,0,l,d),a&&c.putImageData(a,0,0)})}_getElement(e){return document.querySelector("arcgis-scene")?.shadowRoot?.getElementById(e)??document.getElementById(e)}_fboPreviewStyle(e){return{width:"1px",height:"1px",background:e?"rgba(0, 0, 0, 0.5)":"rgba(0, 0, 0, 0)",transform:"rotateX(180deg)"}}_removeUpdate(){null!=this._updateInterval&&(clearInterval(this._updateInterval),this._updateInterval=null)}_selectFocusFBO(e){this._fboInFocus=e,this.view.stage.renderView.requestRender()}_deselectFocusFBO(){this._fboInFocus=null,this.node?.clearFocusedFBO(),this.view.stage.renderView.requestRender()}_renderFBOPreviews(){const e=this._allPreviews.size>0?Array.from(this._allPreviews.keys()).sort().map(e=>this._renderFBOPreview(e)):p("div",null);return p("div",{styles:{display:"flex",flexFlow:"row wrap",justifyContent:"flex-end",gap:"2px"}},e)}_renderFBOPreview(e){const t=this._previews.has(e);return p("div",{key:e,onclick:()=>this._selectFocusFBO(e),styles:{display:"flex",flexFlow:"column nowrap",alignItems:"center"}},p("canvas",{id:e,styles:this._fboPreviewStyle(t)}),p("div",{id:e,styles:{display:"flex",justifyContent:"center"}},p("p",{id:`label-${e}`,styles:{fontSize:"12px",color:"white",margin:"1px",textShadow:"-1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000"}})))}render(){return p("div",{class:"esri-widget debug-widget",styles:{display:"flex",flexFlow:"column nowrap",alignItems:"flex-end",background:"rgba(255, 255, 255, 0)"}},this._renderFBOPreviews(),p("button",{onclick:()=>this._deselectFocusFBO(),type:"button"},"Reset focus"))}};function w(e,t){return`${e.getColorTexture(t)?.debugName??"color"+(t-a)}`}e([o({constructOnly:!0})],u.prototype,"view",void 0),e([o({constructOnly:!0})],u.prototype,"clearColor",void 0),e([o()],u.prototype,"previewSize",void 0),e([n("previewSize")],u.prototype,"castPreviewSize",null),e([o()],u.prototype,"filter",void 0),e([o()],u.prototype,"_namedFilters",null),e([o()],u.prototype,"node",void 0),e([o()],u.prototype,"active",void 0),e([o()],u.prototype,"previewEnabled",void 0),u=e([l("esri.views.3d.webgl-engine.effects.debug.RenderNodeVisualizer")],u);const v=140;export{u as RenderNodeVisualizer,v as minimumPreviewSize};