@woosh/meep-engine 3.68.0 → 3.69.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/CHANGELOG.md +45 -0
- package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts +2 -17
- package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts.map +1 -1
- package/editor/ecs/component/editors/ecs/Trail3DEditor.js +3 -18
- package/package.json +1 -1
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +33 -65
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/Trail3D.js +37 -245
- package/src/engine/graphics/ecs/trail3d/Trail3DFlags.d.ts +0 -4
- package/src/engine/graphics/ecs/trail3d/Trail3DFlags.js +4 -10
- package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts +13 -10
- package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +28 -37
- package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts +10 -0
- package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts.map +1 -0
- package/src/engine/graphics/ecs/trail3d/trail_knot_count.js +27 -0
- package/src/engine/graphics/trail/TrailKnots.d.ts +62 -0
- package/src/engine/graphics/trail/TrailKnots.d.ts.map +1 -0
- package/src/engine/graphics/trail/TrailKnots.js +137 -0
- package/src/engine/graphics/trail/tube/TubeXMaterialSpec.d.ts +1 -1
- package/src/engine/graphics/trail/tube/TubeXMaterialSpec.js +1 -1
- package/src/engine/graphics3/EntityRowHold.d.ts +48 -0
- package/src/engine/graphics3/EntityRowHold.d.ts.map +1 -0
- package/src/engine/graphics3/EntityRowHold.js +128 -0
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +6 -2
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +11 -44
- package/src/engine/graphics3/Trail3DSystem.d.ts +69 -35
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem.js +380 -81
- package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts +17 -0
- package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacle.js +22 -2
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +6 -5
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +14 -3
- package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts +9 -1
- package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts.map +1 -1
- package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.js +11 -1
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts +5 -0
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts.map +1 -1
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.js +2 -0
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts +4 -3
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts.map +1 -1
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.js +11 -3
- package/src/shade/playground/trails/index.html +50 -0
- package/src/shade/playground/trails/main.d.ts +2 -0
- package/src/shade/playground/trails/main.d.ts.map +1 -0
- package/src/shade/playground/trails/main.js +258 -0
- package/src/shade/renderer/animation/animation_curve_write_keys.d.ts +18 -0
- package/src/shade/renderer/animation/animation_curve_write_keys.d.ts.map +1 -0
- package/src/shade/renderer/animation/animation_curve_write_keys.js +34 -0
- package/src/shade/renderer/deferred/tonemap/ColorGrade.d.ts.map +1 -1
- package/src/shade/renderer/deferred/tonemap/ColorGrade.js +13 -36
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +2 -2
- package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts +2 -13
- package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.js +6 -21
- package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts +17 -6
- package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.js +38 -178
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts +7 -9
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +17 -106
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts +7 -17
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.js +18 -118
- package/src/shade/renderer/fluid/forcing/FLUID_FORCING.d.ts +14 -0
- package/src/shade/renderer/fluid/forcing/FLUID_FORCING.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/FLUID_FORCING.js +18 -0
- package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts +3 -1
- package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.js +4 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +9 -0
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.js +20 -4
- package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts +11 -2
- package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.js +59 -2
- package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts +4 -1
- package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.js +367 -341
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts +6 -2
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +339 -282
- package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts +3 -2
- package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts.map +1 -1
- package/src/shade/renderer/grass/press/shader_grass_press_mark.js +5 -3
- package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.d.ts +49 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.js +144 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts +71 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.js +152 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts +21 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.js +30 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts +101 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.js +306 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +11 -4
- package/src/shade/renderer/trails/GPUTrailAVBOITChannel.d.ts +69 -0
- package/src/shade/renderer/trails/GPUTrailAVBOITChannel.d.ts.map +1 -0
- package/src/shade/renderer/trails/GPUTrailAVBOITChannel.js +129 -0
- package/src/shade/renderer/trails/GPUTrailSystem.d.ts +164 -0
- package/src/shade/renderer/trails/GPUTrailSystem.d.ts.map +1 -0
- package/src/shade/renderer/trails/GPUTrailSystem.js +725 -0
- package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts +14 -0
- package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts.map +1 -0
- package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.js +38 -0
- package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts +66 -0
- package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts.map +1 -0
- package/src/shade/renderer/trails/data/TRAIL_KNOT.js +154 -0
- package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts +19 -0
- package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts.map +1 -0
- package/src/shade/renderer/trails/data/TRAIL_RECORD.js +68 -0
- package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts +18 -0
- package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts.map +1 -0
- package/src/shade/renderer/trails/data/TRAIL_STATE.js +43 -0
- package/src/shade/renderer/trails/graph_trails.d.ts +58 -0
- package/src/shade/renderer/trails/graph_trails.d.ts.map +1 -0
- package/src/shade/renderer/trails/graph_trails.js +155 -0
- package/src/shade/renderer/trails/graph_trails_avboit.d.ts +126 -0
- package/src/shade/renderer/trails/graph_trails_avboit.d.ts.map +1 -0
- package/src/shade/renderer/trails/graph_trails_avboit.js +300 -0
- package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts +56 -0
- package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts.map +1 -0
- package/src/shade/renderer/trails/runtime/TrailFadeCurves.js +220 -0
- package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts +49 -0
- package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts.map +1 -0
- package/src/shade/renderer/trails/runtime/TrailKnotPool.js +162 -0
- package/src/shade/renderer/trails/runtime/TrailParameters.d.ts +52 -0
- package/src/shade/renderer/trails/runtime/TrailParameters.d.ts.map +1 -0
- package/src/shade/renderer/trails/runtime/TrailParameters.js +126 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts +23 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.js +57 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts +14 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.js +40 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts +18 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_seed.js +64 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts +14 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_segment.js +51 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts +48 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_update.js +197 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts +34 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_vertex.js +111 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts +24 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit.js +78 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts +23 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.js +130 -0
- package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts +29 -0
- package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/shader_trail_draw_args.js +78 -0
- package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts +18 -0
- package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/shader_trail_seed.js +79 -0
- package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts +20 -0
- package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/shader_trail_update.js +101 -0
- package/src/engine/graphics/ecs/trail3d/advance_trail.d.ts +0 -18
- package/src/engine/graphics/ecs/trail3d/advance_trail.d.ts.map +0 -1
- package/src/engine/graphics/ecs/trail3d/advance_trail.js +0 -42
- package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts +0 -14
- package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts.map +0 -1
- package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +0 -75
- package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts +0 -17
- package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts.map +0 -1
- package/src/engine/graphics/ecs/trail3d/trail_head_position.js +0 -19
- package/src/engine/graphics/trail/tube/TubeX.d.ts +0 -186
- package/src/engine/graphics/trail/tube/TubeX.d.ts.map +0 -1
- package/src/engine/graphics/trail/tube/TubeX.js +0 -575
- package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts +0 -16
- package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts.map +0 -1
- package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.js +0 -34
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +0 -27
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +0 -1
- package/src/engine/graphics/trail/tube/tube_attributes_spec.js +0 -70
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +0 -38
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts.map +0 -1
- package/src/engine/graphics3/trail/trail_tube_write_geometry.js +0 -119
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {Object} TrailSegmentsHandles
|
|
3
|
+
* @property {number} occupancy graph handle of the occupancy bits, after the trails marked theirs
|
|
4
|
+
* @property {number} segment_list graph handle of the visible segments, a region per draw class
|
|
5
|
+
* @property {number} args graph handle of the indexed indirect draws, one per draw class
|
|
6
|
+
* @property {(number|undefined)[]} radials the radial count of each draw class, a hole where none is used
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* The trails' AVBOIT occupancy and this view's draw lists: the segments pass, a thread per live segment
|
|
10
|
+
* dispatched from the frame's scan, then a pass that turns each draw class's count into its indexed
|
|
11
|
+
* indirect draw.
|
|
12
|
+
*
|
|
13
|
+
* Each draw class has a region of the segment list as long as the most segments its trails can show,
|
|
14
|
+
* the counters start at those regions, and the list is sized in powers of two so a count that climbs a
|
|
15
|
+
* little each frame does not make a new buffer each frame.
|
|
16
|
+
*
|
|
17
|
+
* @param {object} params
|
|
18
|
+
* @param {import("../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} params.graph
|
|
19
|
+
* @param {number} params.camera graph handle of the camera uniform
|
|
20
|
+
* @param {ArrayLike<number>} params.cluster_parameters the frame's depth curve
|
|
21
|
+
* @param {number} params.occupancy graph handle of the occupancy bits, to add to
|
|
22
|
+
* @param {import("./graph_trails.js").TrailSimulationHandles} params.simulation this frame's simulation
|
|
23
|
+
* @param {import("./GPUTrailSystem.js").GPUTrailSystem} params.runtime
|
|
24
|
+
* @returns {TrailSegmentsHandles}
|
|
25
|
+
*/
|
|
26
|
+
export function graph_trails_avboit_segments({ graph, camera, cluster_parameters, occupancy, simulation, runtime }: {
|
|
27
|
+
graph: import("../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
|
|
28
|
+
camera: number;
|
|
29
|
+
cluster_parameters: ArrayLike<number>;
|
|
30
|
+
occupancy: number;
|
|
31
|
+
simulation: import("./graph_trails.js").TrailSimulationHandles;
|
|
32
|
+
runtime: import("./GPUTrailSystem.js").GPUTrailSystem;
|
|
33
|
+
}): TrailSegmentsHandles;
|
|
34
|
+
/**
|
|
35
|
+
* The trails' extinction into the AVBOIT volume, through the unlit splat.
|
|
36
|
+
*
|
|
37
|
+
* @param {object} params
|
|
38
|
+
* @param {import("../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} params.graph
|
|
39
|
+
* @param {number} params.camera
|
|
40
|
+
* @param {number} params.warp
|
|
41
|
+
* @param {number[]} params.voxel_resolution
|
|
42
|
+
* @param {{extinction: number, overflow: number, dummy: number}} params.volume
|
|
43
|
+
* @param {import("./graph_trails.js").TrailSimulationHandles} params.simulation
|
|
44
|
+
* @param {TrailSegmentsHandles} params.segments
|
|
45
|
+
* @param {import("./GPUTrailSystem.js").GPUTrailSystem} params.runtime
|
|
46
|
+
* @returns {{extinction: number, overflow: number, dummy: number}}
|
|
47
|
+
*/
|
|
48
|
+
export function graph_trails_avboit_splat({ graph, camera, warp, voxel_resolution, volume, simulation, segments, runtime }: {
|
|
49
|
+
graph: import("../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
|
|
50
|
+
camera: number;
|
|
51
|
+
warp: number;
|
|
52
|
+
voxel_resolution: number[];
|
|
53
|
+
volume: {
|
|
54
|
+
extinction: number;
|
|
55
|
+
overflow: number;
|
|
56
|
+
dummy: number;
|
|
57
|
+
};
|
|
58
|
+
simulation: import("./graph_trails.js").TrailSimulationHandles;
|
|
59
|
+
segments: TrailSegmentsHandles;
|
|
60
|
+
runtime: import("./GPUTrailSystem.js").GPUTrailSystem;
|
|
61
|
+
}): {
|
|
62
|
+
extinction: number;
|
|
63
|
+
overflow: number;
|
|
64
|
+
dummy: number;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* The trails into the AVBOIT accumulators, through the unlit draw.
|
|
68
|
+
*
|
|
69
|
+
* @param {object} params
|
|
70
|
+
* @param {import("../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} params.graph
|
|
71
|
+
* @param {import("../view/GPUViewContext.js").GPUViewContext} params.view_ctx
|
|
72
|
+
* @param {number} params.camera
|
|
73
|
+
* @param {number} params.depth_texture
|
|
74
|
+
* @param {number} params.warp
|
|
75
|
+
* @param {number} params.integral
|
|
76
|
+
* @param {number} params.volumetrics_lut
|
|
77
|
+
* @param {number} params.volumetrics_metadata
|
|
78
|
+
* @param {{color: number, norm: number, extinction: number, emission: number}} params.accumulators
|
|
79
|
+
* @param {import("./graph_trails.js").TrailSimulationHandles} params.simulation
|
|
80
|
+
* @param {TrailSegmentsHandles} params.segments
|
|
81
|
+
* @param {import("./GPUTrailSystem.js").GPUTrailSystem} params.runtime
|
|
82
|
+
* @returns {{color: number, norm: number, extinction: number, emission: number}}
|
|
83
|
+
*/
|
|
84
|
+
export function graph_trails_avboit_draw({ graph, view_ctx, camera, depth_texture, warp, integral, volumetrics_lut, volumetrics_metadata, accumulators, simulation, segments, runtime, }: {
|
|
85
|
+
graph: import("../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
|
|
86
|
+
view_ctx: import("../view/GPUViewContext.js").GPUViewContext;
|
|
87
|
+
camera: number;
|
|
88
|
+
depth_texture: number;
|
|
89
|
+
warp: number;
|
|
90
|
+
integral: number;
|
|
91
|
+
volumetrics_lut: number;
|
|
92
|
+
volumetrics_metadata: number;
|
|
93
|
+
accumulators: {
|
|
94
|
+
color: number;
|
|
95
|
+
norm: number;
|
|
96
|
+
extinction: number;
|
|
97
|
+
emission: number;
|
|
98
|
+
};
|
|
99
|
+
simulation: import("./graph_trails.js").TrailSimulationHandles;
|
|
100
|
+
segments: TrailSegmentsHandles;
|
|
101
|
+
runtime: import("./GPUTrailSystem.js").GPUTrailSystem;
|
|
102
|
+
}): {
|
|
103
|
+
color: number;
|
|
104
|
+
norm: number;
|
|
105
|
+
extinction: number;
|
|
106
|
+
emission: number;
|
|
107
|
+
};
|
|
108
|
+
export type TrailSegmentsHandles = {
|
|
109
|
+
/**
|
|
110
|
+
* graph handle of the occupancy bits, after the trails marked theirs
|
|
111
|
+
*/
|
|
112
|
+
occupancy: number;
|
|
113
|
+
/**
|
|
114
|
+
* graph handle of the visible segments, a region per draw class
|
|
115
|
+
*/
|
|
116
|
+
segment_list: number;
|
|
117
|
+
/**
|
|
118
|
+
* graph handle of the indexed indirect draws, one per draw class
|
|
119
|
+
*/
|
|
120
|
+
args: number;
|
|
121
|
+
/**
|
|
122
|
+
* the radial count of each draw class, a hole where none is used
|
|
123
|
+
*/
|
|
124
|
+
radials: (number | undefined)[];
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=graph_trails_avboit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph_trails_avboit.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/trails/graph_trails_avboit.js"],"names":[],"mappings":"AA6BA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH;IARkG,KAAK,EAA5F,OAAO,2DAA2D,EAAE,UAAU;IAC/D,MAAM,EAArB,MAAM;IACoB,kBAAkB,EAA5C,UAAU,MAAM,CAAC;IACF,SAAS,EAAxB,MAAM;IACqD,UAAU,EAArE,OAAO,mBAAmB,EAAE,sBAAsB;IACG,OAAO,EAA5D,OAAO,qBAAqB,EAAE,cAAc;IAC1C,oBAAoB,CA8GhC;AA2DD;;;;;;;;;;;;;GAaG;AACH;IAVkG,KAAK,EAA5F,OAAO,2DAA2D,EAAE,UAAU;IAC/D,MAAM,EAArB,MAAM;IACS,IAAI,EAAnB,MAAM;IACW,gBAAgB,EAAjC,MAAM,EAAE;IACsD,MAAM,EAApE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC;IACM,UAAU,EAArE,OAAO,mBAAmB,EAAE,sBAAsB;IACrB,QAAQ,EAArC,oBAAoB;IACiC,OAAO,EAA5D,OAAO,qBAAqB,EAAE,cAAc;IAC1C;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAejE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH;IAdkG,KAAK,EAA5F,OAAO,2DAA2D,EAAE,UAAU;IACnB,QAAQ,EAAnE,OAAO,2BAA2B,EAAE,cAAc;IACnC,MAAM,EAArB,MAAM;IACS,aAAa,EAA5B,MAAM;IACS,IAAI,EAAnB,MAAM;IACS,QAAQ,EAAvB,MAAM;IACS,eAAe,EAA9B,MAAM;IACS,oBAAoB,EAAnC,MAAM;IACsE,YAAY,EAAxF;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC;IACR,UAAU,EAArE,OAAO,mBAAmB,EAAE,sBAAsB;IACrB,QAAQ,EAArC,oBAAoB;IACiC,OAAO,EAA5D,OAAO,qBAAqB,EAAE,cAAc;IAC1C;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAgC/E;;;;;eA5Qa,MAAM;;;;kBACN,MAAM;;;;UACN,MAAM;;;;aACN,CAAC,MAAM,GAAC,SAAS,CAAC,EAAE"}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { BufferResourceDescriptor } from "../../device/graph/BufferResourceDescriptor.js";
|
|
3
|
+
import { graph_avboit_unlit_draw, graph_avboit_unlit_splat } from "../rasterize/native/avboit/graph_avboit_unlit.js";
|
|
4
|
+
import { graph_import_buffer } from "../shader/graph/graph_import_buffer.js";
|
|
5
|
+
import { TRAIL_AVBOIT_BIND_GROUP_VERTEX, TRAIL_AVBOIT_DRAW_PIPELINE, TRAIL_AVBOIT_DRAW_RESOURCES, TRAIL_AVBOIT_SPLAT_PIPELINE, TRAIL_AVBOIT_SPLAT_RESOURCES } from "./shaders/shader_trail_avboit.js";
|
|
6
|
+
import { shader_trail_avboit_segments } from "./shaders/shader_trail_avboit_segments.js";
|
|
7
|
+
import { shader_trail_draw_args, TRAIL_DRAW_ARGS_WORDS, TRAIL_DRAW_ARGS_WORKGROUP_SIZE } from "./shaders/shader_trail_draw_args.js";
|
|
8
|
+
import { TRAIL_VERTEX_GROUP } from "./shaders/chunk_trail_vertex.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The fewest segment-list entries a frame's list is sized for.
|
|
12
|
+
* @type {number}
|
|
13
|
+
*/
|
|
14
|
+
const SEGMENT_LIST_MIN_ENTRIES = 64;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @param {number} x
|
|
18
|
+
* @returns {number} the smallest power of two at or above `x`
|
|
19
|
+
*/
|
|
20
|
+
function power_of_two_at_least(x) {
|
|
21
|
+
let p = 1;
|
|
22
|
+
|
|
23
|
+
while (p < x) {
|
|
24
|
+
p *= 2;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return p;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @typedef {Object} TrailSegmentsHandles
|
|
32
|
+
* @property {number} occupancy graph handle of the occupancy bits, after the trails marked theirs
|
|
33
|
+
* @property {number} segment_list graph handle of the visible segments, a region per draw class
|
|
34
|
+
* @property {number} args graph handle of the indexed indirect draws, one per draw class
|
|
35
|
+
* @property {(number|undefined)[]} radials the radial count of each draw class, a hole where none is used
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* The trails' AVBOIT occupancy and this view's draw lists: the segments pass, a thread per live segment
|
|
40
|
+
* dispatched from the frame's scan, then a pass that turns each draw class's count into its indexed
|
|
41
|
+
* indirect draw.
|
|
42
|
+
*
|
|
43
|
+
* Each draw class has a region of the segment list as long as the most segments its trails can show,
|
|
44
|
+
* the counters start at those regions, and the list is sized in powers of two so a count that climbs a
|
|
45
|
+
* little each frame does not make a new buffer each frame.
|
|
46
|
+
*
|
|
47
|
+
* @param {object} params
|
|
48
|
+
* @param {import("../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} params.graph
|
|
49
|
+
* @param {number} params.camera graph handle of the camera uniform
|
|
50
|
+
* @param {ArrayLike<number>} params.cluster_parameters the frame's depth curve
|
|
51
|
+
* @param {number} params.occupancy graph handle of the occupancy bits, to add to
|
|
52
|
+
* @param {import("./graph_trails.js").TrailSimulationHandles} params.simulation this frame's simulation
|
|
53
|
+
* @param {import("./GPUTrailSystem.js").GPUTrailSystem} params.runtime
|
|
54
|
+
* @returns {TrailSegmentsHandles}
|
|
55
|
+
*/
|
|
56
|
+
export function graph_trails_avboit_segments({ graph, camera, cluster_parameters, occupancy, simulation, runtime }) {
|
|
57
|
+
assert.isNonNegativeInteger(camera, "camera");
|
|
58
|
+
assert.isNonNegativeInteger(occupancy, "occupancy");
|
|
59
|
+
|
|
60
|
+
const classes = runtime.draw_classes;
|
|
61
|
+
const class_count = classes.length;
|
|
62
|
+
|
|
63
|
+
assert.greaterThan(class_count, 0, "a frame with no draw class has no trails to draw");
|
|
64
|
+
|
|
65
|
+
const regions = new Uint32Array(class_count);
|
|
66
|
+
const info = new Uint32Array(class_count * 2);
|
|
67
|
+
const radials = new Array(class_count);
|
|
68
|
+
|
|
69
|
+
let total = 0;
|
|
70
|
+
|
|
71
|
+
for (let c = 0; c < class_count; c++) {
|
|
72
|
+
const draw_class = classes[c];
|
|
73
|
+
|
|
74
|
+
regions[c] = total;
|
|
75
|
+
|
|
76
|
+
info[c * 2] = draw_class === undefined ? 0 : draw_class.radial;
|
|
77
|
+
info[c * 2 + 1] = total;
|
|
78
|
+
|
|
79
|
+
radials[c] = draw_class === undefined ? undefined : draw_class.radial;
|
|
80
|
+
|
|
81
|
+
if (draw_class !== undefined) {
|
|
82
|
+
total += draw_class.segments;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const list_bytes = power_of_two_at_least(Math.max(SEGMENT_LIST_MIN_ENTRIES, total)) * 4;
|
|
87
|
+
const counts_bytes = power_of_two_at_least(Math.max(4, class_count)) * 4;
|
|
88
|
+
const args_bytes = power_of_two_at_least(Math.max(4, class_count)) * TRAIL_DRAW_ARGS_WORDS * 4;
|
|
89
|
+
|
|
90
|
+
const now = runtime.now;
|
|
91
|
+
|
|
92
|
+
function execute_segments(data, resources, context) {
|
|
93
|
+
const encoder = context.encoder;
|
|
94
|
+
|
|
95
|
+
// each class's counter starts at its region, so a place the append hands back is where to write
|
|
96
|
+
encoder.writeBuffer(resources.get(data.class_counts), 0, regions.buffer, 0, regions.byteLength);
|
|
97
|
+
|
|
98
|
+
shader_trail_avboit_segments.dispatchIndirect({
|
|
99
|
+
encoder,
|
|
100
|
+
bindings: {
|
|
101
|
+
camera: resources.get(data.camera),
|
|
102
|
+
trail_database: resources.get(data.trail_database),
|
|
103
|
+
knots: resources.get(data.knots),
|
|
104
|
+
fade_keys: resources.get(data.fade_keys),
|
|
105
|
+
segment_sums: resources.get(data.segment_sums),
|
|
106
|
+
class_counts: resources.get(data.class_counts),
|
|
107
|
+
segment_list: resources.get(data.segment_list),
|
|
108
|
+
occupancy: resources.get(data.occupancy),
|
|
109
|
+
settings: { cluster_parameters, now },
|
|
110
|
+
},
|
|
111
|
+
command: resources.get(data.command),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const segments_data = {};
|
|
116
|
+
const segments = graph.add("Trail AVBOIT Segments", segments_data, execute_segments);
|
|
117
|
+
|
|
118
|
+
segments_data.camera = segments.read(camera);
|
|
119
|
+
segments_data.trail_database = segments.read(simulation.trail_database);
|
|
120
|
+
segments_data.knots = segments.read(simulation.knots);
|
|
121
|
+
segments_data.fade_keys = segments.read(simulation.fade_keys);
|
|
122
|
+
segments_data.segment_sums = segments.read(simulation.segment_sums);
|
|
123
|
+
segments_data.command = segments.read(simulation.segments_command);
|
|
124
|
+
segments_data.class_counts = segments.create("trails/class_counts", BufferResourceDescriptor.from(
|
|
125
|
+
counts_bytes, GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
|
|
126
|
+
));
|
|
127
|
+
segments_data.segment_list = segments.create("trails/segment_list", BufferResourceDescriptor.from(
|
|
128
|
+
list_bytes, GPUBufferUsage.STORAGE,
|
|
129
|
+
));
|
|
130
|
+
segments.read(occupancy);
|
|
131
|
+
segments_data.occupancy = segments.write(occupancy);
|
|
132
|
+
|
|
133
|
+
function execute_args(data, resources, context) {
|
|
134
|
+
const encoder = context.encoder;
|
|
135
|
+
|
|
136
|
+
shader_trail_draw_args.dispatch({
|
|
137
|
+
encoder,
|
|
138
|
+
bindings: {
|
|
139
|
+
class_counts: resources.get(data.class_counts),
|
|
140
|
+
classes: encoder.allocateTransientBufferAndLoad(info.buffer, GPUBufferUsage.STORAGE, 0, info.byteLength),
|
|
141
|
+
args: resources.get(data.args),
|
|
142
|
+
settings: { class_count },
|
|
143
|
+
},
|
|
144
|
+
group_count_x: Math.ceil(class_count / TRAIL_DRAW_ARGS_WORKGROUP_SIZE),
|
|
145
|
+
group_count_y: 1,
|
|
146
|
+
group_count_z: 1,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const args_data = {};
|
|
151
|
+
const args = graph.add("Trail Draw Args", args_data, execute_args);
|
|
152
|
+
|
|
153
|
+
args_data.class_counts = args.read(segments_data.class_counts);
|
|
154
|
+
args_data.args = args.create("trails/draw_args", BufferResourceDescriptor.from(
|
|
155
|
+
args_bytes, GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT,
|
|
156
|
+
));
|
|
157
|
+
|
|
158
|
+
return {
|
|
159
|
+
occupancy: segments_data.occupancy,
|
|
160
|
+
segment_list: segments_data.segment_list,
|
|
161
|
+
args: args_data.args,
|
|
162
|
+
radials,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* The draws of one trail pass: the vertex group, then an indexed indirect draw per draw class, from the
|
|
168
|
+
* class's static index buffer.
|
|
169
|
+
*
|
|
170
|
+
* @param {import("./GPUTrailSystem.js").GPUTrailSystem} runtime
|
|
171
|
+
* @param {(number|undefined)[]} radials
|
|
172
|
+
* @param {import("../../descriptor/pipeline/render/RenderPipelineDescriptor.js").RenderPipelineDescriptor} pipeline
|
|
173
|
+
* @returns {function(GPURenderPassEncoder, Object, Object<string, *>): void}
|
|
174
|
+
*/
|
|
175
|
+
function trail_draws(runtime, radials, pipeline) {
|
|
176
|
+
return (pass_encoder, graphics, inputs) => {
|
|
177
|
+
const vertex_group = TRAIL_VERTEX_GROUP.generateBindings({
|
|
178
|
+
camera: inputs.camera,
|
|
179
|
+
trail_frame: inputs.trail_frame,
|
|
180
|
+
segment_list: inputs.segment_list,
|
|
181
|
+
knots: inputs.knots,
|
|
182
|
+
trail_database: inputs.trail_database,
|
|
183
|
+
fade_keys: inputs.fade_keys,
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
graphics.setPipelineBindGroup(pass_encoder, pipeline, TRAIL_AVBOIT_BIND_GROUP_VERTEX, vertex_group);
|
|
187
|
+
|
|
188
|
+
for (let c = 0; c < radials.length; c++) {
|
|
189
|
+
const radial = radials[c];
|
|
190
|
+
|
|
191
|
+
if (radial === undefined) {
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
pass_encoder.setIndexBuffer(runtime.index_buffer(radial), "uint32");
|
|
196
|
+
pass_encoder.drawIndexedIndirect(inputs.args, c * TRAIL_DRAW_ARGS_WORDS * 4);
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* The graph handles the trails' vertex stage reads.
|
|
203
|
+
*
|
|
204
|
+
* @param {import("../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} graph
|
|
205
|
+
* @param {number} camera
|
|
206
|
+
* @param {import("./graph_trails.js").TrailSimulationHandles} simulation
|
|
207
|
+
* @param {TrailSegmentsHandles} segments
|
|
208
|
+
* @param {import("./GPUTrailSystem.js").GPUTrailSystem} runtime
|
|
209
|
+
* @returns {Object<string, number>}
|
|
210
|
+
*/
|
|
211
|
+
function vertex_inputs(graph, camera, simulation, segments, runtime) {
|
|
212
|
+
return {
|
|
213
|
+
camera,
|
|
214
|
+
trail_frame: graph_import_buffer(graph, runtime.frame_uniform, "trails/frame"),
|
|
215
|
+
segment_list: segments.segment_list,
|
|
216
|
+
knots: simulation.knots,
|
|
217
|
+
trail_database: simulation.trail_database,
|
|
218
|
+
fade_keys: simulation.fade_keys,
|
|
219
|
+
args: segments.args,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* The trails' extinction into the AVBOIT volume, through the unlit splat.
|
|
225
|
+
*
|
|
226
|
+
* @param {object} params
|
|
227
|
+
* @param {import("../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} params.graph
|
|
228
|
+
* @param {number} params.camera
|
|
229
|
+
* @param {number} params.warp
|
|
230
|
+
* @param {number[]} params.voxel_resolution
|
|
231
|
+
* @param {{extinction: number, overflow: number, dummy: number}} params.volume
|
|
232
|
+
* @param {import("./graph_trails.js").TrailSimulationHandles} params.simulation
|
|
233
|
+
* @param {TrailSegmentsHandles} params.segments
|
|
234
|
+
* @param {import("./GPUTrailSystem.js").GPUTrailSystem} params.runtime
|
|
235
|
+
* @returns {{extinction: number, overflow: number, dummy: number}}
|
|
236
|
+
*/
|
|
237
|
+
export function graph_trails_avboit_splat({ graph, camera, warp, voxel_resolution, volume, simulation, segments, runtime }) {
|
|
238
|
+
return graph_avboit_unlit_splat({
|
|
239
|
+
graph,
|
|
240
|
+
label: "Trail AVBOIT Splat",
|
|
241
|
+
pipeline: TRAIL_AVBOIT_SPLAT_PIPELINE,
|
|
242
|
+
resources: TRAIL_AVBOIT_SPLAT_RESOURCES,
|
|
243
|
+
inputs: vertex_inputs(graph, camera, simulation, segments, runtime),
|
|
244
|
+
warp,
|
|
245
|
+
voxel_resolution,
|
|
246
|
+
volume,
|
|
247
|
+
is_empty: () => false,
|
|
248
|
+
record: trail_draws(runtime, segments.radials, TRAIL_AVBOIT_SPLAT_PIPELINE),
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* The trails into the AVBOIT accumulators, through the unlit draw.
|
|
254
|
+
*
|
|
255
|
+
* @param {object} params
|
|
256
|
+
* @param {import("../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} params.graph
|
|
257
|
+
* @param {import("../view/GPUViewContext.js").GPUViewContext} params.view_ctx
|
|
258
|
+
* @param {number} params.camera
|
|
259
|
+
* @param {number} params.depth_texture
|
|
260
|
+
* @param {number} params.warp
|
|
261
|
+
* @param {number} params.integral
|
|
262
|
+
* @param {number} params.volumetrics_lut
|
|
263
|
+
* @param {number} params.volumetrics_metadata
|
|
264
|
+
* @param {{color: number, norm: number, extinction: number, emission: number}} params.accumulators
|
|
265
|
+
* @param {import("./graph_trails.js").TrailSimulationHandles} params.simulation
|
|
266
|
+
* @param {TrailSegmentsHandles} params.segments
|
|
267
|
+
* @param {import("./GPUTrailSystem.js").GPUTrailSystem} params.runtime
|
|
268
|
+
* @returns {{color: number, norm: number, extinction: number, emission: number}}
|
|
269
|
+
*/
|
|
270
|
+
export function graph_trails_avboit_draw({
|
|
271
|
+
graph,
|
|
272
|
+
view_ctx,
|
|
273
|
+
camera,
|
|
274
|
+
depth_texture,
|
|
275
|
+
warp,
|
|
276
|
+
integral,
|
|
277
|
+
volumetrics_lut,
|
|
278
|
+
volumetrics_metadata,
|
|
279
|
+
accumulators,
|
|
280
|
+
simulation,
|
|
281
|
+
segments,
|
|
282
|
+
runtime,
|
|
283
|
+
}) {
|
|
284
|
+
return graph_avboit_unlit_draw({
|
|
285
|
+
graph,
|
|
286
|
+
label: "Trail AVBOIT Draw",
|
|
287
|
+
pipeline: TRAIL_AVBOIT_DRAW_PIPELINE,
|
|
288
|
+
resources: TRAIL_AVBOIT_DRAW_RESOURCES,
|
|
289
|
+
inputs: vertex_inputs(graph, camera, simulation, segments, runtime),
|
|
290
|
+
view_ctx,
|
|
291
|
+
depth_texture,
|
|
292
|
+
warp,
|
|
293
|
+
integral,
|
|
294
|
+
volumetrics_lut,
|
|
295
|
+
volumetrics_metadata,
|
|
296
|
+
accumulators,
|
|
297
|
+
is_empty: () => false,
|
|
298
|
+
record: trail_draws(runtime, segments.radials, TRAIL_AVBOIT_DRAW_PIPELINE),
|
|
299
|
+
});
|
|
300
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A curve's place in the key buffer, shared by every trail that fades by an equal curve.
|
|
3
|
+
*/
|
|
4
|
+
export class TrailFadeCurve {
|
|
5
|
+
/** @type {number} first key in the buffer */
|
|
6
|
+
first: number;
|
|
7
|
+
/** @type {number} keys */
|
|
8
|
+
count: number;
|
|
9
|
+
/** @type {number} trails holding it */
|
|
10
|
+
references: number;
|
|
11
|
+
/** @type {import("../../../../core/binary/allocator/OffsetAllocator.js").Allocation|null} */
|
|
12
|
+
allocation: import("../../../../core/binary/allocator/OffsetAllocator.js").Allocation | null;
|
|
13
|
+
/** @type {import("../../../../engine/animation/curve/AnimationCurve.js").AnimationCurve|null} the store's own copy */
|
|
14
|
+
curve: import("../../../../engine/animation/curve/AnimationCurve.js").AnimationCurve | null;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The trails' fade curves on the GPU, one run of keys per distinct curve, in the layout
|
|
18
|
+
* `chunk_animation_curve_evaluate_keys` reads (`ANIMATION_CURVE_KEYFRAME_STRUCT`).
|
|
19
|
+
*
|
|
20
|
+
* A curve is the trails' class data, not theirs alone: every trail on the shared default fade, or on one
|
|
21
|
+
* curve a game hands out, reads one run. Curves are found by content — a curve that equals one held is
|
|
22
|
+
* that one — and kept by reference count, so the last trail to let go frees the run. The key is a copy,
|
|
23
|
+
* because a curve the caller holds can be edited in place.
|
|
24
|
+
*
|
|
25
|
+
* Nothing on the GPU writes the buffer, so it grows by replacement and the whole of it goes up again.
|
|
26
|
+
*/
|
|
27
|
+
export class TrailFadeCurves {
|
|
28
|
+
/**
|
|
29
|
+
* @param {GPUDevice} device
|
|
30
|
+
*/
|
|
31
|
+
constructor(device: GPUDevice);
|
|
32
|
+
/**
|
|
33
|
+
* @returns {number} distinct curves held
|
|
34
|
+
*/
|
|
35
|
+
get count(): number;
|
|
36
|
+
/**
|
|
37
|
+
* The key buffer as the GPU should see it, uploaded first if anything changed.
|
|
38
|
+
*
|
|
39
|
+
* @returns {GPUBuffer}
|
|
40
|
+
*/
|
|
41
|
+
flush(): GPUBuffer;
|
|
42
|
+
/**
|
|
43
|
+
* Hold a curve equal to `curve`, placing its keys if none is held.
|
|
44
|
+
*
|
|
45
|
+
* @param {import("../../../../engine/animation/curve/AnimationCurve.js").AnimationCurve} curve at least one key
|
|
46
|
+
* @returns {TrailFadeCurve}
|
|
47
|
+
*/
|
|
48
|
+
acquire(curve: import("../../../../engine/animation/curve/AnimationCurve.js").AnimationCurve): TrailFadeCurve;
|
|
49
|
+
/**
|
|
50
|
+
* @param {TrailFadeCurve} held from {@link acquire}
|
|
51
|
+
*/
|
|
52
|
+
release(held: TrailFadeCurve): void;
|
|
53
|
+
destroy(): void;
|
|
54
|
+
#private;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=TrailFadeCurves.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrailFadeCurves.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/trails/runtime/TrailFadeCurves.js"],"names":[],"mappings":"AAcA;;GAEG;AACH;IACI,6CAA6C;IAC7C,OADW,MAAM,CACP;IAEV,0BAA0B;IAC1B,OADW,MAAM,CACP;IAEV,uCAAuC;IACvC,YADW,MAAM,CACF;IAEf,6FAA6F;IAC7F,YADW,OAAO,sDAAsD,EAAE,UAAU,GAAC,IAAI,CACvE;IAElB,sHAAsH;IACtH,OADW,OAAO,sDAAsD,EAAE,cAAc,GAAC,IAAI,CAChF;CAChB;AAED;;;;;;;;;;GAUG;AACH;IAgCI;;OAEG;IACH,+BAIC;IAED;;OAEG;IACH,oBAEC;IAED;;;;OAIG;IACH,mBAwBC;IAED;;;;;OAKG;IACH,eAHW,OAAO,sDAAsD,EAAE,cAAc,GAC3E,cAAc,CAc1B;IAED;;OAEG;IACH,cAFW,cAAc,QAgBxB;IAED,gBAIC;;CAoDJ"}
|