UNPKG

@arcgis/core

Version:

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

25 lines (24 loc) 2.12 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import{fromValues as o}from"../../../../../../core/libs/gl-matrix-2/factories/vec2f64.js";import{IsNaN as r}from"../../../core/shaderLibrary/util/IsNaN.glsl.js";import{Float2BindUniform as e}from"../../../core/shaderModules/Float2BindUniform.js";import{glsl as a}from"../../../core/shaderModules/glsl.js";import{Matrix3PassUniform as s}from"../../../core/shaderModules/Matrix3PassUniform.js";import{Matrix4BindUniform as t}from"../../../core/shaderModules/Matrix4BindUniform.js";import{Matrix4PassUniform as l}from"../../../core/shaderModules/Matrix4PassUniform.js";const i=o(.5,-4e-4);function c(o,c){const m=o.vertex;m.include(r),m.constants.add("depthBias","vec2",i),m.uniforms.add(new e("inverseViewport",(o=>o.inverseViewport))),c.legacy?(m.uniforms.add(new t("proj",(o=>o.camera.projectionMatrix))),m.code.add(a`vec2 calculateProjectedBiasXY(vec4 projPos, vec3 globalNormal) { float offsetXY = depthBias.x; vec4 projNormal = proj * localView * vec4(globalNormal, 0.0); return offsetXY * projPos.w * 2.0 * inverseViewport * normalize(projNormal.xyz).xy; }`)):(m.uniforms.add(new s("transformNormalViewFromGlobal",(o=>o.transformNormalViewFromGlobal)),new l("transformProjFromView",(o=>o.transformProjFromView))),m.code.add(a`vec2 calculateProjectedBiasXY(vec4 projPos, vec3 globalNormal) { float offsetXY = depthBias.x; vec4 projNormal = transformProjFromView * vec4(transformNormalViewFromGlobal * globalNormal, 0.0); return offsetXY * projPos.w * 2.0 * inverseViewport * normalize(projNormal.xyz).xy; }`)),m.code.add(a`float _calculateProjectedBiasZ(vec4 projPos) { float offsetZ = depthBias.y; return sqrt(max(projPos.z,0.0)) * offsetZ; } vec4 adjustProjectedPosition(vec4 projPos, vec3 worldNormal, float lineWidth) { vec2 offsetXY = calculateProjectedBiasXY(projPos, worldNormal); if (!isNaN(offsetXY.x) && !isNaN(offsetXY.y)) { projPos.xy += offsetXY; } projPos.z += _calculateProjectedBiasZ(projPos); return projPos; }`)}export{c as AdjustProjectedPosition};