super-three 0.160.0 → 0.161.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 (145) hide show
  1. package/LICENSE +1 -1
  2. package/build/three.cjs +380 -109
  3. package/build/three.module.js +381 -109
  4. package/build/three.module.min.js +1 -1
  5. package/examples/jsm/Addons.js +5 -1
  6. package/examples/jsm/capabilities/WebGPU.js +13 -9
  7. package/examples/jsm/controls/OrbitControls.js +102 -13
  8. package/examples/jsm/curves/NURBSUtils.js +59 -4
  9. package/examples/jsm/curves/NURBSVolume.js +62 -0
  10. package/examples/jsm/exporters/USDZExporter.js +8 -7
  11. package/examples/jsm/helpers/TextureHelper.js +3 -3
  12. package/examples/jsm/loaders/3DMLoader.js +44 -43
  13. package/examples/jsm/loaders/DDSLoader.js +1 -0
  14. package/examples/jsm/loaders/KTX2Loader.js +20 -5
  15. package/examples/jsm/loaders/LUT3dlLoader.js +78 -46
  16. package/examples/jsm/loaders/LUTCubeLoader.js +81 -67
  17. package/examples/jsm/loaders/LUTImageLoader.js +3 -2
  18. package/examples/jsm/loaders/MaterialXLoader.js +115 -16
  19. package/examples/jsm/loaders/SVGLoader.js +4 -3
  20. package/examples/jsm/loaders/VRMLLoader.js +1 -1
  21. package/examples/jsm/materials/MeshPostProcessingMaterial.js +144 -0
  22. package/examples/jsm/misc/Timer.js +13 -4
  23. package/examples/jsm/nodes/Nodes.js +16 -5
  24. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +5 -3
  25. package/examples/jsm/nodes/accessors/CameraNode.js +9 -4
  26. package/examples/jsm/nodes/accessors/CubeTextureNode.js +12 -1
  27. package/examples/jsm/nodes/accessors/StorageBufferNode.js +27 -0
  28. package/examples/jsm/nodes/accessors/TextureStoreNode.js +56 -3
  29. package/examples/jsm/nodes/accessors/VertexColorNode.js +70 -0
  30. package/examples/jsm/nodes/core/AttributeNode.js +1 -1
  31. package/examples/jsm/nodes/core/NodeBuilder.js +23 -18
  32. package/examples/jsm/nodes/core/NodeFrame.js +16 -8
  33. package/examples/jsm/nodes/core/constants.js +1 -0
  34. package/examples/jsm/nodes/display/AfterImageNode.js +148 -0
  35. package/examples/jsm/nodes/display/AnamorphicNode.js +148 -0
  36. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +3 -0
  37. package/examples/jsm/nodes/display/GaussianBlurNode.js +33 -13
  38. package/examples/jsm/nodes/display/PassNode.js +3 -2
  39. package/examples/jsm/nodes/display/ToneMappingNode.js +46 -3
  40. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +1 -4
  41. package/examples/jsm/nodes/display/ViewportNode.js +0 -2
  42. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +4 -4
  43. package/examples/jsm/nodes/fog/FogNode.js +2 -1
  44. package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
  45. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +13 -5
  46. package/examples/jsm/nodes/lighting/LightingContextNode.js +1 -1
  47. package/examples/jsm/nodes/lighting/LightsNode.js +1 -1
  48. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +18 -30
  49. package/examples/jsm/nodes/materials/Materials.js +1 -0
  50. package/examples/jsm/nodes/materials/MeshSSSNodeMaterial.js +84 -0
  51. package/examples/jsm/nodes/materials/NodeMaterial.js +6 -4
  52. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +1 -7
  53. package/examples/jsm/nodes/math/MathNode.js +12 -2
  54. package/examples/jsm/nodes/math/MathUtils.js +15 -0
  55. package/examples/jsm/nodes/math/OperatorNode.js +13 -5
  56. package/examples/jsm/nodes/math/TriNoise3D.js +71 -0
  57. package/examples/jsm/nodes/shadernode/ShaderNode.js +10 -1
  58. package/examples/jsm/nodes/utils/ArrayElementNode.js +6 -0
  59. package/examples/jsm/nodes/utils/JoinNode.js +2 -2
  60. package/examples/jsm/nodes/utils/LoopNode.js +3 -3
  61. package/examples/jsm/nodes/utils/ReflectorNode.js +227 -0
  62. package/examples/jsm/nodes/utils/RotateNode.js +68 -0
  63. package/examples/jsm/nodes/utils/RotateUVNode.js +1 -9
  64. package/examples/jsm/nodes/utils/SplitNode.js +4 -4
  65. package/examples/jsm/objects/GroundedSkybox.js +50 -0
  66. package/examples/jsm/objects/QuadMesh.js +8 -2
  67. package/examples/jsm/objects/Water2.js +8 -8
  68. package/examples/jsm/postprocessing/GTAOPass.js +11 -1
  69. package/examples/jsm/renderers/common/Backend.js +14 -0
  70. package/examples/jsm/renderers/common/Bindings.js +1 -1
  71. package/examples/jsm/renderers/common/DataMap.js +1 -1
  72. package/examples/jsm/renderers/common/Info.js +25 -1
  73. package/examples/jsm/renderers/common/Pipelines.js +8 -8
  74. package/examples/jsm/renderers/common/PostProcessing.js +2 -2
  75. package/examples/jsm/renderers/common/ProgrammableStage.js +3 -1
  76. package/examples/jsm/renderers/common/RenderObject.js +2 -0
  77. package/examples/jsm/renderers/common/Renderer.js +238 -22
  78. package/examples/jsm/renderers/common/StorageBufferAttribute.js +17 -0
  79. package/examples/jsm/renderers/common/Textures.js +25 -5
  80. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +2 -1
  81. package/examples/jsm/renderers/common/nodes/Nodes.js +4 -2
  82. package/examples/jsm/renderers/webgl/WebGLBackend.js +631 -270
  83. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +37 -30
  84. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +89 -8
  85. package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +11 -0
  86. package/examples/jsm/renderers/webgl/utils/WebGLState.js +197 -0
  87. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +377 -11
  88. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +2 -2
  89. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +1 -21
  90. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +2 -2
  91. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +289 -102
  92. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +7 -2
  93. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +56 -39
  94. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  95. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -4
  96. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +85 -12
  97. package/examples/jsm/transpiler/AST.js +1 -1
  98. package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
  99. package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
  100. package/examples/jsm/transpiler/TSLEncoder.js +1 -1
  101. package/examples/jsm/utils/BufferGeometryUtils.js +23 -27
  102. package/examples/jsm/utils/SortUtils.js +2 -0
  103. package/examples/jsm/webxr/ARButton.js +12 -2
  104. package/examples/jsm/webxr/VRButton.js +12 -2
  105. package/examples/jsm/webxr/XRButton.js +12 -2
  106. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  107. package/examples/jsm/webxr/XRHandMeshModel.js +3 -1
  108. package/package.json +2 -2
  109. package/src/audio/Audio.js +1 -3
  110. package/src/cameras/PerspectiveCamera.js +35 -0
  111. package/src/constants.js +1 -2
  112. package/src/core/BufferAttribute.js +2 -1
  113. package/src/core/InterleavedBuffer.js +2 -1
  114. package/src/core/InterleavedBufferAttribute.js +20 -0
  115. package/src/materials/ShaderMaterial.js +2 -1
  116. package/src/math/Triangle.js +0 -30
  117. package/src/objects/BatchedMesh.js +6 -7
  118. package/src/objects/SkinnedMesh.js +0 -8
  119. package/src/renderers/WebGLRenderer.js +6 -2
  120. package/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl.js +9 -0
  121. package/src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl.js +56 -11
  122. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +15 -7
  123. package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -2
  124. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +1 -2
  125. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +1 -1
  126. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -2
  127. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +1 -1
  128. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -2
  129. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +3 -1
  130. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +1 -1
  131. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -1
  132. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +1 -1
  133. package/src/renderers/shaders/ShaderLib/points.glsl.js +1 -1
  134. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +1 -1
  135. package/src/renderers/webgl/WebGLAttributes.js +2 -2
  136. package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
  137. package/src/renderers/webgl/WebGLProgram.js +30 -3
  138. package/src/renderers/webgl/WebGLPrograms.js +19 -11
  139. package/src/renderers/webgl/WebGLTextures.js +90 -16
  140. package/src/renderers/webxr/WebXRDepthSensing.js +105 -0
  141. package/src/renderers/webxr/WebXRManager.js +46 -0
  142. package/src/textures/Source.js +1 -0
  143. package/build/three.js +0 -54519
  144. package/build/three.min.js +0 -7
  145. package/examples/jsm/objects/GroundProjectedSkybox.js +0 -172
@@ -10,6 +10,7 @@ class WebGLTextureUtils {
10
10
 
11
11
  this.gl = backend.gl;
12
12
  this.extensions = backend.extensions;
13
+ this.defaultTextures = {};
13
14
 
14
15
  if ( initialized === false ) {
15
16
 
@@ -171,7 +172,9 @@ class WebGLTextureUtils {
171
172
 
172
173
  setTextureParameters( textureType, texture ) {
173
174
 
174
- const { gl, extensions } = this;
175
+ const { gl, extensions, backend } = this;
176
+
177
+ const { currentAnisotropy } = backend.get( texture );
175
178
 
176
179
  gl.texParameteri( textureType, gl.TEXTURE_WRAP_S, wrappingToGL[ texture.wrapS ] );
177
180
  gl.texParameteri( textureType, gl.TEXTURE_WRAP_T, wrappingToGL[ texture.wrapT ] );
@@ -183,7 +186,12 @@ class WebGLTextureUtils {
183
186
  }
184
187
 
185
188
  gl.texParameteri( textureType, gl.TEXTURE_MAG_FILTER, filterToGL[ texture.magFilter ] );
186
- gl.texParameteri( textureType, gl.TEXTURE_MIN_FILTER, filterToGL[ texture.minFilter ] );
189
+
190
+
191
+ // follow WebGPU backend mapping for texture filtering
192
+ const minFilter = ! texture.isVideoTexture && texture.minFilter === LinearFilter ? LinearMipmapLinearFilter : texture.minFilter;
193
+
194
+ gl.texParameteri( textureType, gl.TEXTURE_MIN_FILTER, filterToGL[ minFilter ] );
187
195
 
188
196
  if ( texture.compareFunction ) {
189
197
 
@@ -194,19 +202,376 @@ class WebGLTextureUtils {
194
202
 
195
203
  if ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {
196
204
 
197
- //extension = extensions.get( 'EXT_texture_filter_anisotropic' );
198
-
199
205
  if ( texture.magFilter === NearestFilter ) return;
200
206
  if ( texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter ) return;
201
207
  if ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension for WebGL 1 and WebGL 2
202
208
 
203
- if ( texture.anisotropy > 1 /*|| properties.get( texture ).__currentAnisotropy*/ ) {
209
+ if ( texture.anisotropy > 1 || currentAnisotropy !== texture.anisotropy ) {
210
+ const extension = extensions.get( 'EXT_texture_filter_anisotropic' );
211
+ gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, backend.getMaxAnisotropy() ) );
212
+ backend.get( texture ).currentAnisotropy = texture.anisotropy;
213
+
214
+ }
215
+
216
+ }
217
+
218
+ }
219
+
220
+ createDefaultTexture( texture ) {
221
+
222
+ const { gl, backend, defaultTextures } = this;
223
+
224
+
225
+ const glTextureType = this.getGLTextureType( texture );
226
+
227
+ let textureGPU = defaultTextures[ glTextureType ];
228
+
229
+ if ( textureGPU === undefined ) {
230
+
231
+ textureGPU = gl.createTexture();
232
+
233
+ backend.state.bindTexture( glTextureType, textureGPU );
234
+ gl.texParameteri( glTextureType, gl.TEXTURE_MIN_FILTER, gl.NEAREST );
235
+ gl.texParameteri( glTextureType, gl.TEXTURE_MAG_FILTER, gl.NEAREST );
236
+
237
+ // gl.texImage2D( glTextureType, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );
238
+
239
+ defaultTextures[ glTextureType ] = textureGPU;
240
+
241
+ }
242
+
243
+ backend.set( texture, {
244
+ textureGPU,
245
+ glTextureType,
246
+ isDefault: true
247
+ } );
248
+
249
+ }
250
+
251
+ createTexture( texture, options ) {
252
+
253
+ const { gl, backend } = this;
254
+ const { levels, width, height, depth } = options;
255
+
256
+ const glFormat = backend.utils.convert( texture.format, texture.colorSpace );
257
+ const glType = backend.utils.convert( texture.type );
258
+ const glInternalFormat = this.getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, texture.isVideoTexture );
259
+
260
+ const textureGPU = gl.createTexture();
261
+ const glTextureType = this.getGLTextureType( texture );
262
+
263
+ backend.state.bindTexture( glTextureType, textureGPU );
264
+
265
+ gl.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );
266
+ gl.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
267
+ gl.pixelStorei( gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
268
+ gl.pixelStorei( gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE );
269
+
270
+ this.setTextureParameters( glTextureType, texture );
271
+
272
+ if ( texture.isDataArrayTexture ) {
273
+
274
+ gl.texStorage3D( gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, width, height, depth );
275
+
276
+ } else if ( ! texture.isVideoTexture ) {
277
+
278
+ gl.texStorage2D( glTextureType, levels, glInternalFormat, width, height );
279
+
280
+ }
281
+
282
+ backend.set( texture, {
283
+ textureGPU,
284
+ glTextureType,
285
+ glFormat,
286
+ glType,
287
+ glInternalFormat
288
+ } );
289
+
290
+ }
291
+
292
+ updateTexture( texture, options ) {
293
+
294
+ const { gl } = this;
295
+ const { width, height } = options;
296
+ const { textureGPU, glTextureType, glFormat, glType, glInternalFormat } = this.backend.get( texture );
297
+
298
+ if ( texture.isRenderTargetTexture || ( textureGPU === undefined /* unsupported texture format */ ) )
299
+ return;
300
+
301
+ const getImage = ( source ) => {
302
+
303
+ if ( source.isDataTexture ) {
304
+
305
+ return source.image.data;
306
+
307
+ } else if ( source instanceof ImageBitmap || source instanceof OffscreenCanvas || source instanceof HTMLImageElement || source instanceof HTMLCanvasElement ) {
308
+
309
+ return source;
310
+
311
+ }
312
+
313
+ return source.data;
314
+
315
+ };
316
+
317
+ this.backend.state.bindTexture( glTextureType, textureGPU );
318
+
319
+ if ( texture.isCompressedTexture ) {
320
+
321
+ const mipmaps = texture.mipmaps;
322
+
323
+ for ( let i = 0; i < mipmaps.length; i ++ ) {
324
+
325
+ const mipmap = mipmaps[ i ];
326
+
327
+ if ( texture.isCompressedArrayTexture ) {
328
+
329
+ const image = options.image;
330
+
331
+ if ( texture.format !== gl.RGBA ) {
332
+
333
+ if ( glFormat !== null ) {
334
+
335
+ gl.compressedTexSubImage3D( gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data, 0, 0 );
336
+
337
+
338
+ } else {
339
+
340
+ console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );
341
+
342
+ }
343
+
344
+ } else {
345
+
346
+ gl.texSubImage3D( gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, glType, mipmap.data );
347
+
348
+ }
349
+
350
+ } else {
351
+
352
+ if ( glFormat !== null ) {
353
+
354
+ gl.compressedTexSubImage2D( gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );
355
+
356
+ } else {
357
+
358
+ console.warn( 'Unsupported compressed texture format' );
359
+
360
+ }
361
+
362
+ }
363
+
364
+ }
365
+
366
+ } else if ( texture.isCubeTexture ) {
367
+
368
+ const images = options.images;
369
+
370
+ for ( let i = 0; i < 6; i ++ ) {
371
+
372
+ const image = getImage( images[ i ] );
373
+
374
+ gl.texSubImage2D( gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, width, height, glFormat, glType, image );
375
+
376
+ }
377
+
378
+ } else if ( texture.isDataArrayTexture ) {
379
+
380
+ const image = options.image;
381
+
382
+ gl.texSubImage3D( gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
383
+
384
+ } else if ( texture.isVideoTexture ) {
385
+
386
+ texture.update();
387
+
388
+ gl.texImage2D( glTextureType, 0, glInternalFormat, glFormat, glType, options.image );
389
+
390
+
391
+ } else {
392
+
393
+ const image = getImage( options.image );
394
+
395
+ gl.texSubImage2D( glTextureType, 0, 0, 0, width, height, glFormat, glType, image );
396
+
397
+ }
398
+
399
+ }
400
+
401
+ generateMipmaps( texture ) {
402
+
403
+ const { gl, backend } = this;
404
+ const { textureGPU, glTextureType } = backend.get( texture );
405
+
406
+ backend.state.bindTexture( glTextureType, textureGPU );
407
+ gl.generateMipmap( glTextureType );
408
+
409
+ }
410
+
411
+ deallocateRenderBuffers( renderTarget ) {
412
+
413
+
414
+ const { gl, backend } = this;
415
+
416
+ // remove framebuffer reference
417
+ if ( renderTarget ) {
418
+
419
+ const renderContextData = backend.get( renderTarget );
420
+
421
+ renderContextData.renderBufferStorageSetup = undefined;
422
+
423
+ if ( renderContextData.framebuffer ) {
424
+
425
+ gl.deleteFramebuffer( renderContextData.framebuffer );
426
+ renderContextData.framebuffer = undefined;
427
+
428
+ }
429
+
430
+ if ( renderContextData.depthRenderbuffer ) {
431
+
432
+ gl.deleteRenderbuffer( renderContextData.depthRenderbuffer );
433
+ renderContextData.depthRenderbuffer = undefined;
434
+
435
+ }
436
+
437
+ if ( renderContextData.stencilRenderbuffer ) {
438
+
439
+ gl.deleteRenderbuffer( renderContextData.stencilRenderbuffer );
440
+ renderContextData.stencilRenderbuffer = undefined;
441
+
442
+ }
443
+
444
+ if ( renderContextData.msaaFrameBuffer ) {
445
+
446
+ gl.deleteFramebuffer( renderContextData.msaaFrameBuffer );
447
+ renderContextData.msaaFrameBuffer = undefined;
448
+
449
+ }
450
+
451
+ if ( renderContextData.msaaRenderbuffers ) {
452
+
453
+ for ( let i = 0; i < renderContextData.msaaRenderbuffers.length; i ++ ) {
454
+
455
+ gl.deleteRenderbuffer( renderContextData.msaaRenderbuffers[ i ] );
456
+
457
+ }
458
+
459
+ renderContextData.msaaRenderbuffers = undefined;
460
+
461
+ }
462
+
463
+ }
464
+
465
+ }
466
+
467
+ destroyTexture( texture ) {
468
+
469
+ const { gl, backend } = this;
470
+ const { textureGPU, renderTarget } = backend.get( texture );
471
+
472
+ this.deallocateRenderBuffers( renderTarget );
473
+ gl.deleteTexture( textureGPU );
474
+
475
+ backend.delete( texture );
476
+
477
+ }
478
+
479
+ copyFramebufferToTexture( texture, renderContext ) {
480
+
481
+ const { gl } = this;
482
+ const { state } = this.backend;
483
+
484
+ const { textureGPU } = this.backend.get( texture );
204
485
 
205
- //gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );
206
- //properties.get( texture ).__currentAnisotropy = texture.anisotropy;
486
+ const width = texture.image.width;
487
+ const height = texture.image.height;
488
+
489
+ if ( texture.isDepthTexture ) {
490
+
491
+ let mask = gl.DEPTH_BUFFER_BIT;
492
+
493
+ if ( renderContext.stencil ) {
494
+
495
+ mask |= gl.STENCIL_BUFFER_BIT;
207
496
 
208
497
  }
209
498
 
499
+ const fb = gl.createFramebuffer();
500
+ state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );
501
+
502
+ gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.TEXTURE_2D, textureGPU, 0 );
503
+
504
+ gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, gl.NEAREST );
505
+
506
+ gl.deleteFramebuffer( fb );
507
+
508
+ } else {
509
+
510
+ state.bindTexture( gl.TEXTURE_2D, textureGPU );
511
+ gl.copyTexSubImage2D( gl.TEXTURE_2D, 0, 0, 0, 0, 0, width, height );
512
+
513
+ state.unbindTexture();
514
+
515
+ }
516
+
517
+ if ( texture.generateMipmaps ) this.generateMipmaps( texture );
518
+
519
+ this.backend._setFramebuffer( renderContext );
520
+
521
+ }
522
+
523
+ // Setup storage for internal depth/stencil buffers and bind to correct framebuffer
524
+ setupRenderBufferStorage( renderbuffer, renderContext ) {
525
+
526
+ const { gl } = this;
527
+ const renderTarget = renderContext.renderTarget;
528
+
529
+ const { samples, depthTexture, depthBuffer, stencilBuffer, width, height } = renderTarget;
530
+
531
+ gl.bindRenderbuffer( gl.RENDERBUFFER, renderbuffer );
532
+
533
+ if ( depthBuffer && ! stencilBuffer ) {
534
+
535
+ let glInternalFormat = gl.DEPTH_COMPONENT24;
536
+
537
+ if ( samples > 0 ) {
538
+
539
+
540
+ if ( depthTexture && depthTexture.isDepthTexture ) {
541
+
542
+ if ( depthTexture.type === gl.FLOAT ) {
543
+
544
+ glInternalFormat = gl.DEPTH_COMPONENT32F;
545
+
546
+ }
547
+
548
+ }
549
+
550
+ gl.renderbufferStorageMultisample( gl.RENDERBUFFER, samples, glInternalFormat, width, height );
551
+
552
+ } else {
553
+
554
+ gl.renderbufferStorage( gl.RENDERBUFFER, glInternalFormat, width, height );
555
+
556
+ }
557
+
558
+ gl.framebufferRenderbuffer( gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, renderbuffer );
559
+
560
+ } else if ( depthBuffer && stencilBuffer ) {
561
+
562
+ if ( samples > 0 ) {
563
+
564
+ gl.renderbufferStorageMultisample( gl.RENDERBUFFER, samples, gl.DEPTH24_STENCIL8, width, height );
565
+
566
+ } else {
567
+
568
+ gl.renderbufferStorage( gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height );
569
+
570
+ }
571
+
572
+
573
+ gl.framebufferRenderbuffer( gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.RENDERBUFFER, renderbuffer );
574
+
210
575
  }
211
576
 
212
577
  }
@@ -239,9 +604,9 @@ class WebGLTextureUtils {
239
604
 
240
605
  const dstBuffer = new typedArrayType( elementCount );
241
606
 
242
- gl.bindBuffer( gl.PIXEL_PACK_BUFFER, buffer );
607
+ gl.bindBuffer( gl.PIXEL_PACK_BUFFER, buffer );
243
608
  gl.getBufferSubData( gl.PIXEL_PACK_BUFFER, 0, dstBuffer );
244
- gl.bindBuffer( gl.PIXEL_PACK_BUFFER, null );
609
+ gl.bindBuffer( gl.PIXEL_PACK_BUFFER, null );
245
610
 
246
611
  gl.deleteFramebuffer( fb );
247
612
 
@@ -259,10 +624,11 @@ class WebGLTextureUtils {
259
624
  if ( glType === gl.UNSIGNED_SHORT_5_5_5_1 ) return Uint16Array;
260
625
  if ( glType === gl.UNSIGNED_SHORT_5_6_5 ) return Uint16Array;
261
626
  if ( glType === gl.UNSIGNED_SHORT ) return Uint16Array;
262
-
263
627
  if ( glType === gl.UNSIGNED_INT ) return Uint32Array;
264
628
 
265
- if ( glType === gl.UNSIGNED_FLOAT ) return Float32Array;
629
+ if ( glType === gl.FLOAT ) return Float32Array;
630
+
631
+ throw new Error( `Unsupported WebGL type: ${glType}` );
266
632
 
267
633
  }
268
634
 
@@ -251,7 +251,7 @@ class WebGLUtils {
251
251
 
252
252
  const res = gl.clientWaitSync( sync, gl.SYNC_FLUSH_COMMANDS_BIT, 0 );
253
253
 
254
- if ( res === gl.WAIT_FAILED) {
254
+ if ( res === gl.WAIT_FAILED ) {
255
255
 
256
256
  gl.deleteSync( sync );
257
257
 
@@ -260,7 +260,7 @@ class WebGLUtils {
260
260
 
261
261
  }
262
262
 
263
- if ( res === gl.TIMEOUT_EXPIRED) {
263
+ if ( res === gl.TIMEOUT_EXPIRED ) {
264
264
 
265
265
  requestAnimationFrame( test );
266
266
  return;
@@ -1,4 +1,4 @@
1
- import { MathNode, GLSLNodeParser, NodeBuilder, NodeMaterial } from '../../../nodes/Nodes.js';
1
+ import { MathNode, GLSLNodeParser, NodeBuilder } from '../../../nodes/Nodes.js';
2
2
 
3
3
  const glslMethods = {
4
4
  [ MathNode.ATAN2 ]: 'atan'
@@ -315,26 +315,6 @@ void main() {
315
315
 
316
316
  }
317
317
 
318
- build() {
319
-
320
- // @TODO: Move this code to super.build()
321
-
322
- const { object, material } = this;
323
-
324
- if ( material !== null ) {
325
-
326
- NodeMaterial.fromMaterial( material ).build( this );
327
-
328
- } else {
329
-
330
- this.addFlow( 'compute', object );
331
-
332
- }
333
-
334
- return super.build();
335
-
336
- }
337
-
338
318
  }
339
319
 
340
320
  export default GLSL1NodeBuilder;
@@ -102,7 +102,7 @@ class WebGLNodeBuilder extends NodeBuilder {
102
102
  this.addSlot( 'fragment', new SlotNode( {
103
103
  node: normalView,
104
104
  nodeType: 'vec3',
105
- source: getIncludeSnippet( 'clipping_planes_fragment' ),
105
+ source: 'void main() {',
106
106
  target: 'vec3 TransformedNormalView = %RESULT%;',
107
107
  inclusionType: 'append'
108
108
  } ) );
@@ -671,7 +671,7 @@ ${this.shader[ getShaderStageProperty( shaderStage ) ]}
671
671
 
672
672
  build() {
673
673
 
674
- super.build();
674
+ super.build( false );
675
675
 
676
676
  this._addSnippets();
677
677
  this._addUniforms();