@nodetool-ai/game-renderer 0.8.1 → 0.8.2

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.
Files changed (273) hide show
  1. package/README.md +46 -0
  2. package/dist/.nodetool-build-stamp +1 -1
  3. package/dist/audio/mixer.d.ts +75 -0
  4. package/dist/audio/mixer.d.ts.map +1 -0
  5. package/dist/audio/mixer.js +345 -0
  6. package/dist/audio/mixer.js.map +1 -0
  7. package/dist/audio/player.d.ts +67 -0
  8. package/dist/audio/player.d.ts.map +1 -0
  9. package/dist/audio/player.js +337 -0
  10. package/dist/audio/player.js.map +1 -0
  11. package/dist/audio/spatial.d.ts +50 -0
  12. package/dist/audio/spatial.d.ts.map +1 -0
  13. package/dist/audio/spatial.js +166 -0
  14. package/dist/audio/spatial.js.map +1 -0
  15. package/dist/audio/voices.d.ts +11 -0
  16. package/dist/audio/voices.d.ts.map +1 -0
  17. package/dist/audio/voices.js +22 -0
  18. package/dist/audio/voices.js.map +1 -0
  19. package/dist/audio.d.ts +6 -38
  20. package/dist/audio.d.ts.map +1 -1
  21. package/dist/audio.js +3 -226
  22. package/dist/audio.js.map +1 -1
  23. package/dist/browser.d.ts +2 -1
  24. package/dist/browser.d.ts.map +1 -1
  25. package/dist/browser.js +5 -5
  26. package/dist/browser.js.map +1 -1
  27. package/dist/browser3d.d.ts +2 -0
  28. package/dist/browser3d.d.ts.map +1 -0
  29. package/dist/browser3d.js +2 -0
  30. package/dist/browser3d.js.map +1 -0
  31. package/dist/build.d.ts.map +1 -1
  32. package/dist/build.js +29 -19
  33. package/dist/build.js.map +1 -1
  34. package/dist/build3d.d.ts +11 -0
  35. package/dist/build3d.d.ts.map +1 -0
  36. package/dist/build3d.js +126 -0
  37. package/dist/build3d.js.map +1 -0
  38. package/dist/canvas2d.d.ts +12 -3
  39. package/dist/canvas2d.d.ts.map +1 -1
  40. package/dist/canvas2d.js +59 -12
  41. package/dist/canvas2d.js.map +1 -1
  42. package/dist/fixed-tick-host.d.ts +10 -0
  43. package/dist/fixed-tick-host.d.ts.map +1 -0
  44. package/dist/fixed-tick-host.js +29 -0
  45. package/dist/fixed-tick-host.js.map +1 -0
  46. package/dist/frame-budget.d.ts +34 -0
  47. package/dist/frame-budget.d.ts.map +1 -0
  48. package/dist/frame-budget.js +52 -0
  49. package/dist/frame-budget.js.map +1 -0
  50. package/dist/frame.d.ts +20 -1
  51. package/dist/frame.d.ts.map +1 -1
  52. package/dist/frame.js +69 -1
  53. package/dist/frame.js.map +1 -1
  54. package/dist/game3d-capture-page.js +5834 -0
  55. package/dist/game3d-player.js +6001 -0
  56. package/dist/imageDiff.d.ts +9 -0
  57. package/dist/imageDiff.d.ts.map +1 -0
  58. package/dist/imageDiff.js +30 -0
  59. package/dist/imageDiff.js.map +1 -0
  60. package/dist/index.d.ts +12 -1
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +9 -0
  63. package/dist/index.js.map +1 -1
  64. package/dist/input-bindings.d.ts +76 -0
  65. package/dist/input-bindings.d.ts.map +1 -0
  66. package/dist/input-bindings.js +377 -0
  67. package/dist/input-bindings.js.map +1 -0
  68. package/dist/input.d.ts +1 -1
  69. package/dist/input.d.ts.map +1 -1
  70. package/dist/input.js +1 -14
  71. package/dist/input.js.map +1 -1
  72. package/dist/input3d.d.ts +3 -0
  73. package/dist/input3d.d.ts.map +1 -0
  74. package/dist/input3d.js +3 -0
  75. package/dist/input3d.js.map +1 -0
  76. package/dist/node.d.ts +5 -0
  77. package/dist/node.d.ts.map +1 -1
  78. package/dist/node.js +28 -11
  79. package/dist/node.js.map +1 -1
  80. package/dist/node3d.d.ts +29 -0
  81. package/dist/node3d.d.ts.map +1 -0
  82. package/dist/node3d.js +160 -0
  83. package/dist/node3d.js.map +1 -0
  84. package/dist/particles/curves.d.ts +16 -0
  85. package/dist/particles/curves.d.ts.map +1 -0
  86. package/dist/particles/curves.js +49 -0
  87. package/dist/particles/curves.js.map +1 -0
  88. package/dist/particles/index.d.ts +6 -0
  89. package/dist/particles/index.d.ts.map +1 -0
  90. package/dist/particles/index.js +6 -0
  91. package/dist/particles/index.js.map +1 -0
  92. package/dist/particles/random.d.ts +10 -0
  93. package/dist/particles/random.d.ts.map +1 -0
  94. package/dist/particles/random.js +26 -0
  95. package/dist/particles/random.js.map +1 -0
  96. package/dist/particles/render2d.d.ts +40 -0
  97. package/dist/particles/render2d.d.ts.map +1 -0
  98. package/dist/particles/render2d.js +70 -0
  99. package/dist/particles/render2d.js.map +1 -0
  100. package/dist/particles/shapes.d.ts +18 -0
  101. package/dist/particles/shapes.d.ts.map +1 -0
  102. package/dist/particles/shapes.js +92 -0
  103. package/dist/particles/shapes.js.map +1 -0
  104. package/dist/particles/simulator.d.ts +88 -0
  105. package/dist/particles/simulator.d.ts.map +1 -0
  106. package/dist/particles/simulator.js +371 -0
  107. package/dist/particles/simulator.js.map +1 -0
  108. package/dist/player-v1.js +2502 -0
  109. package/dist/preparation3d.d.ts +3 -0
  110. package/dist/preparation3d.d.ts.map +1 -0
  111. package/dist/preparation3d.js +3 -0
  112. package/dist/preparation3d.js.map +1 -0
  113. package/dist/renderPipeline.d.ts +12 -0
  114. package/dist/renderPipeline.d.ts.map +1 -0
  115. package/dist/renderPipeline.js +17 -0
  116. package/dist/renderPipeline.js.map +1 -0
  117. package/dist/renderer3d/animation/index.d.ts +11 -0
  118. package/dist/renderer3d/animation/index.d.ts.map +1 -0
  119. package/dist/renderer3d/animation/index.js +212 -0
  120. package/dist/renderer3d/animation/index.js.map +1 -0
  121. package/dist/renderer3d/assets/cache.d.ts +14 -0
  122. package/dist/renderer3d/assets/cache.d.ts.map +1 -0
  123. package/dist/renderer3d/assets/cache.js +74 -0
  124. package/dist/renderer3d/assets/cache.js.map +1 -0
  125. package/dist/renderer3d/assets/dispose.d.ts +4 -0
  126. package/dist/renderer3d/assets/dispose.d.ts.map +1 -0
  127. package/dist/renderer3d/assets/dispose.js +41 -0
  128. package/dist/renderer3d/assets/dispose.js.map +1 -0
  129. package/dist/renderer3d/assets/hdri-contract.d.ts +23 -0
  130. package/dist/renderer3d/assets/hdri-contract.d.ts.map +1 -0
  131. package/dist/renderer3d/assets/hdri-contract.js +2 -0
  132. package/dist/renderer3d/assets/hdri-contract.js.map +1 -0
  133. package/dist/renderer3d/assets/instances.d.ts +5 -0
  134. package/dist/renderer3d/assets/instances.d.ts.map +1 -0
  135. package/dist/renderer3d/assets/instances.js +86 -0
  136. package/dist/renderer3d/assets/instances.js.map +1 -0
  137. package/dist/renderer3d/capture-driver-types.d.ts +42 -0
  138. package/dist/renderer3d/capture-driver-types.d.ts.map +1 -0
  139. package/dist/renderer3d/capture-driver-types.js +2 -0
  140. package/dist/renderer3d/capture-driver-types.js.map +1 -0
  141. package/dist/renderer3d/capture-page.d.ts +36 -0
  142. package/dist/renderer3d/capture-page.d.ts.map +1 -0
  143. package/dist/renderer3d/capture-page.js +68 -0
  144. package/dist/renderer3d/capture-page.js.map +1 -0
  145. package/dist/renderer3d/culling.d.ts +10 -0
  146. package/dist/renderer3d/culling.d.ts.map +1 -0
  147. package/dist/renderer3d/culling.js +27 -0
  148. package/dist/renderer3d/culling.js.map +1 -0
  149. package/dist/renderer3d/environment/index.d.ts +4 -0
  150. package/dist/renderer3d/environment/index.d.ts.map +1 -0
  151. package/dist/renderer3d/environment/index.js +9 -0
  152. package/dist/renderer3d/environment/index.js.map +1 -0
  153. package/dist/renderer3d/environment/sky.d.ts +45 -0
  154. package/dist/renderer3d/environment/sky.d.ts.map +1 -0
  155. package/dist/renderer3d/environment/sky.js +221 -0
  156. package/dist/renderer3d/environment/sky.js.map +1 -0
  157. package/dist/renderer3d/hud/fonts.d.ts +13 -0
  158. package/dist/renderer3d/hud/fonts.d.ts.map +1 -0
  159. package/dist/renderer3d/hud/fonts.js +69 -0
  160. package/dist/renderer3d/hud/fonts.js.map +1 -0
  161. package/dist/renderer3d/hud/paint.d.ts +4 -0
  162. package/dist/renderer3d/hud/paint.d.ts.map +1 -0
  163. package/dist/renderer3d/hud/paint.js +22 -0
  164. package/dist/renderer3d/hud/paint.js.map +1 -0
  165. package/dist/renderer3d/import.d.ts +34 -0
  166. package/dist/renderer3d/import.d.ts.map +1 -0
  167. package/dist/renderer3d/import.js +408 -0
  168. package/dist/renderer3d/import.js.map +1 -0
  169. package/dist/renderer3d/index.d.ts +74 -0
  170. package/dist/renderer3d/index.d.ts.map +1 -0
  171. package/dist/renderer3d/index.js +338 -0
  172. package/dist/renderer3d/index.js.map +1 -0
  173. package/dist/renderer3d/lights/index.d.ts +7 -0
  174. package/dist/renderer3d/lights/index.d.ts.map +1 -0
  175. package/dist/renderer3d/lights/index.js +67 -0
  176. package/dist/renderer3d/lights/index.js.map +1 -0
  177. package/dist/renderer3d/materials/index.d.ts +4 -0
  178. package/dist/renderer3d/materials/index.d.ts.map +1 -0
  179. package/dist/renderer3d/materials/index.js +8 -0
  180. package/dist/renderer3d/materials/index.js.map +1 -0
  181. package/dist/renderer3d/passes/post-processing.d.ts +44 -0
  182. package/dist/renderer3d/passes/post-processing.d.ts.map +1 -0
  183. package/dist/renderer3d/passes/post-processing.js +213 -0
  184. package/dist/renderer3d/passes/post-processing.js.map +1 -0
  185. package/dist/renderer3d/pipeline.d.ts +15 -0
  186. package/dist/renderer3d/pipeline.d.ts.map +1 -0
  187. package/dist/renderer3d/pipeline.js +10 -0
  188. package/dist/renderer3d/pipeline.js.map +1 -0
  189. package/dist/renderer3d/playwright-contract.d.ts +3 -0
  190. package/dist/renderer3d/playwright-contract.d.ts.map +1 -0
  191. package/dist/renderer3d/playwright-contract.js +4 -0
  192. package/dist/renderer3d/playwright-contract.js.map +1 -0
  193. package/dist/renderer3d/preparation.d.ts +79 -0
  194. package/dist/renderer3d/preparation.d.ts.map +1 -0
  195. package/dist/renderer3d/preparation.js +458 -0
  196. package/dist/renderer3d/preparation.js.map +1 -0
  197. package/dist/renderer3d/scene-sync.d.ts +8 -0
  198. package/dist/renderer3d/scene-sync.d.ts.map +1 -0
  199. package/dist/renderer3d/scene-sync.js +96 -0
  200. package/dist/renderer3d/scene-sync.js.map +1 -0
  201. package/dist/renderer3d/shadows/cascades.d.ts +40 -0
  202. package/dist/renderer3d/shadows/cascades.d.ts.map +1 -0
  203. package/dist/renderer3d/shadows/cascades.js +244 -0
  204. package/dist/renderer3d/shadows/cascades.js.map +1 -0
  205. package/dist/renderer3d/shadows/index.d.ts +44 -0
  206. package/dist/renderer3d/shadows/index.d.ts.map +1 -0
  207. package/dist/renderer3d/shadows/index.js +129 -0
  208. package/dist/renderer3d/shadows/index.js.map +1 -0
  209. package/dist/renderer3d/types.d.ts +18 -0
  210. package/dist/renderer3d/types.d.ts.map +1 -0
  211. package/dist/renderer3d/types.js +2 -0
  212. package/dist/renderer3d/types.js.map +1 -0
  213. package/dist/smoke.d.ts +15 -0
  214. package/dist/smoke.d.ts.map +1 -0
  215. package/dist/smoke.js +138 -0
  216. package/dist/smoke.js.map +1 -0
  217. package/dist/standalone-player.d.ts +11 -1
  218. package/dist/standalone-player.d.ts.map +1 -1
  219. package/dist/standalone-player.js +67 -41
  220. package/dist/standalone-player.js.map +1 -1
  221. package/dist/standalone-player3d.d.ts +14 -0
  222. package/dist/standalone-player3d.d.ts.map +1 -0
  223. package/dist/standalone-player3d.js +255 -0
  224. package/dist/standalone-player3d.js.map +1 -0
  225. package/dist/touch-controls.d.ts +22 -8
  226. package/dist/touch-controls.d.ts.map +1 -1
  227. package/dist/touch-controls.js +88 -21
  228. package/dist/touch-controls.js.map +1 -1
  229. package/dist/ui/controller.d.ts +59 -0
  230. package/dist/ui/controller.d.ts.map +1 -0
  231. package/dist/ui/controller.js +201 -0
  232. package/dist/ui/controller.js.map +1 -0
  233. package/dist/ui/hud2d.d.ts +11 -0
  234. package/dist/ui/hud2d.d.ts.map +1 -0
  235. package/dist/ui/hud2d.js +25 -0
  236. package/dist/ui/hud2d.js.map +1 -0
  237. package/dist/ui/layout.d.ts +42 -0
  238. package/dist/ui/layout.d.ts.map +1 -0
  239. package/dist/ui/layout.js +182 -0
  240. package/dist/ui/layout.js.map +1 -0
  241. package/dist/ui/paint.d.ts +45 -0
  242. package/dist/ui/paint.d.ts.map +1 -0
  243. package/dist/ui/paint.js +121 -0
  244. package/dist/ui/paint.js.map +1 -0
  245. package/dist/webgpu/effects.d.ts +22 -0
  246. package/dist/webgpu/effects.d.ts.map +1 -0
  247. package/dist/webgpu/effects.js +69 -0
  248. package/dist/webgpu/effects.js.map +1 -0
  249. package/dist/webgpu/hud.d.ts +4 -0
  250. package/dist/webgpu/hud.d.ts.map +1 -0
  251. package/dist/webgpu/hud.js +27 -0
  252. package/dist/webgpu/hud.js.map +1 -0
  253. package/dist/webgpu/lighting.d.ts +4 -0
  254. package/dist/webgpu/lighting.d.ts.map +1 -0
  255. package/dist/webgpu/lighting.js +47 -0
  256. package/dist/webgpu/lighting.js.map +1 -0
  257. package/dist/webgpu/pipeline.d.ts +11 -0
  258. package/dist/webgpu/pipeline.d.ts.map +1 -0
  259. package/dist/webgpu/pipeline.js +11 -0
  260. package/dist/webgpu/pipeline.js.map +1 -0
  261. package/dist/webgpu/sprites.d.ts +6 -0
  262. package/dist/webgpu/sprites.d.ts.map +1 -0
  263. package/dist/webgpu/sprites.js +74 -0
  264. package/dist/webgpu/sprites.js.map +1 -0
  265. package/dist/webgpu/types.d.ts +14 -0
  266. package/dist/webgpu/types.d.ts.map +1 -0
  267. package/dist/webgpu/types.js +2 -0
  268. package/dist/webgpu/types.js.map +1 -0
  269. package/dist/webgpu.d.ts +4 -3
  270. package/dist/webgpu.d.ts.map +1 -1
  271. package/dist/webgpu.js +119 -279
  272. package/dist/webgpu.js.map +1 -1
  273. package/package.json +47 -10
@@ -0,0 +1,213 @@
1
+ import * as THREE from "three";
2
+ import { EffectComposer } from "three/addons/postprocessing/EffectComposer.js";
3
+ import { RenderPass } from "three/addons/postprocessing/RenderPass.js";
4
+ import { UnrealBloomPass } from "three/addons/postprocessing/UnrealBloomPass.js";
5
+ import { OutputPass } from "three/addons/postprocessing/OutputPass.js";
6
+ import { ShaderPass } from "three/addons/postprocessing/ShaderPass.js";
7
+ import { FXAAPass } from "three/addons/postprocessing/FXAAPass.js";
8
+ import { SMAAPass } from "three/addons/postprocessing/SMAAPass.js";
9
+ const TONE_MAPPING = {
10
+ aces: THREE.ACESFilmicToneMapping, agx: THREE.AgXToneMapping, neutral: THREE.NeutralToneMapping, linear: THREE.LinearToneMapping
11
+ };
12
+ /** Multisample count of the composer's scene target when `antialias` is msaa. */
13
+ export const GAME_POST_MSAA_SAMPLES_3D = 4;
14
+ /**
15
+ * Resolves scene post-processing into renderer settings and composer passes. Absent or disabled
16
+ * settings give the renderer's defaults and no composer, so the output matches rendering without
17
+ * post-processing. Exposure and tone mapping alone also render directly, because the renderer applies
18
+ * them when it draws to the canvas.
19
+ */
20
+ export function resolveGamePostProcessing3D(settings, maxSamples) {
21
+ if (!settings || !settings.enabled) {
22
+ return { toneMapping: THREE.ACESFilmicToneMapping, exposure: 1, composer: null };
23
+ }
24
+ const base = { toneMapping: TONE_MAPPING[settings.toneMapping], exposure: settings.exposure };
25
+ if (!settings.bloom && !settings.vignette && settings.antialias === "msaa") {
26
+ return { ...base, composer: null };
27
+ }
28
+ return { ...base, composer: {
29
+ samples: settings.antialias === "msaa" ? Math.max(0, Math.min(GAME_POST_MSAA_SAMPLES_3D, maxSamples)) : 0,
30
+ bloom: settings.bloom ?? null,
31
+ vignette: settings.vignette ?? null,
32
+ antialias: settings.antialias === "fxaa" || settings.antialias === "smaa" ? settings.antialias : null
33
+ } };
34
+ }
35
+ /** Pass names in the order the composer runs them. */
36
+ export function gamePostProcessingPassNames3D(plan) {
37
+ const composer = plan.composer;
38
+ if (!composer) {
39
+ return [];
40
+ }
41
+ return ["scene", ...(composer.bloom ? ["bloom"] : []), "output", ...(composer.vignette ? ["vignette"] : []),
42
+ ...(composer.antialias ? [composer.antialias] : [])];
43
+ }
44
+ const vignetteShader = {
45
+ name: "GameVignetteShader",
46
+ uniforms: { tDiffuse: { value: null }, intensity: { value: 0.4 }, radius: { value: 0.5 }, softness: { value: 0.5 } },
47
+ vertexShader: "varying vec2 vUv; void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); }",
48
+ fragmentShader: `uniform sampler2D tDiffuse; uniform float intensity; uniform float radius; uniform float softness; varying vec2 vUv;
49
+ void main() {
50
+ vec4 texel = texture2D(tDiffuse, vUv);
51
+ float distanceFromCenter = length(vUv - vec2(0.5)) * 1.41421356;
52
+ float shade = smoothstep(radius, radius + softness, distanceFromCenter);
53
+ gl_FragColor = vec4(texel.rgb * (1.0 - intensity * shade), texel.a);
54
+ }`
55
+ };
56
+ /** three 0.185's SMAAPass keeps its lookups in private fields. The typings name the public fields of older releases. */
57
+ class GameSMAAPass extends SMAAPass {
58
+ /**
59
+ * Loads the area and search lookup images and marks their textures for upload.
60
+ * SMAAPass points them at data URLs and flags the textures only in a later onload task, so a
61
+ * composer that renders in the same task would run SMAA with unbound lookups and pass the image
62
+ * through. The capture page and the standalone build only allow blob: images, so the lookups are
63
+ * reloaded from blob URLs made from the same bytes. `fetch` is not used because connect-src blocks data: URLs there too.
64
+ */
65
+ async lookupsReady() {
66
+ await Promise.all([this._areaTexture, this._searchTexture].map(async (texture) => {
67
+ if (!(texture instanceof THREE.Texture) || !(texture.image instanceof HTMLImageElement)) {
68
+ throw new Error("SMAA lookup textures are missing");
69
+ }
70
+ const match = /^data:([^;,]+);base64,(.*)$/.exec(texture.image.src);
71
+ if (!match) {
72
+ throw new Error("SMAA lookup textures are not data URLs");
73
+ }
74
+ const bytes = Uint8Array.from(atob(match[2]), (character) => character.charCodeAt(0));
75
+ const url = URL.createObjectURL(new Blob([bytes], { type: match[1] }));
76
+ try {
77
+ const image = new Image();
78
+ image.src = url;
79
+ await image.decode();
80
+ texture.image = image;
81
+ texture.needsUpdate = true;
82
+ }
83
+ finally {
84
+ URL.revokeObjectURL(url);
85
+ }
86
+ }));
87
+ }
88
+ }
89
+ /** Owns the composer for one renderer. The scene pass of `RenderPipeline3D` draws through it. */
90
+ export class GamePostProcessor3D {
91
+ renderer;
92
+ plan = resolveGamePostProcessing3D(undefined, 0);
93
+ state = null;
94
+ size = new THREE.Vector2();
95
+ disposed = false;
96
+ constructor(renderer) {
97
+ this.renderer = renderer;
98
+ }
99
+ /** Names of the composer passes the next render runs, or an empty list for a direct render. */
100
+ get passNames() { return gamePostProcessingPassNames3D(this.plan); }
101
+ /** Bytes of the composer's two full-resolution half-float colour targets, or 0 on the direct path. */
102
+ get targetBytes() { return this.state ? this.state.width * this.state.height * 8 * 2 : 0; }
103
+ async configure(settings) {
104
+ this.plan = resolveGamePostProcessing3D(settings, this.renderer.capabilities.maxSamples);
105
+ this.renderer.toneMapping = this.plan.toneMapping;
106
+ this.renderer.toneMappingExposure = this.plan.exposure;
107
+ const composer = this.plan.composer;
108
+ if (!composer) {
109
+ this.release();
110
+ return;
111
+ }
112
+ const key = gamePostProcessingPassNames3D(this.plan).join(",") + `:${composer.samples}`;
113
+ if (this.state?.key !== key) {
114
+ this.release();
115
+ this.state = await this.build(key, composer);
116
+ }
117
+ // A renderer disposed while SMAA lookups decoded must not keep the new targets.
118
+ if (this.disposed) {
119
+ this.release();
120
+ return;
121
+ }
122
+ const state = this.state;
123
+ if (!state) {
124
+ return;
125
+ }
126
+ if (state.bloom && composer.bloom) {
127
+ state.bloom.threshold = composer.bloom.threshold;
128
+ state.bloom.strength = composer.bloom.intensity;
129
+ state.bloom.radius = composer.bloom.radius;
130
+ state.bloom.materialHighPassFilter.uniforms["smoothWidth"].value = composer.bloom.softness;
131
+ }
132
+ if (state.vignette && composer.vignette) {
133
+ state.vignette.uniforms["intensity"].value = composer.vignette.intensity;
134
+ state.vignette.uniforms["radius"].value = composer.vignette.radius;
135
+ state.vignette.uniforms["softness"].value = composer.vignette.softness;
136
+ }
137
+ }
138
+ render(scene, camera) {
139
+ const state = this.state;
140
+ if (!state) {
141
+ this.renderer.clear();
142
+ this.renderer.render(scene, camera);
143
+ return;
144
+ }
145
+ const size = this.renderer.getDrawingBufferSize(this.size);
146
+ if (size.x !== state.width || size.y !== state.height) {
147
+ state.composer.setPixelRatio(1);
148
+ state.composer.setSize(size.x, size.y);
149
+ state.width = size.x;
150
+ state.height = size.y;
151
+ }
152
+ state.scenePass.scene = scene;
153
+ state.scenePass.camera = camera;
154
+ state.composer.render();
155
+ }
156
+ dispose() {
157
+ this.disposed = true;
158
+ this.release();
159
+ }
160
+ /** Drops GPU targets, for example after a context loss. The next configure rebuilds them. */
161
+ release() {
162
+ if (!this.state) {
163
+ return;
164
+ }
165
+ for (const pass of this.state.passes) {
166
+ pass.dispose();
167
+ }
168
+ this.state.composer.dispose();
169
+ this.state = null;
170
+ }
171
+ async build(key, plan) {
172
+ const size = this.renderer.getDrawingBufferSize(this.size);
173
+ const target = new THREE.WebGLRenderTarget(size.x, size.y, { type: THREE.HalfFloatType, samples: plan.samples });
174
+ const composer = new EffectComposer(this.renderer, target);
175
+ composer.setPixelRatio(1);
176
+ composer.setSize(size.x, size.y);
177
+ const scenePass = new RenderPass(new THREE.Scene(), new THREE.Camera());
178
+ const passes = [scenePass];
179
+ let bloom = null;
180
+ let vignette = null;
181
+ if (plan.bloom) {
182
+ bloom = new UnrealBloomPass(new THREE.Vector2(size.x, size.y), plan.bloom.intensity, plan.bloom.radius, plan.bloom.threshold);
183
+ passes.push(bloom);
184
+ }
185
+ passes.push(new OutputPass());
186
+ if (plan.vignette) {
187
+ vignette = new ShaderPass(vignetteShader);
188
+ passes.push(vignette);
189
+ }
190
+ if (plan.antialias === "fxaa") {
191
+ passes.push(new FXAAPass());
192
+ }
193
+ if (plan.antialias === "smaa") {
194
+ const smaa = new GameSMAAPass();
195
+ passes.push(smaa);
196
+ try {
197
+ await smaa.lookupsReady();
198
+ }
199
+ catch (error) {
200
+ for (const pass of passes) {
201
+ pass.dispose();
202
+ }
203
+ composer.dispose();
204
+ throw error;
205
+ }
206
+ }
207
+ for (const pass of passes) {
208
+ composer.addPass(pass);
209
+ }
210
+ return { key, composer, scenePass, passes, bloom, vignette, width: size.x, height: size.y };
211
+ }
212
+ }
213
+ //# sourceMappingURL=post-processing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-processing.js","sourceRoot":"","sources":["../../../src/renderer3d/passes/post-processing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import * as THREE from "three";
2
+ import { GameRenderPipeline } from "../renderPipeline.js";
3
+ import type { GamePostProcessor3D } from "./passes/post-processing.js";
4
+ export interface RenderContext3D {
5
+ readonly renderer: THREE.WebGLRenderer;
6
+ readonly scene: THREE.Scene;
7
+ readonly camera: THREE.Camera;
8
+ readonly hudScene: THREE.Scene;
9
+ readonly hudCamera: THREE.Camera;
10
+ readonly postProcessor: GamePostProcessor3D;
11
+ }
12
+ export declare class RenderPipeline3D extends GameRenderPipeline<RenderContext3D> {
13
+ constructor();
14
+ }
15
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/renderer3d/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;CAC7C;AAED,qBAAa,gBAAiB,SAAQ,kBAAkB,CAAC,eAAe,CAAC;IACvE,cAKC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { GameRenderPipeline } from "../renderPipeline.js";
2
+ export class RenderPipeline3D extends GameRenderPipeline {
3
+ constructor() {
4
+ super();
5
+ this.register({ name: "scene", order: 0, render: ({ scene, camera, postProcessor }) => postProcessor.render(scene, camera) });
6
+ this.register({ name: "overlay", order: 1, render: ({ renderer }) => renderer.clearDepth() });
7
+ this.register({ name: "hud", order: 2, render: ({ renderer, hudScene, hudCamera }) => renderer.render(hudScene, hudCamera) });
8
+ }
9
+ }
10
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/renderer3d/pipeline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAY1D,MAAM,OAAO,gBAAiB,SAAQ,kBAAmC;IACvE;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9H,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC9F,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAChI,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ import type { GameCaptureChromium } from "./capture-driver-types.js";
2
+ export declare const gameCaptureChromium: GameCaptureChromium;
3
+ //# sourceMappingURL=playwright-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright-contract.d.ts","sourceRoot":"","sources":["../../src/renderer3d/playwright-contract.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGrE,eAAO,MAAM,mBAAmB,EAAE,mBAA8B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { chromium } from "playwright";
2
+ // This module is checked independently so browser consumers never load Electron's DOM declarations.
3
+ export const gameCaptureChromium = chromium;
4
+ //# sourceMappingURL=playwright-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright-contract.js","sourceRoot":"","sources":["../../src/renderer3d/playwright-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,oGAAoG;AACpG,MAAM,CAAC,MAAM,mBAAmB,GAAwB,QAAQ,CAAC"}
@@ -0,0 +1,79 @@
1
+ import type { GameAssetBinding3D } from "@nodetool-ai/protocol";
2
+ export interface GameModelBudgets {
3
+ readonly maxSourceBytes: number;
4
+ readonly maxGeometryBytes: number;
5
+ readonly maxTextureBytes: number;
6
+ readonly maxTriangles: number;
7
+ readonly maxNodes: number;
8
+ }
9
+ export declare const GAME_MODEL_BUDGETS: GameModelBudgets;
10
+ export interface PreparedGameModel {
11
+ readonly bytes: Uint8Array;
12
+ readonly digest: string;
13
+ readonly preparationVersion: "1";
14
+ readonly nodeIds: readonly string[];
15
+ readonly clipIds: readonly string[];
16
+ readonly extensions: readonly string[];
17
+ readonly geometryBytes: number;
18
+ readonly textureBytes: number;
19
+ readonly triangles: number;
20
+ readonly bounds: {
21
+ readonly min: {
22
+ readonly x: number;
23
+ readonly y: number;
24
+ readonly z: number;
25
+ };
26
+ readonly max: {
27
+ readonly x: number;
28
+ readonly y: number;
29
+ readonly z: number;
30
+ };
31
+ };
32
+ }
33
+ export interface GameModelDiagnostic {
34
+ readonly code: string;
35
+ readonly path: string;
36
+ readonly message: string;
37
+ }
38
+ export type PrepareGameModelResult = {
39
+ readonly ok: true;
40
+ readonly model: PreparedGameModel;
41
+ } | {
42
+ readonly ok: false;
43
+ readonly diagnostics: readonly GameModelDiagnostic[];
44
+ };
45
+ export interface GameModelSceneGraph3D {
46
+ readonly nodes: readonly {
47
+ readonly children: readonly number[];
48
+ }[];
49
+ readonly scenes: readonly {
50
+ readonly nodes: readonly number[];
51
+ }[];
52
+ readonly scene?: number;
53
+ }
54
+ /** Selects the same explicit/default scene as GLTFLoader and validates scene root references. */
55
+ export declare function selectedGameModelSceneRoots3D(document: GameModelSceneGraph3D): readonly number[];
56
+ /** Checks the closed GLB profile before any browser loader can issue a request. */
57
+ export declare function prepareGameModel(source: Uint8Array, options?: {
58
+ readonly budgets?: Partial<GameModelBudgets>;
59
+ readonly expectedDigest?: string;
60
+ readonly signal?: AbortSignal;
61
+ }): Promise<PrepareGameModelResult>;
62
+ export type PrepareGameModelBinding3DResult = {
63
+ readonly ok: true;
64
+ readonly bytes: Uint8Array;
65
+ readonly binding: Extract<GameAssetBinding3D, {
66
+ readonly mediaKind: "model";
67
+ }>;
68
+ } | {
69
+ readonly ok: false;
70
+ readonly diagnostics: readonly GameModelDiagnostic[];
71
+ };
72
+ /** Derives installation metadata from verified bytes rather than caller-supplied claims. */
73
+ export declare function prepareGameModelBinding3D(bytes: Uint8Array, options: {
74
+ readonly assetId: string;
75
+ readonly expectedDigest?: string;
76
+ readonly signal?: AbortSignal;
77
+ readonly provenance?: string;
78
+ }): Promise<PrepareGameModelBinding3DResult>;
79
+ //# sourceMappingURL=preparation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preparation.d.ts","sourceRoot":"","sources":["../../src/renderer3d/preparation.ts"],"names":[],"mappings":"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"}