/* COPYRIGHT Esri - https://js.arcgis.com/5.0/LICENSE.txt */
import{__decorate as t}from"tslib";import{disposeMaybe as e}from"../../../../core/maybe.js";import{watch as r}from"../../../../core/reactiveUtils.js";import{property as a,subclass as i}from"../../../../core/accessorSupport/decorators.js";import{createQuadVAO as s}from"./glUtil3D.js";import{SortedRenderGeometryRenderer as o}from"./SortedRenderGeometryRenderer.js";import{HeatmapPassParameters as n,HeatmapTechnique as h}from"../shaders/HeatmapTechnique.js";import{HeatmapTechniqueConfiguration as m}from"../shaders/HeatmapTechniqueConfiguration.js";import{PixelType as p}from"../../../webgl/enums.js";import{FramebufferObject as l}from"../../../webgl/FramebufferObject.js";import c from"../../../webgl/Texture.js";import{TextureDescriptor as d}from"../../../webgl/TextureDescriptor.js";let u=class extends o{constructor(t){super(t),this.pixelRatio=1,this._colorRampData=new Uint8ClampedArray(4),this.type="draped-heatmap",this._heatmapParameters=new n,this._configuration=new m;const e=new d;e.pixelFormat=t.pixelFormat,e.internalFormat=t.internalFormat,e.dataType=t.dataType,e.samplingMode=t.samplingMode,e.wrapMode=33071;const r=t.rendererContext.rctx;this._densityMap=new l(r,e),this._vao=s(r),this._configuration.usesHalfFloat=t.dataType!==p.FLOAT,t.rendererContext.pluginContext.techniques.precompile(h,this._configuration)}initialize(){const t=this._colorRampData,e=new d(t.length/4,1);e.wrapMode=33071,this._colorRamp=new c(this.rctx,e,t),this._heatmapParameters.densityMap=this._densityMap.colorTexture,this.addHandles(r(()=>[this.colorRampData,this.minDensity,this.maxDensity,this.fieldTotal,this.pixelRatio,this.searchRadius],()=>this.rendererContext.notifyContentChanged()))}destroy(){this._densityMap=e(this._densityMap),this._vao=e(this._vao),this._colorRamp=e(this._colorRamp)}get searchRadius(){return this._heatmapParameters.searchRadius}set searchRadius(t){t!==this._heatmapParameters.searchRadius&&(this._heatmapParameters.searchRadius=t,this.notifyChange("searchRadius"))}get minDensity(){return this._heatmapParameters.minDensity}set minDensity(t){t!==this._heatmapParameters.minDensity&&(this._heatmapParameters.minDensity=t,this.notifyChange("minDensity"))}get maxDensity(){return this._heatmapParameters.maxDensity}set maxDensity(t){t!==this._heatmapParameters.maxDensity&&(this._heatmapParameters.maxDensity=t,this.notifyChange("maxDensity"))}get fieldTotal(){return this._heatmapParameters.fieldTotal}set fieldTotal(t){this._heatmapParameters.fieldTotal=t,this.notifyChange("fieldTotal")}get colorRampData(){return this._colorRampData}set colorRampData(t){const{colorRamp:e}=this._heatmapParameters;if(null!=e&&t!==this._colorRampData){const r=e.descriptor.width,a=t.length/4;a!==r&&e.resize(a,1),e.setData(t)}this._colorRampData=t}get _colorRamp(){return this._heatmapParameters.colorRamp}set _colorRamp(t){this._heatmapParameters.colorRamp=t}get hasHighlights(){return!1}get hasWater(){return!1}render(t){const e=this.sortedRenderers;if(0===e.length)return;const r=this.rctx.getBoundFramebufferObject(),a=this.rctx.getViewport(),{pixelRatio:i}=this,s=Math.ceil(a.width*i),o=Math.ceil(a.height*i);this._densityMap.resize(s,o),this.rctx.bindFramebuffer(this._densityMap),this.rctx.setViewport(0,0,s,o),this.rctx.clear(16384);let n=!1;if(e.forAll(e=>{const r=e.acquireTechniques(t);r&&(e.render(t,r),n=!0)}),this.rctx.bindFramebuffer(r),this.rctx.setViewport(a.x,a.y,a.width,a.height),!n)return;this.rctx.bindVAO(this._vao);const m=this.rendererContext.pluginContext.techniques.get(h,this._configuration);this.rctx.bindTechnique(m,t.bind,this._heatmapParameters),this.rctx.drawArrays(m.primitiveType,0,this._vao.vertexCount("geometry"))}};t([a()],u.prototype,"searchRadius",null),t([a()],u.prototype,"minDensity",null),t([a()],u.prototype,"maxDensity",null),t([a()],u.prototype,"fieldTotal",null),t([a()],u.prototype,"pixelRatio",void 0),t([a()],u.prototype,"colorRampData",null),t([a({constructOnly:!0})],u.prototype,"dataType",void 0),t([a({constructOnly:!0})],u.prototype,"samplingMode",void 0),t([a({constructOnly:!0})],u.prototype,"pixelFormat",void 0),t([a({constructOnly:!0})],u.prototype,"internalFormat",void 0),t([a()],u.prototype,"_colorRampData",void 0),u=t([i("esri.views.3d.webgl-engine.lib.DrapedHeatmapRenderer")],u);export{u as DrapedHeatmapRenderer};
