@realsee/five-webgpu 1.0.0-alpha.13 → 1.0.0-alpha.15
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/_virtual/_rolldown/runtime.js +3 -3
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/index.AdaptiveLuminancePass.html +1 -1
- package/docs/classes/index.BoundingMesh.html +1 -1
- package/docs/classes/index.Camera.html +1 -1
- package/docs/classes/index.EyeDomeLightingPass.html +1 -1
- package/docs/classes/index.Five.html +65 -64
- package/docs/classes/index.FivePass.html +1 -1
- package/docs/classes/index.FiveRenderer.html +4 -4
- package/docs/classes/index.FlowingFireworks3DPass.html +1 -1
- package/docs/classes/index.FlowingLight2DPass.html +1 -1
- package/docs/classes/index.FlowingLight3DPass.html +1 -1
- package/docs/classes/index.GaussianBlurPass.html +1 -1
- package/docs/classes/index.InternalWebGPURenderer.html +4 -4
- package/docs/classes/index.Model.html +1 -1
- package/docs/classes/index.ModelScene.html +1 -1
- package/docs/classes/index.NetworkSubscribe.html +1 -1
- package/docs/classes/index.PBMCustomNode.html +1 -1
- package/docs/classes/index.PBMGaussianSplattingNodeMaterial.html +1 -1
- package/docs/classes/index.PBMGaussianSplattingObject.html +1 -1
- package/docs/classes/index.PBMGaussianSplattingRenderMesh.html +1 -1
- package/docs/classes/index.PBMGroup.html +1 -1
- package/docs/classes/index.PBMMesh.html +1 -1
- package/docs/classes/index.PBMMeshBasicMaterial.html +1 -1
- package/docs/classes/index.PBMMeshBasicNodeMaterial.html +1 -1
- package/docs/classes/index.PBMMeshPanoOnlyMaterial.html +1 -1
- package/docs/classes/index.PBMMeshPanoOnlyNodeMaterial.html +1 -1
- package/docs/classes/index.PBMMeshPhongMaterial.html +1 -1
- package/docs/classes/index.PBMMeshPhongNodeMaterial.html +1 -1
- package/docs/classes/index.PBMMeshPhysicalMaterial.html +1 -1
- package/docs/classes/index.PBMMeshPhysicalNodeMaterial.html +1 -1
- package/docs/classes/index.PBMPanoFilter.html +1 -1
- package/docs/classes/index.PBMPointCloud.html +1 -1
- package/docs/classes/index.PBMPointCloudMaterial.html +1 -1
- package/docs/classes/index.PBMSkinnedMesh.html +1 -1
- package/docs/classes/index.PBMUpdateable.html +1 -1
- package/docs/classes/index.PanoCircleMesh.html +9 -5
- package/docs/classes/index.PanoCircleMeshCustom.html +9 -5
- package/docs/classes/index.PanoCircleMeshSolid.html +9 -5
- package/docs/classes/index.Parameter.html +1 -1
- package/docs/classes/index.Scene.html +1 -1
- package/docs/classes/index.Subscribe.html +1 -1
- package/docs/classes/index.Tile3D.html +1 -1
- package/docs/classes/index.TileNode.html +1 -1
- package/docs/classes/index.TrajectoryNode.html +1 -1
- package/docs/classes/index.Work.html +15 -22
- package/docs/classes/index.WorkResolvedObserver.html +22 -22
- package/docs/functions/index.createWorks.html +1 -1
- package/docs/functions/index.parseWork.html +1 -1
- package/docs/hierarchy.html +1 -1
- package/docs/interfaces/index.AddableObject.html +1 -1
- package/docs/interfaces/index.AjaxOptions.html +1 -1
- package/docs/interfaces/index.BaseEvent.html +1 -1
- package/docs/interfaces/index.Clock.html +1 -1
- package/docs/interfaces/index.EventCallback.html +3 -3
- package/docs/interfaces/index.GestureEvent.html +1 -1
- package/docs/interfaces/index.IPBMMaterial.html +1 -1
- package/docs/interfaces/index.ImageOptions.html +1 -1
- package/docs/interfaces/index.IntersectEvent.html +1 -1
- package/docs/interfaces/index.IntersectMesh.html +1 -1
- package/docs/interfaces/index.IntersectMeshInterface.html +1 -1
- package/docs/interfaces/index.Intersection.html +1 -1
- package/docs/interfaces/index.LooseWorkObserver.html +2 -2
- package/docs/interfaces/index.LooseWorkPanorama.html +2 -2
- package/docs/interfaces/index.LooseWorkWithExtrinsics.html +8 -8
- package/docs/interfaces/index.ModeChangeEvent.html +1 -1
- package/docs/interfaces/index.ModelControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/index.ModelEvent.html +1 -1
- package/docs/interfaces/index.ModelSceneEvent.html +1 -1
- package/docs/interfaces/index.ModelTileEvent.html +1 -1
- package/docs/interfaces/index.MovePanoOptions.html +1 -1
- package/docs/interfaces/index.NetworkAbortError.html +1 -1
- package/docs/interfaces/index.NetworkFirbiddenError.html +1 -1
- package/docs/interfaces/index.NetworkOptions.html +1 -1
- package/docs/interfaces/index.NetworkProxyError.html +1 -1
- package/docs/interfaces/index.NetworkResourceEvent.html +1 -1
- package/docs/interfaces/index.NetworkResponseError.html +1 -1
- package/docs/interfaces/index.NetworkTimeoutError.html +1 -1
- package/docs/interfaces/index.ObjectEvent.html +1 -1
- package/docs/interfaces/index.PanoCircleMeshInterface.html +8 -4
- package/docs/interfaces/index.PanoCircleMeshOptions.html +2 -2
- package/docs/interfaces/index.PanoCircleMeshSolidOptions.html +2 -2
- package/docs/interfaces/index.PanoEvent.html +1 -1
- package/docs/interfaces/index.PanoPrepareEvent.html +1 -1
- package/docs/interfaces/index.PanoTextureEvent.html +1 -1
- package/docs/interfaces/index.PanoramaControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/index.PanoramaLikeControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/index.ParameterMaterialValue.html +1 -1
- package/docs/interfaces/index.ParameterTilesetValue.html +1 -1
- package/docs/interfaces/index.ParameterValue.html +1 -1
- package/docs/interfaces/index.Pose.html +1 -1
- package/docs/interfaces/index.RenderEvent.html +1 -1
- package/docs/interfaces/index.ResolvedParameterValue.html +1 -1
- package/docs/interfaces/index.State.html +1 -1
- package/docs/interfaces/index.StateEvent.html +1 -1
- package/docs/interfaces/index.TextureOptions.html +1 -1
- package/docs/interfaces/index.TopviewControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/index.VRPanoramaControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/index.ViewLayer.html +1 -1
- package/docs/interfaces/index.WorkCubeHdrGainmapImage.html +2 -2
- package/docs/interfaces/index.WorkCubeImage.html +2 -2
- package/docs/interfaces/index.WorkImage.html +5 -5
- package/docs/interfaces/index.WorkInitial.html +8 -8
- package/docs/interfaces/index.WorkInitialJson.html +2 -2
- package/docs/interfaces/index.WorkJson.html +2 -4
- package/docs/interfaces/index.WorkModel.html +8 -8
- package/docs/interfaces/index.WorkModelJson.html +2 -2
- package/docs/interfaces/index.WorkModelLayer.html +6 -6
- package/docs/interfaces/index.WorkModelLayerJson.html +2 -2
- package/docs/interfaces/index.WorkObserver.html +23 -23
- package/docs/interfaces/index.WorkObserverJson.html +2 -2
- package/docs/interfaces/index.WorkPanoramaJson.html +2 -2
- package/docs/interfaces/index.WorkPanoramasJson.html +2 -2
- package/docs/interfaces/index.WorkTile.html +5 -5
- package/docs/interfaces/index.WorkVideo.html +4 -4
- package/docs/interfaces/index.WorksEvent.html +1 -1
- package/docs/interfaces/index.XRControllerEvent.html +1 -1
- package/docs/interfaces/index.XRGestureEvent.html +2 -2
- package/docs/interfaces/index.XRPanoramaControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/index.XRSessionEvent.html +1 -1
- package/docs/modules/index.html +1 -1
- package/docs/types/index.LegacyEventType.html +3 -3
- package/docs/types/index.OutputTextureDataType.html +1 -1
- package/docs/types/index.ParseOptions.html +8 -8
- package/docs/types/index.PointCloudTransparencyMode.html +2 -0
- package/docs/types/index.Works.html +1 -1
- package/docs/variables/index.loadAt3d.html +2 -0
- package/docs/variables/index.loadDome.html +2 -0
- package/docs/variables/index.loadDomez.html +2 -0
- package/docs/variables/index.loadGltf.html +2 -0
- package/docs/variables/index.loadPbm.html +2 -0
- package/docs/variables/index.loadPly.html +2 -0
- package/five/application/five.d.ts +3 -2
- package/five/chunks/at3d.js +338 -0
- package/five/chunks/at3d.mjs +338 -0
- package/five/chunks/dome.js +338 -0
- package/five/chunks/dome.mjs +338 -0
- package/five/chunks/domez.js +338 -0
- package/five/chunks/domez.mjs +338 -0
- package/five/chunks/fbx.js +338 -0
- package/five/chunks/fbx.mjs +338 -0
- package/five/chunks/fflate.js +338 -0
- package/five/chunks/fflate.mjs +338 -0
- package/five/chunks/glTF-helpers.js +804 -0
- package/five/chunks/glTF-helpers.mjs +804 -0
- package/five/chunks/gltf.js +338 -0
- package/five/chunks/gltf.mjs +338 -0
- package/five/chunks/imageBitmap.js +338 -0
- package/five/chunks/imageBitmap.mjs +338 -0
- package/five/chunks/imageSupport.js +338 -0
- package/five/chunks/imageSupport.mjs +338 -0
- package/five/chunks/lzma.js +383 -0
- package/five/chunks/lzma.mjs +383 -0
- package/five/chunks/memoryUsage.js +339 -0
- package/five/chunks/memoryUsage.mjs +339 -0
- package/five/chunks/minimal.js +338 -0
- package/five/chunks/minimal.mjs +338 -0
- package/five/chunks/pbm.js +338 -0
- package/five/chunks/pbm.mjs +338 -0
- package/five/chunks/pbmGaussianSplattingObject.js +338 -0
- package/five/chunks/pbmGaussianSplattingObject.mjs +338 -0
- package/five/chunks/pbmMeshMaterial.js +338 -0
- package/five/chunks/pbmMeshMaterial.mjs +338 -0
- package/five/chunks/pick.js +338 -0
- package/five/chunks/pick.mjs +338 -0
- package/five/chunks/ply.js +339 -0
- package/five/chunks/ply.mjs +339 -0
- package/five/chunks/spz.js +364 -0
- package/five/chunks/spz.mjs +364 -0
- package/five/controllers/panorama.d.ts +6 -0
- package/five/core/webglBlendEquationFix.d.ts +41 -0
- package/five/index.d.ts +0 -1
- package/five/index.js +49 -626
- package/five/index.mjs +229 -32052
- package/five/meshes/panoCircleMesh.d.ts +1 -0
- package/five/meshes/panoCircleMeshCustom.d.ts +1 -0
- package/five/meshes/panoCircleMeshSolid.d.ts +1 -0
- package/five/meshes/panoSphereMesh.d.ts +1 -0
- package/five/model/index.d.ts +18 -6
- package/five/model/loaders/glTF-helpers/extensions/KHR_gaussian_splatting_compression_spz.d.ts +1 -1
- package/five/model/loaders/glTF-helpers/extensions/KHR_gaussian_splatting_compression_spz_2.d.ts +1 -1
- package/five/model/loaders/spz.d.ts +1 -2
- package/five/model/loaders/spz.worker.d.ts +37 -0
- package/five/renderer/five-renderer.d.ts +1 -1
- package/five/renderer/index.d.ts +1 -1
- package/five/renderer/postprocessing/passes/pass.js +3 -3
- package/five/renderer/postprocessing/passes/pass.mjs +3 -3
- package/five/renderer/tools/full-screen-quad.js +3 -3
- package/five/renderer/tools/full-screen-quad.mjs +3 -3
- package/five/texture/initTexture.d.ts +8 -0
- package/five/texture/videoTextureBridge.d.ts +124 -15
- package/five/thirdparty/sha256.d.ts +149 -0
- package/five/types/panoCircleMeshInterface.d.ts +6 -0
- package/five/utils/calculateThreeMouse.js +3 -3
- package/five/utils/calculateThreeMouse.mjs +3 -3
- package/five/utils/distance.js +3 -3
- package/five/utils/distance.mjs +3 -3
- package/five/utils/isNil.js +3 -3
- package/five/utils/isNil.mjs +3 -3
- package/five/utils/memoryUsage.d.ts +1 -1
- package/five/utils/uuid.js +3 -3
- package/five/utils/uuid.mjs +3 -3
- package/five/work/looseWorkType.d.ts +2 -2
- package/five/work/work.d.ts +1 -8
- package/five/work/workJsonType.d.ts +2 -4
- package/gltf-loader/index.js +3 -3
- package/gltf-loader/index.mjs +3 -50
- package/line/index.js +3 -3
- package/line/index.mjs +3 -88
- package/package.json +1 -1
- package/plugins/BackgroundPlugin/Controller.js +4 -4
- package/plugins/BackgroundPlugin/Controller.mjs +4 -4
- package/plugins/BackgroundPlugin/index.js +3 -3
- package/plugins/BackgroundPlugin/index.mjs +3 -3
- package/plugins/BasePlugin/index.js +3 -3
- package/plugins/BasePlugin/index.mjs +3 -3
- package/plugins/CSS2DPlugin/Controller.js +3 -3
- package/plugins/CSS2DPlugin/Controller.mjs +3 -3
- package/plugins/CSS2DPlugin/index.js +3 -3
- package/plugins/CSS2DPlugin/index.mjs +3 -3
- package/plugins/CSS2DPlugin/style.css_raw.js +4 -4
- package/plugins/CSS2DPlugin/style.css_raw.mjs +4 -4
- package/plugins/CSS3DPlugin/Controller.js +3 -3
- package/plugins/CSS3DPlugin/Controller.mjs +3 -3
- package/plugins/CSS3DPlugin/index.js +3 -3
- package/plugins/CSS3DPlugin/index.mjs +3 -3
- package/plugins/CSS3DPlugin/style.css_raw.js +4 -4
- package/plugins/CSS3DPlugin/style.css_raw.mjs +4 -4
- package/plugins/FloorplanPlugin/Controller.js +3 -3
- package/plugins/FloorplanPlugin/Controller.mjs +3 -3
- package/plugins/FloorplanPlugin/index.js +3 -3
- package/plugins/FloorplanPlugin/index.mjs +3 -3
- package/plugins/FloorplanPlugin/render/assets.js +3 -3
- package/plugins/FloorplanPlugin/render/assets.mjs +3 -3
- package/plugins/FloorplanPlugin/render/index.js +3 -3
- package/plugins/FloorplanPlugin/render/index.mjs +3 -3
- package/plugins/FloorplanPlugin/render/isPointInPolygon.js +3 -3
- package/plugins/FloorplanPlugin/render/isPointInPolygon.mjs +3 -3
- package/plugins/FloorplanPlugin/render/renderFloor.js +3 -3
- package/plugins/FloorplanPlugin/render/renderFloor.mjs +3 -3
- package/plugins/FloorplanPlugin/render/roomLabelVisibility.js +3 -3
- package/plugins/FloorplanPlugin/render/roomLabelVisibility.mjs +3 -3
- package/plugins/FloorplanPlugin/render/style.css_raw.js +4 -4
- package/plugins/FloorplanPlugin/render/style.css_raw.mjs +4 -4
- package/plugins/FloorplanPlugin/utils/changeMode.js +3 -3
- package/plugins/FloorplanPlugin/utils/changeMode.mjs +3 -3
- package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.js +3 -3
- package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.mjs +3 -3
- package/plugins/FloorplanPlugin/utils/correctFiveState.js +3 -3
- package/plugins/FloorplanPlugin/utils/correctFiveState.mjs +3 -3
- package/plugins/FloorplanPlugin/utils/equal.js +3 -3
- package/plugins/FloorplanPlugin/utils/equal.mjs +3 -3
- package/plugins/FloorplanPlugin/utils/filter.js +3 -3
- package/plugins/FloorplanPlugin/utils/filter.mjs +3 -3
- package/plugins/FloorplanPlugin/utils/fiveModelLoad.js +3 -3
- package/plugins/FloorplanPlugin/utils/fiveModelLoad.mjs +3 -3
- package/plugins/FloorplanPlugin/utils/formatData.js +3 -3
- package/plugins/FloorplanPlugin/utils/formatData.mjs +3 -3
- package/plugins/FloorplanPlugin/utils/formatFloorplanJson.js +3 -3
- package/plugins/FloorplanPlugin/utils/formatFloorplanJson.mjs +3 -3
- package/plugins/FloorplanPlugin/utils/formatPosition.js +3 -3
- package/plugins/FloorplanPlugin/utils/formatPosition.mjs +3 -3
- package/plugins/FloorplanPlugin/utils/getDistanceFromModel.js +3 -3
- package/plugins/FloorplanPlugin/utils/getDistanceFromModel.mjs +3 -3
- package/plugins/FloorplanPlugin/utils/getPxmm.js +3 -3
- package/plugins/FloorplanPlugin/utils/getPxmm.mjs +3 -3
- package/plugins/FloorplanPlugin/utils/isTruelyObject.js +3 -3
- package/plugins/FloorplanPlugin/utils/isTruelyObject.mjs +3 -3
- package/plugins/FloorplanPlugin/utils/nearlyEqual.js +3 -3
- package/plugins/FloorplanPlugin/utils/nearlyEqual.mjs +3 -3
- package/plugins/FloorplanPlugin/utils/polylabel.js +3 -3
- package/plugins/FloorplanPlugin/utils/polylabel.mjs +3 -3
- package/plugins/FloorplanPlugin/utils/to.js +3 -3
- package/plugins/FloorplanPlugin/utils/to.mjs +3 -3
- package/plugins/GaussianSplattingEntranceAnimationPlugin/Controller.js +3 -3
- package/plugins/GaussianSplattingEntranceAnimationPlugin/Controller.mjs +3 -3
- package/plugins/GaussianSplattingEntranceAnimationPlugin/index.js +3 -3
- package/plugins/GaussianSplattingEntranceAnimationPlugin/index.mjs +3 -3
- package/plugins/Object3DHelperPlugin/Controller.js +3 -3
- package/plugins/Object3DHelperPlugin/Controller.mjs +3 -3
- package/plugins/Object3DHelperPlugin/Controllers/BaseController.js +3 -3
- package/plugins/Object3DHelperPlugin/Controllers/BaseController.mjs +3 -3
- package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.js +3 -3
- package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.mjs +3 -3
- package/plugins/Object3DHelperPlugin/Controllers/MoveController.js +3 -3
- package/plugins/Object3DHelperPlugin/Controllers/MoveController.mjs +3 -3
- package/plugins/Object3DHelperPlugin/Controllers/RotateController.js +3 -3
- package/plugins/Object3DHelperPlugin/Controllers/RotateController.mjs +3 -3
- package/plugins/Object3DHelperPlugin/FiveControllerWrapper.js +3 -3
- package/plugins/Object3DHelperPlugin/FiveControllerWrapper.mjs +3 -3
- package/plugins/Object3DHelperPlugin/Helper/BaseHelper.js +3 -3
- package/plugins/Object3DHelperPlugin/Helper/BaseHelper.mjs +3 -3
- package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.js +3 -3
- package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.mjs +3 -3
- package/plugins/Object3DHelperPlugin/Helper/MoveHelper.js +3 -3
- package/plugins/Object3DHelperPlugin/Helper/MoveHelper.mjs +3 -3
- package/plugins/Object3DHelperPlugin/Helper/RotateHelper.js +3 -3
- package/plugins/Object3DHelperPlugin/Helper/RotateHelper.mjs +3 -3
- package/plugins/Object3DHelperPlugin/constant.js +3 -3
- package/plugins/Object3DHelperPlugin/constant.mjs +3 -3
- package/plugins/Object3DHelperPlugin/index.js +3 -3
- package/plugins/Object3DHelperPlugin/index.mjs +3 -3
- package/plugins/Object3DHelperPlugin/utils/ArrowGroup.js +3 -3
- package/plugins/Object3DHelperPlugin/utils/ArrowGroup.mjs +3 -3
- package/plugins/Object3DHelperPlugin/utils/CenterHandle.js +3 -3
- package/plugins/Object3DHelperPlugin/utils/CenterHandle.mjs +3 -3
- package/plugins/Object3DHelperPlugin/utils/PlaneHandle.js +3 -3
- package/plugins/Object3DHelperPlugin/utils/PlaneHandle.mjs +3 -3
- package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.js +3 -3
- package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.mjs +3 -3
- package/plugins/Object3DHelperPlugin/utils/cameraHooks.js +3 -3
- package/plugins/Object3DHelperPlugin/utils/cameraHooks.mjs +3 -3
- package/plugins/Object3DHelperPlugin/utils/direction.js +3 -3
- package/plugins/Object3DHelperPlugin/utils/direction.mjs +3 -3
- package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.js +3 -3
- package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.mjs +3 -3
- package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.js +3 -3
- package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.mjs +3 -3
- package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.js +3 -3
- package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.mjs +3 -3
- package/plugins/Object3DHelperPlugin/utils/solidGuide.js +3 -3
- package/plugins/Object3DHelperPlugin/utils/solidGuide.mjs +3 -3
- package/plugins/Object3DHelperPlugin/utils/tipsDom.js +3 -3
- package/plugins/Object3DHelperPlugin/utils/tipsDom.mjs +3 -3
- package/plugins/PanoAnimePlugin/Controller.js +3 -3
- package/plugins/PanoAnimePlugin/Controller.mjs +3 -3
- package/plugins/PanoAnimePlugin/index.js +3 -3
- package/plugins/PanoAnimePlugin/index.mjs +3 -3
- package/plugins/WordPassPlugin/Controller.js +3 -3
- package/plugins/WordPassPlugin/Controller.mjs +3 -3
- package/plugins/WordPassPlugin/hersheyFont.js +3 -3
- package/plugins/WordPassPlugin/hersheyFont.mjs +3 -3
- package/plugins/WordPassPlugin/index.js +3 -3
- package/plugins/WordPassPlugin/index.mjs +3 -3
- package/plugins/WordPassPlugin/textToStrokeOrderStrokes.js +4 -4
- package/plugins/WordPassPlugin/textToStrokeOrderStrokes.mjs +4 -4
- package/plugins/WordPassPlugin/word-pass.js +3 -3
- package/plugins/WordPassPlugin/word-pass.mjs +3 -3
- package/plugins/index.js +3 -3
- package/plugins/index.mjs +3 -3
- package/plugins/thirdParty/CSS2DRenderer.js +3 -3
- package/plugins/thirdParty/CSS2DRenderer.mjs +3 -3
- package/plugins/thirdParty/CSS3DRenderer.js +3 -3
- package/plugins/thirdParty/CSS3DRenderer.mjs +3 -3
- package/plugins/thirdParty/doctorstrange-model.js +75 -75
- package/plugins/thirdParty/doctorstrange-model.mjs +75 -75
- package/plugins/thirdParty/domevents.js +3 -3
- package/plugins/thirdParty/domevents.mjs +3 -3
- package/plugins/utils/absoluteUrl.js +3 -3
- package/plugins/utils/absoluteUrl.mjs +3 -3
- package/plugins/utils/calculatePath.js +3 -3
- package/plugins/utils/calculatePath.mjs +3 -3
- package/plugins/utils/clamp.js +3 -3
- package/plugins/utils/clamp.mjs +3 -3
- package/plugins/utils/uuid.js +3 -3
- package/plugins/utils/uuid.mjs +3 -3
- package/react/hooks/useFiveModelReadyState.d.ts +1 -1
- package/react/index.js +3 -3
- package/react/index.mjs +3 -644
- package/sticker/index.js +13 -4
- package/sticker/index.mjs +43 -260
- package/umd/five-gltf-loader.js +3 -3
- package/umd/five-line.js +3 -3
- package/umd/five-plugins.js +4 -4
- package/umd/five-react.js +2 -2
- package/umd/five-sticker.js +13 -4
- package/umd/five-vfx.js +2 -2
- package/umd/five.js +152 -190
- package/vfx/index.js +3 -3
- package/vfx/index.mjs +3 -486
- package/work-downloader/index.js +3 -3
- package/work-downloader/index.mjs +3 -315
- package/docs/functions/index.loadAt3d.html +0 -1
- package/docs/functions/index.loadDome.html +0 -1
- package/docs/functions/index.loadDomez.html +0 -1
- package/docs/functions/index.loadGltf.html +0 -1
- package/docs/functions/index.loadPbm.html +0 -1
- package/docs/functions/index.loadPly.html +0 -10
- package/five/certificates/hardware.d.ts +0 -1
- package/five/thirdparty/jsrsasign.d.ts +0 -753
- package/five/work/_ALLOW_HOST.d.ts +0 -2
- package/five/work/keychain.d.ts +0 -5
- package/five/work/verify.d.ts +0 -7
- package/five/work/workVerify.d.ts +0 -2
package/sticker/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license
|
|
3
3
|
* @realsee/five-webgpu
|
|
4
|
-
* Generated: 2026/
|
|
5
|
-
* Version: 1.0.0-alpha.
|
|
4
|
+
* Generated: 2026/11/4
|
|
5
|
+
* Version: 1.0.0-alpha.15
|
|
6
6
|
* License:
|
|
7
7
|
* Realsee SDK License Agreement
|
|
8
8
|
|
|
@@ -335,7 +335,7 @@
|
|
|
335
335
|
* writing and signed by Realsee. You and Realsee hereto confirm that this
|
|
336
336
|
* Agreement and all related documents shall be drafted in English.
|
|
337
337
|
|
|
338
|
-
*/Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var
|
|
338
|
+
*/Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var __create=Object.create,__defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty,__copyProps=(to,from,except,desc)=>{if(from&&typeof from==`object`||typeof from==`function`)for(var keys=__getOwnPropNames(from),i=0,n=keys.length,key;i<n;i++)key=keys[i],!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:(k=>from[k]).bind(null,key),enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toESM=(mod,isNodeMode,target)=>(target=mod==null?{}:__create(__getProtoOf(mod)),__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,`default`,{value:mod,enumerable:!0}):target,mod));let three_webgpu=require("three/webgpu");three_webgpu=__toESM(three_webgpu,1);let tslib=require("tslib");var vertices=new Float32Array([-.5,-.5,0,.5,-.5,0,-.5,.5,0,.5,.5,0]),uvs=new Float32Array([0,0,1,0,0,1,1,1]),index=new Uint8Array([0,1,2,1,3,2]),geometry=new three_webgpu.BufferGeometry;geometry.setAttribute(`position`,new three_webgpu.BufferAttribute(vertices,3)),geometry.setAttribute(`uv`,new three_webgpu.BufferAttribute(uvs,2)),geometry.setIndex(new three_webgpu.BufferAttribute(index,1));var CANDIDATE_ORDER=[`videoFrame`,`video`,`canvasFromVideoFrame`,`canvasFromVideo`],CANDIDATE_SHORT={videoFrame:`vf`,video:`video`,canvasFromVideoFrame:`cvf`,canvasFromVideo:`cv`},BRIGHT_THRESHOLD=6,MAX_CONSECUTIVE_FAILS=10,MIN_FAIL_DURATION_MS=3e3,BLACKLIST_TTL_MS=15e3,MAX_CANVAS_SIZE=4096,INTERMEDIATE_FORMAT=`rgba8unorm-srgb`,BLIT_SHADER=`
|
|
339
339
|
struct VSOut {
|
|
340
340
|
@builtin(position) position: vec4f,
|
|
341
341
|
@location(0) uv: vec2f,
|
|
@@ -369,4 +369,13 @@ fn fs(in: VSOut) -> @location(0) vec4f {
|
|
|
369
369
|
let color = textureSampleBaseClampToEdge(source, sourceSampler, in.uv);
|
|
370
370
|
return vec4f(srgbToLinear(color.rgb), 1.0);
|
|
371
371
|
}
|
|
372
|
-
`,
|
|
372
|
+
`,pipelineCache=new WeakMap;function getBlitPipeline(device){let cached=pipelineCache.get(device);if(!cached){let module=device.createShaderModule({label:`five.videoBlit`,code:BLIT_SHADER}),bindGroupLayout=device.createBindGroupLayout({label:`five.videoBlit`,entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,externalTexture:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}}]});cached={pipeline:device.createRenderPipeline({label:`five.videoBlit`,layout:device.createPipelineLayout({bindGroupLayouts:[bindGroupLayout]}),vertex:{module,entryPoint:`vs`},fragment:{module,entryPoint:`fs`,targets:[{format:INTERMEDIATE_FORMAT}]},primitive:{topology:`triangle-list`}}),bindGroupLayout,sampler:device.createSampler({magFilter:`linear`,minFilter:`linear`})},pipelineCache.set(device,cached)}return cached}var sharedPlaceholder=null;function getPlaceholder(){return sharedPlaceholder||(sharedPlaceholder=new three_webgpu.DataTexture(new Uint8Array([0,0,0,255]),1,1,three_webgpu.RGBAFormat),sharedPlaceholder.colorSpace=three_webgpu.SRGBColorSpace,sharedPlaceholder.magFilter=three_webgpu.LinearFilter,sharedPlaceholder.minFilter=three_webgpu.LinearFilter,sharedPlaceholder.needsUpdate=!0),sharedPlaceholder}function hasVideoFrame(){return typeof globalThis.VideoFrame==`function`}function createVideoFrame(video){let VideoFrameCtor=globalThis.VideoFrame;return new VideoFrameCtor(video)}function isAvailable(candidate){return candidate===`videoFrame`||candidate===`canvasFromVideoFrame`?hasVideoFrame():!0}function maxChannel(data){let max=0;for(let i=0;i<data.length;i+=4)data[i]>max&&(max=data[i]),data[i+1]>max&&(max=data[i+1]),data[i+2]>max&&(max=data[i+2]);return max}var GL_PROBE_SIZE=16;function createGLProbe(){try{let canvas=document.createElement(`canvas`);canvas.width=canvas.height=GL_PROBE_SIZE;let gl=canvas.getContext(`webgl2`,{antialias:!1,depth:!1,stencil:!1,preserveDrawingBuffer:!0});if(!gl)return null;let compile=(type,source)=>{var _a;let shader=gl.createShader(type);if(gl.shaderSource(shader,source),gl.compileShader(shader),!gl.getShaderParameter(shader,gl.COMPILE_STATUS))throw Error((_a=gl.getShaderInfoLog(shader))==null?`compile`:_a);return shader},program=gl.createProgram();if(gl.attachShader(program,compile(gl.VERTEX_SHADER,`#version 300 es
|
|
373
|
+
out vec2 uv;
|
|
374
|
+
void main() {
|
|
375
|
+
vec2 p = vec2(float((gl_VertexID << 1) & 2), float(gl_VertexID & 2));
|
|
376
|
+
uv = p;
|
|
377
|
+
gl_Position = vec4(p * 2.0 - 1.0, 0.0, 1.0);
|
|
378
|
+
}`)),gl.attachShader(program,compile(gl.FRAGMENT_SHADER,`#version 300 es
|
|
379
|
+
precision mediump float;
|
|
380
|
+
in vec2 uv; uniform sampler2D tex; out vec4 color;
|
|
381
|
+
void main() { color = vec4(texture(tex, uv).rgb, 1.0); }`)),gl.linkProgram(program),!gl.getProgramParameter(program,gl.LINK_STATUS))return null;let texture=gl.createTexture();return gl.bindTexture(gl.TEXTURE_2D,texture),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE),{canvas,gl,texture,program,pixels:new Uint8Array(GL_PROBE_SIZE*GL_PROBE_SIZE*4)}}catch(_a){return null}}function disposeGLProbe(probe){var _a;let{gl}=probe;gl.deleteTexture(probe.texture),gl.deleteProgram(probe.program),(_a=gl.getExtension(`WEBGL_lose_context`))==null||_a.loseContext()}var GPU_PROBE_WIDTH=64,GPU_PROBE_HEIGHT=16,VideoTextureBridge=class{constructor(videoTexture){var _a;this.debug={path:`pending`,candidate:``,locked:!1,probe:``,updateCalls:0,skipNotReady:0,blitCount:0,rvfcCount:0,fails:0,targetSize:``,lastError:``},this.mode=`unknown`,this.device=null,this.broken=!1,this.disposed=!1,this.locked=!1,this.blacklist=new Map,this.probing=!1,this.nextProbeAt=0,this.probeInterval=300,this.consecutiveFails=0,this.failingSince=0,this.frameTexture=null,this.frameReady=!1,this.heldFrame=null,this.canvas=null,this.canvasContext=null,this.gpuTexture=null,this.externalTexture=null,this.externalReady=!1,this.width=0,this.height=0,this.frameDirty=!0,this.lastVideoTime=-1,this.videoFrameCallbackId=null,this.glProbe=null,this.glProbeFailed=!1,this.gpuProbe=null,this.probeCanvas=null,this.forced=!1,this.onSourceChange=()=>{this.forced||(this.blacklist.clear(),this.locked=!1,this.debug.locked=!1,this.probeInterval=300,this.nextProbeAt=0,this.consecutiveFails=0,this.frameDirty=!0)},this.videoTexture=videoTexture,this.current=(_a=CANDIDATE_ORDER.find(isAvailable))==null?`video`:_a,this.debug.candidate=this.current,this.scheduleVideoFrameCallback();let video=this.video;typeof(video==null?void 0:video.addEventListener)==`function`&&video.addEventListener(`loadstart`,this.onSourceChange)}get video(){return this.videoTexture.image}scheduleVideoFrameCallback(){let video=this.video;this.disposed||typeof(video==null?void 0:video.requestVideoFrameCallback)!=`function`||(this.videoFrameCallbackId=video.requestVideoFrameCallback(()=>{this.videoFrameCallbackId=null,this.frameDirty=!0,this.debug.rvfcCount++,this.scheduleVideoFrameCallback()}))}get texture(){var _a;if(this.broken||this.mode===`unknown`)return this.videoTexture;let wantsExternal=this.mode===`webgpu`&&(this.current===`videoFrame`||this.current===`video`),external=this.externalReady?this.externalTexture:null,frame=this.frameReady?this.frameTexture:null;return(_a=wantsExternal?external==null?frame:external:frame==null?external:frame)==null?getPlaceholder():_a}update(renderer){if(this.debug.updateCalls++,this.disposed||this.broken||!this.resolveMode(renderer))return;let video=this.video;if(!(video instanceof HTMLVideoElement))return;if(video.readyState<2||video.videoWidth===0||video.videoHeight===0){this.debug.skipNotReady++;return}let now=performance.now();if(!this.locked&&!this.probing&&now>=this.nextProbeAt&&this.startProbe(),!(!this.frameDirty&&(this.debug.rvfcCount>0||video.currentTime===this.lastVideoTime)))try{this.produce(this.current,video),this.frameDirty=!1,this.lastVideoTime=video.currentTime,this.consecutiveFails=0,this.debug.blitCount++}catch(error){this.onProduceFailed(error)}}forceCandidate(candidate){if(candidate===null){this.forced=!1,this.onSourceChange();return}this.forced=!0,this.current=candidate,this.locked=!0,this.debug.candidate=candidate,this.debug.locked=!0,this.frameDirty=!0,this.releaseProbeResources()}resolveMode(renderer){if(this.mode!==`unknown`)return!0;let backend=renderer==null?void 0:renderer.backend;if(!backend)return!1;if(backend.isWebGPUBackend===!0){if(!backend.device)return!1;this.device=backend.device,this.mode=`webgpu`}else this.mode=`webgl`;return this.debug.path=this.mode,this.ensureFrameTexture(),!0}ensureFrameTexture(){if(this.frameTexture)return;let source=this.videoTexture,texture=new three_webgpu.VideoFrameTexture;texture.colorSpace=three_webgpu.SRGBColorSpace,texture.generateMipmaps=!1,texture.minFilter=source.minFilter,texture.magFilter=source.magFilter,texture.wrapS=source.wrapS,texture.wrapT=source.wrapT,this.frameTexture=texture}produce(candidate,video){let webgpu=this.mode===`webgpu`;switch(candidate){case`videoFrame`:{let frame=createVideoFrame(video);if(webgpu)try{this.blit(frame,video)}finally{frame.close()}else this.setFrame(frame,frame);break}case`video`:webgpu?this.blit(video,video):this.setFrame(video,null);break;case`canvasFromVideoFrame`:{let frame=createVideoFrame(video);try{this.drawCanvas(frame,video)}finally{frame.close()}this.setFrame(this.canvas,null);break}case`canvasFromVideo`:this.drawCanvas(video,video),this.setFrame(this.canvas,null);break}}setFrame(image,owned){this.frameTexture.setFrame(image);let previous=this.heldFrame;this.heldFrame=owned,previous&&previous!==owned&&previous.close(),this.frameReady=!0}drawCanvas(source,video){let scale=Math.min(1,MAX_CANVAS_SIZE/Math.max(video.videoWidth,video.videoHeight)),width=Math.max(1,Math.floor(video.videoWidth*scale)),height=Math.max(1,Math.floor(video.videoHeight*scale));if(!this.canvas&&(this.canvas=document.createElement(`canvas`),this.canvasContext=this.canvas.getContext(`2d`,{alpha:!1}),!this.canvasContext))throw Error(`canvas 2d 上下文不可用`);this.canvas.width!==width&&(this.canvas.width=width),this.canvas.height!==height&&(this.canvas.height=height),this.canvasContext.drawImage(source,0,0,width,height)}isBlacklisted(candidate){let expiresAt=this.blacklist.get(candidate);return expiresAt===void 0?!1:performance.now()>=expiresAt?(this.blacklist.delete(candidate),!1):!0}onProduceFailed(error){var _a;let now=performance.now();if(this.consecutiveFails===0&&(this.failingSince=now),this.consecutiveFails++,this.debug.fails++,this.debug.lastError=String((_a=error==null?void 0:error.message)==null?error:_a),this.consecutiveFails<MAX_CONSECUTIVE_FAILS||now-this.failingSince<MIN_FAIL_DURATION_MS)return;console.warn(`[Five] 视频候选路径 ${this.current} 持续失败,暂时弃用`,error),this.blacklist.set(this.current,now+BLACKLIST_TTL_MS);let next=CANDIDATE_ORDER.find(c=>isAvailable(c)&&!this.isBlacklisted(c));this.consecutiveFails=0,next?(this.current=next,this.debug.candidate=next,this.locked=!1,this.debug.locked=!1,this.nextProbeAt=0,this.frameDirty=!0):(console.warn(`[Five] 视频所有候选路径均失败,回退为 VideoTexture 上传`),this.broken=!0,this.debug.path=`fallback`,this.releaseOutputs())}blit(source,video){this.ensureTarget(video.videoWidth,video.videoHeight);let device=this.device,{pipeline,bindGroupLayout,sampler}=getBlitPipeline(device),external=device.importExternalTexture({source}),bindGroup=device.createBindGroup({layout:bindGroupLayout,entries:[{binding:0,resource:external},{binding:1,resource:sampler}]}),encoder=device.createCommandEncoder({label:`five.videoBlit`}),pass=encoder.beginRenderPass({colorAttachments:[{view:this.gpuTexture.createView(),loadOp:`clear`,storeOp:`store`,clearValue:{r:0,g:0,b:0,a:1}}]});pass.setPipeline(pipeline),pass.setBindGroup(0,bindGroup),pass.draw(3),pass.end(),device.queue.submit([encoder.finish()]),this.externalReady=!0,this.debug.targetSize=`${this.width}x${this.height}`}ensureTarget(videoWidth,videoHeight){let device=this.device,maxSize=device.limits.maxTextureDimension2D,scale=Math.min(1,maxSize/Math.max(videoWidth,videoHeight)),width=Math.max(1,Math.floor(videoWidth*scale)),height=Math.max(1,Math.floor(videoHeight*scale));if(this.gpuTexture&&this.width===width&&this.height===height)return;let prevGPUTexture=this.gpuTexture,gpuTexture=device.createTexture({label:`five.videoBlit.target`,size:{width,height},format:INTERMEDIATE_FORMAT,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT});if(this.gpuTexture=gpuTexture,this.width=width,this.height=height,this.externalTexture)this.externalTexture.sourceTexture=gpuTexture,this.externalTexture.image={width,height},this.externalTexture.dispose();else{let texture=new three_webgpu.ExternalTexture(gpuTexture);texture.colorSpace=three_webgpu.SRGBColorSpace,texture.flipY=!1,texture.generateMipmaps=!1,texture.minFilter=three_webgpu.LinearFilter,texture.magFilter=three_webgpu.LinearFilter,texture.wrapS=three_webgpu.ClampToEdgeWrapping,texture.wrapT=three_webgpu.ClampToEdgeWrapping,texture.image={width,height},this.externalTexture=texture}prevGPUTexture==null||prevGPUTexture.destroy()}startProbe(){this.probing=!0,this.runProbe().catch(error=>{var _a;this.debug.lastError=String((_a=error==null?void 0:error.message)==null?error:_a)}).finally(()=>{this.probing=!1,this.nextProbeAt=performance.now()+this.probeInterval,this.probeInterval=Math.min(this.probeInterval*1.5,5e3)})}runProbe(){return(0,tslib.__awaiter)(this,void 0,void 0,function*(){let results=[],chosen=null;for(let candidate of CANDIDATE_ORDER){let label=CANDIDATE_SHORT[candidate];if(this.disposed)return;if(this.isBlacklisted(candidate)||!isAvailable(candidate)){results.push(`${label}:n/a`);continue}let brightness;try{brightness=yield this.probeCandidate(candidate)}catch(_a){brightness=-1}if(results.push(`${label}:${brightness===null?`?`:brightness}`),brightness===null||brightness>=BRIGHT_THRESHOLD){chosen=candidate;break}}this.debug.probe=results.join(` `),chosen&&this.select(chosen)})}select(candidate){this.current=candidate,this.locked=!0,this.debug.candidate=candidate,this.debug.locked=!0,this.frameDirty=!0,this.releaseProbeResources()}probeCandidate(candidate){return(0,tslib.__awaiter)(this,void 0,void 0,function*(){let video=this.video;if(!(video instanceof HTMLVideoElement)||video.readyState<2)return-1;switch(candidate){case`canvasFromVideoFrame`:return this.probe2d(video,!0);case`canvasFromVideo`:return this.probe2d(video,!1);default:return this.mode===`webgpu`?this.probeGPU(video,candidate===`videoFrame`):this.probeGL(video,candidate===`videoFrame`)}})}probe2d(video,useFrame){if(!this.probeCanvas){let canvas=document.createElement(`canvas`);canvas.width=canvas.height=GL_PROBE_SIZE;let context=canvas.getContext(`2d`,{willReadFrequently:!0});if(!context)return-1;this.probeCanvas=context}let frame=useFrame?createVideoFrame(video):null;try{return this.probeCanvas.drawImage(frame==null?video:frame,0,0,GL_PROBE_SIZE,GL_PROBE_SIZE),maxChannel(this.probeCanvas.getImageData(0,0,GL_PROBE_SIZE,GL_PROBE_SIZE).data)}finally{frame==null||frame.close()}}probeGL(video,useFrame){!this.glProbe&&!this.glProbeFailed&&(this.glProbe=createGLProbe(),this.glProbeFailed=this.glProbe===null);let probe=this.glProbe;if(!probe)return null;let{gl}=probe,frame=useFrame?createVideoFrame(video):null;try{return gl.getError(),gl.viewport(0,0,GL_PROBE_SIZE,GL_PROBE_SIZE),gl.bindTexture(gl.TEXTURE_2D,probe.texture),gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,frame==null?video:frame),gl.getError()===gl.NO_ERROR?(gl.useProgram(probe.program),gl.drawArrays(gl.TRIANGLES,0,3),gl.readPixels(0,0,GL_PROBE_SIZE,GL_PROBE_SIZE,gl.RGBA,gl.UNSIGNED_BYTE,probe.pixels),maxChannel(probe.pixels)):-1}finally{frame==null||frame.close()}}probeGPU(video,useFrame){return(0,tslib.__awaiter)(this,void 0,void 0,function*(){let device=this.device,{pipeline,bindGroupLayout,sampler}=getBlitPipeline(device);this.gpuProbe||(this.gpuProbe={texture:device.createTexture({label:`five.videoProbe.target`,size:{width:GPU_PROBE_WIDTH,height:GPU_PROBE_HEIGHT},format:INTERMEDIATE_FORMAT,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC}),buffer:device.createBuffer({label:`five.videoProbe.readback`,size:GPU_PROBE_WIDTH*4*GPU_PROBE_HEIGHT,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ})});let probe=this.gpuProbe;device.pushErrorScope(`validation`);let encodeError=null,frame=useFrame?createVideoFrame(video):null;try{let external=device.importExternalTexture({source:frame==null?video:frame}),bindGroup=device.createBindGroup({layout:bindGroupLayout,entries:[{binding:0,resource:external},{binding:1,resource:sampler}]}),encoder=device.createCommandEncoder({label:`five.videoProbe`}),pass=encoder.beginRenderPass({colorAttachments:[{view:probe.texture.createView(),loadOp:`clear`,storeOp:`store`,clearValue:{r:0,g:0,b:0,a:1}}]});pass.setPipeline(pipeline),pass.setBindGroup(0,bindGroup),pass.draw(3),pass.end(),encoder.copyTextureToBuffer({texture:probe.texture},{buffer:probe.buffer,bytesPerRow:GPU_PROBE_WIDTH*4},{width:GPU_PROBE_WIDTH,height:GPU_PROBE_HEIGHT}),device.queue.submit([encoder.finish()])}catch(error){encodeError=error}finally{frame==null||frame.close()}let scopeError=yield device.popErrorScope();if(encodeError||scopeError)return-1;yield probe.buffer.mapAsync(GPUMapMode.READ);let brightness=maxChannel(new Uint8Array(probe.buffer.getMappedRange()));return probe.buffer.unmap(),brightness})}releaseProbeResources(){this.glProbe&&(disposeGLProbe(this.glProbe),this.glProbe=null),this.glProbeFailed=!1,this.probeCanvas=null,this.gpuProbe&&(this.gpuProbe.texture.destroy(),this.gpuProbe.buffer.destroy(),this.gpuProbe=null)}releaseOutputs(){var _a,_b,_c,_d;(_a=this.heldFrame)==null||_a.close(),this.heldFrame=null,(_b=this.frameTexture)==null||_b.dispose(),this.frameTexture=null,this.frameReady=!1,(_c=this.externalTexture)==null||_c.dispose(),this.externalTexture=null,this.externalReady=!1,(_d=this.gpuTexture)==null||_d.destroy(),this.gpuTexture=null,this.width=this.height=0,this.canvas=null,this.canvasContext=null}dispose(){if(this.disposed)return;this.disposed=!0;let video=this.video;this.videoFrameCallbackId!==null&&typeof(video==null?void 0:video.cancelVideoFrameCallback)==`function`&&video.cancelVideoFrameCallback(this.videoFrameCallbackId),this.videoFrameCallbackId=null,typeof(video==null?void 0:video.removeEventListener)==`function`&&video.removeEventListener(`loadstart`,this.onSourceChange),this.releaseOutputs(),this.releaseProbeResources()}},bridges=new WeakMap;function getVideoTextureBridge(videoTexture){let bridge=bridges.get(videoTexture);if(!bridge){let created=new VideoTextureBridge(videoTexture);bridge=created,bridges.set(videoTexture,created);let onDispose=()=>{videoTexture.removeEventListener(`dispose`,onDispose),bridges.get(videoTexture)===created&&bridges.delete(videoTexture),created.dispose()};videoTexture.addEventListener(`dispose`,onDispose)}return bridge}var window_=window,_requestAnimationFrame=window_.requestAnimationFrame||window_.mozRequestAnimationFrame||window_.webkitRequestAnimationFrame||window_.msRequestAnimationFrame||(fn=>setTimeout(fn,16)),start=typeof performance<`u`&&performance.timing!==void 0?performance.timing.navigationStart:Date.now(),now=typeof performance<`u`?(()=>start+performance.now()):(()=>Date.now());function imageReady(image,callback){image.naturalWidth>0&&_requestAnimationFrame(()=>callback());let onLoad=()=>callback();return image.addEventListener(`load`,onLoad,!1),()=>image.removeEventListener(`load`,onLoad,!1)}function videoReady(video,callback){let lastUpdateTime=now(),looping=!1,loop=()=>{looping=!0,callback(),now()-lastUpdateTime<3e3?_requestAnimationFrame(loop):looping=!1},onUpdate=()=>{lastUpdateTime=now(),looping===!1&&loop()};return video.addEventListener(`timeupdate`,onUpdate,!1),()=>{video.removeEventListener(`timeupdate`,onUpdate,!1),looping=!1}}function injectDispose(texture,dispose){let _dispose=texture.dispose;texture.dispose=()=>{dispose(),_dispose.call(texture)}}var Sticker=class extends three_webgpu.Mesh{static get version(){return`1.0.0-alpha.15`}constructor(width,height,resource){let material=new three_webgpu.MeshBasicMaterial;if(super(geometry,material),this._sourceTexture=null,this._needsRender=!1,this.scale.set(width,height,1),typeof resource==`string`){material.transparent=/\.png$/.test(resource);let image=new Image;image.src=resource,image.crossOrigin=``,resource=image}if(resource instanceof HTMLImageElement){let texture=material.map=new three_webgpu.Texture;texture.wrapS=three_webgpu.ClampToEdgeWrapping,texture.wrapT=three_webgpu.ClampToEdgeWrapping,texture.minFilter=three_webgpu.LinearFilter,texture.colorSpace=three_webgpu.SRGBColorSpace,injectDispose(texture,imageReady(resource,()=>{texture.image=resource,texture.needsUpdate=!0,this._needsRender=!0}))}else if(resource instanceof HTMLCanvasElement)material.map=new three_webgpu.CanvasTexture(resource);else if(resource instanceof HTMLVideoElement){let texture=material.map=new three_webgpu.VideoTexture(resource);texture.wrapS=three_webgpu.ClampToEdgeWrapping,texture.wrapT=three_webgpu.ClampToEdgeWrapping,texture.minFilter=three_webgpu.LinearFilter,texture.colorSpace=three_webgpu.SRGBColorSpace,injectDispose(texture,videoReady(resource,()=>{this._needsRender=!0}));let bridge=getVideoTextureBridge(texture);this.onBeforeRender=renderer=>{bridge.update(renderer);let map=bridge.texture;material.map!==map&&(material.map=map)}}this._sourceTexture=material.map}get needsRender(){return this._needsRender}set needsRender(value){this._needsRender=value,value===!0&&this._sourceTexture&&(this._sourceTexture.needsUpdate=!0)}setSize(width,height){this.scale.set(width,height,1),this._needsRender=!0}setTransparent(transparent){this.material.transparent=transparent,this._needsRender=!0}locationWithIntersection(intersection,offset=.005){let{point,face}=intersection;this.position.copy(point),face&&(this.position.add(face.normal.clone().setLength(offset)),this.lookAt(point.clone().add(face.normal))),this._needsRender=!0}dispose(){var _a;(_a=this._sourceTexture)==null||_a.dispose(),this.material.dispose()}};exports.Sticker=Sticker;
|
package/sticker/index.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license
|
|
3
3
|
* @realsee/five-webgpu
|
|
4
|
-
* Generated: 2026/
|
|
5
|
-
* Version: 1.0.0-alpha.
|
|
4
|
+
* Generated: 2026/11/4
|
|
5
|
+
* Version: 1.0.0-alpha.15
|
|
6
6
|
* License:
|
|
7
7
|
* Realsee SDK License Agreement
|
|
8
8
|
|
|
@@ -335,264 +335,47 @@
|
|
|
335
335
|
* writing and signed by Realsee. You and Realsee hereto confirm that this
|
|
336
336
|
* Agreement and all related documents shall be drafted in English.
|
|
337
337
|
|
|
338
|
-
*/import
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
0,
|
|
355
|
-
0,
|
|
356
|
-
1,
|
|
357
|
-
0,
|
|
358
|
-
0,
|
|
359
|
-
1,
|
|
360
|
-
1,
|
|
361
|
-
1
|
|
362
|
-
]), r = new Uint8Array([
|
|
363
|
-
0,
|
|
364
|
-
1,
|
|
365
|
-
2,
|
|
366
|
-
1,
|
|
367
|
-
3,
|
|
368
|
-
2
|
|
369
|
-
]), i = new e.BufferGeometry();
|
|
370
|
-
i.setAttribute("position", new e.BufferAttribute(t, 3)), i.setAttribute("uv", new e.BufferAttribute(n, 2)), i.setIndex(new e.BufferAttribute(r, 1));
|
|
371
|
-
//#endregion
|
|
372
|
-
//#region build/five/texture/videoTextureBridge.js
|
|
373
|
-
var a = "rgba8unorm-srgb", o = "\nstruct VSOut {\n @builtin(position) position: vec4f,\n @location(0) uv: vec2f,\n};\n\n@vertex\nfn vs(@builtin(vertex_index) index: u32) -> VSOut {\n // 全屏三角形:p ∈ {(0,0), (2,0), (0,2)}\n let p = vec2f(f32((index << 1u) & 2u), f32(index & 2u));\n var out: VSOut;\n out.position = vec4f(p * 2.0 - 1.0, 0.0, 1.0);\n // NDC y = +1 对应纹理第 0 行。three 的约定是 uv.v = 0 为图像底部、且存放在第 0 行,\n // 而 external texture 的 uv (0,0) 是视频左上角,所以第 0 行要采视频的 v = 1,即 uv = p。\n out.uv = p;\n return out;\n}\n\n@group(0) @binding(0) var source: texture_external;\n@group(0) @binding(1) var sourceSampler: sampler;\n\nfn srgbToLinear(c: vec3f) -> vec3f {\n let low = c / 12.92;\n let high = pow((c + 0.055) / 1.055, vec3f(2.4));\n return select(high, low, c <= vec3f(0.04045));\n}\n\n@fragment\nfn fs(in: VSOut) -> @location(0) vec4f {\n // external texture 采样结果是 sRGB 编码值;目标是 -srgb 格式,写入时会再编码一次,\n // 所以这里先解码为线性。\n let color = textureSampleBaseClampToEdge(source, sourceSampler, in.uv);\n return vec4f(srgbToLinear(color.rgb), 1.0);\n}\n", s = /* @__PURE__ */ new WeakMap();
|
|
374
|
-
function c(e) {
|
|
375
|
-
let t = s.get(e);
|
|
376
|
-
if (!t) {
|
|
377
|
-
let n = e.createShaderModule({
|
|
378
|
-
label: "five.videoBlit",
|
|
379
|
-
code: o
|
|
380
|
-
});
|
|
381
|
-
t = {
|
|
382
|
-
pipeline: e.createRenderPipeline({
|
|
383
|
-
label: "five.videoBlit",
|
|
384
|
-
layout: "auto",
|
|
385
|
-
vertex: {
|
|
386
|
-
module: n,
|
|
387
|
-
entryPoint: "vs"
|
|
388
|
-
},
|
|
389
|
-
fragment: {
|
|
390
|
-
module: n,
|
|
391
|
-
entryPoint: "fs",
|
|
392
|
-
targets: [{ format: a }]
|
|
393
|
-
},
|
|
394
|
-
primitive: { topology: "triangle-list" }
|
|
395
|
-
}),
|
|
396
|
-
sampler: e.createSampler({
|
|
397
|
-
magFilter: "linear",
|
|
398
|
-
minFilter: "linear"
|
|
399
|
-
})
|
|
400
|
-
}, s.set(e, t);
|
|
401
|
-
}
|
|
402
|
-
return t;
|
|
403
|
-
}
|
|
404
|
-
var l = null;
|
|
405
|
-
function u() {
|
|
406
|
-
return l || (l = new e.DataTexture(new Uint8Array([
|
|
407
|
-
0,
|
|
408
|
-
0,
|
|
409
|
-
0,
|
|
410
|
-
255
|
|
411
|
-
]), 1, 1, e.RGBAFormat), l.colorSpace = e.SRGBColorSpace, l.magFilter = e.LinearFilter, l.minFilter = e.LinearFilter, l.needsUpdate = !0), l;
|
|
412
|
-
}
|
|
413
|
-
var d = class {
|
|
414
|
-
constructor(e) {
|
|
415
|
-
this.device = null, this.useBlit = null, this.broken = !1, this.gpuTexture = null, this.externalTexture = null, this.width = 0, this.height = 0, this.frameDirty = !0, this.lastVideoTime = -1, this.videoFrameCallbackId = null, this.disposed = !1, this.videoTexture = e, this.scheduleVideoFrameCallback();
|
|
416
|
-
}
|
|
417
|
-
get video() {
|
|
418
|
-
return this.videoTexture.image;
|
|
419
|
-
}
|
|
420
|
-
scheduleVideoFrameCallback() {
|
|
421
|
-
let e = this.video;
|
|
422
|
-
this.disposed || typeof (e == null ? void 0 : e.requestVideoFrameCallback) != "function" || (this.videoFrameCallbackId = e.requestVideoFrameCallback(() => {
|
|
423
|
-
this.videoFrameCallbackId = null, this.frameDirty = !0, this.scheduleVideoFrameCallback();
|
|
424
|
-
}));
|
|
425
|
-
}
|
|
426
|
-
get texture() {
|
|
427
|
-
var e;
|
|
428
|
-
return this.broken || this.useBlit !== !0 ? this.videoTexture : (e = this.externalTexture) == null ? u() : e;
|
|
429
|
-
}
|
|
430
|
-
update(e) {
|
|
431
|
-
if (this.disposed || this.broken) return;
|
|
432
|
-
if (this.useBlit === null) {
|
|
433
|
-
let t = e == null ? void 0 : e.backend;
|
|
434
|
-
if (!t) return;
|
|
435
|
-
if (t.isWebGPUBackend !== !0) {
|
|
436
|
-
this.useBlit = !1;
|
|
437
|
-
return;
|
|
438
|
-
}
|
|
439
|
-
if (!t.device) return;
|
|
440
|
-
this.device = t.device, this.useBlit = !0;
|
|
441
|
-
}
|
|
442
|
-
if (!this.useBlit || !this.device) return;
|
|
443
|
-
let t = this.video;
|
|
444
|
-
if (t instanceof HTMLVideoElement && !(t.readyState < 2 || t.videoWidth === 0 || t.videoHeight === 0) && !(this.externalTexture && !this.frameDirty && t.currentTime === this.lastVideoTime)) try {
|
|
445
|
-
this.ensureTarget(t.videoWidth, t.videoHeight), this.blit(t), this.frameDirty = !1, this.lastVideoTime = t.currentTime;
|
|
446
|
-
} catch (e) {
|
|
447
|
-
console.warn("[Five] 视频纹理 GPU 中转失败,回退为 VideoTexture 上传", e), this.broken = !0, this.releaseTarget();
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
ensureTarget(t, n) {
|
|
451
|
-
let r = this.device, i = r.limits.maxTextureDimension2D, o = Math.min(1, i / Math.max(t, n)), s = Math.max(1, Math.floor(t * o)), c = Math.max(1, Math.floor(n * o));
|
|
452
|
-
if (this.gpuTexture && this.width === s && this.height === c) return;
|
|
453
|
-
let l = this.gpuTexture, u = r.createTexture({
|
|
454
|
-
label: "five.videoBlit.target",
|
|
455
|
-
size: {
|
|
456
|
-
width: s,
|
|
457
|
-
height: c
|
|
458
|
-
},
|
|
459
|
-
format: a,
|
|
460
|
-
usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT
|
|
461
|
-
});
|
|
462
|
-
if (this.gpuTexture = u, this.width = s, this.height = c, this.externalTexture) this.externalTexture.sourceTexture = u, this.externalTexture.image = {
|
|
463
|
-
width: s,
|
|
464
|
-
height: c
|
|
465
|
-
}, this.externalTexture.dispose();
|
|
466
|
-
else {
|
|
467
|
-
let t = new e.ExternalTexture(u);
|
|
468
|
-
t.colorSpace = e.SRGBColorSpace, t.flipY = !1, t.generateMipmaps = !1, t.minFilter = e.LinearFilter, t.magFilter = e.LinearFilter, t.wrapS = e.ClampToEdgeWrapping, t.wrapT = e.ClampToEdgeWrapping, t.image = {
|
|
469
|
-
width: s,
|
|
470
|
-
height: c
|
|
471
|
-
}, this.externalTexture = t;
|
|
472
|
-
}
|
|
473
|
-
l == null || l.destroy();
|
|
474
|
-
}
|
|
475
|
-
blit(e) {
|
|
476
|
-
let t = this.device, { pipeline: n, sampler: r } = c(t), i = t.importExternalTexture({ source: e }), a = t.createBindGroup({
|
|
477
|
-
layout: n.getBindGroupLayout(0),
|
|
478
|
-
entries: [{
|
|
479
|
-
binding: 0,
|
|
480
|
-
resource: i
|
|
481
|
-
}, {
|
|
482
|
-
binding: 1,
|
|
483
|
-
resource: r
|
|
484
|
-
}]
|
|
485
|
-
}), o = t.createCommandEncoder({ label: "five.videoBlit" }), s = o.beginRenderPass({ colorAttachments: [{
|
|
486
|
-
view: this.gpuTexture.createView(),
|
|
487
|
-
loadOp: "clear",
|
|
488
|
-
storeOp: "store",
|
|
489
|
-
clearValue: {
|
|
490
|
-
r: 0,
|
|
491
|
-
g: 0,
|
|
492
|
-
b: 0,
|
|
493
|
-
a: 1
|
|
494
|
-
}
|
|
495
|
-
}] });
|
|
496
|
-
s.setPipeline(n), s.setBindGroup(0, a), s.draw(3), s.end(), t.queue.submit([o.finish()]);
|
|
497
|
-
}
|
|
498
|
-
releaseTarget() {
|
|
499
|
-
var e, t;
|
|
500
|
-
(e = this.externalTexture) == null || e.dispose(), this.externalTexture = null, (t = this.gpuTexture) == null || t.destroy(), this.gpuTexture = null, this.width = this.height = 0;
|
|
501
|
-
}
|
|
502
|
-
dispose() {
|
|
503
|
-
if (this.disposed) return;
|
|
504
|
-
this.disposed = !0;
|
|
505
|
-
let e = this.video;
|
|
506
|
-
this.videoFrameCallbackId !== null && typeof (e == null ? void 0 : e.cancelVideoFrameCallback) == "function" && e.cancelVideoFrameCallback(this.videoFrameCallbackId), this.videoFrameCallbackId = null, this.releaseTarget();
|
|
507
|
-
}
|
|
508
|
-
}, f = /* @__PURE__ */ new WeakMap();
|
|
509
|
-
function p(e) {
|
|
510
|
-
let t = f.get(e);
|
|
511
|
-
if (!t) {
|
|
512
|
-
let n = new d(e);
|
|
513
|
-
t = n, f.set(e, n);
|
|
514
|
-
let r = () => {
|
|
515
|
-
e.removeEventListener("dispose", r), f.get(e) === n && f.delete(e), n.dispose();
|
|
516
|
-
};
|
|
517
|
-
e.addEventListener("dispose", r);
|
|
518
|
-
}
|
|
519
|
-
return t;
|
|
520
|
-
}
|
|
521
|
-
//#endregion
|
|
522
|
-
//#region build/sticker/index.js
|
|
523
|
-
var m = window, h = m.requestAnimationFrame || m.mozRequestAnimationFrame || m.webkitRequestAnimationFrame || m.msRequestAnimationFrame || ((e) => setTimeout(e, 16)), g = typeof performance < "u" && performance.timing !== void 0 ? performance.timing.navigationStart : Date.now(), _ = typeof performance < "u" ? (() => g + performance.now()) : (() => Date.now());
|
|
524
|
-
function v(e, t) {
|
|
525
|
-
e.naturalWidth > 0 && h(() => t());
|
|
526
|
-
let n = () => t();
|
|
527
|
-
return e.addEventListener("load", n, !1), () => e.removeEventListener("load", n, !1);
|
|
338
|
+
*/import*as THREE from"three/webgpu";import{__awaiter}from"tslib";var vertices=new Float32Array([-.5,-.5,0,.5,-.5,0,-.5,.5,0,.5,.5,0]),uvs=new Float32Array([0,0,1,0,0,1,1,1]),index=new Uint8Array([0,1,2,1,3,2]),geometry=new THREE.BufferGeometry;geometry.setAttribute(`position`,new THREE.BufferAttribute(vertices,3)),geometry.setAttribute(`uv`,new THREE.BufferAttribute(uvs,2)),geometry.setIndex(new THREE.BufferAttribute(index,1));var CANDIDATE_ORDER=[`videoFrame`,`video`,`canvasFromVideoFrame`,`canvasFromVideo`],CANDIDATE_SHORT={videoFrame:`vf`,video:`video`,canvasFromVideoFrame:`cvf`,canvasFromVideo:`cv`},BRIGHT_THRESHOLD=6,MAX_CONSECUTIVE_FAILS=10,MIN_FAIL_DURATION_MS=3e3,BLACKLIST_TTL_MS=15e3,MAX_CANVAS_SIZE=4096,INTERMEDIATE_FORMAT=`rgba8unorm-srgb`,BLIT_SHADER=`
|
|
339
|
+
struct VSOut {
|
|
340
|
+
@builtin(position) position: vec4f,
|
|
341
|
+
@location(0) uv: vec2f,
|
|
342
|
+
};
|
|
343
|
+
|
|
344
|
+
@vertex
|
|
345
|
+
fn vs(@builtin(vertex_index) index: u32) -> VSOut {
|
|
346
|
+
// 全屏三角形:p ∈ {(0,0), (2,0), (0,2)}
|
|
347
|
+
let p = vec2f(f32((index << 1u) & 2u), f32(index & 2u));
|
|
348
|
+
var out: VSOut;
|
|
349
|
+
out.position = vec4f(p * 2.0 - 1.0, 0.0, 1.0);
|
|
350
|
+
// NDC y = +1 对应纹理第 0 行。three 的约定是 uv.v = 0 为图像底部、且存放在第 0 行,
|
|
351
|
+
// 而 external texture 的 uv (0,0) 是视频左上角,所以第 0 行要采视频的 v = 1,即 uv = p。
|
|
352
|
+
out.uv = p;
|
|
353
|
+
return out;
|
|
528
354
|
}
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
};
|
|
355
|
+
|
|
356
|
+
@group(0) @binding(0) var source: texture_external;
|
|
357
|
+
@group(0) @binding(1) var sourceSampler: sampler;
|
|
358
|
+
|
|
359
|
+
fn srgbToLinear(c: vec3f) -> vec3f {
|
|
360
|
+
let low = c / 12.92;
|
|
361
|
+
let high = pow((c + 0.055) / 1.055, vec3f(2.4));
|
|
362
|
+
return select(high, low, c <= vec3f(0.04045));
|
|
538
363
|
}
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
364
|
+
|
|
365
|
+
@fragment
|
|
366
|
+
fn fs(in: VSOut) -> @location(0) vec4f {
|
|
367
|
+
// external texture 采样结果是 sRGB 编码值;目标是 -srgb 格式,写入时会再编码一次,
|
|
368
|
+
// 所以这里先解码为线性。
|
|
369
|
+
let color = textureSampleBaseClampToEdge(source, sourceSampler, in.uv);
|
|
370
|
+
return vec4f(srgbToLinear(color.rgb), 1.0);
|
|
544
371
|
}
|
|
545
|
-
var
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
e.src = r, e.crossOrigin = "", r = e;
|
|
555
|
-
}
|
|
556
|
-
if (r instanceof HTMLImageElement) {
|
|
557
|
-
let t = a.map = new e.Texture();
|
|
558
|
-
t.wrapS = e.ClampToEdgeWrapping, t.wrapT = e.ClampToEdgeWrapping, t.minFilter = e.LinearFilter, t.colorSpace = e.SRGBColorSpace, b(t, v(r, () => {
|
|
559
|
-
t.image = r, t.needsUpdate = !0, this._needsRender = !0;
|
|
560
|
-
}));
|
|
561
|
-
} else if (r instanceof HTMLCanvasElement) a.map = new e.CanvasTexture(r);
|
|
562
|
-
else if (r instanceof HTMLVideoElement) {
|
|
563
|
-
let t = a.map = new e.VideoTexture(r);
|
|
564
|
-
t.wrapS = e.ClampToEdgeWrapping, t.wrapT = e.ClampToEdgeWrapping, t.minFilter = e.LinearFilter, t.colorSpace = e.SRGBColorSpace, b(t, y(r, () => {
|
|
565
|
-
this._needsRender = !0;
|
|
566
|
-
}));
|
|
567
|
-
let n = p(t);
|
|
568
|
-
this.onBeforeRender = (e) => {
|
|
569
|
-
n.update(e);
|
|
570
|
-
let t = n.texture;
|
|
571
|
-
a.map !== t && (a.map = t);
|
|
572
|
-
};
|
|
573
|
-
}
|
|
574
|
-
this._sourceTexture = a.map;
|
|
575
|
-
}
|
|
576
|
-
get needsRender() {
|
|
577
|
-
return this._needsRender;
|
|
578
|
-
}
|
|
579
|
-
set needsRender(e) {
|
|
580
|
-
this._needsRender = e, e === !0 && this._sourceTexture && (this._sourceTexture.needsUpdate = !0);
|
|
581
|
-
}
|
|
582
|
-
setSize(e, t) {
|
|
583
|
-
this.scale.set(e, t, 1), this._needsRender = !0;
|
|
584
|
-
}
|
|
585
|
-
setTransparent(e) {
|
|
586
|
-
this.material.transparent = e, this._needsRender = !0;
|
|
587
|
-
}
|
|
588
|
-
locationWithIntersection(e, t = .005) {
|
|
589
|
-
let { point: n, face: r } = e;
|
|
590
|
-
this.position.copy(n), r && (this.position.add(r.normal.clone().setLength(t)), this.lookAt(n.clone().add(r.normal))), this._needsRender = !0;
|
|
591
|
-
}
|
|
592
|
-
dispose() {
|
|
593
|
-
var e;
|
|
594
|
-
(e = this._sourceTexture) == null || e.dispose(), this.material.dispose();
|
|
595
|
-
}
|
|
596
|
-
};
|
|
597
|
-
//#endregion
|
|
598
|
-
export { x as Sticker };
|
|
372
|
+
`,pipelineCache=new WeakMap;function getBlitPipeline(device){let cached=pipelineCache.get(device);if(!cached){let module=device.createShaderModule({label:`five.videoBlit`,code:BLIT_SHADER}),bindGroupLayout=device.createBindGroupLayout({label:`five.videoBlit`,entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,externalTexture:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}}]});cached={pipeline:device.createRenderPipeline({label:`five.videoBlit`,layout:device.createPipelineLayout({bindGroupLayouts:[bindGroupLayout]}),vertex:{module,entryPoint:`vs`},fragment:{module,entryPoint:`fs`,targets:[{format:INTERMEDIATE_FORMAT}]},primitive:{topology:`triangle-list`}}),bindGroupLayout,sampler:device.createSampler({magFilter:`linear`,minFilter:`linear`})},pipelineCache.set(device,cached)}return cached}var sharedPlaceholder=null;function getPlaceholder(){return sharedPlaceholder||(sharedPlaceholder=new THREE.DataTexture(new Uint8Array([0,0,0,255]),1,1,THREE.RGBAFormat),sharedPlaceholder.colorSpace=THREE.SRGBColorSpace,sharedPlaceholder.magFilter=THREE.LinearFilter,sharedPlaceholder.minFilter=THREE.LinearFilter,sharedPlaceholder.needsUpdate=!0),sharedPlaceholder}function hasVideoFrame(){return typeof globalThis.VideoFrame==`function`}function createVideoFrame(video){let VideoFrameCtor=globalThis.VideoFrame;return new VideoFrameCtor(video)}function isAvailable(candidate){return candidate===`videoFrame`||candidate===`canvasFromVideoFrame`?hasVideoFrame():!0}function maxChannel(data){let max=0;for(let i=0;i<data.length;i+=4)data[i]>max&&(max=data[i]),data[i+1]>max&&(max=data[i+1]),data[i+2]>max&&(max=data[i+2]);return max}var GL_PROBE_SIZE=16;function createGLProbe(){try{let canvas=document.createElement(`canvas`);canvas.width=canvas.height=GL_PROBE_SIZE;let gl=canvas.getContext(`webgl2`,{antialias:!1,depth:!1,stencil:!1,preserveDrawingBuffer:!0});if(!gl)return null;let compile=(type,source)=>{var _a;let shader=gl.createShader(type);if(gl.shaderSource(shader,source),gl.compileShader(shader),!gl.getShaderParameter(shader,gl.COMPILE_STATUS))throw Error((_a=gl.getShaderInfoLog(shader))==null?`compile`:_a);return shader},program=gl.createProgram();if(gl.attachShader(program,compile(gl.VERTEX_SHADER,`#version 300 es
|
|
373
|
+
out vec2 uv;
|
|
374
|
+
void main() {
|
|
375
|
+
vec2 p = vec2(float((gl_VertexID << 1) & 2), float(gl_VertexID & 2));
|
|
376
|
+
uv = p;
|
|
377
|
+
gl_Position = vec4(p * 2.0 - 1.0, 0.0, 1.0);
|
|
378
|
+
}`)),gl.attachShader(program,compile(gl.FRAGMENT_SHADER,`#version 300 es
|
|
379
|
+
precision mediump float;
|
|
380
|
+
in vec2 uv; uniform sampler2D tex; out vec4 color;
|
|
381
|
+
void main() { color = vec4(texture(tex, uv).rgb, 1.0); }`)),gl.linkProgram(program),!gl.getProgramParameter(program,gl.LINK_STATUS))return null;let texture=gl.createTexture();return gl.bindTexture(gl.TEXTURE_2D,texture),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE),{canvas,gl,texture,program,pixels:new Uint8Array(GL_PROBE_SIZE*GL_PROBE_SIZE*4)}}catch(_a){return null}}function disposeGLProbe(probe){var _a;let{gl}=probe;gl.deleteTexture(probe.texture),gl.deleteProgram(probe.program),(_a=gl.getExtension(`WEBGL_lose_context`))==null||_a.loseContext()}var GPU_PROBE_WIDTH=64,GPU_PROBE_HEIGHT=16,VideoTextureBridge=class{constructor(videoTexture){var _a;this.debug={path:`pending`,candidate:``,locked:!1,probe:``,updateCalls:0,skipNotReady:0,blitCount:0,rvfcCount:0,fails:0,targetSize:``,lastError:``},this.mode=`unknown`,this.device=null,this.broken=!1,this.disposed=!1,this.locked=!1,this.blacklist=new Map,this.probing=!1,this.nextProbeAt=0,this.probeInterval=300,this.consecutiveFails=0,this.failingSince=0,this.frameTexture=null,this.frameReady=!1,this.heldFrame=null,this.canvas=null,this.canvasContext=null,this.gpuTexture=null,this.externalTexture=null,this.externalReady=!1,this.width=0,this.height=0,this.frameDirty=!0,this.lastVideoTime=-1,this.videoFrameCallbackId=null,this.glProbe=null,this.glProbeFailed=!1,this.gpuProbe=null,this.probeCanvas=null,this.forced=!1,this.onSourceChange=()=>{this.forced||(this.blacklist.clear(),this.locked=!1,this.debug.locked=!1,this.probeInterval=300,this.nextProbeAt=0,this.consecutiveFails=0,this.frameDirty=!0)},this.videoTexture=videoTexture,this.current=(_a=CANDIDATE_ORDER.find(isAvailable))==null?`video`:_a,this.debug.candidate=this.current,this.scheduleVideoFrameCallback();let video=this.video;typeof(video==null?void 0:video.addEventListener)==`function`&&video.addEventListener(`loadstart`,this.onSourceChange)}get video(){return this.videoTexture.image}scheduleVideoFrameCallback(){let video=this.video;this.disposed||typeof(video==null?void 0:video.requestVideoFrameCallback)!=`function`||(this.videoFrameCallbackId=video.requestVideoFrameCallback(()=>{this.videoFrameCallbackId=null,this.frameDirty=!0,this.debug.rvfcCount++,this.scheduleVideoFrameCallback()}))}get texture(){var _a;if(this.broken||this.mode===`unknown`)return this.videoTexture;let wantsExternal=this.mode===`webgpu`&&(this.current===`videoFrame`||this.current===`video`),external=this.externalReady?this.externalTexture:null,frame=this.frameReady?this.frameTexture:null;return(_a=wantsExternal?external==null?frame:external:frame==null?external:frame)==null?getPlaceholder():_a}update(renderer){if(this.debug.updateCalls++,this.disposed||this.broken||!this.resolveMode(renderer))return;let video=this.video;if(!(video instanceof HTMLVideoElement))return;if(video.readyState<2||video.videoWidth===0||video.videoHeight===0){this.debug.skipNotReady++;return}let now=performance.now();if(!this.locked&&!this.probing&&now>=this.nextProbeAt&&this.startProbe(),!(!this.frameDirty&&(this.debug.rvfcCount>0||video.currentTime===this.lastVideoTime)))try{this.produce(this.current,video),this.frameDirty=!1,this.lastVideoTime=video.currentTime,this.consecutiveFails=0,this.debug.blitCount++}catch(error){this.onProduceFailed(error)}}forceCandidate(candidate){if(candidate===null){this.forced=!1,this.onSourceChange();return}this.forced=!0,this.current=candidate,this.locked=!0,this.debug.candidate=candidate,this.debug.locked=!0,this.frameDirty=!0,this.releaseProbeResources()}resolveMode(renderer){if(this.mode!==`unknown`)return!0;let backend=renderer==null?void 0:renderer.backend;if(!backend)return!1;if(backend.isWebGPUBackend===!0){if(!backend.device)return!1;this.device=backend.device,this.mode=`webgpu`}else this.mode=`webgl`;return this.debug.path=this.mode,this.ensureFrameTexture(),!0}ensureFrameTexture(){if(this.frameTexture)return;let source=this.videoTexture,texture=new THREE.VideoFrameTexture;texture.colorSpace=THREE.SRGBColorSpace,texture.generateMipmaps=!1,texture.minFilter=source.minFilter,texture.magFilter=source.magFilter,texture.wrapS=source.wrapS,texture.wrapT=source.wrapT,this.frameTexture=texture}produce(candidate,video){let webgpu=this.mode===`webgpu`;switch(candidate){case`videoFrame`:{let frame=createVideoFrame(video);if(webgpu)try{this.blit(frame,video)}finally{frame.close()}else this.setFrame(frame,frame);break}case`video`:webgpu?this.blit(video,video):this.setFrame(video,null);break;case`canvasFromVideoFrame`:{let frame=createVideoFrame(video);try{this.drawCanvas(frame,video)}finally{frame.close()}this.setFrame(this.canvas,null);break}case`canvasFromVideo`:this.drawCanvas(video,video),this.setFrame(this.canvas,null);break}}setFrame(image,owned){this.frameTexture.setFrame(image);let previous=this.heldFrame;this.heldFrame=owned,previous&&previous!==owned&&previous.close(),this.frameReady=!0}drawCanvas(source,video){let scale=Math.min(1,MAX_CANVAS_SIZE/Math.max(video.videoWidth,video.videoHeight)),width=Math.max(1,Math.floor(video.videoWidth*scale)),height=Math.max(1,Math.floor(video.videoHeight*scale));if(!this.canvas&&(this.canvas=document.createElement(`canvas`),this.canvasContext=this.canvas.getContext(`2d`,{alpha:!1}),!this.canvasContext))throw Error(`canvas 2d 上下文不可用`);this.canvas.width!==width&&(this.canvas.width=width),this.canvas.height!==height&&(this.canvas.height=height),this.canvasContext.drawImage(source,0,0,width,height)}isBlacklisted(candidate){let expiresAt=this.blacklist.get(candidate);return expiresAt===void 0?!1:performance.now()>=expiresAt?(this.blacklist.delete(candidate),!1):!0}onProduceFailed(error){var _a;let now=performance.now();if(this.consecutiveFails===0&&(this.failingSince=now),this.consecutiveFails++,this.debug.fails++,this.debug.lastError=String((_a=error==null?void 0:error.message)==null?error:_a),this.consecutiveFails<MAX_CONSECUTIVE_FAILS||now-this.failingSince<MIN_FAIL_DURATION_MS)return;console.warn(`[Five] 视频候选路径 ${this.current} 持续失败,暂时弃用`,error),this.blacklist.set(this.current,now+BLACKLIST_TTL_MS);let next=CANDIDATE_ORDER.find(c=>isAvailable(c)&&!this.isBlacklisted(c));this.consecutiveFails=0,next?(this.current=next,this.debug.candidate=next,this.locked=!1,this.debug.locked=!1,this.nextProbeAt=0,this.frameDirty=!0):(console.warn(`[Five] 视频所有候选路径均失败,回退为 VideoTexture 上传`),this.broken=!0,this.debug.path=`fallback`,this.releaseOutputs())}blit(source,video){this.ensureTarget(video.videoWidth,video.videoHeight);let device=this.device,{pipeline,bindGroupLayout,sampler}=getBlitPipeline(device),external=device.importExternalTexture({source}),bindGroup=device.createBindGroup({layout:bindGroupLayout,entries:[{binding:0,resource:external},{binding:1,resource:sampler}]}),encoder=device.createCommandEncoder({label:`five.videoBlit`}),pass=encoder.beginRenderPass({colorAttachments:[{view:this.gpuTexture.createView(),loadOp:`clear`,storeOp:`store`,clearValue:{r:0,g:0,b:0,a:1}}]});pass.setPipeline(pipeline),pass.setBindGroup(0,bindGroup),pass.draw(3),pass.end(),device.queue.submit([encoder.finish()]),this.externalReady=!0,this.debug.targetSize=`${this.width}x${this.height}`}ensureTarget(videoWidth,videoHeight){let device=this.device,maxSize=device.limits.maxTextureDimension2D,scale=Math.min(1,maxSize/Math.max(videoWidth,videoHeight)),width=Math.max(1,Math.floor(videoWidth*scale)),height=Math.max(1,Math.floor(videoHeight*scale));if(this.gpuTexture&&this.width===width&&this.height===height)return;let prevGPUTexture=this.gpuTexture,gpuTexture=device.createTexture({label:`five.videoBlit.target`,size:{width,height},format:INTERMEDIATE_FORMAT,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT});if(this.gpuTexture=gpuTexture,this.width=width,this.height=height,this.externalTexture)this.externalTexture.sourceTexture=gpuTexture,this.externalTexture.image={width,height},this.externalTexture.dispose();else{let texture=new THREE.ExternalTexture(gpuTexture);texture.colorSpace=THREE.SRGBColorSpace,texture.flipY=!1,texture.generateMipmaps=!1,texture.minFilter=THREE.LinearFilter,texture.magFilter=THREE.LinearFilter,texture.wrapS=THREE.ClampToEdgeWrapping,texture.wrapT=THREE.ClampToEdgeWrapping,texture.image={width,height},this.externalTexture=texture}prevGPUTexture==null||prevGPUTexture.destroy()}startProbe(){this.probing=!0,this.runProbe().catch(error=>{var _a;this.debug.lastError=String((_a=error==null?void 0:error.message)==null?error:_a)}).finally(()=>{this.probing=!1,this.nextProbeAt=performance.now()+this.probeInterval,this.probeInterval=Math.min(this.probeInterval*1.5,5e3)})}runProbe(){return __awaiter(this,void 0,void 0,function*(){let results=[],chosen=null;for(let candidate of CANDIDATE_ORDER){let label=CANDIDATE_SHORT[candidate];if(this.disposed)return;if(this.isBlacklisted(candidate)||!isAvailable(candidate)){results.push(`${label}:n/a`);continue}let brightness;try{brightness=yield this.probeCandidate(candidate)}catch(_a){brightness=-1}if(results.push(`${label}:${brightness===null?`?`:brightness}`),brightness===null||brightness>=BRIGHT_THRESHOLD){chosen=candidate;break}}this.debug.probe=results.join(` `),chosen&&this.select(chosen)})}select(candidate){this.current=candidate,this.locked=!0,this.debug.candidate=candidate,this.debug.locked=!0,this.frameDirty=!0,this.releaseProbeResources()}probeCandidate(candidate){return __awaiter(this,void 0,void 0,function*(){let video=this.video;if(!(video instanceof HTMLVideoElement)||video.readyState<2)return-1;switch(candidate){case`canvasFromVideoFrame`:return this.probe2d(video,!0);case`canvasFromVideo`:return this.probe2d(video,!1);default:return this.mode===`webgpu`?this.probeGPU(video,candidate===`videoFrame`):this.probeGL(video,candidate===`videoFrame`)}})}probe2d(video,useFrame){if(!this.probeCanvas){let canvas=document.createElement(`canvas`);canvas.width=canvas.height=GL_PROBE_SIZE;let context=canvas.getContext(`2d`,{willReadFrequently:!0});if(!context)return-1;this.probeCanvas=context}let frame=useFrame?createVideoFrame(video):null;try{return this.probeCanvas.drawImage(frame==null?video:frame,0,0,GL_PROBE_SIZE,GL_PROBE_SIZE),maxChannel(this.probeCanvas.getImageData(0,0,GL_PROBE_SIZE,GL_PROBE_SIZE).data)}finally{frame==null||frame.close()}}probeGL(video,useFrame){!this.glProbe&&!this.glProbeFailed&&(this.glProbe=createGLProbe(),this.glProbeFailed=this.glProbe===null);let probe=this.glProbe;if(!probe)return null;let{gl}=probe,frame=useFrame?createVideoFrame(video):null;try{return gl.getError(),gl.viewport(0,0,GL_PROBE_SIZE,GL_PROBE_SIZE),gl.bindTexture(gl.TEXTURE_2D,probe.texture),gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,frame==null?video:frame),gl.getError()===gl.NO_ERROR?(gl.useProgram(probe.program),gl.drawArrays(gl.TRIANGLES,0,3),gl.readPixels(0,0,GL_PROBE_SIZE,GL_PROBE_SIZE,gl.RGBA,gl.UNSIGNED_BYTE,probe.pixels),maxChannel(probe.pixels)):-1}finally{frame==null||frame.close()}}probeGPU(video,useFrame){return __awaiter(this,void 0,void 0,function*(){let device=this.device,{pipeline,bindGroupLayout,sampler}=getBlitPipeline(device);this.gpuProbe||(this.gpuProbe={texture:device.createTexture({label:`five.videoProbe.target`,size:{width:GPU_PROBE_WIDTH,height:GPU_PROBE_HEIGHT},format:INTERMEDIATE_FORMAT,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC}),buffer:device.createBuffer({label:`five.videoProbe.readback`,size:GPU_PROBE_WIDTH*4*GPU_PROBE_HEIGHT,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ})});let probe=this.gpuProbe;device.pushErrorScope(`validation`);let encodeError=null,frame=useFrame?createVideoFrame(video):null;try{let external=device.importExternalTexture({source:frame==null?video:frame}),bindGroup=device.createBindGroup({layout:bindGroupLayout,entries:[{binding:0,resource:external},{binding:1,resource:sampler}]}),encoder=device.createCommandEncoder({label:`five.videoProbe`}),pass=encoder.beginRenderPass({colorAttachments:[{view:probe.texture.createView(),loadOp:`clear`,storeOp:`store`,clearValue:{r:0,g:0,b:0,a:1}}]});pass.setPipeline(pipeline),pass.setBindGroup(0,bindGroup),pass.draw(3),pass.end(),encoder.copyTextureToBuffer({texture:probe.texture},{buffer:probe.buffer,bytesPerRow:GPU_PROBE_WIDTH*4},{width:GPU_PROBE_WIDTH,height:GPU_PROBE_HEIGHT}),device.queue.submit([encoder.finish()])}catch(error){encodeError=error}finally{frame==null||frame.close()}let scopeError=yield device.popErrorScope();if(encodeError||scopeError)return-1;yield probe.buffer.mapAsync(GPUMapMode.READ);let brightness=maxChannel(new Uint8Array(probe.buffer.getMappedRange()));return probe.buffer.unmap(),brightness})}releaseProbeResources(){this.glProbe&&(disposeGLProbe(this.glProbe),this.glProbe=null),this.glProbeFailed=!1,this.probeCanvas=null,this.gpuProbe&&(this.gpuProbe.texture.destroy(),this.gpuProbe.buffer.destroy(),this.gpuProbe=null)}releaseOutputs(){var _a,_b,_c,_d;(_a=this.heldFrame)==null||_a.close(),this.heldFrame=null,(_b=this.frameTexture)==null||_b.dispose(),this.frameTexture=null,this.frameReady=!1,(_c=this.externalTexture)==null||_c.dispose(),this.externalTexture=null,this.externalReady=!1,(_d=this.gpuTexture)==null||_d.destroy(),this.gpuTexture=null,this.width=this.height=0,this.canvas=null,this.canvasContext=null}dispose(){if(this.disposed)return;this.disposed=!0;let video=this.video;this.videoFrameCallbackId!==null&&typeof(video==null?void 0:video.cancelVideoFrameCallback)==`function`&&video.cancelVideoFrameCallback(this.videoFrameCallbackId),this.videoFrameCallbackId=null,typeof(video==null?void 0:video.removeEventListener)==`function`&&video.removeEventListener(`loadstart`,this.onSourceChange),this.releaseOutputs(),this.releaseProbeResources()}},bridges=new WeakMap;function getVideoTextureBridge(videoTexture){let bridge=bridges.get(videoTexture);if(!bridge){let created=new VideoTextureBridge(videoTexture);bridge=created,bridges.set(videoTexture,created);let onDispose=()=>{videoTexture.removeEventListener(`dispose`,onDispose),bridges.get(videoTexture)===created&&bridges.delete(videoTexture),created.dispose()};videoTexture.addEventListener(`dispose`,onDispose)}return bridge}var window_=window,_requestAnimationFrame=window_.requestAnimationFrame||window_.mozRequestAnimationFrame||window_.webkitRequestAnimationFrame||window_.msRequestAnimationFrame||(fn=>setTimeout(fn,16)),start=typeof performance<`u`&&performance.timing!==void 0?performance.timing.navigationStart:Date.now(),now=typeof performance<`u`?(()=>start+performance.now()):(()=>Date.now());function imageReady(image,callback){image.naturalWidth>0&&_requestAnimationFrame(()=>callback());let onLoad=()=>callback();return image.addEventListener(`load`,onLoad,!1),()=>image.removeEventListener(`load`,onLoad,!1)}function videoReady(video,callback){let lastUpdateTime=now(),looping=!1,loop=()=>{looping=!0,callback(),now()-lastUpdateTime<3e3?_requestAnimationFrame(loop):looping=!1},onUpdate=()=>{lastUpdateTime=now(),looping===!1&&loop()};return video.addEventListener(`timeupdate`,onUpdate,!1),()=>{video.removeEventListener(`timeupdate`,onUpdate,!1),looping=!1}}function injectDispose(texture,dispose){let _dispose=texture.dispose;texture.dispose=()=>{dispose(),_dispose.call(texture)}}var Sticker=class extends THREE.Mesh{static get version(){return`1.0.0-alpha.15`}constructor(width,height,resource){let material=new THREE.MeshBasicMaterial;if(super(geometry,material),this._sourceTexture=null,this._needsRender=!1,this.scale.set(width,height,1),typeof resource==`string`){material.transparent=/\.png$/.test(resource);let image=new Image;image.src=resource,image.crossOrigin=``,resource=image}if(resource instanceof HTMLImageElement){let texture=material.map=new THREE.Texture;texture.wrapS=THREE.ClampToEdgeWrapping,texture.wrapT=THREE.ClampToEdgeWrapping,texture.minFilter=THREE.LinearFilter,texture.colorSpace=THREE.SRGBColorSpace,injectDispose(texture,imageReady(resource,()=>{texture.image=resource,texture.needsUpdate=!0,this._needsRender=!0}))}else if(resource instanceof HTMLCanvasElement)material.map=new THREE.CanvasTexture(resource);else if(resource instanceof HTMLVideoElement){let texture=material.map=new THREE.VideoTexture(resource);texture.wrapS=THREE.ClampToEdgeWrapping,texture.wrapT=THREE.ClampToEdgeWrapping,texture.minFilter=THREE.LinearFilter,texture.colorSpace=THREE.SRGBColorSpace,injectDispose(texture,videoReady(resource,()=>{this._needsRender=!0}));let bridge=getVideoTextureBridge(texture);this.onBeforeRender=renderer=>{bridge.update(renderer);let map=bridge.texture;material.map!==map&&(material.map=map)}}this._sourceTexture=material.map}get needsRender(){return this._needsRender}set needsRender(value){this._needsRender=value,value===!0&&this._sourceTexture&&(this._sourceTexture.needsUpdate=!0)}setSize(width,height){this.scale.set(width,height,1),this._needsRender=!0}setTransparent(transparent){this.material.transparent=transparent,this._needsRender=!0}locationWithIntersection(intersection,offset=.005){let{point,face}=intersection;this.position.copy(point),face&&(this.position.add(face.normal.clone().setLength(offset)),this.lookAt(point.clone().add(face.normal))),this._needsRender=!0}dispose(){var _a;(_a=this._sourceTexture)==null||_a.dispose(),this.material.dispose()}};export{Sticker};
|