@razorpay/blade 12.92.0 → 12.93.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/assets/spark/bottom-frame.jpg +0 -0
- package/assets/spark/colorama-center-gradient-map.jpg +0 -0
- package/assets/spark/colorama-gradient-map-blue.jpg +0 -0
- package/assets/spark/colorama-gradient-map-green.jpg +0 -0
- package/assets/spark/ray-pulse.mp4 +0 -0
- package/assets/spark/spark-base-video.mp4 +0 -0
- package/assets/spark/success-animation-circle.mp4 +0 -0
- package/build/lib/native/components/Spark/RazorSenseGradient/FluidGradient.js +9 -0
- package/build/lib/native/components/Spark/RazorSenseGradient/FluidGradient.js.map +1 -0
- package/build/lib/native/components/Spark/RazorSenseGradient/FluidGradientMount.js +18 -0
- package/build/lib/native/components/Spark/RazorSenseGradient/FluidGradientMount.js.map +1 -0
- package/build/lib/native/components/Spark/RazorSenseGradient/shader.js +69 -0
- package/build/lib/native/components/Spark/RazorSenseGradient/shader.js.map +1 -0
- package/build/lib/native/components/Spark/RazorSenseGradient/useFluidGradient.js +7 -0
- package/build/lib/native/components/Spark/RazorSenseGradient/useFluidGradient.js.map +1 -0
- package/build/lib/native/components/Spark/RzpGlass/PerformanceManager.js +7 -0
- package/build/lib/native/components/Spark/RzpGlass/PerformanceManager.js.map +1 -0
- package/build/lib/native/components/Spark/RzpGlass/RzpGlass.js +13 -0
- package/build/lib/native/components/Spark/RzpGlass/RzpGlass.js.map +1 -0
- package/build/lib/native/components/Spark/RzpGlass/RzpGlassMount.js +28 -0
- package/build/lib/native/components/Spark/RzpGlass/RzpGlassMount.js.map +1 -0
- package/build/lib/native/components/Spark/RzpGlass/presets.js +4 -0
- package/build/lib/native/components/Spark/RzpGlass/presets.js.map +1 -0
- package/build/lib/native/components/Spark/RzpGlass/rzpGlassShader.js +920 -0
- package/build/lib/native/components/Spark/RzpGlass/rzpGlassShader.js.map +1 -0
- package/build/lib/native/components/Spark/RzpGlass/utils.js +4 -0
- package/build/lib/native/components/Spark/RzpGlass/utils.js.map +1 -0
- package/build/lib/native/components/Spark/RzpGlass/webgl-utils.js +7 -0
- package/build/lib/native/components/Spark/RzpGlass/webgl-utils.js.map +1 -0
- package/build/lib/native/components/index.js +2 -0
- package/build/lib/native/components/index.js.map +1 -1
- package/build/lib/web/development/_virtual/flatten.js +1 -1
- package/build/lib/web/development/_virtual/flatten3.js +1 -1
- package/build/lib/web/development/components/Dropdown/FilterChipSelectInput.web.js +23 -15
- package/build/lib/web/development/components/Dropdown/FilterChipSelectInput.web.js.map +1 -1
- package/build/lib/web/development/components/SideNav/SideNav.web.js +21 -21
- package/build/lib/web/development/components/SideNav/SideNav.web.js.map +1 -1
- package/build/lib/web/development/components/SideNav/SideNavItems/SideNavLink.web.js +4 -4
- package/build/lib/web/development/components/SideNav/SideNavItems/SideNavLink.web.js.map +1 -1
- package/build/lib/web/development/components/Spark/RazorSenseGradient/FluidGradient.js +92 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/FluidGradient.js.map +1 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/FluidGradientMount.js +110 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/FluidGradientMount.js.map +1 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/index.js +2 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/index.js.map +1 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/shader.js +18 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/shader.js.map +1 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/useFluidGradient.js +34 -0
- package/build/lib/web/development/components/Spark/RazorSenseGradient/useFluidGradient.js.map +1 -0
- package/build/lib/web/development/components/Spark/RzpGlass/PerformanceManager.js +455 -0
- package/build/lib/web/development/components/Spark/RzpGlass/PerformanceManager.js.map +1 -0
- package/build/lib/web/development/components/Spark/RzpGlass/RzpGlass.js +263 -0
- package/build/lib/web/development/components/Spark/RzpGlass/RzpGlass.js.map +1 -0
- package/build/lib/web/development/components/Spark/RzpGlass/RzpGlassMount.js +908 -0
- package/build/lib/web/development/components/Spark/RzpGlass/RzpGlassMount.js.map +1 -0
- package/build/lib/web/development/components/Spark/RzpGlass/index.js +24 -0
- package/build/lib/web/development/components/Spark/RzpGlass/index.js.map +1 -0
- package/build/lib/web/development/components/Spark/RzpGlass/presets.js +151 -0
- package/build/lib/web/development/components/Spark/RzpGlass/presets.js.map +1 -0
- package/build/lib/web/development/components/Spark/RzpGlass/rzpGlassShader.js +5 -0
- package/build/lib/web/development/components/Spark/RzpGlass/rzpGlassShader.js.map +1 -0
- package/build/lib/web/development/components/Spark/RzpGlass/utils.js +77 -0
- package/build/lib/web/development/components/Spark/RzpGlass/utils.js.map +1 -0
- package/build/lib/web/development/components/Spark/RzpGlass/webgl-utils.js +200 -0
- package/build/lib/web/development/components/Spark/RzpGlass/webgl-utils.js.map +1 -0
- package/build/lib/web/development/components/Spark/index.js +3 -0
- package/build/lib/web/development/components/Spark/index.js.map +1 -0
- package/build/lib/web/development/components/index.js +3 -0
- package/build/lib/web/development/components/index.js.map +1 -1
- package/build/lib/web/development/node_modules/es-toolkit/dist/array/flatten.js +1 -1
- package/build/lib/web/development/node_modules/es-toolkit/dist/compat/array/flatten.js +1 -1
- package/build/lib/web/development/node_modules/es-toolkit/dist/compat/array/sortBy.js +2 -2
- package/build/lib/web/development/node_modules/es-toolkit/dist/compat/object/omit.js +2 -2
- package/build/lib/web/production/components/Dropdown/FilterChipSelectInput.web.js +23 -15
- package/build/lib/web/production/components/Dropdown/FilterChipSelectInput.web.js.map +1 -1
- package/build/lib/web/production/components/SideNav/SideNav.web.js +21 -21
- package/build/lib/web/production/components/SideNav/SideNav.web.js.map +1 -1
- package/build/lib/web/production/components/SideNav/SideNavItems/SideNavLink.web.js +4 -4
- package/build/lib/web/production/components/SideNav/SideNavItems/SideNavLink.web.js.map +1 -1
- package/build/lib/web/production/components/Spark/RazorSenseGradient/FluidGradient.js +92 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/FluidGradient.js.map +1 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/FluidGradientMount.js +110 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/FluidGradientMount.js.map +1 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/index.js +2 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/index.js.map +1 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/shader.js +18 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/shader.js.map +1 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/useFluidGradient.js +34 -0
- package/build/lib/web/production/components/Spark/RazorSenseGradient/useFluidGradient.js.map +1 -0
- package/build/lib/web/production/components/Spark/RzpGlass/PerformanceManager.js +455 -0
- package/build/lib/web/production/components/Spark/RzpGlass/PerformanceManager.js.map +1 -0
- package/build/lib/web/production/components/Spark/RzpGlass/RzpGlass.js +263 -0
- package/build/lib/web/production/components/Spark/RzpGlass/RzpGlass.js.map +1 -0
- package/build/lib/web/production/components/Spark/RzpGlass/RzpGlassMount.js +908 -0
- package/build/lib/web/production/components/Spark/RzpGlass/RzpGlassMount.js.map +1 -0
- package/build/lib/web/production/components/Spark/RzpGlass/index.js +24 -0
- package/build/lib/web/production/components/Spark/RzpGlass/index.js.map +1 -0
- package/build/lib/web/production/components/Spark/RzpGlass/presets.js +151 -0
- package/build/lib/web/production/components/Spark/RzpGlass/presets.js.map +1 -0
- package/build/lib/web/production/components/Spark/RzpGlass/rzpGlassShader.js +5 -0
- package/build/lib/web/production/components/Spark/RzpGlass/rzpGlassShader.js.map +1 -0
- package/build/lib/web/production/components/Spark/RzpGlass/utils.js +77 -0
- package/build/lib/web/production/components/Spark/RzpGlass/utils.js.map +1 -0
- package/build/lib/web/production/components/Spark/RzpGlass/webgl-utils.js +200 -0
- package/build/lib/web/production/components/Spark/RzpGlass/webgl-utils.js.map +1 -0
- package/build/lib/web/production/components/Spark/index.js +3 -0
- package/build/lib/web/production/components/Spark/index.js.map +1 -0
- package/build/lib/web/production/components/index.js +3 -0
- package/build/lib/web/production/components/index.js.map +1 -1
- package/build/types/components/index.d.ts +297 -1
- package/build/types/components/index.native.d.ts +297 -1
- package/package.json +2 -1
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
|
|
2
|
+
import _createClass from '@babel/runtime/helpers/createClass';
|
|
3
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
4
|
+
import { createProgram, setupFullscreenQuad } from '../RzpGlass/webgl-utils.js';
|
|
5
|
+
import { FLUID_GRADIENT_LOOP, fragmentShader } from './shader.js';
|
|
6
|
+
|
|
7
|
+
var vertexShader = /* glsl */"\n precision mediump float;\n attribute vec2 position;\n attribute vec2 uv;\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = vec4(position, 0, 1);\n }\n";
|
|
8
|
+
var FluidGradientMount = /*#__PURE__*/function () {
|
|
9
|
+
function FluidGradientMount(parentElement, size) {
|
|
10
|
+
var _this = this;
|
|
11
|
+
var origin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [0.5, 0.5];
|
|
12
|
+
_classCallCheck(this, FluidGradientMount);
|
|
13
|
+
_defineProperty(this, "gl", null);
|
|
14
|
+
_defineProperty(this, "program", null);
|
|
15
|
+
_defineProperty(this, "buffers", null);
|
|
16
|
+
_defineProperty(this, "rafId", null);
|
|
17
|
+
// Uniform locations
|
|
18
|
+
_defineProperty(this, "uTimeLoc", null);
|
|
19
|
+
_defineProperty(this, "uOriginLoc", null);
|
|
20
|
+
_defineProperty(this, "hasBeenDisposed", false);
|
|
21
|
+
_defineProperty(this, "render", function (t) {
|
|
22
|
+
if (_this.hasBeenDisposed || !_this.gl) return;
|
|
23
|
+
_this.rafId = requestAnimationFrame(_this.render);
|
|
24
|
+
_this.gl.uniform1f(_this.uTimeLoc, t * 0.001 % FLUID_GRADIENT_LOOP);
|
|
25
|
+
_this.gl.drawArrays(_this.gl.TRIANGLES, 0, 6);
|
|
26
|
+
});
|
|
27
|
+
this.parentElement = parentElement;
|
|
28
|
+
var dpr = Math.min(window.devicePixelRatio, 2);
|
|
29
|
+
var pixelSize = Math.round(size * dpr);
|
|
30
|
+
this.canvasElement = document.createElement('canvas');
|
|
31
|
+
this.canvasElement.width = pixelSize;
|
|
32
|
+
this.canvasElement.height = pixelSize;
|
|
33
|
+
this.canvasElement.style.display = 'block';
|
|
34
|
+
this.canvasElement.style.width = "".concat(size, "px");
|
|
35
|
+
this.canvasElement.style.height = "".concat(size, "px");
|
|
36
|
+
parentElement.appendChild(this.canvasElement);
|
|
37
|
+
var gl = this.canvasElement.getContext('webgl', {
|
|
38
|
+
antialias: false,
|
|
39
|
+
powerPreference: 'high-performance',
|
|
40
|
+
alpha: true
|
|
41
|
+
});
|
|
42
|
+
if (!gl) {
|
|
43
|
+
console.error('FluidGradientMount: WebGL not supported');
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
this.gl = gl;
|
|
47
|
+
this.setup(gl, pixelSize, origin);
|
|
48
|
+
this.rafId = requestAnimationFrame(this.render);
|
|
49
|
+
}
|
|
50
|
+
return _createClass(FluidGradientMount, [{
|
|
51
|
+
key: "setup",
|
|
52
|
+
value: function setup(gl, pixelSize, origin) {
|
|
53
|
+
var program = createProgram(gl, vertexShader, fragmentShader);
|
|
54
|
+
if (!program) return;
|
|
55
|
+
this.program = program;
|
|
56
|
+
var buffers = setupFullscreenQuad(gl, program);
|
|
57
|
+
if (!buffers) {
|
|
58
|
+
gl.deleteProgram(program);
|
|
59
|
+
this.program = null;
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
this.buffers = buffers;
|
|
63
|
+
gl.useProgram(program);
|
|
64
|
+
gl.viewport(0, 0, pixelSize, pixelSize);
|
|
65
|
+
gl.disable(gl.DEPTH_TEST);
|
|
66
|
+
this.uTimeLoc = gl.getUniformLocation(program, 'uTime');
|
|
67
|
+
this.uOriginLoc = gl.getUniformLocation(program, 'uOrigin');
|
|
68
|
+
var iResolutionLoc = gl.getUniformLocation(program, 'iResolution');
|
|
69
|
+
gl.uniform2f(iResolutionLoc, pixelSize, pixelSize);
|
|
70
|
+
gl.uniform2f(this.uOriginLoc, origin[0], origin[1]);
|
|
71
|
+
}
|
|
72
|
+
}, {
|
|
73
|
+
key: "setOrigin",
|
|
74
|
+
value: /** Update the gradient origin in UV space without re-initialising WebGL. */
|
|
75
|
+
function setOrigin(origin) {
|
|
76
|
+
if (!this.gl || !this.uOriginLoc) return;
|
|
77
|
+
this.gl.uniform2f(this.uOriginLoc, origin[0], origin[1]);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Tear down the render loop, release all WebGL resources, and remove the canvas. */
|
|
81
|
+
}, {
|
|
82
|
+
key: "dispose",
|
|
83
|
+
value: function dispose() {
|
|
84
|
+
this.hasBeenDisposed = true;
|
|
85
|
+
if (this.rafId !== null) {
|
|
86
|
+
cancelAnimationFrame(this.rafId);
|
|
87
|
+
this.rafId = null;
|
|
88
|
+
}
|
|
89
|
+
if (this.gl) {
|
|
90
|
+
var _this$gl$getExtension;
|
|
91
|
+
if (this.program) {
|
|
92
|
+
this.gl.deleteProgram(this.program);
|
|
93
|
+
this.program = null;
|
|
94
|
+
}
|
|
95
|
+
if (this.buffers) {
|
|
96
|
+
this.gl.deleteBuffer(this.buffers.positionBuffer);
|
|
97
|
+
this.gl.deleteBuffer(this.buffers.uvBuffer);
|
|
98
|
+
this.buffers = null;
|
|
99
|
+
}
|
|
100
|
+
(_this$gl$getExtension = this.gl.getExtension('WEBGL_lose_context')) === null || _this$gl$getExtension === void 0 || _this$gl$getExtension.loseContext();
|
|
101
|
+
}
|
|
102
|
+
if (this.parentElement.contains(this.canvasElement)) {
|
|
103
|
+
this.parentElement.removeChild(this.canvasElement);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}]);
|
|
107
|
+
}();
|
|
108
|
+
|
|
109
|
+
export { FluidGradientMount };
|
|
110
|
+
//# sourceMappingURL=FluidGradientMount.js.map
|
package/build/lib/web/development/components/Spark/RazorSenseGradient/FluidGradientMount.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FluidGradientMount.js","sources":["../../../../../../../src/components/Spark/RazorSenseGradient/FluidGradientMount.ts"],"sourcesContent":["/**\n * FluidGradientMount\n *\n * Vanilla class that owns the full WebGL lifecycle for the fluid gradient effect.\n * Modelled after RzpGlassMount — create it with a parent element, call setOrigin()\n * to update the gradient origin reactively, and dispose() to clean up.\n */\n\nimport type { FullscreenQuadBuffers } from '../RzpGlass/webgl-utils';\nimport { createProgram, setupFullscreenQuad } from '../RzpGlass/webgl-utils';\nimport { fragmentShader, FLUID_GRADIENT_LOOP } from './shader';\n\nconst vertexShader = /* glsl */ `\n precision mediump float;\n attribute vec2 position;\n attribute vec2 uv;\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = vec4(position, 0, 1);\n }\n`;\n\nexport class FluidGradientMount {\n public readonly canvasElement: HTMLCanvasElement;\n\n private readonly parentElement: HTMLElement;\n private readonly gl: WebGLRenderingContext | null = null;\n\n private program: WebGLProgram | null = null;\n private buffers: FullscreenQuadBuffers | null = null;\n private rafId: number | null = null;\n\n // Uniform locations\n private uTimeLoc: WebGLUniformLocation | null = null;\n private uOriginLoc: WebGLUniformLocation | null = null;\n\n private hasBeenDisposed = false;\n\n constructor(parentElement: HTMLElement, size: number, origin: [number, number] = [0.5, 0.5]) {\n this.parentElement = parentElement;\n\n const dpr = Math.min(window.devicePixelRatio, 2);\n const pixelSize = Math.round(size * dpr);\n\n this.canvasElement = document.createElement('canvas');\n this.canvasElement.width = pixelSize;\n this.canvasElement.height = pixelSize;\n this.canvasElement.style.display = 'block';\n this.canvasElement.style.width = `${size}px`;\n this.canvasElement.style.height = `${size}px`;\n parentElement.appendChild(this.canvasElement);\n\n const gl = this.canvasElement.getContext('webgl', {\n antialias: false,\n powerPreference: 'high-performance',\n alpha: true,\n });\n\n if (!gl) {\n console.error('FluidGradientMount: WebGL not supported');\n return;\n }\n\n this.gl = gl;\n this.setup(gl, pixelSize, origin);\n this.rafId = requestAnimationFrame(this.render);\n }\n\n private setup(gl: WebGLRenderingContext, pixelSize: number, origin: [number, number]): void {\n const program = createProgram(gl, vertexShader, fragmentShader);\n if (!program) return;\n this.program = program;\n\n const buffers = setupFullscreenQuad(gl, program);\n if (!buffers) {\n gl.deleteProgram(program);\n this.program = null;\n return;\n }\n this.buffers = buffers;\n\n gl.useProgram(program);\n gl.viewport(0, 0, pixelSize, pixelSize);\n gl.disable(gl.DEPTH_TEST);\n\n this.uTimeLoc = gl.getUniformLocation(program, 'uTime');\n this.uOriginLoc = gl.getUniformLocation(program, 'uOrigin');\n const iResolutionLoc = gl.getUniformLocation(program, 'iResolution');\n\n gl.uniform2f(iResolutionLoc, pixelSize, pixelSize);\n gl.uniform2f(this.uOriginLoc, origin[0], origin[1]);\n }\n\n private render = (t: number): void => {\n if (this.hasBeenDisposed || !this.gl) return;\n this.rafId = requestAnimationFrame(this.render);\n this.gl.uniform1f(this.uTimeLoc, (t * 0.001) % FLUID_GRADIENT_LOOP);\n this.gl.drawArrays(this.gl.TRIANGLES, 0, 6);\n };\n\n /** Update the gradient origin in UV space without re-initialising WebGL. */\n public setOrigin(origin: [number, number]): void {\n if (!this.gl || !this.uOriginLoc) return;\n this.gl.uniform2f(this.uOriginLoc, origin[0], origin[1]);\n }\n\n /** Tear down the render loop, release all WebGL resources, and remove the canvas. */\n public dispose(): void {\n this.hasBeenDisposed = true;\n\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n\n if (this.gl) {\n if (this.program) {\n this.gl.deleteProgram(this.program);\n this.program = null;\n }\n if (this.buffers) {\n this.gl.deleteBuffer(this.buffers.positionBuffer);\n this.gl.deleteBuffer(this.buffers.uvBuffer);\n this.buffers = null;\n }\n this.gl.getExtension('WEBGL_lose_context')?.loseContext();\n }\n\n if (this.parentElement.contains(this.canvasElement)) {\n this.parentElement.removeChild(this.canvasElement);\n }\n }\n}\n"],"names":["vertexShader","FluidGradientMount","parentElement","size","_this","origin","arguments","length","undefined","_classCallCheck","_defineProperty","t","hasBeenDisposed","gl","rafId","requestAnimationFrame","render","uniform1f","uTimeLoc","FLUID_GRADIENT_LOOP","drawArrays","TRIANGLES","dpr","Math","min","window","devicePixelRatio","pixelSize","round","canvasElement","document","createElement","width","height","style","display","concat","appendChild","getContext","antialias","powerPreference","alpha","console","error","setup","_createClass","key","value","program","createProgram","fragmentShader","buffers","setupFullscreenQuad","deleteProgram","useProgram","viewport","disable","DEPTH_TEST","getUniformLocation","uOriginLoc","iResolutionLoc","uniform2f","setOrigin","dispose","cancelAnimationFrame","_this$gl$getExtension","deleteBuffer","positionBuffer","uvBuffer","getExtension","loseContext","contains","removeChild"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
var FLUID_GRADIENT_LOOP = 12.0;
|
|
2
|
+
|
|
3
|
+
// vec3 c0 = vec3(0.55, 0.95, 0.75);
|
|
4
|
+
// vec3 c1 = vec3(0.35, 0.90, 0.65);
|
|
5
|
+
// vec3 c2 = vec3(0.20, 0.88, 0.70);
|
|
6
|
+
// vec3 c3 = vec3(0.08, 0.82, 0.48);
|
|
7
|
+
// vec3 c4 = vec3(0.04, 0.68, 0.30);
|
|
8
|
+
|
|
9
|
+
// vec3 c0 = vec3(0.72, 0.92, 1.00); // light sky blue
|
|
10
|
+
// vec3 c1 = vec3(0.38, 0.72, 0.98); // cornflower blue
|
|
11
|
+
// vec3 c2 = vec3(0.16, 0.50, 0.92); // medium blue
|
|
12
|
+
// vec3 c3 = vec3(0.08, 0.30, 0.78); // deep royal blue
|
|
13
|
+
// vec3 c4 = vec3(0.10, 0.28, 0.72); // deep blue (not black)
|
|
14
|
+
|
|
15
|
+
var fragmentShader = /* glsl */"\nprecision mediump float;\n\nuniform float uTime; // pre-wrapped: mod(raw, LOOP)\nuniform vec2 iResolution;\nuniform vec2 uOrigin; // gradient origin in UV space (0,0)=top-left (1,1)=bottom-right\nvarying vec2 vUv;\n\n// Cubic smoothstep inside each segment \u2014 no kink at stop boundaries\nvec3 gradientColor(float t) {\n t = clamp(t, 0.0, 1.0);\n vec3 c0 = vec3(0.682, 0.957, 0.831); // 174, 244, 212\n vec3 c1 = vec3(0.310, 0.882, 0.620); // 79, 225, 158\n vec3 c2 = vec3(0.306, 0.973, 0.910); // 78, 248, 232\n vec3 c3 = vec3(0.004, 0.753, 0.443); // 1, 192, 113\n vec3 c4 = vec3(0.004, 0.753, 0.443); // 1, 192, 113\n float s;\n if (t < 0.25) { s = smoothstep(0.0,1.0, t/0.25); return mix(c0,c1,s); }\n if (t < 0.55) { s = smoothstep(0.0,1.0,(t-0.25)/0.30); return mix(c1,c2,s); }\n if (t < 0.80) { s = smoothstep(0.0,1.0,(t-0.55)/0.25); return mix(c2,c3,s); }\n s = smoothstep(0.0,1.0,(t-0.80)/0.20); return mix(c3,c4,s);\n}\n\n// Value noise\nfloat hash(vec2 p) { return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453); }\nfloat vnoise(vec2 p) {\n vec2 i = floor(p), f = fract(p);\n vec2 u = f*f*(3.0-2.0*f);\n return mix(mix(hash(i),hash(i+vec2(1,0)),u.x), mix(hash(i+vec2(0,1)),hash(i+vec2(1,1)),u.x),u.y);\n}\n\nvoid main() {\n vec2 uv = vUv - uOrigin;\n float angle = atan(uv.y, uv.x);\n float r = length(uv);\n\n // Warp: traces a circle in noise space \u2192 exactly periodic in LOOP seconds.\n // speed = 2\u03C0 * n / LOOP (n integer \u2192 1 full orbit per loop)\n float ws = 6.2832 / 12.0; // 2\u03C0/LOOP \u2014 1 orbit in LOOP s\n float ws2 = ws * 2.0; // 2 orbits in LOOP s\n float warp =\n vnoise(vec2(cos(angle)*1.4 + sin(uTime*ws )*2.0, sin(angle)*1.4 + cos(uTime*ws )*2.0)) * 0.50 +\n vnoise(vec2(cos(angle)*2.6 + sin(uTime*ws2)*1.2, sin(angle)*2.6 + cos(uTime*ws2)*1.2)) * 0.25;\n float organicR = r + (warp - 0.45) * 0.04;\n\n // Three wave sines \u2014 speeds are 2\u03C0*n/LOOP (n=3,2,1) \u2192 integer cycles in LOOP s.\n // Spatial frequencies are irrational ratios so they never phase-lock into\n // distinct bands; the result is one broad, shifting swell.\n float s1 = 6.2832 * 3.0 / 12.0; // 3 cycles in LOOP s\n float s2 = 6.2832 * 2.0 / 12.0; // 2 cycles\n float s3 = 6.2832 * 1.0 / 12.0; // 1 cycle\n float w =\n sin(organicR * 4.80 - uTime * s1) * 0.55 +\n sin(organicR * 2.55 - uTime * s2) * 0.30 +\n sin(organicR * 1.45 - uTime * s3) * 0.15;\n\n float phase = w * 0.5 + 0.5;\n vec3 color = gradientColor(phase);\n\n float envelope = smoothstep(0.75, 0.42, r);\n float centerFill = smoothstep(0.06, 0.0, r);\n color = mix(color * envelope, gradientColor(0.0), centerFill);\n\n gl_FragColor = vec4(color, 1.0);\n}\n";
|
|
16
|
+
|
|
17
|
+
export { FLUID_GRADIENT_LOOP, fragmentShader };
|
|
18
|
+
//# sourceMappingURL=shader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader.js","sources":["../../../../../../../src/components/Spark/RazorSenseGradient/shader.ts"],"sourcesContent":["export const FLUID_GRADIENT_LOOP = 12.0;\n\n// vec3 c0 = vec3(0.55, 0.95, 0.75);\n// vec3 c1 = vec3(0.35, 0.90, 0.65);\n// vec3 c2 = vec3(0.20, 0.88, 0.70);\n// vec3 c3 = vec3(0.08, 0.82, 0.48);\n// vec3 c4 = vec3(0.04, 0.68, 0.30);\n\n// vec3 c0 = vec3(0.72, 0.92, 1.00); // light sky blue\n// vec3 c1 = vec3(0.38, 0.72, 0.98); // cornflower blue\n// vec3 c2 = vec3(0.16, 0.50, 0.92); // medium blue\n// vec3 c3 = vec3(0.08, 0.30, 0.78); // deep royal blue\n// vec3 c4 = vec3(0.10, 0.28, 0.72); // deep blue (not black)\n\nexport const fragmentShader = /* glsl */ `\nprecision mediump float;\n\nuniform float uTime; // pre-wrapped: mod(raw, LOOP)\nuniform vec2 iResolution;\nuniform vec2 uOrigin; // gradient origin in UV space (0,0)=top-left (1,1)=bottom-right\nvarying vec2 vUv;\n\n// Cubic smoothstep inside each segment — no kink at stop boundaries\nvec3 gradientColor(float t) {\n t = clamp(t, 0.0, 1.0);\n vec3 c0 = vec3(0.682, 0.957, 0.831); // 174, 244, 212\n vec3 c1 = vec3(0.310, 0.882, 0.620); // 79, 225, 158\n vec3 c2 = vec3(0.306, 0.973, 0.910); // 78, 248, 232\n vec3 c3 = vec3(0.004, 0.753, 0.443); // 1, 192, 113\n vec3 c4 = vec3(0.004, 0.753, 0.443); // 1, 192, 113\n float s;\n if (t < 0.25) { s = smoothstep(0.0,1.0, t/0.25); return mix(c0,c1,s); }\n if (t < 0.55) { s = smoothstep(0.0,1.0,(t-0.25)/0.30); return mix(c1,c2,s); }\n if (t < 0.80) { s = smoothstep(0.0,1.0,(t-0.55)/0.25); return mix(c2,c3,s); }\n s = smoothstep(0.0,1.0,(t-0.80)/0.20); return mix(c3,c4,s);\n}\n\n// Value noise\nfloat hash(vec2 p) { return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453); }\nfloat vnoise(vec2 p) {\n vec2 i = floor(p), f = fract(p);\n vec2 u = f*f*(3.0-2.0*f);\n return mix(mix(hash(i),hash(i+vec2(1,0)),u.x), mix(hash(i+vec2(0,1)),hash(i+vec2(1,1)),u.x),u.y);\n}\n\nvoid main() {\n vec2 uv = vUv - uOrigin;\n float angle = atan(uv.y, uv.x);\n float r = length(uv);\n\n // Warp: traces a circle in noise space → exactly periodic in LOOP seconds.\n // speed = 2π * n / LOOP (n integer → 1 full orbit per loop)\n float ws = 6.2832 / 12.0; // 2π/LOOP — 1 orbit in LOOP s\n float ws2 = ws * 2.0; // 2 orbits in LOOP s\n float warp =\n vnoise(vec2(cos(angle)*1.4 + sin(uTime*ws )*2.0, sin(angle)*1.4 + cos(uTime*ws )*2.0)) * 0.50 +\n vnoise(vec2(cos(angle)*2.6 + sin(uTime*ws2)*1.2, sin(angle)*2.6 + cos(uTime*ws2)*1.2)) * 0.25;\n float organicR = r + (warp - 0.45) * 0.04;\n\n // Three wave sines — speeds are 2π*n/LOOP (n=3,2,1) → integer cycles in LOOP s.\n // Spatial frequencies are irrational ratios so they never phase-lock into\n // distinct bands; the result is one broad, shifting swell.\n float s1 = 6.2832 * 3.0 / 12.0; // 3 cycles in LOOP s\n float s2 = 6.2832 * 2.0 / 12.0; // 2 cycles\n float s3 = 6.2832 * 1.0 / 12.0; // 1 cycle\n float w =\n sin(organicR * 4.80 - uTime * s1) * 0.55 +\n sin(organicR * 2.55 - uTime * s2) * 0.30 +\n sin(organicR * 1.45 - uTime * s3) * 0.15;\n\n float phase = w * 0.5 + 0.5;\n vec3 color = gradientColor(phase);\n\n float envelope = smoothstep(0.75, 0.42, r);\n float centerFill = smoothstep(0.06, 0.0, r);\n color = mix(color * envelope, gradientColor(0.0), centerFill);\n\n gl_FragColor = vec4(color, 1.0);\n}\n`;\n"],"names":["FLUID_GRADIENT_LOOP","fragmentShader"],"mappings":"AAAO,IAAMA,mBAAmB,GAAG,KAAI;;AAEvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEO,IAAMC,cAAc,aAiE1B;;;;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { useRef, useEffect } from 'react';
|
|
2
|
+
import { FluidGradientMount } from './FluidGradientMount.js';
|
|
3
|
+
|
|
4
|
+
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
|
5
|
+
/* eslint-disable consistent-return */
|
|
6
|
+
function useFluidGradient(_ref) {
|
|
7
|
+
var size = _ref.size,
|
|
8
|
+
_ref$origin = _ref.origin,
|
|
9
|
+
origin = _ref$origin === void 0 ? [0.5, 0.5] : _ref$origin;
|
|
10
|
+
var containerRef = useRef(null);
|
|
11
|
+
var mountRef = useRef(null);
|
|
12
|
+
|
|
13
|
+
// Reactively update origin without re-initialising WebGL
|
|
14
|
+
useEffect(function () {
|
|
15
|
+
var _mountRef$current;
|
|
16
|
+
(_mountRef$current = mountRef.current) === null || _mountRef$current === void 0 || _mountRef$current.setOrigin(origin);
|
|
17
|
+
}, [origin[0], origin[1]]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
18
|
+
|
|
19
|
+
useEffect(function () {
|
|
20
|
+
var container = containerRef.current;
|
|
21
|
+
if (!container) return;
|
|
22
|
+
var mount = new FluidGradientMount(container, size, origin);
|
|
23
|
+
mountRef.current = mount;
|
|
24
|
+
return function () {
|
|
25
|
+
mount.dispose();
|
|
26
|
+
mountRef.current = null;
|
|
27
|
+
};
|
|
28
|
+
}, [size]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
29
|
+
|
|
30
|
+
return containerRef;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { useFluidGradient };
|
|
34
|
+
//# sourceMappingURL=useFluidGradient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFluidGradient.js","sources":["../../../../../../../src/components/Spark/RazorSenseGradient/useFluidGradient.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable consistent-return */\nimport { useEffect, useRef } from 'react';\nimport { FluidGradientMount } from './FluidGradientMount';\n\ninterface UseFluidGradientOptions {\n size: number;\n /** Gradient origin in UV space. [0.5, 0.5] = center (default). */\n origin?: [number, number];\n}\n\nexport function useFluidGradient({ size, origin = [0.5, 0.5] }: UseFluidGradientOptions) {\n const containerRef = useRef<HTMLDivElement>(null);\n const mountRef = useRef<FluidGradientMount | null>(null);\n\n // Reactively update origin without re-initialising WebGL\n useEffect(() => {\n mountRef.current?.setOrigin(origin);\n }, [origin[0], origin[1]]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const mount = new FluidGradientMount(container, size, origin);\n mountRef.current = mount;\n\n return () => {\n mount.dispose();\n mountRef.current = null;\n };\n }, [size]); // eslint-disable-line react-hooks/exhaustive-deps\n\n return containerRef;\n}\n"],"names":["useFluidGradient","_ref","size","_ref$origin","origin","containerRef","useRef","mountRef","useEffect","_mountRef$current","current","setOrigin","container","mount","FluidGradientMount","dispose"],"mappings":";;;AAAA;AACA;AAUO,SAASA,gBAAgBA,CAAAC,IAAA,EAAyD;AAAA,EAAA,IAAtDC,IAAI,GAAAD,IAAA,CAAJC,IAAI;IAAAC,WAAA,GAAAF,IAAA,CAAEG,MAAM;IAANA,MAAM,GAAAD,WAAA,KAAG,KAAA,CAAA,GAAA,CAAC,GAAG,EAAE,GAAG,CAAC,GAAAA,WAAA,CAAA;AAC1D,EAAA,IAAME,YAAY,GAAGC,MAAM,CAAiB,IAAI,CAAC,CAAA;AACjD,EAAA,IAAMC,QAAQ,GAAGD,MAAM,CAA4B,IAAI,CAAC,CAAA;;AAExD;AACAE,EAAAA,SAAS,CAAC,YAAM;AAAA,IAAA,IAAAC,iBAAA,CAAA;AACd,IAAA,CAAAA,iBAAA,GAAAF,QAAQ,CAACG,OAAO,MAAA,IAAA,IAAAD,iBAAA,KAAA,KAAA,CAAA,IAAhBA,iBAAA,CAAkBE,SAAS,CAACP,MAAM,CAAC,CAAA;AACrC,GAAC,EAAE,CAACA,MAAM,CAAC,CAAC,CAAC,EAAEA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAE3BI,EAAAA,SAAS,CAAC,YAAM;AACd,IAAA,IAAMI,SAAS,GAAGP,YAAY,CAACK,OAAO,CAAA;IACtC,IAAI,CAACE,SAAS,EAAE,OAAA;IAEhB,IAAMC,KAAK,GAAG,IAAIC,kBAAkB,CAACF,SAAS,EAAEV,IAAI,EAAEE,MAAM,CAAC,CAAA;IAC7DG,QAAQ,CAACG,OAAO,GAAGG,KAAK,CAAA;AAExB,IAAA,OAAO,YAAM;MACXA,KAAK,CAACE,OAAO,EAAE,CAAA;MACfR,QAAQ,CAACG,OAAO,GAAG,IAAI,CAAA;KACxB,CAAA;AACH,GAAC,EAAE,CAACR,IAAI,CAAC,CAAC,CAAC;;AAEX,EAAA,OAAOG,YAAY,CAAA;AACrB;;;;"}
|
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
|
+
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
|
|
3
|
+
import _createClass from '@babel/runtime/helpers/createClass';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* PerformanceManager
|
|
7
|
+
*
|
|
8
|
+
* Detects GPU tier and device capability, then produces recommended
|
|
9
|
+
* RzpGlass render settings. Uses a layered heuristic approach:
|
|
10
|
+
*
|
|
11
|
+
* 1. WEBGL_debug_renderer_info – parse GPU renderer/vendor strings
|
|
12
|
+
* 2. failIfMajorPerformanceCaveat – fast browser-level GPU check
|
|
13
|
+
* 3. Device signals – deviceMemory, hardwareConcurrency, mobile UA
|
|
14
|
+
*
|
|
15
|
+
* Tier definitions:
|
|
16
|
+
* high – discrete / flagship mobile GPU, ample memory
|
|
17
|
+
* mid – integrated / mid-range mobile GPU
|
|
18
|
+
* low – software renderer, very old GPU, or constrained device
|
|
19
|
+
* unknown – could not determine (treated as mid for safety)
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Public types
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Known renderer pattern lists
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Patterns that indicate a software / CPU renderer (potato tier).
|
|
32
|
+
* These devices cannot run WebGL at any usable framerate.
|
|
33
|
+
*/
|
|
34
|
+
var POTATO_TIER_PATTERNS = [/swiftshader/, /llvmpipe/, /softpipe/, /microsoft basic render/, /virgl/];
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Patterns that strongly indicate a low-end GPU.
|
|
38
|
+
* Tested against the lowercased GL_RENDERER string.
|
|
39
|
+
*/
|
|
40
|
+
var LOW_TIER_PATTERNS = [
|
|
41
|
+
// Old Intel integrated
|
|
42
|
+
/intel.*hd\s*(graphics)?\s*(2000|3000|4000|400|500|510|520|530)/, /intel.*gma/,
|
|
43
|
+
// Old AMD integrated
|
|
44
|
+
/amd.*radeon.*r[2-5]\s/, /amd.*radeon.*hd\s*(6|7)\d{3}/,
|
|
45
|
+
// Very old NVIDIA
|
|
46
|
+
/nvidia.*geforce\s*(4|5|6|7|8|9)\d{2}[^0]/,
|
|
47
|
+
// Old mobile GPUs
|
|
48
|
+
/mali-(4|t[0-9]|g5[0-7])\d*/, /adreno\s*(3|4)\d{2}/, /powervr.*sgx/, /vivante/, /gc\d{3}[^0-9]/ // Vivante GC series
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Patterns that indicate a high-end GPU.
|
|
53
|
+
*/
|
|
54
|
+
var HIGH_TIER_PATTERNS = [
|
|
55
|
+
// NVIDIA discrete
|
|
56
|
+
/nvidia.*rtx/, /nvidia.*gtx\s*1[0-9]{3}/, /nvidia.*gtx\s*[2-9]\d{3}/, /nvidia.*quadro/, /nvidia.*titan/,
|
|
57
|
+
// AMD discrete
|
|
58
|
+
/amd.*rx\s*(5|6|7)\d{3}/, /amd.*radeon\s*(pro|rx)\s*(vega|5|6|7)/, /radeon\s*r9/,
|
|
59
|
+
// Apple Silicon
|
|
60
|
+
/apple\s*(m[1-9]|a1[5-9]|a[2-9]\d)/,
|
|
61
|
+
// Modern mobile flagship
|
|
62
|
+
/adreno\s*(7[3-9]\d|8\d{2})/, /mali-g(7[1-9]|[89]\d|[1-9]\d{2})/, /gpu\s*family\s*(apple\s*[5-9]|apple\s*[1-9]\d)/];
|
|
63
|
+
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// Helpers
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
|
|
68
|
+
function isMobileDevice() {
|
|
69
|
+
return /android|iphone|ipad|ipod|mobile/i.test(navigator.userAgent);
|
|
70
|
+
}
|
|
71
|
+
function getDeviceMemoryGB() {
|
|
72
|
+
var mem = navigator.deviceMemory;
|
|
73
|
+
return mem != null ? mem : null;
|
|
74
|
+
}
|
|
75
|
+
function getCpuCores() {
|
|
76
|
+
var _navigator$hardwareCo;
|
|
77
|
+
return (_navigator$hardwareCo = navigator.hardwareConcurrency) !== null && _navigator$hardwareCo !== void 0 ? _navigator$hardwareCo : 2;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Probes the WEBGL_debug_renderer_info extension to get raw GPU strings.
|
|
82
|
+
* Returns nulls if the extension is unavailable or blocked (privacy protection).
|
|
83
|
+
*/
|
|
84
|
+
function getGpuStrings(gl) {
|
|
85
|
+
var ext = gl.getExtension('WEBGL_debug_renderer_info');
|
|
86
|
+
if (!ext) return {
|
|
87
|
+
renderer: null,
|
|
88
|
+
vendor: null
|
|
89
|
+
};
|
|
90
|
+
var renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);
|
|
91
|
+
var vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);
|
|
92
|
+
return {
|
|
93
|
+
renderer: renderer,
|
|
94
|
+
vendor: vendor
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Checks whether the browser signals a major performance caveat (software/swiftshader).
|
|
100
|
+
*/
|
|
101
|
+
function checkMajorPerformanceCaveat() {
|
|
102
|
+
var canvas = document.createElement('canvas');
|
|
103
|
+
var gl = canvas.getContext('webgl', {
|
|
104
|
+
failIfMajorPerformanceCaveat: true
|
|
105
|
+
});
|
|
106
|
+
return gl === null;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Classify a GPU into a tier using the renderer / vendor strings.
|
|
111
|
+
* Returns null if classification is inconclusive.
|
|
112
|
+
*/
|
|
113
|
+
function classifyByRendererString(renderer, vendor) {
|
|
114
|
+
if (!renderer && !vendor) return null;
|
|
115
|
+
var combined = "".concat(renderer !== null && renderer !== void 0 ? renderer : '', " ").concat(vendor !== null && vendor !== void 0 ? vendor : '').toLowerCase();
|
|
116
|
+
for (var _i = 0, _POTATO_TIER_PATTERNS = POTATO_TIER_PATTERNS; _i < _POTATO_TIER_PATTERNS.length; _i++) {
|
|
117
|
+
var pattern = _POTATO_TIER_PATTERNS[_i];
|
|
118
|
+
if (pattern.test(combined)) return 'potato';
|
|
119
|
+
}
|
|
120
|
+
for (var _i2 = 0, _LOW_TIER_PATTERNS = LOW_TIER_PATTERNS; _i2 < _LOW_TIER_PATTERNS.length; _i2++) {
|
|
121
|
+
var _pattern = _LOW_TIER_PATTERNS[_i2];
|
|
122
|
+
if (_pattern.test(combined)) return 'low';
|
|
123
|
+
}
|
|
124
|
+
for (var _i3 = 0, _HIGH_TIER_PATTERNS = HIGH_TIER_PATTERNS; _i3 < _HIGH_TIER_PATTERNS.length; _i3++) {
|
|
125
|
+
var _pattern2 = _HIGH_TIER_PATTERNS[_i3];
|
|
126
|
+
if (_pattern2.test(combined)) return 'high';
|
|
127
|
+
}
|
|
128
|
+
return null; // inconclusive – fall through to device signals
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Derive a tier purely from device-level signals (no GPU string needed).
|
|
133
|
+
*/
|
|
134
|
+
function classifyByDeviceSignals(memoryGB, cores, mobile) {
|
|
135
|
+
// Very constrained device
|
|
136
|
+
if (memoryGB !== null && memoryGB <= 2) return 'low';
|
|
137
|
+
if (cores <= 2) return 'low';
|
|
138
|
+
|
|
139
|
+
// Well-resourced device
|
|
140
|
+
if (memoryGB !== null && memoryGB >= 8 && cores >= 8 && !mobile) return 'high';
|
|
141
|
+
if (memoryGB !== null && memoryGB >= 6 && cores >= 6) return 'high';
|
|
142
|
+
return 'mid';
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// ---------------------------------------------------------------------------
|
|
146
|
+
// Per-tier render settings
|
|
147
|
+
// ---------------------------------------------------------------------------
|
|
148
|
+
|
|
149
|
+
var RENDER_SETTINGS = {
|
|
150
|
+
high: {
|
|
151
|
+
// ~4K equivalent
|
|
152
|
+
maxPixelCount: 1920 * 1080 * 4,
|
|
153
|
+
minPixelRatio: 2
|
|
154
|
+
},
|
|
155
|
+
mid: {
|
|
156
|
+
// ~1080p equivalent
|
|
157
|
+
maxPixelCount: 1920 * 1080 * 2,
|
|
158
|
+
minPixelRatio: 1
|
|
159
|
+
},
|
|
160
|
+
low: {
|
|
161
|
+
// ~720p max
|
|
162
|
+
maxPixelCount: 1280 * 720,
|
|
163
|
+
minPixelRatio: 1
|
|
164
|
+
},
|
|
165
|
+
potato: {
|
|
166
|
+
// Software renderer – show static fallback immediately
|
|
167
|
+
maxPixelCount: 0,
|
|
168
|
+
minPixelRatio: 1
|
|
169
|
+
},
|
|
170
|
+
unknown: {
|
|
171
|
+
// Treat conservatively – same as mid
|
|
172
|
+
maxPixelCount: 1920 * 1080 * 2,
|
|
173
|
+
minPixelRatio: 1
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Maps PerformanceLevel → RenderSettings so callers can apply the right
|
|
179
|
+
* pixel budget when the level changes. Reuses RENDER_SETTINGS values so the
|
|
180
|
+
* two tables stay in sync.
|
|
181
|
+
*
|
|
182
|
+
* 3 (full) → high tier settings
|
|
183
|
+
* 2 (stable) → mid tier settings
|
|
184
|
+
* 1 (degraded) → low tier settings
|
|
185
|
+
* 0 (fallback) → low tier settings (canvas will be hidden anyway)
|
|
186
|
+
*/
|
|
187
|
+
var LEVEL_RENDER_SETTINGS = {
|
|
188
|
+
3: RENDER_SETTINGS.high,
|
|
189
|
+
2: RENDER_SETTINGS.mid,
|
|
190
|
+
1: RENDER_SETTINGS.low,
|
|
191
|
+
0: RENDER_SETTINGS.low
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
// ---------------------------------------------------------------------------
|
|
195
|
+
// Public API
|
|
196
|
+
// ---------------------------------------------------------------------------
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Builds a PerformanceProfile by inspecting the provided WebGL context and
|
|
200
|
+
* available browser / navigator APIs. No async work is performed.
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```ts
|
|
204
|
+
* const profile = PerformanceManager.detect(gl);
|
|
205
|
+
* console.log(profile.tier); // 'high' | 'mid' | 'low' | 'unknown'
|
|
206
|
+
*
|
|
207
|
+
* const mount = new RzpGlassMount(
|
|
208
|
+
* el,
|
|
209
|
+
* assets,
|
|
210
|
+
* {},
|
|
211
|
+
* 0,
|
|
212
|
+
* profile.renderSettings.minPixelRatio,
|
|
213
|
+
* profile.renderSettings.maxPixelCount,
|
|
214
|
+
* );
|
|
215
|
+
* ```
|
|
216
|
+
*/
|
|
217
|
+
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
|
|
218
|
+
var PerformanceManager = /*#__PURE__*/function () {
|
|
219
|
+
function PerformanceManager() {
|
|
220
|
+
_classCallCheck(this, PerformanceManager);
|
|
221
|
+
}
|
|
222
|
+
return _createClass(PerformanceManager, null, [{
|
|
223
|
+
key: "detect",
|
|
224
|
+
value:
|
|
225
|
+
/**
|
|
226
|
+
* Detect GPU tier and return a full PerformanceProfile.
|
|
227
|
+
*
|
|
228
|
+
* @param gl - An existing WebGLRenderingContext (e.g. from RzpGlassMount).
|
|
229
|
+
* If not provided, a temporary offscreen context is created.
|
|
230
|
+
*/
|
|
231
|
+
function detect(gl) {
|
|
232
|
+
var ownedCanvas = false;
|
|
233
|
+
var ctx = gl !== null && gl !== void 0 ? gl : null;
|
|
234
|
+
if (!ctx) {
|
|
235
|
+
var _canvas$getContext;
|
|
236
|
+
var canvas = document.createElement('canvas');
|
|
237
|
+
canvas.width = 1;
|
|
238
|
+
canvas.height = 1;
|
|
239
|
+
ctx = (_canvas$getContext = canvas.getContext('webgl')) !== null && _canvas$getContext !== void 0 ? _canvas$getContext : null;
|
|
240
|
+
ownedCanvas = true;
|
|
241
|
+
}
|
|
242
|
+
var mobile = isMobileDevice();
|
|
243
|
+
var memoryGB = getDeviceMemoryGB();
|
|
244
|
+
var cores = getCpuCores();
|
|
245
|
+
var hasMajorPerformanceCaveat = checkMajorPerformanceCaveat();
|
|
246
|
+
var gpuRenderer = null;
|
|
247
|
+
var gpuVendor = null;
|
|
248
|
+
if (ctx) {
|
|
249
|
+
var _getGpuStrings = getGpuStrings(ctx),
|
|
250
|
+
renderer = _getGpuStrings.renderer,
|
|
251
|
+
vendor = _getGpuStrings.vendor;
|
|
252
|
+
gpuRenderer = renderer;
|
|
253
|
+
gpuVendor = vendor;
|
|
254
|
+
if (ownedCanvas) {
|
|
255
|
+
// Let the browser GC the temp context – no explicit destroy needed
|
|
256
|
+
ctx = null;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// Immediate potato-tier signal from caveat check (software renderer)
|
|
261
|
+
var tier;
|
|
262
|
+
if (hasMajorPerformanceCaveat) {
|
|
263
|
+
tier = 'potato';
|
|
264
|
+
} else {
|
|
265
|
+
var _classifyByRendererSt;
|
|
266
|
+
tier = (_classifyByRendererSt = classifyByRendererString(gpuRenderer, gpuVendor)) !== null && _classifyByRendererSt !== void 0 ? _classifyByRendererSt : classifyByDeviceSignals(memoryGB, cores, mobile);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// Downgrade high → mid on mobile (thermal / power constraints)
|
|
270
|
+
if (tier === 'high' && mobile) {
|
|
271
|
+
tier = 'mid';
|
|
272
|
+
}
|
|
273
|
+
return {
|
|
274
|
+
tier: tier,
|
|
275
|
+
gpuRenderer: gpuRenderer,
|
|
276
|
+
gpuVendor: gpuVendor,
|
|
277
|
+
deviceMemory: memoryGB,
|
|
278
|
+
hardwareConcurrency: cores,
|
|
279
|
+
isMobile: mobile,
|
|
280
|
+
hasMajorPerformanceCaveat: hasMajorPerformanceCaveat,
|
|
281
|
+
renderSettings: RENDER_SETTINGS[tier]
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Convenience: returns only the recommended RenderSettings without the
|
|
287
|
+
* full diagnostic data.
|
|
288
|
+
*/
|
|
289
|
+
}, {
|
|
290
|
+
key: "getRenderSettings",
|
|
291
|
+
value: function getRenderSettings(gl) {
|
|
292
|
+
return PerformanceManager.detect(gl).renderSettings;
|
|
293
|
+
}
|
|
294
|
+
}]);
|
|
295
|
+
}(); // ---------------------------------------------------------------------------
|
|
296
|
+
// WebGLPerformanceController
|
|
297
|
+
// ---------------------------------------------------------------------------
|
|
298
|
+
/** Performance level: 3 = full quality, 0 = static fallback */
|
|
299
|
+
var TIER_INITIAL_STATE = {
|
|
300
|
+
high: 3,
|
|
301
|
+
mid: 2,
|
|
302
|
+
low: 1,
|
|
303
|
+
potato: 0,
|
|
304
|
+
unknown: 2
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Monitors real-time FPS and fires onLevelChange when quality should be adjusted.
|
|
309
|
+
* Initial level is seeded from the GPU tier detected by PerformanceManager.
|
|
310
|
+
*
|
|
311
|
+
* Level semantics:
|
|
312
|
+
* 3 – full quality
|
|
313
|
+
* 2 – stable
|
|
314
|
+
* 1 – degraded
|
|
315
|
+
* 0 – static fallback (onLevelChange(0) fired)
|
|
316
|
+
*
|
|
317
|
+
* @example
|
|
318
|
+
* ```ts
|
|
319
|
+
* const controller = new WebGLPerformanceController({
|
|
320
|
+
* canvas,
|
|
321
|
+
* gl,
|
|
322
|
+
* onLevelChange: (level) => {
|
|
323
|
+
* if (level === 0) showStaticFallback();
|
|
324
|
+
* },
|
|
325
|
+
* });
|
|
326
|
+
*
|
|
327
|
+
* // When done:
|
|
328
|
+
* controller.dispose();
|
|
329
|
+
* ```
|
|
330
|
+
*/
|
|
331
|
+
var WebGLPerformanceController = /*#__PURE__*/function () {
|
|
332
|
+
function WebGLPerformanceController(_ref) {
|
|
333
|
+
var _this = this;
|
|
334
|
+
var gl = _ref.gl,
|
|
335
|
+
_ref$onLevelChange = _ref.onLevelChange,
|
|
336
|
+
onLevelChange = _ref$onLevelChange === void 0 ? null : _ref$onLevelChange;
|
|
337
|
+
_classCallCheck(this, WebGLPerformanceController);
|
|
338
|
+
_defineProperty(this, "cooldown", 3000);
|
|
339
|
+
_defineProperty(this, "lastChange", 0);
|
|
340
|
+
_defineProperty(this, "frameCount", 0);
|
|
341
|
+
_defineProperty(this, "lastTime", performance.now());
|
|
342
|
+
_defineProperty(this, "fps", 60);
|
|
343
|
+
_defineProperty(this, "rafId", null);
|
|
344
|
+
_defineProperty(this, "disposed", false);
|
|
345
|
+
_defineProperty(this, "handleVisibilityChange", function () {
|
|
346
|
+
if (document.hidden) {
|
|
347
|
+
// Pause the monitoring loop — RAF is throttled while hidden and would
|
|
348
|
+
// produce artificially low FPS readings that trigger false fallbacks.
|
|
349
|
+
if (_this.rafId !== null) {
|
|
350
|
+
cancelAnimationFrame(_this.rafId);
|
|
351
|
+
_this.rafId = null;
|
|
352
|
+
}
|
|
353
|
+
} else {
|
|
354
|
+
// Reset FPS state so the stale hidden-period sample is discarded,
|
|
355
|
+
// then resume monitoring from a clean baseline.
|
|
356
|
+
_this.frameCount = 0;
|
|
357
|
+
_this.lastTime = performance.now();
|
|
358
|
+
_this.fps = 60;
|
|
359
|
+
_this.startMonitoring();
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
this.onLevelChange = onLevelChange;
|
|
363
|
+
var _PerformanceManager$d = PerformanceManager.detect(gl),
|
|
364
|
+
tier = _PerformanceManager$d.tier;
|
|
365
|
+
this.level = TIER_INITIAL_STATE[tier];
|
|
366
|
+
if (this.level === 0) {
|
|
367
|
+
this.forceStaticFallback();
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
onLevelChange === null || onLevelChange === void 0 || onLevelChange(this.level);
|
|
371
|
+
this.startMonitoring();
|
|
372
|
+
document.addEventListener('visibilitychange', this.handleVisibilityChange);
|
|
373
|
+
}
|
|
374
|
+
return _createClass(WebGLPerformanceController, [{
|
|
375
|
+
key: "setLevel",
|
|
376
|
+
value: function setLevel(level) {
|
|
377
|
+
var _this$onLevelChange;
|
|
378
|
+
if (this.level === level) return;
|
|
379
|
+
var now = performance.now();
|
|
380
|
+
if (now - this.lastChange < this.cooldown) return;
|
|
381
|
+
this.level = level;
|
|
382
|
+
this.lastChange = now;
|
|
383
|
+
if (level === 0) {
|
|
384
|
+
this.forceStaticFallback();
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
(_this$onLevelChange = this.onLevelChange) === null || _this$onLevelChange === void 0 || _this$onLevelChange.call(this, level);
|
|
388
|
+
}
|
|
389
|
+
}, {
|
|
390
|
+
key: "forceStaticFallback",
|
|
391
|
+
value: function forceStaticFallback() {
|
|
392
|
+
var _this$onLevelChange2;
|
|
393
|
+
this.level = 0;
|
|
394
|
+
(_this$onLevelChange2 = this.onLevelChange) === null || _this$onLevelChange2 === void 0 || _this$onLevelChange2.call(this, 0);
|
|
395
|
+
}
|
|
396
|
+
}, {
|
|
397
|
+
key: "evaluatePerformance",
|
|
398
|
+
value: function evaluatePerformance() {
|
|
399
|
+
if (this.fps < 20) {
|
|
400
|
+
this.setLevel(0);
|
|
401
|
+
} else if (this.fps < 40) {
|
|
402
|
+
this.setLevel(1);
|
|
403
|
+
} else if (this.fps < 55) {
|
|
404
|
+
this.setLevel(2);
|
|
405
|
+
} else {
|
|
406
|
+
this.setLevel(3);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}, {
|
|
410
|
+
key: "startMonitoring",
|
|
411
|
+
value: function startMonitoring() {
|
|
412
|
+
var _this2 = this;
|
|
413
|
+
var _loop = function loop() {
|
|
414
|
+
if (_this2.disposed) return;
|
|
415
|
+
var now = performance.now();
|
|
416
|
+
_this2.frameCount++;
|
|
417
|
+
if (now - _this2.lastTime >= 1000) {
|
|
418
|
+
_this2.fps = _this2.frameCount;
|
|
419
|
+
_this2.frameCount = 0;
|
|
420
|
+
_this2.lastTime = now;
|
|
421
|
+
_this2.evaluatePerformance();
|
|
422
|
+
}
|
|
423
|
+
_this2.rafId = requestAnimationFrame(_loop);
|
|
424
|
+
};
|
|
425
|
+
this.rafId = requestAnimationFrame(_loop);
|
|
426
|
+
}
|
|
427
|
+
}, {
|
|
428
|
+
key: "isPotato",
|
|
429
|
+
value: function isPotato() {
|
|
430
|
+
return this.level === 0;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
/** Current performance level (3 = full, 0 = fallback) */
|
|
434
|
+
}, {
|
|
435
|
+
key: "getLevel",
|
|
436
|
+
value: function getLevel() {
|
|
437
|
+
return this.level;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
/** Stop the monitoring loop and release resources */
|
|
441
|
+
}, {
|
|
442
|
+
key: "dispose",
|
|
443
|
+
value: function dispose() {
|
|
444
|
+
this.disposed = true;
|
|
445
|
+
if (this.rafId !== null) {
|
|
446
|
+
cancelAnimationFrame(this.rafId);
|
|
447
|
+
this.rafId = null;
|
|
448
|
+
}
|
|
449
|
+
document.removeEventListener('visibilitychange', this.handleVisibilityChange);
|
|
450
|
+
}
|
|
451
|
+
}]);
|
|
452
|
+
}();
|
|
453
|
+
|
|
454
|
+
export { LEVEL_RENDER_SETTINGS, RENDER_SETTINGS, WebGLPerformanceController };
|
|
455
|
+
//# sourceMappingURL=PerformanceManager.js.map
|