@vulfram/engine 0.19.3-alpha → 0.20.1-alpha

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.
@@ -1,5 +1,11 @@
1
1
  import { createWorldUI as createWorldUIRaw } from '../api';
2
2
  import type { UiFocusCycleMode } from '../ecs';
3
+ import type {
4
+ CmdRealmRenderGraphBindArgs,
5
+ CmdRenderGraphDisposeArgs,
6
+ CmdRenderGraphListArgs,
7
+ CmdRenderGraphUpsertArgs,
8
+ } from '../../types/cmds/render-graph';
3
9
  import type {
4
10
  CmdUiAccessKitActionRequestArgs,
5
11
  CmdUiApplyOpsArgs,
@@ -25,6 +31,7 @@ import { EngineError } from '../errors';
25
31
  import { getWorldOrThrow } from '../bridge/guards';
26
32
  import {
27
33
  getUiEvents as getUiEventsRaw,
34
+ getWorldRealmId as getWorldRealmIdRaw,
28
35
  uiAccessKitActionRequest as uiAccessKitActionRequestRaw,
29
36
  uiApplyOps as uiApplyOpsRaw,
30
37
  uiClipboardPaste as uiClipboardPasteRaw,
@@ -41,18 +48,22 @@ import {
41
48
  uiFocusNext as uiFocusNextRaw,
42
49
  uiFormDispose as uiFormDisposeRaw,
43
50
  uiFormUpsert as uiFormUpsertRaw,
51
+ bindRealmRenderGraph as bindRealmRenderGraphRaw,
52
+ disposeRenderGraph as disposeRenderGraphRaw,
44
53
  uiGetDocumentTree as uiGetDocumentTreeRaw,
45
54
  uiGetFocus as uiGetFocusRaw,
46
55
  uiGetLayoutRects as uiGetLayoutRectsRaw,
56
+ listRenderGraphs as listRenderGraphsRaw,
47
57
  uiScreenshotReply as uiScreenshotReplyRaw,
48
58
  uiSetDebug as uiSetDebugRaw,
49
59
  uiSetDocumentRect as uiSetDocumentRectRaw,
50
60
  uiSetDocumentTheme as uiSetDocumentThemeRaw,
51
61
  uiSetEventTrace as uiSetEventTraceRaw,
52
62
  uiSetFocus as uiSetFocusRaw,
63
+ upsertRenderGraph as upsertRenderGraphRaw,
53
64
  } from './entities';
54
- import type { WorldUIId } from './types';
55
- import { asWorldNumber, asWorldUIId } from './types';
65
+ import type { CommandId, WorldUIId } from './types';
66
+ import { asCommandId, asWorldNumber, asWorldUIId } from './types';
56
67
 
57
68
  type CreateUIWorldOptions = {
58
69
  importance?: number;
@@ -102,6 +113,43 @@ export function createUIWorld(options?: CreateUIWorldOptions): WorldUIId {
102
113
  return asWorldUIId(createWorldUIRaw(options));
103
114
  }
104
115
 
116
+ /** Returns resolved core realm id for this UI world, or `null` if not ready yet. */
117
+ export function getUIWorldRealmId(worldId: WorldUIId): number | null {
118
+ return getWorldRealmIdRaw(asWorldNumber(worldId));
119
+ }
120
+
121
+ /** Creates or updates a render graph definition in core. */
122
+ export function upsertUIRenderGraph(
123
+ worldId: WorldUIId,
124
+ args: CmdRenderGraphUpsertArgs,
125
+ ): CommandId {
126
+ return asCommandId(upsertRenderGraphRaw(asWorldNumber(worldId), args));
127
+ }
128
+
129
+ /** Disposes a render graph definition from core. */
130
+ export function disposeUIRenderGraph(
131
+ worldId: WorldUIId,
132
+ args: CmdRenderGraphDisposeArgs,
133
+ ): CommandId {
134
+ return asCommandId(disposeRenderGraphRaw(asWorldNumber(worldId), args));
135
+ }
136
+
137
+ /** Requests render graph catalog from core. */
138
+ export function listUIRenderGraphs(
139
+ worldId: WorldUIId,
140
+ args: CmdRenderGraphListArgs = {},
141
+ ): CommandId {
142
+ return asCommandId(listRenderGraphsRaw(asWorldNumber(worldId), args));
143
+ }
144
+
145
+ /** Binds realm to a render graph id. */
146
+ export function bindUIRealmRenderGraph(
147
+ worldId: WorldUIId,
148
+ args: CmdRealmRenderGraphBindArgs,
149
+ ): CommandId {
150
+ return asCommandId(bindRealmRenderGraphRaw(asWorldNumber(worldId), args));
151
+ }
152
+
105
153
  /** Defines a theme in a UI world. */
106
154
  export function defineUITheme(
107
155
  worldId: WorldUIId,
@@ -26,6 +26,12 @@ import type {
26
26
  CmdGizmoDrawLineArgs,
27
27
  } from '../../types/cmds/gizmo';
28
28
  import type { CmdPoseUpdateArgs } from '../../types/cmds/model';
29
+ import type {
30
+ CmdRealmRenderGraphBindArgs,
31
+ CmdRenderGraphDisposeArgs,
32
+ CmdRenderGraphListArgs,
33
+ CmdRenderGraphUpsertArgs,
34
+ } from '../../types/cmds/render-graph';
29
35
  import type { ShadowConfig } from '../../types/cmds/shadow';
30
36
  import type { CmdTargetMeasurementArgs } from '../../types/cmds/target';
31
37
  import type { NotificationLevel } from '../../types/kinds';
@@ -46,6 +52,7 @@ import {
46
52
  createModel as createModelRaw,
47
53
  createTexture as createTextureRaw,
48
54
  createTag as createTagRaw,
55
+ disposeRenderGraph as disposeRenderGraphRaw,
49
56
  disposeGeometry as disposeGeometryRaw,
50
57
  disposeMaterial as disposeMaterialRaw,
51
58
  disposeTexture as disposeTextureRaw,
@@ -65,6 +72,8 @@ import {
65
72
  getPointerTargetPosition as getPointerTargetPositionRaw,
66
73
  getPointerTargetUv as getPointerTargetUvRaw,
67
74
  getPointerWindowSize as getPointerWindowSizeRaw,
75
+ getWindowLifecycleState as getWindowLifecycleStateRaw,
76
+ getWindowPointerCaptureState as getWindowPointerCaptureStateRaw,
68
77
  getWindowSize as getWindowSizeRaw,
69
78
  getWorldRealmId as getWorldRealmIdRaw,
70
79
  isImeEnabled as isImeEnabledRaw,
@@ -77,12 +86,15 @@ import {
77
86
  listLights as listLightsRaw,
78
87
  listMaterials as listMaterialsRaw,
79
88
  listModels as listModelsRaw,
89
+ listRenderGraphs as listRenderGraphsRaw,
80
90
  listTextures as listTexturesRaw,
81
91
  measureTarget as measureTargetRaw,
82
92
  poseUpdate as poseUpdateRaw,
83
93
  removeEntity as removeEntityRaw,
84
94
  sendNotification as sendNotificationRaw,
85
95
  setParent as setParentRaw,
96
+ bindRealmRenderGraph as bindRealmRenderGraphRaw,
97
+ upsertRenderGraph as upsertRenderGraphRaw,
86
98
  upsertInputTargetListener as upsertInputTargetListenerRaw,
87
99
  listInputTargetListeners as listInputTargetListenersRaw,
88
100
  updateTransform as updateTransformRaw,
@@ -313,6 +325,38 @@ export function list3DCameras(worldId: World3DId): CommandId {
313
325
  return asCommandId(listCamerasRaw(asWorldNumber(worldId)));
314
326
  }
315
327
 
328
+ /** Creates or updates a render graph definition in core. */
329
+ export function upsert3DRenderGraph(
330
+ worldId: World3DId,
331
+ args: CmdRenderGraphUpsertArgs,
332
+ ): CommandId {
333
+ return asCommandId(upsertRenderGraphRaw(asWorldNumber(worldId), args));
334
+ }
335
+
336
+ /** Disposes a render graph definition from core. */
337
+ export function dispose3DRenderGraph(
338
+ worldId: World3DId,
339
+ args: CmdRenderGraphDisposeArgs,
340
+ ): CommandId {
341
+ return asCommandId(disposeRenderGraphRaw(asWorldNumber(worldId), args));
342
+ }
343
+
344
+ /** Requests render graph catalog from core. */
345
+ export function list3DRenderGraphs(
346
+ worldId: World3DId,
347
+ args: CmdRenderGraphListArgs = {},
348
+ ): CommandId {
349
+ return asCommandId(listRenderGraphsRaw(asWorldNumber(worldId), args));
350
+ }
351
+
352
+ /** Binds realm to a render graph id. */
353
+ export function bind3DRealmRenderGraph(
354
+ worldId: World3DId,
355
+ args: CmdRealmRenderGraphBindArgs,
356
+ ): CommandId {
357
+ return asCommandId(bindRealmRenderGraphRaw(asWorldNumber(worldId), args));
358
+ }
359
+
316
360
  /** Requests target measurement for this world context. */
317
361
  export function measure3DTarget(
318
362
  worldId: World3DId,
@@ -403,6 +447,20 @@ export function get3DWindowSize(worldId: World3DId): [number, number] {
403
447
  return getWindowSizeRaw(asWorldNumber(worldId));
404
448
  }
405
449
 
450
+ /** Returns latest lifecycle state reported by the window subsystem. */
451
+ export function get3DWindowLifecycleState(
452
+ worldId: World3DId,
453
+ ): 'minimized' | 'maximized' | 'windowed' | 'fullscreen' | 'windowed-fullscreen' | null {
454
+ return getWindowLifecycleStateRaw(asWorldNumber(worldId));
455
+ }
456
+
457
+ /** Returns latest pointer-capture snapshot reported by the window subsystem. */
458
+ export function get3DWindowPointerCaptureState(
459
+ worldId: World3DId,
460
+ ): { mode: 'none' | 'confined' | 'locked'; active: boolean; reason?: string } | null {
461
+ return getWindowPointerCaptureStateRaw(asWorldNumber(worldId));
462
+ }
463
+
406
464
  /** Returns current pointer position in window space. */
407
465
  export function get3DPointerPosition(worldId: World3DId): [number, number] {
408
466
  return getPointerPositionRaw(asWorldNumber(worldId));
@@ -14,9 +14,18 @@ export interface SkyboxConfig {
14
14
  groundColor: [number, number, number];
15
15
  horizonColor: [number, number, number];
16
16
  skyColor: [number, number, number];
17
+ horizonGroundThreshold?: number;
18
+ horizonSkyThreshold?: number;
19
+ directionalLights?: SkyboxDirectionalLightSun[];
17
20
  cubemapTextureId?: number | null;
18
21
  }
19
22
 
23
+ export interface SkyboxDirectionalLightSun {
24
+ lightId: number;
25
+ solidSize?: number;
26
+ gradientSize?: number;
27
+ }
28
+
20
29
  /** Post-processing configuration. */
21
30
  export interface PostProcessConfig {
22
31
  filterEnabled: boolean;
@@ -8,6 +8,7 @@ import * as Lite from './light';
8
8
  import * as Mat from './material';
9
9
  import * as Mod from './model';
10
10
  import * as Realm from './realm';
11
+ import * as RenderGraph from './render-graph';
11
12
  import * as Sys from './system';
12
13
  import * as Target from './target';
13
14
  import * as Tex from './texture';
@@ -133,6 +134,22 @@ export type EngineCmd =
133
134
  | { type: 'cmd-shadow-configure'; content: import('./shadow').CmdShadowConfigureArgs }
134
135
  | { type: 'cmd-realm-create'; content: Realm.CmdRealmCreateArgs }
135
136
  | { type: 'cmd-realm-dispose'; content: Realm.CmdRealmDisposeArgs }
137
+ | {
138
+ type: 'cmd-render-graph-upsert';
139
+ content: RenderGraph.CmdRenderGraphUpsertArgs;
140
+ }
141
+ | {
142
+ type: 'cmd-render-graph-dispose';
143
+ content: RenderGraph.CmdRenderGraphDisposeArgs;
144
+ }
145
+ | {
146
+ type: 'cmd-render-graph-list';
147
+ content: RenderGraph.CmdRenderGraphListArgs;
148
+ }
149
+ | {
150
+ type: 'cmd-realm-render-graph-bind';
151
+ content: RenderGraph.CmdRealmRenderGraphBindArgs;
152
+ }
136
153
  | { type: 'cmd-target-upsert'; content: Target.CmdTargetUpsertArgs }
137
154
  | {
138
155
  type: 'cmd-target-measurement';
@@ -277,6 +294,22 @@ export type CommandResponse =
277
294
  }
278
295
  | { type: 'realm-create'; content: Realm.CmdResultRealmCreate }
279
296
  | { type: 'realm-dispose'; content: Realm.CmdResultRealmDispose }
297
+ | {
298
+ type: 'render-graph-upsert';
299
+ content: RenderGraph.CmdResultRenderGraphUpsert;
300
+ }
301
+ | {
302
+ type: 'render-graph-dispose';
303
+ content: RenderGraph.CmdResultRenderGraphDispose;
304
+ }
305
+ | {
306
+ type: 'render-graph-list';
307
+ content: RenderGraph.CmdResultRenderGraphList;
308
+ }
309
+ | {
310
+ type: 'realm-render-graph-bind';
311
+ content: RenderGraph.CmdResultRealmRenderGraphBind;
312
+ }
280
313
  | { type: 'target-upsert'; content: Target.CmdResultTargetUpsert }
281
314
  | {
282
315
  type: 'target-measurement';
@@ -37,13 +37,47 @@ export interface RenderGraphDesc {
37
37
  fallback?: boolean;
38
38
  }
39
39
 
40
- export interface CmdRenderGraphSetArgs {
41
- windowId: number;
40
+ export interface CmdRenderGraphUpsertArgs {
41
+ renderGraphId: number;
42
42
  graph: RenderGraphDesc;
43
43
  }
44
44
 
45
- export interface CmdResultRenderGraphSet {
45
+ export interface CmdResultRenderGraphUpsert {
46
+ success: boolean;
47
+ message: string;
48
+ }
49
+
50
+ export interface CmdRenderGraphDisposeArgs {
51
+ renderGraphId: number;
52
+ }
53
+
54
+ export interface CmdResultRenderGraphDispose {
55
+ success: boolean;
56
+ message: string;
57
+ }
58
+
59
+ export interface CmdRenderGraphListArgs {}
60
+
61
+ export interface RenderGraphEntry {
62
+ renderGraphId: number;
63
+ descHash: number;
64
+ passCount: number;
65
+ passIds: string[];
66
+ boundRealmIds: number[];
67
+ }
68
+
69
+ export interface CmdResultRenderGraphList {
70
+ success: boolean;
71
+ message: string;
72
+ renderGraphs: RenderGraphEntry[];
73
+ }
74
+
75
+ export interface CmdRealmRenderGraphBindArgs {
76
+ realmId: number;
77
+ renderGraphId: number;
78
+ }
79
+
80
+ export interface CmdResultRealmRenderGraphBind {
46
81
  success: boolean;
47
- fallbackUsed: boolean;
48
82
  message: string;
49
83
  }
@@ -17,7 +17,7 @@ export type UiViewportCommand =
17
17
  | { type: 'focus' }
18
18
  | { type: 'screenshot' }
19
19
  | { type: 'cursor-visible'; content: { value: boolean } }
20
- | { type: 'cursor-grab'; content: { mode: CursorGrabMode } }
20
+ | { type: 'cursor-grab'; content: { mode: CursorGrabMode | string } }
21
21
  | { type: 'ime-allowed'; content: { value: boolean } }
22
22
  | {
23
23
  type: 'ime-rect';
@@ -1,3 +1,5 @@
1
+ import type { CursorGrabMode, WindowState } from '../kinds';
2
+
1
3
  /** Payload for window create event. */
2
4
  export interface WindowEventOnCreateData {
3
5
  windowId: number;
@@ -76,6 +78,25 @@ export interface WindowEventOnThemeChangeData {
76
78
  darkMode: boolean;
77
79
  }
78
80
 
81
+ /** Payload for lifecycle state change event. */
82
+ export interface WindowEventOnStateChangeData {
83
+ windowId: number;
84
+ state: WindowState;
85
+ }
86
+
87
+ /** Pointer capture snapshot from window runtime. */
88
+ export interface WindowPointerCaptureState {
89
+ mode: CursorGrabMode;
90
+ active: boolean;
91
+ reason?: string;
92
+ }
93
+
94
+ /** Payload for pointer capture mode/activation updates. */
95
+ export interface WindowEventOnPointerCaptureChangeData {
96
+ windowId: number;
97
+ capture: WindowPointerCaptureState;
98
+ }
99
+
79
100
  /** Discriminated union of window events. */
80
101
  export type WindowEvent =
81
102
  | { event: 'on-create'; data: WindowEventOnCreateData }
@@ -93,4 +114,9 @@ export type WindowEvent =
93
114
  | { event: 'on-file-drop'; data: WindowEventOnFileDropData }
94
115
  | { event: 'on-file-hover'; data: WindowEventOnFileHoverData }
95
116
  | { event: 'on-file-hover-cancel'; data: WindowEventOnFileHoverCancelData }
96
- | { event: 'on-theme-change'; data: WindowEventOnThemeChangeData };
117
+ | { event: 'on-theme-change'; data: WindowEventOnThemeChangeData }
118
+ | { event: 'on-state-change'; data: WindowEventOnStateChangeData }
119
+ | {
120
+ event: 'on-pointer-capture-change';
121
+ data: WindowEventOnPointerCaptureChangeData;
122
+ };