@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
30 lines (28 loc) • 3.9 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{normalFromMat4 as e}from"../../../../../../core/libs/gl-matrix-2/math/mat3.js";import{create as r}from"../../../../../../core/libs/gl-matrix-2/factories/mat3f64.js";import{IDENTITY as o}from"../../../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{i as a}from"../../../../../../chunks/vec32.js";import{create as n}from"../../../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{ShaderOutput as i}from"../ShaderOutput.js";import{DoublePrecision as t}from"../util/DoublePrecision.glsl.js";import{addViewNormal as s}from"../util/View.glsl.js";import{Float3BindUniform as l}from"../../shaderModules/Float3BindUniform.js";import{glsl as m}from"../../shaderModules/glsl.js";import{Matrix3PassUniform as c}from"../../shaderModules/Matrix3PassUniform.js";import{Matrix4PassUniform as d}from"../../shaderModules/Matrix4PassUniform.js";import{VertexAttribute as u}from"../../../lib/VertexAttribute.js";import{encodeDoubleHi as v,encodeDoubleLo as g}from"../../../../../webgl/doublePrecisionUtils.js";import{NoParameters as p}from"../../../../../webgl/NoParameters.js";class x extends p{constructor(){super(...arguments),this.modelTransformation=null}}const f=r();function M(r,n){const p=n.hasModelTransformation,x=n.instancedDoublePrecision;p&&(r.vertex.uniforms.add(new d("model",(e=>e.modelTransformation??o))),r.vertex.uniforms.add(new c("normalLocalOriginFromModel",(r=>(e(f,r.modelTransformation??o),f))))),n.instanced&&x&&(r.attributes.add(u.INSTANCEMODELORIGINHI,"vec3"),r.attributes.add(u.INSTANCEMODELORIGINLO,"vec3"),r.attributes.add(u.INSTANCEMODEL,"mat3"),r.attributes.add(u.INSTANCEMODELNORMAL,"mat3"));const M=r.vertex;x&&(M.include(t,n),M.uniforms.add(new l("viewOriginHi",(e=>v(a(O,e.camera.viewInverseTransposeMatrix[3],e.camera.viewInverseTransposeMatrix[7],e.camera.viewInverseTransposeMatrix[11]),O))),new l("viewOriginLo",(e=>g(a(O,e.camera.viewInverseTransposeMatrix[3],e.camera.viewInverseTransposeMatrix[7],e.camera.viewInverseTransposeMatrix[11]),O))))),M.code.add(m`
vec3 getVertexInLocalOriginSpace() {
return ${p?x?"(model * vec4(instanceModel * localPosition().xyz, 1.0)).xyz":"(model * localPosition()).xyz":x?"instanceModel * localPosition().xyz":"localPosition().xyz"};
}
vec3 subtractOrigin(vec3 _pos) {
${x?m`
// Negated inputs are intentionally the first two arguments. The other way around the obfuscation in dpAdd() stopped
// working for macOS 14+ and iOS 17+.
// Issue: https://devtopia.esri.com/WebGIS/arcgis-js-api/issues/56280
vec3 originDelta = dpAdd(-instanceModelOriginHi, -instanceModelOriginLo, viewOriginHi, viewOriginLo);
return _pos - originDelta;`:"return vpos;"}
}
`),M.code.add(m`
vec3 dpNormal(vec4 _normal) {
return normalize(${p?x?"normalLocalOriginFromModel * (instanceModelNormal * _normal.xyz)":"normalLocalOriginFromModel * _normal.xyz":x?"instanceModelNormal * _normal.xyz":"_normal.xyz"});
}
`),n.output===i.Normal&&(s(M),M.code.add(m`
vec3 dpNormalView(vec4 _normal) {
return normalize((viewNormal * ${p?x?"vec4(normalLocalOriginFromModel * (instanceModelNormal * _normal.xyz), 1.0)":"vec4(normalLocalOriginFromModel * _normal.xyz, 1.0)":x?"vec4(instanceModelNormal * _normal.xyz, 1.0)":"_normal"}).xyz);
}
`)),n.hasVertexTangents&&M.code.add(m`
vec4 dpTransformVertexTangent(vec4 _tangent) {
${p?x?"return vec4(normalLocalOriginFromModel * (instanceModelNormal * _tangent.xyz), _tangent.w);":"return vec4(normalLocalOriginFromModel * _tangent.xyz, _tangent.w);":x?"return vec4(instanceModelNormal * _tangent.xyz, _tangent.w);":"return _tangent;"}
}`)}const O=n();export{x as InstancedDoublePassParameters,M as InstancedDoublePrecision};