@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,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
|
+
}
|