@woosh/meep-engine 3.11.3 → 3.12.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.
- package/README.md +14 -18
- package/editor/SelectionVisualizer.js +127 -127
- package/editor/entity_world_bounds.js +27 -27
- package/editor/particles/rebuildParticleEmitter.js +31 -31
- package/editor/process/SymbolicDisplayProcess.js +1 -1
- package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
- package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
- package/editor/prototypeEditorShell.js +156 -156
- package/editor/selection/editor_pick.js +130 -130
- package/editor/selection/screen_rect_frustum.js +119 -119
- package/editor/tools/v2/TransformControls.js +971 -971
- package/package.json +1 -1
- package/src/engine/Engine.d.ts +3 -3
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +726 -726
- package/src/engine/EngineHarness.d.ts +1 -1
- package/src/engine/EngineHarness.js +590 -590
- package/src/engine/ecs/HIERARCHY_REVIEW.md +717 -717
- package/src/engine/ecs/terrain/ecs/BuildLightTexture.d.ts +1 -1
- package/src/engine/ecs/terrain/ecs/BuildLightTexture.js +27 -27
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts +1 -5
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/Terrain.js +790 -790
- package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +129 -129
- package/src/engine/graphics/ecs/camera/camera_find_active.d.ts +1 -1
- package/src/engine/graphics/ecs/camera/camera_find_active.js +28 -28
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +1 -1
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +428 -428
- package/src/engine/graphics/ecs/water/Water.d.ts +1 -1
- package/src/engine/graphics/ecs/water/Water.js +104 -104
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +65 -0
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -0
- package/src/engine/graphics3/AnimationGraphSystem.js +329 -0
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts +6 -61
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem3.js +6 -325
- package/src/engine/graphics3/AnimationSystem.d.ts +76 -0
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -0
- package/src/engine/graphics3/AnimationSystem.js +352 -0
- package/src/engine/graphics3/AnimationSystem3.d.ts +6 -72
- package/src/engine/graphics3/AnimationSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem3.js +6 -348
- package/src/engine/graphics3/CameraSystem.d.ts +49 -0
- package/src/engine/graphics3/CameraSystem.d.ts.map +1 -0
- package/src/engine/graphics3/CameraSystem.js +170 -0
- package/src/engine/graphics3/CameraSystem3.d.ts +6 -45
- package/src/engine/graphics3/CameraSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/CameraSystem3.js +6 -166
- package/src/engine/graphics3/DebugDrawSystem.d.ts +72 -0
- package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -0
- package/src/engine/graphics3/DebugDrawSystem.js +205 -0
- package/src/engine/graphics3/DebugDrawSystem3.d.ts +6 -68
- package/src/engine/graphics3/DebugDrawSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/DebugDrawSystem3.js +6 -201
- package/src/engine/graphics3/DecalSystem.d.ts +81 -0
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -0
- package/src/engine/graphics3/DecalSystem.js +441 -0
- package/src/engine/graphics3/DecalSystem3.d.ts +6 -77
- package/src/engine/graphics3/DecalSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem3.js +6 -437
- package/src/engine/graphics3/FogOfWarSystem.d.ts +74 -0
- package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -0
- package/src/engine/graphics3/FogOfWarSystem.js +265 -0
- package/src/engine/graphics3/FogOfWarSystem3.d.ts +6 -70
- package/src/engine/graphics3/FogOfWarSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/FogOfWarSystem3.js +6 -261
- package/src/engine/graphics3/GraphicsEngine.d.ts +340 -0
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -0
- package/src/engine/graphics3/GraphicsEngine.js +790 -0
- package/src/engine/graphics3/GraphicsEngine3.d.ts +6 -336
- package/src/engine/graphics3/GraphicsEngine3.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine3.js +6 -786
- package/src/engine/graphics3/HighlightSystem.d.ts +82 -0
- package/src/engine/graphics3/HighlightSystem.d.ts.map +1 -0
- package/src/engine/graphics3/HighlightSystem.js +241 -0
- package/src/engine/graphics3/HighlightSystem3.d.ts +6 -78
- package/src/engine/graphics3/HighlightSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/HighlightSystem3.js +6 -237
- package/src/engine/graphics3/LightSystem.d.ts +40 -0
- package/src/engine/graphics3/LightSystem.d.ts.map +1 -0
- package/src/engine/graphics3/LightSystem.js +211 -0
- package/src/engine/graphics3/LightSystem3.d.ts +6 -36
- package/src/engine/graphics3/LightSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/LightSystem3.js +6 -207
- package/src/engine/graphics3/MeshSystem.d.ts +106 -0
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -0
- package/src/engine/graphics3/MeshSystem.js +647 -0
- package/src/engine/graphics3/MeshSystem3.d.ts +6 -102
- package/src/engine/graphics3/MeshSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem3.js +6 -642
- package/src/engine/graphics3/ParticipatingMedia.d.ts +2 -2
- package/src/engine/graphics3/ParticipatingMedia.js +203 -203
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +87 -0
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -0
- package/src/engine/graphics3/ParticipatingMediaSystem.js +184 -0
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +6 -83
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMediaSystem3.js +6 -180
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts +76 -0
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -0
- package/src/engine/graphics3/ParticleEmitterSystem.js +289 -0
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +6 -72
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ParticleEmitterSystem3.js +6 -285
- package/src/engine/graphics3/PathDisplaySystem.d.ts +70 -0
- package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -0
- package/src/engine/graphics3/PathDisplaySystem.js +309 -0
- package/src/engine/graphics3/PathDisplaySystem3.d.ts +6 -66
- package/src/engine/graphics3/PathDisplaySystem3.d.ts.map +1 -1
- package/src/engine/graphics3/PathDisplaySystem3.js +6 -305
- package/src/engine/graphics3/Pickable.d.ts +1 -1
- package/src/engine/graphics3/Pickable.js +65 -65
- package/src/engine/graphics3/PickingQuery.d.ts +1 -1
- package/src/engine/graphics3/PickingQuery.js +48 -48
- package/src/engine/graphics3/PickingSystem.d.ts +67 -0
- package/src/engine/graphics3/PickingSystem.d.ts.map +1 -0
- package/src/engine/graphics3/PickingSystem.js +273 -0
- package/src/engine/graphics3/PickingSystem3.d.ts +6 -63
- package/src/engine/graphics3/PickingSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/PickingSystem3.js +6 -269
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +47 -0
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -0
- package/src/engine/graphics3/ShadedGeometrySystem.js +169 -0
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts +6 -43
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem3.js +6 -165
- package/src/engine/graphics3/TerrainSystem.d.ts +80 -0
- package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -0
- package/src/engine/graphics3/TerrainSystem.js +566 -0
- package/src/engine/graphics3/TerrainSystem3.d.ts +6 -76
- package/src/engine/graphics3/TerrainSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/TerrainSystem3.js +6 -562
- package/src/engine/graphics3/TooltipComponentSystem.d.ts +65 -0
- package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -0
- package/src/engine/graphics3/TooltipComponentSystem.js +328 -0
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts +6 -61
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/TooltipComponentSystem3.js +6 -324
- package/src/engine/graphics3/Trail3DSystem.d.ts +73 -0
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -0
- package/src/engine/graphics3/Trail3DSystem.js +221 -0
- package/src/engine/graphics3/Trail3DSystem3.d.ts +6 -69
- package/src/engine/graphics3/Trail3DSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem3.js +6 -217
- package/src/engine/graphics3/VolumetricLightMap.d.ts +2 -2
- package/src/engine/graphics3/VolumetricLightMap.js +2 -2
- package/src/engine/graphics3/VolumetricLightMapSystem.d.ts +98 -0
- package/src/engine/graphics3/VolumetricLightMapSystem.d.ts.map +1 -0
- package/src/engine/graphics3/VolumetricLightMapSystem.js +261 -0
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts +6 -94
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/VolumetricLightMapSystem3.js +10 -261
- package/src/engine/graphics3/WaterSystem.d.ts +59 -0
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -0
- package/src/engine/graphics3/WaterSystem.js +293 -0
- package/src/engine/graphics3/WaterSystem3.d.ts +6 -55
- package/src/engine/graphics3/WaterSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem3.js +6 -289
- package/src/engine/graphics3/animation/AnimationGraphController.d.ts +1 -1
- package/src/engine/graphics3/animation/AnimationGraphController.js +518 -518
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts +1 -1
- package/src/engine/graphics3/animation/ClipListPlayer.js +263 -263
- package/src/engine/graphics3/animation/ClipPlayback.d.ts +2 -2
- package/src/engine/graphics3/animation/ClipPlayback.js +84 -84
- package/src/engine/graphics3/decal/graph_build_decal_clusters.d.ts.map +1 -1
- package/src/engine/graphics3/decal/graph_build_decal_clusters.js +6 -8
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts +0 -7
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +1 -1
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts +0 -4
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +2 -2
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.js +74 -74
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +1 -1
- package/src/engine/graphics3/pose/query_entity_node_world_pose.js +101 -101
- package/src/engine/graphics3/preview/make_model_thumbnail.d.ts +3 -3
- package/src/engine/graphics3/preview/make_model_thumbnail.d.ts.map +1 -1
- package/src/engine/graphics3/preview/make_model_thumbnail.js +48 -48
- package/src/engine/graphics3/shade_camera_projection_ray.d.ts +1 -1
- package/src/engine/graphics3/shade_camera_projection_ray.js +77 -77
- package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +1 -1
- package/src/engine/graphics3/shade_node_to_entity_composition.js +84 -84
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +0 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +0 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +133 -134
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +202 -202
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +249 -249
- package/src/shade/renderer/STATIC_GRAPHICS_ENGINE_ASSETS.js +1 -1
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts +2 -1
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/PosePlayback.js +2 -1
- package/src/shade/renderer/animation/shader_animation_apply.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_apply.js +128 -129
- package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_pose_resolve.js +176 -177
- package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_tick.js +125 -126
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +98 -99
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +212 -213
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +120 -121
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +75 -76
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +371 -372
- package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.js +104 -105
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +0 -1
- package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +136 -136
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +2 -3
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +319 -319
- package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
- package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +41 -42
- package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.d.ts.map +1 -1
- package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.js +83 -84
- package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +177 -170
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
- package/src/shade/renderer/geometry/bvh/record_blas_refit.js +4 -4
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +121 -122
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +774 -774
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +1 -1
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +69 -70
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +367 -367
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +184 -184
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -1115
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +142 -143
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +0 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +140 -141
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +0 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +0 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +191 -198
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts +0 -6
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.js +120 -120
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts +0 -4
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.js +112 -112
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +4 -7
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts +0 -6
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.js +1 -1
- package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +222 -222
- package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_tile_composit.js +81 -81
- package/src/shade/renderer/material/GPUMaterialContext.js +380 -380
- package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
- package/src/shade/renderer/object_property/shader_object_property_process.d.ts.map +1 -1
- package/src/shade/renderer/object_property/shader_object_property_process.js +83 -84
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +57 -58
- package/src/shade/renderer/particles/prototypeParticleSystem.js +2 -3
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +117 -118
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +77 -79
- package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_render.js +190 -183
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +99 -100
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.js +158 -161
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +184 -184
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +119 -119
- package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +3 -4
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +266 -267
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +270 -271
- package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +68 -69
- package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.js +225 -226
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +49 -50
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +291 -292
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +230 -231
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts +16 -2
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +12 -12
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +2 -2
- package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js +68 -69
- package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.js +59 -60
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +0 -1
- package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.js +64 -65
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +168 -169
- package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.js +160 -161
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +109 -110
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +115 -116
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.js +139 -140
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.js +91 -92
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.js +88 -89
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +90 -91
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +65 -66
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +89 -90
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +169 -170
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +89 -90
- package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.js +61 -62
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +153 -154
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +144 -144
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +88 -88
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +217 -217
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +179 -179
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +178 -178
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +194 -194
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +76 -76
- package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +136 -137
- package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resample.js +129 -130
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +99 -100
- package/src/shade/renderer/restir/di/shader_restir_di_spatial.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_spatial.js +116 -117
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +383 -383
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy_naive.js +123 -123
- package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.js +64 -65
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.js +372 -373
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.js +111 -112
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +0 -1
- package/src/shade/renderer/shader/ComputeShader.d.ts +24 -3
- package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ComputeShader.js +350 -296
- package/src/shade/renderer/shader/ImageShader.js +217 -217
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts +5 -0
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/ShaderDescriptor.js +20 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts +47 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts.map +1 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.js +448 -0
- package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.js +3 -3
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +3 -3
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +2 -2
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +4 -4
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +231 -232
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +12 -15
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +3 -2
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +3 -2
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts +0 -2
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +17 -6
- package/src/shade/renderer/water/shader_water.js +246 -246
- package/src/shade/vitest.setup.mjs +1 -1
- package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +291 -291
- package/src/view/minimap/Minimap.d.ts +2 -2
- package/src/view/minimap/Minimap.d.ts.map +1 -1
- package/src/view/minimap/Minimap.js +225 -225
- package/src/view/minimap/dom/MinimapCameraView.d.ts +3 -3
- package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapCameraView.js +206 -206
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts +0 -3
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts.map +0 -1
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.js +0 -20
|
@@ -1,43 +1,42 @@
|
|
|
1
|
-
import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
-
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
3
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
4
|
-
import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
|
|
5
|
-
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
6
|
-
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
-
|
|
8
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
9
|
-
|
|
10
|
-
resources.createGroup()
|
|
11
|
-
.addStorageBuffer("source", WebGPUArray.u32)
|
|
12
|
-
.addStorageBuffer("destination", WebGPUArray.u32, true)
|
|
13
|
-
.addUniform("size", u32)
|
|
14
|
-
|
|
15
|
-
const body = CodeChunk.from(
|
|
16
|
-
//language=WGSL
|
|
17
|
-
`
|
|
18
|
-
@compute @workgroup_size(${COMPUTE_SHADER_DEFAULT_GROUP_SIZE})
|
|
19
|
-
fn main(
|
|
20
|
-
@builtin(global_invocation_id) global_id : vec3<u32>
|
|
21
|
-
){
|
|
22
|
-
let index = global_id.x;
|
|
23
|
-
|
|
24
|
-
if(index >= size){
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
destination[index] = source[index];
|
|
29
|
-
}
|
|
30
|
-
`
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Shader is useful for copying buffers where the buffers are missing `GPUBufferUsage.COPY_DST` or `GPUBufferUsage.COPY_SRC`.
|
|
35
|
-
* This is a pure utility shader.
|
|
36
|
-
* @type {ComputeShader}
|
|
37
|
-
*/
|
|
38
|
-
export const shader_buffer_copy_storage_to_storage = ComputeShader.from({
|
|
39
|
-
label: "Copy GPU Buffer/ STORAGE -> STORAGE",
|
|
40
|
-
body,
|
|
41
|
-
resources,
|
|
42
|
-
group_size: [COMPUTE_SHADER_DEFAULT_GROUP_SIZE]
|
|
1
|
+
import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
+
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
3
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
4
|
+
import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
|
|
5
|
+
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
6
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
+
|
|
8
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
9
|
+
|
|
10
|
+
resources.createGroup()
|
|
11
|
+
.addStorageBuffer("source", WebGPUArray.u32)
|
|
12
|
+
.addStorageBuffer("destination", WebGPUArray.u32, true)
|
|
13
|
+
.addUniform("size", u32)
|
|
14
|
+
|
|
15
|
+
const body = CodeChunk.from(
|
|
16
|
+
//language=WGSL
|
|
17
|
+
`
|
|
18
|
+
@compute @workgroup_size(${COMPUTE_SHADER_DEFAULT_GROUP_SIZE})
|
|
19
|
+
fn main(
|
|
20
|
+
@builtin(global_invocation_id) global_id : vec3<u32>
|
|
21
|
+
){
|
|
22
|
+
let index = global_id.x;
|
|
23
|
+
|
|
24
|
+
if(index >= size){
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
destination[index] = source[index];
|
|
29
|
+
}
|
|
30
|
+
`
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Shader is useful for copying buffers where the buffers are missing `GPUBufferUsage.COPY_DST` or `GPUBufferUsage.COPY_SRC`.
|
|
35
|
+
* This is a pure utility shader.
|
|
36
|
+
* @type {ComputeShader}
|
|
37
|
+
*/
|
|
38
|
+
export const shader_buffer_copy_storage_to_storage = ComputeShader.from({
|
|
39
|
+
label: "Copy GPU Buffer/ STORAGE -> STORAGE",
|
|
40
|
+
body,
|
|
41
|
+
resources,
|
|
43
42
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_buffer_intra_copy_regions.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.js"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,kDAAmD;AAEnD;;;;GAIG;AACH,2DAI4B;AAmC5B;;;;;;;;;;;;;;;;;;GAkBG;AACH,
|
|
1
|
+
{"version":3,"file":"shader_buffer_intra_copy_regions.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.js"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,kDAAmD;AAEnD;;;;GAIG;AACH,2DAI4B;AAmC5B;;;;;;;;;;;;;;;;;;GAkBG;AACH,6DAIG;6BAhF0B,mCAAmC;8BAElC,+BAA+B"}
|
|
@@ -1,84 +1,83 @@
|
|
|
1
|
-
import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
-
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
3
|
-
import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
|
|
4
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
5
|
-
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
6
|
-
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Workgroup size for the per-region stride loop. Each workgroup
|
|
10
|
-
* handles one region; threads in the workgroup walk the region's
|
|
11
|
-
* words in WORKGROUP_SIZE-stride'd slots, so a region with N words
|
|
12
|
-
* takes ceil(N / WORKGROUP_SIZE) iterations per thread.
|
|
13
|
-
*/
|
|
14
|
-
export const BUFFER_INTRA_COPY_WORKGROUP_SIZE = 64;
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* One copy job: source and destination regions inside the same buffer.
|
|
18
|
-
* Offsets and lengths are in `u32` words (not bytes). The shader does
|
|
19
|
-
* not validate non-overlap — the caller is responsible.
|
|
20
|
-
*/
|
|
21
|
-
export const BUFFER_INTRA_COPY_REGION_STRUCT = WebGPUStruct.from({
|
|
22
|
-
src_offset: u32,
|
|
23
|
-
dst_offset: u32,
|
|
24
|
-
word_count: u32,
|
|
25
|
-
}, "BufferIntraCopyRegion");
|
|
26
|
-
|
|
27
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
28
|
-
resources.createGroup()
|
|
29
|
-
.addStorageBuffer('buffer', WebGPUArray.from(u32), true)
|
|
30
|
-
.addStorageBuffer('regions', WebGPUArray.from(BUFFER_INTRA_COPY_REGION_STRUCT), false);
|
|
31
|
-
|
|
32
|
-
// One workgroup per region, dispatch over the regions list. Threads
|
|
33
|
-
// stride-loop over the region's words. WebGPU rejects same-buffer
|
|
34
|
-
// `copyBufferToBuffer` even with non-overlapping ranges, which is why
|
|
35
|
-
// we go via a compute shader for intra-buffer relocation. A single
|
|
36
|
-
// `read_write` binding sidesteps the read+write-on-same-binding
|
|
37
|
-
// resource conflict that would prevent binding the buffer twice with
|
|
38
|
-
// different access modes.
|
|
39
|
-
const body = CodeChunk.from(
|
|
40
|
-
//language=WGSL
|
|
41
|
-
`
|
|
42
|
-
@compute @workgroup_size(${BUFFER_INTRA_COPY_WORKGROUP_SIZE},1,1)
|
|
43
|
-
fn main(
|
|
44
|
-
@builtin(workgroup_id) wg_id: vec3<u32>,
|
|
45
|
-
@builtin(local_invocation_index) local_id: u32,
|
|
46
|
-
) {
|
|
47
|
-
let region = regions[wg_id.x];
|
|
48
|
-
|
|
49
|
-
var i: u32 = local_id;
|
|
50
|
-
loop {
|
|
51
|
-
if(i >= region.word_count) { break; }
|
|
52
|
-
|
|
53
|
-
buffer[region.dst_offset + i] = buffer[region.src_offset + i];
|
|
54
|
-
|
|
55
|
-
i = i + ${BUFFER_INTRA_COPY_WORKGROUP_SIZE}u;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
`);
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Compute-shader memcpy across regions of a single storage buffer.
|
|
62
|
-
* One workgroup per region; threads in the workgroup stride-loop
|
|
63
|
-
* over the region's `word_count` u32 words.
|
|
64
|
-
*
|
|
65
|
-
* Why a compute shader rather than `copyBufferToBuffer`: WebGPU
|
|
66
|
-
* forbids `copyBufferToBuffer` from passing the same buffer as both
|
|
67
|
-
* source and destination, even when the byte ranges don't overlap —
|
|
68
|
-
* the validation check is buffer-identity, not range-overlap. The
|
|
69
|
-
* compute path sidesteps that by binding the buffer once as
|
|
70
|
-
* `read_write` storage and reading + writing through the same
|
|
71
|
-
* binding.
|
|
72
|
-
*
|
|
73
|
-
* Caller responsibility: the regions table must list non-overlapping
|
|
74
|
-
* (src, dst) ranges. The shader does no overlap checks.
|
|
75
|
-
*
|
|
76
|
-
* Dispatch: one workgroup per entry in `regions`, i.e.
|
|
77
|
-
* `group_count_x = region_count`. Skip when `region_count === 0`.
|
|
78
|
-
*/
|
|
79
|
-
export const shader_buffer_intra_copy_regions = ComputeShader.from({
|
|
80
|
-
label: "Copy GPU Buffer/ Intra-buffer regions",
|
|
81
|
-
body,
|
|
82
|
-
resources,
|
|
83
|
-
|
|
84
|
-
});
|
|
1
|
+
import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
+
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
3
|
+
import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
|
|
4
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
5
|
+
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
6
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Workgroup size for the per-region stride loop. Each workgroup
|
|
10
|
+
* handles one region; threads in the workgroup walk the region's
|
|
11
|
+
* words in WORKGROUP_SIZE-stride'd slots, so a region with N words
|
|
12
|
+
* takes ceil(N / WORKGROUP_SIZE) iterations per thread.
|
|
13
|
+
*/
|
|
14
|
+
export const BUFFER_INTRA_COPY_WORKGROUP_SIZE = 64;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* One copy job: source and destination regions inside the same buffer.
|
|
18
|
+
* Offsets and lengths are in `u32` words (not bytes). The shader does
|
|
19
|
+
* not validate non-overlap — the caller is responsible.
|
|
20
|
+
*/
|
|
21
|
+
export const BUFFER_INTRA_COPY_REGION_STRUCT = WebGPUStruct.from({
|
|
22
|
+
src_offset: u32,
|
|
23
|
+
dst_offset: u32,
|
|
24
|
+
word_count: u32,
|
|
25
|
+
}, "BufferIntraCopyRegion");
|
|
26
|
+
|
|
27
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
28
|
+
resources.createGroup()
|
|
29
|
+
.addStorageBuffer('buffer', WebGPUArray.from(u32), true)
|
|
30
|
+
.addStorageBuffer('regions', WebGPUArray.from(BUFFER_INTRA_COPY_REGION_STRUCT), false);
|
|
31
|
+
|
|
32
|
+
// One workgroup per region, dispatch over the regions list. Threads
|
|
33
|
+
// stride-loop over the region's words. WebGPU rejects same-buffer
|
|
34
|
+
// `copyBufferToBuffer` even with non-overlapping ranges, which is why
|
|
35
|
+
// we go via a compute shader for intra-buffer relocation. A single
|
|
36
|
+
// `read_write` binding sidesteps the read+write-on-same-binding
|
|
37
|
+
// resource conflict that would prevent binding the buffer twice with
|
|
38
|
+
// different access modes.
|
|
39
|
+
const body = CodeChunk.from(
|
|
40
|
+
//language=WGSL
|
|
41
|
+
`
|
|
42
|
+
@compute @workgroup_size(${BUFFER_INTRA_COPY_WORKGROUP_SIZE},1,1)
|
|
43
|
+
fn main(
|
|
44
|
+
@builtin(workgroup_id) wg_id: vec3<u32>,
|
|
45
|
+
@builtin(local_invocation_index) local_id: u32,
|
|
46
|
+
) {
|
|
47
|
+
let region = regions[wg_id.x];
|
|
48
|
+
|
|
49
|
+
var i: u32 = local_id;
|
|
50
|
+
loop {
|
|
51
|
+
if(i >= region.word_count) { break; }
|
|
52
|
+
|
|
53
|
+
buffer[region.dst_offset + i] = buffer[region.src_offset + i];
|
|
54
|
+
|
|
55
|
+
i = i + ${BUFFER_INTRA_COPY_WORKGROUP_SIZE}u;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
`);
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Compute-shader memcpy across regions of a single storage buffer.
|
|
62
|
+
* One workgroup per region; threads in the workgroup stride-loop
|
|
63
|
+
* over the region's `word_count` u32 words.
|
|
64
|
+
*
|
|
65
|
+
* Why a compute shader rather than `copyBufferToBuffer`: WebGPU
|
|
66
|
+
* forbids `copyBufferToBuffer` from passing the same buffer as both
|
|
67
|
+
* source and destination, even when the byte ranges don't overlap —
|
|
68
|
+
* the validation check is buffer-identity, not range-overlap. The
|
|
69
|
+
* compute path sidesteps that by binding the buffer once as
|
|
70
|
+
* `read_write` storage and reading + writing through the same
|
|
71
|
+
* binding.
|
|
72
|
+
*
|
|
73
|
+
* Caller responsibility: the regions table must list non-overlapping
|
|
74
|
+
* (src, dst) ranges. The shader does no overlap checks.
|
|
75
|
+
*
|
|
76
|
+
* Dispatch: one workgroup per entry in `regions`, i.e.
|
|
77
|
+
* `group_count_x = region_count`. Skip when `region_count === 0`.
|
|
78
|
+
*/
|
|
79
|
+
export const shader_buffer_intra_copy_regions = ComputeShader.from({
|
|
80
|
+
label: "Copy GPU Buffer/ Intra-buffer regions",
|
|
81
|
+
body,
|
|
82
|
+
resources,
|
|
83
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_dynamic_mesh.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/dynamic/shader_dynamic_mesh.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_dynamic_mesh.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/dynamic/shader_dynamic_mesh.js"],"names":[],"mappings":"AAoHA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;IAN4B,YAAY,GAA7B,MAAM;IACW,YAAY,GAA7B,MAAM;IACuB,aAAa;IACxB,MAAM,GAAxB,OAAO;IACL,wBAAwB,CAgCpC;AAzJD;;;GAGG;AACH,oDAY6B;AA2I7B;;;;GAIG;AACH,qCAFU,2BAA2B,CAEW;yCA9KP,8DAA8D;6BAO1E,gCAAgC;4CAJjB,mDAAmD"}
|
|
@@ -1,170 +1,177 @@
|
|
|
1
|
-
import { ColorTargetState } from "../../descriptor/pipeline/render/ColorTargetState.js";
|
|
2
|
-
import { DepthStencilState } from "../../descriptor/pipeline/render/DepthStencilState.js";
|
|
3
|
-
import { RenderPipelineDescriptor } from "../../descriptor/pipeline/render/RenderPipelineDescriptor.js";
|
|
4
|
-
import { CAMERA_UNIFORM_STRUCT } from "../camera/CAMERA_UNIFORM_STRUCT.js";
|
|
5
|
-
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
6
|
-
import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
-
import { ShaderDescriptor } from "../shader/ShaderDescriptor.js";
|
|
8
|
-
import { mat4x4f, vec4f } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
9
|
-
import { WebGPUArray } from "../shader/type/WebGPUArray.js";
|
|
10
|
-
import { WebGPUStruct } from "../shader/type/WebGPUStruct.js";
|
|
11
|
-
import {
|
|
12
|
-
DYNAMIC_MESH_VERTEX_COLOR_OFFSET,
|
|
13
|
-
DYNAMIC_MESH_VERTEX_POSITION_OFFSET,
|
|
14
|
-
DYNAMIC_MESH_VERTEX_STRIDE
|
|
15
|
-
} from "./DYNAMIC_MESH_VERTEX.js";
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Per-draw constants. One dynamic mesh is one draw, so this is small and rewritten per mesh per
|
|
19
|
-
* frame rather than tabled.
|
|
20
|
-
*/
|
|
21
|
-
export const DYNAMIC_MESH_DRAW_STRUCT = WebGPUStruct.from({
|
|
22
|
-
/**
|
|
23
|
-
* Object → world. Dynamic meshes are usually built in world space already, in which case this
|
|
24
|
-
* is identity, but a trail rigidly attached to something is cheaper to build once in local
|
|
25
|
-
* space and transform.
|
|
26
|
-
*/
|
|
27
|
-
model: mat4x4f,
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Multiplied into every vertex colour. Alpha is what fades a whole effect out at once.
|
|
31
|
-
*/
|
|
32
|
-
color: vec4f,
|
|
33
|
-
}, "DynamicMeshDraw").pack();
|
|
34
|
-
|
|
35
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
36
|
-
|
|
37
|
-
resources.createGroup()
|
|
38
|
-
.addUniform("camera", CAMERA_UNIFORM_STRUCT)
|
|
39
|
-
.addUniform("draw", DYNAMIC_MESH_DRAW_STRUCT)
|
|
40
|
-
.addStorageBuffer("vertices", WebGPUArray.f32, false)
|
|
41
|
-
.addStorageBuffer("indices", WebGPUArray.u32, false);
|
|
42
|
-
|
|
43
|
-
const body = CodeChunk.from(
|
|
44
|
-
//language=WGSL
|
|
45
|
-
`
|
|
46
|
-
const VERTEX_STRIDE : u32 = ${DYNAMIC_MESH_VERTEX_STRIDE}u;
|
|
47
|
-
const POSITION_OFFSET : u32 = ${DYNAMIC_MESH_VERTEX_POSITION_OFFSET}u;
|
|
48
|
-
const COLOR_OFFSET : u32 = ${DYNAMIC_MESH_VERTEX_COLOR_OFFSET}u;
|
|
49
|
-
|
|
50
|
-
struct DynamicMeshVertexOut {
|
|
51
|
-
@builtin(position) clip : vec4<f32>,
|
|
52
|
-
@location(0) color : vec4<f32>,
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Vertices are pulled from storage rather than bound as vertex buffers, which is how the rest of
|
|
56
|
-
// the engine reads geometry: one pipeline then serves every dynamic mesh, whatever it holds.
|
|
57
|
-
@vertex
|
|
58
|
-
fn vs_main(@builtin(vertex_index) vi : u32) -> DynamicMeshVertexOut {
|
|
59
|
-
let vertex = indices[vi];
|
|
60
|
-
let base = vertex * VERTEX_STRIDE;
|
|
61
|
-
|
|
62
|
-
let position = vec3<f32>(
|
|
63
|
-
vertices[base + POSITION_OFFSET],
|
|
64
|
-
vertices[base + POSITION_OFFSET + 1u],
|
|
65
|
-
vertices[base + POSITION_OFFSET + 2u],
|
|
66
|
-
);
|
|
67
|
-
|
|
68
|
-
let color = vec4<f32>(
|
|
69
|
-
vertices[base + COLOR_OFFSET],
|
|
70
|
-
vertices[base + COLOR_OFFSET + 1u],
|
|
71
|
-
vertices[base + COLOR_OFFSET + 2u],
|
|
72
|
-
vertices[base + COLOR_OFFSET + 3u],
|
|
73
|
-
);
|
|
74
|
-
|
|
75
|
-
let world = draw.model * vec4<f32>(position, 1.0);
|
|
76
|
-
|
|
77
|
-
var out : DynamicMeshVertexOut;
|
|
78
|
-
|
|
79
|
-
out.clip = camera.view_projection_matrix * world;
|
|
80
|
-
out.color = color * draw.color;
|
|
81
|
-
|
|
82
|
-
return out;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
@fragment
|
|
86
|
-
fn fs_main(in : DynamicMeshVertexOut) -> @location(0) vec4<f32> {
|
|
87
|
-
return in.color;
|
|
88
|
-
}
|
|
89
|
-
`, []
|
|
90
|
-
);
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
1
|
+
import { ColorTargetState } from "../../descriptor/pipeline/render/ColorTargetState.js";
|
|
2
|
+
import { DepthStencilState } from "../../descriptor/pipeline/render/DepthStencilState.js";
|
|
3
|
+
import { RenderPipelineDescriptor } from "../../descriptor/pipeline/render/RenderPipelineDescriptor.js";
|
|
4
|
+
import { CAMERA_UNIFORM_STRUCT } from "../camera/CAMERA_UNIFORM_STRUCT.js";
|
|
5
|
+
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
6
|
+
import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
+
import { ShaderDescriptor } from "../shader/ShaderDescriptor.js";
|
|
8
|
+
import { mat4x4f, vec4f } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
9
|
+
import { WebGPUArray } from "../shader/type/WebGPUArray.js";
|
|
10
|
+
import { WebGPUStruct } from "../shader/type/WebGPUStruct.js";
|
|
11
|
+
import {
|
|
12
|
+
DYNAMIC_MESH_VERTEX_COLOR_OFFSET,
|
|
13
|
+
DYNAMIC_MESH_VERTEX_POSITION_OFFSET,
|
|
14
|
+
DYNAMIC_MESH_VERTEX_STRIDE
|
|
15
|
+
} from "./DYNAMIC_MESH_VERTEX.js";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Per-draw constants. One dynamic mesh is one draw, so this is small and rewritten per mesh per
|
|
19
|
+
* frame rather than tabled.
|
|
20
|
+
*/
|
|
21
|
+
export const DYNAMIC_MESH_DRAW_STRUCT = WebGPUStruct.from({
|
|
22
|
+
/**
|
|
23
|
+
* Object → world. Dynamic meshes are usually built in world space already, in which case this
|
|
24
|
+
* is identity, but a trail rigidly attached to something is cheaper to build once in local
|
|
25
|
+
* space and transform.
|
|
26
|
+
*/
|
|
27
|
+
model: mat4x4f,
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Multiplied into every vertex colour. Alpha is what fades a whole effect out at once.
|
|
31
|
+
*/
|
|
32
|
+
color: vec4f,
|
|
33
|
+
}, "DynamicMeshDraw").pack();
|
|
34
|
+
|
|
35
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
36
|
+
|
|
37
|
+
resources.createGroup()
|
|
38
|
+
.addUniform("camera", CAMERA_UNIFORM_STRUCT)
|
|
39
|
+
.addUniform("draw", DYNAMIC_MESH_DRAW_STRUCT)
|
|
40
|
+
.addStorageBuffer("vertices", WebGPUArray.f32, false)
|
|
41
|
+
.addStorageBuffer("indices", WebGPUArray.u32, false);
|
|
42
|
+
|
|
43
|
+
const body = CodeChunk.from(
|
|
44
|
+
//language=WGSL
|
|
45
|
+
`
|
|
46
|
+
const VERTEX_STRIDE : u32 = ${DYNAMIC_MESH_VERTEX_STRIDE}u;
|
|
47
|
+
const POSITION_OFFSET : u32 = ${DYNAMIC_MESH_VERTEX_POSITION_OFFSET}u;
|
|
48
|
+
const COLOR_OFFSET : u32 = ${DYNAMIC_MESH_VERTEX_COLOR_OFFSET}u;
|
|
49
|
+
|
|
50
|
+
struct DynamicMeshVertexOut {
|
|
51
|
+
@builtin(position) clip : vec4<f32>,
|
|
52
|
+
@location(0) color : vec4<f32>,
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Vertices are pulled from storage rather than bound as vertex buffers, which is how the rest of
|
|
56
|
+
// the engine reads geometry: one pipeline then serves every dynamic mesh, whatever it holds.
|
|
57
|
+
@vertex
|
|
58
|
+
fn vs_main(@builtin(vertex_index) vi : u32) -> DynamicMeshVertexOut {
|
|
59
|
+
let vertex = indices[vi];
|
|
60
|
+
let base = vertex * VERTEX_STRIDE;
|
|
61
|
+
|
|
62
|
+
let position = vec3<f32>(
|
|
63
|
+
vertices[base + POSITION_OFFSET],
|
|
64
|
+
vertices[base + POSITION_OFFSET + 1u],
|
|
65
|
+
vertices[base + POSITION_OFFSET + 2u],
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
let color = vec4<f32>(
|
|
69
|
+
vertices[base + COLOR_OFFSET],
|
|
70
|
+
vertices[base + COLOR_OFFSET + 1u],
|
|
71
|
+
vertices[base + COLOR_OFFSET + 2u],
|
|
72
|
+
vertices[base + COLOR_OFFSET + 3u],
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
let world = draw.model * vec4<f32>(position, 1.0);
|
|
76
|
+
|
|
77
|
+
var out : DynamicMeshVertexOut;
|
|
78
|
+
|
|
79
|
+
out.clip = camera.view_projection_matrix * world;
|
|
80
|
+
out.color = color * draw.color;
|
|
81
|
+
|
|
82
|
+
return out;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@fragment
|
|
86
|
+
fn fs_main(in : DynamicMeshVertexOut) -> @location(0) vec4<f32> {
|
|
87
|
+
return in.color;
|
|
88
|
+
}
|
|
89
|
+
`, []
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* The shader itself. One compilation, shared by every pipeline built from it — the options below
|
|
94
|
+
* vary the pipeline state, never the WGSL.
|
|
95
|
+
*
|
|
96
|
+
* @type {ShaderDescriptor}
|
|
97
|
+
*/
|
|
98
|
+
const descriptor = ShaderDescriptor.from({ label: "Dynamic Mesh", body, resources });
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Straight alpha over what is already there. Effect content — trails, ribbons, CPU particles —
|
|
102
|
+
* composites over a finished scene rather than participating in it.
|
|
103
|
+
*/
|
|
104
|
+
const DYNAMIC_MESH_BLEND = {
|
|
105
|
+
color: {
|
|
106
|
+
srcFactor: "src-alpha",
|
|
107
|
+
dstFactor: "one-minus-src-alpha",
|
|
108
|
+
operation: "add",
|
|
109
|
+
},
|
|
110
|
+
alpha: {
|
|
111
|
+
srcFactor: "one",
|
|
112
|
+
dstFactor: "one-minus-src-alpha",
|
|
113
|
+
operation: "add",
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Build the dynamic-mesh pipeline.
|
|
119
|
+
*
|
|
120
|
+
* Two modes, and `opaque` picks between them wholesale because the two halves of each are not
|
|
121
|
+
* separable: blending over the scene only makes sense for something that must not occlude it, and
|
|
122
|
+
* writing depth only makes sense for something that replaces what it covers.
|
|
123
|
+
*
|
|
124
|
+
* - **Effect (default).** Alpha over the frame, depth tested and never written. Trails, ribbons and
|
|
125
|
+
* CPU particles draw after the standard geometry path has finished, so they must be occluded by
|
|
126
|
+
* the scene without occluding anything themselves.
|
|
127
|
+
* - **Opaque.** No blend, depth written. A solid surface going down this path — a decoded LOD cut,
|
|
128
|
+
* a generated mesh with no meshlet build behind it — has to occlude both the scene and itself,
|
|
129
|
+
* and the depth buffer is the only thing that orders its own triangles against each other.
|
|
130
|
+
*
|
|
131
|
+
* `greater` is the comparison either way, because the engine is reverse-Z.
|
|
132
|
+
*
|
|
133
|
+
* @param {object} [options]
|
|
134
|
+
* @param {string} [options.color_format]
|
|
135
|
+
* @param {string} [options.depth_format]
|
|
136
|
+
* @param {GPUCompareFunction} [options.depth_compare]
|
|
137
|
+
* @param {boolean} [options.opaque] write depth and skip blending, rather than the reverse
|
|
138
|
+
* @returns {RenderPipelineDescriptor}
|
|
139
|
+
*/
|
|
140
|
+
export function create_dynamic_mesh_pipeline({
|
|
141
|
+
color_format = "rgba16float",
|
|
142
|
+
depth_format = "depth32float",
|
|
143
|
+
depth_compare = "greater",
|
|
144
|
+
opaque = false,
|
|
145
|
+
} = {}) {
|
|
146
|
+
const code = descriptor.source;
|
|
147
|
+
|
|
148
|
+
return RenderPipelineDescriptor.from({
|
|
149
|
+
label: opaque ? "Dynamic Mesh (opaque)" : "Dynamic Mesh",
|
|
150
|
+
layout: resources.generatePipelineLayout(GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT),
|
|
151
|
+
vertex: { module: { code }, entryPoint: "vs_main" },
|
|
152
|
+
fragment: {
|
|
153
|
+
module: { code },
|
|
154
|
+
entryPoint: "fs_main",
|
|
155
|
+
targets: [ColorTargetState.from({
|
|
156
|
+
format: color_format,
|
|
157
|
+
blend: opaque ? undefined : DYNAMIC_MESH_BLEND,
|
|
158
|
+
})],
|
|
159
|
+
},
|
|
160
|
+
depthStencil: DepthStencilState.from({
|
|
161
|
+
format: depth_format,
|
|
162
|
+
depthWriteEnabled: opaque,
|
|
163
|
+
depthCompare: depth_compare,
|
|
164
|
+
}),
|
|
165
|
+
// Nothing on this path promises a winding. Ribbons and trails are viewed from both sides by
|
|
166
|
+
// definition, and a mesh decoded from a container carries whatever its source had — so
|
|
167
|
+
// culling here would silently erase geometry rather than save work.
|
|
168
|
+
primitive: { topology: "triangle-list", cullMode: "none" },
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* The pipeline's resource set, for building bind groups.
|
|
174
|
+
*
|
|
175
|
+
* @type {ShaderResourceSetDescriptor}
|
|
176
|
+
*/
|
|
177
|
+
export const DYNAMIC_MESH_RESOURCES = resources;
|