@agent-native/toolkit 0.201.1 → 0.202.0-nightly-20261006033736
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/agent-native.eject.json +39 -12
- package/dist/app/agentkit/react/components.d.ts.map +1 -1
- package/dist/app/agentkit/react/components.js +292 -23
- package/dist/app/agentkit/react/components.js.map +1 -1
- package/dist/app/agentkit/react/context.d.ts +5 -0
- package/dist/app/agentkit/react/context.d.ts.map +1 -1
- package/dist/app/agentkit/react/context.js +5 -0
- package/dist/app/agentkit/react/context.js.map +1 -1
- package/dist/app/agentkit/react/styles.css +78 -3
- package/dist/app/auth/AuthPage.d.ts.map +1 -1
- package/dist/app/auth/AuthPage.js +7 -14
- package/dist/app/auth/AuthPage.js.map +1 -1
- package/dist/app/auth/server.d.ts +6 -0
- package/dist/app/auth/server.d.ts.map +1 -0
- package/dist/app/auth/server.js +19 -0
- package/dist/app/auth/server.js.map +1 -0
- package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
- package/dist/app/chat/AgentKitAssistantChat.js +164 -83
- package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
- package/dist/app/chat/AgentSidebar.d.ts +2 -1
- package/dist/app/chat/AgentSidebar.d.ts.map +1 -1
- package/dist/app/chat/AgentSidebar.js +2 -2
- package/dist/app/chat/AgentSidebar.js.map +1 -1
- package/dist/app/chat/agentkit-chat/guided-questions.d.ts.map +1 -1
- package/dist/app/chat/agentkit-chat/guided-questions.js +13 -3
- package/dist/app/chat/agentkit-chat/guided-questions.js.map +1 -1
- package/dist/app/chat/chat/surface-types.d.ts +2 -0
- package/dist/app/chat/chat/surface-types.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ar-SA.js +41 -0
- package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.js +41 -0
- package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
- package/dist/app/i18n/catalogs/en-US.d.ts +41 -0
- package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/en-US.js +41 -0
- package/dist/app/i18n/catalogs/en-US.js.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.js +41 -0
- package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.js +41 -0
- package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.js +41 -0
- package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.js +41 -0
- package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.js +41 -0
- package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.js +41 -0
- package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.js +41 -0
- package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.js +41 -0
- package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
- package/dist/app/shared/StarfieldBackground.d.ts +1 -6
- package/dist/app/shared/StarfieldBackground.d.ts.map +1 -1
- package/dist/app/shared/StarfieldBackground.js +1 -368
- package/dist/app/shared/StarfieldBackground.js.map +1 -1
- package/dist/app/shared/WaveBackground.d.ts +5 -0
- package/dist/app/shared/WaveBackground.d.ts.map +1 -0
- package/dist/app/shared/WaveBackground.js +34 -0
- package/dist/app/shared/WaveBackground.js.map +1 -0
- package/dist/app/shared/WebGlWaveBackground.d.ts +9 -0
- package/dist/app/shared/WebGlWaveBackground.d.ts.map +1 -0
- package/dist/app/shared/WebGlWaveBackground.js +433 -0
- package/dist/app/shared/WebGlWaveBackground.js.map +1 -0
- package/dist/app/shared/index.d.ts +1 -0
- package/dist/app/shared/index.d.ts.map +1 -1
- package/dist/app/shared/index.js +1 -0
- package/dist/app/shared/index.js.map +1 -1
- package/dist/app/shared/ocean/bloom-blur.wgsl +43 -0
- package/dist/app/shared/ocean/bloom-blur.wgsl.js +1 -0
- package/dist/app/shared/ocean/bloom-bright.wgsl +21 -0
- package/dist/app/shared/ocean/bloom-bright.wgsl.js +1 -0
- package/dist/app/shared/ocean/bloom-composite.wgsl +40 -0
- package/dist/app/shared/ocean/bloom-composite.wgsl.js +1 -0
- package/dist/app/shared/ocean/brand-colors.d.ts +9 -0
- package/dist/app/shared/ocean/brand-colors.d.ts.map +1 -0
- package/dist/app/shared/ocean/brand-colors.js +45 -0
- package/dist/app/shared/ocean/brand-colors.js.map +1 -0
- package/dist/app/shared/ocean/camera.d.ts +5 -0
- package/dist/app/shared/ocean/camera.d.ts.map +1 -0
- package/dist/app/shared/ocean/camera.js +24 -0
- package/dist/app/shared/ocean/camera.js.map +1 -0
- package/dist/app/shared/ocean/hero-ocean-background.d.ts +8 -0
- package/dist/app/shared/ocean/hero-ocean-background.d.ts.map +1 -0
- package/dist/app/shared/ocean/hero-ocean-background.js +186 -0
- package/dist/app/shared/ocean/hero-ocean-background.js.map +1 -0
- package/dist/app/shared/ocean/ifft-stage.wgsl +36 -0
- package/dist/app/shared/ocean/ifft-stage.wgsl.js +1 -0
- package/dist/app/shared/ocean/initial-spectrum.wgsl +36 -0
- package/dist/app/shared/ocean/initial-spectrum.wgsl.js +1 -0
- package/dist/app/shared/ocean/noise.wgsl +24 -0
- package/dist/app/shared/ocean/noise.wgsl.js +1 -0
- package/dist/app/shared/ocean/normal-foam.wgsl +32 -0
- package/dist/app/shared/ocean/normal-foam.wgsl.js +1 -0
- package/dist/app/shared/ocean/ocean-colors.d.ts +6 -0
- package/dist/app/shared/ocean/ocean-colors.d.ts.map +1 -0
- package/dist/app/shared/ocean/ocean-colors.js +6 -0
- package/dist/app/shared/ocean/ocean-colors.js.map +1 -0
- package/dist/app/shared/ocean/ocean-common.wgsl +15 -0
- package/dist/app/shared/ocean/ocean-common.wgsl.js +1 -0
- package/dist/app/shared/ocean/ocean-graph.d.ts +12 -0
- package/dist/app/shared/ocean/ocean-graph.d.ts.map +1 -0
- package/dist/app/shared/ocean/ocean-graph.js +16 -0
- package/dist/app/shared/ocean/ocean-graph.js.map +1 -0
- package/dist/app/shared/ocean/particles.wgsl +139 -0
- package/dist/app/shared/ocean/particles.wgsl.js +1 -0
- package/dist/app/shared/ocean/present.wgsl +40 -0
- package/dist/app/shared/ocean/present.wgsl.js +1 -0
- package/dist/app/shared/ocean/renderer.d.ts +66 -0
- package/dist/app/shared/ocean/renderer.d.ts.map +1 -0
- package/dist/app/shared/ocean/renderer.js +535 -0
- package/dist/app/shared/ocean/renderer.js.map +1 -0
- package/dist/app/shared/ocean/spectrum.wgsl +35 -0
- package/dist/app/shared/ocean/spectrum.wgsl.js +1 -0
- package/dist/app/shared/ocean/tuning.d.ts +48 -0
- package/dist/app/shared/ocean/tuning.d.ts.map +1 -0
- package/dist/app/shared/ocean/tuning.js +74 -0
- package/dist/app/shared/ocean/tuning.js.map +1 -0
- package/dist/app/shared/ocean/webgpu-support.d.ts +3 -0
- package/dist/app/shared/ocean/webgpu-support.d.ts.map +1 -0
- package/dist/app/shared/ocean/webgpu-support.js +13 -0
- package/dist/app/shared/ocean/webgpu-support.js.map +1 -0
- package/dist/app/sharing/AccessRequestApprovalPage.d.ts +23 -0
- package/dist/app/sharing/AccessRequestApprovalPage.d.ts.map +1 -0
- package/dist/app/sharing/AccessRequestApprovalPage.js +95 -0
- package/dist/app/sharing/AccessRequestApprovalPage.js.map +1 -0
- package/dist/app/sharing/AccessRequestsSection.d.ts +5 -0
- package/dist/app/sharing/AccessRequestsSection.d.ts.map +1 -0
- package/dist/app/sharing/AccessRequestsSection.js +47 -0
- package/dist/app/sharing/AccessRequestsSection.js.map +1 -0
- package/dist/app/sharing/ResourceAccessScreen.d.ts +53 -0
- package/dist/app/sharing/ResourceAccessScreen.d.ts.map +1 -0
- package/dist/app/sharing/ResourceAccessScreen.js +132 -0
- package/dist/app/sharing/ResourceAccessScreen.js.map +1 -0
- package/dist/app/sharing/ShareButton.d.ts.map +1 -1
- package/dist/app/sharing/ShareButton.js +4 -2
- package/dist/app/sharing/ShareButton.js.map +1 -1
- package/dist/app/sharing/ShareDialog.d.ts.map +1 -1
- package/dist/app/sharing/ShareDialog.js +7 -5
- package/dist/app/sharing/ShareDialog.js.map +1 -1
- package/dist/app/sharing/index.d.ts +2 -0
- package/dist/app/sharing/index.d.ts.map +1 -1
- package/dist/app/sharing/index.js +2 -0
- package/dist/app/sharing/index.js.map +1 -1
- package/dist/app/styles/agent-native.css +21 -1
- package/dist/app/styles/tokens/agent-kit.css +3 -1
- package/dist/composer/AgentSuggestionBar.d.ts +1 -1
- package/dist/composer/AgentSuggestionBar.d.ts.map +1 -1
- package/dist/composer/AgentSuggestionBar.js +75 -6
- package/dist/composer/AgentSuggestionBar.js.map +1 -1
- package/package.json +14 -4
- package/src/app/agentkit/react/components.tsx +492 -60
- package/src/app/agentkit/react/context.tsx +10 -0
- package/src/app/agentkit/react/lifecycle.spec.tsx +487 -1
- package/src/app/agentkit/react/styles.css +78 -3
- package/src/app/auth/AuthPage.spec.tsx +11 -7
- package/src/app/auth/AuthPage.tsx +16 -35
- package/src/app/auth/server.spec.ts +68 -0
- package/src/app/auth/server.ts +29 -0
- package/src/app/chat/AgentKitAssistantChat.spec.tsx +287 -290
- package/src/app/chat/AgentKitAssistantChat.tsx +219 -116
- package/src/app/chat/AgentSidebar.tsx +3 -0
- package/src/app/chat/agentkit-chat/guided-questions.flow.spec.tsx +85 -0
- package/src/app/chat/agentkit-chat/guided-questions.tsx +12 -5
- package/src/app/chat/chat/surface-types.ts +2 -0
- package/src/app/i18n/catalogs/ar-SA.ts +44 -0
- package/src/app/i18n/catalogs/de-DE.ts +55 -0
- package/src/app/i18n/catalogs/en-US.ts +46 -0
- package/src/app/i18n/catalogs/es-ES.ts +53 -0
- package/src/app/i18n/catalogs/fr-FR.ts +53 -0
- package/src/app/i18n/catalogs/hi-IN.ts +47 -0
- package/src/app/i18n/catalogs/ja-JP.ts +54 -0
- package/src/app/i18n/catalogs/ko-KR.ts +50 -0
- package/src/app/i18n/catalogs/pt-BR.ts +52 -0
- package/src/app/i18n/catalogs/zh-CN.ts +42 -0
- package/src/app/i18n/catalogs/zh-TW.ts +43 -0
- package/src/app/shared/StarfieldBackground.tsx +4 -423
- package/src/app/shared/WaveBackground.spec.tsx +104 -0
- package/src/app/shared/WaveBackground.tsx +60 -0
- package/src/app/shared/WebGlWaveBackground.spec.tsx +106 -0
- package/src/app/shared/WebGlWaveBackground.tsx +499 -0
- package/src/app/shared/index.ts +1 -0
- package/src/app/shared/ocean/bloom-blur.wgsl +43 -0
- package/src/app/shared/ocean/bloom-bright.wgsl +21 -0
- package/src/app/shared/ocean/bloom-composite.wgsl +40 -0
- package/src/app/shared/ocean/brand-colors.ts +49 -0
- package/src/app/shared/ocean/camera.ts +28 -0
- package/src/app/shared/ocean/hero-ocean-background.spec.tsx +369 -0
- package/src/app/shared/ocean/hero-ocean-background.tsx +238 -0
- package/src/app/shared/ocean/ifft-stage.wgsl +36 -0
- package/src/app/shared/ocean/initial-spectrum.wgsl +36 -0
- package/src/app/shared/ocean/noise.wgsl +24 -0
- package/src/app/shared/ocean/normal-foam.wgsl +32 -0
- package/src/app/shared/ocean/ocean-colors.ts +11 -0
- package/src/app/shared/ocean/ocean-common.wgsl +15 -0
- package/src/app/shared/ocean/ocean-graph.ts +29 -0
- package/src/app/shared/ocean/particles.wgsl +139 -0
- package/src/app/shared/ocean/present.wgsl +40 -0
- package/src/app/shared/ocean/renderer.spec.ts +100 -0
- package/src/app/shared/ocean/renderer.ts +693 -0
- package/src/app/shared/ocean/spectrum.wgsl +35 -0
- package/src/app/shared/ocean/tuning.ts +131 -0
- package/src/app/shared/ocean/webgpu-support.ts +12 -0
- package/src/app/sharing/AccessRequestApprovalPage.spec.tsx +276 -0
- package/src/app/sharing/AccessRequestApprovalPage.tsx +307 -0
- package/src/app/sharing/AccessRequestsSection.tsx +163 -0
- package/src/app/sharing/ResourceAccessScreen.spec.tsx +235 -0
- package/src/app/sharing/ResourceAccessScreen.tsx +331 -0
- package/src/app/sharing/ShareButton.spec.tsx +171 -5
- package/src/app/sharing/ShareButton.tsx +15 -2
- package/src/app/sharing/ShareDialog.spec.tsx +71 -2
- package/src/app/sharing/ShareDialog.tsx +24 -2
- package/src/app/sharing/index.ts +2 -0
- package/src/app/styles/agent-native.css +21 -1
- package/src/app/styles/agent-native.spec.ts +16 -3
- package/src/app/styles/tokens/agent-kit.css +3 -1
- package/src/composer/AgentSuggestionBar.overflow.spec.tsx +277 -0
- package/src/composer/AgentSuggestionBar.tsx +113 -8
- package/src/wgsl-env.d.ts +6 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
struct ParticleUniforms {
|
|
2
|
+
view: mat4x4f,
|
|
3
|
+
projection: mat4x4f,
|
|
4
|
+
viewport: vec4f,
|
|
5
|
+
world: vec4f,
|
|
6
|
+
fade: vec4f,
|
|
7
|
+
oceanColor: vec4f,
|
|
8
|
+
neonColor: vec4f,
|
|
9
|
+
foamColor: vec4f,
|
|
10
|
+
cursor: vec4f,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
struct VertexOut {
|
|
14
|
+
@builtin(position) position: vec4f,
|
|
15
|
+
@location(0) pointCoord: vec2f,
|
|
16
|
+
@location(1) foam: f32,
|
|
17
|
+
@location(2) normal: vec3f,
|
|
18
|
+
@location(3) viewDir: vec3f,
|
|
19
|
+
@location(4) height: f32,
|
|
20
|
+
@location(5) fade: f32,
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
@group(0) @binding(0) var<uniform> u: ParticleUniforms;
|
|
24
|
+
@group(0) @binding(1) var u_displacement: texture_2d<f32>;
|
|
25
|
+
@group(0) @binding(2) var u_normalFoam: texture_2d<f32>;
|
|
26
|
+
|
|
27
|
+
fn particleHash(p: vec2u) -> f32 {
|
|
28
|
+
var n = p.x * 374761393u + p.y * 668265263u;
|
|
29
|
+
n = (n ^ (n >> 13u)) * 1274126177u;
|
|
30
|
+
n = n ^ (n >> 16u);
|
|
31
|
+
return f32(n) / 4294967295.0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
fn quadCorner(vertexIndex: u32) -> vec2f {
|
|
35
|
+
let cornerIndex = array<u32, 6>(0u, 1u, 2u, 2u, 1u, 3u)[vertexIndex % 6u];
|
|
36
|
+
switch (cornerIndex) {
|
|
37
|
+
case 0u: { return vec2f(-1.0, -1.0); }
|
|
38
|
+
case 1u: { return vec2f( 1.0, -1.0); }
|
|
39
|
+
case 2u: { return vec2f(-1.0, 1.0); }
|
|
40
|
+
default: { return vec2f( 1.0, 1.0); }
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@vertex fn vs_main(
|
|
45
|
+
@builtin(vertex_index) vertexIndex: u32,
|
|
46
|
+
@builtin(instance_index) instanceIndex: u32,
|
|
47
|
+
) -> VertexOut {
|
|
48
|
+
let resolution = max(1u, u32(u.viewport.w));
|
|
49
|
+
let i = instanceIndex % resolution;
|
|
50
|
+
let j = instanceIndex / resolution;
|
|
51
|
+
let particleRef = vec2f(f32(i), f32(j)) / f32(resolution);
|
|
52
|
+
let texCoord = vec2u(i, j);
|
|
53
|
+
|
|
54
|
+
let disp = textureLoad(u_displacement, texCoord, 0).xyz * u.world.y;
|
|
55
|
+
let nf = textureLoad(u_normalFoam, texCoord, 0);
|
|
56
|
+
|
|
57
|
+
let halfWorld = u.world.x * 0.5;
|
|
58
|
+
let base = vec3f(
|
|
59
|
+
particleRef.x * u.world.x - halfWorld,
|
|
60
|
+
0.0,
|
|
61
|
+
particleRef.y * u.world.x - halfWorld,
|
|
62
|
+
);
|
|
63
|
+
let pos = base + disp;
|
|
64
|
+
|
|
65
|
+
let mv = u.view * vec4f(pos, 1.0);
|
|
66
|
+
let viewDir = -mv.xyz;
|
|
67
|
+
let dist = -mv.z;
|
|
68
|
+
let f = 1.0 - smoothstep(u.fade.x, u.fade.y, dist);
|
|
69
|
+
let fade = pow(clamp(f, 0.0, 1.0), u.fade.z);
|
|
70
|
+
|
|
71
|
+
let projected = u.projection * mv;
|
|
72
|
+
var ndc = projected.xy / projected.w;
|
|
73
|
+
|
|
74
|
+
let aspect = u.viewport.x / max(u.viewport.y, 1.0);
|
|
75
|
+
if (u.cursor.z > 0.0) {
|
|
76
|
+
let cursorDelta = u.cursor.xy - ndc;
|
|
77
|
+
let fieldDelta = cursorDelta * vec2f(aspect, 1.0);
|
|
78
|
+
let cursorDistance = length(fieldDelta);
|
|
79
|
+
let rangeFalloff = 1.0 - smoothstep(0.0, 1.7, cursorDistance);
|
|
80
|
+
let particleId = vec2u(i, j);
|
|
81
|
+
let particleSeed = particleHash(particleId);
|
|
82
|
+
let detached = smoothstep(0.76, 0.998, particleSeed);
|
|
83
|
+
let phase = particleHash(particleId + vec2u(37u, 71u)) * 6.2831855;
|
|
84
|
+
let activity = 0.55 + 0.45 * (0.5 + 0.5 * sin(u.cursor.w * 0.45 + phase));
|
|
85
|
+
let trailProgress = clamp(cursorDistance / 1.7, 0.0, 1.0);
|
|
86
|
+
let trailWidth = mix(0.025, 0.28, trailProgress);
|
|
87
|
+
let jitter = vec2f(
|
|
88
|
+
particleHash(particleId + vec2u(17u, 53u)) - 0.5,
|
|
89
|
+
particleHash(particleId + vec2u(41u, 29u)) - 0.5,
|
|
90
|
+
) * vec2f(trailWidth / aspect, trailWidth);
|
|
91
|
+
let nearFalloff = 1.0 - smoothstep(0.0, 1.0, cursorDistance);
|
|
92
|
+
let baselineResponse = mix(0.004, 0.014, nearFalloff) *
|
|
93
|
+
mix(0.6, 1.0, particleSeed);
|
|
94
|
+
let particleResponse = baselineResponse +
|
|
95
|
+
detached * activity * mix(0.11, 0.82, nearFalloff);
|
|
96
|
+
let attraction = rangeFalloff * particleResponse * u.cursor.z;
|
|
97
|
+
ndc += (u.cursor.xy + jitter - ndc) * attraction;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
let corner = quadCorner(vertexIndex);
|
|
101
|
+
let pointSizePx = 2.0 * u.world.z * u.viewport.z;
|
|
102
|
+
let clipOffset = corner * (pointSizePx / u.viewport.xy) * projected.w;
|
|
103
|
+
let clip = vec4f(ndc * projected.w + clipOffset, projected.z, projected.w);
|
|
104
|
+
|
|
105
|
+
var out: VertexOut;
|
|
106
|
+
out.position = clip;
|
|
107
|
+
out.pointCoord = corner * 0.5 + vec2f(0.5);
|
|
108
|
+
out.foam = nf.w;
|
|
109
|
+
out.normal = nf.xyz;
|
|
110
|
+
out.viewDir = viewDir;
|
|
111
|
+
out.height = disp.y;
|
|
112
|
+
out.fade = fade;
|
|
113
|
+
return out;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
@fragment fn fs_main(in: VertexOut) -> @location(0) vec4f {
|
|
117
|
+
let cc = in.pointCoord - vec2f(0.5);
|
|
118
|
+
let d2 = dot(cc, cc);
|
|
119
|
+
if (d2 > 0.25) {
|
|
120
|
+
discard;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
let n = normalize(in.normal);
|
|
124
|
+
let v = normalize(in.viewDir);
|
|
125
|
+
let fresnel = pow(1.0 - clamp(dot(n, v), 0.0, 1.0), 5.0);
|
|
126
|
+
|
|
127
|
+
let foam = clamp(in.foam, 0.0, 1.0);
|
|
128
|
+
let crest = smoothstep(-0.5, 1.5, in.height);
|
|
129
|
+
|
|
130
|
+
var color = u.oceanColor.rgb * 0.5;
|
|
131
|
+
color += u.neonColor.rgb * crest * 0.5;
|
|
132
|
+
color += u.neonColor.rgb * fresnel * 0.15;
|
|
133
|
+
color = mix(color, u.foamColor.rgb, foam);
|
|
134
|
+
var alpha = 0.02 + crest * 0.06 + fresnel * 0.04;
|
|
135
|
+
alpha = mix(alpha, 1.0, foam);
|
|
136
|
+
color *= in.fade;
|
|
137
|
+
alpha *= in.fade;
|
|
138
|
+
return vec4f(color, clamp(alpha, 0.0, 1.0));
|
|
139
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default "struct ParticleUniforms {\n view: mat4x4f,\n projection: mat4x4f,\n viewport: vec4f,\n world: vec4f,\n fade: vec4f,\n oceanColor: vec4f,\n neonColor: vec4f,\n foamColor: vec4f,\n cursor: vec4f,\n};\n\nstruct VertexOut {\n @builtin(position) position: vec4f,\n @location(0) pointCoord: vec2f,\n @location(1) foam: f32,\n @location(2) normal: vec3f,\n @location(3) viewDir: vec3f,\n @location(4) height: f32,\n @location(5) fade: f32,\n};\n\n@group(0) @binding(0) var<uniform> u: ParticleUniforms;\n@group(0) @binding(1) var u_displacement: texture_2d<f32>;\n@group(0) @binding(2) var u_normalFoam: texture_2d<f32>;\n\nfn particleHash(p: vec2u) -> f32 {\n var n = p.x * 374761393u + p.y * 668265263u;\n n = (n ^ (n >> 13u)) * 1274126177u;\n n = n ^ (n >> 16u);\n return f32(n) / 4294967295.0;\n}\n\nfn quadCorner(vertexIndex: u32) -> vec2f {\n let cornerIndex = array<u32, 6>(0u, 1u, 2u, 2u, 1u, 3u)[vertexIndex % 6u];\n switch (cornerIndex) {\n case 0u: { return vec2f(-1.0, -1.0); }\n case 1u: { return vec2f( 1.0, -1.0); }\n case 2u: { return vec2f(-1.0, 1.0); }\n default: { return vec2f( 1.0, 1.0); }\n }\n}\n\n@vertex fn vs_main(\n @builtin(vertex_index) vertexIndex: u32,\n @builtin(instance_index) instanceIndex: u32,\n) -> VertexOut {\n let resolution = max(1u, u32(u.viewport.w));\n let i = instanceIndex % resolution;\n let j = instanceIndex / resolution;\n let particleRef = vec2f(f32(i), f32(j)) / f32(resolution);\n let texCoord = vec2u(i, j);\n\n let disp = textureLoad(u_displacement, texCoord, 0).xyz * u.world.y;\n let nf = textureLoad(u_normalFoam, texCoord, 0);\n\n let halfWorld = u.world.x * 0.5;\n let base = vec3f(\n particleRef.x * u.world.x - halfWorld,\n 0.0,\n particleRef.y * u.world.x - halfWorld,\n );\n let pos = base + disp;\n\n let mv = u.view * vec4f(pos, 1.0);\n let viewDir = -mv.xyz;\n let dist = -mv.z;\n let f = 1.0 - smoothstep(u.fade.x, u.fade.y, dist);\n let fade = pow(clamp(f, 0.0, 1.0), u.fade.z);\n\n let projected = u.projection * mv;\n var ndc = projected.xy / projected.w;\n\n let aspect = u.viewport.x / max(u.viewport.y, 1.0);\n if (u.cursor.z > 0.0) {\n let cursorDelta = u.cursor.xy - ndc;\n let fieldDelta = cursorDelta * vec2f(aspect, 1.0);\n let cursorDistance = length(fieldDelta);\n let rangeFalloff = 1.0 - smoothstep(0.0, 1.7, cursorDistance);\n let particleId = vec2u(i, j);\n let particleSeed = particleHash(particleId);\n let detached = smoothstep(0.76, 0.998, particleSeed);\n let phase = particleHash(particleId + vec2u(37u, 71u)) * 6.2831855;\n let activity = 0.55 + 0.45 * (0.5 + 0.5 * sin(u.cursor.w * 0.45 + phase));\n let trailProgress = clamp(cursorDistance / 1.7, 0.0, 1.0);\n let trailWidth = mix(0.025, 0.28, trailProgress);\n let jitter = vec2f(\n particleHash(particleId + vec2u(17u, 53u)) - 0.5,\n particleHash(particleId + vec2u(41u, 29u)) - 0.5,\n ) * vec2f(trailWidth / aspect, trailWidth);\n let nearFalloff = 1.0 - smoothstep(0.0, 1.0, cursorDistance);\n let baselineResponse = mix(0.004, 0.014, nearFalloff) *\n mix(0.6, 1.0, particleSeed);\n let particleResponse = baselineResponse +\n detached * activity * mix(0.11, 0.82, nearFalloff);\n let attraction = rangeFalloff * particleResponse * u.cursor.z;\n ndc += (u.cursor.xy + jitter - ndc) * attraction;\n }\n\n let corner = quadCorner(vertexIndex);\n let pointSizePx = 2.0 * u.world.z * u.viewport.z;\n let clipOffset = corner * (pointSizePx / u.viewport.xy) * projected.w;\n let clip = vec4f(ndc * projected.w + clipOffset, projected.z, projected.w);\n\n var out: VertexOut;\n out.position = clip;\n out.pointCoord = corner * 0.5 + vec2f(0.5);\n out.foam = nf.w;\n out.normal = nf.xyz;\n out.viewDir = viewDir;\n out.height = disp.y;\n out.fade = fade;\n return out;\n}\n\n@fragment fn fs_main(in: VertexOut) -> @location(0) vec4f {\n let cc = in.pointCoord - vec2f(0.5);\n let d2 = dot(cc, cc);\n if (d2 > 0.25) {\n discard;\n }\n\n let n = normalize(in.normal);\n let v = normalize(in.viewDir);\n let fresnel = pow(1.0 - clamp(dot(n, v), 0.0, 1.0), 5.0);\n\n let foam = clamp(in.foam, 0.0, 1.0);\n let crest = smoothstep(-0.5, 1.5, in.height);\n\n var color = u.oceanColor.rgb * 0.5;\n color += u.neonColor.rgb * crest * 0.5;\n color += u.neonColor.rgb * fresnel * 0.15;\n color = mix(color, u.foamColor.rgb, foam);\n var alpha = 0.02 + crest * 0.06 + fresnel * 0.04;\n alpha = mix(alpha, 1.0, foam);\n color *= in.fade;\n alpha *= in.fade;\n return vec4f(color, clamp(alpha, 0.0, 1.0));\n}\n";
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
struct PresentUniforms {
|
|
2
|
+
fgColor: vec4f,
|
|
3
|
+
bgColor: vec4f,
|
|
4
|
+
|
|
5
|
+
brightness: f32,
|
|
6
|
+
_pad: vec3f,
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
@group(0) @binding(0) var<uniform> uniforms: PresentUniforms;
|
|
10
|
+
@group(0) @binding(1) var sceneHDR: texture_2d<f32>;
|
|
11
|
+
@group(0) @binding(2) var bloomTexture: texture_2d<f32>;
|
|
12
|
+
@group(0) @binding(3) var linearSampler: sampler;
|
|
13
|
+
|
|
14
|
+
fn LinearTosRGB(value: vec4f) -> vec4f {
|
|
15
|
+
let lt = value.rgb * 12.92;
|
|
16
|
+
let gt = 1.055 * pow(value.rgb, vec3f(0.41666)) - vec3f(0.055);
|
|
17
|
+
let rgb = select(gt, lt, value.rgb <= vec3f(0.0031308));
|
|
18
|
+
return vec4f(rgb, value.a);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@fragment fn fs_main(@location(0) uv: vec2f) -> @location(0) vec4f {
|
|
22
|
+
let scene = textureSample(sceneHDR, linearSampler, uv);
|
|
23
|
+
let bloom = textureSample(bloomTexture, linearSampler, uv);
|
|
24
|
+
let hdr = scene.rgb + bloom.rgb;
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
let tone = clamp(dot(hdr, vec3f(0.2126, 0.7152, 0.0722)), 0.0, 1.0);
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
var color = mix(uniforms.bgColor.rgb, uniforms.fgColor.rgb, tone);
|
|
36
|
+
color += (uniforms.fgColor.rgb - uniforms.bgColor.rgb) * tone * tone
|
|
37
|
+
* (uniforms.brightness - 1.0);
|
|
38
|
+
|
|
39
|
+
return LinearTosRGB(vec4f(clamp(color, vec3f(0.0), vec3f(1.0)), 1.0));
|
|
40
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default "struct PresentUniforms {\n fgColor: vec4f,\n bgColor: vec4f,\n\n brightness: f32,\n _pad: vec3f,\n};\n\n@group(0) @binding(0) var<uniform> uniforms: PresentUniforms;\n@group(0) @binding(1) var sceneHDR: texture_2d<f32>;\n@group(0) @binding(2) var bloomTexture: texture_2d<f32>;\n@group(0) @binding(3) var linearSampler: sampler;\n\nfn LinearTosRGB(value: vec4f) -> vec4f {\n let lt = value.rgb * 12.92;\n let gt = 1.055 * pow(value.rgb, vec3f(0.41666)) - vec3f(0.055);\n let rgb = select(gt, lt, value.rgb <= vec3f(0.0031308));\n return vec4f(rgb, value.a);\n}\n\n@fragment fn fs_main(@location(0) uv: vec2f) -> @location(0) vec4f {\n let scene = textureSample(sceneHDR, linearSampler, uv);\n let bloom = textureSample(bloomTexture, linearSampler, uv);\n let hdr = scene.rgb + bloom.rgb;\n\n\n\n\n let tone = clamp(dot(hdr, vec3f(0.2126, 0.7152, 0.0722)), 0.0, 1.0);\n\n\n\n\n\n var color = mix(uniforms.bgColor.rgb, uniforms.fgColor.rgb, tone);\n color += (uniforms.fgColor.rgb - uniforms.bgColor.rgb) * tone * tone\n * (uniforms.brightness - 1.0);\n\n return LinearTosRGB(vec4f(clamp(color, vec3f(0.0), vec3f(1.0)), 1.0));\n}\n";
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type Draw, type Effect, type Frame, type Gpu, type Surface, type Target } from "vgpu";
|
|
2
|
+
import { type OceanColors } from "./ocean-colors.js";
|
|
3
|
+
import { type IfftStage } from "./ocean-graph.js";
|
|
4
|
+
type Output = Surface | Target;
|
|
5
|
+
interface RendererOptions {
|
|
6
|
+
readonly canvas: HTMLCanvasElement;
|
|
7
|
+
readonly colors?: OceanColors;
|
|
8
|
+
readonly fps?: number;
|
|
9
|
+
readonly onError?: (error: unknown) => void;
|
|
10
|
+
}
|
|
11
|
+
type PointerTarget = readonly [number, number, number];
|
|
12
|
+
export declare function createRenderer({ canvas, colors, fps, onError, }: RendererOptions): {
|
|
13
|
+
ready: Promise<void>;
|
|
14
|
+
firstFrame: Promise<void>;
|
|
15
|
+
dispose: () => void;
|
|
16
|
+
setColors: (next: OceanColors) => void;
|
|
17
|
+
setPaused: (next: boolean) => void;
|
|
18
|
+
setPointer: (next: PointerTarget) => void;
|
|
19
|
+
};
|
|
20
|
+
export type OceanRenderer = ReturnType<typeof createRenderer>;
|
|
21
|
+
export declare function createGraph(gpu: Gpu, output: Output, label: string, colors?: OceanColors): Promise<OceanGraph>;
|
|
22
|
+
declare function buildGraph(gpu: Gpu, output: Output, label: string, colors: OceanColors, own: (value: Target) => Target): {
|
|
23
|
+
simulation: {
|
|
24
|
+
noise: Target;
|
|
25
|
+
h0: Target;
|
|
26
|
+
spectrum: Target;
|
|
27
|
+
ping: Target;
|
|
28
|
+
pong: Target;
|
|
29
|
+
normalFoam: Target;
|
|
30
|
+
};
|
|
31
|
+
scene: Target;
|
|
32
|
+
bloom: {
|
|
33
|
+
bright: Target;
|
|
34
|
+
composite: Target;
|
|
35
|
+
levels: {
|
|
36
|
+
horizontal: Target;
|
|
37
|
+
vertical: Target;
|
|
38
|
+
horizontalEffect: Effect;
|
|
39
|
+
verticalEffect: Effect;
|
|
40
|
+
}[];
|
|
41
|
+
};
|
|
42
|
+
effects: {
|
|
43
|
+
noise: Effect;
|
|
44
|
+
initialSpectrum: Effect;
|
|
45
|
+
evolveSpectrum: Effect;
|
|
46
|
+
normals: Effect;
|
|
47
|
+
bright: Effect;
|
|
48
|
+
composite: Effect;
|
|
49
|
+
present: Effect;
|
|
50
|
+
};
|
|
51
|
+
ifft: {
|
|
52
|
+
spec: IfftStage;
|
|
53
|
+
effect: Effect;
|
|
54
|
+
output: Target;
|
|
55
|
+
}[];
|
|
56
|
+
particles: Draw;
|
|
57
|
+
needsInitialSpectrum: boolean;
|
|
58
|
+
};
|
|
59
|
+
export type OceanGraph = ReturnType<typeof buildGraph>;
|
|
60
|
+
export declare function setPresentColors(graph: OceanGraph, colors: OceanColors): void;
|
|
61
|
+
export declare function renderAt(gpu: Gpu, graph: OceanGraph, output: Target, time: number): void;
|
|
62
|
+
export declare function renderGraph(currentFrame: Frame, graph: OceanGraph, output: Output): void;
|
|
63
|
+
export declare function bloomSizes(size: readonly [number, number]): [number, number][];
|
|
64
|
+
export declare function destroyGraph(graph: OceanGraph): void;
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../../src/app/shared/ocean/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,IAAI,EACT,KAAK,MAAM,EACX,KAAK,KAAK,EAEV,KAAK,GAAG,EAER,KAAK,OAAO,EACZ,KAAK,MAAM,EACZ,MAAM,MAAM,CAAC;AAUd,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,EAGL,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAC;AAW1B,KAAK,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAE/B,UAAU,eAAe;IACvB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7C;AAED,KAAK,aAAa,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AASvD,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,MAAM,EACN,GAAG,EACH,OAAO,GACR,EAAE,eAAe;;;mBA2BI,IAAI;sBAkKC,WAAW,KAAG,IAAI;sBApBlB,OAAO,KAAG,IAAI;uBAeb,aAAa,KAAG,IAAI;EAY/C;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAE9D,wBAAsB,WAAW,CAC/B,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,WAAkC,GACzC,OAAO,CAAC,UAAU,CAAC,CAiBrB;AAED,iBAAS,UAAU,CACjB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiM/B;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAuEvD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAE7E;AAoCD,wBAAgB,QAAQ,CACtB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,IAAI,CAGN;AAED,wBAAgB,WAAW,CACzB,YAAY,EAAE,KAAK,EACnB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,GACb,IAAI,CAuBN;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CASpB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAWpD"}
|