@vincentt-xr/sdk 2.0.0-alpha.4 → 2.0.0-alpha.6
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/GROUNDING.md +11 -4
- package/README.md +85 -52
- package/dist/{DebuggerUI-DhKTXTY2.js → DebuggerUI-C_rbLdkh.js} +1 -1
- package/dist/{DebuggerUI-bnGHSSOb.cjs → DebuggerUI-DYT_dk1E.cjs} +1 -1
- package/dist/FaceMeshRenderer-D1WsrTLA.cjs +155 -0
- package/dist/FaceMeshRenderer-DSCd1H55.js +1264 -0
- package/dist/{FaceRetouch-Bg-OBU4n.js → FaceRetouch-CMJbGThL.js} +30 -30
- package/dist/{FaceRetouch-TZeBGIqW.cjs → FaceRetouch-DsE0Dbw-.cjs} +1 -1
- package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +11 -1
- package/dist/components/FaceMesh/canonical/geometryGroups.d.ts +1 -1
- package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +1 -0
- package/dist/components/LipEffect/LipEffect.d.ts +2 -0
- package/dist/components/LipEffect/LipEffectMaterial.d.ts +10 -0
- package/dist/components/LipEffect/defaults.d.ts +9 -0
- package/dist/components/LipEffect/index.d.ts +4 -0
- package/dist/components/LipEffect/types.d.ts +22 -0
- package/dist/{contexts-B2_NsTnk.js → contexts-DvQI4PqI.js} +6 -3
- package/dist/contexts-h-9TRH0r.cjs +1 -0
- package/dist/debug-ui/media-source.cjs +1 -1
- package/dist/debug-ui/media-source.js +1 -1
- package/dist/debug-ui.cjs +1 -1
- package/dist/debug-ui.js +10 -10
- package/dist/entries/face-effects.d.ts +2 -0
- package/dist/face-effects.cjs +1 -1
- package/dist/face-effects.js +621 -508
- package/dist/{getFaceInfo-4DhcPZDJ.js → getFaceInfo-B43Cwq4n.js} +1 -1
- package/dist/{getFaceInfo-QOQ_dc-W.cjs → getFaceInfo-DEzcL_Ub.cjs} +1 -1
- package/dist/{index-D1kj6uc-.js → index-B-s4YbWu.js} +1 -1
- package/dist/index-C0-fg1Hk.cjs +1 -0
- package/dist/{index-C9yQVzAh.cjs → index-CY7Z8cHV.cjs} +1 -1
- package/dist/{index-ZaDEzDtR.cjs → index-CxMEeCRP.cjs} +1 -1
- package/dist/{index-WPPnlFO1.cjs → index-D67hHm44.cjs} +1 -1
- package/dist/{index-CNGzE49z.cjs → index-DPPpU5By.cjs} +1 -1
- package/dist/{index-g250Tqme.js → index-DYfY9ljy.js} +1 -1
- package/dist/{index-Cj3fGDtZ.js → index-G_5h_FJQ.js} +8 -8
- package/dist/{index-BMeBJ0dV.js → index-I4eF5TKT.js} +227 -191
- package/dist/{index-72Wb15Ca.js → index-uE3sKczj.js} +1 -1
- package/dist/{internal-Dtvo4WYo.cjs → internal-MvKrz0Nt.cjs} +1 -1
- package/dist/{internal-34pb7djs.js → internal-ldPYiUF0.js} +3 -3
- package/dist/internal.cjs +1 -1
- package/dist/internal.js +1 -1
- package/dist/low-level.cjs +1 -1
- package/dist/low-level.js +11 -11
- package/dist/main.cjs +1 -1
- package/dist/main.js +12 -12
- package/dist/{renderGroups-jSUOY1Oq.cjs → renderGroups-BJsx32q5.cjs} +1 -1
- package/dist/{renderGroups-CPWUX6z9.js → renderGroups-CFt1yYLB.js} +1 -1
- package/dist/{renderPasses-CLlYRdMk.js → renderPasses-C72MbZ-a.js} +4 -4
- package/dist/{renderPasses-KUJUSevp.cjs → renderPasses-D-Krl6D0.cjs} +1 -1
- package/dist/scene-object.cjs +1 -1
- package/dist/scene-object.js +2 -2
- package/dist/{selectors-DLxL8Q66.js → selectors-ByKNTXeA.js} +1 -1
- package/dist/{selectors-S8g25ke9.cjs → selectors-CAwmL9VW.cjs} +1 -1
- package/dist/{session-DP8AF7Rg.cjs → session-CANvoLD6.cjs} +1 -1
- package/dist/{session-CbtvwiaD.js → session-Dhi0OqZo.js} +1 -1
- package/dist/tracking.cjs +1 -1
- package/dist/tracking.js +9 -9
- package/dist/{useFaceInfo-BvZeUBsL.cjs → useFaceInfo-BSZq7AO1.cjs} +1 -1
- package/dist/{useFaceInfo-C06EyScd.js → useFaceInfo-FVQBBNdY.js} +3 -3
- package/dist/{useFaceResults-CCNiH7VZ.cjs → useFaceResults-C3oZkn2Z.cjs} +1 -1
- package/dist/{useFaceResults-C1Ppc8rS.js → useFaceResults-D62STzT1.js} +1 -1
- package/dist/utils/visionWasm.d.ts +18 -0
- package/package.json +2 -2
- package/dist/FaceMeshRenderer-B2i2NW71.js +0 -1195
- package/dist/FaceMeshRenderer-BSOq1OnG.cjs +0 -155
- package/dist/contexts-BgWfyxre.cjs +0 -1
- package/dist/index-Da7uycur.cjs +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { F as p, a as _, b as w, c as A, d as y, e as u, f as k } from "./FaceMeshRenderer-DSCd1H55.js";
|
|
2
2
|
import { jsx as x, jsxs as W } from "react/jsx-runtime";
|
|
3
3
|
import { useMemo as b, useEffect as P } from "react";
|
|
4
|
-
import { X } from "./index-
|
|
5
|
-
import { u as I } from "./index-
|
|
4
|
+
import { X } from "./index-I4eF5TKT.js";
|
|
5
|
+
import { u as I } from "./index-B-s4YbWu.js";
|
|
6
6
|
import { useThree as Y, useFrame as V } from "@react-three/fiber";
|
|
7
7
|
import * as g from "three";
|
|
8
|
-
import { u as G } from "./selectors-
|
|
8
|
+
import { u as G } from "./selectors-ByKNTXeA.js";
|
|
9
9
|
const j = {
|
|
10
10
|
enabled: !1,
|
|
11
11
|
strength: 1,
|
|
@@ -85,18 +85,18 @@ const j = {
|
|
|
85
85
|
{ label: "Image URL", value: k.imageUrl },
|
|
86
86
|
{ label: "Media URL", value: k.mediaUrl }
|
|
87
87
|
], Ce = [
|
|
88
|
-
{ label: "Normal", value:
|
|
89
|
-
{ label: "Add", value:
|
|
90
|
-
{ label: "Subtract", value:
|
|
91
|
-
{ label: "Multiply", value:
|
|
92
|
-
{ label: "Screen", value:
|
|
93
|
-
{ label: "Overlay", value:
|
|
94
|
-
{ label: "Soft Light", value:
|
|
95
|
-
{ label: "Hard Light", value:
|
|
96
|
-
{ label: "Lighten", value:
|
|
97
|
-
{ label: "Darken", value:
|
|
98
|
-
{ label: "Difference", value:
|
|
99
|
-
{ label: "Exclusion", value:
|
|
88
|
+
{ label: "Normal", value: u.normal },
|
|
89
|
+
{ label: "Add", value: u.add },
|
|
90
|
+
{ label: "Subtract", value: u.subtract },
|
|
91
|
+
{ label: "Multiply", value: u.multiply },
|
|
92
|
+
{ label: "Screen", value: u.screen },
|
|
93
|
+
{ label: "Overlay", value: u.overlay },
|
|
94
|
+
{ label: "Soft Light", value: u.softLight },
|
|
95
|
+
{ label: "Hard Light", value: u.hardLight },
|
|
96
|
+
{ label: "Lighten", value: u.lighten },
|
|
97
|
+
{ label: "Darken", value: u.darken },
|
|
98
|
+
{ label: "Difference", value: u.difference },
|
|
99
|
+
{ label: "Exclusion", value: u.exclusion }
|
|
100
100
|
], q = `
|
|
101
101
|
varying vec2 vUv;
|
|
102
102
|
|
|
@@ -243,7 +243,7 @@ const j = {
|
|
|
243
243
|
clipMaxX: d = 1,
|
|
244
244
|
renderOrder: h = -1e3
|
|
245
245
|
}) => {
|
|
246
|
-
const { camera:
|
|
246
|
+
const { camera: c, size: m } = Y(), R = G(), s = b(
|
|
247
247
|
() => ({
|
|
248
248
|
cameraTexture: { value: null },
|
|
249
249
|
retouchMaskTexture: { value: null },
|
|
@@ -260,11 +260,11 @@ const j = {
|
|
|
260
260
|
}),
|
|
261
261
|
[]
|
|
262
262
|
), E = b(() => {
|
|
263
|
-
if (!
|
|
263
|
+
if (!c.isPerspectiveCamera)
|
|
264
264
|
return [10, 10];
|
|
265
|
-
const T =
|
|
265
|
+
const T = c, D = (T.position.z || 5) - -1, N = g.MathUtils.degToRad(T.fov), F = 2 * Math.tan(N / 2) * D;
|
|
266
266
|
return [F * (m.width / m.height), F];
|
|
267
|
-
}, [
|
|
267
|
+
}, [c, m]);
|
|
268
268
|
return V(() => {
|
|
269
269
|
s.cameraTexture.value = R ?? null, s.retouchMaskTexture.value = e, s.texelSize.value.set(1 / Math.max(m.width, 1), 1 / Math.max(m.height, 1)), s.retouchAmount.value = a, s.blurRadius.value = r, s.detailPreservation.value = t, s.blemishReduction.value = o, s.blemishRadius.value = l, s.previewMask.value = i ? 1 : 0, s.protectLandmarks.value = v ? 1 : 0, s.clipMinX.value = n, s.clipMaxX.value = d;
|
|
270
270
|
}), R ? /* @__PURE__ */ x("group", { position: [0, 0, -1], children: /* @__PURE__ */ W("mesh", { renderOrder: h, children: [
|
|
@@ -407,10 +407,10 @@ const j = {
|
|
|
407
407
|
}, U = (e, a, r) => {
|
|
408
408
|
const t = f(a, 10, r), o = f(a, 103, r), l = f(a, 332, r), i = f(a, 105, r), v = f(a, 334, r);
|
|
409
409
|
if (!t || !o || !l || !i || !v) return;
|
|
410
|
-
const n = (i.y + v.y) * 0.5, d = Math.abs(l.x - o.x), h = Math.max(Math.abs(n - t.y) * 0.72, d * 0.08),
|
|
411
|
-
e.beginPath(), e.moveTo(o.x, o.y - m), e.quadraticCurveTo((o.x + t.x) * 0.5,
|
|
410
|
+
const n = (i.y + v.y) * 0.5, d = Math.abs(l.x - o.x), h = Math.max(Math.abs(n - t.y) * 0.72, d * 0.08), c = Math.max(0, t.y - h), m = h * 0.34;
|
|
411
|
+
e.beginPath(), e.moveTo(o.x, o.y - m), e.quadraticCurveTo((o.x + t.x) * 0.5, c, t.x, c), e.quadraticCurveTo(
|
|
412
412
|
(l.x + t.x) * 0.5,
|
|
413
|
-
|
|
413
|
+
c,
|
|
414
414
|
l.x,
|
|
415
415
|
l.y - m
|
|
416
416
|
), e.lineTo(v.x, n), e.quadraticCurveTo(t.x, n + h * 0.16, i.x, n), e.closePath(), e.fill();
|
|
@@ -469,10 +469,10 @@ const j = {
|
|
|
469
469
|
step: 0.01
|
|
470
470
|
},
|
|
471
471
|
{ key: "previewMask", label: "Preview mask", type: "boolean" }
|
|
472
|
-
],
|
|
472
|
+
], ce = (e) => {
|
|
473
473
|
const a = Number(e);
|
|
474
474
|
return Number.isFinite(a) ? Math.max(0, Math.round(a)) : 0;
|
|
475
|
-
},
|
|
475
|
+
}, ue = (e, a) => {
|
|
476
476
|
const r = Number(a);
|
|
477
477
|
return Number.isFinite(r) ? Math.max(e + 1, Math.round(r)) : e + 1;
|
|
478
478
|
}, M = {
|
|
@@ -504,7 +504,7 @@ const j = {
|
|
|
504
504
|
clipMaxX: v = 1,
|
|
505
505
|
renderOrder: n
|
|
506
506
|
}) => {
|
|
507
|
-
const d =
|
|
507
|
+
const d = ce(e), h = ue(d, a), c = O({
|
|
508
508
|
skinSmoothing: r,
|
|
509
509
|
skinRealism: t,
|
|
510
510
|
blemishReduction: o,
|
|
@@ -520,12 +520,12 @@ const j = {
|
|
|
520
520
|
K,
|
|
521
521
|
{
|
|
522
522
|
retouchMask: E.texture,
|
|
523
|
-
retouchAmount:
|
|
523
|
+
retouchAmount: c.skinSmoothing,
|
|
524
524
|
blurRadius: S.blurRadius,
|
|
525
|
-
detailPreservation:
|
|
526
|
-
blemishReduction:
|
|
525
|
+
detailPreservation: c.skinRealism,
|
|
526
|
+
blemishReduction: c.blemishReduction,
|
|
527
527
|
blemishRadius: S.blemishRadius,
|
|
528
|
-
previewMask:
|
|
528
|
+
previewMask: c.previewMask,
|
|
529
529
|
protectLandmarks: S.protectLandmarks,
|
|
530
530
|
clipMinX: i,
|
|
531
531
|
clipMaxX: v,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";const o=require("./FaceMeshRenderer-
|
|
1
|
+
"use strict";const o=require("./FaceMeshRenderer-D1WsrTLA.cjs"),M=require("react/jsx-runtime"),S=require("react"),D=require("./index-C0-fg1Hk.cjs"),y=require("./index-CxMEeCRP.cjs"),T=require("@react-three/fiber"),U=require("three"),B=require("./selectors-CAwmL9VW.cjs");function N(e){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(a,t,r.get?r:{enumerable:!0,get:()=>e[t]})}}return a.default=e,Object.freeze(a)}const p=N(U),w={enabled:!1,strength:1,faceWidth:0,faceHeight:0,faceRoundness:0,midfaceHeight:0,foreheadHeight:0,foreheadWidth:0,cheekboneWidth:0,cheekWidth:0,cheekHollowness:0,midfaceDepth:0,scalpHeight:0,headCurve:0,faceTwist:0,faceSwirl:0,browDistance:0,browHeight:0,browDepth:0,eyeSize:0,leftEyeSize:0,rightEyeSize:0,eyeDistance:0,leftEyeX:0,rightEyeX:0,leftEyeY:0,rightEyeY:0,noseSize:0,noseLength:0,mouthWidth:0,mouthHeight:0,jawWidth:0,chinHeight:0},I={...w,enabled:!0,strength:1,faceWidth:-.08,faceHeight:.04,foreheadHeight:.04,cheekWidth:-.04,eyeSize:.08,eyeDistance:.03,noseSize:-.05,noseLength:.03,mouthWidth:.06,mouthHeight:.02,jawWidth:-.05,chinHeight:.03},X=[{label:"Wireframe",value:o.FACE_MESH_MATERIAL_TYPES.wireframe},{label:"Basic",value:o.FACE_MESH_MATERIAL_TYPES.basic},{label:"Standard",value:o.FACE_MESH_MATERIAL_TYPES.standard},{label:"Physical",value:o.FACE_MESH_MATERIAL_TYPES.physical},{label:"Toon",value:o.FACE_MESH_MATERIAL_TYPES.toon},{label:"Normal",value:o.FACE_MESH_MATERIAL_TYPES.normal},{label:"Matcap",value:o.FACE_MESH_MATERIAL_TYPES.matcap},{label:"Shader",value:o.FACE_MESH_MATERIAL_TYPES.shader}],W=[{label:"Original Face",value:o.FACE_MESH_SHADER_PRESETS.originalFace},{label:"Composite",value:o.FACE_MESH_SHADER_PRESETS.composite}],Y=[{label:"Front",value:o.FACE_MESH_SIDES.front},{label:"Back",value:o.FACE_MESH_SIDES.back},{label:"Double",value:o.FACE_MESH_SIDES.double}],j=[{label:"None",value:o.FACE_MESH_TEXTURE_MAPS.none},{label:"UV Map 1",value:o.FACE_MESH_TEXTURE_MAPS.canonical},{label:"UV Map 2",value:o.FACE_MESH_TEXTURE_MAPS.style2}],q=[{label:"None",value:o.FACE_MESH_ALPHA_MAPS.none},{label:"Default Mask",value:o.FACE_MESH_ALPHA_MAPS.canonical}],G=[{label:"Solid",value:o.FACE_MESH_MASK_TEXTURE_SOURCES.solid},{label:"Gradient",value:o.FACE_MESH_MASK_TEXTURE_SOURCES.gradient},{label:"Image URL",value:o.FACE_MESH_MASK_TEXTURE_SOURCES.imageUrl},{label:"Media URL",value:o.FACE_MESH_MASK_TEXTURE_SOURCES.mediaUrl}],V=[{label:"Normal",value:o.FACE_MESH_BLEND_MODES.normal},{label:"Add",value:o.FACE_MESH_BLEND_MODES.add},{label:"Subtract",value:o.FACE_MESH_BLEND_MODES.subtract},{label:"Multiply",value:o.FACE_MESH_BLEND_MODES.multiply},{label:"Screen",value:o.FACE_MESH_BLEND_MODES.screen},{label:"Overlay",value:o.FACE_MESH_BLEND_MODES.overlay},{label:"Soft Light",value:o.FACE_MESH_BLEND_MODES.softLight},{label:"Hard Light",value:o.FACE_MESH_BLEND_MODES.hardLight},{label:"Lighten",value:o.FACE_MESH_BLEND_MODES.lighten},{label:"Darken",value:o.FACE_MESH_BLEND_MODES.darken},{label:"Difference",value:o.FACE_MESH_BLEND_MODES.difference},{label:"Exclusion",value:o.FACE_MESH_BLEND_MODES.exclusion}],K=`
|
|
2
2
|
varying vec2 vUv;
|
|
3
3
|
|
|
4
4
|
void main() {
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
1
2
|
import { Transform3DSettings } from '../../Transform3D';
|
|
2
3
|
import { FaceWarp3DSettings } from '../../FaceWarp3D';
|
|
3
4
|
import { FaceMeshAlphaMap, FaceMeshBlendMode, FaceMeshMaskTextureSource, FaceMeshMaterialType, FaceMeshShaderPreset, FaceMeshSide, FaceMeshTextureMap } from '../material/types';
|
|
4
5
|
import { ParsedCanonicalMesh } from './parseCanonicalFaceModel';
|
|
6
|
+
import { CanonicalFaceMeshGeometryKey } from './geometryGroups';
|
|
7
|
+
import * as THREE from "three";
|
|
5
8
|
export type CanonicalFaceMeshRendererProps = {
|
|
6
9
|
faceIndex?: number;
|
|
7
10
|
baseColor?: string;
|
|
@@ -25,6 +28,8 @@ export type CanonicalFaceMeshRendererProps = {
|
|
|
25
28
|
showLeftEyeGeometry?: boolean;
|
|
26
29
|
showRightEyeGeometry?: boolean;
|
|
27
30
|
showMouthGeometry?: boolean;
|
|
31
|
+
showLipsGeometry?: boolean;
|
|
32
|
+
showBaseGeometry?: boolean;
|
|
28
33
|
showNoseGeometry?: boolean;
|
|
29
34
|
maskTextureSource?: FaceMeshMaskTextureSource;
|
|
30
35
|
maskSourceUrl?: string;
|
|
@@ -47,9 +52,14 @@ export type CanonicalFaceMeshRendererProps = {
|
|
|
47
52
|
* Override the canonical OBJ URL. Ignored if `mesh` is provided.
|
|
48
53
|
*/
|
|
49
54
|
meshUrl?: string;
|
|
55
|
+
/** Optional material override, rendered for every visible geometry group. */
|
|
56
|
+
materialOverride?: ReactNode | ((context: {
|
|
57
|
+
cameraTexture: THREE.Texture | null;
|
|
58
|
+
geometryKey: CanonicalFaceMeshGeometryKey;
|
|
59
|
+
}) => ReactNode);
|
|
50
60
|
};
|
|
51
61
|
/**
|
|
52
62
|
* @deprecated Use `FaceMeshRenderer` for scene-object/editor integrations.
|
|
53
63
|
* This remains as the low-level canonical mesh renderer for existing imports.
|
|
54
64
|
*/
|
|
55
|
-
export declare const CanonicalFaceMeshRenderer: ({ faceIndex, baseColor, color, opacity, materialType, shaderPreset, textureMap, alphaMap, alphaOpacity, side, blendMode, blendOpacity, showOverlayMask, showMouthMask, showEyeMask, showLeftEyeMask, showRightEyeMask, showNoseMask, showEyeGeometry, showLeftEyeGeometry, showRightEyeGeometry, showMouthGeometry, showNoseGeometry, maskTextureSource, maskSourceUrl, maskColor, maskOpacity, faceTextureUrl, faceTextureStyle2Url, faceAlphaMaskUrl, compositeShading, faceWarp3D, transform, renderOrder, externalScale, mesh, meshUrl, }: CanonicalFaceMeshRendererProps) => import("react/jsx-runtime").JSX.Element;
|
|
65
|
+
export declare const CanonicalFaceMeshRenderer: ({ faceIndex, baseColor, color, opacity, materialType, shaderPreset, textureMap, alphaMap, alphaOpacity, side, blendMode, blendOpacity, showOverlayMask, showMouthMask, showEyeMask, showLeftEyeMask, showRightEyeMask, showNoseMask, showEyeGeometry, showLeftEyeGeometry, showRightEyeGeometry, showMouthGeometry, showLipsGeometry, showBaseGeometry, showNoseGeometry, maskTextureSource, maskSourceUrl, maskColor, maskOpacity, faceTextureUrl, faceTextureStyle2Url, faceAlphaMaskUrl, compositeShading, faceWarp3D, transform, renderOrder, externalScale, mesh, meshUrl, materialOverride, }: CanonicalFaceMeshRendererProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ParsedCanonicalMesh } from './parseCanonicalFaceModel';
|
|
2
|
-
export type CanonicalFaceMeshGeometryKey = "base" | "mouth" | "left-eye" | "right-eye" | "nose" | "mouth-mask" | "left-eye-mask" | "right-eye-mask" | "nose-mask";
|
|
2
|
+
export type CanonicalFaceMeshGeometryKey = "base" | "mouth" | "lips" | "left-eye" | "right-eye" | "nose" | "mouth-mask" | "left-eye-mask" | "right-eye-mask" | "nose-mask";
|
|
3
3
|
export type CanonicalFaceMeshGeometrySpec = {
|
|
4
4
|
key: CanonicalFaceMeshGeometryKey;
|
|
5
5
|
getIndices: (mesh: ParsedCanonicalMesh) => Uint16Array;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { LipEffectMaterialContext } from './types';
|
|
2
|
+
export type LipEffectMaterialProps = {
|
|
3
|
+
context: LipEffectMaterialContext;
|
|
4
|
+
color: string;
|
|
5
|
+
opacity: number;
|
|
6
|
+
intensity: number;
|
|
7
|
+
shading: boolean;
|
|
8
|
+
subtractMouth?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare const LipEffectMaterial: ({ context, color, opacity, intensity, shading, subtractMouth, }: LipEffectMaterialProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import type * as THREE from "three";
|
|
3
|
+
export type LipMaskMode = "outer-lips" | "outer-and-inner-lips";
|
|
4
|
+
export type LipEffectMaterialContext = {
|
|
5
|
+
cameraTexture: THREE.Texture | null;
|
|
6
|
+
designTexture: THREE.Texture | null;
|
|
7
|
+
lipMask: THREE.Texture | null;
|
|
8
|
+
faceUv: THREE.BufferAttribute | null;
|
|
9
|
+
faceIndex: number;
|
|
10
|
+
};
|
|
11
|
+
export type LipEffectMaterialSpec = ReactNode | ((context: LipEffectMaterialContext) => ReactNode);
|
|
12
|
+
export type LipEffectProps = {
|
|
13
|
+
faceIndex?: number;
|
|
14
|
+
designTexture?: THREE.Texture | string;
|
|
15
|
+
color?: string;
|
|
16
|
+
opacity?: number;
|
|
17
|
+
intensity?: number;
|
|
18
|
+
maskMode?: LipMaskMode;
|
|
19
|
+
shading?: boolean;
|
|
20
|
+
material?: LipEffectMaterialSpec;
|
|
21
|
+
renderOrder?: number;
|
|
22
|
+
};
|
|
@@ -6,9 +6,9 @@ import { Canvas as ye, useThree as _e, useFrame as Se } from "@react-three/fiber
|
|
|
6
6
|
import { useRef as J, useState as Ee, useEffect as Q, useMemo as ne, useContext as fe, createContext as ve } from "react";
|
|
7
7
|
import * as D from "three";
|
|
8
8
|
import { R as pe } from "./renderLayers-zrK2pv5O.js";
|
|
9
|
-
import { a as Re, b as Te } from "./selectors-
|
|
10
|
-
import { u as xe } from "./index-
|
|
11
|
-
import { u as ke, S as Fe } from "./index-
|
|
9
|
+
import { a as Re, b as Te } from "./selectors-ByKNTXeA.js";
|
|
10
|
+
import { u as xe } from "./index-I4eF5TKT.js";
|
|
11
|
+
import { u as ke, S as Fe } from "./index-uE3sKczj.js";
|
|
12
12
|
const ue = {
|
|
13
13
|
display: "flex",
|
|
14
14
|
alignItems: "center",
|
|
@@ -132,6 +132,9 @@ const ue = {
|
|
|
132
132
|
// can opt back in via `canvasProps.gl`.
|
|
133
133
|
preserveDrawingBuffer: !1,
|
|
134
134
|
antialias: !0,
|
|
135
|
+
// Face effects may use the shared stencil buffer to subtract
|
|
136
|
+
// canonical regions (for example, mouth interior from lips).
|
|
137
|
+
stencil: !0,
|
|
135
138
|
premultipliedAlpha: !1,
|
|
136
139
|
// Disable alpha premultiplication
|
|
137
140
|
toneMapping: D.NoToneMapping
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var Ee=Object.defineProperty;var Te=(e,t,n)=>t in e?Ee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var O=(e,t,n)=>Te(e,typeof t!="symbol"?t+"":t,n);const B=require("react/jsx-runtime"),ne=require("@react-three/fiber"),A=require("react"),Fe=require("three"),fe=require("./renderLayers-lDtL0_43.cjs"),ie=require("./selectors-CAwmL9VW.cjs"),ue=require("./index-C0-fg1Hk.cjs"),se=require("./index-CY7Z8cHV.cjs");function Me(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const a=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,a.get?a:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const U=Me(Fe),xe={display:"flex",alignItems:"center",justifyContent:"center",height:"100%",background:"#363636",color:"white",fontFamily:"monospace"},Ae=()=>B.jsx("div",{style:xe,children:"Loading..."}),Ce=e=>B.jsx("div",{style:xe,children:e.error}),le={position:"absolute",top:0,left:0,width:"100%",height:"100%",zIndex:10},ce={sceneColorTexture:null,sceneDepthTexture:null},ke=({onRenderOutputs:e,renderOutputs:t,size:n})=>{const{gl:a,scene:r,size:s}=ne.useThree(),{session:c}=ue.useXRContext(),i=Math.max(1,Math.round((n==null?void 0:n.width)??s.width)),d=Math.max(1,Math.round((n==null?void 0:n.height)??s.height)),f=!!(t.sceneColor||t.sceneDepth),l=A.useMemo(()=>{if(!f)return null;const o=new U.WebGLRenderTarget(i,d,{colorSpace:U.SRGBColorSpace,depthBuffer:!0,stencilBuffer:!1});return t.sceneDepth&&(o.depthTexture=new U.DepthTexture(i,d),o.depthTexture.format=U.DepthFormat,o.depthTexture.type=U.UnsignedShortType),o},[f,d,t.sceneDepth,i]);return A.useEffect(()=>{if(!l){e==null||e(ce);return}return e==null||e({sceneColorTexture:t.sceneColor?l.texture:null,sceneDepthTexture:t.sceneDepth&&l.depthTexture?l.depthTexture:null}),()=>{var o;l.dispose(),(o=l.depthTexture)==null||o.dispose(),e==null||e(ce)}},[e,t.sceneColor,t.sceneDepth,l]),ne.useFrame(()=>{if(!l)return;const o=[];t.excludeScreenUI!==!1&&r.traverse(x=>{x.visible&&x.renderOrder>=fe.RENDER_LAYERS.SCREEN_UI&&(o.push(x),x.visible=!1)});const p=a.getRenderTarget(),v=a.xr.enabled;a.xr.enabled=!1,a.setRenderTarget(l),a.clear(),c._renderFrame(),a.setRenderTarget(p),a.xr.enabled=v,o.forEach(x=>{x.visible=!0})},-100),null},Ie=({style:e,canvasProps:t,children:n,loadingComponent:a,loadingTransitionDuration:r,errorComponent:s,renderTargetSize:c,renderOutputs:i={},onRenderOutputs:d})=>{const f=A.useRef(null),l=A.useRef(null),o=A.useRef(null),p=A.useRef(!1),{session:v}=ue.useXRContext(),x=ie.useXRReady(),u=ie.useXRError(),[h,g]=A.useState(!0);return A.useEffect(()=>{if(c){v._setRenderSize(Math.round(c.width),Math.round(c.height));return}const S=(w,E)=>{w<=0||E<=0||v._setRenderSize(Math.round(w),Math.round(E))},m=()=>{!l.current||p.current||(p.current=!0,v._setRenderTarget(l.current))},M=(w,E)=>{o.current!==null&&cancelAnimationFrame(o.current),o.current=requestAnimationFrame(()=>{o.current=null,S(w,E)})},_=new ResizeObserver(w=>{const E=w[0];if(!E)return;const{width:G,height:I}=E.contentRect;m(),M(G,I)});return f.current&&_.observe(f.current),m(),()=>{_.disconnect(),o.current!==null&&(cancelAnimationFrame(o.current),o.current=null),p.current=!1}},[c,v]),A.useEffect(()=>{x&&(r?setTimeout(()=>{g(!1)},r):g(!1))},[x,r]),B.jsxs("div",{id:"vincentt-xr-container",ref:f,style:{width:"100%",height:"100%",...e,position:"relative"},children:[h&&B.jsx("div",{style:le,children:a||B.jsx(Ae,{})}),u&&B.jsx("div",{style:le,children:s||B.jsx(Ce,{error:u.message})}),B.jsxs(ne.Canvas,{id:"vincentt-xr-canvas",ref:l,dpr:[1,3],gl:{alpha:!0,preserveDrawingBuffer:!1,antialias:!0,stencil:!0,premultipliedAlpha:!1,toneMapping:U.NoToneMapping},...t,onCreated:S=>{c?v._setRenderSize(Math.round(c.width),Math.round(c.height)):v._setRenderTarget(l.current),v._setR3FState({renderer:S.gl,scene:S.scene,camera:S.camera}),S.gl.outputColorSpace=U.SRGBColorSpace,t!=null&&t.onCreated&&t.onCreated(S)},children:[B.jsx(ke,{onRenderOutputs:d,renderOutputs:i,size:c}),n]})]})},ve=(e,t,n,a,r)=>{const s=e/2,c=t/2,i=n.left*s+a.left,d=n.right*s-a.right,f=n.bottom*c+a.bottom,l=n.top*c-a.top,o=d-i,p=l-f,v=(i+d)/2,x=(f+l)/2,u=r[0]*o/2,h=r[1]*p/2;return{centerX:v,centerY:x,width:o,height:p,pivotX:u,pivotY:h}},Le={left:0,right:0,top:0,bottom:0},Be={left:0,right:0,top:0,bottom:0},Ge=[0,0],Xe=({anchors:e,offsets:t,pivot:n=Ge,children:a})=>{const{width:r,height:s}=se.useScreenSpace(),c=A.useMemo(()=>({anchors:{...Le,...e??{}},offsets:{...Be,...t??{}}}),[e,t]),i=A.useMemo(()=>ve(r,s,c.anchors,c.offsets,n),[r,s,c,n]);A.useEffect(()=>{const o=c.anchors;o.left>o.right&&console.warn(`[ScreenTransform] inverted X axis: anchors.left (${o.left}) > anchors.right (${o.right})`),o.bottom>o.top&&console.warn(`[ScreenTransform] inverted Y axis: anchors.bottom (${o.bottom}) > anchors.top (${o.top})`),i.width<=0&&console.warn(`[ScreenTransform] zero or negative width (${i.width.toFixed(3)}) — anchors + offsets collapse the X extent`),i.height<=0&&console.warn(`[ScreenTransform] zero or negative height (${i.height.toFixed(3)}) — anchors + offsets collapse the Y extent`)},[c,i.width,i.height]);const d=n[0]!==0||n[1]!==0,f=d?[1,1,1]:[i.width,i.height,1],l=!d&&i.width>0&&i.height>0?i.width/i.height:null;return B.jsx("group",{position:[i.centerX-i.pivotX,i.centerY-i.pivotY,0],scale:f,renderOrder:fe.RENDER_LAYERS.SCREEN_UI,children:B.jsx(se.ScreenRectAspectContext.Provider,{value:l,children:a})})};class pe{constructor(t,n){O(this,"capabilities");O(this,"snapshot");O(this,"listeners",new Set);O(this,"eventListeners",new Map);this.capabilities=t,this.snapshot={state:"idle",frame:0,time:0,playMode:"forward",loop:!0,loopCount:0,...n}}play(){const t=this.snapshot.state==="paused";this.update({state:"playing"}),this.emit(t?"Resume":"PlayBegin")}pause(){this.update({state:"paused"}),this.emit("Pause")}restart(){this.update({state:"playing",frame:0,time:0}),this.emit("PlayBegin")}setPlayMode(t){!this.capabilities.canReverse&&(t==="reverse"||t==="ping-pong"||t==="random")||this.update({playMode:t})}setLoop(t,n=0){this.update({loop:t,loopCount:n})}seek(t){this.capabilities.canSeek&&this.update({frame:Math.max(0,Math.floor(t)),time:Math.max(0,t)})}subscribe(t){return this.listeners.add(t),()=>this.listeners.delete(t)}on(t,n){const a=this.eventListeners.get(t)??new Set;return a.add(n),this.eventListeners.set(t,a),()=>this.off(t,n)}off(t,n){var a;(a=this.eventListeners.get(t))==null||a.delete(n)}getSnapshot(){return this.snapshot}dispose(){this.listeners.clear(),this.eventListeners.clear(),this.snapshot={...this.snapshot,state:"idle"}}updateSnapshot(t){this.update(t)}emit(t){var n;(n=this.eventListeners.get(t))==null||n.forEach(a=>a({type:t,snapshot:this.snapshot}))}update(t){this.snapshot={...this.snapshot,...t},this.listeners.forEach(n=>n(this.snapshot))}}const ge=(e,t,n,a,r)=>{const s=Math.max(1,Math.floor(t)),c=Math.max(0,Math.floor(e)),i=n==="ping-pong"&&s>1?s*2-2:s,d=Math.floor(c/i),f=r>0?d>=r:!a&&c>=i,l=f?i-1:c%i;return{frame:n==="reverse"?s-1-l%s:n==="random"?l*7919%s:n==="ping-pong"&&l>=s?i-l:l,ended:f,loop:d}},De=(e,t,n)=>{const a=Math.max(1,Math.floor(n));return Math.floor(Math.max(0,e)*Math.max(0,t))%a};var he={},me,Ue;function je(e,t,n,s){var r=0,s=s===void 0?{}:s,c=s.loop===void 0?null:s.loop,i=s.palette===void 0?null:s.palette;if(t<=0||n<=0||t>65535||n>65535)throw new Error("Width/Height invalid.");function d(h){var g=h.length;if(g<2||g>256||g&g-1)throw new Error("Invalid code/color length, must be power of 2 and 2 .. 256.");return g}e[r++]=71,e[r++]=73,e[r++]=70,e[r++]=56,e[r++]=57,e[r++]=97;var f=0,l=0;if(i!==null){for(var o=d(i);o>>=1;)++f;if(o=1<<f,--f,s.background!==void 0){if(l=s.background,l>=o)throw new Error("Background index out of range.");if(l===0)throw new Error("Background index explicitly passed as 0.")}}if(e[r++]=t&255,e[r++]=t>>8&255,e[r++]=n&255,e[r++]=n>>8&255,e[r++]=(i!==null?128:0)|f,e[r++]=l,e[r++]=0,i!==null)for(var p=0,v=i.length;p<v;++p){var x=i[p];e[r++]=x>>16&255,e[r++]=x>>8&255,e[r++]=x&255}if(c!==null){if(c<0||c>65535)throw new Error("Loop count invalid.");e[r++]=33,e[r++]=255,e[r++]=11,e[r++]=78,e[r++]=69,e[r++]=84,e[r++]=83,e[r++]=67,e[r++]=65,e[r++]=80,e[r++]=69,e[r++]=50,e[r++]=46,e[r++]=48,e[r++]=3,e[r++]=1,e[r++]=c&255,e[r++]=c>>8&255,e[r++]=0}var u=!1;this.addFrame=function(h,g,S,m,M,_){if(u===!0&&(--r,u=!1),_=_===void 0?{}:_,h<0||g<0||h>65535||g>65535)throw new Error("x/y invalid.");if(S<=0||m<=0||S>65535||m>65535)throw new Error("Width/Height invalid.");if(M.length<S*m)throw new Error("Not enough pixels for the frame size.");var w=!0,E=_.palette;if(E==null&&(w=!1,E=i),E==null)throw new Error("Must supply either a local or global palette.");for(var G=d(E),I=0;G>>=1;)++I;G=1<<I;var j=_.delay===void 0?0:_.delay,R=_.disposal===void 0?0:_.disposal;if(R<0||R>3)throw new Error("Disposal out of range.");var T=!1,k=0;if(_.transparent!==void 0&&_.transparent!==null&&(T=!0,k=_.transparent,k<0||k>=G))throw new Error("Transparent color index.");if((R!==0||T||j!==0)&&(e[r++]=33,e[r++]=249,e[r++]=4,e[r++]=R<<2|(T===!0?1:0),e[r++]=j&255,e[r++]=j>>8&255,e[r++]=k,e[r++]=0),e[r++]=44,e[r++]=h&255,e[r++]=h>>8&255,e[r++]=g&255,e[r++]=g>>8&255,e[r++]=S&255,e[r++]=S>>8&255,e[r++]=m&255,e[r++]=m>>8&255,e[r++]=w===!0?128|I-1:0,w===!0)for(var $=0,L=E.length;$<L;++$){var C=E[$];e[r++]=C>>16&255,e[r++]=C>>8&255,e[r++]=C&255}return r=$e(e,r,I<2?2:I,M),r},this.end=function(){return u===!1&&(e[r++]=59,u=!0),r},this.getOutputBuffer=function(){return e},this.setOutputBuffer=function(h){e=h},this.getOutputBufferPosition=function(){return r},this.setOutputBufferPosition=function(h){r=h}}function $e(e,t,n,a){e[t++]=n;var r=t++,s=1<<n,c=s-1,i=s+1,d=i+1,f=n+1,l=0,o=0;function p(_){for(;l>=_;)e[t++]=o&255,o>>=8,l-=8,t===r+256&&(e[r]=255,r=t++)}function v(_){o|=_<<l,l+=f,p(8)}var x=a[0]&c,u={};v(s);for(var h=1,g=a.length;h<g;++h){var S=a[h]&c,m=x<<8|S,M=u[m];if(M===void 0){for(o|=x<<l,l+=f;l>=8;)e[t++]=o&255,o>>=8,l-=8,t===r+256&&(e[r]=255,r=t++);d===4096?(v(s),d=i+1,f=n+1,u={}):(d>=1<<f&&++f,u[m]=d++),x=S}else x=M}return v(x),v(i),p(1),r+1===t?e[r]=0:(e[r]=t-r-1,e[t++]=0),t}function Pe(e){var t=0;if(e[t++]!==71||e[t++]!==73||e[t++]!==70||e[t++]!==56||(e[t++]+1&253)!==56||e[t++]!==97)throw new Error("Invalid GIF 87a/89a header.");var n=e[t++]|e[t++]<<8,a=e[t++]|e[t++]<<8,r=e[t++],s=r>>7,c=r&7,i=1<<c+1;e[t++],e[t++];var d=null,f=null;s&&(d=t,f=i,t+=i*3);var l=!0,o=[],p=0,v=null,x=0,u=null;for(this.width=n,this.height=a;l&&t<e.length;)switch(e[t++]){case 33:switch(e[t++]){case 255:if(e[t]!==11||e[t+1]==78&&e[t+2]==69&&e[t+3]==84&&e[t+4]==83&&e[t+5]==67&&e[t+6]==65&&e[t+7]==80&&e[t+8]==69&&e[t+9]==50&&e[t+10]==46&&e[t+11]==48&&e[t+12]==3&&e[t+13]==1&&e[t+16]==0)t+=14,u=e[t++]|e[t++]<<8,t++;else for(t+=12;;){var h=e[t++];if(!(h>=0))throw Error("Invalid block size");if(h===0)break;t+=h}break;case 249:if(e[t++]!==4||e[t+4]!==0)throw new Error("Invalid graphics extension block.");var g=e[t++];p=e[t++]|e[t++]<<8,v=e[t++],g&1||(v=null),x=g>>2&7,t++;break;case 254:for(;;){var h=e[t++];if(!(h>=0))throw Error("Invalid block size");if(h===0)break;t+=h}break;default:throw new Error("Unknown graphic control label: 0x"+e[t-1].toString(16))}break;case 44:var S=e[t++]|e[t++]<<8,m=e[t++]|e[t++]<<8,M=e[t++]|e[t++]<<8,_=e[t++]|e[t++]<<8,w=e[t++],E=w>>7,G=w>>6&1,I=w&7,j=1<<I+1,R=d,T=f,k=!1;if(E){var k=!0;R=t,T=j,t+=j*3}var $=t;for(t++;;){var h=e[t++];if(!(h>=0))throw Error("Invalid block size");if(h===0)break;t+=h}o.push({x:S,y:m,width:M,height:_,has_local_palette:k,palette_offset:R,palette_size:T,data_offset:$,data_length:t-$,transparent_index:v,interlaced:!!G,delay:p,disposal:x});break;case 59:l=!1;break;default:throw new Error("Unknown gif block: 0x"+e[t-1].toString(16))}this.numFrames=function(){return o.length},this.loopCount=function(){return u},this.frameInfo=function(L){if(L<0||L>=o.length)throw new Error("Frame index out of range.");return o[L]},this.decodeAndBlitFrameBGRA=function(L,C){var y=this.frameInfo(L),Z=y.width*y.height,P=new Uint8Array(Z);de(e,y.data_offset,P,Z);var q=y.palette_offset,W=y.transparent_index;W===null&&(W=256);var X=y.width,N=n-X,Y=X,K=(y.y*n+y.x)*4,Q=((y.y+y.height)*n+y.x)*4,F=K,V=N*4;y.interlaced===!0&&(V+=n*4*7);for(var H=8,z=0,b=P.length;z<b;++z){var D=P[z];if(Y===0&&(F+=V,Y=X,F>=Q&&(V=N*4+n*4*(H-1),F=K+(X+N)*(H<<1),H>>=1)),D===W)F+=4;else{var ee=e[q+D*3],te=e[q+D*3+1],re=e[q+D*3+2];C[F++]=re,C[F++]=te,C[F++]=ee,C[F++]=255}--Y}},this.decodeAndBlitFrameRGBA=function(L,C){var y=this.frameInfo(L),Z=y.width*y.height,P=new Uint8Array(Z);de(e,y.data_offset,P,Z);var q=y.palette_offset,W=y.transparent_index;W===null&&(W=256);var X=y.width,N=n-X,Y=X,K=(y.y*n+y.x)*4,Q=((y.y+y.height)*n+y.x)*4,F=K,V=N*4;y.interlaced===!0&&(V+=n*4*7);for(var H=8,z=0,b=P.length;z<b;++z){var D=P[z];if(Y===0&&(F+=V,Y=X,F>=Q&&(V=N*4+n*4*(H-1),F=K+(X+N)*(H<<1),H>>=1)),D===W)F+=4;else{var ee=e[q+D*3],te=e[q+D*3+1],re=e[q+D*3+2];C[F++]=ee,C[F++]=te,C[F++]=re,C[F++]=255}--Y}}}function de(e,t,n,a){for(var r=e[t++],s=1<<r,c=s+1,i=c+1,d=r+1,f=(1<<d)-1,l=0,o=0,p=0,v=e[t++],x=new Int32Array(4096),u=null;;){for(;l<16&&v!==0;)o|=e[t++]<<l,l+=8,v===1?v=e[t++]:--v;if(l<d)break;var h=o&f;if(o>>=d,l-=d,h===s){i=c+1,d=r+1,f=(1<<d)-1,u=null;continue}else if(h===c)break;for(var g=h<i?h:u,S=0,m=g;m>s;)m=x[m]>>8,++S;var M=m,_=p+S+(g!==h?1:0);if(_>a){console.log("Warning, gif stream longer than expected.");return}n[p++]=M,p+=S;var w=p;for(g!==h&&(n[p++]=M),m=g;S--;)m=x[m],n[--w]=m&255,m>>=8;u!==null&&i<4096&&(x[i++]=u<<8|M,i>=f+1&&d<12&&(++d,f=f<<1|1)),u=h}return p!==a&&console.log("Warning, gif stream shorter than expected."),n}try{Ue=he.GifWriter=je,me=he.GifReader=Pe}catch{}const qe=me;function We(e){return async(t,n)=>{const a=e.find(r=>r.canResolve(t));if(!a)throw new we("No texture provider matched source",t);return Se(a.resolve.bind(a),t,n)}}class we extends Error{constructor(n,a){super(n);O(this,"source");this.name="TextureSourceLoadError",this.source=a}}function J(e){if(e.aborted)throw new DOMException("Texture source load aborted","AbortError")}async function Se(e,t,n){J(n);const a=await e(t,n);return n.aborted&&(a.dispose(),J(n)),a}function Ne(e){e==null||e.dispose()}const _e=5*1024*1024,ae=1e6,oe=180,Ye=(e,t,n)=>{for(let a=n.y;a<n.y+n.height;a+=1)e.fill(0,(a*t+n.x)*4,(a*t+n.x+n.width)*4)},Ve=(e,t,n,a,r)=>t.byteLength>_e?`file is ${(t.byteLength/1024/1024).toFixed(1)} MB; max is 5 MB`:n*a>ae?`canvas is ${n}x${a}; max area is ${ae}`:r>oe?`frame count is ${r}; max is ${oe}`:r===0?"frame count is 0":e?null:"source URL is empty",He=e=>typeof e=="string"?e:e.src,ze={canResolve:e=>typeof e=="string"?/\.gif(?:[?#].*)?$/i.test(e):e.kind==="gif",async resolve(e,t){const n=He(e),a=await fetch(n,{signal:t});if(!a.ok)throw new Error(`GIF request failed with ${a.status}`);const r=new Uint8Array(await a.arrayBuffer());J(t);const s=new qe(r),c=s.numFrames(),i=Ve(n,r,s.width,s.height,c);if(i)throw console.warn(`[xr-sdk] GIF ScreenImage source rejected: ${i}`,n),new Error(`GIF source rejected: ${i}`);const d=document.createElement("canvas");d.width=s.width,d.height=s.height;const f=d.getContext("2d");if(!f)throw new Error("Could not create GIF canvas context");const l=new U.CanvasTexture(d);l.colorSpace=U.SRGBColorSpace;const o=new Uint8Array(s.width*s.height*4),p=new ImageData(new Uint8ClampedArray(o.buffer),s.width,s.height),v=Array.from({length:c},(R,T)=>s.frameInfo(T)),x=v.reduce((R,T)=>R+Math.max(20,T.delay*10),0)/1e3,u=new pe({canSeek:!1,canReverse:!1,supportsLoopCount:!0},{state:"ready",duration:x,frameCount:c});let h=0,g=0,S=!1,m=!1,M=0,_=0,w=null;const E=(R,T=!1)=>{T&&(o.fill(0),w=null),(w==null?void 0:w.info.disposal)===2?Ye(o,s.width,w.info):w!=null&&w.restorePixels&&o.set(w.restorePixels);const k=v[R],$=k.disposal===3?new Uint8Array(o):null;return s.decodeAndBlitFrameRGBA(R,o),f.putImageData(p,0,0),l.needsUpdate=!0,w={info:k,restorePixels:$},m=!0,u.updateSnapshot({frame:R,time:v.slice(0,R).reduce((L,C)=>L+Math.max(20,C.delay*10),0)/1e3}),m=!1,u.emit("KeyFrameInSecond"),Math.max(20,k.delay*10)},G=R=>{g=window.setTimeout(()=>{h=requestAnimationFrame(I)},R)},I=()=>{if(S||u.getSnapshot().state!=="playing")return;const R=u.getSnapshot(),T=ge(M,c,R.playMode,R.loop,R.loopCount);if(T.ended){u.updateSnapshot({state:"ended",frame:T.frame,time:x}),u.emit("PlayEnd");return}const k=T.loop!==_;_=T.loop,M+=1,G(E(T.frame,k))},j=u.subscribe(R=>{m||(clearTimeout(g),cancelAnimationFrame(h),R.state==="playing"&&(h=requestAnimationFrame(I)))});return E(0),u.play(),{texture:l,controller:u,metadata:{width:s.width,height:s.height,duration:x,frameCount:c},dispose(){S=!0,j(),clearTimeout(g),cancelAnimationFrame(h),u.dispose(),l.dispose()}}}},ye=A.createContext(null),Re=A.createContext(null),Oe=()=>A.useContext(ye),Ze=()=>A.useContext(Re);exports.BasicAnimatedTextureController=pe;exports.MAX_GIF_BYTES=_e;exports.MAX_GIF_FRAMES=oe;exports.MAX_GIF_PIXELS=ae;exports.ScreenTransform=Xe;exports.TextureSourceLoadError=we;exports.XRScene=Ie;exports.XRViewportRenderOutputsContext=Re;exports.XRViewportStateContext=ye;exports.computeScreenTransform=ve;exports.createTextureSourceResolver=We;exports.disposeResolvedTextureSource=Ne;exports.getPlaybackFrame=ge;exports.getSequenceFrame=De;exports.gifTextureSourceProvider=ze;exports.resolveTextureSource=Se;exports.throwIfAborted=J;exports.useXRViewportRenderOutputs=Ze;exports.useXRViewportState=Oe;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../session-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../session-CANvoLD6.cjs");exports.MediaSourceSwitcher=e.MediaSourceSwitcher;exports.defaultMediaSources=e.defaultMediaSources;exports.sdkImageMediaSources=e.sdkImageMediaSources;exports.sdkVideoMediaSources=e.sdkVideoMediaSources;exports.useFaceTrackingMediaSourceSession=e.useFaceTrackingMediaSourceSession;exports.useMediaSourceSession=e.useMediaSourceSession;
|