@weasel-js/core 1.9.3 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1106 -0
- package/README.md +7 -5
- package/dist/WeaselProvider.js +5 -7
- package/dist/WeaselProvider.js.map +1 -1
- package/dist/affordances/composeAffordanceLayer.js +91 -93
- package/dist/affordances/composeAffordanceLayer.js.map +1 -1
- package/dist/affordances/cornerResize.js +27 -18
- package/dist/affordances/cornerResize.js.map +1 -1
- package/dist/affordances/hitAffordanceRegions.js +65 -104
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/affordances/rotationHandle.js +22 -21
- package/dist/affordances/rotationHandle.js.map +1 -1
- package/dist/animation/behaviors/coast.js +21 -0
- package/dist/animation/behaviors/coast.js.map +1 -0
- package/dist/animation/behaviors/coastByWrite.js +107 -0
- package/dist/animation/behaviors/coastByWrite.js.map +1 -0
- package/dist/animation/behaviors/coastOnTargets.js +94 -0
- package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
- package/dist/animation/behaviors/momentum.js +38 -88
- package/dist/animation/behaviors/momentum.js.map +1 -1
- package/dist/animation/clipTargets.js +12 -0
- package/dist/animation/clipTargets.js.map +1 -0
- package/dist/animation/index.js +15 -20
- package/dist/animation/poseHelpers.js +112 -33
- package/dist/animation/poseHelpers.js.map +1 -1
- package/dist/animation/poseTarget.js +115 -0
- package/dist/animation/poseTarget.js.map +1 -0
- package/dist/animation/reflow.js +113 -83
- package/dist/animation/reflow.js.map +1 -1
- package/dist/animation/rewind.js +66 -0
- package/dist/animation/rewind.js.map +1 -0
- package/dist/animation/rig/bindRig.js +85 -53
- package/dist/animation/rig/bindRig.js.map +1 -1
- package/dist/animation/rig/rigNode.js +93 -0
- package/dist/animation/rig/rigNode.js.map +1 -0
- package/dist/animation/rig/rigSeat.js +26 -0
- package/dist/animation/rig/rigSeat.js.map +1 -0
- package/dist/animation/rig/skinBinding.js +56 -0
- package/dist/animation/rig/skinBinding.js.map +1 -0
- package/dist/animation/rig/useRig.js +31 -16
- package/dist/animation/rig/useRig.js.map +1 -1
- package/dist/animation/wrappers/animateLifecycle.js +32 -24
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
- package/dist/animation/wrappers/animateOnSetPose.js +31 -29
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
- package/dist/animation/wrappers/instantPose.js +13 -0
- package/dist/animation/wrappers/instantPose.js.map +1 -0
- package/dist/animation/writtenPoseTarget.js +33 -0
- package/dist/animation/writtenPoseTarget.js.map +1 -0
- package/dist/{autoPoseDescriptor-vCdt55xm.d.ts → autoPoseDescriptor-DHg5KqaJ.d.ts} +1 -1
- package/dist/barrel/canvas.js +31 -0
- package/dist/barrel/chrome.js +16 -0
- package/dist/barrel/input.js +18 -0
- package/dist/barrel/interactions.js +38 -0
- package/dist/barrel/paint.js +11 -0
- package/dist/barrel/paths.js +12 -0
- package/dist/barrel/renderer.js +14 -0
- package/dist/barrel/routing.js +57 -0
- package/dist/barrel/scene.js +37 -0
- package/dist/barrel/text.js +9 -0
- package/dist/barrel/viewport.js +42 -0
- package/dist/canvas/Canvas.js +280 -559
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +147 -167
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/CursorCoordsHud.js +53 -49
- package/dist/canvas/CursorCoordsHud.js.map +1 -1
- package/dist/canvas/DrawCanvas.js +40 -51
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/ModalityHud.js.map +1 -1
- package/dist/canvas/NodeShape.js +55 -374
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/PickHud.js +50 -47
- package/dist/canvas/PickHud.js.map +1 -1
- package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
- package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +126 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -0
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +27 -31
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +64 -0
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -0
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +16 -0
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -0
- package/dist/canvas/SceneCanvas/coordTrace.js +46 -0
- package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -0
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +138 -85
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +9 -8
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +74 -43
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/isDev.js +12 -0
- package/dist/canvas/SceneCanvas/isDev.js.map +1 -0
- package/dist/canvas/SceneCanvas/poseGeometry.js +31 -34
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
- package/dist/canvas/SceneCanvas/poseRegistrars.js +13 -0
- package/dist/canvas/SceneCanvas/poseRegistrars.js.map +1 -0
- package/dist/canvas/SceneCanvas/props.js +39 -0
- package/dist/canvas/SceneCanvas/props.js.map +1 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +21 -62
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
- package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js +38 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +29 -29
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
- package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +48 -48
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +74 -78
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
- package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
- package/dist/canvas/SceneCanvas/worldPointAt.js +9 -0
- package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
- package/dist/canvas/SceneCanvas.js +311 -969
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +42 -46
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/adapterDerivedPath.js +26 -0
- package/dist/canvas/adapterDerivedPath.js.map +1 -0
- package/dist/canvas/affordanceAt.js +11 -1
- package/dist/canvas/affordanceAt.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js +111 -0
- package/dist/canvas/buildSceneLayer.js.map +1 -0
- package/dist/canvas/buildSceneTree.js +16 -19
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/canvasRenderer.js +67 -55
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/colorOverrides.js.map +1 -1
- package/dist/canvas/defaultDrawOne.js +12 -12
- package/dist/canvas/defaultDrawOne.js.map +1 -1
- package/dist/canvas/deps/areaSelect.js +4 -4
- package/dist/canvas/deps/areaSelect.js.map +1 -1
- package/dist/canvas/deps/changes.js +13 -0
- package/dist/canvas/deps/changes.js.map +1 -0
- package/dist/canvas/deps/debug.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +38 -57
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/geometryProjection.js.map +1 -1
- package/dist/canvas/deps/hitTestArea.js +31 -26
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/insert.js +130 -91
- package/dist/canvas/deps/insert.js.map +1 -1
- package/dist/canvas/deps/lassoSelect.js +5 -5
- package/dist/canvas/deps/lassoSelect.js.map +1 -1
- package/dist/canvas/deps/poseDescriptor.js +1 -1
- package/dist/canvas/deps/poseDescriptor.js.map +1 -1
- package/dist/canvas/deps/resizePolicy.js.map +1 -1
- package/dist/canvas/deps/slice.js +26 -26
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/deps/textEdit.js +6 -5
- package/dist/canvas/deps/textEdit.js.map +1 -1
- package/dist/canvas/deps/view.js.map +1 -1
- package/dist/canvas/derivedPath.js +47 -22
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/drawEnvelope.js +8 -4
- package/dist/canvas/drawEnvelope.js.map +1 -1
- package/dist/canvas/getNodeAtPoint.js +4 -8
- package/dist/canvas/getNodeAtPoint.js.map +1 -1
- package/dist/canvas/hud.module.js +1 -1
- package/dist/canvas/hud.module.js.map +1 -1
- package/dist/canvas/insertPreviewExtent.js.map +1 -1
- package/dist/canvas/kitRequirements.js +2 -2
- package/dist/canvas/kitRequirements.js.map +1 -1
- package/dist/canvas/layerOrder.js +13 -6
- package/dist/canvas/layerOrder.js.map +1 -1
- package/dist/canvas/layerSlots.js +6 -1
- package/dist/canvas/layerSlots.js.map +1 -1
- package/dist/canvas/nodeShapes/derivedPainter.js +34 -0
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/imagePainter.js +87 -0
- package/dist/canvas/nodeShapes/imagePainter.js.map +1 -0
- package/dist/canvas/nodeShapes/memo.js +9 -0
- package/dist/canvas/nodeShapes/memo.js.map +1 -0
- package/dist/canvas/nodeShapes/nodePaint.js +68 -0
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -0
- package/dist/canvas/nodeShapes/pathPainter.js +39 -0
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/poseBox.js +20 -0
- package/dist/canvas/nodeShapes/poseBox.js.map +1 -0
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +38 -0
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/shapePainter.js +72 -0
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -0
- package/dist/canvas/nodeShapes/textPainter.js +55 -0
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/paintCull.js +11 -14
- package/dist/canvas/paintCull.js.map +1 -1
- package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
- package/dist/canvas/paintedCursorLayer.js.map +1 -0
- package/dist/canvas/pickWalk.js +59 -68
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/planeClips.js +18 -19
- package/dist/canvas/planeClips.js.map +1 -1
- package/dist/canvas/poseCascade.js +41 -0
- package/dist/canvas/poseCascade.js.map +1 -0
- package/dist/canvas/poseRotation.js +9 -23
- package/dist/canvas/poseRotation.js.map +1 -1
- package/dist/canvas/rasterReadback.js +22 -0
- package/dist/canvas/rasterReadback.js.map +1 -0
- package/dist/canvas/renderDebugSnapshot.js +11 -11
- package/dist/canvas/renderDebugSnapshot.js.map +1 -1
- package/dist/canvas/renderNeeds.js +3 -3
- package/dist/canvas/renderNeeds.js.map +1 -1
- package/dist/canvas/renderSceneToPixels.js +64 -81
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +68 -214
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +112 -0
- package/dist/canvas/sceneClipboard.js.map +1 -0
- package/dist/canvas/sceneLayerPaint.js +4 -4
- package/dist/canvas/sceneLayerPaint.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +39 -39
- package/dist/canvas/sceneViewRender.js.map +1 -1
- package/dist/canvas/slopsDebugLayer.js +4 -4
- package/dist/canvas/slopsDebugLayer.js.map +1 -1
- package/dist/canvas/surface.module.js +6 -0
- package/dist/canvas/surface.module.js.map +1 -0
- package/dist/canvas/surfaceBox.js +16 -0
- package/dist/canvas/surfaceBox.js.map +1 -0
- package/dist/canvas/useCanvasRenderer.js +26 -6
- package/dist/canvas/useCanvasRenderer.js.map +1 -1
- package/dist/canvas/useCanvasSurface.js +31 -0
- package/dist/canvas/useCanvasSurface.js.map +1 -0
- package/dist/canvas/useCanvasView.js +67 -0
- package/dist/canvas/useCanvasView.js.map +1 -0
- package/dist/canvas/useFrameLoop.js +39 -31
- package/dist/canvas/useFrameLoop.js.map +1 -1
- package/dist/canvas/useHostAnchor.js +35 -33
- package/dist/canvas/useHostAnchor.js.map +1 -1
- package/dist/canvas/useLateContentRedraw.js +8 -8
- package/dist/canvas/useLateContentRedraw.js.map +1 -1
- package/dist/canvas/useSceneLayerList.js +11 -0
- package/dist/canvas/useSceneLayerList.js.map +1 -0
- package/dist/canvas/useSurfaceInput.js +42 -0
- package/dist/canvas/useSurfaceInput.js.map +1 -0
- package/dist/canvas/useToolCursor.js +29 -0
- package/dist/canvas/useToolCursor.js.map +1 -0
- package/dist/canvas/useViewHelpers.js +46 -85
- package/dist/canvas/useViewHelpers.js.map +1 -1
- package/dist/canvas/viewInputs.js.map +1 -1
- package/dist/canvas/viewRegistry.js +25 -27
- package/dist/canvas/viewRegistry.js.map +1 -1
- package/dist/canvas/watchElementMove.js +43 -0
- package/dist/canvas/watchElementMove.js.map +1 -0
- package/dist/canvas/wrapNodeOutput.js.map +1 -1
- package/dist/clipboard.d.ts +16 -19
- package/dist/{types-B_9g6hMM.d.ts → clone-2a5hVbBd.d.ts} +123 -74
- package/dist/clone.d.ts +4 -7
- package/dist/clone.js +0 -2
- package/dist/core/device/index.js +5 -4
- package/dist/core/device/targets.js.map +1 -1
- package/dist/core/device/useDeviceProfile.js +38 -44
- package/dist/core/device/useDeviceProfile.js.map +1 -1
- package/dist/core/device/watchDevicePixelRatio.js +17 -0
- package/dist/core/device/watchDevicePixelRatio.js.map +1 -0
- package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
- package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/pathPoseDescriptor.js +88 -0
- package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/poseDescriptor.js +68 -19
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/regionHit.js +31 -34
- package/dist/core/geometry/regionHit.js.map +1 -1
- package/dist/core/geometry/targetFrame.js +94 -0
- package/dist/core/geometry/targetFrame.js.map +1 -0
- package/dist/core/geometry/unionBounds.js +30 -29
- package/dist/core/geometry/unionBounds.js.map +1 -1
- package/dist/core/isPlainObject.js +2 -11
- package/dist/core/layers/backgroundFill.js +31 -0
- package/dist/core/layers/backgroundFill.js.map +1 -0
- package/dist/{features/groups → core/layers}/children.js +1 -1
- package/dist/core/layers/children.js.map +1 -0
- package/dist/core/layers/gateLayer.js +13 -0
- package/dist/core/layers/gateLayer.js.map +1 -0
- package/dist/core/layers/layerGroup.js +40 -0
- package/dist/core/layers/layerGroup.js.map +1 -0
- package/dist/core/layers/render.js +50 -76
- package/dist/core/layers/render.js.map +1 -1
- package/dist/core/ops/arrange.js +1 -0
- package/dist/core/ops/arrange.js.map +1 -1
- package/dist/core/ops/create.js +10 -5
- package/dist/core/ops/create.js.map +1 -1
- package/dist/core/ops/createHistory.js +9 -9
- package/dist/core/ops/createHistory.js.map +1 -1
- package/dist/core/ops/delete.js +12 -24
- package/dist/core/ops/delete.js.map +1 -1
- package/dist/core/ops/reorder/index.js +43 -40
- package/dist/core/ops/reorder/index.js.map +1 -1
- package/dist/core/ops/reorder/setChildOrder.js +34 -0
- package/dist/core/ops/reorder/setChildOrder.js.map +1 -0
- package/dist/core/paint/meshKind.js +16 -0
- package/dist/core/paint/meshKind.js.map +1 -0
- package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +282 -105
- package/dist/core/paint/meshKindLazy.js.map +1 -0
- package/dist/core/paint/paintKindEntry.js +8 -0
- package/dist/core/paint/paintKindEntry.js.map +1 -0
- package/dist/core/paint/paintKinds.js +144 -0
- package/dist/core/paint/paintKinds.js.map +1 -0
- package/dist/core/paint/registerMesh.js +7 -0
- package/dist/core/paint/registerMesh.js.map +1 -0
- package/dist/core/scene/NodeProperties.js.map +1 -1
- package/dist/core/scene/NodeRouting.js.map +1 -1
- package/dist/core/scene/appliedLog.js +37 -0
- package/dist/core/scene/appliedLog.js.map +1 -0
- package/dist/core/scene/arrivalWindow.js +102 -0
- package/dist/core/scene/arrivalWindow.js.map +1 -0
- package/dist/core/scene/boundOps.js +40 -0
- package/dist/core/scene/boundOps.js.map +1 -0
- package/dist/core/scene/composeFrame.js +9 -6
- package/dist/core/scene/composeFrame.js.map +1 -1
- package/dist/{features/groups → core/scene}/composePose.js +18 -18
- package/dist/core/scene/composePose.js.map +1 -0
- package/dist/core/scene/depMemo.js +31 -6
- package/dist/core/scene/depMemo.js.map +1 -1
- package/dist/core/scene/derivedPath.js +19 -20
- package/dist/core/scene/derivedPath.js.map +1 -1
- package/dist/core/scene/editMode.js +26 -0
- package/dist/core/scene/editMode.js.map +1 -0
- package/dist/core/scene/effectivePose.js +38 -39
- package/dist/core/scene/effectivePose.js.map +1 -1
- package/dist/core/scene/fieldEdits.js +98 -0
- package/dist/core/scene/fieldEdits.js.map +1 -0
- package/dist/core/scene/historyFacade.js +130 -0
- package/dist/core/scene/historyFacade.js.map +1 -0
- package/dist/core/scene/historyForm.js +6 -0
- package/dist/core/scene/historyForm.js.map +1 -0
- package/dist/core/scene/kitOps.js +185 -0
- package/dist/core/scene/kitOps.js.map +1 -0
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layerStack.js +131 -0
- package/dist/core/scene/layerStack.js.map +1 -0
- package/dist/core/scene/layoutPass.js +58 -59
- package/dist/core/scene/layoutPass.js.map +1 -1
- package/dist/core/scene/lockGuard.js +37 -0
- package/dist/core/scene/lockGuard.js.map +1 -0
- package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
- package/dist/core/scene/nestedHit.js.map +1 -0
- package/dist/core/scene/nodeFnFields.js +10 -11
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/nodeMemo.js +45 -19
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/nodeStore.js +127 -0
- package/dist/core/scene/nodeStore.js.map +1 -0
- package/dist/core/scene/notifier.js +37 -0
- package/dist/core/scene/notifier.js.map +1 -0
- package/dist/core/scene/opTable.js +50 -0
- package/dist/core/scene/opTable.js.map +1 -0
- package/dist/core/scene/outerOps.js +66 -0
- package/dist/core/scene/outerOps.js.map +1 -0
- package/dist/core/scene/poseFeed.js +38 -38
- package/dist/core/scene/poseFeed.js.map +1 -1
- package/dist/core/scene/poseHold.js +39 -0
- package/dist/core/scene/poseHold.js.map +1 -0
- package/dist/core/scene/poseOverrides.js +44 -40
- package/dist/core/scene/poseOverrides.js.map +1 -1
- package/dist/core/scene/poseSnapshot.js.map +1 -1
- package/dist/core/scene/reconcileSpecs.js +3 -2
- package/dist/core/scene/reconcileSpecs.js.map +1 -1
- package/dist/core/scene/recorder.js +86 -0
- package/dist/core/scene/recorder.js.map +1 -0
- package/dist/core/scene/renderOrder.js +84 -0
- package/dist/core/scene/renderOrder.js.map +1 -0
- package/dist/core/scene/scene.js +80 -1266
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/sceneEdits.js +58 -0
- package/dist/core/scene/sceneEdits.js.map +1 -0
- package/dist/core/scene/sceneMutators.js +49 -0
- package/dist/core/scene/sceneMutators.js.map +1 -0
- package/dist/core/scene/scenePoseAdapter.js +16 -0
- package/dist/core/scene/scenePoseAdapter.js.map +1 -0
- package/dist/core/scene/sceneRecording.js +90 -0
- package/dist/core/scene/sceneRecording.js.map +1 -0
- package/dist/core/scene/sceneSelection.js +28 -0
- package/dist/core/scene/sceneSelection.js.map +1 -0
- package/dist/core/scene/sceneState.js +49 -0
- package/dist/core/scene/sceneState.js.map +1 -0
- package/dist/core/scene/serialization.js +71 -0
- package/dist/core/scene/serialization.js.map +1 -0
- package/dist/core/scene/staleReplay.js +51 -0
- package/dist/core/scene/staleReplay.js.map +1 -0
- package/dist/core/scene/statedFields.js +9 -0
- package/dist/core/scene/statedFields.js.map +1 -0
- package/dist/core/scene/treeEdits.js +127 -0
- package/dist/core/scene/treeEdits.js.map +1 -0
- package/dist/core/scene/treeOrder.js +13 -0
- package/dist/core/scene/treeOrder.js.map +1 -0
- package/dist/core/scene/treeReads.js +26 -0
- package/dist/core/scene/treeReads.js.map +1 -0
- package/dist/core/scene/types.js.map +1 -1
- package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
- package/dist/core/scene/unionOfChildren.js.map +1 -0
- package/dist/core/scene/unitScopes.js +13 -0
- package/dist/core/scene/unitScopes.js.map +1 -0
- package/dist/core/scene/useScene.js.map +1 -1
- package/dist/core/selection/readOnlySelection.js +32 -0
- package/dist/core/selection/readOnlySelection.js.map +1 -0
- package/dist/core/selection/usePublishSceneSelection.js +26 -0
- package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
- package/dist/core/selection/useSelection.js +34 -25
- package/dist/core/selection/useSelection.js.map +1 -1
- package/dist/core/shapeKinds.js.map +1 -1
- package/dist/core/stylus/stylus.js.map +1 -1
- package/dist/core/stylus/usePointerStylus.js.map +1 -1
- package/dist/core/usePaintKinds.js +1 -1
- package/dist/core/usePaintKinds.js.map +1 -1
- package/dist/core/viewport/clientToWorld.js.map +1 -1
- package/dist/core/viewport/fitViewToBounds.js.map +1 -1
- package/dist/core/viewport/parallax.js.map +1 -1
- package/dist/core/viewport/screenSlop.js +11 -11
- package/dist/core/viewport/screenSlop.js.map +1 -1
- package/dist/core/viewport/useCanvasSize.js.map +1 -1
- package/dist/core/viewport/useDecayLoop.js +8 -8
- package/dist/core/viewport/useDecayLoop.js.map +1 -1
- package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
- package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
- package/dist/core/viewport/useViewAnimation.js +102 -43
- package/dist/core/viewport/useViewAnimation.js.map +1 -1
- package/dist/core/viewport/view.js +9 -9
- package/dist/core/viewport/view.js.map +1 -1
- package/dist/core/viewport/wheelHandler.js.map +1 -1
- package/dist/core/viewport/zoomBounds.js +10 -8
- package/dist/core/viewport/zoomBounds.js.map +1 -1
- package/dist/{cornerHandles-BCrDp_mH.d.ts → cornerHandles-BEshc4z3.d.ts} +11 -24
- package/dist/debug/createDebugOverlayLayer.js +97 -97
- package/dist/debug/createDebugOverlayLayer.js.map +1 -1
- package/dist/debug/createDebugSink.js.map +1 -1
- package/dist/debug/flag.js +2 -41
- package/dist/debug/frameStats.js.map +1 -1
- package/dist/debug/useDebugSink.js +52 -0
- package/dist/debug/useDebugSink.js.map +1 -0
- package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
- package/dist/features/chrome-caps/conditions.js.map +1 -1
- package/dist/features/chrome-caps/defaults.js.map +1 -1
- package/dist/features/chrome-caps/resolve.js.map +1 -1
- package/dist/features/chrome-caps/useChromeCaps.js +54 -0
- package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
- package/dist/features/chrome-caps/useHoverTracking.js +22 -17
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
- package/dist/features/ingestion/contentHandlers.js +28 -19
- package/dist/features/ingestion/contentHandlers.js.map +1 -1
- package/dist/features/ingestion/imageHandler.js +21 -24
- package/dist/features/ingestion/imageHandler.js.map +1 -1
- package/dist/features/ingestion/openFilePicker.js.map +1 -1
- package/dist/features/ingestion/placement.js +16 -0
- package/dist/features/ingestion/placement.js.map +1 -0
- package/dist/features/ingestion/registerKitHandlers.js +7 -7
- package/dist/features/ingestion/svgHandler.js +5 -0
- package/dist/features/ingestion/svgHandler.js.map +1 -1
- package/dist/features/ingestion/textHandler.js +28 -0
- package/dist/features/ingestion/textHandler.js.map +1 -0
- package/dist/features/ingestion/useCanvasIngestion.js +48 -0
- package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
- package/dist/features/ingestion/weaselJsonHandler.js +22 -14
- package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
- package/dist/features/longPress/longPressFeedback.js.map +1 -1
- package/dist/features/modes/modeLayers.js +7 -7
- package/dist/features/modes/modeLayers.js.map +1 -1
- package/dist/features/paths/editablePath.js +47 -0
- package/dist/features/paths/editablePath.js.map +1 -0
- package/dist/features/paths/index.js +9 -14
- package/dist/features/paths/pathEditState.js +41 -0
- package/dist/features/paths/pathEditState.js.map +1 -0
- package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
- package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
- package/dist/features/paths/pathLayer.js +3 -2
- package/dist/features/paths/pathLayer.js.map +1 -1
- package/dist/features/paths/penPreviewLayer.js +86 -88
- package/dist/features/paths/penPreviewLayer.js.map +1 -1
- package/dist/features/paths/usePathEdit.js +34 -0
- package/dist/features/paths/usePathEdit.js.map +1 -0
- package/dist/features/poseRun/usePoseRun.js +44 -52
- package/dist/features/poseRun/usePoseRun.js.map +1 -1
- package/dist/features/selection/overlay.js +171 -179
- package/dist/features/selection/overlay.js.map +1 -1
- package/dist/features/text/index.js +6 -0
- package/dist/features/text/textLayer.js +1 -1
- package/dist/features/text/textLayer.js.map +1 -1
- package/dist/features/text/useSceneTextEdit.js +100 -93
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/viewports/viewportLayer.js +25 -36
- package/dist/features/viewports/viewportLayer.js.map +1 -1
- package/dist/index.d.ts +8473 -9141
- package/dist/index.js +269 -307
- package/dist/input/keyState.js +38 -39
- package/dist/input/keyState.js.map +1 -1
- package/dist/input/useKeyModifiers.js +11 -0
- package/dist/input/useKeyModifiers.js.map +1 -0
- package/dist/interactions/actions/actionShortcuts.js.map +1 -1
- package/dist/interactions/actions/{defaults/align.js → align/action.js} +18 -20
- package/dist/interactions/actions/align/action.js.map +1 -0
- package/dist/interactions/actions/align/align.js +20 -20
- package/dist/interactions/actions/align/align.js.map +1 -1
- package/dist/interactions/actions/booleans/action.js +65 -0
- package/dist/interactions/actions/booleans/action.js.map +1 -0
- package/dist/interactions/actions/booleans/booleans.js +69 -78
- package/dist/interactions/actions/booleans/booleans.js.map +1 -1
- package/dist/interactions/actions/booleans/operands.js +40 -0
- package/dist/interactions/actions/booleans/operands.js.map +1 -0
- package/dist/interactions/actions/booleans/pieces.js +45 -0
- package/dist/interactions/actions/booleans/pieces.js.map +1 -0
- package/dist/interactions/actions/booleans/placement.js +24 -0
- package/dist/interactions/actions/booleans/placement.js.map +1 -0
- package/dist/interactions/actions/booleans/useBooleans.js +11 -9
- package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
- package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
- package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +31 -15
- package/dist/interactions/actions/clipboard/action.js.map +1 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js +44 -42
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
- package/dist/interactions/actions/clipboard/materializePaste.js +10 -7
- package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -1
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
- package/dist/interactions/actions/clone/action.js +98 -0
- package/dist/interactions/actions/clone/action.js.map +1 -0
- package/dist/interactions/actions/clone/behaviors.js +52 -0
- package/dist/interactions/actions/clone/behaviors.js.map +1 -0
- package/dist/interactions/actions/defaultCommitAdapter.js +7 -32
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +60 -84
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/areaSelect.js +35 -38
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
- package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
- package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js +40 -0
- package/dist/interactions/actions/defaults/copySubtree.js.map +1 -0
- package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
- package/dist/interactions/actions/defaults/delete.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +13 -53
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +40 -50
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
- package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/ingest.js +44 -38
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +11 -12
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +40 -69
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/nudgeSteps.js +37 -0
- package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -0
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/reorder.js +2 -0
- package/dist/interactions/actions/defaults/reorder.js.map +1 -1
- package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/setFill.js +14 -8
- package/dist/interactions/actions/defaults/setFill.js.map +1 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js +7 -4
- package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
- package/dist/interactions/actions/defaults/setStroke.js +12 -12
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
- package/dist/interactions/actions/defaults/setStrokeOpacity.js +6 -6
- package/dist/interactions/actions/defaults/sliceOps.js +8 -10
- package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
- package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
- package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js +37 -26
- package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
- package/dist/interactions/actions/distribute/action.js +66 -0
- package/dist/interactions/actions/distribute/action.js.map +1 -0
- package/dist/interactions/actions/distribute/distribute.js +11 -11
- package/dist/interactions/actions/distribute/distribute.js.map +1 -1
- package/dist/interactions/actions/{defaults/editAnchors.js → edit-anchors/action.js} +7 -9
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/geometry.js +30 -27
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
- package/dist/interactions/actions/flip/action.js +124 -0
- package/dist/interactions/actions/flip/action.js.map +1 -0
- package/dist/interactions/actions/flip/helpers.js +30 -17
- package/dist/interactions/actions/flip/helpers.js.map +1 -1
- package/dist/interactions/actions/gestureFrames.js +18 -0
- package/dist/interactions/actions/gestureFrames.js.map +1 -0
- package/dist/interactions/actions/gestureLifecycle.js +47 -20
- package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
- package/dist/interactions/actions/hitSelection.js +8 -0
- package/dist/interactions/actions/hitSelection.js.map +1 -0
- package/dist/interactions/actions/insert/action.js +72 -0
- package/dist/interactions/actions/insert/action.js.map +1 -0
- package/dist/interactions/actions/insert/commit.js +28 -0
- package/dist/interactions/actions/insert/commit.js.map +1 -0
- package/dist/interactions/actions/insert/extras.js +65 -0
- package/dist/interactions/actions/insert/extras.js.map +1 -0
- package/dist/interactions/actions/insert/frame.js +48 -0
- package/dist/interactions/actions/insert/frame.js.map +1 -0
- package/dist/interactions/actions/insert/geometry.js +35 -0
- package/dist/interactions/actions/insert/geometry.js.map +1 -0
- package/dist/interactions/actions/insert/rotateAction.js +21 -0
- package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
- package/dist/interactions/actions/insert/session.js +59 -0
- package/dist/interactions/actions/insert/session.js.map +1 -0
- package/dist/interactions/actions/insert/shape.js +34 -0
- package/dist/interactions/actions/insert/shape.js.map +1 -0
- package/dist/interactions/actions/lasso-select/action.js +143 -0
- package/dist/interactions/actions/lasso-select/action.js.map +1 -0
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +14 -18
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -1
- package/dist/interactions/actions/move/action.js +87 -0
- package/dist/interactions/actions/move/action.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +5 -5
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -1
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +39 -27
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
- package/dist/interactions/actions/move/capture.js +99 -0
- package/dist/interactions/actions/move/capture.js.map +1 -0
- package/dist/interactions/actions/move/commit/index.js +41 -0
- package/dist/interactions/actions/move/commit/index.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
- package/dist/interactions/actions/move/commit/rebase.js +18 -0
- package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
- package/dist/interactions/actions/move/commit/reparent.js +65 -0
- package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
- package/dist/interactions/actions/move/delta.js +51 -0
- package/dist/interactions/actions/move/delta.js.map +1 -0
- package/dist/interactions/actions/move/frame.js +59 -0
- package/dist/interactions/actions/move/frame.js.map +1 -0
- package/dist/interactions/actions/move/gestureAdapter.js +22 -30
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
- package/dist/interactions/actions/move/landedDescendants.js +33 -0
- package/dist/interactions/actions/move/landedDescendants.js.map +1 -0
- package/dist/interactions/actions/move/layout/container.js +94 -0
- package/dist/interactions/actions/move/layout/container.js.map +1 -0
- package/dist/interactions/actions/move/layout/dragged.js +58 -0
- package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
- package/dist/interactions/actions/move/layout/dropPass.js +122 -0
- package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
- package/dist/interactions/actions/move/layout/exits.js +38 -0
- package/dist/interactions/actions/move/layout/exits.js.map +1 -0
- package/dist/interactions/actions/move/layout/glide.js +48 -0
- package/dist/interactions/actions/move/layout/glide.js.map +1 -0
- package/dist/interactions/actions/move/session.js +63 -0
- package/dist/interactions/actions/move/session.js.map +1 -0
- package/dist/interactions/actions/move/translate.js +61 -0
- package/dist/interactions/actions/move/translate.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlines.js +16 -63
- package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
- package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
- package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
- package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
- package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
- package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
- package/dist/interactions/actions/planeInput.js.map +1 -1
- package/dist/interactions/actions/pointerState.js +12 -0
- package/dist/interactions/actions/pointerState.js.map +1 -0
- package/dist/interactions/actions/poseDescriptorDep.js +16 -4
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
- package/dist/interactions/actions/poseFrame.js +25 -20
- package/dist/interactions/actions/poseFrame.js.map +1 -1
- package/dist/interactions/actions/resize/action.js +55 -0
- package/dist/interactions/actions/resize/action.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
- package/dist/interactions/actions/resize/boxFrame.js +16 -0
- package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
- package/dist/interactions/actions/resize/capture.js +85 -0
- package/dist/interactions/actions/resize/capture.js.map +1 -0
- package/dist/interactions/actions/resize/commit.js +69 -0
- package/dist/interactions/actions/resize/commit.js.map +1 -0
- package/dist/interactions/actions/resize/frame.js +74 -0
- package/dist/interactions/actions/resize/frame.js.map +1 -0
- package/dist/interactions/actions/resize/pointSnap.js +111 -0
- package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
- package/dist/interactions/actions/resize/ruleBounds.js +9 -0
- package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
- package/dist/interactions/actions/resize/session.js +49 -0
- package/dist/interactions/actions/resize/session.js.map +1 -0
- package/dist/interactions/actions/resolveOverlays.js.map +1 -1
- package/dist/interactions/actions/resolvePreviews.js.map +1 -1
- package/dist/interactions/actions/rotate/action.js +56 -0
- package/dist/interactions/actions/rotate/action.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
- package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
- package/dist/interactions/actions/rotate/commit.js +40 -0
- package/dist/interactions/actions/rotate/commit.js.map +1 -0
- package/dist/interactions/actions/rotate/frame.js +65 -0
- package/dist/interactions/actions/rotate/frame.js.map +1 -0
- package/dist/interactions/actions/rotate/handle.js +12 -12
- package/dist/interactions/actions/rotate/handle.js.map +1 -1
- package/dist/interactions/actions/rotate/session.js +92 -0
- package/dist/interactions/actions/rotate/session.js.map +1 -0
- package/dist/interactions/actions/selectionSubtree.js +69 -0
- package/dist/interactions/actions/selectionSubtree.js.map +1 -0
- package/dist/interactions/actions/spatialReference.js.map +1 -1
- package/dist/interactions/actions/useStandardActions.js +87 -78
- package/dist/interactions/actions/useStandardActions.js.map +1 -1
- package/dist/interactions/gestures/dragGesture/dragGesture.js +4 -7
- package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -1
- package/dist/interactions/gestures/dragGesture/dragPointOf.js +23 -0
- package/dist/interactions/gestures/dragGesture/dragPointOf.js.map +1 -0
- package/dist/interactions/gestures/handleDrag/handleDrag.js +21 -26
- package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -1
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +62 -41
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
- package/dist/interactions/gestures/shared/originProjection.js +1 -1
- package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
- package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
- package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
- package/dist/interactions/gestures/shared/snap.js.map +1 -1
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +8 -4
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -1
- package/dist/layout/arrivals.js +20 -23
- package/dist/layout/arrivals.js.map +1 -1
- package/dist/math-CYUjoyyU.d.ts +33 -0
- package/dist/math.d.ts +5 -3
- package/dist/math.js +6 -6
- package/dist/mesh.d.ts +4 -268
- package/dist/mesh.js +3 -7
- package/dist/move.d.ts +14 -11
- package/dist/{originProjection-DEklpDc_.d.ts → originProjection-PPT88jZv.d.ts} +1 -1
- package/dist/patterns-builtin.d.ts +1 -118
- package/dist/patterns-builtin.js +2 -3
- package/dist/{poseDescriptor-D-OH-tu5.d.ts → poseDescriptor-Bqk-11Rl.d.ts} +26 -36
- package/dist/renderer.d.ts +1 -91
- package/dist/renderer.js +2 -18
- package/dist/resize.d.ts +10 -22
- package/dist/resize.js +6 -6
- package/dist/style.css +1 -1
- package/dist/test-hook/install.js +12 -6
- package/dist/test-hook/install.js.map +1 -1
- package/dist/test-hook/useTestHook.js +22 -0
- package/dist/test-hook/useTestHook.js.map +1 -0
- package/dist/test-seams-D0pyV3pR.d.ts +149 -0
- package/dist/test-seams.d.ts +4 -4
- package/dist/test-seams.js +2 -2
- package/dist/tools/builtin/bone/boneActions.js +130 -0
- package/dist/tools/builtin/bone/boneActions.js.map +1 -0
- package/dist/tools/builtin/bone/boneOverlay.js +58 -0
- package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
- package/dist/tools/builtin/bone/placedRig.js +24 -0
- package/dist/tools/builtin/bone/placedRig.js.map +1 -0
- package/dist/tools/builtin/bone/rigEditState.js +21 -0
- package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
- package/dist/tools/builtin/bone/useBoneTool.js +98 -0
- package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
- package/dist/tools/builtin/hand/useHandTool.js +1 -0
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
- package/dist/tools/builtin/image/useImageTool.js.map +1 -1
- package/dist/tools/builtin/lasso/useLassoTool.js +11 -11
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js +1 -0
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +198 -150
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js +1 -0
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +13 -8
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/rect/useRectTool.js +1 -0
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
- package/dist/tools/builtin/select/adapterPointQuery.js +36 -0
- package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +25 -24
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +42 -67
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/shared/pointerFollower.js +17 -0
- package/dist/tools/builtin/shared/pointerFollower.js.map +1 -0
- package/dist/tools/builtin/slice/useSliceTool.js +72 -82
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +22 -16
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +9 -0
- package/dist/tools/builtin/text/useTextTool.js.map +1 -1
- package/dist/tools/builtin/weight/useWeightTool.js +77 -0
- package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
- package/dist/tools/builtin/weight/weightActions.js +112 -0
- package/dist/tools/builtin/weight/weightActions.js.map +1 -0
- package/dist/tools/builtin/weight/weightOverlay.js +61 -0
- package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
- package/dist/tools/overlayBinding.js.map +1 -1
- package/dist/tools/useKeybindings.js +12 -22
- package/dist/tools/useKeybindings.js.map +1 -1
- package/dist/{types-A37hYkeR.d.ts → types-CIKDwlsP.d.ts} +113 -169
- package/dist/util/color.js +3 -3
- package/dist/util/color.js.map +1 -1
- package/dist/util/paint.js +1 -1
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +28 -21
- package/dist/animation/colorHelpers.js +0 -135
- package/dist/animation/colorHelpers.js.map +0 -1
- package/dist/animation/colorRegistry.js +0 -37
- package/dist/animation/colorRegistry.js.map +0 -1
- package/dist/animation/engine/axes.js +0 -36
- package/dist/animation/engine/axes.js.map +0 -1
- package/dist/animation/engine/codec.js +0 -170
- package/dist/animation/engine/codec.js.map +0 -1
- package/dist/animation/engine/integrator.js +0 -12
- package/dist/animation/engine/integrator.js.map +0 -1
- package/dist/animation/loop.js +0 -62
- package/dist/animation/loop.js.map +0 -1
- package/dist/animation/observe.js +0 -23
- package/dist/animation/observe.js.map +0 -1
- package/dist/animation/rig/blendPoses.js +0 -43
- package/dist/animation/rig/blendPoses.js.map +0 -1
- package/dist/animation/rig/mirrorPose.js +0 -19
- package/dist/animation/rig/mirrorPose.js.map +0 -1
- package/dist/animation/rig/resolveSkeleton.js +0 -33
- package/dist/animation/rig/resolveSkeleton.js.map +0 -1
- package/dist/animation/rig/solveIk.js +0 -103
- package/dist/animation/rig/solveIk.js.map +0 -1
- package/dist/animation/rig/types.js +0 -12
- package/dist/animation/rig/types.js.map +0 -1
- package/dist/animation/slew.js +0 -27
- package/dist/animation/slew.js.map +0 -1
- package/dist/animation/stagger.js +0 -138
- package/dist/animation/stagger.js.map +0 -1
- package/dist/animation/timeline/booking.js +0 -106
- package/dist/animation/timeline/booking.js.map +0 -1
- package/dist/animation/timeline/createTimeline.js +0 -116
- package/dist/animation/timeline/createTimeline.js.map +0 -1
- package/dist/animation/timeline/sampleTrack.js +0 -71
- package/dist/animation/timeline/sampleTrack.js.map +0 -1
- package/dist/animation/useAnimator.js +0 -378
- package/dist/animation/useAnimator.js.map +0 -1
- package/dist/builtins-C-VgUlWI.d.ts +0 -4514
- package/dist/canvas/MinimapCanvas.js +0 -139
- package/dist/canvas/MinimapCanvas.js.map +0 -1
- package/dist/canvas/deps/poseComposition.js +0 -11
- package/dist/canvas/deps/poseComposition.js.map +0 -1
- package/dist/canvas/minimapMath.js +0 -80
- package/dist/canvas/minimapMath.js.map +0 -1
- package/dist/canvas/toolPreview.js +0 -39
- package/dist/canvas/toolPreview.js.map +0 -1
- package/dist/core/adapters/arrayAdapter.js +0 -85
- package/dist/core/adapters/arrayAdapter.js.map +0 -1
- package/dist/core/adapters/useArrayAdapter.js +0 -13
- package/dist/core/adapters/useArrayAdapter.js.map +0 -1
- package/dist/core/fillInPoseFrame.js +0 -102
- package/dist/core/fillInPoseFrame.js.map +0 -1
- package/dist/core/geometry/poseRotation.js +0 -58
- package/dist/core/geometry/poseRotation.js.map +0 -1
- package/dist/core/gradient.js +0 -136
- package/dist/core/gradient.js.map +0 -1
- package/dist/core/isPlainObject.js.map +0 -1
- package/dist/core/markerInset.js +0 -24
- package/dist/core/markerInset.js.map +0 -1
- package/dist/core/mixed.js +0 -6
- package/dist/core/mixed.js.map +0 -1
- package/dist/core/paintKinds.js +0 -156
- package/dist/core/paintKinds.js.map +0 -1
- package/dist/core/strokeMarkerShapes.js +0 -139
- package/dist/core/strokeMarkerShapes.js.map +0 -1
- package/dist/core/strokeMarkers.js +0 -28
- package/dist/core/strokeMarkers.js.map +0 -1
- package/dist/core/viewport/meanScale.js +0 -8
- package/dist/core/viewport/meanScale.js.map +0 -1
- package/dist/core/viewport/pxExtent.js +0 -42
- package/dist/core/viewport/pxExtent.js.map +0 -1
- package/dist/debug/flag.js.map +0 -1
- package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
- package/dist/features/focus/gateLayer.js +0 -14
- package/dist/features/focus/gateLayer.js.map +0 -1
- package/dist/features/focus/useCanvasFocus.js +0 -29
- package/dist/features/focus/useCanvasFocus.js.map +0 -1
- package/dist/features/groups/children.js.map +0 -1
- package/dist/features/groups/composePose.js.map +0 -1
- package/dist/features/groups/nestedHit.js.map +0 -1
- package/dist/features/groups/unionOfChildren.js.map +0 -1
- package/dist/features/images/imageCache.js +0 -94
- package/dist/features/images/imageCache.js.map +0 -1
- package/dist/features/ingestion/index.js +0 -8
- package/dist/features/meshPaint/bake.js +0 -79
- package/dist/features/meshPaint/bake.js.map +0 -1
- package/dist/features/meshPaint/bakeCache.js +0 -59
- package/dist/features/meshPaint/bakeCache.js.map +0 -1
- package/dist/features/meshPaint/handles.js +0 -86
- package/dist/features/meshPaint/handles.js.map +0 -1
- package/dist/features/meshPaint/lazyKind.js.map +0 -1
- package/dist/features/meshPaint/meshPaint.js +0 -236
- package/dist/features/meshPaint/meshPaint.js.map +0 -1
- package/dist/features/meshPaint/meshShader.js +0 -6
- package/dist/features/meshPaint/meshShader.js.map +0 -1
- package/dist/features/meshPaint/register.js +0 -7
- package/dist/features/meshPaint/register.js.map +0 -1
- package/dist/features/meshPaint/surface.js +0 -110
- package/dist/features/meshPaint/surface.js.map +0 -1
- package/dist/features/minimap/actions.js +0 -53
- package/dist/features/minimap/actions.js.map +0 -1
- package/dist/features/minimap/createMinimapContribution.js +0 -96
- package/dist/features/minimap/createMinimapContribution.js.map +0 -1
- package/dist/features/minimap/layers.js +0 -103
- package/dist/features/minimap/layers.js.map +0 -1
- package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
- package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
- package/dist/features/parallax/createParallaxLayer.js +0 -26
- package/dist/features/parallax/createParallaxLayer.js.map +0 -1
- package/dist/features/parallax/createParallaxPlane.js +0 -26
- package/dist/features/parallax/createParallaxPlane.js.map +0 -1
- package/dist/features/paths/anchorEdits.js +0 -156
- package/dist/features/paths/anchorEdits.js.map +0 -1
- package/dist/features/paths/anchors.js +0 -154
- package/dist/features/paths/anchors.js.map +0 -1
- package/dist/features/paths/booleans.js +0 -2
- package/dist/features/paths/markerCommands.js +0 -148
- package/dist/features/paths/markerCommands.js.map +0 -1
- package/dist/features/paths/markerSites.js +0 -59
- package/dist/features/paths/markerSites.js.map +0 -1
- package/dist/features/paths/markers.js +0 -95
- package/dist/features/paths/markers.js.map +0 -1
- package/dist/features/paths/nearestAnchor.js +0 -36
- package/dist/features/paths/nearestAnchor.js.map +0 -1
- package/dist/features/paths/pathInWorld.js +0 -41
- package/dist/features/paths/pathInWorld.js.map +0 -1
- package/dist/features/paths/poseDescriptor.js +0 -39
- package/dist/features/paths/poseDescriptor.js.map +0 -1
- package/dist/features/paths/tessellate/dash.js +0 -52
- package/dist/features/paths/tessellate/dash.js.map +0 -1
- package/dist/features/paths/tessellate/insets.js +0 -32
- package/dist/features/paths/tessellate/insets.js.map +0 -1
- package/dist/features/paths/tessellate/metric.js +0 -72
- package/dist/features/paths/tessellate/metric.js.map +0 -1
- package/dist/features/paths/tessellate/stroke.js +0 -170
- package/dist/features/paths/tessellate/stroke.js.map +0 -1
- package/dist/features/paths/tessellate/vertexWidths.js +0 -32
- package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
- package/dist/features/patterns/index.js +0 -23
- package/dist/features/patterns/index.js.map +0 -1
- package/dist/features/patterns/patterns-builtin.js +0 -38
- package/dist/features/patterns/patterns-builtin.js.map +0 -1
- package/dist/features/patterns/resolveSpec.js +0 -57
- package/dist/features/patterns/resolveSpec.js.map +0 -1
- package/dist/features/patterns/tileGeometry.js +0 -158
- package/dist/features/patterns/tileGeometry.js.map +0 -1
- package/dist/features/pointer/PointerContext.js +0 -45
- package/dist/features/pointer/PointerContext.js.map +0 -1
- package/dist/features/selection/SelectionContext.js +0 -46
- package/dist/features/selection/SelectionContext.js.map +0 -1
- package/dist/features/simulation/createSimulation.js +0 -61
- package/dist/features/simulation/createSimulation.js.map +0 -1
- package/dist/features/simulation/types.js +0 -6
- package/dist/features/simulation/types.js.map +0 -1
- package/dist/features/simulation/useSimulation.js +0 -74
- package/dist/features/simulation/useSimulation.js.map +0 -1
- package/dist/features/text/domRuns.js +0 -258
- package/dist/features/text/domRuns.js.map +0 -1
- package/dist/features/text/fitTextPose.js +0 -38
- package/dist/features/text/fitTextPose.js.map +0 -1
- package/dist/features/text/hitTest.js +0 -45
- package/dist/features/text/hitTest.js.map +0 -1
- package/dist/features/text/renderLabel.js +0 -14
- package/dist/features/text/renderLabel.js.map +0 -1
- package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
- package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
- package/dist/features/text/runs/flagRange.js +0 -53
- package/dist/features/text/runs/flagRange.js.map +0 -1
- package/dist/features/text/runs/rangeStyle.js +0 -135
- package/dist/features/text/runs/rangeStyle.js.map +0 -1
- package/dist/features/text/textCommand.js +0 -59
- package/dist/features/text/textCommand.js.map +0 -1
- package/dist/features/text/textToPath.js +0 -181
- package/dist/features/text/textToPath.js.map +0 -1
- package/dist/features/text/useTextEdit.js +0 -467
- package/dist/features/text/useTextEdit.js.map +0 -1
- package/dist/features/tiling/createTiledLayer.js +0 -63
- package/dist/features/tiling/createTiledLayer.js.map +0 -1
- package/dist/features/tiling/tiledProject.js +0 -14
- package/dist/features/tiling/tiledProject.js.map +0 -1
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
- package/dist/interactions/actions/defaults/align.js.map +0 -1
- package/dist/interactions/actions/defaults/booleans.js +0 -52
- package/dist/interactions/actions/defaults/booleans.js.map +0 -1
- package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
- package/dist/interactions/actions/defaults/clone.js +0 -107
- package/dist/interactions/actions/defaults/clone.js.map +0 -1
- package/dist/interactions/actions/defaults/createOutlines.js +0 -47
- package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
- package/dist/interactions/actions/defaults/distribute.js +0 -66
- package/dist/interactions/actions/defaults/distribute.js.map +0 -1
- package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
- package/dist/interactions/actions/defaults/flip.js +0 -119
- package/dist/interactions/actions/defaults/flip.js.map +0 -1
- package/dist/interactions/actions/defaults/freshNodeId.js +0 -10
- package/dist/interactions/actions/defaults/freshNodeId.js.map +0 -1
- package/dist/interactions/actions/defaults/insert.js +0 -288
- package/dist/interactions/actions/defaults/insert.js.map +0 -1
- package/dist/interactions/actions/defaults/lassoSelect.js +0 -156
- package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
- package/dist/interactions/actions/defaults/move.js +0 -760
- package/dist/interactions/actions/defaults/move.js.map +0 -1
- package/dist/interactions/actions/defaults/resize.js +0 -335
- package/dist/interactions/actions/defaults/resize.js.map +0 -1
- package/dist/interactions/actions/defaults/rotate.js +0 -184
- package/dist/interactions/actions/defaults/rotate.js.map +0 -1
- package/dist/interactions/actions/previewOverrides.js +0 -25
- package/dist/interactions/actions/previewOverrides.js.map +0 -1
- package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
- package/dist/math-Drrw4ewZ.d.ts +0 -160
- package/dist/registerProgram-BMZRDgrh.d.ts +0 -197
- package/dist/renderer/DrawCommand.js +0 -6
- package/dist/renderer/DrawCommand.js.map +0 -1
- package/dist/renderer/WeaselRenderer.js +0 -331
- package/dist/renderer/WeaselRenderer.js.map +0 -1
- package/dist/renderer/batchClip.js +0 -46
- package/dist/renderer/batchClip.js.map +0 -1
- package/dist/renderer/cache/GLImageCache.js +0 -64
- package/dist/renderer/cache/GLImageCache.js.map +0 -1
- package/dist/renderer/cache/GLMeshCache.js +0 -102
- package/dist/renderer/cache/GLMeshCache.js.map +0 -1
- package/dist/renderer/cache/GLTextureCache.js +0 -51
- package/dist/renderer/cache/GLTextureCache.js.map +0 -1
- package/dist/renderer/cache/GradientRampAtlas.js +0 -82
- package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
- package/dist/renderer/cache/cache.js +0 -13
- package/dist/renderer/cache/cache.js.map +0 -1
- package/dist/renderer/cache/markerCommandCache.js +0 -63
- package/dist/renderer/cache/markerCommandCache.js.map +0 -1
- package/dist/renderer/cache/outlineMeshCache.js +0 -15
- package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
- package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
- package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
- package/dist/renderer/cache/strokeMeshCache.js +0 -55
- package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
- package/dist/renderer/cullDrawCommands.js +0 -90
- package/dist/renderer/cullDrawCommands.js.map +0 -1
- package/dist/renderer/draw.js +0 -1135
- package/dist/renderer/draw.js.map +0 -1
- package/dist/renderer/drawBatch.js +0 -198
- package/dist/renderer/drawBatch.js.map +0 -1
- package/dist/renderer/effects/EffectTargets.js +0 -45
- package/dist/renderer/effects/EffectTargets.js.map +0 -1
- package/dist/renderer/effects/builtins.js +0 -31
- package/dist/renderer/effects/builtins.js.map +0 -1
- package/dist/renderer/effects/composite.js +0 -9
- package/dist/renderer/effects/composite.js.map +0 -1
- package/dist/renderer/effects/effectPrelude.js +0 -10
- package/dist/renderer/effects/effectPrelude.js.map +0 -1
- package/dist/renderer/effects/types.js +0 -10
- package/dist/renderer/effects/types.js.map +0 -1
- package/dist/renderer/glyphOutlineMesh.js +0 -67
- package/dist/renderer/glyphOutlineMesh.js.map +0 -1
- package/dist/renderer/index.js +0 -19
- package/dist/renderer/math/color.js +0 -341
- package/dist/renderer/math/color.js.map +0 -1
- package/dist/renderer/math/mat3.js +0 -76
- package/dist/renderer/math/mat3.js.map +0 -1
- package/dist/renderer/math/patternSpace.js +0 -22
- package/dist/renderer/math/patternSpace.js.map +0 -1
- package/dist/renderer/math/viewToMat3.js +0 -19
- package/dist/renderer/math/viewToMat3.js.map +0 -1
- package/dist/renderer/paintResources.js +0 -18
- package/dist/renderer/paintResources.js.map +0 -1
- package/dist/renderer/paintScratch.js +0 -37
- package/dist/renderer/paintScratch.js.map +0 -1
- package/dist/renderer/shaders/ShaderProgram.js +0 -74
- package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
- package/dist/renderer/shaders/batchFill.js +0 -119
- package/dist/renderer/shaders/batchFill.js.map +0 -1
- package/dist/renderer/shaders/customPrelude.js +0 -34
- package/dist/renderer/shaders/customPrelude.js.map +0 -1
- package/dist/renderer/shaders/extractUniformNames.js +0 -184
- package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
- package/dist/renderer/shaders/glyphPaint.js +0 -61
- package/dist/renderer/shaders/glyphPaint.js.map +0 -1
- package/dist/renderer/shaders/gradFill.js +0 -30
- package/dist/renderer/shaders/gradFill.js.map +0 -1
- package/dist/renderer/shaders/imageFill.js +0 -14
- package/dist/renderer/shaders/imageFill.js.map +0 -1
- package/dist/renderer/shaders/pathFill.js +0 -13
- package/dist/renderer/shaders/pathFill.js.map +0 -1
- package/dist/renderer/shaders/patternFill.js +0 -24
- package/dist/renderer/shaders/patternFill.js.map +0 -1
- package/dist/renderer/shaders/registerProgram.js +0 -18
- package/dist/renderer/shaders/registerProgram.js.map +0 -1
- package/dist/renderer/spriteSheet.js +0 -14
- package/dist/renderer/spriteSheet.js.map +0 -1
- package/dist/renderer/state/GroupState.js +0 -77
- package/dist/renderer/state/GroupState.js.map +0 -1
- package/dist/renderer/strokeLengths.js +0 -50
- package/dist/renderer/strokeLengths.js.map +0 -1
- package/dist/renderer/syntheticItalic.js +0 -6
- package/dist/renderer/syntheticItalic.js.map +0 -1
- package/dist/renderer/textures/registerTexture.js +0 -14
- package/dist/renderer/textures/registerTexture.js.map +0 -1
- package/dist/scheduling/useVisibleRaf.js +0 -69
- package/dist/scheduling/useVisibleRaf.js.map +0 -1
- package/dist/test-seams-CuIxe0xY.d.ts +0 -356
- package/dist/tools/prefs.js +0 -62
- package/dist/tools/prefs.js.map +0 -1
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
//#region src/renderer/shaders/ShaderProgram.ts
|
|
2
|
-
var e = class extends Error {
|
|
3
|
-
stage;
|
|
4
|
-
log;
|
|
5
|
-
constructor(e, t) {
|
|
6
|
-
super(`shader ${e} failure: ${t}`), this.stage = e, this.log = t, this.name = "ShaderCompileError";
|
|
7
|
-
}
|
|
8
|
-
}, t = class {
|
|
9
|
-
gl;
|
|
10
|
-
handle;
|
|
11
|
-
uniforms = /* @__PURE__ */ new Map();
|
|
12
|
-
arrays = /* @__PURE__ */ new Map();
|
|
13
|
-
attributes = /* @__PURE__ */ new Map();
|
|
14
|
-
constructor(t, n, r) {
|
|
15
|
-
this.gl = t;
|
|
16
|
-
let i = this.compile(t.VERTEX_SHADER, n, "vertex"), a;
|
|
17
|
-
try {
|
|
18
|
-
a = this.compile(t.FRAGMENT_SHADER, r, "fragment");
|
|
19
|
-
} catch (e) {
|
|
20
|
-
throw t.deleteShader(i), e;
|
|
21
|
-
}
|
|
22
|
-
let o = t.createProgram();
|
|
23
|
-
if (!o) throw t.deleteShader(i), t.deleteShader(a), Error("createProgram returned null");
|
|
24
|
-
if (t.attachShader(o, i), t.attachShader(o, a), t.linkProgram(o), t.deleteShader(i), t.deleteShader(a), !t.getProgramParameter(o, t.LINK_STATUS)) {
|
|
25
|
-
let n = t.getProgramInfoLog(o) ?? "";
|
|
26
|
-
throw t.deleteProgram(o), new e("link", n);
|
|
27
|
-
}
|
|
28
|
-
this.handle = o;
|
|
29
|
-
}
|
|
30
|
-
compile(t, n, r) {
|
|
31
|
-
let i = this.gl, a = i.createShader(t);
|
|
32
|
-
if (!a) throw Error("createShader returned null");
|
|
33
|
-
if (i.shaderSource(a, n), i.compileShader(a), !i.getShaderParameter(a, i.COMPILE_STATUS)) {
|
|
34
|
-
let t = i.getShaderInfoLog(a) ?? "";
|
|
35
|
-
throw i.deleteShader(a), new e(r, t);
|
|
36
|
-
}
|
|
37
|
-
return a;
|
|
38
|
-
}
|
|
39
|
-
lookupUniforms(e) {
|
|
40
|
-
for (let t of e) {
|
|
41
|
-
let e = this.gl.getUniformLocation(this.handle, t);
|
|
42
|
-
e !== null && this.uniforms.set(t, e);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
lookupUniformArrays(e) {
|
|
46
|
-
for (let [t, { type: n, size: r }] of e) {
|
|
47
|
-
let e = `${t}[0]`, i = this.uniforms.get(e) ?? this.gl.getUniformLocation(this.handle, e);
|
|
48
|
-
i !== null && this.arrays.set(t, {
|
|
49
|
-
type: n,
|
|
50
|
-
size: r,
|
|
51
|
-
location: i
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
lookupAttributes(e) {
|
|
56
|
-
for (let t of e) {
|
|
57
|
-
let e = this.gl.getAttribLocation(this.handle, t);
|
|
58
|
-
e >= 0 && this.attributes.set(t, e);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
uniform(e) {
|
|
62
|
-
return this.uniforms.get(e);
|
|
63
|
-
}
|
|
64
|
-
uniformArray(e) {
|
|
65
|
-
return this.arrays.get(e);
|
|
66
|
-
}
|
|
67
|
-
attribute(e) {
|
|
68
|
-
return this.attributes.get(e);
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
//#endregion
|
|
72
|
-
export { e as ShaderCompileError, t as ShaderProgram };
|
|
73
|
-
|
|
74
|
-
//# sourceMappingURL=ShaderProgram.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ShaderProgram.js","names":["ShaderCompileError","stage","log","ShaderProgram","gl","vs","vertSrc","fs","fragSrc","program","shader","type","source","name","names","loc","decls","base","location"],"sources":["../../../src/renderer/shaders/ShaderProgram.ts"],"sourcesContent":["/**\n * Minimal compile/link/lookup wrapper for a GL program. Throws\n * `ShaderCompileError` on compile or link failure with the GL info log\n * embedded in the error message — never returns a half-initialized program.\n *\n * Designed so test code can stub `getShaderParameter` / `getProgramParameter`\n * via the recorder Proxy without further special-casing.\n */\n\nexport type Stage = 'vertex' | 'fragment' | 'link';\n\n/** Thrown when a shader fails to compile or link, carrying which stage failed\n * and the driver's log. */\nexport class ShaderCompileError extends Error {\n constructor(public readonly stage: Stage, public readonly log: string) {\n super(`shader ${stage} failure: ${log}`);\n this.name = 'ShaderCompileError';\n }\n}\n\n/** An array uniform a program can be written as a whole: its element type as\n * declared, its declared length, and the location of slot 0. */\nexport interface UniformArray {\n readonly type: string;\n readonly size: number;\n readonly location: WebGLUniformLocation;\n}\n\n/** A linked GL program with its uniform and attribute locations cached by name. */\nexport class ShaderProgram {\n readonly handle: WebGLProgram;\n private readonly uniforms = new Map<string, WebGLUniformLocation>();\n private readonly arrays = new Map<string, UniformArray>();\n private readonly attributes = new Map<string, number>();\n\n constructor(\n private readonly gl: WebGL2RenderingContext,\n vertSrc: string,\n fragSrc: string,\n ) {\n const vs = this.compile(gl.VERTEX_SHADER, vertSrc, 'vertex');\n let fs: WebGLShader;\n try {\n fs = this.compile(gl.FRAGMENT_SHADER, fragSrc, 'fragment');\n } catch (e) {\n gl.deleteShader(vs);\n throw e;\n }\n const program = gl.createProgram();\n if (!program) {\n gl.deleteShader(vs);\n gl.deleteShader(fs);\n throw new Error('createProgram returned null');\n }\n gl.attachShader(program, vs);\n gl.attachShader(program, fs);\n gl.linkProgram(program);\n // Flagged for deletion, attached shaders live exactly as long as the\n // program, so `deleteProgram` frees them too.\n gl.deleteShader(vs);\n gl.deleteShader(fs);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n const log = gl.getProgramInfoLog(program) ?? '';\n gl.deleteProgram(program);\n throw new ShaderCompileError('link', log);\n }\n this.handle = program;\n }\n\n private compile(type: number, source: string, stage: Stage): WebGLShader {\n const gl = this.gl;\n const shader = gl.createShader(type);\n if (!shader) throw new Error('createShader returned null');\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n const log = gl.getShaderInfoLog(shader) ?? '';\n gl.deleteShader(shader);\n throw new ShaderCompileError(stage, log);\n }\n return shader;\n }\n\n lookupUniforms(names: readonly string[]): void {\n for (const name of names) {\n const loc = this.gl.getUniformLocation(this.handle, name);\n if (loc !== null) this.uniforms.set(name, loc);\n }\n }\n\n /** Record each array's slot-0 location under its bare name. An array the\n * driver optimized away has no location and is left out. */\n lookupUniformArrays(decls: ReadonlyMap<string, { type: string; size: number }>): void {\n for (const [name, { type, size }] of decls) {\n const base = `${name}[0]`;\n const location = this.uniforms.get(base) ?? this.gl.getUniformLocation(this.handle, base);\n if (location !== null) this.arrays.set(name, { type, size, location });\n }\n }\n\n lookupAttributes(names: readonly string[]): void {\n for (const name of names) {\n const loc = this.gl.getAttribLocation(this.handle, name);\n if (loc >= 0) this.attributes.set(name, loc);\n }\n }\n\n uniform(name: string): WebGLUniformLocation | undefined {\n return this.uniforms.get(name);\n }\n\n uniformArray(name: string): UniformArray | undefined {\n return this.arrays.get(name);\n }\n\n attribute(name: string): number | undefined {\n return this.attributes.get(name);\n }\n}\n"],"mappings":";AAaA,IAAaA,IAAb,cAAwC,MAAM;CAChB;CAA8B;CAA1D,YAAY,GAA8B,GAA6B;EAErE,AADA,MAAM,UAAUC,EAAM,YAAYC,GAAK,GADb,KAAA,QAAAD,GAA8B,KAAA,MAAAC,GAExD,KAAK,OAAO;CACd;AACF,GAWaC,IAAb,MAA2B;CAON;CANnB;CACA,2BAA4B,IAAI,IAAkC;CAClE,yBAA0B,IAAI,IAA0B;CACxD,6BAA8B,IAAI,IAAoB;CAEtD,YACE,GACA,GACA,GACA;EAHiB,KAAA,KAAAC;EAIjB,IAAMC,IAAK,KAAK,QAAQD,EAAG,eAAeE,GAAS,QAAQ,GACvDC;EACJ,IAAI;GACF,IAAK,KAAK,QAAQH,EAAG,iBAAiBI,GAAS,UAAU;EAC3D,SAAS,GAAG;GAEV,MADAJ,EAAG,aAAaC,CAAE,GACZ;EACR;EACA,IAAMI,IAAUL,EAAG,cAAc;EACjC,IAAI,CAACK,GAGH,MAFAL,EAAG,aAAaC,CAAE,GAClBD,EAAG,aAAaG,CAAE,GACR,MAAM,6BAA6B;EAS/C,IAPAH,EAAG,aAAaK,GAASJ,CAAE,GAC3BD,EAAG,aAAaK,GAASF,CAAE,GAC3BH,EAAG,YAAYK,CAAO,GAGtBL,EAAG,aAAaC,CAAE,GAClBD,EAAG,aAAaG,CAAE,GACd,CAACH,EAAG,oBAAoBK,GAASL,EAAG,WAAW,GAAG;GACpD,IAAMF,IAAME,EAAG,kBAAkBK,CAAO,KAAK;GAE7C,MADAL,EAAG,cAAcK,CAAO,GAClB,IAAIT,EAAmB,QAAQE,CAAG;EAC1C;EACA,KAAK,SAASO;CAChB;CAEA,QAAgB,GAAc,GAAgB,GAA2B;EACvE,IAAML,IAAK,KAAK,IACVM,IAASN,EAAG,aAAaO,CAAI;EACnC,IAAI,CAACD,GAAQ,MAAU,MAAM,4BAA4B;EAGzD,IAFAN,EAAG,aAAaM,GAAQE,CAAM,GAC9BR,EAAG,cAAcM,CAAM,GACnB,CAACN,EAAG,mBAAmBM,GAAQN,EAAG,cAAc,GAAG;GACrD,IAAMF,IAAME,EAAG,iBAAiBM,CAAM,KAAK;GAE3C,MADAN,EAAG,aAAaM,CAAM,GAChB,IAAIV,EAAmBC,GAAOC,CAAG;EACzC;EACA,OAAOQ;CACT;CAEA,eAAe,GAAgC;EAC7C,KAAK,IAAMG,KAAQC,GAAO;GACxB,IAAMC,IAAM,KAAK,GAAG,mBAAmB,KAAK,QAAQF,CAAI;GACxD,AAAIE,MAAQ,QAAM,KAAK,SAAS,IAAIF,GAAME,CAAG;EAC/C;CACF;CAIA,oBAAoB,GAAkE;EACpF,KAAK,IAAM,CAACF,GAAM,EAAE,SAAM,cAAWG,GAAO;GAC1C,IAAMC,IAAO,GAAGJ,EAAK,MACfK,IAAW,KAAK,SAAS,IAAID,CAAI,KAAK,KAAK,GAAG,mBAAmB,KAAK,QAAQA,CAAI;GACxF,AAAIC,MAAa,QAAM,KAAK,OAAO,IAAIL,GAAM;IAAE;IAAM;IAAM;GAAS,CAAC;EACvE;CACF;CAEA,iBAAiB,GAAgC;EAC/C,KAAK,IAAMA,KAAQC,GAAO;GACxB,IAAMC,IAAM,KAAK,GAAG,kBAAkB,KAAK,QAAQF,CAAI;GACvD,AAAIE,KAAO,KAAG,KAAK,WAAW,IAAIF,GAAME,CAAG;EAC7C;CACF;CAEA,QAAQ,GAAgD;EACtD,OAAO,KAAK,SAAS,IAAIF,CAAI;CAC/B;CAEA,aAAa,GAAwC;EACnD,OAAO,KAAK,OAAO,IAAIA,CAAI;CAC7B;CAEA,UAAU,GAAkC;EAC1C,OAAO,KAAK,WAAW,IAAIA,CAAI;CACjC;AACF"}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { GLYPH_COVERAGE_GLSL as e } from "@weasel-js/font";
|
|
2
|
-
//#region src/renderer/shaders/batchFill.ts
|
|
3
|
-
var t = 8, n = 0, r = 0, i = 3, a = 4, o = (1 / (2 * Math.PI)).toFixed(10);
|
|
4
|
-
function s(e, n) {
|
|
5
|
-
return e + t * n;
|
|
6
|
-
}
|
|
7
|
-
var c = {
|
|
8
|
-
a_position: 0,
|
|
9
|
-
a_vertexColor: 1,
|
|
10
|
-
a_uv: 2,
|
|
11
|
-
a_post: 3,
|
|
12
|
-
a_texSlot: 4
|
|
13
|
-
}, l = c;
|
|
14
|
-
function u(e) {
|
|
15
|
-
let t = [];
|
|
16
|
-
for (let n = 1; n < e; n++) t.push(` if (slot == ${n}) return texture(u_samplers[${n}], uv);`);
|
|
17
|
-
return t.join("\n");
|
|
18
|
-
}
|
|
19
|
-
var d = `#version 300 es
|
|
20
|
-
layout(location = ${l.a_position}) in vec2 a_position;
|
|
21
|
-
layout(location = ${l.a_vertexColor}) in vec4 a_vertexColor;
|
|
22
|
-
layout(location = ${l.a_uv}) in vec2 a_uv;
|
|
23
|
-
layout(location = ${l.a_post}) in float a_post;
|
|
24
|
-
layout(location = ${l.a_texSlot}) in float a_texSlot;
|
|
25
|
-
uniform mat3 u_proj;
|
|
26
|
-
uniform mat3 u_model;
|
|
27
|
-
out vec4 v_vertexColor;
|
|
28
|
-
out vec2 v_uv;
|
|
29
|
-
out float v_post;
|
|
30
|
-
flat out int v_texSlot;
|
|
31
|
-
flat out float v_paintMode;
|
|
32
|
-
void main() {
|
|
33
|
-
vec3 screen = u_model * vec3(a_position, 1.0);
|
|
34
|
-
vec3 clip = u_proj * vec3(screen.xy, 1.0);
|
|
35
|
-
gl_Position = vec4(clip.xy, 0.0, 1.0);
|
|
36
|
-
v_vertexColor = a_vertexColor;
|
|
37
|
-
v_uv = a_uv;
|
|
38
|
-
v_post = a_post;
|
|
39
|
-
// slot + 8 * mode, unpacked — see the file header for why they share a float.
|
|
40
|
-
int packed = int(a_texSlot + 0.5);
|
|
41
|
-
v_texSlot = packed % ${t};
|
|
42
|
-
v_paintMode = float(packed / ${t});
|
|
43
|
-
}
|
|
44
|
-
`, f = `#version 300 es
|
|
45
|
-
precision highp float;
|
|
46
|
-
in vec4 v_vertexColor;
|
|
47
|
-
in vec2 v_uv;
|
|
48
|
-
in float v_post;
|
|
49
|
-
flat in int v_texSlot;
|
|
50
|
-
flat in float v_paintMode;
|
|
51
|
-
uniform sampler2D u_samplers[${t}];
|
|
52
|
-
uniform vec4 u_color;
|
|
53
|
-
uniform float u_alpha;
|
|
54
|
-
uniform float u_synthBold;
|
|
55
|
-
uniform vec2 u_fieldScale[${t}];
|
|
56
|
-
uniform mat4 u_colorMatrix;
|
|
57
|
-
uniform vec4 u_colorBias;
|
|
58
|
-
out vec4 outColor;
|
|
59
|
-
|
|
60
|
-
vec4 sampleSlot(int slot, vec2 uv) {
|
|
61
|
-
${u(t)}
|
|
62
|
-
return texture(u_samplers[0], uv);
|
|
63
|
-
}
|
|
64
|
-
${e}
|
|
65
|
-
void main() {
|
|
66
|
-
float isGrad = step(2.5, v_paintMode);
|
|
67
|
-
// A radial or conic vertex carries a gradient-space coordinate rather than a
|
|
68
|
-
// texture coordinate, and its atlas row rather than an alpha. The sample is
|
|
69
|
-
// split across the branch rather than the coordinate selected before it: an
|
|
70
|
-
// arm that reads v_uv straight is a fetch the hardware can schedule against a
|
|
71
|
-
// varying, and one reading a coordinate the shader computed is not. Selecting
|
|
72
|
-
// the coordinate first and sampling once costs 29-54% of a fragment that is
|
|
73
|
-
// not a gradient; splitting it is within the measurement's own spread of free
|
|
74
|
-
// (tests/perf/fill-rate.spec.ts, teitou, 2026-10-05).
|
|
75
|
-
//
|
|
76
|
-
// Branching at all is safe here where it would not be around the glyph math:
|
|
77
|
-
// v_paintMode is flat, so every fragment of a quad takes the same arm, and
|
|
78
|
-
// nothing in either arm is a derivative.
|
|
79
|
-
vec4 texel;
|
|
80
|
-
if (isGrad > 0.5) {
|
|
81
|
-
float t = v_paintMode > 3.5
|
|
82
|
-
? fract(atan(v_uv.y, v_uv.x) * ${o})
|
|
83
|
-
: length(v_uv);
|
|
84
|
-
texel = sampleSlot(v_texSlot, vec2(t, v_post));
|
|
85
|
-
} else {
|
|
86
|
-
texel = sampleSlot(v_texSlot, v_uv);
|
|
87
|
-
}
|
|
88
|
-
float isGlyph = step(0.5, v_paintMode) * step(v_paintMode, 2.5);
|
|
89
|
-
// Unconditional, and multiplied out afterwards rather than branched around:
|
|
90
|
-
// see the file header.
|
|
91
|
-
float coverage = glyphCoverage(texel, v_paintMode, u_synthBold, v_uv, u_fieldScale[v_texSlot]);
|
|
92
|
-
// A glyph's texel is a distance field, so it takes no part in the color; a
|
|
93
|
-
// plain vertex multiplies its texel in as it always did.
|
|
94
|
-
vec4 src = mix(texel, vec4(1.0), isGlyph) * u_color * v_vertexColor;
|
|
95
|
-
vec4 mapped = clamp(u_colorMatrix * src + u_colorBias, 0.0, 1.0);
|
|
96
|
-
float a = mapped.a * u_alpha * mix(v_post, 1.0, isGrad) * mix(1.0, coverage, isGlyph);
|
|
97
|
-
outColor = vec4(mapped.rgb * a, a);
|
|
98
|
-
}
|
|
99
|
-
`, p = [
|
|
100
|
-
"u_proj",
|
|
101
|
-
"u_model",
|
|
102
|
-
"u_samplers",
|
|
103
|
-
"u_color",
|
|
104
|
-
"u_alpha",
|
|
105
|
-
"u_synthBold",
|
|
106
|
-
"u_fieldScale",
|
|
107
|
-
"u_colorMatrix",
|
|
108
|
-
"u_colorBias"
|
|
109
|
-
], m = [
|
|
110
|
-
"a_position",
|
|
111
|
-
"a_vertexColor",
|
|
112
|
-
"a_uv",
|
|
113
|
-
"a_post",
|
|
114
|
-
"a_texSlot"
|
|
115
|
-
];
|
|
116
|
-
//#endregion
|
|
117
|
-
export { c as BATCH_ATTRIBUTE_LOCATIONS, m as BATCH_FILL_ATTRIBUTES, p as BATCH_FILL_UNIFORMS, f as BATCH_FRAG_SRC, t as BATCH_TEXTURE_SLOTS, d as BATCH_VERT_SRC, a as PAINT_MODE_CONIC, r as PAINT_MODE_PLAIN, i as PAINT_MODE_RADIAL, n as WHITE_SLOT, s as packSlot };
|
|
118
|
-
|
|
119
|
-
//# sourceMappingURL=batchFill.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"batchFill.js","names":["BATCH_TEXTURE_SLOTS","WHITE_SLOT","PAINT_MODE_PLAIN","PAINT_MODE_RADIAL","PAINT_MODE_CONIC","INV_TAU","packSlot","slot","mode","BATCH_ATTRIBUTE_LOCATIONS","L","sampleChain","arms","i","slots","BATCH_VERT_SRC","BATCH_FRAG_SRC","GLYPH_COVERAGE_GLSL","BATCH_FILL_UNIFORMS","BATCH_FILL_ATTRIBUTES"],"sources":["../../../src/renderer/shaders/batchFill.ts"],"sourcesContent":["/**\n * GLSL ES 3.0 source for the batch program — the one shader a run of solid\n * geometry, image quads and glyphs shares.\n *\n * **Every vertex names the texture it samples.** `a_texSlot` is an index into\n * `u_samplers`, and slot 0 is always the 1x1 white texel, so a solid's\n * `texture() * a_vertexColor` is the vertex color exactly. The multiply is\n * exact: an 8-bit white texel samples to 1.0, and 1.0 * x is x.\n *\n * The slot is per vertex rather than per flush because the run holds several\n * textures at once. Reserving slot 0 for white is what makes a solid's promise\n * true no matter what else joins its run: before this, a solid carried the\n * white texel's UV but the flush bound the run's *image*, so every ground rect\n * beside an atlas quad came out multiplied by whatever texel sat at the middle\n * of that atlas. A wall of white grounds drew olive.\n *\n * **The chain is unrolled because GLSL ES 3.0 will not index a sampler array\n * with a variable** — the index must be a constant expression, so `if (i == 0)\n * … if (i == 1) …` over constants is the only legal form. `v_texSlot` is\n * constant across a primitive, so the branch is uniform within any one\n * triangle; the coordinate it samples is a varying computed before the branch,\n * which is what keeps the implicit derivatives well defined.\n *\n * **The paint mode rides in `a_texSlot`, and the glyph math runs either way.**\n * A glyph vertex names a font atlas whose texel is a distance field rather than\n * a color, so its coverage comes from `glyphCoverage` and its color comes from\n * the vertex alone. That coverage is computed on every fragment, glyph or not,\n * because a derivative in non-uniform control flow is undefined and it\n * has to be taken before anything selects on the mode — see\n * `GLYPH_COVERAGE_GLSL`. Priced head to head at 432M fragments a frame\n * (`tests/perf/fill-rate.spec.ts`, teitou, 2026-10-05), that adds a quarter to\n * a half to a fragment that is not a glyph — 27–48% over four sittings. The\n * figure recorded when text landed was 1.4%, and it was wrong: the control\n * gated its glyph math on a factor the compiler folds to zero, so it timed a\n * shader with that math deleted. Fill is not what a wall is bound by, which is\n * why the conclusion stands even though the number did not.\n *\n * **A gradient is a textured quad off the ramp atlas.** A linear one needs no\n * mode: its ramp position is affine in position, so `a_uv` is (ramp position,\n * atlas row) and the plain path samples it. A radial or conic one carries the\n * gradient-space coordinate instead — affine even where the ramp position is\n * not — with the row in `a_post`, and the fragment takes a `length` or an\n * `atan` of it behind a branch on the flat mode. That branch carries the sample\n * itself, not just the coordinate: a fetch from a varying is one the hardware\n * schedules ahead, and one from a computed coordinate is not: on teitou the\n * computed-coordinate form costs 29–54% of a fragment, and the split one\n * −5–11%, which is the spread of the measurement itself\n * (`tests/perf/fill-rate.spec.ts`, 2026-10-05).\n *\n * **Mode and slot share one attribute because the vertex is the thing that\n * costs.** Both are small enumerations, so `slot + 8 * mode` packs them with\n * room to spare. Carrying the mode as a float of its own instead measured\n * slower at the densest rung of `tests/perf/atlas-wall.spec.ts`, timed then in\n * blocks of frames, a method since retired (`tests/perf/README.md`, \"Timing a\n * frame\"), so the size of it is unknown. The reason holds without the number: the\n * whole batch exists to make one buffer write a frame cheap, and every extra\n * float widens that write for every rect and quad in the run, not just for the\n * glyphs that read it.\n *\n * `a_post` is the alpha factor applied *after* the color matrix. An image quad\n * puts its opacity there, where `u_opacity` used to be — the fold is exact for\n * the same reason the old image shader's was, the matrix cannot see it. Solid\n * geometry and glyphs leave it at 1 and fold their own alpha into\n * `a_vertexColor`, which is only sound under an identity matrix; `draw.ts` owns\n * that condition.\n *\n * Inputs:\n * a_position vec2 screen-space x,y of the corner\n * a_vertexColor vec4 straight-alpha color; (1,1,1,1) on an image vertex\n * a_uv vec2 texture coordinate 0..1; the white texel for solids\n * a_post float alpha factor applied after the color matrix\n * a_texSlot float slot + 8 * paint mode; slot 0 is the white texel\n *\n * Output: PREMULTIPLIED alpha. Blend: `gl.blendFunc(ONE, ONE_MINUS_SRC_ALPHA)`.\n */\n\nimport { GLYPH_COVERAGE_GLSL } from '@weasel-js/font';\n\n/**\n * Texture units the batch program samples, slot 0 being the white texel.\n *\n * Fixed rather than queried: WebGL2 guarantees at least 16 fragment texture\n * units, so 8 is available everywhere without asking, and asking would mean a\n * `getParameter` the GL recorder answers with a recording function rather than\n * a number. Seven textures in one run is what \"a document with a handful of\n * distinct images, and a font or two\" needs; past that the run breaks as it\n * always did, and every extra slot is another compare in the fragment chain.\n */\nexport const BATCH_TEXTURE_SLOTS = 8;\n\n/** Slot every solid vertex carries — the white texel, bound by `flushBatch`. */\nexport const WHITE_SLOT = 0;\n\n/** Paint mode for everything whose texel is a color rather than a field. */\nexport const PAINT_MODE_PLAIN = 0;\n\n/**\n * Paint modes for the two gradients whose ramp position is not affine in\n * position — the ones a vertex cannot simply carry.\n *\n * They sit above the glyph modes (1 and 2), so `isGlyph` is a range rather than\n * a threshold. What a vertex carries in these modes is the *gradient-space\n * coordinate* in `a_uv` and its atlas row in `a_post`: that coordinate is\n * affine even where the ramp position is not, so the CPU folds it to two affine\n * rows and the shader takes a `length` or an `atan` of the result.\n *\n * A linear gradient has neither mode: its ramp position is affine outright, so\n * it is a textured quad off the atlas at `PAINT_MODE_PLAIN` and pays nothing\n * here.\n */\nexport const PAINT_MODE_RADIAL = 3;\nexport const PAINT_MODE_CONIC = 4;\n\n/** 1 / 2π, which turns a conic gradient's angle into a ramp position. */\nconst INV_TAU = (1 / (2 * Math.PI)).toFixed(10);\n\n/** Pack a texture slot and a paint mode into the one `a_texSlot` float. */\nexport function packSlot(slot: number, mode: number): number {\n return slot + BATCH_TEXTURE_SLOTS * mode;\n}\n\n/** The paint mode packed into an `a_texSlot` value — for the tests, which read\n * a vertex back out of the buffer it was staged into. */\nexport function paintModeOf(packed: number): number {\n return Math.floor((packed + 0.5) / BATCH_TEXTURE_SLOTS);\n}\n\n/**\n * Where each batch attribute lives, pinned rather than left to the linker so\n * `glyphPaint`'s program can draw from the same VAO.\n */\nexport const BATCH_ATTRIBUTE_LOCATIONS = {\n a_position: 0, a_vertexColor: 1, a_uv: 2, a_post: 3, a_texSlot: 4,\n} as const;\n\nconst L = BATCH_ATTRIBUTE_LOCATIONS;\n\nfunction sampleChain(slots: number): string {\n const arms: string[] = [];\n for (let i = 1; i < slots; i++) {\n arms.push(` if (slot == ${i}) return texture(u_samplers[${i}], uv);`);\n }\n return arms.join('\\n');\n}\n\nexport const BATCH_VERT_SRC = /* glsl */ `#version 300 es\nlayout(location = ${L.a_position}) in vec2 a_position;\nlayout(location = ${L.a_vertexColor}) in vec4 a_vertexColor;\nlayout(location = ${L.a_uv}) in vec2 a_uv;\nlayout(location = ${L.a_post}) in float a_post;\nlayout(location = ${L.a_texSlot}) in float a_texSlot;\nuniform mat3 u_proj;\nuniform mat3 u_model;\nout vec4 v_vertexColor;\nout vec2 v_uv;\nout float v_post;\nflat out int v_texSlot;\nflat out float v_paintMode;\nvoid main() {\n vec3 screen = u_model * vec3(a_position, 1.0);\n vec3 clip = u_proj * vec3(screen.xy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n v_vertexColor = a_vertexColor;\n v_uv = a_uv;\n v_post = a_post;\n // slot + 8 * mode, unpacked — see the file header for why they share a float.\n int packed = int(a_texSlot + 0.5);\n v_texSlot = packed % ${BATCH_TEXTURE_SLOTS};\n v_paintMode = float(packed / ${BATCH_TEXTURE_SLOTS});\n}\n`;\n\nexport const BATCH_FRAG_SRC = /* glsl */ `#version 300 es\nprecision highp float;\nin vec4 v_vertexColor;\nin vec2 v_uv;\nin float v_post;\nflat in int v_texSlot;\nflat in float v_paintMode;\nuniform sampler2D u_samplers[${BATCH_TEXTURE_SLOTS}];\nuniform vec4 u_color;\nuniform float u_alpha;\nuniform float u_synthBold;\nuniform vec2 u_fieldScale[${BATCH_TEXTURE_SLOTS}];\nuniform mat4 u_colorMatrix;\nuniform vec4 u_colorBias;\nout vec4 outColor;\n\nvec4 sampleSlot(int slot, vec2 uv) {\n${sampleChain(BATCH_TEXTURE_SLOTS)}\n return texture(u_samplers[0], uv);\n}\n${GLYPH_COVERAGE_GLSL}\nvoid main() {\n float isGrad = step(2.5, v_paintMode);\n // A radial or conic vertex carries a gradient-space coordinate rather than a\n // texture coordinate, and its atlas row rather than an alpha. The sample is\n // split across the branch rather than the coordinate selected before it: an\n // arm that reads v_uv straight is a fetch the hardware can schedule against a\n // varying, and one reading a coordinate the shader computed is not. Selecting\n // the coordinate first and sampling once costs 29-54% of a fragment that is\n // not a gradient; splitting it is within the measurement's own spread of free\n // (tests/perf/fill-rate.spec.ts, teitou, 2026-10-05).\n //\n // Branching at all is safe here where it would not be around the glyph math:\n // v_paintMode is flat, so every fragment of a quad takes the same arm, and\n // nothing in either arm is a derivative.\n vec4 texel;\n if (isGrad > 0.5) {\n float t = v_paintMode > ${PAINT_MODE_CONIC - 0.5}\n ? fract(atan(v_uv.y, v_uv.x) * ${INV_TAU})\n : length(v_uv);\n texel = sampleSlot(v_texSlot, vec2(t, v_post));\n } else {\n texel = sampleSlot(v_texSlot, v_uv);\n }\n float isGlyph = step(0.5, v_paintMode) * step(v_paintMode, 2.5);\n // Unconditional, and multiplied out afterwards rather than branched around:\n // see the file header.\n float coverage = glyphCoverage(texel, v_paintMode, u_synthBold, v_uv, u_fieldScale[v_texSlot]);\n // A glyph's texel is a distance field, so it takes no part in the color; a\n // plain vertex multiplies its texel in as it always did.\n vec4 src = mix(texel, vec4(1.0), isGlyph) * u_color * v_vertexColor;\n vec4 mapped = clamp(u_colorMatrix * src + u_colorBias, 0.0, 1.0);\n float a = mapped.a * u_alpha * mix(v_post, 1.0, isGrad) * mix(1.0, coverage, isGlyph);\n outColor = vec4(mapped.rgb * a, a);\n}\n`;\n\nexport const BATCH_FILL_UNIFORMS = [\n 'u_proj', 'u_model', 'u_samplers', 'u_color', 'u_alpha', 'u_synthBold', 'u_fieldScale',\n 'u_colorMatrix', 'u_colorBias',\n] as const;\n\nexport const BATCH_FILL_ATTRIBUTES = [\n 'a_position', 'a_vertexColor', 'a_uv', 'a_post', 'a_texSlot',\n] as const;\n"],"mappings":";;AAwFA,IAAaA,IAAsB,GAGtBC,IAAa,GAGbC,IAAmB,GAgBnBC,IAAoB,GACpBC,IAAmB,GAG1BC,KAAW,KAAK,IAAI,KAAK,IAAA,CAAK,QAAQ,EAAE;AAG9C,SAAgBC,EAAS,GAAc,GAAsB;CAC3D,OAAOC,IAAOP,IAAsBQ;AACtC;AAYA,IAAaC,IAA4B;CACvC,YAAY;CAAG,eAAe;CAAG,MAAM;CAAG,QAAQ;CAAG,WAAW;AAClE,GAEMC,IAAID;AAEV,SAASE,EAAY,GAAuB;CAC1C,IAAMC,IAAiB,CAAC;CACxB,KAAK,IAAIC,IAAI,GAAGA,IAAIC,GAAO,KACzB,EAAK,KAAK,iBAAiBD,EAAE,8BAA8BA,EAAE,QAAQ;CAEvE,OAAOD,EAAK,KAAK,IAAI;AACvB;AAEA,IAAaG,IAA4B;oBACrBL,EAAE,WAAW;oBACbA,EAAE,cAAc;oBAChBA,EAAE,KAAK;oBACPA,EAAE,OAAO;oBACTA,EAAE,UAAU;;;;;;;;;;;;;;;;;yBAiBPV,EAAoB;iCACZA,EAAoB;;GAIxCgB,IAA4B;;;;;;;+BAOVhB,EAAoB;;;;4BAIvBA,EAAoB;;;;;;EAM9CW,EAAYX,CAAmB,EAAE;;;EAGjCiB,EAAoB;;;;;;;;;;;;;;;;;;uCAkBiBZ,EAAQ;;;;;;;;;;;;;;;;;GAmBlCa,IAAsB;CACjC;CAAU;CAAW;CAAc;CAAW;CAAW;CAAe;CACxE;CAAiB;AACnB,GAEaC,IAAwB;CACnC;CAAc;CAAiB;CAAQ;CAAU;AACnD"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
//#region src/renderer/shaders/customPrelude.ts
|
|
2
|
-
var e = "#version 300 es\nin vec2 a_position;\nin vec2 a_uv;\nuniform vec4 u_bounds;\nuniform mat3 u_view;\nuniform mat3 u_proj;\nout vec2 v_uv;\nout vec2 v_screen;\nout vec2 v_world;\n\nvoid main() {\n float sx = u_bounds.x + a_uv.x * u_bounds.z;\n float sy = u_bounds.y + a_uv.y * u_bounds.w;\n v_screen = vec2(sx, sy);\n v_uv = a_uv;\n\n float det = u_view[0][0] * u_view[1][1] - u_view[0][1] * u_view[1][0];\n // A flat view has no inverse: every fragment reads the world origin, not a plausible wrong mapping.\n float invDet = det != 0.0 ? 1.0 / det : 0.0;\n v_world = vec2(\n ((sx - u_view[2][0]) * u_view[1][1] + (sy - u_view[2][1]) * -u_view[0][1]) * invDet,\n ((sx - u_view[2][0]) * -u_view[1][0] + (sy - u_view[2][1]) * u_view[0][0]) * invDet\n );\n\n vec3 clip = u_proj * vec3(sx, sy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n}\n", t = ["a_position", "a_uv"], n = [
|
|
3
|
-
"u_bounds",
|
|
4
|
-
"u_view",
|
|
5
|
-
"u_proj"
|
|
6
|
-
], r = new Float32Array([
|
|
7
|
-
-1,
|
|
8
|
-
-1,
|
|
9
|
-
0,
|
|
10
|
-
0,
|
|
11
|
-
1,
|
|
12
|
-
-1,
|
|
13
|
-
1,
|
|
14
|
-
0,
|
|
15
|
-
1,
|
|
16
|
-
1,
|
|
17
|
-
1,
|
|
18
|
-
1,
|
|
19
|
-
-1,
|
|
20
|
-
1,
|
|
21
|
-
0,
|
|
22
|
-
1
|
|
23
|
-
]), i = new Uint16Array([
|
|
24
|
-
0,
|
|
25
|
-
1,
|
|
26
|
-
2,
|
|
27
|
-
0,
|
|
28
|
-
2,
|
|
29
|
-
3
|
|
30
|
-
]);
|
|
31
|
-
//#endregion
|
|
32
|
-
export { t as CUSTOM_ATTRIBUTES, n as CUSTOM_KIT_UNIFORMS, e as CUSTOM_VERT_SRC, i as QUAD_INDICES, r as QUAD_VERTICES };
|
|
33
|
-
|
|
34
|
-
//# sourceMappingURL=customPrelude.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"customPrelude.js","names":["CUSTOM_VERT_SRC","CUSTOM_ATTRIBUTES","CUSTOM_KIT_UNIFORMS","QUAD_VERTICES","QUAD_INDICES"],"sources":["../../../src/renderer/shaders/customPrelude.ts"],"sourcesContent":["/**\n * Kit-supplied vertex shader for kind:'shader' DrawCommands.\n *\n * Consumers write only fragment shaders. The vertex shader is fixed:\n * it generates a quad covering the DrawCommand's `bounds` rect and\n * exposes three varyings the fragment shader can consume.\n *\n * PUBLIC CONTRACT (varyings and kit uniforms):\n *\n * in vec2 a_position -1..1 NDC quad (set by the kit)\n * in vec2 a_uv 0..1 across the bounds rect\n *\n * uniform vec4 u_bounds x, y, w, h in screen-space CSS pixels (set by kit)\n * uniform mat3 u_view weasel View matrix, world→screen (set by kit)\n * uniform mat3 u_proj screen→clip projection (internal, not documented)\n *\n * out vec2 v_uv 0..1 across the bounds rect (top-left origin)\n * out vec2 v_screen screen-space pixel coordinate of this fragment\n * out vec2 v_world approximate world-space coordinate (via view inverse)\n *\n * PREMULTIPLIED ALPHA REQUIREMENT:\n * The canvas uses premultipliedAlpha:true (the WebGL2 default). Consumer\n * fragment shaders MUST output premultiplied alpha:\n *\n * outColor = vec4(rgb * a, a); // CORRECT\n * outColor = vec4(rgb, a); // WRONG — over-brightens translucent pixels\n *\n * The renderer uses gl.blendFunc(ONE, ONE_MINUS_SRC_ALPHA) to match.\n */\n\n/**\n * Kit-supplied vertex shader source for custom programs.\n *\n * @remarks\n * **PREMULTIPLIED ALPHA:** Your fragment shader MUST output `vec4(rgb * a, a)`,\n * not `vec4(rgb, a)`. The canvas is composited with premultipliedAlpha:true;\n * straight-alpha output causes over-bright rendering for any fragment with a < 1.\n */\nexport const CUSTOM_VERT_SRC = /* glsl */ `#version 300 es\nin vec2 a_position;\nin vec2 a_uv;\nuniform vec4 u_bounds;\nuniform mat3 u_view;\nuniform mat3 u_proj;\nout vec2 v_uv;\nout vec2 v_screen;\nout vec2 v_world;\n\nvoid main() {\n float sx = u_bounds.x + a_uv.x * u_bounds.z;\n float sy = u_bounds.y + a_uv.y * u_bounds.w;\n v_screen = vec2(sx, sy);\n v_uv = a_uv;\n\n float det = u_view[0][0] * u_view[1][1] - u_view[0][1] * u_view[1][0];\n // A flat view has no inverse: every fragment reads the world origin, not a plausible wrong mapping.\n float invDet = det != 0.0 ? 1.0 / det : 0.0;\n v_world = vec2(\n ((sx - u_view[2][0]) * u_view[1][1] + (sy - u_view[2][1]) * -u_view[0][1]) * invDet,\n ((sx - u_view[2][0]) * -u_view[1][0] + (sy - u_view[2][1]) * u_view[0][0]) * invDet\n );\n\n vec3 clip = u_proj * vec3(sx, sy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n}\n`;\n\n/**\n * Attribute names used by the custom vertex shader.\n * The renderer looks these up after compile.\n */\nexport const CUSTOM_ATTRIBUTES = ['a_position', 'a_uv'] as const;\n\n/**\n * Kit-managed uniform names for custom shader programs.\n * These are set per-draw by drawShader(); consumers must NOT redeclare them.\n */\nexport const CUSTOM_KIT_UNIFORMS = ['u_bounds', 'u_view', 'u_proj'] as const;\n\n/**\n * Auto-quad geometry: 4 vertices covering NDC (-1..1) and UV (0..1).\n *\n * Layout per vertex: [a_position.x, a_position.y, a_uv.x, a_uv.y]\n *\n * Vertex order (UV space, screen y-down):\n * 0: top-left (-1, -1, 0, 0)\n * 1: top-right ( 1, -1, 1, 0)\n * 2: bottom-right ( 1, 1, 1, 1)\n * 3: bottom-left (-1, 1, 0, 1)\n */\nexport const QUAD_VERTICES = new Float32Array([\n -1, -1, 0, 0,\n 1, -1, 1, 0,\n 1, 1, 1, 1,\n -1, 1, 0, 1,\n]);\n\nexport const QUAD_INDICES = new Uint16Array([0, 1, 2, 0, 2, 3]);\n"],"mappings":";AAsCA,IAAaA,IAA6B,61BAiC7BC,IAAoB,CAAC,cAAc,MAAM,GAMzCC,IAAsB;CAAC;CAAY;CAAU;AAAQ,GAarDC,IAAgB,IAAI,aAAa;CAC5C;CAAI;CAAK;CAAG;CACX;CAAG;CAAK;CAAG;CACX;CAAI;CAAI;CAAG;CACZ;CAAK;CAAI;CAAG;AACd,CAAC,GAEYC,IAAe,IAAI,YAAY;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC,CAAC"}
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
//#region src/renderer/shaders/extractUniformNames.ts
|
|
2
|
-
var e = /* @__PURE__ */ new Set([
|
|
3
|
-
"lowp",
|
|
4
|
-
"mediump",
|
|
5
|
-
"highp",
|
|
6
|
-
"precise",
|
|
7
|
-
"invariant",
|
|
8
|
-
"centroid",
|
|
9
|
-
"flat",
|
|
10
|
-
"smooth",
|
|
11
|
-
"noperspective"
|
|
12
|
-
]), t = /^[A-Za-z_]\w*$/, n = 16;
|
|
13
|
-
function r(e) {
|
|
14
|
-
return [...a(e).names];
|
|
15
|
-
}
|
|
16
|
-
function i(e) {
|
|
17
|
-
return a(e).arrays;
|
|
18
|
-
}
|
|
19
|
-
function a(r) {
|
|
20
|
-
let { code: i, defines: a } = o(r), c = s(i), u = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Set(), p = /* @__PURE__ */ new Map(), m = (e, t) => {
|
|
21
|
-
if (t > n) return null;
|
|
22
|
-
let r = null;
|
|
23
|
-
for (let n of a.get(e) ?? []) {
|
|
24
|
-
let e = l(s(n), (e) => m(e, t + 1));
|
|
25
|
-
e !== null && (r === null || e > r) && (r = e);
|
|
26
|
-
}
|
|
27
|
-
return r ?? u.get(e) ?? null;
|
|
28
|
-
}, h = (e, t) => l(c.slice(e, t), (e) => m(e, 0)), g = (e) => {
|
|
29
|
-
let t = 0;
|
|
30
|
-
for (let n = e; n < c.length; n++) if (c[n] === "(" || c[n] === "[" || c[n] === "{") t++;
|
|
31
|
-
else if ((c[n] === ")" || c[n] === "]" || c[n] === "}") && --t === 0) return n;
|
|
32
|
-
return c.length;
|
|
33
|
-
}, _ = (e) => {
|
|
34
|
-
if (c[e] !== "[") return [void 0, e];
|
|
35
|
-
let t = g(e);
|
|
36
|
-
return [h(e + 1, t), t + 1];
|
|
37
|
-
}, v = (e, n) => {
|
|
38
|
-
let r = [];
|
|
39
|
-
for (; e < c.length && c[e] !== ";" && c[e] !== "}";) {
|
|
40
|
-
let i = c[e], [a, o] = _(e + 1);
|
|
41
|
-
for (e = o, t.test(i) && r.push({
|
|
42
|
-
name: i,
|
|
43
|
-
size: a === void 0 ? n : a
|
|
44
|
-
}); e < c.length && c[e] !== "," && c[e] !== ";" && c[e] !== "}";) e = c[e] === "(" || c[e] === "[" || c[e] === "{" ? g(e) + 1 : e + 1;
|
|
45
|
-
c[e] === "," && e++;
|
|
46
|
-
}
|
|
47
|
-
return [r, e];
|
|
48
|
-
}, y = (t) => {
|
|
49
|
-
let n = t + 1, r = c[n] === "{" ? void 0 : c[n++], i = [];
|
|
50
|
-
if (c[n] !== "{") return [i, n];
|
|
51
|
-
let a = g(n);
|
|
52
|
-
for (n++; n < a;) {
|
|
53
|
-
for (; e.has(c[n]);) n++;
|
|
54
|
-
let t;
|
|
55
|
-
c[n] === "struct" ? [t, n] = y(n) : t = c[n++];
|
|
56
|
-
let [r, a] = _(n), [o, s] = v(a, r);
|
|
57
|
-
for (let e of o) e.size !== null && i.push({
|
|
58
|
-
type: t,
|
|
59
|
-
name: e.name,
|
|
60
|
-
size: e.size ?? null
|
|
61
|
-
});
|
|
62
|
-
n = s + 1;
|
|
63
|
-
}
|
|
64
|
-
if (r) {
|
|
65
|
-
let e = d.get(r) ?? [];
|
|
66
|
-
for (let t of i) e.some((e) => e.name === t.name) || e.push(t);
|
|
67
|
-
d.set(r, e);
|
|
68
|
-
}
|
|
69
|
-
return [i, a + 1];
|
|
70
|
-
}, b = (e, t, r, i) => {
|
|
71
|
-
if (i > n) return;
|
|
72
|
-
if (r !== null) {
|
|
73
|
-
if (typeof t == "string" && !d.has(t)) {
|
|
74
|
-
let n = p.get(e);
|
|
75
|
-
(!n || r > n.size) && p.set(e, {
|
|
76
|
-
type: t,
|
|
77
|
-
size: r
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
for (let n = 0; n < r; n++) b(`${e}[${n}]`, t, null, i + 1);
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
let a = typeof t == "string" ? d.get(t) : t;
|
|
84
|
-
if (!a) {
|
|
85
|
-
f.add(e);
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
for (let t of a) b(`${e}.${t.name}`, t.type, t.size, i + 1);
|
|
89
|
-
}, x = 0;
|
|
90
|
-
for (let n = 0; n < c.length; n++) {
|
|
91
|
-
let r = c[n];
|
|
92
|
-
if (r === "{") x++;
|
|
93
|
-
else if (r === "}") x--;
|
|
94
|
-
else if (r === "struct") n = y(n)[1] - 1;
|
|
95
|
-
else if (x === 0 && r === "const") {
|
|
96
|
-
let r = n + 1;
|
|
97
|
-
for (; e.has(c[r]);) r++;
|
|
98
|
-
if ((c[r] === "int" || c[r] === "uint") && t.test(c[r + 1] ?? "") && c[r + 2] === "=") {
|
|
99
|
-
let e = r + 3;
|
|
100
|
-
for (; e < c.length && c[e] !== ";";) e++;
|
|
101
|
-
let t = h(r + 3, e), n = u.get(c[r + 1]);
|
|
102
|
-
t !== null && (n === void 0 || t > n) && u.set(c[r + 1], t);
|
|
103
|
-
}
|
|
104
|
-
} else if (x === 0 && r === "uniform") {
|
|
105
|
-
let t = n + 1;
|
|
106
|
-
for (; e.has(c[t]);) t++;
|
|
107
|
-
let r;
|
|
108
|
-
if (c[t] === "struct") [r, t] = y(t);
|
|
109
|
-
else if (c[t + 1] === "{") {
|
|
110
|
-
for (t = g(t + 1) + 1; t < c.length && c[t] !== ";";) t++;
|
|
111
|
-
n = t;
|
|
112
|
-
continue;
|
|
113
|
-
} else r = c[t++];
|
|
114
|
-
let [i, a] = _(t), [o, s] = v(a, i);
|
|
115
|
-
for (let e of o) e.size !== null && b(e.name, r, e.size ?? null, 0);
|
|
116
|
-
n = s;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return {
|
|
120
|
-
names: f,
|
|
121
|
-
arrays: p
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
function o(e) {
|
|
125
|
-
let t = e.replace(/\\\r?\n/g, ""), n = "";
|
|
126
|
-
for (let e = 0; e < t.length; e++) if (t[e] === "/" && t[e + 1] === "/") {
|
|
127
|
-
for (; e < t.length && t[e] !== "\n";) e++;
|
|
128
|
-
n += "\n";
|
|
129
|
-
} else if (t[e] === "/" && t[e + 1] === "*") {
|
|
130
|
-
let r = t.indexOf("*/", e + 2);
|
|
131
|
-
e = r < 0 ? t.length : r + 1, n += " ";
|
|
132
|
-
} else n += t[e];
|
|
133
|
-
let r = /* @__PURE__ */ new Map();
|
|
134
|
-
return {
|
|
135
|
-
code: n.split("\n").map((e) => {
|
|
136
|
-
if (!/^\s*#/.test(e)) return e;
|
|
137
|
-
let t = /^\s*#\s*define\s+([A-Za-z_]\w*)(\(?)(.*)$/.exec(e);
|
|
138
|
-
return t && !t[2] && r.set(t[1], [...r.get(t[1]) ?? [], t[3].trim()]), "";
|
|
139
|
-
}).join("\n"),
|
|
140
|
-
defines: r
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
function s(e) {
|
|
144
|
-
return e.match(/[A-Za-z_]\w*|\d[\w.]*|\S/g) ?? [];
|
|
145
|
-
}
|
|
146
|
-
function c(e) {
|
|
147
|
-
let t = /^(?:0[xX]([0-9a-fA-F]+)|(0[0-7]*)|([1-9]\d*))[uU]?$/.exec(e);
|
|
148
|
-
return t ? t[1] === void 0 ? t[2] === void 0 ? parseInt(t[3], 10) : parseInt(t[2], 8) : parseInt(t[1], 16) : null;
|
|
149
|
-
}
|
|
150
|
-
function l(e, n) {
|
|
151
|
-
let r = 0, i = () => {
|
|
152
|
-
let a = e[r++];
|
|
153
|
-
if (a === "(") {
|
|
154
|
-
let t = o();
|
|
155
|
-
return e[r++] === ")" ? t : null;
|
|
156
|
-
}
|
|
157
|
-
if (a === "-") {
|
|
158
|
-
let e = i();
|
|
159
|
-
return e === null ? null : -e;
|
|
160
|
-
}
|
|
161
|
-
return a === "+" ? i() : a === void 0 ? null : c(a) ?? (t.test(a) ? n(a) : null);
|
|
162
|
-
}, a = () => {
|
|
163
|
-
let t = i();
|
|
164
|
-
for (; t !== null && (e[r] === "*" || e[r] === "/" || e[r] === "%");) {
|
|
165
|
-
let n = e[r++], a = i();
|
|
166
|
-
if (a === null || n !== "*" && a === 0) return null;
|
|
167
|
-
t = n === "*" ? t * a : n === "/" ? Math.trunc(t / a) : t % a;
|
|
168
|
-
}
|
|
169
|
-
return t;
|
|
170
|
-
}, o = () => {
|
|
171
|
-
let t = a();
|
|
172
|
-
for (; t !== null && (e[r] === "+" || e[r] === "-");) {
|
|
173
|
-
let n = e[r++], i = a();
|
|
174
|
-
if (i === null) return null;
|
|
175
|
-
t = n === "+" ? t + i : t - i;
|
|
176
|
-
}
|
|
177
|
-
return t;
|
|
178
|
-
}, s = o();
|
|
179
|
-
return r === e.length && s !== null && s >= 0 ? s : null;
|
|
180
|
-
}
|
|
181
|
-
//#endregion
|
|
182
|
-
export { i as extractUniformArrays, r as extractUniformNames };
|
|
183
|
-
|
|
184
|
-
//# sourceMappingURL=extractUniformNames.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extractUniformNames.js","names":["QUALIFIERS","IDENT","MAX_DEPTH","extractUniformNames","scanUniforms","glsl","extractUniformArrays","preprocess","toks","tokenize","code","consts","structs","out","arrays","resolveName","depth","best","body","defines","name","v","evalInt","n","evalSize","from","to","closer","k","open","arraySuffix","j","end","declarators","found","size","next","typeSize","structSpecifier","i","members","type","afterType","decls","term","d","prior","m","p","expand","t","spliced","stripped","line","def","src","intLiteral","tok","primary","sum","lookup","product","op","r"],"sources":["../../../src/renderer/shaders/extractUniformNames.ts"],"sourcesContent":["/** Qualifiers GLSL allows between `uniform` and the type name, and before a\n * struct member's type. */\nconst QUALIFIERS = new Set([\n 'lowp', 'mediump', 'highp', 'precise', 'invariant',\n 'centroid', 'flat', 'smooth', 'noperspective',\n]);\n\nconst IDENT = /^[A-Za-z_]\\w*$/;\nconst MAX_DEPTH = 16;\n\ninterface Member {\n readonly type: string | readonly Member[];\n readonly name: string;\n /** `null` for a non-array. */\n readonly size: number | null;\n}\n\n/**\n * The names a program's uniforms answer to in `getUniformLocation`: array\n * uniforms per slot (`u_ripples[0]`), struct uniforms per leaf\n * (`u_lights[1].pos`), nested structs and array members included.\n *\n * A declaration scanner over a token stream, not a GLSL parser. Comments are\n * stripped; interface blocks are skipped, since a UBO's members are bound\n * through a buffer rather than a location. Array sizes resolve through integer\n * literals, `#define`s and top-level `const int`s, with `+ - * / %` between\n * them; a size it cannot resolve drops that declarator, and a later write to\n * it warns.\n */\nexport function extractUniformNames(glsl: string): string[] {\n return [...scanUniforms(glsl).names];\n}\n\n/** An array uniform of a basic type: its element type as spelled (`vec3`,\n * `int`, `mat4`) and its declared length. */\nexport interface UniformArrayDecl {\n readonly type: string;\n readonly size: number;\n}\n\n/**\n * Every array of a basic type a program declares, keyed by the name its slots\n * hang off (`u_ripples` for `u_ripples[0]`). An array inside a struct is keyed\n * by its full path (`u_lights[1].weights`); an array of structs is not an\n * entry, since it has no single element type.\n */\nexport function extractUniformArrays(glsl: string): Map<string, UniformArrayDecl> {\n return scanUniforms(glsl).arrays;\n}\n\nfunction scanUniforms(glsl: string): { names: Set<string>; arrays: Map<string, UniformArrayDecl> } {\n const { code, defines } = preprocess(glsl);\n const toks = tokenize(code);\n const consts = new Map<string, number>();\n const structs = new Map<string, Member[]>();\n const out = new Set<string>();\n const arrays = new Map<string, UniformArrayDecl>();\n\n const resolveName = (name: string, depth: number): number | null => {\n if (depth > MAX_DEPTH) return null;\n let best: number | null = null;\n for (const body of defines.get(name) ?? []) {\n const v = evalInt(tokenize(body), (n) => resolveName(n, depth + 1));\n if (v !== null && (best === null || v > best)) best = v;\n }\n return best ?? consts.get(name) ?? null;\n };\n const evalSize = (from: number, to: number) => evalInt(toks.slice(from, to), (n) => resolveName(n, 0));\n\n /** Index of the token closing the bracket opened at `open`. */\n const closer = (open: number): number => {\n let depth = 0;\n for (let k = open; k < toks.length; k++) {\n if (toks[k] === '(' || toks[k] === '[' || toks[k] === '{') depth++;\n else if (toks[k] === ')' || toks[k] === ']' || toks[k] === '}') {\n if (--depth === 0) return k;\n }\n }\n return toks.length;\n };\n\n /** Parses `[size]` at `j` if present: the size (undefined if absent, null\n * if unresolvable) and where scanning resumes. */\n const arraySuffix = (j: number): [number | null | undefined, number] => {\n if (toks[j] !== '[') return [undefined, j];\n const end = closer(j);\n return [evalSize(j + 1, end), end + 1];\n };\n\n /** Declarators `a, b[2], c` up to the terminating `;` (or `}`), after the\n * type at `j`. Returns them and the index of the terminator. */\n const declarators = (\n j: number,\n typeSize: number | null | undefined,\n ): [{ name: string; size: number | null | undefined }[], number] => {\n const found: { name: string; size: number | null | undefined }[] = [];\n while (j < toks.length && toks[j] !== ';' && toks[j] !== '}') {\n const name = toks[j];\n const [size, next] = arraySuffix(j + 1);\n j = next;\n if (IDENT.test(name)) found.push({ name, size: size === undefined ? typeSize : size });\n // Skip an initializer, or anything else, to the next declarator.\n while (j < toks.length && toks[j] !== ',' && toks[j] !== ';' && toks[j] !== '}') {\n j = toks[j] === '(' || toks[j] === '[' || toks[j] === '{' ? closer(j) + 1 : j + 1;\n }\n if (toks[j] === ',') j++;\n }\n return [found, j];\n };\n\n /** `struct Name? { members }` at `i`; records a named struct. */\n const structSpecifier = (i: number): [Member[], number] => {\n let j = i + 1;\n const name = toks[j] !== '{' ? toks[j++] : undefined;\n const members: Member[] = [];\n if (toks[j] !== '{') return [members, j];\n const end = closer(j);\n j++;\n while (j < end) {\n while (QUALIFIERS.has(toks[j])) j++;\n let type: string | Member[];\n if (toks[j] === 'struct') [type, j] = structSpecifier(j);\n else type = toks[j++];\n const [typeSize, afterType] = arraySuffix(j);\n const [decls, term] = declarators(afterType, typeSize);\n for (const d of decls) if (d.size !== null) members.push({ type, name: d.name, size: d.size ?? null });\n j = term + 1;\n }\n if (name) {\n // A struct redefined in another preprocessor branch keeps both members lists.\n const prior = structs.get(name) ?? [];\n for (const m of members) if (!prior.some((p) => p.name === m.name)) prior.push(m);\n structs.set(name, prior);\n }\n return [members, end + 1];\n };\n\n const expand = (name: string, type: string | readonly Member[], size: number | null, depth: number): void => {\n if (depth > MAX_DEPTH) return;\n if (size !== null) {\n if (typeof type === 'string' && !structs.has(type)) {\n const prior = arrays.get(name);\n if (!prior || size > prior.size) arrays.set(name, { type, size });\n }\n for (let k = 0; k < size; k++) expand(`${name}[${k}]`, type, null, depth + 1);\n return;\n }\n const members = typeof type === 'string' ? structs.get(type) : type;\n if (!members) {\n out.add(name);\n return;\n }\n for (const m of members) expand(`${name}.${m.name}`, m.type, m.size, depth + 1);\n };\n\n let depth = 0;\n for (let i = 0; i < toks.length; i++) {\n const t = toks[i];\n if (t === '{') depth++;\n else if (t === '}') depth--;\n else if (t === 'struct') i = structSpecifier(i)[1] - 1;\n else if (depth === 0 && t === 'const') {\n let j = i + 1;\n while (QUALIFIERS.has(toks[j])) j++;\n if ((toks[j] === 'int' || toks[j] === 'uint') && IDENT.test(toks[j + 1] ?? '') && toks[j + 2] === '=') {\n let end = j + 3;\n while (end < toks.length && toks[end] !== ';') end++;\n const v = evalSize(j + 3, end);\n const prior = consts.get(toks[j + 1]);\n if (v !== null && (prior === undefined || v > prior)) consts.set(toks[j + 1], v);\n }\n } else if (depth === 0 && t === 'uniform') {\n let j = i + 1;\n while (QUALIFIERS.has(toks[j])) j++;\n let type: string | Member[];\n if (toks[j] === 'struct') {\n [type, j] = structSpecifier(j);\n } else if (toks[j + 1] === '{') {\n // An interface block: skip it and its instance name.\n j = closer(j + 1) + 1;\n while (j < toks.length && toks[j] !== ';') j++;\n i = j;\n continue;\n } else {\n type = toks[j++];\n }\n const [typeSize, afterType] = arraySuffix(j);\n const [decls, term] = declarators(afterType, typeSize);\n for (const d of decls) if (d.size !== null) expand(d.name, type, d.size ?? null, 0);\n i = term;\n }\n }\n return { names: out, arrays };\n}\n\n/** Comments stripped and directives removed. Every conditional branch is kept:\n * an extra name only looks up a null location, a missing one drops writes. */\nfunction preprocess(glsl: string): { code: string; defines: Map<string, string[]> } {\n const spliced = glsl.replace(/\\\\\\r?\\n/g, '');\n let stripped = '';\n for (let k = 0; k < spliced.length; k++) {\n if (spliced[k] === '/' && spliced[k + 1] === '/') {\n while (k < spliced.length && spliced[k] !== '\\n') k++;\n stripped += '\\n';\n } else if (spliced[k] === '/' && spliced[k + 1] === '*') {\n const end = spliced.indexOf('*/', k + 2);\n k = end < 0 ? spliced.length : end + 1;\n stripped += ' ';\n } else {\n stripped += spliced[k];\n }\n }\n const defines = new Map<string, string[]>();\n const lines = stripped.split('\\n').map((line) => {\n if (!/^\\s*#/.test(line)) return line;\n const def = /^\\s*#\\s*define\\s+([A-Za-z_]\\w*)(\\(?)(.*)$/.exec(line);\n if (def && !def[2]) defines.set(def[1], [...(defines.get(def[1]) ?? []), def[3].trim()]);\n return '';\n });\n return { code: lines.join('\\n'), defines };\n}\n\nfunction tokenize(src: string): string[] {\n return src.match(/[A-Za-z_]\\w*|\\d[\\w.]*|\\S/g) ?? [];\n}\n\nfunction intLiteral(tok: string): number | null {\n const m = /^(?:0[xX]([0-9a-fA-F]+)|(0[0-7]*)|([1-9]\\d*))[uU]?$/.exec(tok);\n if (!m) return null;\n if (m[1] !== undefined) return parseInt(m[1], 16);\n if (m[2] !== undefined) return parseInt(m[2], 8);\n return parseInt(m[3], 10);\n}\n\n/** Integer constant expression over `+ - * / %` and parentheses. */\nfunction evalInt(toks: readonly string[], lookup: (name: string) => number | null): number | null {\n let p = 0;\n const primary = (): number | null => {\n const t = toks[p++];\n if (t === '(') {\n const v = sum();\n return toks[p++] === ')' ? v : null;\n }\n if (t === '-') {\n const v = primary();\n return v === null ? null : -v;\n }\n if (t === '+') return primary();\n if (t === undefined) return null;\n return intLiteral(t) ?? (IDENT.test(t) ? lookup(t) : null);\n };\n const product = (): number | null => {\n let v = primary();\n while (v !== null && (toks[p] === '*' || toks[p] === '/' || toks[p] === '%')) {\n const op = toks[p++];\n const r = primary();\n if (r === null || (op !== '*' && r === 0)) return null;\n v = op === '*' ? v * r : op === '/' ? Math.trunc(v / r) : v % r;\n }\n return v;\n };\n const sum = (): number | null => {\n let v = product();\n while (v !== null && (toks[p] === '+' || toks[p] === '-')) {\n const op = toks[p++];\n const r = product();\n if (r === null) return null;\n v = op === '+' ? v + r : v - r;\n }\n return v;\n };\n const v = sum();\n return p === toks.length && v !== null && v >= 0 ? v : null;\n}\n"],"mappings":"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"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { BATCH_ATTRIBUTE_LOCATIONS as e, BATCH_TEXTURE_SLOTS as t } from "./batchFill.js";
|
|
2
|
-
import { GRAD_FILL_UNIFORMS as n, GRAD_PAINT_GLSL as r } from "./gradFill.js";
|
|
3
|
-
import { PATTERN_FILL_UNIFORMS as i, PATTERN_PAINT_GLSL as a } from "./patternFill.js";
|
|
4
|
-
import { GLYPH_COVERAGE_GLSL as o } from "@weasel-js/font";
|
|
5
|
-
//#region src/renderer/shaders/glyphPaint.ts
|
|
6
|
-
var s = e, c = `#version 300 es
|
|
7
|
-
layout(location = ${s.a_position}) in vec2 a_position;
|
|
8
|
-
layout(location = ${s.a_uv}) in vec2 a_uv;
|
|
9
|
-
layout(location = ${s.a_texSlot}) in float a_texSlot;
|
|
10
|
-
uniform mat3 u_proj;
|
|
11
|
-
uniform mat3 u_model;
|
|
12
|
-
uniform mat3 u_worldInv;
|
|
13
|
-
out vec2 v_world;
|
|
14
|
-
out vec2 v_uv;
|
|
15
|
-
flat out float v_glyphMode;
|
|
16
|
-
void main() {
|
|
17
|
-
vec3 screen = u_model * vec3(a_position, 1.0);
|
|
18
|
-
vec3 clip = u_proj * vec3(screen.xy, 1.0);
|
|
19
|
-
gl_Position = vec4(clip.xy, 0.0, 1.0);
|
|
20
|
-
v_world = (u_worldInv * vec3(screen.xy, 1.0)).xy;
|
|
21
|
-
v_uv = a_uv;
|
|
22
|
-
v_glyphMode = float(int(a_texSlot + 0.5) / ${t});
|
|
23
|
-
}
|
|
24
|
-
`;
|
|
25
|
-
function l(e) {
|
|
26
|
-
return `#version 300 es
|
|
27
|
-
precision highp float;
|
|
28
|
-
in vec2 v_world;
|
|
29
|
-
in vec2 v_uv;
|
|
30
|
-
flat in float v_glyphMode;
|
|
31
|
-
uniform sampler2D u_atlas;
|
|
32
|
-
uniform float u_synthBold;
|
|
33
|
-
uniform vec2 u_fieldScale;
|
|
34
|
-
${e}
|
|
35
|
-
${o}
|
|
36
|
-
out vec4 outColor;
|
|
37
|
-
void main() {
|
|
38
|
-
float coverage = glyphCoverage(texture(u_atlas, v_uv), v_glyphMode, u_synthBold, v_uv, u_fieldScale);
|
|
39
|
-
outColor = shadePaint(v_world) * coverage;
|
|
40
|
-
}
|
|
41
|
-
`;
|
|
42
|
-
}
|
|
43
|
-
var u = "\nuniform sampler2D u_sampler;\nvec4 shadePaint(vec2 uv) {\n return texture(u_sampler, uv);\n}\n", d = l(a), f = l(r), p = l(u), m = [
|
|
44
|
-
"u_atlas",
|
|
45
|
-
"u_synthBold",
|
|
46
|
-
"u_fieldScale"
|
|
47
|
-
], h = [...i, ...m], g = [...n, ...m], _ = [
|
|
48
|
-
"u_proj",
|
|
49
|
-
"u_model",
|
|
50
|
-
"u_worldInv",
|
|
51
|
-
"u_sampler",
|
|
52
|
-
...m
|
|
53
|
-
], v = [
|
|
54
|
-
"a_position",
|
|
55
|
-
"a_uv",
|
|
56
|
-
"a_texSlot"
|
|
57
|
-
];
|
|
58
|
-
//#endregion
|
|
59
|
-
export { f as GLYPH_GRAD_FRAG_SRC, g as GLYPH_GRAD_UNIFORMS, v as GLYPH_PAINT_ATTRIBUTES, c as GLYPH_PAINT_VERT_SRC, d as GLYPH_PATTERN_FRAG_SRC, h as GLYPH_PATTERN_UNIFORMS, p as GLYPH_TEXTURE_FRAG_SRC, _ as GLYPH_TEXTURE_UNIFORMS };
|
|
60
|
-
|
|
61
|
-
//# sourceMappingURL=glyphPaint.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glyphPaint.js","names":["L","BATCH_ATTRIBUTE_LOCATIONS","GLYPH_PAINT_VERT_SRC","BATCH_TEXTURE_SLOTS","fragSrc","paintGlsl","GLYPH_COVERAGE_GLSL","TEXTURE_PAINT_GLSL","GLYPH_PATTERN_FRAG_SRC","PATTERN_PAINT_GLSL","GLYPH_GRAD_FRAG_SRC","GRAD_PAINT_GLSL","GLYPH_TEXTURE_FRAG_SRC","GLYPH_UNIFORMS","GLYPH_PATTERN_UNIFORMS","PATTERN_FILL_UNIFORMS","GLYPH_GRAD_UNIFORMS","GRAD_FILL_UNIFORMS","GLYPH_TEXTURE_UNIFORMS","GLYPH_PAINT_ATTRIBUTES"],"sources":["../../../src/renderer/shaders/glyphPaint.ts"],"sourcesContent":["/**\n * GLSL ES 3.0 sources for atlas glyphs filled by a texture paint — a pattern, a\n * gradient or a registered kind — rather than one color.\n *\n * **The glyph is a mask over the paint.** The fragment takes its coverage from\n * the distance field exactly as the batch program does, and its color from the\n * same `shadePaint` the path program for that paint runs, at the same\n * paint-space point: `u_worldInv` applied to the screen position. An outline\n * glyph is a path, so it goes through that path program — which is what makes\n * a paint read the same on either side of the outline-tier threshold.\n *\n * **The vertices are the batch's.** A glyph run stages into `DrawBatch` as\n * usual and this program draws it in place of the batch program, so the\n * attribute locations are pinned to the batch shader's and one VAO serves\n * both. Positions arrive already in screen space, so `u_model` is identity.\n *\n * Coverage is taken before `shadePaint` runs, and outside any branch: `fwidth`\n * in non-uniform control flow is undefined. The gradient's branches are on a\n * uniform, so they could not make it so, but the order keeps it from mattering.\n *\n * Output: PREMULTIPLIED alpha, the paint's own scaled by coverage.\n */\n\nimport { GLYPH_COVERAGE_GLSL } from '@weasel-js/font';\nimport { BATCH_ATTRIBUTE_LOCATIONS, BATCH_TEXTURE_SLOTS } from './batchFill';\nimport { GRAD_FILL_UNIFORMS, GRAD_PAINT_GLSL } from './gradFill';\nimport { PATTERN_FILL_UNIFORMS, PATTERN_PAINT_GLSL } from './patternFill';\n\nconst L = BATCH_ATTRIBUTE_LOCATIONS;\n\nexport const GLYPH_PAINT_VERT_SRC = /* glsl */ `#version 300 es\nlayout(location = ${L.a_position}) in vec2 a_position;\nlayout(location = ${L.a_uv}) in vec2 a_uv;\nlayout(location = ${L.a_texSlot}) in float a_texSlot;\nuniform mat3 u_proj;\nuniform mat3 u_model;\nuniform mat3 u_worldInv;\nout vec2 v_world;\nout vec2 v_uv;\nflat out float v_glyphMode;\nvoid main() {\n vec3 screen = u_model * vec3(a_position, 1.0);\n vec3 clip = u_proj * vec3(screen.xy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n v_world = (u_worldInv * vec3(screen.xy, 1.0)).xy;\n v_uv = a_uv;\n v_glyphMode = float(int(a_texSlot + 0.5) / ${BATCH_TEXTURE_SLOTS});\n}\n`;\n\nfunction fragSrc(paintGlsl: string): string {\n return /* glsl */ `#version 300 es\nprecision highp float;\nin vec2 v_world;\nin vec2 v_uv;\nflat in float v_glyphMode;\nuniform sampler2D u_atlas;\nuniform float u_synthBold;\nuniform vec2 u_fieldScale;\n${paintGlsl}\n${GLYPH_COVERAGE_GLSL}\nout vec4 outColor;\nvoid main() {\n float coverage = glyphCoverage(texture(u_atlas, v_uv), v_glyphMode, u_synthBold, v_uv, u_fieldScale);\n outColor = shadePaint(v_world) * coverage;\n}\n`;\n}\n\n/**\n * A registered paint kind binds a whole program of its own, which nothing can\n * wrap in a mask, so it renders into an offscreen buffer first and the glyphs\n * sample that. `u_worldInv` takes the screen position straight to the\n * buffer's texture coordinate, and the texel is already premultiplied and\n * faded — the kind's own program did both.\n */\nconst TEXTURE_PAINT_GLSL = /* glsl */ `\nuniform sampler2D u_sampler;\nvec4 shadePaint(vec2 uv) {\n return texture(u_sampler, uv);\n}\n`;\n\nexport const GLYPH_PATTERN_FRAG_SRC = fragSrc(PATTERN_PAINT_GLSL);\nexport const GLYPH_GRAD_FRAG_SRC = fragSrc(GRAD_PAINT_GLSL);\nexport const GLYPH_TEXTURE_FRAG_SRC = fragSrc(TEXTURE_PAINT_GLSL);\n\nconst GLYPH_UNIFORMS = ['u_atlas', 'u_synthBold', 'u_fieldScale'] as const;\nexport const GLYPH_PATTERN_UNIFORMS = [...PATTERN_FILL_UNIFORMS, ...GLYPH_UNIFORMS] as const;\nexport const GLYPH_GRAD_UNIFORMS = [...GRAD_FILL_UNIFORMS, ...GLYPH_UNIFORMS] as const;\nexport const GLYPH_TEXTURE_UNIFORMS = [\n 'u_proj', 'u_model', 'u_worldInv', 'u_sampler', ...GLYPH_UNIFORMS,\n] as const;\nexport const GLYPH_PAINT_ATTRIBUTES = ['a_position', 'a_uv', 'a_texSlot'] as const;\n"],"mappings":";;;;;AA4BA,IAAMA,IAAIC,GAEGC,IAAkC;oBAC3BF,EAAE,WAAW;oBACbA,EAAE,KAAK;oBACPA,EAAE,UAAU;;;;;;;;;;;;;+CAaeG,EAAoB;;;AAInE,SAASC,EAAQ,GAA2B;CAC1C,OAAkB;;;;;;;;EAQlBC,EAAU;EACVC,EAAoB;;;;;;;AAOtB;AASA,IAAMC,IAAgC,qGAOzBC,IAAyBJ,EAAQK,CAAkB,GACnDC,IAAsBN,EAAQO,CAAe,GAC7CC,IAAyBR,EAAQG,CAAkB,GAE1DM,IAAiB;CAAC;CAAW;CAAe;AAAc,GACnDC,IAAyB,CAAC,GAAGC,GAAuB,GAAGF,CAAc,GACrEG,IAAsB,CAAC,GAAGC,GAAoB,GAAGJ,CAAc,GAC/DK,IAAyB;CACpC;CAAU;CAAW;CAAc;CAAa,GAAGL;AACrD,GACaM,IAAyB;CAAC;CAAc;CAAQ;AAAW"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
//#region src/renderer/shaders/gradFill.ts
|
|
2
|
-
var e = "#version 300 es\nin vec2 a_position;\nuniform mat3 u_proj;\nuniform mat3 u_model;\nuniform mat3 u_worldInv;\nout vec2 v_world;\nvoid main() {\n vec3 screen = u_model * vec3(a_position, 1.0);\n vec3 clip = u_proj * vec3(screen.xy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n vec3 world = u_worldInv * vec3(screen.xy, 1.0);\n v_world = world.xy;\n}\n", t = "\nuniform sampler2D u_ramp;\nuniform float u_rampV;\nuniform float u_alpha;\nuniform mat4 u_colorMatrix;\nuniform vec4 u_colorBias;\nuniform float u_opacity;\nuniform int u_gradKind;\nuniform vec2 u_gradP0;\nuniform vec2 u_gradDir;\nuniform float u_gradLen;\nuniform float u_gradRadius;\nuniform float u_gradAngle;\n\nconst float PI = 3.14159265358979323846;\n\nvec4 shadePaint(vec2 world) {\n float t;\n if (u_gradKind == 0) {\n vec2 d = world - u_gradP0;\n t = dot(d, u_gradDir) / max(u_gradLen, 0.0001);\n } else if (u_gradKind == 1) {\n t = length(world - u_gradP0) / max(u_gradRadius, 0.0001);\n } else {\n float a = atan(world.y - u_gradP0.y, world.x - u_gradP0.x) - u_gradAngle;\n t = fract(a / (2.0 * PI));\n }\n t = clamp(t, 0.0, 1.0);\n vec4 rampColor = texture(u_ramp, vec2(t, u_rampV));\n // Fill opacity into the alpha channel before the matrix, which is where the\n // batch program's vertex alpha sits. The two have to agree, since a linear\n // gradient goes through that one and a radial through this.\n vec4 src = vec4(rampColor.rgb, rampColor.a * u_opacity);\n vec4 mapped = clamp(u_colorMatrix * src + u_colorBias, 0.0, 1.0);\n float a = mapped.a * u_alpha;\n return vec4(mapped.rgb * a, a);\n}\n", n = `#version 300 es
|
|
3
|
-
precision highp float;
|
|
4
|
-
in vec2 v_world;
|
|
5
|
-
${t}
|
|
6
|
-
out vec4 outColor;
|
|
7
|
-
void main() {
|
|
8
|
-
outColor = shadePaint(v_world);
|
|
9
|
-
}
|
|
10
|
-
`, r = [
|
|
11
|
-
"u_proj",
|
|
12
|
-
"u_model",
|
|
13
|
-
"u_worldInv",
|
|
14
|
-
"u_ramp",
|
|
15
|
-
"u_rampV",
|
|
16
|
-
"u_alpha",
|
|
17
|
-
"u_opacity",
|
|
18
|
-
"u_colorMatrix",
|
|
19
|
-
"u_colorBias",
|
|
20
|
-
"u_gradKind",
|
|
21
|
-
"u_gradP0",
|
|
22
|
-
"u_gradDir",
|
|
23
|
-
"u_gradLen",
|
|
24
|
-
"u_gradRadius",
|
|
25
|
-
"u_gradAngle"
|
|
26
|
-
], i = ["a_position"];
|
|
27
|
-
//#endregion
|
|
28
|
-
export { i as GRAD_FILL_ATTRIBUTES, r as GRAD_FILL_UNIFORMS, n as GRAD_FRAG_SRC, t as GRAD_PAINT_GLSL, e as GRAD_VERT_SRC };
|
|
29
|
-
|
|
30
|
-
//# sourceMappingURL=gradFill.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gradFill.js","names":["GRAD_VERT_SRC","GRAD_PAINT_GLSL","GRAD_FRAG_SRC","GRAD_FILL_UNIFORMS","GRAD_FILL_ATTRIBUTES"],"sources":["../../../src/renderer/shaders/gradFill.ts"],"sourcesContent":["/**\n * GLSL ES 3.0 sources for gradient-fill paths (linear, radial, conic).\n *\n * Three gradient kinds via u_gradKind (0=linear, 1=radial, 2=conic).\n * The branch value is uniform across all fragments in one draw call — GPU\n * branch predictor handles uniform-value branches without warp divergence.\n *\n * Output convention §2: PREMULTIPLIED alpha.\n *\n * `u_ramp` is `GradientRampAtlas`'s texture, which holds every baked ramp in\n * the frame, one per row; `u_rampV` picks this fill's row.\n *\n * Step-4 limitation: u_worldInv is identity in v1 since draw.ts doesn't yet\n * receive a view matrix. Gradient coords therefore render in screen space.\n * Step 7 (port createPathLayer) wires the actual view-inverse through layers.\n */\n\nexport const GRAD_VERT_SRC = /* glsl */ `#version 300 es\nin vec2 a_position;\nuniform mat3 u_proj;\nuniform mat3 u_model;\nuniform mat3 u_worldInv;\nout vec2 v_world;\nvoid main() {\n vec3 screen = u_model * vec3(a_position, 1.0);\n vec3 clip = u_proj * vec3(screen.xy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n vec3 world = u_worldInv * vec3(screen.xy, 1.0);\n v_world = world.xy;\n}\n`;\n\n/**\n * The gradient's color at a gradient-space point, premultiplied — the whole\n * of the fragment stage but the point it is asked about, so the glyph program\n * can mask the same paint the path program draws.\n */\nexport const GRAD_PAINT_GLSL = /* glsl */ `\nuniform sampler2D u_ramp;\nuniform float u_rampV;\nuniform float u_alpha;\nuniform mat4 u_colorMatrix;\nuniform vec4 u_colorBias;\nuniform float u_opacity;\nuniform int u_gradKind;\nuniform vec2 u_gradP0;\nuniform vec2 u_gradDir;\nuniform float u_gradLen;\nuniform float u_gradRadius;\nuniform float u_gradAngle;\n\nconst float PI = 3.14159265358979323846;\n\nvec4 shadePaint(vec2 world) {\n float t;\n if (u_gradKind == 0) {\n vec2 d = world - u_gradP0;\n t = dot(d, u_gradDir) / max(u_gradLen, 0.0001);\n } else if (u_gradKind == 1) {\n t = length(world - u_gradP0) / max(u_gradRadius, 0.0001);\n } else {\n float a = atan(world.y - u_gradP0.y, world.x - u_gradP0.x) - u_gradAngle;\n t = fract(a / (2.0 * PI));\n }\n t = clamp(t, 0.0, 1.0);\n vec4 rampColor = texture(u_ramp, vec2(t, u_rampV));\n // Fill opacity into the alpha channel before the matrix, which is where the\n // batch program's vertex alpha sits. The two have to agree, since a linear\n // gradient goes through that one and a radial through this.\n vec4 src = vec4(rampColor.rgb, rampColor.a * u_opacity);\n vec4 mapped = clamp(u_colorMatrix * src + u_colorBias, 0.0, 1.0);\n float a = mapped.a * u_alpha;\n return vec4(mapped.rgb * a, a);\n}\n`;\n\nexport const GRAD_FRAG_SRC = /* glsl */ `#version 300 es\nprecision highp float;\nin vec2 v_world;\n${GRAD_PAINT_GLSL}\nout vec4 outColor;\nvoid main() {\n outColor = shadePaint(v_world);\n}\n`;\n\nexport const GRAD_FILL_UNIFORMS = [\n 'u_proj', 'u_model', 'u_worldInv', 'u_ramp', 'u_rampV',\n 'u_alpha', 'u_opacity', 'u_colorMatrix', 'u_colorBias',\n 'u_gradKind', 'u_gradP0', 'u_gradDir', 'u_gradLen', 'u_gradRadius', 'u_gradAngle',\n] as const;\n\nexport const GRAD_FILL_ATTRIBUTES = ['a_position'] as const;\n"],"mappings":";AAiBA,IAAaA,IAA2B,6WAoB3BC,IAA6B,uuCAuC7BC,IAA2B;;;EAGtCD,EAAgB;;;;;GAOLE,IAAqB;CAChC;CAAU;CAAW;CAAc;CAAU;CAC7C;CAAW;CAAa;CAAiB;CACzC;CAAc;CAAY;CAAa;CAAa;CAAgB;AACtE,GAEaC,IAAuB,CAAC,YAAY"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
//#region src/renderer/shaders/imageFill.ts
|
|
2
|
-
var e = "#version 300 es\nin vec2 a_position;\nin vec2 a_uv;\nuniform mat3 u_proj;\nuniform mat3 u_model;\nout vec2 v_uv;\nvoid main() {\n vec3 screen = u_model * vec3(a_position, 1.0);\n vec3 clip = u_proj * vec3(screen.xy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n v_uv = a_uv;\n}\n", t = "#version 300 es\nprecision highp float;\nin vec2 v_uv;\nuniform sampler2D u_sampler;\nuniform float u_opacity;\nuniform float u_alpha;\nuniform mat4 u_colorMatrix;\nuniform vec4 u_colorBias;\nout vec4 outColor;\nvoid main() {\n vec4 texel = texture(u_sampler, v_uv);\n vec4 mapped = clamp(u_colorMatrix * texel + u_colorBias, 0.0, 1.0);\n float a = mapped.a * u_opacity * u_alpha;\n outColor = vec4(mapped.rgb * a, a);\n}\n", n = [
|
|
3
|
-
"u_proj",
|
|
4
|
-
"u_model",
|
|
5
|
-
"u_sampler",
|
|
6
|
-
"u_opacity",
|
|
7
|
-
"u_alpha",
|
|
8
|
-
"u_colorMatrix",
|
|
9
|
-
"u_colorBias"
|
|
10
|
-
], r = ["a_position", "a_uv"];
|
|
11
|
-
//#endregion
|
|
12
|
-
export { r as IMAGE_FILL_ATTRIBUTES, n as IMAGE_FILL_UNIFORMS, t as IMAGE_FRAG_SRC, e as IMAGE_VERT_SRC };
|
|
13
|
-
|
|
14
|
-
//# sourceMappingURL=imageFill.js.map
|