@needle-tools/engine 4.15.0-next.f391a30 → 4.16.0-next.35df6b8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/SKILL.md +237 -0
- package/components.needle.json +1 -1
- package/dist/{gltf-progressive-DYL3SLVb.min.js → gltf-progressive-DQa78GTA.min.js} +1 -1
- package/dist/{gltf-progressive-CMwJPwEt.umd.cjs → gltf-progressive-LOFTyzy4.umd.cjs} +1 -1
- package/dist/{gltf-progressive-CTlvpS3A.js → gltf-progressive-_wvokUUu.js} +3 -3
- package/dist/{materialx-NDD0y4JY.umd.cjs → materialx-BrPdNmQT.umd.cjs} +1 -1
- package/dist/{materialx-4jJLLe9Q.js → materialx-CT8J50pg.js} +2 -2
- package/dist/{materialx-Bt9FHwco.min.js → materialx-D_ofN96q.min.js} +1 -1
- package/dist/{needle-engine.bundle-DB4kLWO_.js → needle-engine.bundle-Bnwvh-4P.js} +3209 -3206
- package/dist/{needle-engine.bundle-C1BFRZDF.umd.cjs → needle-engine.bundle-DN7uXrFB.umd.cjs} +114 -116
- package/dist/{needle-engine.bundle-DsTdfmeb.min.js → needle-engine.bundle-DY3LoYIi.min.js} +109 -111
- package/dist/needle-engine.d.ts +63 -55
- package/dist/needle-engine.js +4 -4
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/dist/{postprocessing-De9ZpJrk.js → postprocessing-C-WOZQC5.js} +2 -2
- package/dist/{postprocessing-DYmYOVm4.umd.cjs → postprocessing-CtXfLXvp.umd.cjs} +1 -1
- package/dist/{postprocessing-BN-f4viE.min.js → postprocessing-DXm8YKbQ.min.js} +1 -1
- package/dist/{three-examples-C0ZCCA_K.js → three-examples.js} +1 -1
- package/dist/{three-examples-DmTY8tGr.min.js → three-examples.min.js} +1 -1
- package/dist/{three-examples-BHqRVpO_.umd.cjs → three-examples.umd.cjs} +1 -1
- package/dist/{three-mesh-ui-BlakAItG.js → three-mesh-ui-B-lqrZWj.js} +1 -1
- package/dist/{three-mesh-ui-D828VbQp.umd.cjs → three-mesh-ui-Chib781Y.umd.cjs} +1 -1
- package/dist/{three-mesh-ui-5HVE2RV-.min.js → three-mesh-ui-n3JU4M2W.min.js} +1 -1
- package/dist/{three-BjYim-vL.umd.cjs → three.umd.cjs} +1 -1
- package/dist/{vendor-ixwD-vv2.js → vendor-BsRxp-FT.js} +1 -1
- package/dist/{vendor-CIDkyBaO.umd.cjs → vendor-BwxpsdCm.umd.cjs} +1 -1
- package/dist/{vendor-BxK0WKmT.min.js → vendor-DZ45lcA8.min.js} +1 -1
- package/lib/asap/needle-asap.js.map +1 -1
- package/lib/asap/sessiongranted.js.map +1 -1
- package/lib/engine/analytics/index.d.ts +1 -1
- package/lib/engine/analytics/lcp.js.map +1 -1
- package/lib/engine/assets/index.js.map +1 -1
- package/lib/engine/debug/debug.d.ts +4 -4
- package/lib/engine/debug/debug.js +6 -6
- package/lib/engine/debug/debug.js.map +1 -1
- package/lib/engine/debug/debug_console.js.map +1 -1
- package/lib/engine/debug/debug_overlay.d.ts +16 -1
- package/lib/engine/debug/debug_overlay.js +47 -10
- package/lib/engine/debug/debug_overlay.js.map +1 -1
- package/lib/engine/debug/debug_spatial_console.js.map +1 -1
- package/lib/engine/debug/debug_spector.js.map +1 -1
- package/lib/engine/engine_accessibility.js.map +1 -1
- package/lib/engine/engine_addressables.d.ts +6 -3
- package/lib/engine/engine_addressables.js +10 -3
- package/lib/engine/engine_addressables.js.map +1 -1
- package/lib/engine/engine_animation.js.map +1 -1
- package/lib/engine/engine_application.d.ts +0 -7
- package/lib/engine/engine_application.js.map +1 -1
- package/lib/engine/engine_assetdatabase.js.map +1 -1
- package/lib/engine/engine_audio.js.map +1 -1
- package/lib/engine/engine_camera.fit.js.map +1 -1
- package/lib/engine/engine_camera.js.map +1 -1
- package/lib/engine/engine_components.js.map +1 -1
- package/lib/engine/engine_components_internal.js.map +1 -1
- package/lib/engine/engine_constants.js.map +1 -1
- package/lib/engine/engine_context.d.ts +0 -1
- package/lib/engine/engine_context.js +1 -1
- package/lib/engine/engine_context.js.map +1 -1
- package/lib/engine/engine_context_registry.js.map +1 -1
- package/lib/engine/engine_coroutine.js.map +1 -1
- package/lib/engine/engine_create_objects.js.map +1 -1
- package/lib/engine/engine_editor-sync.d.ts +1 -1
- package/lib/engine/engine_gameobject.js.map +1 -1
- package/lib/engine/engine_generic_utils.js.map +1 -1
- package/lib/engine/engine_gizmos.js.map +1 -1
- package/lib/engine/engine_gltf.js.map +1 -1
- package/lib/engine/engine_gltf_builtin_components.js +2 -2
- package/lib/engine/engine_gltf_builtin_components.js.map +1 -1
- package/lib/engine/engine_hot_reload.js.map +1 -1
- package/lib/engine/engine_input.d.ts +0 -1
- package/lib/engine/engine_input.js.map +1 -1
- package/lib/engine/engine_instancing.js.map +1 -1
- package/lib/engine/engine_license.js.map +1 -1
- package/lib/engine/engine_lifecycle_functions_internal.js.map +1 -1
- package/lib/engine/engine_lightdata.js.map +1 -1
- package/lib/engine/engine_loaders.callbacks.js.map +1 -1
- package/lib/engine/engine_loaders.d.ts +7 -4
- package/lib/engine/engine_loaders.gltf.js.map +1 -1
- package/lib/engine/engine_loaders.js +7 -4
- package/lib/engine/engine_loaders.js.map +1 -1
- package/lib/engine/engine_lods.js.map +1 -1
- package/lib/engine/engine_mainloop_utils.d.ts +0 -1
- package/lib/engine/engine_mainloop_utils.js.map +1 -1
- package/lib/engine/engine_materialpropertyblock.js.map +1 -1
- package/lib/engine/engine_math.js.map +1 -1
- package/lib/engine/engine_networking.js.map +1 -1
- package/lib/engine/engine_networking_auto.js.map +1 -1
- package/lib/engine/engine_networking_blob.js.map +1 -1
- package/lib/engine/engine_networking_files.js.map +1 -1
- package/lib/engine/engine_networking_instantiate.js.map +1 -1
- package/lib/engine/engine_networking_peer.js.map +1 -1
- package/lib/engine/engine_networking_streams.js +2 -0
- package/lib/engine/engine_networking_streams.js.map +1 -1
- package/lib/engine/engine_patcher.js.map +1 -1
- package/lib/engine/engine_physics.d.ts +2 -2
- package/lib/engine/engine_physics.js.map +1 -1
- package/lib/engine/engine_physics_rapier.js.map +1 -1
- package/lib/engine/engine_playerview.js.map +1 -1
- package/lib/engine/engine_pmrem.js.map +1 -1
- package/lib/engine/engine_scenelighting.d.ts +1 -1
- package/lib/engine/engine_scenelighting.js.map +1 -1
- package/lib/engine/engine_serialization_builtin_serializer.js.map +1 -1
- package/lib/engine/engine_serialization_core.js.map +1 -1
- package/lib/engine/engine_serialization_decorator.d.ts +2 -2
- package/lib/engine/engine_serialization_decorator.js.map +1 -1
- package/lib/engine/engine_shaders.js.map +1 -1
- package/lib/engine/engine_shims.js.map +1 -1
- package/lib/engine/engine_texture.js.map +1 -1
- package/lib/engine/engine_three_utils.js.map +1 -1
- package/lib/engine/engine_time_utils.js.map +1 -1
- package/lib/engine/engine_tonemapping.js.map +1 -1
- package/lib/engine/engine_types.d.ts +0 -1
- package/lib/engine/engine_types.js.map +1 -1
- package/lib/engine/engine_typestore.js.map +1 -1
- package/lib/engine/engine_util_decorator.js +1 -1
- package/lib/engine/engine_util_decorator.js.map +1 -1
- package/lib/engine/engine_utils.js.map +1 -1
- package/lib/engine/engine_utils_attributes.js.map +1 -1
- package/lib/engine/engine_utils_format.js.map +1 -1
- package/lib/engine/engine_utils_qrcode.js.map +1 -1
- package/lib/engine/engine_utils_screenshot.js.map +1 -1
- package/lib/engine/engine_utils_screenshot.xr.js.map +1 -1
- package/lib/engine/export/gltf/EXT_mesh_gpu_instancing_exporter.js.map +1 -1
- package/lib/engine/export/gltf/Writers.js.map +1 -1
- package/lib/engine/export/gltf/index.js.map +1 -1
- package/lib/engine/export/state.js.map +1 -1
- package/lib/engine/extensions/EXT_texture_exr.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_components.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_gameobject_data.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_lighting_settings.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_lightmaps.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_materialx.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_persistent_assets.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_render_objects.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_techniques_webgl.js.map +1 -1
- package/lib/engine/extensions/extension_utils.js.map +1 -1
- package/lib/engine/extensions/extensions.js.map +1 -1
- package/lib/engine/extensions/usage_tracker.js.map +1 -1
- package/lib/engine/js-extensions/ExtensionUtils.js.map +1 -1
- package/lib/engine/js-extensions/Object3D.js.map +1 -1
- package/lib/engine/js-extensions/RGBAColor.js.map +1 -1
- package/lib/engine/js-extensions/Vector.js.map +1 -1
- package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js.map +1 -1
- package/lib/engine/shaders/shaderData.d.ts +6 -6
- package/lib/engine/tests/test_utils.js.map +1 -1
- package/lib/engine/webcomponents/WebXRButtons.d.ts +0 -1
- package/lib/engine/webcomponents/WebXRButtons.js.map +1 -1
- package/lib/engine/webcomponents/buttons.js.map +1 -1
- package/lib/engine/webcomponents/fonts.js.map +1 -1
- package/lib/engine/webcomponents/icons.js.map +1 -1
- package/lib/engine/webcomponents/logo-element.d.ts +3 -6
- package/lib/engine/webcomponents/logo-element.js +0 -18
- package/lib/engine/webcomponents/logo-element.js.map +1 -1
- package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js.map +1 -1
- package/lib/engine/webcomponents/needle menu/needle-menu.d.ts +7 -10
- package/lib/engine/webcomponents/needle menu/needle-menu.js +4 -16
- package/lib/engine/webcomponents/needle menu/needle-menu.js.map +1 -1
- package/lib/engine/webcomponents/needle-button.js.map +1 -1
- package/lib/engine/webcomponents/needle-engine.ar-overlay.d.ts +0 -1
- package/lib/engine/webcomponents/needle-engine.ar-overlay.js.map +1 -1
- package/lib/engine/webcomponents/needle-engine.d.ts +0 -4
- package/lib/engine/webcomponents/needle-engine.js +1 -11
- package/lib/engine/webcomponents/needle-engine.js.map +1 -1
- package/lib/engine/webcomponents/needle-engine.loading.js.map +1 -1
- package/lib/engine/xr/NeedleXRController.d.ts +0 -1
- package/lib/engine/xr/NeedleXRController.js +1 -1
- package/lib/engine/xr/NeedleXRController.js.map +1 -1
- package/lib/engine/xr/NeedleXRSession.d.ts +0 -1
- package/lib/engine/xr/NeedleXRSession.js.map +1 -1
- package/lib/engine/xr/NeedleXRSync.d.ts +0 -1
- package/lib/engine/xr/NeedleXRSync.js.map +1 -1
- package/lib/engine/xr/SceneTransition.js.map +1 -1
- package/lib/engine/xr/TempXRContext.d.ts +0 -1
- package/lib/engine/xr/TempXRContext.js.map +1 -1
- package/lib/engine/xr/events.js.map +1 -1
- package/lib/engine/xr/internal.js.map +1 -1
- package/lib/engine/xr/usdz.js.map +1 -1
- package/lib/engine/xr/utils.js.map +1 -1
- package/lib/engine-components/AlignmentConstraint.js.map +1 -1
- package/lib/engine-components/Animation.js.map +1 -1
- package/lib/engine-components/AnimationCurve.js.map +1 -1
- package/lib/engine-components/AnimationUtils.js.map +1 -1
- package/lib/engine-components/AnimationUtilsAutoplay.js.map +1 -1
- package/lib/engine-components/Animator.js.map +1 -1
- package/lib/engine-components/AnimatorController.js +1 -1
- package/lib/engine-components/AnimatorController.js.map +1 -1
- package/lib/engine-components/AudioListener.js.map +1 -1
- package/lib/engine-components/AudioSource.js.map +1 -1
- package/lib/engine-components/AvatarLoader.js.map +1 -1
- package/lib/engine-components/AxesHelper.js.map +1 -1
- package/lib/engine-components/BoxHelperComponent.js.map +1 -1
- package/lib/engine-components/Camera.js.map +1 -1
- package/lib/engine-components/CameraUtils.js.map +1 -1
- package/lib/engine-components/CharacterController.js.map +1 -1
- package/lib/engine-components/Collider.js.map +1 -1
- package/lib/engine-components/Component.d.ts +0 -1
- package/lib/engine-components/Component.js.map +1 -1
- package/lib/engine-components/ContactShadows.d.ts +0 -1
- package/lib/engine-components/ContactShadows.js.map +1 -1
- package/lib/engine-components/DeleteBox.js.map +1 -1
- package/lib/engine-components/DeviceFlag.js.map +1 -1
- package/lib/engine-components/DragControls.js +10 -0
- package/lib/engine-components/DragControls.js.map +1 -1
- package/lib/engine-components/DropListener.js.map +1 -1
- package/lib/engine-components/Duplicatable.js +8 -1
- package/lib/engine-components/Duplicatable.js.map +1 -1
- package/lib/engine-components/EventList.js.map +1 -1
- package/lib/engine-components/EventTrigger.js.map +1 -1
- package/lib/engine-components/Gizmos.js.map +1 -1
- package/lib/engine-components/GridHelper.js.map +1 -1
- package/lib/engine-components/GroundProjection.js.map +1 -1
- package/lib/engine-components/Joints.js.map +1 -1
- package/lib/engine-components/LODGroup.js.map +1 -1
- package/lib/engine-components/Light.js.map +1 -1
- package/lib/engine-components/NeedleMenu.js.map +1 -1
- package/lib/engine-components/NestedGltf.js.map +1 -1
- package/lib/engine-components/Networking.js.map +1 -1
- package/lib/engine-components/OffsetConstraint.js.map +1 -1
- package/lib/engine-components/OrbitControls.js.map +1 -1
- package/lib/engine-components/PlayerColor.js.map +1 -1
- package/lib/engine-components/ReflectionProbe.js.map +1 -1
- package/lib/engine-components/Renderer.js +2 -1
- package/lib/engine-components/Renderer.js.map +1 -1
- package/lib/engine-components/RendererInstancing.js.map +1 -1
- package/lib/engine-components/RendererLightmap.js.map +1 -1
- package/lib/engine-components/RigidBody.js.map +1 -1
- package/lib/engine-components/SceneSwitcher.js.map +1 -1
- package/lib/engine-components/ScreenCapture.js.map +1 -1
- package/lib/engine-components/SeeThrough.js.map +1 -1
- package/lib/engine-components/ShadowCatcher.js.map +1 -1
- package/lib/engine-components/Skybox.js.map +1 -1
- package/lib/engine-components/SmoothFollow.js.map +1 -1
- package/lib/engine-components/SpatialTrigger.js.map +1 -1
- package/lib/engine-components/SpectatorCamera.js.map +1 -1
- package/lib/engine-components/SpriteRenderer.js.map +1 -1
- package/lib/engine-components/SyncedCamera.js.map +1 -1
- package/lib/engine-components/SyncedRoom.js +1 -1
- package/lib/engine-components/SyncedRoom.js.map +1 -1
- package/lib/engine-components/SyncedTransform.js.map +1 -1
- package/lib/engine-components/TestRunner.js.map +1 -1
- package/lib/engine-components/TransformGizmo.js.map +1 -1
- package/lib/engine-components/VideoPlayer.js.map +1 -1
- package/lib/engine-components/Voip.js.map +1 -1
- package/lib/engine-components/avatar/AvatarBlink_Simple.js.map +1 -1
- package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js.map +1 -1
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.js.map +1 -1
- package/lib/engine-components/avatar/Avatar_MouthShapes.js.map +1 -1
- package/lib/engine-components/avatar/Avatar_MustacheShake.js.map +1 -1
- package/lib/engine-components/debug/LogStats.js.map +1 -1
- package/lib/engine-components/export/gltf/GltfExport.js +1 -1
- package/lib/engine-components/export/gltf/GltfExport.js.map +1 -1
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +1 -1
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +23 -23
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.js.map +1 -1
- package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -1
- package/lib/engine-components/export/usdz/extensions/Animation.d.ts +2 -2
- package/lib/engine-components/export/usdz/extensions/Animation.js.map +1 -1
- package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.js.map +1 -1
- package/lib/engine-components/export/usdz/extensions/USDZText.js.map +1 -1
- package/lib/engine-components/export/usdz/extensions/USDZUI.js.map +1 -1
- package/lib/engine-components/export/usdz/extensions/behavior/Actions.js.map +1 -1
- package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.js.map +1 -1
- package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.js.map +1 -1
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js.map +1 -1
- package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.js.map +1 -1
- package/lib/engine-components/export/usdz/extensions/behavior/PhysicsExtension.js.map +1 -1
- package/lib/engine-components/export/usdz/utils/animationutils.js.map +1 -1
- package/lib/engine-components/export/usdz/utils/quicklook.js.map +1 -1
- package/lib/engine-components/particlesystem/ParticleSystem.js.map +1 -1
- package/lib/engine-components/particlesystem/ParticleSystemModules.js.map +1 -1
- package/lib/engine-components/particlesystem/ParticleSystemSubEmitter.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/Antialiasing.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/BloomEffect.js +2 -2
- package/lib/engine-components/postprocessing/Effects/BloomEffect.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/Pixelation.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js +2 -2
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/Tonemapping.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.d.ts +3 -3
- package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.js.map +1 -1
- package/lib/engine-components/postprocessing/PostProcessingEffect.js.map +1 -1
- package/lib/engine-components/postprocessing/PostProcessingHandler.js.map +1 -1
- package/lib/engine-components/postprocessing/Volume.js.map +1 -1
- package/lib/engine-components/postprocessing/VolumeParameter.js.map +1 -1
- package/lib/engine-components/postprocessing/VolumeProfile.js.map +1 -1
- package/lib/engine-components/postprocessing/utils.js.map +1 -1
- package/lib/engine-components/splines/Spline.js.map +1 -1
- package/lib/engine-components/splines/SplineWalker.js.map +1 -1
- package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
- package/lib/engine-components/timeline/SignalAsset.js.map +1 -1
- package/lib/engine-components/timeline/TimelineTracks.js.map +1 -1
- package/lib/engine-components/ui/BaseUIComponent.js.map +1 -1
- package/lib/engine-components/ui/Button.js.map +1 -1
- package/lib/engine-components/ui/Canvas.js.map +1 -1
- package/lib/engine-components/ui/CanvasGroup.js.map +1 -1
- package/lib/engine-components/ui/EventSystem.js.map +1 -1
- package/lib/engine-components/ui/Graphic.js.map +1 -1
- package/lib/engine-components/ui/Image.js.map +1 -1
- package/lib/engine-components/ui/InputField.js.map +1 -1
- package/lib/engine-components/ui/Layout.js.map +1 -1
- package/lib/engine-components/ui/PointerEvents.d.ts +0 -1
- package/lib/engine-components/ui/PointerEvents.js.map +1 -1
- package/lib/engine-components/ui/RaycastUtils.js.map +1 -1
- package/lib/engine-components/ui/Raycaster.js.map +1 -1
- package/lib/engine-components/ui/RectTransform.js +2 -2
- package/lib/engine-components/ui/RectTransform.js.map +1 -1
- package/lib/engine-components/ui/SpatialHtml.js.map +1 -1
- package/lib/engine-components/ui/Text.js.map +1 -1
- package/lib/engine-components/ui/Utils.js.map +1 -1
- package/lib/engine-components/utils/EnvironmentScene.js.map +1 -1
- package/lib/engine-components/utils/LookAt.js.map +1 -1
- package/lib/engine-components/utils/OpenURL.js.map +1 -1
- package/lib/engine-components/web/Clickthrough.js.map +1 -1
- package/lib/engine-components/web/CursorFollow.js.map +1 -1
- package/lib/engine-components/web/HoverAnimation.js.map +1 -1
- package/lib/engine-components/web/ScrollFollow.js.map +1 -1
- package/lib/engine-components/web/ViewBox.js +2 -1
- package/lib/engine-components/web/ViewBox.js.map +1 -1
- package/lib/engine-components/webxr/Avatar.js.map +1 -1
- package/lib/engine-components/webxr/WebARCameraBackground.d.ts +0 -1
- package/lib/engine-components/webxr/WebARCameraBackground.js.map +1 -1
- package/lib/engine-components/webxr/WebARSessionRoot.d.ts +0 -1
- package/lib/engine-components/webxr/WebARSessionRoot.js.map +1 -1
- package/lib/engine-components/webxr/WebXR.d.ts +0 -1
- package/lib/engine-components/webxr/WebXR.js.map +1 -1
- package/lib/engine-components/webxr/WebXRImageTracking.d.ts +0 -1
- package/lib/engine-components/webxr/WebXRImageTracking.js.map +1 -1
- package/lib/engine-components/webxr/WebXRPlaneTracking.d.ts +2 -3
- package/lib/engine-components/webxr/WebXRPlaneTracking.js.map +1 -1
- package/lib/engine-components/webxr/WebXRRig.d.ts +0 -1
- package/lib/engine-components/webxr/WebXRRig.js.map +1 -1
- package/lib/engine-components/webxr/XRFlag.js.map +1 -1
- package/lib/engine-components/webxr/controllers/XRControllerFollow.d.ts +0 -1
- package/lib/engine-components/webxr/controllers/XRControllerFollow.js.map +1 -1
- package/lib/engine-components/webxr/controllers/XRControllerModel.d.ts +0 -1
- package/lib/engine-components/webxr/controllers/XRControllerModel.js.map +1 -1
- package/lib/engine-components/webxr/controllers/XRControllerMovement.js.map +1 -1
- package/lib/engine-components-experimental/Presentation.js.map +1 -1
- package/lib/engine-components-experimental/networking/PlayerSync.js.map +1 -1
- package/lib/engine-schemes/schemes.js.map +1 -1
- package/lib/needle-engine.js.map +1 -1
- package/package.json +6 -3
- package/plugins/common/buildinfo.js +1 -1
- package/plugins/common/license.js +5 -6
- package/plugins/common/logger.js +104 -14
- package/plugins/types/userconfig.d.ts +2 -0
- package/plugins/vite/ai.js +4 -18
- package/plugins/vite/alias.js +0 -13
- package/plugins/vite/asap.js +1 -1
- package/plugins/vite/build-pipeline.js +2 -5
- package/plugins/vite/buildinfo.js +9 -9
- package/plugins/vite/copyfiles.js +19 -16
- package/plugins/vite/custom-element-data.js +4 -4
- package/plugins/vite/dependencies.js +45 -18
- package/plugins/vite/dependency-watcher.js +10 -8
- package/plugins/vite/imports-logger.js +14 -12
- package/plugins/vite/local-files-analysis.js +10 -12
- package/plugins/vite/local-files-core.js +8 -8
- package/plugins/vite/local-files-types.d.ts +49 -11
- package/plugins/vite/local-files-utils.js +14 -10
- package/plugins/vite/logger.client.js +4 -4
- package/plugins/vite/logger.js +7 -7
- package/plugins/vite/logging.js +26 -3
- package/plugins/vite/pwa.js +6 -5
- package/plugins/vite/reload.js +27 -24
- package/src/asap/needle-asap.ts +1 -1
- package/src/engine/debug/debug.ts +8 -7
- package/src/engine/debug/debug_overlay.ts +66 -12
- package/src/engine/debug/debug_spector.ts +1 -1
- package/src/engine/engine_addressables.ts +11 -3
- package/src/engine/engine_application.ts +0 -7
- package/src/engine/engine_context.ts +1 -1
- package/src/engine/engine_gltf_builtin_components.ts +1 -1
- package/src/engine/engine_loaders.ts +7 -4
- package/src/engine/engine_networking_streams.ts +1 -0
- package/src/engine/engine_util_decorator.ts +2 -2
- package/src/engine/webcomponents/logo-element.ts +3 -20
- package/src/engine/webcomponents/needle menu/needle-menu.ts +11 -25
- package/src/engine/webcomponents/needle-engine.ts +1 -13
- package/src/engine-components/DragControls.ts +14 -0
- package/src/engine-components/Duplicatable.ts +9 -1
- package/src/engine-components/Renderer.ts +2 -1
- package/src/engine-components/SyncedRoom.ts +1 -1
- package/src/engine-components/export/usdz/USDZExporter.ts +1 -1
- /package/dist/{three-Bvk2VKbF.js → three.js} +0 -0
- /package/dist/{three-IG2qPafA.min.js → three.min.js} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{BufferGeometry as W,Mesh as F,Box3 as ae,Vector3 as A,Sphere as Le,CompressedTexture as Be,Texture as $,Matrix3 as Ge,InterleavedBuffer as je,InterleavedBufferAttribute as Ne,BufferAttribute as Ue,TextureLoader as We,Matrix4 as _e,Clock as Fe,MeshStandardMaterial as ze}from"./three-IG2qPafA.min.js";import{DRACOLoader as qe,KTX2Loader as Ve,MeshoptDecoder as Xe,GLTFLoader as le}from"./three-examples-DmTY8tGr.min.js";const He="";globalThis.GLTF_PROGRESSIVE_VERSION=He,console.debug("[gltf-progressive] version -");let k="https://www.gstatic.com/draco/versioned/decoders/1.5.7/",z="https://cdn.needle.tools/static/three/0.179.1/basis2/";const Ke=k,Ye=z,be=new URL(k+"draco_decoder.js");be.searchParams.append("range","true"),fetch(be,{method:"GET",headers:{Range:"bytes=0-1"}}).catch(i=>{console.debug(`Failed to fetch remote Draco decoder from ${k} (offline: ${typeof navigator<"u"?navigator.onLine:"unknown"})`),k===Ke&&Me("./include/draco/"),z===Ye&&De("./include/ktx2/")}).finally(()=>{Oe()});const Qe=()=>({dracoDecoderPath:k,ktx2TranscoderPath:z});function Me(i){k=i,T&&T[ce]!=k?(console.debug("Updating Draco decoder path to "+i),T[ce]=k,T.setDecoderPath(k),T.preload()):console.debug("Setting Draco decoder path to "+i)}function De(i){z=i,I&&I.transcoderPath!=z?(console.debug("Updating KTX2 transcoder path to "+i),I.setTranscoderPath(z),I.init()):console.debug("Setting KTX2 transcoder path to "+i)}function te(i){return Oe(),i?I.detectSupport(i):i!==null&&console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures might fail"),{dracoLoader:T,ktx2Loader:I,meshoptDecoder:re}}function ue(i){i.dracoLoader||i.setDRACOLoader(T),i.ktx2Loader||i.setKTX2Loader(I),i.meshoptDecoder||i.setMeshoptDecoder(re)}const ce=Symbol("dracoDecoderPath");let T,re,I;function Oe(){T||(T=new qe,T[ce]=k,T.setDecoderPath(k),T.setDecoderConfig({type:"js"}),T.preload()),I||(I=new Ve,I.setTranscoderPath(z),I.init()),re||(re=Xe)}const de=new WeakMap;function he(i,t){let e=de.get(i);e?e=Object.assign(e,t):e=t,de.set(i,e)}const Je=le.prototype.load;function Ze(...i){const t=de.get(this);let e=i[0];const r=new URL(e,window.location.href);if(r.hostname.endsWith("needle.tools")){const n=t?.progressive!==void 0?t.progressive:!0,s=t?.usecase?t.usecase:"default";n?this.requestHeader.Accept=`*/*;progressive=allowed;usecase=${s}`:this.requestHeader.Accept=`*/*;usecase=${s}`,e=r.toString()}return i[0]=e,Je?.call(this,...i)}le.prototype.load=Ze,j("debugprogressive");function j(i){if(typeof window>"u")return!1;const t=new URL(window.location.href).searchParams.get(i);return t==null||t==="0"||t==="false"?!1:t===""?!0:t}function et(i,t){if(t===void 0||i===void 0||t.startsWith("./")||t.startsWith("http")||t.startsWith("data:")||t.startsWith("blob:"))return t;const e=i.lastIndexOf("/");if(e>=0){const r=i.substring(0,e+1);for(;r.endsWith("/")&&t.startsWith("/");)t=t.substring(1);return r+t}return t}function Se(){return se!==void 0||(se=/iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent),j("debugprogressive")&&console.log("[glTF Progressive]: isMobileDevice",se)),se}let se;function Te(){if(typeof window>"u")return!1;const i=new URL(window.location.href),t=i.hostname==="localhost"||/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(i.hostname);return i.hostname==="127.0.0.1"||t}class tt{constructor(t=100,e={}){this.maxConcurrent=t,this.debug=e.debug??!1,window.requestAnimationFrame(this.tick)}_running=new Map;_queue=[];debug=!1;tick=()=>{this.internalUpdate(),setTimeout(this.tick,10)};slot(t){return this.debug&&console.debug(`[PromiseQueue]: Requesting slot for key ${t}, running: ${this._running.size}, waiting: ${this._queue.length}`),new Promise(e=>{this._queue.push({key:t,resolve:e})})}add(t,e){this._running.has(t)||(this._running.set(t,e),e.finally(()=>{this._running.delete(t),this.debug&&console.debug(`[PromiseQueue]: Promise finished now running: ${this._running.size}, waiting: ${this._queue.length}. (finished ${t})`)}),this.debug&&console.debug(`[PromiseQueue]: Added new promise, now running: ${this._running.size}, waiting: ${this._queue.length}. (added ${t})`))}internalUpdate(){const t=this.maxConcurrent-this._running.size;for(let e=0;e<t&&this._queue.length>0;e++){this.debug&&console.debug(`[PromiseQueue]: Running ${this._running.size} promises, waiting for ${this._queue.length} more.`);const{key:r,resolve:n}=this._queue.shift();n({use:s=>this.add(r,s)})}}}function rt(i){const t=i.image?.width??0,e=i.image?.height??0,r=i.image?.depth??1,n=Math.floor(Math.log2(Math.max(t,e,r)))+1,s=st(i);return t*e*r*s*(1-Math.pow(.25,n))/(1-.25)}function st(i){let t=4;const e=i.format;e===1024||e===1025?t=1:e===1026||e===1027?t=2:e===1022||e===1029?t=3:(e===1023||e===1033)&&(t=4);let r=1;const n=i.type;return n===1009||n===1010?r=1:n===1011||n===1012?r=2:n===1013||n===1014||n===1015?r=4:n===1016&&(r=2),t*r}const nt=typeof window>"u"&&typeof document>"u",ge=Symbol("needle:raycast-mesh");function V(i){return i?.[ge]instanceof W?i[ge]:null}function ot(i,t){if((i.type==="Mesh"||i.type==="SkinnedMesh")&&!V(i)){const e=at(t);e.userData={isRaycastMesh:!0},i[ge]=e}}function it(i=!0){if(i){if(H)return;const t=H=F.prototype.raycast;F.prototype.raycast=function(e,r){const n=this,s=V(n);let o;s&&n.isMesh&&(o=n.geometry,n.geometry=s),t.call(this,e,r),o&&(n.geometry=o)}}else{if(!H)return;F.prototype.raycast=H,H=null}}let H=null;function at(i){const t=new W;for(const e in i.attributes)t.setAttribute(e,i.getAttribute(e));return t.setIndex(i.getIndex()),t}const N=new Array,h=j("debugprogressive");let K,q=-1;if(h){let i=function(){q+=1,q>=t&&(q=-1),console.log(`Toggle LOD level [${q}]`)},t=6;window.addEventListener("keyup",e=>{e.key==="p"&&i(),e.key==="w"&&(K=!K,console.log(`Toggle wireframe [${K}]`));const r=parseInt(e.key);!isNaN(r)&&r>=0&&(q=r,console.log(`Set LOD level to [${q}]`))})}function Pe(i){if(h&&K!==void 0)if(Array.isArray(i))for(const t of i)Pe(t);else i&&"wireframe"in i&&(i.wireframe=K===!0)}const Y=new Array;let lt=0;const ut=Se()?2:10;function ct(i){if(Y.length<ut){const e=Y.length;h&&console.warn(`[Worker] Creating new worker #${e}`);const r=ve.createWorker(i||{});return Y.push(r),r}const t=lt++%Y.length;return Y[t]}class ve{constructor(t,e){this.worker=t,this._debug=e.debug??!1,t.onmessage=r=>{const n=r.data;switch(this._debug&&console.log("[Worker] EVENT",n),n.type){case"loaded-gltf":for(const s of this._running)if(s.url===n.result.url){dt(n.result),s.resolve(n.result);const o=s.url;o.startsWith("blob:")&&URL.revokeObjectURL(o)}}},t.onerror=r=>{console.error("[Worker] Error in gltf-progressive worker:",r)},t.postMessage({type:"init"})}static async createWorker(t){const e=new Worker(URL.createObjectURL(new Blob([`import '${new URL("./loader.worker-BqODMeeW.js",import.meta.url).toString()}';`],{type:"text/javascript"})),{type:"module"});return new ve(e,t)}_running=[];_webglRenderer=null;async load(t,e){const r=Qe();let n=e?.renderer;n||(this._webglRenderer??=(async()=>{const{WebGLRenderer:l}=await import("./three-IG2qPafA.min.js").then(a=>a.THREE);return new l})(),n=await this._webglRenderer);const s=te(n).ktx2Loader.workerConfig;t instanceof URL?t=t.toString():t.startsWith("file:")?t=URL.createObjectURL(new Blob([t])):!t.startsWith("blob:")&&!t.startsWith("http:")&&!t.startsWith("https:")&&(t=new URL(t,window.location.href).toString());const o={type:"load",url:t,dracoDecoderPath:r.dracoDecoderPath,ktx2TranscoderPath:r.ktx2TranscoderPath,ktx2LoaderConfig:s};return this._debug&&console.debug("[Worker] Sending load request",o),this.worker.postMessage(o),new Promise(l=>{this._running.push({url:t.toString(),resolve:l})})}_debug=!1}function dt(i){for(const t of i.geometries){const e=t.geometry,r=new W;if(r.name=e.name||"",e.index){const n=e.index;r.setIndex(fe(n))}for(const n in e.attributes){const s=e.attributes[n],o=fe(s);r.setAttribute(n,o)}if(e.morphAttributes)for(const n in e.morphAttributes){const s=e.morphAttributes[n].map(o=>fe(o));r.morphAttributes[n]=s}if(r.morphTargetsRelative=e.morphTargetsRelative??!1,r.boundingBox=new ae,r.boundingBox.min=new A(e.boundingBox?.min.x,e.boundingBox?.min.y,e.boundingBox?.min.z),r.boundingBox.max=new A(e.boundingBox?.max.x,e.boundingBox?.max.y,e.boundingBox?.max.z),r.boundingSphere=new Le(new A(e.boundingSphere?.center.x,e.boundingSphere?.center.y,e.boundingSphere?.center.z),e.boundingSphere?.radius),e.groups)for(const n of e.groups)r.addGroup(n.start,n.count,n.materialIndex);e.userData&&(r.userData=e.userData),t.geometry=r}for(const t of i.textures){const e=t.texture;let r=null;if(e.isCompressedTexture){const n=e.mipmaps,s=e.image?.width||e.source?.data?.width||-1,o=e.image?.height||e.source?.data?.height||-1;r=new Be(n,s,o,e.format,e.type,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.anisotropy,e.colorSpace)}else r=new $(e.image,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.colorSpace),r.mipmaps=e.mipmaps,r.channel=e.channel,r.source.data=e.source.data,r.flipY=e.flipY,r.premultiplyAlpha=e.premultiplyAlpha,r.unpackAlignment=e.unpackAlignment,r.matrix=new Ge(...e.matrix.elements);if(!r){console.error("[Worker] Failed to create new texture from received data. Texture is not a CompressedTexture or Texture.");continue}t.texture=r}return i}function fe(i){let t=i;if("isInterleavedBufferAttribute"in i&&i.isInterleavedBufferAttribute){const e=i.data,r=e.array,n=new je(r,e.stride);t=new Ne(n,i.itemSize,r.byteOffset,i.normalized),t.offset=i.offset}else"isBufferAttribute"in i&&i.isBufferAttribute&&(t=new Ue(i.array,i.itemSize,i.normalized),t.usage=i.usage,t.gpuType=i.gpuType,t.updateRanges=i.updateRanges);return t}const ht=j("gltf-progressive-worker");j("gltf-progressive-reduce-mipmaps");const X=j("gltf-progressive-gc"),me=Symbol("needle-progressive-texture"),B="NEEDLE_progressive";class m{get name(){return B}static getMeshLODExtension(t){const e=this.getAssignedLODInformation(t);return e?.key?this.lodInfos.get(e.key):null}static getPrimitiveIndex(t){return this.getAssignedLODInformation(t)?.index??-1}static getMaterialMinMaxLODsCount(t,e){const r=this,n="LODS:minmax",s=t[n];if(s!=null)return s;if(e||(e={min_count:1/0,max_count:0,lods:[]}),Array.isArray(t)){for(const l of t)this.getMaterialMinMaxLODsCount(l,e);return t[n]=e,e}if(h==="verbose"&&console.log("getMaterialMinMaxLODsCount",t),t.type==="ShaderMaterial"||t.type==="RawShaderMaterial"){const l=t;for(const a of Object.keys(l.uniforms)){const u=l.uniforms[a].value;u?.isTexture===!0&&o(u,e)}}else if(t.isMaterial)for(const l of Object.keys(t)){const a=t[l];a?.isTexture===!0&&o(a,e)}else h&&console.warn(`[getMaterialMinMaxLODsCount] Unsupported material type: ${t.type}`);return t[n]=e,e;function o(l,a){const u=r.getAssignedLODInformation(l);if(u){const w=r.lodInfos.get(u.key);if(w&&w.lods){a.min_count=Math.min(a.min_count,w.lods.length),a.max_count=Math.max(a.max_count,w.lods.length);for(let p=0;p<w.lods.length;p++){const y=w.lods[p];y.width&&(a.lods[p]=a.lods[p]||{min_height:1/0,max_height:0},a.lods[p].min_height=Math.min(a.lods[p].min_height,y.height),a.lods[p].max_height=Math.max(a.lods[p].max_height,y.height))}}}}}static hasLODLevelAvailable(t,e){if(Array.isArray(t)){for(const s of t)if(this.hasLODLevelAvailable(s,e))return!0;return!1}if(t.isMaterial===!0){for(const s of Object.keys(t)){const o=t[s];if(o&&o.isTexture&&this.hasLODLevelAvailable(o,e))return!0}return!1}else if(t.isGroup===!0){for(const s of t.children)if(s.isMesh===!0&&this.hasLODLevelAvailable(s,e))return!0}let r,n;if(t.isMesh?r=t.geometry:(t.isBufferGeometry||t.isTexture)&&(r=t),r&&r?.userData?.LODS){const s=r.userData.LODS;if(n=this.lodInfos.get(s.key),e===void 0)return n!=null;if(n)return Array.isArray(n.lods)?e<n.lods.length:e===0}return!1}static assignMeshLOD(t,e){if(!t)return Promise.resolve(null);if(t instanceof F||t.isMesh===!0){const r=t.geometry,n=this.getAssignedLODInformation(r);if(!n)return Promise.resolve(null);for(const s of N)s.onBeforeGetLODMesh?.(t,e);return t["LOD:requested level"]=e,m.getOrLoadLOD(r,e).then(s=>{if(Array.isArray(s)){const o=n.index||0;s=s[o]}return t["LOD:requested level"]===e&&(delete t["LOD:requested level"],s&&r!=s&&(s?.isBufferGeometry?t.geometry=s:h&&console.error("Invalid LOD geometry",s))),s}).catch(s=>(console.error("Error loading mesh LOD",t,s),null))}else h&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",t);return Promise.resolve(null)}static assignTextureLOD(t,e=0){if(!t)return Promise.resolve(null);if(t.isMesh===!0){const r=t;if(Array.isArray(r.material)){const n=new Array;for(const s of r.material){const o=this.assignTextureLOD(s,e);n.push(o)}return Promise.all(n).then(s=>{const o=new Array;for(const l of s)Array.isArray(l)&&o.push(...l);return o})}else return this.assignTextureLOD(r.material,e)}if(t.isMaterial===!0){const r=t,n=[],s=new Array;if(r.uniforms&&(r.isRawShaderMaterial||r.isShaderMaterial===!0)){const o=r;for(const l of Object.keys(o.uniforms)){const a=o.uniforms[l].value;if(a?.isTexture===!0){const u=this.assignTextureLODForSlot(a,e,r,l).then(w=>(w&&o.uniforms[l].value!=w&&(o.uniforms[l].value=w,o.uniformsNeedUpdate=!0),w));n.push(u),s.push(l)}}}else for(const o of Object.keys(r)){const l=r[o];if(l?.isTexture===!0){const a=this.assignTextureLODForSlot(l,e,r,o);n.push(a),s.push(o)}}return Promise.all(n).then(o=>{const l=new Array;for(let a=0;a<o.length;a++){const u=o[a],w=s[a];u&&u.isTexture===!0?l.push({material:r,slot:w,texture:u,level:e}):l.push({material:r,slot:w,texture:null,level:e})}return l})}if(t instanceof $||t.isTexture===!0){const r=t;return this.assignTextureLODForSlot(r,e,null,null)}return Promise.resolve(null)}static assignTextureLODForSlot(t,e,r,n){return t?.isTexture!==!0?Promise.resolve(null):n==="glyphMap"?Promise.resolve(t):m.getOrLoadLOD(t,e).then(s=>{if(Array.isArray(s))return console.warn("Progressive: Got an array of textures for a texture slot, this should not happen..."),null;if(s?.isTexture===!0){if(s!=t&&r&&n){const o=r[n];if(o&&!h){const l=this.getAssignedLODInformation(o);if(l&&l?.level<e)return h==="verbose"&&console.warn("Assigned texture level is already higher: ",l.level,e,r,o,s),s&&s!==o&&((h||X)&&console.log(`[gltf-progressive] Disposing rejected lower-quality texture LOD ${e} (assigned is ${l.level})`,s.uuid),s.dispose()),null}if(this.trackTextureUsage(s),o&&o!==s&&this.untrackTextureUsage(o)&&(h||X)){const l=this.getAssignedLODInformation(o);console.log(`[gltf-progressive] Disposed old texture LOD ${l?.level??"?"} \u2192 ${e} for ${r.name||r.type}.${n}`,o.uuid)}r[n]=s}return s}else h=="verbose"&&console.warn("No LOD found for",t,e);return null}).catch(s=>(console.error("Error loading LOD",t,s),null))}parser;url;constructor(t){const e=t.options.path;h&&console.log("Progressive extension registered for",e),this.parser=t,this.url=e}_isLoadingMesh;loadMesh=t=>{if(this._isLoadingMesh)return null;const e=this.parser.json.meshes[t]?.extensions?.[B];return e?(this._isLoadingMesh=!0,this.parser.getDependency("mesh",t).then(r=>(this._isLoadingMesh=!1,r&&m.registerMesh(this.url,e.guid,r,e.lods?.length,0,e),r))):null};afterRoot(t){return h&&console.log("AFTER",this.url,t),this.parser.json.textures?.forEach((e,r)=>{if(e?.extensions){const n=e?.extensions[B];if(n){if(!n.lods){h&&console.warn("Texture has no LODs",n);return}let s=!1;for(const o of this.parser.associations.keys())o.isTexture===!0&&this.parser.associations.get(o)?.textures===r&&(s=!0,m.registerTexture(this.url,o,n.lods?.length,r,n));s||this.parser.getDependency("texture",r).then(o=>{o&&m.registerTexture(this.url,o,n.lods?.length,r,n)})}}}),this.parser.json.meshes?.forEach((e,r)=>{if(e?.extensions){const n=e?.extensions[B];if(n&&n.lods){for(const s of this.parser.associations.keys())if(s.isMesh){const o=this.parser.associations.get(s);o?.meshes===r&&m.registerMesh(this.url,n.guid,s,n.lods.length,o.primitives,n)}}}}),null}static registerTexture=(t,e,r,n,s)=>{if(!e){h&&console.error("!! gltf-progressive: Called register texture without texture");return}if(h){const l=e.image?.width||e.source?.data?.width||0,a=e.image?.height||e.source?.data?.height||0;console.log(`> gltf-progressive: register texture[${n}] "${e.name||e.uuid}", Current: ${l}x${a}, Max: ${s.lods[0]?.width}x${s.lods[0]?.height}, uuid: ${e.uuid}`,s,e)}e.source&&(e.source[me]=s);const o=s.guid;m.assignLODInformation(t,e,o,r,n),m.lodInfos.set(o,s),m.lowresCache.set(o,new WeakRef(e))};static registerMesh=(t,e,r,n,s,o)=>{const l=r.geometry;if(!l){h&&console.warn("gltf-progressive: Register mesh without geometry");return}l.userData||(l.userData={}),h&&console.log("> Progressive: register mesh "+r.name,{index:s,uuid:r.uuid},o,r),m.assignLODInformation(t,l,e,n,s),m.lodInfos.set(e,o);let a=m.lowresCache.get(e)?.deref();a?a.push(r.geometry):a=[r.geometry],m.lowresCache.set(e,new WeakRef(a)),n>0&&!V(r)&&ot(r,l);for(const u of N)u.onRegisteredNewMesh?.(r,o)};static dispose(t){if(t){this.lodInfos.delete(t);const e=this.lowresCache.get(t);if(e){const r=e.deref();if(r){if(r.isTexture){const n=r;this.textureRefCounts.delete(n.uuid),n.dispose()}else if(Array.isArray(r))for(const n of r)n.dispose()}this.lowresCache.delete(t)}for(const[r,n]of this.cache)r.includes(t)&&(this._disposeCacheEntry(n),this.cache.delete(r))}else{this.lodInfos.clear();for(const[,e]of this.lowresCache){const r=e.deref();if(r){if(r.isTexture){const n=r;this.textureRefCounts.delete(n.uuid),n.dispose()}else if(Array.isArray(r))for(const n of r)n.dispose()}}this.lowresCache.clear();for(const[,e]of this.cache)this._disposeCacheEntry(e);this.cache.clear(),this.textureRefCounts.clear()}}static _disposeCacheEntry(t){if(t instanceof WeakRef){const e=t.deref();e&&(e.isTexture&&this.textureRefCounts.delete(e.uuid),e.dispose())}else t.then(e=>{if(e)if(Array.isArray(e))for(const r of e)r.dispose();else e.isTexture&&this.textureRefCounts.delete(e.uuid),e.dispose()}).catch(()=>{})}static lodInfos=new Map;static cache=new Map;static lowresCache=new Map;static textureRefCounts=new Map;static _resourceRegistry=new FinalizationRegistry(t=>{const e=m.cache.get(t);(h||X)&&console.debug(`[gltf-progressive] Memory: Resource GC'd
|
|
1
|
+
import{BufferGeometry as W,Mesh as F,Box3 as ae,Vector3 as A,Sphere as Le,CompressedTexture as Be,Texture as $,Matrix3 as Ge,InterleavedBuffer as je,InterleavedBufferAttribute as Ne,BufferAttribute as Ue,TextureLoader as We,Matrix4 as _e,Clock as Fe,MeshStandardMaterial as ze}from"./three.min.js";import{DRACOLoader as qe,KTX2Loader as Ve,MeshoptDecoder as Xe,GLTFLoader as le}from"./three-examples.min.js";const He="";globalThis.GLTF_PROGRESSIVE_VERSION=He,console.debug("[gltf-progressive] version -");let k="https://www.gstatic.com/draco/versioned/decoders/1.5.7/",z="https://cdn.needle.tools/static/three/0.179.1/basis2/";const Ke=k,Ye=z,be=new URL(k+"draco_decoder.js");be.searchParams.append("range","true"),fetch(be,{method:"GET",headers:{Range:"bytes=0-1"}}).catch(i=>{console.debug(`Failed to fetch remote Draco decoder from ${k} (offline: ${typeof navigator<"u"?navigator.onLine:"unknown"})`),k===Ke&&Me("./include/draco/"),z===Ye&&De("./include/ktx2/")}).finally(()=>{Oe()});const Qe=()=>({dracoDecoderPath:k,ktx2TranscoderPath:z});function Me(i){k=i,T&&T[ce]!=k?(console.debug("Updating Draco decoder path to "+i),T[ce]=k,T.setDecoderPath(k),T.preload()):console.debug("Setting Draco decoder path to "+i)}function De(i){z=i,I&&I.transcoderPath!=z?(console.debug("Updating KTX2 transcoder path to "+i),I.setTranscoderPath(z),I.init()):console.debug("Setting KTX2 transcoder path to "+i)}function te(i){return Oe(),i?I.detectSupport(i):i!==null&&console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures might fail"),{dracoLoader:T,ktx2Loader:I,meshoptDecoder:re}}function ue(i){i.dracoLoader||i.setDRACOLoader(T),i.ktx2Loader||i.setKTX2Loader(I),i.meshoptDecoder||i.setMeshoptDecoder(re)}const ce=Symbol("dracoDecoderPath");let T,re,I;function Oe(){T||(T=new qe,T[ce]=k,T.setDecoderPath(k),T.setDecoderConfig({type:"js"}),T.preload()),I||(I=new Ve,I.setTranscoderPath(z),I.init()),re||(re=Xe)}const de=new WeakMap;function he(i,t){let e=de.get(i);e?e=Object.assign(e,t):e=t,de.set(i,e)}const Je=le.prototype.load;function Ze(...i){const t=de.get(this);let e=i[0];const r=new URL(e,window.location.href);if(r.hostname.endsWith("needle.tools")){const n=t?.progressive!==void 0?t.progressive:!0,s=t?.usecase?t.usecase:"default";n?this.requestHeader.Accept=`*/*;progressive=allowed;usecase=${s}`:this.requestHeader.Accept=`*/*;usecase=${s}`,e=r.toString()}return i[0]=e,Je?.call(this,...i)}le.prototype.load=Ze,j("debugprogressive");function j(i){if(typeof window>"u")return!1;const t=new URL(window.location.href).searchParams.get(i);return t==null||t==="0"||t==="false"?!1:t===""?!0:t}function et(i,t){if(t===void 0||i===void 0||t.startsWith("./")||t.startsWith("http")||t.startsWith("data:")||t.startsWith("blob:"))return t;const e=i.lastIndexOf("/");if(e>=0){const r=i.substring(0,e+1);for(;r.endsWith("/")&&t.startsWith("/");)t=t.substring(1);return r+t}return t}function Se(){return se!==void 0||(se=/iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent),j("debugprogressive")&&console.log("[glTF Progressive]: isMobileDevice",se)),se}let se;function Te(){if(typeof window>"u")return!1;const i=new URL(window.location.href),t=i.hostname==="localhost"||/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(i.hostname);return i.hostname==="127.0.0.1"||t}class tt{constructor(t=100,e={}){this.maxConcurrent=t,this.debug=e.debug??!1,window.requestAnimationFrame(this.tick)}_running=new Map;_queue=[];debug=!1;tick=()=>{this.internalUpdate(),setTimeout(this.tick,10)};slot(t){return this.debug&&console.debug(`[PromiseQueue]: Requesting slot for key ${t}, running: ${this._running.size}, waiting: ${this._queue.length}`),new Promise(e=>{this._queue.push({key:t,resolve:e})})}add(t,e){this._running.has(t)||(this._running.set(t,e),e.finally(()=>{this._running.delete(t),this.debug&&console.debug(`[PromiseQueue]: Promise finished now running: ${this._running.size}, waiting: ${this._queue.length}. (finished ${t})`)}),this.debug&&console.debug(`[PromiseQueue]: Added new promise, now running: ${this._running.size}, waiting: ${this._queue.length}. (added ${t})`))}internalUpdate(){const t=this.maxConcurrent-this._running.size;for(let e=0;e<t&&this._queue.length>0;e++){this.debug&&console.debug(`[PromiseQueue]: Running ${this._running.size} promises, waiting for ${this._queue.length} more.`);const{key:r,resolve:n}=this._queue.shift();n({use:s=>this.add(r,s)})}}}function rt(i){const t=i.image?.width??0,e=i.image?.height??0,r=i.image?.depth??1,n=Math.floor(Math.log2(Math.max(t,e,r)))+1,s=st(i);return t*e*r*s*(1-Math.pow(.25,n))/(1-.25)}function st(i){let t=4;const e=i.format;e===1024||e===1025?t=1:e===1026||e===1027?t=2:e===1022||e===1029?t=3:(e===1023||e===1033)&&(t=4);let r=1;const n=i.type;return n===1009||n===1010?r=1:n===1011||n===1012?r=2:n===1013||n===1014||n===1015?r=4:n===1016&&(r=2),t*r}const nt=typeof window>"u"&&typeof document>"u",ge=Symbol("needle:raycast-mesh");function V(i){return i?.[ge]instanceof W?i[ge]:null}function ot(i,t){if((i.type==="Mesh"||i.type==="SkinnedMesh")&&!V(i)){const e=at(t);e.userData={isRaycastMesh:!0},i[ge]=e}}function it(i=!0){if(i){if(H)return;const t=H=F.prototype.raycast;F.prototype.raycast=function(e,r){const n=this,s=V(n);let o;s&&n.isMesh&&(o=n.geometry,n.geometry=s),t.call(this,e,r),o&&(n.geometry=o)}}else{if(!H)return;F.prototype.raycast=H,H=null}}let H=null;function at(i){const t=new W;for(const e in i.attributes)t.setAttribute(e,i.getAttribute(e));return t.setIndex(i.getIndex()),t}const N=new Array,h=j("debugprogressive");let K,q=-1;if(h){let i=function(){q+=1,q>=t&&(q=-1),console.log(`Toggle LOD level [${q}]`)},t=6;window.addEventListener("keyup",e=>{e.key==="p"&&i(),e.key==="w"&&(K=!K,console.log(`Toggle wireframe [${K}]`));const r=parseInt(e.key);!isNaN(r)&&r>=0&&(q=r,console.log(`Set LOD level to [${q}]`))})}function Pe(i){if(h&&K!==void 0)if(Array.isArray(i))for(const t of i)Pe(t);else i&&"wireframe"in i&&(i.wireframe=K===!0)}const Y=new Array;let lt=0;const ut=Se()?2:10;function ct(i){if(Y.length<ut){const e=Y.length;h&&console.warn(`[Worker] Creating new worker #${e}`);const r=ve.createWorker(i||{});return Y.push(r),r}const t=lt++%Y.length;return Y[t]}class ve{constructor(t,e){this.worker=t,this._debug=e.debug??!1,t.onmessage=r=>{const n=r.data;switch(this._debug&&console.log("[Worker] EVENT",n),n.type){case"loaded-gltf":for(const s of this._running)if(s.url===n.result.url){dt(n.result),s.resolve(n.result);const o=s.url;o.startsWith("blob:")&&URL.revokeObjectURL(o)}}},t.onerror=r=>{console.error("[Worker] Error in gltf-progressive worker:",r)},t.postMessage({type:"init"})}static async createWorker(t){const e=new Worker(URL.createObjectURL(new Blob([`import '${new URL("./loader.worker-BqODMeeW.js",import.meta.url).toString()}';`],{type:"text/javascript"})),{type:"module"});return new ve(e,t)}_running=[];_webglRenderer=null;async load(t,e){const r=Qe();let n=e?.renderer;n||(this._webglRenderer??=(async()=>{const{WebGLRenderer:l}=await import("./three.min.js").then(a=>a.THREE);return new l})(),n=await this._webglRenderer);const s=te(n).ktx2Loader.workerConfig;t instanceof URL?t=t.toString():t.startsWith("file:")?t=URL.createObjectURL(new Blob([t])):!t.startsWith("blob:")&&!t.startsWith("http:")&&!t.startsWith("https:")&&(t=new URL(t,window.location.href).toString());const o={type:"load",url:t,dracoDecoderPath:r.dracoDecoderPath,ktx2TranscoderPath:r.ktx2TranscoderPath,ktx2LoaderConfig:s};return this._debug&&console.debug("[Worker] Sending load request",o),this.worker.postMessage(o),new Promise(l=>{this._running.push({url:t.toString(),resolve:l})})}_debug=!1}function dt(i){for(const t of i.geometries){const e=t.geometry,r=new W;if(r.name=e.name||"",e.index){const n=e.index;r.setIndex(fe(n))}for(const n in e.attributes){const s=e.attributes[n],o=fe(s);r.setAttribute(n,o)}if(e.morphAttributes)for(const n in e.morphAttributes){const s=e.morphAttributes[n].map(o=>fe(o));r.morphAttributes[n]=s}if(r.morphTargetsRelative=e.morphTargetsRelative??!1,r.boundingBox=new ae,r.boundingBox.min=new A(e.boundingBox?.min.x,e.boundingBox?.min.y,e.boundingBox?.min.z),r.boundingBox.max=new A(e.boundingBox?.max.x,e.boundingBox?.max.y,e.boundingBox?.max.z),r.boundingSphere=new Le(new A(e.boundingSphere?.center.x,e.boundingSphere?.center.y,e.boundingSphere?.center.z),e.boundingSphere?.radius),e.groups)for(const n of e.groups)r.addGroup(n.start,n.count,n.materialIndex);e.userData&&(r.userData=e.userData),t.geometry=r}for(const t of i.textures){const e=t.texture;let r=null;if(e.isCompressedTexture){const n=e.mipmaps,s=e.image?.width||e.source?.data?.width||-1,o=e.image?.height||e.source?.data?.height||-1;r=new Be(n,s,o,e.format,e.type,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.anisotropy,e.colorSpace)}else r=new $(e.image,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.colorSpace),r.mipmaps=e.mipmaps,r.channel=e.channel,r.source.data=e.source.data,r.flipY=e.flipY,r.premultiplyAlpha=e.premultiplyAlpha,r.unpackAlignment=e.unpackAlignment,r.matrix=new Ge(...e.matrix.elements);if(!r){console.error("[Worker] Failed to create new texture from received data. Texture is not a CompressedTexture or Texture.");continue}t.texture=r}return i}function fe(i){let t=i;if("isInterleavedBufferAttribute"in i&&i.isInterleavedBufferAttribute){const e=i.data,r=e.array,n=new je(r,e.stride);t=new Ne(n,i.itemSize,r.byteOffset,i.normalized),t.offset=i.offset}else"isBufferAttribute"in i&&i.isBufferAttribute&&(t=new Ue(i.array,i.itemSize,i.normalized),t.usage=i.usage,t.gpuType=i.gpuType,t.updateRanges=i.updateRanges);return t}const ht=j("gltf-progressive-worker");j("gltf-progressive-reduce-mipmaps");const X=j("gltf-progressive-gc"),me=Symbol("needle-progressive-texture"),B="NEEDLE_progressive";class m{get name(){return B}static getMeshLODExtension(t){const e=this.getAssignedLODInformation(t);return e?.key?this.lodInfos.get(e.key):null}static getPrimitiveIndex(t){return this.getAssignedLODInformation(t)?.index??-1}static getMaterialMinMaxLODsCount(t,e){const r=this,n="LODS:minmax",s=t[n];if(s!=null)return s;if(e||(e={min_count:1/0,max_count:0,lods:[]}),Array.isArray(t)){for(const l of t)this.getMaterialMinMaxLODsCount(l,e);return t[n]=e,e}if(h==="verbose"&&console.log("getMaterialMinMaxLODsCount",t),t.type==="ShaderMaterial"||t.type==="RawShaderMaterial"){const l=t;for(const a of Object.keys(l.uniforms)){const u=l.uniforms[a].value;u?.isTexture===!0&&o(u,e)}}else if(t.isMaterial)for(const l of Object.keys(t)){const a=t[l];a?.isTexture===!0&&o(a,e)}else h&&console.warn(`[getMaterialMinMaxLODsCount] Unsupported material type: ${t.type}`);return t[n]=e,e;function o(l,a){const u=r.getAssignedLODInformation(l);if(u){const w=r.lodInfos.get(u.key);if(w&&w.lods){a.min_count=Math.min(a.min_count,w.lods.length),a.max_count=Math.max(a.max_count,w.lods.length);for(let p=0;p<w.lods.length;p++){const y=w.lods[p];y.width&&(a.lods[p]=a.lods[p]||{min_height:1/0,max_height:0},a.lods[p].min_height=Math.min(a.lods[p].min_height,y.height),a.lods[p].max_height=Math.max(a.lods[p].max_height,y.height))}}}}}static hasLODLevelAvailable(t,e){if(Array.isArray(t)){for(const s of t)if(this.hasLODLevelAvailable(s,e))return!0;return!1}if(t.isMaterial===!0){for(const s of Object.keys(t)){const o=t[s];if(o&&o.isTexture&&this.hasLODLevelAvailable(o,e))return!0}return!1}else if(t.isGroup===!0){for(const s of t.children)if(s.isMesh===!0&&this.hasLODLevelAvailable(s,e))return!0}let r,n;if(t.isMesh?r=t.geometry:(t.isBufferGeometry||t.isTexture)&&(r=t),r&&r?.userData?.LODS){const s=r.userData.LODS;if(n=this.lodInfos.get(s.key),e===void 0)return n!=null;if(n)return Array.isArray(n.lods)?e<n.lods.length:e===0}return!1}static assignMeshLOD(t,e){if(!t)return Promise.resolve(null);if(t instanceof F||t.isMesh===!0){const r=t.geometry,n=this.getAssignedLODInformation(r);if(!n)return Promise.resolve(null);for(const s of N)s.onBeforeGetLODMesh?.(t,e);return t["LOD:requested level"]=e,m.getOrLoadLOD(r,e).then(s=>{if(Array.isArray(s)){const o=n.index||0;s=s[o]}return t["LOD:requested level"]===e&&(delete t["LOD:requested level"],s&&r!=s&&(s?.isBufferGeometry?t.geometry=s:h&&console.error("Invalid LOD geometry",s))),s}).catch(s=>(console.error("Error loading mesh LOD",t,s),null))}else h&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",t);return Promise.resolve(null)}static assignTextureLOD(t,e=0){if(!t)return Promise.resolve(null);if(t.isMesh===!0){const r=t;if(Array.isArray(r.material)){const n=new Array;for(const s of r.material){const o=this.assignTextureLOD(s,e);n.push(o)}return Promise.all(n).then(s=>{const o=new Array;for(const l of s)Array.isArray(l)&&o.push(...l);return o})}else return this.assignTextureLOD(r.material,e)}if(t.isMaterial===!0){const r=t,n=[],s=new Array;if(r.uniforms&&(r.isRawShaderMaterial||r.isShaderMaterial===!0)){const o=r;for(const l of Object.keys(o.uniforms)){const a=o.uniforms[l].value;if(a?.isTexture===!0){const u=this.assignTextureLODForSlot(a,e,r,l).then(w=>(w&&o.uniforms[l].value!=w&&(o.uniforms[l].value=w,o.uniformsNeedUpdate=!0),w));n.push(u),s.push(l)}}}else for(const o of Object.keys(r)){const l=r[o];if(l?.isTexture===!0){const a=this.assignTextureLODForSlot(l,e,r,o);n.push(a),s.push(o)}}return Promise.all(n).then(o=>{const l=new Array;for(let a=0;a<o.length;a++){const u=o[a],w=s[a];u&&u.isTexture===!0?l.push({material:r,slot:w,texture:u,level:e}):l.push({material:r,slot:w,texture:null,level:e})}return l})}if(t instanceof $||t.isTexture===!0){const r=t;return this.assignTextureLODForSlot(r,e,null,null)}return Promise.resolve(null)}static assignTextureLODForSlot(t,e,r,n){return t?.isTexture!==!0?Promise.resolve(null):n==="glyphMap"?Promise.resolve(t):m.getOrLoadLOD(t,e).then(s=>{if(Array.isArray(s))return console.warn("Progressive: Got an array of textures for a texture slot, this should not happen..."),null;if(s?.isTexture===!0){if(s!=t&&r&&n){const o=r[n];if(o&&!h){const l=this.getAssignedLODInformation(o);if(l&&l?.level<e)return h==="verbose"&&console.warn("Assigned texture level is already higher: ",l.level,e,r,o,s),s&&s!==o&&((h||X)&&console.log(`[gltf-progressive] Disposing rejected lower-quality texture LOD ${e} (assigned is ${l.level})`,s.uuid),s.dispose()),null}if(this.trackTextureUsage(s),o&&o!==s&&this.untrackTextureUsage(o)&&(h||X)){const l=this.getAssignedLODInformation(o);console.log(`[gltf-progressive] Disposed old texture LOD ${l?.level??"?"} \u2192 ${e} for ${r.name||r.type}.${n}`,o.uuid)}r[n]=s}return s}else h=="verbose"&&console.warn("No LOD found for",t,e);return null}).catch(s=>(console.error("Error loading LOD",t,s),null))}parser;url;constructor(t){const e=t.options.path;h&&console.log("Progressive extension registered for",e),this.parser=t,this.url=e}_isLoadingMesh;loadMesh=t=>{if(this._isLoadingMesh)return null;const e=this.parser.json.meshes[t]?.extensions?.[B];return e?(this._isLoadingMesh=!0,this.parser.getDependency("mesh",t).then(r=>(this._isLoadingMesh=!1,r&&m.registerMesh(this.url,e.guid,r,e.lods?.length,0,e),r))):null};afterRoot(t){return h&&console.log("AFTER",this.url,t),this.parser.json.textures?.forEach((e,r)=>{if(e?.extensions){const n=e?.extensions[B];if(n){if(!n.lods){h&&console.warn("Texture has no LODs",n);return}let s=!1;for(const o of this.parser.associations.keys())o.isTexture===!0&&this.parser.associations.get(o)?.textures===r&&(s=!0,m.registerTexture(this.url,o,n.lods?.length,r,n));s||this.parser.getDependency("texture",r).then(o=>{o&&m.registerTexture(this.url,o,n.lods?.length,r,n)})}}}),this.parser.json.meshes?.forEach((e,r)=>{if(e?.extensions){const n=e?.extensions[B];if(n&&n.lods){for(const s of this.parser.associations.keys())if(s.isMesh){const o=this.parser.associations.get(s);o?.meshes===r&&m.registerMesh(this.url,n.guid,s,n.lods.length,o.primitives,n)}}}}),null}static registerTexture=(t,e,r,n,s)=>{if(!e){h&&console.error("!! gltf-progressive: Called register texture without texture");return}if(h){const l=e.image?.width||e.source?.data?.width||0,a=e.image?.height||e.source?.data?.height||0;console.log(`> gltf-progressive: register texture[${n}] "${e.name||e.uuid}", Current: ${l}x${a}, Max: ${s.lods[0]?.width}x${s.lods[0]?.height}, uuid: ${e.uuid}`,s,e)}e.source&&(e.source[me]=s);const o=s.guid;m.assignLODInformation(t,e,o,r,n),m.lodInfos.set(o,s),m.lowresCache.set(o,new WeakRef(e))};static registerMesh=(t,e,r,n,s,o)=>{const l=r.geometry;if(!l){h&&console.warn("gltf-progressive: Register mesh without geometry");return}l.userData||(l.userData={}),h&&console.log("> Progressive: register mesh "+r.name,{index:s,uuid:r.uuid},o,r),m.assignLODInformation(t,l,e,n,s),m.lodInfos.set(e,o);let a=m.lowresCache.get(e)?.deref();a?a.push(r.geometry):a=[r.geometry],m.lowresCache.set(e,new WeakRef(a)),n>0&&!V(r)&&ot(r,l);for(const u of N)u.onRegisteredNewMesh?.(r,o)};static dispose(t){if(t){this.lodInfos.delete(t);const e=this.lowresCache.get(t);if(e){const r=e.deref();if(r){if(r.isTexture){const n=r;this.textureRefCounts.delete(n.uuid),n.dispose()}else if(Array.isArray(r))for(const n of r)n.dispose()}this.lowresCache.delete(t)}for(const[r,n]of this.cache)r.includes(t)&&(this._disposeCacheEntry(n),this.cache.delete(r))}else{this.lodInfos.clear();for(const[,e]of this.lowresCache){const r=e.deref();if(r){if(r.isTexture){const n=r;this.textureRefCounts.delete(n.uuid),n.dispose()}else if(Array.isArray(r))for(const n of r)n.dispose()}}this.lowresCache.clear();for(const[,e]of this.cache)this._disposeCacheEntry(e);this.cache.clear(),this.textureRefCounts.clear()}}static _disposeCacheEntry(t){if(t instanceof WeakRef){const e=t.deref();e&&(e.isTexture&&this.textureRefCounts.delete(e.uuid),e.dispose())}else t.then(e=>{if(e)if(Array.isArray(e))for(const r of e)r.dispose();else e.isTexture&&this.textureRefCounts.delete(e.uuid),e.dispose()}).catch(()=>{})}static lodInfos=new Map;static cache=new Map;static lowresCache=new Map;static textureRefCounts=new Map;static _resourceRegistry=new FinalizationRegistry(t=>{const e=m.cache.get(t);(h||X)&&console.debug(`[gltf-progressive] Memory: Resource GC'd
|
|
2
2
|
${t}`),e instanceof WeakRef&&(e.deref()||(m.cache.delete(t),(h||X)&&console.log("[gltf-progressive] \u21AA Cache entry deleted (GC)")))});static trackTextureUsage(t){const e=t.uuid,r=this.textureRefCounts.get(e)||0;this.textureRefCounts.set(e,r+1),h==="verbose"&&console.log(`[gltf-progressive] Track texture ${e}, refCount: ${r} \u2192 ${r+1}`)}static untrackTextureUsage(t){const e=t.uuid,r=this.textureRefCounts.get(e);if(!r)return(h==="verbose"||X)&&s("[gltf-progressive] Memory: Untrack untracked texture (dispose immediately)",0),t.dispose(),!0;const n=r-1;if(n<=0)return this.textureRefCounts.delete(e),(h||X)&&s("[gltf-progressive] Memory: Dispose texture",n),t.dispose(),!0;return this.textureRefCounts.set(e,n),h==="verbose"&&s("[gltf-progressive] Memory: Untrack texture",n),!1;function s(o,l){let a=t.image?.width||t.source?.data?.width||0,u=t.image?.height||t.source?.data?.height||0;const w=a&&u?`${a}x${u}`:"N/A";let p="N/A";a&&u&&(p=`~${(rt(t)/(1024*1024)).toFixed(2)} MB`),console.log(`${o} \u2014 ${t.name} ${w} (${p}), refCount: ${r} \u2192 ${l}
|
|
3
3
|
${e}`)}}static workers=[];static _workersIndex=0;static async getOrLoadLOD(t,e){const r=h=="verbose",n=this.getAssignedLODInformation(t);if(!n)return h&&console.warn(`[gltf-progressive] No LOD information found: ${t.name}, uuid: ${t.uuid}, type: ${t.type}`,t),null;const s=n?.key;let o;if(t.isTexture===!0){const l=t;l.source&&l.source[me]&&(o=l.source[me])}if(o||(o=m.lodInfos.get(s)),!o)h&&console.warn(`Can not load LOD ${e}: no LOD info found for "${s}" ${t.name}`,t.type,m.lodInfos);else{if(e>0){let u=!1;const w=Array.isArray(o.lods);if(w&&e>=o.lods.length?u=!0:w||(u=!0),u){const p=this.lowresCache.get(s);if(p){const y=p.deref();if(y)return y;this.lowresCache.delete(s),h&&console.log(`[gltf-progressive] Lowres cache entry was GC'd: ${s}`)}return null}}const l=Array.isArray(o.lods)?o.lods[e]?.path:o.lods;if(!l)return h&&!o["missing:uri"]&&(o["missing:uri"]=!0,console.warn("Missing uri for progressive asset for LOD "+e,o)),null;const a=et(n.url,l);if(a.endsWith(".glb")||a.endsWith(".gltf")){if(!o.guid)return console.warn("missing pointer for glb/gltf texture",o),null;const u=a+"_"+o.guid,w=await this.queue.slot(a),p=this.cache.get(u);if(p!==void 0)if(r&&console.log(`LOD ${e} was already loading/loaded: ${u}`),p instanceof WeakRef){const c=p.deref();if(c){let x=c,v=!1;if(x instanceof $&&t instanceof $?x.image?.data||x.source?.data?x=this.copySettings(t,x):v=!0:x instanceof W&&t instanceof W&&(x.attributes.position?.array||(v=!0)),!v)return x}this.cache.delete(u),h&&console.log(`[gltf-progressive] Re-loading GC'd/disposed resource: ${u}`)}else{let c=await p.catch(v=>(console.error(`Error loading LOD ${e} from ${a}
|
|
4
4
|
`,v),null)),x=!1;if(c==null||(c instanceof $&&t instanceof $?c.image?.data||c.source?.data?c=this.copySettings(t,c):(x=!0,this.cache.delete(u)):c instanceof W&&t instanceof W&&(c.attributes.position?.array||(x=!0,this.cache.delete(u)))),!x)return c}if(!w.use)return h&&console.log(`LOD ${e} was aborted: ${a}`),null;const y=o,P=new Promise(async(c,x)=>{if(ht){const g=await(await ct({})).load(a);if(g.textures.length>0)for(const d of g.textures){let f=d.texture;return m.assignLODInformation(n.url,f,s,e,void 0),t instanceof $&&(f=this.copySettings(t,f)),f&&(f.guid=y.guid),c(f)}if(g.geometries.length>0){const d=new Array;for(const f of g.geometries){const L=f.geometry;m.assignLODInformation(n.url,L,s,e,f.primitiveIndex),d.push(L)}return c(d)}return c(null)}const v=new le;ue(v),h&&(await new Promise(g=>setTimeout(g,1e3)),r&&console.warn("Start loading (delayed) "+a,y.guid));let C=a;if(y&&Array.isArray(y.lods)){const g=y.lods[e];g.hash&&(C+="?v="+g.hash)}const b=await v.loadAsync(C).catch(g=>(console.error(`Error loading LOD ${e} from ${a}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";const c=require("./three-BjYim-vL.umd.cjs"),X=require("./three-examples-BHqRVpO_.umd.cjs");var le=typeof document<"u"?document.currentScript:null;const $e="";globalThis.GLTF_PROGRESSIVE_VERSION=$e;console.debug("[gltf-progressive] version -");let I="https://www.gstatic.com/draco/versioned/decoders/1.5.7/",N="https://cdn.needle.tools/static/three/0.179.1/basis2/";const Be=I,Ge=N,be=new URL(I+"draco_decoder.js");be.searchParams.append("range","true");fetch(be,{method:"GET",headers:{Range:"bytes=0-1"}}).catch(i=>{console.debug(`Failed to fetch remote Draco decoder from ${I} (offline: ${typeof navigator<"u"?navigator.onLine:"unknown"})`),I===Be&&Oe("./include/draco/"),N===Ge&&Se("./include/ktx2/")}).finally(()=>{Te()});const Fe=()=>({dracoDecoderPath:I,ktx2TranscoderPath:N});function Oe(i){I=i,A&&A[pe]!=I?(console.debug("Updating Draco decoder path to "+i),A[pe]=I,A.setDecoderPath(I),A.preload()):console.debug("Setting Draco decoder path to "+i)}function Se(i){N=i,$&&$.transcoderPath!=N?(console.debug("Updating KTX2 transcoder path to "+i),$.setTranscoderPath(N),$.init()):console.debug("Setting KTX2 transcoder path to "+i)}function ne(i){return Te(),i?$.detectSupport(i):i!==null&&console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures might fail"),{dracoLoader:A,ktx2Loader:$,meshoptDecoder:oe}}function xe(i){i.dracoLoader||i.setDRACOLoader(A),i.ktx2Loader||i.setKTX2Loader($),i.meshoptDecoder||i.setMeshoptDecoder(oe)}const pe=Symbol("dracoDecoderPath");let A,oe,$;function Te(){A||(A=new X.DRACOLoader,A[pe]=I,A.setDecoderPath(I),A.setDecoderConfig({type:"js"}),A.preload()),$||($=new X.KTX2Loader,$.setTranscoderPath(N),$.init()),oe||(oe=X.MeshoptDecoder)}const me=new WeakMap;function we(i,t){let e=me.get(i);e?e=Object.assign(e,t):e=t,me.set(i,e)}const Ue=X.GLTFLoader.prototype.load;function We(...i){const t=me.get(this);let e=i[0];const s=new URL(e,window.location.href);if(s.hostname.endsWith("needle.tools")){const o=t?.progressive!==void 0?t.progressive:!0,n=t?.usecase?t.usecase:"default";o?this.requestHeader.Accept=`*/*;progressive=allowed;usecase=${n}`:this.requestHeader.Accept=`*/*;usecase=${n}`,e=s.toString()}return i[0]=e,Ue?.call(this,...i)}X.GLTFLoader.prototype.load=We;z("debugprogressive");function z(i){if(typeof window>"u")return!1;const e=new URL(window.location.href).searchParams.get(i);return e==null||e==="0"||e==="false"?!1:e===""?!0:e}function ze(i,t){if(t===void 0||i===void 0||t.startsWith("./")||t.startsWith("http")||t.startsWith("data:")||t.startsWith("blob:"))return t;const e=i.lastIndexOf("/");if(e>=0){const s=i.substring(0,e+1);for(;s.endsWith("/")&&t.startsWith("/");)t=t.substring(1);return s+t}return t}function Pe(){return Y!==void 0||(Y=/iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent),z("debugprogressive")&&console.log("[glTF Progressive]: isMobileDevice",Y)),Y}let Y;function _e(){if(typeof window>"u")return!1;const i=new URL(window.location.href),t=i.hostname==="localhost"||/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(i.hostname);return i.hostname==="127.0.0.1"||t}class Ve{constructor(t=100,e={}){this.maxConcurrent=t,this.debug=e.debug??!1,window.requestAnimationFrame(this.tick)}_running=new Map;_queue=[];debug=!1;tick=()=>{this.internalUpdate(),setTimeout(this.tick,10)};slot(t){return this.debug&&console.debug(`[PromiseQueue]: Requesting slot for key ${t}, running: ${this._running.size}, waiting: ${this._queue.length}`),new Promise(e=>{this._queue.push({key:t,resolve:e})})}add(t,e){this._running.has(t)||(this._running.set(t,e),e.finally(()=>{this._running.delete(t),this.debug&&console.debug(`[PromiseQueue]: Promise finished now running: ${this._running.size}, waiting: ${this._queue.length}. (finished ${t})`)}),this.debug&&console.debug(`[PromiseQueue]: Added new promise, now running: ${this._running.size}, waiting: ${this._queue.length}. (added ${t})`))}internalUpdate(){const t=this.maxConcurrent-this._running.size;for(let e=0;e<t&&this._queue.length>0;e++){this.debug&&console.debug(`[PromiseQueue]: Running ${this._running.size} promises, waiting for ${this._queue.length} more.`);const{key:s,resolve:r}=this._queue.shift();r({use:o=>this.add(s,o)})}}}function qe(i){const t=i.image?.width??0,e=i.image?.height??0,s=i.image?.depth??1,r=Math.floor(Math.log2(Math.max(t,e,s)))+1,o=Ne(i);return t*e*s*o*(1-Math.pow(.25,r))/(1-.25)}function Ne(i){let t=4;const e=i.format;e===1024||e===1025?t=1:e===1026||e===1027?t=2:e===1022||e===1029?t=3:(e===1023||e===1033)&&(t=4);let s=1;const r=i.type;return r===1009||r===1010?s=1:r===1011||r===1012?s=2:r===1013||r===1014||r===1015?s=4:r===1016&&(s=2),t*s}const Ee=typeof window>"u"&&typeof document>"u",ye=Symbol("needle:raycast-mesh");function j(i){return i?.[ye]instanceof c.BufferGeometry?i[ye]:null}function Xe(i,t){if((i.type==="Mesh"||i.type==="SkinnedMesh")&&!j(i)){const s=Ke(t);s.userData={isRaycastMesh:!0},i[ye]=s}}function je(i=!0){if(i){if(H)return;const t=H=c.Mesh.prototype.raycast;c.Mesh.prototype.raycast=function(e,s){const r=this,o=j(r);let n;o&&r.isMesh&&(n=r.geometry,r.geometry=o),t.call(this,e,s),n&&(r.geometry=n)}}else{if(!H)return;c.Mesh.prototype.raycast=H,H=null}}let H=null;function Ke(i){const t=new c.BufferGeometry;for(const e in i.attributes)t.setAttribute(e,i.getAttribute(e));return t.setIndex(i.getIndex()),t}const W=new Array,h=z("debugprogressive");let J,q=-1;if(h){let i=function(){q+=1,q>=t&&(q=-1),console.log(`Toggle LOD level [${q}]`)},t=6;window.addEventListener("keyup",e=>{e.key==="p"&&i(),e.key==="w"&&(J=!J,console.log(`Toggle wireframe [${J}]`));const s=parseInt(e.key);!isNaN(s)&&s>=0&&(q=s,console.log(`Set LOD level to [${q}]`))})}function Ce(i){if(h&&J!==void 0)if(Array.isArray(i))for(const t of i)Ce(t);else i&&"wireframe"in i&&(i.wireframe=J===!0)}const Q=new Array;let Ye=0;const He=Pe()?2:10;function Qe(i){if(Q.length<He){const s=Q.length;h&&console.warn(`[Worker] Creating new worker #${s}`);const r=Le.createWorker(i||{});return Q.push(r),r}const t=Ye++%Q.length;return Q[t]}class Le{constructor(t,e){this.worker=t,this._debug=e.debug??!1,t.onmessage=s=>{const r=s.data;switch(this._debug&&console.log("[Worker] EVENT",r),r.type){case"loaded-gltf":for(const o of this._running)if(o.url===r.result.url){Je(r.result),o.resolve(r.result);const n=o.url;n.startsWith("blob:")&&URL.revokeObjectURL(n)}}},t.onerror=s=>{console.error("[Worker] Error in gltf-progressive worker:",s)},t.postMessage({type:"init"})}static async createWorker(t){const e=new Worker(new URL("/loader.worker-BqODMeeW.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:le&&le.tagName.toUpperCase()==="SCRIPT"&&le.src||new URL("gltf-progressive-CMwJPwEt.umd.cjs",document.baseURI).href),{type:"module"});return new Le(e,t)}_running=[];_webglRenderer=null;async load(t,e){const s=Fe();let r=e?.renderer;r||(this._webglRenderer??=(async()=>{const{WebGLRenderer:u}=await Promise.resolve().then(()=>require("./three-BjYim-vL.umd.cjs")).then(d=>d.THREE);return new u})(),r=await this._webglRenderer);const l=ne(r).ktx2Loader.workerConfig;t instanceof URL?t=t.toString():t.startsWith("file:")?t=URL.createObjectURL(new Blob([t])):!t.startsWith("blob:")&&!t.startsWith("http:")&&!t.startsWith("https:")&&(t=new URL(t,window.location.href).toString());const a={type:"load",url:t,dracoDecoderPath:s.dracoDecoderPath,ktx2TranscoderPath:s.ktx2TranscoderPath,ktx2LoaderConfig:l};return this._debug&&console.debug("[Worker] Sending load request",a),this.worker.postMessage(a),new Promise(u=>{this._running.push({url:t.toString(),resolve:u})})}_debug=!1}function Je(i){for(const t of i.geometries){const e=t.geometry,s=new c.BufferGeometry;if(s.name=e.name||"",e.index){const r=e.index;s.setIndex(ue(r))}for(const r in e.attributes){const o=e.attributes[r],n=ue(o);s.setAttribute(r,n)}if(e.morphAttributes)for(const r in e.morphAttributes){const n=e.morphAttributes[r].map(l=>ue(l));s.morphAttributes[r]=n}if(s.morphTargetsRelative=e.morphTargetsRelative??!1,s.boundingBox=new c.Box3,s.boundingBox.min=new c.Vector3(e.boundingBox?.min.x,e.boundingBox?.min.y,e.boundingBox?.min.z),s.boundingBox.max=new c.Vector3(e.boundingBox?.max.x,e.boundingBox?.max.y,e.boundingBox?.max.z),s.boundingSphere=new c.Sphere(new c.Vector3(e.boundingSphere?.center.x,e.boundingSphere?.center.y,e.boundingSphere?.center.z),e.boundingSphere?.radius),e.groups)for(const r of e.groups)s.addGroup(r.start,r.count,r.materialIndex);e.userData&&(s.userData=e.userData),t.geometry=s}for(const t of i.textures){const e=t.texture;let s=null;if(e.isCompressedTexture){const r=e.mipmaps,o=e.image?.width||e.source?.data?.width||-1,n=e.image?.height||e.source?.data?.height||-1;s=new c.CompressedTexture(r,o,n,e.format,e.type,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.anisotropy,e.colorSpace)}else s=new c.Texture(e.image,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.colorSpace),s.mipmaps=e.mipmaps,s.channel=e.channel,s.source.data=e.source.data,s.flipY=e.flipY,s.premultiplyAlpha=e.premultiplyAlpha,s.unpackAlignment=e.unpackAlignment,s.matrix=new c.Matrix3(...e.matrix.elements);if(!s){console.error("[Worker] Failed to create new texture from received data. Texture is not a CompressedTexture or Texture.");continue}t.texture=s}return i}function ue(i){let t=i;if("isInterleavedBufferAttribute"in i&&i.isInterleavedBufferAttribute){const e=i.data,s=e.array,r=new c.InterleavedBuffer(s,e.stride);t=new c.InterleavedBufferAttribute(r,i.itemSize,s.byteOffset,i.normalized),t.offset=i.offset}else"isBufferAttribute"in i&&i.isBufferAttribute&&(t=new c.BufferAttribute(i.array,i.itemSize,i.normalized),t.usage=i.usage,t.gpuType=i.gpuType,t.updateRanges=i.updateRanges);return t}const Ze=z("gltf-progressive-worker");z("gltf-progressive-reduce-mipmaps");const E=z("gltf-progressive-gc"),ce=Symbol("needle-progressive-texture"),F="NEEDLE_progressive";class y{get name(){return F}static getMeshLODExtension(t){const e=this.getAssignedLODInformation(t);return e?.key?this.lodInfos.get(e.key):null}static getPrimitiveIndex(t){const e=this.getAssignedLODInformation(t)?.index;return e??-1}static getMaterialMinMaxLODsCount(t,e){const s=this,r="LODS:minmax",o=t[r];if(o!=null)return o;if(e||(e={min_count:1/0,max_count:0,lods:[]}),Array.isArray(t)){for(const l of t)this.getMaterialMinMaxLODsCount(l,e);return t[r]=e,e}if(h==="verbose"&&console.log("getMaterialMinMaxLODsCount",t),t.type==="ShaderMaterial"||t.type==="RawShaderMaterial"){const l=t;for(const a of Object.keys(l.uniforms)){const u=l.uniforms[a].value;u?.isTexture===!0&&n(u,e)}}else if(t.isMaterial)for(const l of Object.keys(t)){const a=t[l];a?.isTexture===!0&&n(a,e)}else h&&console.warn(`[getMaterialMinMaxLODsCount] Unsupported material type: ${t.type}`);return t[r]=e,e;function n(l,a){const u=s.getAssignedLODInformation(l);if(u){const d=s.lodInfos.get(u.key);if(d&&d.lods){a.min_count=Math.min(a.min_count,d.lods.length),a.max_count=Math.max(a.max_count,d.lods.length);for(let x=0;x<d.lods.length;x++){const L=d.lods[x];L.width&&(a.lods[x]=a.lods[x]||{min_height:1/0,max_height:0},a.lods[x].min_height=Math.min(a.lods[x].min_height,L.height),a.lods[x].max_height=Math.max(a.lods[x].max_height,L.height))}}}}}static hasLODLevelAvailable(t,e){if(Array.isArray(t)){for(const o of t)if(this.hasLODLevelAvailable(o,e))return!0;return!1}if(t.isMaterial===!0){for(const o of Object.keys(t)){const n=t[o];if(n&&n.isTexture&&this.hasLODLevelAvailable(n,e))return!0}return!1}else if(t.isGroup===!0){for(const o of t.children)if(o.isMesh===!0&&this.hasLODLevelAvailable(o,e))return!0}let s,r;if(t.isMesh?s=t.geometry:(t.isBufferGeometry||t.isTexture)&&(s=t),s&&s?.userData?.LODS){const o=s.userData.LODS;if(r=this.lodInfos.get(o.key),e===void 0)return r!=null;if(r)return Array.isArray(r.lods)?e<r.lods.length:e===0}return!1}static assignMeshLOD(t,e){if(!t)return Promise.resolve(null);if(t instanceof c.Mesh||t.isMesh===!0){const s=t.geometry,r=this.getAssignedLODInformation(s);if(!r)return Promise.resolve(null);for(const o of W)o.onBeforeGetLODMesh?.(t,e);return t["LOD:requested level"]=e,y.getOrLoadLOD(s,e).then(o=>{if(Array.isArray(o)){const n=r.index||0;o=o[n]}return t["LOD:requested level"]===e&&(delete t["LOD:requested level"],o&&s!=o&&(o?.isBufferGeometry?t.geometry=o:h&&console.error("Invalid LOD geometry",o))),o}).catch(o=>(console.error("Error loading mesh LOD",t,o),null))}else h&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",t);return Promise.resolve(null)}static assignTextureLOD(t,e=0){if(!t)return Promise.resolve(null);if(t.isMesh===!0){const s=t;if(Array.isArray(s.material)){const r=new Array;for(const o of s.material){const n=this.assignTextureLOD(o,e);r.push(n)}return Promise.all(r).then(o=>{const n=new Array;for(const l of o)Array.isArray(l)&&n.push(...l);return n})}else return this.assignTextureLOD(s.material,e)}if(t.isMaterial===!0){const s=t,r=[],o=new Array;if(s.uniforms&&(s.isRawShaderMaterial||s.isShaderMaterial===!0)){const n=s;for(const l of Object.keys(n.uniforms)){const a=n.uniforms[l].value;if(a?.isTexture===!0){const u=this.assignTextureLODForSlot(a,e,s,l).then(d=>(d&&n.uniforms[l].value!=d&&(n.uniforms[l].value=d,n.uniformsNeedUpdate=!0),d));r.push(u),o.push(l)}}}else for(const n of Object.keys(s)){const l=s[n];if(l?.isTexture===!0){const a=this.assignTextureLODForSlot(l,e,s,n);r.push(a),o.push(n)}}return Promise.all(r).then(n=>{const l=new Array;for(let a=0;a<n.length;a++){const u=n[a],d=o[a];u&&u.isTexture===!0?l.push({material:s,slot:d,texture:u,level:e}):l.push({material:s,slot:d,texture:null,level:e})}return l})}if(t instanceof c.Texture||t.isTexture===!0){const s=t;return this.assignTextureLODForSlot(s,e,null,null)}return Promise.resolve(null)}static assignTextureLODForSlot(t,e,s,r){return t?.isTexture!==!0?Promise.resolve(null):r==="glyphMap"?Promise.resolve(t):y.getOrLoadLOD(t,e).then(o=>{if(Array.isArray(o))return console.warn("Progressive: Got an array of textures for a texture slot, this should not happen..."),null;if(o?.isTexture===!0){if(o!=t&&s&&r){const n=s[r];if(n&&!h){const l=this.getAssignedLODInformation(n);if(l&&l?.level<e)return h==="verbose"&&console.warn("Assigned texture level is already higher: ",l.level,e,s,n,o),o&&o!==n&&((h||E)&&console.log(`[gltf-progressive] Disposing rejected lower-quality texture LOD ${e} (assigned is ${l.level})`,o.uuid),o.dispose()),null}if(this.trackTextureUsage(o),n&&n!==o&&this.untrackTextureUsage(n)&&(h||E)){const a=this.getAssignedLODInformation(n);console.log(`[gltf-progressive] Disposed old texture LOD ${a?.level??"?"} → ${e} for ${s.name||s.type}.${r}`,n.uuid)}s[r]=o}return o}else h=="verbose"&&console.warn("No LOD found for",t,e);return null}).catch(o=>(console.error("Error loading LOD",t,o),null))}parser;url;constructor(t){const e=t.options.path;h&&console.log("Progressive extension registered for",e),this.parser=t,this.url=e}_isLoadingMesh;loadMesh=t=>{if(this._isLoadingMesh)return null;const e=this.parser.json.meshes[t]?.extensions?.[F];return e?(this._isLoadingMesh=!0,this.parser.getDependency("mesh",t).then(s=>(this._isLoadingMesh=!1,s&&y.registerMesh(this.url,e.guid,s,e.lods?.length,0,e),s))):null};afterRoot(t){return h&&console.log("AFTER",this.url,t),this.parser.json.textures?.forEach((e,s)=>{if(e?.extensions){const r=e?.extensions[F];if(r){if(!r.lods){h&&console.warn("Texture has no LODs",r);return}let o=!1;for(const n of this.parser.associations.keys())n.isTexture===!0&&this.parser.associations.get(n)?.textures===s&&(o=!0,y.registerTexture(this.url,n,r.lods?.length,s,r));o||this.parser.getDependency("texture",s).then(n=>{n&&y.registerTexture(this.url,n,r.lods?.length,s,r)})}}}),this.parser.json.meshes?.forEach((e,s)=>{if(e?.extensions){const r=e?.extensions[F];if(r&&r.lods){for(const o of this.parser.associations.keys())if(o.isMesh){const n=this.parser.associations.get(o);n?.meshes===s&&y.registerMesh(this.url,r.guid,o,r.lods.length,n.primitives,r)}}}}),null}static registerTexture=(t,e,s,r,o)=>{if(!e){h&&console.error("!! gltf-progressive: Called register texture without texture");return}if(h){const l=e.image?.width||e.source?.data?.width||0,a=e.image?.height||e.source?.data?.height||0;console.log(`> gltf-progressive: register texture[${r}] "${e.name||e.uuid}", Current: ${l}x${a}, Max: ${o.lods[0]?.width}x${o.lods[0]?.height}, uuid: ${e.uuid}`,o,e)}e.source&&(e.source[ce]=o);const n=o.guid;y.assignLODInformation(t,e,n,s,r),y.lodInfos.set(n,o),y.lowresCache.set(n,new WeakRef(e))};static registerMesh=(t,e,s,r,o,n)=>{const l=s.geometry;if(!l){h&&console.warn("gltf-progressive: Register mesh without geometry");return}l.userData||(l.userData={}),h&&console.log("> Progressive: register mesh "+s.name,{index:o,uuid:s.uuid},n,s),y.assignLODInformation(t,l,e,r,o),y.lodInfos.set(e,n);let u=y.lowresCache.get(e)?.deref();u?u.push(s.geometry):u=[s.geometry],y.lowresCache.set(e,new WeakRef(u)),r>0&&!j(s)&&Xe(s,l);for(const d of W)d.onRegisteredNewMesh?.(s,n)};static dispose(t){if(t){this.lodInfos.delete(t);const e=this.lowresCache.get(t);if(e){const s=e.deref();if(s){if(s.isTexture){const r=s;this.textureRefCounts.delete(r.uuid),r.dispose()}else if(Array.isArray(s))for(const r of s)r.dispose()}this.lowresCache.delete(t)}for(const[s,r]of this.cache)s.includes(t)&&(this._disposeCacheEntry(r),this.cache.delete(s))}else{this.lodInfos.clear();for(const[,e]of this.lowresCache){const s=e.deref();if(s){if(s.isTexture){const r=s;this.textureRefCounts.delete(r.uuid),r.dispose()}else if(Array.isArray(s))for(const r of s)r.dispose()}}this.lowresCache.clear();for(const[,e]of this.cache)this._disposeCacheEntry(e);this.cache.clear(),this.textureRefCounts.clear()}}static _disposeCacheEntry(t){if(t instanceof WeakRef){const e=t.deref();e&&(e.isTexture&&this.textureRefCounts.delete(e.uuid),e.dispose())}else t.then(e=>{if(e)if(Array.isArray(e))for(const s of e)s.dispose();else e.isTexture&&this.textureRefCounts.delete(e.uuid),e.dispose()}).catch(()=>{})}static lodInfos=new Map;static cache=new Map;static lowresCache=new Map;static textureRefCounts=new Map;static _resourceRegistry=new FinalizationRegistry(t=>{const e=y.cache.get(t);(h||E)&&console.debug(`[gltf-progressive] Memory: Resource GC'd
|
|
1
|
+
"use strict";const c=require("./three.umd.cjs"),X=require("./three-examples.umd.cjs");var le=typeof document<"u"?document.currentScript:null;const $e="";globalThis.GLTF_PROGRESSIVE_VERSION=$e;console.debug("[gltf-progressive] version -");let I="https://www.gstatic.com/draco/versioned/decoders/1.5.7/",N="https://cdn.needle.tools/static/three/0.179.1/basis2/";const Be=I,Ge=N,be=new URL(I+"draco_decoder.js");be.searchParams.append("range","true");fetch(be,{method:"GET",headers:{Range:"bytes=0-1"}}).catch(i=>{console.debug(`Failed to fetch remote Draco decoder from ${I} (offline: ${typeof navigator<"u"?navigator.onLine:"unknown"})`),I===Be&&Oe("./include/draco/"),N===Ge&&Se("./include/ktx2/")}).finally(()=>{Te()});const Fe=()=>({dracoDecoderPath:I,ktx2TranscoderPath:N});function Oe(i){I=i,A&&A[pe]!=I?(console.debug("Updating Draco decoder path to "+i),A[pe]=I,A.setDecoderPath(I),A.preload()):console.debug("Setting Draco decoder path to "+i)}function Se(i){N=i,$&&$.transcoderPath!=N?(console.debug("Updating KTX2 transcoder path to "+i),$.setTranscoderPath(N),$.init()):console.debug("Setting KTX2 transcoder path to "+i)}function ne(i){return Te(),i?$.detectSupport(i):i!==null&&console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures might fail"),{dracoLoader:A,ktx2Loader:$,meshoptDecoder:oe}}function xe(i){i.dracoLoader||i.setDRACOLoader(A),i.ktx2Loader||i.setKTX2Loader($),i.meshoptDecoder||i.setMeshoptDecoder(oe)}const pe=Symbol("dracoDecoderPath");let A,oe,$;function Te(){A||(A=new X.DRACOLoader,A[pe]=I,A.setDecoderPath(I),A.setDecoderConfig({type:"js"}),A.preload()),$||($=new X.KTX2Loader,$.setTranscoderPath(N),$.init()),oe||(oe=X.MeshoptDecoder)}const me=new WeakMap;function we(i,t){let e=me.get(i);e?e=Object.assign(e,t):e=t,me.set(i,e)}const Ue=X.GLTFLoader.prototype.load;function We(...i){const t=me.get(this);let e=i[0];const s=new URL(e,window.location.href);if(s.hostname.endsWith("needle.tools")){const o=t?.progressive!==void 0?t.progressive:!0,n=t?.usecase?t.usecase:"default";o?this.requestHeader.Accept=`*/*;progressive=allowed;usecase=${n}`:this.requestHeader.Accept=`*/*;usecase=${n}`,e=s.toString()}return i[0]=e,Ue?.call(this,...i)}X.GLTFLoader.prototype.load=We;z("debugprogressive");function z(i){if(typeof window>"u")return!1;const e=new URL(window.location.href).searchParams.get(i);return e==null||e==="0"||e==="false"?!1:e===""?!0:e}function ze(i,t){if(t===void 0||i===void 0||t.startsWith("./")||t.startsWith("http")||t.startsWith("data:")||t.startsWith("blob:"))return t;const e=i.lastIndexOf("/");if(e>=0){const s=i.substring(0,e+1);for(;s.endsWith("/")&&t.startsWith("/");)t=t.substring(1);return s+t}return t}function Pe(){return Y!==void 0||(Y=/iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent),z("debugprogressive")&&console.log("[glTF Progressive]: isMobileDevice",Y)),Y}let Y;function _e(){if(typeof window>"u")return!1;const i=new URL(window.location.href),t=i.hostname==="localhost"||/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(i.hostname);return i.hostname==="127.0.0.1"||t}class Ve{constructor(t=100,e={}){this.maxConcurrent=t,this.debug=e.debug??!1,window.requestAnimationFrame(this.tick)}_running=new Map;_queue=[];debug=!1;tick=()=>{this.internalUpdate(),setTimeout(this.tick,10)};slot(t){return this.debug&&console.debug(`[PromiseQueue]: Requesting slot for key ${t}, running: ${this._running.size}, waiting: ${this._queue.length}`),new Promise(e=>{this._queue.push({key:t,resolve:e})})}add(t,e){this._running.has(t)||(this._running.set(t,e),e.finally(()=>{this._running.delete(t),this.debug&&console.debug(`[PromiseQueue]: Promise finished now running: ${this._running.size}, waiting: ${this._queue.length}. (finished ${t})`)}),this.debug&&console.debug(`[PromiseQueue]: Added new promise, now running: ${this._running.size}, waiting: ${this._queue.length}. (added ${t})`))}internalUpdate(){const t=this.maxConcurrent-this._running.size;for(let e=0;e<t&&this._queue.length>0;e++){this.debug&&console.debug(`[PromiseQueue]: Running ${this._running.size} promises, waiting for ${this._queue.length} more.`);const{key:s,resolve:r}=this._queue.shift();r({use:o=>this.add(s,o)})}}}function qe(i){const t=i.image?.width??0,e=i.image?.height??0,s=i.image?.depth??1,r=Math.floor(Math.log2(Math.max(t,e,s)))+1,o=Ne(i);return t*e*s*o*(1-Math.pow(.25,r))/(1-.25)}function Ne(i){let t=4;const e=i.format;e===1024||e===1025?t=1:e===1026||e===1027?t=2:e===1022||e===1029?t=3:(e===1023||e===1033)&&(t=4);let s=1;const r=i.type;return r===1009||r===1010?s=1:r===1011||r===1012?s=2:r===1013||r===1014||r===1015?s=4:r===1016&&(s=2),t*s}const Ee=typeof window>"u"&&typeof document>"u",ye=Symbol("needle:raycast-mesh");function j(i){return i?.[ye]instanceof c.BufferGeometry?i[ye]:null}function Xe(i,t){if((i.type==="Mesh"||i.type==="SkinnedMesh")&&!j(i)){const s=Ke(t);s.userData={isRaycastMesh:!0},i[ye]=s}}function je(i=!0){if(i){if(H)return;const t=H=c.Mesh.prototype.raycast;c.Mesh.prototype.raycast=function(e,s){const r=this,o=j(r);let n;o&&r.isMesh&&(n=r.geometry,r.geometry=o),t.call(this,e,s),n&&(r.geometry=n)}}else{if(!H)return;c.Mesh.prototype.raycast=H,H=null}}let H=null;function Ke(i){const t=new c.BufferGeometry;for(const e in i.attributes)t.setAttribute(e,i.getAttribute(e));return t.setIndex(i.getIndex()),t}const W=new Array,h=z("debugprogressive");let J,q=-1;if(h){let i=function(){q+=1,q>=t&&(q=-1),console.log(`Toggle LOD level [${q}]`)},t=6;window.addEventListener("keyup",e=>{e.key==="p"&&i(),e.key==="w"&&(J=!J,console.log(`Toggle wireframe [${J}]`));const s=parseInt(e.key);!isNaN(s)&&s>=0&&(q=s,console.log(`Set LOD level to [${q}]`))})}function Ce(i){if(h&&J!==void 0)if(Array.isArray(i))for(const t of i)Ce(t);else i&&"wireframe"in i&&(i.wireframe=J===!0)}const Q=new Array;let Ye=0;const He=Pe()?2:10;function Qe(i){if(Q.length<He){const s=Q.length;h&&console.warn(`[Worker] Creating new worker #${s}`);const r=Le.createWorker(i||{});return Q.push(r),r}const t=Ye++%Q.length;return Q[t]}class Le{constructor(t,e){this.worker=t,this._debug=e.debug??!1,t.onmessage=s=>{const r=s.data;switch(this._debug&&console.log("[Worker] EVENT",r),r.type){case"loaded-gltf":for(const o of this._running)if(o.url===r.result.url){Je(r.result),o.resolve(r.result);const n=o.url;n.startsWith("blob:")&&URL.revokeObjectURL(n)}}},t.onerror=s=>{console.error("[Worker] Error in gltf-progressive worker:",s)},t.postMessage({type:"init"})}static async createWorker(t){const e=new Worker(new URL("/loader.worker-BqODMeeW.js",typeof document>"u"?require("url").pathToFileURL(__filename).href:le&&le.tagName.toUpperCase()==="SCRIPT"&&le.src||new URL("gltf-progressive-LOFTyzy4.umd.cjs",document.baseURI).href),{type:"module"});return new Le(e,t)}_running=[];_webglRenderer=null;async load(t,e){const s=Fe();let r=e?.renderer;r||(this._webglRenderer??=(async()=>{const{WebGLRenderer:u}=await Promise.resolve().then(()=>require("./three.umd.cjs")).then(d=>d.THREE);return new u})(),r=await this._webglRenderer);const l=ne(r).ktx2Loader.workerConfig;t instanceof URL?t=t.toString():t.startsWith("file:")?t=URL.createObjectURL(new Blob([t])):!t.startsWith("blob:")&&!t.startsWith("http:")&&!t.startsWith("https:")&&(t=new URL(t,window.location.href).toString());const a={type:"load",url:t,dracoDecoderPath:s.dracoDecoderPath,ktx2TranscoderPath:s.ktx2TranscoderPath,ktx2LoaderConfig:l};return this._debug&&console.debug("[Worker] Sending load request",a),this.worker.postMessage(a),new Promise(u=>{this._running.push({url:t.toString(),resolve:u})})}_debug=!1}function Je(i){for(const t of i.geometries){const e=t.geometry,s=new c.BufferGeometry;if(s.name=e.name||"",e.index){const r=e.index;s.setIndex(ue(r))}for(const r in e.attributes){const o=e.attributes[r],n=ue(o);s.setAttribute(r,n)}if(e.morphAttributes)for(const r in e.morphAttributes){const n=e.morphAttributes[r].map(l=>ue(l));s.morphAttributes[r]=n}if(s.morphTargetsRelative=e.morphTargetsRelative??!1,s.boundingBox=new c.Box3,s.boundingBox.min=new c.Vector3(e.boundingBox?.min.x,e.boundingBox?.min.y,e.boundingBox?.min.z),s.boundingBox.max=new c.Vector3(e.boundingBox?.max.x,e.boundingBox?.max.y,e.boundingBox?.max.z),s.boundingSphere=new c.Sphere(new c.Vector3(e.boundingSphere?.center.x,e.boundingSphere?.center.y,e.boundingSphere?.center.z),e.boundingSphere?.radius),e.groups)for(const r of e.groups)s.addGroup(r.start,r.count,r.materialIndex);e.userData&&(s.userData=e.userData),t.geometry=s}for(const t of i.textures){const e=t.texture;let s=null;if(e.isCompressedTexture){const r=e.mipmaps,o=e.image?.width||e.source?.data?.width||-1,n=e.image?.height||e.source?.data?.height||-1;s=new c.CompressedTexture(r,o,n,e.format,e.type,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.anisotropy,e.colorSpace)}else s=new c.Texture(e.image,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.colorSpace),s.mipmaps=e.mipmaps,s.channel=e.channel,s.source.data=e.source.data,s.flipY=e.flipY,s.premultiplyAlpha=e.premultiplyAlpha,s.unpackAlignment=e.unpackAlignment,s.matrix=new c.Matrix3(...e.matrix.elements);if(!s){console.error("[Worker] Failed to create new texture from received data. Texture is not a CompressedTexture or Texture.");continue}t.texture=s}return i}function ue(i){let t=i;if("isInterleavedBufferAttribute"in i&&i.isInterleavedBufferAttribute){const e=i.data,s=e.array,r=new c.InterleavedBuffer(s,e.stride);t=new c.InterleavedBufferAttribute(r,i.itemSize,s.byteOffset,i.normalized),t.offset=i.offset}else"isBufferAttribute"in i&&i.isBufferAttribute&&(t=new c.BufferAttribute(i.array,i.itemSize,i.normalized),t.usage=i.usage,t.gpuType=i.gpuType,t.updateRanges=i.updateRanges);return t}const Ze=z("gltf-progressive-worker");z("gltf-progressive-reduce-mipmaps");const E=z("gltf-progressive-gc"),ce=Symbol("needle-progressive-texture"),F="NEEDLE_progressive";class y{get name(){return F}static getMeshLODExtension(t){const e=this.getAssignedLODInformation(t);return e?.key?this.lodInfos.get(e.key):null}static getPrimitiveIndex(t){const e=this.getAssignedLODInformation(t)?.index;return e??-1}static getMaterialMinMaxLODsCount(t,e){const s=this,r="LODS:minmax",o=t[r];if(o!=null)return o;if(e||(e={min_count:1/0,max_count:0,lods:[]}),Array.isArray(t)){for(const l of t)this.getMaterialMinMaxLODsCount(l,e);return t[r]=e,e}if(h==="verbose"&&console.log("getMaterialMinMaxLODsCount",t),t.type==="ShaderMaterial"||t.type==="RawShaderMaterial"){const l=t;for(const a of Object.keys(l.uniforms)){const u=l.uniforms[a].value;u?.isTexture===!0&&n(u,e)}}else if(t.isMaterial)for(const l of Object.keys(t)){const a=t[l];a?.isTexture===!0&&n(a,e)}else h&&console.warn(`[getMaterialMinMaxLODsCount] Unsupported material type: ${t.type}`);return t[r]=e,e;function n(l,a){const u=s.getAssignedLODInformation(l);if(u){const d=s.lodInfos.get(u.key);if(d&&d.lods){a.min_count=Math.min(a.min_count,d.lods.length),a.max_count=Math.max(a.max_count,d.lods.length);for(let x=0;x<d.lods.length;x++){const L=d.lods[x];L.width&&(a.lods[x]=a.lods[x]||{min_height:1/0,max_height:0},a.lods[x].min_height=Math.min(a.lods[x].min_height,L.height),a.lods[x].max_height=Math.max(a.lods[x].max_height,L.height))}}}}}static hasLODLevelAvailable(t,e){if(Array.isArray(t)){for(const o of t)if(this.hasLODLevelAvailable(o,e))return!0;return!1}if(t.isMaterial===!0){for(const o of Object.keys(t)){const n=t[o];if(n&&n.isTexture&&this.hasLODLevelAvailable(n,e))return!0}return!1}else if(t.isGroup===!0){for(const o of t.children)if(o.isMesh===!0&&this.hasLODLevelAvailable(o,e))return!0}let s,r;if(t.isMesh?s=t.geometry:(t.isBufferGeometry||t.isTexture)&&(s=t),s&&s?.userData?.LODS){const o=s.userData.LODS;if(r=this.lodInfos.get(o.key),e===void 0)return r!=null;if(r)return Array.isArray(r.lods)?e<r.lods.length:e===0}return!1}static assignMeshLOD(t,e){if(!t)return Promise.resolve(null);if(t instanceof c.Mesh||t.isMesh===!0){const s=t.geometry,r=this.getAssignedLODInformation(s);if(!r)return Promise.resolve(null);for(const o of W)o.onBeforeGetLODMesh?.(t,e);return t["LOD:requested level"]=e,y.getOrLoadLOD(s,e).then(o=>{if(Array.isArray(o)){const n=r.index||0;o=o[n]}return t["LOD:requested level"]===e&&(delete t["LOD:requested level"],o&&s!=o&&(o?.isBufferGeometry?t.geometry=o:h&&console.error("Invalid LOD geometry",o))),o}).catch(o=>(console.error("Error loading mesh LOD",t,o),null))}else h&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",t);return Promise.resolve(null)}static assignTextureLOD(t,e=0){if(!t)return Promise.resolve(null);if(t.isMesh===!0){const s=t;if(Array.isArray(s.material)){const r=new Array;for(const o of s.material){const n=this.assignTextureLOD(o,e);r.push(n)}return Promise.all(r).then(o=>{const n=new Array;for(const l of o)Array.isArray(l)&&n.push(...l);return n})}else return this.assignTextureLOD(s.material,e)}if(t.isMaterial===!0){const s=t,r=[],o=new Array;if(s.uniforms&&(s.isRawShaderMaterial||s.isShaderMaterial===!0)){const n=s;for(const l of Object.keys(n.uniforms)){const a=n.uniforms[l].value;if(a?.isTexture===!0){const u=this.assignTextureLODForSlot(a,e,s,l).then(d=>(d&&n.uniforms[l].value!=d&&(n.uniforms[l].value=d,n.uniformsNeedUpdate=!0),d));r.push(u),o.push(l)}}}else for(const n of Object.keys(s)){const l=s[n];if(l?.isTexture===!0){const a=this.assignTextureLODForSlot(l,e,s,n);r.push(a),o.push(n)}}return Promise.all(r).then(n=>{const l=new Array;for(let a=0;a<n.length;a++){const u=n[a],d=o[a];u&&u.isTexture===!0?l.push({material:s,slot:d,texture:u,level:e}):l.push({material:s,slot:d,texture:null,level:e})}return l})}if(t instanceof c.Texture||t.isTexture===!0){const s=t;return this.assignTextureLODForSlot(s,e,null,null)}return Promise.resolve(null)}static assignTextureLODForSlot(t,e,s,r){return t?.isTexture!==!0?Promise.resolve(null):r==="glyphMap"?Promise.resolve(t):y.getOrLoadLOD(t,e).then(o=>{if(Array.isArray(o))return console.warn("Progressive: Got an array of textures for a texture slot, this should not happen..."),null;if(o?.isTexture===!0){if(o!=t&&s&&r){const n=s[r];if(n&&!h){const l=this.getAssignedLODInformation(n);if(l&&l?.level<e)return h==="verbose"&&console.warn("Assigned texture level is already higher: ",l.level,e,s,n,o),o&&o!==n&&((h||E)&&console.log(`[gltf-progressive] Disposing rejected lower-quality texture LOD ${e} (assigned is ${l.level})`,o.uuid),o.dispose()),null}if(this.trackTextureUsage(o),n&&n!==o&&this.untrackTextureUsage(n)&&(h||E)){const a=this.getAssignedLODInformation(n);console.log(`[gltf-progressive] Disposed old texture LOD ${a?.level??"?"} → ${e} for ${s.name||s.type}.${r}`,n.uuid)}s[r]=o}return o}else h=="verbose"&&console.warn("No LOD found for",t,e);return null}).catch(o=>(console.error("Error loading LOD",t,o),null))}parser;url;constructor(t){const e=t.options.path;h&&console.log("Progressive extension registered for",e),this.parser=t,this.url=e}_isLoadingMesh;loadMesh=t=>{if(this._isLoadingMesh)return null;const e=this.parser.json.meshes[t]?.extensions?.[F];return e?(this._isLoadingMesh=!0,this.parser.getDependency("mesh",t).then(s=>(this._isLoadingMesh=!1,s&&y.registerMesh(this.url,e.guid,s,e.lods?.length,0,e),s))):null};afterRoot(t){return h&&console.log("AFTER",this.url,t),this.parser.json.textures?.forEach((e,s)=>{if(e?.extensions){const r=e?.extensions[F];if(r){if(!r.lods){h&&console.warn("Texture has no LODs",r);return}let o=!1;for(const n of this.parser.associations.keys())n.isTexture===!0&&this.parser.associations.get(n)?.textures===s&&(o=!0,y.registerTexture(this.url,n,r.lods?.length,s,r));o||this.parser.getDependency("texture",s).then(n=>{n&&y.registerTexture(this.url,n,r.lods?.length,s,r)})}}}),this.parser.json.meshes?.forEach((e,s)=>{if(e?.extensions){const r=e?.extensions[F];if(r&&r.lods){for(const o of this.parser.associations.keys())if(o.isMesh){const n=this.parser.associations.get(o);n?.meshes===s&&y.registerMesh(this.url,r.guid,o,r.lods.length,n.primitives,r)}}}}),null}static registerTexture=(t,e,s,r,o)=>{if(!e){h&&console.error("!! gltf-progressive: Called register texture without texture");return}if(h){const l=e.image?.width||e.source?.data?.width||0,a=e.image?.height||e.source?.data?.height||0;console.log(`> gltf-progressive: register texture[${r}] "${e.name||e.uuid}", Current: ${l}x${a}, Max: ${o.lods[0]?.width}x${o.lods[0]?.height}, uuid: ${e.uuid}`,o,e)}e.source&&(e.source[ce]=o);const n=o.guid;y.assignLODInformation(t,e,n,s,r),y.lodInfos.set(n,o),y.lowresCache.set(n,new WeakRef(e))};static registerMesh=(t,e,s,r,o,n)=>{const l=s.geometry;if(!l){h&&console.warn("gltf-progressive: Register mesh without geometry");return}l.userData||(l.userData={}),h&&console.log("> Progressive: register mesh "+s.name,{index:o,uuid:s.uuid},n,s),y.assignLODInformation(t,l,e,r,o),y.lodInfos.set(e,n);let u=y.lowresCache.get(e)?.deref();u?u.push(s.geometry):u=[s.geometry],y.lowresCache.set(e,new WeakRef(u)),r>0&&!j(s)&&Xe(s,l);for(const d of W)d.onRegisteredNewMesh?.(s,n)};static dispose(t){if(t){this.lodInfos.delete(t);const e=this.lowresCache.get(t);if(e){const s=e.deref();if(s){if(s.isTexture){const r=s;this.textureRefCounts.delete(r.uuid),r.dispose()}else if(Array.isArray(s))for(const r of s)r.dispose()}this.lowresCache.delete(t)}for(const[s,r]of this.cache)s.includes(t)&&(this._disposeCacheEntry(r),this.cache.delete(s))}else{this.lodInfos.clear();for(const[,e]of this.lowresCache){const s=e.deref();if(s){if(s.isTexture){const r=s;this.textureRefCounts.delete(r.uuid),r.dispose()}else if(Array.isArray(s))for(const r of s)r.dispose()}}this.lowresCache.clear();for(const[,e]of this.cache)this._disposeCacheEntry(e);this.cache.clear(),this.textureRefCounts.clear()}}static _disposeCacheEntry(t){if(t instanceof WeakRef){const e=t.deref();e&&(e.isTexture&&this.textureRefCounts.delete(e.uuid),e.dispose())}else t.then(e=>{if(e)if(Array.isArray(e))for(const s of e)s.dispose();else e.isTexture&&this.textureRefCounts.delete(e.uuid),e.dispose()}).catch(()=>{})}static lodInfos=new Map;static cache=new Map;static lowresCache=new Map;static textureRefCounts=new Map;static _resourceRegistry=new FinalizationRegistry(t=>{const e=y.cache.get(t);(h||E)&&console.debug(`[gltf-progressive] Memory: Resource GC'd
|
|
2
2
|
${t}`),e instanceof WeakRef&&(e.deref()||(y.cache.delete(t),(h||E)&&console.log("[gltf-progressive] ↪ Cache entry deleted (GC)")))});static trackTextureUsage(t){const e=t.uuid,s=this.textureRefCounts.get(e)||0;this.textureRefCounts.set(e,s+1),h==="verbose"&&console.log(`[gltf-progressive] Track texture ${e}, refCount: ${s} → ${s+1}`)}static untrackTextureUsage(t){const e=t.uuid,s=this.textureRefCounts.get(e);if(!s)return(h==="verbose"||E)&&o("[gltf-progressive] Memory: Untrack untracked texture (dispose immediately)",0),t.dispose(),!0;const r=s-1;if(r<=0)return this.textureRefCounts.delete(e),(h||E)&&o("[gltf-progressive] Memory: Dispose texture",r),t.dispose(),!0;return this.textureRefCounts.set(e,r),h==="verbose"&&o("[gltf-progressive] Memory: Untrack texture",r),!1;function o(n,l){let a=t.image?.width||t.source?.data?.width||0,u=t.image?.height||t.source?.data?.height||0;const d=a&&u?`${a}x${u}`:"N/A";let x="N/A";a&&u&&(x=`~${(qe(t)/(1024*1024)).toFixed(2)} MB`),console.log(`${n} — ${t.name} ${d} (${x}), refCount: ${s} → ${l}
|
|
3
3
|
${e}`)}}static workers=[];static _workersIndex=0;static async getOrLoadLOD(t,e){const s=h=="verbose",r=this.getAssignedLODInformation(t);if(!r)return h&&console.warn(`[gltf-progressive] No LOD information found: ${t.name}, uuid: ${t.uuid}, type: ${t.type}`,t),null;const o=r?.key;let n;if(t.isTexture===!0){const a=t;a.source&&a.source[ce]&&(n=a.source[ce])}if(n||(n=y.lodInfos.get(o)),!n)h&&console.warn(`Can not load LOD ${e}: no LOD info found for "${o}" ${t.name}`,t.type,y.lodInfos);else{if(e>0){let d=!1;const x=Array.isArray(n.lods);if(x&&e>=n.lods.length?d=!0:x||(d=!0),d){const L=this.lowresCache.get(o);if(L){const _=L.deref();if(_)return _;this.lowresCache.delete(o),h&&console.log(`[gltf-progressive] Lowres cache entry was GC'd: ${o}`)}return null}}const a=Array.isArray(n.lods)?n.lods[e]?.path:n.lods;if(!a)return h&&!n["missing:uri"]&&(n["missing:uri"]=!0,console.warn("Missing uri for progressive asset for LOD "+e,n)),null;const u=ze(r.url,a);if(u.endsWith(".glb")||u.endsWith(".gltf")){if(!n.guid)return console.warn("missing pointer for glb/gltf texture",n),null;const d=u+"_"+n.guid,x=await this.queue.slot(u),L=this.cache.get(d);if(L!==void 0)if(s&&console.log(`LOD ${e} was already loading/loaded: ${d}`),L instanceof WeakRef){const f=L.deref();if(f){let p=f,v=!1;if(p instanceof c.Texture&&t instanceof c.Texture?p.image?.data||p.source?.data?p=this.copySettings(t,p):v=!0:p instanceof c.BufferGeometry&&t instanceof c.BufferGeometry&&(p.attributes.position?.array||(v=!0)),!v)return p}this.cache.delete(d),h&&console.log(`[gltf-progressive] Re-loading GC'd/disposed resource: ${d}`)}else{let f=await L.catch(v=>(console.error(`Error loading LOD ${e} from ${u}
|
|
4
4
|
`,v),null)),p=!1;if(f==null||(f instanceof c.Texture&&t instanceof c.Texture?f.image?.data||f.source?.data?f=this.copySettings(t,f):(p=!0,this.cache.delete(d)):f instanceof c.BufferGeometry&&t instanceof c.BufferGeometry&&(f.attributes.position?.array||(p=!0,this.cache.delete(d)))),!p)return f}if(!x.use)return h&&console.log(`LOD ${e} was aborted: ${u}`),null;const _=n,R=new Promise(async(f,p)=>{if(Ze){const w=await(await Qe({})).load(u);if(w.textures.length>0)for(const g of w.textures){let m=g.texture;return y.assignLODInformation(r.url,m,o,e,void 0),t instanceof c.Texture&&(m=this.copySettings(t,m)),m&&(m.guid=_.guid),f(m)}if(w.geometries.length>0){const g=new Array;for(const m of w.geometries){const O=m.geometry;y.assignLODInformation(r.url,O,o,e,m.primitiveIndex),g.push(O)}return f(g)}return f(null)}const v=new X.GLTFLoader;xe(v),h&&(await new Promise(M=>setTimeout(M,1e3)),s&&console.warn("Start loading (delayed) "+u,_.guid));let B=u;if(_&&Array.isArray(_.lods)){const M=_.lods[e];M.hash&&(B+="?v="+M.hash)}const b=await v.loadAsync(B).catch(M=>(console.error(`Error loading LOD ${e} from ${u}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BufferGeometry as V, Mesh as X, Box3 as pe, Vector3 as A, Sphere as Se, CompressedTexture as Fe, Texture as F, Matrix3 as We, InterleavedBuffer as Ue, InterleavedBufferAttribute as ze, BufferAttribute as Ne, TextureLoader as qe, Matrix4 as Me, Clock as Ee, MeshStandardMaterial as Ve } from "./three
|
|
2
|
-
import { DRACOLoader as Xe, KTX2Loader as je, MeshoptDecoder as Ke, GLTFLoader as we } from "./three-examples
|
|
1
|
+
import { BufferGeometry as V, Mesh as X, Box3 as pe, Vector3 as A, Sphere as Se, CompressedTexture as Fe, Texture as F, Matrix3 as We, InterleavedBuffer as Ue, InterleavedBufferAttribute as ze, BufferAttribute as Ne, TextureLoader as qe, Matrix4 as Me, Clock as Ee, MeshStandardMaterial as Ve } from "./three.js";
|
|
2
|
+
import { DRACOLoader as Xe, KTX2Loader as je, MeshoptDecoder as Ke, GLTFLoader as we } from "./three-examples.js";
|
|
3
3
|
const Ye = "";
|
|
4
4
|
globalThis.GLTF_PROGRESSIVE_VERSION = Ye;
|
|
5
5
|
console.debug("[gltf-progressive] version -");
|
|
@@ -220,7 +220,7 @@ class _e {
|
|
|
220
220
|
const s = Je();
|
|
221
221
|
let r = e?.renderer;
|
|
222
222
|
r || (this._webglRenderer ??= (async () => {
|
|
223
|
-
const { WebGLRenderer: u } = await import("./three
|
|
223
|
+
const { WebGLRenderer: u } = await import("./three.js").then((c) => c.THREE);
|
|
224
224
|
return new u();
|
|
225
225
|
})(), r = await this._webglRenderer);
|
|
226
226
|
const l = Le(r).ktx2Loader.workerConfig;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./three-BjYim-vL.umd.cjs");require("./three-examples-BHqRVpO_.umd.cjs");var WI=(function(){var J=typeof document<"u"?document.currentScript?.src:void 0;return typeof __filename<"u"&&(J=J||__filename),(function(N){N=N||{};var R,D=N,H,U,M=new Promise((A,I)=>{H=A,U=I}),T=typeof window=="object",F=typeof WorkerGlobalScope<"u",K=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";D.expectedDataFileDownloads??=0,D.expectedDataFileDownloads++,(()=>{var A=typeof ENVIRONMENT_IS_PTHREAD<"u"&&ENVIRONMENT_IS_PTHREAD,I=typeof ENVIRONMENT_IS_WASM_WORKER<"u"&&ENVIRONMENT_IS_WASM_WORKER;if(A||I)return;var g=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";function B(C){typeof window=="object"?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):typeof process>"u"&&typeof location<"u"&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var E="bin/JsMaterialXGenShader.data",G="JsMaterialXGenShader.data",i=D.locateFile?D.locateFile(G,""):G,Y=C.remote_package_size;function h(o,s,j,m){if(g){require("fs").readFile(o,(V,q)=>{V?m(V):j(q.buffer)});return}D.dataFileDownloads??={},fetch(o).catch(V=>Promise.reject(new Error(`Network Error: ${o}`,{cause:V}))).then(V=>{if(!V.ok)return Promise.reject(new Error(`${V.status}: ${V.url}`));if(!V.body&&V.arrayBuffer)return V.arrayBuffer().then(j);const q=V.body.getReader(),CA=()=>q.read().then(c).catch(W=>Promise.reject(new Error(`Unexpected error while handling : ${V.url} ${W}`,{cause:W}))),$=[],hA=V.headers,l=Number(hA.get("Content-Length")??s);let k=0;const c=({done:W,value:L})=>{if(W){const IA=new Uint8Array($.map(u=>u.length).reduce((u,ZA)=>u+ZA,0));let QA=0;for(const u of $)IA.set(u,QA),QA+=u.length;j(IA.buffer)}else{$.push(L),k+=L.length,D.dataFileDownloads[o]={loaded:k,total:l};let IA=0,QA=0;for(const u of Object.values(D.dataFileDownloads))IA+=u.loaded,QA+=u.total;return D.setStatus?.(`Downloading data... (${IA}/${QA})`),CA()}};return D.setStatus?.("Downloading data..."),CA()})}function w(o){console.error("package error:",o)}var Z=null,b=D.getPreloadedPackage?D.getPreloadedPackage(i,Y):null;b||h(i,Y,o=>{Z?(Z(o),Z=null):b=o},w);function S(o){function s(CA,$){if(!CA)throw $+new Error().stack}o.FS_createPath("/","libraries",!0,!0),o.FS_createPath("/libraries","bxdf",!0,!0),o.FS_createPath("/libraries/bxdf","genglsl",!0,!0),o.FS_createPath("/libraries/bxdf","genmdl",!0,!0),o.FS_createPath("/libraries/bxdf","lama",!0,!0),o.FS_createPath("/libraries/bxdf","translation",!0,!0),o.FS_createPath("/libraries","cmlib",!0,!0),o.FS_createPath("/libraries","lights",!0,!0),o.FS_createPath("/libraries/lights","genglsl",!0,!0),o.FS_createPath("/libraries/lights","genmsl",!0,!0),o.FS_createPath("/libraries","nprlib",!0,!0),o.FS_createPath("/libraries/nprlib","genglsl",!0,!0),o.FS_createPath("/libraries/nprlib","genmdl",!0,!0),o.FS_createPath("/libraries/nprlib","genmsl",!0,!0),o.FS_createPath("/libraries/nprlib","genosl",!0,!0),o.FS_createPath("/libraries","pbrlib",!0,!0),o.FS_createPath("/libraries/pbrlib","genglsl",!0,!0),o.FS_createPath("/libraries/pbrlib/genglsl","lib",!0,!0),o.FS_createPath("/libraries/pbrlib","genmdl",!0,!0),o.FS_createPath("/libraries/pbrlib","genmsl",!0,!0),o.FS_createPath("/libraries/pbrlib","genosl",!0,!0),o.FS_createPath("/libraries/pbrlib/genosl","lib",!0,!0),o.FS_createPath("/libraries","stdlib",!0,!0),o.FS_createPath("/libraries/stdlib","genglsl",!0,!0),o.FS_createPath("/libraries/stdlib/genglsl","lib",!0,!0),o.FS_createPath("/libraries/stdlib","genmdl",!0,!0),o.FS_createPath("/libraries/stdlib","genmsl",!0,!0),o.FS_createPath("/libraries/stdlib/genmsl","lib",!0,!0),o.FS_createPath("/libraries/stdlib","genosl",!0,!0),o.FS_createPath("/libraries/stdlib/genosl","include",!0,!0),o.FS_createPath("/libraries/stdlib/genosl","lib",!0,!0),o.FS_createPath("/libraries","targets",!0,!0);function j(CA,$,hA){this.start=CA,this.end=$,this.audio=hA}j.prototype={requests:{},open:function(CA,$){this.name=$,this.requests[$]=this,o.addRunDependency(`fp ${this.name}`)},send:function(){},onload:function(){var CA=this.byteArray.subarray(this.start,this.end);this.finish(CA)},finish:function(CA){var $=this;o.FS_createDataFile(this.name,null,CA,!0,!0,!0),o.removeRunDependency(`fp ${$.name}`),this.requests[this.name]=null}};for(var m=C.files,V=0;V<m.length;++V)new j(m[V].start,m[V].end,m[V].audio||0).open("GET",m[V].filename);function q(CA){s(CA,"Loading data file failed."),s(CA.constructor.name===ArrayBuffer.name,"bad input to processPackageData");var $=new Uint8Array(CA);j.prototype.byteArray=$;for(var hA=C.files,l=0;l<hA.length;++l)j.prototype.requests[hA[l].filename].onload();o.removeRunDependency("datafile_bin/JsMaterialXGenShader.data")}o.addRunDependency("datafile_bin/JsMaterialXGenShader.data"),o.preloadResults??={},o.preloadResults[E]={fromCache:!1},b?(q(b),b=null):Z=q}D.calledRun?S(D):(D.preRun??=[]).push(S)}B({files:[{filename:"/libraries/CMakeLists.txt",start:0,end:1923},{filename:"/libraries/README.md",start:1923,end:6916},{filename:"/libraries/bxdf/disney_principled.mtlx",start:6916,end:14224},{filename:"/libraries/bxdf/genglsl/gltf_pbr.mtlx",start:14224,end:29039},{filename:"/libraries/bxdf/genglsl/open_pbr_surface.mtlx",start:29039,end:60246},{filename:"/libraries/bxdf/genglsl/standard_surface.mtlx",start:60246,end:78019},{filename:"/libraries/bxdf/genmdl/open_pbr_surface.mtlx",start:78019,end:109045},{filename:"/libraries/bxdf/gltf_pbr.mtlx",start:109045,end:153938},{filename:"/libraries/bxdf/lama/lama_add.mtlx",start:153938,end:156592},{filename:"/libraries/bxdf/lama/lama_conductor.mtlx",start:156592,end:164592},{filename:"/libraries/bxdf/lama/lama_dielectric.mtlx",start:164592,end:175511},{filename:"/libraries/bxdf/lama/lama_diffuse.mtlx",start:175511,end:178457},{filename:"/libraries/bxdf/lama/lama_emission.mtlx",start:178457,end:179206},{filename:"/libraries/bxdf/lama/lama_generalized_schlick.mtlx",start:179206,end:191060},{filename:"/libraries/bxdf/lama/lama_iridescence.mtlx",start:191060,end:197023},{filename:"/libraries/bxdf/lama/lama_layer.mtlx",start:197023,end:198767},{filename:"/libraries/bxdf/lama/lama_mix.mtlx",start:198767,end:200854},{filename:"/libraries/bxdf/lama/lama_sheen.mtlx",start:200854,end:202977},{filename:"/libraries/bxdf/lama/lama_sss.mtlx",start:202977,end:209752},{filename:"/libraries/bxdf/lama/lama_surface.mtlx",start:209752,end:211420},{filename:"/libraries/bxdf/lama/lama_translucent.mtlx",start:211420,end:213057},{filename:"/libraries/bxdf/open_pbr_surface.mtlx",start:213057,end:254343},{filename:"/libraries/bxdf/standard_surface.mtlx",start:254343,end:282426},{filename:"/libraries/bxdf/translation/open_pbr_to_standard_surface.mtlx",start:282426,end:299893},{filename:"/libraries/bxdf/translation/standard_surface_to_gltf_pbr.mtlx",start:299893,end:310073},{filename:"/libraries/bxdf/translation/standard_surface_to_open_pbr.mtlx",start:310073,end:325182},{filename:"/libraries/bxdf/translation/standard_surface_to_usd.mtlx",start:325182,end:331063},{filename:"/libraries/bxdf/usd_preview_surface.mtlx",start:331063,end:354055},{filename:"/libraries/cmlib/cmlib_defs.mtlx",start:354055,end:358901},{filename:"/libraries/cmlib/cmlib_ng.mtlx",start:358901,end:376376},{filename:"/libraries/lights/genglsl/lights_genglsl_impl.mtlx",start:376376,end:376980},{filename:"/libraries/lights/genglsl/mx_directional_light.glsl",start:376980,end:377161},{filename:"/libraries/lights/genglsl/mx_point_light.glsl",start:377161,end:377531},{filename:"/libraries/lights/genglsl/mx_spot_light.glsl",start:377531,end:378155},{filename:"/libraries/lights/genmsl/lights_genmsl_impl.mtlx",start:378155,end:378756},{filename:"/libraries/lights/genmsl/mx_directional_light.metal",start:378756,end:378943},{filename:"/libraries/lights/genmsl/mx_point_light.metal",start:378943,end:379319},{filename:"/libraries/lights/genmsl/mx_spot_light.metal",start:379319,end:379949},{filename:"/libraries/lights/lights_defs.mtlx",start:379949,end:382361},{filename:"/libraries/nprlib/genglsl/nprlib_genglsl_impl.mtlx",start:382361,end:383025},{filename:"/libraries/nprlib/genmdl/nprlib_genmdl_impl.mtlx",start:383025,end:383787},{filename:"/libraries/nprlib/genmsl/nprlib_genmsl_impl.mtlx",start:383787,end:384448},{filename:"/libraries/nprlib/genosl/nprlib_genosl_impl.mtlx",start:384448,end:385146},{filename:"/libraries/nprlib/nprlib_defs.mtlx",start:385146,end:387781},{filename:"/libraries/nprlib/nprlib_ng.mtlx",start:387781,end:392630},{filename:"/libraries/pbrlib/genglsl/lib/mx_closure_type.glsl",start:392630,end:393047},{filename:"/libraries/pbrlib/genglsl/lib/mx_environment_fis.glsl",start:393047,end:395841},{filename:"/libraries/pbrlib/genglsl/lib/mx_environment_none.glsl",start:395841,end:396076},{filename:"/libraries/pbrlib/genglsl/lib/mx_environment_prefilter.glsl",start:396076,end:397162},{filename:"/libraries/pbrlib/genglsl/lib/mx_generate_albedo_table.glsl",start:397162,end:397534},{filename:"/libraries/pbrlib/genglsl/lib/mx_generate_prefilter_env.glsl",start:397534,end:399881},{filename:"/libraries/pbrlib/genglsl/lib/mx_microfacet.glsl",start:399881,end:402873},{filename:"/libraries/pbrlib/genglsl/lib/mx_microfacet_diffuse.glsl",start:402873,end:410337},{filename:"/libraries/pbrlib/genglsl/lib/mx_microfacet_sheen.glsl",start:410337,end:417090},{filename:"/libraries/pbrlib/genglsl/lib/mx_microfacet_specular.glsl",start:417090,end:433540},{filename:"/libraries/pbrlib/genglsl/lib/mx_shadow.glsl",start:433540,end:434296},{filename:"/libraries/pbrlib/genglsl/lib/mx_transmission_opacity.glsl",start:434296,end:434467},{filename:"/libraries/pbrlib/genglsl/lib/mx_transmission_refract.glsl",start:434467,end:434978},{filename:"/libraries/pbrlib/genglsl/mx_add_bsdf.glsl",start:434978,end:435560},{filename:"/libraries/pbrlib/genglsl/mx_add_edf.glsl",start:435560,end:435700},{filename:"/libraries/pbrlib/genglsl/mx_anisotropic_vdf.glsl",start:435700,end:435928},{filename:"/libraries/pbrlib/genglsl/mx_artistic_ior.glsl",start:435928,end:436501},{filename:"/libraries/pbrlib/genglsl/mx_blackbody.glsl",start:436501,end:438237},{filename:"/libraries/pbrlib/genglsl/mx_burley_diffuse_bsdf.glsl",start:438237,end:439284},{filename:"/libraries/pbrlib/genglsl/mx_chiang_hair_bsdf.glsl",start:439284,end:448292},{filename:"/libraries/pbrlib/genglsl/mx_conductor_bsdf.glsl",start:448292,end:450049},{filename:"/libraries/pbrlib/genglsl/mx_dielectric_bsdf.glsl",start:450049,end:452691},{filename:"/libraries/pbrlib/genglsl/mx_displacement_float.glsl",start:452691,end:452836},{filename:"/libraries/pbrlib/genglsl/mx_displacement_vector3.glsl",start:452836,end:452976},{filename:"/libraries/pbrlib/genglsl/mx_generalized_schlick_bsdf.glsl",start:452976,end:456145},{filename:"/libraries/pbrlib/genglsl/mx_generalized_schlick_edf.glsl",start:456145,end:456657},{filename:"/libraries/pbrlib/genglsl/mx_layer_bsdf.glsl",start:456657,end:456907},{filename:"/libraries/pbrlib/genglsl/mx_layer_vdf.glsl",start:456907,end:457139},{filename:"/libraries/pbrlib/genglsl/mx_mix_bsdf.glsl",start:457139,end:457405},{filename:"/libraries/pbrlib/genglsl/mx_mix_edf.glsl",start:457405,end:457571},{filename:"/libraries/pbrlib/genglsl/mx_multiply_bsdf_color3.glsl",start:457571,end:457824},{filename:"/libraries/pbrlib/genglsl/mx_multiply_bsdf_float.glsl",start:457824,end:458082},{filename:"/libraries/pbrlib/genglsl/mx_multiply_edf_color3.glsl",start:458082,end:458235},{filename:"/libraries/pbrlib/genglsl/mx_multiply_edf_float.glsl",start:458235,end:458388},{filename:"/libraries/pbrlib/genglsl/mx_oren_nayar_diffuse_bsdf.glsl",start:458388,end:459763},{filename:"/libraries/pbrlib/genglsl/mx_roughness_anisotropy.glsl",start:459763,end:460208},{filename:"/libraries/pbrlib/genglsl/mx_roughness_dual.glsl",start:460208,end:460476},{filename:"/libraries/pbrlib/genglsl/mx_sheen_bsdf.glsl",start:460476,end:462562},{filename:"/libraries/pbrlib/genglsl/mx_subsurface_bsdf.glsl",start:462562,end:463615},{filename:"/libraries/pbrlib/genglsl/mx_translucent_bsdf.glsl",start:463615,end:464341},{filename:"/libraries/pbrlib/genglsl/mx_uniform_edf.glsl",start:464341,end:464549},{filename:"/libraries/pbrlib/genglsl/pbrlib_genglsl_impl.mtlx",start:464549,end:470654},{filename:"/libraries/pbrlib/genmdl/pbrlib_genmdl_impl.mtlx",start:470654,end:482039},{filename:"/libraries/pbrlib/genmsl/pbrlib_genmsl_impl.mtlx",start:482039,end:482306},{filename:"/libraries/pbrlib/genosl/lib/mx_microfacet.osl",start:482306,end:484038},{filename:"/libraries/pbrlib/genosl/mx_anisotropic_vdf.osl",start:484038,end:484409},{filename:"/libraries/pbrlib/genosl/mx_artistic_ior.osl",start:484409,end:485001},{filename:"/libraries/pbrlib/genosl/mx_blackbody.osl",start:485001,end:486773},{filename:"/libraries/pbrlib/genosl/mx_chiang_hair_bsdf.osl",start:486773,end:487465},{filename:"/libraries/pbrlib/genosl/mx_chiang_hair_roughness.osl",start:487465,end:487822},{filename:"/libraries/pbrlib/genosl/mx_dielectric_bsdf.osl",start:487822,end:488372},{filename:"/libraries/pbrlib/genosl/mx_generalized_schlick_bsdf.osl",start:488372,end:489011},{filename:"/libraries/pbrlib/genosl/mx_generalized_schlick_edf.osl",start:489011,end:489281},{filename:"/libraries/pbrlib/genosl/mx_roughness_anisotropy.osl",start:489281,end:489732},{filename:"/libraries/pbrlib/genosl/mx_roughness_dual.osl",start:489732,end:490028},{filename:"/libraries/pbrlib/genosl/mx_subsurface_bsdf.osl",start:490028,end:490356},{filename:"/libraries/pbrlib/genosl/mx_surface.osl",start:490356,end:490557},{filename:"/libraries/pbrlib/genosl/pbrlib_genosl_impl.mtlx",start:490557,end:496402},{filename:"/libraries/pbrlib/pbrlib_defs.mtlx",start:496402,end:520720},{filename:"/libraries/pbrlib/pbrlib_ng.mtlx",start:520720,end:521514},{filename:"/libraries/stdlib/genglsl/lib/mx_geometry.glsl",start:521514,end:522875},{filename:"/libraries/stdlib/genglsl/lib/mx_hextile.glsl",start:522875,end:527376},{filename:"/libraries/stdlib/genglsl/lib/mx_hsv.glsl",start:527376,end:530855},{filename:"/libraries/stdlib/genglsl/lib/mx_math.glsl",start:530855,end:531490},{filename:"/libraries/stdlib/genglsl/lib/mx_noise.glsl",start:531490,end:554429},{filename:"/libraries/stdlib/genglsl/lib/mx_transform_uv.glsl",start:554429,end:554545},{filename:"/libraries/stdlib/genglsl/lib/mx_transform_uv_vflip.glsl",start:554545,end:554681},{filename:"/libraries/stdlib/genglsl/mx_aastep.glsl",start:554681,end:554881},{filename:"/libraries/stdlib/genglsl/mx_burn_color3.glsl",start:554881,end:555166},{filename:"/libraries/stdlib/genglsl/mx_burn_color4.glsl",start:555166,end:555507},{filename:"/libraries/stdlib/genglsl/mx_burn_float.glsl",start:555507,end:555730},{filename:"/libraries/stdlib/genglsl/mx_cellnoise2d_float.glsl",start:555730,end:555867},{filename:"/libraries/stdlib/genglsl/mx_cellnoise3d_float.glsl",start:555867,end:556004},{filename:"/libraries/stdlib/genglsl/mx_creatematrix_vector3_matrix33.glsl",start:556004,end:556211},{filename:"/libraries/stdlib/genglsl/mx_creatematrix_vector3_matrix44.glsl",start:556211,end:556487},{filename:"/libraries/stdlib/genglsl/mx_creatematrix_vector4_matrix44.glsl",start:556487,end:556771},{filename:"/libraries/stdlib/genglsl/mx_disjointover_color4.glsl",start:556771,end:557365},{filename:"/libraries/stdlib/genglsl/mx_dodge_color3.glsl",start:557365,end:557655},{filename:"/libraries/stdlib/genglsl/mx_dodge_color4.glsl",start:557655,end:558004},{filename:"/libraries/stdlib/genglsl/mx_dodge_float.glsl",start:558004,end:558226},{filename:"/libraries/stdlib/genglsl/mx_fractal2d_float.glsl",start:558226,end:558498},{filename:"/libraries/stdlib/genglsl/mx_fractal2d_vector2.glsl",start:558498,end:558768},{filename:"/libraries/stdlib/genglsl/mx_fractal2d_vector3.glsl",start:558768,end:559038},{filename:"/libraries/stdlib/genglsl/mx_fractal2d_vector4.glsl",start:559038,end:559308},{filename:"/libraries/stdlib/genglsl/mx_fractal3d_float.glsl",start:559308,end:559580},{filename:"/libraries/stdlib/genglsl/mx_fractal3d_vector2.glsl",start:559580,end:559850},{filename:"/libraries/stdlib/genglsl/mx_fractal3d_vector3.glsl",start:559850,end:560120},{filename:"/libraries/stdlib/genglsl/mx_fractal3d_vector4.glsl",start:560120,end:560390},{filename:"/libraries/stdlib/genglsl/mx_heighttonormal_vector3.glsl",start:560390,end:561343},{filename:"/libraries/stdlib/genglsl/mx_hextiledimage.glsl",start:561343,end:564493},{filename:"/libraries/stdlib/genglsl/mx_hextilednormalmap.glsl",start:564493,end:566999},{filename:"/libraries/stdlib/genglsl/mx_hsvtorgb_color3.glsl",start:566999,end:567113},{filename:"/libraries/stdlib/genglsl/mx_hsvtorgb_color4.glsl",start:567113,end:567242},{filename:"/libraries/stdlib/genglsl/mx_image_color3.glsl",start:567242,end:567632},{filename:"/libraries/stdlib/genglsl/mx_image_color4.glsl",start:567632,end:568018},{filename:"/libraries/stdlib/genglsl/mx_image_float.glsl",start:568018,end:568407},{filename:"/libraries/stdlib/genglsl/mx_image_vector2.glsl",start:568407,end:568797},{filename:"/libraries/stdlib/genglsl/mx_image_vector3.glsl",start:568797,end:569188},{filename:"/libraries/stdlib/genglsl/mx_image_vector4.glsl",start:569188,end:569575},{filename:"/libraries/stdlib/genglsl/mx_luminance_color3.glsl",start:569575,end:569689},{filename:"/libraries/stdlib/genglsl/mx_luminance_color4.glsl",start:569689,end:569820},{filename:"/libraries/stdlib/genglsl/mx_mix_surfaceshader.glsl",start:569820,end:570054},{filename:"/libraries/stdlib/genglsl/mx_noise2d_float.glsl",start:570054,end:570264},{filename:"/libraries/stdlib/genglsl/mx_noise2d_vector2.glsl",start:570264,end:570475},{filename:"/libraries/stdlib/genglsl/mx_noise2d_vector3.glsl",start:570475,end:570683},{filename:"/libraries/stdlib/genglsl/mx_noise2d_vector4.glsl",start:570683,end:570958},{filename:"/libraries/stdlib/genglsl/mx_noise3d_float.glsl",start:570958,end:571168},{filename:"/libraries/stdlib/genglsl/mx_noise3d_vector2.glsl",start:571168,end:571379},{filename:"/libraries/stdlib/genglsl/mx_noise3d_vector3.glsl",start:571379,end:571587},{filename:"/libraries/stdlib/genglsl/mx_noise3d_vector4.glsl",start:571587,end:571866},{filename:"/libraries/stdlib/genglsl/mx_normalmap.glsl",start:571866,end:572364},{filename:"/libraries/stdlib/genglsl/mx_premult_color4.glsl",start:572364,end:572461},{filename:"/libraries/stdlib/genglsl/mx_ramplr_float.glsl",start:572461,end:572612},{filename:"/libraries/stdlib/genglsl/mx_ramplr_vector2.glsl",start:572612,end:572762},{filename:"/libraries/stdlib/genglsl/mx_ramplr_vector3.glsl",start:572762,end:572912},{filename:"/libraries/stdlib/genglsl/mx_ramplr_vector4.glsl",start:572912,end:573062},{filename:"/libraries/stdlib/genglsl/mx_ramptb_float.glsl",start:573062,end:573213},{filename:"/libraries/stdlib/genglsl/mx_ramptb_vector2.glsl",start:573213,end:573363},{filename:"/libraries/stdlib/genglsl/mx_ramptb_vector3.glsl",start:573363,end:573513},{filename:"/libraries/stdlib/genglsl/mx_ramptb_vector4.glsl",start:573513,end:573663},{filename:"/libraries/stdlib/genglsl/mx_rgbtohsv_color3.glsl",start:573663,end:573777},{filename:"/libraries/stdlib/genglsl/mx_rgbtohsv_color4.glsl",start:573777,end:573906},{filename:"/libraries/stdlib/genglsl/mx_rotate_vector2.glsl",start:573906,end:574164},{filename:"/libraries/stdlib/genglsl/mx_rotate_vector3.glsl",start:574164,end:575065},{filename:"/libraries/stdlib/genglsl/mx_smoothstep_float.glsl",start:575065,end:575290},{filename:"/libraries/stdlib/genglsl/mx_splitlr_float.glsl",start:575290,end:575483},{filename:"/libraries/stdlib/genglsl/mx_splitlr_vector2.glsl",start:575483,end:575675},{filename:"/libraries/stdlib/genglsl/mx_splitlr_vector3.glsl",start:575675,end:575867},{filename:"/libraries/stdlib/genglsl/mx_splitlr_vector4.glsl",start:575867,end:576059},{filename:"/libraries/stdlib/genglsl/mx_splittb_float.glsl",start:576059,end:576252},{filename:"/libraries/stdlib/genglsl/mx_splittb_vector2.glsl",start:576252,end:576444},{filename:"/libraries/stdlib/genglsl/mx_splittb_vector3.glsl",start:576444,end:576636},{filename:"/libraries/stdlib/genglsl/mx_splittb_vector4.glsl",start:576636,end:576828},{filename:"/libraries/stdlib/genglsl/mx_surface_unlit.glsl",start:576828,end:577120},{filename:"/libraries/stdlib/genglsl/mx_transformmatrix_vector2M3.glsl",start:577120,end:577261},{filename:"/libraries/stdlib/genglsl/mx_transformmatrix_vector3M4.glsl",start:577261,end:577403},{filename:"/libraries/stdlib/genglsl/mx_unpremult_color4.glsl",start:577403,end:577502},{filename:"/libraries/stdlib/genglsl/mx_worleynoise2d_float.glsl",start:577502,end:577686},{filename:"/libraries/stdlib/genglsl/mx_worleynoise2d_vector2.glsl",start:577686,end:577870},{filename:"/libraries/stdlib/genglsl/mx_worleynoise2d_vector3.glsl",start:577870,end:578054},{filename:"/libraries/stdlib/genglsl/mx_worleynoise3d_float.glsl",start:578054,end:578238},{filename:"/libraries/stdlib/genglsl/mx_worleynoise3d_vector2.glsl",start:578238,end:578422},{filename:"/libraries/stdlib/genglsl/mx_worleynoise3d_vector3.glsl",start:578422,end:578606},{filename:"/libraries/stdlib/genglsl/stdlib_genglsl_impl.mtlx",start:578606,end:655400},{filename:"/libraries/stdlib/genmdl/stdlib_genmdl_impl.mtlx",start:655400,end:749690},{filename:"/libraries/stdlib/genmsl/lib/mx_math.metal",start:749690,end:753979},{filename:"/libraries/stdlib/genmsl/lib/mx_matscalaroperators.metal",start:753979,end:754988},{filename:"/libraries/stdlib/genmsl/lib/mx_texture.metal",start:754988,end:755726},{filename:"/libraries/stdlib/genmsl/stdlib_genmsl_impl.mtlx",start:755726,end:765452},{filename:"/libraries/stdlib/genosl/include/color4.h",start:765452,end:771290},{filename:"/libraries/stdlib/genosl/include/matrix33.h",start:771290,end:773910},{filename:"/libraries/stdlib/genosl/include/mx_funcs.h",start:773910,end:795701},{filename:"/libraries/stdlib/genosl/include/vector2.h",start:795701,end:801367},{filename:"/libraries/stdlib/genosl/include/vector4.h",start:801367,end:810365},{filename:"/libraries/stdlib/genosl/lib/mx_transform_uv.osl",start:810365,end:810432},{filename:"/libraries/stdlib/genosl/lib/mx_transform_uv_vflip.osl",start:810432,end:810528},{filename:"/libraries/stdlib/genosl/lib/vector4_extra_ops.osl",start:810528,end:811402},{filename:"/libraries/stdlib/genosl/mx_burn_color3.osl",start:811402,end:811655},{filename:"/libraries/stdlib/genosl/mx_burn_color4.osl",start:811655,end:811993},{filename:"/libraries/stdlib/genosl/mx_burn_float.osl",start:811993,end:812210},{filename:"/libraries/stdlib/genosl/mx_cellnoise2d_float.osl",start:812210,end:812327},{filename:"/libraries/stdlib/genosl/mx_cellnoise3d_float.osl",start:812327,end:812429},{filename:"/libraries/stdlib/genosl/mx_creatematrix.osl",start:812429,end:813334},{filename:"/libraries/stdlib/genosl/mx_disjointover_color4.osl",start:813334,end:813912},{filename:"/libraries/stdlib/genosl/mx_dodge_color3.osl",start:813912,end:814170},{filename:"/libraries/stdlib/genosl/mx_dodge_color4.osl",start:814170,end:814517},{filename:"/libraries/stdlib/genosl/mx_dodge_float.osl",start:814517,end:814724},{filename:"/libraries/stdlib/genosl/mx_fractal2d_float.osl",start:814724,end:814970},{filename:"/libraries/stdlib/genosl/mx_fractal2d_vector2.osl",start:814970,end:815224},{filename:"/libraries/stdlib/genosl/mx_fractal2d_vector3.osl",start:815224,end:815475},{filename:"/libraries/stdlib/genosl/mx_fractal2d_vector4.osl",start:815475,end:815729},{filename:"/libraries/stdlib/genosl/mx_fractal3d_float.osl",start:815729,end:815960},{filename:"/libraries/stdlib/genosl/mx_fractal3d_vector2.osl",start:815960,end:816199},{filename:"/libraries/stdlib/genosl/mx_fractal3d_vector3.osl",start:816199,end:816435},{filename:"/libraries/stdlib/genosl/mx_fractal3d_vector4.osl",start:816435,end:816674},{filename:"/libraries/stdlib/genosl/mx_frame_float.osl",start:816674,end:816843},{filename:"/libraries/stdlib/genosl/mx_geomcolor_color3.osl",start:816843,end:816939},{filename:"/libraries/stdlib/genosl/mx_geomcolor_color4.osl",start:816939,end:817170},{filename:"/libraries/stdlib/genosl/mx_geomcolor_float.osl",start:817170,end:817265},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_boolean.osl",start:817265,end:817416},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_color3.osl",start:817416,end:817569},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_color4.osl",start:817569,end:817937},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_float.osl",start:817937,end:818111},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_integer.osl",start:818111,end:818262},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_string.osl",start:818262,end:818418},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_vector2.osl",start:818418,end:818684},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_vector3.osl",start:818684,end:818840},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_vector4.osl",start:818840,end:819158},{filename:"/libraries/stdlib/genosl/mx_heighttonormal_vector3.osl",start:819158,end:820132},{filename:"/libraries/stdlib/genosl/mx_hsvtorgb_color3.osl",start:820132,end:820237},{filename:"/libraries/stdlib/genosl/mx_hsvtorgb_color4.osl",start:820237,end:820359},{filename:"/libraries/stdlib/genosl/mx_image_color3.osl",start:820359,end:821304},{filename:"/libraries/stdlib/genosl/mx_image_color4.osl",start:821304,end:822427},{filename:"/libraries/stdlib/genosl/mx_image_float.osl",start:822427,end:823290},{filename:"/libraries/stdlib/genosl/mx_image_vector2.osl",start:823290,end:824205},{filename:"/libraries/stdlib/genosl/mx_image_vector3.osl",start:824205,end:825023},{filename:"/libraries/stdlib/genosl/mx_image_vector4.osl",start:825023,end:826066},{filename:"/libraries/stdlib/genosl/mx_luminance_color3.osl",start:826066,end:826178},{filename:"/libraries/stdlib/genosl/mx_luminance_color4.osl",start:826178,end:826310},{filename:"/libraries/stdlib/genosl/mx_mix_surfaceshader.osl",start:826310,end:826552},{filename:"/libraries/stdlib/genosl/mx_noise2d_float.osl",start:826552,end:826746},{filename:"/libraries/stdlib/genosl/mx_noise2d_vector2.osl",start:826746,end:826951},{filename:"/libraries/stdlib/genosl/mx_noise2d_vector3.osl",start:826951,end:827150},{filename:"/libraries/stdlib/genosl/mx_noise2d_vector4.osl",start:827150,end:827355},{filename:"/libraries/stdlib/genosl/mx_noise3d_float.osl",start:827355,end:827534},{filename:"/libraries/stdlib/genosl/mx_noise3d_vector2.osl",start:827534,end:827724},{filename:"/libraries/stdlib/genosl/mx_noise3d_vector3.osl",start:827724,end:827908},{filename:"/libraries/stdlib/genosl/mx_noise3d_vector4.osl",start:827908,end:828098},{filename:"/libraries/stdlib/genosl/mx_normalmap.osl",start:828098,end:829010},{filename:"/libraries/stdlib/genosl/mx_premult_color4.osl",start:829010,end:829112},{filename:"/libraries/stdlib/genosl/mx_rgbtohsv_color3.osl",start:829112,end:829217},{filename:"/libraries/stdlib/genosl/mx_rgbtohsv_color4.osl",start:829217,end:829339},{filename:"/libraries/stdlib/genosl/mx_rotate_vector2.osl",start:829339,end:829600},{filename:"/libraries/stdlib/genosl/mx_rotate_vector3.osl",start:829600,end:830670},{filename:"/libraries/stdlib/genosl/mx_surface_unlit.osl",start:830670,end:831084},{filename:"/libraries/stdlib/genosl/mx_surfacematerial.osl",start:831084,end:831367},{filename:"/libraries/stdlib/genosl/mx_time_float.osl",start:831367,end:831545},{filename:"/libraries/stdlib/genosl/mx_transformmatrix_vector2M3.osl",start:831545,end:831731},{filename:"/libraries/stdlib/genosl/mx_unpremult_color4.osl",start:831731,end:831835},{filename:"/libraries/stdlib/genosl/mx_worleynoise2d_float.osl",start:831835,end:831995},{filename:"/libraries/stdlib/genosl/mx_worleynoise2d_vector2.osl",start:831995,end:832161},{filename:"/libraries/stdlib/genosl/mx_worleynoise2d_vector3.osl",start:832161,end:832326},{filename:"/libraries/stdlib/genosl/mx_worleynoise3d_float.osl",start:832326,end:832485},{filename:"/libraries/stdlib/genosl/mx_worleynoise3d_vector2.osl",start:832485,end:832650},{filename:"/libraries/stdlib/genosl/mx_worleynoise3d_vector3.osl",start:832650,end:832814},{filename:"/libraries/stdlib/genosl/stdlib_genosl_impl.mtlx",start:832814,end:909860},{filename:"/libraries/stdlib/stdlib_defs.mtlx",start:909860,end:1187069},{filename:"/libraries/stdlib/stdlib_ng.mtlx",start:1187069,end:1509715},{filename:"/libraries/targets/essl.mtlx",start:1509715,end:1510177},{filename:"/libraries/targets/genglsl.mtlx",start:1510177,end:1510630},{filename:"/libraries/targets/genmdl.mtlx",start:1510630,end:1511082},{filename:"/libraries/targets/genmsl.mtlx",start:1511082,end:1511552},{filename:"/libraries/targets/genosl.mtlx",start:1511552,end:1512004}],remote_package_size:1512004})})();var y=Object.assign({},D),AA="./this.program",BA=(A,I)=>{throw I},p="";function r(A){return D.locateFile?D.locateFile(A,p):p+A}var oA,UA;if(K){var kA=require("fs");require("path"),p=__dirname+"/",UA=A=>{A=iI(A)?new URL(A):A;var I=kA.readFileSync(A);return I},oA=async(A,I=!0)=>{A=iI(A)?new URL(A):A;var g=kA.readFileSync(A,I?void 0:"utf8");return g},!D.thisProgram&&process.argv.length>1&&(AA=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2),BA=(A,I)=>{throw process.exitCode=A,I}}else(T||F)&&(F?p=self.location.href:typeof document<"u"&&document.currentScript&&(p=document.currentScript.src),J&&(p=J),p.startsWith("blob:")?p="":p=p.substr(0,p.replace(/[?#].*/,"").lastIndexOf("/")+1),F&&(UA=A=>{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response)}),oA=async A=>{if(iI(A))return new Promise((g,B)=>{var C=new XMLHttpRequest;C.open("GET",A,!0),C.responseType="arraybuffer",C.onload=()=>{if(C.status==200||C.status==0&&C.response){g(C.response);return}B(C.status)},C.onerror=B,C.send(null)});var I=await fetch(A,{credentials:"same-origin"});if(I.ok)return I.arrayBuffer();throw new Error(I.status+" : "+I.url)});var aA=D.print||console.log.bind(console),SA=D.printErr||console.error.bind(console);Object.assign(D,y),y=null,D.arguments&&D.arguments,D.thisProgram&&(AA=D.thisProgram);var mA=D.wasmBinary,XA,jA=!1,_,NA,RA,HA,eA,f,z,Qg,XI;function Eg(){var A=XA.buffer;D.HEAP8=NA=new Int8Array(A),D.HEAP16=HA=new Int16Array(A),D.HEAPU8=RA=new Uint8Array(A),D.HEAPU16=eA=new Uint16Array(A),D.HEAP32=f=new Int32Array(A),D.HEAPU32=z=new Uint32Array(A),D.HEAPF32=Qg=new Float32Array(A),D.HEAPF64=XI=new Float64Array(A)}var Gg=[],ig=[],Dg=[];function MB(){if(D.preRun)for(typeof D.preRun=="function"&&(D.preRun=[D.preRun]);D.preRun.length;)FB(D.preRun.shift());TI(Gg)}function HB(){!D.noFSInit&&!Q.initialized&&Q.init(),Q.ignorePermissions=!1,TI(ig)}function JB(){if(D.postRun)for(typeof D.postRun=="function"&&(D.postRun=[D.postRun]);D.postRun.length;)UB(D.postRun.shift());TI(Dg)}function FB(A){Gg.unshift(A)}function lB(A){ig.unshift(A)}function UB(A){Dg.unshift(A)}var VA=0,rA=null;function VI(A){VA++,D.monitorRunDependencies?.(VA)}function GI(A){if(VA--,D.monitorRunDependencies?.(VA),VA==0&&rA){var I=rA;rA=null,I()}}function xA(A){D.onAbort?.(A),A="Aborted("+A+")",SA(A),jA=!0,A+=". Build with -sASSERTIONS for more info.";var I=new WebAssembly.RuntimeError(A);throw U(I),I}var kB="data:application/octet-stream;base64,",Yg=A=>A.startsWith(kB),iI=A=>A.startsWith("file://");function aB(){var A="JsMaterialXGenShader.wasm";return Yg(A)?A:r(A)}var LI;function cB(A){if(A==LI&&mA)return new Uint8Array(mA);if(UA)return UA(A);throw"both async and sync fetching of the wasm failed"}async function WB(A){if(!mA)try{var I=await oA(A);return new Uint8Array(I)}catch{}return cB(A)}async function yB(A,I){try{var g=await WB(A),B=await WebAssembly.instantiate(g,I);return B}catch(C){SA(`failed to asynchronously prepare wasm: ${C}`),xA(C)}}async function dB(A,I,g){if(!A&&typeof WebAssembly.instantiateStreaming=="function"&&!Yg(I)&&!iI(I)&&!K&&typeof fetch=="function")try{var B=fetch(I,{credentials:"same-origin"}),C=await WebAssembly.instantiateStreaming(B,g);return C}catch(E){SA(`wasm streaming compile failed: ${E}`),SA("falling back to ArrayBuffer instantiation")}return yB(I,g)}function sB(){return{a:AE}}async function KB(){function A(C,E){return GA=C.exports,XA=GA._a,Eg(),ag=GA.cb,lB(GA.$a),GI(),GA}VI();function I(C){A(C.instance)}var g=sB();if(D.instantiateWasm)try{return D.instantiateWasm(g,A)}catch(C){SA(`Module.instantiateWasm callback failed with error: ${C}`),U(C)}LI??=aB();try{var B=await dB(mA,LI,g);return I(B),B}catch(C){U(C);return}}var d,EA,mB={188048:()=>{D.TreeIterator.prototype[Symbol.iterator]=function(){return this}},188132:()=>{D.GraphIterator.prototype[Symbol.iterator]=function(){return this}},188217:()=>{D.InheritanceIterator.prototype[Symbol.iterator]=function(){return this}}};class Ng{name="ExitStatus";constructor(I){this.message=`Program terminated with exit(${I})`,this.status=I}}var TI=A=>{for(;A.length>0;)A.shift()(D)},hg=D.noExitRuntime||!0,v=A=>ug(A),t=()=>vg(),wg=typeof TextDecoder<"u"?new TextDecoder:void 0,PA=(A,I=0,g=NaN)=>{for(var B=I+g,C=I;A[C]&&!(C>=B);)++C;if(C-I>16&&A.buffer&&wg)return wg.decode(A.subarray(I,C));for(var E="";I<C;){var G=A[I++];if(!(G&128)){E+=String.fromCharCode(G);continue}var i=A[I++]&63;if((G&224)==192){E+=String.fromCharCode((G&31)<<6|i);continue}var Y=A[I++]&63;if((G&240)==224?G=(G&15)<<12|i<<6|Y:G=(G&7)<<18|i<<12|Y<<6|A[I++]&63,G<65536)E+=String.fromCharCode(G);else{var h=G-65536;E+=String.fromCharCode(55296|h>>10,56320|h&1023)}}return E},OA=(A,I)=>A?PA(RA,A,I):"",XB=(A,I,g,B)=>xA(`Assertion failed: ${OA(A)}, at: `+[I?OA(I):"unknown filename",g,B?OA(B):"unknown function"]),DI=[],YI=0,VB=A=>{var I=new fI(A);return I.get_caught()||(I.set_caught(!0),YI--),I.set_rethrown(!1),DI.push(I),pg(A),zg(A)},cA=0,LB=()=>{x(0,0);var A=DI.pop();tg(A.excPtr),cA=0};class fI{constructor(I){this.excPtr=I,this.ptr=I-24}set_type(I){z[this.ptr+4>>2]=I}get_type(){return z[this.ptr+4>>2]}set_destructor(I){z[this.ptr+8>>2]=I}get_destructor(){return z[this.ptr+8>>2]}set_caught(I){I=I?1:0,NA[this.ptr+12]=I}get_caught(){return NA[this.ptr+12]!=0}set_rethrown(I){I=I?1:0,NA[this.ptr+13]=I}get_rethrown(){return NA[this.ptr+13]!=0}init(I,g){this.set_adjusted_ptr(0),this.set_type(I),this.set_destructor(g)}set_adjusted_ptr(I){z[this.ptr+16>>2]=I}get_adjusted_ptr(){return z[this.ptr+16>>2]}}var TB=A=>{throw cA||(cA=A),cA},NI=A=>Pg(A),jI=A=>{var I=cA;if(!I)return NI(0),0;var g=new fI(I);g.set_adjusted_ptr(I);var B=g.get_type();if(!B)return NI(0),I;for(var C of A){if(C===0||C===B)break;var E=g.ptr+16;if(ng(C,B,E))return NI(C),I}return NI(B),I},fB=()=>jI([]),jB=A=>jI([A]),xB=(A,I)=>jI([A,I]),PB=()=>{var A=DI.pop();A||xA("no exception to throw");var I=A.excPtr;throw A.get_rethrown()||(DI.push(A),A.set_rethrown(!0),A.set_caught(!1),YI++),cA=I,cA},uB=(A,I,g)=>{var B=new fI(A);throw B.init(I,g),cA=A,YI++,cA},vB=()=>YI,hI=()=>{var A=f[+wA.varargs>>2];return wA.varargs+=4,A},uA=hI,gA={isAbs:A=>A.charAt(0)==="/",splitPath:A=>{var I=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return I.exec(A).slice(1)},normalizeArray:(A,I)=>{for(var g=0,B=A.length-1;B>=0;B--){var C=A[B];C==="."?A.splice(B,1):C===".."?(A.splice(B,1),g++):g&&(A.splice(B,1),g--)}if(I)for(;g;g--)A.unshift("..");return A},normalize:A=>{var I=gA.isAbs(A),g=A.substr(-1)==="/";return A=gA.normalizeArray(A.split("/").filter(B=>!!B),!I).join("/"),!A&&!I&&(A="."),A&&g&&(A+="/"),(I?"/":"")+A},dirname:A=>{var I=gA.splitPath(A),g=I[0],B=I[1];return!g&&!B?".":(B&&(B=B.substr(0,B.length-1)),g+B)},basename:A=>{if(A==="/")return"/";A=gA.normalize(A),A=A.replace(/\/$/,"");var I=A.lastIndexOf("/");return I===-1?A:A.substr(I+1)},join:(...A)=>gA.normalize(A.join("/")),join2:(A,I)=>gA.normalize(A+"/"+I)},tB=()=>{if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function")return B=>crypto.getRandomValues(B);if(K)try{var A=require("crypto"),I=A.randomFillSync;if(I)return B=>A.randomFillSync(B);var g=A.randomBytes;return B=>(B.set(g(B.byteLength)),B)}catch{}xA("initRandomDevice")},og=A=>(og=tB())(A),vA={resolve:(...A)=>{for(var I="",g=!1,B=A.length-1;B>=-1&&!g;B--){var C=B>=0?A[B]:Q.cwd();if(typeof C!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!C)return"";I=C+"/"+I,g=gA.isAbs(C)}return I=gA.normalizeArray(I.split("/").filter(E=>!!E),!g).join("/"),(g?"/":"")+I||"."},relative:(A,I)=>{A=vA.resolve(A).substr(1),I=vA.resolve(I).substr(1);function g(h){for(var w=0;w<h.length&&h[w]==="";w++);for(var Z=h.length-1;Z>=0&&h[Z]==="";Z--);return w>Z?[]:h.slice(w,Z-w+1)}for(var B=g(A.split("/")),C=g(I.split("/")),E=Math.min(B.length,C.length),G=E,i=0;i<E;i++)if(B[i]!==C[i]){G=i;break}for(var Y=[],i=G;i<B.length;i++)Y.push("..");return Y=Y.concat(C.slice(G)),Y.join("/")}},xI=[],PI=A=>{for(var I=0,g=0;g<A.length;++g){var B=A.charCodeAt(g);B<=127?I++:B<=2047?I+=2:B>=55296&&B<=57343?(I+=4,++g):I+=3}return I},uI=(A,I,g,B)=>{if(!(B>0))return 0;for(var C=g,E=g+B-1,G=0;G<A.length;++G){var i=A.charCodeAt(G);if(i>=55296&&i<=57343){var Y=A.charCodeAt(++G);i=65536+((i&1023)<<10)|Y&1023}if(i<=127){if(g>=E)break;I[g++]=i}else if(i<=2047){if(g+1>=E)break;I[g++]=192|i>>6,I[g++]=128|i&63}else if(i<=65535){if(g+2>=E)break;I[g++]=224|i>>12,I[g++]=128|i>>6&63,I[g++]=128|i&63}else{if(g+3>=E)break;I[g++]=240|i>>18,I[g++]=128|i>>12&63,I[g++]=128|i>>6&63,I[g++]=128|i&63}}return I[g]=0,g-C};function Rg(A,I,g){var B=PI(A)+1,C=new Array(B),E=uI(A,C,0,C.length);return C.length=E,C}var pB=()=>{if(!xI.length){var A=null;if(K){var I=256,g=Buffer.alloc(I),B=0,C=process.stdin.fd;try{B=kA.readSync(C,g,0,I)}catch(E){if(E.toString().includes("EOF"))B=0;else throw E}B>0&&(A=g.slice(0,B).toString("utf-8"))}else typeof window<"u"&&typeof window.prompt=="function"&&(A=window.prompt("Input: "),A!==null&&(A+=`
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./three.umd.cjs");require("./three-examples.umd.cjs");var WI=(function(){var J=typeof document<"u"?document.currentScript?.src:void 0;return typeof __filename<"u"&&(J=J||__filename),(function(N){N=N||{};var R,D=N,H,U,M=new Promise((A,I)=>{H=A,U=I}),T=typeof window=="object",F=typeof WorkerGlobalScope<"u",K=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";D.expectedDataFileDownloads??=0,D.expectedDataFileDownloads++,(()=>{var A=typeof ENVIRONMENT_IS_PTHREAD<"u"&&ENVIRONMENT_IS_PTHREAD,I=typeof ENVIRONMENT_IS_WASM_WORKER<"u"&&ENVIRONMENT_IS_WASM_WORKER;if(A||I)return;var g=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";function B(C){typeof window=="object"?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):typeof process>"u"&&typeof location<"u"&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var E="bin/JsMaterialXGenShader.data",G="JsMaterialXGenShader.data",i=D.locateFile?D.locateFile(G,""):G,Y=C.remote_package_size;function h(o,s,j,m){if(g){require("fs").readFile(o,(V,q)=>{V?m(V):j(q.buffer)});return}D.dataFileDownloads??={},fetch(o).catch(V=>Promise.reject(new Error(`Network Error: ${o}`,{cause:V}))).then(V=>{if(!V.ok)return Promise.reject(new Error(`${V.status}: ${V.url}`));if(!V.body&&V.arrayBuffer)return V.arrayBuffer().then(j);const q=V.body.getReader(),CA=()=>q.read().then(c).catch(W=>Promise.reject(new Error(`Unexpected error while handling : ${V.url} ${W}`,{cause:W}))),$=[],hA=V.headers,l=Number(hA.get("Content-Length")??s);let k=0;const c=({done:W,value:L})=>{if(W){const IA=new Uint8Array($.map(u=>u.length).reduce((u,ZA)=>u+ZA,0));let QA=0;for(const u of $)IA.set(u,QA),QA+=u.length;j(IA.buffer)}else{$.push(L),k+=L.length,D.dataFileDownloads[o]={loaded:k,total:l};let IA=0,QA=0;for(const u of Object.values(D.dataFileDownloads))IA+=u.loaded,QA+=u.total;return D.setStatus?.(`Downloading data... (${IA}/${QA})`),CA()}};return D.setStatus?.("Downloading data..."),CA()})}function w(o){console.error("package error:",o)}var Z=null,b=D.getPreloadedPackage?D.getPreloadedPackage(i,Y):null;b||h(i,Y,o=>{Z?(Z(o),Z=null):b=o},w);function S(o){function s(CA,$){if(!CA)throw $+new Error().stack}o.FS_createPath("/","libraries",!0,!0),o.FS_createPath("/libraries","bxdf",!0,!0),o.FS_createPath("/libraries/bxdf","genglsl",!0,!0),o.FS_createPath("/libraries/bxdf","genmdl",!0,!0),o.FS_createPath("/libraries/bxdf","lama",!0,!0),o.FS_createPath("/libraries/bxdf","translation",!0,!0),o.FS_createPath("/libraries","cmlib",!0,!0),o.FS_createPath("/libraries","lights",!0,!0),o.FS_createPath("/libraries/lights","genglsl",!0,!0),o.FS_createPath("/libraries/lights","genmsl",!0,!0),o.FS_createPath("/libraries","nprlib",!0,!0),o.FS_createPath("/libraries/nprlib","genglsl",!0,!0),o.FS_createPath("/libraries/nprlib","genmdl",!0,!0),o.FS_createPath("/libraries/nprlib","genmsl",!0,!0),o.FS_createPath("/libraries/nprlib","genosl",!0,!0),o.FS_createPath("/libraries","pbrlib",!0,!0),o.FS_createPath("/libraries/pbrlib","genglsl",!0,!0),o.FS_createPath("/libraries/pbrlib/genglsl","lib",!0,!0),o.FS_createPath("/libraries/pbrlib","genmdl",!0,!0),o.FS_createPath("/libraries/pbrlib","genmsl",!0,!0),o.FS_createPath("/libraries/pbrlib","genosl",!0,!0),o.FS_createPath("/libraries/pbrlib/genosl","lib",!0,!0),o.FS_createPath("/libraries","stdlib",!0,!0),o.FS_createPath("/libraries/stdlib","genglsl",!0,!0),o.FS_createPath("/libraries/stdlib/genglsl","lib",!0,!0),o.FS_createPath("/libraries/stdlib","genmdl",!0,!0),o.FS_createPath("/libraries/stdlib","genmsl",!0,!0),o.FS_createPath("/libraries/stdlib/genmsl","lib",!0,!0),o.FS_createPath("/libraries/stdlib","genosl",!0,!0),o.FS_createPath("/libraries/stdlib/genosl","include",!0,!0),o.FS_createPath("/libraries/stdlib/genosl","lib",!0,!0),o.FS_createPath("/libraries","targets",!0,!0);function j(CA,$,hA){this.start=CA,this.end=$,this.audio=hA}j.prototype={requests:{},open:function(CA,$){this.name=$,this.requests[$]=this,o.addRunDependency(`fp ${this.name}`)},send:function(){},onload:function(){var CA=this.byteArray.subarray(this.start,this.end);this.finish(CA)},finish:function(CA){var $=this;o.FS_createDataFile(this.name,null,CA,!0,!0,!0),o.removeRunDependency(`fp ${$.name}`),this.requests[this.name]=null}};for(var m=C.files,V=0;V<m.length;++V)new j(m[V].start,m[V].end,m[V].audio||0).open("GET",m[V].filename);function q(CA){s(CA,"Loading data file failed."),s(CA.constructor.name===ArrayBuffer.name,"bad input to processPackageData");var $=new Uint8Array(CA);j.prototype.byteArray=$;for(var hA=C.files,l=0;l<hA.length;++l)j.prototype.requests[hA[l].filename].onload();o.removeRunDependency("datafile_bin/JsMaterialXGenShader.data")}o.addRunDependency("datafile_bin/JsMaterialXGenShader.data"),o.preloadResults??={},o.preloadResults[E]={fromCache:!1},b?(q(b),b=null):Z=q}D.calledRun?S(D):(D.preRun??=[]).push(S)}B({files:[{filename:"/libraries/CMakeLists.txt",start:0,end:1923},{filename:"/libraries/README.md",start:1923,end:6916},{filename:"/libraries/bxdf/disney_principled.mtlx",start:6916,end:14224},{filename:"/libraries/bxdf/genglsl/gltf_pbr.mtlx",start:14224,end:29039},{filename:"/libraries/bxdf/genglsl/open_pbr_surface.mtlx",start:29039,end:60246},{filename:"/libraries/bxdf/genglsl/standard_surface.mtlx",start:60246,end:78019},{filename:"/libraries/bxdf/genmdl/open_pbr_surface.mtlx",start:78019,end:109045},{filename:"/libraries/bxdf/gltf_pbr.mtlx",start:109045,end:153938},{filename:"/libraries/bxdf/lama/lama_add.mtlx",start:153938,end:156592},{filename:"/libraries/bxdf/lama/lama_conductor.mtlx",start:156592,end:164592},{filename:"/libraries/bxdf/lama/lama_dielectric.mtlx",start:164592,end:175511},{filename:"/libraries/bxdf/lama/lama_diffuse.mtlx",start:175511,end:178457},{filename:"/libraries/bxdf/lama/lama_emission.mtlx",start:178457,end:179206},{filename:"/libraries/bxdf/lama/lama_generalized_schlick.mtlx",start:179206,end:191060},{filename:"/libraries/bxdf/lama/lama_iridescence.mtlx",start:191060,end:197023},{filename:"/libraries/bxdf/lama/lama_layer.mtlx",start:197023,end:198767},{filename:"/libraries/bxdf/lama/lama_mix.mtlx",start:198767,end:200854},{filename:"/libraries/bxdf/lama/lama_sheen.mtlx",start:200854,end:202977},{filename:"/libraries/bxdf/lama/lama_sss.mtlx",start:202977,end:209752},{filename:"/libraries/bxdf/lama/lama_surface.mtlx",start:209752,end:211420},{filename:"/libraries/bxdf/lama/lama_translucent.mtlx",start:211420,end:213057},{filename:"/libraries/bxdf/open_pbr_surface.mtlx",start:213057,end:254343},{filename:"/libraries/bxdf/standard_surface.mtlx",start:254343,end:282426},{filename:"/libraries/bxdf/translation/open_pbr_to_standard_surface.mtlx",start:282426,end:299893},{filename:"/libraries/bxdf/translation/standard_surface_to_gltf_pbr.mtlx",start:299893,end:310073},{filename:"/libraries/bxdf/translation/standard_surface_to_open_pbr.mtlx",start:310073,end:325182},{filename:"/libraries/bxdf/translation/standard_surface_to_usd.mtlx",start:325182,end:331063},{filename:"/libraries/bxdf/usd_preview_surface.mtlx",start:331063,end:354055},{filename:"/libraries/cmlib/cmlib_defs.mtlx",start:354055,end:358901},{filename:"/libraries/cmlib/cmlib_ng.mtlx",start:358901,end:376376},{filename:"/libraries/lights/genglsl/lights_genglsl_impl.mtlx",start:376376,end:376980},{filename:"/libraries/lights/genglsl/mx_directional_light.glsl",start:376980,end:377161},{filename:"/libraries/lights/genglsl/mx_point_light.glsl",start:377161,end:377531},{filename:"/libraries/lights/genglsl/mx_spot_light.glsl",start:377531,end:378155},{filename:"/libraries/lights/genmsl/lights_genmsl_impl.mtlx",start:378155,end:378756},{filename:"/libraries/lights/genmsl/mx_directional_light.metal",start:378756,end:378943},{filename:"/libraries/lights/genmsl/mx_point_light.metal",start:378943,end:379319},{filename:"/libraries/lights/genmsl/mx_spot_light.metal",start:379319,end:379949},{filename:"/libraries/lights/lights_defs.mtlx",start:379949,end:382361},{filename:"/libraries/nprlib/genglsl/nprlib_genglsl_impl.mtlx",start:382361,end:383025},{filename:"/libraries/nprlib/genmdl/nprlib_genmdl_impl.mtlx",start:383025,end:383787},{filename:"/libraries/nprlib/genmsl/nprlib_genmsl_impl.mtlx",start:383787,end:384448},{filename:"/libraries/nprlib/genosl/nprlib_genosl_impl.mtlx",start:384448,end:385146},{filename:"/libraries/nprlib/nprlib_defs.mtlx",start:385146,end:387781},{filename:"/libraries/nprlib/nprlib_ng.mtlx",start:387781,end:392630},{filename:"/libraries/pbrlib/genglsl/lib/mx_closure_type.glsl",start:392630,end:393047},{filename:"/libraries/pbrlib/genglsl/lib/mx_environment_fis.glsl",start:393047,end:395841},{filename:"/libraries/pbrlib/genglsl/lib/mx_environment_none.glsl",start:395841,end:396076},{filename:"/libraries/pbrlib/genglsl/lib/mx_environment_prefilter.glsl",start:396076,end:397162},{filename:"/libraries/pbrlib/genglsl/lib/mx_generate_albedo_table.glsl",start:397162,end:397534},{filename:"/libraries/pbrlib/genglsl/lib/mx_generate_prefilter_env.glsl",start:397534,end:399881},{filename:"/libraries/pbrlib/genglsl/lib/mx_microfacet.glsl",start:399881,end:402873},{filename:"/libraries/pbrlib/genglsl/lib/mx_microfacet_diffuse.glsl",start:402873,end:410337},{filename:"/libraries/pbrlib/genglsl/lib/mx_microfacet_sheen.glsl",start:410337,end:417090},{filename:"/libraries/pbrlib/genglsl/lib/mx_microfacet_specular.glsl",start:417090,end:433540},{filename:"/libraries/pbrlib/genglsl/lib/mx_shadow.glsl",start:433540,end:434296},{filename:"/libraries/pbrlib/genglsl/lib/mx_transmission_opacity.glsl",start:434296,end:434467},{filename:"/libraries/pbrlib/genglsl/lib/mx_transmission_refract.glsl",start:434467,end:434978},{filename:"/libraries/pbrlib/genglsl/mx_add_bsdf.glsl",start:434978,end:435560},{filename:"/libraries/pbrlib/genglsl/mx_add_edf.glsl",start:435560,end:435700},{filename:"/libraries/pbrlib/genglsl/mx_anisotropic_vdf.glsl",start:435700,end:435928},{filename:"/libraries/pbrlib/genglsl/mx_artistic_ior.glsl",start:435928,end:436501},{filename:"/libraries/pbrlib/genglsl/mx_blackbody.glsl",start:436501,end:438237},{filename:"/libraries/pbrlib/genglsl/mx_burley_diffuse_bsdf.glsl",start:438237,end:439284},{filename:"/libraries/pbrlib/genglsl/mx_chiang_hair_bsdf.glsl",start:439284,end:448292},{filename:"/libraries/pbrlib/genglsl/mx_conductor_bsdf.glsl",start:448292,end:450049},{filename:"/libraries/pbrlib/genglsl/mx_dielectric_bsdf.glsl",start:450049,end:452691},{filename:"/libraries/pbrlib/genglsl/mx_displacement_float.glsl",start:452691,end:452836},{filename:"/libraries/pbrlib/genglsl/mx_displacement_vector3.glsl",start:452836,end:452976},{filename:"/libraries/pbrlib/genglsl/mx_generalized_schlick_bsdf.glsl",start:452976,end:456145},{filename:"/libraries/pbrlib/genglsl/mx_generalized_schlick_edf.glsl",start:456145,end:456657},{filename:"/libraries/pbrlib/genglsl/mx_layer_bsdf.glsl",start:456657,end:456907},{filename:"/libraries/pbrlib/genglsl/mx_layer_vdf.glsl",start:456907,end:457139},{filename:"/libraries/pbrlib/genglsl/mx_mix_bsdf.glsl",start:457139,end:457405},{filename:"/libraries/pbrlib/genglsl/mx_mix_edf.glsl",start:457405,end:457571},{filename:"/libraries/pbrlib/genglsl/mx_multiply_bsdf_color3.glsl",start:457571,end:457824},{filename:"/libraries/pbrlib/genglsl/mx_multiply_bsdf_float.glsl",start:457824,end:458082},{filename:"/libraries/pbrlib/genglsl/mx_multiply_edf_color3.glsl",start:458082,end:458235},{filename:"/libraries/pbrlib/genglsl/mx_multiply_edf_float.glsl",start:458235,end:458388},{filename:"/libraries/pbrlib/genglsl/mx_oren_nayar_diffuse_bsdf.glsl",start:458388,end:459763},{filename:"/libraries/pbrlib/genglsl/mx_roughness_anisotropy.glsl",start:459763,end:460208},{filename:"/libraries/pbrlib/genglsl/mx_roughness_dual.glsl",start:460208,end:460476},{filename:"/libraries/pbrlib/genglsl/mx_sheen_bsdf.glsl",start:460476,end:462562},{filename:"/libraries/pbrlib/genglsl/mx_subsurface_bsdf.glsl",start:462562,end:463615},{filename:"/libraries/pbrlib/genglsl/mx_translucent_bsdf.glsl",start:463615,end:464341},{filename:"/libraries/pbrlib/genglsl/mx_uniform_edf.glsl",start:464341,end:464549},{filename:"/libraries/pbrlib/genglsl/pbrlib_genglsl_impl.mtlx",start:464549,end:470654},{filename:"/libraries/pbrlib/genmdl/pbrlib_genmdl_impl.mtlx",start:470654,end:482039},{filename:"/libraries/pbrlib/genmsl/pbrlib_genmsl_impl.mtlx",start:482039,end:482306},{filename:"/libraries/pbrlib/genosl/lib/mx_microfacet.osl",start:482306,end:484038},{filename:"/libraries/pbrlib/genosl/mx_anisotropic_vdf.osl",start:484038,end:484409},{filename:"/libraries/pbrlib/genosl/mx_artistic_ior.osl",start:484409,end:485001},{filename:"/libraries/pbrlib/genosl/mx_blackbody.osl",start:485001,end:486773},{filename:"/libraries/pbrlib/genosl/mx_chiang_hair_bsdf.osl",start:486773,end:487465},{filename:"/libraries/pbrlib/genosl/mx_chiang_hair_roughness.osl",start:487465,end:487822},{filename:"/libraries/pbrlib/genosl/mx_dielectric_bsdf.osl",start:487822,end:488372},{filename:"/libraries/pbrlib/genosl/mx_generalized_schlick_bsdf.osl",start:488372,end:489011},{filename:"/libraries/pbrlib/genosl/mx_generalized_schlick_edf.osl",start:489011,end:489281},{filename:"/libraries/pbrlib/genosl/mx_roughness_anisotropy.osl",start:489281,end:489732},{filename:"/libraries/pbrlib/genosl/mx_roughness_dual.osl",start:489732,end:490028},{filename:"/libraries/pbrlib/genosl/mx_subsurface_bsdf.osl",start:490028,end:490356},{filename:"/libraries/pbrlib/genosl/mx_surface.osl",start:490356,end:490557},{filename:"/libraries/pbrlib/genosl/pbrlib_genosl_impl.mtlx",start:490557,end:496402},{filename:"/libraries/pbrlib/pbrlib_defs.mtlx",start:496402,end:520720},{filename:"/libraries/pbrlib/pbrlib_ng.mtlx",start:520720,end:521514},{filename:"/libraries/stdlib/genglsl/lib/mx_geometry.glsl",start:521514,end:522875},{filename:"/libraries/stdlib/genglsl/lib/mx_hextile.glsl",start:522875,end:527376},{filename:"/libraries/stdlib/genglsl/lib/mx_hsv.glsl",start:527376,end:530855},{filename:"/libraries/stdlib/genglsl/lib/mx_math.glsl",start:530855,end:531490},{filename:"/libraries/stdlib/genglsl/lib/mx_noise.glsl",start:531490,end:554429},{filename:"/libraries/stdlib/genglsl/lib/mx_transform_uv.glsl",start:554429,end:554545},{filename:"/libraries/stdlib/genglsl/lib/mx_transform_uv_vflip.glsl",start:554545,end:554681},{filename:"/libraries/stdlib/genglsl/mx_aastep.glsl",start:554681,end:554881},{filename:"/libraries/stdlib/genglsl/mx_burn_color3.glsl",start:554881,end:555166},{filename:"/libraries/stdlib/genglsl/mx_burn_color4.glsl",start:555166,end:555507},{filename:"/libraries/stdlib/genglsl/mx_burn_float.glsl",start:555507,end:555730},{filename:"/libraries/stdlib/genglsl/mx_cellnoise2d_float.glsl",start:555730,end:555867},{filename:"/libraries/stdlib/genglsl/mx_cellnoise3d_float.glsl",start:555867,end:556004},{filename:"/libraries/stdlib/genglsl/mx_creatematrix_vector3_matrix33.glsl",start:556004,end:556211},{filename:"/libraries/stdlib/genglsl/mx_creatematrix_vector3_matrix44.glsl",start:556211,end:556487},{filename:"/libraries/stdlib/genglsl/mx_creatematrix_vector4_matrix44.glsl",start:556487,end:556771},{filename:"/libraries/stdlib/genglsl/mx_disjointover_color4.glsl",start:556771,end:557365},{filename:"/libraries/stdlib/genglsl/mx_dodge_color3.glsl",start:557365,end:557655},{filename:"/libraries/stdlib/genglsl/mx_dodge_color4.glsl",start:557655,end:558004},{filename:"/libraries/stdlib/genglsl/mx_dodge_float.glsl",start:558004,end:558226},{filename:"/libraries/stdlib/genglsl/mx_fractal2d_float.glsl",start:558226,end:558498},{filename:"/libraries/stdlib/genglsl/mx_fractal2d_vector2.glsl",start:558498,end:558768},{filename:"/libraries/stdlib/genglsl/mx_fractal2d_vector3.glsl",start:558768,end:559038},{filename:"/libraries/stdlib/genglsl/mx_fractal2d_vector4.glsl",start:559038,end:559308},{filename:"/libraries/stdlib/genglsl/mx_fractal3d_float.glsl",start:559308,end:559580},{filename:"/libraries/stdlib/genglsl/mx_fractal3d_vector2.glsl",start:559580,end:559850},{filename:"/libraries/stdlib/genglsl/mx_fractal3d_vector3.glsl",start:559850,end:560120},{filename:"/libraries/stdlib/genglsl/mx_fractal3d_vector4.glsl",start:560120,end:560390},{filename:"/libraries/stdlib/genglsl/mx_heighttonormal_vector3.glsl",start:560390,end:561343},{filename:"/libraries/stdlib/genglsl/mx_hextiledimage.glsl",start:561343,end:564493},{filename:"/libraries/stdlib/genglsl/mx_hextilednormalmap.glsl",start:564493,end:566999},{filename:"/libraries/stdlib/genglsl/mx_hsvtorgb_color3.glsl",start:566999,end:567113},{filename:"/libraries/stdlib/genglsl/mx_hsvtorgb_color4.glsl",start:567113,end:567242},{filename:"/libraries/stdlib/genglsl/mx_image_color3.glsl",start:567242,end:567632},{filename:"/libraries/stdlib/genglsl/mx_image_color4.glsl",start:567632,end:568018},{filename:"/libraries/stdlib/genglsl/mx_image_float.glsl",start:568018,end:568407},{filename:"/libraries/stdlib/genglsl/mx_image_vector2.glsl",start:568407,end:568797},{filename:"/libraries/stdlib/genglsl/mx_image_vector3.glsl",start:568797,end:569188},{filename:"/libraries/stdlib/genglsl/mx_image_vector4.glsl",start:569188,end:569575},{filename:"/libraries/stdlib/genglsl/mx_luminance_color3.glsl",start:569575,end:569689},{filename:"/libraries/stdlib/genglsl/mx_luminance_color4.glsl",start:569689,end:569820},{filename:"/libraries/stdlib/genglsl/mx_mix_surfaceshader.glsl",start:569820,end:570054},{filename:"/libraries/stdlib/genglsl/mx_noise2d_float.glsl",start:570054,end:570264},{filename:"/libraries/stdlib/genglsl/mx_noise2d_vector2.glsl",start:570264,end:570475},{filename:"/libraries/stdlib/genglsl/mx_noise2d_vector3.glsl",start:570475,end:570683},{filename:"/libraries/stdlib/genglsl/mx_noise2d_vector4.glsl",start:570683,end:570958},{filename:"/libraries/stdlib/genglsl/mx_noise3d_float.glsl",start:570958,end:571168},{filename:"/libraries/stdlib/genglsl/mx_noise3d_vector2.glsl",start:571168,end:571379},{filename:"/libraries/stdlib/genglsl/mx_noise3d_vector3.glsl",start:571379,end:571587},{filename:"/libraries/stdlib/genglsl/mx_noise3d_vector4.glsl",start:571587,end:571866},{filename:"/libraries/stdlib/genglsl/mx_normalmap.glsl",start:571866,end:572364},{filename:"/libraries/stdlib/genglsl/mx_premult_color4.glsl",start:572364,end:572461},{filename:"/libraries/stdlib/genglsl/mx_ramplr_float.glsl",start:572461,end:572612},{filename:"/libraries/stdlib/genglsl/mx_ramplr_vector2.glsl",start:572612,end:572762},{filename:"/libraries/stdlib/genglsl/mx_ramplr_vector3.glsl",start:572762,end:572912},{filename:"/libraries/stdlib/genglsl/mx_ramplr_vector4.glsl",start:572912,end:573062},{filename:"/libraries/stdlib/genglsl/mx_ramptb_float.glsl",start:573062,end:573213},{filename:"/libraries/stdlib/genglsl/mx_ramptb_vector2.glsl",start:573213,end:573363},{filename:"/libraries/stdlib/genglsl/mx_ramptb_vector3.glsl",start:573363,end:573513},{filename:"/libraries/stdlib/genglsl/mx_ramptb_vector4.glsl",start:573513,end:573663},{filename:"/libraries/stdlib/genglsl/mx_rgbtohsv_color3.glsl",start:573663,end:573777},{filename:"/libraries/stdlib/genglsl/mx_rgbtohsv_color4.glsl",start:573777,end:573906},{filename:"/libraries/stdlib/genglsl/mx_rotate_vector2.glsl",start:573906,end:574164},{filename:"/libraries/stdlib/genglsl/mx_rotate_vector3.glsl",start:574164,end:575065},{filename:"/libraries/stdlib/genglsl/mx_smoothstep_float.glsl",start:575065,end:575290},{filename:"/libraries/stdlib/genglsl/mx_splitlr_float.glsl",start:575290,end:575483},{filename:"/libraries/stdlib/genglsl/mx_splitlr_vector2.glsl",start:575483,end:575675},{filename:"/libraries/stdlib/genglsl/mx_splitlr_vector3.glsl",start:575675,end:575867},{filename:"/libraries/stdlib/genglsl/mx_splitlr_vector4.glsl",start:575867,end:576059},{filename:"/libraries/stdlib/genglsl/mx_splittb_float.glsl",start:576059,end:576252},{filename:"/libraries/stdlib/genglsl/mx_splittb_vector2.glsl",start:576252,end:576444},{filename:"/libraries/stdlib/genglsl/mx_splittb_vector3.glsl",start:576444,end:576636},{filename:"/libraries/stdlib/genglsl/mx_splittb_vector4.glsl",start:576636,end:576828},{filename:"/libraries/stdlib/genglsl/mx_surface_unlit.glsl",start:576828,end:577120},{filename:"/libraries/stdlib/genglsl/mx_transformmatrix_vector2M3.glsl",start:577120,end:577261},{filename:"/libraries/stdlib/genglsl/mx_transformmatrix_vector3M4.glsl",start:577261,end:577403},{filename:"/libraries/stdlib/genglsl/mx_unpremult_color4.glsl",start:577403,end:577502},{filename:"/libraries/stdlib/genglsl/mx_worleynoise2d_float.glsl",start:577502,end:577686},{filename:"/libraries/stdlib/genglsl/mx_worleynoise2d_vector2.glsl",start:577686,end:577870},{filename:"/libraries/stdlib/genglsl/mx_worleynoise2d_vector3.glsl",start:577870,end:578054},{filename:"/libraries/stdlib/genglsl/mx_worleynoise3d_float.glsl",start:578054,end:578238},{filename:"/libraries/stdlib/genglsl/mx_worleynoise3d_vector2.glsl",start:578238,end:578422},{filename:"/libraries/stdlib/genglsl/mx_worleynoise3d_vector3.glsl",start:578422,end:578606},{filename:"/libraries/stdlib/genglsl/stdlib_genglsl_impl.mtlx",start:578606,end:655400},{filename:"/libraries/stdlib/genmdl/stdlib_genmdl_impl.mtlx",start:655400,end:749690},{filename:"/libraries/stdlib/genmsl/lib/mx_math.metal",start:749690,end:753979},{filename:"/libraries/stdlib/genmsl/lib/mx_matscalaroperators.metal",start:753979,end:754988},{filename:"/libraries/stdlib/genmsl/lib/mx_texture.metal",start:754988,end:755726},{filename:"/libraries/stdlib/genmsl/stdlib_genmsl_impl.mtlx",start:755726,end:765452},{filename:"/libraries/stdlib/genosl/include/color4.h",start:765452,end:771290},{filename:"/libraries/stdlib/genosl/include/matrix33.h",start:771290,end:773910},{filename:"/libraries/stdlib/genosl/include/mx_funcs.h",start:773910,end:795701},{filename:"/libraries/stdlib/genosl/include/vector2.h",start:795701,end:801367},{filename:"/libraries/stdlib/genosl/include/vector4.h",start:801367,end:810365},{filename:"/libraries/stdlib/genosl/lib/mx_transform_uv.osl",start:810365,end:810432},{filename:"/libraries/stdlib/genosl/lib/mx_transform_uv_vflip.osl",start:810432,end:810528},{filename:"/libraries/stdlib/genosl/lib/vector4_extra_ops.osl",start:810528,end:811402},{filename:"/libraries/stdlib/genosl/mx_burn_color3.osl",start:811402,end:811655},{filename:"/libraries/stdlib/genosl/mx_burn_color4.osl",start:811655,end:811993},{filename:"/libraries/stdlib/genosl/mx_burn_float.osl",start:811993,end:812210},{filename:"/libraries/stdlib/genosl/mx_cellnoise2d_float.osl",start:812210,end:812327},{filename:"/libraries/stdlib/genosl/mx_cellnoise3d_float.osl",start:812327,end:812429},{filename:"/libraries/stdlib/genosl/mx_creatematrix.osl",start:812429,end:813334},{filename:"/libraries/stdlib/genosl/mx_disjointover_color4.osl",start:813334,end:813912},{filename:"/libraries/stdlib/genosl/mx_dodge_color3.osl",start:813912,end:814170},{filename:"/libraries/stdlib/genosl/mx_dodge_color4.osl",start:814170,end:814517},{filename:"/libraries/stdlib/genosl/mx_dodge_float.osl",start:814517,end:814724},{filename:"/libraries/stdlib/genosl/mx_fractal2d_float.osl",start:814724,end:814970},{filename:"/libraries/stdlib/genosl/mx_fractal2d_vector2.osl",start:814970,end:815224},{filename:"/libraries/stdlib/genosl/mx_fractal2d_vector3.osl",start:815224,end:815475},{filename:"/libraries/stdlib/genosl/mx_fractal2d_vector4.osl",start:815475,end:815729},{filename:"/libraries/stdlib/genosl/mx_fractal3d_float.osl",start:815729,end:815960},{filename:"/libraries/stdlib/genosl/mx_fractal3d_vector2.osl",start:815960,end:816199},{filename:"/libraries/stdlib/genosl/mx_fractal3d_vector3.osl",start:816199,end:816435},{filename:"/libraries/stdlib/genosl/mx_fractal3d_vector4.osl",start:816435,end:816674},{filename:"/libraries/stdlib/genosl/mx_frame_float.osl",start:816674,end:816843},{filename:"/libraries/stdlib/genosl/mx_geomcolor_color3.osl",start:816843,end:816939},{filename:"/libraries/stdlib/genosl/mx_geomcolor_color4.osl",start:816939,end:817170},{filename:"/libraries/stdlib/genosl/mx_geomcolor_float.osl",start:817170,end:817265},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_boolean.osl",start:817265,end:817416},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_color3.osl",start:817416,end:817569},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_color4.osl",start:817569,end:817937},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_float.osl",start:817937,end:818111},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_integer.osl",start:818111,end:818262},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_string.osl",start:818262,end:818418},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_vector2.osl",start:818418,end:818684},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_vector3.osl",start:818684,end:818840},{filename:"/libraries/stdlib/genosl/mx_geompropvalue_vector4.osl",start:818840,end:819158},{filename:"/libraries/stdlib/genosl/mx_heighttonormal_vector3.osl",start:819158,end:820132},{filename:"/libraries/stdlib/genosl/mx_hsvtorgb_color3.osl",start:820132,end:820237},{filename:"/libraries/stdlib/genosl/mx_hsvtorgb_color4.osl",start:820237,end:820359},{filename:"/libraries/stdlib/genosl/mx_image_color3.osl",start:820359,end:821304},{filename:"/libraries/stdlib/genosl/mx_image_color4.osl",start:821304,end:822427},{filename:"/libraries/stdlib/genosl/mx_image_float.osl",start:822427,end:823290},{filename:"/libraries/stdlib/genosl/mx_image_vector2.osl",start:823290,end:824205},{filename:"/libraries/stdlib/genosl/mx_image_vector3.osl",start:824205,end:825023},{filename:"/libraries/stdlib/genosl/mx_image_vector4.osl",start:825023,end:826066},{filename:"/libraries/stdlib/genosl/mx_luminance_color3.osl",start:826066,end:826178},{filename:"/libraries/stdlib/genosl/mx_luminance_color4.osl",start:826178,end:826310},{filename:"/libraries/stdlib/genosl/mx_mix_surfaceshader.osl",start:826310,end:826552},{filename:"/libraries/stdlib/genosl/mx_noise2d_float.osl",start:826552,end:826746},{filename:"/libraries/stdlib/genosl/mx_noise2d_vector2.osl",start:826746,end:826951},{filename:"/libraries/stdlib/genosl/mx_noise2d_vector3.osl",start:826951,end:827150},{filename:"/libraries/stdlib/genosl/mx_noise2d_vector4.osl",start:827150,end:827355},{filename:"/libraries/stdlib/genosl/mx_noise3d_float.osl",start:827355,end:827534},{filename:"/libraries/stdlib/genosl/mx_noise3d_vector2.osl",start:827534,end:827724},{filename:"/libraries/stdlib/genosl/mx_noise3d_vector3.osl",start:827724,end:827908},{filename:"/libraries/stdlib/genosl/mx_noise3d_vector4.osl",start:827908,end:828098},{filename:"/libraries/stdlib/genosl/mx_normalmap.osl",start:828098,end:829010},{filename:"/libraries/stdlib/genosl/mx_premult_color4.osl",start:829010,end:829112},{filename:"/libraries/stdlib/genosl/mx_rgbtohsv_color3.osl",start:829112,end:829217},{filename:"/libraries/stdlib/genosl/mx_rgbtohsv_color4.osl",start:829217,end:829339},{filename:"/libraries/stdlib/genosl/mx_rotate_vector2.osl",start:829339,end:829600},{filename:"/libraries/stdlib/genosl/mx_rotate_vector3.osl",start:829600,end:830670},{filename:"/libraries/stdlib/genosl/mx_surface_unlit.osl",start:830670,end:831084},{filename:"/libraries/stdlib/genosl/mx_surfacematerial.osl",start:831084,end:831367},{filename:"/libraries/stdlib/genosl/mx_time_float.osl",start:831367,end:831545},{filename:"/libraries/stdlib/genosl/mx_transformmatrix_vector2M3.osl",start:831545,end:831731},{filename:"/libraries/stdlib/genosl/mx_unpremult_color4.osl",start:831731,end:831835},{filename:"/libraries/stdlib/genosl/mx_worleynoise2d_float.osl",start:831835,end:831995},{filename:"/libraries/stdlib/genosl/mx_worleynoise2d_vector2.osl",start:831995,end:832161},{filename:"/libraries/stdlib/genosl/mx_worleynoise2d_vector3.osl",start:832161,end:832326},{filename:"/libraries/stdlib/genosl/mx_worleynoise3d_float.osl",start:832326,end:832485},{filename:"/libraries/stdlib/genosl/mx_worleynoise3d_vector2.osl",start:832485,end:832650},{filename:"/libraries/stdlib/genosl/mx_worleynoise3d_vector3.osl",start:832650,end:832814},{filename:"/libraries/stdlib/genosl/stdlib_genosl_impl.mtlx",start:832814,end:909860},{filename:"/libraries/stdlib/stdlib_defs.mtlx",start:909860,end:1187069},{filename:"/libraries/stdlib/stdlib_ng.mtlx",start:1187069,end:1509715},{filename:"/libraries/targets/essl.mtlx",start:1509715,end:1510177},{filename:"/libraries/targets/genglsl.mtlx",start:1510177,end:1510630},{filename:"/libraries/targets/genmdl.mtlx",start:1510630,end:1511082},{filename:"/libraries/targets/genmsl.mtlx",start:1511082,end:1511552},{filename:"/libraries/targets/genosl.mtlx",start:1511552,end:1512004}],remote_package_size:1512004})})();var y=Object.assign({},D),AA="./this.program",BA=(A,I)=>{throw I},p="";function r(A){return D.locateFile?D.locateFile(A,p):p+A}var oA,UA;if(K){var kA=require("fs");require("path"),p=__dirname+"/",UA=A=>{A=iI(A)?new URL(A):A;var I=kA.readFileSync(A);return I},oA=async(A,I=!0)=>{A=iI(A)?new URL(A):A;var g=kA.readFileSync(A,I?void 0:"utf8");return g},!D.thisProgram&&process.argv.length>1&&(AA=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2),BA=(A,I)=>{throw process.exitCode=A,I}}else(T||F)&&(F?p=self.location.href:typeof document<"u"&&document.currentScript&&(p=document.currentScript.src),J&&(p=J),p.startsWith("blob:")?p="":p=p.substr(0,p.replace(/[?#].*/,"").lastIndexOf("/")+1),F&&(UA=A=>{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response)}),oA=async A=>{if(iI(A))return new Promise((g,B)=>{var C=new XMLHttpRequest;C.open("GET",A,!0),C.responseType="arraybuffer",C.onload=()=>{if(C.status==200||C.status==0&&C.response){g(C.response);return}B(C.status)},C.onerror=B,C.send(null)});var I=await fetch(A,{credentials:"same-origin"});if(I.ok)return I.arrayBuffer();throw new Error(I.status+" : "+I.url)});var aA=D.print||console.log.bind(console),SA=D.printErr||console.error.bind(console);Object.assign(D,y),y=null,D.arguments&&D.arguments,D.thisProgram&&(AA=D.thisProgram);var mA=D.wasmBinary,XA,jA=!1,_,NA,RA,HA,eA,f,z,Qg,XI;function Eg(){var A=XA.buffer;D.HEAP8=NA=new Int8Array(A),D.HEAP16=HA=new Int16Array(A),D.HEAPU8=RA=new Uint8Array(A),D.HEAPU16=eA=new Uint16Array(A),D.HEAP32=f=new Int32Array(A),D.HEAPU32=z=new Uint32Array(A),D.HEAPF32=Qg=new Float32Array(A),D.HEAPF64=XI=new Float64Array(A)}var Gg=[],ig=[],Dg=[];function MB(){if(D.preRun)for(typeof D.preRun=="function"&&(D.preRun=[D.preRun]);D.preRun.length;)FB(D.preRun.shift());TI(Gg)}function HB(){!D.noFSInit&&!Q.initialized&&Q.init(),Q.ignorePermissions=!1,TI(ig)}function JB(){if(D.postRun)for(typeof D.postRun=="function"&&(D.postRun=[D.postRun]);D.postRun.length;)UB(D.postRun.shift());TI(Dg)}function FB(A){Gg.unshift(A)}function lB(A){ig.unshift(A)}function UB(A){Dg.unshift(A)}var VA=0,rA=null;function VI(A){VA++,D.monitorRunDependencies?.(VA)}function GI(A){if(VA--,D.monitorRunDependencies?.(VA),VA==0&&rA){var I=rA;rA=null,I()}}function xA(A){D.onAbort?.(A),A="Aborted("+A+")",SA(A),jA=!0,A+=". Build with -sASSERTIONS for more info.";var I=new WebAssembly.RuntimeError(A);throw U(I),I}var kB="data:application/octet-stream;base64,",Yg=A=>A.startsWith(kB),iI=A=>A.startsWith("file://");function aB(){var A="JsMaterialXGenShader.wasm";return Yg(A)?A:r(A)}var LI;function cB(A){if(A==LI&&mA)return new Uint8Array(mA);if(UA)return UA(A);throw"both async and sync fetching of the wasm failed"}async function WB(A){if(!mA)try{var I=await oA(A);return new Uint8Array(I)}catch{}return cB(A)}async function yB(A,I){try{var g=await WB(A),B=await WebAssembly.instantiate(g,I);return B}catch(C){SA(`failed to asynchronously prepare wasm: ${C}`),xA(C)}}async function dB(A,I,g){if(!A&&typeof WebAssembly.instantiateStreaming=="function"&&!Yg(I)&&!iI(I)&&!K&&typeof fetch=="function")try{var B=fetch(I,{credentials:"same-origin"}),C=await WebAssembly.instantiateStreaming(B,g);return C}catch(E){SA(`wasm streaming compile failed: ${E}`),SA("falling back to ArrayBuffer instantiation")}return yB(I,g)}function sB(){return{a:AE}}async function KB(){function A(C,E){return GA=C.exports,XA=GA._a,Eg(),ag=GA.cb,lB(GA.$a),GI(),GA}VI();function I(C){A(C.instance)}var g=sB();if(D.instantiateWasm)try{return D.instantiateWasm(g,A)}catch(C){SA(`Module.instantiateWasm callback failed with error: ${C}`),U(C)}LI??=aB();try{var B=await dB(mA,LI,g);return I(B),B}catch(C){U(C);return}}var d,EA,mB={188048:()=>{D.TreeIterator.prototype[Symbol.iterator]=function(){return this}},188132:()=>{D.GraphIterator.prototype[Symbol.iterator]=function(){return this}},188217:()=>{D.InheritanceIterator.prototype[Symbol.iterator]=function(){return this}}};class Ng{name="ExitStatus";constructor(I){this.message=`Program terminated with exit(${I})`,this.status=I}}var TI=A=>{for(;A.length>0;)A.shift()(D)},hg=D.noExitRuntime||!0,v=A=>ug(A),t=()=>vg(),wg=typeof TextDecoder<"u"?new TextDecoder:void 0,PA=(A,I=0,g=NaN)=>{for(var B=I+g,C=I;A[C]&&!(C>=B);)++C;if(C-I>16&&A.buffer&&wg)return wg.decode(A.subarray(I,C));for(var E="";I<C;){var G=A[I++];if(!(G&128)){E+=String.fromCharCode(G);continue}var i=A[I++]&63;if((G&224)==192){E+=String.fromCharCode((G&31)<<6|i);continue}var Y=A[I++]&63;if((G&240)==224?G=(G&15)<<12|i<<6|Y:G=(G&7)<<18|i<<12|Y<<6|A[I++]&63,G<65536)E+=String.fromCharCode(G);else{var h=G-65536;E+=String.fromCharCode(55296|h>>10,56320|h&1023)}}return E},OA=(A,I)=>A?PA(RA,A,I):"",XB=(A,I,g,B)=>xA(`Assertion failed: ${OA(A)}, at: `+[I?OA(I):"unknown filename",g,B?OA(B):"unknown function"]),DI=[],YI=0,VB=A=>{var I=new fI(A);return I.get_caught()||(I.set_caught(!0),YI--),I.set_rethrown(!1),DI.push(I),pg(A),zg(A)},cA=0,LB=()=>{x(0,0);var A=DI.pop();tg(A.excPtr),cA=0};class fI{constructor(I){this.excPtr=I,this.ptr=I-24}set_type(I){z[this.ptr+4>>2]=I}get_type(){return z[this.ptr+4>>2]}set_destructor(I){z[this.ptr+8>>2]=I}get_destructor(){return z[this.ptr+8>>2]}set_caught(I){I=I?1:0,NA[this.ptr+12]=I}get_caught(){return NA[this.ptr+12]!=0}set_rethrown(I){I=I?1:0,NA[this.ptr+13]=I}get_rethrown(){return NA[this.ptr+13]!=0}init(I,g){this.set_adjusted_ptr(0),this.set_type(I),this.set_destructor(g)}set_adjusted_ptr(I){z[this.ptr+16>>2]=I}get_adjusted_ptr(){return z[this.ptr+16>>2]}}var TB=A=>{throw cA||(cA=A),cA},NI=A=>Pg(A),jI=A=>{var I=cA;if(!I)return NI(0),0;var g=new fI(I);g.set_adjusted_ptr(I);var B=g.get_type();if(!B)return NI(0),I;for(var C of A){if(C===0||C===B)break;var E=g.ptr+16;if(ng(C,B,E))return NI(C),I}return NI(B),I},fB=()=>jI([]),jB=A=>jI([A]),xB=(A,I)=>jI([A,I]),PB=()=>{var A=DI.pop();A||xA("no exception to throw");var I=A.excPtr;throw A.get_rethrown()||(DI.push(A),A.set_rethrown(!0),A.set_caught(!1),YI++),cA=I,cA},uB=(A,I,g)=>{var B=new fI(A);throw B.init(I,g),cA=A,YI++,cA},vB=()=>YI,hI=()=>{var A=f[+wA.varargs>>2];return wA.varargs+=4,A},uA=hI,gA={isAbs:A=>A.charAt(0)==="/",splitPath:A=>{var I=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return I.exec(A).slice(1)},normalizeArray:(A,I)=>{for(var g=0,B=A.length-1;B>=0;B--){var C=A[B];C==="."?A.splice(B,1):C===".."?(A.splice(B,1),g++):g&&(A.splice(B,1),g--)}if(I)for(;g;g--)A.unshift("..");return A},normalize:A=>{var I=gA.isAbs(A),g=A.substr(-1)==="/";return A=gA.normalizeArray(A.split("/").filter(B=>!!B),!I).join("/"),!A&&!I&&(A="."),A&&g&&(A+="/"),(I?"/":"")+A},dirname:A=>{var I=gA.splitPath(A),g=I[0],B=I[1];return!g&&!B?".":(B&&(B=B.substr(0,B.length-1)),g+B)},basename:A=>{if(A==="/")return"/";A=gA.normalize(A),A=A.replace(/\/$/,"");var I=A.lastIndexOf("/");return I===-1?A:A.substr(I+1)},join:(...A)=>gA.normalize(A.join("/")),join2:(A,I)=>gA.normalize(A+"/"+I)},tB=()=>{if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function")return B=>crypto.getRandomValues(B);if(K)try{var A=require("crypto"),I=A.randomFillSync;if(I)return B=>A.randomFillSync(B);var g=A.randomBytes;return B=>(B.set(g(B.byteLength)),B)}catch{}xA("initRandomDevice")},og=A=>(og=tB())(A),vA={resolve:(...A)=>{for(var I="",g=!1,B=A.length-1;B>=-1&&!g;B--){var C=B>=0?A[B]:Q.cwd();if(typeof C!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!C)return"";I=C+"/"+I,g=gA.isAbs(C)}return I=gA.normalizeArray(I.split("/").filter(E=>!!E),!g).join("/"),(g?"/":"")+I||"."},relative:(A,I)=>{A=vA.resolve(A).substr(1),I=vA.resolve(I).substr(1);function g(h){for(var w=0;w<h.length&&h[w]==="";w++);for(var Z=h.length-1;Z>=0&&h[Z]==="";Z--);return w>Z?[]:h.slice(w,Z-w+1)}for(var B=g(A.split("/")),C=g(I.split("/")),E=Math.min(B.length,C.length),G=E,i=0;i<E;i++)if(B[i]!==C[i]){G=i;break}for(var Y=[],i=G;i<B.length;i++)Y.push("..");return Y=Y.concat(C.slice(G)),Y.join("/")}},xI=[],PI=A=>{for(var I=0,g=0;g<A.length;++g){var B=A.charCodeAt(g);B<=127?I++:B<=2047?I+=2:B>=55296&&B<=57343?(I+=4,++g):I+=3}return I},uI=(A,I,g,B)=>{if(!(B>0))return 0;for(var C=g,E=g+B-1,G=0;G<A.length;++G){var i=A.charCodeAt(G);if(i>=55296&&i<=57343){var Y=A.charCodeAt(++G);i=65536+((i&1023)<<10)|Y&1023}if(i<=127){if(g>=E)break;I[g++]=i}else if(i<=2047){if(g+1>=E)break;I[g++]=192|i>>6,I[g++]=128|i&63}else if(i<=65535){if(g+2>=E)break;I[g++]=224|i>>12,I[g++]=128|i>>6&63,I[g++]=128|i&63}else{if(g+3>=E)break;I[g++]=240|i>>18,I[g++]=128|i>>12&63,I[g++]=128|i>>6&63,I[g++]=128|i&63}}return I[g]=0,g-C};function Rg(A,I,g){var B=PI(A)+1,C=new Array(B),E=uI(A,C,0,C.length);return C.length=E,C}var pB=()=>{if(!xI.length){var A=null;if(K){var I=256,g=Buffer.alloc(I),B=0,C=process.stdin.fd;try{B=kA.readSync(C,g,0,I)}catch(E){if(E.toString().includes("EOF"))B=0;else throw E}B>0&&(A=g.slice(0,B).toString("utf-8"))}else typeof window<"u"&&typeof window.prompt=="function"&&(A=window.prompt("Input: "),A!==null&&(A+=`
|
|
2
2
|
`));if(!A)return null;xI=Rg(A)}return xI.shift()},LA={ttys:[],init(){},shutdown(){},register(A,I){LA.ttys[A]={input:[],output:[],ops:I},Q.registerDevice(A,LA.stream_ops)},stream_ops:{open(A){var I=LA.ttys[A.node.rdev];if(!I)throw new Q.ErrnoError(43);A.tty=I,A.seekable=!1},close(A){A.tty.ops.fsync(A.tty)},fsync(A){A.tty.ops.fsync(A.tty)},read(A,I,g,B,C){if(!A.tty||!A.tty.ops.get_char)throw new Q.ErrnoError(60);for(var E=0,G=0;G<B;G++){var i;try{i=A.tty.ops.get_char(A.tty)}catch{throw new Q.ErrnoError(29)}if(i===void 0&&E===0)throw new Q.ErrnoError(6);if(i==null)break;E++,I[g+G]=i}return E&&(A.node.atime=Date.now()),E},write(A,I,g,B,C){if(!A.tty||!A.tty.ops.put_char)throw new Q.ErrnoError(60);try{for(var E=0;E<B;E++)A.tty.ops.put_char(A.tty,I[g+E])}catch{throw new Q.ErrnoError(29)}return B&&(A.node.mtime=A.node.ctime=Date.now()),E}},default_tty_ops:{get_char(A){return pB()},put_char(A,I){I===null||I===10?(aA(PA(A.output)),A.output=[]):I!=0&&A.output.push(I)},fsync(A){A.output&&A.output.length>0&&(aA(PA(A.output)),A.output=[])},ioctl_tcgets(A){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(A,I,g){return 0},ioctl_tiocgwinsz(A){return[24,80]}},default_tty1_ops:{put_char(A,I){I===null||I===10?(SA(PA(A.output)),A.output=[]):I!=0&&A.output.push(I)},fsync(A){A.output&&A.output.length>0&&(SA(PA(A.output)),A.output=[])}}},nB=(A,I)=>Math.ceil(A/I)*I,Zg=A=>{xA()},X={ops_table:null,mount(A){return X.createNode(null,"/",16895,0)},createNode(A,I,g,B){if(Q.isBlkdev(g)||Q.isFIFO(g))throw new Q.ErrnoError(63);X.ops_table||={dir:{node:{getattr:X.node_ops.getattr,setattr:X.node_ops.setattr,lookup:X.node_ops.lookup,mknod:X.node_ops.mknod,rename:X.node_ops.rename,unlink:X.node_ops.unlink,rmdir:X.node_ops.rmdir,readdir:X.node_ops.readdir,symlink:X.node_ops.symlink},stream:{llseek:X.stream_ops.llseek}},file:{node:{getattr:X.node_ops.getattr,setattr:X.node_ops.setattr},stream:{llseek:X.stream_ops.llseek,read:X.stream_ops.read,write:X.stream_ops.write,allocate:X.stream_ops.allocate,mmap:X.stream_ops.mmap,msync:X.stream_ops.msync}},link:{node:{getattr:X.node_ops.getattr,setattr:X.node_ops.setattr,readlink:X.node_ops.readlink},stream:{}},chrdev:{node:{getattr:X.node_ops.getattr,setattr:X.node_ops.setattr},stream:Q.chrdev_stream_ops}};var C=Q.createNode(A,I,g,B);return Q.isDir(C.mode)?(C.node_ops=X.ops_table.dir.node,C.stream_ops=X.ops_table.dir.stream,C.contents={}):Q.isFile(C.mode)?(C.node_ops=X.ops_table.file.node,C.stream_ops=X.ops_table.file.stream,C.usedBytes=0,C.contents=null):Q.isLink(C.mode)?(C.node_ops=X.ops_table.link.node,C.stream_ops=X.ops_table.link.stream):Q.isChrdev(C.mode)&&(C.node_ops=X.ops_table.chrdev.node,C.stream_ops=X.ops_table.chrdev.stream),C.atime=C.mtime=C.ctime=Date.now(),A&&(A.contents[I]=C,A.atime=A.mtime=A.ctime=C.atime),C},getFileDataAsTypedArray(A){return A.contents?A.contents.subarray?A.contents.subarray(0,A.usedBytes):new Uint8Array(A.contents):new Uint8Array(0)},expandFileStorage(A,I){var g=A.contents?A.contents.length:0;if(!(g>=I)){var B=1024*1024;I=Math.max(I,g*(g<B?2:1.125)>>>0),g!=0&&(I=Math.max(I,256));var C=A.contents;A.contents=new Uint8Array(I),A.usedBytes>0&&A.contents.set(C.subarray(0,A.usedBytes),0)}},resizeFileStorage(A,I){if(A.usedBytes!=I)if(I==0)A.contents=null,A.usedBytes=0;else{var g=A.contents;A.contents=new Uint8Array(I),g&&A.contents.set(g.subarray(0,Math.min(I,A.usedBytes))),A.usedBytes=I}},node_ops:{getattr(A){var I={};return I.dev=Q.isChrdev(A.mode)?A.id:1,I.ino=A.id,I.mode=A.mode,I.nlink=1,I.uid=0,I.gid=0,I.rdev=A.rdev,Q.isDir(A.mode)?I.size=4096:Q.isFile(A.mode)?I.size=A.usedBytes:Q.isLink(A.mode)?I.size=A.link.length:I.size=0,I.atime=new Date(A.atime),I.mtime=new Date(A.mtime),I.ctime=new Date(A.ctime),I.blksize=4096,I.blocks=Math.ceil(I.size/I.blksize),I},setattr(A,I){for(const g of["mode","atime","mtime","ctime"])I[g]&&(A[g]=I[g]);I.size!==void 0&&X.resizeFileStorage(A,I.size)},lookup(A,I){throw X.doesNotExistError},mknod(A,I,g,B){return X.createNode(A,I,g,B)},rename(A,I,g){var B;try{B=Q.lookupNode(I,g)}catch{}if(B){if(Q.isDir(A.mode))for(var C in B.contents)throw new Q.ErrnoError(55);Q.hashRemoveNode(B)}delete A.parent.contents[A.name],I.contents[g]=A,A.name=g,I.ctime=I.mtime=A.parent.ctime=A.parent.mtime=Date.now()},unlink(A,I){delete A.contents[I],A.ctime=A.mtime=Date.now()},rmdir(A,I){var g=Q.lookupNode(A,I);for(var B in g.contents)throw new Q.ErrnoError(55);delete A.contents[I],A.ctime=A.mtime=Date.now()},readdir(A){return[".","..",...Object.keys(A.contents)]},symlink(A,I,g){var B=X.createNode(A,I,41471,0);return B.link=g,B},readlink(A){if(!Q.isLink(A.mode))throw new Q.ErrnoError(28);return A.link}},stream_ops:{read(A,I,g,B,C){var E=A.node.contents;if(C>=A.node.usedBytes)return 0;var G=Math.min(A.node.usedBytes-C,B);if(G>8&&E.subarray)I.set(E.subarray(C,C+G),g);else for(var i=0;i<G;i++)I[g+i]=E[C+i];return G},write(A,I,g,B,C,E){if(I.buffer===NA.buffer&&(E=!1),!B)return 0;var G=A.node;if(G.mtime=G.ctime=Date.now(),I.subarray&&(!G.contents||G.contents.subarray)){if(E)return G.contents=I.subarray(g,g+B),G.usedBytes=B,B;if(G.usedBytes===0&&C===0)return G.contents=I.slice(g,g+B),G.usedBytes=B,B;if(C+B<=G.usedBytes)return G.contents.set(I.subarray(g,g+B),C),B}if(X.expandFileStorage(G,C+B),G.contents.subarray&&I.subarray)G.contents.set(I.subarray(g,g+B),C);else for(var i=0;i<B;i++)G.contents[C+i]=I[g+i];return G.usedBytes=Math.max(G.usedBytes,C+B),B},llseek(A,I,g){var B=I;if(g===1?B+=A.position:g===2&&Q.isFile(A.node.mode)&&(B+=A.node.usedBytes),B<0)throw new Q.ErrnoError(28);return B},allocate(A,I,g){X.expandFileStorage(A.node,I+g),A.node.usedBytes=Math.max(A.node.usedBytes,I+g)},mmap(A,I,g,B,C){if(!Q.isFile(A.node.mode))throw new Q.ErrnoError(43);var E,G,i=A.node.contents;if(!(C&2)&&i&&i.buffer===NA.buffer)G=!1,E=i.byteOffset;else{if(G=!0,E=Zg(),!E)throw new Q.ErrnoError(48);i&&((g>0||g+I<i.length)&&(i.subarray?i=i.subarray(g,g+I):i=Array.prototype.slice.call(i,g,g+I)),NA.set(i,E))}return{ptr:E,allocated:G}},msync(A,I,g,B,C){return X.stream_ops.write(A,I,0,B,g,!1),0}}},zB=async A=>{var I=await oA(A);return new Uint8Array(I)},bg=(A,I,g,B,C,E)=>{Q.createDataFile(A,I,g,B,C,E)},qB=D.preloadPlugins||[],eB=(A,I,g,B)=>{typeof Browser<"u"&&Browser.init();var C=!1;return qB.forEach(E=>{C||E.canHandle(I)&&(E.handle(A,I,g,B),C=!0)}),C},Sg=(A,I,g,B,C,E,G,i,Y,h)=>{var w=I?vA.resolve(gA.join2(A,I)):A;function Z(b){function S(o){h?.(),i||bg(A,I,o,B,C,Y),E?.(),GI()}eB(b,w,S,()=>{G?.(),GI()})||S(b)}VI(),typeof g=="string"?zB(g).then(Z,G):Z(g)},rB=A=>{var I={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},g=I[A];if(typeof g>"u")throw new Error(`Unknown file open mode: ${A}`);return g},vI=(A,I)=>{var g=0;return A&&(g|=365),I&&(g|=146),g},Q={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,ErrnoError:class{name="ErrnoError";constructor(A){this.errno=A}},filesystems:null,syncFSRequests:0,readFiles:{},FSStream:class{shared={};get object(){return this.node}set object(A){this.node=A}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(A){this.shared.flags=A}get position(){return this.shared.position}set position(A){this.shared.position=A}},FSNode:class{node_ops={};stream_ops={};readMode=365;writeMode=146;mounted=null;constructor(A,I,g,B){A||(A=this),this.parent=A,this.mount=A.mount,this.id=Q.nextInode++,this.name=I,this.mode=g,this.rdev=B,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(A){A?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(A){A?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return Q.isDir(this.mode)}get isDevice(){return Q.isChrdev(this.mode)}},lookupPath(A,I={}){if(!A)return{path:"",node:null};I.follow_mount??=!0,gA.isAbs(A)||(A=Q.cwd()+"/"+A);A:for(var g=0;g<40;g++){for(var B=A.split("/").filter(h=>!!h&&h!=="."),C=Q.root,E="/",G=0;G<B.length;G++){var i=G===B.length-1;if(i&&I.parent)break;if(B[G]===".."){E=gA.dirname(E),C=C.parent;continue}E=gA.join2(E,B[G]);try{C=Q.lookupNode(C,B[G])}catch(h){if(h?.errno===44&&i&&I.noent_okay)return{path:E};throw h}if(Q.isMountpoint(C)&&(!i||I.follow_mount)&&(C=C.mounted.root),Q.isLink(C.mode)&&(!i||I.follow)){if(!C.node_ops.readlink)throw new Q.ErrnoError(52);var Y=C.node_ops.readlink(C);gA.isAbs(Y)||(Y=gA.dirname(E)+"/"+Y),A=Y+"/"+B.slice(G+1).join("/");continue A}}return{path:E,node:C}}throw new Q.ErrnoError(32)},getPath(A){for(var I;;){if(Q.isRoot(A)){var g=A.mount.mountpoint;return I?g[g.length-1]!=="/"?`${g}/${I}`:g+I:g}I=I?`${A.name}/${I}`:A.name,A=A.parent}},hashName(A,I){for(var g=0,B=0;B<I.length;B++)g=(g<<5)-g+I.charCodeAt(B)|0;return(A+g>>>0)%Q.nameTable.length},hashAddNode(A){var I=Q.hashName(A.parent.id,A.name);A.name_next=Q.nameTable[I],Q.nameTable[I]=A},hashRemoveNode(A){var I=Q.hashName(A.parent.id,A.name);if(Q.nameTable[I]===A)Q.nameTable[I]=A.name_next;else for(var g=Q.nameTable[I];g;){if(g.name_next===A){g.name_next=A.name_next;break}g=g.name_next}},lookupNode(A,I){var g=Q.mayLookup(A);if(g)throw new Q.ErrnoError(g);for(var B=Q.hashName(A.id,I),C=Q.nameTable[B];C;C=C.name_next){var E=C.name;if(C.parent.id===A.id&&E===I)return C}return Q.lookup(A,I)},createNode(A,I,g,B){var C=new Q.FSNode(A,I,g,B);return Q.hashAddNode(C),C},destroyNode(A){Q.hashRemoveNode(A)},isRoot(A){return A===A.parent},isMountpoint(A){return!!A.mounted},isFile(A){return(A&61440)===32768},isDir(A){return(A&61440)===16384},isLink(A){return(A&61440)===40960},isChrdev(A){return(A&61440)===8192},isBlkdev(A){return(A&61440)===24576},isFIFO(A){return(A&61440)===4096},isSocket(A){return(A&49152)===49152},flagsToPermissionString(A){var I=["r","w","rw"][A&3];return A&512&&(I+="w"),I},nodePermissions(A,I){return Q.ignorePermissions?0:I.includes("r")&&!(A.mode&292)||I.includes("w")&&!(A.mode&146)||I.includes("x")&&!(A.mode&73)?2:0},mayLookup(A){if(!Q.isDir(A.mode))return 54;var I=Q.nodePermissions(A,"x");return I||(A.node_ops.lookup?0:2)},mayCreate(A,I){if(!Q.isDir(A.mode))return 54;try{var g=Q.lookupNode(A,I);return 20}catch{}return Q.nodePermissions(A,"wx")},mayDelete(A,I,g){var B;try{B=Q.lookupNode(A,I)}catch(E){return E.errno}var C=Q.nodePermissions(A,"wx");if(C)return C;if(g){if(!Q.isDir(B.mode))return 54;if(Q.isRoot(B)||Q.getPath(B)===Q.cwd())return 10}else if(Q.isDir(B.mode))return 31;return 0},mayOpen(A,I){return A?Q.isLink(A.mode)?32:Q.isDir(A.mode)&&(Q.flagsToPermissionString(I)!=="r"||I&512)?31:Q.nodePermissions(A,Q.flagsToPermissionString(I)):44},MAX_OPEN_FDS:4096,nextfd(){for(var A=0;A<=Q.MAX_OPEN_FDS;A++)if(!Q.streams[A])return A;throw new Q.ErrnoError(33)},getStreamChecked(A){var I=Q.getStream(A);if(!I)throw new Q.ErrnoError(8);return I},getStream:A=>Q.streams[A],createStream(A,I=-1){return A=Object.assign(new Q.FSStream,A),I==-1&&(I=Q.nextfd()),A.fd=I,Q.streams[I]=A,A},closeStream(A){Q.streams[A]=null},dupStream(A,I=-1){var g=Q.createStream(A,I);return g.stream_ops?.dup?.(g),g},chrdev_stream_ops:{open(A){var I=Q.getDevice(A.node.rdev);A.stream_ops=I.stream_ops,A.stream_ops.open?.(A)},llseek(){throw new Q.ErrnoError(70)}},major:A=>A>>8,minor:A=>A&255,makedev:(A,I)=>A<<8|I,registerDevice(A,I){Q.devices[A]={stream_ops:I}},getDevice:A=>Q.devices[A],getMounts(A){for(var I=[],g=[A];g.length;){var B=g.pop();I.push(B),g.push(...B.mounts)}return I},syncfs(A,I){typeof A=="function"&&(I=A,A=!1),Q.syncFSRequests++,Q.syncFSRequests>1&&SA(`warning: ${Q.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var g=Q.getMounts(Q.root.mount),B=0;function C(G){return Q.syncFSRequests--,I(G)}function E(G){if(G)return E.errored?void 0:(E.errored=!0,C(G));++B>=g.length&&C(null)}g.forEach(G=>{if(!G.type.syncfs)return E(null);G.type.syncfs(G,A,E)})},mount(A,I,g){var B=g==="/",C=!g,E;if(B&&Q.root)throw new Q.ErrnoError(10);if(!B&&!C){var G=Q.lookupPath(g,{follow_mount:!1});if(g=G.path,E=G.node,Q.isMountpoint(E))throw new Q.ErrnoError(10);if(!Q.isDir(E.mode))throw new Q.ErrnoError(54)}var i={type:A,opts:I,mountpoint:g,mounts:[]},Y=A.mount(i);return Y.mount=i,i.root=Y,B?Q.root=Y:E&&(E.mounted=i,E.mount&&E.mount.mounts.push(i)),Y},unmount(A){var I=Q.lookupPath(A,{follow_mount:!1});if(!Q.isMountpoint(I.node))throw new Q.ErrnoError(28);var g=I.node,B=g.mounted,C=Q.getMounts(B);Object.keys(Q.nameTable).forEach(G=>{for(var i=Q.nameTable[G];i;){var Y=i.name_next;C.includes(i.mount)&&Q.destroyNode(i),i=Y}}),g.mounted=null;var E=g.mount.mounts.indexOf(B);g.mount.mounts.splice(E,1)},lookup(A,I){return A.node_ops.lookup(A,I)},mknod(A,I,g){var B=Q.lookupPath(A,{parent:!0}),C=B.node,E=gA.basename(A);if(!E||E==="."||E==="..")throw new Q.ErrnoError(28);var G=Q.mayCreate(C,E);if(G)throw new Q.ErrnoError(G);if(!C.node_ops.mknod)throw new Q.ErrnoError(63);return C.node_ops.mknod(C,E,I,g)},statfs(A){var I={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:Q.nextInode,ffree:Q.nextInode-1,fsid:42,flags:2,namelen:255},g=Q.lookupPath(A,{follow:!0}).node;return g?.node_ops.statfs&&Object.assign(I,g.node_ops.statfs(g.mount.opts.root)),I},create(A,I=438){return I&=4095,I|=32768,Q.mknod(A,I,0)},mkdir(A,I=511){return I&=1023,I|=16384,Q.mknod(A,I,0)},mkdirTree(A,I){for(var g=A.split("/"),B="",C=0;C<g.length;++C)if(g[C]){B+="/"+g[C];try{Q.mkdir(B,I)}catch(E){if(E.errno!=20)throw E}}},mkdev(A,I,g){return typeof g>"u"&&(g=I,I=438),I|=8192,Q.mknod(A,I,g)},symlink(A,I){if(!vA.resolve(A))throw new Q.ErrnoError(44);var g=Q.lookupPath(I,{parent:!0}),B=g.node;if(!B)throw new Q.ErrnoError(44);var C=gA.basename(I),E=Q.mayCreate(B,C);if(E)throw new Q.ErrnoError(E);if(!B.node_ops.symlink)throw new Q.ErrnoError(63);return B.node_ops.symlink(B,C,A)},rename(A,I){var g=gA.dirname(A),B=gA.dirname(I),C=gA.basename(A),E=gA.basename(I),G,i,Y;if(G=Q.lookupPath(A,{parent:!0}),i=G.node,G=Q.lookupPath(I,{parent:!0}),Y=G.node,!i||!Y)throw new Q.ErrnoError(44);if(i.mount!==Y.mount)throw new Q.ErrnoError(75);var h=Q.lookupNode(i,C),w=vA.relative(A,B);if(w.charAt(0)!==".")throw new Q.ErrnoError(28);if(w=vA.relative(I,g),w.charAt(0)!==".")throw new Q.ErrnoError(55);var Z;try{Z=Q.lookupNode(Y,E)}catch{}if(h!==Z){var b=Q.isDir(h.mode),S=Q.mayDelete(i,C,b);if(S)throw new Q.ErrnoError(S);if(S=Z?Q.mayDelete(Y,E,b):Q.mayCreate(Y,E),S)throw new Q.ErrnoError(S);if(!i.node_ops.rename)throw new Q.ErrnoError(63);if(Q.isMountpoint(h)||Z&&Q.isMountpoint(Z))throw new Q.ErrnoError(10);if(Y!==i&&(S=Q.nodePermissions(i,"w"),S))throw new Q.ErrnoError(S);Q.hashRemoveNode(h);try{i.node_ops.rename(h,Y,E),h.parent=Y}catch(o){throw o}finally{Q.hashAddNode(h)}}},rmdir(A){var I=Q.lookupPath(A,{parent:!0}),g=I.node,B=gA.basename(A),C=Q.lookupNode(g,B),E=Q.mayDelete(g,B,!0);if(E)throw new Q.ErrnoError(E);if(!g.node_ops.rmdir)throw new Q.ErrnoError(63);if(Q.isMountpoint(C))throw new Q.ErrnoError(10);g.node_ops.rmdir(g,B),Q.destroyNode(C)},readdir(A){var I=Q.lookupPath(A,{follow:!0}),g=I.node;if(!g.node_ops.readdir)throw new Q.ErrnoError(54);return g.node_ops.readdir(g)},unlink(A){var I=Q.lookupPath(A,{parent:!0}),g=I.node;if(!g)throw new Q.ErrnoError(44);var B=gA.basename(A),C=Q.lookupNode(g,B),E=Q.mayDelete(g,B,!1);if(E)throw new Q.ErrnoError(E);if(!g.node_ops.unlink)throw new Q.ErrnoError(63);if(Q.isMountpoint(C))throw new Q.ErrnoError(10);g.node_ops.unlink(g,B),Q.destroyNode(C)},readlink(A){var I=Q.lookupPath(A),g=I.node;if(!g)throw new Q.ErrnoError(44);if(!g.node_ops.readlink)throw new Q.ErrnoError(28);return g.node_ops.readlink(g)},stat(A,I){var g=Q.lookupPath(A,{follow:!I}),B=g.node;if(!B)throw new Q.ErrnoError(44);if(!B.node_ops.getattr)throw new Q.ErrnoError(63);return B.node_ops.getattr(B)},lstat(A){return Q.stat(A,!0)},chmod(A,I,g){var B;if(typeof A=="string"){var C=Q.lookupPath(A,{follow:!g});B=C.node}else B=A;if(!B.node_ops.setattr)throw new Q.ErrnoError(63);B.node_ops.setattr(B,{mode:I&4095|B.mode&-4096,ctime:Date.now()})},lchmod(A,I){Q.chmod(A,I,!0)},fchmod(A,I){var g=Q.getStreamChecked(A);Q.chmod(g.node,I)},chown(A,I,g,B){var C;if(typeof A=="string"){var E=Q.lookupPath(A,{follow:!B});C=E.node}else C=A;if(!C.node_ops.setattr)throw new Q.ErrnoError(63);C.node_ops.setattr(C,{timestamp:Date.now()})},lchown(A,I,g){Q.chown(A,I,g,!0)},fchown(A,I,g){var B=Q.getStreamChecked(A);Q.chown(B.node,I,g)},truncate(A,I){if(I<0)throw new Q.ErrnoError(28);var g;if(typeof A=="string"){var B=Q.lookupPath(A,{follow:!0});g=B.node}else g=A;if(!g.node_ops.setattr)throw new Q.ErrnoError(63);if(Q.isDir(g.mode))throw new Q.ErrnoError(31);if(!Q.isFile(g.mode))throw new Q.ErrnoError(28);var C=Q.nodePermissions(g,"w");if(C)throw new Q.ErrnoError(C);g.node_ops.setattr(g,{size:I,timestamp:Date.now()})},ftruncate(A,I){var g=Q.getStreamChecked(A);if((g.flags&2097155)===0)throw new Q.ErrnoError(28);Q.truncate(g.node,I)},utime(A,I,g){var B=Q.lookupPath(A,{follow:!0}),C=B.node;C.node_ops.setattr(C,{atime:I,mtime:g})},open(A,I,g=438){if(A==="")throw new Q.ErrnoError(44);I=typeof I=="string"?rB(I):I,I&64?g=g&4095|32768:g=0;var B;if(typeof A=="object")B=A;else{var C=Q.lookupPath(A,{follow:!(I&131072),noent_okay:!0});B=C.node,A=C.path}var E=!1;if(I&64)if(B){if(I&128)throw new Q.ErrnoError(20)}else B=Q.mknod(A,g,0),E=!0;if(!B)throw new Q.ErrnoError(44);if(Q.isChrdev(B.mode)&&(I&=-513),I&65536&&!Q.isDir(B.mode))throw new Q.ErrnoError(54);if(!E){var G=Q.mayOpen(B,I);if(G)throw new Q.ErrnoError(G)}I&512&&!E&&Q.truncate(B,0),I&=-131713;var i=Q.createStream({node:B,path:Q.getPath(B),flags:I,seekable:!0,position:0,stream_ops:B.stream_ops,ungotten:[],error:!1});return i.stream_ops.open&&i.stream_ops.open(i),D.logReadFiles&&!(I&1)&&(A in Q.readFiles||(Q.readFiles[A]=1)),i},close(A){if(Q.isClosed(A))throw new Q.ErrnoError(8);A.getdents&&(A.getdents=null);try{A.stream_ops.close&&A.stream_ops.close(A)}catch(I){throw I}finally{Q.closeStream(A.fd)}A.fd=null},isClosed(A){return A.fd===null},llseek(A,I,g){if(Q.isClosed(A))throw new Q.ErrnoError(8);if(!A.seekable||!A.stream_ops.llseek)throw new Q.ErrnoError(70);if(g!=0&&g!=1&&g!=2)throw new Q.ErrnoError(28);return A.position=A.stream_ops.llseek(A,I,g),A.ungotten=[],A.position},read(A,I,g,B,C){if(B<0||C<0)throw new Q.ErrnoError(28);if(Q.isClosed(A))throw new Q.ErrnoError(8);if((A.flags&2097155)===1)throw new Q.ErrnoError(8);if(Q.isDir(A.node.mode))throw new Q.ErrnoError(31);if(!A.stream_ops.read)throw new Q.ErrnoError(28);var E=typeof C<"u";if(!E)C=A.position;else if(!A.seekable)throw new Q.ErrnoError(70);var G=A.stream_ops.read(A,I,g,B,C);return E||(A.position+=G),G},write(A,I,g,B,C,E){if(B<0||C<0)throw new Q.ErrnoError(28);if(Q.isClosed(A))throw new Q.ErrnoError(8);if((A.flags&2097155)===0)throw new Q.ErrnoError(8);if(Q.isDir(A.node.mode))throw new Q.ErrnoError(31);if(!A.stream_ops.write)throw new Q.ErrnoError(28);A.seekable&&A.flags&1024&&Q.llseek(A,0,2);var G=typeof C<"u";if(!G)C=A.position;else if(!A.seekable)throw new Q.ErrnoError(70);var i=A.stream_ops.write(A,I,g,B,C,E);return G||(A.position+=i),i},allocate(A,I,g){if(Q.isClosed(A))throw new Q.ErrnoError(8);if(I<0||g<=0)throw new Q.ErrnoError(28);if((A.flags&2097155)===0)throw new Q.ErrnoError(8);if(!Q.isFile(A.node.mode)&&!Q.isDir(A.node.mode))throw new Q.ErrnoError(43);if(!A.stream_ops.allocate)throw new Q.ErrnoError(138);A.stream_ops.allocate(A,I,g)},mmap(A,I,g,B,C){if((B&2)!==0&&(C&2)===0&&(A.flags&2097155)!==2)throw new Q.ErrnoError(2);if((A.flags&2097155)===1)throw new Q.ErrnoError(2);if(!A.stream_ops.mmap)throw new Q.ErrnoError(43);if(!I)throw new Q.ErrnoError(28);return A.stream_ops.mmap(A,I,g,B,C)},msync(A,I,g,B,C){return A.stream_ops.msync?A.stream_ops.msync(A,I,g,B,C):0},ioctl(A,I,g){if(!A.stream_ops.ioctl)throw new Q.ErrnoError(59);return A.stream_ops.ioctl(A,I,g)},readFile(A,I={}){if(I.flags=I.flags||0,I.encoding=I.encoding||"binary",I.encoding!=="utf8"&&I.encoding!=="binary")throw new Error(`Invalid encoding type "${I.encoding}"`);var g,B=Q.open(A,I.flags),C=Q.stat(A),E=C.size,G=new Uint8Array(E);return Q.read(B,G,0,E,0),I.encoding==="utf8"?g=PA(G):I.encoding==="binary"&&(g=G),Q.close(B),g},writeFile(A,I,g={}){g.flags=g.flags||577;var B=Q.open(A,g.flags,g.mode);if(typeof I=="string"){var C=new Uint8Array(PI(I)+1),E=uI(I,C,0,C.length);Q.write(B,C,0,E,void 0,g.canOwn)}else if(ArrayBuffer.isView(I))Q.write(B,I,0,I.byteLength,void 0,g.canOwn);else throw new Error("Unsupported data type");Q.close(B)},cwd:()=>Q.currentPath,chdir(A){var I=Q.lookupPath(A,{follow:!0});if(I.node===null)throw new Q.ErrnoError(44);if(!Q.isDir(I.node.mode))throw new Q.ErrnoError(54);var g=Q.nodePermissions(I.node,"x");if(g)throw new Q.ErrnoError(g);Q.currentPath=I.path},createDefaultDirectories(){Q.mkdir("/tmp"),Q.mkdir("/home"),Q.mkdir("/home/web_user")},createDefaultDevices(){Q.mkdir("/dev"),Q.registerDevice(Q.makedev(1,3),{read:()=>0,write:(B,C,E,G,i)=>G,llseek:()=>0}),Q.mkdev("/dev/null",Q.makedev(1,3)),LA.register(Q.makedev(5,0),LA.default_tty_ops),LA.register(Q.makedev(6,0),LA.default_tty1_ops),Q.mkdev("/dev/tty",Q.makedev(5,0)),Q.mkdev("/dev/tty1",Q.makedev(6,0));var A=new Uint8Array(1024),I=0,g=()=>(I===0&&(I=og(A).byteLength),A[--I]);Q.createDevice("/dev","random",g),Q.createDevice("/dev","urandom",g),Q.mkdir("/dev/shm"),Q.mkdir("/dev/shm/tmp")},createSpecialDirectories(){Q.mkdir("/proc");var A=Q.mkdir("/proc/self");Q.mkdir("/proc/self/fd"),Q.mount({mount(){var I=Q.createNode(A,"fd",16895,73);return I.stream_ops={llseek:X.stream_ops.llseek},I.node_ops={lookup(g,B){var C=+B,E=Q.getStreamChecked(C),G={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>E.path},id:C+1};return G.parent=G,G},readdir(){return Array.from(Q.streams.entries()).filter(([g,B])=>B).map(([g,B])=>g.toString())}},I}},{},"/proc/self/fd")},createStandardStreams(A,I,g){A?Q.createDevice("/dev","stdin",A):Q.symlink("/dev/tty","/dev/stdin"),I?Q.createDevice("/dev","stdout",null,I):Q.symlink("/dev/tty","/dev/stdout"),g?Q.createDevice("/dev","stderr",null,g):Q.symlink("/dev/tty1","/dev/stderr"),Q.open("/dev/stdin",0),Q.open("/dev/stdout",1),Q.open("/dev/stderr",1)},staticInit(){Q.nameTable=new Array(4096),Q.mount(X,{},"/"),Q.createDefaultDirectories(),Q.createDefaultDevices(),Q.createSpecialDirectories(),Q.filesystems={MEMFS:X}},init(A,I,g){Q.initialized=!0,A??=D.stdin,I??=D.stdout,g??=D.stderr,Q.createStandardStreams(A,I,g)},quit(){Q.initialized=!1;for(var A=0;A<Q.streams.length;A++){var I=Q.streams[A];I&&Q.close(I)}},findObject(A,I){var g=Q.analyzePath(A,I);return g.exists?g.object:null},analyzePath(A,I){try{var g=Q.lookupPath(A,{follow:!I});A=g.path}catch{}var B={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var g=Q.lookupPath(A,{parent:!0});B.parentExists=!0,B.parentPath=g.path,B.parentObject=g.node,B.name=gA.basename(A),g=Q.lookupPath(A,{follow:!I}),B.exists=!0,B.path=g.path,B.object=g.node,B.name=g.node.name,B.isRoot=g.path==="/"}catch(C){B.error=C.errno}return B},createPath(A,I,g,B){A=typeof A=="string"?A:Q.getPath(A);for(var C=I.split("/").reverse();C.length;){var E=C.pop();if(E){var G=gA.join2(A,E);try{Q.mkdir(G)}catch{}A=G}}return G},createFile(A,I,g,B,C){var E=gA.join2(typeof A=="string"?A:Q.getPath(A),I),G=vI(B,C);return Q.create(E,G)},createDataFile(A,I,g,B,C,E){var G=I;A&&(A=typeof A=="string"?A:Q.getPath(A),G=I?gA.join2(A,I):A);var i=vI(B,C),Y=Q.create(G,i);if(g){if(typeof g=="string"){for(var h=new Array(g.length),w=0,Z=g.length;w<Z;++w)h[w]=g.charCodeAt(w);g=h}Q.chmod(Y,i|146);var b=Q.open(Y,577);Q.write(b,g,0,g.length,0,E),Q.close(b),Q.chmod(Y,i)}},createDevice(A,I,g,B){var C=gA.join2(typeof A=="string"?A:Q.getPath(A),I),E=vI(!!g,!!B);Q.createDevice.major??=64;var G=Q.makedev(Q.createDevice.major++,0);return Q.registerDevice(G,{open(i){i.seekable=!1},close(i){B?.buffer?.length&&B(10)},read(i,Y,h,w,Z){for(var b=0,S=0;S<w;S++){var o;try{o=g()}catch{throw new Q.ErrnoError(29)}if(o===void 0&&b===0)throw new Q.ErrnoError(6);if(o==null)break;b++,Y[h+S]=o}return b&&(i.node.atime=Date.now()),b},write(i,Y,h,w,Z){for(var b=0;b<w;b++)try{B(Y[h+b])}catch{throw new Q.ErrnoError(29)}return w&&(i.node.mtime=i.node.ctime=Date.now()),b}}),Q.mkdev(C,E,G)},forceLoadFile(A){if(A.isDevice||A.isFolder||A.link||A.contents)return!0;if(typeof XMLHttpRequest<"u")throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");try{A.contents=UA(A.url),A.usedBytes=A.contents.length}catch{throw new Q.ErrnoError(29)}},createLazyFile(A,I,g,B,C){class E{lengthKnown=!1;chunks=[];get(S){if(!(S>this.length-1||S<0)){var o=S%this.chunkSize,s=S/this.chunkSize|0;return this.getter(s)[o]}}setDataGetter(S){this.getter=S}cacheLength(){var S=new XMLHttpRequest;if(S.open("HEAD",g,!1),S.send(null),!(S.status>=200&&S.status<300||S.status===304))throw new Error("Couldn't load "+g+". Status: "+S.status);var o=Number(S.getResponseHeader("Content-length")),s,j=(s=S.getResponseHeader("Accept-Ranges"))&&s==="bytes",m=(s=S.getResponseHeader("Content-Encoding"))&&s==="gzip",V=1024*1024;j||(V=o);var q=($,hA)=>{if($>hA)throw new Error("invalid range ("+$+", "+hA+") or no bytes requested!");if(hA>o-1)throw new Error("only "+o+" bytes available! programmer error!");var l=new XMLHttpRequest;if(l.open("GET",g,!1),o!==V&&l.setRequestHeader("Range","bytes="+$+"-"+hA),l.responseType="arraybuffer",l.overrideMimeType&&l.overrideMimeType("text/plain; charset=x-user-defined"),l.send(null),!(l.status>=200&&l.status<300||l.status===304))throw new Error("Couldn't load "+g+". Status: "+l.status);return l.response!==void 0?new Uint8Array(l.response||[]):Rg(l.responseText||"")},CA=this;CA.setDataGetter($=>{var hA=$*V,l=($+1)*V-1;if(l=Math.min(l,o-1),typeof CA.chunks[$]>"u"&&(CA.chunks[$]=q(hA,l)),typeof CA.chunks[$]>"u")throw new Error("doXHR failed!");return CA.chunks[$]}),(m||!o)&&(V=o=1,o=this.getter(0).length,V=o,aA("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=o,this._chunkSize=V,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(typeof XMLHttpRequest<"u"){if(!F)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var G=new E,i={isDevice:!1,contents:G}}else var i={isDevice:!1,url:g};var Y=Q.createFile(A,I,i,B,C);i.contents?Y.contents=i.contents:i.url&&(Y.contents=null,Y.url=i.url),Object.defineProperties(Y,{usedBytes:{get:function(){return this.contents.length}}});var h={},w=Object.keys(Y.stream_ops);w.forEach(b=>{var S=Y.stream_ops[b];h[b]=(...o)=>(Q.forceLoadFile(Y),S(...o))});function Z(b,S,o,s,j){var m=b.node.contents;if(j>=m.length)return 0;var V=Math.min(m.length-j,s);if(m.slice)for(var q=0;q<V;q++)S[o+q]=m[j+q];else for(var q=0;q<V;q++)S[o+q]=m.get(j+q);return V}return h.read=(b,S,o,s,j)=>(Q.forceLoadFile(Y),Z(b,S,o,s,j)),h.mmap=(b,S,o,s,j)=>{Q.forceLoadFile(Y);var m=Zg();if(!m)throw new Q.ErrnoError(48);return Z(b,NA,m,S,o),{ptr:m,allocated:!0}},Y.stream_ops=h,Y}},wA={DEFAULT_POLLMASK:5,calculateAt(A,I,g){if(gA.isAbs(I))return I;var B;if(A===-100)B=Q.cwd();else{var C=wA.getStreamFromFD(A);B=C.path}if(I.length==0){if(!g)throw new Q.ErrnoError(44);return B}return B+"/"+I},doStat(A,I,g){var B=A(I);f[g>>2]=B.dev,f[g+4>>2]=B.mode,z[g+8>>2]=B.nlink,f[g+12>>2]=B.uid,f[g+16>>2]=B.gid,f[g+20>>2]=B.rdev,EA=[B.size>>>0,(d=B.size,+Math.abs(d)>=1?d>0?+Math.floor(d/4294967296)>>>0:~~+Math.ceil((d-+(~~d>>>0))/4294967296)>>>0:0)],f[g+24>>2]=EA[0],f[g+28>>2]=EA[1],f[g+32>>2]=4096,f[g+36>>2]=B.blocks;var C=B.atime.getTime(),E=B.mtime.getTime(),G=B.ctime.getTime();return EA=[Math.floor(C/1e3)>>>0,(d=Math.floor(C/1e3),+Math.abs(d)>=1?d>0?+Math.floor(d/4294967296)>>>0:~~+Math.ceil((d-+(~~d>>>0))/4294967296)>>>0:0)],f[g+40>>2]=EA[0],f[g+44>>2]=EA[1],z[g+48>>2]=C%1e3*1e3*1e3,EA=[Math.floor(E/1e3)>>>0,(d=Math.floor(E/1e3),+Math.abs(d)>=1?d>0?+Math.floor(d/4294967296)>>>0:~~+Math.ceil((d-+(~~d>>>0))/4294967296)>>>0:0)],f[g+56>>2]=EA[0],f[g+60>>2]=EA[1],z[g+64>>2]=E%1e3*1e3*1e3,EA=[Math.floor(G/1e3)>>>0,(d=Math.floor(G/1e3),+Math.abs(d)>=1?d>0?+Math.floor(d/4294967296)>>>0:~~+Math.ceil((d-+(~~d>>>0))/4294967296)>>>0:0)],f[g+72>>2]=EA[0],f[g+76>>2]=EA[1],z[g+80>>2]=G%1e3*1e3*1e3,EA=[B.ino>>>0,(d=B.ino,+Math.abs(d)>=1?d>0?+Math.floor(d/4294967296)>>>0:~~+Math.ceil((d-+(~~d>>>0))/4294967296)>>>0:0)],f[g+88>>2]=EA[0],f[g+92>>2]=EA[1],0},doMsync(A,I,g,B,C){if(!Q.isFile(I.node.mode))throw new Q.ErrnoError(43);if(B&2)return 0;var E=RA.slice(A,A+g);Q.msync(I,E,C,g,B)},getStreamFromFD(A){var I=Q.getStreamChecked(A);return I},varargs:void 0,getStr(A){var I=OA(A);return I}};function OB(A,I,g){wA.varargs=g;try{var B=wA.getStreamFromFD(A);switch(I){case 0:{var C=hI();if(C<0)return-28;for(;Q.streams[C];)C++;var E;return E=Q.dupStream(B,C),E.fd}case 1:case 2:return 0;case 3:return B.flags;case 4:{var C=hI();return B.flags|=C,0}case 12:{var C=uA(),G=0;return HA[C+G>>1]=2,0}case 13:case 14:return 0}return-28}catch(i){if(typeof Q>"u"||i.name!=="ErrnoError")throw i;return-i.errno}}var tA=(A,I,g)=>uI(A,RA,I,g);function _B(A,I,g){try{var B=wA.getStreamFromFD(A);B.getdents||=Q.readdir(B.path);for(var C=280,E=0,G=Q.llseek(B,0,1),i=Math.floor(G/C),Y=Math.min(B.getdents.length,i+Math.floor(g/C)),h=i;h<Y;h++){var w,Z,b=B.getdents[h];if(b===".")w=B.node.id,Z=4;else if(b===".."){var S=Q.lookupPath(B.path,{parent:!0});w=S.node.id,Z=4}else{var o;try{o=Q.lookupNode(B.node,b)}catch(s){if(s?.errno===28)continue;throw s}w=o.id,Z=Q.isChrdev(o.mode)?2:Q.isDir(o.mode)?4:Q.isLink(o.mode)?10:8}EA=[w>>>0,(d=w,+Math.abs(d)>=1?d>0?+Math.floor(d/4294967296)>>>0:~~+Math.ceil((d-+(~~d>>>0))/4294967296)>>>0:0)],f[I+E>>2]=EA[0],f[I+E+4>>2]=EA[1],EA=[(h+1)*C>>>0,(d=(h+1)*C,+Math.abs(d)>=1?d>0?+Math.floor(d/4294967296)>>>0:~~+Math.ceil((d-+(~~d>>>0))/4294967296)>>>0:0)],f[I+E+8>>2]=EA[0],f[I+E+12>>2]=EA[1],HA[I+E+16>>1]=280,NA[I+E+18]=Z,tA(b,I+E+19,256),E+=C}return Q.llseek(B,h*C,0),E}catch(s){if(typeof Q>"u"||s.name!=="ErrnoError")throw s;return-s.errno}}function $B(A,I,g){wA.varargs=g;try{var B=wA.getStreamFromFD(A);switch(I){case 21509:return B.tty?0:-59;case 21505:{if(!B.tty)return-59;if(B.tty.ops.ioctl_tcgets){var C=B.tty.ops.ioctl_tcgets(B),E=uA();f[E>>2]=C.c_iflag||0,f[E+4>>2]=C.c_oflag||0,f[E+8>>2]=C.c_cflag||0,f[E+12>>2]=C.c_lflag||0;for(var G=0;G<32;G++)NA[E+G+17]=C.c_cc[G]||0;return 0}return 0}case 21510:case 21511:case 21512:return B.tty?0:-59;case 21506:case 21507:case 21508:{if(!B.tty)return-59;if(B.tty.ops.ioctl_tcsets){for(var E=uA(),i=f[E>>2],Y=f[E+4>>2],h=f[E+8>>2],w=f[E+12>>2],Z=[],G=0;G<32;G++)Z.push(NA[E+G+17]);return B.tty.ops.ioctl_tcsets(B.tty,I,{c_iflag:i,c_oflag:Y,c_cflag:h,c_lflag:w,c_cc:Z})}return 0}case 21519:{if(!B.tty)return-59;var E=uA();return f[E>>2]=0,0}case 21520:return B.tty?-28:-59;case 21531:{var E=uA();return Q.ioctl(B,I,E)}case 21523:{if(!B.tty)return-59;if(B.tty.ops.ioctl_tiocgwinsz){var b=B.tty.ops.ioctl_tiocgwinsz(B.tty),E=uA();HA[E>>1]=b[0],HA[E+2>>1]=b[1]}return 0}case 21524:return B.tty?0:-59;case 21515:return B.tty?0:-59;default:return-28}}catch(S){if(typeof Q>"u"||S.name!=="ErrnoError")throw S;return-S.errno}}function AC(A,I,g,B){wA.varargs=B;try{I=wA.getStr(I),I=wA.calculateAt(A,I);var C=B?hI():0;return Q.open(I,g,C).fd}catch(E){if(typeof Q>"u"||E.name!=="ErrnoError")throw E;return-E.errno}}function IC(A,I){try{return A=wA.getStr(A),wA.doStat(Q.stat,A,I)}catch(g){if(typeof Q>"u"||g.name!=="ErrnoError")throw g;return-g.errno}}var gC=()=>xA(""),wI={},_A=A=>{for(;A.length;){var I=A.pop(),g=A.pop();g(I)}};function $A(A){return this.fromWireType(z[A>>2])}var pA={},TA={},oI={},Mg,RI=A=>{throw new Mg(A)},bA=(A,I,g)=>{A.forEach(i=>oI[i]=I);function B(i){var Y=g(i);Y.length!==A.length&&RI("Mismatched type converter count");for(var h=0;h<A.length;++h)JA(A[h],Y[h])}var C=new Array(I.length),E=[],G=0;I.forEach((i,Y)=>{TA.hasOwnProperty(i)?C[Y]=TA[i]:(E.push(i),pA.hasOwnProperty(i)||(pA[i]=[]),pA[i].push(()=>{C[Y]=TA[i],++G,G===E.length&&B(C)}))}),E.length===0&&B(C)},BC=A=>{var I=wI[A];delete wI[A];var g=I.elements,B=g.length,C=g.map(i=>i.getterReturnType).concat(g.map(i=>i.setterArgumentType)),E=I.rawConstructor,G=I.rawDestructor;bA([A],C,i=>(g.forEach((Y,h)=>{var w=i[h],Z=Y.getter,b=Y.getterContext,S=i[h+B],o=Y.setter,s=Y.setterContext;Y.read=j=>w.fromWireType(Z(b,j)),Y.write=(j,m)=>{var V=[];o(s,j,S.toWireType(V,m)),_A(V)}}),[{name:I.name,fromWireType:Y=>{for(var h=new Array(B),w=0;w<B;++w)h[w]=g[w].read(Y);return G(Y),h},toWireType:(Y,h)=>{if(B!==h.length)throw new TypeError(`Incorrect number of tuple elements for ${I.name}: expected=${B}, actual=${h.length}`);for(var w=E(),Z=0;Z<B;++Z)g[Z].write(w,h[Z]);return Y!==null&&Y.push(G,w),w},argPackAdvance:FA,readValueFromPointer:$A,destructorFunction:G}]))},CC=(A,I,g,B,C)=>{},QC=()=>{for(var A=new Array(256),I=0;I<256;++I)A[I]=String.fromCharCode(I);Hg=A},Hg,DA=A=>{for(var I="",g=A;RA[g];)I+=Hg[RA[g++]];return I},nA,n=A=>{throw new nA(A)};function EC(A,I,g={}){var B=I.name;if(A||n(`type "${B}" must have a positive integer typeid pointer`),TA.hasOwnProperty(A)){if(g.ignoreDuplicateRegistrations)return;n(`Cannot register type '${B}' twice`)}if(TA[A]=I,delete oI[A],pA.hasOwnProperty(A)){var C=pA[A];delete pA[A],C.forEach(E=>E())}}function JA(A,I,g={}){return EC(A,I,g)}var FA=8,GC=(A,I,g,B)=>{I=DA(I),JA(A,{name:I,fromWireType:function(C){return!!C},toWireType:function(C,E){return E?g:B},argPackAdvance:FA,readValueFromPointer:function(C){return this.fromWireType(RA[C])},destructorFunction:null})},iC=A=>({count:A.count,deleteScheduled:A.deleteScheduled,preservePointerOnDelete:A.preservePointerOnDelete,ptr:A.ptr,ptrType:A.ptrType,smartPtr:A.smartPtr,smartPtrType:A.smartPtrType}),tI=A=>{function I(g){return g.$$.ptrType.registeredClass.name}n(I(A)+" instance already deleted")},pI=!1,Jg=A=>{},DC=A=>{A.smartPtr?A.smartPtrType.rawDestructor(A.smartPtr):A.ptrType.registeredClass.rawDestructor(A.ptr)},Fg=A=>{A.count.value-=1;var I=A.count.value===0;I&&DC(A)},lg=(A,I,g)=>{if(I===g)return A;if(g.baseClass===void 0)return null;var B=lg(A,I,g.baseClass);return B===null?null:g.downcast(B)},Ug={},YC={},NC=(A,I)=>{for(I===void 0&&n("ptr should not be undefined");A.baseClass;)I=A.upcast(I),A=A.baseClass;return I},hC=(A,I)=>(I=NC(A,I),YC[I]),ZI=(A,I)=>{(!I.ptrType||!I.ptr)&&RI("makeClassHandle requires ptr and ptrType");var g=!!I.smartPtrType,B=!!I.smartPtr;return g!==B&&RI("Both smartPtrType and smartPtr must be specified"),I.count={value:1},AI(Object.create(A,{$$:{value:I,writable:!0}}))};function wC(A){var I=this.getPointee(A);if(!I)return this.destructor(A),null;var g=hC(this.registeredClass,I);if(g!==void 0){if(g.$$.count.value===0)return g.$$.ptr=I,g.$$.smartPtr=A,g.clone();var B=g.clone();return this.destructor(A),B}function C(){return this.isSmartPointer?ZI(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:I,smartPtrType:this,smartPtr:A}):ZI(this.registeredClass.instancePrototype,{ptrType:this,ptr:A})}var E=this.registeredClass.getActualType(I),G=Ug[E];if(!G)return C.call(this);var i;this.isConst?i=G.constPointerType:i=G.pointerType;var Y=lg(I,this.registeredClass,i.registeredClass);return Y===null?C.call(this):this.isSmartPointer?ZI(i.registeredClass.instancePrototype,{ptrType:i,ptr:Y,smartPtrType:this,smartPtr:A}):ZI(i.registeredClass.instancePrototype,{ptrType:i,ptr:Y})}var AI=A=>typeof FinalizationRegistry>"u"?(AI=I=>I,A):(pI=new FinalizationRegistry(I=>{Fg(I.$$)}),AI=I=>{var g=I.$$,B=!!g.smartPtr;if(B){var C={$$:g};pI.register(I,C,I)}return I},Jg=I=>pI.unregister(I),AI(A)),oC=()=>{Object.assign(bI.prototype,{isAliasOf(A){if(!(this instanceof bI)||!(A instanceof bI))return!1;var I=this.$$.ptrType.registeredClass,g=this.$$.ptr;A.$$=A.$$;for(var B=A.$$.ptrType.registeredClass,C=A.$$.ptr;I.baseClass;)g=I.upcast(g),I=I.baseClass;for(;B.baseClass;)C=B.upcast(C),B=B.baseClass;return I===B&&g===C},clone(){if(this.$$.ptr||tI(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var A=AI(Object.create(Object.getPrototypeOf(this),{$$:{value:iC(this.$$)}}));return A.$$.count.value+=1,A.$$.deleteScheduled=!1,A},delete(){this.$$.ptr||tI(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&n("Object already scheduled for deletion"),Jg(this),Fg(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||tI(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&n("Object already scheduled for deletion"),this.$$.deleteScheduled=!0,this}})};function bI(){}var zA=(A,I)=>Object.defineProperty(I,"name",{value:A}),nI=(A,I,g)=>{if(A[I].overloadTable===void 0){var B=A[I];A[I]=function(...C){return A[I].overloadTable.hasOwnProperty(C.length)||n(`Function '${g}' called with an invalid number of arguments (${C.length}) - expects one of (${A[I].overloadTable})!`),A[I].overloadTable[C.length].apply(this,C)},A[I].overloadTable=[],A[I].overloadTable[B.argCount]=B}},zI=(A,I,g)=>{D.hasOwnProperty(A)?((g===void 0||D[A].overloadTable!==void 0&&D[A].overloadTable[g]!==void 0)&&n(`Cannot register public name '${A}' twice`),nI(D,A,A),D[A].overloadTable.hasOwnProperty(g)&&n(`Cannot register multiple overloads of a function with the same number of arguments (${g})!`),D[A].overloadTable[g]=I):(D[A]=I,D[A].argCount=g)},RC=48,ZC=57,bC=A=>{A=A.replace(/[^a-zA-Z0-9_]/g,"$");var I=A.charCodeAt(0);return I>=RC&&I<=ZC?`_${A}`:A};function SC(A,I,g,B,C,E,G,i){this.name=A,this.constructor=I,this.instancePrototype=g,this.rawDestructor=B,this.baseClass=C,this.getActualType=E,this.upcast=G,this.downcast=i,this.pureVirtualFunctions=[]}var SI=(A,I,g)=>{for(;I!==g;)I.upcast||n(`Expected null or instance of ${g.name}, got an instance of ${I.name}`),A=I.upcast(A),I=I.baseClass;return A};function MC(A,I){if(I===null)return this.isReference&&n(`null is not a valid ${this.name}`),0;I.$$||n(`Cannot pass "${OI(I)}" as a ${this.name}`),I.$$.ptr||n(`Cannot pass deleted object as a pointer of type ${this.name}`);var g=I.$$.ptrType.registeredClass,B=SI(I.$$.ptr,g,this.registeredClass);return B}function HC(A,I){var g;if(I===null)return this.isReference&&n(`null is not a valid ${this.name}`),this.isSmartPointer?(g=this.rawConstructor(),A!==null&&A.push(this.rawDestructor,g),g):0;(!I||!I.$$)&&n(`Cannot pass "${OI(I)}" as a ${this.name}`),I.$$.ptr||n(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&I.$$.ptrType.isConst&&n(`Cannot convert argument of type ${I.$$.smartPtrType?I.$$.smartPtrType.name:I.$$.ptrType.name} to parameter type ${this.name}`);var B=I.$$.ptrType.registeredClass;if(g=SI(I.$$.ptr,B,this.registeredClass),this.isSmartPointer)switch(I.$$.smartPtr===void 0&&n("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:I.$$.smartPtrType===this?g=I.$$.smartPtr:n(`Cannot convert argument of type ${I.$$.smartPtrType?I.$$.smartPtrType.name:I.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:g=I.$$.smartPtr;break;case 2:if(I.$$.smartPtrType===this)g=I.$$.smartPtr;else{var C=I.clone();g=this.rawShare(g,iA.toHandle(()=>C.delete())),A!==null&&A.push(this.rawDestructor,g)}break;default:n("Unsupporting sharing policy")}return g}function JC(A,I){if(I===null)return this.isReference&&n(`null is not a valid ${this.name}`),0;I.$$||n(`Cannot pass "${OI(I)}" as a ${this.name}`),I.$$.ptr||n(`Cannot pass deleted object as a pointer of type ${this.name}`),I.$$.ptrType.isConst&&n(`Cannot convert argument of type ${I.$$.ptrType.name} to parameter type ${this.name}`);var g=I.$$.ptrType.registeredClass,B=SI(I.$$.ptr,g,this.registeredClass);return B}var FC=()=>{Object.assign(II.prototype,{getPointee(A){return this.rawGetPointee&&(A=this.rawGetPointee(A)),A},destructor(A){this.rawDestructor?.(A)},argPackAdvance:FA,readValueFromPointer:$A,fromWireType:wC})};function II(A,I,g,B,C,E,G,i,Y,h,w){this.name=A,this.registeredClass=I,this.isReference=g,this.isConst=B,this.isSmartPointer=C,this.pointeeType=E,this.sharingPolicy=G,this.rawGetPointee=i,this.rawConstructor=Y,this.rawShare=h,this.rawDestructor=w,!C&&I.baseClass===void 0?B?(this.toWireType=MC,this.destructorFunction=null):(this.toWireType=JC,this.destructorFunction=null):this.toWireType=HC}var kg=(A,I,g)=>{D.hasOwnProperty(A)||RI("Replacing nonexistent public symbol"),D[A].overloadTable!==void 0&&g!==void 0?D[A].overloadTable[g]=I:(D[A]=I,D[A].argCount=g)},lC=(A,I,g)=>{A=A.replace(/p/g,"i");var B=D["dynCall_"+A];return B(I,...g)},ag,P=A=>ag.get(A),UC=(A,I,g=[])=>{if(A.includes("j"))return lC(A,I,g);var B=P(I)(...g);return B},kC=(A,I)=>(...g)=>UC(A,I,g),YA=(A,I)=>{A=DA(A);function g(){return A.includes("j")?kC(A,I):P(I)}var B=g();return typeof B!="function"&&n(`unknown function pointer with signature ${A}: ${I}`),B},aC=(A,I)=>{var g=zA(I,function(B){this.name=I,this.message=B;var C=new Error(B).stack;C!==void 0&&(this.stack=this.toString()+`
|
|
3
3
|
`+C.replace(/^Error(:[^\n]*)?\n/,""))});return g.prototype=Object.create(A.prototype),g.prototype.constructor=g,g.prototype.toString=function(){return this.message===void 0?this.name:`${this.name}: ${this.message}`},g},cg,Wg=A=>{var I=jg(A),g=DA(I);return dA(I),g},WA=(A,I)=>{var g=[],B={};function C(E){if(!B[E]&&!TA[E]){if(oI[E]){oI[E].forEach(C);return}g.push(E),B[E]=!0}}throw I.forEach(C),new cg(`${A}: `+g.map(Wg).join([", "]))},cC=(A,I,g,B,C,E,G,i,Y,h,w,Z,b)=>{w=DA(w),E=YA(C,E),i&&=YA(G,i),h&&=YA(Y,h),b=YA(Z,b);var S=bC(w);zI(S,function(){WA(`Cannot construct ${w} due to unbound types`,[B])}),bA([A,I,g],B?[B]:[],o=>{o=o[0];var s,j;B?(s=o.registeredClass,j=s.instancePrototype):j=bI.prototype;var m=zA(w,function(...l){if(Object.getPrototypeOf(this)!==V)throw new nA("Use 'new' to construct "+w);if(q.constructor_body===void 0)throw new nA(w+" has no accessible constructor");var k=q.constructor_body[l.length];if(k===void 0)throw new nA(`Tried to invoke ctor of ${w} with invalid number of parameters (${l.length}) - expected (${Object.keys(q.constructor_body).toString()}) parameters instead!`);return k.apply(this,l)}),V=Object.create(j,{constructor:{value:m}});m.prototype=V;var q=new SC(w,m,V,b,s,E,i,h);q.baseClass&&(q.baseClass.__derivedClasses??=[],q.baseClass.__derivedClasses.push(q));var CA=new II(w,q,!0,!1,!1),$=new II(w+"*",q,!1,!1,!1),hA=new II(w+" const*",q,!1,!0,!1);return Ug[A]={pointerType:$,constPointerType:hA},kg(S,m),[CA,$,hA]})};function yg(A){for(var I=1;I<A.length;++I)if(A[I]!==null&&A[I].destructorFunction===void 0)return!0;return!1}function dg(A,I){if(!(A instanceof Function))throw new TypeError(`new_ called with constructor type ${typeof A} which is not a function`);var g=zA(A.name||"unknownFunctionName",function(){});g.prototype=A.prototype;var B=new g,C=A.apply(B,I);return C instanceof Object?C:B}function WC(A,I,g,B){var C=yg(A),E=A.length-2,G=[],i=["fn"];I&&i.push("thisWired");for(var Y=0;Y<E;++Y)G.push(`arg${Y}`),i.push(`arg${Y}Wired`);G=G.join(","),i=i.join(",");var h=`return function (${G}) {
|
|
4
4
|
`;C&&(h+=`var destructors = [];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Texture as KI, WebGLRenderTarget as _E, RepeatWrapping as Gg, LinearFilter as SB, LinearMipMapLinearFilter as MB, FloatType as $E, RGBAFormat as AG, PlaneGeometry as HB, OrthographicCamera as IG, ShaderMaterial as JB, Scene as gG, Mesh as ig, EquirectangularReflectionMapping as BG, Vector3 as eA, Quaternion as CG, Color as QG, Uniform$1 as EG, LinearSRGBColorSpace as GG, Cache as KA, MirroredRepeatWrapping as iG, ClampToEdgeWrapping as DG, NearestMipMapNearestFilter as YG, NearestFilter as NG, MeshBasicMaterial as hG, PMREMGenerator$1 as wG, cloneUniforms as oG, cloneUniformsGroups as RG, GLSL3 as ZG, Matrix4 as cI, UniformsLib as bG, Matrix3 as SG, MeshStandardMaterial as yI, DoubleSide as MG, FrontSide as HG } from "./three
|
|
2
|
-
import "./three-examples
|
|
1
|
+
import { Texture as KI, WebGLRenderTarget as _E, RepeatWrapping as Gg, LinearFilter as SB, LinearMipMapLinearFilter as MB, FloatType as $E, RGBAFormat as AG, PlaneGeometry as HB, OrthographicCamera as IG, ShaderMaterial as JB, Scene as gG, Mesh as ig, EquirectangularReflectionMapping as BG, Vector3 as eA, Quaternion as CG, Color as QG, Uniform$1 as EG, LinearSRGBColorSpace as GG, Cache as KA, MirroredRepeatWrapping as iG, ClampToEdgeWrapping as DG, NearestMipMapNearestFilter as YG, NearestFilter as NG, MeshBasicMaterial as hG, PMREMGenerator$1 as wG, cloneUniforms as oG, cloneUniformsGroups as RG, GLSL3 as ZG, Matrix4 as cI, UniformsLib as bG, Matrix3 as SG, MeshStandardMaterial as yI, DoubleSide as MG, FrontSide as HG } from "./three.js";
|
|
2
|
+
import "./three-examples.js";
|
|
3
3
|
var dI = (function() {
|
|
4
4
|
var J = typeof document < "u" ? document.currentScript?.src : void 0;
|
|
5
5
|
return typeof __filename < "u" && (J = J || __filename), (function(N) {
|