super-three 0.154.1 → 0.156.0

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 (172) hide show
  1. package/build/three.cjs +360 -160
  2. package/build/three.js +360 -160
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +355 -161
  5. package/build/three.module.min.js +1 -1
  6. package/examples/jsm/controls/OrbitControls.js +155 -25
  7. package/examples/jsm/csm/CSMShader.js +35 -1
  8. package/examples/jsm/environments/RoomEnvironment.js +1 -1
  9. package/examples/jsm/exporters/USDZExporter.js +1 -0
  10. package/examples/jsm/interactive/SelectionHelper.js +7 -0
  11. package/examples/jsm/libs/tween.module.js +790 -735
  12. package/examples/jsm/libs/utif.module.js +1644 -1558
  13. package/examples/jsm/loaders/DDSLoader.js +46 -3
  14. package/examples/jsm/loaders/EXRLoader.js +4 -4
  15. package/examples/jsm/loaders/FBXLoader.js +3 -1
  16. package/examples/jsm/loaders/GLTFLoader.js +25 -10
  17. package/examples/jsm/loaders/KTX2Loader.js +128 -79
  18. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  19. package/examples/jsm/loaders/LogLuvLoader.js +2 -2
  20. package/examples/jsm/loaders/MMDLoader.js +10 -7
  21. package/examples/jsm/loaders/NRRDLoader.js +3 -3
  22. package/examples/jsm/loaders/PLYLoader.js +1 -1
  23. package/examples/jsm/loaders/RGBELoader.js +48 -66
  24. package/examples/jsm/loaders/STLLoader.js +7 -0
  25. package/examples/jsm/loaders/TGALoader.js +10 -10
  26. package/examples/jsm/loaders/VRMLLoader.js +1 -1
  27. package/examples/jsm/misc/GPUComputationRenderer.js +0 -9
  28. package/examples/jsm/misc/Volume.js +4 -6
  29. package/examples/jsm/nodes/Nodes.js +8 -6
  30. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +29 -3
  31. package/examples/jsm/nodes/accessors/CubeTextureNode.js +20 -3
  32. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +15 -4
  33. package/examples/jsm/nodes/accessors/InstanceNode.js +8 -8
  34. package/examples/jsm/nodes/accessors/LineMaterialNode.js +31 -0
  35. package/examples/jsm/nodes/accessors/MaterialNode.js +73 -61
  36. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +3 -0
  37. package/examples/jsm/nodes/accessors/Object3DNode.js +2 -2
  38. package/examples/jsm/nodes/accessors/SceneNode.js +6 -0
  39. package/examples/jsm/nodes/accessors/TextureNode.js +54 -9
  40. package/examples/jsm/nodes/accessors/TextureStoreNode.js +29 -0
  41. package/examples/jsm/nodes/core/AttributeNode.js +2 -2
  42. package/examples/jsm/nodes/core/LightingModel.js +7 -9
  43. package/examples/jsm/nodes/core/Node.js +28 -3
  44. package/examples/jsm/nodes/core/NodeBuilder.js +94 -12
  45. package/examples/jsm/nodes/core/NodeUniform.js +1 -1
  46. package/examples/jsm/nodes/core/OutputStructNode.js +58 -0
  47. package/examples/jsm/nodes/core/PropertyNode.js +6 -0
  48. package/examples/jsm/nodes/core/StackNode.js +4 -4
  49. package/examples/jsm/nodes/core/StructTypeNode.js +24 -0
  50. package/examples/jsm/nodes/display/BumpMapNode.js +77 -0
  51. package/examples/jsm/nodes/display/NormalMapNode.js +2 -2
  52. package/examples/jsm/nodes/display/ViewportNode.js +19 -5
  53. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -2
  54. package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +13 -0
  55. package/examples/jsm/nodes/functions/PhongLightingModel.js +53 -14
  56. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +236 -97
  57. package/examples/jsm/nodes/geometry/RangeNode.js +2 -2
  58. package/examples/jsm/nodes/gpgpu/ComputeNode.js +13 -0
  59. package/examples/jsm/nodes/lighting/AONode.js +1 -1
  60. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +58 -20
  61. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +7 -10
  62. package/examples/jsm/nodes/lighting/EnvironmentNode.js +22 -12
  63. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +1 -1
  64. package/examples/jsm/nodes/lighting/LightingContextNode.js +12 -9
  65. package/examples/jsm/nodes/lighting/PointLightNode.js +7 -10
  66. package/examples/jsm/nodes/lighting/SpotLightNode.js +7 -10
  67. package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +54 -0
  68. package/examples/jsm/nodes/materials/Materials.js +2 -0
  69. package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +34 -0
  70. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -0
  71. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +2 -2
  72. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +19 -2
  73. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +2 -2
  74. package/examples/jsm/nodes/materials/NodeMaterial.js +61 -26
  75. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +2 -2
  76. package/examples/jsm/nodes/math/HashNode.js +35 -0
  77. package/examples/jsm/nodes/shadernode/ShaderNode.js +6 -2
  78. package/examples/jsm/nodes/utils/SplitNode.js +1 -1
  79. package/examples/jsm/objects/Reflector.js +1 -9
  80. package/examples/jsm/objects/Refractor.js +0 -8
  81. package/examples/jsm/offscreen/scene.js +0 -1
  82. package/examples/jsm/postprocessing/FilmPass.js +3 -5
  83. package/examples/jsm/postprocessing/MaskPass.js +4 -1
  84. package/examples/jsm/postprocessing/OutputPass.js +33 -14
  85. package/examples/jsm/postprocessing/RenderPass.js +30 -12
  86. package/examples/jsm/postprocessing/SAOPass.js +23 -98
  87. package/examples/jsm/postprocessing/SSAOPass.js +10 -30
  88. package/examples/jsm/postprocessing/UnrealBloomPass.js +21 -17
  89. package/examples/jsm/renderers/common/Backend.js +11 -8
  90. package/examples/jsm/renderers/common/Background.js +22 -20
  91. package/examples/jsm/renderers/common/Binding.js +14 -0
  92. package/examples/jsm/renderers/common/Bindings.js +7 -10
  93. package/examples/jsm/renderers/common/Geometries.js +1 -1
  94. package/examples/jsm/renderers/common/Pipelines.js +96 -47
  95. package/examples/jsm/renderers/common/RenderContext.js +1 -0
  96. package/examples/jsm/renderers/common/RenderContexts.js +41 -5
  97. package/examples/jsm/renderers/common/RenderList.js +12 -4
  98. package/examples/jsm/renderers/common/RenderObject.js +26 -6
  99. package/examples/jsm/renderers/common/RenderObjects.js +10 -7
  100. package/examples/jsm/renderers/common/Renderer.js +82 -42
  101. package/examples/jsm/renderers/common/SampledTexture.js +2 -1
  102. package/examples/jsm/renderers/common/Sampler.js +1 -1
  103. package/examples/jsm/renderers/common/StorageBuffer.js +1 -1
  104. package/examples/jsm/renderers/common/Textures.js +172 -20
  105. package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +2 -2
  106. package/examples/jsm/renderers/common/nodes/NodeSampler.js +1 -1
  107. package/examples/jsm/renderers/common/nodes/Nodes.js +58 -13
  108. package/examples/jsm/renderers/webgl/WebGLBackend.js +607 -0
  109. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +118 -17
  110. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +84 -0
  111. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +26 -0
  112. package/examples/jsm/renderers/webgl/utils/WebGLState.js +529 -0
  113. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +199 -0
  114. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +242 -0
  115. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +340 -0
  116. package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodeBuilder.js +1 -1
  117. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +320 -84
  118. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +18 -2
  119. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +120 -66
  120. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -2
  121. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +55 -36
  122. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +96 -5
  123. package/examples/jsm/renderers/webgpu/utils/WebGPUConstants.js +24 -22
  124. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +117 -139
  125. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +60 -142
  126. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +7 -6
  127. package/examples/jsm/shaders/FilmShader.js +11 -54
  128. package/examples/jsm/shaders/OutputShader.js +19 -2
  129. package/examples/jsm/shaders/SAOShader.js +0 -13
  130. package/examples/jsm/shaders/SSAOShader.js +33 -26
  131. package/examples/jsm/utils/BufferGeometryUtils.js +13 -4
  132. package/examples/jsm/webxr/OculusHandPointerModel.js +2 -2
  133. package/package.json +2 -2
  134. package/src/Three.js +3 -0
  135. package/src/animation/PropertyBinding.js +1 -1
  136. package/src/audio/Audio.js +6 -0
  137. package/src/cameras/CubeCamera.js +1 -4
  138. package/src/constants.js +4 -1
  139. package/src/core/BufferAttribute.js +20 -0
  140. package/src/core/Object3D.js +2 -15
  141. package/src/core/RenderTarget.js +122 -0
  142. package/src/core/UniformsGroup.js +2 -2
  143. package/src/geometries/CapsuleGeometry.js +1 -1
  144. package/src/loaders/DataTextureLoader.js +19 -2
  145. package/src/materials/Material.js +2 -2
  146. package/src/math/Vector2.js +2 -2
  147. package/src/math/Vector3.js +3 -3
  148. package/src/math/Vector4.js +4 -4
  149. package/src/objects/Line.js +1 -1
  150. package/src/objects/Mesh.js +1 -1
  151. package/src/objects/Points.js +1 -1
  152. package/src/renderers/WebGLMultipleRenderTargets.js +0 -2
  153. package/src/renderers/WebGLRenderTarget.js +3 -110
  154. package/src/renderers/WebGLRenderer.js +83 -57
  155. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +1 -2
  156. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +11 -1
  157. package/src/renderers/shaders/ShaderLib/background.glsl.js +8 -0
  158. package/src/renderers/webgl/WebGLBackground.js +5 -14
  159. package/src/renderers/webgl/WebGLGeometries.js +5 -1
  160. package/src/renderers/webgl/WebGLMaterials.js +1 -1
  161. package/src/renderers/webgl/WebGLProgram.js +2 -0
  162. package/src/renderers/webgl/WebGLPrograms.js +19 -3
  163. package/src/renderers/webgl/WebGLTextures.js +101 -16
  164. package/src/renderers/webgl/WebGLUtils.js +27 -20
  165. package/src/textures/CompressedCubeTexture.js +19 -0
  166. package/src/textures/Texture.js +2 -2
  167. package/src/utils.js +9 -1
  168. package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +0 -30
  169. package/examples/jsm/renderers/common/RenderTarget.js +0 -15
  170. package/examples/jsm/renderers/common/nodes/NodeRender.js +0 -302
  171. /package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/SlotNode.js +0 -0
  172. /package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodes.js +0 -0
@@ -1,4 +1,7 @@
1
- import { MathNode, GLSLNodeParser, NodeBuilder, NodeMaterial } from 'three/nodes';
1
+ import { MathNode, GLSLNodeParser, NodeBuilder, NodeMaterial } from '../../../nodes/Nodes.js';
2
+
3
+ import UniformsGroup from '../../common/UniformsGroup.js';
4
+ import { NodeSampledTexture, NodeSampledCubeTexture } from '../../common/nodes/NodeSampledTexture.js';
2
5
 
3
6
  const glslMethods = {
4
7
  [ MathNode.ATAN2 ]: 'atan'
@@ -16,6 +19,8 @@ class GLSLNodeBuilder extends NodeBuilder {
16
19
 
17
20
  super( object, renderer, new GLSLNodeParser(), scene );
18
21
 
22
+ this.uniformsGroup = {};
23
+
19
24
  }
20
25
 
21
26
  getMethod( method ) {
@@ -32,15 +37,13 @@ class GLSLNodeBuilder extends NodeBuilder {
32
37
 
33
38
  } else {
34
39
 
35
- return `texture2D( ${textureProperty}, ${uvSnippet} )`;
40
+ return `texture( ${textureProperty}, ${uvSnippet} )`;
36
41
 
37
42
  }
38
43
 
39
44
  }
40
45
 
41
- getTextureBias( texture, textureProperty, uvSnippet, biasSnippet ) {
42
-
43
- if ( this.material.extensions !== undefined ) this.material.extensions.shaderTextureLOD = true;
46
+ getTextureLevel( texture, textureProperty, uvSnippet, biasSnippet ) {
44
47
 
45
48
  return `textureLod( ${textureProperty}, ${uvSnippet}, ${biasSnippet} )`;
46
49
 
@@ -66,25 +69,29 @@ class GLSLNodeBuilder extends NodeBuilder {
66
69
 
67
70
  const uniforms = this.uniforms[ shaderStage ];
68
71
 
69
- let output = '';
72
+ const bindingSnippets = [];
73
+ const groupSnippets = [];
70
74
 
71
75
  for ( const uniform of uniforms ) {
72
76
 
73
77
  let snippet = null;
78
+ let group = false;
74
79
 
75
80
  if ( uniform.type === 'texture' ) {
76
81
 
77
- snippet = `sampler2D ${uniform.name};\n`;
82
+ snippet = `sampler2D ${uniform.name};`;
78
83
 
79
84
  } else if ( uniform.type === 'cubeTexture' ) {
80
85
 
81
- snippet = `samplerCube ${uniform.name};\n`;
86
+ snippet = `samplerCube ${uniform.name};`;
82
87
 
83
88
  } else {
84
89
 
85
90
  const vectorType = this.getVectorType( uniform.type );
86
91
 
87
- snippet = `${vectorType} ${uniform.name};\n`;
92
+ snippet = `${vectorType} ${uniform.name};`;
93
+
94
+ group = true;
88
95
 
89
96
  }
90
97
 
@@ -92,18 +99,36 @@ class GLSLNodeBuilder extends NodeBuilder {
92
99
 
93
100
  if ( precision !== null ) {
94
101
 
95
- snippet = 'uniform ' + precisionLib[ precision ] + ' ' + snippet;
102
+ snippet = precisionLib[ precision ] + ' ' + snippet;
103
+
104
+ }
105
+
106
+ if ( group ) {
107
+
108
+ snippet = '\t' + snippet;
109
+
110
+ groupSnippets.push( snippet );
96
111
 
97
112
  } else {
98
113
 
99
114
  snippet = 'uniform ' + snippet;
100
115
 
116
+ bindingSnippets.push( snippet );
117
+
101
118
  }
102
119
 
103
- output += snippet;
120
+ }
121
+
122
+ let output = '';
123
+
124
+ if ( groupSnippets.length > 0 ) {
125
+
126
+ output += this._getGLSLUniformStruct( shaderStage + 'NodeUniforms', groupSnippets.join( '\n' ) ) + '\n';
104
127
 
105
128
  }
106
129
 
130
+ output += bindingSnippets.join( '\n' );
131
+
107
132
  return output;
108
133
 
109
134
  }
@@ -116,9 +141,11 @@ class GLSLNodeBuilder extends NodeBuilder {
116
141
 
117
142
  const attributes = this.attributes;
118
143
 
144
+ let location = 0;
145
+
119
146
  for ( const attribute of attributes ) {
120
147
 
121
- snippet += `attribute ${attribute.type} ${attribute.name};\n`;
148
+ snippet += `layout( location = ${ location ++ } ) in ${ attribute.type } ${ attribute.name };\n`;
122
149
 
123
150
  }
124
151
 
@@ -138,7 +165,7 @@ class GLSLNodeBuilder extends NodeBuilder {
138
165
 
139
166
  for ( const varying of varyings ) {
140
167
 
141
- snippet += `${varying.needsInterpolation ? 'varying' : '/*varying*/'} ${varying.type} ${varying.name};\n`;
168
+ snippet += `${varying.needsInterpolation ? 'out' : '/*out*/'} ${varying.type} ${varying.name};\n`;
142
169
 
143
170
  }
144
171
 
@@ -148,7 +175,7 @@ class GLSLNodeBuilder extends NodeBuilder {
148
175
 
149
176
  if ( varying.needsInterpolation ) {
150
177
 
151
- snippet += `varying ${varying.type} ${varying.name};\n`;
178
+ snippet += `in ${varying.type} ${varying.name};\n`;
152
179
 
153
180
  }
154
181
 
@@ -184,9 +211,24 @@ class GLSLNodeBuilder extends NodeBuilder {
184
211
 
185
212
  }
186
213
 
214
+ _getGLSLUniformStruct( name, vars ) {
215
+
216
+ return `
217
+ layout( std140 ) uniform ${name} {
218
+ ${vars}
219
+ };`;
220
+
221
+ }
222
+
187
223
  _getGLSLVertexCode( shaderData ) {
188
224
 
189
- return `${ this.getSignature() }
225
+ return `#version 300 es
226
+
227
+ ${ this.getSignature() }
228
+
229
+ // precision
230
+ precision highp float;
231
+ precision highp int;
190
232
 
191
233
  // uniforms
192
234
  ${shaderData.uniforms}
@@ -208,6 +250,8 @@ void main() {
208
250
  // flow
209
251
  ${shaderData.flow}
210
252
 
253
+ gl_PointSize = 1.0;
254
+
211
255
  }
212
256
  `;
213
257
 
@@ -215,7 +259,9 @@ void main() {
215
259
 
216
260
  _getGLSLFragmentCode( shaderData ) {
217
261
 
218
- return `${ this.getSignature() }
262
+ return `#version 300 es
263
+
264
+ ${ this.getSignature() }
219
265
 
220
266
  // precision
221
267
  precision highp float;
@@ -230,6 +276,8 @@ ${shaderData.varyings}
230
276
  // codes
231
277
  ${shaderData.codes}
232
278
 
279
+ layout( location = 0 ) out vec4 fragColor;
280
+
233
281
  void main() {
234
282
 
235
283
  // vars
@@ -280,7 +328,7 @@ void main() {
280
328
 
281
329
  } else if ( shaderStage === 'fragment' ) {
282
330
 
283
- flow += 'gl_FragColor = ';
331
+ flow += 'fragColor = ';
284
332
 
285
333
  }
286
334
 
@@ -306,6 +354,9 @@ void main() {
306
354
  this.vertexShader = this._getGLSLVertexCode( shadersData.vertex );
307
355
  this.fragmentShader = this._getGLSLFragmentCode( shadersData.fragment );
308
356
 
357
+ //console.log( this.vertexShader );
358
+ //console.log( this.fragmentShader );
359
+
309
360
  } else {
310
361
 
311
362
  console.warn( 'GLSLNodeBuilder: compute shaders are not supported.' );
@@ -315,6 +366,56 @@ void main() {
315
366
 
316
367
  }
317
368
 
369
+ getUniformFromNode( node, type, shaderStage, name = null ) {
370
+
371
+ const uniformNode = super.getUniformFromNode( node, type, shaderStage, name );
372
+ const nodeData = this.getDataFromNode( node, shaderStage );
373
+
374
+ let uniformGPU = nodeData.uniformGPU;
375
+
376
+ if ( uniformGPU === undefined ) {
377
+
378
+ if ( type === 'texture' ) {
379
+
380
+ uniformGPU = new NodeSampledTexture( uniformNode.name, uniformNode.node );
381
+
382
+ this.bindings[ shaderStage ].push( uniformGPU );
383
+
384
+ } else if ( type === 'cubeTexture' ) {
385
+
386
+ uniformGPU = new NodeSampledCubeTexture( uniformNode.name, uniformNode.node );
387
+
388
+ this.bindings[ shaderStage ].push( uniformGPU );
389
+
390
+ } else {
391
+
392
+ let uniformsGroup = this.uniformsGroup[ shaderStage ];
393
+
394
+ if ( uniformsGroup === undefined ) {
395
+
396
+ uniformsGroup = new UniformsGroup( shaderStage + 'NodeUniforms' );
397
+ //uniformsGroup.setVisibility( gpuShaderStageLib[ shaderStage ] );
398
+
399
+ this.uniformsGroup[ shaderStage ] = uniformsGroup;
400
+
401
+ this.bindings[ shaderStage ].push( uniformsGroup );
402
+
403
+ }
404
+
405
+ uniformGPU = this.getNodeUniform( uniformNode, type );
406
+
407
+ uniformsGroup.addUniform( uniformGPU );
408
+
409
+ }
410
+
411
+ nodeData.uniformGPU = uniformGPU;
412
+
413
+ }
414
+
415
+ return uniformNode;
416
+
417
+ }
418
+
318
419
  build() {
319
420
 
320
421
  // @TODO: Move this code to super.build()
@@ -0,0 +1,84 @@
1
+ class WebGLAttributeUtils {
2
+
3
+ constructor( backend ) {
4
+
5
+ this.backend = backend;
6
+
7
+ }
8
+
9
+ createAttribute( attribute, bufferType ) {
10
+
11
+ const backend = this.backend;
12
+ const { gl } = backend;
13
+
14
+ const array = attribute.array;
15
+ const usage = attribute.usage || gl.STATIC_DRAW;
16
+
17
+ const bufferGPU = gl.createBuffer();
18
+
19
+ gl.bindBuffer( bufferType, bufferGPU );
20
+ gl.bufferData( bufferType, array, usage );
21
+ gl.bindBuffer( bufferType, null );
22
+
23
+ //attribute.onUploadCallback();
24
+
25
+ let type;
26
+
27
+ if ( array instanceof Float32Array ) {
28
+
29
+ type = gl.FLOAT;
30
+
31
+ } else if ( array instanceof Uint16Array ) {
32
+
33
+ if ( attribute.isFloat16BufferAttribute ) {
34
+
35
+ type = gl.HALF_FLOAT;
36
+
37
+ } else {
38
+
39
+ type = gl.UNSIGNED_SHORT;
40
+
41
+ }
42
+
43
+ } else if ( array instanceof Int16Array ) {
44
+
45
+ type = gl.SHORT;
46
+
47
+ } else if ( array instanceof Uint32Array ) {
48
+
49
+ type = gl.UNSIGNED_INT;
50
+
51
+ } else if ( array instanceof Int32Array ) {
52
+
53
+ type = gl.INT;
54
+
55
+ } else if ( array instanceof Int8Array ) {
56
+
57
+ type = gl.BYTE;
58
+
59
+ } else if ( array instanceof Uint8Array ) {
60
+
61
+ type = gl.UNSIGNED_BYTE;
62
+
63
+ } else if ( array instanceof Uint8ClampedArray ) {
64
+
65
+ type = gl.UNSIGNED_BYTE;
66
+
67
+ } else {
68
+
69
+ throw new Error( 'THREE.WebGLBackend: Unsupported buffer data format: ' + array );
70
+
71
+ }
72
+
73
+ backend.set( attribute, {
74
+ bufferGPU,
75
+ type,
76
+ bytesPerElement: array.BYTES_PER_ELEMENT,
77
+ version: attribute.version
78
+ } );
79
+
80
+ }
81
+
82
+ }
83
+
84
+ export default WebGLAttributeUtils;
@@ -0,0 +1,26 @@
1
+ class WebGLExtensions {
2
+
3
+ constructor( backend ) {
4
+
5
+ this.backend = backend;
6
+
7
+ this.gl = this.backend.gl;
8
+ this.availableExtensions = this.gl.getSupportedExtensions();
9
+
10
+ }
11
+
12
+ get( name ) {
13
+
14
+ return this.gl.getExtension( name );
15
+
16
+ }
17
+
18
+ has( name ) {
19
+
20
+ return this.availableExtensions.includes( name );
21
+
22
+ }
23
+
24
+ }
25
+
26
+ export default WebGLExtensions;