@solidtv/renderer 1.5.6 → 1.6.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/dist/src/core/CoreNode.js +2 -2
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/Stage.js +9 -1
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +17 -1
- package/dist/src/core/lib/WebGlContextWrapper.js +21 -0
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- package/dist/src/core/lib/colorParser.d.ts +4 -1
- package/dist/src/core/lib/colorParser.js +16 -6
- package/dist/src/core/lib/colorParser.js.map +1 -1
- package/dist/src/core/platforms/web/WebPlatform.js +60 -50
- package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +4 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +28 -13
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js +1 -0
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
- package/dist/src/core/renderers/webgl/SdfRenderOp.js +2 -2
- package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +43 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +109 -10
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +21 -13
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +8 -3
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +12 -11
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
- package/dist/src/core/shaders/canvas/Rounded.js +3 -3
- package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js +3 -3
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/utils/render.js +3 -3
- package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
- package/dist/src/core/shaders/webgl/Border.js +12 -11
- package/dist/src/core/shaders/webgl/Border.js.map +1 -1
- package/dist/src/core/shaders/webgl/HolePunch.js +12 -5
- package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/webgl/LinearGradient.js +3 -19
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RadialGradient.js +3 -20
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RadialProgress.js +15 -23
- package/dist/src/core/shaders/webgl/RadialProgress.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +35 -32
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +58 -45
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js +15 -13
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/Shadow.js +4 -5
- package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
- package/dist/src/core/text-rendering/SdfTextRenderer.js +23 -10
- package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/TextLayoutEngine.js +14 -2
- package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -1
- package/dist/src/utils.js +1 -1
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/core/CoreNode.ts +2 -2
- package/src/core/Stage.renderListUpdate.test.ts +73 -0
- package/src/core/Stage.ts +11 -1
- package/src/core/lib/WebGlContextWrapper.test.ts +23 -1
- package/src/core/lib/WebGlContextWrapper.ts +23 -1
- package/src/core/lib/colorParser.test.ts +46 -0
- package/src/core/lib/colorParser.ts +17 -6
- package/src/core/platforms/web/WebPlatform.ts +63 -52
- package/src/core/renderers/canvas/CanvasRenderer.test.ts +230 -0
- package/src/core/renderers/canvas/CanvasRenderer.ts +29 -15
- package/src/core/renderers/canvas/CanvasShaderNode.test.ts +73 -0
- package/src/core/renderers/canvas/CanvasShaderNode.ts +1 -0
- package/src/core/renderers/webgl/SdfRenderOp.ts +2 -2
- package/src/core/renderers/webgl/WebGlRenderer.reuseRenderOp.test.ts +122 -0
- package/src/core/renderers/webgl/WebGlRenderer.sdfBuffer.test.ts +302 -0
- package/src/core/renderers/webgl/WebGlRenderer.ts +151 -11
- package/src/core/renderers/webgl/WebGlShaderProgram.reuseRenderOp.test.ts +150 -0
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +27 -15
- package/src/core/renderers/webgl/WebGlShaderProgram.uniformDedup.test.ts +4 -2
- package/src/core/renderers/webgl/internal/ShaderUtils.test.ts +124 -0
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +14 -13
- package/src/core/shaders/canvas/Rounded.ts +3 -3
- package/src/core/shaders/canvas/RoundedWithShadow.ts +3 -3
- package/src/core/shaders/canvas/utils/render.ts +3 -3
- package/src/core/shaders/webgl/Border.ts +12 -11
- package/src/core/shaders/webgl/HolePunch.ts +12 -5
- package/src/core/shaders/webgl/LinearGradient.ts +3 -19
- package/src/core/shaders/webgl/RadialGradient.ts +3 -20
- package/src/core/shaders/webgl/RadialProgress.ts +15 -23
- package/src/core/shaders/webgl/RoundedWithBorder.ts +35 -32
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +58 -45
- package/src/core/shaders/webgl/RoundedWithShadow.ts +15 -13
- package/src/core/shaders/webgl/Shadow.ts +4 -5
- package/src/core/text-rendering/SdfTextRenderer.test.ts +177 -0
- package/src/core/text-rendering/SdfTextRenderer.ts +38 -10
- package/src/core/text-rendering/TextLayoutEngine.ts +15 -2
- package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +99 -0
- package/src/utils.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../../../../src/core/shaders/canvas/utils/render.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS,CACvB,GAAsC,EACtC,CAAS,EACT,CAAS,EACT,KAAa,EACb,MAAc,EACd,MAAY;IAEZ,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAChC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IACD,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC;IAC9C,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACtB,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3E,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC;IACvC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1E,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;IAC/B,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACxE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACtB,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,GAA6B,EAC7B,CAAS,EACT,CAAS,EACT,KAAa,EACb,MAAc,EACd,MAAY,EACZ,SAAiB,EACjB,MAAc,EACd,MAAc,EACd,MAAc,EACd,MAAc,EACd,iBAAuB,EACvB,MAAc,EACd,MAAc,EACd,MAAc,EACd,MAAc,EACd,iBAAuB,EACvB,WAAmB,EACnB,aAAyB;IAEzB,MAAM,IAAI,CAAC,CAAC;IACZ,MAAM,IAAI,CAAC,CAAC;IACZ,MAAM,IAAI,KAAK,CAAC;IAChB,MAAM,IAAI,MAAM,CAAC;IAEjB,MAAM,IAAI,CAAC,CAAC;IACZ,MAAM,IAAI,CAAC,CAAC;IACZ,MAAM,IAAI,KAAK,CAAC;IAChB,MAAM,IAAI,MAAM,CAAC;IAEjB,yBAAyB;IACzB,GAAG,CAAC,IAAI,EAAE,CAAC;IACX,
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../../../../src/core/shaders/canvas/utils/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -129,24 +129,25 @@ export const Border = {
|
|
|
129
129
|
float outerDist = box(boxUv + v_outerBorderUv, v_outerSize - edgeWidth);
|
|
130
130
|
float innerDist = box(boxUv + v_innerBorderUv, v_innerSize - edgeWidth);
|
|
131
131
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
float innerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, innerDist);
|
|
135
|
-
resultColor = mix(resultColor, u_borderColor, outerAlpha * u_borderColor.a);
|
|
136
|
-
resultColor = mix(resultColor, color, innerAlpha);
|
|
137
|
-
gl_FragColor = resultColor * u_alpha;
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
132
|
+
float outerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, outerDist);
|
|
133
|
+
float innerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, innerDist);
|
|
140
134
|
|
|
141
135
|
float nodeDist = box(boxUv, v_halfDimensions - edgeWidth);
|
|
142
136
|
float nodeAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, nodeDist);
|
|
143
137
|
|
|
144
138
|
float borderDist = max(-innerDist, outerDist);
|
|
145
139
|
float borderAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, borderDist);
|
|
146
|
-
resultColor = mix(resultColor, color, nodeAlpha);
|
|
147
|
-
resultColor = mix(resultColor, u_borderColor, borderAlpha * u_borderColor.a);
|
|
148
140
|
|
|
149
|
-
|
|
141
|
+
// Branchless gap select -- Mali 400 serializes uniform branches, so both
|
|
142
|
+
// composites are computed and mix()-selected on hasGap instead.
|
|
143
|
+
vec4 resNoGap = mix(resultColor, u_borderColor, outerAlpha * u_borderColor.a);
|
|
144
|
+
resNoGap = mix(resNoGap, color, innerAlpha);
|
|
145
|
+
|
|
146
|
+
vec4 resGap = mix(resultColor, color, nodeAlpha);
|
|
147
|
+
resGap = mix(resGap, u_borderColor, borderAlpha * u_borderColor.a);
|
|
148
|
+
|
|
149
|
+
float hasGap = step(0.0001, abs(u_borderGap));
|
|
150
|
+
gl_FragColor = mix(resNoGap, resGap, hasGap) * u_alpha;
|
|
150
151
|
}
|
|
151
152
|
`,
|
|
152
153
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Border.js","sourceRoot":"","sources":["../../../../../src/core/shaders/webgl/Border.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAEf,MAAM,gCAAgC,CAAC;AAIxC,MAAM,CAAC,MAAM,MAAM,GAAiC;IAClD,KAAK,EAAE,cAAc,CAAC,KAAK;IAC3B,MAAM,CAAC,IAAI;QACT,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,KAAM,CAAC,CAAS,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,KAAM,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,KAAM,CAAC,GAAa,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,KAAM,CAAC,KAAe,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EP;IACD,QAAQ,EAAE
|
|
1
|
+
{"version":3,"file":"Border.js","sourceRoot":"","sources":["../../../../../src/core/shaders/webgl/Border.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAEf,MAAM,gCAAgC,CAAC;AAIxC,MAAM,CAAC,MAAM,MAAM,GAAiC;IAClD,KAAK,EAAE,cAAc,CAAC,KAAK;IAC3B,MAAM,CAAC,IAAI;QACT,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,KAAM,CAAC,CAAS,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,KAAM,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,KAAM,CAAC,GAAa,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,KAAM,CAAC,KAAe,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EP;IACD,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DT;CACF,CAAC"}
|
|
@@ -36,11 +36,18 @@ export const HolePunch = {
|
|
|
36
36
|
void main() {
|
|
37
37
|
vec4 color = texture2D(u_texture, v_textureCoords) * v_color;
|
|
38
38
|
vec2 p = (v_textureCoords.xy * u_dimensions.xy - u_pos) - u_size;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
float
|
|
39
|
+
|
|
40
|
+
// Branchless radius selection based on quadrant
|
|
41
|
+
// x: TL, y: TR, z: BR, w: BL
|
|
42
|
+
vec2 stepVal = step(vec2(0.0), p);
|
|
43
|
+
float r = mix(
|
|
44
|
+
mix(u_radius.x, u_radius.y, stepVal.x),
|
|
45
|
+
mix(u_radius.w, u_radius.z, stepVal.x),
|
|
46
|
+
stepVal.y
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
p = abs(p) - u_size + r;
|
|
50
|
+
float dist = min(max(p.x, p.y), 0.0) + length(max(p, 0.0)) - r + 2.0;
|
|
44
51
|
float roundedAlpha = 1.0 - smoothstep(0.0, u_pixelRatio, dist);
|
|
45
52
|
gl_FragColor = mix(color, vec4(0.0), min(color.a, roundedAlpha));
|
|
46
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HolePunch.js","sourceRoot":"","sources":["../../../../../src/core/shaders/webgl/HolePunch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EACL,iBAAiB,GAElB,MAAM,mCAAmC,CAAC;AAI3C,MAAM,CAAC,MAAM,SAAS,GAAoC;IACxD,KAAK,EAAE,iBAAiB,CAAC,KAAK;IAC9B,MAAM;QACJ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAM,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1C,0DAA0D;QAC1D,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAEvD,IAAI,CAAC,UAAU,CACb,UAAU,EACV,uBAAuB,CAAC,KAAK,CAAC,MAAc,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAChE,CAAC;IACJ,CAAC;IACD,eAAe,CAAC,KAAqB;QACnC,OAAO,eAAe,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;IACtD,CAAC;IACD,QAAQ,EAAE
|
|
1
|
+
{"version":3,"file":"HolePunch.js","sourceRoot":"","sources":["../../../../../src/core/shaders/webgl/HolePunch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EACL,iBAAiB,GAElB,MAAM,mCAAmC,CAAC;AAI3C,MAAM,CAAC,MAAM,SAAS,GAAoC;IACxD,KAAK,EAAE,iBAAiB,CAAC,KAAK;IAC9B,MAAM;QACJ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAM,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1C,0DAA0D;QAC1D,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAEvD,IAAI,CAAC,UAAU,CACb,UAAU,EACV,uBAAuB,CAAC,KAAK,CAAC,MAAc,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAChE,CAAC;IACJ,CAAC;IACD,eAAe,CAAC,KAAqB;QACnC,OAAO,eAAe,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;IACtD,CAAC;IACD,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCT;CACF,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getNormalizedRgbaComponents } from '../../lib/utils.js';
|
|
2
2
|
import { LinearGradientTemplate, } from '../templates/LinearGradientTemplate.js';
|
|
3
|
+
import { genGradientColors } from '../../renderers/webgl/internal/ShaderUtils.js';
|
|
3
4
|
export const LinearGradient = {
|
|
4
5
|
props: LinearGradientTemplate.props,
|
|
5
6
|
update(node) {
|
|
@@ -45,7 +46,6 @@ export const LinearGradient = {
|
|
|
45
46
|
# endif
|
|
46
47
|
|
|
47
48
|
#define MAX_STOPS ${props.colors.length}
|
|
48
|
-
#define LAST_STOP ${props.colors.length - 1}
|
|
49
49
|
|
|
50
50
|
uniform float u_alpha;
|
|
51
51
|
|
|
@@ -61,24 +61,8 @@ export const LinearGradient = {
|
|
|
61
61
|
|
|
62
62
|
vec4 getGradientColor(float dist) {
|
|
63
63
|
dist = clamp(dist, 0.0, 1.0);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
return u_colors[0];
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
if(dist >= u_stops[LAST_STOP]) {
|
|
70
|
-
return u_colors[LAST_STOP];
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
for(int i = 0; i < LAST_STOP; i++) {
|
|
74
|
-
float left = u_stops[i];
|
|
75
|
-
float right = u_stops[i + 1];
|
|
76
|
-
if(dist >= left && dist <= right) {
|
|
77
|
-
float lDist = smoothstep(left, right, dist);
|
|
78
|
-
return mix(u_colors[i], u_colors[i + 1], lDist);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return u_colors[LAST_STOP];
|
|
64
|
+
${genGradientColors(props.colors.length)}
|
|
65
|
+
return colorOut;
|
|
82
66
|
}
|
|
83
67
|
|
|
84
68
|
void main() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinearGradient.js","sourceRoot":"","sources":["../../../../../src/core/shaders/webgl/LinearGradient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EACL,sBAAsB,GAEvB,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"LinearGradient.js","sourceRoot":"","sources":["../../../../../src/core/shaders/webgl/LinearGradient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EACL,sBAAsB,GAEvB,MAAM,wCAAwC,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAElF,MAAM,CAAC,MAAM,cAAc,GAAyC;IAClE,KAAK,EAAE,sBAAsB,CAAC,KAAK;IACnC,MAAM,CAAC,IAAc;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAM,CAAC;QAE1B,wEAAwE;QACxE,sEAAsE;QACtE,yEAAyE;QACzE,qEAAqE;QACrE,gDAAgD;QAChD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,2DAA2D;QAC3D,MAAM,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;QACzB,MAAM,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;QACzB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,kEAAkE;QAClE,MAAM,EAAE,GAAG,QAAQ,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QACxC,MAAM,EAAE,GAAG,QAAQ,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAExC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;QAEzD,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,eAAe,CAAC,KAA0B;QACxC,OAAO,UAAU,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACzC,CAAC;IACD,QAAQ,CAAC,QAAuB,EAAE,KAA0B;QAC1D,OAAO;;;;;;;wBAOa,KAAK,CAAC,MAAM,CAAC,MAAM;;;;;;;;;;;;;;;;QAgBnC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;;;;;;;;;;;GAW3C,CAAC;IACF,CAAC;CACF,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getNormalizedRgbaComponents } from '../../lib/utils.js';
|
|
2
2
|
import { RadialGradientTemplate, } from '../templates/RadialGradientTemplate.js';
|
|
3
|
+
import { genGradientColors } from '../../renderers/webgl/internal/ShaderUtils.js';
|
|
3
4
|
export const RadialGradient = {
|
|
4
5
|
props: RadialGradientTemplate.props,
|
|
5
6
|
update(node) {
|
|
@@ -26,7 +27,6 @@ export const RadialGradient = {
|
|
|
26
27
|
# endif
|
|
27
28
|
|
|
28
29
|
#define MAX_STOPS ${props.colors.length}
|
|
29
|
-
#define LAST_STOP ${props.colors.length - 1}
|
|
30
30
|
|
|
31
31
|
uniform float u_alpha;
|
|
32
32
|
uniform vec2 u_dimensions;
|
|
@@ -45,25 +45,8 @@ export const RadialGradient = {
|
|
|
45
45
|
|
|
46
46
|
vec4 getGradientColor(float dist) {
|
|
47
47
|
dist = clamp(dist, 0.0, 1.0);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return u_colors[0];
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if(dist >= u_stops[LAST_STOP]) {
|
|
54
|
-
return u_colors[LAST_STOP];
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
for(int i = 0; i < LAST_STOP; i++) {
|
|
58
|
-
float left = u_stops[i];
|
|
59
|
-
float right = u_stops[i + 1];
|
|
60
|
-
if(dist >= left && dist <= right) {
|
|
61
|
-
float lDist = smoothstep(left, right, dist);
|
|
62
|
-
return mix(u_colors[i], u_colors[i + 1], lDist);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return u_colors[LAST_STOP];
|
|
48
|
+
${genGradientColors(props.colors.length)}
|
|
49
|
+
return colorOut;
|
|
67
50
|
}
|
|
68
51
|
|
|
69
52
|
void main() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadialGradient.js","sourceRoot":"","sources":["../../../../../src/core/shaders/webgl/RadialGradient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EACL,sBAAsB,GAEvB,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"RadialGradient.js","sourceRoot":"","sources":["../../../../../src/core/shaders/webgl/RadialGradient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EACL,sBAAsB,GAEvB,MAAM,wCAAwC,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAElF,MAAM,CAAC,MAAM,cAAc,GAAyC;IAClE,KAAK,EAAE,sBAAsB,CAAC,KAAK;IACnC,MAAM,CAAC,IAAc;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAM,CAAC;QAC1B,IAAI,CAAC,SAAS,CACZ,cAAc,EACd,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EACvB,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CACxB,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,eAAe,CAAC,KAA0B;QACxC,OAAO,UAAU,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACzC,CAAC;IACD,QAAQ,CAAC,QAAuB,EAAE,KAA0B;QAC1D,OAAO;;;;;;;0BAOe,KAAK,CAAC,MAAM,CAAC,MAAM;;;;;;;;;;;;;;;;;;;UAmBnC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;;;;;;;;;;;;;KAa3C,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getNormalizedRgbaComponents } from '../../lib/utils.js';
|
|
2
2
|
import { RadialProgressTemplate, } from '../templates/RadialProgressTemplate.js';
|
|
3
|
+
import { genGradientColors } from '../../renderers/webgl/internal/ShaderUtils.js';
|
|
3
4
|
export const RadialProgress = {
|
|
4
5
|
props: RadialProgressTemplate.props,
|
|
5
6
|
time: true,
|
|
@@ -38,7 +39,6 @@ export const RadialProgress = {
|
|
|
38
39
|
# endif
|
|
39
40
|
|
|
40
41
|
#define MAX_STOPS ${maxStops}
|
|
41
|
-
#define LAST_STOP ${maxStops - 1}
|
|
42
42
|
#define CAP_ROUND ${props.cap}
|
|
43
43
|
#define HAS_TRACK ${props.trackColor !== 0 ? 1 : 0}
|
|
44
44
|
|
|
@@ -68,22 +68,8 @@ export const RadialProgress = {
|
|
|
68
68
|
|
|
69
69
|
vec4 getGradientColor(float dist) {
|
|
70
70
|
dist = clamp(dist, 0.0, 1.0);
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
return u_colors[0];
|
|
74
|
-
}
|
|
75
|
-
if (dist >= u_stops[LAST_STOP]) {
|
|
76
|
-
return u_colors[LAST_STOP];
|
|
77
|
-
}
|
|
78
|
-
for (int i = 0; i < LAST_STOP; i++) {
|
|
79
|
-
float left = u_stops[i];
|
|
80
|
-
float right = u_stops[i + 1];
|
|
81
|
-
if (dist >= left && dist <= right) {
|
|
82
|
-
float lDist = smoothstep(left, right, dist);
|
|
83
|
-
return mix(u_colors[i], u_colors[i + 1], lDist);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return u_colors[LAST_STOP];
|
|
71
|
+
${genGradientColors(maxStops)}
|
|
72
|
+
return colorOut;
|
|
87
73
|
}
|
|
88
74
|
|
|
89
75
|
// Coverage of a disc centered at \`c\` with radius \`r\` at pixel \`p\` (with 1px AA)
|
|
@@ -97,9 +83,13 @@ export const RadialProgress = {
|
|
|
97
83
|
// Effective progress: when u_duration > 0 the shader self-animates from
|
|
98
84
|
// u_time, otherwise we use the static u_progress prop. countdown == 1
|
|
99
85
|
// drains (1 -> 0), countdown == 0 fills (0 -> 1).
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
86
|
+
// Branchless (Mali 400 serializes uniform branches): the mix()-guarded
|
|
87
|
+
// denominator keeps the division finite when u_duration == 0 -- a
|
|
88
|
+
// max()-clamped epsilon would overflow fp16 mediump to Inf/NaN.
|
|
89
|
+
float hasDuration = step(0.0001, u_duration);
|
|
90
|
+
float cyclePos = fract(u_time / mix(1.0, u_duration, hasDuration)) * hasDuration;
|
|
91
|
+
float animProgress = mix(cyclePos, 1.0 - cyclePos, step(0.5, u_countdown));
|
|
92
|
+
float progress = mix(u_progress, animProgress, hasDuration);
|
|
103
93
|
|
|
104
94
|
vec2 p = v_nodeCoords.xy * u_dimensions - u_center;
|
|
105
95
|
float dist = length(p);
|
|
@@ -116,7 +106,7 @@ export const RadialProgress = {
|
|
|
116
106
|
|
|
117
107
|
// Filled arc coverage (1 if in filled arc, else 0). When progress >= 1 the
|
|
118
108
|
// whole ring is filled regardless of \`t\` -- guards against the mod() seam.
|
|
119
|
-
float arcCoverage =
|
|
109
|
+
float arcCoverage = max(step(1.0, progress), step(t, progress));
|
|
120
110
|
float fillCoverage = ringCoverage * arcCoverage;
|
|
121
111
|
|
|
122
112
|
#if CAP_ROUND
|
|
@@ -132,8 +122,10 @@ export const RadialProgress = {
|
|
|
132
122
|
#endif
|
|
133
123
|
|
|
134
124
|
// Sample gradient. Normalize \`t\` to the *filled* portion so the gradient
|
|
135
|
-
// spans the visible arc end-to-end regardless of progress.
|
|
136
|
-
|
|
125
|
+
// spans the visible arc end-to-end regardless of progress. mix()-guarded
|
|
126
|
+
// denominator: safe at progress == 0 without fp16 overflow.
|
|
127
|
+
float hasProgress = step(0.000001, progress);
|
|
128
|
+
float gradT = clamp(t / mix(1.0, progress, hasProgress), 0.0, 1.0) * hasProgress;
|
|
137
129
|
vec4 fillCol = getGradientColor(gradT);
|
|
138
130
|
|
|
139
131
|
// Composite: track under fill (if track enabled), both gated by ringCoverage.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadialProgress.js","sourceRoot":"","sources":["../../../../../src/core/shaders/webgl/RadialProgress.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EACL,sBAAsB,GAEvB,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"RadialProgress.js","sourceRoot":"","sources":["../../../../../src/core/shaders/webgl/RadialProgress.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,6 +53,15 @@ export const RoundedWithBorder = {
|
|
|
53
53
|
v_innerSize = vec2(0.0);
|
|
54
54
|
v_outerSize = vec2(0.0);
|
|
55
55
|
|
|
56
|
+
// Defaults for the zero-border case: the fragment shader is branchless
|
|
57
|
+
// and always evaluates the border SDFs, so every varying must carry a
|
|
58
|
+
// finite value (an unwritten varying is undefined and can poison the
|
|
59
|
+
// final mix() with NaN).
|
|
60
|
+
v_outerBorderUv = vec2(0.0);
|
|
61
|
+
v_innerBorderUv = vec2(0.0);
|
|
62
|
+
v_outerBorderRadius = u_radius;
|
|
63
|
+
v_innerBorderRadius = u_radius;
|
|
64
|
+
|
|
56
65
|
if(borderZero == 0.0) {
|
|
57
66
|
vec4 adjustedBorderWidth = u_borderWidth - 1.0 + clamp(u_borderWidth, -1.0, 1.0);
|
|
58
67
|
|
|
@@ -61,9 +70,6 @@ export const RoundedWithBorder = {
|
|
|
61
70
|
float borderBottom = adjustedBorderWidth.z;
|
|
62
71
|
float borderLeft = adjustedBorderWidth.w;
|
|
63
72
|
|
|
64
|
-
v_outerBorderUv = vec2(0.0);
|
|
65
|
-
v_innerBorderUv = vec2(0.0);
|
|
66
|
-
|
|
67
73
|
vec2 borderSize = vec2(borderRight + borderLeft, borderTop + borderBottom);
|
|
68
74
|
vec2 extraSize = borderSize * u_borderAlign;
|
|
69
75
|
float gapLeft = step(0.001, borderLeft) * u_borderGap;
|
|
@@ -148,52 +154,49 @@ export const RoundedWithBorder = {
|
|
|
148
154
|
varying vec4 v_outerBorderRadius;
|
|
149
155
|
varying vec2 v_halfDimensions;
|
|
150
156
|
|
|
157
|
+
// Branchless quadrant radius select (r: x TL, y TR, z BR, w BL) --
|
|
158
|
+
// Mali 400-class fragment pipelines serialize any branch, ternaries included.
|
|
159
|
+
float quadRadius(vec2 p, vec4 r) {
|
|
160
|
+
vec2 stepVal = step(vec2(0.0), p);
|
|
161
|
+
return mix(mix(r.x, r.y, stepVal.x), mix(r.w, r.z, stepVal.x), stepVal.y);
|
|
162
|
+
}
|
|
163
|
+
|
|
151
164
|
float roundedBox(vec2 p, vec2 s, vec4 r) {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
return (min(max(q.x, q.y), 0.0) + length(max(q, 0.0))) - r.x;
|
|
165
|
+
float rad = quadRadius(p, r);
|
|
166
|
+
vec2 q = abs(p) - s + rad;
|
|
167
|
+
return (min(max(q.x, q.y), 0.0) + length(max(q, 0.0))) - rad;
|
|
156
168
|
}
|
|
157
169
|
|
|
158
170
|
void main() {
|
|
159
171
|
vec4 color = texture2D(u_texture, v_textureCoords) * v_color;
|
|
160
|
-
vec4 resultColor = vec4(0.0);
|
|
161
172
|
vec2 boxUv = v_nodeCoords.xy * u_dimensions - v_halfDimensions;
|
|
162
173
|
float borderZero = 1.0 - step(0.001, dot(abs(u_borderWidth), vec4(1.0)));
|
|
163
174
|
float edgeWidth = 1.0 / u_pixelRatio;
|
|
164
175
|
|
|
165
|
-
float nodeDist;
|
|
166
|
-
float nodeAlpha;
|
|
167
|
-
|
|
168
|
-
if(borderZero == 1.0) {
|
|
169
|
-
nodeDist = roundedBox(boxUv, v_halfDimensions - edgeWidth, u_radius);
|
|
170
|
-
nodeAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, nodeDist);
|
|
171
|
-
gl_FragColor = (color * nodeAlpha) * u_alpha;
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
176
|
+
float nodeDist = roundedBox(boxUv, v_halfDimensions - edgeWidth, u_radius);
|
|
177
|
+
float nodeAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, nodeDist);
|
|
174
178
|
|
|
175
179
|
float outerDist = roundedBox(boxUv + v_outerBorderUv, v_outerSize - edgeWidth, v_outerBorderRadius);
|
|
176
180
|
float innerDist = roundedBox(boxUv + v_innerBorderUv, v_innerSize - edgeWidth, v_innerBorderRadius);
|
|
177
|
-
|
|
178
|
-
if(u_borderGap == 0.0) {
|
|
179
|
-
float outerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, outerDist);
|
|
180
|
-
float innerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, innerDist);
|
|
181
|
-
resultColor = mix(resultColor, u_borderColor, outerAlpha * u_borderColor.a);
|
|
182
|
-
resultColor = mix(resultColor, color, innerAlpha);
|
|
183
|
-
gl_FragColor = resultColor * u_alpha;
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
nodeDist = roundedBox(boxUv, v_halfDimensions - edgeWidth, u_radius);
|
|
188
|
-
nodeAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, nodeDist);
|
|
181
|
+
float outerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, outerDist);
|
|
189
182
|
float innerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, innerDist);
|
|
190
|
-
float gapAlpha = max(0.0, innerAlpha - nodeAlpha);
|
|
191
183
|
|
|
184
|
+
float gapAlpha = max(0.0, innerAlpha - nodeAlpha);
|
|
192
185
|
float borderDist = max(-innerDist, outerDist);
|
|
193
186
|
float borderAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, borderDist);
|
|
194
187
|
|
|
195
|
-
|
|
196
|
-
|
|
188
|
+
// Branchless path select -- Mali 400 serializes uniform branches, so all
|
|
189
|
+
// three composites (no gap / gap / zero border) are computed and
|
|
190
|
+
// mix()-selected instead of if/else'd.
|
|
191
|
+
vec4 resNoGap = mix(vec4(0.0), u_borderColor, outerAlpha * u_borderColor.a);
|
|
192
|
+
resNoGap = mix(resNoGap, color, innerAlpha);
|
|
193
|
+
|
|
194
|
+
vec4 resGap = (color * nodeAlpha) + (u_fillColor * gapAlpha);
|
|
195
|
+
resGap = mix(resGap, u_borderColor, borderAlpha * u_borderColor.a);
|
|
196
|
+
|
|
197
|
+
float hasGap = step(0.0001, abs(u_borderGap));
|
|
198
|
+
vec4 resultColor = mix(resNoGap, resGap, hasGap);
|
|
199
|
+
resultColor = mix(resultColor, color * nodeAlpha, borderZero);
|
|
197
200
|
gl_FragColor = resultColor * u_alpha;
|
|
198
201
|
}
|
|
199
202
|
`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoundedWithBorder.js","sourceRoot":"","sources":["../../../../../src/core/shaders/webgl/RoundedWithBorder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,OAAO,EACL,yBAAyB,GAE1B,MAAM,2CAA2C,CAAC;AAEnD,MAAM,CAAC,MAAM,iBAAiB,GAA4C;IACxE,KAAK,EAAE,yBAAyB,CAAC,KAAK;IACtC,MAAM,CAAC,IAAc;QACnB,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,KAAM,CAAC,cAAc,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,KAAM,CAAC,aAAa,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,KAAM,CAAC,UAAU,CAAS,CAAC,CAAC;QAClE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,KAAM,CAAC,YAAY,CAAW,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,KAAM,CAAC,cAAc,CAAW,CAAC,CAAC;QAEvE,IAAI,CAAC,UAAU,CACb,UAAU,EACV,uBAAuB,CAAC,IAAI,CAAC,KAAM,CAAC,MAAc,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CACpE,CAAC;IACJ,CAAC;IACD,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"RoundedWithBorder.js","sourceRoot":"","sources":["../../../../../src/core/shaders/webgl/RoundedWithBorder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,OAAO,EACL,yBAAyB,GAE1B,MAAM,2CAA2C,CAAC;AAEnD,MAAM,CAAC,MAAM,iBAAiB,GAA4C;IACxE,KAAK,EAAE,yBAAyB,CAAC,KAAK;IACtC,MAAM,CAAC,IAAc;QACnB,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,KAAM,CAAC,cAAc,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,KAAM,CAAC,aAAa,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,KAAM,CAAC,UAAU,CAAS,CAAC,CAAC;QAClE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,KAAM,CAAC,YAAY,CAAW,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,KAAM,CAAC,cAAc,CAAW,CAAC,CAAC;QAEvE,IAAI,CAAC,UAAU,CACb,UAAU,EACV,uBAAuB,CAAC,IAAI,CAAC,KAAM,CAAC,MAAc,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CACpE,CAAC;IACJ,CAAC;IACD,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+GP;IACD,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6ET;CACF,CAAC"}
|
|
@@ -58,6 +58,15 @@ export const RoundedWithBorderAndShadow = {
|
|
|
58
58
|
v_innerSize = vec2(0.0);
|
|
59
59
|
v_outerSize = vec2(0.0);
|
|
60
60
|
|
|
61
|
+
// Defaults for the zero-border case: the fragment shader is branchless
|
|
62
|
+
// and always evaluates the border SDFs, so every varying must carry a
|
|
63
|
+
// finite value (an unwritten varying is undefined and can poison the
|
|
64
|
+
// final mix() with NaN).
|
|
65
|
+
v_outerBorderUv = vec2(0.0);
|
|
66
|
+
v_innerBorderUv = vec2(0.0);
|
|
67
|
+
v_outerBorderRadius = u_radius;
|
|
68
|
+
v_innerBorderRadius = u_radius;
|
|
69
|
+
|
|
61
70
|
if(borderZero == 0.0) {
|
|
62
71
|
vec4 adjustedBorderWidth = u_borderWidth - 1.0 + clamp(u_borderWidth, -1.0, 1.0);
|
|
63
72
|
|
|
@@ -66,9 +75,6 @@ export const RoundedWithBorderAndShadow = {
|
|
|
66
75
|
float borderBottom = adjustedBorderWidth.z;
|
|
67
76
|
float borderLeft = adjustedBorderWidth.w;
|
|
68
77
|
|
|
69
|
-
v_outerBorderUv = vec2(0.0);
|
|
70
|
-
v_innerBorderUv = vec2(0.0);
|
|
71
|
-
|
|
72
78
|
vec2 borderSize = vec2(borderRight + borderLeft, borderTop + borderBottom);
|
|
73
79
|
vec2 extraSize = borderSize * u_borderAlign;
|
|
74
80
|
float gapLeft = step(0.001, borderLeft) * u_borderGap;
|
|
@@ -153,67 +159,74 @@ export const RoundedWithBorderAndShadow = {
|
|
|
153
159
|
varying vec4 v_outerBorderRadius;
|
|
154
160
|
varying vec2 v_halfDimensions;
|
|
155
161
|
|
|
162
|
+
// Branchless quadrant radius select (r: x TL, y TR, z BR, w BL) --
|
|
163
|
+
// Mali 400-class fragment pipelines serialize any branch, ternaries included.
|
|
164
|
+
float quadRadius(vec2 p, vec4 r) {
|
|
165
|
+
vec2 stepVal = step(vec2(0.0), p);
|
|
166
|
+
return mix(mix(r.x, r.y, stepVal.x), mix(r.w, r.z, stepVal.x), stepVal.y);
|
|
167
|
+
}
|
|
168
|
+
|
|
156
169
|
float roundedBox(vec2 p, vec2 s, vec4 r) {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
return (min(max(q.x, q.y), 0.0) + length(max(q, 0.0))) - r.x;
|
|
170
|
+
float rad = quadRadius(p, r);
|
|
171
|
+
vec2 q = abs(p) - s + rad;
|
|
172
|
+
return (min(max(q.x, q.y), 0.0) + length(max(q, 0.0))) - rad;
|
|
161
173
|
}
|
|
162
174
|
|
|
163
175
|
float shadowBox(vec2 p, vec2 s, vec4 r) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
float dist = min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - r.x;
|
|
176
|
+
float rad = quadRadius(p, r);
|
|
177
|
+
vec2 q = abs(p) - s + rad;
|
|
178
|
+
float dist = min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - rad;
|
|
168
179
|
return 1.0 - smoothstep(-u_shadow.w, u_shadow.w + u_shadow.z, dist);
|
|
169
180
|
}
|
|
170
181
|
|
|
171
182
|
void main() {
|
|
172
183
|
vec4 color = texture2D(u_texture, v_textureCoords) * v_color;
|
|
173
|
-
vec4 resultColor = vec4(0.0);
|
|
174
184
|
vec2 boxUv = v_nodeCoords.xy * u_dimensions - v_halfDimensions;
|
|
175
185
|
float borderZero = 1.0 - step(0.001, dot(abs(u_borderWidth), vec4(1.0)));
|
|
176
186
|
float edgeWidth = 1.0 / u_pixelRatio;
|
|
177
|
-
float nodeDist;
|
|
178
|
-
float nodeAlpha;
|
|
179
|
-
float shadowAlpha;
|
|
180
|
-
|
|
181
|
-
if(borderZero == 1.0) {
|
|
182
|
-
nodeDist = roundedBox(boxUv, v_halfDimensions - edgeWidth, u_radius);
|
|
183
|
-
nodeAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, nodeDist);
|
|
184
|
-
shadowAlpha = shadowBox(boxUv - u_shadow.xy, v_halfDimensions + u_shadow.w - edgeWidth, u_radius + u_shadow.z);
|
|
185
|
-
resultColor = mix(resultColor, u_shadowColor, shadowAlpha);
|
|
186
|
-
gl_FragColor = mix(resultColor, color, nodeAlpha) * u_alpha;
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
187
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
188
|
+
float nodeDist = roundedBox(boxUv, v_halfDimensions - edgeWidth, u_radius);
|
|
189
|
+
float nodeAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, nodeDist);
|
|
190
|
+
|
|
191
|
+
// Shadow geometry select, branchless: when the border grows the quad
|
|
192
|
+
// beyond the node (outer size exceeds half dimensions on either axis)
|
|
193
|
+
// the shadow hugs the outer border box, otherwise the node box. This
|
|
194
|
+
// replaces a varying-driven if/else (worst offender: diverges per
|
|
195
|
+
// fragment) with a step()/mix() parameter select into ONE shadowBox call.
|
|
196
|
+
// When borderZero, v_outerSize is vec2(0.0) so outerSel is 0 and the
|
|
197
|
+
// node-box parameters win, matching the old zero-border path.
|
|
198
|
+
float outerSel = max(
|
|
199
|
+
step(v_halfDimensions.x, v_outerSize.x),
|
|
200
|
+
step(v_halfDimensions.y, v_outerSize.y)
|
|
201
|
+
);
|
|
202
|
+
float shadowAlpha = shadowBox(
|
|
203
|
+
boxUv + v_outerBorderUv * outerSel - u_shadow.xy,
|
|
204
|
+
mix(v_halfDimensions, v_outerSize, outerSel) + u_shadow.w - edgeWidth,
|
|
205
|
+
mix(u_radius, v_outerBorderRadius, outerSel) + u_shadow.z
|
|
206
|
+
);
|
|
196
207
|
|
|
197
208
|
float outerDist = roundedBox(boxUv + v_outerBorderUv, v_outerSize - edgeWidth, v_outerBorderRadius);
|
|
198
209
|
float innerDist = roundedBox(boxUv + v_innerBorderUv, v_innerSize - edgeWidth, v_innerBorderRadius);
|
|
210
|
+
float outerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, outerDist);
|
|
211
|
+
float innerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, innerDist);
|
|
199
212
|
|
|
200
|
-
if(u_borderGap == 0.0) {
|
|
201
|
-
float outerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, outerDist);
|
|
202
|
-
float innerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, innerDist);
|
|
203
|
-
resultColor = mix(resultColor, u_shadowColor, shadowAlpha);
|
|
204
|
-
resultColor = mix(resultColor, u_borderColor, outerAlpha * u_borderColor.a);
|
|
205
|
-
resultColor = mix(resultColor, color, innerAlpha);
|
|
206
|
-
gl_FragColor = resultColor * u_alpha;
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
nodeDist = roundedBox(boxUv, v_halfDimensions - edgeWidth, u_radius);
|
|
211
|
-
nodeAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, nodeDist);
|
|
212
213
|
float borderDist = max(-innerDist, outerDist);
|
|
213
214
|
float borderAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, borderDist);
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
215
|
+
|
|
216
|
+
// Branchless path select -- Mali 400 serializes uniform branches, so all
|
|
217
|
+
// three composites (no gap / gap / zero border) are computed and
|
|
218
|
+
// mix()-selected instead of if/else'd.
|
|
219
|
+
vec4 shadowBase = u_shadowColor * shadowAlpha;
|
|
220
|
+
|
|
221
|
+
vec4 resNoGap = mix(shadowBase, u_borderColor, outerAlpha * u_borderColor.a);
|
|
222
|
+
resNoGap = mix(resNoGap, color, innerAlpha);
|
|
223
|
+
|
|
224
|
+
vec4 resFill = mix(shadowBase, color, nodeAlpha);
|
|
225
|
+
vec4 resGap = mix(resFill, u_borderColor, borderAlpha * u_borderColor.a);
|
|
226
|
+
|
|
227
|
+
float hasGap = step(0.0001, abs(u_borderGap));
|
|
228
|
+
vec4 resultColor = mix(resNoGap, resGap, hasGap);
|
|
229
|
+
resultColor = mix(resultColor, resFill, borderZero);
|
|
217
230
|
gl_FragColor = resultColor * u_alpha;
|
|
218
231
|
}
|
|
219
232
|
`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoundedWithBorderAndShadow.js","sourceRoot":"","sources":["../../../../../src/core/shaders/webgl/RoundedWithBorderAndShadow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,OAAO,EACL,kCAAkC,GAEnC,MAAM,oDAAoD,CAAC;AAE5D,MAAM,CAAC,MAAM,0BAA0B,GACrC;IACE,KAAK,EAAE,kCAAkC,CAAC,KAAK;IAC/C,MAAM,CAAC,IAAc;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAM,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,UAAU,CAAS,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,KAAM,CAAC,YAAY,CAAW,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,KAAM,CAAC,cAAc,CAAW,CAAC,CAAC;QAEvE,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAExD,IAAI,CAAC,UAAU,CACb,UAAU,EACV,uBAAuB,CAAC,KAAK,CAAC,MAAc,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAC9D,CAAC;IACJ,CAAC;IACD,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"RoundedWithBorderAndShadow.js","sourceRoot":"","sources":["../../../../../src/core/shaders/webgl/RoundedWithBorderAndShadow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,OAAO,EACL,kCAAkC,GAEnC,MAAM,oDAAoD,CAAC;AAE5D,MAAM,CAAC,MAAM,0BAA0B,GACrC;IACE,KAAK,EAAE,kCAAkC,CAAC,KAAK;IAC/C,MAAM,CAAC,IAAc;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAM,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,UAAU,CAAS,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,KAAM,CAAC,YAAY,CAAW,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,KAAM,CAAC,cAAc,CAAW,CAAC,CAAC;QAEvE,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAExD,IAAI,CAAC,UAAU,CACb,UAAU,EACV,uBAAuB,CAAC,KAAK,CAAC,MAAc,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAC9D,CAAC;IACJ,CAAC;IACD,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiHT;IACC,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuGX;CACA,CAAC"}
|
|
@@ -88,18 +88,23 @@ export const RoundedWithShadow = {
|
|
|
88
88
|
varying vec4 v_shadowRadius;
|
|
89
89
|
varying vec2 v_shadowSmooth;
|
|
90
90
|
|
|
91
|
+
// Branchless quadrant radius select (r: x TL, y TR, z BR, w BL) --
|
|
92
|
+
// Mali 400-class fragment pipelines serialize any branch, ternaries included.
|
|
93
|
+
float quadRadius(vec2 p, vec4 r) {
|
|
94
|
+
vec2 stepVal = step(vec2(0.0), p);
|
|
95
|
+
return mix(mix(r.x, r.y, stepVal.x), mix(r.w, r.z, stepVal.x), stepVal.y);
|
|
96
|
+
}
|
|
97
|
+
|
|
91
98
|
float roundedBox(vec2 p, vec2 s, vec4 r) {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
return (min(max(q.x, q.y), 0.0) + length(max(q, 0.0))) - r.x;
|
|
99
|
+
float rad = quadRadius(p, r);
|
|
100
|
+
vec2 q = abs(p) - s + rad;
|
|
101
|
+
return (min(max(q.x, q.y), 0.0) + length(max(q, 0.0))) - rad;
|
|
96
102
|
}
|
|
97
103
|
|
|
98
104
|
float shadowBox(vec2 p, vec2 s, vec4 r) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
float dist = min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - r.x;
|
|
105
|
+
float rad = quadRadius(p, r);
|
|
106
|
+
vec2 q = abs(p) - s + rad;
|
|
107
|
+
float dist = min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - rad;
|
|
103
108
|
return 1.0 - smoothstep(v_shadowSmooth.x, v_shadowSmooth.y, dist);
|
|
104
109
|
}
|
|
105
110
|
|
|
@@ -109,11 +114,8 @@ export const RoundedWithShadow = {
|
|
|
109
114
|
float boxDist = roundedBox(v_boxUv, v_boxSize, u_radius);
|
|
110
115
|
float roundedAlpha = 1.0 - smoothstep(v_boxSmooth.x, v_boxSmooth.y, boxDist);
|
|
111
116
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
float shadowAlpha = shadowBox(v_shadowBox, v_shadowSize, v_shadowRadius);
|
|
115
|
-
resColor = u_shadow_color * shadowAlpha;
|
|
116
|
-
}
|
|
117
|
+
float shadowAlpha = shadowBox(v_shadowBox, v_shadowSize, v_shadowRadius);
|
|
118
|
+
vec4 resColor = u_shadow_color * (shadowAlpha * step(0.0001, u_shadow_color.a));
|
|
117
119
|
|
|
118
120
|
resColor = mix(resColor, color, min(color.a, roundedAlpha));
|
|
119
121
|
gl_FragColor = resColor * u_alpha;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoundedWithShadow.js","sourceRoot":"","sources":["../../../../../src/core/shaders/webgl/RoundedWithShadow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,OAAO,EACL,yBAAyB,GAE1B,MAAM,2CAA2C,CAAC;AAEnD,MAAM,CAAC,MAAM,iBAAiB,GAA4C;IACxE,KAAK,EAAE,yBAAyB,CAAC,KAAK;IACtC,MAAM,CAAC,IAAc;QACnB,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAM,CAAC,cAAc,CAAE,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,KAAM,CAAC,mBAAmB,CAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,UAAU,CACb,UAAU,EACV,uBAAuB,CAAC,IAAI,CAAC,KAAM,CAAC,MAAc,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CACpE,CAAC;IACJ,CAAC;IACD,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDP;IACD,QAAQ,EAAE
|
|
1
|
+
{"version":3,"file":"RoundedWithShadow.js","sourceRoot":"","sources":["../../../../../src/core/shaders/webgl/RoundedWithShadow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,OAAO,EACL,yBAAyB,GAE1B,MAAM,2CAA2C,CAAC;AAEnD,MAAM,CAAC,MAAM,iBAAiB,GAA4C;IACxE,KAAK,EAAE,yBAAyB,CAAC,KAAK;IACtC,MAAM,CAAC,IAAc;QACnB,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAM,CAAC,cAAc,CAAE,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,KAAM,CAAC,mBAAmB,CAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,UAAU,CACb,UAAU,EACV,uBAAuB,CAAC,IAAI,CAAC,KAAM,CAAC,MAAc,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CACpE,CAAC;IACJ,CAAC;IACD,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDP;IACD,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDT;CACF,CAAC"}
|