@driftengine/core 4.10.0 → 4.11.1
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 +107 -0
- package/README.md +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.js +2 -2
- package/dist/render/ambientOcclusionPass.d.ts +3 -2
- package/dist/render/ambientOcclusionPass.js +4 -2
- package/dist/render/backend/api.d.ts +21 -1
- package/dist/render/backend/webgl2/renderer.d.ts +141 -3
- package/dist/render/backend/webgl2/renderer.js +454 -42
- package/dist/render/backend/webgpu/buffers.d.ts +5 -0
- package/dist/render/backend/webgpu/buffers.js +98 -48
- package/dist/render/backend/webgpu/clothKernels.d.ts +8 -0
- package/dist/render/backend/webgpu/clothKernels.js +76 -0
- package/dist/render/backend/webgpu/clothOps.d.ts +39 -0
- package/dist/render/backend/webgpu/clothOps.js +78 -0
- package/dist/render/backend/webgpu/clothSetLayout.d.ts +25 -0
- package/dist/render/backend/webgpu/clothSetLayout.js +84 -0
- package/dist/render/backend/webgpu/clothSetPack.d.ts +33 -0
- package/dist/render/backend/webgpu/clothSetPack.js +144 -0
- package/dist/render/backend/webgpu/drawCommand.d.ts +2 -0
- package/dist/render/backend/webgpu/drawCommand.js +1 -0
- package/dist/render/backend/webgpu/flatPass.d.ts +1 -1
- package/dist/render/backend/webgpu/flatPass.js +2 -1
- package/dist/render/backend/webgpu/gpuClothSet.d.ts +80 -0
- package/dist/render/backend/webgpu/gpuClothSet.js +462 -0
- package/dist/render/backend/webgpu/latePass.js +1 -0
- package/dist/render/backend/webgpu/motionPass.js +15 -6
- package/dist/render/backend/webgpu/pipelineCache.d.ts +22 -1
- package/dist/render/backend/webgpu/pipelineCache.js +39 -1
- package/dist/render/backend/webgpu/postPass.d.ts +1 -1
- package/dist/render/backend/webgpu/renderer.d.ts +100 -1
- package/dist/render/backend/webgpu/renderer.js +423 -95
- package/dist/render/backend/webgpu/shaders/clothSolve.wgsl.d.ts +9 -2
- package/dist/render/backend/webgpu/shaders/clothSolve.wgsl.js +121 -47
- package/dist/render/backend/webgpu/staticBundles.js +2 -1
- package/dist/render/backend/webgpu/vertexFormats.d.ts +22 -0
- package/dist/render/backend/webgpu/vertexFormats.js +97 -0
- package/dist/render/globalMediumPass.d.ts +2 -0
- package/dist/render/globalMediumPass.js +1 -0
- package/dist/render/indexWidth.d.ts +17 -0
- package/dist/render/indexWidth.js +23 -0
- package/dist/render/instances.d.ts +13 -1
- package/dist/render/instances.js +10 -0
- package/dist/render/lightMatrix.d.ts +11 -0
- package/dist/render/lightMatrix.js +14 -0
- package/dist/render/mesh.d.ts +9 -0
- package/dist/render/mesh.js +38 -14
- package/dist/render/occlusionFade.d.ts +21 -0
- package/dist/render/occlusionFade.js +27 -0
- package/dist/render/renderQuality.d.ts +30 -0
- package/dist/render/renderQuality.js +5 -0
- package/dist/render/rendererHarness.d.ts +7 -0
- package/dist/render/rendererHarness.js +12 -0
- package/dist/render/sceneTarget.d.ts +2 -0
- package/dist/render/sceneTarget.js +1 -1
- package/dist/render/shader.d.ts +15 -0
- package/dist/render/shader.js +41 -0
- package/dist/render/shaders/ambientOcclusion.js +12 -1
- package/dist/render/shaders/flat/directionalShadow.js +84 -10
- package/dist/render/shaders/flat/glassTint.d.ts +1 -1
- package/dist/render/shaders/flat/glassTint.js +3 -0
- package/dist/render/shaders/flat/index.d.ts +15 -0
- package/dist/render/shaders/flat/index.js +24 -4
- package/dist/render/shaders/flat/layered.d.ts +27 -0
- package/dist/render/shaders/flat/layered.js +198 -0
- package/dist/render/shaders/flat/main.d.ts +1 -1
- package/dist/render/shaders/flat/main.js +50 -16
- package/dist/render/shaders/flat/mapReads.d.ts +10 -0
- package/dist/render/shaders/flat/mapReads.js +38 -0
- package/dist/render/shaders/flat/movingSun.d.ts +21 -0
- package/dist/render/shaders/flat/movingSun.js +46 -0
- package/dist/render/shaders/flat/normalMap.d.ts +6 -2
- package/dist/render/shaders/flat/normalMap.js +23 -3
- package/dist/render/shaders/flat/overlay.d.ts +3 -2
- package/dist/render/shaders/flat/overlay.js +41 -19
- package/dist/render/shaders/flat/preamble.js +23 -5
- package/dist/render/shaders/flat/worldUv.d.ts +22 -0
- package/dist/render/shaders/flat/worldUv.js +113 -0
- package/dist/render/shaders/generated/ambientOcclusion.wgsl.d.ts +6 -1
- package/dist/render/shaders/generated/ambientOcclusion.wgsl.js +6 -1
- package/dist/render/shaders/generated/flat.wgsl.d.ts +768 -368
- package/dist/render/shaders/generated/flat.wgsl.js +791 -391
- package/dist/render/shaders/generated/globalMedium.wgsl.d.ts +8 -3
- package/dist/render/shaders/generated/globalMedium.wgsl.js +8 -3
- package/dist/render/shaders/generated/lightVolume.wgsl.d.ts +15 -10
- package/dist/render/shaders/generated/lightVolume.wgsl.js +16 -11
- package/dist/render/shaders/globalMedium.js +9 -1
- package/dist/render/shaders/lightVolume.js +9 -1
- package/dist/render/shaders/tangentFrame.d.ts +1 -1
- package/dist/render/shaders/tangentFrame.js +16 -3
- package/dist/render/skinnedClothRun.d.ts +28 -0
- package/dist/render/skinnedClothRun.js +103 -35
- package/dist/render/surfaceLayers.d.ts +107 -0
- package/dist/render/surfaceLayers.js +82 -0
- package/dist/render/surfaceOverlay.d.ts +16 -3
- package/dist/render/surfaceOverlay.js +11 -6
- package/dist/render/surfaceProjection.d.ts +34 -0
- package/dist/render/surfaceProjection.js +30 -0
- package/dist/render/surfaceTexture.d.ts +39 -0
- package/dist/render/transmission.d.ts +21 -0
- package/dist/render/transmission.js +21 -0
- package/dist/render/vertexPacking.d.ts +48 -0
- package/dist/render/vertexPacking.js +68 -0
- package/dist/ui/splash.d.ts +42 -2
- package/dist/ui/splash.js +78 -13
- package/package.json +6 -6
- package/src/index.ts +6 -2
- package/src/render/ambientOcclusionPass.ts +4 -1
- package/src/render/backend/api.ts +31 -0
- package/src/render/backend/webgl2/renderer.ts +519 -56
- package/src/render/backend/webgpu/buffers.ts +153 -54
- package/src/render/backend/webgpu/clothKernels.ts +86 -0
- package/src/render/backend/webgpu/clothOps.ts +86 -0
- package/src/render/backend/webgpu/clothSetLayout.ts +102 -0
- package/src/render/backend/webgpu/clothSetPack.ts +197 -0
- package/src/render/backend/webgpu/drawCommand.ts +3 -0
- package/src/render/backend/webgpu/flatPass.ts +26 -28
- package/src/render/backend/webgpu/gpuClothSet.ts +564 -0
- package/src/render/backend/webgpu/latePass.ts +1 -0
- package/src/render/backend/webgpu/motionPass.ts +18 -7
- package/src/render/backend/webgpu/pipelineCache.ts +46 -7
- package/src/render/backend/webgpu/renderer.ts +622 -164
- package/src/render/backend/webgpu/shaders/clothSolve.wgsl.ts +121 -47
- package/src/render/backend/webgpu/staticBundles.ts +2 -1
- package/src/render/backend/webgpu/vertexFormats.ts +113 -0
- package/src/render/globalMediumPass.ts +7 -0
- package/src/render/indexWidth.ts +27 -0
- package/src/render/instances.ts +18 -1
- package/src/render/lightMatrix.ts +15 -0
- package/src/render/mesh.ts +66 -14
- package/src/render/occlusionFade.ts +29 -0
- package/src/render/renderQuality.ts +38 -0
- package/src/render/rendererHarness.ts +15 -0
- package/src/render/sceneTarget.ts +3 -0
- package/src/render/shader.ts +59 -0
- package/src/render/shaders/ambientOcclusion.ts +12 -1
- package/src/render/shaders/flat/directionalShadow.ts +84 -10
- package/src/render/shaders/flat/glassTint.ts +7 -1
- package/src/render/shaders/flat/index.ts +39 -4
- package/src/render/shaders/flat/layered.ts +198 -0
- package/src/render/shaders/flat/main.ts +50 -16
- package/src/render/shaders/flat/mapReads.ts +38 -0
- package/src/render/shaders/flat/movingSun.ts +46 -0
- package/src/render/shaders/flat/normalMap.ts +23 -3
- package/src/render/shaders/flat/overlay.ts +41 -19
- package/src/render/shaders/flat/preamble.ts +23 -5
- package/src/render/shaders/flat/worldUv.ts +113 -0
- package/src/render/shaders/generated/ambientOcclusion.wgsl.ts +6 -1
- package/src/render/shaders/generated/flat.wgsl.ts +791 -391
- package/src/render/shaders/generated/globalMedium.wgsl.ts +8 -3
- package/src/render/shaders/generated/lightVolume.wgsl.ts +16 -11
- package/src/render/shaders/globalMedium.ts +9 -1
- package/src/render/shaders/lightVolume.ts +9 -1
- package/src/render/shaders/tangentFrame.ts +16 -3
- package/src/render/skinnedClothRun.ts +138 -38
- package/src/render/surfaceLayers.ts +176 -0
- package/src/render/surfaceOverlay.ts +24 -7
- package/src/render/surfaceProjection.ts +57 -0
- package/src/render/surfaceTexture.ts +39 -0
- package/src/render/transmission.ts +27 -0
- package/src/render/vertexPacking.ts +109 -0
- package/src/ui/splash.ts +83 -14
- package/dist/render/backend/webgpu/gpuSkinnedCloth.d.ts +0 -74
- package/dist/render/backend/webgpu/gpuSkinnedCloth.js +0 -452
- package/src/render/backend/webgpu/gpuSkinnedCloth.ts +0 -502
|
@@ -86,6 +86,16 @@ export class PipelineCache {
|
|
|
86
86
|
* wait for readiness rather than discovering it mid-frame.
|
|
87
87
|
*/
|
|
88
88
|
private readonly compiling = new Map<string, Promise<GPURenderPipeline>>();
|
|
89
|
+
/** Keys whose compile off the main thread failed, which `lit` then builds where asked for. */
|
|
90
|
+
private readonly failed = new Set<string>();
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Whether a lit pipeline first asked for inside a frame is compiled off the main thread while
|
|
94
|
+
* its draw is left out — `RenderQuality.pipelineCompile` `'skip'` — rather than built where it is
|
|
95
|
+
* asked for, which holds the GPU process for the compile. The renderer turns it off while it
|
|
96
|
+
* records static draws, which must hold every draw they were given.
|
|
97
|
+
*/
|
|
98
|
+
skipsCompiling = false;
|
|
89
99
|
|
|
90
100
|
constructor(
|
|
91
101
|
device: GPUDevice,
|
|
@@ -139,18 +149,27 @@ export class PipelineCache {
|
|
|
139
149
|
typeof this.device.createRenderPipelineAsync === 'function'
|
|
140
150
|
? this.device.createRenderPipelineAsync(describe())
|
|
141
151
|
: Promise.resolve(this.device.createRenderPipeline(describe()));
|
|
142
|
-
const promise = build.then(
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
152
|
+
const promise = build.then(
|
|
153
|
+
(built) => {
|
|
154
|
+
/* A lit pipeline started before a switch is not kept: the switch rebuilds it. */
|
|
155
|
+
if (!lit || generation === this.litGeneration) this.pipelines.set(key, built);
|
|
156
|
+
this.compiling.delete(key);
|
|
157
|
+
return built;
|
|
158
|
+
},
|
|
159
|
+
/* Out of the list, or `ready` waits on it for ever; `lit` builds it where asked next. */
|
|
160
|
+
(error: unknown) => {
|
|
161
|
+
this.compiling.delete(key);
|
|
162
|
+
this.failed.add(key);
|
|
163
|
+
throw error;
|
|
164
|
+
},
|
|
165
|
+
);
|
|
148
166
|
this.compiling.set(key, promise);
|
|
149
167
|
return promise;
|
|
150
168
|
}
|
|
151
169
|
|
|
152
170
|
/**
|
|
153
|
-
* Resolve once every pipeline asked for so far has finished compiling
|
|
171
|
+
* Resolve once every pipeline asked for so far has finished compiling, a switch's rebuild
|
|
172
|
+
* among them.
|
|
154
173
|
*
|
|
155
174
|
* A renderer awaits this before its first frame, which is what moves the compile out of the
|
|
156
175
|
* queue and in front of it. A failure is not rethrown: a pipeline that cannot be built will
|
|
@@ -161,6 +180,8 @@ export class PipelineCache {
|
|
|
161
180
|
while (this.compiling.size > 0) {
|
|
162
181
|
await Promise.allSettled([...this.compiling.values()]);
|
|
163
182
|
}
|
|
183
|
+
/* And a switch's rebuild, whose set replaces the pipelines in one swap: see `enable`. */
|
|
184
|
+
await this.litRebuild;
|
|
164
185
|
}
|
|
165
186
|
|
|
166
187
|
/** The pipeline for this key if it is already built, without building one. */
|
|
@@ -194,6 +215,24 @@ export class PipelineCache {
|
|
|
194
215
|
return built;
|
|
195
216
|
}
|
|
196
217
|
|
|
218
|
+
/**
|
|
219
|
+
* A lit pipeline for a draw inside a frame: the one built, or one built here — or, where draws
|
|
220
|
+
* skip (`skipsCompiling`), none, with its compile started off the main thread for a later frame to
|
|
221
|
+
* find. A draw handed none is left out.
|
|
222
|
+
*
|
|
223
|
+
* **What skipping gives up** is the draw for the frames its compile takes, a few to a few dozen on
|
|
224
|
+
* a phone, against a frame held for the compile where it is asked for: 130 to 400 ms, reported on
|
|
225
|
+
* a phone for a material first drawn mid-scene. A compile that fails is built here the next time,
|
|
226
|
+
* so the device reports it rather than the draw vanishing for good.
|
|
227
|
+
*/
|
|
228
|
+
lit(key: string, describe: () => GPURenderPipelineDescriptor): GPURenderPipeline | null {
|
|
229
|
+
const existing = this.pipelines.get(key);
|
|
230
|
+
if (existing !== undefined) return existing;
|
|
231
|
+
if (!this.skipsCompiling || this.failed.has(key)) return this.get(key, describe, true);
|
|
232
|
+
if (!this.compiling.has(key)) void this.getAsync(key, describe, true).catch(() => {});
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
|
|
197
236
|
/**
|
|
198
237
|
* Turn one of the lit stage's switches on, for every lit pipeline built from now on and every one
|
|
199
238
|
* already built. See `litSwitches`.
|