@next2d/webgl 1.14.20

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.
Files changed (113) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/dist/BezierConverter.d.ts +59 -0
  4. package/dist/BezierConverter.js +106 -0
  5. package/dist/CanvasGradientToWebGL.d.ts +96 -0
  6. package/dist/CanvasGradientToWebGL.js +181 -0
  7. package/dist/CanvasPatternToWebGL.d.ts +39 -0
  8. package/dist/CanvasPatternToWebGL.js +66 -0
  9. package/dist/CanvasToWebGLContext.d.ts +591 -0
  10. package/dist/CanvasToWebGLContext.js +1427 -0
  11. package/dist/CanvasToWebGLContextBlend.d.ts +97 -0
  12. package/dist/CanvasToWebGLContextBlend.js +299 -0
  13. package/dist/CanvasToWebGLContextGrid.d.ts +74 -0
  14. package/dist/CanvasToWebGLContextGrid.js +283 -0
  15. package/dist/CanvasToWebGLContextMask.d.ts +113 -0
  16. package/dist/CanvasToWebGLContextMask.js +436 -0
  17. package/dist/CanvasToWebGLContextPath.d.ts +111 -0
  18. package/dist/CanvasToWebGLContextPath.js +210 -0
  19. package/dist/CanvasToWebGLContextStyle.d.ts +78 -0
  20. package/dist/CanvasToWebGLContextStyle.js +139 -0
  21. package/dist/ColorBufferPool.d.ts +58 -0
  22. package/dist/ColorBufferPool.js +134 -0
  23. package/dist/FrameBufferManager.d.ts +135 -0
  24. package/dist/FrameBufferManager.js +358 -0
  25. package/dist/StencilBufferPool.d.ts +56 -0
  26. package/dist/StencilBufferPool.js +142 -0
  27. package/dist/TextureManager.d.ts +130 -0
  28. package/dist/TextureManager.js +296 -0
  29. package/dist/VertexArrayObjectManager.d.ts +96 -0
  30. package/dist/VertexArrayObjectManager.js +277 -0
  31. package/dist/WebGLFillMeshGenerator.d.ts +31 -0
  32. package/dist/WebGLFillMeshGenerator.js +101 -0
  33. package/dist/WebGLStrokeMeshGenerator.d.ts +183 -0
  34. package/dist/WebGLStrokeMeshGenerator.js +504 -0
  35. package/dist/index.d.ts +6 -0
  36. package/dist/index.js +6 -0
  37. package/dist/interface/AttachmentImpl.d.ts +11 -0
  38. package/dist/interface/AttachmentImpl.js +1 -0
  39. package/dist/interface/BoundsImpl.d.ts +6 -0
  40. package/dist/interface/BoundsImpl.js +1 -0
  41. package/dist/interface/CapsStyleImpl.d.ts +1 -0
  42. package/dist/interface/CapsStyleImpl.js +1 -0
  43. package/dist/interface/ClipObjectImpl.d.ts +14 -0
  44. package/dist/interface/ClipObjectImpl.js +1 -0
  45. package/dist/interface/FillMeshImpl.d.ts +5 -0
  46. package/dist/interface/FillMeshImpl.js +1 -0
  47. package/dist/interface/GradientTypeImpl.d.ts +1 -0
  48. package/dist/interface/GradientTypeImpl.js +1 -0
  49. package/dist/interface/GridImpl.d.ts +6 -0
  50. package/dist/interface/GridImpl.js +1 -0
  51. package/dist/interface/IndexRangeImpl.d.ts +4 -0
  52. package/dist/interface/IndexRangeImpl.js +1 -0
  53. package/dist/interface/InterpolationMethodImpl.d.ts +1 -0
  54. package/dist/interface/InterpolationMethodImpl.js +1 -0
  55. package/dist/interface/JointStyleImpl.d.ts +1 -0
  56. package/dist/interface/JointStyleImpl.js +1 -0
  57. package/dist/interface/SpreadMethodImpl.d.ts +1 -0
  58. package/dist/interface/SpreadMethodImpl.js +1 -0
  59. package/dist/interface/StrokeMethImpl.d.ts +4 -0
  60. package/dist/interface/StrokeMethImpl.js +1 -0
  61. package/dist/interface/UniformDataImpl.d.ts +5 -0
  62. package/dist/interface/UniformDataImpl.js +1 -0
  63. package/dist/interface/VerticesImpl.d.ts +1 -0
  64. package/dist/interface/VerticesImpl.js +1 -0
  65. package/dist/shader/CanvasToWebGLShader.d.ts +85 -0
  66. package/dist/shader/CanvasToWebGLShader.js +192 -0
  67. package/dist/shader/CanvasToWebGLShaderList.d.ts +70 -0
  68. package/dist/shader/CanvasToWebGLShaderList.js +109 -0
  69. package/dist/shader/GradientLUTGenerator.d.ts +36 -0
  70. package/dist/shader/GradientLUTGenerator.js +123 -0
  71. package/dist/shader/WebGLShaderUniform.d.ts +52 -0
  72. package/dist/shader/WebGLShaderUniform.js +165 -0
  73. package/dist/shader/fragment/FragmentShaderLibrary.d.ts +18 -0
  74. package/dist/shader/fragment/FragmentShaderLibrary.js +35 -0
  75. package/dist/shader/fragment/FragmentShaderSource.d.ts +29 -0
  76. package/dist/shader/fragment/FragmentShaderSource.js +99 -0
  77. package/dist/shader/fragment/FragmentShaderSourceBlend.d.ts +67 -0
  78. package/dist/shader/fragment/FragmentShaderSourceBlend.js +319 -0
  79. package/dist/shader/fragment/FragmentShaderSourceGradient.d.ts +44 -0
  80. package/dist/shader/fragment/FragmentShaderSourceGradient.js +114 -0
  81. package/dist/shader/fragment/FragmentShaderSourceGradientLUT.d.ts +14 -0
  82. package/dist/shader/fragment/FragmentShaderSourceGradientLUT.js +58 -0
  83. package/dist/shader/fragment/FragmentShaderSourceTexture.d.ts +12 -0
  84. package/dist/shader/fragment/FragmentShaderSourceTexture.js +36 -0
  85. package/dist/shader/fragment/filter/FragmentShaderSourceBlurFilter.d.ts +12 -0
  86. package/dist/shader/fragment/filter/FragmentShaderSourceBlurFilter.js +42 -0
  87. package/dist/shader/fragment/filter/FragmentShaderSourceColorMatrixFilter.d.ts +11 -0
  88. package/dist/shader/fragment/filter/FragmentShaderSourceColorMatrixFilter.js +35 -0
  89. package/dist/shader/fragment/filter/FragmentShaderSourceConvolutionFilter.d.ts +16 -0
  90. package/dist/shader/fragment/filter/FragmentShaderSourceConvolutionFilter.js +80 -0
  91. package/dist/shader/fragment/filter/FragmentShaderSourceDisplacementMapFilter.d.ts +15 -0
  92. package/dist/shader/fragment/filter/FragmentShaderSourceDisplacementMapFilter.js +106 -0
  93. package/dist/shader/fragment/filter/FragmentShaderSourceFilter.d.ts +112 -0
  94. package/dist/shader/fragment/filter/FragmentShaderSourceFilter.js +275 -0
  95. package/dist/shader/variants/BlendShaderVariantCollection.d.ts +99 -0
  96. package/dist/shader/variants/BlendShaderVariantCollection.js +239 -0
  97. package/dist/shader/variants/FilterShaderVariantCollection.d.ts +150 -0
  98. package/dist/shader/variants/FilterShaderVariantCollection.js +395 -0
  99. package/dist/shader/variants/GradientLUTShaderVariantCollection.d.ts +49 -0
  100. package/dist/shader/variants/GradientLUTShaderVariantCollection.js +107 -0
  101. package/dist/shader/variants/GradientShapeShaderVariantCollection.d.ts +61 -0
  102. package/dist/shader/variants/GradientShapeShaderVariantCollection.js +196 -0
  103. package/dist/shader/variants/ShapeShaderVariantCollection.d.ts +117 -0
  104. package/dist/shader/variants/ShapeShaderVariantCollection.js +427 -0
  105. package/dist/shader/vertex/VertexShaderLibrary.d.ts +18 -0
  106. package/dist/shader/vertex/VertexShaderLibrary.js +75 -0
  107. package/dist/shader/vertex/VertexShaderSource.d.ts +23 -0
  108. package/dist/shader/vertex/VertexShaderSource.js +92 -0
  109. package/dist/shader/vertex/VertexShaderSourceFill.d.ts +45 -0
  110. package/dist/shader/vertex/VertexShaderSourceFill.js +112 -0
  111. package/dist/shader/vertex/VertexShaderSourceStroke.d.ts +27 -0
  112. package/dist/shader/vertex/VertexShaderSourceStroke.js +149 -0
  113. package/package.json +37 -0
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @class
3
+ */
4
+ export declare class FragmentShaderSourceConvolutionFilter {
5
+ /**
6
+ * @param {number} mediump_length
7
+ * @param {number} x
8
+ * @param {number} y
9
+ * @param {boolean} preserve_alpha
10
+ * @param {boolean} clamp
11
+ * @return {string}
12
+ * @method
13
+ * @static
14
+ */
15
+ static TEMPLATE(mediump_length: number, x: number, y: number, preserve_alpha: boolean, clamp: boolean): string;
16
+ }
@@ -0,0 +1,80 @@
1
+ import { FragmentShaderLibrary } from "../FragmentShaderLibrary";
2
+ import { $Math } from "@next2d/share";
3
+ /**
4
+ * @class
5
+ */
6
+ export class FragmentShaderSourceConvolutionFilter {
7
+ /**
8
+ * @param {number} mediump_length
9
+ * @param {number} x
10
+ * @param {number} y
11
+ * @param {boolean} preserve_alpha
12
+ * @param {boolean} clamp
13
+ * @return {string}
14
+ * @method
15
+ * @static
16
+ */
17
+ static TEMPLATE(mediump_length, x, y, preserve_alpha, clamp) {
18
+ const halfX = $Math.floor(x * 0.5);
19
+ const halfY = $Math.floor(y * 0.5);
20
+ const size = x * y;
21
+ let matrixStatement = "";
22
+ const matrixIndex = clamp ? 1 : 2;
23
+ for (let idx = 0; idx < size; ++idx) {
24
+ const index = matrixIndex + $Math.floor(idx / 4);
25
+ const component = idx % 4;
26
+ matrixStatement += `
27
+ result += getWeightedColor(${idx}, u_mediump[${index}][${component}]);
28
+ `;
29
+ }
30
+ const preserve_alphaStatement = preserve_alpha
31
+ ? "result.a = texture(u_texture, v_coord).a;"
32
+ : "";
33
+ const clampStatement = clamp
34
+ ? ""
35
+ : `
36
+ vec4 substitute_color = u_mediump[1];
37
+ color = mix(substitute_color, color, isInside(uv));
38
+ `;
39
+ return `#version 300 es
40
+ precision mediump float;
41
+
42
+ uniform sampler2D u_texture;
43
+ uniform vec4 u_mediump[${mediump_length}];
44
+
45
+ in vec2 v_coord;
46
+ out vec4 o_color;
47
+
48
+ ${FragmentShaderLibrary.FUNCTION_IS_INSIDE()}
49
+
50
+ vec4 getWeightedColor (in int i, in float weight) {
51
+ vec2 rcp_size = u_mediump[0].xy;
52
+
53
+ int i_div_x = i / ${x};
54
+ int i_mod_x = i - ${x} * i_div_x;
55
+ vec2 offset = vec2(i_mod_x - ${halfX}, ${halfY} - i_div_x);
56
+ vec2 uv = v_coord + offset * rcp_size;
57
+
58
+ vec4 color = texture(u_texture, uv);
59
+ color.rgb /= max(0.0001, color.a);
60
+ ${clampStatement}
61
+
62
+ return color * weight;
63
+ }
64
+
65
+ void main() {
66
+ float rcp_divisor = u_mediump[0].z;
67
+ float bias = u_mediump[0].w;
68
+
69
+ vec4 result = vec4(0.0);
70
+ ${matrixStatement}
71
+ result = clamp(result * rcp_divisor + bias, 0.0, 1.0);
72
+ ${preserve_alphaStatement}
73
+
74
+ result.rgb *= result.a;
75
+ o_color = result;
76
+ }
77
+
78
+ `;
79
+ }
80
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @class
3
+ */
4
+ export declare class FragmentShaderSourceDisplacementMapFilter {
5
+ /**
6
+ * @param {number} mediump_length
7
+ * @param {number} component_x
8
+ * @param {number} component_y
9
+ * @param {string} mode
10
+ * @return {string}
11
+ * @method
12
+ * @static
13
+ */
14
+ static TEMPLATE(mediump_length: number, component_x: number, component_y: number, mode: string): string;
15
+ }
@@ -0,0 +1,106 @@
1
+ import { FragmentShaderLibrary } from "../FragmentShaderLibrary";
2
+ /**
3
+ * @class
4
+ */
5
+ export class FragmentShaderSourceDisplacementMapFilter {
6
+ /**
7
+ * @param {number} mediump_length
8
+ * @param {number} component_x
9
+ * @param {number} component_y
10
+ * @param {string} mode
11
+ * @return {string}
12
+ * @method
13
+ * @static
14
+ */
15
+ static TEMPLATE(mediump_length, component_x, component_y, mode) {
16
+ let cx;
17
+ let cy;
18
+ let modeStatement;
19
+ switch (component_x) {
20
+ case 1: // BitmapDataChannel.RED
21
+ cx = "map_color.r";
22
+ break;
23
+ case 2: // BitmapDataChannel.GREEN
24
+ cx = "map_color.g";
25
+ break;
26
+ case 4: // BitmapDataChannel.BLUE
27
+ cx = "map_color.b";
28
+ break;
29
+ case 8: // BitmapDataChannel.ALPHA
30
+ cx = "map_color.a";
31
+ break;
32
+ default:
33
+ cx = "0.5";
34
+ break;
35
+ }
36
+ switch (component_y) {
37
+ case 1: // BitmapDataChannel.RED
38
+ cy = "map_color.r";
39
+ break;
40
+ case 2: // BitmapDataChannel.GREEN
41
+ cy = "map_color.g";
42
+ break;
43
+ case 4: // BitmapDataChannel.BLUE
44
+ cy = "map_color.b";
45
+ break;
46
+ case 8: // BitmapDataChannel.ALPHA
47
+ cy = "map_color.a";
48
+ break;
49
+ default:
50
+ cy = "0.5";
51
+ break;
52
+ }
53
+ switch (mode) {
54
+ case "clamp":
55
+ modeStatement = `
56
+ vec4 source_color = texture(u_textures[0], uv);
57
+ `;
58
+ break;
59
+ case "ignore":
60
+ // 置き換え後の座標が範囲外なら、置き換え前の座標をとる(x軸とy軸を別々に判定する)
61
+ modeStatement = `
62
+ vec4 source_color =texture(u_textures[0], mix(v_coord, uv, step(abs(uv - vec2(0.5)), vec2(0.5))));
63
+ `;
64
+ break;
65
+ case "color":
66
+ modeStatement = `
67
+ vec4 substitute_color = u_mediump[2];
68
+ vec4 source_color = mix(substitute_color, texture(u_textures[0], uv), isInside(uv));
69
+ `;
70
+ break;
71
+ case "wrap":
72
+ default:
73
+ modeStatement = `
74
+ vec4 source_color = texture(u_textures[0], fract(uv));
75
+ `;
76
+ break;
77
+ }
78
+ return `#version 300 es
79
+ precision mediump float;
80
+
81
+ uniform sampler2D u_textures[2];
82
+ uniform vec4 u_mediump[${mediump_length}];
83
+
84
+ in vec2 v_coord;
85
+ out vec4 o_color;
86
+
87
+ ${FragmentShaderLibrary.FUNCTION_IS_INSIDE()}
88
+
89
+ void main() {
90
+ vec2 uv_to_st_scale = u_mediump[0].xy;
91
+ vec2 uv_to_st_offset = u_mediump[0].zw;
92
+ vec2 scale = u_mediump[1].xy;
93
+
94
+ vec2 st = v_coord * uv_to_st_scale - uv_to_st_offset;
95
+ vec4 map_color = texture(u_textures[1], st);
96
+
97
+ vec2 offset = vec2(${cx}, ${cy}) - 0.5;
98
+ vec2 uv = v_coord + offset * scale;
99
+ ${modeStatement}
100
+
101
+ o_color = mix(texture(u_textures[0], v_coord), source_color, isInside(st));
102
+ }
103
+
104
+ `;
105
+ }
106
+ }
@@ -0,0 +1,112 @@
1
+ /**
2
+ * @class
3
+ */
4
+ export declare class FragmentShaderSourceFilter {
5
+ /**
6
+ * @param {number} textures_length
7
+ * @param {number} mediump_length
8
+ * @param {boolean} transforms_base
9
+ * @param {boolean} transforms_blur
10
+ * @param {boolean} isGlow
11
+ * @param {string} type
12
+ * @param {boolean} knockout
13
+ * @param {boolean} applies_strength
14
+ * @param {boolean} is_gradient
15
+ * @return {string}
16
+ * @method
17
+ * @static
18
+ */
19
+ static TEMPLATE(textures_length: number, mediump_length: number, transforms_base: boolean, transforms_blur: boolean, isGlow: boolean, type: string, knockout: boolean, applies_strength: boolean, is_gradient: boolean): string;
20
+ /**
21
+ * @param {number} index
22
+ * @return {string}
23
+ * @method
24
+ * @static
25
+ */
26
+ static STATEMENT_BASE_TEXTURE_TRANSFORM(index: number): string;
27
+ /**
28
+ * @return {string}
29
+ * @method
30
+ * @static
31
+ */
32
+ static STATEMENT_BLUR_TEXTURE(): string;
33
+ /**
34
+ * @param {number} index
35
+ * @return {string}
36
+ * @method
37
+ * @static
38
+ */
39
+ static STATEMENT_BLUR_TEXTURE_TRANSFORM(index: number): string;
40
+ /**
41
+ * @return {string}
42
+ * @method
43
+ * @static
44
+ */
45
+ static STATEMENT_GLOW(is_inner: boolean, transforms_base: boolean, applies_strength: boolean, is_gradient: boolean, color_index: number, strength_offset: number): string;
46
+ /**
47
+ * @param {number} offset
48
+ * @return {string}
49
+ * @method
50
+ * @static
51
+ */
52
+ static STATEMENT_GLOW_STRENGTH(offset: number): string;
53
+ /**
54
+ * @param {number} index
55
+ * @return {string}
56
+ * @method
57
+ * @static
58
+ */
59
+ static STATEMENT_GLOW_SOLID_COLOR(index: number): string;
60
+ /**
61
+ * @param {boolean} transforms_base
62
+ * @return {string}
63
+ * @method
64
+ * @static
65
+ */
66
+ static STATEMENT_GLOW_GRADIENT_COLOR(transforms_base: boolean): string;
67
+ /**
68
+ * @param {string} transforms_base
69
+ * @param {boolean} transforms_blur
70
+ * @param {boolean} applies_strength
71
+ * @param {boolean} is_gradient
72
+ * @param {number} color_index
73
+ * @param {number} strength_offset
74
+ * @return {string}
75
+ * @method
76
+ * @static
77
+ */
78
+ static STATEMENT_BEVEL(transforms_base: boolean, transforms_blur: boolean, applies_strength: boolean, is_gradient: boolean, color_index: number, strength_offset: number): string;
79
+ /**
80
+ * @return {string}
81
+ * @method
82
+ * @static
83
+ */
84
+ static STATEMENT_BLUR_TEXTURE_2(): string;
85
+ /**
86
+ * @return {string}
87
+ * @method
88
+ * @static
89
+ */
90
+ static STATEMENT_BLUR_TEXTURE_TRANSFORM_2(): string;
91
+ /**
92
+ * @param {boolean} offset
93
+ * @return {string}
94
+ * @method
95
+ * @static
96
+ */
97
+ static STATEMENT_BEVEL_STRENGTH(offset: number): string;
98
+ /**
99
+ * @param {number} index
100
+ * @return {string}
101
+ * @method
102
+ * @static
103
+ */
104
+ static STATEMENT_BEVEL_SOLID_COLOR(index: number): string;
105
+ /**
106
+ * @param {boolean} transforms_base
107
+ * @return {string}
108
+ * @method
109
+ * @static
110
+ */
111
+ static STATEMENT_BEVEL_GRADIENT_COLOR(transforms_base: boolean): string;
112
+ }
@@ -0,0 +1,275 @@
1
+ import { $Math } from "@next2d/share";
2
+ import { FragmentShaderLibrary } from "../FragmentShaderLibrary";
3
+ /**
4
+ * @class
5
+ */
6
+ export class FragmentShaderSourceFilter {
7
+ /**
8
+ * @param {number} textures_length
9
+ * @param {number} mediump_length
10
+ * @param {boolean} transforms_base
11
+ * @param {boolean} transforms_blur
12
+ * @param {boolean} isGlow
13
+ * @param {string} type
14
+ * @param {boolean} knockout
15
+ * @param {boolean} applies_strength
16
+ * @param {boolean} is_gradient
17
+ * @return {string}
18
+ * @method
19
+ * @static
20
+ */
21
+ static TEMPLATE(textures_length, mediump_length, transforms_base, transforms_blur, isGlow, type, knockout, applies_strength, is_gradient) {
22
+ let index = 0;
23
+ const baseStatement = transforms_base
24
+ ? this.STATEMENT_BASE_TEXTURE_TRANSFORM(index++)
25
+ : "";
26
+ const blurStatement = transforms_blur
27
+ ? this.STATEMENT_BLUR_TEXTURE_TRANSFORM(index++)
28
+ : this.STATEMENT_BLUR_TEXTURE();
29
+ const isInner = type === "inner";
30
+ const colorIndex = index;
31
+ let strengthOffset = index * 4;
32
+ let colorStatement;
33
+ if (is_gradient) {
34
+ colorStatement = isGlow
35
+ ? this.STATEMENT_GLOW(false, transforms_base, applies_strength, is_gradient, colorIndex, strengthOffset)
36
+ : this.STATEMENT_BEVEL(transforms_base, transforms_blur, applies_strength, is_gradient, colorIndex, strengthOffset);
37
+ }
38
+ else if (isGlow) {
39
+ strengthOffset += 4;
40
+ colorStatement = this.STATEMENT_GLOW(isInner, transforms_base, applies_strength, is_gradient, colorIndex, strengthOffset);
41
+ }
42
+ else {
43
+ strengthOffset += 8;
44
+ colorStatement = this.STATEMENT_BEVEL(transforms_base, transforms_blur, applies_strength, is_gradient, colorIndex, strengthOffset);
45
+ }
46
+ let modeExpression;
47
+ switch (type) {
48
+ case "outer":
49
+ modeExpression = knockout
50
+ ? "blur - blur * base.a"
51
+ : "base + blur - blur * base.a";
52
+ break;
53
+ case "full":
54
+ modeExpression = knockout
55
+ ? "blur"
56
+ : "base - base * blur.a + blur";
57
+ break;
58
+ case "inner":
59
+ default:
60
+ modeExpression = "blur";
61
+ break;
62
+ }
63
+ return `#version 300 es
64
+ precision mediump float;
65
+
66
+ uniform sampler2D u_textures[${textures_length}];
67
+ uniform vec4 u_mediump[${mediump_length}];
68
+
69
+ in vec2 v_coord;
70
+ out vec4 o_color;
71
+
72
+ ${FragmentShaderLibrary.FUNCTION_IS_INSIDE()}
73
+
74
+ void main() {
75
+ ${baseStatement}
76
+ ${blurStatement}
77
+ ${colorStatement}
78
+ o_color = ${modeExpression};
79
+ }
80
+
81
+ `;
82
+ }
83
+ /**
84
+ * @param {number} index
85
+ * @return {string}
86
+ * @method
87
+ * @static
88
+ */
89
+ static STATEMENT_BASE_TEXTURE_TRANSFORM(index) {
90
+ return `
91
+ vec2 base_scale = u_mediump[${index}].xy;
92
+ vec2 base_offset = u_mediump[${index}].zw;
93
+
94
+ vec2 uv = v_coord * base_scale - base_offset;
95
+ vec4 base = mix(vec4(0.0), texture(u_textures[1], uv), isInside(uv));
96
+ `;
97
+ }
98
+ /**
99
+ * @return {string}
100
+ * @method
101
+ * @static
102
+ */
103
+ static STATEMENT_BLUR_TEXTURE() {
104
+ return `
105
+ vec4 blur = texture(u_textures[0], v_coord);
106
+ `;
107
+ }
108
+ /**
109
+ * @param {number} index
110
+ * @return {string}
111
+ * @method
112
+ * @static
113
+ */
114
+ static STATEMENT_BLUR_TEXTURE_TRANSFORM(index) {
115
+ return `
116
+ vec2 blur_scale = u_mediump[${index}].xy;
117
+ vec2 blur_offset = u_mediump[${index}].zw;
118
+
119
+ vec2 st = v_coord * blur_scale - blur_offset;
120
+ vec4 blur = mix(vec4(0.0), texture(u_textures[0], st), isInside(st));
121
+ `;
122
+ }
123
+ /**
124
+ * @return {string}
125
+ * @method
126
+ * @static
127
+ */
128
+ static STATEMENT_GLOW(is_inner, transforms_base, applies_strength, is_gradient, color_index, strength_offset) {
129
+ const innerStatement = is_inner
130
+ ? "blur.a = 1.0 - blur.a;"
131
+ : "";
132
+ const strengthStatement = applies_strength
133
+ ? this.STATEMENT_GLOW_STRENGTH(strength_offset)
134
+ : "";
135
+ const colorStatement = is_gradient
136
+ ? this.STATEMENT_GLOW_GRADIENT_COLOR(transforms_base)
137
+ : this.STATEMENT_GLOW_SOLID_COLOR(color_index);
138
+ return `
139
+ ${innerStatement}
140
+ ${strengthStatement}
141
+ ${colorStatement}
142
+ `;
143
+ }
144
+ /**
145
+ * @param {number} offset
146
+ * @return {string}
147
+ * @method
148
+ * @static
149
+ */
150
+ static STATEMENT_GLOW_STRENGTH(offset) {
151
+ const index = $Math.floor(offset / 4);
152
+ const component = offset % 4;
153
+ return `
154
+ float strength = u_mediump[${index}][${component}];
155
+ blur.a = clamp(blur.a * strength, 0.0, 1.0);
156
+ `;
157
+ }
158
+ /**
159
+ * @param {number} index
160
+ * @return {string}
161
+ * @method
162
+ * @static
163
+ */
164
+ static STATEMENT_GLOW_SOLID_COLOR(index) {
165
+ return `
166
+ vec4 color = u_mediump[${index}];
167
+ blur = color * blur.a;
168
+ `;
169
+ }
170
+ /**
171
+ * @param {boolean} transforms_base
172
+ * @return {string}
173
+ * @method
174
+ * @static
175
+ */
176
+ static STATEMENT_GLOW_GRADIENT_COLOR(transforms_base) {
177
+ return `
178
+ blur = texture(u_textures[${transforms_base ? 2 : 1}], vec2(blur.a, 0.5));
179
+ `;
180
+ }
181
+ /**
182
+ * @param {string} transforms_base
183
+ * @param {boolean} transforms_blur
184
+ * @param {boolean} applies_strength
185
+ * @param {boolean} is_gradient
186
+ * @param {number} color_index
187
+ * @param {number} strength_offset
188
+ * @return {string}
189
+ * @method
190
+ * @static
191
+ */
192
+ static STATEMENT_BEVEL(transforms_base, transforms_blur, applies_strength, is_gradient, color_index, strength_offset) {
193
+ const blur2Statement = transforms_blur
194
+ ? this.STATEMENT_BLUR_TEXTURE_TRANSFORM_2()
195
+ : this.STATEMENT_BLUR_TEXTURE_2();
196
+ const strengthStatement = applies_strength
197
+ ? this.STATEMENT_BEVEL_STRENGTH(strength_offset)
198
+ : "";
199
+ const colorStatement = is_gradient
200
+ ? this.STATEMENT_BEVEL_GRADIENT_COLOR(transforms_base)
201
+ : this.STATEMENT_BEVEL_SOLID_COLOR(color_index);
202
+ return `
203
+ ${blur2Statement}
204
+ float highlight_alpha = blur.a - blur2.a;
205
+ float shadow_alpha = blur2.a - blur.a;
206
+ ${strengthStatement}
207
+ highlight_alpha = clamp(highlight_alpha, 0.0, 1.0);
208
+ shadow_alpha = clamp(shadow_alpha, 0.0, 1.0);
209
+ ${colorStatement}
210
+ `;
211
+ }
212
+ /**
213
+ * @return {string}
214
+ * @method
215
+ * @static
216
+ */
217
+ static STATEMENT_BLUR_TEXTURE_2() {
218
+ return `
219
+ vec4 blur2 = texture(u_textures[0], 1.0 - v_coord);
220
+ `;
221
+ }
222
+ /**
223
+ * @return {string}
224
+ * @method
225
+ * @static
226
+ */
227
+ static STATEMENT_BLUR_TEXTURE_TRANSFORM_2() {
228
+ return `
229
+ vec2 pq = (1.0 - v_coord) * blur_scale - blur_offset;
230
+ vec4 blur2 = mix(vec4(0.0), texture(u_textures[0], pq), isInside(pq));
231
+ `;
232
+ }
233
+ /**
234
+ * @param {boolean} offset
235
+ * @return {string}
236
+ * @method
237
+ * @static
238
+ */
239
+ static STATEMENT_BEVEL_STRENGTH(offset) {
240
+ const index = $Math.floor(offset / 4);
241
+ const component = offset % 4;
242
+ return `
243
+ float strength = u_mediump[${index}][${component}];
244
+ highlight_alpha *= strength;
245
+ shadow_alpha *= strength;
246
+ `;
247
+ }
248
+ /**
249
+ * @param {number} index
250
+ * @return {string}
251
+ * @method
252
+ * @static
253
+ */
254
+ static STATEMENT_BEVEL_SOLID_COLOR(index) {
255
+ return `
256
+ vec4 highlight_color = u_mediump[${index}];
257
+ vec4 shadow_color = u_mediump[${index + 1}];
258
+ blur = highlight_color * highlight_alpha + shadow_color * shadow_alpha;
259
+ `;
260
+ }
261
+ /**
262
+ * @param {boolean} transforms_base
263
+ * @return {string}
264
+ * @method
265
+ * @static
266
+ */
267
+ static STATEMENT_BEVEL_GRADIENT_COLOR(transforms_base) {
268
+ return `
269
+ blur = texture(u_textures[${transforms_base ? 2 : 1}], vec2(
270
+ 0.5019607843137255 - 0.5019607843137255 * shadow_alpha + 0.4980392156862745 * highlight_alpha,
271
+ 0.5
272
+ ));
273
+ `;
274
+ }
275
+ }
@@ -0,0 +1,99 @@
1
+ import { CanvasToWebGLShader } from "../CanvasToWebGLShader";
2
+ import type { CanvasToWebGLContext } from "../../CanvasToWebGLContext";
3
+ import type { WebGLShaderUniform } from "../WebGLShaderUniform";
4
+ /**
5
+ * @class
6
+ */
7
+ export declare class BlendShaderVariantCollection {
8
+ private readonly _$context;
9
+ private readonly _$gl;
10
+ private readonly _$collection;
11
+ /**
12
+ * @param {CanvasToWebGLContext} context
13
+ * @param {WebGL2RenderingContext} gl
14
+ * @constructor
15
+ * @public
16
+ */
17
+ constructor(context: CanvasToWebGLContext, gl: WebGL2RenderingContext);
18
+ /**
19
+ * @param {boolean} with_color_transform
20
+ * @return {CanvasToWebGLShader}
21
+ * @method
22
+ * @public
23
+ */
24
+ getNormalBlendShader(with_color_transform: boolean): CanvasToWebGLShader;
25
+ /**
26
+ * @return {CanvasToWebGLShader}
27
+ * @method
28
+ * @public
29
+ */
30
+ getClipShader(): CanvasToWebGLShader;
31
+ /**
32
+ * @param {string} operation
33
+ * @param {boolean} with_color_transform
34
+ * @return {CanvasToWebGLShader}
35
+ * @method
36
+ * @public
37
+ */
38
+ getBlendShader(operation: string, with_color_transform: boolean): CanvasToWebGLShader;
39
+ /**
40
+ * @param {WebGLShaderUniform} uniform
41
+ * @param {number} x
42
+ * @param {number} y
43
+ * @param {number} w
44
+ * @param {number} h
45
+ * @param {Float32Array} matrix
46
+ * @param {number} render_width
47
+ * @param {number} render_height
48
+ * @param {boolean} with_color_transform
49
+ * @param {number} ct0
50
+ * @param {number} ct1
51
+ * @param {number} ct2
52
+ * @param {number} ct3
53
+ * @param {number} ct4
54
+ * @param {number} ct5
55
+ * @param {number} ct6
56
+ * @param {number} ct7
57
+ * @return {void}
58
+ * @method
59
+ * @public
60
+ */
61
+ setNormalBlendUniform(uniform: WebGLShaderUniform, x: number, y: number, w: number, h: number, matrix: Float32Array, render_width: number, render_height: number, with_color_transform: boolean, ct0: number, ct1: number, ct2: number, ct3: number, ct4: number, ct5: number, ct6: number, ct7: number): void;
62
+ /**
63
+ * @param {WebGLShaderUniform} uniform
64
+ * @param {number} x
65
+ * @param {number} y
66
+ * @param {number} w
67
+ * @param {number} h
68
+ * @param {Float32Array} inverse_matrix
69
+ * @param {number} render_width
70
+ * @param {number} render_height
71
+ * @return {void}
72
+ * @method
73
+ * @public
74
+ */
75
+ setClipUniform(uniform: WebGLShaderUniform, x: number, y: number, w: number, h: number, inverse_matrix: Float32Array, render_width: number, render_height: number): void;
76
+ /**
77
+ * @param {WebGLShaderUniform} uniform
78
+ * @param {number} x
79
+ * @param {number} y
80
+ * @param {number} w
81
+ * @param {number} h
82
+ * @param {Float32Array} matrix
83
+ * @param {number} render_width
84
+ * @param {number} render_height
85
+ * @param {boolean} with_color_transform
86
+ * @param {number} ct0
87
+ * @param {number} ct1
88
+ * @param {number} ct2
89
+ * @param {number} ct3
90
+ * @param {number} ct4
91
+ * @param {number} ct5
92
+ * @param {number} ct6
93
+ * @param {number} ct7
94
+ * @return {void}
95
+ * @method
96
+ * @public
97
+ */
98
+ setBlendUniform(uniform: WebGLShaderUniform, x: number, y: number, w: number, h: number, matrix: Float32Array, render_width: number, render_height: number, with_color_transform: boolean, ct0: number, ct1: number, ct2: number, ct3: number, ct4: number, ct5: number, ct6: number, ct7: number): void;
99
+ }