@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,504 @@
1
+ import { $Float32Array, $Int16Array, $Math } from "@next2d/share";
2
+ /**
3
+ * @class
4
+ */
5
+ export class WebGLStrokeMeshGenerator {
6
+ /**
7
+ * @param {array} vertices
8
+ * @param {string} line_cap
9
+ * @param {string} line_join
10
+ * @return {object}
11
+ * @method
12
+ * @static
13
+ */
14
+ static generate(vertices, line_cap, line_join) {
15
+ this._$vertexBufferData = this._$vertexBufferData || new $Float32Array(1024);
16
+ this._$vertexBufferPos = 0;
17
+ this._$indexBufferData = this._$indexBufferData || new Int16Array(256);
18
+ this._$indexBufferPos = 0;
19
+ this._$lineCap = line_cap;
20
+ this._$lineJoin = line_join;
21
+ for (let i = 0; i < vertices.length; i++) {
22
+ const vertex_begin_offset = this._$vertexBufferPos;
23
+ this._$generateLineSegment(vertices[i]);
24
+ const vertex_end_offset = this._$vertexBufferPos;
25
+ this._$generateLineJoin(vertex_begin_offset, vertex_end_offset);
26
+ this._$generateLineCap(vertex_begin_offset, vertex_end_offset);
27
+ }
28
+ return {
29
+ "vertexBufferData": this._$vertexBufferData.slice(0, this._$vertexBufferPos),
30
+ "indexBufferData": this._$indexBufferData.slice(0, this._$indexBufferPos)
31
+ };
32
+ }
33
+ /**
34
+ * @param {number} delta_length
35
+ * @return {void}
36
+ * @method
37
+ * @static
38
+ * @private
39
+ */
40
+ static _$expandVertexBufferIfNeeded(delta_length) {
41
+ if (this._$vertexBufferPos + delta_length > this._$vertexBufferData.length) {
42
+ const biggerBuffer = new $Float32Array(this._$vertexBufferData.length * 2);
43
+ biggerBuffer.set(this._$vertexBufferData);
44
+ this._$vertexBufferData = biggerBuffer;
45
+ }
46
+ }
47
+ /**
48
+ * @param {number} delta_length
49
+ * @return {void}
50
+ * @method
51
+ * @static
52
+ * @private
53
+ */
54
+ static _$expandIndexBufferIfNeeded(delta_length) {
55
+ if (this._$indexBufferPos + delta_length > this._$indexBufferData.length) {
56
+ const biggerBuffer = new $Int16Array(this._$indexBufferData.length * 2);
57
+ biggerBuffer.set(this._$indexBufferData);
58
+ this._$indexBufferData = biggerBuffer;
59
+ }
60
+ }
61
+ /**
62
+ * @param {Float32Array} vertex
63
+ * @return {void}
64
+ * @method
65
+ * @static
66
+ * @private
67
+ */
68
+ static _$generateLineSegment(vertex) {
69
+ const length = vertex.length - 5;
70
+ for (let v = 0; v < length; v += 3) {
71
+ if (vertex[v + 2]) {
72
+ continue;
73
+ }
74
+ if (vertex[v + 5]) {
75
+ this._$addQuadSegmentMesh(vertex[v], vertex[v + 1], vertex[v + 3], vertex[v + 4], vertex[v + 6], vertex[v + 7]);
76
+ }
77
+ else {
78
+ this._$addLineSegmentMesh(vertex[v], vertex[v + 1], vertex[v + 3], vertex[v + 4]);
79
+ }
80
+ }
81
+ }
82
+ /**
83
+ * @param {number} x1 線分の始点のx座標
84
+ * @param {number} y1 線分の始点のy座標
85
+ * @param {number} cx 線分の制御点のx座標
86
+ * @param {number} cy 線分の制御点のy座標
87
+ * @param {number} x2 線分の終点のx座標
88
+ * @param {number} y2 線分の終点のy座標
89
+ * @return {void}
90
+ * @method
91
+ * @static
92
+ * @private
93
+ */
94
+ static _$addQuadSegmentMesh(x1, y1, cx, cy, x2, y2) {
95
+ const div = 11;
96
+ let stx = x1;
97
+ let sty = y1;
98
+ for (let i = 1; i < div; i++) {
99
+ const t = i / div;
100
+ const rt = 1 - t;
101
+ const edx = (x1 * rt + cx * t) * rt + (cx * rt + x2 * t) * t;
102
+ const edy = (y1 * rt + cy * t) * rt + (cy * rt + y2 * t) * t;
103
+ this._$addLineSegmentMesh(stx, sty, edx, edy, 2);
104
+ stx = edx;
105
+ sty = edy;
106
+ }
107
+ this._$addLineSegmentMesh(stx, sty, x2, y2);
108
+ }
109
+ /**
110
+ * @param {number} x1 線分の始点のx座標
111
+ * @param {number} y1 線分の始点のy座標
112
+ * @param {number} x2 線分の終点のx座標
113
+ * @param {number} y2 線分の終点のy座標
114
+ * @param {number} [type = 1]
115
+ * @return {void}
116
+ * @method
117
+ * @static
118
+ * @private
119
+ */
120
+ static _$addLineSegmentMesh(x1, y1, x2, y2, type = 1) {
121
+ const index0 = this._$vertexBufferPos / 7;
122
+ const index1 = index0 + 1;
123
+ const index2 = index0 + 2;
124
+ const index3 = index0 + 3;
125
+ this._$expandIndexBufferIfNeeded(6);
126
+ const ibd = this._$indexBufferData;
127
+ let ibp = this._$indexBufferPos;
128
+ ibd[ibp++] = index0;
129
+ ibd[ibp++] = index1;
130
+ ibd[ibp++] = index3;
131
+ ibd[ibp++] = index3;
132
+ ibd[ibp++] = index2;
133
+ ibd[ibp++] = index0;
134
+ this._$indexBufferPos = ibp;
135
+ this._$expandVertexBufferIfNeeded(28);
136
+ const vbd = this._$vertexBufferData;
137
+ let vbp = this._$vertexBufferPos;
138
+ vbd[vbp++] = x1;
139
+ vbd[vbp++] = y1;
140
+ vbd[vbp++] = x2;
141
+ vbd[vbp++] = y2;
142
+ vbd[vbp++] = 1;
143
+ vbd[vbp++] = 1;
144
+ vbd[vbp++] = 1;
145
+ vbd[vbp++] = x1;
146
+ vbd[vbp++] = y1;
147
+ vbd[vbp++] = x2;
148
+ vbd[vbp++] = y2;
149
+ vbd[vbp++] = -1;
150
+ vbd[vbp++] = -1;
151
+ vbd[vbp++] = 1;
152
+ vbd[vbp++] = x2;
153
+ vbd[vbp++] = y2;
154
+ vbd[vbp++] = x1;
155
+ vbd[vbp++] = y1;
156
+ vbd[vbp++] = -1;
157
+ vbd[vbp++] = -1;
158
+ vbd[vbp++] = type;
159
+ vbd[vbp++] = x2;
160
+ vbd[vbp++] = y2;
161
+ vbd[vbp++] = x1;
162
+ vbd[vbp++] = y1;
163
+ vbd[vbp++] = 1;
164
+ vbd[vbp++] = 1;
165
+ vbd[vbp++] = type;
166
+ this._$vertexBufferPos = vbp;
167
+ }
168
+ /**
169
+ * @param {number} vertex_begin_offset 結合対象の頂点の範囲(開始)
170
+ * @param {number} vertex_end_offset 結合対象の頂点の範囲(終了)
171
+ * @return {void}
172
+ * @method
173
+ * @static
174
+ * @private
175
+ */
176
+ static _$generateLineJoin(vertex_begin_offset, vertex_end_offset) {
177
+ const vbd = this._$vertexBufferData;
178
+ const length = vertex_end_offset - 55;
179
+ for (let v = vertex_begin_offset; v < length; v += 28) {
180
+ const indexOffset = v / 7;
181
+ this._$addLineJoinMesh(vbd[v], vbd[v + 1], vbd[v + 21], vbd[v + 22], vbd[v + 27], vbd[v + 49], vbd[v + 50], indexOffset + 2, indexOffset + 3, indexOffset + 4, indexOffset + 5);
182
+ }
183
+ }
184
+ /**
185
+ * @param {number} x1 線分Aの始点のx座標
186
+ * @param {number} y1 線分Aの始点のy座標
187
+ * @param {number} x2 結合点のx座標
188
+ * @param {number} y2 結合点のy座標
189
+ * @param {number} type 線分タイプ
190
+ * @param {number} x3 線分Bの終点のx座標
191
+ * @param {number} y3 線分Bの終点のy座標
192
+ * @param {number} index_offset2 線分Aの凸側の頂点インデックス
193
+ * @param {number} index_offset3 線分Aの凹側の頂点インデックス
194
+ * @param {number} index_offset4 線分Bの凸側の頂点インデックス
195
+ * @param {number} index_offset5 線分Bの凹側の頂点インデックス
196
+ * @return {void}
197
+ * @method
198
+ * @static
199
+ * @private
200
+ */
201
+ static _$addLineJoinMesh(x1, y1, x2, y2, type, x3, y3, index_offset2, index_offset3, index_offset4 = 0, index_offset5 = 0) {
202
+ // AとBがほぼ平行なら、結合せずに終了
203
+ const ax = x2 - x1;
204
+ const ay = y2 - y1;
205
+ const bx = x3 - x2;
206
+ const by = y3 - y2;
207
+ const det = this._$cross(ax, ay, bx, by);
208
+ if ($Math.abs(det) < 0.0001) {
209
+ return;
210
+ }
211
+ // 分割したベジェ曲線はベベルで結合する
212
+ if (type === 2) {
213
+ this._$addBevelJoinMesh(x2, y2, index_offset4, index_offset2, index_offset3, index_offset5);
214
+ return;
215
+ }
216
+ // 結合タイプに合わせたメッシュを追加する
217
+ switch (this._$lineJoin) {
218
+ case "round":
219
+ this._$addRoundJoinMesh(x2, y2);
220
+ break;
221
+ case "miter":
222
+ this._$addMiterJoinMesh(x2, y2, x1, y1, x3, y3, index_offset4, index_offset2, index_offset3, index_offset5);
223
+ break;
224
+ default:
225
+ this._$addBevelJoinMesh(x2, y2, index_offset4, index_offset2, index_offset3, index_offset5);
226
+ break;
227
+ }
228
+ }
229
+ /**
230
+ * @param {number} x 結合点のx座標
231
+ * @param {number} y 結合点のy座標
232
+ * @return {void}
233
+ * @method
234
+ * @static
235
+ * @private
236
+ */
237
+ static _$addRoundJoinMesh(x, y) {
238
+ const index0 = this._$vertexBufferPos / 7;
239
+ this._$expandIndexBufferIfNeeded(57);
240
+ const ibd = this._$indexBufferData;
241
+ let ibp = this._$indexBufferPos;
242
+ for (let i = 1; i < 18; i++) {
243
+ const indexN = index0 + i;
244
+ ibd[ibp++] = index0;
245
+ ibd[ibp++] = indexN;
246
+ ibd[ibp++] = indexN + 1;
247
+ }
248
+ ibd[ibp++] = index0;
249
+ ibd[ibp++] = index0 + 18;
250
+ ibd[ibp++] = index0 + 1;
251
+ this._$indexBufferPos = ibp;
252
+ this._$expandVertexBufferIfNeeded(133);
253
+ const vbd = this._$vertexBufferData;
254
+ let vbp = this._$vertexBufferPos;
255
+ vbd[vbp++] = x;
256
+ vbd[vbp++] = y;
257
+ vbd[vbp++] = 0;
258
+ vbd[vbp++] = 0;
259
+ vbd[vbp++] = 0;
260
+ vbd[vbp++] = 0;
261
+ vbd[vbp++] = 0;
262
+ for (let i = 0; i < 18; i++) {
263
+ vbd[vbp++] = x;
264
+ vbd[vbp++] = y;
265
+ vbd[vbp++] = 0;
266
+ vbd[vbp++] = 0;
267
+ vbd[vbp++] = 0;
268
+ vbd[vbp++] = 0;
269
+ vbd[vbp++] = 30 + i;
270
+ }
271
+ this._$vertexBufferPos = vbp;
272
+ }
273
+ /**
274
+ * @param {number} x 結合点のx座標
275
+ * @param {number} y 結合点のy座標
276
+ * @param {number} ax 線分Aの始点のx座標
277
+ * @param {number} ay 線分Aの始点のy座標
278
+ * @param {number} bx 線分Bの終点のx座標
279
+ * @param {number} by 線分Bの終点のy座標
280
+ * @param {number} index1
281
+ * @param {number} index4
282
+ * @param {number} index5
283
+ * @param {number} index8
284
+ * @return {void}
285
+ * @method
286
+ * @static
287
+ * @private
288
+ */
289
+ static _$addMiterJoinMesh(x, y, ax, ay, bx, by, index1, index4, index5, index8) {
290
+ const index0 = this._$vertexBufferPos / 7;
291
+ const index2 = index0 + 1;
292
+ const index3 = index0 + 2;
293
+ const index6 = index0 + 3;
294
+ const index7 = index0 + 4;
295
+ this._$expandIndexBufferIfNeeded(18);
296
+ const ibd = this._$indexBufferData;
297
+ let ibp = this._$indexBufferPos;
298
+ ibd[ibp++] = index0;
299
+ ibd[ibp++] = index1;
300
+ ibd[ibp++] = index2;
301
+ ibd[ibp++] = index0;
302
+ ibd[ibp++] = index2;
303
+ ibd[ibp++] = index3;
304
+ ibd[ibp++] = index0;
305
+ ibd[ibp++] = index3;
306
+ ibd[ibp++] = index4;
307
+ ibd[ibp++] = index0;
308
+ ibd[ibp++] = index5;
309
+ ibd[ibp++] = index6;
310
+ ibd[ibp++] = index0;
311
+ ibd[ibp++] = index6;
312
+ ibd[ibp++] = index7;
313
+ ibd[ibp++] = index0;
314
+ ibd[ibp++] = index7;
315
+ ibd[ibp++] = index8;
316
+ this._$indexBufferPos = ibp;
317
+ this._$expandVertexBufferIfNeeded(35);
318
+ const vbd = this._$vertexBufferData;
319
+ let vbp = this._$vertexBufferPos;
320
+ vbd[vbp++] = x;
321
+ vbd[vbp++] = y;
322
+ vbd[vbp++] = ax;
323
+ vbd[vbp++] = ay;
324
+ vbd[vbp++] = bx;
325
+ vbd[vbp++] = by;
326
+ vbd[vbp++] = 0;
327
+ vbd[vbp++] = x;
328
+ vbd[vbp++] = y;
329
+ vbd[vbp++] = ax;
330
+ vbd[vbp++] = ay;
331
+ vbd[vbp++] = bx;
332
+ vbd[vbp++] = by;
333
+ vbd[vbp++] = 21;
334
+ vbd[vbp++] = x;
335
+ vbd[vbp++] = y;
336
+ vbd[vbp++] = ax;
337
+ vbd[vbp++] = ay;
338
+ vbd[vbp++] = bx;
339
+ vbd[vbp++] = by;
340
+ vbd[vbp++] = 22;
341
+ vbd[vbp++] = x;
342
+ vbd[vbp++] = y;
343
+ vbd[vbp++] = ax;
344
+ vbd[vbp++] = ay;
345
+ vbd[vbp++] = bx;
346
+ vbd[vbp++] = by;
347
+ vbd[vbp++] = 23;
348
+ vbd[vbp++] = x;
349
+ vbd[vbp++] = y;
350
+ vbd[vbp++] = ax;
351
+ vbd[vbp++] = ay;
352
+ vbd[vbp++] = bx;
353
+ vbd[vbp++] = by;
354
+ vbd[vbp++] = 24;
355
+ this._$vertexBufferPos = vbp;
356
+ }
357
+ /**
358
+ * @param {number} x 結合点のx座標
359
+ * @param {number} y 結合点のy座標
360
+ * @param {number} index1
361
+ * @param {number} index2
362
+ * @param {number} index3
363
+ * @param {number} index4
364
+ * @return {void}
365
+ * @method
366
+ * @static
367
+ * @private
368
+ */
369
+ static _$addBevelJoinMesh(x, y, index1, index2, index3, index4) {
370
+ const index0 = this._$vertexBufferPos / 7;
371
+ this._$expandIndexBufferIfNeeded(6);
372
+ const ibd = this._$indexBufferData;
373
+ let ibp = this._$indexBufferPos;
374
+ ibd[ibp++] = index0;
375
+ ibd[ibp++] = index1;
376
+ ibd[ibp++] = index2;
377
+ ibd[ibp++] = index0;
378
+ ibd[ibp++] = index3;
379
+ ibd[ibp++] = index4;
380
+ this._$indexBufferPos = ibp;
381
+ this._$expandVertexBufferIfNeeded(7);
382
+ const vbd = this._$vertexBufferData;
383
+ let vbp = this._$vertexBufferPos;
384
+ vbd[vbp++] = x;
385
+ vbd[vbp++] = y;
386
+ vbd[vbp++] = 0;
387
+ vbd[vbp++] = 0;
388
+ vbd[vbp++] = 0;
389
+ vbd[vbp++] = 0;
390
+ vbd[vbp++] = 0;
391
+ this._$vertexBufferPos = vbp;
392
+ }
393
+ /**
394
+ * @param {number} vertex_begin_offset 結合対象の頂点の範囲(開始)
395
+ * @param {number} vertex_end_offset 結合対象の頂点の範囲(終了)
396
+ * @return {void}
397
+ * @method
398
+ * @static
399
+ * @private
400
+ */
401
+ static _$generateLineCap(vertex_begin_offset, vertex_end_offset) {
402
+ const vbd = this._$vertexBufferData;
403
+ const stx1 = vbd[vertex_begin_offset];
404
+ const sty1 = vbd[vertex_begin_offset + 1];
405
+ const stx2 = vbd[vertex_begin_offset + 2];
406
+ const sty2 = vbd[vertex_begin_offset + 3];
407
+ const edx1 = vbd[vertex_end_offset - 7];
408
+ const edy1 = vbd[vertex_end_offset - 6];
409
+ const edx2 = vbd[vertex_end_offset - 5];
410
+ const edy2 = vbd[vertex_end_offset - 4];
411
+ const indexBeginOffset = vertex_begin_offset / 7;
412
+ const indexEndOffset = vertex_end_offset / 7;
413
+ // 始点st1と終点ed1が同じなら、線端は追加せずに結合する
414
+ if (stx1 === edx1 && sty1 === edy1) {
415
+ this._$addLineJoinMesh(edx2, edy2, stx1, sty1, stx2, sty2, indexEndOffset - 2, indexEndOffset - 1, indexBeginOffset, indexBeginOffset + 1);
416
+ return;
417
+ }
418
+ // 始点の線端を追加する
419
+ this._$addLineCapMesh(stx1, sty1, stx2, sty2, indexBeginOffset, indexBeginOffset + 1);
420
+ // 終点の線端を追加する
421
+ this._$addLineCapMesh(edx1, edy1, edx2, edy2, indexEndOffset - 1, indexEndOffset - 2);
422
+ }
423
+ /**
424
+ * @param {number} x1 線端のx座標
425
+ * @param {number} y1 線端のy座標
426
+ * @param {number} x2 もう一方の端点のx座標
427
+ * @param {number} y2 もう一方の端点のy座標
428
+ * @param {number} index1 端点から反時計回り側の頂点インデックス
429
+ * @param {number} index2 端点から時計回り側の頂点インデックス
430
+ * @return {void}
431
+ * @method
432
+ * @static
433
+ * @private
434
+ */
435
+ static _$addLineCapMesh(x1, y1, x2, y2, index1, index2) {
436
+ // 線端タイプに合わせたメッシュを追加する
437
+ switch (this._$lineCap) {
438
+ case "round":
439
+ this._$addRoundJoinMesh(x1, y1);
440
+ break;
441
+ case "square":
442
+ this._$addSquareCapMesh(x1, y1, x2, y2, index1, index2);
443
+ break;
444
+ default:
445
+ break;
446
+ }
447
+ }
448
+ /**
449
+ * @param {number} x1 線端のx座標
450
+ * @param {number} y1 線端のy座標
451
+ * @param {number} x2 もう一方の端点のx座標
452
+ * @param {number} y2 もう一方の端点のy座標
453
+ * @param {number} index1 端点から反時計回り側の頂点インデックス
454
+ * @param {number} index2 端点から時計回り側の頂点インデックス
455
+ * @return {void}
456
+ * @method
457
+ * @static
458
+ * @private
459
+ */
460
+ static _$addSquareCapMesh(x1, y1, x2, y2, index1, index2) {
461
+ const index3 = this._$vertexBufferPos / 7;
462
+ const index4 = index3 + 1;
463
+ this._$expandIndexBufferIfNeeded(6);
464
+ const ibd = this._$indexBufferData;
465
+ let ibp = this._$indexBufferPos;
466
+ ibd[ibp++] = index1;
467
+ ibd[ibp++] = index3;
468
+ ibd[ibp++] = index4;
469
+ ibd[ibp++] = index4;
470
+ ibd[ibp++] = index2;
471
+ ibd[ibp++] = index1;
472
+ this._$indexBufferPos = ibp;
473
+ this._$expandVertexBufferIfNeeded(14);
474
+ const vbd = this._$vertexBufferData;
475
+ let vbp = this._$vertexBufferPos;
476
+ vbd[vbp++] = x1;
477
+ vbd[vbp++] = y1;
478
+ vbd[vbp++] = x2;
479
+ vbd[vbp++] = y2;
480
+ vbd[vbp++] = -1;
481
+ vbd[vbp++] = -1;
482
+ vbd[vbp++] = 10;
483
+ vbd[vbp++] = x1;
484
+ vbd[vbp++] = y1;
485
+ vbd[vbp++] = x2;
486
+ vbd[vbp++] = y2;
487
+ vbd[vbp++] = 1;
488
+ vbd[vbp++] = 1;
489
+ vbd[vbp++] = 10;
490
+ this._$vertexBufferPos = vbp;
491
+ }
492
+ }
493
+ /**
494
+ * @param {number} x1
495
+ * @param {number} y1
496
+ * @param {number} x2
497
+ * @param {number} y2
498
+ * @return {number}
499
+ * @method
500
+ * @static
501
+ */
502
+ WebGLStrokeMeshGenerator._$cross = (x1, y1, x2, y2) => {
503
+ return x1 * y2 - x2 * y1;
504
+ };
@@ -0,0 +1,6 @@
1
+ export * from "./CanvasGradientToWebGL";
2
+ export * from "./CanvasPatternToWebGL";
3
+ export * from "./CanvasToWebGLContext";
4
+ export * from "./CanvasToWebGLContextPath";
5
+ export * from "./CanvasToWebGLContextStyle";
6
+ export * from "./FrameBufferManager";
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export * from "./CanvasGradientToWebGL";
2
+ export * from "./CanvasPatternToWebGL";
3
+ export * from "./CanvasToWebGLContext";
4
+ export * from "./CanvasToWebGLContextPath";
5
+ export * from "./CanvasToWebGLContextStyle";
6
+ export * from "./FrameBufferManager";
@@ -0,0 +1,11 @@
1
+ export interface AttachmentImpl {
2
+ width: number;
3
+ height: number;
4
+ color: WebGLTexture | WebGLRenderbuffer | null;
5
+ texture: WebGLTexture | null;
6
+ msaa: boolean;
7
+ stencil: WebGLRenderbuffer | null;
8
+ mask: boolean;
9
+ clipLevel: number;
10
+ isActive: boolean;
11
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ export interface BoundsImpl {
2
+ xMin: number;
3
+ xMax: number;
4
+ yMin: number;
5
+ yMax: number;
6
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export type CapsStyleImpl = "none" | "round" | "square";
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ export interface ClipObjectImpl {
2
+ vertexArrayObject: WebGLVertexArrayObject;
3
+ matrixA: number;
4
+ matrixB: number;
5
+ matrixC: number;
6
+ matrixD: number;
7
+ matrixE: number;
8
+ matrixF: number;
9
+ matrixG: number;
10
+ matrixH: number;
11
+ matrixI: number;
12
+ viewportWidth: number;
13
+ viewportHeight: number;
14
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ import { IndexRangeImpl } from "./IndexRangeImpl";
2
+ export interface FillMeshImpl {
3
+ vertexBufferData: Float32Array;
4
+ indexRanges: IndexRangeImpl[];
5
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export type GradientTypeImpl = "linear" | "radial";
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ export interface GridImpl {
2
+ x: number;
3
+ y: number;
4
+ w: number;
5
+ h: number;
6
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ export interface IndexRangeImpl {
2
+ first: number;
3
+ count: number;
4
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export type InterpolationMethodImpl = "rgb" | "linearRGB";
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export type JointStyleImpl = "bevel" | "miter" | "round";
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export type SpreadMethodImpl = "pad" | "reflect" | "repeat";
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ export interface StrokeMethImpl {
2
+ vertexBufferData: Float32Array;
3
+ indexBufferData: Int16Array;
4
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ export interface UniformDataImpl {
2
+ method?: Function;
3
+ array?: Int32Array | Float32Array;
4
+ assign?: number;
5
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export type VerticesImpl = Array<Array<number | boolean>>;
@@ -0,0 +1 @@
1
+ export {};