@navaramap/three 0.0.0

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 (350) hide show
  1. package/LICENSE +8 -0
  2. package/dist/assets/atmosphere/README.md +1 -0
  3. package/dist/assets/atmosphere/higher_order_scattering.bin +0 -0
  4. package/dist/assets/atmosphere/higher_order_scattering.exr +0 -0
  5. package/dist/assets/atmosphere/irradiance.bin +0 -0
  6. package/dist/assets/atmosphere/irradiance.exr +0 -0
  7. package/dist/assets/atmosphere/scattering.bin +0 -0
  8. package/dist/assets/atmosphere/scattering.exr +0 -0
  9. package/dist/assets/atmosphere/single_mie_scattering.bin +0 -0
  10. package/dist/assets/atmosphere/single_mie_scattering.exr +0 -0
  11. package/dist/assets/atmosphere/stars.bin +0 -0
  12. package/dist/assets/atmosphere/transmittance.bin +0 -0
  13. package/dist/assets/atmosphere/transmittance.exr +0 -0
  14. package/dist/assets/cloud/README.md +1 -0
  15. package/dist/assets/cloud/local_weather.png +0 -0
  16. package/dist/assets/cloud/shape.bin +1 -0
  17. package/dist/assets/cloud/shape_detail.bin +1 -0
  18. package/dist/assets/cloud/turbulence.png +0 -0
  19. package/dist/assets/fontWorker-CEJEfRpb.js +2 -0
  20. package/dist/assets/fontWorker-CEJEfRpb.js.map +1 -0
  21. package/dist/assets/index-BUB-ijMO.js +12 -0
  22. package/dist/assets/index-BUB-ijMO.js.map +1 -0
  23. package/dist/assets/navara_wasm_font_worker_bg-665OLxjy.wasm +0 -0
  24. package/dist/assets/navara_wasm_worker_bg-BXhKC5bE.wasm +0 -0
  25. package/dist/assets/noise/README.md +1 -0
  26. package/dist/assets/noise/stbn.bin +0 -0
  27. package/dist/assets/water/README.md +3 -0
  28. package/dist/assets/water/waternormals.jpg +0 -0
  29. package/dist/index.d.ts +10114 -0
  30. package/dist/index.js +34481 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/index.umd.cjs +6345 -0
  33. package/dist/index.umd.cjs.map +1 -0
  34. package/package.json +95 -0
  35. package/src/Color.ts +111 -0
  36. package/src/ShadowMapViewers.ts +49 -0
  37. package/src/atmosphere.test.ts +76 -0
  38. package/src/atmosphere.ts +364 -0
  39. package/src/bufferView.ts +90 -0
  40. package/src/camera.ts +182 -0
  41. package/src/concurrency.ts +15 -0
  42. package/src/constants/assets.ts +30 -0
  43. package/src/constants/decoder.ts +7 -0
  44. package/src/constants/index.ts +2 -0
  45. package/src/core/BaseDesc.ts +142 -0
  46. package/src/core/BaseHandle.ts +126 -0
  47. package/src/core/DescRegistry.ts +88 -0
  48. package/src/core/EffectDesc.ts +343 -0
  49. package/src/core/EffectDescRegistry.ts +31 -0
  50. package/src/core/InstancedMeshDesc.ts +413 -0
  51. package/src/core/LightDesc.ts +216 -0
  52. package/src/core/LightDescRegistry.ts +32 -0
  53. package/src/core/MeshDesc.ts +457 -0
  54. package/src/core/MeshDescRegistry.ts +32 -0
  55. package/src/core/MeshDescWithSelectiveEffect.ts +129 -0
  56. package/src/core/Registries.ts +59 -0
  57. package/src/core/SelectiveEffectRegistry.ts +90 -0
  58. package/src/core/ViewContext.ts +235 -0
  59. package/src/core/errors.ts +16 -0
  60. package/src/core/index.ts +50 -0
  61. package/src/device.ts +414 -0
  62. package/src/effects/CustomEffectPass.ts +28 -0
  63. package/src/effects/copy.ts +10 -0
  64. package/src/effects/effect.ts +87 -0
  65. package/src/effects/index.ts +4 -0
  66. package/src/effects/render.ts +10 -0
  67. package/src/evaluations/FeatureEvaluator.ts +529 -0
  68. package/src/evaluations/index.ts +1 -0
  69. package/src/event/HillshadeContext.test.ts +232 -0
  70. package/src/event/HillshadeContext.ts +299 -0
  71. package/src/event/context.ts +279 -0
  72. package/src/event/feature.ts +357 -0
  73. package/src/event/featureEvent.ts +81 -0
  74. package/src/event/features/billboard.ts +30 -0
  75. package/src/event/features/model.ts +192 -0
  76. package/src/event/features/modelGpuBytes.test.ts +69 -0
  77. package/src/event/features/modelGpuBytes.ts +87 -0
  78. package/src/event/features/point.ts +25 -0
  79. package/src/event/features/polygon.ts +23 -0
  80. package/src/event/features/polygonOutline.ts +19 -0
  81. package/src/event/features/polyline.ts +19 -0
  82. package/src/event/features/text.ts +71 -0
  83. package/src/event/hillshade.test.ts +842 -0
  84. package/src/event/hillshade.ts +588 -0
  85. package/src/event/index.ts +700 -0
  86. package/src/event/loaders.ts +53 -0
  87. package/src/event/tile.ts +19 -0
  88. package/src/event/worker.ts +999 -0
  89. package/src/event/workerTaskSettlement.test.ts +243 -0
  90. package/src/event/workerTaskSettlement.ts +128 -0
  91. package/src/inMemoryBufferStore.test.ts +60 -0
  92. package/src/inMemoryBufferStore.ts +67 -0
  93. package/src/index.iife.ts +11 -0
  94. package/src/index.ts +2556 -0
  95. package/src/input.ts +144 -0
  96. package/src/layer.ts +183 -0
  97. package/src/layers/effect/FinalCopyEffectDesc.ts +29 -0
  98. package/src/layers/effect/MRTPassEffectDesc.ts +105 -0
  99. package/src/layers/effect/README.md +9 -0
  100. package/src/layers/effect/SelectiveEffectDesc.ts +113 -0
  101. package/src/layers/effect/SkyEnvMapEffectDesc.ts +58 -0
  102. package/src/layers/effect/TransparentPassEffectDesc.ts +62 -0
  103. package/src/layers/effect/index.ts +5 -0
  104. package/src/layers/index.ts +1 -0
  105. package/src/layersManager.ts +63 -0
  106. package/src/light.ts +15 -0
  107. package/src/loaders/AbortableImageLoader.ts +203 -0
  108. package/src/loaders/AbortableTextureLoader.ts +74 -0
  109. package/src/loaders/index.ts +5 -0
  110. package/src/material/enhancer/DESIGN.md +300 -0
  111. package/src/material/enhancer/MaterialEnhancer.ts +112 -0
  112. package/src/material/enhancer/ShaderReplacer.test.ts +114 -0
  113. package/src/material/enhancer/ShaderReplacer.ts +97 -0
  114. package/src/material/enhancer/batchTexture.ts +8 -0
  115. package/src/material/enhancer/index.ts +46 -0
  116. package/src/material/enhancer/instancedSprite/index.ts +7 -0
  117. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/index.test.ts +214 -0
  118. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/index.ts +134 -0
  119. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/markers.ts +21 -0
  120. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/material.ts +32 -0
  121. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/mutates.test.ts +277 -0
  122. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/mutates.ts +151 -0
  123. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/shader.test.ts +114 -0
  124. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/shader.ts +49 -0
  125. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/state.test.ts +82 -0
  126. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/state.ts +80 -0
  127. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/types.ts +146 -0
  128. package/src/material/enhancer/instancedSprite/instancedSpriteMaterialEnhancer.ts +105 -0
  129. package/src/material/enhancer/model/index.ts +25 -0
  130. package/src/material/enhancer/model/modelBaseEnhancer/index.test.ts +74 -0
  131. package/src/material/enhancer/model/modelBaseEnhancer/index.ts +110 -0
  132. package/src/material/enhancer/model/modelBaseEnhancer/markers.ts +27 -0
  133. package/src/material/enhancer/model/modelBaseEnhancer/material.test.ts +66 -0
  134. package/src/material/enhancer/model/modelBaseEnhancer/material.ts +44 -0
  135. package/src/material/enhancer/model/modelBaseEnhancer/mutates.test.ts +84 -0
  136. package/src/material/enhancer/model/modelBaseEnhancer/mutates.ts +47 -0
  137. package/src/material/enhancer/model/modelBaseEnhancer/shader.test.ts +24 -0
  138. package/src/material/enhancer/model/modelBaseEnhancer/shader.ts +162 -0
  139. package/src/material/enhancer/model/modelBaseEnhancer/state.test.ts +103 -0
  140. package/src/material/enhancer/model/modelBaseEnhancer/state.ts +52 -0
  141. package/src/material/enhancer/model/modelBaseEnhancer/types.ts +89 -0
  142. package/src/material/enhancer/model/modelMaterialEnhancer.ts +91 -0
  143. package/src/material/enhancer/model/modelWaterEnhancer/index.test.ts +71 -0
  144. package/src/material/enhancer/model/modelWaterEnhancer/index.ts +175 -0
  145. package/src/material/enhancer/model/modelWaterEnhancer/material.test.ts +48 -0
  146. package/src/material/enhancer/model/modelWaterEnhancer/material.ts +25 -0
  147. package/src/material/enhancer/model/modelWaterEnhancer/mutates.test.ts +89 -0
  148. package/src/material/enhancer/model/modelWaterEnhancer/mutates.ts +89 -0
  149. package/src/material/enhancer/model/modelWaterEnhancer/shader.test.ts +34 -0
  150. package/src/material/enhancer/model/modelWaterEnhancer/shader.ts +111 -0
  151. package/src/material/enhancer/model/modelWaterEnhancer/state.test.ts +105 -0
  152. package/src/material/enhancer/model/modelWaterEnhancer/state.ts +59 -0
  153. package/src/material/enhancer/model/modelWaterEnhancer/types.ts +141 -0
  154. package/src/material/enhancer/model/pntsEnhancer/index.test.ts +96 -0
  155. package/src/material/enhancer/model/pntsEnhancer/index.ts +82 -0
  156. package/src/material/enhancer/model/pntsEnhancer/markers.ts +6 -0
  157. package/src/material/enhancer/model/pntsEnhancer/material.test.ts +37 -0
  158. package/src/material/enhancer/model/pntsEnhancer/material.ts +21 -0
  159. package/src/material/enhancer/model/pntsEnhancer/mutates.test.ts +80 -0
  160. package/src/material/enhancer/model/pntsEnhancer/mutates.ts +29 -0
  161. package/src/material/enhancer/model/pntsEnhancer/shader.test.ts +32 -0
  162. package/src/material/enhancer/model/pntsEnhancer/shader.ts +56 -0
  163. package/src/material/enhancer/model/pntsEnhancer/state.test.ts +87 -0
  164. package/src/material/enhancer/model/pntsEnhancer/state.ts +29 -0
  165. package/src/material/enhancer/model/pntsEnhancer/types.ts +38 -0
  166. package/src/material/enhancer/polygon/index.ts +22 -0
  167. package/src/material/enhancer/polygon/polygonBaseEnhancer/index.test.ts +101 -0
  168. package/src/material/enhancer/polygon/polygonBaseEnhancer/index.ts +130 -0
  169. package/src/material/enhancer/polygon/polygonBaseEnhancer/markers.ts +23 -0
  170. package/src/material/enhancer/polygon/polygonBaseEnhancer/material.test.ts +19 -0
  171. package/src/material/enhancer/polygon/polygonBaseEnhancer/material.ts +38 -0
  172. package/src/material/enhancer/polygon/polygonBaseEnhancer/mutates.test.ts +75 -0
  173. package/src/material/enhancer/polygon/polygonBaseEnhancer/mutates.ts +122 -0
  174. package/src/material/enhancer/polygon/polygonBaseEnhancer/shader.test.ts +25 -0
  175. package/src/material/enhancer/polygon/polygonBaseEnhancer/shader.ts +249 -0
  176. package/src/material/enhancer/polygon/polygonBaseEnhancer/state.test.ts +102 -0
  177. package/src/material/enhancer/polygon/polygonBaseEnhancer/state.ts +92 -0
  178. package/src/material/enhancer/polygon/polygonBaseEnhancer/types.ts +150 -0
  179. package/src/material/enhancer/polygon/polygonMaterialEnhancer.ts +97 -0
  180. package/src/material/enhancer/polygon/polygonWaterEnhancer/index.test.ts +72 -0
  181. package/src/material/enhancer/polygon/polygonWaterEnhancer/index.ts +164 -0
  182. package/src/material/enhancer/polygon/polygonWaterEnhancer/material.test.ts +48 -0
  183. package/src/material/enhancer/polygon/polygonWaterEnhancer/material.ts +35 -0
  184. package/src/material/enhancer/polygon/polygonWaterEnhancer/mutates.ts +61 -0
  185. package/src/material/enhancer/polygon/polygonWaterEnhancer/shader.test.ts +34 -0
  186. package/src/material/enhancer/polygon/polygonWaterEnhancer/shader.ts +96 -0
  187. package/src/material/enhancer/polygon/polygonWaterEnhancer/state.test.ts +98 -0
  188. package/src/material/enhancer/polygon/polygonWaterEnhancer/state.ts +57 -0
  189. package/src/material/enhancer/polygon/polygonWaterEnhancer/types.ts +115 -0
  190. package/src/material/enhancer/polyline/index.ts +7 -0
  191. package/src/material/enhancer/polyline/polylineBaseEnhancer/index.test.ts +157 -0
  192. package/src/material/enhancer/polyline/polylineBaseEnhancer/index.ts +154 -0
  193. package/src/material/enhancer/polyline/polylineBaseEnhancer/markers.ts +19 -0
  194. package/src/material/enhancer/polyline/polylineBaseEnhancer/material.test.ts +42 -0
  195. package/src/material/enhancer/polyline/polylineBaseEnhancer/material.ts +38 -0
  196. package/src/material/enhancer/polyline/polylineBaseEnhancer/mutates.test.ts +120 -0
  197. package/src/material/enhancer/polyline/polylineBaseEnhancer/mutates.ts +169 -0
  198. package/src/material/enhancer/polyline/polylineBaseEnhancer/shader.test.ts +67 -0
  199. package/src/material/enhancer/polyline/polylineBaseEnhancer/shader.ts +75 -0
  200. package/src/material/enhancer/polyline/polylineBaseEnhancer/state.test.ts +55 -0
  201. package/src/material/enhancer/polyline/polylineBaseEnhancer/state.ts +91 -0
  202. package/src/material/enhancer/polyline/polylineBaseEnhancer/types.ts +170 -0
  203. package/src/material/enhancer/polyline/polylineMaterialEnhancer.ts +102 -0
  204. package/src/material/enhancer/sdfText/index.ts +7 -0
  205. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/index.ts +125 -0
  206. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/markers.ts +19 -0
  207. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/material.test.ts +35 -0
  208. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/material.ts +32 -0
  209. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/mutates.test.ts +381 -0
  210. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/mutates.ts +232 -0
  211. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/shader.ts +36 -0
  212. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/state.test.ts +118 -0
  213. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/state.ts +107 -0
  214. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/types.ts +184 -0
  215. package/src/material/enhancer/sdfText/sdfTextMaterialEnhancer.ts +100 -0
  216. package/src/material/enhancer/shadowMap/index.ts +7 -0
  217. package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/index.ts +97 -0
  218. package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/markers.ts +10 -0
  219. package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/material.ts +31 -0
  220. package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/mutates.ts +8 -0
  221. package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/shader.test.ts +17 -0
  222. package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/shader.ts +53 -0
  223. package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/state.ts +17 -0
  224. package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/types.ts +26 -0
  225. package/src/material/enhancer/test-utils/shaderCompatibility.ts +124 -0
  226. package/src/material/enhancer/tileComposite/compose.test.ts +95 -0
  227. package/src/material/enhancer/tileComposite/compose.ts +112 -0
  228. package/src/material/enhancer/tileComposite/index.ts +23 -0
  229. package/src/material/enhancer/tileComposite/tileCompositeBaseEnhancer/index.ts +11 -0
  230. package/src/material/enhancer/tileComposite/tileCompositeBaseEnhancer/mutates.ts +132 -0
  231. package/src/material/enhancer/tileComposite/tileCompositeBaseEnhancer/shader.ts +245 -0
  232. package/src/material/enhancer/tileComposite/tileCompositeBaseEnhancer/types.ts +43 -0
  233. package/src/material/enhancer/tileComposite/tileElevationHeatmapEnhancer/index.ts +29 -0
  234. package/src/material/enhancer/tileComposite/tileElevationHeatmapEnhancer/mutates.ts +68 -0
  235. package/src/material/enhancer/tileComposite/tileElevationHeatmapEnhancer/shader.ts +24 -0
  236. package/src/material/enhancer/tileComposite/tileHillshadeEnhancer/index.ts +29 -0
  237. package/src/material/enhancer/tileComposite/tileHillshadeEnhancer/mutates.ts +34 -0
  238. package/src/material/enhancer/tileComposite/tileHillshadeEnhancer/shader.ts +36 -0
  239. package/src/material/enhancer/tileComposite/tileWaterEnhancer/index.ts +23 -0
  240. package/src/material/enhancer/tileComposite/tileWaterEnhancer/mutates.ts +23 -0
  241. package/src/material/enhancer/tileComposite/tileWaterEnhancer/shader.ts +8 -0
  242. package/src/material/enhancer/tileComposite/tileWatermaskEnhancer/index.ts +23 -0
  243. package/src/material/enhancer/tileComposite/tileWatermaskEnhancer/mutates.ts +34 -0
  244. package/src/material/enhancer/tileComposite/tileWatermaskEnhancer/shader.ts +13 -0
  245. package/src/material/enhancer/tileComposite/types.ts +58 -0
  246. package/src/material/index.ts +3 -0
  247. package/src/material/macro/index.ts +1 -0
  248. package/src/material/macro/tileShader.test.ts +136 -0
  249. package/src/material/macro/tileShader.ts +287 -0
  250. package/src/material/overrideMaterialsForMRT.ts +439 -0
  251. package/src/material/selectiveEffectMaterialSetup.test.ts +52 -0
  252. package/src/material/selectiveEffectMaterialSetup.ts +53 -0
  253. package/src/material/types/index.ts +1 -0
  254. package/src/material/types/uniform.ts +1 -0
  255. package/src/mesh/DrapedMesh.ts +101 -0
  256. package/src/mesh/batchTexture.test.ts +646 -0
  257. package/src/mesh/batchTexture.ts +437 -0
  258. package/src/mesh/batchedFeature.ts +186 -0
  259. package/src/mesh/batchedSdfText.ts +484 -0
  260. package/src/mesh/featureMesh.ts +43 -0
  261. package/src/mesh/index.ts +16 -0
  262. package/src/mesh/instanced.ts +117 -0
  263. package/src/mesh/model.ts +483 -0
  264. package/src/mesh/pickableMesh.ts +55 -0
  265. package/src/mesh/pickableMeshWrapper.ts +529 -0
  266. package/src/mesh/polygon.ts +699 -0
  267. package/src/mesh/polygonOutline.ts +393 -0
  268. package/src/mesh/polyline.ts +523 -0
  269. package/src/mesh/releaseGeometryArrays.ts +57 -0
  270. package/src/mesh/rtcRteHelper.ts +211 -0
  271. package/src/mesh/sdfText.test.ts +200 -0
  272. package/src/mesh/sdfText.ts +1019 -0
  273. package/src/mesh/sprite/billboardAtlas.test.ts +177 -0
  274. package/src/mesh/sprite/billboardAtlas.ts +210 -0
  275. package/src/mesh/sprite/billboardAtlasImageLoader.ts +29 -0
  276. package/src/mesh/sprite/index.ts +1 -0
  277. package/src/mesh/sprite/instancedSprite.ts +694 -0
  278. package/src/mesh/tile.test.ts +393 -0
  279. package/src/mesh/tile.ts +1790 -0
  280. package/src/object3DEvent.ts +6 -0
  281. package/src/orchestrators/RenderPassOrchestrator.ts +147 -0
  282. package/src/orchestrators/index.ts +1 -0
  283. package/src/passes/AllDepthCopyPass.ts +165 -0
  284. package/src/passes/CustomRenderPass.ts +279 -0
  285. package/src/passes/NormalCopyPass.ts +125 -0
  286. package/src/passes/RenderTargetCopyPass.ts +91 -0
  287. package/src/passes/SkyEnvMapPass.ts +58 -0
  288. package/src/passes/index.ts +5 -0
  289. package/src/pick/pickHelper.ts +273 -0
  290. package/src/pick/pickTerrain.ts +254 -0
  291. package/src/plugins/AttributionPlugin/AttributionPlugin.test.ts +210 -0
  292. package/src/plugins/AttributionPlugin/attribution.test.ts +225 -0
  293. package/src/plugins/AttributionPlugin/attribution.ts +355 -0
  294. package/src/plugins/AttributionPlugin/attributionStyles.ts +163 -0
  295. package/src/plugins/AttributionPlugin/index.ts +702 -0
  296. package/src/plugins/index.ts +1 -0
  297. package/src/quality.ts +1 -0
  298. package/src/renderOrder.ts +3 -0
  299. package/src/scene.test.ts +164 -0
  300. package/src/scene.ts +127 -0
  301. package/src/shaders/index.ts +1 -0
  302. package/src/solar.test.ts +81 -0
  303. package/src/solar.ts +101 -0
  304. package/src/source.ts +80 -0
  305. package/src/stats.ts +102 -0
  306. package/src/tasks/computeVertexNormalsAsync.ts +15 -0
  307. package/src/tasks/constructPolygonBatchedFeature.ts +34 -0
  308. package/src/tasks/constructPolylineBatchedFeature.ts +27 -0
  309. package/src/tasks/constructQuantizedMeshTerrainMesh.ts +24 -0
  310. package/src/tasks/constructTerrainMesh.ts +25 -0
  311. package/src/tasks/getImageDataFromBlob.ts +13 -0
  312. package/src/tasks/getImageDataFromImageBitmap.ts +12 -0
  313. package/src/tasks/parseMvtTile.ts +22 -0
  314. package/src/tasks/queueTask.ts +19 -0
  315. package/src/tasks/toCreasedNormalsAsync.ts +18 -0
  316. package/src/tasks/upsampleQuantizedMeshTerrainMesh.ts +44 -0
  317. package/src/tasks/upsampleTerrainMesh.ts +39 -0
  318. package/src/texture.ts +19 -0
  319. package/src/textures.ts +13 -0
  320. package/src/tileTexture/CompositeShader.snapshot.test.ts +59 -0
  321. package/src/tileTexture/CompositeShader.test.ts +168 -0
  322. package/src/tileTexture/CompositeShader.ts +53 -0
  323. package/src/tileTexture/SlotPlanner.test.ts +105 -0
  324. package/src/tileTexture/SlotPlanner.ts +102 -0
  325. package/src/tileTexture/TileTextureCache.test.ts +227 -0
  326. package/src/tileTexture/TileTextureCache.ts +192 -0
  327. package/src/tileTexture/TileTextureCompositor.test.ts +260 -0
  328. package/src/tileTexture/TileTextureCompositor.ts +421 -0
  329. package/src/tileTexture/__snapshots__/CompositeShader.snapshot.test.ts.snap +2649 -0
  330. package/src/tileTexture/index.ts +8 -0
  331. package/src/tileTexture/types.ts +150 -0
  332. package/src/type/index.ts +261 -0
  333. package/src/uniforms.ts +20 -0
  334. package/src/utils/arraysEqual.ts +9 -0
  335. package/src/utils/blendModes.ts +80 -0
  336. package/src/utils/geometry.ts +53 -0
  337. package/src/utils/hillshadeNormalMapGenerator.ts +193 -0
  338. package/src/utils/index.ts +8 -0
  339. package/src/utils/object.test.ts +14 -0
  340. package/src/utils/object.ts +7 -0
  341. package/src/utils/replacer.test.ts +42 -0
  342. package/src/utils/replacer.ts +89 -0
  343. package/src/utils/screen.ts +29 -0
  344. package/src/utils/textureFragmentIndex.test.ts +224 -0
  345. package/src/utils/textureFragmentIndex.ts +97 -0
  346. package/src/utils/worker.ts +3 -0
  347. package/src/vite-env.d.ts +2 -0
  348. package/src/worker/index.ts +13 -0
  349. package/src/worker/tasks/computeVertexNormals.ts +15 -0
  350. package/src/worker/tasks/toCreasedNormals.ts +22 -0
@@ -0,0 +1,90 @@
1
+ // ============================================================================
2
+ // SelectiveEffectRegistry
3
+ // ============================================================================
4
+
5
+ const MAX_SLOTS = 11;
6
+
7
+ /**
8
+ * Unified registry for selective effects.
9
+ *
10
+ * Manages effectId → slot bit mapping.
11
+ * Assigns bit positions in the EffectIds Buffer bitmask (R channel).
12
+ * Half-float preserves integer masks up to 2047 exactly, so up to 11 slots
13
+ * (2^11 - 1) can be represented losslessly in a single channel.
14
+ * Freed slots are reused by subsequent registrations.
15
+ */
16
+ export class SelectiveEffectRegistry {
17
+ // effectId → slot bit mapping
18
+ private idToSlot = new Map<string, number>();
19
+ private freedSlots: number[] = [];
20
+ private nextSlot = 0;
21
+
22
+ constructor(
23
+ /** Called when slot assignments change (register/unregister). */
24
+ private onSlotsChanged: () => void,
25
+ ) {}
26
+
27
+ // ---------------------------------------------------------------------------
28
+ // Slot management
29
+ // ---------------------------------------------------------------------------
30
+
31
+ registerSlot(effectId: string): number {
32
+ const existing = this.idToSlot.get(effectId);
33
+ if (existing !== undefined) return existing;
34
+
35
+ let slot: number;
36
+ const freed = this.freedSlots.pop();
37
+ if (freed !== undefined) {
38
+ slot = freed;
39
+ } else {
40
+ if (this.nextSlot >= MAX_SLOTS) {
41
+ console.warn(
42
+ `SelectiveEffectRegistry: max ${MAX_SLOTS} slots reached, ignoring effectId "${effectId}"`,
43
+ );
44
+ return -1;
45
+ }
46
+ slot = this.nextSlot++;
47
+ }
48
+
49
+ this.idToSlot.set(effectId, slot);
50
+ this.onSlotsChanged?.();
51
+ return slot;
52
+ }
53
+
54
+ unregisterSlot(effectId: string): void {
55
+ const slot = this.idToSlot.get(effectId);
56
+ if (slot === undefined) return;
57
+ this.idToSlot.delete(effectId);
58
+ this.freedSlots.push(slot);
59
+ this.onSlotsChanged?.();
60
+ }
61
+
62
+ get slotCount(): number {
63
+ return this.idToSlot.size;
64
+ }
65
+
66
+ getSlot(effectId: string): number | undefined {
67
+ return this.idToSlot.get(effectId);
68
+ }
69
+
70
+ computeMask(effectIds: readonly string[]): number {
71
+ let mask = 0;
72
+ for (const id of effectIds) {
73
+ const slot = this.idToSlot.get(id);
74
+ if (slot !== undefined && slot >= 0) {
75
+ mask |= 1 << slot;
76
+ }
77
+ }
78
+ return mask;
79
+ }
80
+
81
+ /**
82
+ * Clear all slot assignments.
83
+ * Intended for teardown only; does not emit onSlotsChanged.
84
+ */
85
+ clear(): void {
86
+ this.idToSlot.clear();
87
+ this.freedSlots = [];
88
+ this.nextSlot = 0;
89
+ }
90
+ }
@@ -0,0 +1,235 @@
1
+ import { EventHandler } from "@navaramap/core";
2
+ import type { Core } from "@navaramap/engine";
3
+ import type { ConcurrencyManager } from "@navaramap/worker";
4
+ import type { Pass as PostProcessingPass } from "postprocessing";
5
+ import type { Material, Object3D, WebGLRenderer } from "three";
6
+ import invariant from "tiny-invariant";
7
+
8
+ import type { LayersManager } from "../layersManager";
9
+ import type { PickableMesh } from "../mesh/pickableMesh";
10
+ import type { RenderPassOrchestrator } from "../orchestrators";
11
+ import type { CustomRenderPass } from "../passes";
12
+ import type { Scenes } from "../scene";
13
+ import type { MeshCache } from "../type";
14
+
15
+ import type { EffectHandle } from "./BaseHandle";
16
+ import { SelectiveEffectRegistry } from "./SelectiveEffectRegistry";
17
+
18
+ type ViewContextEvents = {
19
+ /**
20
+ * Emitted when a material is registered for CSM shadow rendering.
21
+ * @experimental This event may change or be removed in future versions.
22
+ */
23
+ shadowApplied: (material: Material) => void;
24
+ /**
25
+ * Emitted when a material is unregistered from CSM shadow rendering.
26
+ * @experimental This event may change or be removed in future versions.
27
+ */
28
+ shadowRemoved: (material: Material) => void;
29
+ /**
30
+ * Emitted when effect slot assignments change in SelectiveEffectRegistry.
31
+ * Listeners should recompute effectIdsMask to stay in sync.
32
+ */
33
+ effectSlotsChanged: () => void;
34
+ };
35
+
36
+ /**
37
+ * ViewContext is the shared context object passed to every custom descriptor and plugin.
38
+ *
39
+ * The public properties and methods defined here form the **public API surface**
40
+ * exposed to user-authored descriptors and plugins. Any addition, removal, or
41
+ * signature change to a public member is a **breaking change** for consumers.
42
+ *
43
+ * When extending this class, keep the public surface minimal and intentional:
44
+ * - Prefer methods over exposing internal objects directly — this allows the
45
+ * implementation to change without breaking downstream code.
46
+ * - Mark internal dependencies as `private` so they are not accessible from
47
+ * descriptor/plugin code.
48
+ */
49
+ export class ViewContext extends EventHandler<ViewContextEvents> {
50
+ private _selectiveEffectRegistry: SelectiveEffectRegistry;
51
+ private _renderPass?: CustomRenderPass;
52
+
53
+ constructor(
54
+ /** Scene containers for different rendering passes. */
55
+ private _scenes: Scenes,
56
+ private layersManager: LayersManager,
57
+ private renderPassOrchestrator: RenderPassOrchestrator,
58
+ /** Manager for scheduling work on Web Workers. */
59
+ private _concurrencyManager: ConcurrencyManager,
60
+ private _core: Core,
61
+ private _meshes: MeshCache,
62
+ ) {
63
+ super();
64
+
65
+ this._selectiveEffectRegistry = new SelectiveEffectRegistry(() =>
66
+ this.emit("effectSlotsChanged"),
67
+ );
68
+ }
69
+
70
+ /** Scene containers for different rendering passes. */
71
+ get scenes(): Scenes {
72
+ return this._scenes;
73
+ }
74
+
75
+ /** Manager for scheduling work on Web Workers. */
76
+ get concurrencyManager(): ConcurrencyManager {
77
+ return this._concurrencyManager;
78
+ }
79
+
80
+ get selectiveEffectRegistry(): SelectiveEffectRegistry {
81
+ return this._selectiveEffectRegistry;
82
+ }
83
+
84
+ // --- Pass management ---
85
+
86
+ /** Get a post-processing pass by name. */
87
+ getPass(name: string): PostProcessingPass | undefined {
88
+ return this.renderPassOrchestrator.getPass(name);
89
+ }
90
+
91
+ /** Add a post-processing pass to the end of the pipeline. */
92
+ addPass(name: string, pass: PostProcessingPass): void {
93
+ this.renderPassOrchestrator.addPass(name, pass);
94
+ }
95
+
96
+ /** Insert a post-processing pass before the pass identified by `targetName`. */
97
+ insertPassBefore(
98
+ targetName: string,
99
+ name: string,
100
+ pass: PostProcessingPass,
101
+ ): void {
102
+ this.renderPassOrchestrator.insertPassBefore(targetName, name, pass);
103
+ }
104
+
105
+ /** Insert a post-processing pass after the pass identified by `targetName`. */
106
+ insertPassAfter(
107
+ targetName: string,
108
+ name: string,
109
+ pass: PostProcessingPass,
110
+ ): void {
111
+ this.renderPassOrchestrator.insertPassAfter(targetName, name, pass);
112
+ }
113
+
114
+ /** Remove a post-processing pass by name. */
115
+ removePass(name: string): void {
116
+ this.renderPassOrchestrator.removePass(name);
117
+ }
118
+
119
+ // --- Renderer/buffer access ---
120
+
121
+ /** Get the underlying WebGLRenderer instance. */
122
+ getRenderer(): WebGLRenderer {
123
+ return this.renderPassOrchestrator.effectComposer.getRenderer();
124
+ }
125
+
126
+ /** Get the input buffer from the effect composer. */
127
+ getInputBuffer() {
128
+ return this.renderPassOrchestrator.effectComposer.inputBuffer;
129
+ }
130
+
131
+ /** @internal */
132
+ _setRenderPass(renderPass: CustomRenderPass) {
133
+ this._renderPass = renderPass;
134
+ }
135
+
136
+ /**
137
+ * Gets the globe depth texture for post-processing effects.
138
+ */
139
+ getGlobeDepthTexture() {
140
+ invariant(this._renderPass, "CustomRenderPass isn't initialized yet.");
141
+ return this._renderPass.globeDepthCopyPass.texture;
142
+ }
143
+
144
+ /**
145
+ * Gets the globe normal texture for post-processing effects.
146
+ */
147
+ getGlobeNormalTexture() {
148
+ invariant(this._renderPass, "CustomRenderPass isn't initialized yet.");
149
+ return this._renderPass.globeNormalCopyPass.texture;
150
+ }
151
+
152
+ /**
153
+ * Gets the main render target which includes G-buffer.
154
+ */
155
+ getRenderTarget() {
156
+ invariant(this._renderPass, "CustomRenderPass isn't initialized yet.");
157
+ return this._renderPass.gbufferRenderTarget;
158
+ }
159
+
160
+ /**
161
+ * Gets the scene normal texture from the G-buffer.
162
+ */
163
+ getNormalTexture() {
164
+ invariant(this._renderPass, "CustomRenderPass isn't initialized yet.");
165
+ return this._renderPass.gbufferRenderTarget.textures[1];
166
+ }
167
+
168
+ /**
169
+ * Gets the effect IDs texture from the G-buffer.
170
+ */
171
+ getEffectIdsTexture() {
172
+ invariant(this._renderPass, "CustomRenderPass isn't initialized yet.");
173
+ return this._renderPass.gbufferRenderTarget.textures[2];
174
+ }
175
+
176
+ /**
177
+ * Gets the emissive texture from the G-buffer.
178
+ */
179
+ getEmissiveTexture() {
180
+ invariant(this._renderPass, "CustomRenderPass isn't initialized yet.");
181
+ return this._renderPass.gbufferRenderTarget.textures[3];
182
+ }
183
+
184
+ // --- Descriptor query ---
185
+
186
+ /** @internal Iterate over all registered effect descriptors. */
187
+ _getEffects(): Generator<EffectHandle> {
188
+ return this.layersManager.getEffectDescs();
189
+ }
190
+
191
+ /**
192
+ * Register a material for CSM shadow rendering.
193
+ * @experimental This API may change or be removed in future versions.
194
+ */
195
+ applyShadowMaterial(material: Material): void {
196
+ this.emit("shadowApplied", material);
197
+ }
198
+
199
+ /**
200
+ * Unregister a material from CSM shadow rendering.
201
+ * @experimental This API may change or be removed in future versions.
202
+ */
203
+ removeShadowMaterial(material: Material): void {
204
+ this.emit("shadowRemoved", material);
205
+ }
206
+
207
+ // --- Picking registration ---
208
+
209
+ /**
210
+ * Generate a new unique global batch ID for picking.
211
+ * The returned ID is in the 24-bit RGB color range (1..0xffffff).
212
+ */
213
+ genGlobalBatchId(): number | undefined {
214
+ return this._core?.genGlobalBatchId();
215
+ }
216
+
217
+ /**
218
+ * Register a pickable mesh so the picking system can discover it.
219
+ * @param key - Unique key (typically the descriptor ID).
220
+ * @param mesh - Any {@link PickableMesh} implementation. Implementers
221
+ * must also be an `Object3D` so the pick pass can re-parent the
222
+ * renderable into its dedicated scene.
223
+ */
224
+ registerPickableMesh(key: string, mesh: PickableMesh & Object3D): void {
225
+ this._meshes?.set(key, mesh);
226
+ }
227
+
228
+ /**
229
+ * Unregister a pickable mesh from the picking system.
230
+ * @param key - The key used during registration.
231
+ */
232
+ unregisterPickableMesh(key: string): void {
233
+ this._meshes?.delete(key);
234
+ }
235
+ }
@@ -0,0 +1,16 @@
1
+ import { getExcludedKeys } from "../utils/object";
2
+
3
+ import type { EffectConfig } from "./EffectDesc";
4
+ import type { LightConfig } from "./LightDesc";
5
+ import type { MeshConfig } from "./MeshDesc";
6
+
7
+ export class UnknownTypeError extends Error {
8
+ constructor(
9
+ type: Exclude<(EffectConfig | MeshConfig | LightConfig)["type"], undefined>,
10
+ config: EffectConfig | MeshConfig | LightConfig,
11
+ ) {
12
+ super(
13
+ `Unknown ${type} type specified in configuration: ${getExcludedKeys(config, ["type"]).join(", ")}`,
14
+ );
15
+ }
16
+ }
@@ -0,0 +1,50 @@
1
+ export { DescRegistry } from "./DescRegistry";
2
+ export { Registries } from "./Registries";
3
+ export * from "./errors";
4
+ export {
5
+ BaseDesc,
6
+ type BaseDescConfig,
7
+ type BaseDescConfigUpdate,
8
+ } from "./BaseDesc";
9
+ export {
10
+ MeshDesc,
11
+ type MeshUpdate,
12
+ type MeshConfig,
13
+ type PassKey,
14
+ } from "./MeshDesc";
15
+ export {
16
+ MeshDescWithSelectiveEffect,
17
+ type MeshUpdateWithSelectiveEffect,
18
+ type MeshConfigWithSelectiveEffect,
19
+ } from "./MeshDescWithSelectiveEffect";
20
+ export {
21
+ InstancedMeshDesc,
22
+ type InstancedMeshConfig,
23
+ type InstancedMeshUpdate,
24
+ type InstancedChildConfig,
25
+ } from "./InstancedMeshDesc";
26
+ export {
27
+ MeshDescRegistry,
28
+ type MeshDescConstructor,
29
+ type AnyMeshConfig,
30
+ } from "./MeshDescRegistry";
31
+ export { type AnyMeshDesc } from "./BaseHandle";
32
+ export { LightDesc, type LightUpdate, type LightConfig } from "./LightDesc";
33
+ export {
34
+ LightDescRegistry,
35
+ type LightDescConstructor,
36
+ } from "./LightDescRegistry";
37
+ export { EffectDesc, type EffectUpdate, type EffectConfig } from "./EffectDesc";
38
+ export {
39
+ EffectDescRegistry,
40
+ type EffectDescConstructor,
41
+ } from "./EffectDescRegistry";
42
+ export {
43
+ BaseHandle,
44
+ MeshHandle,
45
+ LightHandle,
46
+ EffectHandle,
47
+ } from "./BaseHandle";
48
+ export * from "./ViewContext";
49
+ export { SelectiveEffectRegistry } from "./SelectiveEffectRegistry";
50
+ export { setupSelectiveEffectUniforms } from "../material/selectiveEffectMaterialSetup";