@woosh/meep-engine 2.108.2 → 2.108.4

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 (122) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/build/meep.cjs +490 -193
  3. package/build/meep.min.js +1 -1
  4. package/build/meep.module.js +490 -193
  5. package/package.json +1 -1
  6. package/src/core/bvh2/binary/2/BinaryUint32BVH.d.ts +6 -0
  7. package/src/core/bvh2/binary/2/BinaryUint32BVH.d.ts.map +1 -1
  8. package/src/core/bvh2/binary/2/BinaryUint32BVH.js +15 -3
  9. package/src/core/bvh2/bvh3/build_triangle_morton_codes.js +3 -3
  10. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.d.ts.map +1 -1
  11. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.js +25 -14
  12. package/src/core/collection/array/arrayQuickSort.d.ts +0 -9
  13. package/src/core/collection/array/arrayQuickSort.d.ts.map +1 -1
  14. package/src/core/collection/array/arrayQuickSort.js +0 -73
  15. package/src/core/collection/array/array_quick_sort_by_comparator.d.ts +10 -0
  16. package/src/core/collection/array/array_quick_sort_by_comparator.d.ts.map +1 -0
  17. package/src/core/collection/array/array_quick_sort_by_comparator.js +75 -0
  18. package/src/core/collection/array/array_quick_sort_by_lookup.d.ts +8 -0
  19. package/src/core/collection/array/array_quick_sort_by_lookup.d.ts.map +1 -0
  20. package/src/core/collection/array/array_quick_sort_by_lookup.js +78 -0
  21. package/src/core/geom/2d/triangle2d_get_barycentric.d.ts +15 -0
  22. package/src/core/geom/2d/triangle2d_get_barycentric.d.ts.map +1 -0
  23. package/src/core/geom/2d/triangle2d_get_barycentric.js +48 -0
  24. package/src/core/geom/3d/aabb/aabb3_from_v3_array.d.ts.map +1 -1
  25. package/src/core/geom/3d/aabb/aabb3_from_v3_array.js +2 -7
  26. package/src/core/geom/3d/aabb3_compute_from_triangle.d.ts +11 -0
  27. package/src/core/geom/3d/aabb3_compute_from_triangle.d.ts.map +1 -0
  28. package/src/core/geom/3d/aabb3_compute_from_triangle.js +43 -0
  29. package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.js +5 -5
  30. package/src/core/geom/3d/sphere/harmonics/sh_compute_K.d.ts +9 -0
  31. package/src/core/geom/3d/sphere/harmonics/sh_compute_K.d.ts.map +1 -0
  32. package/src/core/geom/3d/sphere/harmonics/sh_compute_K.js +17 -0
  33. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts +6 -3
  34. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts.map +1 -1
  35. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +56 -18
  36. package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_walk_towards_containing_tetrahedron.d.ts +1 -1
  37. package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_walk_towards_containing_tetrahedron.d.ts.map +1 -1
  38. package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_walk_towards_containing_tetrahedron.js +11 -4
  39. package/src/core/geom/3d/tetrahedra/{GetDepthForTetrahedronProbe.glsl → triangle/GetDepthForTetrahedronProbe.glsl} +17 -10
  40. package/src/core/geom/3d/tetrahedra/triangle/prototype.d.ts +2 -0
  41. package/src/core/geom/3d/tetrahedra/triangle/prototype.d.ts.map +1 -0
  42. package/src/core/geom/3d/tetrahedra/triangle/prototype.js +128 -0
  43. package/src/core/geom/3d/tetrahedra/triangle/trace_triangular_depth_map.d.ts +13 -0
  44. package/src/core/geom/3d/tetrahedra/triangle/trace_triangular_depth_map.d.ts.map +1 -0
  45. package/src/core/geom/3d/tetrahedra/triangle/trace_triangular_depth_map.js +120 -0
  46. package/src/core/geom/3d/tetrahedra/triangle/triangle_encode_rasterized_depth.d.ts +3 -0
  47. package/src/core/geom/3d/tetrahedra/triangle/triangle_encode_rasterized_depth.d.ts.map +1 -0
  48. package/src/core/geom/3d/tetrahedra/triangle/triangle_encode_rasterized_depth.js +106 -0
  49. package/src/core/math/factorial.d.ts +7 -0
  50. package/src/core/math/factorial.d.ts.map +1 -0
  51. package/src/core/math/factorial.js +15 -0
  52. package/src/core/math/factorial.spec.d.ts +2 -0
  53. package/src/core/math/factorial.spec.d.ts.map +1 -0
  54. package/src/core/math/factorial.spec.js +9 -0
  55. package/src/core/model/DebouncedObservedBoolean.d.ts +1 -1
  56. package/src/core/model/DebouncedObservedBoolean.d.ts.map +1 -1
  57. package/src/core/model/node-graph/node/NodeDescription.d.ts +6 -4
  58. package/src/engine/asset/loaders/material/computeTextureEquality.d.ts.map +1 -1
  59. package/src/engine/asset/loaders/material/computeTextureEquality.js +8 -1
  60. package/src/engine/graphics/ecs/mesh-v2/render/adapters/AbstractRenderAdapter.d.ts.map +1 -1
  61. package/src/engine/graphics/ecs/mesh-v2/render/adapters/AbstractRenderAdapter.js +3 -1
  62. package/src/engine/graphics/filter/sampler2d_flipY_in_place.d.ts +8 -0
  63. package/src/engine/graphics/filter/sampler2d_flipY_in_place.d.ts.map +1 -0
  64. package/src/engine/graphics/filter/{FlipArrayInPlace.js → sampler2d_flipY_in_place.js} +1 -1
  65. package/src/engine/graphics/geometry/bvh/buffered/bvh32_set_leaf_from_triangle.d.ts.map +1 -1
  66. package/src/engine/graphics/geometry/bvh/buffered/bvh32_set_leaf_from_triangle.js +5 -27
  67. package/src/engine/graphics/render/Lines.d.ts.map +1 -1
  68. package/src/engine/graphics/render/Lines.js +10 -2
  69. package/src/engine/graphics/sh3/gi/material/MaterialTransformer.d.ts +24 -0
  70. package/src/engine/graphics/sh3/gi/material/MaterialTransformer.d.ts.map +1 -0
  71. package/src/engine/graphics/sh3/gi/material/MaterialTransformer.js +293 -0
  72. package/src/engine/graphics/sh3/gi/material/build_fragment_shader.d.ts +6 -0
  73. package/src/engine/graphics/sh3/gi/material/build_fragment_shader.d.ts.map +1 -0
  74. package/src/engine/graphics/sh3/gi/material/build_fragment_shader.js +71 -0
  75. package/src/engine/graphics/sh3/gi/material/build_vertex_shader.d.ts +6 -0
  76. package/src/engine/graphics/sh3/gi/material/build_vertex_shader.d.ts.map +1 -0
  77. package/src/engine/graphics/sh3/gi/material/build_vertex_shader.js +256 -0
  78. package/src/engine/graphics/sh3/gi/tetrahedral_mesh_to_texture.js +4 -4
  79. package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts +3 -1
  80. package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts.map +1 -1
  81. package/src/engine/graphics/sh3/lpv/LightProbeVolume.js +12 -1
  82. package/src/engine/graphics/sh3/lpv/build_probes_for_scene.d.ts +2 -1
  83. package/src/engine/graphics/sh3/lpv/build_probes_for_scene.d.ts.map +1 -1
  84. package/src/engine/graphics/sh3/lpv/build_probes_for_scene.js +6 -6
  85. package/src/engine/graphics/sh3/lpv/probe_volume_to_textures.d.ts +8 -0
  86. package/src/engine/graphics/sh3/lpv/probe_volume_to_textures.d.ts.map +1 -1
  87. package/src/engine/graphics/sh3/lpv/probe_volume_to_textures.js +3 -2
  88. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.d.ts.map +1 -1
  89. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.js +9 -4
  90. package/src/engine/graphics/sh3/path_tracer/PathTracer.d.ts +3 -3
  91. package/src/engine/graphics/sh3/path_tracer/PathTracer.d.ts.map +1 -1
  92. package/src/engine/graphics/sh3/path_tracer/PathTracer.js +2 -2
  93. package/src/engine/graphics/sh3/path_tracer/compute_triangle_group_aabb3.d.ts +2 -2
  94. package/src/engine/graphics/sh3/path_tracer/compute_triangle_group_aabb3.d.ts.map +1 -1
  95. package/src/engine/graphics/sh3/path_tracer/compute_triangle_group_aabb3.js +18 -8
  96. package/src/engine/graphics/sh3/prototypeSH3Probe.js +51 -22
  97. package/src/engine/graphics/texture/AttributeDataTexture.d.ts.map +1 -1
  98. package/src/engine/graphics/texture/AttributeDataTexture.js +8 -2
  99. package/src/engine/graphics/texture/computeThreeTextureFormat.js +2 -1
  100. package/src/engine/graphics/texture/computeThreeTextureFormatFromDataType.d.ts +7 -0
  101. package/src/engine/graphics/texture/computeThreeTextureFormatFromDataType.d.ts.map +1 -0
  102. package/src/engine/graphics/texture/computeThreeTextureFormatFromDataType.js +13 -0
  103. package/src/engine/graphics/texture/formatToChannelCount.d.ts.map +1 -1
  104. package/src/engine/graphics/texture/formatToChannelCount.js +8 -1
  105. package/src/engine/graphics/texture/numericTypeFromBinaryDataType.d.ts +9 -0
  106. package/src/engine/graphics/texture/numericTypeFromBinaryDataType.d.ts.map +1 -0
  107. package/src/engine/graphics/texture/numericTypeFromBinaryDataType.js +31 -0
  108. package/src/engine/graphics/texture/sampler/Sampler2D.js +2 -2
  109. package/src/engine/graphics/texture/sampler/convertTexture2Sampler2D.d.ts.map +1 -1
  110. package/src/engine/graphics/texture/sampler/convertTexture2Sampler2D.js +47 -19
  111. package/src/engine/graphics/texture/sampler/debug/prototypeSamplerFiltering.js +5 -33
  112. package/src/engine/graphics/texture/sampler/sampler2d_copy_rectangle.d.ts +11 -0
  113. package/src/engine/graphics/texture/sampler/sampler2d_copy_rectangle.d.ts.map +1 -0
  114. package/src/engine/graphics/texture/sampler/sampler2d_copy_rectangle.js +41 -0
  115. package/src/engine/graphics/texture/virtual/VirtualTextureUsage.d.ts +0 -4
  116. package/src/engine/graphics/texture/virtual/VirtualTextureUsage.d.ts.map +1 -1
  117. package/src/engine/graphics/texture/virtual/VirtualTextureUsage.js +19 -30
  118. package/src/engine/graphics/filter/FlipArrayInPlace.d.ts +0 -8
  119. package/src/engine/graphics/filter/FlipArrayInPlace.d.ts.map +0 -1
  120. package/src/engine/graphics/sh3/path_tracer/texture/SoftwareTextureCache.d.ts +0 -3
  121. package/src/engine/graphics/sh3/path_tracer/texture/SoftwareTextureCache.d.ts.map +0 -1
  122. package/src/engine/graphics/sh3/path_tracer/texture/SoftwareTextureCache.js +0 -3
@@ -5462,7 +5462,7 @@ const UnsignedShort5551Type = 1018;
5462
5462
  const UnsignedShort565Type = 1019;
5463
5463
  const UnsignedInt248Type = 1020;
5464
5464
  const AlphaFormat = 1021;
5465
- const RGBFormat = 1022;
5465
+ const RGBFormat$1 = 1022;
5466
5466
  const RGBAFormat = 1023;
5467
5467
  const LuminanceFormat = 1024;
5468
5468
  const LuminanceAlphaFormat = 1025;
@@ -23394,7 +23394,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
23394
23394
  ( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',
23395
23395
 
23396
23396
  parameters.dithering ? '#define DITHERING' : '',
23397
- parameters.format === RGBFormat ? '#define OPAQUE' : '',
23397
+ parameters.format === RGBFormat$1 ? '#define OPAQUE' : '',
23398
23398
 
23399
23399
  ShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below
23400
23400
  parameters.map ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',
@@ -27492,7 +27492,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
27492
27492
 
27493
27493
  mipmap = mipmaps[ i ];
27494
27494
 
27495
- if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {
27495
+ if ( texture.format !== RGBAFormat && texture.format !== RGBFormat$1 ) {
27496
27496
 
27497
27497
  if ( glFormat !== null ) {
27498
27498
 
@@ -27703,7 +27703,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
27703
27703
 
27704
27704
  const mipmap = mipmaps[ j ];
27705
27705
 
27706
- if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {
27706
+ if ( texture.format !== RGBAFormat && texture.format !== RGBFormat$1 ) {
27707
27707
 
27708
27708
  if ( glFormat !== null ) {
27709
27709
 
@@ -28120,7 +28120,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
28120
28120
 
28121
28121
  // Handles WebGL2 RGBFormat fallback - #18858
28122
28122
 
28123
- if ( isWebGL2 && texture.format === RGBFormat && ( texture.type === FloatType || texture.type === HalfFloatType ) ) {
28123
+ if ( isWebGL2 && texture.format === RGBFormat$1 && ( texture.type === FloatType || texture.type === HalfFloatType ) ) {
28124
28124
 
28125
28125
  texture.format = RGBAFormat;
28126
28126
 
@@ -28465,7 +28465,7 @@ function WebGLUtils( gl, extensions, capabilities ) {
28465
28465
  }
28466
28466
 
28467
28467
  if ( p === AlphaFormat ) return 6406;
28468
- if ( p === RGBFormat ) return 6407;
28468
+ if ( p === RGBFormat$1 ) return 6407;
28469
28469
  if ( p === RGBAFormat ) return 6408;
28470
28470
  if ( p === LuminanceFormat ) return 6409;
28471
28471
  if ( p === LuminanceAlphaFormat ) return 6410;
@@ -29260,7 +29260,7 @@ class WebXRManager extends EventDispatcher {
29260
29260
  glProjLayer.textureWidth,
29261
29261
  glProjLayer.textureHeight,
29262
29262
  {
29263
- format: attributes.alpha ? RGBAFormat : RGBFormat,
29263
+ format: attributes.alpha ? RGBAFormat : RGBFormat$1,
29264
29264
  type: UnsignedByteType,
29265
29265
  depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),
29266
29266
  stencilBuffer: attributes.stencil,
@@ -34185,7 +34185,7 @@ class VideoTexture extends Texture {
34185
34185
 
34186
34186
  super( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
34187
34187
 
34188
- this.format = format !== undefined ? format : RGBFormat;
34188
+ this.format = format !== undefined ? format : RGBFormat$1;
34189
34189
 
34190
34190
  this.minFilter = minFilter !== undefined ? minFilter : LinearFilter;
34191
34191
  this.magFilter = magFilter !== undefined ? magFilter : LinearFilter;
@@ -49606,8 +49606,8 @@ class Sampler2D {
49606
49606
  const clamped_x = clamp$1(x, 0, x_max);
49607
49607
  const clamped_y = clamp$1(y, 0, y_max);
49608
49608
 
49609
- const x0 = clamped_x | 0;
49610
- const y0 = clamped_y | 0;
49609
+ const x0 = clamped_x >>> 0;
49610
+ const y0 = clamped_y >>> 0;
49611
49611
 
49612
49612
  //
49613
49613
  const row0 = y0 * rowSize;
@@ -53270,7 +53270,7 @@ function aabb3_intersects_ray(
53270
53270
  return f2 <= extents_x * abs_direction_y + extents_y * abs_direction_x;
53271
53271
  }
53272
53272
 
53273
- const stack$9 = SCRATCH_UINT32_TRAVERSAL_STACK;
53273
+ const stack$a = SCRATCH_UINT32_TRAVERSAL_STACK;
53274
53274
 
53275
53275
 
53276
53276
  /**
@@ -53303,9 +53303,9 @@ function bvh_query_leaves_ray(
53303
53303
  *
53304
53304
  * @type {number}
53305
53305
  */
53306
- const stack_top = stack$9.pointer++;
53306
+ const stack_top = stack$a.pointer++;
53307
53307
 
53308
- stack$9[stack_top] = root;
53308
+ stack$a[stack_top] = root;
53309
53309
 
53310
53310
  let result_cursor = result_offset;
53311
53311
 
@@ -53316,13 +53316,13 @@ function bvh_query_leaves_ray(
53316
53316
  const uint32 = bvh.__data_uint32;
53317
53317
 
53318
53318
  do {
53319
- stack$9.pointer--;
53319
+ stack$a.pointer--;
53320
53320
 
53321
53321
  /**
53322
53322
  *
53323
53323
  * @type {number}
53324
53324
  */
53325
- const node = stack$9[stack$9.pointer];
53325
+ const node = stack$a[stack$a.pointer];
53326
53326
 
53327
53327
  const address = node * ELEMENT_WORD_COUNT;
53328
53328
 
@@ -53344,15 +53344,15 @@ function bvh_query_leaves_ray(
53344
53344
  if (child_1 !== NULL_NODE) {
53345
53345
 
53346
53346
  // this is not a leaf node, push children onto traversal stack
53347
- stack$9[stack$9.pointer++] = uint32[address + COLUMN_CHILD_2];
53348
- stack$9[stack$9.pointer++] = child_1;
53347
+ stack$a[stack$a.pointer++] = uint32[address + COLUMN_CHILD_2];
53348
+ stack$a[stack$a.pointer++] = child_1;
53349
53349
 
53350
53350
  } else {
53351
53351
  // leaf node
53352
53352
 
53353
53353
  result[result_cursor++] = node;
53354
53354
  }
53355
- } while (stack$9.pointer > stack_top);
53355
+ } while (stack$a.pointer > stack_top);
53356
53356
 
53357
53357
  return result_cursor - result_offset;
53358
53358
  }
@@ -55232,7 +55232,7 @@ function build_morton(data, address, bounds) {
55232
55232
 
55233
55233
  }
55234
55234
 
55235
- const stack$8 = SCRATCH_UINT32_TRAVERSAL_STACK;
55235
+ const stack$9 = SCRATCH_UINT32_TRAVERSAL_STACK;
55236
55236
 
55237
55237
  class BinaryUint32BVH {
55238
55238
  /**
@@ -55374,6 +55374,18 @@ class BinaryUint32BVH {
55374
55374
 
55375
55375
  }
55376
55376
 
55377
+ /**
55378
+ *
55379
+ * @param {number} index
55380
+ * @return {number}
55381
+ */
55382
+ getLeafAddress(index) {
55383
+
55384
+ const leaf_block_address = this.__node_count_binary * BVH_BINARY_NODE_SIZE;
55385
+
55386
+ return index * BVH_LEAF_NODE_SIZE + leaf_block_address;
55387
+ }
55388
+
55377
55389
  /**
55378
55390
  *
55379
55391
  * @param {number} index
@@ -55391,9 +55403,7 @@ class BinaryUint32BVH {
55391
55403
  x1, y1, z1
55392
55404
  ) {
55393
55405
 
55394
- const leaf_block_address = this.__node_count_binary * BVH_BINARY_NODE_SIZE;
55395
-
55396
- const address = index * BVH_LEAF_NODE_SIZE + leaf_block_address;
55406
+ const address = this.getLeafAddress(index);
55397
55407
 
55398
55408
  aabb3_array_set(
55399
55409
  this.__data_float32,
@@ -55533,16 +55543,16 @@ class BinaryUint32BVH {
55533
55543
  let stackPointer = 2;
55534
55544
  let i, j;
55535
55545
 
55536
- stack$8[0] = 0; // first node
55537
- stack$8[1] = this.__node_count_leaf - 1; // last node
55546
+ stack$9[0] = 0; // first node
55547
+ stack$9[1] = this.__node_count_leaf - 1; // last node
55538
55548
 
55539
55549
  const data = this.__data_float32;
55540
55550
 
55541
55551
  while (stackPointer > 0) {
55542
55552
  stackPointer -= 2;
55543
55553
 
55544
- const right = stack$8[stackPointer + 1];
55545
- const left = stack$8[stackPointer];
55554
+ const right = stack$9[stackPointer + 1];
55555
+ const left = stack$9[stackPointer];
55546
55556
 
55547
55557
  i = left;
55548
55558
  j = right;
@@ -55577,12 +55587,12 @@ class BinaryUint32BVH {
55577
55587
 
55578
55588
  /* recursion */
55579
55589
  if (left < j) {
55580
- stack$8[stackPointer++] = left;
55581
- stack$8[stackPointer++] = j;
55590
+ stack$9[stackPointer++] = left;
55591
+ stack$9[stackPointer++] = j;
55582
55592
  }
55583
55593
  if (i < right) {
55584
- stack$8[stackPointer++] = i;
55585
- stack$8[stackPointer++] = right;
55594
+ stack$9[stackPointer++] = i;
55595
+ stack$9[stackPointer++] = right;
55586
55596
  }
55587
55597
  }
55588
55598
  }
@@ -57180,7 +57190,7 @@ function aabb3_array_intersects_ray(
57180
57190
  );
57181
57191
  }
57182
57192
 
57183
- const stack$7 = SCRATCH_UINT32_TRAVERSAL_STACK;
57193
+ const stack$8 = SCRATCH_UINT32_TRAVERSAL_STACK;
57184
57194
 
57185
57195
  /**
57186
57196
  *
@@ -57214,13 +57224,13 @@ function bvh32_query_user_data_ray(
57214
57224
  *
57215
57225
  * @type {number}
57216
57226
  */
57217
- const stack_top = stack$7.pointer++;
57227
+ const stack_top = stack$8.pointer++;
57218
57228
 
57219
57229
  /**
57220
57230
  * After performing empirical tests, stack-based depth-first traversal turns out faster than using a queue
57221
57231
  * @type {number}
57222
57232
  */
57223
- stack$7[stack_top] = 0;
57233
+ stack$8[stack_top] = 0;
57224
57234
 
57225
57235
  const last_valid_index = binary_node_count + bvh.leaf_node_count;
57226
57236
 
@@ -57228,10 +57238,10 @@ function bvh32_query_user_data_ray(
57228
57238
  const uint32 = bvh.uint32;
57229
57239
 
57230
57240
  do {
57231
- stack$7.pointer--;
57241
+ stack$8.pointer--;
57232
57242
 
57233
57243
  // query_bvh_frustum_from_objects.iteration_count++;
57234
- const node_index = stack$7[stack$7.pointer];
57244
+ const node_index = stack$8[stack$8.pointer];
57235
57245
 
57236
57246
  const node_address = bvh.getNodeAddress(node_index);
57237
57247
 
@@ -57253,11 +57263,11 @@ function bvh32_query_user_data_ray(
57253
57263
 
57254
57264
  // left node ends up on top of the stack, which aligns with the desired access sequence
57255
57265
  if (right_index < last_valid_index) {
57256
- stack$7[stack$7.pointer++] = right_index;
57266
+ stack$8[stack$8.pointer++] = right_index;
57257
57267
  // micro-optimization, since we know that right node is valid and left appears before that, left is valid too
57258
- stack$7[stack$7.pointer++] = left_index;
57268
+ stack$8[stack$8.pointer++] = left_index;
57259
57269
  } else if (left_index < last_valid_index) {
57260
- stack$7[stack$7.pointer++] = left_index;
57270
+ stack$8[stack$8.pointer++] = left_index;
57261
57271
  }
57262
57272
 
57263
57273
 
@@ -57270,7 +57280,7 @@ function bvh32_query_user_data_ray(
57270
57280
  hit_count++;
57271
57281
  }
57272
57282
 
57273
- } while (stack$7.pointer > stack_top)
57283
+ } while (stack$8.pointer > stack_top)
57274
57284
 
57275
57285
  return hit_count;
57276
57286
  }
@@ -58952,7 +58962,7 @@ function writeSample2DDataToDataTexture(sampler, texture) {
58952
58962
  throw new Error('itemSize is 2 and texture.format is not RGFormat');
58953
58963
  }
58954
58964
  } else if (sampler.itemSize === 3) {
58955
- if (texture.format !== RGBFormat) {
58965
+ if (texture.format !== RGBFormat$1) {
58956
58966
  throw new Error('itemSize is 2 and texture.format is not RGBFormat');
58957
58967
  }
58958
58968
  } else if (sampler.itemSize === 4) {
@@ -59176,7 +59186,7 @@ function channelCountToThreeTextureFormat(count) {
59176
59186
  case 2:
59177
59187
  return RGFormat;
59178
59188
  case 3:
59179
- return RGBFormat;
59189
+ return RGBFormat$1;
59180
59190
  case 4:
59181
59191
  return RGBAFormat;
59182
59192
  default:
@@ -62731,7 +62741,7 @@ class TerrainLayers {
62731
62741
  * @type {DataTexture2DArray}
62732
62742
  */
62733
62743
  this.texture = new DataTexture2DArray(new Uint8Array(3), 1, 1, 1);
62734
- this.texture.format = RGBFormat;
62744
+ this.texture.format = RGBFormat$1;
62735
62745
  this.texture.type = UnsignedByteType;
62736
62746
 
62737
62747
  this.texture.wrapS = RepeatWrapping;
@@ -65881,14 +65891,17 @@ function read_three_planes_to_array(planes, array) {
65881
65891
 
65882
65892
  /**
65883
65893
  *
65884
- * @param {BinaryUint32BVH} bvh
65885
- * @param {number} triangle_index
65894
+ * @param {number[]|Float32Array} output
65895
+ * @param {number} output_offset
65886
65896
  * @param {number[]|Float32Array} vertices
65887
65897
  * @param {number} a_index
65888
65898
  * @param {number} b_index
65889
65899
  * @param {number} c_index
65890
65900
  */
65891
- function bvh32_set_leaf_from_triangle(bvh, triangle_index, vertices, a_index, b_index, c_index) {
65901
+ function aabb3_compute_from_triangle(
65902
+ output, output_offset,
65903
+ vertices, a_index, b_index, c_index
65904
+ ) {
65892
65905
  const a = a_index * 3;
65893
65906
  const b = b_index * 3;
65894
65907
  const c = c_index * 3;
@@ -65907,15 +65920,31 @@ function bvh32_set_leaf_from_triangle(bvh, triangle_index, vertices, a_index, b_
65907
65920
  const cZ = vertices[c + 2];
65908
65921
 
65909
65922
  // compute bounds of the triangle
65910
- const x0 = min3(aX, bX, cX);
65911
- const y0 = min3(aY, bY, cY);
65912
- const z0 = min3(aZ, bZ, cZ);
65923
+ output[output_offset] = min3(aX, bX, cX);
65924
+ output[output_offset + 1] = min3(aY, bY, cY);
65925
+ output[output_offset + 2] = min3(aZ, bZ, cZ);
65913
65926
 
65914
- const x1 = max3(aX, bX, cX);
65915
- const y1 = max3(aY, bY, cY);
65916
- const z1 = max3(aZ, bZ, cZ);
65927
+ output[output_offset + 3] = max3(aX, bX, cX);
65928
+ output[output_offset + 4] = max3(aY, bY, cY);
65929
+ output[output_offset + 5] = max3(aZ, bZ, cZ);
65930
+
65931
+ }
65932
+
65933
+ /**
65934
+ *
65935
+ * @param {BinaryUint32BVH} bvh
65936
+ * @param {number} triangle_index
65937
+ * @param {number[]|Float32Array} vertices
65938
+ * @param {number} a_index
65939
+ * @param {number} b_index
65940
+ * @param {number} c_index
65941
+ */
65942
+ function bvh32_set_leaf_from_triangle(bvh, triangle_index, vertices, a_index, b_index, c_index) {
65943
+
65944
+ const address = bvh.getLeafAddress(triangle_index);
65945
+ aabb3_compute_from_triangle(bvh.__data_float32, address, vertices, a_index, b_index, c_index);
65946
+ bvh.__data_uint32[address + 6] = triangle_index;
65917
65947
 
65918
- bvh.setLeafData(triangle_index, triangle_index, x0, y0, z0, x1, y1, z1);
65919
65948
  }
65920
65949
 
65921
65950
  /**
@@ -66043,7 +66072,7 @@ function aabb3_array_intersects_clipping_volume_array(
66043
66072
  );
66044
66073
  }
66045
66074
 
66046
- const stack$6 = SCRATCH_UINT32_TRAVERSAL_STACK;
66075
+ const stack$7 = SCRATCH_UINT32_TRAVERSAL_STACK;
66047
66076
 
66048
66077
  /**
66049
66078
  *
@@ -66073,13 +66102,13 @@ function bvh32_query_user_data_overlaps_clipping_volume(
66073
66102
  *
66074
66103
  * @type {number}
66075
66104
  */
66076
- const stack_top = stack$6.pointer++;
66105
+ const stack_top = stack$7.pointer++;
66077
66106
 
66078
66107
  /**
66079
66108
  * After performing empirical tests, stack-based depth-first traversal turns out faster than using a queue
66080
66109
  * @type {number}
66081
66110
  */
66082
- stack$6[stack_top] = 0;
66111
+ stack$7[stack_top] = 0;
66083
66112
 
66084
66113
  const last_valid_index = binary_node_count + bvh.leaf_node_count;
66085
66114
 
@@ -66087,10 +66116,10 @@ function bvh32_query_user_data_overlaps_clipping_volume(
66087
66116
  const uint32 = bvh.uint32;
66088
66117
 
66089
66118
  do {
66090
- stack$6.pointer--;
66119
+ stack$7.pointer--;
66091
66120
 
66092
66121
  // query_bvh_frustum_from_objects.iteration_count++;
66093
- const node_index = stack$6[stack$6.pointer];
66122
+ const node_index = stack$7[stack$7.pointer];
66094
66123
 
66095
66124
  const node_address = bvh.getNodeAddress(node_index);
66096
66125
 
@@ -66111,11 +66140,11 @@ function bvh32_query_user_data_overlaps_clipping_volume(
66111
66140
 
66112
66141
  // left node ends up on top of the stack, which aligns with the desired access sequence
66113
66142
  if (right_index < last_valid_index) {
66114
- stack$6[stack$6.pointer++] = right_index;
66143
+ stack$7[stack$7.pointer++] = right_index;
66115
66144
  // micro-optimization, since we know that right node is valid and left appears before that, left is valid too
66116
- stack$6[stack$6.pointer++] = left_index;
66145
+ stack$7[stack$7.pointer++] = left_index;
66117
66146
  } else if (left_index < last_valid_index) {
66118
- stack$6[stack$6.pointer++] = left_index;
66147
+ stack$7[stack$7.pointer++] = left_index;
66119
66148
  }
66120
66149
 
66121
66150
 
@@ -66128,7 +66157,7 @@ function bvh32_query_user_data_overlaps_clipping_volume(
66128
66157
  hit_count++;
66129
66158
  }
66130
66159
 
66131
- } while (stack$6.pointer > stack_top)
66160
+ } while (stack$7.pointer > stack_top)
66132
66161
 
66133
66162
  return hit_count;
66134
66163
  }
@@ -67239,7 +67268,7 @@ function aabb3_array_intersects_frustum_degree(aabb, frustum) {
67239
67268
  //
67240
67269
 
67241
67270
 
67242
- const stack$5 = SCRATCH_UINT32_TRAVERSAL_STACK;
67271
+ const stack$6 = SCRATCH_UINT32_TRAVERSAL_STACK;
67243
67272
 
67244
67273
  /**
67245
67274
  *
@@ -67262,20 +67291,20 @@ function bvh_collect_user_data(
67262
67291
  *
67263
67292
  * @type {number}
67264
67293
  */
67265
- const stack_top = stack$5.pointer++;
67294
+ const stack_top = stack$6.pointer++;
67266
67295
 
67267
- stack$5[stack_top] = root;
67296
+ stack$6[stack_top] = root;
67268
67297
 
67269
67298
  let result_cursor = destination_offset;
67270
67299
 
67271
- while (stack$5.pointer > stack_top) {
67272
- stack$5.pointer--;
67300
+ while (stack$6.pointer > stack_top) {
67301
+ stack$6.pointer--;
67273
67302
 
67274
67303
  /**
67275
67304
  *
67276
67305
  * @type {number}
67277
67306
  */
67278
- const node = stack$5[stack$5.pointer];
67307
+ const node = stack$6[stack$6.pointer];
67279
67308
 
67280
67309
  const node_is_leaf = bvh.node_is_leaf(node);
67281
67310
 
@@ -67286,8 +67315,8 @@ function bvh_collect_user_data(
67286
67315
  const child2 = bvh.node_get_child2(node);
67287
67316
 
67288
67317
  // write to stack in reverse order, so that fist child ends up being visited first
67289
- stack$5[stack$5.pointer++] = child1;
67290
- stack$5[stack$5.pointer++] = child2;
67318
+ stack$6[stack$6.pointer++] = child1;
67319
+ stack$6[stack$6.pointer++] = child2;
67291
67320
 
67292
67321
  } else {
67293
67322
  // leaf root
@@ -67303,7 +67332,7 @@ function bvh_collect_user_data(
67303
67332
 
67304
67333
  //
67305
67334
 
67306
- const stack$4 = SCRATCH_UINT32_TRAVERSAL_STACK;
67335
+ const stack$5 = SCRATCH_UINT32_TRAVERSAL_STACK;
67307
67336
 
67308
67337
  const scratch_aabb$1 = new Float32Array(6);
67309
67338
 
@@ -67330,20 +67359,20 @@ function bvh_query_user_data_overlaps_frustum(
67330
67359
  *
67331
67360
  * @type {number}
67332
67361
  */
67333
- const stack_top = stack$4.pointer++;
67362
+ const stack_top = stack$5.pointer++;
67334
67363
 
67335
- stack$4[stack_top] = root;
67364
+ stack$5[stack_top] = root;
67336
67365
 
67337
67366
  let result_cursor = result_offset;
67338
67367
 
67339
- while (stack$4.pointer > stack_top) {
67340
- stack$4.pointer--;
67368
+ while (stack$5.pointer > stack_top) {
67369
+ stack$5.pointer--;
67341
67370
 
67342
67371
  /**
67343
67372
  *
67344
67373
  * @type {number}
67345
67374
  */
67346
- const node = stack$4[stack$4.pointer];
67375
+ const node = stack$5[stack$5.pointer];
67347
67376
 
67348
67377
  // test node against the ray
67349
67378
  bvh.node_get_aabb(node, scratch_aabb$1);
@@ -67370,8 +67399,8 @@ function bvh_query_user_data_overlaps_frustum(
67370
67399
  const child2 = bvh.node_get_child2(node);
67371
67400
 
67372
67401
  // write to stack in reverse order, so that fist child ends up being visited first
67373
- stack$4[stack$4.pointer++] = child1;
67374
- stack$4[stack$4.pointer++] = child2;
67402
+ stack$5[stack$5.pointer++] = child1;
67403
+ stack$5[stack$5.pointer++] = child2;
67375
67404
  }
67376
67405
  }
67377
67406
 
@@ -67432,7 +67461,7 @@ function computeFileExtension(path) {
67432
67461
  * @param {number} height
67433
67462
  * @param {number} channel_count
67434
67463
  */
67435
- function flipArrayInPlace(input, width, height, channel_count = 4) {
67464
+ function sampler2d_flipY_in_place(input, width, height, channel_count = 4) {
67436
67465
  const row_size = width * channel_count;
67437
67466
  let t, x0, x1;
67438
67467
  let i = 0;
@@ -67503,6 +67532,241 @@ const CopyShader = {
67503
67532
 
67504
67533
  };
67505
67534
 
67535
+ /**
67536
+ * WebGL constant, declared explicitly to avoid issues with later THREE.js versions where it is absent
67537
+ * @type {number}
67538
+ */
67539
+ const RGBFormat = 1022;
67540
+
67541
+ /**
67542
+ *
67543
+ * @param {number} format
67544
+ * @returns {number}
67545
+ */
67546
+ function formatToChannelCount(format) {
67547
+ switch (format) {
67548
+ case RedFormat:
67549
+ case RedIntegerFormat:
67550
+ return 1;
67551
+ case RGFormat:
67552
+ return 2;
67553
+ case RGBFormat:
67554
+ return 3;
67555
+ case RGBAFormat:
67556
+ return 4;
67557
+ default:
67558
+ throw new Error(`Unsupported format '${format}'`);
67559
+ }
67560
+ }
67561
+
67562
+ /**
67563
+ *
67564
+ * @param {Uint8Array|Uint16Array|Uint32Array|Int8Array|Int16Array|Int32Array} array
67565
+ * @return {boolean}
67566
+ */
67567
+ function typed_array_is_integer(array) {
67568
+ const ctor = array.constructor;
67569
+
67570
+ return ctor === Uint8ClampedArray
67571
+ || ctor === Uint8Array
67572
+ || ctor === Uint16Array
67573
+ || ctor === Uint32Array
67574
+ || ctor === Int8Array
67575
+ || ctor === Int16Array
67576
+ || ctor === Int32Array
67577
+ ;
67578
+ }
67579
+
67580
+ /**
67581
+ * Applies a linear polynomial transform to each value of a given channel
67582
+ * @param {Sampler2D} output
67583
+ * @param {Sampler2D} input
67584
+ * @param {number} output_channel_index
67585
+ * @param {number} input_channel_index
67586
+ * @param {number} gradient
67587
+ * @param {number} intercept
67588
+ */
67589
+ function sampler2d_channel_linear_transform(
67590
+ output, input,
67591
+ output_channel_index, input_channel_index,
67592
+ gradient, intercept
67593
+ ) {
67594
+
67595
+ const input_width = input.width;
67596
+ const input_height = input.height;
67597
+
67598
+ const output_width = output.width;
67599
+ const output_height = output.height;
67600
+
67601
+ if (
67602
+ input_width !== output_width
67603
+ || input_height !== output_height
67604
+ ) {
67605
+ throw new Error('Dimensions of input and output are incompatible');
67606
+ }
67607
+
67608
+ const input_item_size = input.itemSize;
67609
+ const output_item_size = output.itemSize;
67610
+
67611
+ const input_data = input.data;
67612
+ const output_data = output.data;
67613
+
67614
+ const pixel_count = input_width * input_height;
67615
+
67616
+
67617
+ if (typed_array_is_integer(output_data)) {
67618
+
67619
+ for (let i = 0; i < pixel_count; i++) {
67620
+
67621
+ const input_address = i * input_item_size + input_channel_index;
67622
+ const output_address = i * output_item_size + output_channel_index;
67623
+
67624
+ const input_value = input_data[input_address];
67625
+
67626
+ output_data[output_address] = Math.round(input_value * gradient + intercept);
67627
+
67628
+ }
67629
+
67630
+ } else {
67631
+
67632
+ for (let i = 0; i < pixel_count; i++) {
67633
+
67634
+ const input_address = i * input_item_size + input_channel_index;
67635
+ const output_address = i * output_item_size + output_channel_index;
67636
+
67637
+ const input_value = input_data[input_address];
67638
+
67639
+ output_data[output_address] = input_value * gradient + intercept;
67640
+
67641
+ }
67642
+
67643
+ }
67644
+
67645
+ }
67646
+
67647
+ function compute_gradient_and_intercept_uint8(ctor) {
67648
+ let gradient = 1;
67649
+ let intercept = 0;
67650
+
67651
+ switch (ctor) {
67652
+ case Uint16Array:
67653
+ gradient = 0.0038910505836575876;
67654
+ break;
67655
+ case Uint32Array:
67656
+ gradient = 5.937181414556033e-8;
67657
+ break;
67658
+ case Int8Array:
67659
+ gradient = 1;
67660
+ intercept = 127;
67661
+ break
67662
+ case Int16Array:
67663
+ gradient = 0.0038910505836575876;
67664
+ intercept = 127;
67665
+ break;
67666
+ case Int32Array:
67667
+ gradient = 5.937181414556033e-8;
67668
+ intercept = 127;
67669
+ break
67670
+ case Float32Array:
67671
+ case Float64Array:
67672
+ gradient = 255;
67673
+ break;
67674
+ // do nothing;
67675
+ }
67676
+
67677
+ return {
67678
+ gradient, intercept
67679
+ }
67680
+ }
67681
+
67682
+ /**
67683
+ * Many applications work with 8bit RGBA images, this utility function converts a given input to that format
67684
+ * @param {Sampler2D} input
67685
+ * @param {Sampler2D} output
67686
+ */
67687
+ function sampler2d_to_uint8_RGBA(output, input) {
67688
+ if (
67689
+ input.width !== output.width
67690
+ || input.height !== output.height
67691
+ ) {
67692
+ throw new Error('Dimensions of source and destination are incompatible');
67693
+ }
67694
+
67695
+ if (output.itemSize !== 4) {
67696
+ throw new Error(`Destination must have 4 channels exactly, instead got '${output.itemSize}'`);
67697
+ }
67698
+
67699
+ const { gradient, intercept } = compute_gradient_and_intercept_uint8(input.data.constructor);
67700
+
67701
+ const source_item_size = input.itemSize;
67702
+
67703
+ if (intercept === 0 && gradient === 1 && source_item_size === 4) {
67704
+ // already in the right format, use shortcut
67705
+ output.data.set(input.data);
67706
+ return;
67707
+ }
67708
+
67709
+ if (source_item_size === 1) {
67710
+
67711
+ // grayscale
67712
+
67713
+ sampler2d_channel_linear_transform(output, input, 0, 0, gradient, intercept);
67714
+ sampler2d_channel_linear_transform(output, input, 1, 0, gradient, intercept);
67715
+ sampler2d_channel_linear_transform(output, input, 2, 0, gradient, intercept);
67716
+
67717
+ output.channelFill(3, 255);
67718
+
67719
+ } else if (source_item_size === 2) {
67720
+
67721
+ // grayscale with alpha
67722
+
67723
+ sampler2d_channel_linear_transform(output, input, 0, 0, gradient, intercept);
67724
+ sampler2d_channel_linear_transform(output, input, 1, 0, gradient, intercept);
67725
+ sampler2d_channel_linear_transform(output, input, 2, 0, gradient, intercept);
67726
+ sampler2d_channel_linear_transform(output, input, 3, 1, gradient, intercept);
67727
+
67728
+ } else if (source_item_size === 3) {
67729
+
67730
+ // RGB
67731
+
67732
+ sampler2d_channel_linear_transform(output, input, 0, 0, gradient, intercept);
67733
+ sampler2d_channel_linear_transform(output, input, 1, 1, gradient, intercept);
67734
+ sampler2d_channel_linear_transform(output, input, 2, 2, gradient, intercept);
67735
+
67736
+ output.channelFill(3, 255);
67737
+
67738
+ } else if (source_item_size === 4) {
67739
+
67740
+ // RGBA
67741
+
67742
+ sampler2d_channel_linear_transform(output, input, 0, 0, gradient, intercept);
67743
+ sampler2d_channel_linear_transform(output, input, 1, 1, gradient, intercept);
67744
+ sampler2d_channel_linear_transform(output, input, 2, 2, gradient, intercept);
67745
+ sampler2d_channel_linear_transform(output, input, 3, 3, gradient, intercept);
67746
+
67747
+ }
67748
+ }
67749
+
67750
+ /**
67751
+ *
67752
+ * @param {Sampler2D} input
67753
+ * @returns {Sampler2D}
67754
+ */
67755
+ function sampler2d_ensure_uint8_RGBA(input) {
67756
+ if (
67757
+ input.itemSize === 4
67758
+ && (input.data.constructor === Uint8Array || input.data.constructor === Uint8ClampedArray)
67759
+ ) {
67760
+ return input;
67761
+ }
67762
+
67763
+ const resampled = Sampler2D.uint8(4, input.width, input.height);
67764
+
67765
+ sampler2d_to_uint8_RGBA(resampled, input);
67766
+
67767
+ return resampled;
67768
+ }
67769
+
67506
67770
  const DEFAULT_TEXTURE_WIDTH = 512;
67507
67771
  const DEFAULT_TEXTURE_HEIGHT = 512;
67508
67772
 
@@ -67523,6 +67787,8 @@ function convertTexture2Sampler2D(
67523
67787
  let _height = height;
67524
67788
  let _width = width;
67525
67789
 
67790
+ const channel_count = formatToChannelCount(texture.format);
67791
+
67526
67792
  // TODO take channel count into account
67527
67793
 
67528
67794
  if (_width === undefined || _height === undefined) {
@@ -67557,34 +67823,57 @@ function convertTexture2Sampler2D(
67557
67823
 
67558
67824
  }
67559
67825
 
67560
- // TODO add special case for DataTexture
67561
67826
 
67562
- const built = WebGLRendererPool.global.use(renderer => {
67827
+ let data;
67563
67828
 
67564
- const ctx = renderer.getContext();
67829
+ if (texture.isDataTexture === true) {
67565
67830
 
67566
- //support for compressed textures
67567
- ctx.getExtension("WEBGL_compressed_texture_s3tc");
67831
+ // special case
67832
+
67833
+ const source = new Sampler2D(texture.image.data, channel_count, texture.image.width, texture.image.height);
67834
+
67835
+ let converted = sampler2d_ensure_uint8_RGBA(source);
67836
+
67837
+ if (converted.width !== _width || converted.height !== _height) {
67838
+ const target = Sampler2D.uint8(4, _width, _height);
67839
+
67840
+ sampler2d_scale(converted, target);
67841
+
67842
+ converted = target;
67843
+ }
67844
+
67845
+ data = converted.data;
67846
+
67847
+ } else {
67848
+ const built = WebGLRendererPool.global.use(renderer => {
67849
+
67850
+ const ctx = renderer.getContext();
67851
+
67852
+ //support for compressed textures
67853
+ ctx.getExtension("WEBGL_compressed_texture_s3tc");
67854
+
67855
+ return processTexture(renderer, _width, _height, {
67856
+ vertexShader: CopyShader.vertexShader,
67857
+ fragmentShader: CopyShader.fragmentShader,
67858
+ uniforms: {
67859
+ tDiffuse: {
67860
+ value: texture,
67861
+ type: 't'
67862
+ },
67863
+ opacity: { value: 1.0 }
67864
+ }
67865
+ });
67568
67866
 
67569
- return processTexture(renderer, _width, _height, {
67570
- vertexShader: CopyShader.vertexShader,
67571
- fragmentShader: CopyShader.fragmentShader,
67572
- uniforms: {
67573
- tDiffuse: {
67574
- value: texture,
67575
- type: 't'
67576
- },
67577
- opacity: { value: 1.0 }
67578
- }
67579
67867
  });
67580
67868
 
67581
- });
67869
+ data = built.array;
67870
+ }
67582
67871
 
67583
67872
  if (flipY) {
67584
- flipArrayInPlace(built.array, _width, _height);
67873
+ sampler2d_flipY_in_place(data, _width, _height);
67585
67874
  }
67586
67875
 
67587
- return new Sampler2D(built.array, 4, _width, _height);
67876
+ return new Sampler2D(data, 4, _width, _height);
67588
67877
  }
67589
67878
 
67590
67879
  /**
@@ -74777,7 +75066,7 @@ class SGMeshSystem extends System {
74777
75066
  }
74778
75067
  }
74779
75068
 
74780
- const stack$3 = SCRATCH_UINT32_TRAVERSAL_STACK;
75069
+ const stack$4 = SCRATCH_UINT32_TRAVERSAL_STACK;
74781
75070
 
74782
75071
  /**
74783
75072
  *
@@ -74801,20 +75090,20 @@ function bvh_query_leaves_generic(
74801
75090
  *
74802
75091
  * @type {number}
74803
75092
  */
74804
- const stack_top = stack$3.pointer++;
75093
+ const stack_top = stack$4.pointer++;
74805
75094
 
74806
- stack$3[stack_top] = root;
75095
+ stack$4[stack_top] = root;
74807
75096
 
74808
75097
  let result_cursor = result_offset;
74809
75098
 
74810
- while (stack$3.pointer > stack_top) {
74811
- stack$3.pointer--;
75099
+ while (stack$4.pointer > stack_top) {
75100
+ stack$4.pointer--;
74812
75101
 
74813
75102
  /**
74814
75103
  *
74815
75104
  * @type {number}
74816
75105
  */
74817
- const node = stack$3[stack$3.pointer];
75106
+ const node = stack$4[stack$4.pointer];
74818
75107
 
74819
75108
  // test node against the ray
74820
75109
  const pass = query.evaluate(node, bvh);
@@ -74832,8 +75121,8 @@ function bvh_query_leaves_generic(
74832
75121
  const child2 = bvh.node_get_child2(node);
74833
75122
 
74834
75123
  // write to stack in reverse order, so that fist child ends up being visited first
74835
- stack$3[stack$3.pointer++] = child2;
74836
- stack$3[stack$3.pointer++] = child1;
75124
+ stack$4[stack$4.pointer++] = child2;
75125
+ stack$4[stack$4.pointer++] = child1;
74837
75126
 
74838
75127
  } else {
74839
75128
  // leaf node
@@ -75141,85 +75430,11 @@ class RuntimeDrawMethodOptimizer {
75141
75430
  }
75142
75431
  }
75143
75432
 
75144
- const stack$2 = [];
75433
+ const stack$3 = [];
75145
75434
 
75146
75435
  /**
75147
75436
  * @template T
75148
- * @param {T[]|ArrayLike<number>|Uint32Array} data
75149
- * @param {function(T):number} score_function
75150
- * @param {*} score_function_context
75151
- * @param {number} start
75152
- * @param {number} end
75153
- * @param {function(T[],number, number):*} [swap_operator]
75154
- * @param {*} [swap_context]
75155
- */
75156
- function arrayQuickSort(
75157
- data,
75158
- score_function, score_function_context,
75159
- start, end,
75160
- swap_operator = array_swap_one, swap_context = undefined
75161
- ) {
75162
- if (start >= end) {
75163
- // section of 0 size, nothing to sort
75164
- return;
75165
- }
75166
-
75167
- let stackPointer = 2;
75168
- let i, j;
75169
-
75170
- stack$2[0] = start;
75171
- stack$2[1] = end;
75172
-
75173
- while (stackPointer > 0) {
75174
- stackPointer -= 2;
75175
-
75176
- const right = stack$2[stackPointer + 1];
75177
- const left = stack$2[stackPointer];
75178
-
75179
- i = left;
75180
- j = right;
75181
-
75182
- const pivotIndex = (left + right) >> 1;
75183
-
75184
- const pivot = score_function.call(score_function_context, data[pivotIndex]);
75185
-
75186
- /* partition */
75187
- while (i <= j) {
75188
- while (score_function.call(score_function_context, data[i]) < pivot) {
75189
- i++;
75190
- }
75191
-
75192
- while (score_function.call(score_function_context, data[j]) > pivot) {
75193
- j--;
75194
- }
75195
-
75196
- if (i <= j) {
75197
-
75198
- if (i !== j) {
75199
- //do swap
75200
- swap_operator.call(swap_context, data, i, j);
75201
- }
75202
-
75203
- i++;
75204
- j--;
75205
- }
75206
- }
75207
-
75208
- /* recursion */
75209
- if (left < j) {
75210
- stack$2[stackPointer++] = left;
75211
- stack$2[stackPointer++] = j;
75212
- }
75213
- if (i < right) {
75214
- stack$2[stackPointer++] = i;
75215
- stack$2[stackPointer++] = right;
75216
- }
75217
- }
75218
- }
75219
-
75220
- /**
75221
- * @template T
75222
- * @param {T[]} data
75437
+ * @param {T[]|Uint32Array} data
75223
75438
  * @param {function(T,T):number} compare_function
75224
75439
  * @param {*} compare_function_context
75225
75440
  * @param {number} start
@@ -75238,14 +75453,14 @@ function array_quick_sort_by_comparator(
75238
75453
  let stackPointer = 2;
75239
75454
  let i, j;
75240
75455
 
75241
- stack$2[0] = start;
75242
- stack$2[1] = end;
75456
+ stack$3[0] = start;
75457
+ stack$3[1] = end;
75243
75458
 
75244
75459
  while (stackPointer > 0) {
75245
75460
  stackPointer -= 2;
75246
75461
 
75247
- const right = stack$2[stackPointer + 1];
75248
- const left = stack$2[stackPointer];
75462
+ const right = stack$3[stackPointer + 1];
75463
+ const left = stack$3[stackPointer];
75249
75464
 
75250
75465
  i = left;
75251
75466
  j = right;
@@ -75281,12 +75496,12 @@ function array_quick_sort_by_comparator(
75281
75496
 
75282
75497
  /* recursion */
75283
75498
  if (left < j) {
75284
- stack$2[stackPointer++] = left;
75285
- stack$2[stackPointer++] = j;
75499
+ stack$3[stackPointer++] = left;
75500
+ stack$3[stackPointer++] = j;
75286
75501
  }
75287
75502
  if (i < right) {
75288
- stack$2[stackPointer++] = i;
75289
- stack$2[stackPointer++] = right;
75503
+ stack$3[stackPointer++] = i;
75504
+ stack$3[stackPointer++] = right;
75290
75505
  }
75291
75506
  }
75292
75507
  }
@@ -76207,6 +76422,12 @@ function textureImagesEqual(a, b) {
76207
76422
 
76208
76423
  }
76209
76424
 
76425
+ if (isTypedArray(a.data) && isTypedArray(b.data)) {
76426
+ if (!textureMipmapEqual(a, b)) {
76427
+ return false;
76428
+ }
76429
+ }
76430
+
76210
76431
  // assume equivalent
76211
76432
  return true;
76212
76433
  }
@@ -88133,7 +88354,7 @@ class ColorAndDepthFrameBuffer extends FrameBuffer {
88133
88354
 
88134
88355
  const target = new WebGLMultisampleRenderTarget(size.x, size.y,{ignoreDepth: false});
88135
88356
 
88136
- target.texture.format = RGBFormat; // note, three.js required RGBA render texture, even though RGB would do here
88357
+ target.texture.format = RGBFormat$1; // note, three.js required RGBA render texture, even though RGB would do here
88137
88358
  target.texture.minFilter = NearestFilter;
88138
88359
  target.texture.magFilter = NearestFilter;
88139
88360
  target.texture.generateMipmaps = false;
@@ -88152,7 +88373,7 @@ class ColorAndDepthFrameBuffer extends FrameBuffer {
88152
88373
  }
88153
88374
  }
88154
88375
 
88155
- const stack$1 = [];
88376
+ const stack$2 = [];
88156
88377
 
88157
88378
  class ThreeBypassRenderer {
88158
88379
  constructor() {
@@ -88229,13 +88450,13 @@ class ThreeBypassRenderer {
88229
88450
  const object3D = input[i];
88230
88451
 
88231
88452
  if (input_filter(object3D)) {
88232
- stack$1[stack_top++] = object3D;
88453
+ stack$2[stack_top++] = object3D;
88233
88454
  }
88234
88455
 
88235
88456
  }
88236
88457
 
88237
88458
  while (stack_top > 0) {
88238
- const object3D = stack$1[--stack_top];
88459
+ const object3D = stack$2[--stack_top];
88239
88460
 
88240
88461
  if (
88241
88462
  object_filter(object3D)
@@ -88274,7 +88495,7 @@ class ThreeBypassRenderer {
88274
88495
  for (i = 0; i < child_count; i++) {
88275
88496
  const child = children[i];
88276
88497
 
88277
- stack$1[stack_top++] = child;
88498
+ stack$2[stack_top++] = child;
88278
88499
  }
88279
88500
  }
88280
88501
 
@@ -105798,6 +106019,82 @@ function computeBinaryDataTypeByPrecision(type, precision) {
105798
106019
  throw new Error(`Unsupported numeric type(=${type}) and precision(=${precision}) combination`);
105799
106020
  }
105800
106021
 
106022
+ const stack$1 = [];
106023
+
106024
+ /**
106025
+ * @template T
106026
+ * @param {T[]|ArrayLike<number>|Uint32Array} data
106027
+ * @param {function(T):number} score_function
106028
+ * @param {*} score_function_context
106029
+ * @param {number} start
106030
+ * @param {number} end
106031
+ * @param {function(T[],number, number):*} [swap_operator]
106032
+ * @param {*} [swap_context]
106033
+ */
106034
+ function arrayQuickSort(
106035
+ data,
106036
+ score_function, score_function_context,
106037
+ start, end,
106038
+ swap_operator = array_swap_one, swap_context = undefined
106039
+ ) {
106040
+ if (start >= end) {
106041
+ // section of 0 size, nothing to sort
106042
+ return;
106043
+ }
106044
+
106045
+ let stackPointer = 2;
106046
+ let i, j;
106047
+
106048
+ stack$1[0] = start;
106049
+ stack$1[1] = end;
106050
+
106051
+ while (stackPointer > 0) {
106052
+ stackPointer -= 2;
106053
+
106054
+ const right = stack$1[stackPointer + 1];
106055
+ const left = stack$1[stackPointer];
106056
+
106057
+ i = left;
106058
+ j = right;
106059
+
106060
+ const pivotIndex = (left + right) >> 1;
106061
+
106062
+ const pivot = score_function.call(score_function_context, data[pivotIndex]);
106063
+
106064
+ /* partition */
106065
+ while (i <= j) {
106066
+ while (score_function.call(score_function_context, data[i]) < pivot) {
106067
+ i++;
106068
+ }
106069
+
106070
+ while (score_function.call(score_function_context, data[j]) > pivot) {
106071
+ j--;
106072
+ }
106073
+
106074
+ if (i <= j) {
106075
+
106076
+ if (i !== j) {
106077
+ //do swap
106078
+ swap_operator.call(swap_context, data, i, j);
106079
+ }
106080
+
106081
+ i++;
106082
+ j--;
106083
+ }
106084
+ }
106085
+
106086
+ /* recursion */
106087
+ if (left < j) {
106088
+ stack$1[stackPointer++] = left;
106089
+ stack$1[stackPointer++] = j;
106090
+ }
106091
+ if (i < right) {
106092
+ stack$1[stackPointer++] = i;
106093
+ stack$1[stackPointer++] = right;
106094
+ }
106095
+ }
106096
+ }
106097
+
105801
106098
  /**
105802
106099
  *
105803
106100
  * @param {number[]|Float32Array|Float64Array} source