@next2d/webgl 2.0.0 → 3.0.1

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 (155) hide show
  1. package/README.md +206 -5
  2. package/package.json +3 -3
  3. package/src/AtlasManager/service/AtlasManagerCreateNodeService.js +20 -6
  4. package/src/AtlasManager.d.ts +2 -118
  5. package/src/AtlasManager.js +10 -179
  6. package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.d.ts +18 -0
  7. package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.js +193 -0
  8. package/src/BezierConverter.d.ts +88 -0
  9. package/src/BezierConverter.js +158 -0
  10. package/src/Blend/service/BlendAddService.js +2 -2
  11. package/src/Blend/service/BlendAlphaService.js +2 -2
  12. package/src/Blend/service/BlendEraseService.js +2 -2
  13. package/src/Blend/service/BlendOneZeroService.js +2 -2
  14. package/src/Blend/service/BlendResetService.js +2 -2
  15. package/src/Blend/service/BlendScreenService.js +2 -2
  16. package/src/Blend/service/BlendSourceAtopService.js +2 -2
  17. package/src/Blend/service/BlendSourceInService.js +2 -2
  18. package/src/Blend/usecase/BlnedDrawArraysInstancedUseCase.js +2 -2
  19. package/src/Blend/usecase/BlnedDrawDisplayObjectUseCase.js +10 -20
  20. package/src/Blend.d.ts +2 -36
  21. package/src/Blend.js +2 -58
  22. package/src/Context/service/ContextBeginNodeRenderingService.js +3 -3
  23. package/src/Context/service/ContextCreateImageBitmapService.js +30 -10
  24. package/src/Context/service/ContextEndNodeRenderingService.js +2 -2
  25. package/src/Context/service/ContextUpdateTransferBoundsService.js +2 -2
  26. package/src/Context/usecase/ContextApplyFilterUseCase.js +16 -10
  27. package/src/Context/usecase/ContextBindUseCase.js +3 -3
  28. package/src/Context/usecase/ContextClearRectUseCase.js +3 -3
  29. package/src/Context/usecase/ContextClipUseCase.js +3 -3
  30. package/src/Context/usecase/ContextContainerBeginLayerUseCase.d.ts +18 -0
  31. package/src/Context/usecase/ContextContainerBeginLayerUseCase.js +31 -0
  32. package/src/Context/usecase/ContextContainerDrawCachedFilterUseCase.d.ts +16 -0
  33. package/src/Context/usecase/ContextContainerDrawCachedFilterUseCase.js +36 -0
  34. package/src/Context/usecase/ContextContainerEndLayerUseCase.d.ts +18 -0
  35. package/src/Context/usecase/ContextContainerEndLayerUseCase.js +171 -0
  36. package/src/Context/usecase/ContextDrawFillUseCase.js +9 -5
  37. package/src/Context/usecase/ContextGradientStrokeUseCase.js +1 -1
  38. package/src/Context/usecase/ContextLinearGradientFillUseCase.js +16 -14
  39. package/src/Context/usecase/ContextNormalFillUseCase.js +10 -12
  40. package/src/Context/usecase/ContextPatternBitmapFillUseCase.d.ts +2 -2
  41. package/src/Context/usecase/ContextPatternBitmapFillUseCase.js +13 -14
  42. package/src/Context/usecase/ContextRadialGradientFillUseCase.js +16 -14
  43. package/src/Context.d.ts +5 -626
  44. package/src/Context.js +31 -636
  45. package/src/Filter/BevelFilter/usecase/FilterApplyBevelFilterUseCase.js +2 -2
  46. package/src/Filter/BlurFilter/usecase/FilterApplyBlurFilterUseCase.js +2 -2
  47. package/src/Filter/DisplacementMapFilter/usecase/FilterApplyDisplacementMapFilterUseCase.d.ts +1 -2
  48. package/src/Filter/DisplacementMapFilter/usecase/FilterApplyDisplacementMapFilterUseCase.js +3 -9
  49. package/src/Filter/DropShadowFilter/usecase/FilterApplyDropShadowFilterUseCase.js +2 -2
  50. package/src/Filter/GradientBevelFilter/usecase/FilterApplyGradientBevelFilterUseCase.js +2 -2
  51. package/src/Filter/GradientGlowFilter/usecase/FilterApplyGradientGlowFilterUseCase.js +2 -2
  52. package/src/FrameBufferManager/service/FrameBufferManagerBindAttachmentObjectService.js +8 -2
  53. package/src/FrameBufferManager/service/FrameBufferManagerTransferAtlasTextureService.js +12 -25
  54. package/src/FrameBufferManager/service/FrameBufferManagerUnBindAttachmentObjectService.js +2 -2
  55. package/src/FrameBufferManager/usecase/FrameBufferManagerGetAttachmentObjectUseCase.js +2 -2
  56. package/src/FrameBufferManager/usecase/FrameBufferManagerGetTextureFromNodeUseCase.js +7 -9
  57. package/src/FrameBufferManager.d.ts +8 -137
  58. package/src/FrameBufferManager.js +8 -199
  59. package/src/Mask/service/MaskBeginMaskService.js +2 -2
  60. package/src/Mask/service/MaskEndMaskService.js +2 -2
  61. package/src/Mask/service/MaskSetMaskBoundsService.js +2 -2
  62. package/src/Mask/usecase/MaskBindUseCase.js +4 -4
  63. package/src/Mask/usecase/MaskLeaveMaskUseCase.js +4 -4
  64. package/src/Mesh/service/MeshFindOverlappingPathsService.d.ts +2 -1
  65. package/src/Mesh/service/MeshFindOverlappingPathsService.js +7 -3
  66. package/src/Mesh/service/MeshIsPointInsideRectangleService.js +14 -11
  67. package/src/Mesh/usecase/MeshFillGenerateUseCase.js +7 -5
  68. package/src/Mesh/usecase/MeshGenerateCalculateBevelJoinUseCase.js +15 -3
  69. package/src/Mesh/usecase/MeshGenerateCalculateMiterJoinUseCase.js +17 -3
  70. package/src/Mesh/usecase/MeshGenerateCalculateRoundJoinUseCase.js +14 -2
  71. package/src/Mesh/usecase/MeshGenerateStrokeOutlineUseCase.js +39 -23
  72. package/src/Mesh/usecase/MeshStrokeGenerateUseCase.js +12 -4
  73. package/src/Mesh.d.ts +10 -0
  74. package/src/Mesh.js +23 -0
  75. package/src/PathCommand/service/PathCommandPushCurrentPathToVerticesService.d.ts +1 -2
  76. package/src/PathCommand/service/PathCommandPushCurrentPathToVerticesService.js +3 -4
  77. package/src/PathCommand/usecase/PathCommandBezierCurveToUseCase.d.ts +2 -2
  78. package/src/PathCommand/usecase/PathCommandBezierCurveToUseCase.js +9 -5
  79. package/src/PathCommand.js +18 -3
  80. package/src/Shader/Fragment/Filter/FragmentShaderSourceBlurFilter.d.ts +0 -6
  81. package/src/Shader/Fragment/Filter/FragmentShaderSourceBlurFilter.js +0 -6
  82. package/src/Shader/Fragment/Filter/FragmentShaderSourceColorMatrixFilter.d.ts +0 -5
  83. package/src/Shader/Fragment/Filter/FragmentShaderSourceColorMatrixFilter.js +0 -5
  84. package/src/Shader/Fragment/Filter/FragmentShaderSourceConvolutionFilter.d.ts +0 -10
  85. package/src/Shader/Fragment/Filter/FragmentShaderSourceConvolutionFilter.js +0 -10
  86. package/src/Shader/Fragment/Filter/FragmentShaderSourceDisplacementMapFilter.d.ts +0 -9
  87. package/src/Shader/Fragment/Filter/FragmentShaderSourceDisplacementMapFilter.js +8 -18
  88. package/src/Shader/Fragment/Filter/FragmentShaderSourceFilter.d.ts +0 -14
  89. package/src/Shader/Fragment/Filter/FragmentShaderSourceFilter.js +0 -99
  90. package/src/Shader/Fragment/FragmentShaderLibrary.d.ts +0 -17
  91. package/src/Shader/Fragment/FragmentShaderLibrary.js +9 -23
  92. package/src/Shader/Fragment/FragmentShaderSource.d.ts +0 -40
  93. package/src/Shader/Fragment/FragmentShaderSource.js +9 -47
  94. package/src/Shader/Fragment/FragmentShaderSourceBlend.d.ts +0 -7
  95. package/src/Shader/Fragment/FragmentShaderSourceBlend.js +0 -87
  96. package/src/Shader/Fragment/FragmentShaderSourceGradient.d.ts +0 -10
  97. package/src/Shader/Fragment/FragmentShaderSourceGradient.js +7 -41
  98. package/src/Shader/Fragment/FragmentShaderSourceGradientLUT.d.ts +0 -11
  99. package/src/Shader/Fragment/FragmentShaderSourceGradientLUT.js +0 -11
  100. package/src/Shader/Fragment/FragmentShaderSourceTexture.d.ts +0 -11
  101. package/src/Shader/Fragment/FragmentShaderSourceTexture.js +2 -13
  102. package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateShapeTextureUseCase.d.ts +4 -0
  103. package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateShapeTextureUseCase.js +14 -7
  104. package/src/Shader/GradientLUTGenerator.d.ts +23 -0
  105. package/src/Shader/GradientLUTGenerator.js +43 -6
  106. package/src/Shader/ShaderInstancedManager.d.ts +0 -26
  107. package/src/Shader/ShaderInstancedManager.js +0 -26
  108. package/src/Shader/ShaderManager/service/ShaderManagerSetBitmapFillUniformService.js +3 -3
  109. package/src/Shader/ShaderManager/service/ShaderManagerSetFillUniformService.js +3 -3
  110. package/src/Shader/ShaderManager/service/ShaderManagerSetGradientFillUniformService.js +3 -3
  111. package/src/Shader/ShaderManager/service/ShaderManagerSetMaskUniformService.js +3 -3
  112. package/src/Shader/ShaderManager/service/ShaderManagerSetMatrixTextureUniformService.js +3 -3
  113. package/src/Shader/ShaderManager/service/ShaderManagerSetMatrixTextureWithColorTransformUniformService.js +3 -3
  114. package/src/Shader/ShaderManager/service/ShaderManagerSetTextureUniformService.js +3 -3
  115. package/src/Shader/ShaderManager.d.ts +3 -71
  116. package/src/Shader/ShaderManager.js +22 -80
  117. package/src/Shader/Variants/Filter/service/VariantsBitmapFilterShaderService.js +2 -1
  118. package/src/Shader/Variants/GradientLUT/service/VariantsGradientLUTShaderService.d.ts +2 -2
  119. package/src/Shader/Variants/GradientLUT/service/VariantsGradientLUTShaderService.js +9 -6
  120. package/src/Shader/Variants/GradientLUTVariants.d.ts +21 -0
  121. package/src/Shader/Variants/GradientLUTVariants.js +63 -0
  122. package/src/Shader/Vertex/VertexShaderLibrary.d.ts +0 -17
  123. package/src/Shader/Vertex/VertexShaderLibrary.js +1 -18
  124. package/src/Shader/Vertex/VertexShaderSource.d.ts +0 -25
  125. package/src/Shader/Vertex/VertexShaderSource.js +0 -25
  126. package/src/Shader/Vertex/VertexShaderSourceFill.d.ts +0 -65
  127. package/src/Shader/Vertex/VertexShaderSourceFill.js +0 -65
  128. package/src/Stencil/service/StencilDisableSampleAlphaToCoverageService.d.ts +1 -0
  129. package/src/Stencil/service/StencilDisableSampleAlphaToCoverageService.js +8 -0
  130. package/src/Stencil/service/StencilEnableSampleAlphaToCoverageService.d.ts +1 -0
  131. package/src/Stencil/service/StencilEnableSampleAlphaToCoverageService.js +8 -0
  132. package/src/Stencil/service/StencilResetService.d.ts +9 -0
  133. package/src/Stencil/service/StencilResetService.js +14 -0
  134. package/src/Stencil/service/StencilSetFillModeService.d.ts +1 -0
  135. package/src/Stencil/service/StencilSetFillModeService.js +13 -0
  136. package/src/Stencil/service/StencilSetMaskModeService.d.ts +1 -0
  137. package/src/Stencil/service/StencilSetMaskModeService.js +14 -0
  138. package/src/Stencil.d.ts +9 -0
  139. package/src/Stencil.js +17 -0
  140. package/src/StencilBufferObject/usecase/StencilBufferObjectAcquireObjectUseCase.js +15 -7
  141. package/src/TextureManager/usecase/TextureManagerGetMainTextureFromBoundsUseCase.js +6 -7
  142. package/src/VertexArrayObject/service/VertexArrayObjectCreateFillObjectService.js +2 -3
  143. package/src/VertexArrayObject/usecase/VertexArrayObjectBindAttributeUseCase.js +4 -2
  144. package/src/VertexArrayObject/usecase/VertexArrayObjectBindFillMeshUseCase.js +3 -1
  145. package/src/VertexArrayObject/usecase/VertexArrayObjectCreateInstancedVertexArrayObjectUseCase.js +5 -3
  146. package/src/VertexArrayObject/usecase/VertexArrayObjectCreateRectVertexArrayObjectUseCase.js +2 -2
  147. package/src/VertexArrayObject.d.ts +0 -9
  148. package/src/VertexArrayObject.js +0 -16
  149. package/src/WebGLUtil.d.ts +10 -262
  150. package/src/WebGLUtil.js +45 -316
  151. package/src/interface/ICubicConverterReturnObject.d.ts +4 -0
  152. package/src/interface/ICubicConverterReturnObject.js +1 -0
  153. package/src/interface/IVertexArrayObject.d.ts +1 -1
  154. package/src/Context/service/ContextUpdateAllTransferBoundsService.d.ts +0 -11
  155. package/src/Context/service/ContextUpdateAllTransferBoundsService.js +0 -21
@@ -1,8 +1,3 @@
1
- /**
2
- * @return {string}
3
- * @method
4
- * @static
5
- */
6
1
  export const TEXTURE_TEMPLATE = () => {
7
2
  return `#version 300 es
8
3
 
@@ -17,11 +12,6 @@ void main() {
17
12
  gl_Position = vec4(position, 0.0, 1.0);
18
13
  }`;
19
14
  };
20
- /**
21
- * @return {string}
22
- * @method
23
- * @static
24
- */
25
15
  export const VECTOR_TEMPLATE = () => {
26
16
  return `#version 300 es
27
17
 
@@ -36,11 +26,6 @@ void main() {
36
26
  gl_Position = vec4(position.x, -position.y, 0.0, 1.0);
37
27
  }`;
38
28
  };
39
- /**
40
- * @return {string}
41
- * @method
42
- * @static
43
- */
44
29
  export const BLEND_MATRIX_TEMPLATE = () => {
45
30
  return `#version 300 es
46
31
 
@@ -70,11 +55,6 @@ void main() {
70
55
  gl_Position = vec4(position.x, -position.y, 0.0, 1.0);
71
56
  }`;
72
57
  };
73
- /**
74
- * @return {string}
75
- * @method
76
- * @static
77
- */
78
58
  export const BLEND_TEMPLATE = () => {
79
59
  return `#version 300 es
80
60
 
@@ -98,11 +78,6 @@ void main() {
98
78
  gl_Position = vec4(position.x, -position.y, 0.0, 1.0);
99
79
  }`;
100
80
  };
101
- /**
102
- * @return {string}
103
- * @method
104
- * @static
105
- */
106
81
  export const INSTANCE_TEMPLATE = () => {
107
82
  return `#version 300 es
108
83
 
@@ -1,76 +1,11 @@
1
- /**
2
- * @return {string}
3
- * @method
4
- * @static
5
- */
6
1
  export declare const ATTRIBUTE_BEZIER_ON: () => string;
7
- /**
8
- * @returns {string}
9
- * @method
10
- * @static
11
- */
12
2
  export declare const ATTRIBUTE_MATRIX_ON: () => string;
13
- /**
14
- * @return {string}
15
- * @method
16
- * @static
17
- */
18
3
  export declare const VARYING_UV_ON: () => string;
19
- /**
20
- * @return {string}
21
- * @method
22
- * @static
23
- */
24
4
  export declare const VARYING_BEZIER_ON: () => string;
25
- /**
26
- * @return {string}
27
- * @method
28
- * @static
29
- */
30
5
  export declare const STATEMENT_UV_ON: () => string;
31
- /**
32
- * @return {string}
33
- * @method
34
- * @static
35
- */
36
6
  export declare const STATEMENT_BEZIER_ON: () => string;
37
- /**
38
- * @return {string}
39
- * @method
40
- * @static
41
- */
42
7
  export declare const ATTRIBUTE_COLOR_ON: () => string;
43
- /**
44
- * @return {string}
45
- * @method
46
- * @static
47
- */
48
8
  export declare const VARYING_COLOR_ON: () => string;
49
- /**
50
- * @return {string}
51
- * @method
52
- * @static
53
- */
54
9
  export declare const STATEMENT_COLOR_ON: () => string;
55
- /**
56
- * @description 各種、塗りのシェーダのテンプレートを返却
57
- * Returns a template for various fill shaders
58
- *
59
- * @param {number} highp_length
60
- * @param {boolean} with_uv
61
- * @param {boolean} for_mask
62
- * @param {boolean} is_grid_enabled
63
- * @return {string}
64
- * @method
65
- * @static
66
- */
67
10
  export declare const FILL_TEMPLATE: (highp_length: number, with_uv: boolean, for_mask: boolean, is_grid_enabled: boolean) => string;
68
- /**
69
- * @description 矩形の塗りのシェーダのテンプレートを返却
70
- * Returns a template for filling rectangles
71
- *
72
- * @return {string}
73
- * @method
74
- * @static
75
- */
76
11
  export declare const FILL_RECT_TEMPLATE: () => string;
@@ -1,43 +1,18 @@
1
1
  import { FUNCTION_GRID_OFF, FUNCTION_GRID_ON } from "./VertexShaderLibrary";
2
- /**
3
- * @return {string}
4
- * @method
5
- * @static
6
- */
7
2
  export const ATTRIBUTE_BEZIER_ON = () => {
8
3
  return "layout (location = 1) in vec2 a_bezier;";
9
4
  };
10
- /**
11
- * @returns {string}
12
- * @method
13
- * @static
14
- */
15
5
  export const ATTRIBUTE_MATRIX_ON = () => {
16
6
  return `layout (location = 3) in vec3 a_matrix0;
17
7
  layout (location = 4) in vec3 a_matrix1;
18
8
  layout (location = 5) in vec3 a_matrix2;`;
19
9
  };
20
- /**
21
- * @return {string}
22
- * @method
23
- * @static
24
- */
25
10
  export const VARYING_UV_ON = () => {
26
11
  return "out vec2 v_uv;";
27
12
  };
28
- /**
29
- * @return {string}
30
- * @method
31
- * @static
32
- */
33
13
  export const VARYING_BEZIER_ON = () => {
34
14
  return "out vec2 v_bezier;";
35
15
  };
36
- /**
37
- * @return {string}
38
- * @method
39
- * @static
40
- */
41
16
  export const STATEMENT_UV_ON = () => {
42
17
  return `
43
18
  mat3 uv_matrix = mat3(
@@ -52,50 +27,18 @@ export const STATEMENT_UV_ON = () => {
52
27
  );
53
28
  v_uv = (inverse_matrix * uv_matrix * vec3(a_vertex, 1.0)).xy;`;
54
29
  };
55
- /**
56
- * @return {string}
57
- * @method
58
- * @static
59
- */
60
30
  export const STATEMENT_BEZIER_ON = () => {
61
31
  return "v_bezier = a_bezier;";
62
32
  };
63
- /**
64
- * @return {string}
65
- * @method
66
- * @static
67
- */
68
33
  export const ATTRIBUTE_COLOR_ON = () => {
69
34
  return "layout (location = 2) in vec4 a_color;";
70
35
  };
71
- /**
72
- * @return {string}
73
- * @method
74
- * @static
75
- */
76
36
  export const VARYING_COLOR_ON = () => {
77
37
  return "out vec4 v_color;";
78
38
  };
79
- /**
80
- * @return {string}
81
- * @method
82
- * @static
83
- */
84
39
  export const STATEMENT_COLOR_ON = () => {
85
40
  return "v_color = a_color;";
86
41
  };
87
- /**
88
- * @description 各種、塗りのシェーダのテンプレートを返却
89
- * Returns a template for various fill shaders
90
- *
91
- * @param {number} highp_length
92
- * @param {boolean} with_uv
93
- * @param {boolean} for_mask
94
- * @param {boolean} is_grid_enabled
95
- * @return {string}
96
- * @method
97
- * @static
98
- */
99
42
  export const FILL_TEMPLATE = (highp_length, with_uv, for_mask, is_grid_enabled) => {
100
43
  const bezierAttribute = for_mask
101
44
  ? ATTRIBUTE_BEZIER_ON()
@@ -148,14 +91,6 @@ void main() {
148
91
  gl_Position = vec4(pos.x, -pos.y, 0.0, 1.0);
149
92
  }`;
150
93
  };
151
- /**
152
- * @description 矩形の塗りのシェーダのテンプレートを返却
153
- * Returns a template for filling rectangles
154
- *
155
- * @return {string}
156
- * @method
157
- * @static
158
- */
159
94
  export const FILL_RECT_TEMPLATE = () => {
160
95
  return `#version 300 es
161
96
  layout (location = 0) in vec2 a_vertex;
@@ -0,0 +1 @@
1
+ export declare const execute: () => void;
@@ -0,0 +1,8 @@
1
+ import { $gl } from "../../WebGLUtil";
2
+ import { $sampleAlphaToCoverageEnabled, $setSampleAlphaToCoverageEnabled } from "../../Stencil";
3
+ export const execute = () => {
4
+ if ($sampleAlphaToCoverageEnabled) {
5
+ $setSampleAlphaToCoverageEnabled(false);
6
+ $gl.disable($gl.SAMPLE_ALPHA_TO_COVERAGE);
7
+ }
8
+ };
@@ -0,0 +1 @@
1
+ export declare const execute: () => void;
@@ -0,0 +1,8 @@
1
+ import { $gl } from "../../WebGLUtil";
2
+ import { $sampleAlphaToCoverageEnabled, $setSampleAlphaToCoverageEnabled } from "../../Stencil";
3
+ export const execute = () => {
4
+ if (!$sampleAlphaToCoverageEnabled) {
5
+ $setSampleAlphaToCoverageEnabled(true);
6
+ $gl.enable($gl.SAMPLE_ALPHA_TO_COVERAGE);
7
+ }
8
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @description ステンシル状態キャッシュをリセット
3
+ * Reset stencil state cache
4
+ *
5
+ * @return {void}
6
+ * @method
7
+ * @protected
8
+ */
9
+ export declare const execute: () => void;
@@ -0,0 +1,14 @@
1
+ import { $resetStencilMode, $setColorMaskEnabled, $setSampleAlphaToCoverageEnabled } from "../../Stencil";
2
+ /**
3
+ * @description ステンシル状態キャッシュをリセット
4
+ * Reset stencil state cache
5
+ *
6
+ * @return {void}
7
+ * @method
8
+ * @protected
9
+ */
10
+ export const execute = () => {
11
+ $resetStencilMode();
12
+ $setColorMaskEnabled(true);
13
+ $setSampleAlphaToCoverageEnabled(false);
14
+ };
@@ -0,0 +1 @@
1
+ export declare const execute: () => void;
@@ -0,0 +1,13 @@
1
+ import { $gl } from "../../WebGLUtil";
2
+ import { $currentStencilMode, $setStencilMode, $colorMaskEnabled, $setColorMaskEnabled, STENCIL_MODE_FILL } from "../../Stencil";
3
+ export const execute = () => {
4
+ if ($currentStencilMode !== STENCIL_MODE_FILL) {
5
+ $setStencilMode(STENCIL_MODE_FILL);
6
+ $gl.stencilFunc($gl.NOTEQUAL, 0, 0xff);
7
+ $gl.stencilOp($gl.KEEP, $gl.ZERO, $gl.ZERO);
8
+ }
9
+ if (!$colorMaskEnabled) {
10
+ $setColorMaskEnabled(true);
11
+ $gl.colorMask(true, true, true, true);
12
+ }
13
+ };
@@ -0,0 +1 @@
1
+ export declare const execute: () => void;
@@ -0,0 +1,14 @@
1
+ import { $gl } from "../../WebGLUtil";
2
+ import { $currentStencilMode, $setStencilMode, $colorMaskEnabled, $setColorMaskEnabled, STENCIL_MODE_MASK } from "../../Stencil";
3
+ export const execute = () => {
4
+ if ($currentStencilMode !== STENCIL_MODE_MASK) {
5
+ $setStencilMode(STENCIL_MODE_MASK);
6
+ $gl.stencilFunc($gl.ALWAYS, 0, 0xff);
7
+ $gl.stencilOpSeparate($gl.FRONT, $gl.KEEP, $gl.KEEP, $gl.INCR_WRAP);
8
+ $gl.stencilOpSeparate($gl.BACK, $gl.KEEP, $gl.KEEP, $gl.DECR_WRAP);
9
+ }
10
+ if ($colorMaskEnabled) {
11
+ $setColorMaskEnabled(false);
12
+ $gl.colorMask(false, false, false, false);
13
+ }
14
+ };
@@ -0,0 +1,9 @@
1
+ export declare let $currentStencilMode: number;
2
+ export declare const STENCIL_MODE_MASK: number;
3
+ export declare const STENCIL_MODE_FILL: number;
4
+ export declare const $setStencilMode: (mode: number) => void;
5
+ export declare const $resetStencilMode: () => void;
6
+ export declare let $colorMaskEnabled: boolean;
7
+ export declare const $setColorMaskEnabled: (enabled: boolean) => void;
8
+ export declare let $sampleAlphaToCoverageEnabled: boolean;
9
+ export declare const $setSampleAlphaToCoverageEnabled: (enabled: boolean) => void;
package/src/Stencil.js ADDED
@@ -0,0 +1,17 @@
1
+ export let $currentStencilMode = 0;
2
+ export const STENCIL_MODE_MASK = 1;
3
+ export const STENCIL_MODE_FILL = 2;
4
+ export const $setStencilMode = (mode) => {
5
+ $currentStencilMode = mode;
6
+ };
7
+ export const $resetStencilMode = () => {
8
+ $currentStencilMode = 0;
9
+ };
10
+ export let $colorMaskEnabled = true;
11
+ export const $setColorMaskEnabled = (enabled) => {
12
+ $colorMaskEnabled = enabled;
13
+ };
14
+ export let $sampleAlphaToCoverageEnabled = false;
15
+ export const $setSampleAlphaToCoverageEnabled = (enabled) => {
16
+ $sampleAlphaToCoverageEnabled = enabled;
17
+ };
@@ -15,14 +15,22 @@ export const execute = (width, height) => {
15
15
  if (!$objectPool.length) {
16
16
  return stencilBufferObjectCreateService();
17
17
  }
18
+ let bestIdx = -1;
19
+ let bestArea = Infinity;
18
20
  for (let idx = 0; idx < $objectPool.length; ++idx) {
19
- const stencilBufferObject = $objectPool[idx];
20
- if (stencilBufferObject.width !== width
21
- || stencilBufferObject.height !== height) {
22
- continue;
21
+ const obj = $objectPool[idx];
22
+ if (obj.width >= width && obj.height >= height) {
23
+ if (obj.area < bestArea) {
24
+ bestArea = obj.area;
25
+ bestIdx = idx;
26
+ }
23
27
  }
24
- $objectPool.splice(idx, 1);
25
- return stencilBufferObject;
26
28
  }
27
- return $objectPool.shift();
29
+ if (bestIdx !== -1) {
30
+ const obj = $objectPool[bestIdx];
31
+ $objectPool[bestIdx] = $objectPool[$objectPool.length - 1];
32
+ $objectPool.pop();
33
+ return obj;
34
+ }
35
+ return $objectPool.pop();
28
36
  };
@@ -1,7 +1,7 @@
1
1
  import { execute as textureManagerGetTextureUseCase } from "./TextureManagerGetTextureUseCase";
2
2
  import { execute as textureManagerBind0UseCase } from "./TextureManagerBind0UseCase";
3
- import { $context, $gl } from "../../WebGLUtil";
4
- import { $getDrawBitmapFrameBuffer, $readFrameBuffer } from "../../FrameBufferManager";
3
+ import { $context, $gl, $enableScissorTest, $disableScissorTest } from "../../WebGLUtil";
4
+ import { $drawBitmapFramebuffer, $readFrameBuffer } from "../../FrameBufferManager";
5
5
  /**
6
6
  * @type {ITextureObject}
7
7
  * @private
@@ -24,8 +24,7 @@ export const execute = (x, y, width, height) => {
24
24
  // メインのアタッチメントオブジェクトをセット
25
25
  const mainAttachmentObject = $context.$mainAttachmentObject;
26
26
  $context.bind(mainAttachmentObject);
27
- const drawBitmapFrameBuffer = $getDrawBitmapFrameBuffer();
28
- $gl.bindFramebuffer($gl.FRAMEBUFFER, drawBitmapFrameBuffer);
27
+ $gl.bindFramebuffer($gl.FRAMEBUFFER, $drawBitmapFramebuffer);
29
28
  // 描画先のテクスチャを更新
30
29
  if (!$mainTextureObject
31
30
  || $mainTextureObject.width !== mainAttachmentObject.width
@@ -36,12 +35,12 @@ export const execute = (x, y, width, height) => {
36
35
  $gl.framebufferTexture2D($gl.FRAMEBUFFER, $gl.COLOR_ATTACHMENT0, $gl.TEXTURE_2D, $mainTextureObject.resource, 0);
37
36
  $gl.bindFramebuffer($gl.FRAMEBUFFER, null);
38
37
  $gl.bindFramebuffer($gl.READ_FRAMEBUFFER, $readFrameBuffer);
39
- $gl.bindFramebuffer($gl.DRAW_FRAMEBUFFER, drawBitmapFrameBuffer);
40
- $gl.enable($gl.SCISSOR_TEST);
38
+ $gl.bindFramebuffer($gl.DRAW_FRAMEBUFFER, $drawBitmapFramebuffer);
39
+ $enableScissorTest();
41
40
  $gl.scissor(x, mainAttachmentObject.height - y - height, width + 1, height + 1);
42
41
  // execute
43
42
  $gl.blitFramebuffer(0, 0, mainAttachmentObject.width, mainAttachmentObject.height, 0, 0, mainAttachmentObject.width, mainAttachmentObject.height, $gl.COLOR_BUFFER_BIT, $gl.NEAREST);
44
- $gl.disable($gl.SCISSOR_TEST);
43
+ $disableScissorTest();
45
44
  $gl.bindFramebuffer($gl.FRAMEBUFFER, $readFrameBuffer);
46
45
  if (currentAttachmentObject) {
47
46
  $context.bind(currentAttachmentObject);
@@ -1,5 +1,4 @@
1
- import { $gl } from "../../WebGLUtil";
2
- import { $getId } from "../../VertexArrayObject";
1
+ import { $gl, $getUUID } from "../../WebGLUtil";
3
2
  /**
4
3
  * @description 新規のVertexArrayObjectを生成する
5
4
  * Create a new VertexArrayObject
@@ -10,7 +9,7 @@ import { $getId } from "../../VertexArrayObject";
10
9
  */
11
10
  export const execute = () => {
12
11
  return {
13
- "id": $getId(),
12
+ "id": $getUUID(),
14
13
  "resource": $gl.createVertexArray(),
15
14
  "vertexBuffer": $gl.createBuffer(),
16
15
  "vertexLength": 0
@@ -20,8 +20,10 @@ export const execute = () => {
20
20
  $gl.bindBuffer($gl.ARRAY_BUFFER, $attributeWebGLBuffer);
21
21
  if (renderQueue.buffer.length > $attributeBufferLength) {
22
22
  $attributeBufferLength = renderQueue.buffer.length;
23
+ // STREAM_DRAW: 毎フレーム更新されるデータに最適
24
+ // STREAM_DRAW: Optimal for data updated every frame
23
25
  $gl.bufferData($gl.ARRAY_BUFFER, $attributeBufferLength * 4, // renderQueue.buffer.byteLength
24
- $gl.DYNAMIC_DRAW);
26
+ $gl.STREAM_DRAW);
25
27
  }
26
- $gl.bufferSubData($gl.ARRAY_BUFFER, 0, renderQueue.buffer.subarray(0, renderQueue.offset));
28
+ $gl.bufferSubData($gl.ARRAY_BUFFER, 0, renderQueue.buffer, 0, renderQueue.offset);
27
29
  };
@@ -18,7 +18,9 @@ export const execute = () => {
18
18
  $gl.bindBuffer($gl.ARRAY_BUFFER, vertexArrayObject.vertexBuffer);
19
19
  if (vertexArrayObject.vertexLength < buffer.length) {
20
20
  vertexArrayObject.vertexLength = $upperPowerOfTwo(buffer.length);
21
- $gl.bufferData($gl.ARRAY_BUFFER, vertexArrayObject.vertexLength * 4, $gl.DYNAMIC_DRAW);
21
+ // STREAM_DRAW: 毎フレーム更新されるデータに最適
22
+ // STREAM_DRAW: Optimal for data updated every frame
23
+ $gl.bufferData($gl.ARRAY_BUFFER, vertexArrayObject.vertexLength * 4, $gl.STREAM_DRAW);
22
24
  }
23
25
  $gl.bufferSubData($gl.ARRAY_BUFFER, 0, buffer.subarray(0, offset));
24
26
  return vertexArrayObject;
@@ -16,13 +16,15 @@ export const execute = () => {
16
16
  vertexArrayObjectBindService(vertexArrayObject);
17
17
  $gl.bindBuffer($gl.ARRAY_BUFFER, vertexArrayObject.vertexBuffer);
18
18
  $gl.bufferData($gl.ARRAY_BUFFER, new Float32Array([
19
- 0, 0, 1, 0, 0, 1,
20
- 1, 1, 0, 1, 1, 0
19
+ 0, 0, 1, 0, 1, 1,
20
+ 0, 0, 1, 1, 0, 1
21
21
  ]), $gl.STATIC_DRAW);
22
22
  $gl.enableVertexAttribArray(0);
23
23
  $gl.vertexAttribPointer(0, 2, $gl.FLOAT, false, 0, 0);
24
24
  $gl.bindBuffer($gl.ARRAY_BUFFER, $attributeWebGLBuffer);
25
- $gl.bufferData($gl.ARRAY_BUFFER, renderQueue.buffer.length, $gl.DYNAMIC_DRAW);
25
+ // STREAM_DRAW: 毎フレーム更新されるインスタンスデータに最適
26
+ // STREAM_DRAW: Optimal for instance data updated every frame
27
+ $gl.bufferData($gl.ARRAY_BUFFER, renderQueue.buffer.length, $gl.STREAM_DRAW);
26
28
  // texture rectangle
27
29
  $gl.enableVertexAttribArray(1);
28
30
  $gl.vertexAttribPointer(1, 4, $gl.FLOAT, false, 88, 0);
@@ -14,8 +14,8 @@ export const execute = () => {
14
14
  vertexArrayObjectBindService(vertexArrayObject);
15
15
  $gl.bindBuffer($gl.ARRAY_BUFFER, vertexArrayObject.vertexBuffer);
16
16
  const vertexBufferData = new Float32Array([
17
- 0, 0, 1, 0, 0, 1,
18
- 1, 1, 0, 1, 1, 0
17
+ 0, 0, 1, 0, 1, 1,
18
+ 0, 0, 1, 1, 0, 1
19
19
  ]);
20
20
  $gl.bufferData($gl.ARRAY_BUFFER, vertexBufferData, $gl.STATIC_DRAW);
21
21
  $gl.enableVertexAttribArray(0);
@@ -1,14 +1,5 @@
1
1
  import type { IVertexArrayObject } from "./interface/IVertexArrayObject";
2
2
  import type { IStrokeVertexArrayObject } from "./interface/IStrokeVertexArrayObject";
3
- /**
4
- * @description VertexArrayObject管理用のユニークIDを返却
5
- * Returns a unique ID for managing VertexArrayObject
6
- *
7
- * @return {number}
8
- * @method
9
- * @protected
10
- */
11
- export declare const $getId: () => number;
12
3
  /**
13
4
  * @description VertexArrayObjectの再利用のための配列のオブジェクトプール
14
5
  * Object pool of array for reusing VertexArrayObject
@@ -1,20 +1,4 @@
1
1
  import { execute as vertexArrayObjectCreateRectVertexArrayObjectUseCase } from "./VertexArrayObject/usecase/VertexArrayObjectCreateRectVertexArrayObjectUseCase";
2
- /**
3
- * @type {number}
4
- * @private
5
- */
6
- let $id = 0;
7
- /**
8
- * @description VertexArrayObject管理用のユニークIDを返却
9
- * Returns a unique ID for managing VertexArrayObject
10
- *
11
- * @return {number}
12
- * @method
13
- * @protected
14
- */
15
- export const $getId = () => {
16
- return $id++;
17
- };
18
2
  /**
19
3
  * @description VertexArrayObjectの再利用のための配列のオブジェクトプール
20
4
  * Object pool of array for reusing VertexArrayObject