shaders 2.5.119 → 2.5.121
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/dist/core/{FloatingParticles-C4sLwGyT.js → FloatingParticles-DKoG78j0.js} +9 -17
- package/dist/core/index.js +64 -7
- package/dist/core/registry.js +2 -2
- package/dist/core/renderer.d.ts +1 -0
- package/dist/core/renderer.d.ts.map +1 -1
- package/dist/core/{shaderRegistry-CO5SCxc6.js → shaderRegistry-BoqhBfun.js} +1 -1
- package/dist/core/shaders/FloatingParticles/index.d.ts.map +1 -1
- package/dist/core/shaders/FloatingParticles/index.js +1 -1
- package/dist/js/createShader.d.ts.map +1 -1
- package/dist/js/createShader.js +130 -47
- package/dist/js/types.d.ts +14 -0
- package/dist/js/types.d.ts.map +1 -1
- package/dist/react/Shader.js +1 -1
- package/dist/react/bundle.js +70 -70
- package/dist/solid/engine/Shader.js +1 -1
- package/dist/svelte/index.js +1 -1
- package/dist/vue/Shader.vue_vue_type_script_setup_true_lang.js +1 -1
- package/package.json +1 -1
|
@@ -163,25 +163,17 @@ const componentDefinition = {
|
|
|
163
163
|
const animTime = createAnimatedTime(params, uniforms.speed);
|
|
164
164
|
const renderParticle = Fn(([uv$2]) => {
|
|
165
165
|
const rootUV = floor(uv$2);
|
|
166
|
-
const
|
|
167
|
-
|
|
166
|
+
const randomness = uniforms.randomness.uniform;
|
|
167
|
+
const dCenter = getParticleDistance(uv$2, rootUV, randomness);
|
|
168
|
+
const dLeft = getParticleDistance(uv$2, rootUV.add(vec2(-1, 0)), randomness);
|
|
169
|
+
const dRight = getParticleDistance(uv$2, rootUV.add(vec2(1, 0)), randomness);
|
|
170
|
+
const dTop = getParticleDistance(uv$2, rootUV.add(vec2(0, -1)), randomness);
|
|
171
|
+
const dBottom = getParticleDistance(uv$2, rootUV.add(vec2(0, 1)), randomness);
|
|
172
|
+
const minDist = min(min(min(min(dCenter, dLeft), dRight), dTop), dBottom);
|
|
168
173
|
const softness = uniforms.particleSoftness.uniform;
|
|
169
174
|
const scaledSize = uniforms.particleSize.uniform.mul(.01);
|
|
170
|
-
const
|
|
171
|
-
const
|
|
172
|
-
const nearLeft = localPos.x.lessThan(.4);
|
|
173
|
-
const nearRight = localPos.x.greaterThan(.6);
|
|
174
|
-
const nearTop = localPos.y.lessThan(.4);
|
|
175
|
-
const nearBottom = localPos.y.greaterThan(.6);
|
|
176
|
-
const checkLeft = needsNeighbors.and(nearLeft);
|
|
177
|
-
const checkRight = needsNeighbors.and(nearRight);
|
|
178
|
-
const checkTop = needsNeighbors.and(nearTop);
|
|
179
|
-
const checkBottom = needsNeighbors.and(nearBottom);
|
|
180
|
-
minDist = checkLeft.select(min(minDist, getParticleDistance(uv$2, rootUV.add(vec2(-1, 0)), uniforms.randomness.uniform)), minDist);
|
|
181
|
-
minDist = checkRight.select(min(minDist, getParticleDistance(uv$2, rootUV.add(vec2(1, 0)), uniforms.randomness.uniform)), minDist);
|
|
182
|
-
minDist = checkTop.select(min(minDist, getParticleDistance(uv$2, rootUV.add(vec2(0, -1)), uniforms.randomness.uniform)), minDist);
|
|
183
|
-
minDist = checkBottom.select(min(minDist, getParticleDistance(uv$2, rootUV.add(vec2(0, 1)), uniforms.randomness.uniform)), minDist);
|
|
184
|
-
const baseIntensity = smoothstep(scaledSize.mul(.6), outerRadius, minDist).oneMinus();
|
|
175
|
+
const innerRadius = scaledSize.mul(.6);
|
|
176
|
+
const baseIntensity = smoothstep(innerRadius, innerRadius.add(softness.mul(scaledSize.mul(2.4))), minDist).oneMinus();
|
|
185
177
|
const twinkleIntensity = uniforms.twinkle.uniform;
|
|
186
178
|
const particlePhase = rootUV.x.mul(12.9898).add(rootUV.y.mul(78.233)).sin().mul(43758.5453).fract();
|
|
187
179
|
const twinkleValue = sin(time.mul(2).add(particlePhase.mul(6.28318))).mul(.5).add(.5);
|
package/dist/core/index.js
CHANGED
|
@@ -42,7 +42,7 @@ import "./Ellipse-sWhNvW9-.js";
|
|
|
42
42
|
import "./Emboss-DGaubb9x.js";
|
|
43
43
|
import "./FallingLines-DqIZ8wTH.js";
|
|
44
44
|
import "./FilmGrain-Dbw02Jz9.js";
|
|
45
|
-
import "./FloatingParticles-
|
|
45
|
+
import "./FloatingParticles-DKoG78j0.js";
|
|
46
46
|
import "./Flower-BbRNrXIa.js";
|
|
47
47
|
import "./FlowField-D3CAHBBG.js";
|
|
48
48
|
import "./FlowingGradient-BRQ_K-k3.js";
|
|
@@ -122,7 +122,7 @@ import "./Weave-DJ4s3Gwc.js";
|
|
|
122
122
|
import "./WebcamTexture-9Td8qQWm.js";
|
|
123
123
|
import "./WorleyNoise-CWytDfGH.js";
|
|
124
124
|
import "./ZoomBlur-DWFQVFMK.js";
|
|
125
|
-
import { t as getAllShaders } from "./shaderRegistry-
|
|
125
|
+
import { t as getAllShaders } from "./shaderRegistry-BoqhBfun.js";
|
|
126
126
|
import { Material, Mesh, MeshBasicNodeMaterial, OrthographicCamera, PlaneGeometry, SRGBColorSpace, Scene, Vector2, WebGPURenderer } from "three/webgpu";
|
|
127
127
|
import { WebGLRenderer } from "three";
|
|
128
128
|
import { PI, abs, add, atan, clamp, convertToTexture, cos, div, dot, float, fract, max, min, mix, mul, pow, screenUV, sign, sin, smoothstep, sqrt, step, sub, time, uniform, uv, vec2, vec3, vec4 } from "three/tsl";
|
|
@@ -768,6 +768,7 @@ function shaderRenderer() {
|
|
|
768
768
|
let isUpdatingMaterial = false;
|
|
769
769
|
let pendingNodeRemoval = false;
|
|
770
770
|
let globalEventUnregister = null;
|
|
771
|
+
let canvasContextLossUnregister = null;
|
|
771
772
|
let unloadHandler = null;
|
|
772
773
|
let windowResizeHandler = null;
|
|
773
774
|
let cachedMaxTextureDim = 8192;
|
|
@@ -780,6 +781,22 @@ function shaderRenderer() {
|
|
|
780
781
|
let onReadyCallback = null;
|
|
781
782
|
let hasEmittedReady = false;
|
|
782
783
|
let firstRenderPending = false;
|
|
784
|
+
let onDeviceLostCallback = null;
|
|
785
|
+
let deviceLostFired = false;
|
|
786
|
+
const fireDeviceLost = (reason) => {
|
|
787
|
+
if (deviceLostFired) return;
|
|
788
|
+
deviceLostFired = true;
|
|
789
|
+
try {
|
|
790
|
+
stopAnimation();
|
|
791
|
+
} catch {}
|
|
792
|
+
if (onDeviceLostCallback) queueMicrotask(() => {
|
|
793
|
+
try {
|
|
794
|
+
onDeviceLostCallback?.(reason);
|
|
795
|
+
} catch (e) {
|
|
796
|
+
console.error("[Shaders] onDeviceLost callback threw:", e);
|
|
797
|
+
}
|
|
798
|
+
});
|
|
799
|
+
};
|
|
783
800
|
let materialUpdateBatchRAF = null;
|
|
784
801
|
let lastComposedNodes = /* @__PURE__ */ new Set();
|
|
785
802
|
let activeRTTNodes = /* @__PURE__ */ new Set();
|
|
@@ -1936,23 +1953,29 @@ function shaderRenderer() {
|
|
|
1936
1953
|
executeAfterRenderCallbacks(cappedDeltaTime);
|
|
1937
1954
|
if (enablePerformanceTracking) {
|
|
1938
1955
|
performance.mark("shader-gpu-end");
|
|
1956
|
+
let recordedTrueGpuTime = false;
|
|
1939
1957
|
if (renderer instanceof WebGPURenderer) try {
|
|
1940
1958
|
const backend = renderer.backend;
|
|
1941
1959
|
if (backend && backend.get && backend.get(renderer)) {
|
|
1942
1960
|
const renderContext = backend.get(renderer);
|
|
1943
1961
|
if (renderContext?.timestampQuery) {
|
|
1944
1962
|
const gpuTime = renderContext.timestampQuery.getResult();
|
|
1945
|
-
if (gpuTime !== null && gpuTime !== void 0)
|
|
1963
|
+
if (gpuTime !== null && gpuTime !== void 0) {
|
|
1964
|
+
performanceTracker.recordGpuTime(gpuTime / 1e6);
|
|
1965
|
+
recordedTrueGpuTime = true;
|
|
1966
|
+
}
|
|
1946
1967
|
}
|
|
1947
1968
|
}
|
|
1948
1969
|
} catch (e) {}
|
|
1949
1970
|
try {
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1971
|
+
if (!recordedTrueGpuTime) {
|
|
1972
|
+
performance.measure("shader-gpu-time", "shader-gpu-start", "shader-gpu-end");
|
|
1973
|
+
const gpuMeasure = performance.getEntriesByName("shader-gpu-time")[0];
|
|
1974
|
+
if (gpuMeasure) performanceTracker.recordGpuTime(gpuMeasure.duration);
|
|
1975
|
+
performance.clearMeasures("shader-gpu-time");
|
|
1976
|
+
}
|
|
1953
1977
|
performance.clearMarks("shader-gpu-start");
|
|
1954
1978
|
performance.clearMarks("shader-gpu-end");
|
|
1955
|
-
performance.clearMeasures("shader-gpu-time");
|
|
1956
1979
|
} catch (e) {}
|
|
1957
1980
|
}
|
|
1958
1981
|
if (enablePerformanceTracking) {
|
|
@@ -2139,6 +2162,14 @@ function shaderRenderer() {
|
|
|
2139
2162
|
stencil: true,
|
|
2140
2163
|
powerPreference: "high-performance"
|
|
2141
2164
|
});
|
|
2165
|
+
const wglLost = (e) => {
|
|
2166
|
+
e.preventDefault();
|
|
2167
|
+
fireDeviceLost("webglcontextlost");
|
|
2168
|
+
};
|
|
2169
|
+
canvas.addEventListener("webglcontextlost", wglLost, false);
|
|
2170
|
+
canvasContextLossUnregister = () => {
|
|
2171
|
+
canvas.removeEventListener("webglcontextlost", wglLost, false);
|
|
2172
|
+
};
|
|
2142
2173
|
} else try {
|
|
2143
2174
|
renderer = new WebGPURenderer({
|
|
2144
2175
|
canvas,
|
|
@@ -2153,6 +2184,15 @@ function shaderRenderer() {
|
|
|
2153
2184
|
});
|
|
2154
2185
|
else await renderer.init();
|
|
2155
2186
|
if (localAbortController.signal.aborted) return;
|
|
2187
|
+
try {
|
|
2188
|
+
const device = renderer.backend?.device;
|
|
2189
|
+
if (device?.lost && typeof device.lost.then === "function") device.lost.then((info) => {
|
|
2190
|
+
if (info?.reason === "destroyed") return;
|
|
2191
|
+
fireDeviceLost(info?.message || info?.reason || "unknown");
|
|
2192
|
+
}).catch(() => {});
|
|
2193
|
+
} catch (hookErr) {
|
|
2194
|
+
console.warn("[Shaders] could not attach WebGPU device.lost handler", hookErr);
|
|
2195
|
+
}
|
|
2156
2196
|
} catch (e) {
|
|
2157
2197
|
if (localAbortController.signal.aborted) return;
|
|
2158
2198
|
console.warn("[Shaders] WebGPU initialization failed, falling back to WebGL:", e);
|
|
@@ -2168,6 +2208,14 @@ function shaderRenderer() {
|
|
|
2168
2208
|
if (context) webglOptions.context = context;
|
|
2169
2209
|
renderer = new WebGLRenderer(webglOptions);
|
|
2170
2210
|
if (localAbortController.signal.aborted) return;
|
|
2211
|
+
const wglLost = (e$1) => {
|
|
2212
|
+
e$1.preventDefault();
|
|
2213
|
+
fireDeviceLost("webglcontextlost");
|
|
2214
|
+
};
|
|
2215
|
+
canvas.addEventListener("webglcontextlost", wglLost, false);
|
|
2216
|
+
canvasContextLossUnregister = () => {
|
|
2217
|
+
canvas.removeEventListener("webglcontextlost", wglLost, false);
|
|
2218
|
+
};
|
|
2171
2219
|
} catch (webglError) {
|
|
2172
2220
|
if (localAbortController.signal.aborted) return;
|
|
2173
2221
|
console.error("[Shaders] Both WebGPU and WebGL initialization failed:", webglError);
|
|
@@ -2260,6 +2308,10 @@ function shaderRenderer() {
|
|
|
2260
2308
|
globalEventUnregister();
|
|
2261
2309
|
globalEventUnregister = null;
|
|
2262
2310
|
}
|
|
2311
|
+
if (canvasContextLossUnregister) {
|
|
2312
|
+
canvasContextLossUnregister();
|
|
2313
|
+
canvasContextLossUnregister = null;
|
|
2314
|
+
}
|
|
2263
2315
|
if (canvasElement) {
|
|
2264
2316
|
canvasElement.removeEventListener("mousedown", canvasMouseDownHandler);
|
|
2265
2317
|
canvasElement.removeEventListener("touchstart", canvasTouchStartHandler);
|
|
@@ -2325,6 +2377,8 @@ function shaderRenderer() {
|
|
|
2325
2377
|
onReadyCallback = null;
|
|
2326
2378
|
hasEmittedReady = false;
|
|
2327
2379
|
firstRenderPending = false;
|
|
2380
|
+
onDeviceLostCallback = null;
|
|
2381
|
+
deviceLostFired = false;
|
|
2328
2382
|
};
|
|
2329
2383
|
const getRendererType = () => {
|
|
2330
2384
|
if (!renderer) return null;
|
|
@@ -2357,6 +2411,9 @@ function shaderRenderer() {
|
|
|
2357
2411
|
setOnReady: (callback) => {
|
|
2358
2412
|
onReadyCallback = callback;
|
|
2359
2413
|
},
|
|
2414
|
+
setOnDeviceLost: (callback) => {
|
|
2415
|
+
onDeviceLostCallback = callback;
|
|
2416
|
+
},
|
|
2360
2417
|
__testing: {
|
|
2361
2418
|
needsTransformation,
|
|
2362
2419
|
findChildNodes,
|
package/dist/core/registry.js
CHANGED
|
@@ -42,7 +42,7 @@ import "./Ellipse-sWhNvW9-.js";
|
|
|
42
42
|
import "./Emboss-DGaubb9x.js";
|
|
43
43
|
import "./FallingLines-DqIZ8wTH.js";
|
|
44
44
|
import "./FilmGrain-Dbw02Jz9.js";
|
|
45
|
-
import "./FloatingParticles-
|
|
45
|
+
import "./FloatingParticles-DKoG78j0.js";
|
|
46
46
|
import "./Flower-BbRNrXIa.js";
|
|
47
47
|
import "./FlowField-D3CAHBBG.js";
|
|
48
48
|
import "./FlowingGradient-BRQ_K-k3.js";
|
|
@@ -122,5 +122,5 @@ import "./Weave-DJ4s3Gwc.js";
|
|
|
122
122
|
import "./WebcamTexture-9Td8qQWm.js";
|
|
123
123
|
import "./WorleyNoise-CWytDfGH.js";
|
|
124
124
|
import "./ZoomBlur-DWFQVFMK.js";
|
|
125
|
-
import { a as shaderRegistry, i as getShadersByCategory, n as getShaderByName, r as getShaderCategories, t as getAllShaders } from "./shaderRegistry-
|
|
125
|
+
import { a as shaderRegistry, i as getShadersByCategory, n as getShaderByName, r as getShaderCategories, t as getAllShaders } from "./shaderRegistry-BoqhBfun.js";
|
|
126
126
|
export { getAllShaders, getShaderByName, getShaderCategories, getShadersByCategory, shaderRegistry };
|
package/dist/core/renderer.d.ts
CHANGED
|
@@ -198,6 +198,7 @@ export declare function shaderRenderer(): {
|
|
|
198
198
|
getInternalRenderer: () => WebGPURenderer | WebGLRenderer;
|
|
199
199
|
setForceFullFrameRate: (enabled: boolean) => boolean;
|
|
200
200
|
setOnReady: (callback: (() => void) | null) => void;
|
|
201
|
+
setOnDeviceLost: (callback: ((reason: string) => void) | null) => void;
|
|
201
202
|
__testing: {
|
|
202
203
|
needsTransformation: (transform: import('./types').TransformConfig | undefined) => boolean;
|
|
203
204
|
findChildNodes: (parentId: string) => NodeInfo[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,KAAK,IAAI,EAMT,cAAc,EACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAC,aAAa,EAAC,MAAM,OAAO,CAAA;AAInC,OAAO,EAAoB,eAAe,EAAE,mBAAmB,EAAE,UAAU,EAA8D,YAAY,EAAE,cAAc,EAAE,cAAc,EAAqB,WAAW,EAAC,MAAM,SAAS,CAAA;AACrO,OAAO,EAAqB,gBAAgB,EAAC,MAAM,sBAAsB,CAAA;AAMzE;;GAEG;AACH,UAAU,QAAQ;IAEd;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAA;IAEV;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,gBAAgB,EAAE,mBAAmB,CAAC,cAAc,CAAC,CAAA;IAErD;;OAEG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAEvB;;OAEG;IACH,WAAW,EAAE,OAAO,CAAA;IAEpB;;;;OAIG;IACH,aAAa,EAAE,OAAO,CAAA;IAEtB;;OAEG;IACH,cAAc,EAAE,GAAG,CAAA;IAEnB;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAA;IAEtB;;OAEG;IACH,QAAQ,EAAE,WAAW,CAAA;IAErB;;;OAGG;IACH,gBAAgB,EAAE,eAAe,EAAE,CAAA;IAEnC;;;OAGG;IACH,qBAAqB,EAAE,cAAc,EAAE,CAAA;IAEvC;;;OAGG;IACH,oBAAoB,EAAE,cAAc,EAAE,CAAA;IAEtC;;;OAGG;IACH,eAAe,EAAE,cAAc,EAAE,CAAA;IAEjC;;OAEG;IACH,SAAS,CAAC,EAAE,iBAAiB,CAAA;IAE7B;;;OAGG;IACH,iBAAiB,CAAC,EAAE;QAChB,OAAO,EAAE,GAAG,CAAA;QACZ,OAAO,EAAE,GAAG,CAAA;QACZ,QAAQ,EAAE,GAAG,CAAA;QACb,KAAK,EAAE,GAAG,CAAA;QACV,OAAO,EAAE,GAAG,CAAA;QACZ,OAAO,EAAE,GAAG,CAAA;QACZ,KAAK,EAAE,GAAG,CAAA;QACV,WAAW,EAAE,GAAG,CAAA;KACnB,CAAA;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAE5B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAEjE;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QACzB,QAAQ,EAAE,GAAG,CAAA;QACb,QAAQ,EAAE,GAAG,CAAA;QACb,SAAS,EAAE,GAAG,CAAA;QACd,SAAS,EAAE,GAAG,CAAA;QACd,KAAK,EAAE,GAAG,CAAA;QACV,aAAa,CAAC,EAAE,GAAG,CAAA;QACnB,OAAO,CAAC,EAAE,UAAU,CAAA;KACvB,CAAC,CAAA;IAEF;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAC9B,QAAQ,EAAE,MAAM,CAAA;QAChB,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,EAAE,MAAM,CAAA;QACjB,eAAe,EAAE,GAAG,CAAA;KACvB,CAAC,CAAA;IAEF;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAC9B,eAAe,EAAE,GAAG,CAAA;KACvB,CAAC,CAAA;IAEF;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,CAAA;IAEtC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAEpC;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,IAAI,CAAA;IAE/C,wFAAwF;IACxF,WAAW,CAAC,EAAE,OAAO,CAAA;CAExB;AAED;;GAEG;AACH,UAAU,YAAY;IAClB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED;;GAEG;AACH,UAAU,iBAAiB;IACvB,MAAM,EAAE,iBAAiB,CAAA;IACzB;mGAC+F;IAC/F,YAAY,CAAC,EAAE,WAAW,CAAA;IAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAA;IACnC,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAClC,OAAO,CAAC,EAAE,qBAAqB,GAAG,sBAAsB,CAAA;IACxD,GAAG,CAAC,EAAE;QACF,MAAM,EAAE,SAAS,CAAA;QACjB,OAAO,EAAE,UAAU,CAAA;KACtB,CAAA;IACD,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;4BAEwB;IACxB,cAAc,CAAC,EAAE,OAAO,CAAA;CAC3B;AAiHD;;GAEG;AACH,wBAAgB,cAAc;wLAq/EG,iBAAiB;;uBArnCpB,MAAM,oBAAoB,mBAAmB,CAAC,cAAc,CAAC,GAAG,IAAI,YAAY,MAAM,GAAG,IAAI,YAAY,YAAY,GAAG,IAAI,aAAY,WAAW,wBAA6B,mBAAmB,cAAc,iBAAiB,KAAG,IAAI;qBA6b3O,MAAM,KAAG,IAAI;iCA3RD,MAAM,eAAe,MAAM,SAAS,GAAG,KAAG,IAAI;iCA8D9C,MAAM,YAAY,OAAO,CAAC,YAAY,CAAC,KAAG,IAAI;;oBAo1C9D,MAAM,UAAU,MAAM;0BA5oBf,IAAI;yBAyBL,IAAI;yBApPE,OAAO,CAAC,IAAI,CAAC;+BA0Mb,gBAAgB;;eAqqBmB,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC;;2BArBpE,QAAQ,GAAG,OAAO,GAAG,IAAI;;qCAwBhB,OAAO,KAAG,OAAO;2BAK3B,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI;gCAGd,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI;;;mCA79E/B,MAAM,KAAG,QAAQ,EAAE;oCA+CzC,IAAI,YACF,QAAQ,UACV,MAAM,kBACE,GAAG,CAAC,MAAM,CAAC,gBACb,IAAI,KACnB,IAAI;0CA0VK,IAAI,YACF,QAAQ,KACnB,IAAI;;;;EA2lEV"}
|
|
@@ -35,7 +35,7 @@ import { n as componentDefinition$33 } from "./Ellipse-sWhNvW9-.js";
|
|
|
35
35
|
import { n as componentDefinition$34 } from "./Emboss-DGaubb9x.js";
|
|
36
36
|
import { n as componentDefinition$35 } from "./FallingLines-DqIZ8wTH.js";
|
|
37
37
|
import { n as componentDefinition$36 } from "./FilmGrain-Dbw02Jz9.js";
|
|
38
|
-
import { n as componentDefinition$37 } from "./FloatingParticles-
|
|
38
|
+
import { n as componentDefinition$37 } from "./FloatingParticles-DKoG78j0.js";
|
|
39
39
|
import { n as componentDefinition$38 } from "./Flower-BbRNrXIa.js";
|
|
40
40
|
import { n as componentDefinition$39 } from "./FlowField-D3CAHBBG.js";
|
|
41
41
|
import { n as componentDefinition$40 } from "./FlowingGradient-BRQ_K-k3.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shaders/FloatingParticles/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAqB,MAAM,iBAAiB,CAAA;AAIvE,OAAO,EAAC,cAAc,EAAC,MAAM,qCAAqC,CAAA;AAkClE,MAAM,WAAW,cAAc;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;CAC1B;AAED,eAAO,MAAM,mBAAmB,EAAE,mBAAmB,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shaders/FloatingParticles/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAqB,MAAM,iBAAiB,CAAA;AAIvE,OAAO,EAAC,cAAc,EAAC,MAAM,qCAAqC,CAAA;AAkClE,MAAM,WAAW,cAAc;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;CAC1B;AAED,eAAO,MAAM,mBAAmB,EAAE,mBAAmB,CAAC,cAAc,CAuMnE,CAAA;AAED,eAAe,mBAAmB,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import "../../transformations-CJcUeZIC.js";
|
|
2
2
|
import "../../time-DUqSFWvT.js";
|
|
3
|
-
import { n as componentDefinition, t as FloatingParticles_default } from "../../FloatingParticles-
|
|
3
|
+
import { n as componentDefinition, t as FloatingParticles_default } from "../../FloatingParticles-DKoG78j0.js";
|
|
4
4
|
export { componentDefinition, FloatingParticles_default as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createShader.d.ts","sourceRoot":"","sources":["../src/createShader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,cAAc,CAAA;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"createShader.d.ts","sourceRoot":"","sources":["../src/createShader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,cAAc,CAAA;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAgC5D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,cAAc,CAAC,CA2WzB"}
|
package/dist/js/createShader.js
CHANGED
|
@@ -16,13 +16,10 @@ var METADATA_PROPS = new Set([
|
|
|
16
16
|
"maskType"
|
|
17
17
|
]);
|
|
18
18
|
async function createShader(canvas, preset, options) {
|
|
19
|
-
const renderer = shaderRenderer();
|
|
20
|
-
if (options?.onReady) renderer.setOnReady(options.onReady);
|
|
21
19
|
const componentRegistry = /* @__PURE__ */ new Map();
|
|
22
20
|
getAllShaders().forEach((shader) => {
|
|
23
21
|
componentRegistry.set(shader.definition.name, shader.definition);
|
|
24
22
|
});
|
|
25
|
-
const nodeEntryMap = /* @__PURE__ */ new Map();
|
|
26
23
|
if (!canvas.style.width || !canvas.style.height) {
|
|
27
24
|
const rect = canvas.getBoundingClientRect();
|
|
28
25
|
const w = rect.width > 0 ? rect.width : canvas.width;
|
|
@@ -30,32 +27,21 @@ async function createShader(canvas, preset, options) {
|
|
|
30
27
|
if (w > 0 && !canvas.style.width) canvas.style.width = `${w}px`;
|
|
31
28
|
if (h > 0 && !canvas.style.height) canvas.style.height = `${h}px`;
|
|
32
29
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
observeElement: options?.observeElement,
|
|
39
|
-
gpu: options?.gpu
|
|
40
|
-
});
|
|
41
|
-
const rootId = "shader-root";
|
|
42
|
-
renderer.registerNode(rootId, ({ childNode }) => childNode || vec4(0, 0, 0, 0), null, null, {}, void 0);
|
|
43
|
-
preset.components.forEach((component, index) => {
|
|
44
|
-
registerComponent(component, rootId, index);
|
|
45
|
-
});
|
|
46
|
-
let telemetryCollector = null;
|
|
47
|
-
let telemetryStartTimeout = null;
|
|
48
|
-
if (isExternalUser()) {
|
|
49
|
-
const checkRendering = () => {
|
|
50
|
-
if (renderer.getPerformanceStats().fps > 0) {
|
|
51
|
-
telemetryCollector = startTelemetry(renderer, "2.5.119", options?.disableTelemetry || false, false);
|
|
52
|
-
if (telemetryCollector) telemetryCollector.start();
|
|
53
|
-
telemetryStartTimeout = null;
|
|
54
|
-
} else telemetryStartTimeout = setTimeout(checkRendering, 500);
|
|
30
|
+
function cloneComponent(c) {
|
|
31
|
+
return {
|
|
32
|
+
...c,
|
|
33
|
+
props: c.props ? { ...c.props } : void 0,
|
|
34
|
+
children: c.children?.map(cloneComponent)
|
|
55
35
|
};
|
|
56
|
-
telemetryStartTimeout = setTimeout(checkRendering, 500);
|
|
57
36
|
}
|
|
58
|
-
|
|
37
|
+
const livePreset = {
|
|
38
|
+
...preset,
|
|
39
|
+
components: preset.components.map(cloneComponent)
|
|
40
|
+
};
|
|
41
|
+
let current = null;
|
|
42
|
+
let destroyed = false;
|
|
43
|
+
let rebuilding = false;
|
|
44
|
+
function registerComponent(renderer, nodeEntryMap, component, parentId, renderOrder) {
|
|
59
45
|
const componentDef = componentRegistry.get(component.type);
|
|
60
46
|
if (!componentDef) {
|
|
61
47
|
console.warn(`[createShader] Unknown component type: ${component.type}`);
|
|
@@ -99,33 +85,134 @@ async function createShader(canvas, preset, options) {
|
|
|
99
85
|
currentMaps: { ...mapsFromProps }
|
|
100
86
|
});
|
|
101
87
|
component.children?.forEach((child, index) => {
|
|
102
|
-
registerComponent(child, nodeId, index);
|
|
88
|
+
registerComponent(renderer, nodeEntryMap, child, nodeId, index);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
async function build() {
|
|
92
|
+
const renderer = shaderRenderer();
|
|
93
|
+
const nodeEntryMap = /* @__PURE__ */ new Map();
|
|
94
|
+
if (options?.onReady) renderer.setOnReady(options.onReady);
|
|
95
|
+
await renderer.initialize({
|
|
96
|
+
canvas,
|
|
97
|
+
resizeTarget: canvas,
|
|
98
|
+
enablePerformanceTracking: options?.enablePerformanceTracking || false,
|
|
99
|
+
colorSpace: options?.colorSpace,
|
|
100
|
+
observeElement: options?.observeElement,
|
|
101
|
+
gpu: options?.gpu
|
|
102
|
+
});
|
|
103
|
+
const state = {
|
|
104
|
+
renderer,
|
|
105
|
+
nodeEntryMap,
|
|
106
|
+
telemetryCollector: null,
|
|
107
|
+
telemetryStartTimeout: null
|
|
108
|
+
};
|
|
109
|
+
renderer.setOnDeviceLost((reason) => {
|
|
110
|
+
if (destroyed || rebuilding) return;
|
|
111
|
+
if (current !== null && current !== state) return;
|
|
112
|
+
rebuilding = true;
|
|
113
|
+
try {
|
|
114
|
+
options?.onError?.(reason);
|
|
115
|
+
} catch (e) {
|
|
116
|
+
console.error("[createShader] onError callback threw:", e);
|
|
117
|
+
}
|
|
118
|
+
(async () => {
|
|
119
|
+
try {
|
|
120
|
+
teardownState(state);
|
|
121
|
+
current = null;
|
|
122
|
+
if (destroyed) return;
|
|
123
|
+
const next = await build();
|
|
124
|
+
if (destroyed) {
|
|
125
|
+
teardownState(next);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
current = next;
|
|
129
|
+
} catch (rebuildErr) {
|
|
130
|
+
console.error("[createShader] rebuild after device loss failed:", rebuildErr);
|
|
131
|
+
try {
|
|
132
|
+
options?.onError?.("rebuild_failed");
|
|
133
|
+
} catch {}
|
|
134
|
+
} finally {
|
|
135
|
+
rebuilding = false;
|
|
136
|
+
}
|
|
137
|
+
})();
|
|
103
138
|
});
|
|
139
|
+
const rootId = "shader-root";
|
|
140
|
+
renderer.registerNode(rootId, ({ childNode }) => childNode || vec4(0, 0, 0, 0), null, null, {}, void 0);
|
|
141
|
+
livePreset.components.forEach((component, index) => {
|
|
142
|
+
registerComponent(renderer, nodeEntryMap, component, rootId, index);
|
|
143
|
+
});
|
|
144
|
+
if (isExternalUser()) {
|
|
145
|
+
const checkRendering = () => {
|
|
146
|
+
if (destroyed || current !== state) {
|
|
147
|
+
state.telemetryStartTimeout = null;
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
if (renderer.getPerformanceStats().fps > 0) {
|
|
151
|
+
state.telemetryCollector = startTelemetry(renderer, "2.5.121", options?.disableTelemetry || false, false);
|
|
152
|
+
if (state.telemetryCollector) state.telemetryCollector.start();
|
|
153
|
+
state.telemetryStartTimeout = null;
|
|
154
|
+
} else state.telemetryStartTimeout = setTimeout(checkRendering, 500);
|
|
155
|
+
};
|
|
156
|
+
state.telemetryStartTimeout = setTimeout(checkRendering, 500);
|
|
157
|
+
}
|
|
158
|
+
return state;
|
|
159
|
+
}
|
|
160
|
+
function teardownState(state) {
|
|
161
|
+
if (state.telemetryCollector) {
|
|
162
|
+
try {
|
|
163
|
+
state.telemetryCollector.stop();
|
|
164
|
+
} catch {}
|
|
165
|
+
state.telemetryCollector = null;
|
|
166
|
+
}
|
|
167
|
+
if (state.telemetryStartTimeout !== null) {
|
|
168
|
+
clearTimeout(state.telemetryStartTimeout);
|
|
169
|
+
state.telemetryStartTimeout = null;
|
|
170
|
+
}
|
|
171
|
+
try {
|
|
172
|
+
state.renderer.cleanup();
|
|
173
|
+
} catch {}
|
|
104
174
|
}
|
|
175
|
+
current = await build();
|
|
105
176
|
function update(componentId, props) {
|
|
177
|
+
if (!current) return;
|
|
178
|
+
const { renderer, nodeEntryMap } = current;
|
|
106
179
|
const entry = nodeEntryMap.get(componentId);
|
|
107
180
|
if (!entry) {
|
|
108
181
|
console.warn(`[createShader] Component ID not found: ${componentId}`);
|
|
109
182
|
return;
|
|
110
183
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
184
|
+
if (!entry.component.props) entry.component.props = {};
|
|
185
|
+
const live = entry.component.props;
|
|
186
|
+
for (const [key, value] of Object.entries(props)) if (METADATA_PROPS.has(key)) if (key === "maskSource") {
|
|
187
|
+
renderer.updateNodeMetadata(entry.nodeId, { mask: value ? {
|
|
188
|
+
source: value,
|
|
189
|
+
type: props.maskType || live.maskType || "alpha"
|
|
190
|
+
} : void 0 });
|
|
191
|
+
live.maskSource = value;
|
|
192
|
+
if ("maskType" in props) live.maskType = props.maskType;
|
|
193
|
+
} else if (key === "maskType") continue;
|
|
194
|
+
else if (key === "transform") {
|
|
195
|
+
renderer.updateNodeMetadata(entry.nodeId, { transform: value });
|
|
196
|
+
live.transform = value;
|
|
197
|
+
} else {
|
|
198
|
+
renderer.updateNodeMetadata(entry.nodeId, { [key]: value });
|
|
199
|
+
live[key] = value;
|
|
200
|
+
}
|
|
118
201
|
else if (isPropDriver(value)) if (!Object.prototype.hasOwnProperty.call(entry.componentDef.props, key)) console.warn(`[createShader] Ignoring PropDriver for unknown prop "${key}" on ${entry.component.type}`);
|
|
119
202
|
else {
|
|
120
203
|
entry.currentMaps[key] = value;
|
|
121
204
|
renderer.updateNodeMetadata(entry.nodeId, { maps: { ...entry.currentMaps } });
|
|
205
|
+
live[key] = value;
|
|
122
206
|
}
|
|
123
207
|
else {
|
|
124
208
|
if (key in entry.currentMaps) {
|
|
125
209
|
delete entry.currentMaps[key];
|
|
126
210
|
renderer.updateNodeMetadata(entry.nodeId, { maps: Object.keys(entry.currentMaps).length > 0 ? { ...entry.currentMaps } : void 0 });
|
|
127
211
|
}
|
|
128
|
-
if (Object.prototype.hasOwnProperty.call(entry.componentDef.props, key))
|
|
212
|
+
if (Object.prototype.hasOwnProperty.call(entry.componentDef.props, key)) {
|
|
213
|
+
renderer.updateUniformValue(entry.nodeId, key, value);
|
|
214
|
+
live[key] = value;
|
|
215
|
+
}
|
|
129
216
|
}
|
|
130
217
|
}
|
|
131
218
|
function resize(width, height) {
|
|
@@ -135,25 +222,21 @@ async function createShader(canvas, preset, options) {
|
|
|
135
222
|
if (w > 0 && h > 0) {
|
|
136
223
|
canvas.style.width = `${w}px`;
|
|
137
224
|
canvas.style.height = `${h}px`;
|
|
138
|
-
renderer.resize(w, h);
|
|
225
|
+
if (current) current.renderer.resize(w, h);
|
|
139
226
|
}
|
|
140
227
|
}
|
|
141
228
|
function destroy() {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
if (telemetryStartTimeout !== null) {
|
|
147
|
-
clearTimeout(telemetryStartTimeout);
|
|
148
|
-
telemetryStartTimeout = null;
|
|
229
|
+
destroyed = true;
|
|
230
|
+
if (current) {
|
|
231
|
+
teardownState(current);
|
|
232
|
+
current = null;
|
|
149
233
|
}
|
|
150
|
-
renderer.cleanup();
|
|
151
234
|
}
|
|
152
235
|
function pause() {
|
|
153
|
-
renderer.stopAnimation();
|
|
236
|
+
if (current) current.renderer.stopAnimation();
|
|
154
237
|
}
|
|
155
238
|
function resume() {
|
|
156
|
-
renderer.startAnimation();
|
|
239
|
+
if (current) current.renderer.startAnimation();
|
|
157
240
|
}
|
|
158
241
|
return {
|
|
159
242
|
update,
|
package/dist/js/types.d.ts
CHANGED
|
@@ -5,6 +5,20 @@ export interface ShaderOptions {
|
|
|
5
5
|
enablePerformanceTracking?: boolean;
|
|
6
6
|
isPreview?: boolean;
|
|
7
7
|
onReady?: () => void;
|
|
8
|
+
/**
|
|
9
|
+
* Fires when the underlying GPU device/context is lost — e.g. Chrome
|
|
10
|
+
* evicting a backgrounded tab's WebGPU device, an OS-level GPU reset,
|
|
11
|
+
* driver crash, or `webglcontextlost` on the WebGL fallback path. By the
|
|
12
|
+
* time this callback runs the instance has already started rebuilding
|
|
13
|
+
* itself transparently against the same canvas and preset; the existing
|
|
14
|
+
* `update / pause / resume / resize / destroy` references continue to work
|
|
15
|
+
* once the rebuild completes. The callback is informational — surface a
|
|
16
|
+
* toast, write a log, no action required.
|
|
17
|
+
*
|
|
18
|
+
* @param reason Best-effort string from the underlying API
|
|
19
|
+
* (e.g. `'destroyed'`, `'webglcontextlost'`, GPU error message).
|
|
20
|
+
*/
|
|
21
|
+
onError?: (reason: string) => void;
|
|
8
22
|
/** When false, disables automatic ResizeObserver and IntersectionObserver.
|
|
9
23
|
* Use resize() for manual sizing and pause()/resume() for animation control.
|
|
10
24
|
* Defaults to true.
|
package/dist/js/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEjE,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,CAAA;IACjC,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAA;IACnC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;;;kBAKc;IACd,GAAG,CAAC,EAAE;QACJ,MAAM,EAAE,SAAS,CAAA;QACjB,OAAO,EAAE,UAAU,CAAA;KACpB,CAAA;CACF;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAA;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,aAAa,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,iGAAiG;IACjG,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAC/D;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAA;IAC7D;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7C,mFAAmF;IACnF,KAAK,IAAI,IAAI,CAAA;IACb,kDAAkD;IAClD,MAAM,IAAI,IAAI,CAAA;IACd,OAAO,IAAI,IAAI,CAAA;CAChB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEjE,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,CAAA;IACjC,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAA;IACnC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;;;kBAKc;IACd,GAAG,CAAC,EAAE;QACJ,MAAM,EAAE,SAAS,CAAA;QACjB,OAAO,EAAE,UAAU,CAAA;KACpB,CAAA;CACF;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAA;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,aAAa,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,iGAAiG;IACjG,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAC/D;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAA;IAC7D;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7C,mFAAmF;IACnF,KAAK,IAAI,IAAI,CAAA;IACb,kDAAkD;IAClD,MAAM,IAAI,IAAI,CAAA;IACd,OAAO,IAAI,IAAI,CAAA;CAChB"}
|
package/dist/react/Shader.js
CHANGED
|
@@ -89,7 +89,7 @@ const Shader = ({ children, disableTelemetry = false, colorSpace = "p3-linear",
|
|
|
89
89
|
return;
|
|
90
90
|
}
|
|
91
91
|
if (rendererRef.current.getPerformanceStats().fps > 0) {
|
|
92
|
-
telemetryCollectorRef.current = startTelemetry(rendererRef.current, "2.5.
|
|
92
|
+
telemetryCollectorRef.current = startTelemetry(rendererRef.current, "2.5.121", disableTelemetry, isPreview);
|
|
93
93
|
if (telemetryCollectorRef.current) telemetryCollectorRef.current.start();
|
|
94
94
|
telemetryStartTimeoutRef.current = null;
|
|
95
95
|
} else telemetryStartTimeoutRef.current = window.setTimeout(checkRendering, 500);
|