UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 2.96 kB
import e from"../../../../../core/Error.js";import has from"../../../../../core/has.js";import r from"../../../../../core/Logger.js";import{toPt as t}from"../../../../../core/screenUtils.js";import{getWebGLCapabilities as o}from"../../../../webgl/capabilities.js";const s=8,l=s-2,a=r.getLogger("esri.views.2d.layers.features.support.rendererUtils"),n=e=>{if(!("visualVariables"in e)||!e.visualVariables||!e.visualVariables.length)return e;const r=e.clone(),t=r.visualVariables.map((e=>u(e)?p(e):e));return r.visualVariables=t,r};function i(e){return e.map((e=>u(e)?p(e.clone()):e))}function u(e){return("size"===e.type||"color"===e.type||"opacity"===e.type)&&null!=e.stops}function p(e){return e.stops=m(e.type,e.stops??[]),e}function c(e,r,t){return(1-t)*e+t*r}function f(e,r){const[o,...s]=r,a=s.pop(),n=s[0].value,i=s[s.length-1].value,u=(i-n)/l,p=[];for(let l=n;l<i;l+=u){let o=0;for(;l>=s[o].value;)o++;const a=s[o],n=r[o-1],i=l-n.value,u=a.value===n.value?1:i/(a.value-n.value);if("color"===e){const e=s[o],t=r[o-1],a=e.color.clone();a.r=c(t.color.r,a.r,u),a.g=c(t.color.g,a.g,u),a.b=c(t.color.b,a.b,u),a.a=c(t.color.a,a.a,u),p.push({value:l,color:a,label:e.label})}else if("size"===e){const e=s[o],a=r[o-1],n=t(e.size),i=c(t(a.size),n,u);p.push({value:l,size:i,label:e.label})}else{const e=s[o],t=c(r[o-1].opacity,e.opacity,u);p.push({value:l,opacity:t,label:e.label})}}return[o,...p,a]}function b(e){const[r,...t]=e,o=t.pop();for(;t.length>l;){let e=0,r=0;for(let o=1;o<t.length;o++){const s=t[o-1],l=t[o],a=Math.abs(l.value-s.value);a>r&&(r=a,e=o)}t.splice(e,1)}return[r,...t,o]}function m(e,r){return r.length<=s?r:(a.warn(`Found ${r.length} Visual Variable stops, but MapView only supports ${s}. Displayed stops will be simplified.`),r.length>2*s?f(e,r):b(r))}function g(){if(has("heatmap-force-raster"))return"raster";const{supportsTextureFloat:e,supportsTextureHalfFloat:r,supportsColorBufferFloat:t,supportsColorBufferFloatBlend:s,supportsColorBufferHalfFloat:l}=o("2d");return e&&t&&s||r&&l?"symbol":has("heatmap-allow-raster-fallback")?"raster":"none"}function h(r){if(!r)return!0;switch(r.type){case"dot-density":if(!o("2d").supportsTextureFloat)return a.error(new e("webgl-missing-extension","Missing WebGL extension OES_Texture_Float which is required for DotDensity")),!1;break;case"heatmap":{const r=g();if("none"===r||"raster"===r&&!has("heatmap-force-raster")){const t=o("2d"),s=["supportsTextureFloat","supportsTextureHalfFloat","supportsColorBufferFloat","supportsColorBufferFloatBlend","supportsColorBufferHalfFloat"].filter((e=>!t[e])).join(", ");if("none"===r)return a.errorOnce(new e("webgl-missing-extension",`Missing WebGL${t.type} requirements for Heatmap: ${s}`)),!1;"raster"===r&&a.warnOnce(`Missing WebGL${t.type} requirements for accelerated Heatmap: ${s}. Feature support may be limited.`)}break}}return!0}export{g as getSupportedHeatmapRenderer,h as isRendererSupported,n as simplifyVVRenderer,i as simplifyVisualVariables};