@driftengine/core 4.8.7 → 4.9.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 +61 -0
- package/README.md +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +7 -0
- package/dist/render/atmosphere.d.ts +13 -0
- package/dist/render/atmosphere.js +9 -1
- package/dist/render/backend/api.d.ts +9 -1
- package/dist/render/backend/createRenderer.d.ts +6 -0
- package/dist/render/backend/createRenderer.js +4 -1
- package/dist/render/backend/webgl2/renderer.d.ts +90 -2
- package/dist/render/backend/webgl2/renderer.js +297 -16
- package/dist/render/backend/webgpu/device.d.ts +7 -1
- package/dist/render/backend/webgpu/device.js +31 -3
- package/dist/render/backend/webgpu/flatPass.d.ts +16 -1
- package/dist/render/backend/webgpu/flatPass.js +58 -26
- 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 +131 -2
- package/dist/render/backend/webgpu/renderer.js +586 -70
- 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/pass.d.ts +49 -0
- 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 +5 -0
- 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/caustics.d.ts +1 -1
- 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 +10 -0
- package/dist/render/shaders/flat/index.js +6 -0
- package/dist/render/shaders/flat/main.d.ts +1 -1
- package/dist/render/shaders/flat/main.js +28 -0
- 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 +1 -1
- 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/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 +176 -16
- package/dist/render/shaders/generated/flat.wgsl.js +214 -54
- 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/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/water.d.ts +1 -1
- package/dist/render/ssrPass.d.ts +16 -0
- package/dist/render/ssrPass.js +106 -1
- package/dist/render/surfaceOverlay.d.ts +132 -0
- package/dist/render/surfaceOverlay.js +85 -0
- package/dist/render/surfaceTexture.d.ts +19 -0
- package/dist/render/surfaceTexture.js +69 -0
- 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 +16 -0
- package/src/render/atmosphere.ts +22 -1
- package/src/render/backend/api.ts +9 -0
- package/src/render/backend/createRenderer.ts +18 -1
- package/src/render/backend/webgl2/renderer.ts +357 -13
- package/src/render/backend/webgpu/device.ts +42 -3
- package/src/render/backend/webgpu/flatPass.ts +63 -26
- 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 +735 -83
- 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/pass.ts +53 -1
- 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 +5 -0
- package/src/render/shaders/filmLook.ts +2 -1
- package/src/render/shaders/flat/glassTint.ts +5 -1
- package/src/render/shaders/flat/index.ts +16 -0
- package/src/render/shaders/flat/main.ts +28 -0
- package/src/render/shaders/flat/overlay.ts +117 -0
- package/src/render/shaders/flat/pointShadow.ts +1 -1
- 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/film.wgsl.ts +1 -1
- package/src/render/shaders/generated/fire.wgsl.ts +1 -1
- package/src/render/shaders/generated/flat.wgsl.ts +214 -54
- 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/rush.ts +54 -11
- package/src/render/shaders/ssrResolve.ts +52 -0
- package/src/render/shaders/ssrTrace.ts +26 -0
- package/src/render/ssrPass.ts +138 -1
- package/src/render/surfaceOverlay.ts +195 -0
- package/src/render/surfaceTexture.ts +67 -0
- package/src/render/temporalAa.ts +20 -0
- package/src/render/vertexDefaults.ts +28 -0
|
@@ -110,7 +110,16 @@ export const OUTPUT_TRANSFORM_CODE = {
|
|
|
110
110
|
srgb: 1,
|
|
111
111
|
aces: 2,
|
|
112
112
|
shoulder: 3,
|
|
113
|
+
filmic: 4,
|
|
113
114
|
};
|
|
115
|
+
/**
|
|
116
|
+
* The code a **forward** pass grades with: the transform's own, except `filmic`, which only the
|
|
117
|
+
* composite carries the constants for, and which a pass grading itself therefore draws as `aces`.
|
|
118
|
+
* Both backends' `gradeCode` read this, so neither can hand a forward stage a code it lacks.
|
|
119
|
+
*/
|
|
120
|
+
export function forwardTransformCode(transform) {
|
|
121
|
+
return transform === 'filmic' ? 2 : (OUTPUT_TRANSFORM_CODE[transform] ?? 0);
|
|
122
|
+
}
|
|
114
123
|
/**
|
|
115
124
|
* How far the speed rush reaches, and how far a motion-blurred pixel may travel, both in UV.
|
|
116
125
|
*
|
|
@@ -119,3 +128,18 @@ export const OUTPUT_TRANSFORM_CODE = {
|
|
|
119
128
|
*/
|
|
120
129
|
export const RUSH_REACH_UV = 0.012;
|
|
121
130
|
export const MOTION_BLUR_MAX_UV = 0.03;
|
|
131
|
+
/**
|
|
132
|
+
* A longest smear as `setCameraMotionBlur` takes it: a share of the frame, above zero and at most
|
|
133
|
+
* half, and the default where the number is not one. Shared, so both backends cap one way.
|
|
134
|
+
*/
|
|
135
|
+
export function clampMotionShare(share) {
|
|
136
|
+
return Number.isFinite(share) && share > 0 ? Math.min(share, 0.5) : MOTION_BLUR_MAX_UV;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Said once where a draw names where it was last frame and the frame blurs by motion, but keeps no
|
|
140
|
+
* motion target to blur that draw by: each object's own motion is drawn only under a
|
|
141
|
+
* reconstruction on WebGPU, and anywhere else the camera's motion alone smears the frame.
|
|
142
|
+
*/
|
|
143
|
+
export const OBJECT_BLUR_UNKEPT = "[driftengine] motion blur follows each draw's own motion only under a reconstruction " +
|
|
144
|
+
"(DriftTR, WebGPU), which draws the motion target it reads; here the camera's motion alone " +
|
|
145
|
+
'blurs the frame, and a moving object is smeared only as the camera moved past it.';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@driftengine/core",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.9.0",
|
|
4
4
|
"description": "The runtime of DriftEngine, a WebGPU game engine with a WebGL2 fallback: renderer, loop, input, cameras, scene graph and physics",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
],
|
|
30
30
|
"sideEffects": false,
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@driftengine/drft": "4.
|
|
33
|
-
"@driftengine/physics": "4.
|
|
32
|
+
"@driftengine/drft": "4.9.0",
|
|
33
|
+
"@driftengine/physics": "4.9.0",
|
|
34
34
|
"gl-matrix": "^3.4.3"
|
|
35
35
|
},
|
|
36
36
|
"author": "Drift Technologies",
|
|
@@ -67,8 +67,8 @@
|
|
|
67
67
|
"prepack": "node ../../scripts/build.mjs @driftengine/core"
|
|
68
68
|
},
|
|
69
69
|
"devDependencies": {
|
|
70
|
-
"@driftengine/nav": "4.
|
|
71
|
-
"@driftengine/network": "4.
|
|
72
|
-
"@driftengine/texture": "4.
|
|
70
|
+
"@driftengine/nav": "4.9.0",
|
|
71
|
+
"@driftengine/network": "4.9.0",
|
|
72
|
+
"@driftengine/texture": "4.9.0"
|
|
73
73
|
}
|
|
74
74
|
}
|
package/src/index.ts
CHANGED
|
@@ -454,6 +454,8 @@ export type { ReflectionOptions, ReflectiveSample } from './render/gi/reflection
|
|
|
454
454
|
*/
|
|
455
455
|
export { GRADE_PLACEHOLDER_SIZE, MAX_GRADE_SIZE, identityGradeLut } from './render/colourGrade.ts';
|
|
456
456
|
export type { ColourGradeLut } from './render/colourGrade.ts';
|
|
457
|
+
export { DEFAULT_FILMIC_CURVE } from './render/filmicCurve.ts';
|
|
458
|
+
export type { FilmicCurve } from './render/filmicCurve.ts';
|
|
457
459
|
/**
|
|
458
460
|
* How bloom answers past its threshold — a ramp in place of the subtraction, and a tint for each
|
|
459
461
|
* of the pyramid's `BLOOM_LEVELS` octaves — the third argument of `setBloom`.
|
|
@@ -513,6 +515,20 @@ export type {
|
|
|
513
515
|
SurfaceModel,
|
|
514
516
|
SurfaceModelKind,
|
|
515
517
|
} from './render/surfaceModel.ts';
|
|
518
|
+
/*
|
|
519
|
+
* What a draw lays over its surface beyond its material — a rim of light, a dissolve, wrinkle
|
|
520
|
+
* normals by region — set per draw with `setSurfaceOverlay`, its images regions of one atlas.
|
|
521
|
+
*/
|
|
522
|
+
/* Every opaque lit surface reflecting the frame by its own material: `screenSpaceReflections`. */
|
|
523
|
+
export { DEFAULT_FRAME_REFLECTIONS } from './render/frameReflections.ts';
|
|
524
|
+
export type { FrameReflections } from './render/frameReflections.ts';
|
|
525
|
+
export type {
|
|
526
|
+
OverlayRegion,
|
|
527
|
+
SurfaceDissolve,
|
|
528
|
+
SurfaceOverlay,
|
|
529
|
+
SurfaceRim,
|
|
530
|
+
SurfaceWrinkle,
|
|
531
|
+
} from './render/surfaceOverlay.ts';
|
|
516
532
|
/*
|
|
517
533
|
* A baked lightmap: the page a consumer decoded, which `createLightmap` uploads as a lightmapped
|
|
518
534
|
* material's `modelMap`, and the region of it a material or an instance reads.
|
package/src/render/atmosphere.ts
CHANGED
|
@@ -47,6 +47,19 @@ export interface Atmosphere {
|
|
|
47
47
|
/** Linear mode only: where haze begins, and where it is total. */
|
|
48
48
|
fogNear?: number;
|
|
49
49
|
fogFar?: number;
|
|
50
|
+
/**
|
|
51
|
+
* The medium only: how far along the view ray it begins, in metres. Absent or 0 is at the
|
|
52
|
+
* camera, as every world before it was drawn.
|
|
53
|
+
*
|
|
54
|
+
* The air nearer than this is perfectly clear, and what lies beyond is fogged by the air past
|
|
55
|
+
* this point alone — so a faint, bright haze can lie over a distant crowd while the figures a
|
|
56
|
+
* few metres from the camera stay sharp, which no density can do when the medium starts at the
|
|
57
|
+
* eye: there it veils the whole frame, lifting the shadows and draining the colour before it
|
|
58
|
+
* reaches anything far enough to want it. Unlike `linear`'s `fogNear`, nothing past it is a
|
|
59
|
+
* ramp: it is the same extinction, integrated from further out. **What it gives up** is the air
|
|
60
|
+
* between the camera and the start, which a real medium has; that is the point of it.
|
|
61
|
+
*/
|
|
62
|
+
fogStart?: number;
|
|
50
63
|
underwater: UnderwaterAtmosphere | null;
|
|
51
64
|
}
|
|
52
65
|
|
|
@@ -132,7 +145,15 @@ export function resolveAtmosphere(
|
|
|
132
145
|
out.fogHeightFalloff = atmosphere.fogHeightFalloff;
|
|
133
146
|
out.fogEyeY = cameraY;
|
|
134
147
|
out.fogMode = atmosphere.fogMode === 'linear' ? 1 : 0;
|
|
135
|
-
|
|
148
|
+
/*
|
|
149
|
+
* **One slot, two meanings, and never both**: the ramp's near distance in linear mode, and in
|
|
150
|
+
* the medium where it begins (`fogStart`), which the medium never read before — so a world that
|
|
151
|
+
* left a `fogNear` on an exponential fog starts nothing, and draws exactly as it did.
|
|
152
|
+
*/
|
|
153
|
+
out.fogNear =
|
|
154
|
+
atmosphere.fogMode === 'linear'
|
|
155
|
+
? (atmosphere.fogNear ?? 0)
|
|
156
|
+
: Math.max(0, Number.isFinite(atmosphere.fogStart) ? (atmosphere.fogStart ?? 0) : 0);
|
|
136
157
|
out.fogFar = atmosphere.fogFar ?? 1;
|
|
137
158
|
/*
|
|
138
159
|
* The air medium stands in when nothing is submerged. The shaders multiply by the factor
|
|
@@ -7,6 +7,7 @@ import type { ProbeBakeOptions } from '../reflectionProbe.ts';
|
|
|
7
7
|
import type { Renderer, TranslucentMeshOptions } from './webgl2/renderer.ts';
|
|
8
8
|
import type { InstancedOptions, MeshInstances } from '../instances.ts';
|
|
9
9
|
import type { SurfaceMaterial } from '../surfaceTexture.ts';
|
|
10
|
+
import type { SurfaceOverlay } from '../surfaceOverlay.ts';
|
|
10
11
|
import type { SurfaceSource } from '../compressedSource.ts';
|
|
11
12
|
import type { LightmapPage } from '../lightmap.ts';
|
|
12
13
|
import type { DeviceParticles } from '../particlePool.ts';
|
|
@@ -311,6 +312,7 @@ export type RendererApi = Omit<
|
|
|
311
312
|
| 'disposeSurfaceTexture'
|
|
312
313
|
| 'setSurfaceTexture'
|
|
313
314
|
| 'setMaterial'
|
|
315
|
+
| 'setSurfaceOverlay'
|
|
314
316
|
| 'createClothBinding'
|
|
315
317
|
| 'createClothParticles'
|
|
316
318
|
| 'updateClothParticles'
|
|
@@ -341,6 +343,13 @@ export type RendererApi = Omit<
|
|
|
341
343
|
setCloth(binding: ClothBindingHandle | null, particles?: ClothParticlesHandle | null): void;
|
|
342
344
|
disposeClothBinding(binding: ClothBindingHandle): void;
|
|
343
345
|
disposeClothParticles(particles: ClothParticlesHandle): void;
|
|
346
|
+
/**
|
|
347
|
+
* What the following draws lay over their surfaces beyond their materials — a rim of light, a
|
|
348
|
+
* dissolve with a glowing edge, wrinkle normals by region — or null for none, which every pass
|
|
349
|
+
* starts with. Per draw, so one character's whole set of materials changes together. Its images
|
|
350
|
+
* are regions of one atlas (`SurfaceOverlay.maps`). See `surfaceOverlay.ts`.
|
|
351
|
+
*/
|
|
352
|
+
setSurfaceOverlay(overlay: SurfaceOverlay | null): void;
|
|
344
353
|
/**
|
|
345
354
|
* Upload a caller's image, or a BC image's blocks with their stored chain where
|
|
346
355
|
* `compressedFormats` has the format. See `SurfaceTextureHandle` for the boundary this guards.
|
|
@@ -5,6 +5,7 @@ import { BACKEND_TIMEOUT_MS, forcedBackend, selectBackend } from './select.ts';
|
|
|
5
5
|
import { TIMED_OUT, withDeadline } from './deadline.ts';
|
|
6
6
|
import { mountSplash, type MountedSplash, type SplashOptions } from '../../ui/splash.ts';
|
|
7
7
|
import { gpuDrivenRefusal, gpuDrivenSupported } from '../gpudriven/pipeline.ts';
|
|
8
|
+
import { browserHighDynamicRange, chooseDisplayRange } from '../displayRange.ts';
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* Which of the two pipelines is drawing.
|
|
@@ -149,6 +150,12 @@ export interface CreateRendererOptions {
|
|
|
149
150
|
* badge is looked at on a deployed build.
|
|
150
151
|
*/
|
|
151
152
|
readonly splash?: boolean | SplashOptions;
|
|
153
|
+
/**
|
|
154
|
+
* Whether the display shows a high dynamic range, asked only where `highDynamicRange` was. The
|
|
155
|
+
* browser's `(dynamic-range: high)` query by default; a host with no DOM, or one that knows
|
|
156
|
+
* better about its own display, answers instead. See `displayRange.ts`.
|
|
157
|
+
*/
|
|
158
|
+
readonly highDynamicRangeDisplay?: () => boolean;
|
|
152
159
|
}
|
|
153
160
|
|
|
154
161
|
/** What was built, and which path built it. */
|
|
@@ -370,7 +377,17 @@ export async function createRenderer(
|
|
|
370
377
|
const { createGpuSurface } = await import('./webgpu/device.ts');
|
|
371
378
|
const { WebGPURenderer } = await import('./webgpu/renderer.ts');
|
|
372
379
|
stage = 'creating the surface';
|
|
373
|
-
const
|
|
380
|
+
const profile = resolveRenderQuality(qualityFor('webgpu'));
|
|
381
|
+
const surface = createGpuSurface(
|
|
382
|
+
canvas,
|
|
383
|
+
device,
|
|
384
|
+
chooseDisplayRange(
|
|
385
|
+
profile.highDynamicRange,
|
|
386
|
+
profile.screenEffects && profile.hdrScene,
|
|
387
|
+
profile.highDynamicRange &&
|
|
388
|
+
(options.highDynamicRangeDisplay ?? browserHighDynamicRange)(),
|
|
389
|
+
),
|
|
390
|
+
);
|
|
374
391
|
stage = 'constructing the renderer';
|
|
375
392
|
return { surface, WebGPURenderer };
|
|
376
393
|
})();
|