@woosh/meep-engine 3.14.0 → 3.14.2

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 (220) hide show
  1. package/README.md +33 -64
  2. package/package.json +1 -1
  3. package/src/avif/native/DECISIONS.md +544 -536
  4. package/src/avif/native/heif/parse_avif_file.d.ts.map +1 -1
  5. package/src/avif/native/heif/parse_avif_file.js +384 -383
  6. package/src/avif/native/heif/parse_image_grid.d.ts.map +1 -1
  7. package/src/avif/native/heif/parse_image_grid.js +49 -48
  8. package/src/basis/BasisBitReader.d.ts +77 -0
  9. package/src/basis/BasisBitReader.d.ts.map +1 -0
  10. package/src/basis/BasisBitReader.js +231 -0
  11. package/src/basis/BasisHuffmanTable.d.ts +53 -0
  12. package/src/basis/BasisHuffmanTable.d.ts.map +1 -0
  13. package/src/basis/BasisHuffmanTable.js +263 -0
  14. package/src/basis/basis_read_huffman_table.d.ts +20 -0
  15. package/src/basis/basis_read_huffman_table.d.ts.map +1 -0
  16. package/src/basis/basis_read_huffman_table.js +187 -0
  17. package/src/basis/etc1s/Etc1sSelectorHistory.d.ts +50 -0
  18. package/src/basis/etc1s/Etc1sSelectorHistory.d.ts.map +1 -0
  19. package/src/basis/etc1s/Etc1sSelectorHistory.js +89 -0
  20. package/src/basis/etc1s/etc1s_block_colors.d.ts +14 -0
  21. package/src/basis/etc1s/etc1s_block_colors.d.ts.map +1 -0
  22. package/src/basis/etc1s/etc1s_block_colors.js +75 -0
  23. package/src/basis/etc1s/etc1s_decode_slice.d.ts +57 -0
  24. package/src/basis/etc1s/etc1s_decode_slice.d.ts.map +1 -0
  25. package/src/basis/etc1s/etc1s_decode_slice.js +258 -0
  26. package/src/basis/etc1s/etc1s_read_endpoint_codebook.d.ts +48 -0
  27. package/src/basis/etc1s/etc1s_read_endpoint_codebook.d.ts.map +1 -0
  28. package/src/basis/etc1s/etc1s_read_endpoint_codebook.js +111 -0
  29. package/src/basis/etc1s/etc1s_read_selector_codebook.d.ts +42 -0
  30. package/src/basis/etc1s/etc1s_read_selector_codebook.d.ts.map +1 -0
  31. package/src/basis/etc1s/etc1s_read_selector_codebook.js +127 -0
  32. package/src/basis/etc1s/etc1s_read_slice_tables.d.ts +54 -0
  33. package/src/basis/etc1s/etc1s_read_slice_tables.d.ts.map +1 -0
  34. package/src/basis/etc1s/etc1s_read_slice_tables.js +47 -0
  35. package/src/basis/transcode/build_range_plan.js +54 -0
  36. package/src/basis/transcode/etc1s_to_bc1.d.ts +24 -0
  37. package/src/basis/transcode/etc1s_to_bc1.d.ts.map +1 -0
  38. package/src/basis/transcode/etc1s_to_bc1.js +205 -0
  39. package/src/basis/transcode/etc1s_to_bc7.d.ts +30 -0
  40. package/src/basis/transcode/etc1s_to_bc7.d.ts.map +1 -0
  41. package/src/basis/transcode/etc1s_to_bc7.js +496 -0
  42. package/src/basis/transcode/fit_endpoints.d.ts +59 -0
  43. package/src/basis/transcode/fit_endpoints.d.ts.map +1 -0
  44. package/src/basis/transcode/fit_endpoints.js +226 -0
  45. package/src/{avif/native/isobmff → core/binary}/ByteCursor.d.ts +19 -6
  46. package/src/core/binary/ByteCursor.d.ts.map +1 -0
  47. package/src/{avif/native/isobmff → core/binary}/ByteCursor.js +41 -14
  48. package/src/engine/EngineHarness.js +1 -1
  49. package/src/engine/asset/codec/Codec.d.ts.map +1 -0
  50. package/src/engine/asset/codec/CodecWithFallback.d.ts.map +1 -0
  51. package/src/engine/asset/{loaders/image/codec → codec}/CodecWithFallback.js +2 -2
  52. package/src/engine/asset/loaders/image/IMAGE_CODEC_REVIEW_2026_08_28.md +4 -4
  53. package/src/engine/asset/loaders/image/ImageRGBADataLoader.d.ts +1 -1
  54. package/src/engine/asset/loaders/image/ImageRGBADataLoader.d.ts.map +1 -1
  55. package/src/engine/asset/loaders/image/ImageRGBADataLoader.js +1 -1
  56. package/src/engine/asset/loaders/image/codec/NativeImageDecoder.d.ts +1 -1
  57. package/src/engine/asset/loaders/image/codec/NativeImageDecoder.d.ts.map +1 -1
  58. package/src/engine/asset/loaders/image/codec/NativeImageDecoder.js +1 -1
  59. package/src/engine/asset/loaders/image/codec/ThreadedImageDecoder.d.ts +1 -1
  60. package/src/engine/asset/loaders/image/codec/ThreadedImageDecoder.d.ts.map +1 -1
  61. package/src/engine/asset/loaders/image/codec/ThreadedImageDecoder.js +1 -1
  62. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
  63. package/src/engine/graphics/texture/atlas/TextureAtlas.js +13 -0
  64. package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -1
  65. package/src/engine/physics/broadphase/generate_pairs.js +7 -1
  66. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  67. package/src/ktx2/KTX2_IDENTIFIER.d.ts +14 -0
  68. package/src/ktx2/KTX2_IDENTIFIER.d.ts.map +1 -0
  69. package/src/ktx2/KTX2_IDENTIFIER.js +15 -0
  70. package/src/ktx2/KhrDfModel.d.ts +35 -0
  71. package/src/ktx2/KhrDfModel.d.ts.map +1 -0
  72. package/src/ktx2/KhrDfModel.js +49 -0
  73. package/src/ktx2/SupercompressionScheme.d.ts +16 -0
  74. package/src/ktx2/SupercompressionScheme.d.ts.map +1 -0
  75. package/src/ktx2/SupercompressionScheme.js +23 -0
  76. package/src/ktx2/ktx2_read.d.ts +71 -0
  77. package/src/ktx2/ktx2_read.d.ts.map +1 -0
  78. package/src/ktx2/ktx2_read.js +581 -0
  79. package/src/ktx2/ktx2_read_basis_lz_global_data.d.ts +27 -0
  80. package/src/ktx2/ktx2_read_basis_lz_global_data.d.ts.map +1 -0
  81. package/src/ktx2/ktx2_read_basis_lz_global_data.js +189 -0
  82. package/src/ktx2/vk_format_to_texture_format.d.ts +55 -0
  83. package/src/ktx2/vk_format_to_texture_format.d.ts.map +1 -0
  84. package/src/ktx2/vk_format_to_texture_format.js +290 -0
  85. package/src/shade/descriptor/GPUTextureUsage.d.ts +23 -0
  86. package/src/shade/descriptor/GPUTextureUsage.d.ts.map +1 -0
  87. package/src/shade/descriptor/GPUTextureUsage.js +24 -0
  88. package/src/shade/descriptor/WebGPUExtensionType.d.ts +3 -0
  89. package/src/shade/descriptor/WebGPUExtensionType.js +26 -0
  90. package/src/shade/descriptor/texture/TextureDescriptor.d.ts +2 -6
  91. package/src/shade/descriptor/texture/TextureDescriptor.d.ts.map +1 -1
  92. package/src/shade/descriptor/texture/TextureDescriptor.js +24 -40
  93. package/src/shade/descriptor/texture/format/TextureFormat.d.ts +125 -0
  94. package/src/shade/descriptor/texture/format/TextureFormat.d.ts.map +1 -0
  95. package/src/shade/descriptor/texture/format/TextureFormat.js +146 -0
  96. package/src/shade/descriptor/texture/format/gpu_texture_format_info.d.ts +60 -0
  97. package/src/shade/descriptor/texture/format/gpu_texture_format_info.d.ts.map +1 -1
  98. package/src/shade/descriptor/texture/format/gpu_texture_format_info.js +102 -0
  99. package/src/shade/device/graph/TextureResourceDescriptor.d.ts.map +1 -1
  100. package/src/shade/device/graph/TextureResourceDescriptor.js +160 -155
  101. package/src/shade/device/mock/SoftwareGPUQueue.d.ts +11 -4
  102. package/src/shade/device/mock/SoftwareGPUQueue.d.ts.map +1 -1
  103. package/src/shade/device/mock/SoftwareGPUQueue.js +31 -37
  104. package/src/shade/device/mock/SoftwareGPUTexture.d.ts.map +1 -1
  105. package/src/shade/device/mock/SoftwareGPUTexture.js +8 -4
  106. package/src/shade/device/timing/profile/frame_graph_extract_topology.d.ts.map +1 -1
  107. package/src/shade/device/timing/profile/frame_graph_extract_topology.js +164 -174
  108. package/src/shade/playground/ground_seam/README.md +235 -0
  109. package/src/shade/playground/ground_seam/capture_scene_color.d.ts +45 -0
  110. package/src/shade/playground/ground_seam/capture_scene_color.d.ts.map +1 -0
  111. package/src/shade/playground/ground_seam/capture_scene_color.js +242 -0
  112. package/src/shade/playground/ground_seam/depth_step_across_seam.d.ts +11 -0
  113. package/src/shade/playground/ground_seam/depth_step_across_seam.d.ts.map +1 -0
  114. package/src/shade/playground/ground_seam/depth_step_across_seam.js +185 -0
  115. package/src/shade/playground/ground_seam/index.html +195 -0
  116. package/src/shade/playground/ground_seam/main.d.ts +2 -0
  117. package/src/shade/playground/ground_seam/main.d.ts.map +1 -0
  118. package/src/shade/playground/ground_seam/main.js +879 -0
  119. package/src/shade/playground/ground_seam/make_grid_texture.d.ts +29 -0
  120. package/src/shade/playground/ground_seam/make_grid_texture.d.ts.map +1 -0
  121. package/src/shade/playground/ground_seam/make_grid_texture.js +105 -0
  122. package/src/shade/playground/ground_seam/make_ground.d.ts +70 -0
  123. package/src/shade/playground/ground_seam/make_ground.d.ts.map +1 -0
  124. package/src/shade/playground/ground_seam/make_ground.js +161 -0
  125. package/src/shade/playground/ground_seam/measure_flicker.d.ts +71 -0
  126. package/src/shade/playground/ground_seam/measure_flicker.d.ts.map +1 -0
  127. package/src/shade/playground/ground_seam/measure_flicker.js +531 -0
  128. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  129. package/src/shade/renderer/Renderer.js +2519 -2511
  130. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  131. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +275 -274
  132. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  133. package/src/shade/renderer/light/GPULightCollection.js +323 -314
  134. package/src/shade/renderer/lightmap/GPULightMap.js +336 -336
  135. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  136. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +12 -2
  137. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
  138. package/src/shade/renderer/material/standard/fragment_gbuffer.js +3 -1
  139. package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
  140. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
  141. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +3 -1
  142. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  143. package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -1
  144. package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_brick4.js +3 -1
  145. package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -1
  146. package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_ibl.js +3 -1
  147. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_tangent_normal.d.ts +28 -0
  148. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_tangent_normal.d.ts.map +1 -0
  149. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_tangent_normal.js +39 -0
  150. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_barycentric_full.d.ts +45 -0
  151. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_barycentric_full.d.ts.map +1 -1
  152. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_barycentric_full.js +94 -61
  153. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_barycentric_solve.d.ts +24 -0
  154. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_barycentric_solve.d.ts.map +1 -0
  155. package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_barycentric_solve.js +43 -0
  156. package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +1462 -0
  157. package/src/shade/renderer/texture/TextureManager.d.ts.map +1 -1
  158. package/src/shade/renderer/texture/TextureManager.js +20 -8
  159. package/src/shade/renderer/texture/TextureRole.d.ts +19 -0
  160. package/src/shade/renderer/texture/TextureRole.d.ts.map +1 -0
  161. package/src/shade/renderer/texture/TextureRole.js +26 -0
  162. package/src/shade/renderer/texture/TextureVariantSet.d.ts +71 -0
  163. package/src/shade/renderer/texture/TextureVariantSet.d.ts.map +1 -0
  164. package/src/shade/renderer/texture/TextureVariantSet.js +105 -0
  165. package/src/shade/renderer/texture/download_texture_data.d.ts.map +1 -1
  166. package/src/shade/renderer/texture/download_texture_data.js +22 -0
  167. package/src/shade/renderer/texture/format/gpu_texture_compression_support.d.ts +15 -0
  168. package/src/shade/renderer/texture/format/gpu_texture_compression_support.d.ts.map +1 -0
  169. package/src/shade/renderer/texture/format/gpu_texture_compression_support.js +50 -0
  170. package/src/shade/renderer/texture/format/gpu_texture_format_can_generate_mipmaps.d.ts +27 -0
  171. package/src/shade/renderer/texture/format/gpu_texture_format_can_generate_mipmaps.d.ts.map +1 -0
  172. package/src/shade/renderer/texture/format/gpu_texture_format_can_generate_mipmaps.js +65 -0
  173. package/src/shade/renderer/texture/format/infer_format_from_parameters.d.ts +11 -0
  174. package/src/shade/renderer/texture/format/infer_format_from_parameters.d.ts.map +1 -0
  175. package/src/shade/renderer/texture/format/infer_format_from_parameters.js +88 -0
  176. package/src/shade/renderer/texture/format/texture_format_from_shade_image.d.ts +24 -0
  177. package/src/shade/renderer/texture/format/texture_format_from_shade_image.d.ts.map +1 -0
  178. package/src/shade/renderer/texture/format/texture_format_from_shade_image.js +71 -0
  179. package/src/shade/renderer/texture/format/texture_format_preference.d.ts +22 -0
  180. package/src/shade/renderer/texture/format/texture_format_preference.d.ts.map +1 -0
  181. package/src/shade/renderer/texture/format/texture_format_preference.js +89 -0
  182. package/src/shade/renderer/texture/format/texture_variant_select.d.ts +24 -0
  183. package/src/shade/renderer/texture/format/texture_variant_select.d.ts.map +1 -0
  184. package/src/shade/renderer/texture/format/texture_variant_select.js +38 -0
  185. package/src/shade/renderer/texture/shade_texture_might_have_alpha.d.ts +9 -1
  186. package/src/shade/renderer/texture/shade_texture_might_have_alpha.d.ts.map +1 -1
  187. package/src/shade/renderer/texture/shade_texture_might_have_alpha.js +73 -8
  188. package/src/shade/renderer/texture/source/AlphaMode.d.ts +27 -0
  189. package/src/shade/renderer/texture/source/AlphaMode.d.ts.map +1 -0
  190. package/src/shade/renderer/texture/source/AlphaMode.js +52 -0
  191. package/src/shade/renderer/texture/source/ShadeImage.d.ts +33 -0
  192. package/src/shade/renderer/texture/source/ShadeImage.d.ts.map +1 -1
  193. package/src/shade/renderer/texture/source/ShadeImage.js +74 -0
  194. package/src/shade/renderer/texture/source/ShadeTexelData.d.ts +78 -0
  195. package/src/shade/renderer/texture/source/ShadeTexelData.d.ts.map +1 -0
  196. package/src/shade/renderer/texture/source/ShadeTexelData.js +158 -0
  197. package/src/shade/renderer/texture/texture_descriptor_from_texture_shade.d.ts +0 -10
  198. package/src/shade/renderer/texture/texture_descriptor_from_texture_shade.d.ts.map +1 -1
  199. package/src/shade/renderer/texture/texture_descriptor_from_texture_shade.js +73 -175
  200. package/src/shade/renderer/texture/texture_write_level.d.ts +32 -0
  201. package/src/shade/renderer/texture/texture_write_level.d.ts.map +1 -0
  202. package/src/shade/renderer/texture/texture_write_level.js +77 -0
  203. package/src/shade/renderer/texture/texture_write_to_gpu.d.ts +8 -1
  204. package/src/shade/renderer/texture/texture_write_to_gpu.d.ts.map +1 -1
  205. package/src/shade/renderer/texture/texture_write_to_gpu.js +62 -37
  206. package/src/shade/renderer/texture/virtual/source/VTSourceImage.d.ts +8 -0
  207. package/src/shade/renderer/texture/virtual/source/VTSourceImage.d.ts.map +1 -1
  208. package/src/shade/renderer/texture/virtual/source/VTSourceImage.js +8 -0
  209. package/src/shade/util/texture_mip_extent.d.ts +49 -0
  210. package/src/shade/util/texture_mip_extent.d.ts.map +1 -0
  211. package/src/shade/util/texture_mip_extent.js +87 -0
  212. package/src/avif/native/isobmff/ByteCursor.d.ts.map +0 -1
  213. package/src/engine/asset/loaders/image/codec/Codec.d.ts.map +0 -1
  214. package/src/engine/asset/loaders/image/codec/CodecWithFallback.d.ts.map +0 -1
  215. package/src/shade/util/compute_max_mip_count.d.ts +0 -8
  216. package/src/shade/util/compute_max_mip_count.d.ts.map +0 -1
  217. package/src/shade/util/compute_max_mip_count.js +0 -27
  218. /package/src/engine/asset/{loaders/image/codec → codec}/Codec.d.ts +0 -0
  219. /package/src/engine/asset/{loaders/image/codec → codec}/Codec.js +0 -0
  220. /package/src/engine/asset/{loaders/image/codec → codec}/CodecWithFallback.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"HierarchicalZBuffer.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/hiz/HierarchicalZBuffer.js"],"names":[],"mappings":"AASA;IAgCI;;;OAGG;IACH,uCAYC;IApCD;;;OAGG;IACH,iCAEC;IAgCD;;;;;OAKG;IACH,kFAFW,MAAM,EAAE,QAiGlB;IAmED;;;;OAIG;IACH,mBAHW,MAAM,KACN,MAAM,QAahB;IA2BD,gBAEC;;CACJ"}
1
+ {"version":3,"file":"HierarchicalZBuffer.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/hiz/HierarchicalZBuffer.js"],"names":[],"mappings":"AASA;IAgCI;;;OAGG;IACH,uCAYC;IApCD;;;OAGG;IACH,iCAEC;IAgCD;;;;;OAKG;IACH,kFAFW,MAAM,EAAE,QAiGlB;IAmED;;;;OAIG;IACH,mBAHW,MAAM,KACN,MAAM,QAahB;IA4BD,gBAEC;;CACJ"}
@@ -1,274 +1,275 @@
1
- import { assert } from "../../../core/assert.js";
2
- import { max2 } from "../../../core/math/max2.js";
3
- import { TextureDescriptor } from "../../descriptor/texture/TextureDescriptor.js";
4
- import { TextureViewDescriptor } from "../../descriptor/texture/TextureViewDescriptor.js";
5
- import { compute_max_mip_count } from "../../util/compute_max_mip_count.js";
6
- import { HZB_TEXTURE_FORMAT } from "./HZB_TEXTURE_FORMAT.js";
7
- import { shader_hzb_reduce_any, shader_hzb_reduce_mip0 } from "./shader_hzb_reduce_any.js";
8
- import { shader_hzb_reduce_mip0_clip } from "./shader_hzb_reduce_mip0_clip.js";
9
-
10
- export class HierarchicalZBuffer {
11
-
12
- /**
13
- * @type {GPUTextureContext}
14
- */
15
- #texture;
16
-
17
- /**
18
- * @type {string|GPUTextureFormat}
19
- */
20
- #format = HZB_TEXTURE_FORMAT
21
-
22
- /**
23
- *
24
- * @returns {GPUTextureContext}
25
- */
26
- get texture() {
27
- return this.#texture;
28
- }
29
-
30
-
31
- /**
32
- * @type {GraphicsContext}
33
- */
34
- #graphics;
35
-
36
- /**
37
- *
38
- * @type {number[]}
39
- */
40
- #viewport_size = [1, 1];
41
-
42
- /**
43
- *
44
- * @param {GraphicsContext} graphics
45
- */
46
- constructor(graphics) {
47
- this.#graphics = graphics;
48
-
49
- this.#texture = graphics.textures.contextFromDescriptor(TextureDescriptor.from({
50
- label: "Hierarchical Z Buffer",
51
- format: this.#format,
52
- usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT,
53
- mipLevelCount: 1,
54
- size: [1, 1]
55
- }));
56
-
57
-
58
- }
59
-
60
- /**
61
- *
62
- * @param {ShadeGPUCommandContext} encoder
63
- * @param {GPUTextureContext} source
64
- * @param {number[]} [source_offset] [x0,y0]
65
- */
66
- build(
67
- encoder,
68
- source,
69
- source_offset
70
- ) {
71
-
72
- assert.defined(encoder, 'encoder');
73
- assert.notNull(encoder, 'encoder');
74
- assert.equal(encoder.isGPUCommandContext, true, 'encoder is not a GPUCommandContext')
75
-
76
- assert.defined(source, 'source');
77
- assert.notNull(source, 'source');
78
- assert.equal(source.isGPUTextureContext, true, 'source is not a GPUTextureContext')
79
-
80
- // the first pass is special, we need to read from source texture and write to first mip level of hzb
81
-
82
- const texture = this.#texture;
83
-
84
- assert.equal(texture.isDestroyed, false, 'texture is destroyed');
85
-
86
- const mipLevelCount = texture.descriptor.mipLevelCount;
87
-
88
- let source_view = source.obtainView(TextureViewDescriptor.from({
89
- baseMipLevel: 0,
90
- mipLevelCount: 1,
91
- dimension: "2d",
92
- baseArrayLayer: 0,
93
- arrayLayerCount: 1
94
- }));
95
-
96
- const destination_view = texture.obtainView(TextureViewDescriptor.from({
97
- baseMipLevel: 0,
98
- mipLevelCount: 1,
99
- dimension: "2d",
100
- baseArrayLayer: 0,
101
- arrayLayerCount: 1
102
- }));
103
-
104
- const viewport_size = this.#viewport_size;
105
-
106
- const is_clipped_variant = source_offset !== undefined
107
- && (
108
- (
109
- source_offset[0] !== 0
110
- || source_offset[1] !== 0
111
- )
112
- || (
113
- viewport_size[0] !== source.width
114
- || viewport_size[1] !== source.height
115
- )
116
- );
117
-
118
- if (is_clipped_variant) {
119
- // special case for clip region
120
-
121
- shader_hzb_reduce_mip0_clip.draw({
122
- encoder,
123
- bindings: {
124
- tInput: source_view,
125
- settings: {
126
- clip_region: [
127
- source_offset[0], source_offset[1],
128
- viewport_size[0], viewport_size[1],
129
- ],
130
- output_resolution: this.#mip_resolution(0),
131
- },
132
- },
133
- colorAttachments: [{
134
- view: destination_view,
135
- loadOp: 'clear',
136
- storeOp: 'store'
137
- }]
138
- })
139
- } else {
140
-
141
- this.#do_reduction_pass(encoder, shader_hzb_reduce_mip0, source_view, destination_view, 0);
142
- }
143
-
144
- source_view = destination_view;
145
-
146
- for (let i = 1; i < mipLevelCount; i++) {
147
-
148
- const destination_view = texture.obtainView(TextureViewDescriptor.from({
149
- baseMipLevel: i,
150
- mipLevelCount: 1,
151
- dimension: "2d",
152
- baseArrayLayer: 0,
153
- arrayLayerCount: 1
154
- }));
155
-
156
- this.#do_reduction_pass(encoder, shader_hzb_reduce_any, source_view, destination_view, i);
157
-
158
- // swap
159
- source_view = destination_view;
160
- }
161
- }
162
-
163
- /**
164
- *
165
- * @param {ShadeGPUCommandContext} encoder
166
- * @param {ImageShader} shader
167
- * @param {GPUTextureView} source_view
168
- * @param {GPUTextureView} destination_view
169
- * @param {number} index
170
- * @param {number[]} [viewport]
171
- */
172
- #do_reduction_pass(
173
- encoder,
174
- shader,
175
- source_view,
176
- destination_view,
177
- index,
178
- viewport
179
- ) {
180
-
181
- shader.draw({
182
- encoder,
183
- bindings: {
184
- tInput: source_view,
185
- output_resolution: this.#mip_resolution(index),
186
- },
187
- colorAttachments: [
188
- {
189
- view: destination_view,
190
- loadOp: 'clear',
191
- storeOp: 'store'
192
- }
193
- ],
194
- viewport
195
- })
196
-
197
- }
198
-
199
- /**
200
- * Scratch for {@link #mip_resolution}. The value is serialised into the pass's immediate bytes
201
- * before the next call, so one array can serve every mip.
202
- *
203
- * @type {number[]}
204
- */
205
- #mip_resolution_scratch = [1, 1];
206
-
207
- /**
208
- * Size of mip `index` of the HZB, which is what the reduction pass writing into it needs to know.
209
- *
210
- * Each mip halves the one above it, floored at one texel — the same walk that used to be
211
- * precomputed into a uniform buffer of every mip's resolution and bound at a per-mip dynamic
212
- * offset. As immediate data there is nothing to precompute into.
213
- *
214
- * @param {number} index
215
- * @returns {number[]}
216
- */
217
- #mip_resolution(index) {
218
- const size = this.#texture.size;
219
-
220
- const out = this.#mip_resolution_scratch;
221
-
222
- out[0] = max2(1, size[0] >>> index);
223
- out[1] = max2(1, size[1] >>> index);
224
-
225
- return out;
226
- }
227
-
228
- /**
229
- *
230
- * @param {number} x
231
- * @param {number} y
232
- */
233
- setViewportSize(x, y) {
234
- assert.isNonNegativeInteger(x, 'x');
235
- assert.isNonNegativeInteger(y, 'y');
236
-
237
- this.#viewport_size[0] = x;
238
- this.#viewport_size[1] = y;
239
-
240
- const hzb_w = Math.max(x >>> 1, 1);
241
- const hzb_h = Math.max(y >>> 1, 1);
242
-
243
- this.#resize(hzb_w, hzb_h);
244
- }
245
-
246
- /**
247
- *
248
- * @param {number} x
249
- * @param {number} y
250
- */
251
- #resize(
252
- x,
253
- y
254
- ) {
255
-
256
- const texture = this.#texture;
257
- const size = texture.size;
258
-
259
- if (size[0] === x && size[1] === y) {
260
- // no size change
261
- return;
262
- }
263
-
264
- const mip_count = compute_max_mip_count(x, y);
265
-
266
- texture.descriptor.mipLevelCount = mip_count;
267
-
268
- texture.resize(x, y);
269
- }
270
-
271
- destroy() {
272
- this.#texture.destroy();
273
- }
274
- }
1
+ import { assert } from "../../../core/assert.js";
2
+ import { max2 } from "../../../core/math/max2.js";
3
+ import { TextureDescriptor } from "../../descriptor/texture/TextureDescriptor.js";
4
+ import { TextureViewDescriptor } from "../../descriptor/texture/TextureViewDescriptor.js";
5
+ import { texture_mip_level_count } from "../../util/texture_mip_extent.js";
6
+ import { HZB_TEXTURE_FORMAT } from "./HZB_TEXTURE_FORMAT.js";
7
+ import { shader_hzb_reduce_any, shader_hzb_reduce_mip0 } from "./shader_hzb_reduce_any.js";
8
+ import { shader_hzb_reduce_mip0_clip } from "./shader_hzb_reduce_mip0_clip.js";
9
+
10
+ export class HierarchicalZBuffer {
11
+
12
+ /**
13
+ * @type {GPUTextureContext}
14
+ */
15
+ #texture;
16
+
17
+ /**
18
+ * @type {string|GPUTextureFormat}
19
+ */
20
+ #format = HZB_TEXTURE_FORMAT
21
+
22
+ /**
23
+ *
24
+ * @returns {GPUTextureContext}
25
+ */
26
+ get texture() {
27
+ return this.#texture;
28
+ }
29
+
30
+
31
+ /**
32
+ * @type {GraphicsContext}
33
+ */
34
+ #graphics;
35
+
36
+ /**
37
+ *
38
+ * @type {number[]}
39
+ */
40
+ #viewport_size = [1, 1];
41
+
42
+ /**
43
+ *
44
+ * @param {GraphicsContext} graphics
45
+ */
46
+ constructor(graphics) {
47
+ this.#graphics = graphics;
48
+
49
+ this.#texture = graphics.textures.contextFromDescriptor(TextureDescriptor.from({
50
+ label: "Hierarchical Z Buffer",
51
+ format: this.#format,
52
+ usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT,
53
+ mipLevelCount: 1,
54
+ size: [1, 1]
55
+ }));
56
+
57
+
58
+ }
59
+
60
+ /**
61
+ *
62
+ * @param {ShadeGPUCommandContext} encoder
63
+ * @param {GPUTextureContext} source
64
+ * @param {number[]} [source_offset] [x0,y0]
65
+ */
66
+ build(
67
+ encoder,
68
+ source,
69
+ source_offset
70
+ ) {
71
+
72
+ assert.defined(encoder, 'encoder');
73
+ assert.notNull(encoder, 'encoder');
74
+ assert.equal(encoder.isGPUCommandContext, true, 'encoder is not a GPUCommandContext')
75
+
76
+ assert.defined(source, 'source');
77
+ assert.notNull(source, 'source');
78
+ assert.equal(source.isGPUTextureContext, true, 'source is not a GPUTextureContext')
79
+
80
+ // the first pass is special, we need to read from source texture and write to first mip level of hzb
81
+
82
+ const texture = this.#texture;
83
+
84
+ assert.equal(texture.isDestroyed, false, 'texture is destroyed');
85
+
86
+ const mipLevelCount = texture.descriptor.mipLevelCount;
87
+
88
+ let source_view = source.obtainView(TextureViewDescriptor.from({
89
+ baseMipLevel: 0,
90
+ mipLevelCount: 1,
91
+ dimension: "2d",
92
+ baseArrayLayer: 0,
93
+ arrayLayerCount: 1
94
+ }));
95
+
96
+ const destination_view = texture.obtainView(TextureViewDescriptor.from({
97
+ baseMipLevel: 0,
98
+ mipLevelCount: 1,
99
+ dimension: "2d",
100
+ baseArrayLayer: 0,
101
+ arrayLayerCount: 1
102
+ }));
103
+
104
+ const viewport_size = this.#viewport_size;
105
+
106
+ const is_clipped_variant = source_offset !== undefined
107
+ && (
108
+ (
109
+ source_offset[0] !== 0
110
+ || source_offset[1] !== 0
111
+ )
112
+ || (
113
+ viewport_size[0] !== source.width
114
+ || viewport_size[1] !== source.height
115
+ )
116
+ );
117
+
118
+ if (is_clipped_variant) {
119
+ // special case for clip region
120
+
121
+ shader_hzb_reduce_mip0_clip.draw({
122
+ encoder,
123
+ bindings: {
124
+ tInput: source_view,
125
+ settings: {
126
+ clip_region: [
127
+ source_offset[0], source_offset[1],
128
+ viewport_size[0], viewport_size[1],
129
+ ],
130
+ output_resolution: this.#mip_resolution(0),
131
+ },
132
+ },
133
+ colorAttachments: [{
134
+ view: destination_view,
135
+ loadOp: 'clear',
136
+ storeOp: 'store'
137
+ }]
138
+ })
139
+ } else {
140
+
141
+ this.#do_reduction_pass(encoder, shader_hzb_reduce_mip0, source_view, destination_view, 0);
142
+ }
143
+
144
+ source_view = destination_view;
145
+
146
+ for (let i = 1; i < mipLevelCount; i++) {
147
+
148
+ const destination_view = texture.obtainView(TextureViewDescriptor.from({
149
+ baseMipLevel: i,
150
+ mipLevelCount: 1,
151
+ dimension: "2d",
152
+ baseArrayLayer: 0,
153
+ arrayLayerCount: 1
154
+ }));
155
+
156
+ this.#do_reduction_pass(encoder, shader_hzb_reduce_any, source_view, destination_view, i);
157
+
158
+ // swap
159
+ source_view = destination_view;
160
+ }
161
+ }
162
+
163
+ /**
164
+ *
165
+ * @param {ShadeGPUCommandContext} encoder
166
+ * @param {ImageShader} shader
167
+ * @param {GPUTextureView} source_view
168
+ * @param {GPUTextureView} destination_view
169
+ * @param {number} index
170
+ * @param {number[]} [viewport]
171
+ */
172
+ #do_reduction_pass(
173
+ encoder,
174
+ shader,
175
+ source_view,
176
+ destination_view,
177
+ index,
178
+ viewport
179
+ ) {
180
+
181
+ shader.draw({
182
+ encoder,
183
+ bindings: {
184
+ tInput: source_view,
185
+ output_resolution: this.#mip_resolution(index),
186
+ },
187
+ colorAttachments: [
188
+ {
189
+ view: destination_view,
190
+ loadOp: 'clear',
191
+ storeOp: 'store'
192
+ }
193
+ ],
194
+ viewport
195
+ })
196
+
197
+ }
198
+
199
+ /**
200
+ * Scratch for {@link #mip_resolution}. The value is serialised into the pass's immediate bytes
201
+ * before the next call, so one array can serve every mip.
202
+ *
203
+ * @type {number[]}
204
+ */
205
+ #mip_resolution_scratch = [1, 1];
206
+
207
+ /**
208
+ * Size of mip `index` of the HZB, which is what the reduction pass writing into it needs to know.
209
+ *
210
+ * Each mip halves the one above it, floored at one texel — the same walk that used to be
211
+ * precomputed into a uniform buffer of every mip's resolution and bound at a per-mip dynamic
212
+ * offset. As immediate data there is nothing to precompute into.
213
+ *
214
+ * @param {number} index
215
+ * @returns {number[]}
216
+ */
217
+ #mip_resolution(index) {
218
+ const size = this.#texture.size;
219
+
220
+ const out = this.#mip_resolution_scratch;
221
+
222
+ out[0] = max2(1, size[0] >>> index);
223
+ out[1] = max2(1, size[1] >>> index);
224
+
225
+ return out;
226
+ }
227
+
228
+ /**
229
+ *
230
+ * @param {number} x
231
+ * @param {number} y
232
+ */
233
+ setViewportSize(x, y) {
234
+ assert.isNonNegativeInteger(x, 'x');
235
+ assert.isNonNegativeInteger(y, 'y');
236
+
237
+ this.#viewport_size[0] = x;
238
+ this.#viewport_size[1] = y;
239
+
240
+ const hzb_w = Math.max(x >>> 1, 1);
241
+ const hzb_h = Math.max(y >>> 1, 1);
242
+
243
+ this.#resize(hzb_w, hzb_h);
244
+ }
245
+
246
+ /**
247
+ *
248
+ * @param {number} x
249
+ * @param {number} y
250
+ */
251
+ #resize(
252
+ x,
253
+ y
254
+ ) {
255
+
256
+ const texture = this.#texture;
257
+ const size = texture.size;
258
+
259
+ if (size[0] === x && size[1] === y) {
260
+ // no size change
261
+ return;
262
+ }
263
+
264
+ // a screen-space depth pyramid, 2D always
265
+ const mip_count = texture_mip_level_count(x, y, 1, "2d");
266
+
267
+ texture.descriptor.mipLevelCount = mip_count;
268
+
269
+ texture.resize(x, y);
270
+ }
271
+
272
+ destroy() {
273
+ this.#texture.destroy();
274
+ }
275
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"GPULightCollection.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/light/GPULightCollection.js"],"names":[],"mappings":"AA6BA;IAwGI;;;;;;OAMG;IACH,mEA0BC;IAlID;;;OAGG;IACH,8BAEC;IAeD;;OAEG;IACH,4BAEC;IAED;;;;;;OAMG;IACH,6BAEC;IAWD;;OAEG;IACH,+CAEC;IA6BD;;;OAGG;IACH,qCAEC;IAGD,+BAIC;IA+ED;;;OAGG;IACH,mCAwBC;IAsED,gBAIC;;CACJ;4BAvT2B,gCAAgC;yCACnB,2CAA2C;kCAClD,iCAAiC"}
1
+ {"version":3,"file":"GPULightCollection.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/light/GPULightCollection.js"],"names":[],"mappings":"AA6BA;IAwGI;;;;;;OAMG;IACH,mEA0BC;IAlID;;;OAGG;IACH,8BAEC;IAeD;;OAEG;IACH,4BAEC;IAED;;;;;;OAMG;IACH,6BAEC;IAWD;;OAEG;IACH,+CAEC;IA6BD;;;OAGG;IACH,qCAEC;IAGD,+BAIC;IAwFD;;;OAGG;IACH,mCAwBC;IAsED,gBAIC;;CACJ;4BAhU2B,gCAAgC;yCACnB,2CAA2C;kCAClD,iCAAiC"}