@zephyr3d/scene 0.6.1 → 0.7.1

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 (754) hide show
  1. package/dist/animation/animation.js +142 -31
  2. package/dist/animation/animation.js.map +1 -1
  3. package/dist/animation/animationset.js +186 -73
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js +66 -10
  6. package/dist/animation/animationtrack.js.map +1 -1
  7. package/dist/animation/eulerrotationtrack.js +40 -20
  8. package/dist/animation/eulerrotationtrack.js.map +1 -1
  9. package/dist/animation/morphtarget.js +20 -38
  10. package/dist/animation/morphtarget.js.map +1 -1
  11. package/dist/animation/morphtrack.js +59 -22
  12. package/dist/animation/morphtrack.js.map +1 -1
  13. package/dist/animation/proptrack.js +186 -0
  14. package/dist/animation/proptrack.js.map +1 -0
  15. package/dist/animation/rotationtrack.js +28 -11
  16. package/dist/animation/rotationtrack.js.map +1 -1
  17. package/dist/animation/scaletrack.js +28 -11
  18. package/dist/animation/scaletrack.js.map +1 -1
  19. package/dist/animation/skeleton.js +238 -82
  20. package/dist/animation/skeleton.js.map +1 -1
  21. package/dist/animation/translationtrack.js +29 -11
  22. package/dist/animation/translationtrack.js.map +1 -1
  23. package/dist/app/api.js +52 -0
  24. package/dist/app/api.js.map +1 -0
  25. package/dist/app/app.js +165 -0
  26. package/dist/app/app.js.map +1 -0
  27. package/dist/app/engine.js +300 -0
  28. package/dist/app/engine.js.map +1 -0
  29. package/dist/app/inputmgr.js +351 -0
  30. package/dist/app/inputmgr.js.map +1 -0
  31. package/dist/app/runtimescript.js +62 -0
  32. package/dist/app/runtimescript.js.map +1 -0
  33. package/dist/app/screen.js +318 -0
  34. package/dist/app/screen.js.map +1 -0
  35. package/dist/app/scriptingsystem.js +224 -0
  36. package/dist/app/scriptingsystem.js.map +1 -0
  37. package/dist/app/scriptregistry.js +421 -0
  38. package/dist/app/scriptregistry.js.map +1 -0
  39. package/dist/asset/assetmanager.js +823 -321
  40. package/dist/asset/assetmanager.js.map +1 -1
  41. package/dist/asset/builtin.js +12 -48
  42. package/dist/asset/builtin.js.map +1 -1
  43. package/dist/asset/loaders/dds/dds.js +23 -95
  44. package/dist/asset/loaders/dds/dds.js.map +1 -1
  45. package/dist/asset/loaders/dds/dds_loader.js +9 -19
  46. package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
  47. package/dist/asset/loaders/gltf/gltf_loader.js +50 -48
  48. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  49. package/dist/asset/loaders/gltf/helpers.js +33 -16
  50. package/dist/asset/loaders/gltf/helpers.js.map +1 -1
  51. package/dist/asset/loaders/hdr/hdr.js +39 -27
  52. package/dist/asset/loaders/hdr/hdr.js.map +1 -1
  53. package/dist/asset/loaders/image/tga_Loader.js +15 -17
  54. package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
  55. package/dist/asset/loaders/image/webimage_loader.js +51 -50
  56. package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
  57. package/dist/asset/loaders/loader.js +2 -2
  58. package/dist/asset/loaders/loader.js.map +1 -1
  59. package/dist/asset/model.js +160 -6
  60. package/dist/asset/model.js.map +1 -1
  61. package/dist/blitter/bilateralblur.js +0 -1
  62. package/dist/blitter/bilateralblur.js.map +1 -1
  63. package/dist/blitter/blitter.js +28 -31
  64. package/dist/blitter/blitter.js.map +1 -1
  65. package/dist/blitter/box.js +0 -1
  66. package/dist/blitter/box.js.map +1 -1
  67. package/dist/blitter/copy.js.map +1 -1
  68. package/dist/blitter/gaussianblur.js +23 -23
  69. package/dist/blitter/gaussianblur.js.map +1 -1
  70. package/dist/camera/base.js +139 -34
  71. package/dist/camera/base.js.map +1 -1
  72. package/dist/camera/camera.js +760 -172
  73. package/dist/camera/camera.js.map +1 -1
  74. package/dist/camera/fps.js +21 -27
  75. package/dist/camera/fps.js.map +1 -1
  76. package/dist/camera/orbit.js +134 -59
  77. package/dist/camera/orbit.js.map +1 -1
  78. package/dist/camera/orthocamera.js +52 -21
  79. package/dist/camera/orthocamera.js.map +1 -1
  80. package/dist/camera/perspectivecamera.js +60 -34
  81. package/dist/camera/perspectivecamera.js.map +1 -1
  82. package/dist/index.d.ts +17031 -6901
  83. package/dist/index.js +60 -21
  84. package/dist/index.js.map +1 -1
  85. package/dist/material/blinn.js +5 -0
  86. package/dist/material/blinn.js.map +1 -1
  87. package/dist/material/grassmaterial.js +6 -1
  88. package/dist/material/grassmaterial.js.map +1 -1
  89. package/dist/material/lambert.js +6 -1
  90. package/dist/material/lambert.js.map +1 -1
  91. package/dist/material/material.js +356 -77
  92. package/dist/material/material.js.map +1 -1
  93. package/dist/material/meshmaterial.js +505 -162
  94. package/dist/material/meshmaterial.js.map +1 -1
  95. package/dist/material/mixins/albedocolor.js +5 -1
  96. package/dist/material/mixins/albedocolor.js.map +1 -1
  97. package/dist/material/mixins/foliage.js +3 -3
  98. package/dist/material/mixins/foliage.js.map +1 -1
  99. package/dist/material/mixins/lightmodel/blinnphong.js +18 -5
  100. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  101. package/dist/material/mixins/lightmodel/lambert.js +6 -6
  102. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  103. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +242 -0
  104. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -0
  105. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +52 -15
  106. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  107. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +27 -9
  108. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  109. package/dist/material/mixins/lit.js +19 -7
  110. package/dist/material/mixins/lit.js.map +1 -1
  111. package/dist/material/mixins/pbr/brdf.js +134 -0
  112. package/dist/material/mixins/pbr/brdf.js.map +1 -0
  113. package/dist/material/mixins/pbr/common.js +68 -85
  114. package/dist/material/mixins/pbr/common.js.map +1 -1
  115. package/dist/material/mixins/texture.js +101 -83
  116. package/dist/material/mixins/texture.js.map +1 -1
  117. package/dist/material/mixins/vertexcolor.js +6 -2
  118. package/dist/material/mixins/vertexcolor.js.map +1 -1
  119. package/dist/material/particle.js +272 -0
  120. package/dist/material/particle.js.map +1 -0
  121. package/dist/material/pbrblueprint.js +344 -0
  122. package/dist/material/pbrblueprint.js.map +1 -0
  123. package/dist/material/pbrmr.js +10 -0
  124. package/dist/material/pbrmr.js.map +1 -1
  125. package/dist/material/pbrsg.js +10 -0
  126. package/dist/material/pbrsg.js.map +1 -1
  127. package/dist/material/shader/helper.js +533 -316
  128. package/dist/material/shader/helper.js.map +1 -1
  129. package/dist/material/sprite.js +301 -0
  130. package/dist/material/sprite.js.map +1 -0
  131. package/dist/material/sprite3d.js +301 -0
  132. package/dist/material/sprite3d.js.map +1 -0
  133. package/dist/material/sprite3d_std.js +116 -0
  134. package/dist/material/sprite3d_std.js.map +1 -0
  135. package/dist/material/sprite3dblueprint.js +235 -0
  136. package/dist/material/sprite3dblueprint.js.map +1 -0
  137. package/dist/material/sprite_std.js +116 -0
  138. package/dist/material/sprite_std.js.map +1 -0
  139. package/dist/material/spriteblueprint.js +235 -0
  140. package/dist/material/spriteblueprint.js.map +1 -0
  141. package/dist/material/terrain-cm.js +606 -0
  142. package/dist/material/terrain-cm.js.map +1 -0
  143. package/dist/material/terrainmaterial.js +59 -54
  144. package/dist/material/terrainmaterial.js.map +1 -1
  145. package/dist/material/unlit.js +5 -0
  146. package/dist/material/unlit.js.map +1 -1
  147. package/dist/material/water.js +415 -0
  148. package/dist/material/water.js.map +1 -0
  149. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  150. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  151. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  152. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  153. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  154. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  155. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  156. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  157. package/dist/node_modules/es-module-lexer/dist/lexer.js +5 -0
  158. package/dist/node_modules/es-module-lexer/dist/lexer.js.map +1 -0
  159. package/dist/posteffect/bloom.js +39 -54
  160. package/dist/posteffect/bloom.js.map +1 -1
  161. package/dist/posteffect/compositor.js +95 -128
  162. package/dist/posteffect/compositor.js.map +1 -1
  163. package/dist/posteffect/fxaa.js +10 -18
  164. package/dist/posteffect/fxaa.js.map +1 -1
  165. package/dist/posteffect/grayscale.js +9 -17
  166. package/dist/posteffect/grayscale.js.map +1 -1
  167. package/dist/posteffect/motionblur.js +105 -0
  168. package/dist/posteffect/motionblur.js.map +1 -0
  169. package/dist/posteffect/posteffect.js +66 -35
  170. package/dist/posteffect/posteffect.js.map +1 -1
  171. package/dist/posteffect/sao.js +13 -21
  172. package/dist/posteffect/sao.js.map +1 -1
  173. package/dist/posteffect/ssr.js +65 -103
  174. package/dist/posteffect/ssr.js.map +1 -1
  175. package/dist/posteffect/taa.js +175 -0
  176. package/dist/posteffect/taa.js.map +1 -0
  177. package/dist/posteffect/tonemap.js +12 -20
  178. package/dist/posteffect/tonemap.js.map +1 -1
  179. package/dist/render/abuffer_oit.js +38 -25
  180. package/dist/render/abuffer_oit.js.map +1 -1
  181. package/dist/render/clipmap.js +424 -106
  182. package/dist/render/clipmap.js.map +1 -1
  183. package/dist/render/cluster_light.js +11 -9
  184. package/dist/render/cluster_light.js.map +1 -1
  185. package/dist/render/cull_visitor.js +51 -13
  186. package/dist/render/cull_visitor.js.map +1 -1
  187. package/dist/render/depthpass.js +15 -7
  188. package/dist/render/depthpass.js.map +1 -1
  189. package/dist/render/drawable.js +15 -0
  190. package/dist/render/drawable.js.map +1 -0
  191. package/dist/render/drawable_mixin.js +121 -44
  192. package/dist/render/drawable_mixin.js.map +1 -1
  193. package/dist/render/envlight.js +86 -141
  194. package/dist/render/envlight.js.map +1 -1
  195. package/dist/render/fbm_wavegenerator.js +236 -0
  196. package/dist/render/fbm_wavegenerator.js.map +1 -0
  197. package/dist/render/fft_wavegenerator.js +131 -114
  198. package/dist/render/fft_wavegenerator.js.map +1 -1
  199. package/dist/render/fullscreenquad.js +2 -2
  200. package/dist/render/fullscreenquad.js.map +1 -1
  201. package/dist/render/gerstner_wavegenerator.js +100 -48
  202. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  203. package/dist/render/globalbindgroup_allocator.js +7 -3
  204. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  205. package/dist/render/hzb.js +7 -5
  206. package/dist/render/hzb.js.map +1 -1
  207. package/dist/render/lightpass.js +28 -27
  208. package/dist/render/lightpass.js.map +1 -1
  209. package/dist/render/objectcolorpass.js +6 -9
  210. package/dist/render/objectcolorpass.js.map +1 -1
  211. package/dist/render/primitive.js +213 -105
  212. package/dist/render/primitive.js.map +1 -1
  213. package/dist/render/render_queue.js +49 -24
  214. package/dist/render/render_queue.js.map +1 -1
  215. package/dist/render/renderbundle_wrapper.js +65 -15
  216. package/dist/render/renderbundle_wrapper.js.map +1 -1
  217. package/dist/render/renderer.js +324 -189
  218. package/dist/render/renderer.js.map +1 -1
  219. package/dist/render/renderpass.js +43 -84
  220. package/dist/render/renderpass.js.map +1 -1
  221. package/dist/render/rendertarget.js +5 -0
  222. package/dist/render/rendertarget.js.map +1 -0
  223. package/dist/render/screenrendertarget.js +56 -0
  224. package/dist/render/screenrendertarget.js.map +1 -0
  225. package/dist/render/shadowmap_pass.js +5 -6
  226. package/dist/render/shadowmap_pass.js.map +1 -1
  227. package/dist/render/sky.js +867 -542
  228. package/dist/render/sky.js.map +1 -1
  229. package/dist/render/weightedblended_oit.js +13 -15
  230. package/dist/render/weightedblended_oit.js.map +1 -1
  231. package/dist/scene/basesprite.js +296 -0
  232. package/dist/scene/basesprite.js.map +1 -0
  233. package/dist/scene/batchgroup.js +22 -7
  234. package/dist/scene/batchgroup.js.map +1 -1
  235. package/dist/scene/environment.js +78 -49
  236. package/dist/scene/environment.js.map +1 -1
  237. package/dist/scene/graph_node.js +2 -3
  238. package/dist/scene/graph_node.js.map +1 -1
  239. package/dist/scene/light.js +49 -92
  240. package/dist/scene/light.js.map +1 -1
  241. package/dist/scene/mesh.js +298 -89
  242. package/dist/scene/mesh.js.map +1 -1
  243. package/dist/scene/octree.js +371 -162
  244. package/dist/scene/octree.js.map +1 -1
  245. package/dist/scene/particlesys.js +687 -0
  246. package/dist/scene/particlesys.js.map +1 -0
  247. package/dist/scene/raycast_visitor.js +26 -13
  248. package/dist/scene/raycast_visitor.js.map +1 -1
  249. package/dist/scene/scene.js +312 -85
  250. package/dist/scene/scene.js.map +1 -1
  251. package/dist/scene/scene_node.js +663 -105
  252. package/dist/scene/scene_node.js.map +1 -1
  253. package/dist/scene/sprite.js +18 -0
  254. package/dist/scene/sprite.js.map +1 -0
  255. package/dist/scene/sprite3d.js +18 -0
  256. package/dist/scene/sprite3d.js.map +1 -0
  257. package/dist/scene/terrain/grass.js +48 -49
  258. package/dist/scene/terrain/grass.js.map +1 -1
  259. package/dist/scene/terrain/heightfield.js +46 -44
  260. package/dist/scene/terrain/heightfield.js.map +1 -1
  261. package/dist/scene/terrain/patch.js +20 -29
  262. package/dist/scene/terrain/patch.js.map +1 -1
  263. package/dist/scene/terrain/quadtree.js +58 -27
  264. package/dist/scene/terrain/quadtree.js.map +1 -1
  265. package/dist/scene/terrain/terrain.js +31 -45
  266. package/dist/scene/terrain/terrain.js.map +1 -1
  267. package/dist/scene/terrain-cm/grass.js +604 -0
  268. package/dist/scene/terrain-cm/grass.js.map +1 -0
  269. package/dist/scene/terrain-cm/grassmaterial.js +162 -0
  270. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -0
  271. package/dist/scene/terrain-cm/terrain-cm.js +550 -0
  272. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -0
  273. package/dist/scene/water.js +383 -0
  274. package/dist/scene/water.js.map +1 -0
  275. package/dist/shaders/atmosphere.js +945 -0
  276. package/dist/shaders/atmosphere.js.map +1 -0
  277. package/dist/shaders/fog.js +116 -0
  278. package/dist/shaders/fog.js.map +1 -0
  279. package/dist/shaders/misc.js.map +1 -1
  280. package/dist/shaders/noise.js +217 -8
  281. package/dist/shaders/noise.js.map +1 -1
  282. package/dist/shaders/pbr.js.map +1 -1
  283. package/dist/shaders/shadow.js +8 -8
  284. package/dist/shaders/shadow.js.map +1 -1
  285. package/dist/shaders/ssr.js +87 -39
  286. package/dist/shaders/ssr.js.map +1 -1
  287. package/dist/shaders/temporal.js +216 -0
  288. package/dist/shaders/temporal.js.map +1 -0
  289. package/dist/shaders/water.js +42 -20
  290. package/dist/shaders/water.js.map +1 -1
  291. package/dist/shadow/esm.js +32 -14
  292. package/dist/shadow/esm.js.map +1 -1
  293. package/dist/shadow/pcf_opt.js +12 -13
  294. package/dist/shadow/pcf_opt.js.map +1 -1
  295. package/dist/shadow/pcf_pd.js +12 -13
  296. package/dist/shadow/pcf_pd.js.map +1 -1
  297. package/dist/shadow/shader.js +40 -0
  298. package/dist/shadow/shader.js.map +1 -0
  299. package/dist/shadow/shadow_impl.js.map +1 -1
  300. package/dist/shadow/shadowmapper.js +73 -44
  301. package/dist/shadow/shadowmapper.js.map +1 -1
  302. package/dist/shadow/ssm.js +15 -16
  303. package/dist/shadow/ssm.js.map +1 -1
  304. package/dist/shadow/vsm.js +33 -16
  305. package/dist/shadow/vsm.js.map +1 -1
  306. package/dist/shapes/box.js +187 -83
  307. package/dist/shapes/box.js.map +1 -1
  308. package/dist/shapes/cylinder.js +101 -43
  309. package/dist/shapes/cylinder.js.map +1 -1
  310. package/dist/shapes/plane.js +70 -29
  311. package/dist/shapes/plane.js.map +1 -1
  312. package/dist/shapes/shape.js +121 -17
  313. package/dist/shapes/shape.js.map +1 -1
  314. package/dist/shapes/sphere.js +78 -44
  315. package/dist/shapes/sphere.js.map +1 -1
  316. package/dist/shapes/tetrahedron.js +255 -0
  317. package/dist/shapes/tetrahedron.js.map +1 -0
  318. package/dist/shapes/torus.js +76 -55
  319. package/dist/shapes/torus.js.map +1 -1
  320. package/dist/src/animation/animation.js +127 -0
  321. package/dist/src/animation/animation.js.map +1 -0
  322. package/dist/src/animation/animationset.js +255 -0
  323. package/dist/src/animation/animationset.js.map +1 -0
  324. package/dist/src/animation/animationtrack.js +34 -0
  325. package/dist/src/animation/animationtrack.js.map +1 -0
  326. package/dist/src/animation/eulerrotationtrack.js +52 -0
  327. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  328. package/dist/src/animation/morphtarget.js +93 -0
  329. package/dist/src/animation/morphtarget.js.map +1 -0
  330. package/dist/src/animation/morphtrack.js +70 -0
  331. package/dist/src/animation/morphtrack.js.map +1 -0
  332. package/dist/src/animation/proptrack.js +161 -0
  333. package/dist/src/animation/proptrack.js.map +1 -0
  334. package/dist/src/animation/rotationtrack.js +51 -0
  335. package/dist/src/animation/rotationtrack.js.map +1 -0
  336. package/dist/src/animation/scaletrack.js +50 -0
  337. package/dist/src/animation/scaletrack.js.map +1 -0
  338. package/dist/src/animation/skeleton.js +204 -0
  339. package/dist/src/animation/skeleton.js.map +1 -0
  340. package/dist/src/animation/translationtrack.js +50 -0
  341. package/dist/src/animation/translationtrack.js.map +1 -0
  342. package/dist/{app.js → src/app/app.js} +18 -40
  343. package/dist/src/app/app.js.map +1 -0
  344. package/dist/{input → src/app}/inputmgr.js +41 -16
  345. package/dist/src/app/inputmgr.js.map +1 -0
  346. package/dist/src/asset/assetmanager.js +404 -0
  347. package/dist/src/asset/assetmanager.js.map +1 -0
  348. package/dist/src/asset/builtin.js +337 -0
  349. package/dist/src/asset/builtin.js.map +1 -0
  350. package/dist/src/asset/loaders/dds/dds.js +470 -0
  351. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  352. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  353. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  354. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  355. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  356. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  357. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  358. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  359. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  360. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  361. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  362. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  363. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  364. package/dist/src/asset/loaders/loader.js +45 -0
  365. package/dist/src/asset/loaders/loader.js.map +1 -0
  366. package/dist/src/asset/model.js +414 -0
  367. package/dist/src/asset/model.js.map +1 -0
  368. package/dist/{blitter/depthlimitedgaussion.js → src/blitter/bilateralblur.js} +1 -2
  369. package/dist/src/blitter/bilateralblur.js.map +1 -0
  370. package/dist/src/blitter/blitter.js +390 -0
  371. package/dist/src/blitter/blitter.js.map +1 -0
  372. package/dist/src/blitter/box.js +118 -0
  373. package/dist/src/blitter/box.js.map +1 -0
  374. package/dist/src/blitter/copy.js +22 -0
  375. package/dist/src/blitter/copy.js.map +1 -0
  376. package/dist/src/blitter/gaussianblur.js +228 -0
  377. package/dist/src/blitter/gaussianblur.js.map +1 -0
  378. package/dist/src/camera/base.js +92 -0
  379. package/dist/src/camera/base.js.map +1 -0
  380. package/dist/src/camera/camera.js +1005 -0
  381. package/dist/src/camera/camera.js.map +1 -0
  382. package/dist/src/camera/fps.js +238 -0
  383. package/dist/src/camera/fps.js.map +1 -0
  384. package/dist/src/camera/orbit.js +245 -0
  385. package/dist/src/camera/orbit.js.map +1 -0
  386. package/dist/src/camera/orthocamera.js +167 -0
  387. package/dist/src/camera/orthocamera.js.map +1 -0
  388. package/dist/src/camera/perspectivecamera.js +141 -0
  389. package/dist/src/camera/perspectivecamera.js.map +1 -0
  390. package/dist/src/index.js +120 -0
  391. package/dist/src/index.js.map +1 -0
  392. package/dist/src/material/blinn.js +81 -0
  393. package/dist/src/material/blinn.js.map +1 -0
  394. package/dist/src/material/grassmaterial.js +113 -0
  395. package/dist/src/material/grassmaterial.js.map +1 -0
  396. package/dist/src/material/lambert.js +92 -0
  397. package/dist/src/material/lambert.js.map +1 -0
  398. package/dist/src/material/material.js +301 -0
  399. package/dist/src/material/material.js.map +1 -0
  400. package/dist/src/material/meshmaterial.js +704 -0
  401. package/dist/src/material/meshmaterial.js.map +1 -0
  402. package/dist/src/material/mixins/albedocolor.js +76 -0
  403. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  404. package/dist/src/material/mixins/foliage.js +47 -0
  405. package/dist/src/material/mixins/foliage.js.map +1 -0
  406. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  407. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  408. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  409. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  410. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  411. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  412. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  413. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  414. package/dist/src/material/mixins/lit.js +476 -0
  415. package/dist/src/material/mixins/lit.js.map +1 -0
  416. package/dist/src/material/mixins/pbr/common.js +918 -0
  417. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  418. package/dist/src/material/mixins/texture.js +172 -0
  419. package/dist/src/material/mixins/texture.js.map +1 -0
  420. package/dist/src/material/mixins/vertexcolor.js +56 -0
  421. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  422. package/dist/src/material/particle.js +178 -0
  423. package/dist/src/material/particle.js.map +1 -0
  424. package/dist/src/material/pbrmr.js +97 -0
  425. package/dist/src/material/pbrmr.js.map +1 -0
  426. package/dist/src/material/pbrsg.js +97 -0
  427. package/dist/src/material/pbrsg.js.map +1 -0
  428. package/dist/src/material/shader/helper.js +1209 -0
  429. package/dist/src/material/shader/helper.js.map +1 -0
  430. package/dist/src/material/terrain-cm.js +606 -0
  431. package/dist/src/material/terrain-cm.js.map +1 -0
  432. package/dist/src/material/terrainmaterial.js +375 -0
  433. package/dist/src/material/terrainmaterial.js.map +1 -0
  434. package/dist/src/material/unlit.js +41 -0
  435. package/dist/src/material/unlit.js.map +1 -0
  436. package/dist/src/material/water.js +417 -0
  437. package/dist/src/material/water.js.map +1 -0
  438. package/dist/src/posteffect/bloom.js +361 -0
  439. package/dist/src/posteffect/bloom.js.map +1 -0
  440. package/dist/src/posteffect/compositor.js +226 -0
  441. package/dist/src/posteffect/compositor.js.map +1 -0
  442. package/dist/src/posteffect/fxaa.js +273 -0
  443. package/dist/src/posteffect/fxaa.js.map +1 -0
  444. package/dist/src/posteffect/grayscale.js +69 -0
  445. package/dist/src/posteffect/grayscale.js.map +1 -0
  446. package/dist/src/posteffect/motionblur.js +96 -0
  447. package/dist/src/posteffect/motionblur.js.map +1 -0
  448. package/dist/src/posteffect/posteffect.js +126 -0
  449. package/dist/src/posteffect/posteffect.js.map +1 -0
  450. package/dist/src/posteffect/sao.js +324 -0
  451. package/dist/src/posteffect/sao.js.map +1 -0
  452. package/dist/src/posteffect/ssr.js +489 -0
  453. package/dist/src/posteffect/ssr.js.map +1 -0
  454. package/dist/src/posteffect/taa.js +172 -0
  455. package/dist/src/posteffect/taa.js.map +1 -0
  456. package/dist/src/posteffect/tonemap.js +94 -0
  457. package/dist/src/posteffect/tonemap.js.map +1 -0
  458. package/dist/src/render/abuffer_oit.js +361 -0
  459. package/dist/src/render/abuffer_oit.js.map +1 -0
  460. package/dist/src/render/clipmap.js +851 -0
  461. package/dist/src/render/clipmap.js.map +1 -0
  462. package/dist/src/render/cluster_light.js +333 -0
  463. package/dist/src/render/cluster_light.js.map +1 -0
  464. package/dist/src/render/cull_visitor.js +187 -0
  465. package/dist/src/render/cull_visitor.js.map +1 -0
  466. package/dist/src/render/depthpass.js +68 -0
  467. package/dist/src/render/depthpass.js.map +1 -0
  468. package/dist/src/render/drawable_mixin.js +227 -0
  469. package/dist/src/render/drawable_mixin.js.map +1 -0
  470. package/dist/src/render/envlight.js +463 -0
  471. package/dist/src/render/envlight.js.map +1 -0
  472. package/dist/src/render/fbm_wavegenerator.js +251 -0
  473. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  474. package/dist/src/render/fft_wavegenerator.js +1006 -0
  475. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  476. package/dist/src/render/fullscreenquad.js +38 -0
  477. package/dist/src/render/fullscreenquad.js.map +1 -0
  478. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  479. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  480. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  481. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  482. package/dist/src/render/hzb.js +273 -0
  483. package/dist/src/render/hzb.js.map +1 -0
  484. package/dist/src/render/lightpass.js +172 -0
  485. package/dist/src/render/lightpass.js.map +1 -0
  486. package/dist/src/render/objectcolorpass.js +51 -0
  487. package/dist/src/render/objectcolorpass.js.map +1 -0
  488. package/dist/src/render/primitive.js +364 -0
  489. package/dist/src/render/primitive.js.map +1 -0
  490. package/dist/src/render/render_queue.js +467 -0
  491. package/dist/src/render/render_queue.js.map +1 -0
  492. package/dist/src/render/renderbundle_wrapper.js +152 -0
  493. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  494. package/dist/src/render/renderer.js +455 -0
  495. package/dist/src/render/renderer.js.map +1 -0
  496. package/dist/src/render/renderpass.js +200 -0
  497. package/dist/src/render/renderpass.js.map +1 -0
  498. package/dist/src/render/shadowmap_pass.js +56 -0
  499. package/dist/src/render/shadowmap_pass.js.map +1 -0
  500. package/dist/src/render/sky.js +1103 -0
  501. package/dist/src/render/sky.js.map +1 -0
  502. package/dist/src/render/weightedblended_oit.js +168 -0
  503. package/dist/src/render/weightedblended_oit.js.map +1 -0
  504. package/dist/src/scene/batchgroup.js +162 -0
  505. package/dist/src/scene/batchgroup.js.map +1 -0
  506. package/dist/src/scene/environment.js +209 -0
  507. package/dist/src/scene/environment.js.map +1 -0
  508. package/dist/src/scene/graph_node.js +72 -0
  509. package/dist/src/scene/graph_node.js.map +1 -0
  510. package/dist/src/scene/light.js +416 -0
  511. package/dist/src/scene/light.js.map +1 -0
  512. package/dist/src/scene/mesh.js +341 -0
  513. package/dist/src/scene/mesh.js.map +1 -0
  514. package/dist/src/scene/octree.js +649 -0
  515. package/dist/src/scene/octree.js.map +1 -0
  516. package/dist/src/scene/particlesys.js +738 -0
  517. package/dist/src/scene/particlesys.js.map +1 -0
  518. package/dist/src/scene/raycast_visitor.js +103 -0
  519. package/dist/src/scene/raycast_visitor.js.map +1 -0
  520. package/dist/src/scene/scene.js +284 -0
  521. package/dist/src/scene/scene.js.map +1 -0
  522. package/dist/src/scene/scene_node.js +732 -0
  523. package/dist/src/scene/scene_node.js.map +1 -0
  524. package/dist/src/scene/terrain/grass.js +278 -0
  525. package/dist/src/scene/terrain/grass.js.map +1 -0
  526. package/dist/src/scene/terrain/heightfield.js +475 -0
  527. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  528. package/dist/src/scene/terrain/patch.js +530 -0
  529. package/dist/src/scene/terrain/patch.js.map +1 -0
  530. package/dist/src/scene/terrain/quadtree.js +461 -0
  531. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  532. package/dist/src/scene/terrain/terrain.js +246 -0
  533. package/dist/src/scene/terrain/terrain.js.map +1 -0
  534. package/dist/src/scene/terrain-cm/grass.js +594 -0
  535. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  536. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  537. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  538. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  539. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  540. package/dist/src/scene/water.js +374 -0
  541. package/dist/src/scene/water.js.map +1 -0
  542. package/dist/src/shaders/atmosphere.js +957 -0
  543. package/dist/src/shaders/atmosphere.js.map +1 -0
  544. package/dist/src/shaders/fog.js +112 -0
  545. package/dist/src/shaders/fog.js.map +1 -0
  546. package/dist/src/shaders/misc.js +266 -0
  547. package/dist/src/shaders/misc.js.map +1 -0
  548. package/dist/src/shaders/noise.js +222 -0
  549. package/dist/src/shaders/noise.js.map +1 -0
  550. package/dist/src/shaders/pbr.js +51 -0
  551. package/dist/src/shaders/pbr.js.map +1 -0
  552. package/dist/src/shaders/shadow.js +636 -0
  553. package/dist/src/shaders/shadow.js.map +1 -0
  554. package/dist/src/shaders/ssr.js +490 -0
  555. package/dist/src/shaders/ssr.js.map +1 -0
  556. package/dist/src/shaders/temporal.js +215 -0
  557. package/dist/src/shaders/temporal.js.map +1 -0
  558. package/dist/src/shaders/water.js +756 -0
  559. package/dist/src/shaders/water.js.map +1 -0
  560. package/dist/src/shadow/esm.js +237 -0
  561. package/dist/src/shadow/esm.js.map +1 -0
  562. package/dist/src/shadow/pcf_opt.js +181 -0
  563. package/dist/src/shadow/pcf_opt.js.map +1 -0
  564. package/dist/src/shadow/pcf_pd.js +189 -0
  565. package/dist/src/shadow/pcf_pd.js.map +1 -0
  566. package/dist/src/shadow/shader.js +37 -0
  567. package/dist/src/shadow/shader.js.map +1 -0
  568. package/dist/src/shadow/shadow_impl.js +15 -0
  569. package/dist/src/shadow/shadow_impl.js.map +1 -0
  570. package/dist/src/shadow/shadowmapper.js +790 -0
  571. package/dist/src/shadow/shadowmapper.js.map +1 -0
  572. package/dist/src/shadow/ssm.js +159 -0
  573. package/dist/src/shadow/ssm.js.map +1 -0
  574. package/dist/src/shadow/vsm.js +297 -0
  575. package/dist/src/shadow/vsm.js.map +1 -0
  576. package/dist/src/shapes/box.js +386 -0
  577. package/dist/src/shapes/box.js.map +1 -0
  578. package/dist/src/shapes/cylinder.js +125 -0
  579. package/dist/src/shapes/cylinder.js.map +1 -0
  580. package/dist/src/shapes/plane.js +88 -0
  581. package/dist/src/shapes/plane.js.map +1 -0
  582. package/dist/src/shapes/shape.js +87 -0
  583. package/dist/src/shapes/shape.js.map +1 -0
  584. package/dist/src/shapes/sphere.js +114 -0
  585. package/dist/src/shapes/sphere.js.map +1 -0
  586. package/dist/src/shapes/tetrahedron.js +188 -0
  587. package/dist/src/shapes/tetrahedron.js.map +1 -0
  588. package/dist/src/shapes/torus.js +111 -0
  589. package/dist/src/shapes/torus.js.map +1 -0
  590. package/dist/src/utility/aabbtree.js +400 -0
  591. package/dist/src/utility/aabbtree.js.map +1 -0
  592. package/dist/src/utility/bounding_volume.js +29 -0
  593. package/dist/src/utility/bounding_volume.js.map +1 -0
  594. package/dist/src/utility/debug.js +28 -0
  595. package/dist/src/utility/debug.js.map +1 -0
  596. package/dist/src/utility/draco/decoder.js +116 -0
  597. package/dist/src/utility/draco/decoder.js.map +1 -0
  598. package/dist/src/utility/misc.js +105 -0
  599. package/dist/src/utility/misc.js.map +1 -0
  600. package/dist/src/utility/panorama.js +163 -0
  601. package/dist/src/utility/panorama.js.map +1 -0
  602. package/dist/src/utility/pmrem.js +354 -0
  603. package/dist/src/utility/pmrem.js.map +1 -0
  604. package/dist/src/utility/rendermipmap.js +115 -0
  605. package/dist/src/utility/rendermipmap.js.map +1 -0
  606. package/dist/src/utility/serialization/json.js +402 -0
  607. package/dist/src/utility/serialization/json.js.map +1 -0
  608. package/dist/src/utility/serialization/manager.js +623 -0
  609. package/dist/src/utility/serialization/manager.js.map +1 -0
  610. package/dist/src/utility/serialization/scene/animation.js +248 -0
  611. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  612. package/dist/src/utility/serialization/scene/batch.js +59 -0
  613. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  614. package/dist/src/utility/serialization/scene/camera.js +790 -0
  615. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  616. package/dist/src/utility/serialization/scene/common.js +222 -0
  617. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  618. package/dist/src/utility/serialization/scene/light.js +575 -0
  619. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  620. package/dist/src/utility/serialization/scene/material.js +1111 -0
  621. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  622. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  623. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  624. package/dist/src/utility/serialization/scene/misc.js +39 -0
  625. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  626. package/dist/src/utility/serialization/scene/node.js +451 -0
  627. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  628. package/dist/src/utility/serialization/scene/particle.js +425 -0
  629. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  630. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  631. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  632. package/dist/src/utility/serialization/scene/scene.js +704 -0
  633. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  634. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  635. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  636. package/dist/src/utility/serialization/scene/water.js +465 -0
  637. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  638. package/dist/src/utility/shprojector.js +297 -0
  639. package/dist/src/utility/shprojector.js.map +1 -0
  640. package/dist/{material/mixins → src/utility/textures}/ggxlut.js +1 -1
  641. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  642. package/dist/src/utility/textures/gradientnoise.js +62 -0
  643. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  644. package/dist/src/utility/textures/randomnoise.js +41 -0
  645. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  646. package/dist/src/values.js +162 -0
  647. package/dist/src/values.js.map +1 -0
  648. package/dist/utility/aabbtree.js +16 -6
  649. package/dist/utility/aabbtree.js.map +1 -1
  650. package/dist/utility/blueprint/common/constants.js +1325 -0
  651. package/dist/utility/blueprint/common/constants.js.map +1 -0
  652. package/dist/utility/blueprint/common/math.js +2507 -0
  653. package/dist/utility/blueprint/common/math.js.map +1 -0
  654. package/dist/utility/blueprint/common.js +7 -0
  655. package/dist/utility/blueprint/common.js.map +1 -0
  656. package/dist/utility/blueprint/material/common.js +7 -0
  657. package/dist/utility/blueprint/material/common.js.map +1 -0
  658. package/dist/utility/blueprint/material/func.js +525 -0
  659. package/dist/utility/blueprint/material/func.js.map +1 -0
  660. package/dist/utility/blueprint/material/inputs.js +1659 -0
  661. package/dist/utility/blueprint/material/inputs.js.map +1 -0
  662. package/dist/utility/blueprint/material/ir.js +1519 -0
  663. package/dist/utility/blueprint/material/ir.js.map +1 -0
  664. package/dist/utility/blueprint/material/pbr.js +450 -0
  665. package/dist/utility/blueprint/material/pbr.js.map +1 -0
  666. package/dist/utility/blueprint/material/texture.js +1116 -0
  667. package/dist/utility/blueprint/material/texture.js.map +1 -0
  668. package/dist/utility/blueprint/node.js +214 -0
  669. package/dist/utility/blueprint/node.js.map +1 -0
  670. package/dist/utility/bounding_volume.js +0 -1
  671. package/dist/utility/bounding_volume.js.map +1 -1
  672. package/dist/utility/debug.js +26 -0
  673. package/dist/utility/debug.js.map +1 -0
  674. package/dist/utility/draco/decoder.js +1 -1
  675. package/dist/utility/draco/decoder.js.map +1 -1
  676. package/dist/utility/misc.js +19 -7
  677. package/dist/utility/misc.js.map +1 -1
  678. package/dist/utility/panorama.js +8 -6
  679. package/dist/utility/panorama.js.map +1 -1
  680. package/dist/utility/pmrem.js +30 -18
  681. package/dist/utility/pmrem.js.map +1 -1
  682. package/dist/utility/rendermipmap.js +116 -0
  683. package/dist/utility/rendermipmap.js.map +1 -0
  684. package/dist/utility/serialization/blueprint/constants.js +255 -0
  685. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  686. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  687. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  688. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  689. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  690. package/dist/utility/serialization/json.js +406 -0
  691. package/dist/utility/serialization/json.js.map +1 -0
  692. package/dist/utility/serialization/manager.js +1243 -0
  693. package/dist/utility/serialization/manager.js.map +1 -0
  694. package/dist/utility/serialization/scene/animation.js +701 -0
  695. package/dist/utility/serialization/scene/animation.js.map +1 -0
  696. package/dist/utility/serialization/scene/batch.js +54 -0
  697. package/dist/utility/serialization/scene/batch.js.map +1 -0
  698. package/dist/utility/serialization/scene/camera.js +896 -0
  699. package/dist/utility/serialization/scene/camera.js.map +1 -0
  700. package/dist/utility/serialization/scene/common.js +298 -0
  701. package/dist/utility/serialization/scene/common.js.map +1 -0
  702. package/dist/utility/serialization/scene/light.js +591 -0
  703. package/dist/utility/serialization/scene/light.js.map +1 -0
  704. package/dist/utility/serialization/scene/material.js +1070 -0
  705. package/dist/utility/serialization/scene/material.js.map +1 -0
  706. package/dist/utility/serialization/scene/mesh.js +345 -0
  707. package/dist/utility/serialization/scene/mesh.js.map +1 -0
  708. package/dist/utility/serialization/scene/misc.js +40 -0
  709. package/dist/utility/serialization/scene/misc.js.map +1 -0
  710. package/dist/utility/serialization/scene/node.js +424 -0
  711. package/dist/utility/serialization/scene/node.js.map +1 -0
  712. package/dist/utility/serialization/scene/particle.js +427 -0
  713. package/dist/utility/serialization/scene/particle.js.map +1 -0
  714. package/dist/utility/serialization/scene/primitive.js +585 -0
  715. package/dist/utility/serialization/scene/primitive.js.map +1 -0
  716. package/dist/utility/serialization/scene/scene.js +764 -0
  717. package/dist/utility/serialization/scene/scene.js.map +1 -0
  718. package/dist/utility/serialization/scene/sprite.js +164 -0
  719. package/dist/utility/serialization/scene/sprite.js.map +1 -0
  720. package/dist/utility/serialization/scene/terrain.js +497 -0
  721. package/dist/utility/serialization/scene/terrain.js.map +1 -0
  722. package/dist/utility/serialization/scene/water.js +467 -0
  723. package/dist/utility/serialization/scene/water.js.map +1 -0
  724. package/dist/utility/serialization/types.js +6 -0
  725. package/dist/utility/serialization/types.js.map +1 -0
  726. package/dist/utility/shprojector.js +313 -0
  727. package/dist/utility/shprojector.js.map +1 -0
  728. package/dist/utility/textures/ggxlut.js +4 -5
  729. package/dist/utility/textures/ggxlut.js.map +1 -1
  730. package/dist/utility/textures/gradientnoise.js +2 -1
  731. package/dist/utility/textures/gradientnoise.js.map +1 -1
  732. package/dist/utility/textures/randomnoise.js +1 -0
  733. package/dist/utility/textures/randomnoise.js.map +1 -1
  734. package/dist/values.js +103 -16
  735. package/dist/values.js.map +1 -1
  736. package/package.json +80 -66
  737. package/dist/app.js.map +0 -1
  738. package/dist/blitter/depthlimitedgaussion.js.map +0 -1
  739. package/dist/input/inputmgr.js.map +0 -1
  740. package/dist/material/mixins/ggxlut.js.map +0 -1
  741. package/dist/posteffect/water.js +0 -508
  742. package/dist/posteffect/water.js.map +0 -1
  743. package/dist/render/oit.js +0 -16
  744. package/dist/render/oit.js.map +0 -1
  745. package/dist/render/scatteringlut.js +0 -634
  746. package/dist/render/scatteringlut.js.map +0 -1
  747. package/dist/render/watermesh.js +0 -193
  748. package/dist/render/watermesh.js.map +0 -1
  749. package/dist/render/wavegenerator.js +0 -8
  750. package/dist/render/wavegenerator.js.map +0 -1
  751. package/dist/scene/xform.js +0 -247
  752. package/dist/scene/xform.js.map +0 -1
  753. package/dist/utility/shprojection.js +0 -442
  754. package/dist/utility/shprojection.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sources":["../../../../../src/asset/loaders/gltf/helpers.ts"],"sourcesContent":["import type { Accessor, AccessorSparse } from './gltf';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\nimport type { GLTFContent } from './gltf_loader';\r\n\r\n/** @internal */\r\nexport const enum ComponentType {\r\n UNKNOWN = 0,\r\n BYTE = 5120, // GL.BYTE\r\n UBYTE = 5121, // GL.UNSIGNED_BYTE\r\n SHORT = 5122, // GL.SHORT\r\n USHORT = 5123, // GL.UNSIGNED_SHORT\r\n INT = 5124, // GL.INT\r\n UINT = 5125, // GL.UNSIGNED_INT\r\n FLOAT = 5126 // GL.FLOAT\r\n}\r\n\r\n/** @internal */\r\nexport type GLTFComponentType = 'SCALAR' | 'VEC2' | 'VEC3' | 'VEC4' | 'MAT2' | 'MAT3' | 'MAT4';\r\n\r\n/** @internal */\r\nexport class GLTFAccessor {\r\n bufferView: number;\r\n byteOffset: number;\r\n componentType: ComponentType;\r\n normalized: boolean;\r\n count: number;\r\n type: GLTFComponentType;\r\n max: number[];\r\n min: number[];\r\n sparse: AccessorSparse;\r\n name: string;\r\n private _typedView: TypedArray;\r\n private _filteredView: TypedArray;\r\n private _normalizedFilteredView: TypedArray;\r\n private _normalizedTypedView: TypedArray;\r\n constructor(accessorInfo: Accessor) {\r\n this.bufferView = accessorInfo.bufferView;\r\n this.byteOffset = accessorInfo.byteOffset ?? 0;\r\n this.componentType = accessorInfo.componentType;\r\n this.normalized = !!accessorInfo.normalized;\r\n this.count = accessorInfo.count;\r\n this.type = accessorInfo.type;\r\n this.max = accessorInfo.max;\r\n this.min = accessorInfo.min;\r\n this.sparse = accessorInfo.sparse;\r\n this.name = accessorInfo.name;\r\n this._typedView = null;\r\n this._filteredView = null;\r\n this._normalizedFilteredView = null;\r\n this._normalizedTypedView = null;\r\n }\r\n getTypedView(gltf: GLTFContent) {\r\n if (this._typedView) {\r\n return this._typedView;\r\n }\r\n\r\n if (this.bufferView !== undefined) {\r\n const bufferView = gltf.bufferViews[this.bufferView];\r\n const buffer = gltf._loadedBuffers[bufferView.buffer];\r\n const byteOffset = this.byteOffset + (bufferView.byteOffset ?? 0);\r\n\r\n const componentSize = this.getComponentSize(this.componentType);\r\n const componentCount = this.getComponentCount(this.type);\r\n\r\n let arrayLength = 0;\r\n if (bufferView.byteStride !== undefined && bufferView.byteStride !== 0) {\r\n if (componentSize !== 0) {\r\n arrayLength = (bufferView.byteStride / componentSize) * (this.count - 1) + componentCount;\r\n } else {\r\n console.warn(\"Invalid component type in accessor '\" + (this.name ? this.name : '') + \"'\");\r\n }\r\n } else {\r\n arrayLength = this.count * componentCount;\r\n }\r\n\r\n if (arrayLength * componentSize > buffer.byteLength - byteOffset) {\r\n arrayLength = (buffer.byteLength - byteOffset) / componentSize;\r\n console.warn(\"Count in accessor '\" + (this.name ? this.name : '') + \"' is too large.\");\r\n }\r\n\r\n switch (this.componentType) {\r\n case ComponentType.BYTE:\r\n this._typedView = new Int8Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.UBYTE:\r\n this._typedView = new Uint8Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.SHORT:\r\n this._typedView = new Int16Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.USHORT:\r\n this._typedView = new Uint16Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.INT:\r\n this._typedView = new Int32Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.UINT:\r\n this._typedView = new Uint32Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.FLOAT:\r\n this._typedView = new Float32Array(buffer, byteOffset, arrayLength);\r\n break;\r\n }\r\n } else if (this.sparse !== undefined) {\r\n this._typedView = this.createView();\r\n }\r\n\r\n if (!this._typedView) {\r\n console.warn('Failed to convert buffer view to typed view!: ' + this.bufferView);\r\n } else if (this.sparse !== undefined) {\r\n this.applySparse(gltf, this._typedView);\r\n }\r\n\r\n return this._typedView;\r\n }\r\n\r\n // getNormalizedTypedView provides an alternative view to the accessors data,\r\n // where quantized data is already normalized. This is useful if the data is not passed\r\n // to vertexAttribPointer but used immediately (like e.g. animations)\r\n getNormalizedTypedView(gltf: GLTFContent) {\r\n if (this._normalizedTypedView) {\r\n return this._normalizedTypedView;\r\n }\r\n\r\n const typedView = this.getTypedView(gltf);\r\n this._normalizedTypedView = this.normalized\r\n ? GLTFAccessor.dequantize(typedView, this.componentType)\r\n : typedView;\r\n return this._normalizedTypedView;\r\n }\r\n\r\n // getDeinterlacedView provides a view to the accessors data in form of\r\n // a TypedArray. In contrast to getTypedView, getDeinterlacedView deinterlaces\r\n // data, i.e. stripping padding and unrelated components from the array. It then\r\n // only contains the data of the accessor\r\n getDeinterlacedView(gltf: GLTFContent) {\r\n if (this._filteredView) {\r\n return this._filteredView;\r\n }\r\n\r\n const componentSize = this.getComponentSize(this.componentType);\r\n const componentCount = this.getComponentCount(this.type);\r\n const arrayLength = this.count * componentCount;\r\n\r\n let func = 'getFloat32';\r\n switch (this.componentType) {\r\n case ComponentType.BYTE:\r\n this._filteredView = new Int8Array(arrayLength);\r\n func = 'getInt8';\r\n break;\r\n case ComponentType.UBYTE:\r\n this._filteredView = new Uint8Array(arrayLength);\r\n func = 'getUint8';\r\n break;\r\n case ComponentType.SHORT:\r\n this._filteredView = new Int16Array(arrayLength);\r\n func = 'getInt16';\r\n break;\r\n case ComponentType.USHORT:\r\n this._filteredView = new Uint16Array(arrayLength);\r\n func = 'getUint16';\r\n break;\r\n case ComponentType.INT:\r\n this._filteredView = new Int32Array(arrayLength);\r\n func = 'getInt32';\r\n break;\r\n case ComponentType.UINT:\r\n this._filteredView = new Uint32Array(arrayLength);\r\n func = 'getUint32';\r\n break;\r\n case ComponentType.FLOAT:\r\n this._filteredView = new Float32Array(arrayLength);\r\n func = 'getFloat32';\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n if (this.bufferView !== undefined) {\r\n const bufferView = gltf.bufferViews[this.bufferView];\r\n const buffer = gltf._loadedBuffers[bufferView.buffer];\r\n const byteOffset = this.byteOffset + (bufferView.byteOffset ?? 0);\r\n const stride =\r\n bufferView.byteStride !== undefined && bufferView.byteStride !== 0\r\n ? bufferView.byteStride\r\n : componentCount * componentSize;\r\n const dataView = new DataView(buffer, byteOffset, this.count * stride);\r\n for (let i = 0; i < arrayLength; ++i) {\r\n const offset = Math.floor(i / componentCount) * stride + (i % componentCount) * componentSize;\r\n this._filteredView[i] = dataView[func](offset, true);\r\n }\r\n } else if (this.sparse !== undefined) {\r\n this._filteredView = this.createView();\r\n }\r\n\r\n if (this.sparse !== undefined) {\r\n this.applySparse(gltf, this._filteredView);\r\n }\r\n\r\n return this._filteredView;\r\n }\r\n\r\n createView() {\r\n const size = this.count * this.getComponentCount(this.type);\r\n if (this.componentType == ComponentType.BYTE) {\r\n return new Int8Array(size);\r\n }\r\n if (this.componentType == ComponentType.UBYTE) {\r\n return new Uint8Array(size);\r\n }\r\n if (this.componentType == ComponentType.SHORT) {\r\n return new Int16Array(size);\r\n }\r\n if (this.componentType == ComponentType.USHORT) {\r\n return new Uint16Array(size);\r\n }\r\n if (this.componentType == ComponentType.INT) {\r\n return new Int32Array(size);\r\n }\r\n if (this.componentType == ComponentType.UINT) {\r\n return new Uint32Array(size);\r\n }\r\n if (this.componentType == ComponentType.FLOAT) {\r\n return new Float32Array(size);\r\n }\r\n return undefined;\r\n }\r\n\r\n // getNormalizedDeinterlacedView provides an alternative view to the accessors data,\r\n // where quantized data is already normalized. This is useful if the data is not passed\r\n // to vertexAttribPointer but used immediately (like e.g. animations)\r\n getNormalizedDeinterlacedView(gltf: GLTFContent) {\r\n if (this._normalizedFilteredView) {\r\n return this._normalizedFilteredView;\r\n }\r\n\r\n const filteredView = this.getDeinterlacedView(gltf);\r\n this._normalizedFilteredView = this.normalized\r\n ? GLTFAccessor.dequantize(filteredView, this.componentType)\r\n : filteredView;\r\n return this._normalizedFilteredView;\r\n }\r\n\r\n applySparse(gltf: GLTFContent, view: TypedArray) {\r\n // Gather indices.\r\n\r\n const indicesBufferView = gltf.bufferViews[this.sparse.indices.bufferView];\r\n const indicesBuffer = gltf._loadedBuffers[indicesBufferView.buffer];\r\n const indicesByteOffset = this.sparse.indices.byteOffset + (indicesBufferView.byteOffset ?? 0);\r\n\r\n const indicesComponentSize = this.getComponentSize(this.sparse.indices.componentType);\r\n let indicesComponentCount = 1;\r\n\r\n if (indicesBufferView.byteStride !== undefined && indicesBufferView.byteStride !== 0) {\r\n indicesComponentCount = indicesBufferView.byteStride / indicesComponentSize;\r\n }\r\n\r\n const indicesArrayLength = this.sparse.count * indicesComponentCount;\r\n\r\n let indicesTypedView;\r\n switch (this.sparse.indices.componentType) {\r\n case ComponentType.UBYTE:\r\n indicesTypedView = new Uint8Array(indicesBuffer, indicesByteOffset, indicesArrayLength);\r\n break;\r\n case ComponentType.USHORT:\r\n indicesTypedView = new Uint16Array(indicesBuffer, indicesByteOffset, indicesArrayLength);\r\n break;\r\n case ComponentType.UINT:\r\n indicesTypedView = new Uint32Array(indicesBuffer, indicesByteOffset, indicesArrayLength);\r\n break;\r\n }\r\n\r\n // Gather values.\r\n\r\n const valuesBufferView = gltf.bufferViews[this.sparse.values.bufferView];\r\n const valuesBuffer = gltf._loadedBuffers[valuesBufferView.buffer];\r\n const valuesByteOffset = this.sparse.values.byteOffset + (valuesBufferView.byteOffset ?? 0);\r\n\r\n const valuesComponentSize = this.getComponentSize(this.componentType);\r\n let valuesComponentCount = this.getComponentCount(this.type);\r\n\r\n if (valuesBufferView.byteStride !== undefined && valuesBufferView.byteStride !== 0) {\r\n valuesComponentCount = valuesBufferView.byteStride / valuesComponentSize;\r\n }\r\n\r\n const valuesArrayLength = this.sparse.count * valuesComponentCount;\r\n\r\n let valuesTypedView: TypedArray;\r\n switch (this.componentType) {\r\n case ComponentType.BYTE:\r\n valuesTypedView = new Int8Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.UBYTE:\r\n valuesTypedView = new Uint8Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.SHORT:\r\n valuesTypedView = new Int16Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.USHORT:\r\n valuesTypedView = new Uint16Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.INT:\r\n valuesTypedView = new Int32Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.UINT:\r\n valuesTypedView = new Uint32Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.FLOAT:\r\n valuesTypedView = new Float32Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n }\r\n\r\n // Overwrite values.\r\n\r\n for (let i = 0; i < this.sparse.count; ++i) {\r\n for (let k = 0; k < valuesComponentCount; ++k) {\r\n view[indicesTypedView[i] * valuesComponentCount + k] = valuesTypedView[i * valuesComponentCount + k];\r\n }\r\n }\r\n }\r\n\r\n // dequantize can be used to perform the normalization from WebGL2 vertexAttribPointer explicitly\r\n static dequantize(typedArray: TypedArray, componentType: ComponentType) {\r\n switch (componentType) {\r\n case ComponentType.BYTE:\r\n return new Float32Array(typedArray).map((c) => Math.max(c / 127.0, -1.0));\r\n case ComponentType.UBYTE:\r\n return new Float32Array(typedArray).map((c) => c / 255.0);\r\n case ComponentType.SHORT:\r\n return new Float32Array(typedArray).map((c) => Math.max(c / 32767.0, -1.0));\r\n case ComponentType.USHORT:\r\n return new Float32Array(typedArray).map((c) => c / 65535.0);\r\n default:\r\n return typedArray;\r\n }\r\n }\r\n\r\n getComponentCount(type: GLTFComponentType) {\r\n switch (type) {\r\n case 'SCALAR':\r\n return 1;\r\n case 'VEC2':\r\n return 2;\r\n case 'VEC3':\r\n return 3;\r\n case 'VEC4':\r\n return 4;\r\n case 'MAT2':\r\n return 4;\r\n case 'MAT3':\r\n return 9;\r\n case 'MAT4':\r\n return 16;\r\n default:\r\n return 0;\r\n }\r\n }\r\n\r\n getComponentSize(componentType: ComponentType) {\r\n switch (componentType) {\r\n case ComponentType.BYTE:\r\n case ComponentType.UBYTE:\r\n return 1;\r\n case ComponentType.SHORT:\r\n case ComponentType.USHORT:\r\n return 2;\r\n case ComponentType.INT:\r\n case ComponentType.UINT:\r\n case ComponentType.FLOAT:\r\n return 4;\r\n default:\r\n return 0;\r\n }\r\n }\r\n}\r\n"],"names":["ComponentType","GLTFAccessor","bufferView","byteOffset","componentType","normalized","count","type","max","min","sparse","name","_typedView","_filteredView","_normalizedFilteredView","_normalizedTypedView","accessorInfo","getTypedView","gltf","undefined","bufferViews","buffer","_loadedBuffers","componentSize","getComponentSize","componentCount","getComponentCount","arrayLength","byteStride","console","warn","byteLength","Int8Array","Uint8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","createView","applySparse","getNormalizedTypedView","typedView","dequantize","getDeinterlacedView","func","stride","dataView","DataView","i","offset","Math","floor","size","getNormalizedDeinterlacedView","filteredView","view","indicesBufferView","indices","indicesBuffer","indicesByteOffset","indicesComponentSize","indicesComponentCount","indicesArrayLength","indicesTypedView","valuesBufferView","values","valuesBuffer","valuesByteOffset","valuesComponentSize","valuesComponentCount","valuesArrayLength","valuesTypedView","k","typedArray","map","c"],"mappings":"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"}
@@ -0,0 +1,180 @@
1
+ import { AbstractTextureLoader } from '../loader.js';
2
+ import { floatToHalf, packFloat3 } from '@zephyr3d/base';
3
+ import { Application } from '../../../app/app.js';
4
+
5
+ const _f16one = floatToHalf(1);
6
+ /**
7
+ * The HDR texture loader
8
+ * @internal
9
+ */ class HDRLoader extends AbstractTextureLoader {
10
+ supportMIMEType(mimeType) {
11
+ return mimeType === 'image/hdr' || mimeType === 'image/x-hdr' || mimeType === 'image/vnd.radiance';
12
+ }
13
+ async load(mimeType, data, srgb, samplerOptions, texture) {
14
+ let format;
15
+ for (const fmt of [
16
+ 'rg11b10uf',
17
+ 'rgba16f',
18
+ 'rgba32f',
19
+ 'rgba8unorm'
20
+ ]){
21
+ const info = Application.instance.device.getDeviceCaps().textureCaps.getTextureFormatInfo(fmt);
22
+ if (info && info.filterable && info.renderable) {
23
+ format = fmt;
24
+ break;
25
+ }
26
+ }
27
+ const arrayBuffer = data instanceof ArrayBuffer ? data : data.buffer;
28
+ const offset = data instanceof ArrayBuffer ? 0 : data.byteOffset;
29
+ const textureData = await this.loadHDR(new Uint8Array(arrayBuffer, offset), format);
30
+ const options = {
31
+ texture: texture,
32
+ samplerOptions
33
+ };
34
+ const tex = Application.instance.device.createTexture2D(format, textureData.width, textureData.height, options);
35
+ tex.update(textureData.dataFloat, 0, 0, textureData.width, textureData.height);
36
+ return tex;
37
+ }
38
+ _rgbeToFloat32(buffer) {
39
+ const length = buffer.byteLength >> 2;
40
+ const result = new Float32Array(length * 4);
41
+ for(let i = 0; i < length; i++){
42
+ const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));
43
+ result[i * 4] = buffer[i * 4] * s;
44
+ result[i * 4 + 1] = buffer[i * 4 + 1] * s;
45
+ result[i * 4 + 2] = buffer[i * 4 + 2] * s;
46
+ result[i * 4 + 3] = 1;
47
+ }
48
+ return result;
49
+ }
50
+ _rgbeToFloat16(buffer) {
51
+ const length = buffer.byteLength >> 2;
52
+ const result = new Uint16Array(length * 4);
53
+ for(let i = 0; i < length; i++){
54
+ const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));
55
+ result[i * 4 + 0] = floatToHalf(Math.max(-65504, Math.min(buffer[i * 4] * s, 65504)));
56
+ result[i * 4 + 1] = floatToHalf(Math.max(-65504, Math.min(buffer[i * 4 + 1] * s, 65504)));
57
+ result[i * 4 + 2] = floatToHalf(Math.max(-65504, Math.min(buffer[i * 4 + 2] * s, 65504)));
58
+ result[i * 4 + 3] = _f16one;
59
+ }
60
+ return result;
61
+ }
62
+ _rgbeToR11G11B10(buffer) {
63
+ const length = buffer.byteLength >> 2;
64
+ const result = new Uint32Array(length);
65
+ for(let i = 0; i < length; i++){
66
+ const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));
67
+ const r = buffer[i * 4] * s;
68
+ const g = buffer[i * 4 + 1] * s;
69
+ const b = buffer[i * 4 + 2] * s;
70
+ result[i] = packFloat3(r, g, b);
71
+ }
72
+ return result;
73
+ }
74
+ /*
75
+ Decode: rgb = pow(6 * rgbm.rgb * rgbm.a, 2.2);
76
+ */ _rgbeToRGBM(buffer) {
77
+ const length = buffer.byteLength >> 2;
78
+ const result = new Uint8Array(length * 4);
79
+ for(let i = 0; i < length; i++){
80
+ const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));
81
+ const r = Math.pow(buffer[i * 4] * s, 1 / 2.2);
82
+ const g = Math.pow(buffer[i * 4 + 1] * s, 1 / 2.2);
83
+ const b = Math.pow(buffer[i * 4 + 2] * s, 1 / 2.2);
84
+ const rgbMax = Math.max(r, g, b);
85
+ const M = Math.ceil(255 * rgbMax / 6) / 255;
86
+ const t = M * 6;
87
+ result[i * 4] = Math.ceil(255 * r / t);
88
+ result[i * 4 + 1] = Math.ceil(255 * g / t);
89
+ result[i * 4 + 2] = Math.ceil(255 * b / t);
90
+ result[i * 4 + 3] = Math.ceil(255 * Math.min(M, 1));
91
+ }
92
+ return result;
93
+ }
94
+ async loadHDR(buffer, dstFormat) {
95
+ let header = '';
96
+ let pos = 0;
97
+ const d8 = buffer;
98
+ let format = undefined;
99
+ // read header.
100
+ while(!header.match(/\n\n[^\n]+\n/g)){
101
+ header += String.fromCodePoint(d8[pos++]);
102
+ }
103
+ // check format.
104
+ format = header.match(/FORMAT=(.*)$/m);
105
+ if (format.length < 2) {
106
+ return undefined;
107
+ }
108
+ format = format[1];
109
+ if (format != '32-bit_rle_rgbe') {
110
+ console.warn('unknown format : ' + format);
111
+ return null;
112
+ }
113
+ // parse resolution
114
+ let rez = header.split(/\n/).reverse();
115
+ if (rez.length < 2) {
116
+ return undefined;
117
+ }
118
+ rez = rez[1].split(' ');
119
+ if (rez.length < 4) {
120
+ return undefined;
121
+ }
122
+ const width = Number(rez[3]) * 1, height = Number(rez[1]) * 1;
123
+ // Create image.
124
+ const img = new Uint8Array(width * height * 4);
125
+ let ipos = 0;
126
+ // Read all scanlines
127
+ for(let j = 0; j < height; j++){
128
+ const scanline = [];
129
+ let rgbe = d8.slice(pos, pos += 4);
130
+ const isNewRLE = rgbe[0] == 2 && rgbe[1] == 2 && rgbe[2] == (width >> 8 & 0xff) && rgbe[3] == (width & 0xff);
131
+ if (isNewRLE && width >= 8 && width < 32768) {
132
+ for(let i = 0; i < 4; i++){
133
+ let ptr = i * width;
134
+ const ptr_end = (i + 1) * width;
135
+ let buf = undefined;
136
+ let count = undefined;
137
+ while(ptr < ptr_end){
138
+ buf = d8.slice(pos, pos += 2);
139
+ if (buf[0] > 128) {
140
+ count = buf[0] - 128;
141
+ while(count-- > 0){
142
+ scanline[ptr++] = buf[1];
143
+ }
144
+ } else {
145
+ count = buf[0] - 1;
146
+ scanline[ptr++] = buf[1];
147
+ while(count-- > 0){
148
+ scanline[ptr++] = d8[pos++];
149
+ }
150
+ }
151
+ }
152
+ }
153
+ for(let i = 0; i < width; i++){
154
+ img[ipos++] = scanline[i + 0 * width];
155
+ img[ipos++] = scanline[i + 1 * width];
156
+ img[ipos++] = scanline[i + 2 * width];
157
+ img[ipos++] = scanline[i + 3 * width];
158
+ }
159
+ } else {
160
+ pos -= 4;
161
+ for(let i = 0; i < width; i++){
162
+ rgbe = d8.slice(pos, pos += 4);
163
+ img[ipos++] = rgbe[0];
164
+ img[ipos++] = rgbe[1];
165
+ img[ipos++] = rgbe[2];
166
+ img[ipos++] = rgbe[3];
167
+ }
168
+ }
169
+ }
170
+ const imageFloatBuffer = dstFormat === 'rgba32f' ? this._rgbeToFloat32(img) : dstFormat === 'rgba16f' ? this._rgbeToFloat16(img) : dstFormat === 'rg11b10uf' ? this._rgbeToR11G11B10(img) : this._rgbeToRGBM(img);
171
+ return {
172
+ dataFloat: imageFloatBuffer,
173
+ width: width,
174
+ height: height
175
+ };
176
+ }
177
+ }
178
+
179
+ export { HDRLoader };
180
+ //# sourceMappingURL=hdr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hdr.js","sources":["../../../../../src/asset/loaders/hdr/hdr.ts"],"sourcesContent":["import { AbstractTextureLoader } from '../loader';\nimport type { TypedArray } from '@zephyr3d/base';\nimport { floatToHalf, packFloat3 } from '@zephyr3d/base';\nimport { Application } from '../../../app';\nimport type { BaseTexture, SamplerOptions, TextureCreationOptions, TextureFormat } from '@zephyr3d/device';\n\nconst _f16one = floatToHalf(1);\n/**\n * The HDR texture loader\n * @internal\n */\nexport class HDRLoader extends AbstractTextureLoader {\n supportMIMEType(mimeType: string): boolean {\n return mimeType === 'image/hdr' || mimeType === 'image/x-hdr' || mimeType === 'image/vnd.radiance';\n }\n async load(\n mimeType: string,\n data: ArrayBuffer | TypedArray,\n srgb: boolean,\n samplerOptions?: SamplerOptions,\n texture?: BaseTexture\n ): Promise<BaseTexture> {\n let format: TextureFormat;\n for (const fmt of ['rg11b10uf', 'rgba16f', 'rgba32f', 'rgba8unorm'] as const) {\n const info = Application.instance.device.getDeviceCaps().textureCaps.getTextureFormatInfo(fmt);\n if (info && info.filterable && info.renderable) {\n format = fmt;\n break;\n }\n }\n const arrayBuffer = data instanceof ArrayBuffer ? data : data.buffer;\n const offset = data instanceof ArrayBuffer ? 0 : data.byteOffset;\n const textureData = await this.loadHDR(new Uint8Array(arrayBuffer, offset), format);\n const options: TextureCreationOptions = {\n texture: texture,\n samplerOptions\n };\n const tex = Application.instance.device.createTexture2D(\n format,\n textureData.width,\n textureData.height,\n options\n );\n tex.update(textureData.dataFloat, 0, 0, textureData.width, textureData.height);\n return tex;\n }\n private _rgbeToFloat32(buffer: Uint8Array<ArrayBuffer>): Float32Array<ArrayBuffer> {\n const length = buffer.byteLength >> 2;\n const result = new Float32Array(length * 4);\n\n for (let i = 0; i < length; i++) {\n const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));\n\n result[i * 4] = buffer[i * 4] * s;\n result[i * 4 + 1] = buffer[i * 4 + 1] * s;\n result[i * 4 + 2] = buffer[i * 4 + 2] * s;\n result[i * 4 + 3] = 1;\n }\n return result;\n }\n private _rgbeToFloat16(buffer: Uint8Array<ArrayBuffer>): Uint16Array<ArrayBuffer> {\n const length = buffer.byteLength >> 2;\n const result = new Uint16Array(length * 4);\n for (let i = 0; i < length; i++) {\n const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));\n result[i * 4 + 0] = floatToHalf(Math.max(-65504, Math.min(buffer[i * 4] * s, 65504)));\n result[i * 4 + 1] = floatToHalf(Math.max(-65504, Math.min(buffer[i * 4 + 1] * s, 65504)));\n result[i * 4 + 2] = floatToHalf(Math.max(-65504, Math.min(buffer[i * 4 + 2] * s, 65504)));\n result[i * 4 + 3] = _f16one;\n }\n return result;\n }\n private _rgbeToR11G11B10(buffer: Uint8Array<ArrayBuffer>): Uint32Array<ArrayBuffer> {\n const length = buffer.byteLength >> 2;\n const result = new Uint32Array(length);\n\n for (let i = 0; i < length; i++) {\n const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));\n const r = buffer[i * 4] * s;\n const g = buffer[i * 4 + 1] * s;\n const b = buffer[i * 4 + 2] * s;\n result[i] = packFloat3(r, g, b);\n }\n return result;\n }\n /*\n Decode: rgb = pow(6 * rgbm.rgb * rgbm.a, 2.2);\n */\n private _rgbeToRGBM(buffer: Uint8Array<ArrayBuffer>): Uint8Array<ArrayBuffer> {\n const length = buffer.byteLength >> 2;\n const result = new Uint8Array(length * 4);\n\n for (let i = 0; i < length; i++) {\n const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));\n const r = Math.pow(buffer[i * 4] * s, 1 / 2.2);\n const g = Math.pow(buffer[i * 4 + 1] * s, 1 / 2.2);\n const b = Math.pow(buffer[i * 4 + 2] * s, 1 / 2.2);\n const rgbMax = Math.max(r, g, b);\n const M = Math.ceil((255 * rgbMax) / 6) / 255;\n const t = M * 6;\n result[i * 4] = Math.ceil((255 * r) / t);\n result[i * 4 + 1] = Math.ceil((255 * g) / t);\n result[i * 4 + 2] = Math.ceil((255 * b) / t);\n result[i * 4 + 3] = Math.ceil(255 * Math.min(M, 1));\n }\n return result;\n }\n private async loadHDR(buffer: Uint8Array<ArrayBuffer>, dstFormat: TextureFormat) {\n let header = '';\n let pos = 0;\n const d8 = buffer;\n let format = undefined;\n // read header.\n while (!header.match(/\\n\\n[^\\n]+\\n/g)) {\n header += String.fromCodePoint(d8[pos++]);\n }\n // check format.\n format = header.match(/FORMAT=(.*)$/m);\n if (format.length < 2) {\n return undefined;\n }\n format = format[1];\n if (format != '32-bit_rle_rgbe') {\n console.warn('unknown format : ' + format);\n return null;\n }\n // parse resolution\n let rez = header.split(/\\n/).reverse();\n if (rez.length < 2) {\n return undefined;\n }\n rez = rez[1].split(' ');\n if (rez.length < 4) {\n return undefined;\n }\n const width = Number(rez[3]) * 1,\n height = Number(rez[1]) * 1;\n // Create image.\n const img = new Uint8Array(width * height * 4);\n let ipos = 0;\n // Read all scanlines\n for (let j = 0; j < height; j++) {\n const scanline = [];\n\n let rgbe = d8.slice(pos, (pos += 4));\n const isNewRLE =\n rgbe[0] == 2 && rgbe[1] == 2 && rgbe[2] == ((width >> 8) & 0xff) && rgbe[3] == (width & 0xff);\n\n if (isNewRLE && width >= 8 && width < 32768) {\n for (let i = 0; i < 4; i++) {\n let ptr = i * width;\n const ptr_end = (i + 1) * width;\n let buf = undefined;\n let count = undefined;\n while (ptr < ptr_end) {\n buf = d8.slice(pos, (pos += 2));\n if (buf[0] > 128) {\n count = buf[0] - 128;\n while (count-- > 0) {\n scanline[ptr++] = buf[1];\n }\n } else {\n count = buf[0] - 1;\n scanline[ptr++] = buf[1];\n while (count-- > 0) {\n scanline[ptr++] = d8[pos++];\n }\n }\n }\n }\n\n for (let i = 0; i < width; i++) {\n img[ipos++] = scanline[i + 0 * width];\n img[ipos++] = scanline[i + 1 * width];\n img[ipos++] = scanline[i + 2 * width];\n img[ipos++] = scanline[i + 3 * width];\n }\n } else {\n pos -= 4;\n\n for (let i = 0; i < width; i++) {\n rgbe = d8.slice(pos, (pos += 4));\n\n img[ipos++] = rgbe[0];\n img[ipos++] = rgbe[1];\n img[ipos++] = rgbe[2];\n img[ipos++] = rgbe[3];\n }\n }\n }\n\n const imageFloatBuffer =\n dstFormat === 'rgba32f'\n ? this._rgbeToFloat32(img)\n : dstFormat === 'rgba16f'\n ? this._rgbeToFloat16(img)\n : dstFormat === 'rg11b10uf'\n ? this._rgbeToR11G11B10(img)\n : this._rgbeToRGBM(img);\n\n return {\n dataFloat: imageFloatBuffer,\n width: width,\n height: height\n };\n }\n}\n"],"names":["_f16one","floatToHalf","HDRLoader","AbstractTextureLoader","supportMIMEType","mimeType","load","data","srgb","samplerOptions","texture","format","fmt","info","Application","instance","device","getDeviceCaps","textureCaps","getTextureFormatInfo","filterable","renderable","arrayBuffer","ArrayBuffer","buffer","offset","byteOffset","textureData","loadHDR","Uint8Array","options","tex","createTexture2D","width","height","update","dataFloat","_rgbeToFloat32","length","byteLength","result","Float32Array","i","s","Math","pow","_rgbeToFloat16","Uint16Array","max","min","_rgbeToR11G11B10","Uint32Array","r","g","b","packFloat3","_rgbeToRGBM","rgbMax","M","ceil","t","dstFormat","header","pos","d8","undefined","match","String","fromCodePoint","console","warn","rez","split","reverse","Number","img","ipos","j","scanline","rgbe","slice","isNewRLE","ptr","ptr_end","buf","count","imageFloatBuffer"],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ import { AbstractTextureLoader } from '../loader.js';
2
+ import { Application } from '../../../app/app.js';
3
+
4
+ /**
5
+ * TGA image loader
6
+ * @internal
7
+ */ class TGALoader extends AbstractTextureLoader {
8
+ supportMIMEType(mimeType) {
9
+ return mimeType === 'image/tga' || mimeType === 'image/x-tga';
10
+ }
11
+ parseTGA(content, sRGB, noMipmap, texture) {
12
+ const arrayBuffer = content instanceof ArrayBuffer ? content : content.buffer;
13
+ const offset = content instanceof ArrayBuffer ? 0 : content.byteOffset;
14
+ const dataView = new DataView(arrayBuffer, offset);
15
+ const p = [
16
+ 0,
17
+ 0,
18
+ 0,
19
+ 0
20
+ ];
21
+ do {
22
+ let skip = 0;
23
+ const idLength = dataView.getUint8(0);
24
+ skip += idLength;
25
+ const colorMapType = dataView.getUint8(1);
26
+ if (colorMapType !== 0 && colorMapType !== 1) {
27
+ break;
28
+ }
29
+ const dataTypeCode = dataView.getUint8(2);
30
+ if (dataTypeCode !== 2 && dataTypeCode !== 10) {
31
+ break;
32
+ }
33
+ const colorMapLength = dataView.getUint16(5, true);
34
+ skip += colorMapLength * colorMapType;
35
+ const width = dataView.getUint16(12, true);
36
+ const height = dataView.getUint16(14, true);
37
+ const bpp = dataView.getUint8(16);
38
+ if (bpp !== 16 && bpp !== 24 && bpp !== 32) {
39
+ break;
40
+ }
41
+ let dataOffset = 18 + skip;
42
+ const bytesPerPixel = bpp / 8;
43
+ const pixels = new Uint8Array(width * height * 4);
44
+ let n = 0;
45
+ while(n < width * height){
46
+ if (dataTypeCode === 2) {
47
+ for(let i = 0; i < bytesPerPixel; i++){
48
+ p[i] = dataView.getUint8(dataOffset++);
49
+ }
50
+ this.mergeBytes(pixels, n * 4, p, bytesPerPixel);
51
+ n++;
52
+ } else {
53
+ const t = dataView.getUint8(dataOffset++);
54
+ for(let i = 0; i < bytesPerPixel; i++){
55
+ p[i] = dataView.getUint8(dataOffset++);
56
+ }
57
+ const j = t & 0x7f;
58
+ this.mergeBytes(pixels, n * 4, p, bytesPerPixel);
59
+ n++;
60
+ if (t & 0x80) {
61
+ for(let i = 0; i < j; i++){
62
+ this.mergeBytes(pixels, n * 4, p, bytesPerPixel);
63
+ n++;
64
+ }
65
+ } else {
66
+ for(let i = 0; i < j; i++){
67
+ for(let k = 0; k < bytesPerPixel; k++){
68
+ p[i] = dataView.getUint8(dataOffset++);
69
+ }
70
+ this.mergeBytes(pixels, n * 4, p, bytesPerPixel);
71
+ n++;
72
+ }
73
+ }
74
+ }
75
+ }
76
+ const opt = {
77
+ texture
78
+ };
79
+ if (noMipmap) {
80
+ opt.samplerOptions = {
81
+ mipFilter: 'none'
82
+ };
83
+ }
84
+ const tex = Application.instance.device.createTexture2D(sRGB ? 'rgba8unorm-srgb' : 'rgba8unorm', width, height, opt);
85
+ tex.update(pixels, 0, 0, width, height);
86
+ return tex;
87
+ }while (false)
88
+ throw new Error(`Unsupported TGA file format`);
89
+ }
90
+ mergeBytes(dest, offset, pixel, numBytes) {
91
+ if (numBytes === 4) {
92
+ dest[offset + 0] = pixel[2];
93
+ dest[offset + 1] = pixel[1];
94
+ dest[offset + 2] = pixel[0];
95
+ dest[offset + 3] = pixel[3];
96
+ } else if (numBytes === 3) {
97
+ dest[offset + 0] = pixel[2];
98
+ dest[offset + 1] = pixel[1];
99
+ dest[offset + 2] = pixel[0];
100
+ dest[offset + 3] = 255;
101
+ } else if (numBytes === 2) {
102
+ dest[offset + 0] = (pixel[1] & 0x7c) << 1;
103
+ dest[offset + 1] = (pixel[1] & 0x03) << 6 | (pixel[0] & 0xe0) >> 2;
104
+ dest[offset + 2] = (pixel[0] & 0x1f) << 3;
105
+ dest[offset + 3] = pixel[1] & 0x80;
106
+ }
107
+ }
108
+ async load(mimeType, data, srgb, samplerOptions, texture) {
109
+ return new Promise((resolve)=>{
110
+ resolve(this.parseTGA(data, srgb, samplerOptions?.mipFilter === 'none', texture));
111
+ });
112
+ }
113
+ }
114
+
115
+ export { TGALoader };
116
+ //# sourceMappingURL=tga_Loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tga_Loader.js","sources":["../../../../../src/asset/loaders/image/tga_Loader.ts"],"sourcesContent":["import { AbstractTextureLoader } from '../loader';\nimport { Application } from '../../../app/app';\nimport type { BaseTexture, SamplerOptions, TextureCreationOptions } from '@zephyr3d/device';\nimport type { TypedArray } from '@zephyr3d/base';\n\n/**\n * TGA image loader\n * @internal\n */\nexport class TGALoader extends AbstractTextureLoader {\n supportMIMEType(mimeType: string): boolean {\n return mimeType === 'image/tga' || mimeType === 'image/x-tga';\n }\n private parseTGA(\n content: ArrayBuffer | TypedArray,\n sRGB: boolean,\n noMipmap: boolean,\n texture: BaseTexture\n ) {\n const arrayBuffer = content instanceof ArrayBuffer ? content : content.buffer;\n const offset = content instanceof ArrayBuffer ? 0 : content.byteOffset;\n const dataView = new DataView(arrayBuffer, offset);\n const p: number[] = [0, 0, 0, 0];\n do {\n let skip = 0;\n const idLength = dataView.getUint8(0);\n skip += idLength;\n const colorMapType = dataView.getUint8(1);\n if (colorMapType !== 0 && colorMapType !== 1) {\n break;\n }\n const dataTypeCode = dataView.getUint8(2);\n if (dataTypeCode !== 2 && dataTypeCode !== 10) {\n break;\n }\n const colorMapLength = dataView.getUint16(5, true);\n skip += colorMapLength * colorMapType;\n const width = dataView.getUint16(12, true);\n const height = dataView.getUint16(14, true);\n const bpp = dataView.getUint8(16);\n if (bpp !== 16 && bpp !== 24 && bpp !== 32) {\n break;\n }\n let dataOffset = 18 + skip;\n const bytesPerPixel = bpp / 8;\n const pixels = new Uint8Array(width * height * 4);\n let n = 0;\n while (n < width * height) {\n if (dataTypeCode === 2) {\n for (let i = 0; i < bytesPerPixel; i++) {\n p[i] = dataView.getUint8(dataOffset++);\n }\n this.mergeBytes(pixels, n * 4, p, bytesPerPixel);\n n++;\n } else {\n const t = dataView.getUint8(dataOffset++);\n for (let i = 0; i < bytesPerPixel; i++) {\n p[i] = dataView.getUint8(dataOffset++);\n }\n const j = t & 0x7f;\n this.mergeBytes(pixels, n * 4, p, bytesPerPixel);\n n++;\n if (t & 0x80) {\n for (let i = 0; i < j; i++) {\n this.mergeBytes(pixels, n * 4, p, bytesPerPixel);\n n++;\n }\n } else {\n for (let i = 0; i < j; i++) {\n for (let k = 0; k < bytesPerPixel; k++) {\n p[i] = dataView.getUint8(dataOffset++);\n }\n this.mergeBytes(pixels, n * 4, p, bytesPerPixel);\n n++;\n }\n }\n }\n }\n const opt: TextureCreationOptions = { texture };\n if (noMipmap) {\n opt.samplerOptions = { mipFilter: 'none' };\n }\n const tex = Application.instance.device.createTexture2D(\n sRGB ? 'rgba8unorm-srgb' : 'rgba8unorm',\n width,\n height,\n opt\n );\n tex.update(pixels, 0, 0, width, height);\n return tex;\n } while (false);\n throw new Error(`Unsupported TGA file format`);\n }\n private mergeBytes(dest: Uint8Array<ArrayBuffer>, offset: number, pixel: number[], numBytes: number) {\n if (numBytes === 4) {\n dest[offset + 0] = pixel[2];\n dest[offset + 1] = pixel[1];\n dest[offset + 2] = pixel[0];\n dest[offset + 3] = pixel[3];\n } else if (numBytes === 3) {\n dest[offset + 0] = pixel[2];\n dest[offset + 1] = pixel[1];\n dest[offset + 2] = pixel[0];\n dest[offset + 3] = 255;\n } else if (numBytes === 2) {\n dest[offset + 0] = (pixel[1] & 0x7c) << 1;\n dest[offset + 1] = ((pixel[1] & 0x03) << 6) | ((pixel[0] & 0xe0) >> 2);\n dest[offset + 2] = (pixel[0] & 0x1f) << 3;\n dest[offset + 3] = pixel[1] & 0x80;\n }\n }\n async load(\n mimeType: string,\n data: ArrayBuffer | TypedArray,\n srgb: boolean,\n samplerOptions?: SamplerOptions,\n texture?: BaseTexture\n ): Promise<BaseTexture> {\n return new Promise<BaseTexture>((resolve) => {\n resolve(this.parseTGA(data, srgb, samplerOptions?.mipFilter === 'none', texture));\n });\n }\n}\n"],"names":["TGALoader","AbstractTextureLoader","supportMIMEType","mimeType","parseTGA","content","sRGB","noMipmap","texture","arrayBuffer","ArrayBuffer","buffer","offset","byteOffset","dataView","DataView","p","skip","idLength","getUint8","colorMapType","dataTypeCode","colorMapLength","getUint16","width","height","bpp","dataOffset","bytesPerPixel","pixels","Uint8Array","n","i","mergeBytes","t","j","k","opt","samplerOptions","mipFilter","tex","Application","instance","device","createTexture2D","update","Error","dest","pixel","numBytes","load","data","srgb","Promise","resolve"],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { AbstractTextureLoader } from '../loader.js';
2
+ import { Application } from '../../../app/app.js';
3
+
4
+ /**
5
+ * Web image loader
6
+ * @internal
7
+ */ class WebImageLoader extends AbstractTextureLoader {
8
+ supportMIMEType(mimeType) {
9
+ return mimeType === 'image/jpg' || mimeType === 'image/jpeg' || mimeType === 'image/png';
10
+ }
11
+ async load(mimeType, data, srgb, samplerOptions, texture) {
12
+ return new Promise((resolve, reject)=>{
13
+ if (!mimeType) {
14
+ reject('unknown image file type');
15
+ }
16
+ const src = URL.createObjectURL(new Blob([
17
+ data
18
+ ], {
19
+ type: mimeType
20
+ }));
21
+ const img = document.createElement('img');
22
+ img.src = src;
23
+ img.onload = function() {
24
+ createImageBitmap(img, {
25
+ premultiplyAlpha: 'none'
26
+ }).then((bm)=>{
27
+ const options = {
28
+ texture: texture,
29
+ samplerOptions
30
+ };
31
+ const tex = Application.instance.device.createTexture2DFromImage(bm, srgb, options);
32
+ if (tex) {
33
+ resolve(tex);
34
+ } else {
35
+ reject('create texture from image element failed');
36
+ }
37
+ }).catch(()=>{
38
+ const cvs = document.createElement('canvas');
39
+ cvs.width = img.width;
40
+ cvs.height = img.height;
41
+ const ctx = cvs.getContext('2d');
42
+ ctx.drawImage(img, 0, 0);
43
+ const options = {
44
+ texture: texture,
45
+ samplerOptions
46
+ };
47
+ const tex = Application.instance.device.createTexture2DFromImage(cvs, srgb, options);
48
+ if (tex) {
49
+ resolve(tex);
50
+ } else {
51
+ reject('create texture from image element failed');
52
+ }
53
+ });
54
+ };
55
+ img.onerror = (err)=>{
56
+ reject(err);
57
+ };
58
+ });
59
+ }
60
+ }
61
+
62
+ export { WebImageLoader };
63
+ //# sourceMappingURL=webimage_loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webimage_loader.js","sources":["../../../../../src/asset/loaders/image/webimage_loader.ts"],"sourcesContent":["import { AbstractTextureLoader } from '../loader';\r\nimport { Application } from '../../../app';\r\nimport type { BaseTexture, SamplerOptions, TextureCreationOptions } from '@zephyr3d/device';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\n\r\n/**\r\n * Web image loader\r\n * @internal\r\n */\r\nexport class WebImageLoader extends AbstractTextureLoader {\r\n supportMIMEType(mimeType: string): boolean {\r\n return mimeType === 'image/jpg' || mimeType === 'image/jpeg' || mimeType === 'image/png';\r\n }\r\n async load(\r\n mimeType: string,\r\n data: ArrayBuffer | TypedArray,\r\n srgb: boolean,\r\n samplerOptions?: SamplerOptions,\r\n texture?: BaseTexture\r\n ): Promise<BaseTexture> {\r\n return new Promise<BaseTexture>((resolve, reject) => {\r\n if (!mimeType) {\r\n reject('unknown image file type');\r\n }\r\n const src = URL.createObjectURL(new Blob([data], { type: mimeType }));\r\n const img = document.createElement('img');\r\n img.src = src;\r\n img.onload = function () {\r\n createImageBitmap(img, {\r\n premultiplyAlpha: 'none'\r\n })\r\n .then((bm) => {\r\n const options: TextureCreationOptions = {\r\n texture: texture,\r\n samplerOptions\r\n };\r\n const tex = Application.instance.device.createTexture2DFromImage(bm, srgb, options);\r\n if (tex) {\r\n resolve(tex);\r\n } else {\r\n reject('create texture from image element failed');\r\n }\r\n })\r\n .catch(() => {\r\n const cvs = document.createElement('canvas');\r\n cvs.width = img.width;\r\n cvs.height = img.height;\r\n const ctx = cvs.getContext('2d');\r\n ctx.drawImage(img, 0, 0);\r\n const options: TextureCreationOptions = {\r\n texture: texture,\r\n samplerOptions\r\n };\r\n const tex = Application.instance.device.createTexture2DFromImage(cvs, srgb, options);\r\n if (tex) {\r\n resolve(tex);\r\n } else {\r\n reject('create texture from image element failed');\r\n }\r\n });\r\n };\r\n img.onerror = (err) => {\r\n reject(err);\r\n };\r\n });\r\n }\r\n}\r\n"],"names":["WebImageLoader","AbstractTextureLoader","supportMIMEType","mimeType","load","data","srgb","samplerOptions","texture","Promise","resolve","reject","src","URL","createObjectURL","Blob","type","img","document","createElement","onload","createImageBitmap","premultiplyAlpha","then","bm","options","tex","Application","instance","device","createTexture2DFromImage","catch","cvs","width","height","ctx","getContext","drawImage","onerror","err"],"mappings":";;;AAKA;;;IAIO,MAAMA,cAAuBC,SAAAA,qBAAAA,CAAAA;AAClCC,IAAAA,eAAAA,CAAgBC,QAAgB,EAAW;AACzC,QAAA,OAAOA,QAAa,KAAA,WAAA,IAAeA,QAAa,KAAA,YAAA,IAAgBA,QAAa,KAAA,WAAA;AAC/E;IACA,MAAMC,IAAAA,CACJD,QAAgB,EAChBE,IAA8B,EAC9BC,IAAa,EACbC,cAA+B,EAC/BC,OAAqB,EACC;QACtB,OAAO,IAAIC,OAAqB,CAAA,CAACC,OAASC,EAAAA,MAAAA,GAAAA;AACxC,YAAA,IAAI,CAACR,QAAU,EAAA;gBACbQ,MAAO,CAAA,yBAAA,CAAA;AACT;AACA,YAAA,MAAMC,GAAMC,GAAAA,GAAAA,CAAIC,eAAe,CAAC,IAAIC,IAAK,CAAA;AAACV,gBAAAA;aAAK,EAAE;gBAAEW,IAAMb,EAAAA;AAAS,aAAA,CAAA,CAAA;YAClE,MAAMc,GAAAA,GAAMC,QAASC,CAAAA,aAAa,CAAC,KAAA,CAAA;AACnCF,YAAAA,GAAAA,CAAIL,GAAG,GAAGA,GAAAA;AACVK,YAAAA,GAAAA,CAAIG,MAAM,GAAG,WAAA;AACXC,gBAAAA,iBAAAA,CAAkBJ,GAAK,EAAA;oBACrBK,gBAAkB,EAAA;iBAEjBC,CAAAA,CAAAA,IAAI,CAAC,CAACC,EAAAA,GAAAA;AACL,oBAAA,MAAMC,OAAkC,GAAA;wBACtCjB,OAASA,EAAAA,OAAAA;AACTD,wBAAAA;AACF,qBAAA;oBACA,MAAMmB,GAAAA,GAAMC,YAAYC,QAAQ,CAACC,MAAM,CAACC,wBAAwB,CAACN,EAAAA,EAAIlB,IAAMmB,EAAAA,OAAAA,CAAAA;AAC3E,oBAAA,IAAIC,GAAK,EAAA;wBACPhB,OAAQgB,CAAAA,GAAAA,CAAAA;qBACH,MAAA;wBACLf,MAAO,CAAA,0CAAA,CAAA;AACT;AACF,iBAAA,CAAA,CACCoB,KAAK,CAAC,IAAA;oBACL,MAAMC,GAAAA,GAAMd,QAASC,CAAAA,aAAa,CAAC,QAAA,CAAA;oBACnCa,GAAIC,CAAAA,KAAK,GAAGhB,GAAAA,CAAIgB,KAAK;oBACrBD,GAAIE,CAAAA,MAAM,GAAGjB,GAAAA,CAAIiB,MAAM;oBACvB,MAAMC,GAAAA,GAAMH,GAAII,CAAAA,UAAU,CAAC,IAAA,CAAA;oBAC3BD,GAAIE,CAAAA,SAAS,CAACpB,GAAAA,EAAK,CAAG,EAAA,CAAA,CAAA;AACtB,oBAAA,MAAMQ,OAAkC,GAAA;wBACtCjB,OAASA,EAAAA,OAAAA;AACTD,wBAAAA;AACF,qBAAA;oBACA,MAAMmB,GAAAA,GAAMC,YAAYC,QAAQ,CAACC,MAAM,CAACC,wBAAwB,CAACE,GAAAA,EAAK1B,IAAMmB,EAAAA,OAAAA,CAAAA;AAC5E,oBAAA,IAAIC,GAAK,EAAA;wBACPhB,OAAQgB,CAAAA,GAAAA,CAAAA;qBACH,MAAA;wBACLf,MAAO,CAAA,0CAAA,CAAA;AACT;AACF,iBAAA,CAAA;AACJ,aAAA;YACAM,GAAIqB,CAAAA,OAAO,GAAG,CAACC,GAAAA,GAAAA;gBACb5B,MAAO4B,CAAAA,GAAAA,CAAAA;AACT,aAAA;AACF,SAAA,CAAA;AACF;AACF;;;;"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Base interface for any kind loaders
3
+ * @public
4
+ */ class LoaderBase {
5
+ /** @internal */ _urlResolver;
6
+ /**
7
+ * Creates an instance of LoaderBase
8
+ */ constructor(){
9
+ this._urlResolver = null;
10
+ }
11
+ /**
12
+ * URL resolver for the loader
13
+ */ get urlResolver() {
14
+ return this._urlResolver;
15
+ }
16
+ set urlResolver(resolver) {
17
+ this._urlResolver = resolver;
18
+ }
19
+ /**
20
+ * Sends a GET request
21
+ * @param url - The URL to get
22
+ * @param headers - The headers for the request
23
+ * @param crossOrigin - crossOrigin property for the request
24
+ * @returns Response of the request
25
+ */ async request(url, headers = {}, crossOrigin = 'anonymous') {
26
+ url = this._urlResolver ? this._urlResolver(url) : null;
27
+ return url ? fetch(url, {
28
+ credentials: crossOrigin === 'anonymous' ? 'same-origin' : 'include',
29
+ headers: headers
30
+ }) : null;
31
+ }
32
+ }
33
+ /**
34
+ * Base class for any kind of texture loaders
35
+ * @public
36
+ */ class AbstractTextureLoader extends LoaderBase {
37
+ }
38
+ /**
39
+ * Base class for any kind of model loaders
40
+ * @public
41
+ */ class AbstractModelLoader extends LoaderBase {
42
+ }
43
+
44
+ export { AbstractModelLoader, AbstractTextureLoader, LoaderBase };
45
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sources":["../../../../src/asset/loaders/loader.ts"],"sourcesContent":["import type { BaseTexture, SamplerOptions } from '@zephyr3d/device';\r\nimport type { AssetManager } from '../assetmanager';\r\nimport type { SharedModel } from '../model';\r\nimport type { DecoderModule } from 'draco3d';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\n\r\n/**\r\n * Base interface for any kind loaders\r\n * @public\r\n */\r\nexport class LoaderBase {\r\n /** @internal */\r\n protected _urlResolver: (url: string) => string;\r\n /**\r\n * Creates an instance of LoaderBase\r\n */\r\n constructor() {\r\n this._urlResolver = null;\r\n }\r\n /**\r\n * URL resolver for the loader\r\n */\r\n get urlResolver(): (url: string) => string {\r\n return this._urlResolver;\r\n }\r\n set urlResolver(resolver: (url: string) => string) {\r\n this._urlResolver = resolver;\r\n }\r\n /**\r\n * Sends a GET request\r\n * @param url - The URL to get\r\n * @param headers - The headers for the request\r\n * @param crossOrigin - crossOrigin property for the request\r\n * @returns Response of the request\r\n */\r\n async request(\r\n url: string,\r\n headers: Record<string, string> = {},\r\n crossOrigin = 'anonymous'\r\n ): Promise<Response> {\r\n url = this._urlResolver ? this._urlResolver(url) : null;\r\n return url\r\n ? fetch(url, {\r\n credentials: crossOrigin === 'anonymous' ? 'same-origin' : 'include',\r\n headers: headers\r\n })\r\n : null;\r\n }\r\n}\r\n/**\r\n * Base class for any kind of texture loaders\r\n * @public\r\n */\r\nexport abstract class AbstractTextureLoader extends LoaderBase {\r\n /**\r\n * Tests whether the loader supports loading a texture with given MIME type.\r\n * @param mimeType - The MIME type to test\r\n * @returns true if it supports\r\n */\r\n abstract supportMIMEType(mimeType: string): boolean;\r\n /**\r\n * Loads a texture\r\n * @param assetManager - The instance of AssetManager\r\n * @param url - The request URL\r\n * @param mimeType - MIME type for the texture image data\r\n * @param data - The texture image data\r\n * @param srgb - true if the texture is of sRGB format\r\n * @param samplerOptions - Sampler options of the texture\r\n * @param texture - if not null, this is a texture restore operation\r\n * @returns The loaded texture\r\n */\r\n abstract load(\r\n mimeType: string,\r\n data: ArrayBuffer | TypedArray,\r\n srgb: boolean,\r\n samplerOptions?: SamplerOptions,\r\n texture?: BaseTexture\r\n ): Promise<BaseTexture>;\r\n}\r\n\r\n/**\r\n * Base class for any kind of model loaders\r\n * @public\r\n */\r\nexport abstract class AbstractModelLoader extends LoaderBase {\r\n /**\r\n * Tests whether the loader supports loading a model with given MIME type.\r\n * @param mimeType - The MIME type to test\r\n * @returns true if it supports\r\n */\r\n abstract supportMIMEType(mimeType: string): boolean;\r\n /**\r\n * Loads a model\r\n * @param assetManager - The instance of AssetManager\r\n * @param url - The request URL\r\n * @param mimeType - MIME type for the model data\r\n * @param data - The model data\r\n * @returns The loaded model\r\n */\r\n abstract load(\r\n assetManager: AssetManager,\r\n url: string,\r\n mimeType: string,\r\n data: Blob,\r\n dracoDecoderModule?: DecoderModule\r\n ): Promise<SharedModel>;\r\n}\r\n"],"names":["LoaderBase","_urlResolver","urlResolver","resolver","request","url","headers","crossOrigin","fetch","credentials","AbstractTextureLoader","AbstractModelLoader"],"mappings":"AAMA;;;AAGC,IACM,MAAMA,UAAAA,CAAAA;qBAEX,YAAgD;AAChD;;AAEC,MACD,WAAc,EAAA;QACZ,IAAI,CAACC,YAAY,GAAG,IAAA;AACtB;AACA;;AAEC,MACD,IAAIC,WAAuC,GAAA;QACzC,OAAO,IAAI,CAACD,YAAY;AAC1B;IACA,IAAIC,WAAAA,CAAYC,QAAiC,EAAE;QACjD,IAAI,CAACF,YAAY,GAAGE,QAAAA;AACtB;AACA;;;;;;MAOA,MAAMC,OACJC,CAAAA,GAAW,EACXC,OAAAA,GAAkC,EAAE,EACpCC,WAAc,GAAA,WAAW,EACN;QACnBF,GAAM,GAAA,IAAI,CAACJ,YAAY,GAAG,IAAI,CAACA,YAAY,CAACI,GAAO,CAAA,GAAA,IAAA;QACnD,OAAOA,GAAAA,GACHG,MAAMH,GAAK,EAAA;YACTI,WAAaF,EAAAA,WAAAA,KAAgB,cAAc,aAAgB,GAAA,SAAA;YAC3DD,OAASA,EAAAA;SAEX,CAAA,GAAA,IAAA;AACN;AACF;AACA;;;IAIO,MAAeI,qBAA8BV,SAAAA,UAAAA,CAAAA;AAyBpD;AAEA;;;IAIO,MAAeW,mBAA4BX,SAAAA,UAAAA,CAAAA;AAsBlD;;;;"}