UNPKG

@arcgis/core

Version:

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

50 lines (44 loc) 3.24 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{Float3PassUniform as e}from"../../shaderModules/Float3PassUniform.js";import{Float4sPassUniform as o}from"../../shaderModules/Float4sPassUniform.js";import{FloatsPassUniform as r}from"../../shaderModules/FloatsPassUniform.js";import{glsl as v}from"../../shaderModules/glsl.js";import{Matrix3PassUniform as t}from"../../shaderModules/Matrix3PassUniform.js";import{VertexAttribute as a}from"../../../lib/VertexAttribute.js";import{vvColorNumber as i}from"../../../materials/VisualVariablePassParameters.js";function l(l,n){const{vertex:s,attributes:u}=l;n.hasVvInstancing&&(n.vvSize||n.vvColor)&&u.add(a.INSTANCEFEATUREATTRIBUTE,"vec4"),n.vvSize?(s.uniforms.add(new e("vvSizeMinSize",(e=>e.vvSize.minSize))),s.uniforms.add(new e("vvSizeMaxSize",(e=>e.vvSize.maxSize))),s.uniforms.add(new e("vvSizeOffset",(e=>e.vvSize.offset))),s.uniforms.add(new e("vvSizeFactor",(e=>e.vvSize.factor))),s.uniforms.add(new t("vvSymbolRotationMatrix",(e=>e.vvSymbolRotationMatrix))),s.uniforms.add(new e("vvSymbolAnchor",(e=>e.vvSymbolAnchor))),s.code.add(v`vec3 vvScale(vec4 _featureAttribute) { return clamp(vvSizeOffset + _featureAttribute.x * vvSizeFactor, vvSizeMinSize, vvSizeMaxSize); } vec4 vvTransformPosition(vec3 position, vec4 _featureAttribute) { return vec4(vvSymbolRotationMatrix * ( vvScale(_featureAttribute) * (position + vvSymbolAnchor)), 1.0); }`),s.code.add(v` const float eps = 1.192092896e-07; vec4 vvTransformNormal(vec3 _normal, vec4 _featureAttribute) { vec3 vvScale = clamp(vvSizeOffset + _featureAttribute.x * vvSizeFactor, vvSizeMinSize + eps, vvSizeMaxSize); return vec4(vvSymbolRotationMatrix * _normal / vvScale, 1.0); } ${n.hasVvInstancing?v` vec4 vvLocalNormal(vec3 _normal) { return vvTransformNormal(_normal, instanceFeatureAttribute); } vec4 localPosition() { return vvTransformPosition(position, instanceFeatureAttribute); }`:""} `)):s.code.add(v`vec4 localPosition() { return vec4(position, 1.0); } vec4 vvLocalNormal(vec3 _normal) { return vec4(_normal, 1.0); }`),n.vvColor?(s.constants.add("vvColorNumber","int",i),s.uniforms.add(new r("vvColorValues",(e=>e.vvColor.values),i),new o("vvColorColors",(e=>e.vvColor.colors),i)),s.code.add(v` vec4 interpolateVVColor(float value) { if (value <= vvColorValues[0]) { return vvColorColors[0]; } for (int i = 1; i < vvColorNumber; ++i) { if (vvColorValues[i] >= value) { float f = (value - vvColorValues[i-1]) / (vvColorValues[i] - vvColorValues[i-1]); return mix(vvColorColors[i-1], vvColorColors[i], f); } } return vvColorColors[vvColorNumber - 1]; } vec4 vvGetColor(vec4 featureAttribute) { return interpolateVVColor(featureAttribute.y); } ${n.hasVvInstancing?v` vec4 vvColor() { return vvGetColor(instanceFeatureAttribute); }`:"vec4 vvColor() { return vec4(1.0); }"} `)):s.code.add(v`vec4 vvColor() { return vec4(1.0); }`)}export{l as VisualVariables};