@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,319 @@
1
+ import { FragmentShaderLibrary } from "./FragmentShaderLibrary";
2
+ /**
3
+ * @class
4
+ */
5
+ export class FragmentShaderSourceBlend {
6
+ /**
7
+ * @param {string} operation
8
+ * @param {boolean} with_color_transform
9
+ * @return {string}
10
+ * @method
11
+ * @static
12
+ */
13
+ static TEMPLATE(operation, with_color_transform) {
14
+ let blendFunction;
15
+ switch (operation) {
16
+ case "subtract":
17
+ blendFunction = this.FUNCTION_SUBTRACT();
18
+ break;
19
+ case "multiply":
20
+ blendFunction = this.FUNCTION_MULTIPLY();
21
+ break;
22
+ case "lighten":
23
+ blendFunction = this.FUNCTION_LIGHTEN();
24
+ break;
25
+ case "darken":
26
+ blendFunction = this.FUNCTION_DARKEN();
27
+ break;
28
+ case "overlay":
29
+ blendFunction = this.FUNCTION_OVERLAY();
30
+ break;
31
+ case "hardlight":
32
+ blendFunction = this.FUNCTION_HARDLIGHT();
33
+ break;
34
+ case "difference":
35
+ blendFunction = this.FUNCTION_DIFFERENCE();
36
+ break;
37
+ case "invert":
38
+ blendFunction = this.FUNCTION_INVERT();
39
+ break;
40
+ default:
41
+ blendFunction = this.FUNCTION_NORMAL();
42
+ break;
43
+ }
44
+ const colorTransformUniform = with_color_transform
45
+ ? "uniform vec4 u_mediump[2];"
46
+ : "";
47
+ const colorTransformStatement = with_color_transform
48
+ ? FragmentShaderLibrary.STATEMENT_COLOR_TRANSFORM_ON(0)
49
+ : "";
50
+ return `#version 300 es
51
+ precision mediump float;
52
+
53
+ uniform sampler2D u_textures[2];
54
+ ${colorTransformUniform}
55
+
56
+ in vec2 v_coord;
57
+ out vec4 o_color;
58
+
59
+ ${blendFunction}
60
+
61
+ void main() {
62
+ vec4 dst = texture(u_textures[0], v_coord);
63
+ vec4 src = texture(u_textures[1], v_coord);
64
+ ${colorTransformStatement}
65
+ o_color = blend(src, dst);
66
+ }
67
+
68
+ `;
69
+ }
70
+ /**
71
+ * @return {string}
72
+ * @method
73
+ * @static
74
+ */
75
+ static FUNCTION_NORMAL() {
76
+ return `
77
+
78
+ vec4 blend (in vec4 src, in vec4 dst) {
79
+ return src + dst - dst * src.a;
80
+ }
81
+
82
+ `;
83
+ }
84
+ // 各ブレンド式は、前景と背景の両方のアルファを考慮する必要がある
85
+ // https://odashi.hatenablog.com/entry/20110921/1316610121
86
+ // https://hakuhin.jp/as3/blend.html
87
+ //
88
+ // [基本計算式]
89
+ // ・色(rgb)はストレートアルファ
90
+ // ・アルファ(a)が0の場合は例外処理をする
91
+ // 前景色 a: src.rgb * (src.a * (1.0 - dst.a))
92
+ // 背景色 b: dst.rgb * (dst.a * (1.0 - src.a))
93
+ // 合成色 c: mix.rgb * (src.a * dst.a)
94
+ // 最終結果: a + b + c
95
+ /**
96
+ * @return {string}
97
+ * @method
98
+ * @static
99
+ */
100
+ static FUNCTION_SUBTRACT() {
101
+ // [合成色計算式]
102
+ // dst - src
103
+ return `
104
+
105
+ vec4 blend (in vec4 src, in vec4 dst) {
106
+ if (src.a == 0.0) { return dst; }
107
+ if (dst.a == 0.0) { return src; }
108
+
109
+ vec4 a = src - src * dst.a;
110
+ vec4 b = dst - dst * src.a;
111
+
112
+ src.rgb /= src.a;
113
+ dst.rgb /= dst.a;
114
+
115
+ vec4 c = vec4(dst.rgb - src.rgb, src.a * dst.a);
116
+ c.rgb *= c.a;
117
+
118
+ return a + b + c;
119
+ }
120
+
121
+ `;
122
+ }
123
+ /**
124
+ * @return {string}
125
+ * @method
126
+ * @static
127
+ */
128
+ static FUNCTION_MULTIPLY() {
129
+ // [合成色計算式]
130
+ // src * dst
131
+ return `
132
+
133
+ vec4 blend (in vec4 src, in vec4 dst) {
134
+ vec4 a = src - src * dst.a;
135
+ vec4 b = dst - dst * src.a;
136
+ vec4 c = src * dst;
137
+
138
+ return a + b + c;
139
+ }
140
+
141
+ `;
142
+ }
143
+ /**
144
+ * @return {string}
145
+ * @method
146
+ * @static
147
+ */
148
+ static FUNCTION_LIGHTEN() {
149
+ // [合成色計算式]
150
+ // (src > dst) ? src : dst
151
+ return `
152
+
153
+ vec4 blend (in vec4 src, in vec4 dst) {
154
+ if (src.a == 0.0) { return dst; }
155
+ if (dst.a == 0.0) { return src; }
156
+
157
+ vec4 a = src - src * dst.a;
158
+ vec4 b = dst - dst * src.a;
159
+
160
+ src.rgb /= src.a;
161
+ dst.rgb /= dst.a;
162
+
163
+ vec4 c = vec4(mix(src.rgb, dst.rgb, step(src.rgb, dst.rgb)), src.a * dst.a);
164
+ c.rgb *= c.a;
165
+
166
+ return a + b + c;
167
+ }
168
+
169
+ `;
170
+ }
171
+ /**
172
+ * @return {string}
173
+ * @method
174
+ * @static
175
+ */
176
+ static FUNCTION_DARKEN() {
177
+ // [合成色計算式]
178
+ // (src < dst) ? src : dst
179
+ return `
180
+
181
+ vec4 blend (in vec4 src, in vec4 dst) {
182
+ if (src.a == 0.0) { return dst; }
183
+ if (dst.a == 0.0) { return src; }
184
+
185
+ vec4 a = src - src * dst.a;
186
+ vec4 b = dst - dst * src.a;
187
+
188
+ src.rgb /= src.a;
189
+ dst.rgb /= dst.a;
190
+
191
+ vec4 c = vec4(mix(src.rgb, dst.rgb, step(dst.rgb, src.rgb)), src.a * dst.a);
192
+ c.rgb *= c.a;
193
+
194
+ return a + b + c;
195
+ }
196
+
197
+ `;
198
+ }
199
+ /**
200
+ * @return {string}
201
+ * @method
202
+ * @static
203
+ */
204
+ static FUNCTION_OVERLAY() {
205
+ // [合成色計算式]
206
+ // if (dst < 0.5) {
207
+ // return 2.0 * src * dst
208
+ // } else {
209
+ // return 1.0 - 2.0 * (1.0 - src) * (1.0 - dst)
210
+ // }
211
+ return `
212
+
213
+ vec4 blend (in vec4 src, in vec4 dst) {
214
+ if (src.a == 0.0) { return dst; }
215
+ if (dst.a == 0.0) { return src; }
216
+
217
+ vec4 a = src - src * dst.a;
218
+ vec4 b = dst - dst * src.a;
219
+
220
+ src.rgb /= src.a;
221
+ dst.rgb /= dst.a;
222
+
223
+ vec4 mul = src * dst;
224
+ vec3 c1 = 2.0 * mul.rgb;
225
+ vec3 c2 = 2.0 * (src.rgb + dst.rgb - mul.rgb) - 1.0;
226
+ vec4 c = vec4(mix(c1, c2, step(vec3(0.5), dst.rgb)), mul.a);
227
+ c.rgb *= c.a;
228
+
229
+ return a + b + c;
230
+ }
231
+
232
+ `;
233
+ }
234
+ /**
235
+ * @return {string}
236
+ * @method
237
+ * @static
238
+ */
239
+ static FUNCTION_HARDLIGHT() {
240
+ // [合成色計算式]
241
+ // if (src < 0.5) {
242
+ // return 2.0 * src * dst
243
+ // } else {
244
+ // return 1.0 - 2.0 * (1.0 - src) * (1.0 - dst)
245
+ // }
246
+ return `
247
+
248
+ vec4 blend (in vec4 src, in vec4 dst) {
249
+ if (src.a == 0.0) { return dst; }
250
+ if (dst.a == 0.0) { return src; }
251
+
252
+ vec4 a = src - src * dst.a;
253
+ vec4 b = dst - dst * src.a;
254
+
255
+ src.rgb /= src.a;
256
+ dst.rgb /= dst.a;
257
+
258
+ vec4 mul = src * dst;
259
+ vec3 c1 = 2.0 * mul.rgb;
260
+ vec3 c2 = 2.0 * (src.rgb + dst.rgb - mul.rgb) - 1.0;
261
+ vec4 c = vec4(mix(c1, c2, step(vec3(0.5), src.rgb)), mul.a);
262
+ c.rgb *= c.a;
263
+
264
+ return a + b + c;
265
+ }
266
+
267
+ `;
268
+ }
269
+ /**
270
+ * @return {string}
271
+ * @method
272
+ * @static
273
+ */
274
+ static FUNCTION_DIFFERENCE() {
275
+ // [合成色計算式]
276
+ // abs(src - dst)
277
+ return `
278
+
279
+ vec4 blend (in vec4 src, in vec4 dst) {
280
+ if (src.a == 0.0) { return dst; }
281
+ if (dst.a == 0.0) { return src; }
282
+
283
+ vec4 a = src - src * dst.a;
284
+ vec4 b = dst - dst * src.a;
285
+
286
+ src.rgb /= src.a;
287
+ dst.rgb /= dst.a;
288
+
289
+ vec4 c = vec4(abs(src.rgb - dst.rgb), src.a * dst.a);
290
+ c.rgb *= c.a;
291
+
292
+ return a + b + c;
293
+ }
294
+
295
+ `;
296
+ }
297
+ /**
298
+ * @return {string}
299
+ * @method
300
+ * @static
301
+ */
302
+ static FUNCTION_INVERT() {
303
+ // [基本計算式]
304
+ // ((1.0 - dst) * src.a) + (dst * (1.0 - src.a))
305
+ return `
306
+
307
+ vec4 blend (in vec4 src, in vec4 dst) {
308
+ if (src.a == 0.0) { return dst; }
309
+ if (dst.a == 0.0) { return src; }
310
+
311
+ vec4 b = dst - dst * src.a;
312
+ vec4 c = vec4(src.a - dst.rgb * src.a, src.a);
313
+
314
+ return b + c;
315
+ }
316
+
317
+ `;
318
+ }
319
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @class
3
+ */
4
+ export declare class FragmentShaderSourceGradient {
5
+ /**
6
+ * @param {number} highp_length
7
+ * @param {number} fragment_index
8
+ * @param {boolean} is_radial
9
+ * @param {boolean} has_focal_point
10
+ * @param {string} spread_method
11
+ * @return {string}
12
+ * @method
13
+ * @static
14
+ */
15
+ static TEMPLATE(highp_length: number, fragment_index: number, is_radial: boolean, has_focal_point: boolean, spread_method: string): string;
16
+ /**
17
+ * @param {number} index
18
+ * @return {string}
19
+ * @method
20
+ * @static
21
+ */
22
+ static STATEMENT_GRADIENT_TYPE_LINEAR(index: number): string;
23
+ /**
24
+ * @param {number} index
25
+ * @param {boolean} has_focal_point
26
+ * @return {string}
27
+ * @method
28
+ * @static
29
+ */
30
+ static STATEMENT_GRADIENT_TYPE_RADIAL(index: number, has_focal_point: boolean): string;
31
+ /**
32
+ * @return {string}
33
+ * @method
34
+ * @static
35
+ */
36
+ static STATEMENT_FOCAL_POINT_OFF(): string;
37
+ /**
38
+ * @param {number} index
39
+ * @return {string}
40
+ * @method
41
+ * @static
42
+ */
43
+ static STATEMENT_FOCAL_POINT_ON(index: number): string;
44
+ }
@@ -0,0 +1,114 @@
1
+ /**
2
+ * @class
3
+ */
4
+ export class FragmentShaderSourceGradient {
5
+ /**
6
+ * @param {number} highp_length
7
+ * @param {number} fragment_index
8
+ * @param {boolean} is_radial
9
+ * @param {boolean} has_focal_point
10
+ * @param {string} spread_method
11
+ * @return {string}
12
+ * @method
13
+ * @static
14
+ */
15
+ static TEMPLATE(highp_length, fragment_index, is_radial, has_focal_point, spread_method) {
16
+ const gradientTypeStatement = is_radial
17
+ ? this.STATEMENT_GRADIENT_TYPE_RADIAL(fragment_index, has_focal_point)
18
+ : this.STATEMENT_GRADIENT_TYPE_LINEAR(fragment_index);
19
+ let spread_methodExpression;
20
+ switch (spread_method) {
21
+ case "reflect":
22
+ spread_methodExpression = "1.0 - abs(fract(t * 0.5) * 2.0 - 1.0)";
23
+ break;
24
+ case "repeat":
25
+ spread_methodExpression = "fract(t)";
26
+ break;
27
+ default:
28
+ spread_methodExpression = "clamp(t, 0.0, 1.0)";
29
+ break;
30
+ }
31
+ return `#version 300 es
32
+ precision highp float;
33
+
34
+ uniform sampler2D u_texture;
35
+ uniform vec4 u_highp[${highp_length}];
36
+
37
+ in vec2 v_uv;
38
+ out vec4 o_color;
39
+
40
+ void main() {
41
+ vec2 p = v_uv;
42
+ ${gradientTypeStatement}
43
+ t = ${spread_methodExpression};
44
+ o_color = texture(u_texture, vec2(t, 0.5));
45
+ }
46
+
47
+ `;
48
+ }
49
+ /**
50
+ * @param {number} index
51
+ * @return {string}
52
+ * @method
53
+ * @static
54
+ */
55
+ static STATEMENT_GRADIENT_TYPE_LINEAR(index) {
56
+ return `
57
+ vec2 a = u_highp[${index}].xy;
58
+ vec2 b = u_highp[${index}].zw;
59
+
60
+ vec2 ab = b - a;
61
+ vec2 ap = p - a;
62
+
63
+ float t = dot(ab, ap) / dot(ab, ab);
64
+ `;
65
+ }
66
+ /**
67
+ * @param {number} index
68
+ * @param {boolean} has_focal_point
69
+ * @return {string}
70
+ * @method
71
+ * @static
72
+ */
73
+ static STATEMENT_GRADIENT_TYPE_RADIAL(index, has_focal_point) {
74
+ const focalPointStatement = has_focal_point
75
+ ? this.STATEMENT_FOCAL_POINT_ON(index)
76
+ : this.STATEMENT_FOCAL_POINT_OFF();
77
+ return `
78
+ float radius = u_highp[${index}][0];
79
+
80
+ vec2 coord = p / radius;
81
+ ${focalPointStatement}
82
+ `;
83
+ }
84
+ /**
85
+ * @return {string}
86
+ * @method
87
+ * @static
88
+ */
89
+ static STATEMENT_FOCAL_POINT_OFF() {
90
+ return `
91
+ float t = length(coord);
92
+ `;
93
+ }
94
+ /**
95
+ * @param {number} index
96
+ * @return {string}
97
+ * @method
98
+ * @static
99
+ */
100
+ static STATEMENT_FOCAL_POINT_ON(index) {
101
+ return `
102
+ vec2 focal = vec2(u_highp[${index}][1], 0.0);
103
+
104
+ vec2 dir = normalize(coord - focal);
105
+
106
+ float a = dot(dir, dir);
107
+ float b = 2.0 * dot(dir, focal);
108
+ float c = dot(focal, focal) - 1.0;
109
+ float x = (-b + sqrt(b * b - 4.0 * a * c)) / (2.0 * a);
110
+
111
+ float t = distance(focal, coord) / distance(focal, focal + dir * x);
112
+ `;
113
+ }
114
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @class
3
+ */
4
+ export declare class FragmentShaderSourceGradientLUT {
5
+ /**
6
+ * @param {number} mediump_length
7
+ * @param {number} stops_length
8
+ * @param {boolean} is_linear_space
9
+ * @return {string}
10
+ * @method
11
+ * @static
12
+ */
13
+ static TEMPLATE(mediump_length: number, stops_length: number, is_linear_space: boolean): string;
14
+ }
@@ -0,0 +1,58 @@
1
+ import { $Math } from "@next2d/share";
2
+ /**
3
+ * @class
4
+ */
5
+ export class FragmentShaderSourceGradientLUT {
6
+ /**
7
+ * @param {number} mediump_length
8
+ * @param {number} stops_length
9
+ * @param {boolean} is_linear_space
10
+ * @return {string}
11
+ * @method
12
+ * @static
13
+ */
14
+ static TEMPLATE(mediump_length, stops_length, is_linear_space) {
15
+ let loopStatement = "";
16
+ for (let i = 1; i < stops_length; i++) {
17
+ const i0 = i - 1;
18
+ const i1 = i;
19
+ const t0 = `u_mediump[${stops_length + $Math.floor(i0 / 4)}][${i0 % 4}]`;
20
+ const t1 = `u_mediump[${stops_length + $Math.floor(i1 / 4)}][${i1 % 4}]`;
21
+ const c0 = `u_mediump[${i0}]`;
22
+ const c1 = `u_mediump[${i1}]`;
23
+ loopStatement += `
24
+ if (t <= ${t1}) {
25
+ return mix(${c0}, ${c1}, (t - ${t0}) / (${t1} - ${t0}));
26
+ }
27
+ `;
28
+ }
29
+ const colorSpaceStatement = is_linear_space
30
+ ? "color = pow(color, vec4(0.45454545));"
31
+ : "";
32
+ return `#version 300 es
33
+ precision mediump float;
34
+
35
+ uniform vec4 u_mediump[${mediump_length}];
36
+
37
+ in vec2 v_coord;
38
+ out vec4 o_color;
39
+
40
+ vec4 getGradientColor(in float t) {
41
+ if (t <= u_mediump[${stops_length}][0]) {
42
+ return u_mediump[0];
43
+ }
44
+ ${loopStatement}
45
+ return u_mediump[${stops_length - 1}];
46
+ }
47
+
48
+ void main() {
49
+ vec4 color = getGradientColor(v_coord.x);
50
+ ${colorSpaceStatement}
51
+ color.rgb *= color.a;
52
+
53
+ o_color = color;
54
+ }
55
+
56
+ `;
57
+ }
58
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @class
3
+ */
4
+ export declare class FragmentShaderSourceTexture {
5
+ /**
6
+ * @param {boolean} with_color_transform
7
+ * @return {string}
8
+ * @method
9
+ * @static
10
+ */
11
+ static TEMPLATE(with_color_transform: boolean): string;
12
+ }
@@ -0,0 +1,36 @@
1
+ import { FragmentShaderLibrary } from "./FragmentShaderLibrary";
2
+ /**
3
+ * @class
4
+ */
5
+ export class FragmentShaderSourceTexture {
6
+ /**
7
+ * @param {boolean} with_color_transform
8
+ * @return {string}
9
+ * @method
10
+ * @static
11
+ */
12
+ static TEMPLATE(with_color_transform) {
13
+ const colorTransformUniform = with_color_transform
14
+ ? "uniform vec4 u_mediump[2];"
15
+ : "";
16
+ const colorTransformStatement = with_color_transform
17
+ ? FragmentShaderLibrary.STATEMENT_COLOR_TRANSFORM_ON(0)
18
+ : "";
19
+ return `#version 300 es
20
+ precision mediump float;
21
+
22
+ uniform sampler2D u_texture;
23
+ ${colorTransformUniform}
24
+
25
+ in vec2 v_coord;
26
+ out vec4 o_color;
27
+
28
+ void main() {
29
+ vec4 src = texture(u_texture, v_coord);
30
+ ${colorTransformStatement}
31
+ o_color = src;
32
+ }
33
+
34
+ `;
35
+ }
36
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @class
3
+ */
4
+ export declare class FragmentShaderSourceBlurFilter {
5
+ /**
6
+ * @param {number} half_blur
7
+ * @return {string}
8
+ * @method
9
+ * @static
10
+ */
11
+ static TEMPLATE(half_blur: number): string;
12
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @class
3
+ */
4
+ export class FragmentShaderSourceBlurFilter {
5
+ /**
6
+ * @param {number} half_blur
7
+ * @return {string}
8
+ * @method
9
+ * @static
10
+ */
11
+ static TEMPLATE(half_blur) {
12
+ const halfBlurFixed = half_blur.toFixed(1);
13
+ return `#version 300 es
14
+ precision mediump float;
15
+
16
+ uniform sampler2D u_texture;
17
+ uniform vec4 u_mediump;
18
+
19
+ in vec2 v_coord;
20
+ out vec4 o_color;
21
+
22
+ void main() {
23
+ vec2 offset = u_mediump.xy;
24
+ float fraction = u_mediump.z;
25
+ float samples = u_mediump.w;
26
+
27
+ vec4 color = texture(u_texture, v_coord);
28
+
29
+ for (float i = 1.0; i < ${halfBlurFixed}; i += 1.0) {
30
+ color += texture(u_texture, v_coord + offset * i);
31
+ color += texture(u_texture, v_coord - offset * i);
32
+ }
33
+ color += texture(u_texture, v_coord + offset * ${halfBlurFixed}) * fraction;
34
+ color += texture(u_texture, v_coord - offset * ${halfBlurFixed}) * fraction;
35
+ color /= samples;
36
+
37
+ o_color = color;
38
+ }
39
+
40
+ `;
41
+ }
42
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @class
3
+ */
4
+ export declare class FragmentShaderSourceColorMatrixFilter {
5
+ /**
6
+ * @return {string}
7
+ * @method
8
+ * @static
9
+ */
10
+ static TEMPLATE(): string;
11
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @class
3
+ */
4
+ export class FragmentShaderSourceColorMatrixFilter {
5
+ /**
6
+ * @return {string}
7
+ * @method
8
+ * @static
9
+ */
10
+ static TEMPLATE() {
11
+ return `#version 300 es
12
+ precision mediump float;
13
+
14
+ uniform sampler2D u_texture;
15
+ uniform vec4 u_mediump[5];
16
+
17
+ in vec2 v_coord;
18
+ out vec4 o_color;
19
+
20
+ void main() {
21
+ mat4 mul = mat4(u_mediump[0], u_mediump[1], u_mediump[2], u_mediump[3]);
22
+ vec4 add = u_mediump[4];
23
+
24
+ vec4 color = texture(u_texture, v_coord);
25
+
26
+ color.rgb /= max(0.0001, color.a);
27
+ color = clamp(color * mul + add, 0.0, 1.0);
28
+ color.rgb *= color.a;
29
+
30
+ o_color = color;
31
+ }
32
+
33
+ `;
34
+ }
35
+ }