angular-three 2.0.0-beta.31 → 2.0.0-beta.310

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 (152) hide show
  1. package/README.md +221 -4
  2. package/esm2022/index.mjs +13 -13
  3. package/esm2022/lib/canvas.mjs +128 -200
  4. package/esm2022/lib/directives/args.mjs +46 -20
  5. package/esm2022/lib/directives/selection.mjs +65 -0
  6. package/esm2022/lib/dom/events.mjs +2 -2
  7. package/esm2022/lib/events.mjs +33 -31
  8. package/esm2022/lib/html.mjs +40 -0
  9. package/esm2022/lib/instance.mjs +43 -36
  10. package/esm2022/lib/loader.mjs +62 -31
  11. package/esm2022/lib/loop.mjs +28 -25
  12. package/esm2022/lib/pipes/hexify.mjs +67 -0
  13. package/esm2022/lib/portal.mjs +173 -193
  14. package/esm2022/lib/renderer/catalogue.mjs +2 -2
  15. package/esm2022/lib/renderer/constants.mjs +5 -6
  16. package/esm2022/lib/renderer/index.mjs +387 -234
  17. package/esm2022/lib/renderer/state.mjs +49 -0
  18. package/esm2022/lib/renderer/utils.mjs +107 -95
  19. package/esm2022/lib/roots.mjs +85 -61
  20. package/esm2022/lib/routed-scene.mjs +6 -7
  21. package/esm2022/lib/store.mjs +170 -194
  22. package/esm2022/lib/three-types.mjs +2 -2
  23. package/esm2022/lib/types.mjs +1 -1
  24. package/esm2022/lib/utils/apply-props.mjs +24 -28
  25. package/esm2022/lib/utils/attach.mjs +12 -9
  26. package/esm2022/lib/utils/before-render.mjs +12 -0
  27. package/esm2022/lib/utils/is.mjs +6 -5
  28. package/esm2022/lib/utils/make.mjs +19 -17
  29. package/esm2022/lib/utils/non-nullish.mjs +7 -0
  30. package/esm2022/lib/utils/object-events.mjs +92 -0
  31. package/esm2022/lib/utils/parameters.mjs +70 -0
  32. package/esm2022/lib/utils/resolve-ref.mjs +8 -0
  33. package/esm2022/lib/utils/signal-store.mjs +52 -58
  34. package/esm2022/lib/utils/update.mjs +8 -4
  35. package/esm2022/testing/angular-three-testing.mjs +5 -0
  36. package/esm2022/testing/index.mjs +3 -0
  37. package/esm2022/testing/lib/test-bed.mjs +130 -0
  38. package/esm2022/testing/lib/test-canvas.mjs +45 -0
  39. package/esm2022/testing/lib/utils/mock-canvas.mjs +37 -0
  40. package/esm2022/testing/lib/utils/web-gl-rendering-context.mjs +752 -0
  41. package/fesm2022/angular-three-testing.mjs +966 -0
  42. package/fesm2022/angular-three-testing.mjs.map +1 -0
  43. package/fesm2022/angular-three.mjs +2506 -2539
  44. package/fesm2022/angular-three.mjs.map +1 -1
  45. package/index.d.ts +14 -12
  46. package/lib/canvas.d.ts +366 -96
  47. package/lib/directives/args.d.ts +14 -7
  48. package/lib/directives/selection.d.ts +17 -0
  49. package/lib/dom/events.d.ts +2 -3
  50. package/lib/events.d.ts +4 -80
  51. package/lib/html.d.ts +17 -0
  52. package/lib/instance.d.ts +3 -35
  53. package/lib/loader.d.ts +18 -6
  54. package/lib/loop.d.ts +11 -59
  55. package/lib/pipes/hexify.d.ts +20 -0
  56. package/lib/portal.d.ts +54 -48
  57. package/lib/renderer/catalogue.d.ts +7 -3
  58. package/lib/renderer/constants.d.ts +4 -5
  59. package/lib/renderer/index.d.ts +64 -4
  60. package/lib/renderer/state.d.ts +24 -0
  61. package/lib/renderer/utils.d.ts +9 -27
  62. package/lib/roots.d.ts +9 -7
  63. package/lib/store.d.ts +13 -141
  64. package/lib/three-types.d.ts +500 -147
  65. package/lib/types.d.ts +291 -0
  66. package/lib/utils/apply-props.d.ts +1 -3
  67. package/lib/utils/attach.d.ts +3 -5
  68. package/lib/{before-render.d.ts → utils/before-render.d.ts} +1 -1
  69. package/lib/utils/is.d.ts +13 -14
  70. package/lib/utils/make.d.ts +7 -13
  71. package/lib/utils/non-nullish.d.ts +4 -0
  72. package/lib/utils/object-events.d.ts +34 -0
  73. package/lib/utils/parameters.d.ts +20 -0
  74. package/lib/utils/resolve-ref.d.ts +2 -0
  75. package/lib/utils/signal-store.d.ts +13 -4
  76. package/lib/utils/update.d.ts +1 -1
  77. package/metadata.json +1 -1
  78. package/package.json +40 -24
  79. package/plugin/generators.json +8 -30
  80. package/plugin/package.json +3 -22
  81. package/plugin/src/generators/add-soba/compat.js.map +1 -0
  82. package/plugin/src/generators/add-soba/generator.d.ts +3 -0
  83. package/plugin/src/generators/add-soba/generator.js +78 -0
  84. package/plugin/src/generators/add-soba/generator.js.map +1 -0
  85. package/plugin/src/generators/add-soba/schema.json +4 -0
  86. package/plugin/src/generators/init/compat.d.ts +1 -3
  87. package/plugin/src/generators/init/files/experience/experience.component.ts__tmpl__ +18 -7
  88. package/plugin/src/generators/init/generator.d.ts +5 -5
  89. package/plugin/src/generators/init/generator.js +100 -106
  90. package/plugin/src/generators/init/generator.js.map +1 -1
  91. package/plugin/src/generators/init/schema.json +8 -12
  92. package/plugin/src/generators/utils.js +4 -3
  93. package/plugin/src/generators/utils.js.map +1 -1
  94. package/plugin/src/generators/version.d.ts +17 -0
  95. package/plugin/src/generators/version.js +21 -0
  96. package/plugin/src/generators/version.js.map +1 -0
  97. package/plugin/src/index.d.ts +0 -3
  98. package/plugin/src/index.js +0 -9
  99. package/plugin/src/index.js.map +1 -1
  100. package/testing/README.md +3 -0
  101. package/testing/index.d.ts +2 -0
  102. package/testing/lib/test-bed.d.ts +38 -0
  103. package/testing/lib/test-canvas.d.ts +11 -0
  104. package/testing/lib/utils/mock-canvas.d.ts +5 -0
  105. package/testing/lib/utils/web-gl-rendering-context.d.ts +16 -0
  106. package/testing/package.json +3 -0
  107. package/web-types.json +1 -1
  108. package/esm2022/lib/before-render.mjs +0 -13
  109. package/esm2022/lib/directives/common.mjs +0 -41
  110. package/esm2022/lib/directives/key.mjs +0 -29
  111. package/esm2022/lib/directives/parent.mjs +0 -35
  112. package/esm2022/lib/ref.mjs +0 -48
  113. package/esm2022/lib/renderer/store.mjs +0 -408
  114. package/esm2022/lib/utils/safe-detect-changes.mjs +0 -17
  115. package/lib/directives/common.d.ts +0 -15
  116. package/lib/directives/key.d.ts +0 -10
  117. package/lib/directives/parent.d.ts +0 -11
  118. package/lib/ref.d.ts +0 -8
  119. package/lib/renderer/store.d.ts +0 -67
  120. package/lib/utils/safe-detect-changes.d.ts +0 -2
  121. package/plugin/migrations.json +0 -16
  122. package/plugin/src/generators/init/files/experience/experience.component.html__tmpl__ +0 -4
  123. package/plugin/src/generators/init-cannon/compat.js.map +0 -1
  124. package/plugin/src/generators/init-cannon/generator.d.ts +0 -2
  125. package/plugin/src/generators/init-cannon/generator.js +0 -23
  126. package/plugin/src/generators/init-cannon/generator.js.map +0 -1
  127. package/plugin/src/generators/init-cannon/schema.json +0 -6
  128. package/plugin/src/generators/init-postprocessing/compat.d.ts +0 -2
  129. package/plugin/src/generators/init-postprocessing/compat.js +0 -6
  130. package/plugin/src/generators/init-postprocessing/compat.js.map +0 -1
  131. package/plugin/src/generators/init-postprocessing/generator.d.ts +0 -2
  132. package/plugin/src/generators/init-postprocessing/generator.js +0 -21
  133. package/plugin/src/generators/init-postprocessing/generator.js.map +0 -1
  134. package/plugin/src/generators/init-postprocessing/schema.json +0 -6
  135. package/plugin/src/generators/init-soba/compat.d.ts +0 -2
  136. package/plugin/src/generators/init-soba/compat.js +0 -6
  137. package/plugin/src/generators/init-soba/compat.js.map +0 -1
  138. package/plugin/src/generators/init-soba/generator.d.ts +0 -2
  139. package/plugin/src/generators/init-soba/generator.js +0 -27
  140. package/plugin/src/generators/init-soba/generator.js.map +0 -1
  141. package/plugin/src/generators/init-soba/schema.json +0 -6
  142. package/plugin/src/generators/versions.d.ts +0 -13
  143. package/plugin/src/generators/versions.js +0 -17
  144. package/plugin/src/generators/versions.js.map +0 -1
  145. package/plugin/src/migrations/migrate-to-ngxtension/compat.d.ts +0 -2
  146. package/plugin/src/migrations/migrate-to-ngxtension/compat.js +0 -6
  147. package/plugin/src/migrations/migrate-to-ngxtension/compat.js.map +0 -1
  148. package/plugin/src/migrations/migrate-to-ngxtension/migrate-to-ngxtension.d.ts +0 -2
  149. package/plugin/src/migrations/migrate-to-ngxtension/migrate-to-ngxtension.js +0 -41
  150. package/plugin/src/migrations/migrate-to-ngxtension/migrate-to-ngxtension.js.map +0 -1
  151. /package/plugin/src/generators/{init-cannon → add-soba}/compat.d.ts +0 -0
  152. /package/plugin/src/generators/{init-cannon → add-soba}/compat.js +0 -0
@@ -0,0 +1,966 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, inject, ViewContainerRef, EnvironmentInjector, Injector, afterNextRender, effect, createEnvironmentInjector, DestroyRef, Component, ChangeDetectionStrategy, ENVIRONMENT_INITIALIZER, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
3
+ import { TestBed } from '@angular/core/testing';
4
+ import { extend, injectStore, provideNgtRenderer, provideStore, injectCanvasRootInitializer, NGT_STORE, getLocalState } from 'angular-three';
5
+ import * as THREE from 'three';
6
+
7
+ class NgtTestCanvas {
8
+ constructor() {
9
+ this.sceneGraph = input.required();
10
+ extend(THREE);
11
+ const vcr = inject(ViewContainerRef);
12
+ const parentEnvironmentInjector = inject(EnvironmentInjector);
13
+ const parentInjector = inject(Injector);
14
+ const store = injectStore();
15
+ afterNextRender(() => {
16
+ effect(() => {
17
+ const sceneGraph = this.sceneGraph();
18
+ this.environmentInjector = createEnvironmentInjector([provideNgtRenderer(store)], parentEnvironmentInjector);
19
+ this.ref = vcr.createComponent(sceneGraph, {
20
+ environmentInjector: this.environmentInjector,
21
+ injector: parentInjector,
22
+ });
23
+ this.ref.changeDetectorRef.detectChanges();
24
+ }, { injector: parentInjector });
25
+ });
26
+ inject(DestroyRef).onDestroy(() => {
27
+ this.environmentInjector?.destroy();
28
+ this.ref?.destroy();
29
+ });
30
+ }
31
+ destroy() {
32
+ this.environmentInjector?.destroy();
33
+ this.ref?.destroy();
34
+ }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtTestCanvas, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
36
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.3", type: NgtTestCanvas, isStandalone: true, selector: "ngt-test-canvas", inputs: { sceneGraph: { classPropertyName: "sceneGraph", publicName: "sceneGraph", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
37
+ }
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtTestCanvas, decorators: [{
39
+ type: Component,
40
+ args: [{
41
+ selector: 'ngt-test-canvas',
42
+ template: '',
43
+ standalone: true,
44
+ changeDetection: ChangeDetectionStrategy.OnPush,
45
+ }]
46
+ }], ctorParameters: () => [] });
47
+
48
+ const functions = [
49
+ 'activeTexture',
50
+ 'attachShader',
51
+ 'beginQuery',
52
+ 'beginTransformFeedback',
53
+ 'bindAttribLocation',
54
+ 'bindBufferBase',
55
+ 'bindBufferRange',
56
+ 'bindRenderbuffer',
57
+ 'bindSampler',
58
+ 'bindTransformFeedback',
59
+ 'bindVertexArray',
60
+ 'blendColor',
61
+ 'blendEquation',
62
+ 'blendEquationSeparate',
63
+ 'blendFunc',
64
+ 'blendFuncSeparate',
65
+ 'blitFramebuffer',
66
+ 'bufferData',
67
+ 'bufferSubData',
68
+ 'checkFramebufferStatus',
69
+ 'clientWaitSync',
70
+ 'compileShader',
71
+ 'compressedTexImage2D',
72
+ 'compressedTexImage3D',
73
+ 'compressedTexSubImage2D',
74
+ 'compressedTexSubImage3D',
75
+ 'copyBufferSubData',
76
+ 'copyTexImage2D',
77
+ 'copyTexSubImage2D',
78
+ 'copyTexSubImage3D',
79
+ 'createBuffer',
80
+ 'createFramebuffer',
81
+ 'createProgram',
82
+ 'createQuery',
83
+ 'createRenderbuffer',
84
+ 'createSampler',
85
+ 'createShader',
86
+ 'createTexture',
87
+ 'createTransformFeedback',
88
+ 'createVertexArray',
89
+ 'cullFace',
90
+ 'deleteBuffer',
91
+ 'deleteFramebuffer',
92
+ 'deleteProgram',
93
+ 'deleteQuery',
94
+ 'deleteRenderbuffer',
95
+ 'deleteSampler',
96
+ 'deleteShader',
97
+ 'deleteSync',
98
+ 'deleteTexture',
99
+ 'deleteTransformFeedback',
100
+ 'deleteVertexArray',
101
+ 'depthFunc',
102
+ 'depthMask',
103
+ 'depthRange',
104
+ 'detachShader',
105
+ 'disable',
106
+ 'drawArraysInstanced',
107
+ 'drawElementsInstanced',
108
+ 'drawRangeElements',
109
+ 'enable',
110
+ 'endQuery',
111
+ 'endTransformFeedback',
112
+ 'fenceSync',
113
+ 'finish',
114
+ 'flush',
115
+ 'framebufferRenderbuffer',
116
+ 'framebufferTexture2D',
117
+ 'framebufferTextureLayer',
118
+ 'frontFace',
119
+ 'generateMipmap',
120
+ 'getActiveAttrib',
121
+ 'getActiveUniform',
122
+ 'getActiveUniformBlockName',
123
+ 'getActiveUniformBlockParameter',
124
+ 'getActiveUniforms',
125
+ 'getAttachedShaders',
126
+ 'getAttribLocation',
127
+ 'getBufferParameter',
128
+ 'getBufferSubData',
129
+ 'getContextAttributes',
130
+ 'getError',
131
+ 'getExtension',
132
+ 'getFragDataLocation',
133
+ 'getFramebufferAttachmentParameter',
134
+ 'getIndexedParameter',
135
+ 'getInternalformatParameter',
136
+ 'getParameter',
137
+ 'getProgramInfoLog',
138
+ 'getProgramParameter',
139
+ 'getQuery',
140
+ 'getQueryParameter',
141
+ 'getRenderbufferParameter',
142
+ 'getSamplerParameter',
143
+ 'getShaderInfoLog',
144
+ 'getShaderParameter',
145
+ 'getShaderPrecisionFormat',
146
+ 'getShaderSource',
147
+ 'getSupportedExtensions',
148
+ 'getSyncParameter',
149
+ 'getTexParameter',
150
+ 'getTransformFeedbackVarying',
151
+ 'getUniform',
152
+ 'getUniformBlockIndex',
153
+ 'getUniformIndices',
154
+ 'getUniformLocation',
155
+ 'getVertexAttrib',
156
+ 'getVertexAttribOffset',
157
+ 'hint',
158
+ 'invalidateFramebuffer',
159
+ 'invalidateSubFramebuffer',
160
+ 'isBuffer',
161
+ 'isContextLost',
162
+ 'isEnabled',
163
+ 'isFramebuffer',
164
+ 'isProgram',
165
+ 'isQuery',
166
+ 'isRenderbuffer',
167
+ 'isSampler',
168
+ 'isShader',
169
+ 'isSync',
170
+ 'isTexture',
171
+ 'isTransformFeedback',
172
+ 'isVertexArray',
173
+ 'lineWidth',
174
+ 'linkProgram',
175
+ 'pauseTransformFeedback',
176
+ 'pixelStorei',
177
+ 'polygonOffset',
178
+ 'readBuffer',
179
+ 'readPixels',
180
+ 'renderbufferStorage',
181
+ 'renderbufferStorageMultisample',
182
+ 'resumeTransformFeedback',
183
+ 'sampleCoverage',
184
+ 'samplerParameterf',
185
+ 'samplerParameteri',
186
+ 'shaderSource',
187
+ 'stencilFunc',
188
+ 'stencilFuncSeparate',
189
+ 'stencilMask',
190
+ 'stencilMaskSeparate',
191
+ 'stencilOp',
192
+ 'stencilOpSeparate',
193
+ 'texImage2D',
194
+ 'texImage3D',
195
+ 'texParameterf',
196
+ 'texParameteri',
197
+ 'texStorage2D',
198
+ 'texStorage3D',
199
+ 'texSubImage2D',
200
+ 'texSubImage3D',
201
+ 'transformFeedbackVaryings',
202
+ 'uniform1ui',
203
+ 'uniform2ui',
204
+ 'uniform3ui',
205
+ 'uniform4ui',
206
+ 'uniformBlockBinding',
207
+ 'useProgram',
208
+ 'validateProgram',
209
+ 'vertexAttribDivisor',
210
+ 'vertexAttribI4i',
211
+ 'vertexAttribI4ui',
212
+ 'vertexAttribIPointer',
213
+ 'waitSync',
214
+ 'bindBuffer',
215
+ 'bindFramebuffer',
216
+ 'bindTexture',
217
+ 'clear',
218
+ 'clearBufferfi',
219
+ 'clearBufferfv',
220
+ 'clearBufferiv',
221
+ 'clearBufferuiv',
222
+ 'clearColor',
223
+ 'clearDepth',
224
+ 'clearStencil',
225
+ 'colorMask',
226
+ 'disableVertexAttribArray',
227
+ 'drawArrays',
228
+ 'drawBuffers',
229
+ 'drawElements',
230
+ 'enableVertexAttribArray',
231
+ 'scissor',
232
+ 'uniform1f',
233
+ 'uniform1fv',
234
+ 'uniform1i',
235
+ 'uniform1iv',
236
+ 'uniform1uiv',
237
+ 'uniform2f',
238
+ 'uniform2fv',
239
+ 'uniform2i',
240
+ 'uniform2iv',
241
+ 'uniform2uiv',
242
+ 'uniform3f',
243
+ 'uniform3fv',
244
+ 'uniform3i',
245
+ 'uniform3iv',
246
+ 'uniform3uiv',
247
+ 'uniform4f',
248
+ 'uniform4fv',
249
+ 'uniform4i',
250
+ 'uniform4iv',
251
+ 'uniform4uiv',
252
+ 'uniformMatrix2fv',
253
+ 'uniformMatrix2x3fv',
254
+ 'uniformMatrix2x4fv',
255
+ 'uniformMatrix3fv',
256
+ 'uniformMatrix3x2fv',
257
+ 'uniformMatrix3x4fv',
258
+ 'uniformMatrix4fv',
259
+ 'uniformMatrix4x2fv',
260
+ 'uniformMatrix4x3fv',
261
+ 'vertexAttrib1f',
262
+ 'vertexAttrib1fv',
263
+ 'vertexAttrib2f',
264
+ 'vertexAttrib2fv',
265
+ 'vertexAttrib3f',
266
+ 'vertexAttrib3fv',
267
+ 'vertexAttrib4f',
268
+ 'vertexAttrib4fv',
269
+ 'vertexAttribI4iv',
270
+ 'vertexAttribI4uiv',
271
+ 'vertexAttribPointer',
272
+ 'viewport',
273
+ 'makeXRCompatible',
274
+ ];
275
+ const enums = {
276
+ DEPTH_BUFFER_BIT: 256,
277
+ STENCIL_BUFFER_BIT: 1024,
278
+ COLOR_BUFFER_BIT: 16384,
279
+ POINTS: 0,
280
+ LINES: 1,
281
+ LINE_LOOP: 2,
282
+ LINE_STRIP: 3,
283
+ TRIANGLES: 4,
284
+ TRIANGLE_STRIP: 5,
285
+ TRIANGLE_FAN: 6,
286
+ ZERO: 0,
287
+ ONE: 1,
288
+ SRC_COLOR: 768,
289
+ ONE_MINUS_SRC_COLOR: 769,
290
+ SRC_ALPHA: 770,
291
+ ONE_MINUS_SRC_ALPHA: 771,
292
+ DST_ALPHA: 772,
293
+ ONE_MINUS_DST_ALPHA: 773,
294
+ DST_COLOR: 774,
295
+ ONE_MINUS_DST_COLOR: 775,
296
+ SRC_ALPHA_SATURATE: 776,
297
+ FUNC_ADD: 32774,
298
+ BLEND_EQUATION: 32777,
299
+ BLEND_EQUATION_RGB: 32777,
300
+ BLEND_EQUATION_ALPHA: 34877,
301
+ FUNC_SUBTRACT: 32778,
302
+ FUNC_REVERSE_SUBTRACT: 32779,
303
+ BLEND_DST_RGB: 32968,
304
+ BLEND_SRC_RGB: 32969,
305
+ BLEND_DST_ALPHA: 32970,
306
+ BLEND_SRC_ALPHA: 32971,
307
+ CONSTANT_COLOR: 32769,
308
+ ONE_MINUS_CONSTANT_COLOR: 32770,
309
+ CONSTANT_ALPHA: 32771,
310
+ ONE_MINUS_CONSTANT_ALPHA: 32772,
311
+ BLEND_COLOR: 32773,
312
+ ARRAY_BUFFER: 34962,
313
+ ELEMENT_ARRAY_BUFFER: 34963,
314
+ ARRAY_BUFFER_BINDING: 34964,
315
+ ELEMENT_ARRAY_BUFFER_BINDING: 34965,
316
+ STREAM_DRAW: 35040,
317
+ STATIC_DRAW: 35044,
318
+ DYNAMIC_DRAW: 35048,
319
+ BUFFER_SIZE: 34660,
320
+ BUFFER_USAGE: 34661,
321
+ CURRENT_VERTEX_ATTRIB: 34342,
322
+ FRONT: 1028,
323
+ BACK: 1029,
324
+ FRONT_AND_BACK: 1032,
325
+ TEXTURE_2D: 3553,
326
+ CULL_FACE: 2884,
327
+ BLEND: 3042,
328
+ DITHER: 3024,
329
+ STENCIL_TEST: 2960,
330
+ DEPTH_TEST: 2929,
331
+ SCISSOR_TEST: 3089,
332
+ POLYGON_OFFSET_FILL: 32823,
333
+ SAMPLE_ALPHA_TO_COVERAGE: 32926,
334
+ SAMPLE_COVERAGE: 32928,
335
+ NO_ERROR: 0,
336
+ INVALID_ENUM: 1280,
337
+ INVALID_VALUE: 1281,
338
+ INVALID_OPERATION: 1282,
339
+ OUT_OF_MEMORY: 1285,
340
+ CW: 2304,
341
+ CCW: 2305,
342
+ LINE_WIDTH: 2849,
343
+ ALIASED_POINT_SIZE_RANGE: 33901,
344
+ ALIASED_LINE_WIDTH_RANGE: 33902,
345
+ CULL_FACE_MODE: 2885,
346
+ FRONT_FACE: 2886,
347
+ DEPTH_RANGE: 2928,
348
+ DEPTH_WRITEMASK: 2930,
349
+ DEPTH_CLEAR_VALUE: 2931,
350
+ DEPTH_FUNC: 2932,
351
+ STENCIL_CLEAR_VALUE: 2961,
352
+ STENCIL_FUNC: 2962,
353
+ STENCIL_FAIL: 2964,
354
+ STENCIL_PASS_DEPTH_FAIL: 2965,
355
+ STENCIL_PASS_DEPTH_PASS: 2966,
356
+ STENCIL_REF: 2967,
357
+ STENCIL_VALUE_MASK: 2963,
358
+ STENCIL_WRITEMASK: 2968,
359
+ STENCIL_BACK_FUNC: 34816,
360
+ STENCIL_BACK_FAIL: 34817,
361
+ STENCIL_BACK_PASS_DEPTH_FAIL: 34818,
362
+ STENCIL_BACK_PASS_DEPTH_PASS: 34819,
363
+ STENCIL_BACK_REF: 36003,
364
+ STENCIL_BACK_VALUE_MASK: 36004,
365
+ STENCIL_BACK_WRITEMASK: 36005,
366
+ VIEWPORT: 2978,
367
+ SCISSOR_BOX: 3088,
368
+ COLOR_CLEAR_VALUE: 3106,
369
+ COLOR_WRITEMASK: 3107,
370
+ UNPACK_ALIGNMENT: 3317,
371
+ PACK_ALIGNMENT: 3333,
372
+ MAX_TEXTURE_SIZE: 3379,
373
+ MAX_VIEWPORT_DIMS: 3386,
374
+ SUBPIXEL_BITS: 3408,
375
+ RED_BITS: 3410,
376
+ GREEN_BITS: 3411,
377
+ BLUE_BITS: 3412,
378
+ ALPHA_BITS: 3413,
379
+ DEPTH_BITS: 3414,
380
+ STENCIL_BITS: 3415,
381
+ POLYGON_OFFSET_UNITS: 10752,
382
+ POLYGON_OFFSET_FACTOR: 32824,
383
+ TEXTURE_BINDING_2D: 32873,
384
+ SAMPLE_BUFFERS: 32936,
385
+ SAMPLES: 32937,
386
+ SAMPLE_COVERAGE_VALUE: 32938,
387
+ SAMPLE_COVERAGE_INVERT: 32939,
388
+ COMPRESSED_TEXTURE_FORMATS: 34467,
389
+ DONT_CARE: 4352,
390
+ FASTEST: 4353,
391
+ NICEST: 4354,
392
+ GENERATE_MIPMAP_HINT: 33170,
393
+ BYTE: 5120,
394
+ UNSIGNED_BYTE: 5121,
395
+ SHORT: 5122,
396
+ UNSIGNED_SHORT: 5123,
397
+ INT: 5124,
398
+ UNSIGNED_INT: 5125,
399
+ FLOAT: 5126,
400
+ DEPTH_COMPONENT: 6402,
401
+ ALPHA: 6406,
402
+ RGB: 6407,
403
+ RGBA: 6408,
404
+ LUMINANCE: 6409,
405
+ LUMINANCE_ALPHA: 6410,
406
+ UNSIGNED_SHORT_4_4_4_4: 32819,
407
+ UNSIGNED_SHORT_5_5_5_1: 32820,
408
+ UNSIGNED_SHORT_5_6_5: 33635,
409
+ FRAGMENT_SHADER: 35632,
410
+ VERTEX_SHADER: 35633,
411
+ MAX_VERTEX_ATTRIBS: 34921,
412
+ MAX_VERTEX_UNIFORM_VECTORS: 36347,
413
+ MAX_VARYING_VECTORS: 36348,
414
+ MAX_COMBINED_TEXTURE_IMAGE_UNITS: 35661,
415
+ MAX_VERTEX_TEXTURE_IMAGE_UNITS: 35660,
416
+ MAX_TEXTURE_IMAGE_UNITS: 34930,
417
+ MAX_FRAGMENT_UNIFORM_VECTORS: 36349,
418
+ SHADER_TYPE: 35663,
419
+ DELETE_STATUS: 35712,
420
+ LINK_STATUS: 35714,
421
+ VALIDATE_STATUS: 35715,
422
+ ATTACHED_SHADERS: 35717,
423
+ ACTIVE_UNIFORMS: 35718,
424
+ ACTIVE_ATTRIBUTES: 35721,
425
+ SHADING_LANGUAGE_VERSION: 35724,
426
+ CURRENT_PROGRAM: 35725,
427
+ NEVER: 512,
428
+ LESS: 513,
429
+ EQUAL: 514,
430
+ LEQUAL: 515,
431
+ GREATER: 516,
432
+ NOTEQUAL: 517,
433
+ GEQUAL: 518,
434
+ ALWAYS: 519,
435
+ KEEP: 7680,
436
+ REPLACE: 7681,
437
+ INCR: 7682,
438
+ DECR: 7683,
439
+ INVERT: 5386,
440
+ INCR_WRAP: 34055,
441
+ DECR_WRAP: 34056,
442
+ VENDOR: 7936,
443
+ RENDERER: 7937,
444
+ VERSION: 7938,
445
+ NEAREST: 9728,
446
+ LINEAR: 9729,
447
+ NEAREST_MIPMAP_NEAREST: 9984,
448
+ LINEAR_MIPMAP_NEAREST: 9985,
449
+ NEAREST_MIPMAP_LINEAR: 9986,
450
+ LINEAR_MIPMAP_LINEAR: 9987,
451
+ TEXTURE_MAG_FILTER: 10240,
452
+ TEXTURE_MIN_FILTER: 10241,
453
+ TEXTURE_WRAP_S: 10242,
454
+ TEXTURE_WRAP_T: 10243,
455
+ TEXTURE: 5890,
456
+ TEXTURE_CUBE_MAP: 34067,
457
+ TEXTURE_BINDING_CUBE_MAP: 34068,
458
+ TEXTURE_CUBE_MAP_POSITIVE_X: 34069,
459
+ TEXTURE_CUBE_MAP_NEGATIVE_X: 34070,
460
+ TEXTURE_CUBE_MAP_POSITIVE_Y: 34071,
461
+ TEXTURE_CUBE_MAP_NEGATIVE_Y: 34072,
462
+ TEXTURE_CUBE_MAP_POSITIVE_Z: 34073,
463
+ TEXTURE_CUBE_MAP_NEGATIVE_Z: 34074,
464
+ MAX_CUBE_MAP_TEXTURE_SIZE: 34076,
465
+ TEXTURE0: 33984,
466
+ TEXTURE1: 33985,
467
+ TEXTURE2: 33986,
468
+ TEXTURE3: 33987,
469
+ TEXTURE4: 33988,
470
+ TEXTURE5: 33989,
471
+ TEXTURE6: 33990,
472
+ TEXTURE7: 33991,
473
+ TEXTURE8: 33992,
474
+ TEXTURE9: 33993,
475
+ TEXTURE10: 33994,
476
+ TEXTURE11: 33995,
477
+ TEXTURE12: 33996,
478
+ TEXTURE13: 33997,
479
+ TEXTURE14: 33998,
480
+ TEXTURE15: 33999,
481
+ TEXTURE16: 34000,
482
+ TEXTURE17: 34001,
483
+ TEXTURE18: 34002,
484
+ TEXTURE19: 34003,
485
+ TEXTURE20: 34004,
486
+ TEXTURE21: 34005,
487
+ TEXTURE22: 34006,
488
+ TEXTURE23: 34007,
489
+ TEXTURE24: 34008,
490
+ TEXTURE25: 34009,
491
+ TEXTURE26: 34010,
492
+ TEXTURE27: 34011,
493
+ TEXTURE28: 34012,
494
+ TEXTURE29: 34013,
495
+ TEXTURE30: 34014,
496
+ TEXTURE31: 34015,
497
+ ACTIVE_TEXTURE: 34016,
498
+ REPEAT: 10497,
499
+ CLAMP_TO_EDGE: 33071,
500
+ MIRRORED_REPEAT: 33648,
501
+ FLOAT_VEC2: 35664,
502
+ FLOAT_VEC3: 35665,
503
+ FLOAT_VEC4: 35666,
504
+ INT_VEC2: 35667,
505
+ INT_VEC3: 35668,
506
+ INT_VEC4: 35669,
507
+ BOOL: 35670,
508
+ BOOL_VEC2: 35671,
509
+ BOOL_VEC3: 35672,
510
+ BOOL_VEC4: 35673,
511
+ FLOAT_MAT2: 35674,
512
+ FLOAT_MAT3: 35675,
513
+ FLOAT_MAT4: 35676,
514
+ SAMPLER_2D: 35678,
515
+ SAMPLER_CUBE: 35680,
516
+ VERTEX_ATTRIB_ARRAY_ENABLED: 34338,
517
+ VERTEX_ATTRIB_ARRAY_SIZE: 34339,
518
+ VERTEX_ATTRIB_ARRAY_STRIDE: 34340,
519
+ VERTEX_ATTRIB_ARRAY_TYPE: 34341,
520
+ VERTEX_ATTRIB_ARRAY_NORMALIZED: 34922,
521
+ VERTEX_ATTRIB_ARRAY_POINTER: 34373,
522
+ VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 34975,
523
+ IMPLEMENTATION_COLOR_READ_TYPE: 35738,
524
+ IMPLEMENTATION_COLOR_READ_FORMAT: 35739,
525
+ COMPILE_STATUS: 35713,
526
+ LOW_FLOAT: 36336,
527
+ MEDIUM_FLOAT: 36337,
528
+ HIGH_FLOAT: 36338,
529
+ LOW_INT: 36339,
530
+ MEDIUM_INT: 36340,
531
+ HIGH_INT: 36341,
532
+ FRAMEBUFFER: 36160,
533
+ RENDERBUFFER: 36161,
534
+ RGBA4: 32854,
535
+ RGB5_A1: 32855,
536
+ RGB565: 36194,
537
+ DEPTH_COMPONENT16: 33189,
538
+ STENCIL_INDEX: 6401,
539
+ STENCIL_INDEX8: 36168,
540
+ DEPTH_STENCIL: 34041,
541
+ RENDERBUFFER_WIDTH: 36162,
542
+ RENDERBUFFER_HEIGHT: 36163,
543
+ RENDERBUFFER_INTERNAL_FORMAT: 36164,
544
+ RENDERBUFFER_RED_SIZE: 36176,
545
+ RENDERBUFFER_GREEN_SIZE: 36177,
546
+ RENDERBUFFER_BLUE_SIZE: 36178,
547
+ RENDERBUFFER_ALPHA_SIZE: 36179,
548
+ RENDERBUFFER_DEPTH_SIZE: 36180,
549
+ RENDERBUFFER_STENCIL_SIZE: 36181,
550
+ FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 36048,
551
+ FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 36049,
552
+ FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 36050,
553
+ FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 36051,
554
+ COLOR_ATTACHMENT0: 36064,
555
+ DEPTH_ATTACHMENT: 36096,
556
+ STENCIL_ATTACHMENT: 36128,
557
+ DEPTH_STENCIL_ATTACHMENT: 33306,
558
+ NONE: 0,
559
+ FRAMEBUFFER_COMPLETE: 36053,
560
+ FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 36054,
561
+ FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 36055,
562
+ FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 36057,
563
+ FRAMEBUFFER_UNSUPPORTED: 36061,
564
+ FRAMEBUFFER_BINDING: 36006,
565
+ RENDERBUFFER_BINDING: 36007,
566
+ MAX_RENDERBUFFER_SIZE: 34024,
567
+ INVALID_FRAMEBUFFER_OPERATION: 1286,
568
+ UNPACK_FLIP_Y_WEBGL: 37440,
569
+ UNPACK_PREMULTIPLY_ALPHA_WEBGL: 37441,
570
+ CONTEXT_LOST_WEBGL: 37442,
571
+ UNPACK_COLORSPACE_CONVERSION_WEBGL: 37443,
572
+ BROWSER_DEFAULT_WEBGL: 37444,
573
+ READ_BUFFER: 3074,
574
+ UNPACK_ROW_LENGTH: 3314,
575
+ UNPACK_SKIP_ROWS: 3315,
576
+ UNPACK_SKIP_PIXELS: 3316,
577
+ PACK_ROW_LENGTH: 3330,
578
+ PACK_SKIP_ROWS: 3331,
579
+ PACK_SKIP_PIXELS: 3332,
580
+ COLOR: 6144,
581
+ DEPTH: 6145,
582
+ STENCIL: 6146,
583
+ RED: 6403,
584
+ UNPACK_SKIP_IMAGES: 32877,
585
+ UNPACK_IMAGE_HEIGHT: 32878,
586
+ TEXTURE_WRAP_R: 32882,
587
+ MAX_ELEMENTS_VERTICES: 33000,
588
+ MAX_ELEMENTS_INDICES: 33001,
589
+ TEXTURE_MIN_LOD: 33082,
590
+ TEXTURE_MAX_LOD: 33083,
591
+ TEXTURE_BASE_LEVEL: 33084,
592
+ TEXTURE_MAX_LEVEL: 33085,
593
+ MIN: 32775,
594
+ MAX: 32776,
595
+ MAX_TEXTURE_LOD_BIAS: 34045,
596
+ TEXTURE_COMPARE_MODE: 34892,
597
+ TEXTURE_COMPARE_FUNC: 34893,
598
+ CURRENT_QUERY: 34917,
599
+ QUERY_RESULT: 34918,
600
+ QUERY_RESULT_AVAILABLE: 34919,
601
+ STREAM_READ: 35041,
602
+ STREAM_COPY: 35042,
603
+ STATIC_READ: 35045,
604
+ STATIC_COPY: 35046,
605
+ DYNAMIC_READ: 35049,
606
+ DYNAMIC_COPY: 35050,
607
+ MAX_DRAW_BUFFERS: 34852,
608
+ MAX_FRAGMENT_UNIFORM_COMPONENTS: 35657,
609
+ MAX_VERTEX_UNIFORM_COMPONENTS: 35658,
610
+ FRAGMENT_SHADER_DERIVATIVE_HINT: 35723,
611
+ PIXEL_PACK_BUFFER: 35051,
612
+ PIXEL_UNPACK_BUFFER: 35052,
613
+ PIXEL_PACK_BUFFER_BINDING: 35053,
614
+ PIXEL_UNPACK_BUFFER_BINDING: 35055,
615
+ SRGB: 35904,
616
+ COMPARE_REF_TO_TEXTURE: 34894,
617
+ VERTEX_ATTRIB_ARRAY_INTEGER: 35069,
618
+ MAX_ARRAY_TEXTURE_LAYERS: 35071,
619
+ MIN_PROGRAM_TEXEL_OFFSET: 35076,
620
+ MAX_PROGRAM_TEXEL_OFFSET: 35077,
621
+ MAX_VARYING_COMPONENTS: 35659,
622
+ TRANSFORM_FEEDBACK_BUFFER_MODE: 35967,
623
+ MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: 35968,
624
+ TRANSFORM_FEEDBACK_VARYINGS: 35971,
625
+ TRANSFORM_FEEDBACK_BUFFER_START: 35972,
626
+ TRANSFORM_FEEDBACK_BUFFER_SIZE: 35973,
627
+ TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 35976,
628
+ RASTERIZER_DISCARD: 35977,
629
+ MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 35978,
630
+ MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 35979,
631
+ INTERLEAVED_ATTRIBS: 35980,
632
+ SEPARATE_ATTRIBS: 35981,
633
+ TRANSFORM_FEEDBACK_BUFFER: 35982,
634
+ TRANSFORM_FEEDBACK_BUFFER_BINDING: 35983,
635
+ RED_INTEGER: 36244,
636
+ RGB_INTEGER: 36248,
637
+ RGBA_INTEGER: 36249,
638
+ SAMPLER_CUBE_SHADOW: 36293,
639
+ INT_SAMPLER_CUBE: 36300,
640
+ UNSIGNED_INT_SAMPLER_CUBE: 36308,
641
+ FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: 33296,
642
+ FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: 33297,
643
+ FRAMEBUFFER_ATTACHMENT_RED_SIZE: 33298,
644
+ FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 33299,
645
+ FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 33300,
646
+ FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 33301,
647
+ FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 33302,
648
+ FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 33303,
649
+ FRAMEBUFFER_DEFAULT: 33304,
650
+ UNSIGNED_NORMALIZED: 35863,
651
+ DRAW_FRAMEBUFFER_BINDING: 36006,
652
+ READ_FRAMEBUFFER: 36008,
653
+ DRAW_FRAMEBUFFER: 36009,
654
+ READ_FRAMEBUFFER_BINDING: 36010,
655
+ RENDERBUFFER_SAMPLES: 36011,
656
+ FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: 36052,
657
+ MAX_COLOR_ATTACHMENTS: 36063,
658
+ FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 36182,
659
+ MAX_SAMPLES: 36183,
660
+ HALF_FLOAT: 5131,
661
+ RG: 33319,
662
+ RG_INTEGER: 33320,
663
+ VERTEX_ARRAY_BINDING: 34229,
664
+ SIGNED_NORMALIZED: 36764,
665
+ COPY_READ_BUFFER: 36662,
666
+ COPY_WRITE_BUFFER: 36663,
667
+ COPY_READ_BUFFER_BINDING: 36662,
668
+ COPY_WRITE_BUFFER_BINDING: 36663,
669
+ UNIFORM_BUFFER: 35345,
670
+ UNIFORM_BUFFER_BINDING: 35368,
671
+ UNIFORM_BUFFER_START: 35369,
672
+ UNIFORM_BUFFER_SIZE: 35370,
673
+ MAX_VERTEX_UNIFORM_BLOCKS: 35371,
674
+ MAX_FRAGMENT_UNIFORM_BLOCKS: 35373,
675
+ MAX_COMBINED_UNIFORM_BLOCKS: 35374,
676
+ MAX_UNIFORM_BUFFER_BINDINGS: 35375,
677
+ MAX_UNIFORM_BLOCK_SIZE: 35376,
678
+ MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: 35377,
679
+ MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: 35379,
680
+ UNIFORM_BUFFER_OFFSET_ALIGNMENT: 35380,
681
+ ACTIVE_UNIFORM_BLOCKS: 35382,
682
+ UNIFORM_TYPE: 35383,
683
+ UNIFORM_SIZE: 35384,
684
+ UNIFORM_BLOCK_INDEX: 35386,
685
+ UNIFORM_OFFSET: 35387,
686
+ UNIFORM_ARRAY_STRIDE: 35388,
687
+ UNIFORM_MATRIX_STRIDE: 35389,
688
+ UNIFORM_IS_ROW_MAJOR: 35390,
689
+ UNIFORM_BLOCK_BINDING: 35391,
690
+ UNIFORM_BLOCK_DATA_SIZE: 35392,
691
+ UNIFORM_BLOCK_ACTIVE_UNIFORMS: 35394,
692
+ UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 35395,
693
+ UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 35396,
694
+ UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 35398,
695
+ INVALID_INDEX: 4294967295,
696
+ MAX_VERTEX_OUTPUT_COMPONENTS: 37154,
697
+ MAX_FRAGMENT_INPUT_COMPONENTS: 37157,
698
+ MAX_SERVER_WAIT_TIMEOUT: 37137,
699
+ OBJECT_TYPE: 37138,
700
+ SYNC_CONDITION: 37139,
701
+ SYNC_STATUS: 37140,
702
+ SYNC_FLAGS: 37141,
703
+ SYNC_FENCE: 37142,
704
+ SYNC_GPU_COMMANDS_COMPLETE: 37143,
705
+ UNSIGNALED: 37144,
706
+ SIGNALED: 37145,
707
+ ALREADY_SIGNALED: 37146,
708
+ TIMEOUT_EXPIRED: 37147,
709
+ CONDITION_SATISFIED: 37148,
710
+ WAIT_FAILED: 37149,
711
+ SYNC_FLUSH_COMMANDS_BIT: 1,
712
+ VERTEX_ATTRIB_ARRAY_DIVISOR: 35070,
713
+ ANY_SAMPLES_PASSED: 35887,
714
+ ANY_SAMPLES_PASSED_CONSERVATIVE: 36202,
715
+ SAMPLER_BINDING: 35097,
716
+ TRANSFORM_FEEDBACK: 36386,
717
+ TRANSFORM_FEEDBACK_PAUSED: 36387,
718
+ TRANSFORM_FEEDBACK_ACTIVE: 36388,
719
+ TRANSFORM_FEEDBACK_BINDING: 36389,
720
+ TEXTURE_IMMUTABLE_FORMAT: 37167,
721
+ MAX_ELEMENT_INDEX: 36203,
722
+ TEXTURE_IMMUTABLE_LEVELS: 33503,
723
+ TIMEOUT_IGNORED: -1,
724
+ MAX_CLIENT_WAIT_TIMEOUT_WEBGL: 37447,
725
+ };
726
+ const extensions = {
727
+ // ratified
728
+ OES_texture_float: {},
729
+ OES_texture_half_float: {},
730
+ WEBGL_lose_context: {
731
+ loseContext: () => { },
732
+ },
733
+ OES_standard_derivatives: {},
734
+ OES_vertex_array_object: {
735
+ createVertexArrayOES: () => { },
736
+ bindVertexArrayOES: () => { },
737
+ deleteVertexArrayOES: () => { },
738
+ },
739
+ WEBGL_debug_renderer_info: null,
740
+ WEBGL_debug_shaders: null,
741
+ WEBGL_compressed_texture_s3tc: null,
742
+ WEBGL_depth_texture: {},
743
+ OES_element_index_uint: {},
744
+ EXT_texture_filter_anisotropic: null,
745
+ EXT_frag_depth: {},
746
+ WEBGL_draw_buffers: {},
747
+ ANGLE_instanced_arrays: null,
748
+ OES_texture_float_linear: null,
749
+ OES_texture_half_float_linear: null,
750
+ EXT_blend_minmax: { MIN_EXT: 0, MAX_EXT: 0 },
751
+ EXT_shader_texture_lod: null,
752
+ // community
753
+ WEBGL_compressed_texture_atc: null,
754
+ WEBGL_compressed_texture_pvrtc: null,
755
+ EXT_color_buffer_half_float: null,
756
+ WEBGL_color_buffer_float: null,
757
+ EXT_sRGB: null,
758
+ WEBGL_compressed_texture_etc1: null,
759
+ };
760
+ class WebGL2RenderingContext {
761
+ constructor(canvas) {
762
+ this.getShaderPrecisionFormat = () => {
763
+ return {
764
+ rangeMin: 127,
765
+ rangeMax: 127,
766
+ precision: 23,
767
+ };
768
+ };
769
+ this.GL_VERSION = 7938;
770
+ this.SCISSOR_BOX = 3088;
771
+ this.VIEWPORT = 2978;
772
+ this.getProgramInfoLog = () => '';
773
+ this.getShaderInfoLog = () => '';
774
+ // @ts-ignore
775
+ this.canvas = canvas;
776
+ // @ts-ignore
777
+ this.drawingBufferWidth = canvas.width;
778
+ // @ts-ignore
779
+ this.drawingBufferHeight = canvas.height;
780
+ for (const method of functions) {
781
+ this[method] ??= () => { };
782
+ }
783
+ Object.assign(this, enums);
784
+ }
785
+ // @ts-ignore
786
+ getParameter(paramId) {
787
+ switch (paramId) {
788
+ case this.GL_VERSION:
789
+ return ['WebGL2'];
790
+ case this.SCISSOR_BOX:
791
+ case this.VIEWPORT:
792
+ return [0, 0, 1, 1];
793
+ }
794
+ }
795
+ getExtension(ext) {
796
+ return extensions[ext];
797
+ }
798
+ }
799
+
800
+ function createMockCanvas({ width = 1280, height = 800, beforeReturn, }) {
801
+ let canvas;
802
+ if (typeof document !== 'undefined' && typeof document.createElement === 'function') {
803
+ canvas = document.createElement('canvas');
804
+ }
805
+ else {
806
+ canvas = {
807
+ style: {},
808
+ addEventListener: (() => { }),
809
+ removeEventListener: (() => { }),
810
+ clientWidth: width,
811
+ clientHeight: height,
812
+ getContext: (() => new WebGL2RenderingContext(canvas)),
813
+ };
814
+ }
815
+ canvas.width = width;
816
+ canvas.height = height;
817
+ if (globalThis.HTMLCanvasElement) {
818
+ const getContext = HTMLCanvasElement.prototype.getContext;
819
+ HTMLCanvasElement.prototype.getContext = function (...args) {
820
+ const id = args[0];
821
+ if (id.startsWith('webgl'))
822
+ return new WebGL2RenderingContext(this);
823
+ return getContext.apply(this, args);
824
+ };
825
+ }
826
+ beforeReturn?.(canvas);
827
+ class WebGLRenderingContext extends WebGL2RenderingContext {
828
+ }
829
+ // @ts-expect-error - WebGLRenderingContext is not defined in the global scope for non-browser
830
+ globalThis.WebGLRenderingContext ??= WebGLRenderingContext;
831
+ // @ts-expect-error - WebGL2RenderingContext is not defined in the global scope for non-browser
832
+ globalThis.WebGL2RenderingContext ??= WebGL2RenderingContext;
833
+ return canvas;
834
+ }
835
+
836
+ class NgtTestBed {
837
+ static create(sceneGraph, { mockCanvasOptions = {}, canvasConfiguration = {}, errorOnUnknownElements, providers, declarations, imports, teardown, deferBlockBehavior, } = {}) {
838
+ const mockedCanvas = createMockCanvas(mockCanvasOptions);
839
+ const fixture = TestBed.configureTestingModule({
840
+ providers: [
841
+ provideStore(),
842
+ {
843
+ provide: ENVIRONMENT_INITIALIZER,
844
+ useFactory: () => {
845
+ const initRoot = injectCanvasRootInitializer();
846
+ return () => {
847
+ const configurator = initRoot(mockedCanvas);
848
+ configurator.configure({
849
+ frameloop: 'never',
850
+ size: {
851
+ width: mockCanvasOptions.width ?? 1280,
852
+ height: mockCanvasOptions.height ?? 800,
853
+ top: 0,
854
+ left: 0,
855
+ },
856
+ ...canvasConfiguration,
857
+ events: undefined,
858
+ });
859
+ };
860
+ },
861
+ multi: true,
862
+ },
863
+ ...(providers ?? []),
864
+ ],
865
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
866
+ errorOnUnknownElements: errorOnUnknownElements ?? false,
867
+ declarations,
868
+ imports,
869
+ teardown,
870
+ deferBlockBehavior,
871
+ }).createComponent(NgtTestCanvas);
872
+ fixture.componentRef.setInput('sceneGraph', sceneGraph);
873
+ fixture.detectChanges();
874
+ const store = TestBed.inject(NGT_STORE);
875
+ TestBed.flushEffects();
876
+ return {
877
+ store,
878
+ fixture,
879
+ scene: store.snapshot.scene,
880
+ sceneInstanceNode: getLocalState(store.snapshot.scene),
881
+ canvas: mockedCanvas,
882
+ destroy: fixture.componentInstance.destroy.bind(fixture.componentInstance),
883
+ fireEvent: this.createEventFirer(store, fixture),
884
+ advance: this.createAdvance(store),
885
+ toGraph: this.createToGraph(store),
886
+ };
887
+ }
888
+ static createToGraph(store) {
889
+ function graphify(type, name, children) {
890
+ return { type, name, children };
891
+ }
892
+ function toGraph(node) {
893
+ return node.children.map((child) => graphify(child.type, child.name || '', toGraph(child)));
894
+ }
895
+ return () => {
896
+ const state = store.snapshot;
897
+ return toGraph(state.scene);
898
+ };
899
+ }
900
+ static createAdvance(store) {
901
+ return async (frames, delta = 1) => {
902
+ const state = store.snapshot;
903
+ const subscribers = state.internal.subscribers;
904
+ const promises = [];
905
+ for (const subscriber of subscribers) {
906
+ for (let i = 0; i < frames; i++) {
907
+ if (Array.isArray(delta)) {
908
+ promises.push(new Promise((res) => {
909
+ subscriber.callback({ ...state, delta: delta[i] || delta[-1] });
910
+ res();
911
+ }));
912
+ }
913
+ else {
914
+ promises.push(new Promise((res) => {
915
+ subscriber.callback({ ...state, delta });
916
+ res();
917
+ }));
918
+ }
919
+ }
920
+ }
921
+ await Promise.all(promises);
922
+ };
923
+ }
924
+ static createEventFirer(store, fixture) {
925
+ let autoDetectChanges = true;
926
+ async function fireEvent(el, eventName, eventData = {}) {
927
+ const localState = getLocalState(el);
928
+ if (!localState) {
929
+ console.warn(`[NGT Test] ${el} has no local state`);
930
+ return;
931
+ }
932
+ const handler = localState.handlers[eventName];
933
+ if (!handler) {
934
+ console.warn(`[NGT Test] ${el} has no ${eventName} handler`);
935
+ return;
936
+ }
937
+ const raycastEvent = {
938
+ camera: store.snapshot.camera,
939
+ stopPropagation: () => { },
940
+ target: el,
941
+ currentTarget: el,
942
+ sourceEvent: eventData,
943
+ nativeEvent: eventData,
944
+ object: el,
945
+ eventObject: el,
946
+ ...eventData,
947
+ };
948
+ const result = await handler(raycastEvent);
949
+ if (autoDetectChanges) {
950
+ fixture.detectChanges();
951
+ }
952
+ return result;
953
+ }
954
+ fireEvent.setAutoDetectChanges = (auto) => {
955
+ autoDetectChanges = auto;
956
+ };
957
+ return fireEvent;
958
+ }
959
+ }
960
+
961
+ /**
962
+ * Generated bundle index. Do not edit.
963
+ */
964
+
965
+ export { NgtTestBed, NgtTestCanvas };
966
+ //# sourceMappingURL=angular-three-testing.mjs.map