tangram-core 0.2.0__cp313-cp313-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. tangram_core/App.vue +335 -0
  2. tangram_core/__init__.py +5 -0
  3. tangram_core/__main__.py +141 -0
  4. tangram_core/_core.cp313-win_amd64.pyd +0 -0
  5. tangram_core/_core.pyi +38 -0
  6. tangram_core/api.ts +456 -0
  7. tangram_core/backend.py +335 -0
  8. tangram_core/colour.ts +71 -0
  9. tangram_core/config.py +122 -0
  10. tangram_core/dist-frontend/aggregation-layers.js +521 -0
  11. tangram_core/dist-frontend/aggregation-layers.js.map +1 -0
  12. tangram_core/dist-frontend/assets/_commonjsHelpers-CqkleIqs.js +2 -0
  13. tangram_core/dist-frontend/assets/_commonjsHelpers-CqkleIqs.js.map +1 -0
  14. tangram_core/dist-frontend/assets/array-utils-flat-wyE8tIYR.js +11 -0
  15. tangram_core/dist-frontend/assets/array-utils-flat-wyE8tIYR.js.map +1 -0
  16. tangram_core/dist-frontend/assets/assert-hrfsarFU.js +3 -0
  17. tangram_core/dist-frontend/assets/assert-hrfsarFU.js.map +1 -0
  18. tangram_core/dist-frontend/assets/b612-latin-400-italic-DePNXA0a.woff +0 -0
  19. tangram_core/dist-frontend/assets/b612-latin-400-italic-a-4GLPtl.woff2 +0 -0
  20. tangram_core/dist-frontend/assets/b612-latin-400-normal-CC98FVm_.woff2 +0 -0
  21. tangram_core/dist-frontend/assets/b612-latin-400-normal-JbZ7xwUX.woff +0 -0
  22. tangram_core/dist-frontend/assets/b612-latin-700-normal-B_Snq1wd.woff +0 -0
  23. tangram_core/dist-frontend/assets/b612-latin-700-normal-BinQrnoB.woff2 +0 -0
  24. tangram_core/dist-frontend/assets/clip-extension-DTCP51Ak.js +26 -0
  25. tangram_core/dist-frontend/assets/clip-extension-DTCP51Ak.js.map +1 -0
  26. tangram_core/dist-frontend/assets/color-CUNNsFV-.js +17 -0
  27. tangram_core/dist-frontend/assets/color-CUNNsFV-.js.map +1 -0
  28. tangram_core/dist-frontend/assets/cube-geometry-CzJ_uBWa.js +2 -0
  29. tangram_core/dist-frontend/assets/cube-geometry-CzJ_uBWa.js.map +1 -0
  30. tangram_core/dist-frontend/assets/deep-equal-uriyKJca.js +2 -0
  31. tangram_core/dist-frontend/assets/deep-equal-uriyKJca.js.map +1 -0
  32. tangram_core/dist-frontend/assets/fly-to-interpolator-DlKiy9_S.js +2 -0
  33. tangram_core/dist-frontend/assets/fly-to-interpolator-DlKiy9_S.js.map +1 -0
  34. tangram_core/dist-frontend/assets/geojson-layer-CLhXLxdI.js +1010 -0
  35. tangram_core/dist-frontend/assets/geojson-layer-CLhXLxdI.js.map +1 -0
  36. tangram_core/dist-frontend/assets/globe-view-DKhftlA1.js +94 -0
  37. tangram_core/dist-frontend/assets/globe-view-DKhftlA1.js.map +1 -0
  38. tangram_core/dist-frontend/assets/globe-viewport-CPES4D4P.js +2 -0
  39. tangram_core/dist-frontend/assets/globe-viewport-CPES4D4P.js.map +1 -0
  40. tangram_core/dist-frontend/assets/image-loader-ClbNCMXW.js +2 -0
  41. tangram_core/dist-frontend/assets/image-loader-ClbNCMXW.js.map +1 -0
  42. tangram_core/dist-frontend/assets/inconsolata-latin-400-normal-DTZQ6lD6.woff2 +0 -0
  43. tangram_core/dist-frontend/assets/inconsolata-latin-400-normal-HYADljCo.woff +0 -0
  44. tangram_core/dist-frontend/assets/inconsolata-latin-700-normal-ByjKuJjN.woff2 +0 -0
  45. tangram_core/dist-frontend/assets/inconsolata-latin-700-normal-DzgUY3Rl.woff +0 -0
  46. tangram_core/dist-frontend/assets/inconsolata-latin-ext-400-normal-BaHVOdFB.woff2 +0 -0
  47. tangram_core/dist-frontend/assets/inconsolata-latin-ext-400-normal-yvPjCxxx.woff +0 -0
  48. tangram_core/dist-frontend/assets/inconsolata-latin-ext-700-normal-D0Kpgs_9.woff2 +0 -0
  49. tangram_core/dist-frontend/assets/inconsolata-latin-ext-700-normal-Dlt-daqV.woff +0 -0
  50. tangram_core/dist-frontend/assets/inconsolata-vietnamese-400-normal-ByiM2lek.woff +0 -0
  51. tangram_core/dist-frontend/assets/inconsolata-vietnamese-400-normal-DfC_iMic.woff2 +0 -0
  52. tangram_core/dist-frontend/assets/inconsolata-vietnamese-700-normal-DLCFFAUf.woff +0 -0
  53. tangram_core/dist-frontend/assets/inconsolata-vietnamese-700-normal-DuasYmn8.woff2 +0 -0
  54. tangram_core/dist-frontend/assets/index-UPPakSLR.css +1 -0
  55. tangram_core/dist-frontend/assets/index-r8T0kY2p.js +821 -0
  56. tangram_core/dist-frontend/assets/index-r8T0kY2p.js.map +1 -0
  57. tangram_core/dist-frontend/assets/layer-DO63TrsS.js +555 -0
  58. tangram_core/dist-frontend/assets/layer-DO63TrsS.js.map +1 -0
  59. tangram_core/dist-frontend/assets/layer-extension-CZ3zsHuN.js +2 -0
  60. tangram_core/dist-frontend/assets/layer-extension-CZ3zsHuN.js.map +1 -0
  61. tangram_core/dist-frontend/assets/mesh-layers-BSECKarm.js +1123 -0
  62. tangram_core/dist-frontend/assets/mesh-layers-BSECKarm.js.map +1 -0
  63. tangram_core/dist-frontend/assets/orthographic-viewport-CzZmHDEZ.js +2 -0
  64. tangram_core/dist-frontend/assets/orthographic-viewport-CzZmHDEZ.js.map +1 -0
  65. tangram_core/dist-frontend/assets/pick-layers-pass-xhWsgZtf.js +2 -0
  66. tangram_core/dist-frontend/assets/pick-layers-pass-xhWsgZtf.js.map +1 -0
  67. tangram_core/dist-frontend/assets/project-CrvReKGW.js +760 -0
  68. tangram_core/dist-frontend/assets/project-CrvReKGW.js.map +1 -0
  69. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-italic-4qS3_zkX.woff2 +0 -0
  70. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-italic-CDK-EZBY.woff +0 -0
  71. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-normal-Bgns473E.woff +0 -0
  72. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-400-normal-_T2aQlWs.woff2 +0 -0
  73. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-500-normal-CvEVpWxD.woff +0 -0
  74. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-500-normal-s4PklZE0.woff2 +0 -0
  75. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-700-normal-9RN-Z7cI.woff2 +0 -0
  76. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-700-normal-BGMkBBYx.woff +0 -0
  77. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-italic-C7erd-g8.woff +0 -0
  78. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-italic-DR5R5TWx.woff2 +0 -0
  79. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-normal-DGo1Ayjq.woff2 +0 -0
  80. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-400-normal-WtM1l1qc.woff +0 -0
  81. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-500-normal-C8FNIdXm.woff2 +0 -0
  82. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-500-normal-TLDmfi3Q.woff +0 -0
  83. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-700-normal-CTXjXnze.woff2 +0 -0
  84. tangram_core/dist-frontend/assets/roboto-condensed-cyrillic-ext-700-normal-CWPRiRXS.woff +0 -0
  85. tangram_core/dist-frontend/assets/roboto-condensed-greek-400-italic-CR6qj4Z4.woff2 +0 -0
  86. tangram_core/dist-frontend/assets/roboto-condensed-greek-400-italic-DHRaIs10.woff +0 -0
  87. tangram_core/dist-frontend/assets/roboto-condensed-greek-400-normal-D5vBSIyg.woff2 +0 -0
  88. tangram_core/dist-frontend/assets/roboto-condensed-greek-400-normal-FabMgVmk.woff +0 -0
  89. tangram_core/dist-frontend/assets/roboto-condensed-greek-500-normal-BIN62cw9.woff +0 -0
  90. tangram_core/dist-frontend/assets/roboto-condensed-greek-500-normal-Hsn-wDIp.woff2 +0 -0
  91. tangram_core/dist-frontend/assets/roboto-condensed-greek-700-normal-89Up2Xly.woff +0 -0
  92. tangram_core/dist-frontend/assets/roboto-condensed-greek-700-normal-DWMOA2VK.woff2 +0 -0
  93. tangram_core/dist-frontend/assets/roboto-condensed-latin-400-italic-D_BR-3LG.woff2 +0 -0
  94. tangram_core/dist-frontend/assets/roboto-condensed-latin-400-italic-om57GXsO.woff +0 -0
  95. tangram_core/dist-frontend/assets/roboto-condensed-latin-400-normal-BICmKrXV.woff2 +0 -0
  96. tangram_core/dist-frontend/assets/roboto-condensed-latin-400-normal-D2e7XwB1.woff +0 -0
  97. tangram_core/dist-frontend/assets/roboto-condensed-latin-500-normal-3p2daRJW.woff2 +0 -0
  98. tangram_core/dist-frontend/assets/roboto-condensed-latin-500-normal-Dc9bsamC.woff +0 -0
  99. tangram_core/dist-frontend/assets/roboto-condensed-latin-700-normal-BOl6B_hI.woff +0 -0
  100. tangram_core/dist-frontend/assets/roboto-condensed-latin-700-normal-DRbp0YnP.woff2 +0 -0
  101. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-italic-BXrkWnoY.woff +0 -0
  102. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-italic-Bhem1d5z.woff2 +0 -0
  103. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-normal-DT8nEsYA.woff +0 -0
  104. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-400-normal-OHaX69iP.woff2 +0 -0
  105. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-500-normal-CcSTXKtO.woff2 +0 -0
  106. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-500-normal-JgPl2bDS.woff +0 -0
  107. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-700-normal-B004qtqu.woff2 +0 -0
  108. tangram_core/dist-frontend/assets/roboto-condensed-latin-ext-700-normal-O6H_RRvN.woff +0 -0
  109. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-italic-BwUYFJ2t.woff2 +0 -0
  110. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-italic-DV8QogUk.woff +0 -0
  111. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-normal-0o1laQ-g.woff2 +0 -0
  112. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-400-normal-CPsdS8_S.woff +0 -0
  113. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-500-normal-G9shSJ2z.woff +0 -0
  114. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-500-normal-TFWhjk13.woff2 +0 -0
  115. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-700-normal-BtNeb9D6.woff +0 -0
  116. tangram_core/dist-frontend/assets/roboto-condensed-vietnamese-700-normal-D35V1G0s.woff2 +0 -0
  117. tangram_core/dist-frontend/assets/shader-BJmsOfPx.js +843 -0
  118. tangram_core/dist-frontend/assets/shader-BJmsOfPx.js.map +1 -0
  119. tangram_core/dist-frontend/assets/solid-polygon-layer-DiarVGxh.js +392 -0
  120. tangram_core/dist-frontend/assets/solid-polygon-layer-DiarVGxh.js.map +1 -0
  121. tangram_core/dist-frontend/assets/tesselator-49Dw9L5A.js +2 -0
  122. tangram_core/dist-frontend/assets/tesselator-49Dw9L5A.js.map +1 -0
  123. tangram_core/dist-frontend/assets/webgl-developer-tools-CZl8qVFg.js +7 -0
  124. tangram_core/dist-frontend/assets/webgl-developer-tools-CZl8qVFg.js.map +1 -0
  125. tangram_core/dist-frontend/assets/webgl-device-BY0-CUP6.js +3 -0
  126. tangram_core/dist-frontend/assets/webgl-device-BY0-CUP6.js.map +1 -0
  127. tangram_core/dist-frontend/assets/widget-BbOeHGj0.js +2 -0
  128. tangram_core/dist-frontend/assets/widget-BbOeHGj0.js.map +1 -0
  129. tangram_core/dist-frontend/core.js +60 -0
  130. tangram_core/dist-frontend/core.js.map +1 -0
  131. tangram_core/dist-frontend/extensions.js +609 -0
  132. tangram_core/dist-frontend/extensions.js.map +1 -0
  133. tangram_core/dist-frontend/favicon.ico +0 -0
  134. tangram_core/dist-frontend/favicon.png +0 -0
  135. tangram_core/dist-frontend/font-awesome.min.css +4 -0
  136. tangram_core/dist-frontend/fonts/FontAwesome.otf +0 -0
  137. tangram_core/dist-frontend/fonts/fontawesome-webfont.eot +0 -0
  138. tangram_core/dist-frontend/fonts/fontawesome-webfont.svg +2671 -0
  139. tangram_core/dist-frontend/fonts/fontawesome-webfont.ttf +0 -0
  140. tangram_core/dist-frontend/fonts/fontawesome-webfont.woff +0 -0
  141. tangram_core/dist-frontend/fonts/fontawesome-webfont.woff2 +0 -0
  142. tangram_core/dist-frontend/geo-layers.js +115 -0
  143. tangram_core/dist-frontend/geo-layers.js.map +1 -0
  144. tangram_core/dist-frontend/index.html +38 -0
  145. tangram_core/dist-frontend/json.js +3 -0
  146. tangram_core/dist-frontend/json.js.map +1 -0
  147. tangram_core/dist-frontend/layers.js +268 -0
  148. tangram_core/dist-frontend/layers.js.map +1 -0
  149. tangram_core/dist-frontend/lit-html.js +7 -0
  150. tangram_core/dist-frontend/lit-html.js.map +1 -0
  151. tangram_core/dist-frontend/mapbox.js +2 -0
  152. tangram_core/dist-frontend/mapbox.js.map +1 -0
  153. tangram_core/dist-frontend/maplibre-gl.js +59 -0
  154. tangram_core/dist-frontend/maplibre-gl.js.map +1 -0
  155. tangram_core/dist-frontend/mesh-layers.js +2 -0
  156. tangram_core/dist-frontend/mesh-layers.js.map +1 -0
  157. tangram_core/dist-frontend/rs1090_wasm.js +813 -0
  158. tangram_core/dist-frontend/rs1090_wasm_bg.wasm +0 -0
  159. tangram_core/dist-frontend/vue.esm-browser.prod.js +13 -0
  160. tangram_core/dist-frontend/widgets.js +3 -0
  161. tangram_core/dist-frontend/widgets.js.map +1 -0
  162. tangram_core/main.ts +16 -0
  163. tangram_core/plugin.py +70 -0
  164. tangram_core/plugin.ts +41 -0
  165. tangram_core/redis.py +89 -0
  166. tangram_core/user.css +114 -0
  167. tangram_core/vite-plugin-tangram.mjs +88 -0
  168. tangram_core-0.2.0.dist-info/METADATA +37 -0
  169. tangram_core-0.2.0.dist-info/RECORD +171 -0
  170. tangram_core-0.2.0.dist-info/WHEEL +4 -0
  171. tangram_core-0.2.0.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,760 @@
1
+ import{O as _,P as I,t as H,Y as G,U as N}from"./deep-equal-uriyKJca.js";function b(e,t){if(!e)throw new Error(t||"shadertools: assertion failed.")}const C={number:{type:"number",validate(e,t){return Number.isFinite(e)&&typeof t=="object"&&(t.max===void 0||e<=t.max)&&(t.min===void 0||e>=t.min)}},array:{type:"array",validate(e,t){return Array.isArray(e)||ArrayBuffer.isView(e)}}};function ie(e){const t={};for(const[n,o]of Object.entries(e))t[n]=se(o);return t}function se(e){let t=F(e);if(t!=="object")return{value:e,...C[t],type:t};if(typeof e=="object")return e?e.type!==void 0?{...e,...C[e.type],type:e.type}:e.value===void 0?{type:"object",value:e}:(t=F(e.value),{...e,...C[t],type:t}):{type:"object",value:null};throw new Error("props")}function F(e){return Array.isArray(e)||ArrayBuffer.isView(e)?"array":typeof e}const ce=`#ifdef MODULE_LOGDEPTH
2
+ logdepth_adjustPosition(gl_Position);
3
+ #endif
4
+ `,ae=`#ifdef MODULE_MATERIAL
5
+ fragColor = material_filterColor(fragColor);
6
+ #endif
7
+
8
+ #ifdef MODULE_LIGHTING
9
+ fragColor = lighting_filterColor(fragColor);
10
+ #endif
11
+
12
+ #ifdef MODULE_FOG
13
+ fragColor = fog_filterColor(fragColor);
14
+ #endif
15
+
16
+ #ifdef MODULE_PICKING
17
+ fragColor = picking_filterHighlightColor(fragColor);
18
+ fragColor = picking_filterPickingColor(fragColor);
19
+ #endif
20
+
21
+ #ifdef MODULE_LOGDEPTH
22
+ logdepth_setFragDepth();
23
+ #endif
24
+ `,fe={vertex:ce,fragment:ae},W=/void\s+main\s*\([^)]*\)\s*\{\n?/,k=/}\n?[^{}]*$/,w=[],h="__LUMA_INJECT_DECLARATIONS__";function le(e){const t={vertex:{},fragment:{}};for(const n in e){let o=e[n];const r=_e(n);typeof o=="string"&&(o={order:0,injection:o}),t[r][n]=o}return t}function _e(e){const t=e.slice(0,2);switch(t){case"vs":return"vertex";case"fs":return"fragment";default:throw new Error(t)}}function U(e,t,n,o=!1){const r=t==="vertex";for(const i in n){const c=n[i];c.sort((s,f)=>s.order-f.order),w.length=c.length;for(let s=0,f=c.length;s<f;++s)w[s]=c[s].injection;const a=`${w.join(`
25
+ `)}
26
+ `;switch(i){case"vs:#decl":r&&(e=e.replace(h,a));break;case"vs:#main-start":r&&(e=e.replace(W,s=>s+a));break;case"vs:#main-end":r&&(e=e.replace(k,s=>a+s));break;case"fs:#decl":r||(e=e.replace(h,a));break;case"fs:#main-start":r||(e=e.replace(W,s=>s+a));break;case"fs:#main-end":r||(e=e.replace(k,s=>a+s));break;default:e=e.replace(i,s=>s+a)}}return e=e.replace(h,""),o&&(e=e.replace(/\}\s*$/,i=>i+fe[t])),e}function x(e){e.map(t=>pe(t))}function pe(e){if(e.instance)return;x(e.dependencies||[]);const{propTypes:t={},deprecations:n=[],inject:o={}}=e,r={normalizedInjections:le(o),parsedDeprecations:ue(n)};t&&(r.propValidators=ie(t)),e.instance=r;let i={};t&&(i=Object.entries(t).reduce((c,[a,s])=>{const f=s?.value;return f&&(c[a]=f),c},{})),e.defaultUniforms={...e.defaultUniforms,...i}}function J(e,t,n){e.deprecations?.forEach(o=>{o.regex?.test(t)&&(o.deprecated?n.deprecated(o.old,o.new)():n.removed(o.old,o.new)())})}function ue(e){return e.forEach(t=>{switch(t.type){case"function":t.regex=new RegExp(`\\b${t.old}\\(`);break;default:t.regex=new RegExp(`${t.type} ${t.old};`)}}),e}function Y(e){x(e);const t={},n={};Z({modules:e,level:0,moduleMap:t,moduleDepth:n});const o=Object.keys(n).sort((r,i)=>n[i]-n[r]).map(r=>t[r]);return x(o),o}function Z(e){const{modules:t,level:n,moduleMap:o,moduleDepth:r}=e;if(n>=5)throw new Error("Possible loop in shader dependency graph");for(const i of t)o[i.name]=i,(r[i.name]===void 0||r[i.name]<n)&&(r[i.name]=n);for(const i of t)i.dependencies&&Z({modules:i.dependencies,level:n+1,moduleMap:o,moduleDepth:r})}function me(e){switch(e?.gpu.toLowerCase()){case"apple":return`#define APPLE_GPU
27
+ // Apple optimizes away the calculation necessary for emulated fp64
28
+ #define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1
29
+ #define LUMA_FP32_TAN_PRECISION_WORKAROUND 1
30
+ // Intel GPU doesn't have full 32 bits precision in same cases, causes overflow
31
+ #define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1
32
+ `;case"nvidia":return`#define NVIDIA_GPU
33
+ // Nvidia optimizes away the calculation necessary for emulated fp64
34
+ #define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1
35
+ `;case"intel":return`#define INTEL_GPU
36
+ // Intel optimizes away the calculation necessary for emulated fp64
37
+ #define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1
38
+ // Intel's built-in 'tan' function doesn't have acceptable precision
39
+ #define LUMA_FP32_TAN_PRECISION_WORKAROUND 1
40
+ // Intel GPU doesn't have full 32 bits precision in same cases, causes overflow
41
+ #define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1
42
+ `;case"amd":return`#define AMD_GPU
43
+ `;default:return`#define DEFAULT_GPU
44
+ // Prevent driver from optimizing away the calculation necessary for emulated fp64
45
+ #define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1
46
+ // Headless Chrome's software shader 'tan' function doesn't have acceptable precision
47
+ #define LUMA_FP32_TAN_PRECISION_WORKAROUND 1
48
+ // If the GPU doesn't have full 32 bits precision, will causes overflow
49
+ #define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1
50
+ `}}function de(e,t){if(Number(e.match(/^#version[ \t]+(\d+)/m)?.[1]||100)!==300)throw new Error("luma.gl v9 only supports GLSL 3.00 shader sources");switch(t){case"vertex":return e=$(e,Ee),e;case"fragment":return e=$(e,Oe),e;default:throw new Error(t)}}const K=[[/^(#version[ \t]+(100|300[ \t]+es))?[ \t]*\n/,`#version 300 es
51
+ `],[/\btexture(2D|2DProj|Cube)Lod(EXT)?\(/g,"textureLod("],[/\btexture(2D|2DProj|Cube)(EXT)?\(/g,"texture("]],Ee=[...K,[z("attribute"),"in $1"],[z("varying"),"out $1"]],Oe=[...K,[z("varying"),"in $1"]];function $(e,t){for(const[n,o]of t)e=e.replace(n,o);return e}function z(e){return new RegExp(`\\b${e}[ \\t]+(\\w+[ \\t]+\\w+(\\[\\w+\\])?;)`,"g")}function X(e,t){let n="";for(const o in e){const r=e[o];if(n+=`void ${r.signature} {
52
+ `,r.header&&(n+=` ${r.header}`),t[o]){const i=t[o];i.sort((c,a)=>c.order-a.order);for(const c of i)n+=` ${c.injection}
53
+ `}r.footer&&(n+=` ${r.footer}`),n+=`}
54
+ `}return n}function q(e){const t={vertex:{},fragment:{}};for(const n of e){let o,r;typeof n!="string"?(o=n,r=o.hook):(o={},r=n),r=r.trim();const[i,c]=r.split(":"),a=r.replace(/\(.+/,""),s=Object.assign(o,{signature:c});switch(i){case"vs":t.vertex[a]=s;break;case"fs":t.fragment[a]=s;break;default:throw new Error(i)}}return t}function ve(e,t){return{name:je(e,t),language:"glsl",version:Se(e)}}function je(e,t="unnamed"){const o=/#define[^\S\r\n]*SHADER_NAME[^\S\r\n]*([A-Za-z0-9_-]+)\s*/.exec(e);return o?o[1]:t}function Se(e){let t=100;const n=e.match(/[^\s]+/g);if(n&&n.length>=2&&n[0]==="#version"){const o=parseInt(n[1],10);Number.isFinite(o)&&(t=o)}if(t!==100&&t!==300)throw new Error(`Invalid GLSL version ${t}`);return t}const Q=`
55
+
56
+ ${h}
57
+ `,ge=`precision highp float;
58
+ `;function Te(e){const t=Y(e.modules||[]);return{source:Ie(e.platformInfo,{...e,source:e.source,stage:"vertex",modules:t}),getUniforms:ee(t)}}function Ae(e){const{vs:t,fs:n}=e,o=Y(e.modules||[]);return{vs:B(e.platformInfo,{...e,source:t,stage:"vertex",modules:o}),fs:B(e.platformInfo,{...e,source:n,stage:"fragment",modules:o}),getUniforms:ee(o)}}function Ie(e,t){const{source:n,stage:o,modules:r,hookFunctions:i=[],inject:c={},log:a}=t;b(typeof n=="string","shader source must be a string");const s=n;let f="";const v=q(i),d={},T={},p={};for(const u in c){const S=typeof c[u]=="string"?{injection:c[u],order:0}:c[u],l=/^(v|f)s:(#)?([\w-]+)$/.exec(u);if(l){const E=l[2],g=l[3];E?g==="decl"?T[u]=[S]:p[u]=[S]:d[u]=[S]}else p[u]=[S]}const j=r;for(const u of j){a&&J(u,s,a);const S=te(u,"wgsl");f+=S;const l=u.injections?.[o]||{};for(const E in l){const g=/^(v|f)s:#([\w-]+)$/.exec(E);if(g){const A=g[2]==="decl"?T:p;A[E]=A[E]||[],A[E].push(l[E])}else d[E]=d[E]||[],d[E].push(l[E])}}return f+=Q,f=U(f,o,T),f+=X(v[o],d),f+=s,f=U(f,o,p),f}function B(e,t){const{source:n,stage:o,language:r="glsl",modules:i,defines:c={},hookFunctions:a=[],inject:s={},prologue:f=!0,log:v}=t;b(typeof n=="string","shader source must be a string");const d=r==="glsl"?ve(n).version:-1,T=e.shaderLanguageVersion,p=d===100?"#version 100":"#version 300 es",u=n.split(`
59
+ `).slice(1).join(`
60
+ `),S={};i.forEach(m=>{Object.assign(S,m.defines)}),Object.assign(S,c);let l="";switch(r){case"wgsl":break;case"glsl":l=f?`${p}
61
+
62
+ // ----- PROLOGUE -------------------------
63
+ ${`#define SHADER_TYPE_${o.toUpperCase()}`}
64
+
65
+ ${me(e)}
66
+ ${o==="fragment"?ge:""}
67
+
68
+ // ----- APPLICATION DEFINES -------------------------
69
+
70
+ ${Me(S)}
71
+
72
+ `:`${p}
73
+ `;break}const E=q(a),g={},P={},A={};for(const m in s){const R=typeof s[m]=="string"?{injection:s[m],order:0}:s[m],M=/^(v|f)s:(#)?([\w-]+)$/.exec(m);if(M){const O=M[2],y=M[3];O?y==="decl"?P[m]=[R]:A[m]=[R]:g[m]=[R]}else A[m]=[R]}for(const m of i){v&&J(m,u,v);const R=te(m,o);l+=R;const M=m.instance?.normalizedInjections[o]||{};for(const O in M){const y=/^(v|f)s:#([\w-]+)$/.exec(O);if(y){const D=y[2]==="decl"?P:A;D[O]=D[O]||[],D[O].push(M[O])}else g[O]=g[O]||[],g[O].push(M[O])}}return l+="// ----- MAIN SHADER SOURCE -------------------------",l+=Q,l=U(l,o,P),l+=X(E[o],g),l+=u,l=U(l,o,A),r==="glsl"&&d!==T&&(l=de(l,o)),l.trim()}function ee(e){return function(n){const o={};for(const r of e){const i=r.getUniforms?.(n,o);Object.assign(o,i)}return o}}function Me(e={}){let t="";for(const n in e){const o=e[n];(o||Number.isFinite(o))&&(t+=`#define ${n.toUpperCase()} ${e[n]}
74
+ `)}return t}function te(e,t){let n;switch(t){case"vertex":n=e.vs||"";break;case"fragment":n=e.fs||"";break;case"wgsl":n=e.source||"";break;default:b(!1)}if(!e.name)throw new Error("Shader module must have a name");const o=e.name.toUpperCase().replace(/[^0-9a-z]/gi,"_");let r=`// ----- MODULE ${e.name} ---------------
75
+
76
+ `;return t!=="wgsl"&&(r+=`#define MODULE_${o}
77
+ `),r+=`${n}
78
+ `,r}const Re=/^\s*\#\s*ifdef\s*([a-zA-Z_]+)\s*$/,Le=/^\s*\#\s*endif\s*$/;function Pe(e,t){const n=e.split(`
79
+ `),o=[];let r=!0,i=null;for(const c of n){const a=c.match(Re),s=c.match(Le);a?(i=a[1],r=!!t?.defines?.[i]):s?r=!0:r&&o.push(c)}return o.join(`
80
+ `)}class L{static defaultShaderAssembler;_hookFunctions=[];_defaultModules=[];static getDefaultShaderAssembler(){return L.defaultShaderAssembler=L.defaultShaderAssembler||new L,L.defaultShaderAssembler}addDefaultModule(t){this._defaultModules.find(n=>n.name===(typeof t=="string"?t:t.name))||this._defaultModules.push(t)}removeDefaultModule(t){const n=typeof t=="string"?t:t.name;this._defaultModules=this._defaultModules.filter(o=>o.name!==n)}addShaderHook(t,n){n&&(t=Object.assign(n,{hook:t})),this._hookFunctions.push(t)}assembleWGSLShader(t){const n=this._getModuleList(t.modules),o=this._hookFunctions,{source:r,getUniforms:i}=Te({...t,source:t.source,modules:n,hookFunctions:o});return{source:t.platformInfo.shaderLanguage==="wgsl"?Pe(r):r,getUniforms:i,modules:n}}assembleGLSLShaderPair(t){const n=this._getModuleList(t.modules),o=this._hookFunctions;return{...Ae({...t,vs:t.vs,fs:t.fs,modules:n,hookFunctions:o}),modules:n}}_getModuleList(t=[]){const n=new Array(this._defaultModules.length+t.length),o={};let r=0;for(let i=0,c=this._defaultModules.length;i<c;++i){const a=this._defaultModules[i],s=a.name;n[r++]=a,o[s]=!0}for(let i=0,c=t.length;i<c;++i){const a=t[i],s=a.name;o[s]||(n[r++]=a,o[s]=!0)}return n.length=r,x(n),n}}const ye=`#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND
81
+
82
+ // All these functions are for substituting tan() function from Intel GPU only
83
+ const float TWO_PI = 6.2831854820251465;
84
+ const float PI_2 = 1.5707963705062866;
85
+ const float PI_16 = 0.1963495463132858;
86
+
87
+ const float SIN_TABLE_0 = 0.19509032368659973;
88
+ const float SIN_TABLE_1 = 0.3826834261417389;
89
+ const float SIN_TABLE_2 = 0.5555702447891235;
90
+ const float SIN_TABLE_3 = 0.7071067690849304;
91
+
92
+ const float COS_TABLE_0 = 0.9807852506637573;
93
+ const float COS_TABLE_1 = 0.9238795042037964;
94
+ const float COS_TABLE_2 = 0.8314695954322815;
95
+ const float COS_TABLE_3 = 0.7071067690849304;
96
+
97
+ const float INVERSE_FACTORIAL_3 = 1.666666716337204e-01; // 1/3!
98
+ const float INVERSE_FACTORIAL_5 = 8.333333767950535e-03; // 1/5!
99
+ const float INVERSE_FACTORIAL_7 = 1.9841270113829523e-04; // 1/7!
100
+ const float INVERSE_FACTORIAL_9 = 2.75573188446287533e-06; // 1/9!
101
+
102
+ float sin_taylor_fp32(float a) {
103
+ float r, s, t, x;
104
+
105
+ if (a == 0.0) {
106
+ return 0.0;
107
+ }
108
+
109
+ x = -a * a;
110
+ s = a;
111
+ r = a;
112
+
113
+ r = r * x;
114
+ t = r * INVERSE_FACTORIAL_3;
115
+ s = s + t;
116
+
117
+ r = r * x;
118
+ t = r * INVERSE_FACTORIAL_5;
119
+ s = s + t;
120
+
121
+ r = r * x;
122
+ t = r * INVERSE_FACTORIAL_7;
123
+ s = s + t;
124
+
125
+ r = r * x;
126
+ t = r * INVERSE_FACTORIAL_9;
127
+ s = s + t;
128
+
129
+ return s;
130
+ }
131
+
132
+ void sincos_taylor_fp32(float a, out float sin_t, out float cos_t) {
133
+ if (a == 0.0) {
134
+ sin_t = 0.0;
135
+ cos_t = 1.0;
136
+ }
137
+ sin_t = sin_taylor_fp32(a);
138
+ cos_t = sqrt(1.0 - sin_t * sin_t);
139
+ }
140
+
141
+ float tan_taylor_fp32(float a) {
142
+ float sin_a;
143
+ float cos_a;
144
+
145
+ if (a == 0.0) {
146
+ return 0.0;
147
+ }
148
+
149
+ // 2pi range reduction
150
+ float z = floor(a / TWO_PI);
151
+ float r = a - TWO_PI * z;
152
+
153
+ float t;
154
+ float q = floor(r / PI_2 + 0.5);
155
+ int j = int(q);
156
+
157
+ if (j < -2 || j > 2) {
158
+ return 1.0 / 0.0;
159
+ }
160
+
161
+ t = r - PI_2 * q;
162
+
163
+ q = floor(t / PI_16 + 0.5);
164
+ int k = int(q);
165
+ int abs_k = int(abs(float(k)));
166
+
167
+ if (abs_k > 4) {
168
+ return 1.0 / 0.0;
169
+ } else {
170
+ t = t - PI_16 * q;
171
+ }
172
+
173
+ float u = 0.0;
174
+ float v = 0.0;
175
+
176
+ float sin_t, cos_t;
177
+ float s, c;
178
+ sincos_taylor_fp32(t, sin_t, cos_t);
179
+
180
+ if (k == 0) {
181
+ s = sin_t;
182
+ c = cos_t;
183
+ } else {
184
+ if (abs(float(abs_k) - 1.0) < 0.5) {
185
+ u = COS_TABLE_0;
186
+ v = SIN_TABLE_0;
187
+ } else if (abs(float(abs_k) - 2.0) < 0.5) {
188
+ u = COS_TABLE_1;
189
+ v = SIN_TABLE_1;
190
+ } else if (abs(float(abs_k) - 3.0) < 0.5) {
191
+ u = COS_TABLE_2;
192
+ v = SIN_TABLE_2;
193
+ } else if (abs(float(abs_k) - 4.0) < 0.5) {
194
+ u = COS_TABLE_3;
195
+ v = SIN_TABLE_3;
196
+ }
197
+ if (k > 0) {
198
+ s = u * sin_t + v * cos_t;
199
+ c = u * cos_t - v * sin_t;
200
+ } else {
201
+ s = u * sin_t - v * cos_t;
202
+ c = u * cos_t + v * sin_t;
203
+ }
204
+ }
205
+
206
+ if (j == 0) {
207
+ sin_a = s;
208
+ cos_a = c;
209
+ } else if (j == 1) {
210
+ sin_a = c;
211
+ cos_a = -s;
212
+ } else if (j == -1) {
213
+ sin_a = -c;
214
+ cos_a = s;
215
+ } else {
216
+ sin_a = -s;
217
+ cos_a = -c;
218
+ }
219
+ return sin_a / cos_a;
220
+ }
221
+ #endif
222
+
223
+ float tan_fp32(float a) {
224
+ #ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND
225
+ return tan_taylor_fp32(a);
226
+ #else
227
+ return tan(a);
228
+ #endif
229
+ }
230
+ `,he={name:"fp32",vs:ye},Ne=`const SMOOTH_EDGE_RADIUS: f32 = 0.5;
231
+
232
+ struct VertexGeometry {
233
+ position: vec4<f32>,
234
+ worldPosition: vec3<f32>,
235
+ worldPositionAlt: vec3<f32>,
236
+ normal: vec3<f32>,
237
+ uv: vec2<f32>,
238
+ pickingColor: vec3<f32>,
239
+ };
240
+
241
+ var<private> geometry_: VertexGeometry = VertexGeometry(
242
+ vec4<f32>(0.0, 0.0, 1.0, 0.0),
243
+ vec3<f32>(0.0, 0.0, 0.0),
244
+ vec3<f32>(0.0, 0.0, 0.0),
245
+ vec3<f32>(0.0, 0.0, 0.0),
246
+ vec2<f32>(0.0, 0.0),
247
+ vec3<f32>(0.0, 0.0, 0.0)
248
+ );
249
+
250
+ struct FragmentGeometry {
251
+ uv: vec2<f32>,
252
+ };
253
+
254
+ var<private> fragmentGeometry: FragmentGeometry;
255
+
256
+ fn smoothedge(edge: f32, x: f32) -> f32 {
257
+ return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);
258
+ }
259
+ `,oe="#define SMOOTH_EDGE_RADIUS 0.5",Ue=`${oe}
260
+
261
+ struct VertexGeometry {
262
+ vec4 position;
263
+ vec3 worldPosition;
264
+ vec3 worldPositionAlt;
265
+ vec3 normal;
266
+ vec2 uv;
267
+ vec3 pickingColor;
268
+ } geometry = VertexGeometry(
269
+ vec4(0.0, 0.0, 1.0, 0.0),
270
+ vec3(0.0),
271
+ vec3(0.0),
272
+ vec3(0.0),
273
+ vec2(0.0),
274
+ vec3(0.0)
275
+ );
276
+ `,xe=`${oe}
277
+
278
+ struct FragmentGeometry {
279
+ vec2 uv;
280
+ } geometry;
281
+
282
+ float smoothedge(float edge, float x) {
283
+ return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);
284
+ }
285
+ `,De={name:"geometry",source:Ne,vs:Ue,fs:xe};function Ce(e,t){if(e===t)return!0;if(Array.isArray(e)){const n=e.length;if(!t||t.length!==n)return!1;for(let o=0;o<n;o++)if(e[o]!==t[o])return!1;return!0}return!1}function we(e){let t={},n;return o=>{for(const r in o)if(!Ce(o[r],t[r])){n=e(o),t=o;break}return n}}const V=[0,0,0,0],ze=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0],ne=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],be=[0,0,0],re=[0,0,0],Ge=we($e);function Fe(e,t,n=re){n.length<3&&(n=[n[0],n[1],0]);let o=n,r,i=!0;switch(t===_.LNGLAT_OFFSETS||t===_.METER_OFFSETS?r=n:r=e.isGeospatial?[Math.fround(e.longitude),Math.fround(e.latitude),0]:null,e.projectionMode){case I.WEB_MERCATOR:(t===_.LNGLAT||t===_.CARTESIAN)&&(r=[0,0,0],i=!1);break;case I.WEB_MERCATOR_AUTO_OFFSET:t===_.LNGLAT?o=r:t===_.CARTESIAN&&(o=[Math.fround(e.center[0]),Math.fround(e.center[1]),0],r=e.unprojectPosition(o),o[0]-=n[0],o[1]-=n[1],o[2]-=n[2]);break;case I.IDENTITY:o=e.position.map(Math.fround),o[2]=o[2]||0;break;case I.GLOBE:i=!1,r=null;break;default:i=!1}return{geospatialOrigin:r,shaderCoordinateOrigin:o,offsetMode:i}}function We(e,t,n){const{viewMatrixUncentered:o,projectionMatrix:r}=e;let{viewMatrix:i,viewProjectionMatrix:c}=e,a=V,s=V,f=e.cameraPosition;const{geospatialOrigin:v,shaderCoordinateOrigin:d,offsetMode:T}=Fe(e,t,n);return T&&(s=e.projectPosition(v||d),f=[f[0]-s[0],f[1]-s[1],f[2]-s[2]],s[3]=1,a=H([],s,c),i=o||i,c=G([],r,i),c=G([],c,ze)),{viewMatrix:i,viewProjectionMatrix:c,projectionCenter:a,originCommon:s,cameraPosCommon:f,shaderCoordinateOrigin:d,geospatialOrigin:v}}function ke({viewport:e,devicePixelRatio:t=1,modelMatrix:n=null,coordinateSystem:o=_.DEFAULT,coordinateOrigin:r=re,autoWrapLongitude:i=!1}){o===_.DEFAULT&&(o=e.isGeospatial?_.LNGLAT:_.CARTESIAN);const c=Ge({viewport:e,devicePixelRatio:t,coordinateSystem:o,coordinateOrigin:r});return c.wrapLongitude=i,c.modelMatrix=n||ne,c}function $e({viewport:e,devicePixelRatio:t,coordinateSystem:n,coordinateOrigin:o}){const{projectionCenter:r,viewProjectionMatrix:i,originCommon:c,cameraPosCommon:a,shaderCoordinateOrigin:s,geospatialOrigin:f}=We(e,n,o),v=e.getDistanceScales(),d=[e.width*t,e.height*t],T=H([],[0,0,-e.focalDistance,1],e.projectionMatrix)[3]||1,p={coordinateSystem:n,projectionMode:e.projectionMode,coordinateOrigin:s,commonOrigin:c.slice(0,3),center:r,pseudoMeters:!!e._pseudoMeters,viewportSize:d,devicePixelRatio:t,focalDistance:T,commonUnitsPerMeter:v.unitsPerMeter,commonUnitsPerWorldUnit:v.unitsPerMeter,commonUnitsPerWorldUnit2:be,scale:e.scale,wrapLongitude:!1,viewProjectionMatrix:i,modelMatrix:ne,cameraPosition:a};if(f){const j=e.getDistanceScales(f);switch(n){case _.METER_OFFSETS:p.commonUnitsPerWorldUnit=j.unitsPerMeter,p.commonUnitsPerWorldUnit2=j.unitsPerMeter2;break;case _.LNGLAT:case _.LNGLAT_OFFSETS:e._pseudoMeters||(p.commonUnitsPerMeter=j.unitsPerMeter),p.commonUnitsPerWorldUnit=j.unitsPerDegree,p.commonUnitsPerWorldUnit2=j.unitsPerDegree2;break;case _.CARTESIAN:p.commonUnitsPerWorldUnit=[1,1,j.unitsPerMeter[2]],p.commonUnitsPerWorldUnit2=[0,0,j.unitsPerMeter2[2]];break}}return p}const Be=Object.keys(_).map(e=>`const COORDINATE_SYSTEM_${e}: i32 = ${_[e]};`).join(""),Ve=Object.keys(I).map(e=>`const PROJECTION_MODE_${e}: i32 = ${I[e]};`).join(""),He=Object.keys(N).map(e=>`const UNIT_${e.toUpperCase()}: i32 = ${N[e]};`).join(""),Je=`${Be}
286
+ ${Ve}
287
+ ${He}
288
+
289
+ const TILE_SIZE: f32 = 512.0;
290
+ const PI: f32 = 3.1415926536;
291
+ const WORLD_SCALE: f32 = TILE_SIZE / (PI * 2.0);
292
+ const ZERO_64_LOW: vec3<f32> = vec3<f32>(0.0, 0.0, 0.0);
293
+ const EARTH_RADIUS: f32 = 6370972.0; // meters
294
+ const GLOBE_RADIUS: f32 = 256.0;
295
+
296
+ // -----------------------------------------------------------------------------
297
+ // Uniform block (converted from GLSL uniform block)
298
+ // -----------------------------------------------------------------------------
299
+ struct ProjectUniforms {
300
+ wrapLongitude: i32,
301
+ coordinateSystem: i32,
302
+ commonUnitsPerMeter: vec3<f32>,
303
+ projectionMode: i32,
304
+ scale: f32,
305
+ commonUnitsPerWorldUnit: vec3<f32>,
306
+ commonUnitsPerWorldUnit2: vec3<f32>,
307
+ center: vec4<f32>,
308
+ modelMatrix: mat4x4<f32>,
309
+ viewProjectionMatrix: mat4x4<f32>,
310
+ viewportSize: vec2<f32>,
311
+ devicePixelRatio: f32,
312
+ focalDistance: f32,
313
+ cameraPosition: vec3<f32>,
314
+ coordinateOrigin: vec3<f32>,
315
+ commonOrigin: vec3<f32>,
316
+ pseudoMeters: i32,
317
+ };
318
+
319
+ @group(0) @binding(0)
320
+ var<uniform> project: ProjectUniforms;
321
+
322
+ // -----------------------------------------------------------------------------
323
+ // Geometry data
324
+ // (In your GLSL code, "geometry" was assumed to be available globally. In WGSL,
325
+ // you might supply this via vertex attributes or a uniform. Here we define a
326
+ // uniform struct for demonstration.)
327
+ // -----------------------------------------------------------------------------
328
+
329
+ // Structure to carry additional geometry data used by deck.gl filters.
330
+ struct Geometry {
331
+ worldPosition: vec3<f32>,
332
+ worldPositionAlt: vec3<f32>,
333
+ position: vec4<f32>,
334
+ normal: vec3<f32>,
335
+ uv: vec2<f32>,
336
+ pickingColor: vec3<f32>,
337
+ };
338
+
339
+ // @group(0) @binding(1)
340
+ var<private> geometry: Geometry;
341
+ `,Ye=`${Je}
342
+
343
+ // -----------------------------------------------------------------------------
344
+ // Functions
345
+ // -----------------------------------------------------------------------------
346
+
347
+ // Returns an adjustment factor for commonUnitsPerMeter
348
+ fn _project_size_at_latitude(lat: f32) -> f32 {
349
+ let y = clamp(lat, -89.9, 89.9);
350
+ return 1.0 / cos(radians(y));
351
+ }
352
+
353
+ // Overloaded version: scales a value in meters at a given latitude.
354
+ fn _project_size_at_latitude_m(meters: f32, lat: f32) -> f32 {
355
+ return meters * project.commonUnitsPerMeter.z * _project_size_at_latitude(lat);
356
+ }
357
+
358
+ // Computes a non-linear scale factor based on geometry.
359
+ // (Note: This function relies on "geometry" being provided.)
360
+ fn project_size() -> f32 {
361
+ if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR &&
362
+ project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT &&
363
+ project.pseudoMeters == 0) {
364
+ if (geometry.position.w == 0.0) {
365
+ return _project_size_at_latitude(geometry.worldPosition.y);
366
+ }
367
+ let y: f32 = geometry.position.y / TILE_SIZE * 2.0 - 1.0;
368
+ let y2 = y * y;
369
+ let y4 = y2 * y2;
370
+ let y6 = y4 * y2;
371
+ return 1.0 + 4.9348 * y2 + 4.0587 * y4 + 1.5642 * y6;
372
+ }
373
+ return 1.0;
374
+ }
375
+
376
+ // Overloads to scale offsets (meters to world units)
377
+ fn project_size_float(meters: f32) -> f32 {
378
+ return meters * project.commonUnitsPerMeter.z * project_size();
379
+ }
380
+
381
+ fn project_size_vec2(meters: vec2<f32>) -> vec2<f32> {
382
+ return meters * project.commonUnitsPerMeter.xy * project_size();
383
+ }
384
+
385
+ fn project_size_vec3(meters: vec3<f32>) -> vec3<f32> {
386
+ return meters * project.commonUnitsPerMeter * project_size();
387
+ }
388
+
389
+ fn project_size_vec4(meters: vec4<f32>) -> vec4<f32> {
390
+ return vec4<f32>(meters.xyz * project.commonUnitsPerMeter, meters.w);
391
+ }
392
+
393
+ // Returns a rotation matrix aligning the z‑axis with the given up vector.
394
+ fn project_get_orientation_matrix(up: vec3<f32>) -> mat3x3<f32> {
395
+ let uz = normalize(up);
396
+ let ux = select(
397
+ vec3<f32>(1.0, 0.0, 0.0),
398
+ normalize(vec3<f32>(uz.y, -uz.x, 0.0)),
399
+ abs(uz.z) == 1.0
400
+ );
401
+ let uy = cross(uz, ux);
402
+ return mat3x3<f32>(ux, uy, uz);
403
+ }
404
+
405
+ // Since WGSL does not support "out" parameters, we return a struct.
406
+ struct RotationResult {
407
+ needsRotation: bool,
408
+ transform: mat3x3<f32>,
409
+ };
410
+
411
+ fn project_needs_rotation(commonPosition: vec3<f32>) -> RotationResult {
412
+ if (project.projectionMode == PROJECTION_MODE_GLOBE) {
413
+ return RotationResult(true, project_get_orientation_matrix(commonPosition));
414
+ } else {
415
+ return RotationResult(false, mat3x3<f32>()); // identity alternative if needed
416
+ };
417
+ }
418
+
419
+ // Projects a normal vector from the current coordinate system to world space.
420
+ fn project_normal(vector: vec3<f32>) -> vec3<f32> {
421
+ let normal_modelspace = project.modelMatrix * vec4<f32>(vector, 0.0);
422
+ var n = normalize(normal_modelspace.xyz * project.commonUnitsPerMeter);
423
+ let rotResult = project_needs_rotation(geometry.position.xyz);
424
+ if (rotResult.needsRotation) {
425
+ n = rotResult.transform * n;
426
+ }
427
+ return n;
428
+ }
429
+
430
+ // Applies a scale offset based on y-offset (dy)
431
+ fn project_offset_(offset: vec4<f32>) -> vec4<f32> {
432
+ let dy: f32 = offset.y;
433
+ let commonUnitsPerWorldUnit = project.commonUnitsPerWorldUnit + project.commonUnitsPerWorldUnit2 * dy;
434
+ return vec4<f32>(offset.xyz * commonUnitsPerWorldUnit, offset.w);
435
+ }
436
+
437
+ // Projects lng/lat coordinates to a unit tile [0,1]
438
+ fn project_mercator_(lnglat: vec2<f32>) -> vec2<f32> {
439
+ var x = lnglat.x;
440
+ if (project.wrapLongitude != 0) {
441
+ x = ((x + 180.0) % 360.0) - 180.0;
442
+ }
443
+ let y = clamp(lnglat.y, -89.9, 89.9);
444
+ return vec2<f32>(
445
+ radians(x) + PI,
446
+ PI + log(tan(PI * 0.25 + radians(y) * 0.5))
447
+ ) * WORLD_SCALE;
448
+ }
449
+
450
+ // Projects lng/lat/z coordinates for a globe projection.
451
+ fn project_globe_(lnglatz: vec3<f32>) -> vec3<f32> {
452
+ let lambda = radians(lnglatz.x);
453
+ let phi = radians(lnglatz.y);
454
+ let cosPhi = cos(phi);
455
+ let D = (lnglatz.z / EARTH_RADIUS + 1.0) * GLOBE_RADIUS;
456
+ return vec3<f32>(
457
+ sin(lambda) * cosPhi,
458
+ -cos(lambda) * cosPhi,
459
+ sin(phi)
460
+ ) * D;
461
+ }
462
+
463
+ // Projects positions (with an optional 64-bit low part) from the input
464
+ // coordinate system to the common space.
465
+ fn project_position_vec4_f64(position: vec4<f32>, position64Low: vec3<f32>) -> vec4<f32> {
466
+ var position_world = project.modelMatrix * position;
467
+
468
+ // Work around for a Mac+NVIDIA bug:
469
+ if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR) {
470
+ if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {
471
+ return vec4<f32>(
472
+ project_mercator_(position_world.xy),
473
+ _project_size_at_latitude_m(position_world.z, position_world.y),
474
+ position_world.w
475
+ );
476
+ }
477
+ if (project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN) {
478
+ position_world = vec4f(position_world.xyz + project.coordinateOrigin, position_world.w);
479
+ }
480
+ }
481
+ if (project.projectionMode == PROJECTION_MODE_GLOBE) {
482
+ if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {
483
+ return vec4<f32>(
484
+ project_globe_(position_world.xyz),
485
+ position_world.w
486
+ );
487
+ }
488
+ }
489
+ if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {
490
+ if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {
491
+ if (abs(position_world.y - project.coordinateOrigin.y) > 0.25) {
492
+ return vec4<f32>(
493
+ project_mercator_(position_world.xy) - project.commonOrigin.xy,
494
+ project_size_float(position_world.z),
495
+ position_world.w
496
+ );
497
+ }
498
+ }
499
+ }
500
+ if (project.projectionMode == PROJECTION_MODE_IDENTITY ||
501
+ (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET &&
502
+ (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT ||
503
+ project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN))) {
504
+ position_world = vec4f(position_world.xyz - project.coordinateOrigin, position_world.w);
505
+ }
506
+
507
+ return project_offset_(position_world) +
508
+ project_offset_(project.modelMatrix * vec4<f32>(position64Low, 0.0));
509
+ }
510
+
511
+ // Overloaded versions for different input types.
512
+ fn project_position_vec4_f32(position: vec4<f32>) -> vec4<f32> {
513
+ return project_position_vec4_f64(position, ZERO_64_LOW);
514
+ }
515
+
516
+ fn project_position_vec3_f64(position: vec3<f32>, position64Low: vec3<f32>) -> vec3<f32> {
517
+ let projected_position = project_position_vec4_f64(vec4<f32>(position, 1.0), position64Low);
518
+ return projected_position.xyz;
519
+ }
520
+
521
+ fn project_position_vec3_f32(position: vec3<f32>) -> vec3<f32> {
522
+ let projected_position = project_position_vec4_f64(vec4<f32>(position, 1.0), ZERO_64_LOW);
523
+ return projected_position.xyz;
524
+ }
525
+
526
+ fn project_position_vec2_f32(position: vec2<f32>) -> vec2<f32> {
527
+ let projected_position = project_position_vec4_f64(vec4<f32>(position, 0.0, 1.0), ZERO_64_LOW);
528
+ return projected_position.xy;
529
+ }
530
+
531
+ // Transforms a common space position to clip space.
532
+ fn project_common_position_to_clipspace_with_projection(position: vec4<f32>, viewProjectionMatrix: mat4x4<f32>, center: vec4<f32>) -> vec4<f32> {
533
+ return viewProjectionMatrix * position + center;
534
+ }
535
+
536
+ // Uses the project viewProjectionMatrix and center.
537
+ fn project_common_position_to_clipspace(position: vec4<f32>) -> vec4<f32> {
538
+ return project_common_position_to_clipspace_with_projection(position, project.viewProjectionMatrix, project.center);
539
+ }
540
+
541
+ // Returns a clip space offset corresponding to a given number of screen pixels.
542
+ fn project_pixel_size_to_clipspace(pixels: vec2<f32>) -> vec2<f32> {
543
+ let offset = pixels / project.viewportSize * project.devicePixelRatio * 2.0;
544
+ return offset * project.focalDistance;
545
+ }
546
+
547
+ fn project_meter_size_to_pixel(meters: f32) -> f32 {
548
+ return project_size_float(meters) * project.scale;
549
+ }
550
+
551
+ fn project_unit_size_to_pixel(size: f32, unit: i32) -> f32 {
552
+ if (unit == UNIT_METERS) {
553
+ return project_meter_size_to_pixel(size);
554
+ } else if (unit == UNIT_COMMON) {
555
+ return size * project.scale;
556
+ }
557
+ // UNIT_PIXELS: no scaling applied.
558
+ return size;
559
+ }
560
+
561
+ fn project_pixel_size_float(pixels: f32) -> f32 {
562
+ return pixels / project.scale;
563
+ }
564
+
565
+ fn project_pixel_size_vec2(pixels: vec2<f32>) -> vec2<f32> {
566
+ return pixels / project.scale;
567
+ }
568
+ `,Ze=Object.keys(_).map(e=>`const int COORDINATE_SYSTEM_${e} = ${_[e]};`).join(""),Ke=Object.keys(I).map(e=>`const int PROJECTION_MODE_${e} = ${I[e]};`).join(""),Xe=Object.keys(N).map(e=>`const int UNIT_${e.toUpperCase()} = ${N[e]};`).join(""),qe=`${Ze}
569
+ ${Ke}
570
+ ${Xe}
571
+ uniform projectUniforms {
572
+ bool wrapLongitude;
573
+ int coordinateSystem;
574
+ vec3 commonUnitsPerMeter;
575
+ int projectionMode;
576
+ float scale;
577
+ vec3 commonUnitsPerWorldUnit;
578
+ vec3 commonUnitsPerWorldUnit2;
579
+ vec4 center;
580
+ mat4 modelMatrix;
581
+ mat4 viewProjectionMatrix;
582
+ vec2 viewportSize;
583
+ float devicePixelRatio;
584
+ float focalDistance;
585
+ vec3 cameraPosition;
586
+ vec3 coordinateOrigin;
587
+ vec3 commonOrigin;
588
+ bool pseudoMeters;
589
+ } project;
590
+ const float TILE_SIZE = 512.0;
591
+ const float PI = 3.1415926536;
592
+ const float WORLD_SCALE = TILE_SIZE / (PI * 2.0);
593
+ const vec3 ZERO_64_LOW = vec3(0.0);
594
+ const float EARTH_RADIUS = 6370972.0;
595
+ const float GLOBE_RADIUS = 256.0;
596
+ float project_size_at_latitude(float lat) {
597
+ float y = clamp(lat, -89.9, 89.9);
598
+ return 1.0 / cos(radians(y));
599
+ }
600
+ float project_size() {
601
+ if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR &&
602
+ project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT &&
603
+ project.pseudoMeters == false) {
604
+ if (geometry.position.w == 0.0) {
605
+ return project_size_at_latitude(geometry.worldPosition.y);
606
+ }
607
+ float y = geometry.position.y / TILE_SIZE * 2.0 - 1.0;
608
+ float y2 = y * y;
609
+ float y4 = y2 * y2;
610
+ float y6 = y4 * y2;
611
+ return 1.0 + 4.9348 * y2 + 4.0587 * y4 + 1.5642 * y6;
612
+ }
613
+ return 1.0;
614
+ }
615
+ float project_size_at_latitude(float meters, float lat) {
616
+ return meters * project.commonUnitsPerMeter.z * project_size_at_latitude(lat);
617
+ }
618
+ float project_size(float meters) {
619
+ return meters * project.commonUnitsPerMeter.z * project_size();
620
+ }
621
+ vec2 project_size(vec2 meters) {
622
+ return meters * project.commonUnitsPerMeter.xy * project_size();
623
+ }
624
+ vec3 project_size(vec3 meters) {
625
+ return meters * project.commonUnitsPerMeter * project_size();
626
+ }
627
+ vec4 project_size(vec4 meters) {
628
+ return vec4(meters.xyz * project.commonUnitsPerMeter, meters.w);
629
+ }
630
+ mat3 project_get_orientation_matrix(vec3 up) {
631
+ vec3 uz = normalize(up);
632
+ vec3 ux = abs(uz.z) == 1.0 ? vec3(1.0, 0.0, 0.0) : normalize(vec3(uz.y, -uz.x, 0));
633
+ vec3 uy = cross(uz, ux);
634
+ return mat3(ux, uy, uz);
635
+ }
636
+ bool project_needs_rotation(vec3 commonPosition, out mat3 transform) {
637
+ if (project.projectionMode == PROJECTION_MODE_GLOBE) {
638
+ transform = project_get_orientation_matrix(commonPosition);
639
+ return true;
640
+ }
641
+ return false;
642
+ }
643
+ vec3 project_normal(vec3 vector) {
644
+ vec4 normal_modelspace = project.modelMatrix * vec4(vector, 0.0);
645
+ vec3 n = normalize(normal_modelspace.xyz * project.commonUnitsPerMeter);
646
+ mat3 rotation;
647
+ if (project_needs_rotation(geometry.position.xyz, rotation)) {
648
+ n = rotation * n;
649
+ }
650
+ return n;
651
+ }
652
+ vec4 project_offset_(vec4 offset) {
653
+ float dy = offset.y;
654
+ vec3 commonUnitsPerWorldUnit = project.commonUnitsPerWorldUnit + project.commonUnitsPerWorldUnit2 * dy;
655
+ return vec4(offset.xyz * commonUnitsPerWorldUnit, offset.w);
656
+ }
657
+ vec2 project_mercator_(vec2 lnglat) {
658
+ float x = lnglat.x;
659
+ if (project.wrapLongitude) {
660
+ x = mod(x + 180., 360.0) - 180.;
661
+ }
662
+ float y = clamp(lnglat.y, -89.9, 89.9);
663
+ return vec2(
664
+ radians(x) + PI,
665
+ PI + log(tan_fp32(PI * 0.25 + radians(y) * 0.5))
666
+ ) * WORLD_SCALE;
667
+ }
668
+ vec3 project_globe_(vec3 lnglatz) {
669
+ float lambda = radians(lnglatz.x);
670
+ float phi = radians(lnglatz.y);
671
+ float cosPhi = cos(phi);
672
+ float D = (lnglatz.z / EARTH_RADIUS + 1.0) * GLOBE_RADIUS;
673
+ return vec3(
674
+ sin(lambda) * cosPhi,
675
+ -cos(lambda) * cosPhi,
676
+ sin(phi)
677
+ ) * D;
678
+ }
679
+ vec4 project_position(vec4 position, vec3 position64Low) {
680
+ vec4 position_world = project.modelMatrix * position;
681
+ if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR) {
682
+ if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {
683
+ return vec4(
684
+ project_mercator_(position_world.xy),
685
+ project_size_at_latitude(position_world.z, position_world.y),
686
+ position_world.w
687
+ );
688
+ }
689
+ if (project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN) {
690
+ position_world.xyz += project.coordinateOrigin;
691
+ }
692
+ }
693
+ if (project.projectionMode == PROJECTION_MODE_GLOBE) {
694
+ if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {
695
+ return vec4(
696
+ project_globe_(position_world.xyz),
697
+ position_world.w
698
+ );
699
+ }
700
+ }
701
+ if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {
702
+ if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {
703
+ if (abs(position_world.y - project.coordinateOrigin.y) > 0.25) {
704
+ return vec4(
705
+ project_mercator_(position_world.xy) - project.commonOrigin.xy,
706
+ project_size(position_world.z),
707
+ position_world.w
708
+ );
709
+ }
710
+ }
711
+ }
712
+ if (project.projectionMode == PROJECTION_MODE_IDENTITY ||
713
+ (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET &&
714
+ (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT ||
715
+ project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN))) {
716
+ position_world.xyz -= project.coordinateOrigin;
717
+ }
718
+ return project_offset_(position_world) + project_offset_(project.modelMatrix * vec4(position64Low, 0.0));
719
+ }
720
+ vec4 project_position(vec4 position) {
721
+ return project_position(position, ZERO_64_LOW);
722
+ }
723
+ vec3 project_position(vec3 position, vec3 position64Low) {
724
+ vec4 projected_position = project_position(vec4(position, 1.0), position64Low);
725
+ return projected_position.xyz;
726
+ }
727
+ vec3 project_position(vec3 position) {
728
+ vec4 projected_position = project_position(vec4(position, 1.0), ZERO_64_LOW);
729
+ return projected_position.xyz;
730
+ }
731
+ vec2 project_position(vec2 position) {
732
+ vec4 projected_position = project_position(vec4(position, 0.0, 1.0), ZERO_64_LOW);
733
+ return projected_position.xy;
734
+ }
735
+ vec4 project_common_position_to_clipspace(vec4 position, mat4 viewProjectionMatrix, vec4 center) {
736
+ return viewProjectionMatrix * position + center;
737
+ }
738
+ vec4 project_common_position_to_clipspace(vec4 position) {
739
+ return project_common_position_to_clipspace(position, project.viewProjectionMatrix, project.center);
740
+ }
741
+ vec2 project_pixel_size_to_clipspace(vec2 pixels) {
742
+ vec2 offset = pixels / project.viewportSize * project.devicePixelRatio * 2.0;
743
+ return offset * project.focalDistance;
744
+ }
745
+ float project_size_to_pixel(float meters) {
746
+ return project_size(meters) * project.scale;
747
+ }
748
+ float project_size_to_pixel(float size, int unit) {
749
+ if (unit == UNIT_METERS) return project_size_to_pixel(size);
750
+ if (unit == UNIT_COMMON) return size * project.scale;
751
+ return size;
752
+ }
753
+ float project_pixel_size(float pixels) {
754
+ return pixels / project.scale;
755
+ }
756
+ vec2 project_pixel_size(vec2 pixels) {
757
+ return pixels / project.scale;
758
+ }
759
+ `,Qe={};function et(e=Qe){return"viewport"in e?ke(e):{}}const nt={name:"project",dependencies:[he,De],source:Ye,vs:qe,getUniforms:et,uniformTypes:{wrapLongitude:"f32",coordinateSystem:"i32",commonUnitsPerMeter:"vec3<f32>",projectionMode:"i32",scale:"f32",commonUnitsPerWorldUnit:"vec3<f32>",commonUnitsPerWorldUnit2:"vec3<f32>",center:"vec4<f32>",modelMatrix:"mat4x4<f32>",viewProjectionMatrix:"mat4x4<f32>",viewportSize:"vec2<f32>",devicePixelRatio:"f32",focalDistance:"f32",cameraPosition:"vec3<f32>",coordinateOrigin:"vec3<f32>",commonOrigin:"vec3<f32>",pseudoMeters:"f32"}};export{L as S,Y as a,Fe as b,De as c,ke as g,pe as i,we as m,nt as p};
760
+ //# sourceMappingURL=project-CrvReKGW.js.map