@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.
- package/LICENSE +21 -0
- package/README.md +11 -0
- package/dist/BezierConverter.d.ts +59 -0
- package/dist/BezierConverter.js +106 -0
- package/dist/CanvasGradientToWebGL.d.ts +96 -0
- package/dist/CanvasGradientToWebGL.js +181 -0
- package/dist/CanvasPatternToWebGL.d.ts +39 -0
- package/dist/CanvasPatternToWebGL.js +66 -0
- package/dist/CanvasToWebGLContext.d.ts +591 -0
- package/dist/CanvasToWebGLContext.js +1427 -0
- package/dist/CanvasToWebGLContextBlend.d.ts +97 -0
- package/dist/CanvasToWebGLContextBlend.js +299 -0
- package/dist/CanvasToWebGLContextGrid.d.ts +74 -0
- package/dist/CanvasToWebGLContextGrid.js +283 -0
- package/dist/CanvasToWebGLContextMask.d.ts +113 -0
- package/dist/CanvasToWebGLContextMask.js +436 -0
- package/dist/CanvasToWebGLContextPath.d.ts +111 -0
- package/dist/CanvasToWebGLContextPath.js +210 -0
- package/dist/CanvasToWebGLContextStyle.d.ts +78 -0
- package/dist/CanvasToWebGLContextStyle.js +139 -0
- package/dist/ColorBufferPool.d.ts +58 -0
- package/dist/ColorBufferPool.js +134 -0
- package/dist/FrameBufferManager.d.ts +135 -0
- package/dist/FrameBufferManager.js +358 -0
- package/dist/StencilBufferPool.d.ts +56 -0
- package/dist/StencilBufferPool.js +142 -0
- package/dist/TextureManager.d.ts +130 -0
- package/dist/TextureManager.js +296 -0
- package/dist/VertexArrayObjectManager.d.ts +96 -0
- package/dist/VertexArrayObjectManager.js +277 -0
- package/dist/WebGLFillMeshGenerator.d.ts +31 -0
- package/dist/WebGLFillMeshGenerator.js +101 -0
- package/dist/WebGLStrokeMeshGenerator.d.ts +183 -0
- package/dist/WebGLStrokeMeshGenerator.js +504 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +6 -0
- package/dist/interface/AttachmentImpl.d.ts +11 -0
- package/dist/interface/AttachmentImpl.js +1 -0
- package/dist/interface/BoundsImpl.d.ts +6 -0
- package/dist/interface/BoundsImpl.js +1 -0
- package/dist/interface/CapsStyleImpl.d.ts +1 -0
- package/dist/interface/CapsStyleImpl.js +1 -0
- package/dist/interface/ClipObjectImpl.d.ts +14 -0
- package/dist/interface/ClipObjectImpl.js +1 -0
- package/dist/interface/FillMeshImpl.d.ts +5 -0
- package/dist/interface/FillMeshImpl.js +1 -0
- package/dist/interface/GradientTypeImpl.d.ts +1 -0
- package/dist/interface/GradientTypeImpl.js +1 -0
- package/dist/interface/GridImpl.d.ts +6 -0
- package/dist/interface/GridImpl.js +1 -0
- package/dist/interface/IndexRangeImpl.d.ts +4 -0
- package/dist/interface/IndexRangeImpl.js +1 -0
- package/dist/interface/InterpolationMethodImpl.d.ts +1 -0
- package/dist/interface/InterpolationMethodImpl.js +1 -0
- package/dist/interface/JointStyleImpl.d.ts +1 -0
- package/dist/interface/JointStyleImpl.js +1 -0
- package/dist/interface/SpreadMethodImpl.d.ts +1 -0
- package/dist/interface/SpreadMethodImpl.js +1 -0
- package/dist/interface/StrokeMethImpl.d.ts +4 -0
- package/dist/interface/StrokeMethImpl.js +1 -0
- package/dist/interface/UniformDataImpl.d.ts +5 -0
- package/dist/interface/UniformDataImpl.js +1 -0
- package/dist/interface/VerticesImpl.d.ts +1 -0
- package/dist/interface/VerticesImpl.js +1 -0
- package/dist/shader/CanvasToWebGLShader.d.ts +85 -0
- package/dist/shader/CanvasToWebGLShader.js +192 -0
- package/dist/shader/CanvasToWebGLShaderList.d.ts +70 -0
- package/dist/shader/CanvasToWebGLShaderList.js +109 -0
- package/dist/shader/GradientLUTGenerator.d.ts +36 -0
- package/dist/shader/GradientLUTGenerator.js +123 -0
- package/dist/shader/WebGLShaderUniform.d.ts +52 -0
- package/dist/shader/WebGLShaderUniform.js +165 -0
- package/dist/shader/fragment/FragmentShaderLibrary.d.ts +18 -0
- package/dist/shader/fragment/FragmentShaderLibrary.js +35 -0
- package/dist/shader/fragment/FragmentShaderSource.d.ts +29 -0
- package/dist/shader/fragment/FragmentShaderSource.js +99 -0
- package/dist/shader/fragment/FragmentShaderSourceBlend.d.ts +67 -0
- package/dist/shader/fragment/FragmentShaderSourceBlend.js +319 -0
- package/dist/shader/fragment/FragmentShaderSourceGradient.d.ts +44 -0
- package/dist/shader/fragment/FragmentShaderSourceGradient.js +114 -0
- package/dist/shader/fragment/FragmentShaderSourceGradientLUT.d.ts +14 -0
- package/dist/shader/fragment/FragmentShaderSourceGradientLUT.js +58 -0
- package/dist/shader/fragment/FragmentShaderSourceTexture.d.ts +12 -0
- package/dist/shader/fragment/FragmentShaderSourceTexture.js +36 -0
- package/dist/shader/fragment/filter/FragmentShaderSourceBlurFilter.d.ts +12 -0
- package/dist/shader/fragment/filter/FragmentShaderSourceBlurFilter.js +42 -0
- package/dist/shader/fragment/filter/FragmentShaderSourceColorMatrixFilter.d.ts +11 -0
- package/dist/shader/fragment/filter/FragmentShaderSourceColorMatrixFilter.js +35 -0
- package/dist/shader/fragment/filter/FragmentShaderSourceConvolutionFilter.d.ts +16 -0
- package/dist/shader/fragment/filter/FragmentShaderSourceConvolutionFilter.js +80 -0
- package/dist/shader/fragment/filter/FragmentShaderSourceDisplacementMapFilter.d.ts +15 -0
- package/dist/shader/fragment/filter/FragmentShaderSourceDisplacementMapFilter.js +106 -0
- package/dist/shader/fragment/filter/FragmentShaderSourceFilter.d.ts +112 -0
- package/dist/shader/fragment/filter/FragmentShaderSourceFilter.js +275 -0
- package/dist/shader/variants/BlendShaderVariantCollection.d.ts +99 -0
- package/dist/shader/variants/BlendShaderVariantCollection.js +239 -0
- package/dist/shader/variants/FilterShaderVariantCollection.d.ts +150 -0
- package/dist/shader/variants/FilterShaderVariantCollection.js +395 -0
- package/dist/shader/variants/GradientLUTShaderVariantCollection.d.ts +49 -0
- package/dist/shader/variants/GradientLUTShaderVariantCollection.js +107 -0
- package/dist/shader/variants/GradientShapeShaderVariantCollection.d.ts +61 -0
- package/dist/shader/variants/GradientShapeShaderVariantCollection.js +196 -0
- package/dist/shader/variants/ShapeShaderVariantCollection.d.ts +117 -0
- package/dist/shader/variants/ShapeShaderVariantCollection.js +427 -0
- package/dist/shader/vertex/VertexShaderLibrary.d.ts +18 -0
- package/dist/shader/vertex/VertexShaderLibrary.js +75 -0
- package/dist/shader/vertex/VertexShaderSource.d.ts +23 -0
- package/dist/shader/vertex/VertexShaderSource.js +92 -0
- package/dist/shader/vertex/VertexShaderSourceFill.d.ts +45 -0
- package/dist/shader/vertex/VertexShaderSourceFill.js +112 -0
- package/dist/shader/vertex/VertexShaderSourceStroke.d.ts +27 -0
- package/dist/shader/vertex/VertexShaderSourceStroke.js +149 -0
- 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,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,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,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
|
+
}
|