@realsee/five-webgpu 1.0.0-alpha.13 → 1.0.0-alpha.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (374) hide show
  1. package/_virtual/_rolldown/runtime.js +3 -3
  2. package/docs/assets/hierarchy.js +1 -1
  3. package/docs/assets/navigation.js +1 -1
  4. package/docs/assets/search.js +1 -1
  5. package/docs/classes/index.AdaptiveLuminancePass.html +1 -1
  6. package/docs/classes/index.BoundingMesh.html +1 -1
  7. package/docs/classes/index.Camera.html +1 -1
  8. package/docs/classes/index.EyeDomeLightingPass.html +1 -1
  9. package/docs/classes/index.Five.html +65 -64
  10. package/docs/classes/index.FivePass.html +1 -1
  11. package/docs/classes/index.FiveRenderer.html +4 -4
  12. package/docs/classes/index.FlowingFireworks3DPass.html +1 -1
  13. package/docs/classes/index.FlowingLight2DPass.html +1 -1
  14. package/docs/classes/index.FlowingLight3DPass.html +1 -1
  15. package/docs/classes/index.GaussianBlurPass.html +1 -1
  16. package/docs/classes/index.InternalWebGPURenderer.html +4 -4
  17. package/docs/classes/index.Model.html +1 -1
  18. package/docs/classes/index.ModelScene.html +1 -1
  19. package/docs/classes/index.NetworkSubscribe.html +1 -1
  20. package/docs/classes/index.PBMCustomNode.html +1 -1
  21. package/docs/classes/index.PBMGaussianSplattingNodeMaterial.html +1 -1
  22. package/docs/classes/index.PBMGaussianSplattingObject.html +1 -1
  23. package/docs/classes/index.PBMGaussianSplattingRenderMesh.html +1 -1
  24. package/docs/classes/index.PBMGroup.html +1 -1
  25. package/docs/classes/index.PBMMesh.html +1 -1
  26. package/docs/classes/index.PBMMeshBasicMaterial.html +1 -1
  27. package/docs/classes/index.PBMMeshBasicNodeMaterial.html +1 -1
  28. package/docs/classes/index.PBMMeshPanoOnlyMaterial.html +1 -1
  29. package/docs/classes/index.PBMMeshPanoOnlyNodeMaterial.html +1 -1
  30. package/docs/classes/index.PBMMeshPhongMaterial.html +1 -1
  31. package/docs/classes/index.PBMMeshPhongNodeMaterial.html +1 -1
  32. package/docs/classes/index.PBMMeshPhysicalMaterial.html +1 -1
  33. package/docs/classes/index.PBMMeshPhysicalNodeMaterial.html +1 -1
  34. package/docs/classes/index.PBMPanoFilter.html +1 -1
  35. package/docs/classes/index.PBMPointCloud.html +1 -1
  36. package/docs/classes/index.PBMPointCloudMaterial.html +1 -1
  37. package/docs/classes/index.PBMSkinnedMesh.html +1 -1
  38. package/docs/classes/index.PBMUpdateable.html +1 -1
  39. package/docs/classes/index.PanoCircleMesh.html +1 -1
  40. package/docs/classes/index.PanoCircleMeshCustom.html +1 -1
  41. package/docs/classes/index.PanoCircleMeshSolid.html +1 -1
  42. package/docs/classes/index.Parameter.html +1 -1
  43. package/docs/classes/index.Scene.html +1 -1
  44. package/docs/classes/index.Subscribe.html +1 -1
  45. package/docs/classes/index.Tile3D.html +1 -1
  46. package/docs/classes/index.TileNode.html +1 -1
  47. package/docs/classes/index.TrajectoryNode.html +1 -1
  48. package/docs/classes/index.Work.html +15 -22
  49. package/docs/classes/index.WorkResolvedObserver.html +22 -22
  50. package/docs/functions/index.createWorks.html +1 -1
  51. package/docs/functions/index.parseWork.html +1 -1
  52. package/docs/hierarchy.html +1 -1
  53. package/docs/interfaces/index.AddableObject.html +1 -1
  54. package/docs/interfaces/index.AjaxOptions.html +1 -1
  55. package/docs/interfaces/index.BaseEvent.html +1 -1
  56. package/docs/interfaces/index.Clock.html +1 -1
  57. package/docs/interfaces/index.EventCallback.html +3 -3
  58. package/docs/interfaces/index.GestureEvent.html +1 -1
  59. package/docs/interfaces/index.IPBMMaterial.html +1 -1
  60. package/docs/interfaces/index.ImageOptions.html +1 -1
  61. package/docs/interfaces/index.IntersectEvent.html +1 -1
  62. package/docs/interfaces/index.IntersectMesh.html +1 -1
  63. package/docs/interfaces/index.IntersectMeshInterface.html +1 -1
  64. package/docs/interfaces/index.Intersection.html +1 -1
  65. package/docs/interfaces/index.LooseWorkWithExtrinsics.html +8 -8
  66. package/docs/interfaces/index.ModeChangeEvent.html +1 -1
  67. package/docs/interfaces/index.ModelControllerCustomInitArgs.html +1 -1
  68. package/docs/interfaces/index.ModelEvent.html +1 -1
  69. package/docs/interfaces/index.ModelSceneEvent.html +1 -1
  70. package/docs/interfaces/index.ModelTileEvent.html +1 -1
  71. package/docs/interfaces/index.MovePanoOptions.html +1 -1
  72. package/docs/interfaces/index.NetworkAbortError.html +1 -1
  73. package/docs/interfaces/index.NetworkFirbiddenError.html +1 -1
  74. package/docs/interfaces/index.NetworkOptions.html +1 -1
  75. package/docs/interfaces/index.NetworkProxyError.html +1 -1
  76. package/docs/interfaces/index.NetworkResourceEvent.html +1 -1
  77. package/docs/interfaces/index.NetworkResponseError.html +1 -1
  78. package/docs/interfaces/index.NetworkTimeoutError.html +1 -1
  79. package/docs/interfaces/index.ObjectEvent.html +1 -1
  80. package/docs/interfaces/index.PanoCircleMeshInterface.html +1 -1
  81. package/docs/interfaces/index.PanoEvent.html +1 -1
  82. package/docs/interfaces/index.PanoPrepareEvent.html +1 -1
  83. package/docs/interfaces/index.PanoTextureEvent.html +1 -1
  84. package/docs/interfaces/index.PanoramaControllerCustomInitArgs.html +1 -1
  85. package/docs/interfaces/index.PanoramaLikeControllerCustomInitArgs.html +1 -1
  86. package/docs/interfaces/index.ParameterMaterialValue.html +1 -1
  87. package/docs/interfaces/index.ParameterTilesetValue.html +1 -1
  88. package/docs/interfaces/index.ParameterValue.html +1 -1
  89. package/docs/interfaces/index.Pose.html +1 -1
  90. package/docs/interfaces/index.RenderEvent.html +1 -1
  91. package/docs/interfaces/index.ResolvedParameterValue.html +1 -1
  92. package/docs/interfaces/index.State.html +1 -1
  93. package/docs/interfaces/index.StateEvent.html +1 -1
  94. package/docs/interfaces/index.TextureOptions.html +1 -1
  95. package/docs/interfaces/index.TopviewControllerCustomInitArgs.html +1 -1
  96. package/docs/interfaces/index.VRPanoramaControllerCustomInitArgs.html +1 -1
  97. package/docs/interfaces/index.ViewLayer.html +1 -1
  98. package/docs/interfaces/index.WorkCubeHdrGainmapImage.html +2 -2
  99. package/docs/interfaces/index.WorkCubeImage.html +2 -2
  100. package/docs/interfaces/index.WorkImage.html +5 -5
  101. package/docs/interfaces/index.WorkInitial.html +8 -8
  102. package/docs/interfaces/index.WorkInitialJson.html +2 -2
  103. package/docs/interfaces/index.WorkJson.html +2 -4
  104. package/docs/interfaces/index.WorkModel.html +8 -8
  105. package/docs/interfaces/index.WorkModelJson.html +2 -2
  106. package/docs/interfaces/index.WorkModelLayer.html +6 -6
  107. package/docs/interfaces/index.WorkModelLayerJson.html +2 -2
  108. package/docs/interfaces/index.WorkObserver.html +23 -23
  109. package/docs/interfaces/index.WorkObserverJson.html +2 -2
  110. package/docs/interfaces/index.WorkPanoramaJson.html +2 -2
  111. package/docs/interfaces/index.WorkPanoramasJson.html +2 -2
  112. package/docs/interfaces/index.WorkTile.html +5 -5
  113. package/docs/interfaces/index.WorkVideo.html +4 -4
  114. package/docs/interfaces/index.WorksEvent.html +1 -1
  115. package/docs/interfaces/index.XRControllerEvent.html +1 -1
  116. package/docs/interfaces/index.XRGestureEvent.html +2 -2
  117. package/docs/interfaces/index.XRPanoramaControllerCustomInitArgs.html +1 -1
  118. package/docs/interfaces/index.XRSessionEvent.html +1 -1
  119. package/docs/modules/index.html +1 -1
  120. package/docs/types/index.LegacyEventType.html +3 -3
  121. package/docs/types/index.OutputTextureDataType.html +1 -1
  122. package/docs/types/index.ParseOptions.html +8 -8
  123. package/docs/types/index.PointCloudTransparencyMode.html +2 -0
  124. package/docs/types/index.Works.html +1 -1
  125. package/docs/variables/index.loadAt3d.html +2 -0
  126. package/docs/variables/index.loadDome.html +2 -0
  127. package/docs/variables/index.loadDomez.html +2 -0
  128. package/docs/variables/index.loadGltf.html +2 -0
  129. package/docs/variables/index.loadPbm.html +2 -0
  130. package/docs/variables/index.loadPly.html +2 -0
  131. package/five/application/five.d.ts +3 -2
  132. package/five/chunks/at3d.js +338 -0
  133. package/five/chunks/at3d.mjs +338 -0
  134. package/five/chunks/dome.js +338 -0
  135. package/five/chunks/dome.mjs +338 -0
  136. package/five/chunks/domez.js +338 -0
  137. package/five/chunks/domez.mjs +338 -0
  138. package/five/chunks/fbx.js +338 -0
  139. package/five/chunks/fbx.mjs +338 -0
  140. package/five/chunks/fflate.js +338 -0
  141. package/five/chunks/fflate.mjs +338 -0
  142. package/five/chunks/glTF-helpers.js +804 -0
  143. package/five/chunks/glTF-helpers.mjs +804 -0
  144. package/five/chunks/gltf.js +338 -0
  145. package/five/chunks/gltf.mjs +338 -0
  146. package/five/chunks/imageBitmap.js +338 -0
  147. package/five/chunks/imageBitmap.mjs +338 -0
  148. package/five/chunks/imageSupport.js +338 -0
  149. package/five/chunks/imageSupport.mjs +338 -0
  150. package/five/chunks/lzma.js +383 -0
  151. package/five/chunks/lzma.mjs +383 -0
  152. package/five/chunks/memoryUsage.js +339 -0
  153. package/five/chunks/memoryUsage.mjs +339 -0
  154. package/five/chunks/minimal.js +338 -0
  155. package/five/chunks/minimal.mjs +338 -0
  156. package/five/chunks/pbm.js +338 -0
  157. package/five/chunks/pbm.mjs +338 -0
  158. package/five/chunks/pbmGaussianSplattingObject.js +338 -0
  159. package/five/chunks/pbmGaussianSplattingObject.mjs +338 -0
  160. package/five/chunks/pbmMeshMaterial.js +338 -0
  161. package/five/chunks/pbmMeshMaterial.mjs +338 -0
  162. package/five/chunks/pick.js +338 -0
  163. package/five/chunks/pick.mjs +338 -0
  164. package/five/chunks/ply.js +339 -0
  165. package/five/chunks/ply.mjs +339 -0
  166. package/five/chunks/spz.js +364 -0
  167. package/five/chunks/spz.mjs +364 -0
  168. package/five/core/webglBlendEquationFix.d.ts +41 -0
  169. package/five/index.d.ts +0 -1
  170. package/five/index.js +49 -626
  171. package/five/index.mjs +229 -32052
  172. package/five/model/index.d.ts +18 -6
  173. package/five/model/loaders/glTF-helpers/extensions/KHR_gaussian_splatting_compression_spz.d.ts +1 -1
  174. package/five/model/loaders/glTF-helpers/extensions/KHR_gaussian_splatting_compression_spz_2.d.ts +1 -1
  175. package/five/model/loaders/spz.d.ts +1 -2
  176. package/five/model/loaders/spz.worker.d.ts +37 -0
  177. package/five/renderer/five-renderer.d.ts +1 -1
  178. package/five/renderer/index.d.ts +1 -1
  179. package/five/renderer/postprocessing/passes/pass.js +3 -3
  180. package/five/renderer/postprocessing/passes/pass.mjs +3 -3
  181. package/five/renderer/tools/full-screen-quad.js +3 -3
  182. package/five/renderer/tools/full-screen-quad.mjs +3 -3
  183. package/five/texture/videoTextureBridge.d.ts +124 -15
  184. package/five/thirdparty/sha256.d.ts +149 -0
  185. package/five/utils/calculateThreeMouse.js +3 -3
  186. package/five/utils/calculateThreeMouse.mjs +3 -3
  187. package/five/utils/distance.js +3 -3
  188. package/five/utils/distance.mjs +3 -3
  189. package/five/utils/isNil.js +3 -3
  190. package/five/utils/isNil.mjs +3 -3
  191. package/five/utils/memoryUsage.d.ts +1 -1
  192. package/five/utils/uuid.js +3 -3
  193. package/five/utils/uuid.mjs +3 -3
  194. package/five/work/work.d.ts +0 -7
  195. package/five/work/workJsonType.d.ts +0 -2
  196. package/gltf-loader/index.js +3 -3
  197. package/gltf-loader/index.mjs +3 -50
  198. package/line/index.js +3 -3
  199. package/line/index.mjs +3 -88
  200. package/package.json +1 -1
  201. package/plugins/BackgroundPlugin/Controller.js +4 -4
  202. package/plugins/BackgroundPlugin/Controller.mjs +4 -4
  203. package/plugins/BackgroundPlugin/index.js +3 -3
  204. package/plugins/BackgroundPlugin/index.mjs +3 -3
  205. package/plugins/BasePlugin/index.js +3 -3
  206. package/plugins/BasePlugin/index.mjs +3 -3
  207. package/plugins/CSS2DPlugin/Controller.js +3 -3
  208. package/plugins/CSS2DPlugin/Controller.mjs +3 -3
  209. package/plugins/CSS2DPlugin/index.js +3 -3
  210. package/plugins/CSS2DPlugin/index.mjs +3 -3
  211. package/plugins/CSS2DPlugin/style.css_raw.js +4 -4
  212. package/plugins/CSS2DPlugin/style.css_raw.mjs +4 -4
  213. package/plugins/CSS3DPlugin/Controller.js +3 -3
  214. package/plugins/CSS3DPlugin/Controller.mjs +3 -3
  215. package/plugins/CSS3DPlugin/index.js +3 -3
  216. package/plugins/CSS3DPlugin/index.mjs +3 -3
  217. package/plugins/CSS3DPlugin/style.css_raw.js +4 -4
  218. package/plugins/CSS3DPlugin/style.css_raw.mjs +4 -4
  219. package/plugins/FloorplanPlugin/Controller.js +3 -3
  220. package/plugins/FloorplanPlugin/Controller.mjs +3 -3
  221. package/plugins/FloorplanPlugin/index.js +3 -3
  222. package/plugins/FloorplanPlugin/index.mjs +3 -3
  223. package/plugins/FloorplanPlugin/render/assets.js +3 -3
  224. package/plugins/FloorplanPlugin/render/assets.mjs +3 -3
  225. package/plugins/FloorplanPlugin/render/index.js +3 -3
  226. package/plugins/FloorplanPlugin/render/index.mjs +3 -3
  227. package/plugins/FloorplanPlugin/render/isPointInPolygon.js +3 -3
  228. package/plugins/FloorplanPlugin/render/isPointInPolygon.mjs +3 -3
  229. package/plugins/FloorplanPlugin/render/renderFloor.js +3 -3
  230. package/plugins/FloorplanPlugin/render/renderFloor.mjs +3 -3
  231. package/plugins/FloorplanPlugin/render/roomLabelVisibility.js +3 -3
  232. package/plugins/FloorplanPlugin/render/roomLabelVisibility.mjs +3 -3
  233. package/plugins/FloorplanPlugin/render/style.css_raw.js +4 -4
  234. package/plugins/FloorplanPlugin/render/style.css_raw.mjs +4 -4
  235. package/plugins/FloorplanPlugin/utils/changeMode.js +3 -3
  236. package/plugins/FloorplanPlugin/utils/changeMode.mjs +3 -3
  237. package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.js +3 -3
  238. package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.mjs +3 -3
  239. package/plugins/FloorplanPlugin/utils/correctFiveState.js +3 -3
  240. package/plugins/FloorplanPlugin/utils/correctFiveState.mjs +3 -3
  241. package/plugins/FloorplanPlugin/utils/equal.js +3 -3
  242. package/plugins/FloorplanPlugin/utils/equal.mjs +3 -3
  243. package/plugins/FloorplanPlugin/utils/filter.js +3 -3
  244. package/plugins/FloorplanPlugin/utils/filter.mjs +3 -3
  245. package/plugins/FloorplanPlugin/utils/fiveModelLoad.js +3 -3
  246. package/plugins/FloorplanPlugin/utils/fiveModelLoad.mjs +3 -3
  247. package/plugins/FloorplanPlugin/utils/formatData.js +3 -3
  248. package/plugins/FloorplanPlugin/utils/formatData.mjs +3 -3
  249. package/plugins/FloorplanPlugin/utils/formatFloorplanJson.js +3 -3
  250. package/plugins/FloorplanPlugin/utils/formatFloorplanJson.mjs +3 -3
  251. package/plugins/FloorplanPlugin/utils/formatPosition.js +3 -3
  252. package/plugins/FloorplanPlugin/utils/formatPosition.mjs +3 -3
  253. package/plugins/FloorplanPlugin/utils/getDistanceFromModel.js +3 -3
  254. package/plugins/FloorplanPlugin/utils/getDistanceFromModel.mjs +3 -3
  255. package/plugins/FloorplanPlugin/utils/getPxmm.js +3 -3
  256. package/plugins/FloorplanPlugin/utils/getPxmm.mjs +3 -3
  257. package/plugins/FloorplanPlugin/utils/isTruelyObject.js +3 -3
  258. package/plugins/FloorplanPlugin/utils/isTruelyObject.mjs +3 -3
  259. package/plugins/FloorplanPlugin/utils/nearlyEqual.js +3 -3
  260. package/plugins/FloorplanPlugin/utils/nearlyEqual.mjs +3 -3
  261. package/plugins/FloorplanPlugin/utils/polylabel.js +3 -3
  262. package/plugins/FloorplanPlugin/utils/polylabel.mjs +3 -3
  263. package/plugins/FloorplanPlugin/utils/to.js +3 -3
  264. package/plugins/FloorplanPlugin/utils/to.mjs +3 -3
  265. package/plugins/GaussianSplattingEntranceAnimationPlugin/Controller.js +3 -3
  266. package/plugins/GaussianSplattingEntranceAnimationPlugin/Controller.mjs +3 -3
  267. package/plugins/GaussianSplattingEntranceAnimationPlugin/index.js +3 -3
  268. package/plugins/GaussianSplattingEntranceAnimationPlugin/index.mjs +3 -3
  269. package/plugins/Object3DHelperPlugin/Controller.js +3 -3
  270. package/plugins/Object3DHelperPlugin/Controller.mjs +3 -3
  271. package/plugins/Object3DHelperPlugin/Controllers/BaseController.js +3 -3
  272. package/plugins/Object3DHelperPlugin/Controllers/BaseController.mjs +3 -3
  273. package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.js +3 -3
  274. package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.mjs +3 -3
  275. package/plugins/Object3DHelperPlugin/Controllers/MoveController.js +3 -3
  276. package/plugins/Object3DHelperPlugin/Controllers/MoveController.mjs +3 -3
  277. package/plugins/Object3DHelperPlugin/Controllers/RotateController.js +3 -3
  278. package/plugins/Object3DHelperPlugin/Controllers/RotateController.mjs +3 -3
  279. package/plugins/Object3DHelperPlugin/FiveControllerWrapper.js +3 -3
  280. package/plugins/Object3DHelperPlugin/FiveControllerWrapper.mjs +3 -3
  281. package/plugins/Object3DHelperPlugin/Helper/BaseHelper.js +3 -3
  282. package/plugins/Object3DHelperPlugin/Helper/BaseHelper.mjs +3 -3
  283. package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.js +3 -3
  284. package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.mjs +3 -3
  285. package/plugins/Object3DHelperPlugin/Helper/MoveHelper.js +3 -3
  286. package/plugins/Object3DHelperPlugin/Helper/MoveHelper.mjs +3 -3
  287. package/plugins/Object3DHelperPlugin/Helper/RotateHelper.js +3 -3
  288. package/plugins/Object3DHelperPlugin/Helper/RotateHelper.mjs +3 -3
  289. package/plugins/Object3DHelperPlugin/constant.js +3 -3
  290. package/plugins/Object3DHelperPlugin/constant.mjs +3 -3
  291. package/plugins/Object3DHelperPlugin/index.js +3 -3
  292. package/plugins/Object3DHelperPlugin/index.mjs +3 -3
  293. package/plugins/Object3DHelperPlugin/utils/ArrowGroup.js +3 -3
  294. package/plugins/Object3DHelperPlugin/utils/ArrowGroup.mjs +3 -3
  295. package/plugins/Object3DHelperPlugin/utils/CenterHandle.js +3 -3
  296. package/plugins/Object3DHelperPlugin/utils/CenterHandle.mjs +3 -3
  297. package/plugins/Object3DHelperPlugin/utils/PlaneHandle.js +3 -3
  298. package/plugins/Object3DHelperPlugin/utils/PlaneHandle.mjs +3 -3
  299. package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.js +3 -3
  300. package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.mjs +3 -3
  301. package/plugins/Object3DHelperPlugin/utils/cameraHooks.js +3 -3
  302. package/plugins/Object3DHelperPlugin/utils/cameraHooks.mjs +3 -3
  303. package/plugins/Object3DHelperPlugin/utils/direction.js +3 -3
  304. package/plugins/Object3DHelperPlugin/utils/direction.mjs +3 -3
  305. package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.js +3 -3
  306. package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.mjs +3 -3
  307. package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.js +3 -3
  308. package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.mjs +3 -3
  309. package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.js +3 -3
  310. package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.mjs +3 -3
  311. package/plugins/Object3DHelperPlugin/utils/solidGuide.js +3 -3
  312. package/plugins/Object3DHelperPlugin/utils/solidGuide.mjs +3 -3
  313. package/plugins/Object3DHelperPlugin/utils/tipsDom.js +3 -3
  314. package/plugins/Object3DHelperPlugin/utils/tipsDom.mjs +3 -3
  315. package/plugins/PanoAnimePlugin/Controller.js +3 -3
  316. package/plugins/PanoAnimePlugin/Controller.mjs +3 -3
  317. package/plugins/PanoAnimePlugin/index.js +3 -3
  318. package/plugins/PanoAnimePlugin/index.mjs +3 -3
  319. package/plugins/WordPassPlugin/Controller.js +3 -3
  320. package/plugins/WordPassPlugin/Controller.mjs +3 -3
  321. package/plugins/WordPassPlugin/hersheyFont.js +3 -3
  322. package/plugins/WordPassPlugin/hersheyFont.mjs +3 -3
  323. package/plugins/WordPassPlugin/index.js +3 -3
  324. package/plugins/WordPassPlugin/index.mjs +3 -3
  325. package/plugins/WordPassPlugin/textToStrokeOrderStrokes.js +4 -4
  326. package/plugins/WordPassPlugin/textToStrokeOrderStrokes.mjs +4 -4
  327. package/plugins/WordPassPlugin/word-pass.js +3 -3
  328. package/plugins/WordPassPlugin/word-pass.mjs +3 -3
  329. package/plugins/index.js +3 -3
  330. package/plugins/index.mjs +3 -3
  331. package/plugins/thirdParty/CSS2DRenderer.js +3 -3
  332. package/plugins/thirdParty/CSS2DRenderer.mjs +3 -3
  333. package/plugins/thirdParty/CSS3DRenderer.js +3 -3
  334. package/plugins/thirdParty/CSS3DRenderer.mjs +3 -3
  335. package/plugins/thirdParty/doctorstrange-model.js +75 -75
  336. package/plugins/thirdParty/doctorstrange-model.mjs +75 -75
  337. package/plugins/thirdParty/domevents.js +3 -3
  338. package/plugins/thirdParty/domevents.mjs +3 -3
  339. package/plugins/utils/absoluteUrl.js +3 -3
  340. package/plugins/utils/absoluteUrl.mjs +3 -3
  341. package/plugins/utils/calculatePath.js +3 -3
  342. package/plugins/utils/calculatePath.mjs +3 -3
  343. package/plugins/utils/clamp.js +3 -3
  344. package/plugins/utils/clamp.mjs +3 -3
  345. package/plugins/utils/uuid.js +3 -3
  346. package/plugins/utils/uuid.mjs +3 -3
  347. package/react/hooks/useFiveModelReadyState.d.ts +1 -1
  348. package/react/index.js +3 -3
  349. package/react/index.mjs +3 -644
  350. package/sticker/index.js +13 -4
  351. package/sticker/index.mjs +43 -260
  352. package/umd/five-gltf-loader.js +3 -3
  353. package/umd/five-line.js +3 -3
  354. package/umd/five-plugins.js +2 -2
  355. package/umd/five-react.js +2 -2
  356. package/umd/five-sticker.js +13 -4
  357. package/umd/five-vfx.js +2 -2
  358. package/umd/five.js +154 -192
  359. package/vfx/index.js +3 -3
  360. package/vfx/index.mjs +3 -486
  361. package/work-downloader/index.js +3 -3
  362. package/work-downloader/index.mjs +3 -315
  363. package/docs/functions/index.loadAt3d.html +0 -1
  364. package/docs/functions/index.loadDome.html +0 -1
  365. package/docs/functions/index.loadDomez.html +0 -1
  366. package/docs/functions/index.loadGltf.html +0 -1
  367. package/docs/functions/index.loadPbm.html +0 -1
  368. package/docs/functions/index.loadPly.html +0 -10
  369. package/five/certificates/hardware.d.ts +0 -1
  370. package/five/thirdparty/jsrsasign.d.ts +0 -753
  371. package/five/work/_ALLOW_HOST.d.ts +0 -2
  372. package/five/work/keychain.d.ts +0 -5
  373. package/five/work/verify.d.ts +0 -7
  374. 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/10/30
5
- * Version: 1.0.0-alpha.13
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
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 e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require("three/webgpu");c=s(c,1);var l=new Float32Array([-.5,-.5,0,.5,-.5,0,-.5,.5,0,.5,.5,0]),u=new Float32Array([0,0,1,0,0,1,1,1]),d=new Uint8Array([0,1,2,1,3,2]),f=new c.BufferGeometry;f.setAttribute(`position`,new c.BufferAttribute(l,3)),f.setAttribute(`uv`,new c.BufferAttribute(u,2)),f.setIndex(new c.BufferAttribute(d,1));var p=`rgba8unorm-srgb`,m=`
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
- `,h=new WeakMap;function g(e){let t=h.get(e);if(!t){let n=e.createShaderModule({label:`five.videoBlit`,code:m});t={pipeline:e.createRenderPipeline({label:`five.videoBlit`,layout:`auto`,vertex:{module:n,entryPoint:`vs`},fragment:{module:n,entryPoint:`fs`,targets:[{format:p}]},primitive:{topology:`triangle-list`}}),sampler:e.createSampler({magFilter:`linear`,minFilter:`linear`})},h.set(e,t)}return t}var _=null;function v(){return _||(_=new c.DataTexture(new Uint8Array([0,0,0,255]),1,1,c.RGBAFormat),_.colorSpace=c.SRGBColorSpace,_.magFilter=c.LinearFilter,_.minFilter=c.LinearFilter,_.needsUpdate=!0),_}var y=class{constructor(e){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()}get video(){return this.videoTexture.image}scheduleVideoFrameCallback(){let e=this.video;this.disposed||typeof(e==null?void 0:e.requestVideoFrameCallback)!=`function`||(this.videoFrameCallbackId=e.requestVideoFrameCallback(()=>{this.videoFrameCallbackId=null,this.frameDirty=!0,this.scheduleVideoFrameCallback()}))}get texture(){var e;return this.broken||this.useBlit!==!0?this.videoTexture:(e=this.externalTexture)==null?v():e}update(e){if(this.disposed||this.broken)return;if(this.useBlit===null){let t=e==null?void 0:e.backend;if(!t)return;if(t.isWebGPUBackend!==!0){this.useBlit=!1;return}if(!t.device)return;this.device=t.device,this.useBlit=!0}if(!this.useBlit||!this.device)return;let t=this.video;if(t instanceof HTMLVideoElement&&!(t.readyState<2||t.videoWidth===0||t.videoHeight===0)&&!(this.externalTexture&&!this.frameDirty&&t.currentTime===this.lastVideoTime))try{this.ensureTarget(t.videoWidth,t.videoHeight),this.blit(t),this.frameDirty=!1,this.lastVideoTime=t.currentTime}catch(e){console.warn(`[Five] 视频纹理 GPU 中转失败,回退为 VideoTexture 上传`,e),this.broken=!0,this.releaseTarget()}}ensureTarget(e,t){let n=this.device,r=n.limits.maxTextureDimension2D,i=Math.min(1,r/Math.max(e,t)),a=Math.max(1,Math.floor(e*i)),o=Math.max(1,Math.floor(t*i));if(this.gpuTexture&&this.width===a&&this.height===o)return;let s=this.gpuTexture,l=n.createTexture({label:`five.videoBlit.target`,size:{width:a,height:o},format:p,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT});if(this.gpuTexture=l,this.width=a,this.height=o,this.externalTexture)this.externalTexture.sourceTexture=l,this.externalTexture.image={width:a,height:o},this.externalTexture.dispose();else{let e=new c.ExternalTexture(l);e.colorSpace=c.SRGBColorSpace,e.flipY=!1,e.generateMipmaps=!1,e.minFilter=c.LinearFilter,e.magFilter=c.LinearFilter,e.wrapS=c.ClampToEdgeWrapping,e.wrapT=c.ClampToEdgeWrapping,e.image={width:a,height:o},this.externalTexture=e}s==null||s.destroy()}blit(e){let t=this.device,{pipeline:n,sampler:r}=g(t),i=t.importExternalTexture({source:e}),a=t.createBindGroup({layout:n.getBindGroupLayout(0),entries:[{binding:0,resource:i},{binding:1,resource:r}]}),o=t.createCommandEncoder({label:`five.videoBlit`}),s=o.beginRenderPass({colorAttachments:[{view:this.gpuTexture.createView(),loadOp:`clear`,storeOp:`store`,clearValue:{r:0,g:0,b:0,a:1}}]});s.setPipeline(n),s.setBindGroup(0,a),s.draw(3),s.end(),t.queue.submit([o.finish()])}releaseTarget(){var e,t;(e=this.externalTexture)==null||e.dispose(),this.externalTexture=null,(t=this.gpuTexture)==null||t.destroy(),this.gpuTexture=null,this.width=this.height=0}dispose(){if(this.disposed)return;this.disposed=!0;let e=this.video;this.videoFrameCallbackId!==null&&typeof(e==null?void 0:e.cancelVideoFrameCallback)==`function`&&e.cancelVideoFrameCallback(this.videoFrameCallbackId),this.videoFrameCallbackId=null,this.releaseTarget()}},b=new WeakMap;function x(e){let t=b.get(e);if(!t){let n=new y(e);t=n,b.set(e,n);let r=()=>{e.removeEventListener(`dispose`,r),b.get(e)===n&&b.delete(e),n.dispose()};e.addEventListener(`dispose`,r)}return t}var S=window,C=S.requestAnimationFrame||S.mozRequestAnimationFrame||S.webkitRequestAnimationFrame||S.msRequestAnimationFrame||(e=>setTimeout(e,16)),w=typeof performance<`u`&&performance.timing!==void 0?performance.timing.navigationStart:Date.now(),T=typeof performance<`u`?(()=>w+performance.now()):(()=>Date.now());function E(e,t){e.naturalWidth>0&&C(()=>t());let n=()=>t();return e.addEventListener(`load`,n,!1),()=>e.removeEventListener(`load`,n,!1)}function D(e,t){let n=T(),r=!1,i=()=>{r=!0,t(),T()-n<3e3?C(i):r=!1},a=()=>{n=T(),r===!1&&i()};return e.addEventListener(`timeupdate`,a,!1),()=>{e.removeEventListener(`timeupdate`,a,!1),r=!1}}function O(e,t){let n=e.dispose;e.dispose=()=>{t(),n.call(e)}}var k=class extends c.Mesh{static get version(){return`1.0.0-alpha.13`}constructor(e,t,n){let r=new c.MeshBasicMaterial;if(super(f,r),this._sourceTexture=null,this._needsRender=!1,this.scale.set(e,t,1),typeof n==`string`){r.transparent=/\.png$/.test(n);let e=new Image;e.src=n,e.crossOrigin=``,n=e}if(n instanceof HTMLImageElement){let e=r.map=new c.Texture;e.wrapS=c.ClampToEdgeWrapping,e.wrapT=c.ClampToEdgeWrapping,e.minFilter=c.LinearFilter,e.colorSpace=c.SRGBColorSpace,O(e,E(n,()=>{e.image=n,e.needsUpdate=!0,this._needsRender=!0}))}else if(n instanceof HTMLCanvasElement)r.map=new c.CanvasTexture(n);else if(n instanceof HTMLVideoElement){let e=r.map=new c.VideoTexture(n);e.wrapS=c.ClampToEdgeWrapping,e.wrapT=c.ClampToEdgeWrapping,e.minFilter=c.LinearFilter,e.colorSpace=c.SRGBColorSpace,O(e,D(n,()=>{this._needsRender=!0}));let t=x(e);this.onBeforeRender=e=>{t.update(e);let n=t.texture;r.map!==n&&(r.map=n)}}this._sourceTexture=r.map}get needsRender(){return this._needsRender}set needsRender(e){this._needsRender=e,e===!0&&this._sourceTexture&&(this._sourceTexture.needsUpdate=!0)}setSize(e,t){this.scale.set(e,t,1),this._needsRender=!0}setTransparent(e){this.material.transparent=e,this._needsRender=!0}locationWithIntersection(e,t=.005){let{point:n,face:r}=e;this.position.copy(n),r&&(this.position.add(r.normal.clone().setLength(t)),this.lookAt(n.clone().add(r.normal))),this._needsRender=!0}dispose(){var e;(e=this._sourceTexture)==null||e.dispose(),this.material.dispose()}};exports.Sticker=k;
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.14`}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/10/30
5
- * Version: 1.0.0-alpha.13
4
+ * Generated: 2026/11/3
5
+ * Version: 1.0.0-alpha.14
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 * as e from "three/webgpu";
339
- //#region build/sticker/geometry.js
340
- var t = new Float32Array([
341
- -.5,
342
- -.5,
343
- 0,
344
- .5,
345
- -.5,
346
- 0,
347
- -.5,
348
- .5,
349
- 0,
350
- .5,
351
- .5,
352
- 0
353
- ]), n = new Float32Array([
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
- function y(e, t) {
530
- let n = _(), r = !1, i = () => {
531
- r = !0, t(), _() - n < 3e3 ? h(i) : r = !1;
532
- }, a = () => {
533
- n = _(), r === !1 && i();
534
- };
535
- return e.addEventListener("timeupdate", a, !1), () => {
536
- e.removeEventListener("timeupdate", a, !1), r = !1;
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
- function b(e, t) {
540
- let n = e.dispose;
541
- e.dispose = () => {
542
- t(), n.call(e);
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 x = class extends e.Mesh {
546
- static get version() {
547
- return "1.0.0-alpha.13";
548
- }
549
- constructor(t, n, r) {
550
- let a = new e.MeshBasicMaterial();
551
- if (super(i, a), this._sourceTexture = null, this._needsRender = !1, this.scale.set(t, n, 1), typeof r == "string") {
552
- a.transparent = /\.png$/.test(r);
553
- let e = new Image();
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.14`}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};