@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 3.72 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.32/esri/copyright.txt for details.
*/
import{ZEROS as e}from"../../core/libs/gl-matrix-2/factories/vec2f64.js";import{PixelType as t,SizedPixelFormat as n,PixelFormat as r,TextureSamplingMode as a,TextureWrapMode as i,UniformType as o}from"./enums.js";import{Texture as s}from"./Texture.js";import{TextureDescriptor as u}from"./TextureDescriptor.js";function f(e,o,f="nearest",m=!1){const c=!(m&&"u8"===o.pixelType),l=c?t.FLOAT:t.UNSIGNED_BYTE,_=null==o.pixels||0===o.pixels.length?null:c?o.getAsRGBAFloat():o.getAsRGBA(),g=e.capabilities.textureFloatLinear,p=new u;return p.width=o.width,p.height=o.height,p.internalFormat=c?n.RGBA32F:r.RGBA,p.samplingMode=!g||"bilinear"!==f&&"cubic"!==f?a.NEAREST:a.LINEAR,p.dataType=l,p.wrapMode=i.CLAMP_TO_EDGE,new s(e,p,_)}function m(e,r){const{spacing:o,offsets:f,coefficients:m,size:[c,l]}=r,_=o[0]>1,g=new u;g.width=_?4*c:c,g.height=l,g.internalFormat=n.RGBA32F,g.dataType=t.FLOAT,g.samplingMode=a.NEAREST,g.wrapMode=i.CLAMP_TO_EDGE;const p=new Float32Array(_?c*l*16:2*f.length);if(_&&null!=m)for(let t=0,n=0;t<m.length;t++)p[n++]=m[t],t%3==2&&(p[n++]=1);else for(let t=0;t<l;t++)for(let e=0;e<c;e++){const n=4*(t*c+e),r=2*(e*l+t);p[n]=f[r],p[n+1]=f[r+1],p[n+3]=-1===f[r]?0:1}return new s(e,g,p)}function c(e,t){const n=new u;return n.internalFormat=r.RGBA,n.width=t.length/4,n.height=1,n.samplingMode=a.NEAREST,n.wrapMode=i.CLAMP_TO_EDGE,new s(e,n,t)}function l(t,n,r,a=1,i=!0){return{u_flipY:i,u_applyTransform:!!t,u_opacity:a,u_transformSpacing:t?t.spacing:e,u_transformGridSize:t?t.size:e,u_targetImageSize:n,u_srcImageSize:r}}function _(e,t){return{u_colormapOffset:t||0,u_colormapMaxIndex:e?e.length/4-1:0}}function g(e,t){return{u_scale:e,u_offset:t}}function p(e){return{u_bandCount:e.bandCount,u_minOutput:e.minOutput,u_maxOutput:e.maxOutput,u_minCutOff:e.minCutOff,u_maxCutOff:e.maxCutOff,u_factor:e.factor,u_useGamma:e.useGamma,u_gamma:e.gamma,u_gammaCorrection:e.gammaCorrection}}function A(e){return{u_hillshadeType:e.hillshadeType,u_sinZcosAs:e.sinZcosAs,u_sinZsinAs:e.sinZsinAs,u_cosZs:e.cosZs,u_weights:e.weights,u_factor:e.factor,u_minValue:e.minValue,u_maxValue:e.maxValue}}function T(e,t){const n=e.gl,r=t.glName,a=new Map;if(null==r)return a;const i=n.getProgramParameter(r,n.ACTIVE_UNIFORMS);let o;for(let s=0;s<i;s++)o=n.getActiveUniform(r,s),o&&a.set(o.name,{location:n.getUniformLocation(r,o.name),info:o});return a}function O(e,t,n){Object.keys(n).forEach((r=>{const a=t.get(r)||t.get(r+"[0]");a&&E(e,r,n[r],a)}))}function h(e,t,n,r){n.length===r.length&&(r.some((e=>null==e))||n.some((e=>null==e))||n.forEach(((n,a)=>{t.setUniform1i(n,a),e.bindTexture(r[a],a)})))}function E(e,t,n,r){if(null===r||null==n)return!1;const{info:a}=r;switch(a.type){case o.FLOAT:a.size>1?e.setUniform1fv(t,n):e.setUniform1f(t,n);break;case o.FLOAT_VEC2:e.setUniform2fv(t,n);break;case o.FLOAT_VEC3:e.setUniform3fv(t,n);break;case o.FLOAT_VEC4:e.setUniform4fv(t,n);break;case o.FLOAT_MAT3:e.setUniformMatrix3fv(t,n);break;case o.FLOAT_MAT4:e.setUniformMatrix4fv(t,n);break;case o.INT:a.size>1?e.setUniform1iv(t,n):e.setUniform1i(t,n);break;case o.BOOL:e.setUniform1i(t,n?1:0);break;case o.INT_VEC2:case o.BOOL_VEC2:e.setUniform2iv(t,n);break;case o.INT_VEC3:case o.BOOL_VEC3:e.setUniform3iv(t,n);break;case o.INT_VEC4:case o.BOOL_VEC4:e.setUniform4iv(t,n);break;default:return!1}return!0}export{c as createColormapTexture,f as createRasterTexture,m as createTransformTexture,g as getBasicGridUniforms,_ as getColormapUniforms,l as getCommonUniforms,A as getShadedReliefUniforms,p as getStretchUniforms,T as getUniformLocationInfos,h as setTextures,O as setUniforms};