melonjs 19.9.1 → 20.1.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 (276) hide show
  1. package/README.md +25 -14
  2. package/build/application/application.d.ts +70 -16
  3. package/build/application/application.d.ts.map +1 -1
  4. package/build/application/defaultApplicationSettings.d.ts +2 -2
  5. package/build/application/settings.d.ts +150 -53
  6. package/build/application/settings.d.ts.map +1 -1
  7. package/build/camera/camera2d.d.ts +1 -1
  8. package/build/camera/camera2d.d.ts.map +1 -1
  9. package/build/camera/camera3d.d.ts +13 -11
  10. package/build/camera/camera3d.d.ts.map +1 -1
  11. package/build/camera/effects/fade_effect.d.ts.map +1 -1
  12. package/build/camera/effects/mask_effect.d.ts.map +1 -1
  13. package/build/const.d.ts +55 -26
  14. package/build/const.d.ts.map +1 -1
  15. package/build/geometries/box3d.d.ts +156 -0
  16. package/build/geometries/box3d.d.ts.map +1 -0
  17. package/build/index.d.ts +34 -24
  18. package/build/index.d.ts.map +1 -1
  19. package/build/index.js +22171 -8029
  20. package/build/index.js.map +4 -4
  21. package/build/lang/deprecated.d.ts +4 -4
  22. package/build/lang/deprecated.d.ts.map +1 -1
  23. package/build/level/gltf/GLTFModel.d.ts +4 -0
  24. package/build/level/gltf/GLTFModel.d.ts.map +1 -1
  25. package/build/level/gltf/GLTFScene.d.ts +42 -6
  26. package/build/level/gltf/GLTFScene.d.ts.map +1 -1
  27. package/build/level/gltf/srgb.d.ts +20 -0
  28. package/build/level/gltf/srgb.d.ts.map +1 -0
  29. package/build/level/level.d.ts +21 -2
  30. package/build/level/level.d.ts.map +1 -1
  31. package/build/lighting/light3d.d.ts +61 -13
  32. package/build/lighting/light3d.d.ts.map +1 -1
  33. package/build/loader/loader.d.ts +49 -21
  34. package/build/loader/loader.d.ts.map +1 -1
  35. package/build/loader/parsers/gltf.d.ts.map +1 -1
  36. package/build/loader/parsers/mtl.d.ts +18 -0
  37. package/build/loader/parsers/mtl.d.ts.map +1 -1
  38. package/build/loader/parsers/obj.d.ts +49 -0
  39. package/build/loader/parsers/obj.d.ts.map +1 -1
  40. package/build/loader/parsers/pbr.d.ts +63 -0
  41. package/build/loader/parsers/pbr.d.ts.map +1 -0
  42. package/build/loader/parsers/shader.d.ts +32 -24
  43. package/build/loader/parsers/shader.d.ts.map +1 -1
  44. package/build/physics/adapter.d.ts +86 -1
  45. package/build/physics/adapter.d.ts.map +1 -1
  46. package/build/physics/broadphase/octree.d.ts +35 -0
  47. package/build/physics/broadphase/octree.d.ts.map +1 -1
  48. package/build/physics/builtin/body.d.ts +123 -15
  49. package/build/physics/builtin/body.d.ts.map +1 -1
  50. package/build/physics/builtin/builtin-adapter.d.ts.map +1 -1
  51. package/build/physics/builtin/detector.d.ts +186 -1
  52. package/build/physics/builtin/detector.d.ts.map +1 -1
  53. package/build/physics/builtin/raycast.d.ts.map +1 -1
  54. package/build/physics/builtin/sat3d.d.ts +59 -0
  55. package/build/physics/builtin/sat3d.d.ts.map +1 -0
  56. package/build/physics/response.d.ts +32 -0
  57. package/build/physics/response.d.ts.map +1 -1
  58. package/build/physics/world.d.ts +1 -0
  59. package/build/physics/world.d.ts.map +1 -1
  60. package/build/renderable/container.d.ts +1 -0
  61. package/build/renderable/container.d.ts.map +1 -1
  62. package/build/renderable/groundshadow.d.ts +92 -0
  63. package/build/renderable/groundshadow.d.ts.map +1 -0
  64. package/build/renderable/instanced_mesh.d.ts +286 -0
  65. package/build/renderable/instanced_mesh.d.ts.map +1 -0
  66. package/build/renderable/mesh.d.ts +242 -23
  67. package/build/renderable/mesh.d.ts.map +1 -1
  68. package/build/renderable/renderable.d.ts +6 -4
  69. package/build/renderable/renderable.d.ts.map +1 -1
  70. package/build/renderable/sprite3d.d.ts +17 -6
  71. package/build/renderable/sprite3d.d.ts.map +1 -1
  72. package/build/renderable/text/text.d.ts.map +1 -1
  73. package/build/system/device.d.ts +11 -40
  74. package/build/system/device.d.ts.map +1 -1
  75. package/build/system/platform.d.ts +0 -16
  76. package/build/system/platform.d.ts.map +1 -1
  77. package/build/utils/utils.d.ts +2 -0
  78. package/build/utils/utils.d.ts.map +1 -1
  79. package/build/video/canvas/canvas_renderer.d.ts +22 -16
  80. package/build/video/canvas/canvas_renderer.d.ts.map +1 -1
  81. package/build/video/{webgl/effects → effects}/blur.d.ts +2 -2
  82. package/build/video/effects/blur.d.ts.map +1 -0
  83. package/build/video/{webgl/effects → effects}/chromaticAberration.d.ts +2 -2
  84. package/build/video/effects/chromaticAberration.d.ts.map +1 -0
  85. package/build/video/{webgl/effects → effects}/colorMatrix.d.ts +3 -3
  86. package/build/video/effects/colorMatrix.d.ts.map +1 -0
  87. package/build/video/{webgl/effects → effects}/desaturate.d.ts +1 -1
  88. package/build/video/effects/desaturate.d.ts.map +1 -0
  89. package/build/video/{webgl/effects → effects}/dissolve.d.ts +2 -2
  90. package/build/video/effects/dissolve.d.ts.map +1 -0
  91. package/build/video/{webgl/effects → effects}/dropShadow.d.ts +2 -2
  92. package/build/video/effects/dropShadow.d.ts.map +1 -0
  93. package/build/video/{webgl/effects → effects}/flash.d.ts +2 -2
  94. package/build/video/effects/flash.d.ts.map +1 -0
  95. package/build/video/{webgl/effects → effects}/glow.d.ts +2 -2
  96. package/build/video/effects/glow.d.ts.map +1 -0
  97. package/build/video/effects/glsl_realization.d.ts +18 -0
  98. package/build/video/effects/glsl_realization.d.ts.map +1 -0
  99. package/build/video/{webgl/effects → effects}/hologram.d.ts +2 -2
  100. package/build/video/effects/hologram.d.ts.map +1 -0
  101. package/build/video/{webgl/effects → effects}/invert.d.ts +1 -1
  102. package/build/video/effects/invert.d.ts.map +1 -0
  103. package/build/video/{webgl/effects → effects}/outline.d.ts +2 -2
  104. package/build/video/effects/outline.d.ts.map +1 -0
  105. package/build/video/{webgl/effects → effects}/pixelate.d.ts +2 -2
  106. package/build/video/effects/pixelate.d.ts.map +1 -0
  107. package/build/video/{webgl/effects → effects}/radialGradient.d.ts +3 -4
  108. package/build/video/effects/radialGradient.d.ts.map +1 -0
  109. package/build/video/{webgl/effects → effects}/scanline.d.ts +2 -2
  110. package/build/video/effects/scanline.d.ts.map +1 -0
  111. package/build/video/{webgl/effects → effects}/sepia.d.ts +1 -1
  112. package/build/video/effects/sepia.d.ts.map +1 -0
  113. package/build/video/{webgl → effects}/shadereffect.d.ts +133 -25
  114. package/build/video/effects/shadereffect.d.ts.map +1 -0
  115. package/build/video/{webgl/effects → effects}/shine.d.ts +2 -2
  116. package/build/video/effects/shine.d.ts.map +1 -0
  117. package/build/video/{webgl/effects → effects}/tintPulse.d.ts +2 -2
  118. package/build/video/effects/tintPulse.d.ts.map +1 -0
  119. package/build/video/{webgl/effects → effects}/vignette.d.ts +2 -2
  120. package/build/video/effects/vignette.d.ts.map +1 -0
  121. package/build/video/{webgl/effects → effects}/wave.d.ts +2 -2
  122. package/build/video/effects/wave.d.ts.map +1 -0
  123. package/build/video/effects/wgsl/layout.d.ts +28 -0
  124. package/build/video/effects/wgsl/layout.d.ts.map +1 -0
  125. package/build/video/effects/wgsl/parse.d.ts +9 -0
  126. package/build/video/effects/wgsl/parse.d.ts.map +1 -0
  127. package/build/video/effects/wgsl/scaffold.d.ts +43 -0
  128. package/build/video/effects/wgsl/scaffold.d.ts.map +1 -0
  129. package/build/video/effects/wgsl_realization.d.ts +83 -0
  130. package/build/video/effects/wgsl_realization.d.ts.map +1 -0
  131. package/build/video/gpu/batcher.d.ts +71 -0
  132. package/build/video/gpu/batcher.d.ts.map +1 -0
  133. package/build/video/gpu/instancerecord.d.ts +164 -0
  134. package/build/video/gpu/instancerecord.d.ts.map +1 -0
  135. package/build/video/gpu/meshchunk.d.ts +49 -0
  136. package/build/video/gpu/meshchunk.d.ts.map +1 -0
  137. package/build/video/gpu/meshvertex.d.ts +54 -0
  138. package/build/video/gpu/meshvertex.d.ts.map +1 -0
  139. package/build/video/gpu/primitives.d.ts +60 -0
  140. package/build/video/gpu/primitives.d.ts.map +1 -0
  141. package/build/video/gpu/quadcorners.d.ts +11 -0
  142. package/build/video/gpu/quadcorners.d.ts.map +1 -0
  143. package/build/video/gpu/textureslots.d.ts +122 -0
  144. package/build/video/gpu/textureslots.d.ts.map +1 -0
  145. package/build/video/gpu/texturestore.d.ts +139 -0
  146. package/build/video/gpu/texturestore.d.ts.map +1 -0
  147. package/build/video/gpu/topology.d.ts +43 -0
  148. package/build/video/gpu/topology.d.ts.map +1 -0
  149. package/build/video/gpu/vertexformat.d.ts +72 -0
  150. package/build/video/gpu/vertexformat.d.ts.map +1 -0
  151. package/build/video/gradient.d.ts +14 -5
  152. package/build/video/gradient.d.ts.map +1 -1
  153. package/build/video/renderer.d.ts +153 -8
  154. package/build/video/renderer.d.ts.map +1 -1
  155. package/build/video/rendertarget/canvasrendertarget.d.ts +7 -6
  156. package/build/video/rendertarget/canvasrendertarget.d.ts.map +1 -1
  157. package/build/video/rendertarget/render_target_pool.d.ts +2 -2
  158. package/build/video/rendertarget/render_target_pool.d.ts.map +1 -1
  159. package/build/video/rendertarget/webglrendertarget.d.ts +38 -2
  160. package/build/video/rendertarget/webglrendertarget.d.ts.map +1 -1
  161. package/build/video/rendertarget/webgpurendertarget.d.ts +83 -0
  162. package/build/video/rendertarget/webgpurendertarget.d.ts.map +1 -0
  163. package/build/video/texture/atlas.d.ts.map +1 -1
  164. package/build/video/texture/cache.d.ts +20 -2
  165. package/build/video/texture/cache.d.ts.map +1 -1
  166. package/build/video/texture/noise_texture2d.d.ts +2 -2
  167. package/build/video/utils/autodetect.d.ts.map +1 -1
  168. package/build/video/video.d.ts +1 -55
  169. package/build/video/video.d.ts.map +1 -1
  170. package/build/video/webgl/batchers/batcher.d.ts +132 -35
  171. package/build/video/webgl/batchers/batcher.d.ts.map +1 -1
  172. package/build/video/webgl/batchers/lit_mesh_batcher.d.ts +14 -0
  173. package/build/video/webgl/batchers/lit_mesh_batcher.d.ts.map +1 -1
  174. package/build/video/webgl/batchers/lit_quad_batcher.d.ts +63 -36
  175. package/build/video/webgl/batchers/lit_quad_batcher.d.ts.map +1 -1
  176. package/build/video/webgl/batchers/material_batcher.d.ts +29 -20
  177. package/build/video/webgl/batchers/material_batcher.d.ts.map +1 -1
  178. package/build/video/webgl/batchers/mesh_batcher.d.ts +308 -14
  179. package/build/video/webgl/batchers/mesh_batcher.d.ts.map +1 -1
  180. package/build/video/webgl/batchers/primitive_batcher.d.ts +2 -2
  181. package/build/video/webgl/batchers/primitive_batcher.d.ts.map +1 -1
  182. package/build/video/webgl/batchers/quad_batcher.d.ts +0 -2
  183. package/build/video/webgl/batchers/quad_batcher.d.ts.map +1 -1
  184. package/build/video/webgl/buffer/index.d.ts +1 -1
  185. package/build/video/webgl/buffer/instance_buffer.d.ts +54 -0
  186. package/build/video/webgl/buffer/instance_buffer.d.ts.map +1 -0
  187. package/build/video/webgl/buffer/retained_geometry.d.ts +83 -0
  188. package/build/video/webgl/buffer/retained_geometry.d.ts.map +1 -0
  189. package/build/video/webgl/buffer/uniformblock.d.ts +81 -0
  190. package/build/video/webgl/buffer/uniformblock.d.ts.map +1 -0
  191. package/build/video/webgl/buffer/vertexstate.d.ts +101 -0
  192. package/build/video/webgl/buffer/vertexstate.d.ts.map +1 -0
  193. package/build/video/webgl/glshader.d.ts +101 -8
  194. package/build/video/webgl/glshader.d.ts.map +1 -1
  195. package/build/video/webgl/lighting/constants.d.ts +20 -8
  196. package/build/video/webgl/lighting/constants.d.ts.map +1 -1
  197. package/build/video/webgl/lighting/pack.d.ts +1 -1
  198. package/build/video/webgl/lighting/pack3d.d.ts +27 -11
  199. package/build/video/webgl/lighting/pack3d.d.ts.map +1 -1
  200. package/build/video/webgl/lighting/std140.d.ts +110 -0
  201. package/build/video/webgl/lighting/std140.d.ts.map +1 -0
  202. package/build/video/webgl/shaders/multitexture-lit.d.ts +7 -3
  203. package/build/video/webgl/shaders/multitexture-lit.d.ts.map +1 -1
  204. package/build/video/webgl/texture/store.d.ts +52 -0
  205. package/build/video/webgl/texture/store.d.ts.map +1 -0
  206. package/build/video/webgl/utils/maxtextures.d.ts +37 -0
  207. package/build/video/webgl/utils/maxtextures.d.ts.map +1 -0
  208. package/build/video/webgl/utils/samplercache.d.ts +69 -0
  209. package/build/video/webgl/utils/samplercache.d.ts.map +1 -0
  210. package/build/video/webgl/utils/string.d.ts +16 -0
  211. package/build/video/webgl/utils/string.d.ts.map +1 -1
  212. package/build/video/webgl/utils/topology.d.ts +24 -0
  213. package/build/video/webgl/utils/topology.d.ts.map +1 -0
  214. package/build/video/webgl/utils/vertexformat.d.ts +27 -0
  215. package/build/video/webgl/utils/vertexformat.d.ts.map +1 -0
  216. package/build/video/webgl/webgl_renderer.d.ts +148 -30
  217. package/build/video/webgl/webgl_renderer.d.ts.map +1 -1
  218. package/build/video/webgpu/batchers/lit_mesh_batcher.d.ts +40 -0
  219. package/build/video/webgpu/batchers/lit_mesh_batcher.d.ts.map +1 -0
  220. package/build/video/webgpu/batchers/lit_quad_batcher.d.ts +82 -0
  221. package/build/video/webgpu/batchers/lit_quad_batcher.d.ts.map +1 -0
  222. package/build/video/webgpu/batchers/mesh_batcher.d.ts +301 -0
  223. package/build/video/webgpu/batchers/mesh_batcher.d.ts.map +1 -0
  224. package/build/video/webgpu/batchers/primitive_batcher.d.ts +39 -0
  225. package/build/video/webgpu/batchers/primitive_batcher.d.ts.map +1 -0
  226. package/build/video/webgpu/batchers/quad_batcher.d.ts +143 -0
  227. package/build/video/webgpu/batchers/quad_batcher.d.ts.map +1 -0
  228. package/build/video/webgpu/batchers/webgpu_batcher.d.ts +70 -0
  229. package/build/video/webgpu/batchers/webgpu_batcher.d.ts.map +1 -0
  230. package/build/video/webgpu/buffer/arena.d.ts +64 -0
  231. package/build/video/webgpu/buffer/arena.d.ts.map +1 -0
  232. package/build/video/webgpu/buffer/instance_buffer.d.ts +65 -0
  233. package/build/video/webgpu/buffer/instance_buffer.d.ts.map +1 -0
  234. package/build/video/webgpu/buffer/retained_geometry.d.ts +55 -0
  235. package/build/video/webgpu/buffer/retained_geometry.d.ts.map +1 -0
  236. package/build/video/webgpu/buffer/uniformring.d.ts +68 -0
  237. package/build/video/webgpu/buffer/uniformring.d.ts.map +1 -0
  238. package/build/video/webgpu/effect_binding.d.ts +17 -0
  239. package/build/video/webgpu/effect_binding.d.ts.map +1 -0
  240. package/build/video/webgpu/pipeline/bindgroups.d.ts +36 -0
  241. package/build/video/webgpu/pipeline/bindgroups.d.ts.map +1 -0
  242. package/build/video/webgpu/pipeline/cache.d.ts +173 -0
  243. package/build/video/webgpu/pipeline/cache.d.ts.map +1 -0
  244. package/build/video/webgpu/renderers/tmxlayer/orthogonal.d.ts +90 -0
  245. package/build/video/webgpu/renderers/tmxlayer/orthogonal.d.ts.map +1 -0
  246. package/build/video/webgpu/shaders/mesh-instanced.d.ts +60 -0
  247. package/build/video/webgpu/shaders/mesh-instanced.d.ts.map +1 -0
  248. package/build/video/webgpu/texture/compressed.d.ts +33 -0
  249. package/build/video/webgpu/texture/compressed.d.ts.map +1 -0
  250. package/build/video/webgpu/texture/frametexture.d.ts +65 -0
  251. package/build/video/webgpu/texture/frametexture.d.ts.map +1 -0
  252. package/build/video/webgpu/texture/store.d.ts +149 -0
  253. package/build/video/webgpu/texture/store.d.ts.map +1 -0
  254. package/build/video/webgpu/webgpu_renderer.d.ts +536 -0
  255. package/build/video/webgpu/webgpu_renderer.d.ts.map +1 -0
  256. package/package.json +2 -2
  257. package/build/video/webgl/effects/blur.d.ts.map +0 -1
  258. package/build/video/webgl/effects/chromaticAberration.d.ts.map +0 -1
  259. package/build/video/webgl/effects/colorMatrix.d.ts.map +0 -1
  260. package/build/video/webgl/effects/desaturate.d.ts.map +0 -1
  261. package/build/video/webgl/effects/dissolve.d.ts.map +0 -1
  262. package/build/video/webgl/effects/dropShadow.d.ts.map +0 -1
  263. package/build/video/webgl/effects/flash.d.ts.map +0 -1
  264. package/build/video/webgl/effects/glow.d.ts.map +0 -1
  265. package/build/video/webgl/effects/hologram.d.ts.map +0 -1
  266. package/build/video/webgl/effects/invert.d.ts.map +0 -1
  267. package/build/video/webgl/effects/outline.d.ts.map +0 -1
  268. package/build/video/webgl/effects/pixelate.d.ts.map +0 -1
  269. package/build/video/webgl/effects/radialGradient.d.ts.map +0 -1
  270. package/build/video/webgl/effects/scanline.d.ts.map +0 -1
  271. package/build/video/webgl/effects/sepia.d.ts.map +0 -1
  272. package/build/video/webgl/effects/shine.d.ts.map +0 -1
  273. package/build/video/webgl/effects/tintPulse.d.ts.map +0 -1
  274. package/build/video/webgl/effects/vignette.d.ts.map +0 -1
  275. package/build/video/webgl/effects/wave.d.ts.map +0 -1
  276. package/build/video/webgl/shadereffect.d.ts.map +0 -1
@@ -0,0 +1,286 @@
1
+ /**
2
+ * A {@link Mesh} drawn many times from one copy of its geometry.
3
+ *
4
+ * Ordinary meshes pay for every repeat: a forest of five thousand trees is
5
+ * five thousand geometries on the GPU, each re-uploaded when it changes. An
6
+ * `InstancedMesh` uploads the geometry **once** and stamps out copies from a
7
+ * small per-instance record, so cost scales with the number of instances
8
+ * rather than with `instances × vertices`, and the whole thing draws in a
9
+ * single call.
10
+ *
11
+ * Every `Mesh` setting works unchanged — `model` + `material` from an OBJ,
12
+ * raw `vertices`/`uvs`/`indices`, `lit`, `cullBackFaces`, `rightHanded`,
13
+ * `tint`, `textureRepeat`, the lot. What an instanced mesh adds is the
14
+ * instance buffer:
15
+ *
16
+ * - a **transform** per instance, always present;
17
+ * - a **colour** per instance, when `instanceColors` is declared, multiplied
18
+ * into the mesh tint;
19
+ * - an opaque **`vec4`** per instance, when `instanceData` is declared. The
20
+ * built-in lit shading reads its `rgb` as emissive; a custom
21
+ * {@link Mesh#shader} may read it as a wind phase, an atlas offset, a
22
+ * random seed — whatever the shader wants.
23
+ *
24
+ * The mesh's own position, rotation and scale keep their ordinary meaning and
25
+ * act as the **group** transform: moving an `InstancedMesh` moves every
26
+ * instance with one uniform write and re-uploads nothing.
27
+ *
28
+ * Requires a GPU backend (`renderer.supportsInstancing`). Under the Canvas
29
+ * renderer the instances are drawn one at a time through the ordinary CPU
30
+ * mesh path — correct, but without any of the benefit.
31
+ * @augments Mesh
32
+ * @category Rendering
33
+ * @example
34
+ * const forest = new me.InstancedMesh(0, 0, {
35
+ * model: "tree",
36
+ * material: "tree",
37
+ * width: 64,
38
+ * lit: true,
39
+ * instanceCount: 5000, // pre-allocate
40
+ * instanceColors: true,
41
+ * instanceData: true,
42
+ * });
43
+ *
44
+ * const placement = new me.Matrix3d(); // one scratch — zero allocation
45
+ * for (let i = 0; i < forest.instanceCount; i++) {
46
+ * placement.identity().translate(x, y, z).scale(s);
47
+ * forest.setInstance(i, placement);
48
+ * forest.setInstanceColor(i, autumnTint);
49
+ * forest.setInstanceData(i, windPhase, seed, 0, 0);
50
+ * }
51
+ *
52
+ * // draw only the nearest 1200 — no re-upload, just a smaller draw
53
+ * forest.visibleInstanceCount = 1200;
54
+ * app.world.addChild(forest, 10);
55
+ */
56
+ export default class InstancedMesh extends Mesh {
57
+ /**
58
+ * @param {number} x - the x coordinate of the group origin
59
+ * @param {number} y - the y coordinate of the group origin
60
+ * @param {object} settings - every {@link Mesh} setting, plus those below
61
+ * @param {number} [settings.instanceCount=0] - number of instances to pre-allocate. Instances start at the group origin (identity transform) until placed; `addInstance` grows past this.
62
+ * @param {boolean} [settings.instanceColors=false] - give each instance its own colour (16 bytes per instance), multiplied into the mesh tint
63
+ * @param {boolean} [settings.instanceData=false] - give each instance an opaque `vec4` (16 bytes per instance). Read as emissive by the built-in lit shading, or as anything at all by a custom mesh shader.
64
+ */
65
+ constructor(x: number, y: number, settings: {
66
+ instanceCount?: number | undefined;
67
+ instanceColors?: boolean | undefined;
68
+ instanceData?: boolean | undefined;
69
+ });
70
+ /**
71
+ * How this mesh's per-instance records are laid out — record width and
72
+ * the offset of each opt-in slot. Consumed by the batchers to describe
73
+ * the instance vertex buffer.
74
+ * @type {object}
75
+ * @ignore
76
+ */
77
+ instanceLayout: object;
78
+ /**
79
+ * The packed instance records, `instanceLayout.floats` per instance.
80
+ * Editable in place for bulk updates — announce those with
81
+ * {@link InstancedMesh#needsInstanceUpdate} or
82
+ * {@link InstancedMesh#markInstancesDirty}, since writing here bypasses
83
+ * the setters that track the dirty range.
84
+ * @type {Float32Array}
85
+ */
86
+ instanceBuffer: Float32Array;
87
+ /**
88
+ * bumped whenever the buffer is reallocated, so a renderer holding a
89
+ * GPU copy knows its capacity assumption is stale
90
+ * @type {number}
91
+ * @ignore
92
+ */
93
+ _instanceVersion: number;
94
+ /** @ignore */
95
+ _instanceRevision: number;
96
+ /** @ignore */
97
+ _spanFromRevision: number;
98
+ /** @ignore */
99
+ _dirtyFirst: number;
100
+ /** @ignore */
101
+ _dirtyLast: number;
102
+ /** @ignore */
103
+ _instanceCount: number;
104
+ /** @ignore */
105
+ _visibleInstanceCount: number;
106
+ /** @ignore */
107
+ _cullRevision: number;
108
+ set instanceCount(count: number);
109
+ /**
110
+ * How many instances this mesh holds.
111
+ *
112
+ * Growing pre-allocates the new records as identity transforms (an
113
+ * unplaced instance sits at the group origin rather than collapsing onto
114
+ * a zero matrix); shrinking keeps the allocation, so a count that
115
+ * oscillates does not thrash it.
116
+ * @type {number}
117
+ */
118
+ get instanceCount(): number;
119
+ set visibleInstanceCount(count: number);
120
+ /**
121
+ * How many instances are actually drawn, counted from the first.
122
+ *
123
+ * The cheap culling and level-of-detail knob: sort the instances by
124
+ * distance once, then draw fewer of them by moving this single number —
125
+ * no re-upload, no rebuild. Defaults to every instance (`-1`).
126
+ * @type {number}
127
+ * @example
128
+ * forest.visibleInstanceCount = playerIsIndoors ? 0 : 1200;
129
+ */
130
+ get visibleInstanceCount(): number;
131
+ /**
132
+ * Append an instance, growing the buffer as needed.
133
+ * @param {Matrix3d} [transform] - where this instance sits, relative to the group. Defaults to the group origin.
134
+ * @param {object} [options] - optional per-instance slots
135
+ * @param {Color} [options.color] - instance colour (requires `instanceColors`)
136
+ * @param {number[]} [options.data] - four numbers for the custom slot (requires `instanceData`)
137
+ * @returns {number} the new instance's index
138
+ */
139
+ addInstance(transform?: Matrix3d, options?: {
140
+ color?: any;
141
+ data?: number[] | undefined;
142
+ }): number;
143
+ /**
144
+ * Remove an instance by moving the last one into its place.
145
+ *
146
+ * Swapping is what keeps this O(1) instead of shifting every record after
147
+ * the hole — but it means **indices are not stable across a removal**: the
148
+ * instance that was last now answers to `index`. Callers holding indices
149
+ * must re-read them, or avoid removal in favour of
150
+ * {@link InstancedMesh#visibleInstanceCount}.
151
+ * @param {number} index - the instance to remove
152
+ */
153
+ removeInstance(index: number): void;
154
+ /**
155
+ * Place one instance.
156
+ * @param {number} index - the instance to place
157
+ * @param {Matrix3d} transform - where it sits, relative to the group
158
+ */
159
+ setInstance(index: number, transform: Matrix3d): void;
160
+ /**
161
+ * Read one instance's transform back.
162
+ * @param {number} index - the instance to read
163
+ * @param {Matrix3d} [out] - matrix to write into; a new one is allocated when omitted
164
+ * @returns {Matrix3d|undefined} the transform, or `undefined` for an out-of-range index
165
+ */
166
+ getInstance(index: number, out?: Matrix3d): Matrix3d | undefined;
167
+ /**
168
+ * Set one instance's colour, multiplied into the mesh tint.
169
+ * @param {number} index - the instance to colour
170
+ * @param {Color} color - the instance colour
171
+ */
172
+ setInstanceColor(index: number, color: Color): void;
173
+ /**
174
+ * Set one instance's custom `vec4`.
175
+ * @param {number} index - the instance to write
176
+ * @param {number} x - first component (emissive red, under the built-in lit shading)
177
+ * @param {number} y - second component
178
+ * @param {number} z - third component
179
+ * @param {number} [w=0] - fourth component
180
+ */
181
+ setInstanceData(index: number, x: number, y: number, z: number, w?: number): void;
182
+ /**
183
+ * Announce that a span of instances was edited directly through
184
+ * {@link InstancedMesh#instanceBuffer}, so the next draw re-uploads it.
185
+ * The per-instance setters do this themselves.
186
+ * @param {number} first - first instance changed
187
+ * @param {number} count - how many
188
+ */
189
+ markInstancesDirty(first: number, count: number): void;
190
+ /**
191
+ * Announce that the whole instance buffer was edited in place. The
192
+ * instancing counterpart of {@link Mesh#needsUpdate} — and, like it, a
193
+ * signal rather than a state, so it is write-only.
194
+ * @type {boolean}
195
+ * @example
196
+ * forest.instanceBuffer.set(myRecords);
197
+ * forest.needsInstanceUpdate = true;
198
+ */
199
+ set needsInstanceUpdate(value: any);
200
+ /**
201
+ * The dirty span, in floats, as `[first, lastExclusive)`. Empty when
202
+ * nothing changed since the last upload.
203
+ * @returns {number[]} the span
204
+ * @ignore
205
+ */
206
+ dirtyRange(): number[];
207
+ /**
208
+ * What one GPU buffer must upload to catch up, given the revision it last
209
+ * reached. Replaces a shared "clear the dirty flag" step, which the first
210
+ * consumer would drain out from under the second.
211
+ * @param {number} uploadedRevision - the revision that buffer holds
212
+ * @returns {object} `{first, count, full, revision}` — float span, or `full`
213
+ * @ignore
214
+ */
215
+ instanceUpload(uploadedRevision: number): object;
216
+ /**
217
+ * Called by the batcher once the dirty span has been uploaded.
218
+ * @ignore
219
+ */
220
+ clearInstanceDirty(): void;
221
+ /**
222
+ * The world-space bounding box of every instance, so the whole group
223
+ * frustum-culls as one object.
224
+ *
225
+ * Bounds the prototype geometry through each instance transform and then
226
+ * through the group placement — correct before the first draw, like the
227
+ * base implementation, and independent of what any draw left behind.
228
+ * @returns {AABB3d} the union of all instance bounds (reused instance)
229
+ */
230
+ /**
231
+ * Resize the renderable's own 2D bounds box so it encloses every
232
+ * instance.
233
+ *
234
+ * This is what makes the group frustum-cull correctly. `Camera3d.isVisible`
235
+ * tests a sphere derived from `getBounds()` — the flat width/height box —
236
+ * **not** {@link InstancedMesh#getBounds3d}. Left at the prototype's size,
237
+ * a forest scattered over thousands of units presents a box a few tens of
238
+ * pixels across at the group origin: pan the camera just past that origin
239
+ * and every instance disappears at once, while still on screen.
240
+ * @ignore
241
+ */
242
+ _refreshCullVolume(): any;
243
+ _cullRadius: number | undefined;
244
+ /**
245
+ * Draw the instanced mesh. Under a GPU backend this is one instanced
246
+ * draw call; the Canvas renderer has no instancing, so each instance is
247
+ * drawn through the ordinary mesh path instead.
248
+ * @param {CanvasRenderer|WebGLRenderer} renderer - a renderer instance
249
+ * @param {Camera2d} [viewport] - the camera rendering this frame
250
+ */
251
+ draw(renderer: CanvasRenderer | WebGLRenderer, viewport?: Camera2d): void;
252
+ /**
253
+ * Fallback for renderers without instancing (Canvas): walk the instances
254
+ * and draw the prototype once per instance, composing the group and
255
+ * instance transforms by hand. Correct, and as slow as the uninstanced
256
+ * scene it replaces — the point is that a scene authored for instancing
257
+ * still renders everywhere.
258
+ * @param {CanvasRenderer} renderer - a renderer instance
259
+ * @param {Camera2d} [viewport] - the camera rendering this frame
260
+ * @ignore
261
+ */
262
+ _drawInstancesIndividually(renderer: CanvasRenderer, viewport?: Camera2d): void;
263
+ /**
264
+ * Release the instance records along with the mesh.
265
+ * @ignore
266
+ */
267
+ /**
268
+ * Draw a ground shadow for every visible instance — one call for the whole
269
+ * set, over the instance buffer the mesh itself just drew from (#1515).
270
+ *
271
+ * The group matrix is passed with its Y basis column zeroed and its
272
+ * translation Y set to the ground, so whatever Y the shadow vertex stage
273
+ * produces is flattened onto the floor. That is what lets the ground
274
+ * height reach the shader without a new uniform.
275
+ *
276
+ * One ground height serves the whole set — flat terrain. Per-instance
277
+ * ground height would have to ride the `instanceData` slot, which the
278
+ * built-in shading already reads as emissive.
279
+ * @param {WebGLRenderer} renderer - the active renderer
280
+ * @ignore
281
+ */
282
+ _drawInstancedGroundShadow(renderer: WebGLRenderer): void;
283
+ }
284
+ import Mesh from "./mesh.js";
285
+ import { Matrix3d } from "../math/matrix3d.ts";
286
+ //# sourceMappingURL=instanced_mesh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instanced_mesh.d.ts","sourceRoot":"","sources":["../../src/renderable/instanced_mesh.js"],"names":[],"mappings":"AAsBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH;IACC;;;;;;;OAOG;IACH,eAPW,MAAM,KACN,MAAM,YAEd;QAA0B,aAAa;QACZ,cAAc;QACd,YAAY;KACzC,EAiEA;IA7DA;;;;;;OAMG;IACH,gBAHU,MAAM,CAMf;IAED;;;;;;;OAOG;IACH,gBAFU,YAAY,CAEmB;IAEzC;;;;;OAKG;IACH,kBAHU,MAAM,CAGS;IAUzB,cAAc;IACd,0BAA0B;IAG1B,cAAc;IACd,0BAA0B;IAE1B,cAAc;IACd,oBAA2B;IAC3B,cAAc;IACd,mBAAmB;IAEnB,cAAc;IACd,uBAAuB;IACvB,cAAc;IACd,8BAA+B;IAE/B,cAAc;IACd,sBAAuB;IAoBxB,yBANU,MAAM,EAgDf;IAvDD;;;;;;;;OAQG;IACH,qBAFU,MAAM,CAIf;IA8DD,gCAVU,MAAM,EAiBf;IAvBD;;;;;;;;;OASG;IACH,4BAJU,MAAM,CAQf;IAWD;;;;;;;OAOG;IACH,wBANW,QAAQ,YAEhB;QAAwB,KAAK;QACF,IAAI;KAC/B,GAAU,MAAM,CAqBlB;IAED;;;;;;;;;OASG;IACH,sBAFW,MAAM,QAiBhB;IAED;;;;OAIG;IACH,mBAHW,MAAM,aACN,QAAQ,QAYlB;IAED;;;;;OAKG;IACH,mBAJW,MAAM,QACN,QAAQ,GACN,QAAQ,GAAC,SAAS,CAW9B;IAED;;;;OAIG;IACH,wBAHW,MAAM,SACN,KAAK,QAaf;IAED;;;;;;;OAOG;IACH,uBANW,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,MACN,MAAM,QAahB;IAED;;;;;;OAMG;IACH,0BAHW,MAAM,SACN,MAAM,QAyBhB;IAED;;;;;;;;OAQG;IAEH,oCAIC;IAED;;;;;OAKG;IACH,cAHa,MAAM,EAAE,CAYpB;IAED;;;;;;;OAOG;IACH,iCAJW,MAAM,GACJ,MAAM,CAclB;IAED;;;OAGG;IACH,2BAIC;IAED;;;;;;;;OAQG;IACH;;;;;;;;;;;OAWG;IACH,0BA8BC;IAVC,gCAAsC;IAkDxC;;;;;;OAMG;IACH,eAHW,cAAc,GAAC,aAAa,aAC5B,QAAQ,QA6BlB;IAED;;;;;;;;;OASG;IACH,qCAJW,cAAc,aACd,QAAQ,QA6BlB;IAED;;;OAGG;IACH;;;;;;;;;;;;;;OAcG;IACH,qCAHW,aAAa,QAqEvB;CAOD;iBAlsBgB,WAAW;yBATH,qBAAqB"}