@driftengine/core 4.8.7 → 4.10.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.json +123 -11
- package/README.md +43 -38
- package/dist/index.d.ts +8 -1
- package/dist/index.js +11 -3
- package/dist/render/ambientHarmonics.d.ts +1 -1
- package/dist/render/ambientHarmonics.js +1 -1
- package/dist/render/areaLights.d.ts +4 -4
- package/dist/render/areaLights.js +1 -1
- package/dist/render/atmosphere.d.ts +13 -0
- package/dist/render/atmosphere.js +9 -1
- package/dist/render/backend/api.d.ts +19 -4
- package/dist/render/backend/createRenderer.d.ts +6 -0
- package/dist/render/backend/createRenderer.js +4 -1
- package/dist/render/backend/select.js +11 -5
- package/dist/render/backend/webgl2/boneAnimations.d.ts +29 -0
- package/dist/render/backend/webgl2/boneAnimations.js +80 -0
- package/dist/render/backend/webgl2/instanced.d.ts +5 -1
- package/dist/render/backend/webgl2/instanced.js +13 -1
- package/dist/render/backend/webgl2/renderer.d.ts +180 -4
- package/dist/render/backend/webgl2/renderer.js +550 -40
- package/dist/render/backend/webgl2/skinPaletteTexture.d.ts +5 -3
- package/dist/render/backend/webgl2/skinPaletteTexture.js +6 -4
- package/dist/render/backend/webgpu/boneAnimations.d.ts +34 -0
- package/dist/render/backend/webgpu/boneAnimations.js +76 -0
- package/dist/render/backend/webgpu/buffers.d.ts +19 -4
- package/dist/render/backend/webgpu/buffers.js +18 -11
- package/dist/render/backend/webgpu/compressedUpload.d.ts +0 -1
- package/dist/render/backend/webgpu/compressedUpload.js +53 -8
- package/dist/render/backend/webgpu/depthPass.d.ts +59 -3
- package/dist/render/backend/webgpu/depthPass.js +49 -14
- package/dist/render/backend/webgpu/device.d.ts +7 -1
- package/dist/render/backend/webgpu/device.js +31 -3
- package/dist/render/backend/webgpu/drawCommand.d.ts +18 -4
- package/dist/render/backend/webgpu/drawCommand.js +10 -3
- package/dist/render/backend/webgpu/flatPass.d.ts +100 -42
- package/dist/render/backend/webgpu/flatPass.js +191 -43
- package/dist/render/backend/webgpu/instanced.d.ts +14 -1
- package/dist/render/backend/webgpu/instanced.js +24 -1
- package/dist/render/backend/webgpu/materialStore.d.ts +101 -0
- package/dist/render/backend/webgpu/materialStore.js +265 -0
- package/dist/render/backend/webgpu/pipelineCache.d.ts +6 -0
- package/dist/render/backend/webgpu/pipelineCache.js +7 -0
- package/dist/render/backend/webgpu/postPass.d.ts +51 -9
- package/dist/render/backend/webgpu/postPass.js +16 -2
- package/dist/render/backend/webgpu/reflectionSurfacePass.d.ts +30 -0
- package/dist/render/backend/webgpu/reflectionSurfacePass.js +100 -0
- package/dist/render/backend/webgpu/renderer.d.ts +283 -37
- package/dist/render/backend/webgpu/renderer.js +1363 -202
- package/dist/render/backend/webgpu/skinPaletteRing.d.ts +7 -3
- package/dist/render/backend/webgpu/skinPaletteRing.js +13 -7
- package/dist/render/backend/webgpu/skinPaletteTexture.d.ts +6 -0
- package/dist/render/backend/webgpu/skinPaletteTexture.js +7 -1
- package/dist/render/backend/webgpu/staticBundles.d.ts +125 -0
- package/dist/render/backend/webgpu/staticBundles.js +241 -0
- package/dist/render/backend/webgpu/surfaceTexturePass.d.ts +10 -3
- package/dist/render/backend/webgpu/surfaceTexturePass.js +20 -2
- package/dist/render/backend/webgpu/uniformRing.d.ts +21 -0
- package/dist/render/backend/webgpu/uniformRing.js +9 -1
- package/dist/render/bloomChain.d.ts +3 -3
- package/dist/render/boneAnimation.d.ts +92 -0
- package/dist/render/boneAnimation.js +133 -0
- package/dist/render/compressedSource.d.ts +33 -13
- package/dist/render/compressedSource.js +70 -25
- package/dist/render/displayRange.d.ts +31 -0
- package/dist/render/displayRange.js +47 -0
- package/dist/render/filmicCurve.d.ts +74 -0
- package/dist/render/filmicCurve.js +203 -0
- package/dist/render/fog.d.ts +4 -1
- package/dist/render/fog.js +12 -2
- package/dist/render/frame/resources.d.ts +2 -2
- package/dist/render/frame/resources.js +6 -0
- package/dist/render/frameReflections.d.ts +40 -0
- package/dist/render/frameReflections.js +48 -0
- package/dist/render/glCompressed.js +83 -0
- package/dist/render/instances.d.ts +26 -0
- package/dist/render/lightBudget.d.ts +10 -0
- package/dist/render/lightBudget.js +10 -0
- package/dist/render/lightmap.d.ts +1 -1
- package/dist/render/mesh.d.ts +5 -0
- package/dist/render/mesh.js +6 -0
- package/dist/render/pass.d.ts +49 -0
- package/dist/render/pointLightSelection.d.ts +4 -4
- package/dist/render/reflectionSurfaceTargets.d.ts +28 -0
- package/dist/render/reflectionSurfaceTargets.js +99 -0
- package/dist/render/renderQuality.d.ts +39 -8
- package/dist/render/renderQuality.js +4 -0
- package/dist/render/sceneTarget.d.ts +5 -0
- package/dist/render/sceneTarget.js +24 -1
- package/dist/render/screenSpaceReflection.d.ts +7 -1
- package/dist/render/screenSpaceReflection.js +5 -0
- package/dist/render/shaders/arcane.d.ts +1 -1
- package/dist/render/shaders/bolt.d.ts +1 -1
- package/dist/render/shaders/boneAnimation.d.ts +19 -0
- package/dist/render/shaders/boneAnimation.js +63 -0
- package/dist/render/shaders/caustics.d.ts +1 -1
- package/dist/render/shaders/depth.d.ts +7 -0
- package/dist/render/shaders/depth.js +35 -10
- package/dist/render/shaders/film.d.ts +1 -1
- package/dist/render/shaders/filmLook.js +2 -1
- package/dist/render/shaders/fire.d.ts +1 -1
- package/dist/render/shaders/flat/glassTint.d.ts +1 -1
- package/dist/render/shaders/flat/glassTint.js +2 -0
- package/dist/render/shaders/flat/index.d.ts +16 -0
- package/dist/render/shaders/flat/index.js +33 -5
- package/dist/render/shaders/flat/main.d.ts +1 -1
- package/dist/render/shaders/flat/main.js +43 -5
- package/dist/render/shaders/flat/models.js +1 -1
- package/dist/render/shaders/flat/overlay.d.ts +16 -0
- package/dist/render/shaders/flat/overlay.js +117 -0
- package/dist/render/shaders/flat/pointShadow.js +3 -3
- package/dist/render/shaders/flat/preamble.js +38 -24
- package/dist/render/shaders/flat/reflectionSurface.d.ts +21 -0
- package/dist/render/shaders/flat/reflectionSurface.js +61 -0
- package/dist/render/shaders/fog.d.ts +1 -1
- package/dist/render/shaders/fog.js +9 -2
- package/dist/render/shaders/fringe.d.ts +29 -0
- package/dist/render/shaders/fringe.js +55 -0
- package/dist/render/shaders/generated/arcane.wgsl.d.ts +1 -1
- package/dist/render/shaders/generated/arcane.wgsl.js +1 -1
- package/dist/render/shaders/generated/bolt.wgsl.d.ts +1 -1
- package/dist/render/shaders/generated/bolt.wgsl.js +1 -1
- package/dist/render/shaders/generated/caustics.wgsl.d.ts +1 -1
- package/dist/render/shaders/generated/caustics.wgsl.js +1 -1
- package/dist/render/shaders/generated/depth.wgsl.d.ts +93 -0
- package/dist/render/shaders/generated/depth.wgsl.js +93 -0
- package/dist/render/shaders/generated/film.wgsl.d.ts +1 -1
- package/dist/render/shaders/generated/film.wgsl.js +1 -1
- package/dist/render/shaders/generated/fire.wgsl.d.ts +1 -1
- package/dist/render/shaders/generated/fire.wgsl.js +1 -1
- package/dist/render/shaders/generated/flat.wgsl.d.ts +3254 -2920
- package/dist/render/shaders/generated/flat.wgsl.js +3292 -2957
- package/dist/render/shaders/generated/line.wgsl.d.ts +1 -1
- package/dist/render/shaders/generated/line.wgsl.js +1 -1
- package/dist/render/shaders/generated/particle.wgsl.d.ts +4 -4
- package/dist/render/shaders/generated/particle.wgsl.js +4 -4
- package/dist/render/shaders/generated/rush.wgsl.d.ts +56 -26
- package/dist/render/shaders/generated/rush.wgsl.js +56 -26
- package/dist/render/shaders/generated/scatter.wgsl.d.ts +1 -1
- package/dist/render/shaders/generated/scatter.wgsl.js +1 -1
- package/dist/render/shaders/generated/smoke.wgsl.d.ts +1 -1
- package/dist/render/shaders/generated/smoke.wgsl.js +1 -1
- package/dist/render/shaders/generated/ssrResolve.wgsl.d.ts +29 -0
- package/dist/render/shaders/generated/ssrResolve.wgsl.js +29 -0
- package/dist/render/shaders/generated/ssrTrace.wgsl.d.ts +22 -2
- package/dist/render/shaders/generated/ssrTrace.wgsl.js +22 -2
- package/dist/render/shaders/generated/water.wgsl.d.ts +1 -1
- package/dist/render/shaders/generated/water.wgsl.js +1 -1
- package/dist/render/shaders/gpudriven/fog.wgsl.d.ts +2 -2
- package/dist/render/shaders/gpudriven/fog.wgsl.js +11 -3
- package/dist/render/shaders/line.d.ts +1 -1
- package/dist/render/shaders/outputTransform.d.ts +7 -0
- package/dist/render/shaders/outputTransform.js +28 -14
- package/dist/render/shaders/particle.d.ts +3 -3
- package/dist/render/shaders/rush.js +54 -11
- package/dist/render/shaders/scatter.d.ts +1 -1
- package/dist/render/shaders/smoke.d.ts +1 -1
- package/dist/render/shaders/ssrResolve.d.ts +17 -0
- package/dist/render/shaders/ssrResolve.js +51 -0
- package/dist/render/shaders/ssrTrace.js +26 -0
- package/dist/render/shaders/vertexChannel.d.ts +7 -0
- package/dist/render/shaders/vertexChannel.js +26 -0
- package/dist/render/shaders/water.d.ts +1 -1
- package/dist/render/ssrPass.d.ts +16 -0
- package/dist/render/ssrPass.js +106 -1
- package/dist/render/staticDraws.d.ts +47 -0
- package/dist/render/staticDraws.js +43 -0
- package/dist/render/surfaceOverlay.d.ts +132 -0
- package/dist/render/surfaceOverlay.js +85 -0
- package/dist/render/surfaceTexture.d.ts +57 -7
- package/dist/render/surfaceTexture.js +125 -17
- package/dist/render/temporalAa.d.ts +14 -0
- package/dist/render/temporalAa.js +20 -0
- package/dist/render/vertexDefaults.d.ts +17 -0
- package/dist/render/vertexDefaults.js +24 -0
- package/package.json +6 -6
- package/src/index.ts +24 -2
- package/src/render/ambientHarmonics.ts +1 -1
- package/src/render/areaLights.ts +4 -4
- package/src/render/atmosphere.ts +22 -1
- package/src/render/backend/api.ts +22 -3
- package/src/render/backend/createRenderer.ts +18 -1
- package/src/render/backend/select.ts +10 -5
- package/src/render/backend/webgl2/boneAnimations.ts +105 -0
- package/src/render/backend/webgl2/instanced.ts +20 -1
- package/src/render/backend/webgl2/renderer.ts +672 -37
- package/src/render/backend/webgl2/skinPaletteTexture.ts +6 -4
- package/src/render/backend/webgpu/boneAnimations.ts +97 -0
- package/src/render/backend/webgpu/buffers.ts +42 -16
- package/src/render/backend/webgpu/compressedUpload.ts +59 -9
- package/src/render/backend/webgpu/depthPass.ts +51 -10
- package/src/render/backend/webgpu/device.ts +42 -3
- package/src/render/backend/webgpu/drawCommand.ts +22 -4
- package/src/render/backend/webgpu/flatPass.ts +250 -40
- package/src/render/backend/webgpu/instanced.ts +32 -1
- package/src/render/backend/webgpu/materialStore.ts +276 -0
- package/src/render/backend/webgpu/pipelineCache.ts +7 -0
- package/src/render/backend/webgpu/postPass.ts +18 -0
- package/src/render/backend/webgpu/reflectionSurfacePass.ts +114 -0
- package/src/render/backend/webgpu/renderer.ts +1655 -230
- package/src/render/backend/webgpu/skinPaletteRing.ts +13 -7
- package/src/render/backend/webgpu/skinPaletteTexture.ts +7 -1
- package/src/render/backend/webgpu/staticBundles.ts +363 -0
- package/src/render/backend/webgpu/surfaceTexturePass.ts +29 -3
- package/src/render/backend/webgpu/uniformRing.ts +10 -1
- package/src/render/bloomChain.ts +3 -3
- package/src/render/boneAnimation.ts +223 -0
- package/src/render/compressedSource.ts +121 -29
- package/src/render/displayRange.ts +61 -0
- package/src/render/filmicCurve.ts +229 -0
- package/src/render/fog.ts +19 -3
- package/src/render/frame/resources.ts +6 -0
- package/src/render/frameReflections.ts +72 -0
- package/src/render/glCompressed.ts +83 -0
- package/src/render/instances.ts +27 -0
- package/src/render/lightBudget.ts +11 -0
- package/src/render/lightmap.ts +1 -1
- package/src/render/mesh.ts +6 -0
- package/src/render/pass.ts +53 -1
- package/src/render/pointLightSelection.ts +4 -4
- package/src/render/reflectionSurfaceTargets.ts +105 -0
- package/src/render/renderQuality.ts +44 -8
- package/src/render/sceneTarget.ts +30 -2
- package/src/render/screenSpaceReflection.ts +7 -1
- package/src/render/shaders/boneAnimation.ts +63 -0
- package/src/render/shaders/depth.ts +45 -10
- package/src/render/shaders/filmLook.ts +2 -1
- package/src/render/shaders/flat/glassTint.ts +5 -1
- package/src/render/shaders/flat/index.ts +49 -5
- package/src/render/shaders/flat/main.ts +43 -5
- package/src/render/shaders/flat/models.ts +1 -1
- package/src/render/shaders/flat/overlay.ts +117 -0
- package/src/render/shaders/flat/pointShadow.ts +3 -3
- package/src/render/shaders/flat/preamble.ts +38 -24
- package/src/render/shaders/flat/reflectionSurface.ts +61 -0
- package/src/render/shaders/fog.ts +9 -2
- package/src/render/shaders/fringe.ts +59 -0
- package/src/render/shaders/generated/arcane.wgsl.ts +1 -1
- package/src/render/shaders/generated/bolt.wgsl.ts +1 -1
- package/src/render/shaders/generated/caustics.wgsl.ts +1 -1
- package/src/render/shaders/generated/depth.wgsl.ts +95 -0
- package/src/render/shaders/generated/film.wgsl.ts +1 -1
- package/src/render/shaders/generated/fire.wgsl.ts +1 -1
- package/src/render/shaders/generated/flat.wgsl.ts +3292 -2957
- package/src/render/shaders/generated/line.wgsl.ts +1 -1
- package/src/render/shaders/generated/particle.wgsl.ts +4 -4
- package/src/render/shaders/generated/rush.wgsl.ts +56 -26
- package/src/render/shaders/generated/scatter.wgsl.ts +1 -1
- package/src/render/shaders/generated/smoke.wgsl.ts +1 -1
- package/src/render/shaders/generated/ssrResolve.wgsl.ts +30 -0
- package/src/render/shaders/generated/ssrTrace.wgsl.ts +22 -2
- package/src/render/shaders/generated/water.wgsl.ts +1 -1
- package/src/render/shaders/gpudriven/fog.wgsl.ts +11 -3
- package/src/render/shaders/outputTransform.ts +30 -14
- package/src/render/shaders/rush.ts +54 -11
- package/src/render/shaders/ssrResolve.ts +52 -0
- package/src/render/shaders/ssrTrace.ts +26 -0
- package/src/render/shaders/vertexChannel.ts +27 -0
- package/src/render/ssrPass.ts +138 -1
- package/src/render/staticDraws.ts +95 -0
- package/src/render/surfaceOverlay.ts +195 -0
- package/src/render/surfaceTexture.ts +161 -27
- package/src/render/temporalAa.ts +20 -0
- package/src/render/vertexDefaults.ts +28 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* One recorded draw, in the only shape this backend ever issues.
|
|
3
3
|
*
|
|
4
4
|
* Sampled across three unrelated verbs — panels, particles, wind streaks — the sequence is the
|
|
5
|
-
* same every time: a pipeline, a bind group with up to
|
|
5
|
+
* same every time: a pipeline, a bind group with up to four dynamic offsets, some vertex
|
|
6
6
|
* buffers, perhaps an index buffer, then a draw. Nothing in it is specific to what is being
|
|
7
7
|
* drawn except the values.
|
|
8
8
|
*
|
|
@@ -13,9 +13,14 @@
|
|
|
13
13
|
export interface DrawCommand {
|
|
14
14
|
pipeline: GPURenderPipeline | null;
|
|
15
15
|
bindGroup: GPUBindGroup | null;
|
|
16
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Dynamic offsets, held as numbers rather than an array so a reset stays free. Four only for a
|
|
18
|
+
* lit mesh: its draw's slot, its pass's, its material's and its view's, in binding order.
|
|
19
|
+
*/
|
|
17
20
|
offsetA: number;
|
|
18
21
|
offsetB: number;
|
|
22
|
+
offsetC: number;
|
|
23
|
+
offsetD: number;
|
|
19
24
|
offsetCount: number;
|
|
20
25
|
/** Fixed length; `vertexCount` says how many slots are live. */
|
|
21
26
|
readonly vertexBuffers: (GPUBuffer | null)[];
|
|
@@ -29,6 +34,12 @@ export interface DrawCommand {
|
|
|
29
34
|
* cull's survivors, counted on the device. Null for every other draw.
|
|
30
35
|
*/
|
|
31
36
|
indirect: GPUBuffer | null;
|
|
37
|
+
/**
|
|
38
|
+
* Render bundles to execute instead of everything above: a static list recorded once, replayed
|
|
39
|
+
* as one command. Held as the array `executeBundles` takes, kept by the list, so issuing it
|
|
40
|
+
* allocates nothing. Null for every other command, and put back to null by every take.
|
|
41
|
+
*/
|
|
42
|
+
bundles: readonly GPURenderBundle[] | null;
|
|
32
43
|
}
|
|
33
44
|
export interface CommandPool {
|
|
34
45
|
commands: DrawCommand[];
|
|
@@ -40,8 +51,11 @@ export declare function createCommandPool(capacity: number): CommandPool;
|
|
|
40
51
|
/**
|
|
41
52
|
* Hand out the next command, growing if a frame overruns.
|
|
42
53
|
*
|
|
43
|
-
* The entry is **not cleared
|
|
44
|
-
* be a write per field per draw for no reader — the same reasoning the node
|
|
54
|
+
* The entry is **not cleared**, but for `bundles`. Every caller fills every field it uses, and
|
|
55
|
+
* clearing here would be a write per field per draw for no reader — the same reasoning the node
|
|
56
|
+
* arena uses. `bundles` is the exception because almost no caller knows it exists: a pooled command
|
|
57
|
+
* that once carried a static list's bundles and was then taken for an ordinary draw would replay the
|
|
58
|
+
* list instead, so the one field nobody fills is the one field put back here.
|
|
45
59
|
*/
|
|
46
60
|
export declare function takeCommand(pool: CommandPool): number;
|
|
47
61
|
/** Empty the pool for a new frame. Keeps every entry; that is the whole point. */
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* One recorded draw, in the only shape this backend ever issues.
|
|
3
3
|
*
|
|
4
4
|
* Sampled across three unrelated verbs — panels, particles, wind streaks — the sequence is the
|
|
5
|
-
* same every time: a pipeline, a bind group with up to
|
|
5
|
+
* same every time: a pipeline, a bind group with up to four dynamic offsets, some vertex
|
|
6
6
|
* buffers, perhaps an index buffer, then a draw. Nothing in it is specific to what is being
|
|
7
7
|
* drawn except the values.
|
|
8
8
|
*
|
|
@@ -22,6 +22,8 @@ function emptyCommand() {
|
|
|
22
22
|
bindGroup: null,
|
|
23
23
|
offsetA: 0,
|
|
24
24
|
offsetB: 0,
|
|
25
|
+
offsetC: 0,
|
|
26
|
+
offsetD: 0,
|
|
25
27
|
offsetCount: 0,
|
|
26
28
|
vertexBuffers: new Array(VERTEX_BUFFER_SLOTS).fill(null),
|
|
27
29
|
vertexCount: 0,
|
|
@@ -30,6 +32,7 @@ function emptyCommand() {
|
|
|
30
32
|
count: 0,
|
|
31
33
|
instances: 1,
|
|
32
34
|
indirect: null,
|
|
35
|
+
bundles: null,
|
|
33
36
|
};
|
|
34
37
|
}
|
|
35
38
|
export function createCommandPool(capacity) {
|
|
@@ -41,8 +44,11 @@ export function createCommandPool(capacity) {
|
|
|
41
44
|
/**
|
|
42
45
|
* Hand out the next command, growing if a frame overruns.
|
|
43
46
|
*
|
|
44
|
-
* The entry is **not cleared
|
|
45
|
-
* be a write per field per draw for no reader — the same reasoning the node
|
|
47
|
+
* The entry is **not cleared**, but for `bundles`. Every caller fills every field it uses, and
|
|
48
|
+
* clearing here would be a write per field per draw for no reader — the same reasoning the node
|
|
49
|
+
* arena uses. `bundles` is the exception because almost no caller knows it exists: a pooled command
|
|
50
|
+
* that once carried a static list's bundles and was then taken for an ordinary draw would replay the
|
|
51
|
+
* list instead, so the one field nobody fills is the one field put back here.
|
|
46
52
|
*/
|
|
47
53
|
export function takeCommand(pool) {
|
|
48
54
|
const at = pool.taken;
|
|
@@ -51,6 +57,7 @@ export function takeCommand(pool) {
|
|
|
51
57
|
pool.taken = at + 1;
|
|
52
58
|
if (pool.taken > pool.highWater)
|
|
53
59
|
pool.highWater = pool.taken;
|
|
60
|
+
pool.commands[at].bundles = null;
|
|
54
61
|
return at;
|
|
55
62
|
}
|
|
56
63
|
/** Empty the pool for a new frame. Keeps every entry; that is the whole point. */
|
|
@@ -63,11 +63,27 @@ export interface StageBindings {
|
|
|
63
63
|
readonly textures: Readonly<Record<string, TextureBinding>>;
|
|
64
64
|
/** Each pipeline-overridable constant's id, by the GLSL name it was declared under. */
|
|
65
65
|
readonly overrides?: Readonly<Record<string, number>>;
|
|
66
|
+
/**
|
|
67
|
+
* The second block, of the uniforms marked `// wgsl:material`: its binding, size and fields.
|
|
68
|
+
* Absent from a stage that marks none, which is every stage but the lit fragment's.
|
|
69
|
+
*/
|
|
70
|
+
readonly materialUniforms?: number;
|
|
71
|
+
readonly materialSize?: number;
|
|
72
|
+
readonly materialFields?: StageBindings['fields'];
|
|
73
|
+
/**
|
|
74
|
+
* The vertex stage's view block, of the uniforms marked `// wgsl:view`: the camera, the light's
|
|
75
|
+
* matrix and the wind, which a pass settles. Absent from every stage but the lit vertex one.
|
|
76
|
+
*/
|
|
77
|
+
readonly viewUniforms?: number;
|
|
78
|
+
readonly viewSize?: number;
|
|
79
|
+
readonly viewFields?: StageBindings['fields'];
|
|
66
80
|
}
|
|
67
81
|
/** The key for a set of vertex flags: the same rule `variantKey` uses, flags on, sorted, joined. */
|
|
68
|
-
export declare function flatVertexKey(skinned: boolean, morphed: boolean, instanced?: boolean
|
|
82
|
+
export declare function flatVertexKey(skinned: boolean, morphed: boolean, instanced?: boolean,
|
|
83
|
+
/** Whether an instanced variant plays a bone animation. See `shaders/boneAnimation.ts`. */
|
|
84
|
+
animated?: boolean): string;
|
|
69
85
|
/** Everything the generator recorded about one variant of the vertex stage. */
|
|
70
|
-
export declare function flatVertexBindings(skinned: boolean, morphed?: boolean, instanced?: boolean): StageBindings;
|
|
86
|
+
export declare function flatVertexBindings(skinned: boolean, morphed?: boolean, instanced?: boolean, animated?: boolean): StageBindings;
|
|
71
87
|
/**
|
|
72
88
|
* A vertex stage's constants, keyed by each override's **id** as the fragment's are: `SKIN_EIGHT` and
|
|
73
89
|
* `CLOTH_BOUND` in a skinned stage, `LIGHTMAP_REGIONS` in an instanced one, nothing in any other. Every override a stage declares is set, and one this does
|
|
@@ -78,63 +94,51 @@ export declare function vertexConstants(bindings: StageBindings, skinEight: bool
|
|
|
78
94
|
/** Whether an instanced stage reads its tint lane as a lightmap region. See `lightmap.ts`. */
|
|
79
95
|
lightmapRegions?: boolean): Record<string, number>;
|
|
80
96
|
export declare const FLAT_VERT_FIELDS: {
|
|
81
|
-
readonly uViewProj: {
|
|
82
|
-
readonly offset: 0;
|
|
83
|
-
readonly size: 64;
|
|
84
|
-
readonly type: "mat4";
|
|
85
|
-
};
|
|
86
97
|
readonly uHasTangents: {
|
|
87
|
-
readonly offset:
|
|
98
|
+
readonly offset: 0;
|
|
88
99
|
readonly size: 4;
|
|
89
100
|
readonly type: "int";
|
|
90
101
|
};
|
|
91
|
-
readonly uLightViewProj: {
|
|
92
|
-
readonly offset: 80;
|
|
93
|
-
readonly size: 64;
|
|
94
|
-
readonly type: "mat4";
|
|
95
|
-
};
|
|
96
102
|
readonly uUvScale: {
|
|
97
|
-
readonly offset:
|
|
103
|
+
readonly offset: 8;
|
|
98
104
|
readonly size: 8;
|
|
99
105
|
readonly type: "vec2";
|
|
100
106
|
};
|
|
101
107
|
readonly uUvOffset: {
|
|
102
|
-
readonly offset:
|
|
108
|
+
readonly offset: 16;
|
|
103
109
|
readonly size: 8;
|
|
104
110
|
readonly type: "vec2";
|
|
105
111
|
};
|
|
106
112
|
readonly uModel: {
|
|
107
|
-
readonly offset:
|
|
113
|
+
readonly offset: 32;
|
|
108
114
|
readonly size: 64;
|
|
109
115
|
readonly type: "mat4";
|
|
110
116
|
};
|
|
111
117
|
readonly uTint: {
|
|
112
|
-
readonly offset:
|
|
118
|
+
readonly offset: 96;
|
|
113
119
|
readonly size: 12;
|
|
114
120
|
readonly type: "vec3";
|
|
115
121
|
};
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
readonly uWindSpeed: {
|
|
122
|
-
readonly offset: 248;
|
|
122
|
+
};
|
|
123
|
+
/** The animated instanced variant's block: the instanced fields, and the clip's `uBoneClip`. */
|
|
124
|
+
export declare const FLAT_ANIMATED_VERT_FIELDS: {
|
|
125
|
+
readonly uHasTangents: {
|
|
126
|
+
readonly offset: 0;
|
|
123
127
|
readonly size: 4;
|
|
124
|
-
readonly type: "
|
|
128
|
+
readonly type: "int";
|
|
125
129
|
};
|
|
126
|
-
readonly
|
|
127
|
-
readonly offset:
|
|
128
|
-
readonly size:
|
|
129
|
-
readonly type: "
|
|
130
|
+
readonly uUvScale: {
|
|
131
|
+
readonly offset: 8;
|
|
132
|
+
readonly size: 8;
|
|
133
|
+
readonly type: "vec2";
|
|
130
134
|
};
|
|
131
|
-
readonly
|
|
132
|
-
readonly offset:
|
|
133
|
-
readonly size:
|
|
134
|
-
readonly type: "
|
|
135
|
+
readonly uUvOffset: {
|
|
136
|
+
readonly offset: 16;
|
|
137
|
+
readonly size: 8;
|
|
138
|
+
readonly type: "vec2";
|
|
135
139
|
};
|
|
136
|
-
readonly
|
|
137
|
-
readonly offset:
|
|
140
|
+
readonly uBoneClip: {
|
|
141
|
+
readonly offset: 24;
|
|
138
142
|
readonly size: 8;
|
|
139
143
|
readonly type: "vec2";
|
|
140
144
|
};
|
|
@@ -147,18 +151,63 @@ export declare const FLAT_VERT_FIELDS: {
|
|
|
147
151
|
* 144 bytes a slot and is what a single ring costs.
|
|
148
152
|
*/
|
|
149
153
|
export declare const FLAT_VERT_SIZE: number;
|
|
154
|
+
/** The view block's fields, binding and size: the largest variant's, as `FLAT_VERT_SIZE` is. */
|
|
155
|
+
export declare const FLAT_VIEW_FIELDS: Readonly<Record<string, {
|
|
156
|
+
readonly offset: number;
|
|
157
|
+
readonly size: number;
|
|
158
|
+
readonly length?: number;
|
|
159
|
+
readonly stride?: number;
|
|
160
|
+
}>>;
|
|
161
|
+
export declare const FLAT_VIEW_SIZE: number;
|
|
162
|
+
/**
|
|
163
|
+
* The most sampled textures and distinct samplers any lit variant carrying the environment probe
|
|
164
|
+
* binds in its fragment stage, counted from the generated bindings: what a device must allow per
|
|
165
|
+
* stage before the probe's permutation can be built. A sampler several textures share counts once,
|
|
166
|
+
* which is what `// wgsl:share` buys.
|
|
167
|
+
*/
|
|
168
|
+
export declare function probeStageCeilings(): {
|
|
169
|
+
readonly textures: number;
|
|
170
|
+
readonly samplers: number;
|
|
171
|
+
};
|
|
150
172
|
/** Everything the generator recorded about one permutation of the fragment stage. */
|
|
151
173
|
export declare function flatFragmentBindings(variant: FlatVariant): StageBindings;
|
|
174
|
+
/**
|
|
175
|
+
* The lit fragment stage's two blocks as the renderer keeps them on the CPU: the pass's, then the
|
|
176
|
+
* material's straight after it, in one scratch, with every field at its offset in that scratch.
|
|
177
|
+
*
|
|
178
|
+
* **One scratch rather than two, so no setter has to know which block its field is in.** A setter
|
|
179
|
+
* writes by name, as it always has; the draw copies the material's bytes — `passSize` onwards — into
|
|
180
|
+
* the store and the pass's bytes into a ring slot, each only when something has changed it.
|
|
181
|
+
*/
|
|
182
|
+
export interface FlatFragmentScratch {
|
|
183
|
+
readonly fields: StageBindings['fields'];
|
|
184
|
+
/** Bytes of the pass's block, which is where the material's starts in the scratch. */
|
|
185
|
+
readonly passSize: number;
|
|
186
|
+
readonly passBinding: number;
|
|
187
|
+
readonly materialSize: number;
|
|
188
|
+
readonly materialBinding: number;
|
|
189
|
+
}
|
|
190
|
+
export declare function flatFragmentScratch(variant: FlatVariant): FlatFragmentScratch;
|
|
152
191
|
/** The depth format both backends compare with. */
|
|
153
192
|
export { DEPTH_FORMAT } from '../../depthConvention.ts';
|
|
154
193
|
/**
|
|
155
194
|
* The layout this variant binds against.
|
|
156
195
|
*
|
|
157
|
-
*
|
|
158
|
-
* from its own slot of one buffer
|
|
159
|
-
*
|
|
196
|
+
* All four blocks are **dynamic**: the vertex block because every draw supplies its own model
|
|
197
|
+
* matrix and tint from its own slot of one buffer; the fragment stage's pass block — the lights, the
|
|
198
|
+
* fog, the camera — and the vertex stage's view block because a frame binds more than one pass; and
|
|
199
|
+
* the material block because a material changes between draws. Their dynamic offsets go in binding
|
|
200
|
+
* order: the draw's, the pass's, the material's, the view's.
|
|
160
201
|
*/
|
|
161
|
-
export declare function createFlatBindGroupLayout(device: GPUDevice, variant: FlatVariant, skinned?: boolean, morphed?: boolean
|
|
202
|
+
export declare function createFlatBindGroupLayout(device: GPUDevice, variant: FlatVariant, skinned?: boolean, morphed?: boolean,
|
|
203
|
+
/** The instanced variant that plays a bone animation: its three vertex textures. */
|
|
204
|
+
animated?: boolean): GPUBindGroupLayout;
|
|
205
|
+
/** What an animated draw binds besides its material: the clip's two textures and its batch's clocks. */
|
|
206
|
+
export interface AnimationViews {
|
|
207
|
+
readonly places: GPUTextureView;
|
|
208
|
+
readonly turns: GPUTextureView;
|
|
209
|
+
readonly clocks: GPUTextureView;
|
|
210
|
+
}
|
|
162
211
|
/**
|
|
163
212
|
* Bind the buffers and one view per declared texture.
|
|
164
213
|
*
|
|
@@ -168,7 +217,7 @@ export declare function createFlatBindGroupLayout(device: GPUDevice, variant: Fl
|
|
|
168
217
|
* and WebGPU still requires something there, which is why `renderer.ts` keeps an
|
|
169
218
|
* `emptyTexture2D` for the same reason on the other side.
|
|
170
219
|
*/
|
|
171
|
-
export declare function createFlatBindGroup(device: GPUDevice, layout: GPUBindGroupLayout, variant: FlatVariant, perDraw: GPUBuffer,
|
|
220
|
+
export declare function createFlatBindGroup(device: GPUDevice, layout: GPUBindGroupLayout, variant: FlatVariant, perDraw: GPUBuffer, passes: GPUBuffer, materials: GPUBuffer, views: GPUBuffer, resolve: (name: string) => {
|
|
172
221
|
view: GPUTextureView;
|
|
173
222
|
sampler: GPUSampler;
|
|
174
223
|
},
|
|
@@ -177,7 +226,9 @@ palette?: GPUTextureView | null,
|
|
|
177
226
|
/** The delta view for a morphed bind group, or null for an unmorphed one. */
|
|
178
227
|
deltas?: GPUTextureView | null,
|
|
179
228
|
/** A skinned bind group's cloth views — the draw's, or the stand-in where it sets none. */
|
|
180
|
-
cloth?: ClothViews | null
|
|
229
|
+
cloth?: ClothViews | null,
|
|
230
|
+
/** An animated instanced group's views. See `AnimationViews`. */
|
|
231
|
+
animation?: AnimationViews | null): GPUBindGroup;
|
|
181
232
|
/**
|
|
182
233
|
* The pipeline, cached by the state that distinguishes it.
|
|
183
234
|
*
|
|
@@ -236,7 +287,14 @@ cloth?: boolean,
|
|
|
236
287
|
/** Which shading model its fragment stage shades by, null the standard. The key must carry it. */
|
|
237
288
|
model?: SurfaceModelKind | null,
|
|
238
289
|
/** Which half of a skin it draws. The key must carry it: `|ss`, `|sd` or `|sa`. See `SkinHalf`. */
|
|
239
|
-
skinPass?: SkinHalf
|
|
290
|
+
skinPass?: SkinHalf,
|
|
291
|
+
/**
|
|
292
|
+
* The reflection pass's surface half: the draw again, against its own depth, into the two
|
|
293
|
+
* targets `reflectionSurfacePass.ts` holds. The key must carry it: `|rs`.
|
|
294
|
+
*/
|
|
295
|
+
reflectionSurface?: boolean,
|
|
296
|
+
/** An instanced pipeline that plays a bone animation. The key must carry it: `|anim`. */
|
|
297
|
+
animated?: boolean): GPURenderPipeline;
|
|
240
298
|
/**
|
|
241
299
|
* The same pipeline, compiled off the main thread.
|
|
242
300
|
*
|