@codexo/exojs 0.14.0 → 0.15.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 +132 -0
- package/README.md +2 -4
- package/dist/esm/animation/Tween.d.ts.map +1 -1
- package/dist/esm/animation/Tween.js +0 -1
- package/dist/esm/animation/Tween.js.map +1 -1
- package/dist/esm/animation/TweenManager.d.ts +44 -5
- package/dist/esm/animation/TweenManager.d.ts.map +1 -1
- package/dist/esm/animation/TweenManager.js +57 -5
- package/dist/esm/animation/TweenManager.js.map +1 -1
- package/dist/esm/animation/TweenSequencer.d.ts +139 -0
- package/dist/esm/animation/TweenSequencer.d.ts.map +1 -0
- package/dist/esm/animation/TweenSequencer.js +305 -0
- package/dist/esm/animation/TweenSequencer.js.map +1 -0
- package/dist/esm/animation/index.d.ts +1 -0
- package/dist/esm/animation/index.d.ts.map +1 -1
- package/dist/esm/audio/WorkletEffect.d.ts +34 -20
- package/dist/esm/audio/WorkletEffect.d.ts.map +1 -1
- package/dist/esm/audio/WorkletEffect.js +92 -25
- package/dist/esm/audio/WorkletEffect.js.map +1 -1
- package/dist/esm/core/Application.d.ts +43 -5
- package/dist/esm/core/Application.d.ts.map +1 -1
- package/dist/esm/core/Application.js +83 -9
- package/dist/esm/core/Application.js.map +1 -1
- package/dist/esm/core/BuildInfo.js +2 -2
- package/dist/esm/core/Codec.d.ts +41 -0
- package/dist/esm/core/Codec.d.ts.map +1 -0
- package/dist/esm/core/Codec.js +79 -0
- package/dist/esm/core/Codec.js.map +1 -0
- package/dist/esm/core/FixedTimestep.d.ts +28 -0
- package/dist/esm/core/FixedTimestep.d.ts.map +1 -0
- package/dist/esm/core/FixedTimestep.js +62 -0
- package/dist/esm/core/FixedTimestep.js.map +1 -0
- package/dist/esm/core/Scene.d.ts +14 -0
- package/dist/esm/core/Scene.d.ts.map +1 -1
- package/dist/esm/core/Scene.js +18 -0
- package/dist/esm/core/Scene.js.map +1 -1
- package/dist/esm/core/SceneManager.d.ts +7 -0
- package/dist/esm/core/SceneManager.d.ts.map +1 -1
- package/dist/esm/core/SceneManager.js +20 -4
- package/dist/esm/core/SceneManager.js.map +1 -1
- package/dist/esm/core/SceneNode.d.ts +36 -6
- package/dist/esm/core/SceneNode.d.ts.map +1 -1
- package/dist/esm/core/SceneNode.js +63 -11
- package/dist/esm/core/SceneNode.js.map +1 -1
- package/dist/esm/core/Stage.d.ts +7 -0
- package/dist/esm/core/Stage.d.ts.map +1 -1
- package/dist/esm/core/SystemRegistry.d.ts +5 -0
- package/dist/esm/core/SystemRegistry.d.ts.map +1 -1
- package/dist/esm/core/SystemRegistry.js +10 -0
- package/dist/esm/core/SystemRegistry.js.map +1 -1
- package/dist/esm/core/index.d.ts +4 -0
- package/dist/esm/core/index.d.ts.map +1 -1
- package/dist/esm/core/logging.d.ts +34 -0
- package/dist/esm/core/logging.d.ts.map +1 -0
- package/dist/esm/core/logging.js +59 -0
- package/dist/esm/core/logging.js.map +1 -0
- package/dist/esm/core/serialization/commonFields.d.ts.map +1 -1
- package/dist/esm/core/serialization/commonFields.js +6 -0
- package/dist/esm/core/serialization/commonFields.js.map +1 -1
- package/dist/esm/core/serialization/renderingSerializers.d.ts.map +1 -1
- package/dist/esm/core/serialization/renderingSerializers.js +14 -5
- package/dist/esm/core/serialization/renderingSerializers.js.map +1 -1
- package/dist/esm/index.js +7 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/input/Gamepad.d.ts +10 -0
- package/dist/esm/input/Gamepad.d.ts.map +1 -1
- package/dist/esm/input/Gamepad.js +12 -0
- package/dist/esm/input/Gamepad.js.map +1 -1
- package/dist/esm/input/InputManager.d.ts.map +1 -1
- package/dist/esm/input/InputManager.js +5 -0
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/InteractionManager.js +4 -4
- package/dist/esm/input/InteractionManager.js.map +1 -1
- package/dist/esm/math/collision-detection.js +1 -1
- package/dist/esm/rendering/BackendTargetPass.d.ts +1 -1
- package/dist/esm/rendering/BackendTargetPass.d.ts.map +1 -1
- package/dist/esm/rendering/CallbackRenderPass.d.ts +14 -10
- package/dist/esm/rendering/CallbackRenderPass.d.ts.map +1 -1
- package/dist/esm/rendering/CallbackRenderPass.js +16 -11
- package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
- package/dist/esm/rendering/DrawContext.d.ts +48 -0
- package/dist/esm/rendering/DrawContext.d.ts.map +1 -0
- package/dist/esm/rendering/PassContext.d.ts +42 -0
- package/dist/esm/rendering/PassContext.d.ts.map +1 -0
- package/dist/esm/rendering/PassContext.js +48 -0
- package/dist/esm/rendering/PassContext.js.map +1 -0
- package/dist/esm/rendering/RenderBackend.d.ts +14 -0
- package/dist/esm/rendering/RenderBackend.d.ts.map +1 -1
- package/dist/esm/rendering/RenderNode.d.ts.map +1 -1
- package/dist/esm/rendering/RenderNode.js +2 -2
- package/dist/esm/rendering/RenderNode.js.map +1 -1
- package/dist/esm/rendering/RenderNodePass.d.ts +1 -1
- package/dist/esm/rendering/RenderNodePass.d.ts.map +1 -1
- package/dist/esm/rendering/RenderingContext.d.ts +47 -16
- package/dist/esm/rendering/RenderingContext.d.ts.map +1 -1
- package/dist/esm/rendering/RenderingContext.js +134 -36
- package/dist/esm/rendering/RenderingContext.js.map +1 -1
- package/dist/esm/rendering/TransformBuffer.d.ts +23 -0
- package/dist/esm/rendering/TransformBuffer.d.ts.map +1 -1
- package/dist/esm/rendering/TransformBuffer.js +58 -0
- package/dist/esm/rendering/TransformBuffer.js.map +1 -1
- package/dist/esm/rendering/View.d.ts +38 -0
- package/dist/esm/rendering/View.d.ts.map +1 -1
- package/dist/esm/rendering/View.js +37 -0
- package/dist/esm/rendering/View.js.map +1 -1
- package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts.map +1 -1
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js +9 -2
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
- package/dist/esm/rendering/material/MeshMaterial.d.ts +20 -1
- package/dist/esm/rendering/material/MeshMaterial.d.ts.map +1 -1
- package/dist/esm/rendering/material/MeshMaterial.js +17 -0
- package/dist/esm/rendering/material/MeshMaterial.js.map +1 -1
- package/dist/esm/rendering/material/SpriteMaterial.d.ts +20 -1
- package/dist/esm/rendering/material/SpriteMaterial.d.ts.map +1 -1
- package/dist/esm/rendering/material/SpriteMaterial.js +17 -0
- package/dist/esm/rendering/material/SpriteMaterial.js.map +1 -1
- package/dist/esm/rendering/plan/RenderEffectExecutor.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderEffectExecutor.js +7 -2
- package/dist/esm/rendering/plan/RenderEffectExecutor.js.map +1 -1
- package/dist/esm/rendering/plan/RenderInstruction.d.ts +5 -2
- package/dist/esm/rendering/plan/RenderInstruction.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanBuilder.js +23 -5
- package/dist/esm/rendering/plan/RenderPlanBuilder.js.map +1 -1
- package/dist/esm/rendering/plan/RenderScope.d.ts +7 -0
- package/dist/esm/rendering/plan/RenderScope.d.ts.map +1 -1
- package/dist/esm/rendering/primitives/Graphics.d.ts +10 -1
- package/dist/esm/rendering/primitives/Graphics.d.ts.map +1 -1
- package/dist/esm/rendering/primitives/Graphics.js +30 -9
- package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
- package/dist/esm/rendering/public.d.ts +5 -5
- package/dist/esm/rendering/public.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +56 -19
- package/dist/esm/rendering/sprite/AnimatedSprite.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/AnimatedSprite.js +121 -31
- package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -1
- package/dist/esm/rendering/text/BitmapText.d.ts.map +1 -1
- package/dist/esm/rendering/text/BitmapText.js +2 -0
- package/dist/esm/rendering/text/BitmapText.js.map +1 -1
- package/dist/esm/rendering/text/HTMLText.d.ts.map +1 -1
- package/dist/esm/rendering/text/HTMLText.js +2 -2
- package/dist/esm/rendering/text/HTMLText.js.map +1 -1
- package/dist/esm/rendering/text/Text.d.ts.map +1 -1
- package/dist/esm/rendering/text/Text.js +2 -0
- package/dist/esm/rendering/text/Text.js.map +1 -1
- package/dist/esm/rendering/types.d.ts +37 -13
- package/dist/esm/rendering/types.d.ts.map +1 -1
- package/dist/esm/rendering/types.js +37 -13
- package/dist/esm/rendering/types.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.d.ts +41 -0
- package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.d.ts.map +1 -0
- package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.js +222 -0
- package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.js.map +1 -0
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +34 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +108 -60
- package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +50 -11
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/glsl/backdrop-blend.frag.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/backdrop-blend.frag.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/backdrop-blend.vert.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/backdrop-blend.vert.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/text.vert.js +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.d.ts +72 -0
- package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.d.ts.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.js +494 -0
- package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.js.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +27 -0
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +157 -60
- package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBlendState.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBlendState.js +5 -29
- package/dist/esm/rendering/webgpu/WebGpuBlendState.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js +2 -1
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +4 -0
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +3 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js +2 -1
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts +8 -0
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js +20 -0
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts +6 -0
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js +4 -1
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +2 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js +2 -1
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +3 -2
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +3 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +29 -5
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -1
- package/dist/esm/resources/Loader.d.ts +13 -0
- package/dist/esm/resources/Loader.d.ts.map +1 -1
- package/dist/esm/resources/Loader.js +67 -7
- package/dist/esm/resources/Loader.js.map +1 -1
- package/dist/esm/ui/ScrollContainer.d.ts +63 -0
- package/dist/esm/ui/ScrollContainer.d.ts.map +1 -0
- package/dist/esm/ui/ScrollContainer.js +99 -0
- package/dist/esm/ui/ScrollContainer.js.map +1 -0
- package/dist/esm/ui/Tooltip.d.ts +67 -0
- package/dist/esm/ui/Tooltip.d.ts.map +1 -0
- package/dist/esm/ui/Tooltip.js +133 -0
- package/dist/esm/ui/Tooltip.js.map +1 -0
- package/dist/esm/ui/index.d.ts +4 -0
- package/dist/esm/ui/index.d.ts.map +1 -1
- package/dist/exo.esm.js +1 -1
- package/dist/exo.esm.js.map +1 -1
- package/dist/exo.iife.js +45202 -0
- package/dist/exo.iife.js.map +1 -0
- package/dist/exo.iife.min.js +2 -0
- package/dist/exo.iife.min.js.map +1 -0
- package/package.json +15 -3
- package/dist/esm/rendering/Camera.d.ts +0 -34
- package/dist/esm/rendering/Camera.d.ts.map +0 -1
- package/dist/esm/rendering/Camera.js +0 -38
- package/dist/esm/rendering/Camera.js.map +0 -1
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
import { Matrix } from '../../math/Matrix.js';
|
|
2
|
+
import { BlendModes } from '../types.js';
|
|
3
|
+
import { getWebGpuBlendState } from './WebGpuBlendState.js';
|
|
4
|
+
import { stencilContentDepthStencilState } from './WebGpuStencilState.js';
|
|
5
|
+
|
|
6
|
+
/// <reference types="@webgpu/types" />
|
|
7
|
+
/** WGSL source for the backdrop-blend compositor pipeline. @internal */
|
|
8
|
+
const compositorShaderSource = `
|
|
9
|
+
struct ProjectionUniforms {
|
|
10
|
+
matrix: mat4x4<f32>,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
struct BlendUniforms {
|
|
14
|
+
mode: u32,
|
|
15
|
+
opaqueBackdrop: f32,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
@group(0) @binding(0)
|
|
19
|
+
var<uniform> projection: ProjectionUniforms;
|
|
20
|
+
|
|
21
|
+
@group(1) @binding(0)
|
|
22
|
+
var sourceTexture: texture_2d<f32>;
|
|
23
|
+
@group(1) @binding(1)
|
|
24
|
+
var sourceSampler: sampler;
|
|
25
|
+
@group(1) @binding(2)
|
|
26
|
+
var backdropTexture: texture_2d<f32>;
|
|
27
|
+
@group(1) @binding(3)
|
|
28
|
+
var backdropSampler: sampler;
|
|
29
|
+
|
|
30
|
+
@group(2) @binding(0)
|
|
31
|
+
var<uniform> blend: BlendUniforms;
|
|
32
|
+
|
|
33
|
+
struct VertexInput {
|
|
34
|
+
@location(0) position: vec2<f32>,
|
|
35
|
+
@location(1) texcoord: vec2<f32>,
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
struct VertexOutput {
|
|
39
|
+
@builtin(position) position: vec4<f32>,
|
|
40
|
+
@location(0) texcoord: vec2<f32>,
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
@vertex
|
|
44
|
+
fn vertexMain(input: VertexInput) -> VertexOutput {
|
|
45
|
+
var output: VertexOutput;
|
|
46
|
+
|
|
47
|
+
output.position = projection.matrix * vec4<f32>(input.position, 0.0, 1.0);
|
|
48
|
+
output.texcoord = input.texcoord;
|
|
49
|
+
|
|
50
|
+
return output;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
fn unpremultiply(color: vec4<f32>) -> vec3<f32> {
|
|
54
|
+
if (color.a > 0.0) {
|
|
55
|
+
return color.rgb / color.a;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return vec3<f32>(0.0);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// W3C separable blend B(Cb, Cs) for one channel (straight color in [0, 1]).
|
|
62
|
+
// Mode values match the BlendModes enum (src/rendering/types.ts).
|
|
63
|
+
fn blendChannel(mode: u32, cb: f32, cs: f32) -> f32 {
|
|
64
|
+
switch mode {
|
|
65
|
+
case 3u { return cb * cs; } // Multiply
|
|
66
|
+
case 4u { return cb + cs - cb * cs; } // Screen
|
|
67
|
+
case 5u { return min(cb, cs); } // Darken
|
|
68
|
+
case 6u { return max(cb, cs); } // Lighten
|
|
69
|
+
case 7u { return select(1.0 - 2.0 * (1.0 - cb) * (1.0 - cs), 2.0 * cb * cs, cb <= 0.5); } // Overlay
|
|
70
|
+
case 8u { // ColorDodge
|
|
71
|
+
if (cb <= 0.0) { return 0.0; }
|
|
72
|
+
return select(min(1.0, cb / (1.0 - cs)), 1.0, cs >= 1.0);
|
|
73
|
+
}
|
|
74
|
+
case 9u { // ColorBurn
|
|
75
|
+
if (cb >= 1.0) { return 1.0; }
|
|
76
|
+
return select(1.0 - min(1.0, (1.0 - cb) / cs), 0.0, cs <= 0.0);
|
|
77
|
+
}
|
|
78
|
+
case 10u { return select(1.0 - 2.0 * (1.0 - cb) * (1.0 - cs), 2.0 * cb * cs, cs <= 0.5); } // HardLight
|
|
79
|
+
case 11u { // SoftLight
|
|
80
|
+
if (cs <= 0.5) { return cb - (1.0 - 2.0 * cs) * cb * (1.0 - cb); }
|
|
81
|
+
let d = select(sqrt(cb), ((16.0 * cb - 12.0) * cb + 4.0) * cb, cb <= 0.25);
|
|
82
|
+
return cb + (2.0 * cs - 1.0) * (d - cb);
|
|
83
|
+
}
|
|
84
|
+
case 12u { return abs(cb - cs); } // Difference
|
|
85
|
+
case 13u { return cb + cs - 2.0 * cb * cs; } // Exclusion
|
|
86
|
+
default { return min(cb, cs); } // Darken
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
fn blendSeparable(mode: u32, cb: vec3<f32>, cs: vec3<f32>) -> vec3<f32> {
|
|
91
|
+
return vec3<f32>(blendChannel(mode, cb.x, cs.x), blendChannel(mode, cb.y, cs.y), blendChannel(mode, cb.z, cs.z));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Non-separable helpers (W3C): operate on the whole color.
|
|
95
|
+
fn lum(c: vec3<f32>) -> f32 {
|
|
96
|
+
return dot(c, vec3<f32>(0.3, 0.59, 0.11));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
fn clipColor(input: vec3<f32>) -> vec3<f32> {
|
|
100
|
+
var c = input;
|
|
101
|
+
let l = lum(c);
|
|
102
|
+
let n = min(min(c.x, c.y), c.z);
|
|
103
|
+
let x = max(max(c.x, c.y), c.z);
|
|
104
|
+
|
|
105
|
+
if (n < 0.0) { c = l + ((c - l) * l) / (l - n); }
|
|
106
|
+
if (x > 1.0) { c = l + ((c - l) * (1.0 - l)) / (x - l); }
|
|
107
|
+
|
|
108
|
+
return c;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
fn setLum(c: vec3<f32>, l: f32) -> vec3<f32> {
|
|
112
|
+
return clipColor(c + (l - lum(c)));
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
fn sat(c: vec3<f32>) -> f32 {
|
|
116
|
+
return max(max(c.x, c.y), c.z) - min(min(c.x, c.y), c.z);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Map the channels so min -> 0, max -> s, mid -> proportional (W3C SetSat result).
|
|
120
|
+
fn setSat(c: vec3<f32>, s: f32) -> vec3<f32> {
|
|
121
|
+
let mn = min(min(c.x, c.y), c.z);
|
|
122
|
+
let mx = max(max(c.x, c.y), c.z);
|
|
123
|
+
|
|
124
|
+
return select(vec3<f32>(0.0), (c - mn) * (s / (mx - mn)), mx > mn);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
fn blendNonSeparable(mode: u32, cb: vec3<f32>, cs: vec3<f32>) -> vec3<f32> {
|
|
128
|
+
switch mode {
|
|
129
|
+
case 14u { return setLum(setSat(cs, sat(cb)), lum(cb)); } // Hue
|
|
130
|
+
case 15u { return setLum(setSat(cb, sat(cs)), lum(cb)); } // Saturation
|
|
131
|
+
case 16u { return setLum(cs, lum(cb)); } // Color
|
|
132
|
+
default { return setLum(cb, lum(cs)); } // Luminosity
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
fn blendAdvanced(mode: u32, cb: vec3<f32>, cs: vec3<f32>) -> vec3<f32> {
|
|
137
|
+
if (mode >= 14u) { return blendNonSeparable(mode, cb, cs); }
|
|
138
|
+
return blendSeparable(mode, cb, cs);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
@fragment
|
|
142
|
+
fn fragmentMain(input: VertexOutput) -> @location(0) vec4<f32> {
|
|
143
|
+
let src = textureSample(sourceTexture, sourceSampler, input.texcoord);
|
|
144
|
+
// copyTextureToTexture preserves the target's top-left orientation, so the
|
|
145
|
+
// backdrop is sampled at the same UV as the quad — no V-flip (unlike the
|
|
146
|
+
// WebGL2 framebuffer-blit path, which reads bottom-left order).
|
|
147
|
+
let dst = textureSample(backdropTexture, backdropSampler, input.texcoord);
|
|
148
|
+
|
|
149
|
+
let alphaSource = src.a;
|
|
150
|
+
// An opaque target (the on-screen root canvas, alphaMode 'opaque') has an
|
|
151
|
+
// unreliable captured alpha; force full backdrop coverage so the blend is
|
|
152
|
+
// not skipped. Offscreen RenderTextures carry real alpha.
|
|
153
|
+
let alphaBackdrop = max(dst.a, blend.opaqueBackdrop);
|
|
154
|
+
let colorSource = unpremultiply(src);
|
|
155
|
+
let colorBackdrop = unpremultiply(dst);
|
|
156
|
+
|
|
157
|
+
let blended = blendAdvanced(blend.mode, colorBackdrop, colorSource);
|
|
158
|
+
// Cs' = (1 - αb)·Cs + αb·B(Cb, Cs)
|
|
159
|
+
let mixedSource = mix(colorSource, blended, alphaBackdrop);
|
|
160
|
+
|
|
161
|
+
// Premultiplied blended source; the GPU source-over composites it over the
|
|
162
|
+
// untouched backdrop already in the target (αs = 0 passes the backdrop through).
|
|
163
|
+
return vec4<f32>(mixedSource * alphaSource, alphaSource);
|
|
164
|
+
}
|
|
165
|
+
`;
|
|
166
|
+
// 4 floats per vertex: position(x, y) + texcoord(u, v).
|
|
167
|
+
const vertexStrideBytes = 16;
|
|
168
|
+
// 16 floats per mat4x4 projection uniform.
|
|
169
|
+
const projectionUniformBytes = 64;
|
|
170
|
+
// mode (u32) + opaqueBackdrop (f32), padded to the 16-byte uniform alignment.
|
|
171
|
+
const blendUniformBytes = 16;
|
|
172
|
+
/**
|
|
173
|
+
* Single-quad backdrop-aware blend compositor used by
|
|
174
|
+
* `WebGpuBackend.composeWithBackdropBlend` (spike: invoked directly). Captures
|
|
175
|
+
* the active target's `[x, y, width, height]` region into a compositor-owned
|
|
176
|
+
* texture via `copyTextureToTexture`, samples the premultiplied source (group 1,
|
|
177
|
+
* slot 0) and captured backdrop (slot 2), computes the W3C blend for the
|
|
178
|
+
* requested {@link BlendModes}, and draws the result over the target with normal
|
|
179
|
+
* (premultiplied source-over) blending — so the GPU composites the blended
|
|
180
|
+
* source over the backdrop already in the target.
|
|
181
|
+
*
|
|
182
|
+
* Mirrors {@link WebGpuMaskCompositor}'s structure. The backdrop texture is
|
|
183
|
+
* compositor-owned (not a pooled {@link RenderTexture}) because
|
|
184
|
+
* `copyTextureToTexture` requires the destination format to equal the source:
|
|
185
|
+
* the root canvas uses the preferred format (often `bgra8unorm`) while pooled
|
|
186
|
+
* render textures are `rgba8unorm`, so a pool RT cannot receive a root-target
|
|
187
|
+
* capture. The owned texture is allocated in the target's own format.
|
|
188
|
+
*
|
|
189
|
+
* Pipelines are cached per (target format, stencil). The compositor is not an
|
|
190
|
+
* {@link AbstractWebGpuRenderer} and never participates in renderer registry
|
|
191
|
+
* dispatch — the backend invokes it directly.
|
|
192
|
+
*/
|
|
193
|
+
class WebGpuBackdropBlendCompositor {
|
|
194
|
+
_projectionData = new Float32Array(16);
|
|
195
|
+
_vertexData = new Float32Array(16); // 4 verts * 4 floats
|
|
196
|
+
_indexData = new Uint16Array([0, 1, 2, 0, 2, 3]);
|
|
197
|
+
_blendData = new ArrayBuffer(blendUniformBytes);
|
|
198
|
+
_blendModeView = new Uint32Array(this._blendData, 0, 1);
|
|
199
|
+
_blendOpaqueView = new Float32Array(this._blendData, 4, 1);
|
|
200
|
+
_projectionMatrix = new Matrix();
|
|
201
|
+
_pipelines = new Map();
|
|
202
|
+
_device = null;
|
|
203
|
+
_shaderModule = null;
|
|
204
|
+
_projectionBindGroupLayout = null;
|
|
205
|
+
_textureBindGroupLayout = null;
|
|
206
|
+
_blendBindGroupLayout = null;
|
|
207
|
+
_pipelineLayout = null;
|
|
208
|
+
_vertexBuffer = null;
|
|
209
|
+
_indexBuffer = null;
|
|
210
|
+
_projectionBuffer = null;
|
|
211
|
+
_blendBuffer = null;
|
|
212
|
+
_projectionBindGroup = null;
|
|
213
|
+
_blendBindGroup = null;
|
|
214
|
+
_backdropSampler = null;
|
|
215
|
+
// Compositor-owned capture target, re-allocated when the region size or the
|
|
216
|
+
// target format changes (see class doc for why a pooled RT cannot be used).
|
|
217
|
+
_backdropTexture = null;
|
|
218
|
+
_backdropView = null;
|
|
219
|
+
_backdropWidth = 0;
|
|
220
|
+
_backdropHeight = 0;
|
|
221
|
+
_backdropFormat = null;
|
|
222
|
+
connect(device) {
|
|
223
|
+
if (this._device !== null) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
this._device = device;
|
|
227
|
+
this._shaderModule = device.createShaderModule({ code: compositorShaderSource });
|
|
228
|
+
this._projectionBindGroupLayout = device.createBindGroupLayout({
|
|
229
|
+
entries: [{ binding: 0, visibility: GPUShaderStage.VERTEX, buffer: { type: 'uniform' } }],
|
|
230
|
+
});
|
|
231
|
+
this._textureBindGroupLayout = device.createBindGroupLayout({
|
|
232
|
+
entries: [
|
|
233
|
+
{ binding: 0, visibility: GPUShaderStage.FRAGMENT, texture: {} },
|
|
234
|
+
{ binding: 1, visibility: GPUShaderStage.FRAGMENT, sampler: {} },
|
|
235
|
+
{ binding: 2, visibility: GPUShaderStage.FRAGMENT, texture: {} },
|
|
236
|
+
{ binding: 3, visibility: GPUShaderStage.FRAGMENT, sampler: {} },
|
|
237
|
+
],
|
|
238
|
+
});
|
|
239
|
+
this._blendBindGroupLayout = device.createBindGroupLayout({
|
|
240
|
+
entries: [{ binding: 0, visibility: GPUShaderStage.FRAGMENT, buffer: { type: 'uniform' } }],
|
|
241
|
+
});
|
|
242
|
+
this._pipelineLayout = device.createPipelineLayout({
|
|
243
|
+
bindGroupLayouts: [this._projectionBindGroupLayout, this._textureBindGroupLayout, this._blendBindGroupLayout],
|
|
244
|
+
});
|
|
245
|
+
this._vertexBuffer = device.createBuffer({
|
|
246
|
+
size: 4 * vertexStrideBytes,
|
|
247
|
+
usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
|
|
248
|
+
});
|
|
249
|
+
this._indexBuffer = device.createBuffer({
|
|
250
|
+
size: 6 * Uint16Array.BYTES_PER_ELEMENT,
|
|
251
|
+
usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,
|
|
252
|
+
});
|
|
253
|
+
device.queue.writeBuffer(this._indexBuffer, 0, this._indexData);
|
|
254
|
+
this._projectionBuffer = device.createBuffer({
|
|
255
|
+
size: projectionUniformBytes,
|
|
256
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
257
|
+
});
|
|
258
|
+
this._blendBuffer = device.createBuffer({
|
|
259
|
+
size: blendUniformBytes,
|
|
260
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
261
|
+
});
|
|
262
|
+
this._backdropSampler = device.createSampler({
|
|
263
|
+
magFilter: 'nearest',
|
|
264
|
+
minFilter: 'nearest',
|
|
265
|
+
addressModeU: 'clamp-to-edge',
|
|
266
|
+
addressModeV: 'clamp-to-edge',
|
|
267
|
+
});
|
|
268
|
+
this._projectionBindGroup = device.createBindGroup({
|
|
269
|
+
layout: this._projectionBindGroupLayout,
|
|
270
|
+
entries: [{ binding: 0, resource: { buffer: this._projectionBuffer } }],
|
|
271
|
+
});
|
|
272
|
+
this._blendBindGroup = device.createBindGroup({
|
|
273
|
+
layout: this._blendBindGroupLayout,
|
|
274
|
+
entries: [{ binding: 0, resource: { buffer: this._blendBuffer } }],
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
disconnect() {
|
|
278
|
+
if (this._device === null) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
this._vertexBuffer?.destroy();
|
|
282
|
+
this._indexBuffer?.destroy();
|
|
283
|
+
this._projectionBuffer?.destroy();
|
|
284
|
+
this._blendBuffer?.destroy();
|
|
285
|
+
this._backdropTexture?.destroy();
|
|
286
|
+
this._vertexBuffer = null;
|
|
287
|
+
this._indexBuffer = null;
|
|
288
|
+
this._projectionBuffer = null;
|
|
289
|
+
this._blendBuffer = null;
|
|
290
|
+
this._backdropTexture = null;
|
|
291
|
+
this._backdropView = null;
|
|
292
|
+
this._backdropWidth = 0;
|
|
293
|
+
this._backdropHeight = 0;
|
|
294
|
+
this._backdropFormat = null;
|
|
295
|
+
this._backdropSampler = null;
|
|
296
|
+
this._projectionBindGroup = null;
|
|
297
|
+
this._blendBindGroup = null;
|
|
298
|
+
this._pipelineLayout = null;
|
|
299
|
+
this._blendBindGroupLayout = null;
|
|
300
|
+
this._textureBindGroupLayout = null;
|
|
301
|
+
this._projectionBindGroupLayout = null;
|
|
302
|
+
this._shaderModule = null;
|
|
303
|
+
this._pipelines.clear();
|
|
304
|
+
this._device = null;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Composite `source` over the active target's current contents under an
|
|
308
|
+
* advanced (backdrop-aware) blend mode. Materializes any pending clear/draws,
|
|
309
|
+
* captures the target's `[x, y, width, height]` region (view units) into the
|
|
310
|
+
* compositor-owned backdrop texture, runs the blend in a shader, and draws the
|
|
311
|
+
* blended source over the untouched backdrop with normal premultiplied
|
|
312
|
+
* source-over.
|
|
313
|
+
*/
|
|
314
|
+
compose(manager, source, x, y, width, height, blendMode) {
|
|
315
|
+
if (this._device === null) {
|
|
316
|
+
throw new Error('WebGpuBackdropBlendCompositor: not connected.');
|
|
317
|
+
}
|
|
318
|
+
if (width <= 0 || height <= 0) {
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
const device = this._device;
|
|
322
|
+
const target = manager.renderTarget;
|
|
323
|
+
// Clears/draws are deferred on WebGPU; flush so the target texture holds the
|
|
324
|
+
// real backdrop before the standalone copy below reads it.
|
|
325
|
+
manager.flush();
|
|
326
|
+
const format = manager.renderTargetFormat;
|
|
327
|
+
const attachment = manager._getAttachmentPixelSize(target);
|
|
328
|
+
const scaleX = target.root && target.width > 0 ? attachment.width / target.width : 1;
|
|
329
|
+
const scaleY = target.root && target.height > 0 ? attachment.height / target.height : 1;
|
|
330
|
+
const ox = Math.max(0, Math.floor(x * scaleX));
|
|
331
|
+
const oy = Math.max(0, Math.floor(y * scaleY));
|
|
332
|
+
const cw = Math.max(0, Math.min(Math.round(width * scaleX), attachment.width - ox));
|
|
333
|
+
const ch = Math.max(0, Math.min(Math.round(height * scaleY), attachment.height - oy));
|
|
334
|
+
if (cw <= 0 || ch <= 0) {
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
const backdropView = this._ensureBackdrop(device, cw, ch, format);
|
|
338
|
+
// Capture the target region into the backdrop on a standalone encoder; a copy
|
|
339
|
+
// cannot run inside a render pass (the coordinator's passes self-submit).
|
|
340
|
+
const encoder = device.createCommandEncoder();
|
|
341
|
+
encoder.copyTextureToTexture({ texture: manager._renderTargetTexture(target), origin: { x: ox, y: oy, z: 0 } }, { texture: this._backdropTexture, origin: { x: 0, y: 0, z: 0 } }, { width: cw, height: ch, depthOrArrayLayers: 1 });
|
|
342
|
+
device.queue.submit([encoder.finish()]);
|
|
343
|
+
this._drawBlend(manager, source, backdropView, x, y, width, height, blendMode, target.root);
|
|
344
|
+
}
|
|
345
|
+
_ensureBackdrop(device, width, height, format) {
|
|
346
|
+
if (this._backdropTexture === null || this._backdropWidth !== width || this._backdropHeight !== height || this._backdropFormat !== format) {
|
|
347
|
+
this._backdropTexture?.destroy();
|
|
348
|
+
this._backdropTexture = device.createTexture({
|
|
349
|
+
size: { width, height },
|
|
350
|
+
format,
|
|
351
|
+
usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING,
|
|
352
|
+
});
|
|
353
|
+
this._backdropView = this._backdropTexture.createView();
|
|
354
|
+
this._backdropWidth = width;
|
|
355
|
+
this._backdropHeight = height;
|
|
356
|
+
this._backdropFormat = format;
|
|
357
|
+
}
|
|
358
|
+
return this._backdropView;
|
|
359
|
+
}
|
|
360
|
+
_drawBlend(manager, source, backdropView, x, y, width, height, blendMode, opaqueBackdrop) {
|
|
361
|
+
const device = this._device;
|
|
362
|
+
this._writeQuadVertices(x, y, x + width, y + height);
|
|
363
|
+
device.queue.writeBuffer(this._vertexBuffer, 0, this._vertexData);
|
|
364
|
+
this._writeProjectionMatrix(manager.view.getTransform());
|
|
365
|
+
device.queue.writeBuffer(this._projectionBuffer, 0, this._projectionData);
|
|
366
|
+
this._blendModeView[0] = blendMode;
|
|
367
|
+
this._blendOpaqueView[0] = opaqueBackdrop ? 1 : 0;
|
|
368
|
+
device.queue.writeBuffer(this._blendBuffer, 0, this._blendData);
|
|
369
|
+
const sourceBinding = manager.getTextureBinding(source);
|
|
370
|
+
const textureBindGroup = device.createBindGroup({
|
|
371
|
+
layout: this._textureBindGroupLayout,
|
|
372
|
+
entries: [
|
|
373
|
+
{ binding: 0, resource: sourceBinding.view },
|
|
374
|
+
{ binding: 1, resource: sourceBinding.sampler },
|
|
375
|
+
{ binding: 2, resource: backdropView },
|
|
376
|
+
{ binding: 3, resource: this._backdropSampler },
|
|
377
|
+
],
|
|
378
|
+
});
|
|
379
|
+
const targetFormat = manager.renderTargetFormat;
|
|
380
|
+
// A geometric stencil clip can wrap the block (the executor pushes the clip
|
|
381
|
+
// outermost), so the compositor may draw into a stencil-enabled pass. Select
|
|
382
|
+
// the matching pipeline variant — a stencil-free pipeline is incompatible
|
|
383
|
+
// with the pass's depth/stencil attachment.
|
|
384
|
+
const stencil = manager._passCoordinator.stencilActive;
|
|
385
|
+
const pipeline = this._getOrCreatePipeline(targetFormat, stencil);
|
|
386
|
+
// The blend math is in the shader; composite the blended source over the
|
|
387
|
+
// backdrop already in the target with normal premultiplied source-over.
|
|
388
|
+
const pass = manager._passCoordinator.acquirePass().pass;
|
|
389
|
+
pass.setPipeline(pipeline);
|
|
390
|
+
pass.setBindGroup(0, this._projectionBindGroup);
|
|
391
|
+
pass.setBindGroup(1, textureBindGroup);
|
|
392
|
+
pass.setBindGroup(2, this._blendBindGroup);
|
|
393
|
+
pass.setVertexBuffer(0, this._vertexBuffer);
|
|
394
|
+
pass.setIndexBuffer(this._indexBuffer, 'uint16');
|
|
395
|
+
pass.drawIndexed(6);
|
|
396
|
+
manager.stats.batches++;
|
|
397
|
+
manager.stats.drawCalls++;
|
|
398
|
+
manager._passCoordinator.endPass();
|
|
399
|
+
}
|
|
400
|
+
_getOrCreatePipeline(format, stencil) {
|
|
401
|
+
const key = `${format}|${stencil ? 's' : 'n'}`;
|
|
402
|
+
const cached = this._pipelines.get(key);
|
|
403
|
+
if (cached !== undefined) {
|
|
404
|
+
return cached;
|
|
405
|
+
}
|
|
406
|
+
const device = this._device;
|
|
407
|
+
const descriptor = {
|
|
408
|
+
layout: this._pipelineLayout,
|
|
409
|
+
vertex: {
|
|
410
|
+
module: this._shaderModule,
|
|
411
|
+
entryPoint: 'vertexMain',
|
|
412
|
+
buffers: [
|
|
413
|
+
{
|
|
414
|
+
arrayStride: vertexStrideBytes,
|
|
415
|
+
attributes: [
|
|
416
|
+
{ shaderLocation: 0, offset: 0, format: 'float32x2' },
|
|
417
|
+
{ shaderLocation: 1, offset: 8, format: 'float32x2' },
|
|
418
|
+
],
|
|
419
|
+
},
|
|
420
|
+
],
|
|
421
|
+
},
|
|
422
|
+
fragment: {
|
|
423
|
+
module: this._shaderModule,
|
|
424
|
+
entryPoint: 'fragmentMain',
|
|
425
|
+
targets: [
|
|
426
|
+
{
|
|
427
|
+
format,
|
|
428
|
+
// The shader produced the final premultiplied blended source; the
|
|
429
|
+
// GPU just source-over composites it over the backdrop.
|
|
430
|
+
blend: getWebGpuBlendState(BlendModes.Normal),
|
|
431
|
+
},
|
|
432
|
+
],
|
|
433
|
+
},
|
|
434
|
+
primitive: { topology: 'triangle-list' },
|
|
435
|
+
};
|
|
436
|
+
if (stencil) {
|
|
437
|
+
descriptor.depthStencil = stencilContentDepthStencilState();
|
|
438
|
+
}
|
|
439
|
+
const pipeline = device.createRenderPipeline(descriptor);
|
|
440
|
+
this._pipelines.set(key, pipeline);
|
|
441
|
+
return pipeline;
|
|
442
|
+
}
|
|
443
|
+
_writeQuadVertices(left, top, right, bottom) {
|
|
444
|
+
const view = this._vertexData;
|
|
445
|
+
// Vertex 0: top-left (UV 0, 0)
|
|
446
|
+
view[0] = left;
|
|
447
|
+
view[1] = top;
|
|
448
|
+
view[2] = 0;
|
|
449
|
+
view[3] = 0;
|
|
450
|
+
// Vertex 1: top-right (UV 1, 0)
|
|
451
|
+
view[4] = right;
|
|
452
|
+
view[5] = top;
|
|
453
|
+
view[6] = 1;
|
|
454
|
+
view[7] = 0;
|
|
455
|
+
// Vertex 2: bottom-right (UV 1, 1)
|
|
456
|
+
view[8] = right;
|
|
457
|
+
view[9] = bottom;
|
|
458
|
+
view[10] = 1;
|
|
459
|
+
view[11] = 1;
|
|
460
|
+
// Vertex 3: bottom-left (UV 0, 1)
|
|
461
|
+
view[12] = left;
|
|
462
|
+
view[13] = bottom;
|
|
463
|
+
view[14] = 0;
|
|
464
|
+
view[15] = 1;
|
|
465
|
+
}
|
|
466
|
+
_writeProjectionMatrix(viewMatrix) {
|
|
467
|
+
// Pack the 3x3 affine view matrix into a 4x4 column-major mat4x4 for WGSL.
|
|
468
|
+
const m = this._projectionMatrix.copy(viewMatrix);
|
|
469
|
+
const data = this._projectionData;
|
|
470
|
+
// col 0
|
|
471
|
+
data[0] = m.a;
|
|
472
|
+
data[1] = m.c;
|
|
473
|
+
data[2] = 0;
|
|
474
|
+
data[3] = 0;
|
|
475
|
+
// col 1
|
|
476
|
+
data[4] = m.b;
|
|
477
|
+
data[5] = m.d;
|
|
478
|
+
data[6] = 0;
|
|
479
|
+
data[7] = 0;
|
|
480
|
+
// col 2
|
|
481
|
+
data[8] = 0;
|
|
482
|
+
data[9] = 0;
|
|
483
|
+
data[10] = 1;
|
|
484
|
+
data[11] = 0;
|
|
485
|
+
// col 3
|
|
486
|
+
data[12] = m.x;
|
|
487
|
+
data[13] = m.y;
|
|
488
|
+
data[14] = 0;
|
|
489
|
+
data[15] = 1;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
export { WebGpuBackdropBlendCompositor, compositorShaderSource };
|
|
494
|
+
//# sourceMappingURL=WebGpuBackdropBlendCompositor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebGpuBackdropBlendCompositor.js","sources":["../../../../../src/rendering/webgpu/WebGpuBackdropBlendCompositor.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,8 @@ interface PixelClipBoundsState {
|
|
|
26
26
|
width: number;
|
|
27
27
|
height: number;
|
|
28
28
|
}
|
|
29
|
+
/** WGSL source for the box-filter mipmap-generation pipeline. @internal */
|
|
30
|
+
export declare const mipmapWgsl = "\nstruct VertexOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) texcoord: vec2<f32>,\n};\n\n@group(0) @binding(0)\nvar sourceTexture: texture_2d<f32>;\n@group(0) @binding(1)\nvar sourceSampler: sampler;\n\n@vertex\nfn vertexMain(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput {\n var positions = array<vec2<f32>, 3>(\n vec2<f32>(-1.0, -1.0),\n vec2<f32>(3.0, -1.0),\n vec2<f32>(-1.0, 3.0)\n );\n // Y is flipped vs the position array: NDC Y points up, but texture UV\n // Y points down (UV (0,0) is the top-left of the source). Matching the\n // two ensures that the output texture's top-left pixel samples from the\n // source's top-left, so every mip level has the same orientation as the\n // level above it. Prior to this, odd mip levels were rendered upside\n // down, producing visible texture flips at view-size doublings.\n var texcoords = array<vec2<f32>, 3>(\n vec2<f32>(0.0, 1.0),\n vec2<f32>(2.0, 1.0),\n vec2<f32>(0.0, -1.0)\n );\n var output: VertexOutput;\n\n output.position = vec4<f32>(positions[vertexIndex], 0.0, 1.0);\n output.texcoord = texcoords[vertexIndex];\n\n return output;\n}\n\n@fragment\nfn fragmentMain(input: VertexOutput) -> @location(0) vec4<f32> {\n return textureSample(sourceTexture, sourceSampler, input.texcoord);\n}\n";
|
|
29
31
|
/**
|
|
30
32
|
* WebGPU implementation of {@link RenderBackend}. Manages the GPU device,
|
|
31
33
|
* canvas context configuration, format selection, managed-texture cache
|
|
@@ -70,6 +72,8 @@ export declare class WebGpuBackend implements RenderBackend {
|
|
|
70
72
|
private readonly _clipPointB;
|
|
71
73
|
private readonly _maskCompositor;
|
|
72
74
|
private _maskCompositorConnected;
|
|
75
|
+
private readonly _backdropBlendCompositor;
|
|
76
|
+
private _backdropBlendCompositorConnected;
|
|
73
77
|
private _mipmapShaderModule;
|
|
74
78
|
private _mipmapBindGroupLayout;
|
|
75
79
|
private _mipmapPipelineLayout;
|
|
@@ -91,6 +95,8 @@ export declare class WebGpuBackend implements RenderBackend {
|
|
|
91
95
|
private _activeDrawCommand;
|
|
92
96
|
private _passCoordinatorInstance;
|
|
93
97
|
private _drawPlanDepth;
|
|
98
|
+
private readonly _planBaseStack;
|
|
99
|
+
private readonly _planHashStack;
|
|
94
100
|
constructor(app: Application);
|
|
95
101
|
get view(): View;
|
|
96
102
|
get renderTarget(): RenderTarget;
|
|
@@ -122,6 +128,8 @@ export declare class WebGpuBackend implements RenderBackend {
|
|
|
122
128
|
setClearColor(color: Color): this;
|
|
123
129
|
initialize(): Promise<this>;
|
|
124
130
|
resetStats(): this;
|
|
131
|
+
/** Frame-global slot base the plan builder indexes from. @internal */
|
|
132
|
+
get transformBufferCount(): number;
|
|
125
133
|
/** @internal */
|
|
126
134
|
_beginDrawPlan(nodeCount: number): void;
|
|
127
135
|
/** @internal */
|
|
@@ -137,6 +145,16 @@ export declare class WebGpuBackend implements RenderBackend {
|
|
|
137
145
|
setRenderTarget(target: RenderTarget | null): this;
|
|
138
146
|
pushScissorRect(bounds: Rectangle): this;
|
|
139
147
|
composeWithAlphaMask(content: Texture | RenderTexture, mask: Texture | RenderTexture, x: number, y: number, width: number, height: number, blendMode: BlendModes): this;
|
|
148
|
+
composeWithBackdropBlend(source: RenderTexture, x: number, y: number, width: number, height: number, mode: BlendModes): this;
|
|
149
|
+
/**
|
|
150
|
+
* Return the GPU texture backing `target`. For the root canvas target this is
|
|
151
|
+
* `context.getCurrentTexture()` (requires `COPY_SRC` usage configured on the
|
|
152
|
+
* canvas context). For a {@link RenderTexture} target it is the managed GPU
|
|
153
|
+
* texture. Used internally by {@link WebGpuBackdropBlendCompositor} for
|
|
154
|
+
* `copyTextureToTexture` backdrop capture.
|
|
155
|
+
* @internal
|
|
156
|
+
*/
|
|
157
|
+
_renderTargetTexture(target: RenderTarget): GPUTexture;
|
|
140
158
|
popScissorRect(): this;
|
|
141
159
|
pushStencilClip(shape: Geometry, transform: Matrix): this;
|
|
142
160
|
popStencilClip(): this;
|
|
@@ -173,6 +191,15 @@ export declare class WebGpuBackend implements RenderBackend {
|
|
|
173
191
|
readonly view: GPUTextureView;
|
|
174
192
|
readonly sampler: GPUSampler;
|
|
175
193
|
};
|
|
194
|
+
/**
|
|
195
|
+
* The `GPUTextureFormat` a given `Texture`/`RenderTexture` is (or will be)
|
|
196
|
+
* backed by. Unlike {@link renderTargetFormat} (which reflects whatever
|
|
197
|
+
* target is *currently bound*), this is keyed off the texture itself, so
|
|
198
|
+
* callers that build a pipeline for a specific offscreen target — before
|
|
199
|
+
* that target is bound as the active render target — can match its format
|
|
200
|
+
* exactly instead of reading unrelated, possibly-stale backend state.
|
|
201
|
+
*/
|
|
202
|
+
getTextureFormat(texture: Texture | RenderTexture): GPUTextureFormat;
|
|
176
203
|
shouldPremultiplyTextureSample(texture: Texture | RenderTexture): boolean;
|
|
177
204
|
/** @internal */
|
|
178
205
|
getTransformStorageBuffer(minCount: number): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebGpuBackend.d.ts","sourceRoot":"","sources":["../../../../src/rendering/webgpu/WebGpuBackend.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAkD,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,KAAK,WAAW,EAAmD,MAAM,+BAA+B,CAAC;AAClH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"WebGpuBackend.d.ts","sourceRoot":"","sources":["../../../../src/rendering/webgpu/WebGpuBackend.ts"],"names":[],"mappings":"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"}
|