@babylonjs/inspector 8.47.0-preview → 8.47.1-preview

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,11 +1,9 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
- import { F as FileUploadLine, S as SwitchPropertyLine, C as Collapse, N as NumberDropdownPropertyLine, T as ToolsServiceIdentity } from './index-D89pOD_y.js';
3
- import { useState } from 'react';
4
- import { ImportAnimationsAsync } from '@babylonjs/core/Loading/sceneLoader.js';
5
- import { FilesInput } from '@babylonjs/core/Misc/filesInput.js';
6
- import { Logger } from '@babylonjs/core/Misc/logger.js';
2
+ import { T as TextInputPropertyLine, N as NumberInputPropertyLine, e as ButtonLine, f as ToolsServiceIdentity } from './index-BDtiVo5p.js';
3
+ import { useState, useRef, useCallback } from 'react';
4
+ import { Reflector } from '@babylonjs/core/Misc/reflector.js';
5
+ import { PlugConnectedRegular } from '@fluentui/react-icons';
7
6
  import '@fluentui/react-components';
8
- import '@fluentui/react-icons';
9
7
  import '@babylonjs/core/Maths/math.color.js';
10
8
  import '@babylonjs/core/Maths/math.vector.js';
11
9
  import '@babylonjs/core/Misc/observable.js';
@@ -14,6 +12,7 @@ import '@fluentui/react-motion-components-preview';
14
12
  import 'usehooks-ts';
15
13
  import '@babylonjs/core/Misc/asyncLock.js';
16
14
  import '@babylonjs/core/Misc/deferred.js';
15
+ import '@babylonjs/core/Misc/logger.js';
17
16
  import '@babylonjs/core/Maths/math.scalar.functions.js';
18
17
  import '@fluentui-contrib/react-virtualizer';
19
18
  import '@babylonjs/addons/msdfText/fontAsset.js';
@@ -35,6 +34,8 @@ import '@babylonjs/core/Engines/WebGPU/Extensions/engine.query.js';
35
34
  import '@babylonjs/core/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js';
36
35
  import '@babylonjs/core/Misc/PerformanceViewer/performanceViewerSceneExtension.js';
37
36
  import '@babylonjs/core/Misc/pressureObserverWrapper.js';
37
+ import '@babylonjs/core/Maths/math.scalar.js';
38
+ import '@babylonjs/core/Misc/PerformanceViewer/performanceViewerCollector.js';
38
39
  import '@babylonjs/core/Engines/abstractEngine.js';
39
40
  import 'react-dom/client';
40
41
  import '@babylonjs/core/FrameGraph/frameGraphUtils.js';
@@ -102,6 +103,8 @@ import '@babylonjs/core/Particles/EmitterTypes/pointParticleEmitter.js';
102
103
  import '@babylonjs/core/Particles/EmitterTypes/sphereParticleEmitter.js';
103
104
  import '@babylonjs/core/Particles/attractor.js';
104
105
  import '@babylonjs/core/Meshes/Builders/sphereBuilder.js';
106
+ import '@babylonjs/core/Particles/Node/Blocks/particleInputBlock.js';
107
+ import '@babylonjs/core/Particles/Node/Blocks/Update/updateAttractorBlock.js';
105
108
  import '@babylonjs/core/Particles/Node/Enums/nodeParticleBlockConnectionPointTypes.js';
106
109
  import '@babylonjs/core/Meshes/transformNode.js';
107
110
  import '@babylonjs/core/Physics/v2/IPhysicsEnginePlugin.js';
@@ -133,70 +136,55 @@ import '@babylonjs/core/Rendering/boundingBoxRenderer.js';
133
136
  import '@babylonjs/core/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.js';
134
137
  import '@babylonjs/core/Sprites/spriteSceneComponent.js';
135
138
  import '@babylonjs/core/Materials/Textures/dynamicTexture.js';
139
+ import '@babylonjs/core/Misc/equirectangularCapture.js';
140
+ import '@babylonjs/core/Misc/sceneRecorder.js';
141
+ import '@babylonjs/core/Misc/screenshotTools.js';
142
+ import '@babylonjs/core/Misc/videoRecorder.js';
143
+ import '@babylonjs/core/Misc/sceneSerializer.js';
144
+ import '@babylonjs/core/Misc/environmentTextureTools.js';
145
+ import '@babylonjs/core/Loading/sceneLoader.js';
146
+ import '@babylonjs/core/Misc/filesInput.js';
147
+ import '@babylonjs/loaders/glTF/glTFFileLoader.js';
148
+ import '@babylonjs/loaders/glTF/glTFValidation.js';
136
149
  import '@babylonjs/core/Engines/engineStore.js';
137
150
  import '@babylonjs/core/Misc/uniqueIdGenerator.js';
138
151
  import '@babylonjs/core/Debug/debugLayer.js';
139
152
  import '@babylonjs/core/Misc/lazy.js';
140
153
 
141
- const AnimationGroupLoadingModes = [
142
- { label: "Clean", value: 0 /* SceneLoaderAnimationGroupLoadingMode.Clean */ },
143
- { label: "Stop", value: 1 /* SceneLoaderAnimationGroupLoadingMode.Stop */ },
144
- { label: "Sync", value: 2 /* SceneLoaderAnimationGroupLoadingMode.Sync */ },
145
- { label: "NoSync", value: 3 /* SceneLoaderAnimationGroupLoadingMode.NoSync */ },
146
- ];
147
- const ImportAnimationsTools = ({ scene }) => {
148
- const [importDefaults, setImportDefaults] = useState({
149
- overwriteAnimations: true,
150
- animationGroupLoadingMode: 0 /* SceneLoaderAnimationGroupLoadingMode.Clean */,
151
- });
152
- const importAnimations = (event) => {
153
- const reloadAsync = async function (sceneFile) {
154
- if (sceneFile) {
155
- try {
156
- await ImportAnimationsAsync(sceneFile, scene, {
157
- overwriteAnimations: importDefaults.overwriteAnimations,
158
- animationGroupLoadingMode: importDefaults.animationGroupLoadingMode,
159
- });
160
- if (scene.animationGroups.length > 0) {
161
- const currentGroup = scene.animationGroups[0];
162
- currentGroup.play(true);
163
- }
164
- }
165
- catch (error) {
166
- Logger.Error(`Error importing animations: ${error}`);
167
- }
168
- }
169
- };
170
- const filesInputAnimation = new FilesInput(scene.getEngine(), scene, null, null, null, null, null, reloadAsync, null);
171
- filesInputAnimation.loadFiles(event);
172
- filesInputAnimation.dispose();
173
- };
174
- return (jsxs(Fragment, { children: [jsx(FileUploadLine, { label: "Import Animations", accept: "gltf", onClick: (evt) => importAnimations(evt) }), jsx(SwitchPropertyLine, { label: "Overwrite Animations", value: importDefaults.overwriteAnimations, onChange: (value) => {
175
- setImportDefaults({ ...importDefaults, overwriteAnimations: value });
176
- } }), jsx(Collapse, { visible: !importDefaults.overwriteAnimations, children: jsx(NumberDropdownPropertyLine, { label: "Animation Merge Mode", options: AnimationGroupLoadingModes, value: importDefaults.animationGroupLoadingMode, onChange: (value) => {
177
- setImportDefaults({ ...importDefaults, animationGroupLoadingMode: value });
178
- } }) })] }));
154
+ const ReflectorTools = ({ scene }) => {
155
+ const [hostname, setHostname] = useState("localhost");
156
+ const [port, setPort] = useState(1234);
157
+ const reflectorRef = useRef(null);
158
+ const connectReflector = useCallback(() => {
159
+ if (reflectorRef.current) {
160
+ reflectorRef.current.close();
161
+ }
162
+ reflectorRef.current = new Reflector(scene, hostname, port);
163
+ }, [scene, hostname, port]);
164
+ return (jsxs(Fragment, { children: [jsx(TextInputPropertyLine, { label: "Hostname", value: hostname, onChange: (value) => setHostname(value) }), jsx(NumberInputPropertyLine, { label: "Port", value: port, onChange: (value) => setPort(value), forceInt: true }), jsx(ButtonLine, { label: "Connect", icon: PlugConnectedRegular, onClick: connectReflector })] }));
179
165
  };
180
166
 
181
- const SceneImportServiceDefinition = {
182
- friendlyName: "Import Tool",
167
+ const ReflectorServiceDefinition = {
168
+ friendlyName: "Reflector Tools",
183
169
  consumes: [ToolsServiceIdentity],
184
170
  factory: (toolsService) => {
185
- const contentRegistration = toolsService.addSectionContent({
186
- key: "AnimationImport",
187
- section: "Animation Import",
188
- component: ({ context }) => jsx(ImportAnimationsTools, { scene: context }),
189
- });
171
+ const contentRegistrations = [];
172
+ // Reflector content
173
+ contentRegistrations.push(toolsService.addSectionContent({
174
+ key: "Reflector",
175
+ section: "Reflector",
176
+ component: ({ context }) => jsx(ReflectorTools, { scene: context }),
177
+ }));
190
178
  return {
191
179
  dispose: () => {
192
- contentRegistration.dispose();
180
+ contentRegistrations.forEach((registration) => registration.dispose());
193
181
  },
194
182
  };
195
183
  },
196
184
  };
197
- var importService = {
198
- serviceDefinitions: [SceneImportServiceDefinition],
185
+ var reflectorService = {
186
+ serviceDefinitions: [ReflectorServiceDefinition],
199
187
  };
200
188
 
201
- export { SceneImportServiceDefinition, importService as default };
202
- //# sourceMappingURL=importService-BG3n3RAJ.js.map
189
+ export { ReflectorServiceDefinition, reflectorService as default };
190
+ //# sourceMappingURL=reflectorService-ChA54PIt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflectorService-ChA54PIt.js","sources":["../../../../../../../../dev/inspector-v2/src/components/tools/reflectorTools.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/tools/reflectorService.tsx"],"sourcesContent":["import { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { useState, useCallback, useRef } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { TextInputPropertyLine, NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { Reflector } from \"core/Misc/reflector\";\r\nimport { PlugConnectedRegular } from \"@fluentui/react-icons\";\r\n\r\nexport const ReflectorTools: FunctionComponent<{ scene: Scene }> = ({ scene }) => {\r\n const [hostname, setHostname] = useState(\"localhost\");\r\n const [port, setPort] = useState(1234);\r\n const reflectorRef = useRef<Reflector | null>(null);\r\n\r\n const connectReflector = useCallback(() => {\r\n if (reflectorRef.current) {\r\n reflectorRef.current.close();\r\n }\r\n\r\n reflectorRef.current = new Reflector(scene, hostname, port);\r\n }, [scene, hostname, port]);\r\n\r\n return (\r\n <>\r\n <TextInputPropertyLine label=\"Hostname\" value={hostname} onChange={(value) => setHostname(value)} />\r\n <NumberInputPropertyLine label=\"Port\" value={port} onChange={(value) => setPort(value)} forceInt />\r\n <ButtonLine label=\"Connect\" icon={PlugConnectedRegular} onClick={connectReflector} />\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport { ToolsServiceIdentity } from \"../toolsService\";\r\nimport type { IToolsService } from \"../toolsService\";\r\nimport type { IDisposable } from \"core/scene\";\r\nimport { ReflectorTools } from \"../../../components/tools/reflectorTools\";\r\n\r\nexport const ReflectorServiceDefinition: ServiceDefinition<[], [IToolsService]> = {\r\n friendlyName: \"Reflector Tools\",\r\n consumes: [ToolsServiceIdentity],\r\n factory: (toolsService) => {\r\n const contentRegistrations: IDisposable[] = [];\r\n\r\n // Reflector content\r\n contentRegistrations.push(\r\n toolsService.addSectionContent({\r\n key: \"Reflector\",\r\n section: \"Reflector\",\r\n component: ({ context }) => <ReflectorTools scene={context} />,\r\n })\r\n );\r\n\r\n return {\r\n dispose: () => {\r\n contentRegistrations.forEach((registration) => registration.dispose());\r\n },\r\n };\r\n },\r\n};\r\n\r\nexport default {\r\n serviceDefinitions: [ReflectorServiceDefinition],\r\n} as const;\r\n"],"names":["_jsxs","_Fragment","_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQO,MAAM,cAAc,GAAwC,CAAC,EAAE,KAAK,EAAE,KAAI;IAC7E,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC;IACrD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;AACtC,IAAA,MAAM,YAAY,GAAG,MAAM,CAAmB,IAAI,CAAC;AAEnD,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAK;AACtC,QAAA,IAAI,YAAY,CAAC,OAAO,EAAE;AACtB,YAAA,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE;;AAGhC,QAAA,YAAY,CAAC,OAAO,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC;KAC9D,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAE3B,IAAA,QACIA,IAAA,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAA,CACIC,GAAC,CAAA,qBAAqB,IAAC,KAAK,EAAC,UAAU,EAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC,EAAA,CAAI,EACpGA,GAAA,CAAC,uBAAuB,EAAA,EAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAG,IAAA,EAAA,CAAA,EACnGA,GAAC,CAAA,UAAU,EAAC,EAAA,KAAK,EAAC,SAAS,EAAC,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,gBAAgB,EAAI,CAAA,CAAA,EAAA,CACtF;AAEX,CAAC;;ACtBY,MAAA,0BAA0B,GAA2C;AAC9E,IAAA,YAAY,EAAE,iBAAiB;IAC/B,QAAQ,EAAE,CAAC,oBAAoB,CAAC;AAChC,IAAA,OAAO,EAAE,CAAC,YAAY,KAAI;QACtB,MAAM,oBAAoB,GAAkB,EAAE;;AAG9C,QAAA,oBAAoB,CAAC,IAAI,CACrB,YAAY,CAAC,iBAAiB,CAAC;AAC3B,YAAA,GAAG,EAAE,WAAW;AAChB,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,KAAKA,GAAA,CAAC,cAAc,EAAA,EAAC,KAAK,EAAE,OAAO,EAAI,CAAA;AACjE,SAAA,CAAC,CACL;QAED,OAAO;YACH,OAAO,EAAE,MAAK;AACV,gBAAA,oBAAoB,CAAC,OAAO,CAAC,CAAC,YAAY,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;aACzE;SACJ;KACJ;;AAGL,uBAAe;IACX,kBAAkB,EAAE,CAAC,0BAA0B,CAAC;CAC1C;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@babylonjs/inspector",
3
- "version": "8.47.0-preview",
3
+ "version": "8.47.1-preview",
4
4
  "type": "module",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib/index.js",
@@ -1,220 +0,0 @@
1
- import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
- import { B as ButtonLine, a as SyncedSliderPropertyLine, S as SwitchPropertyLine, C as Collapse, T as ToolsServiceIdentity } from './index-D89pOD_y.js';
3
- import { useState, useRef, useCallback } from 'react';
4
- import { Tools } from '@babylonjs/core/Misc/tools.js';
5
- import { VideoRecorder } from '@babylonjs/core/Misc/videoRecorder.js';
6
- import { captureEquirectangularFromScene } from '@babylonjs/core/Misc/equirectangularCapture.js';
7
- import { CameraRegular, RecordStopRegular, RecordRegular } from '@fluentui/react-icons';
8
- import { FrameGraphUtils } from '@babylonjs/core/FrameGraph/frameGraphUtils.js';
9
- import '@fluentui/react-components';
10
- import '@babylonjs/core/Maths/math.color.js';
11
- import '@babylonjs/core/Maths/math.vector.js';
12
- import '@babylonjs/core/Misc/observable.js';
13
- import '@babylonjs/core/Misc/typeStore.js';
14
- import '@fluentui/react-motion-components-preview';
15
- import 'usehooks-ts';
16
- import '@babylonjs/core/Misc/asyncLock.js';
17
- import '@babylonjs/core/Misc/deferred.js';
18
- import '@babylonjs/core/Misc/logger.js';
19
- import '@babylonjs/core/Maths/math.scalar.functions.js';
20
- import '@fluentui-contrib/react-virtualizer';
21
- import '@babylonjs/addons/msdfText/fontAsset.js';
22
- import '@babylonjs/addons/msdfText/textRenderer.js';
23
- import '@babylonjs/core/Debug/physicsViewer.js';
24
- import '@babylonjs/core/Materials/Textures/texture.js';
25
- import '@babylonjs/core/Materials/materialFlags.js';
26
- import '@babylonjs/core/Materials/standardMaterial.js';
27
- import '@babylonjs/core/Meshes/Builders/groundBuilder.js';
28
- import '@babylonjs/core/Rendering/utilityLayerRenderer.js';
29
- import '@babylonjs/materials/grid/gridMaterial.js';
30
- import '@babylonjs/core/Misc/dataStorage.js';
31
- import '@babylonjs/core/Instrumentation/engineInstrumentation.js';
32
- import '@babylonjs/core/Instrumentation/sceneInstrumentation.js';
33
- import '@babylonjs/core/Engines/AbstractEngine/abstractEngine.timeQuery.js';
34
- import '@babylonjs/core/Engines/Extensions/engine.query.js';
35
- import '@babylonjs/core/Engines/WebGPU/Extensions/engine.query.js';
36
- import '@babylonjs/core/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js';
37
- import '@babylonjs/core/Misc/PerformanceViewer/performanceViewerSceneExtension.js';
38
- import '@babylonjs/core/Misc/pressureObserverWrapper.js';
39
- import '@babylonjs/core/Engines/abstractEngine.js';
40
- import 'react-dom/client';
41
- import '@babylonjs/core/Gizmos/cameraGizmo.js';
42
- import '@babylonjs/core/Gizmos/lightGizmo.js';
43
- import '@babylonjs/core/Bones/bone.js';
44
- import '@babylonjs/core/Cameras/camera.js';
45
- import '@babylonjs/core/Gizmos/gizmoManager.js';
46
- import '@babylonjs/core/Lights/light.js';
47
- import '@babylonjs/core/Meshes/abstractMesh.js';
48
- import '@babylonjs/core/node.js';
49
- import '@babylonjs/core/Animations/animationGroup.js';
50
- import '@babylonjs/core/Animations/animation.js';
51
- import '@babylonjs/core/Animations/animationPropertiesOverride.js';
52
- import '@babylonjs/addons/atmosphere/atmosphere.js';
53
- import '@babylonjs/core/Cameras/arcRotateCamera.js';
54
- import '@babylonjs/core/Cameras/followCamera.js';
55
- import '@babylonjs/core/Cameras/freeCamera.js';
56
- import '@babylonjs/core/Cameras/geospatialCamera.js';
57
- import '@babylonjs/core/Cameras/targetCamera.js';
58
- import '@babylonjs/core/scene.js';
59
- import '@babylonjs/core/FrameGraph/frameGraph.js';
60
- import '@babylonjs/core/Lights/directionalLight.js';
61
- import '@babylonjs/core/Lights/hemisphericLight.js';
62
- import '@babylonjs/core/Lights/pointLight.js';
63
- import '@babylonjs/core/Lights/rectAreaLight.js';
64
- import '@babylonjs/core/Lights/shadowLight.js';
65
- import '@babylonjs/core/Lights/spotLight.js';
66
- import '@babylonjs/core/Lights/Shadows/cascadedShadowGenerator.js';
67
- import '@babylonjs/core/Debug/directionalLightFrustumViewer.js';
68
- import '@babylonjs/core/Lights/Shadows/shadowGenerator.js';
69
- import '@babylonjs/core/Lights/Shadows/shadowGeneratorSceneComponent.js';
70
- import '@babylonjs/core/Materials/material.js';
71
- import '@babylonjs/core/Materials/multiMaterial.js';
72
- import '@babylonjs/core/Materials/Node/nodeMaterial.js';
73
- import '@babylonjs/core/Materials/PBR/openpbrMaterial.js';
74
- import '@babylonjs/core/Materials/PBR/pbrBaseMaterial.js';
75
- import '@babylonjs/materials/sky/skyMaterial.js';
76
- import '@babylonjs/core/Engines/constants.js';
77
- import '@babylonjs/core/Engines/engine.js';
78
- import '@babylonjs/core/Particles/particleSystem.js';
79
- import '@babylonjs/core/Materials/Node/Blocks/gradientBlock.js';
80
- import '@babylonjs/core/Materials/Node/Enums/nodeMaterialBlockConnectionPointTypes.js';
81
- import '@babylonjs/core/Misc/gradients.js';
82
- import '@babylonjs/core/Misc/fileTools.js';
83
- import '@babylonjs/core/Materials/Textures/cubeTexture.js';
84
- import '@babylonjs/core/Meshes/GaussianSplatting/gaussianSplattingMesh.js';
85
- import '@babylonjs/core/Meshes/mesh.js';
86
- import '@babylonjs/core/Debug/skeletonViewer.js';
87
- import '@babylonjs/core/Meshes/buffer.js';
88
- import '@babylonjs/core/Meshes/Builders/linesBuilder.js';
89
- import '@babylonjs/core/Meshes/instancedMesh.js';
90
- import '@babylonjs/core/Rendering/renderingManager.js';
91
- import '@babylonjs/core/Rendering/edgesRenderer.js';
92
- import '@babylonjs/core/Rendering/outlineRenderer.js';
93
- import '@babylonjs/core/Particles/gpuParticleSystem.js';
94
- import '@babylonjs/core/Particles/Node/nodeParticleSystemSet.helper.js';
95
- import '@babylonjs/core/Particles/particleHelper.js';
96
- import '@babylonjs/core/Particles/EmitterTypes/boxParticleEmitter.js';
97
- import '@babylonjs/core/Particles/EmitterTypes/coneParticleEmitter.js';
98
- import '@babylonjs/core/Particles/EmitterTypes/cylinderParticleEmitter.js';
99
- import '@babylonjs/core/Particles/EmitterTypes/hemisphericParticleEmitter.js';
100
- import '@babylonjs/core/Particles/EmitterTypes/meshParticleEmitter.js';
101
- import '@babylonjs/core/Particles/EmitterTypes/pointParticleEmitter.js';
102
- import '@babylonjs/core/Particles/EmitterTypes/sphereParticleEmitter.js';
103
- import '@babylonjs/core/Particles/attractor.js';
104
- import '@babylonjs/core/Meshes/Builders/sphereBuilder.js';
105
- import '@babylonjs/core/Particles/Node/Enums/nodeParticleBlockConnectionPointTypes.js';
106
- import '@babylonjs/core/Meshes/transformNode.js';
107
- import '@babylonjs/core/Physics/v2/IPhysicsEnginePlugin.js';
108
- import '@babylonjs/core/Physics/v2/physicsEngineComponent.js';
109
- import '@babylonjs/core/PostProcesses/postProcess.js';
110
- import '@babylonjs/core/PostProcesses/RenderPipeline/postProcessRenderPipeline.js';
111
- import '@babylonjs/core/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js';
112
- import '@babylonjs/core/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js';
113
- import '@babylonjs/core/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js';
114
- import '@babylonjs/core/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js';
115
- import '@babylonjs/core/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js';
116
- import '@babylonjs/core/Rendering/IBLShadows/iblShadowsRenderPipeline.js';
117
- import '@babylonjs/core/Materials/imageProcessingConfiguration.js';
118
- import '@babylonjs/core/Bones/skeleton.js';
119
- import '@babylonjs/core/Sprites/sprite.js';
120
- import '@babylonjs/core/Sprites/spriteManager.js';
121
- import '@babylonjs/core/Misc/textureTools.js';
122
- import '@babylonjs/core/Materials/Textures/baseTexture.js';
123
- import '@babylonjs/core/Materials/Textures/multiRenderTarget.js';
124
- import '@babylonjs/core/Materials/Textures/renderTargetTexture.js';
125
- import '@babylonjs/core/Materials/Textures/thinTexture.js';
126
- import '@babylonjs/core/Events/keyboardEvents.js';
127
- import '@babylonjs/core/Events/pointerEvents.js';
128
- import '@babylonjs/core/Materials/Textures/htmlElementTexture.js';
129
- import '@babylonjs/core/Materials/shaderMaterial.js';
130
- import '@babylonjs/core/Meshes/Builders/planeBuilder.js';
131
- import '@babylonjs/core/Lights/Clustered/clusteredLightContainer.js';
132
- import '@babylonjs/core/Rendering/boundingBoxRenderer.js';
133
- import '@babylonjs/core/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.js';
134
- import '@babylonjs/core/Sprites/spriteSceneComponent.js';
135
- import '@babylonjs/core/Materials/Textures/dynamicTexture.js';
136
- import '@babylonjs/core/Engines/engineStore.js';
137
- import '@babylonjs/core/Misc/uniqueIdGenerator.js';
138
- import '@babylonjs/core/Debug/debugLayer.js';
139
- import '@babylonjs/core/Misc/lazy.js';
140
-
141
- const CaptureRttTools = ({ scene }) => {
142
- const [useWidthHeight, setUseWidthHeight] = useState(false);
143
- const [screenshotSize, setScreenshotSize] = useState({ precision: 1 });
144
- const captureRender = useCallback(async () => {
145
- const sizeToUse = { ...screenshotSize };
146
- if (!useWidthHeight) {
147
- sizeToUse.width = undefined;
148
- sizeToUse.height = undefined;
149
- }
150
- if (scene.activeCamera) {
151
- Tools.CreateScreenshotUsingRenderTarget(scene.getEngine(), scene.activeCamera, sizeToUse, undefined, undefined, 4);
152
- }
153
- }, [scene, screenshotSize, useWidthHeight]);
154
- return (jsxs(Fragment, { children: [jsx(ButtonLine, { label: "Capture", icon: CameraRegular, onClick: captureRender }), jsx(SyncedSliderPropertyLine, { label: "Precision", value: screenshotSize.precision ?? 1, onChange: (value) => setScreenshotSize({ ...screenshotSize, precision: value ?? 1 }), min: 0.1, max: 10, step: 0.1 }), jsx(SwitchPropertyLine, { label: "Use Custom Width/Height", value: useWidthHeight, onChange: (value) => setUseWidthHeight(value) }), jsxs(Collapse, { visible: useWidthHeight, children: [jsx(SyncedSliderPropertyLine, { label: "Width", value: screenshotSize.width ?? 512, onChange: (data) => setScreenshotSize({ ...screenshotSize, width: data ?? 512 }), min: 1, step: 1 }), jsx(SyncedSliderPropertyLine, { label: "Height", value: screenshotSize.height ?? 512, onChange: (data) => setScreenshotSize({ ...screenshotSize, height: data ?? 512 }), min: 1, step: 1 })] })] }));
155
- };
156
- const CaptureScreenshotTools = ({ scene }) => {
157
- const [isRecording, setIsRecording] = useState(false);
158
- const videoRecorder = useRef();
159
- const captureScreenshot = useCallback(() => {
160
- const camera = scene.frameGraph ? FrameGraphUtils.FindMainCamera(scene.frameGraph) : scene.activeCamera;
161
- if (camera) {
162
- Tools.CreateScreenshot(scene.getEngine(), camera, { precision: 1 });
163
- }
164
- }, [scene]);
165
- const captureEquirectangularAsync = useCallback(async () => {
166
- const currentActiveCamera = scene.activeCamera;
167
- if (!currentActiveCamera && scene.frameGraph) {
168
- scene.activeCamera = FrameGraphUtils.FindMainCamera(scene.frameGraph);
169
- }
170
- if (scene.activeCamera) {
171
- await captureEquirectangularFromScene(scene, { size: 1024, filename: "equirectangular_capture.png" });
172
- }
173
- // eslint-disable-next-line require-atomic-updates
174
- scene.activeCamera = currentActiveCamera;
175
- }, [scene]);
176
- const recordVideoAsync = useCallback(async () => {
177
- if (videoRecorder.current && videoRecorder.current.isRecording) {
178
- videoRecorder.current.stopRecording();
179
- setIsRecording(false);
180
- return;
181
- }
182
- if (!videoRecorder.current) {
183
- videoRecorder.current = new VideoRecorder(scene.getEngine());
184
- }
185
- void videoRecorder.current.startRecording();
186
- setIsRecording(true);
187
- }, [scene]);
188
- return (jsxs(Fragment, { children: [jsx(ButtonLine, { label: "Capture", icon: CameraRegular, onClick: captureScreenshot }), jsx(ButtonLine, { label: "Capture Equirectangular", icon: CameraRegular, onClick: captureEquirectangularAsync }), jsx(ButtonLine, { label: isRecording ? "Stop Recording" : "Record Video", icon: isRecording ? RecordStopRegular : RecordRegular, onClick: recordVideoAsync })] }));
189
- };
190
-
191
- const CaptureServiceDefinition = {
192
- friendlyName: "Capture Tools",
193
- consumes: [ToolsServiceIdentity],
194
- factory: (toolsService) => {
195
- const contentRegistrations = [];
196
- // Screenshot capture content
197
- contentRegistrations.push(toolsService.addSectionContent({
198
- key: "Screenshot Capture",
199
- section: "Screenshot Capture",
200
- component: ({ context }) => jsx(CaptureScreenshotTools, { scene: context }),
201
- }));
202
- // RTT capture content
203
- contentRegistrations.push(toolsService.addSectionContent({
204
- key: "RTT Capture",
205
- section: "RTT Capture",
206
- component: ({ context }) => jsx(CaptureRttTools, { scene: context }),
207
- }));
208
- return {
209
- dispose: () => {
210
- contentRegistrations.forEach((registration) => registration.dispose());
211
- },
212
- };
213
- },
214
- };
215
- var captureService = {
216
- serviceDefinitions: [CaptureServiceDefinition],
217
- };
218
-
219
- export { CaptureServiceDefinition, captureService as default };
220
- //# sourceMappingURL=captureService-BvHqJq2V.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"captureService-BvHqJq2V.js","sources":["../../../../../../../../dev/inspector-v2/src/components/tools/captureTools.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/tools/captureService.tsx"],"sourcesContent":["import { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { useState, useRef, useCallback } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport type { IScreenshotSize } from \"core/Misc/interfaces/screenshotSize\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { VideoRecorder } from \"core/Misc/videoRecorder\";\r\nimport { captureEquirectangularFromScene } from \"core/Misc/equirectangularCapture\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\nimport { CameraRegular, RecordRegular, RecordStopRegular } from \"@fluentui/react-icons\";\r\nimport { FrameGraphUtils } from \"core/FrameGraph/frameGraphUtils\";\r\n\r\nexport const CaptureRttTools: FunctionComponent<{ scene: Scene }> = ({ scene }) => {\r\n const [useWidthHeight, setUseWidthHeight] = useState(false);\r\n const [screenshotSize, setScreenshotSize] = useState<IScreenshotSize>({ precision: 1 });\r\n\r\n const captureRender = useCallback(async () => {\r\n const sizeToUse: IScreenshotSize = { ...screenshotSize };\r\n if (!useWidthHeight) {\r\n sizeToUse.width = undefined;\r\n sizeToUse.height = undefined;\r\n }\r\n\r\n if (scene.activeCamera) {\r\n Tools.CreateScreenshotUsingRenderTarget(scene.getEngine(), scene.activeCamera, sizeToUse, undefined, undefined, 4);\r\n }\r\n }, [scene, screenshotSize, useWidthHeight]);\r\n\r\n return (\r\n <>\r\n <ButtonLine label=\"Capture\" icon={CameraRegular} onClick={captureRender} />\r\n <SyncedSliderPropertyLine\r\n label=\"Precision\"\r\n value={screenshotSize.precision ?? 1}\r\n onChange={(value) => setScreenshotSize({ ...screenshotSize, precision: value ?? 1 })}\r\n min={0.1}\r\n max={10}\r\n step={0.1}\r\n />\r\n <SwitchPropertyLine label=\"Use Custom Width/Height\" value={useWidthHeight} onChange={(value) => setUseWidthHeight(value)} />\r\n <Collapse visible={useWidthHeight}>\r\n <SyncedSliderPropertyLine\r\n label=\"Width\"\r\n value={screenshotSize.width ?? 512}\r\n onChange={(data) => setScreenshotSize({ ...screenshotSize, width: data ?? 512 })}\r\n min={1}\r\n step={1}\r\n />\r\n <SyncedSliderPropertyLine\r\n label=\"Height\"\r\n value={screenshotSize.height ?? 512}\r\n onChange={(data) => setScreenshotSize({ ...screenshotSize, height: data ?? 512 })}\r\n min={1}\r\n step={1}\r\n />\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n\r\nexport const CaptureScreenshotTools: FunctionComponent<{ scene: Scene }> = ({ scene }) => {\r\n const [isRecording, setIsRecording] = useState(false);\r\n const videoRecorder = useRef<VideoRecorder>();\r\n\r\n const captureScreenshot = useCallback(() => {\r\n const camera = scene.frameGraph ? FrameGraphUtils.FindMainCamera(scene.frameGraph) : scene.activeCamera;\r\n if (camera) {\r\n Tools.CreateScreenshot(scene.getEngine(), camera, { precision: 1 });\r\n }\r\n }, [scene]);\r\n\r\n const captureEquirectangularAsync = useCallback(async () => {\r\n const currentActiveCamera = scene.activeCamera;\r\n if (!currentActiveCamera && scene.frameGraph) {\r\n scene.activeCamera = FrameGraphUtils.FindMainCamera(scene.frameGraph);\r\n }\r\n if (scene.activeCamera) {\r\n await captureEquirectangularFromScene(scene, { size: 1024, filename: \"equirectangular_capture.png\" });\r\n }\r\n // eslint-disable-next-line require-atomic-updates\r\n scene.activeCamera = currentActiveCamera;\r\n }, [scene]);\r\n\r\n const recordVideoAsync = useCallback(async () => {\r\n if (videoRecorder.current && videoRecorder.current.isRecording) {\r\n videoRecorder.current.stopRecording();\r\n setIsRecording(false);\r\n return;\r\n }\r\n\r\n if (!videoRecorder.current) {\r\n videoRecorder.current = new VideoRecorder(scene.getEngine());\r\n }\r\n\r\n void videoRecorder.current.startRecording();\r\n setIsRecording(true);\r\n }, [scene]);\r\n\r\n return (\r\n <>\r\n <ButtonLine label=\"Capture\" icon={CameraRegular} onClick={captureScreenshot} />\r\n <ButtonLine label=\"Capture Equirectangular\" icon={CameraRegular} onClick={captureEquirectangularAsync} />\r\n <ButtonLine label={isRecording ? \"Stop Recording\" : \"Record Video\"} icon={isRecording ? RecordStopRegular : RecordRegular} onClick={recordVideoAsync} />\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport { ToolsServiceIdentity } from \"../toolsService\";\r\nimport type { IToolsService } from \"../toolsService\";\r\nimport type { IDisposable } from \"core/scene\";\r\nimport { CaptureRttTools, CaptureScreenshotTools } from \"../../../components/tools/captureTools\";\r\n\r\nexport const CaptureServiceDefinition: ServiceDefinition<[], [IToolsService]> = {\r\n friendlyName: \"Capture Tools\",\r\n consumes: [ToolsServiceIdentity],\r\n factory: (toolsService) => {\r\n const contentRegistrations: IDisposable[] = [];\r\n\r\n // Screenshot capture content\r\n contentRegistrations.push(\r\n toolsService.addSectionContent({\r\n key: \"Screenshot Capture\",\r\n section: \"Screenshot Capture\",\r\n component: ({ context }) => <CaptureScreenshotTools scene={context} />,\r\n })\r\n );\r\n\r\n // RTT capture content\r\n contentRegistrations.push(\r\n toolsService.addSectionContent({\r\n key: \"RTT Capture\",\r\n section: \"RTT Capture\",\r\n component: ({ context }) => <CaptureRttTools scene={context} />,\r\n })\r\n );\r\n\r\n return {\r\n dispose: () => {\r\n contentRegistrations.forEach((registration) => registration.dispose());\r\n },\r\n };\r\n },\r\n};\r\n\r\nexport default {\r\n serviceDefinitions: [CaptureServiceDefinition],\r\n} as const;\r\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}