super-three 0.163.0 → 0.164.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 (114) hide show
  1. package/build/three.cjs +473 -245
  2. package/build/three.module.js +473 -245
  3. package/build/three.module.min.js +2 -2
  4. package/examples/jsm/animation/CCDIKSolver.js +4 -2
  5. package/examples/jsm/exporters/GLTFExporter.js +45 -1
  6. package/examples/jsm/exporters/USDZExporter.js +7 -1
  7. package/examples/jsm/libs/draco/README.md +2 -2
  8. package/examples/jsm/loaders/EXRLoader.js +283 -99
  9. package/examples/jsm/loaders/GLTFLoader.js +53 -0
  10. package/examples/jsm/loaders/KTX2Loader.js +3 -6
  11. package/examples/jsm/loaders/VRMLLoader.js +1 -1
  12. package/examples/jsm/loaders/lwo/IFFParser.js +8 -5
  13. package/examples/jsm/materials/MeshGouraudMaterial.js +7 -1
  14. package/examples/jsm/math/Octree.js +26 -20
  15. package/examples/jsm/nodes/Nodes.js +4 -3
  16. package/examples/jsm/nodes/accessors/AccessorsUtils.js +16 -1
  17. package/examples/jsm/nodes/accessors/ClippingNode.js +3 -2
  18. package/examples/jsm/nodes/accessors/MaterialNode.js +107 -3
  19. package/examples/jsm/nodes/accessors/StorageBufferNode.js +9 -0
  20. package/examples/jsm/nodes/accessors/TextureNode.js +21 -3
  21. package/examples/jsm/nodes/accessors/TextureSizeNode.js +1 -1
  22. package/examples/jsm/nodes/code/FunctionNode.js +0 -8
  23. package/examples/jsm/nodes/core/Node.js +8 -0
  24. package/examples/jsm/nodes/core/NodeBuilder.js +5 -9
  25. package/examples/jsm/nodes/core/OutputStructNode.js +2 -1
  26. package/examples/jsm/nodes/core/PropertyNode.js +10 -0
  27. package/examples/jsm/nodes/display/BumpMapNode.js +7 -26
  28. package/examples/jsm/nodes/display/FrontFacingNode.js +13 -0
  29. package/examples/jsm/nodes/display/ViewportDepthNode.js +1 -1
  30. package/examples/jsm/nodes/display/ViewportNode.js +4 -2
  31. package/examples/jsm/nodes/display/ViewportTextureNode.js +4 -1
  32. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +26 -7
  33. package/examples/jsm/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
  34. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -3
  35. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
  36. package/examples/jsm/nodes/functions/PhongLightingModel.js +1 -1
  37. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +164 -10
  38. package/examples/jsm/nodes/functions/ShadowMaskModel.js +31 -0
  39. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +18 -4
  40. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -1
  41. package/examples/jsm/nodes/lighting/EnvironmentNode.js +11 -2
  42. package/examples/jsm/nodes/lighting/IrradianceNode.js +24 -0
  43. package/examples/jsm/nodes/lighting/LightsNode.js +11 -1
  44. package/examples/jsm/nodes/lighting/PointLightNode.js +2 -1
  45. package/examples/jsm/nodes/lighting/SpotLightNode.js +2 -1
  46. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +10 -6
  47. package/examples/jsm/nodes/materials/Materials.js +1 -0
  48. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -2
  49. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +2 -2
  50. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +76 -5
  51. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +11 -4
  52. package/examples/jsm/nodes/materials/NodeMaterial.js +31 -41
  53. package/examples/jsm/nodes/materials/ShadowNodeMaterial.js +34 -0
  54. package/examples/jsm/nodes/pmrem/PMREMUtils.js +1 -1
  55. package/examples/jsm/nodes/shadernode/ShaderNode.js +2 -8
  56. package/examples/jsm/physics/JoltPhysics.js +281 -0
  57. package/examples/jsm/postprocessing/RenderTransitionPass.js +193 -0
  58. package/examples/jsm/renderers/common/Background.js +3 -3
  59. package/examples/jsm/renderers/common/ClippingContext.js +1 -1
  60. package/examples/jsm/renderers/common/RenderList.js +1 -1
  61. package/examples/jsm/renderers/common/RenderObject.js +43 -1
  62. package/examples/jsm/renderers/common/Renderer.js +129 -14
  63. package/examples/jsm/renderers/common/Textures.js +1 -1
  64. package/examples/jsm/renderers/common/extras/PMREMGenerator.js +13 -17
  65. package/examples/jsm/renderers/common/nodes/Nodes.js +31 -47
  66. package/examples/jsm/renderers/webgl/WebGLBackend.js +7 -21
  67. package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +5 -1
  68. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +6 -0
  69. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +21 -7
  70. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +3 -21
  71. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +33 -45
  72. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +16 -1
  73. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -1
  74. package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
  75. package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
  76. package/examples/jsm/utils/SceneUtils.js +60 -1
  77. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  78. package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
  79. package/package.json +1 -1
  80. package/src/constants.js +1 -1
  81. package/src/core/RenderTarget.js +8 -0
  82. package/src/extras/PMREMGenerator.js +12 -11
  83. package/src/loaders/FileLoader.js +1 -1
  84. package/src/loaders/MaterialLoader.js +1 -0
  85. package/src/materials/Material.js +2 -0
  86. package/src/materials/MeshPhysicalMaterial.js +20 -0
  87. package/src/objects/BatchedMesh.js +23 -0
  88. package/src/objects/Line.js +66 -43
  89. package/src/renderers/WebGLRenderer.js +92 -61
  90. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  91. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -0
  92. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +17 -9
  93. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  94. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
  95. package/src/renderers/shaders/ShaderChunk.js +0 -2
  96. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
  97. package/src/renderers/shaders/ShaderLib.js +1 -0
  98. package/src/renderers/webgl/WebGLBackground.js +18 -3
  99. package/src/renderers/webgl/WebGLBufferRenderer.js +36 -0
  100. package/src/renderers/webgl/WebGLCapabilities.js +33 -1
  101. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +36 -0
  102. package/src/renderers/webgl/WebGLMaterials.js +6 -0
  103. package/src/renderers/webgl/WebGLProgram.js +3 -5
  104. package/src/renderers/webgl/WebGLPrograms.js +5 -0
  105. package/src/renderers/webgl/WebGLRenderStates.js +6 -2
  106. package/src/renderers/webgl/WebGLShadowMap.js +25 -25
  107. package/src/renderers/webgl/WebGLTextures.js +68 -60
  108. package/src/renderers/webgl/WebGLUtils.js +3 -21
  109. package/src/renderers/webxr/WebXRManager.js +2 -4
  110. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -318
  111. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +0 -26
  112. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -792
  113. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +0 -51
  114. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
@@ -314,6 +314,7 @@ ShaderLib.physical = {
314
314
  clearcoatRoughness: { value: 0 },
315
315
  clearcoatRoughnessMap: { value: null },
316
316
  clearcoatRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },
317
+ dispersion: { value: 0 },
317
318
  iridescence: { value: 0 },
318
319
  iridescenceMap: { value: null },
319
320
  iridescenceMapTransform: { value: /*@__PURE__*/ new Matrix3() },
@@ -26,9 +26,8 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
26
26
  let currentBackgroundVersion = 0;
27
27
  let currentTonemapping = null;
28
28
 
29
- function render( renderList, scene ) {
29
+ function getBackground( scene ) {
30
30
 
31
- let forceClear = false;
32
31
  let background = scene.isScene === true ? scene.background : null;
33
32
 
34
33
  if ( background && background.isTexture ) {
@@ -38,6 +37,15 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
38
37
 
39
38
  }
40
39
 
40
+ return background;
41
+
42
+ }
43
+
44
+ function render( scene ) {
45
+
46
+ let forceClear = false;
47
+ const background = getBackground( scene );
48
+
41
49
  if ( background === null ) {
42
50
 
43
51
  setClear( clearColor, clearAlpha );
@@ -67,6 +75,12 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
67
75
 
68
76
  }
69
77
 
78
+ }
79
+
80
+ function addToRenderList( renderList, scene ) {
81
+
82
+ const background = getBackground( scene );
83
+
70
84
  if ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) {
71
85
 
72
86
  if ( boxMesh === undefined ) {
@@ -247,7 +261,8 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
247
261
  setClear( clearColor, clearAlpha );
248
262
 
249
263
  },
250
- render: render
264
+ render: render,
265
+ addToRenderList: addToRenderList
251
266
 
252
267
  };
253
268
 
@@ -57,12 +57,48 @@ function WebGLBufferRenderer( gl, extensions, info ) {
57
57
 
58
58
  }
59
59
 
60
+ function renderMultiDrawInstances( starts, counts, drawCount, primcount ) {
61
+
62
+ if ( drawCount === 0 ) return;
63
+
64
+ const extension = extensions.get( 'WEBGL_multi_draw' );
65
+
66
+ if ( extension === null ) {
67
+
68
+ for ( let i = 0; i < starts.length; i ++ ) {
69
+
70
+ renderInstances( starts[ i ], counts[ i ], primcount[ i ] );
71
+
72
+ }
73
+
74
+ } else {
75
+
76
+ extension.multiDrawArraysInstancedWEBGL( mode, starts, 0, counts, 0, primcount, 0, drawCount );
77
+
78
+ let elementCount = 0;
79
+ for ( let i = 0; i < drawCount; i ++ ) {
80
+
81
+ elementCount += counts[ i ];
82
+
83
+ }
84
+
85
+ for ( let i = 0; i < primcount.length; i ++ ) {
86
+
87
+ info.update( elementCount, mode, primcount[ i ] );
88
+
89
+ }
90
+
91
+ }
92
+
93
+ }
94
+
60
95
  //
61
96
 
62
97
  this.setMode = setMode;
63
98
  this.render = render;
64
99
  this.renderInstances = renderInstances;
65
100
  this.renderMultiDraw = renderMultiDraw;
101
+ this.renderMultiDrawInstances = renderMultiDrawInstances;
66
102
 
67
103
  }
68
104
 
@@ -1,4 +1,6 @@
1
- function WebGLCapabilities( gl, extensions, parameters ) {
1
+ import { FloatType, HalfFloatType, RGBAFormat, UnsignedByteType } from '../../constants.js';
2
+
3
+ function WebGLCapabilities( gl, extensions, parameters, utils ) {
2
4
 
3
5
  let maxAnisotropy;
4
6
 
@@ -22,6 +24,33 @@ function WebGLCapabilities( gl, extensions, parameters ) {
22
24
 
23
25
  }
24
26
 
27
+ function textureFormatReadable( textureFormat ) {
28
+
29
+ if ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {
30
+
31
+ return false;
32
+
33
+ }
34
+
35
+ return true;
36
+
37
+ }
38
+
39
+ function textureTypeReadable( textureType ) {
40
+
41
+ const halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) );
42
+
43
+ if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // Edge and Chrome Mac < 52 (#9513)
44
+ textureType !== FloatType && ! halfFloatSupportedByExt ) {
45
+
46
+ return false;
47
+
48
+ }
49
+
50
+ return true;
51
+
52
+ }
53
+
25
54
  function getMaxPrecision( precision ) {
26
55
 
27
56
  if ( precision === 'highp' ) {
@@ -85,6 +114,9 @@ function WebGLCapabilities( gl, extensions, parameters ) {
85
114
  getMaxAnisotropy: getMaxAnisotropy,
86
115
  getMaxPrecision: getMaxPrecision,
87
116
 
117
+ textureFormatReadable: textureFormatReadable,
118
+ textureTypeReadable: textureTypeReadable,
119
+
88
120
  precision: precision,
89
121
  logarithmicDepthBuffer: logarithmicDepthBuffer,
90
122
 
@@ -66,6 +66,41 @@ function WebGLIndexedBufferRenderer( gl, extensions, info ) {
66
66
 
67
67
  }
68
68
 
69
+ function renderMultiDrawInstances( starts, counts, drawCount, primcount ) {
70
+
71
+ if ( drawCount === 0 ) return;
72
+
73
+ const extension = extensions.get( 'WEBGL_multi_draw' );
74
+
75
+ if ( extension === null ) {
76
+
77
+ for ( let i = 0; i < starts.length; i ++ ) {
78
+
79
+ renderInstances( starts[ i ] / bytesPerElement, counts[ i ], primcount[ i ] );
80
+
81
+ }
82
+
83
+ } else {
84
+
85
+ extension.multiDrawElementsInstancedWEBGL( mode, counts, 0, type, starts, 0, primcount, 0, drawCount );
86
+
87
+ let elementCount = 0;
88
+ for ( let i = 0; i < drawCount; i ++ ) {
89
+
90
+ elementCount += counts[ i ];
91
+
92
+ }
93
+
94
+ for ( let i = 0; i < primcount.length; i ++ ) {
95
+
96
+ info.update( elementCount, mode, primcount[ i ] );
97
+
98
+ }
99
+
100
+ }
101
+
102
+ }
103
+
69
104
  //
70
105
 
71
106
  this.setMode = setMode;
@@ -73,6 +108,7 @@ function WebGLIndexedBufferRenderer( gl, extensions, info ) {
73
108
  this.render = render;
74
109
  this.renderInstances = renderInstances;
75
110
  this.renderMultiDraw = renderMultiDraw;
111
+ this.renderMultiDrawInstances = renderMultiDrawInstances;
76
112
 
77
113
  }
78
114
 
@@ -470,6 +470,12 @@ function WebGLMaterials( renderer, properties ) {
470
470
 
471
471
  }
472
472
 
473
+ if ( material.dispersion > 0 ) {
474
+
475
+ uniforms.dispersion.value = material.dispersion;
476
+
477
+ }
478
+
473
479
  if ( material.iridescence > 0 ) {
474
480
 
475
481
  uniforms.iridescence.value = material.iridescence;
@@ -244,11 +244,7 @@ function resolveIncludes( string ) {
244
244
 
245
245
  }
246
246
 
247
- const shaderChunkMap = new Map( [
248
- [ 'encodings_fragment', 'colorspace_fragment' ], // @deprecated, r154
249
- [ 'encodings_pars_fragment', 'colorspace_pars_fragment' ], // @deprecated, r154
250
- [ 'output_fragment', 'opaque_fragment' ], // @deprecated, r154
251
- ] );
247
+ const shaderChunkMap = new Map();
252
248
 
253
249
  function includeReplacer( match, include ) {
254
250
 
@@ -779,6 +775,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
779
775
  parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',
780
776
  parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',
781
777
 
778
+ parameters.dispersion ? '#define USE_DISPERSION' : '',
779
+
782
780
  parameters.iridescence ? '#define USE_IRIDESCENCE' : '',
783
781
  parameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',
784
782
  parameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',
@@ -129,6 +129,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
129
129
 
130
130
  const HAS_ANISOTROPY = material.anisotropy > 0;
131
131
  const HAS_CLEARCOAT = material.clearcoat > 0;
132
+ const HAS_DISPERSION = material.dispersion > 0;
132
133
  const HAS_IRIDESCENCE = material.iridescence > 0;
133
134
  const HAS_SHEEN = material.sheen > 0;
134
135
  const HAS_TRANSMISSION = material.transmission > 0;
@@ -228,6 +229,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
228
229
  clearcoatNormalMap: HAS_CLEARCOAT_NORMALMAP,
229
230
  clearcoatRoughnessMap: HAS_CLEARCOAT_ROUGHNESSMAP,
230
231
 
232
+ dispersion: HAS_DISPERSION,
233
+
231
234
  iridescence: HAS_IRIDESCENCE,
232
235
  iridescenceMap: HAS_IRIDESCENCEMAP,
233
236
  iridescenceThicknessMap: HAS_IRIDESCENCE_THICKNESSMAP,
@@ -508,6 +511,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
508
511
  _programLayers.enable( 18 );
509
512
  if ( parameters.batching )
510
513
  _programLayers.enable( 19 );
514
+ if ( parameters.dispersion )
515
+ _programLayers.enable( 20 );
511
516
 
512
517
  array.push( _programLayers.mask );
513
518
  _programLayers.disableAll();
@@ -7,7 +7,9 @@ function WebGLRenderState( extensions ) {
7
7
  const lightsArray = [];
8
8
  const shadowsArray = [];
9
9
 
10
- function init() {
10
+ function init( camera ) {
11
+
12
+ state.camera = camera;
11
13
 
12
14
  lightsArray.length = 0;
13
15
  shadowsArray.length = 0;
@@ -42,9 +44,11 @@ function WebGLRenderState( extensions ) {
42
44
  lightsArray: lightsArray,
43
45
  shadowsArray: shadowsArray,
44
46
 
47
+ camera: null,
48
+
45
49
  lights: lights,
46
50
 
47
- transmissionRenderTarget: null
51
+ transmissionRenderTarget: {}
48
52
  };
49
53
 
50
54
  return {
@@ -12,7 +12,7 @@ import { Frustum } from '../../math/Frustum.js';
12
12
 
13
13
  import * as vsm from '../shaders/ShaderLib/vsm.glsl.js';
14
14
 
15
- function WebGLShadowMap( _renderer, _objects, _capabilities ) {
15
+ function WebGLShadowMap( renderer, objects, capabilities ) {
16
16
 
17
17
  let _frustum = new Frustum();
18
18
 
@@ -26,7 +26,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
26
26
 
27
27
  _materialCache = {},
28
28
 
29
- _maxTextureSize = _capabilities.maxTextureSize;
29
+ _maxTextureSize = capabilities.maxTextureSize;
30
30
 
31
31
  const shadowSide = { [ FrontSide ]: BackSide, [ BackSide ]: FrontSide, [ DoubleSide ]: DoubleSide };
32
32
 
@@ -76,11 +76,11 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
76
76
 
77
77
  if ( lights.length === 0 ) return;
78
78
 
79
- const currentRenderTarget = _renderer.getRenderTarget();
80
- const activeCubeFace = _renderer.getActiveCubeFace();
81
- const activeMipmapLevel = _renderer.getActiveMipmapLevel();
79
+ const currentRenderTarget = renderer.getRenderTarget();
80
+ const activeCubeFace = renderer.getActiveCubeFace();
81
+ const activeMipmapLevel = renderer.getActiveMipmapLevel();
82
82
 
83
- const _state = _renderer.state;
83
+ const _state = renderer.state;
84
84
 
85
85
  // Set GL state for depth map.
86
86
  _state.setBlending( NoBlending );
@@ -154,8 +154,8 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
154
154
 
155
155
  }
156
156
 
157
- _renderer.setRenderTarget( shadow.map );
158
- _renderer.clear();
157
+ renderer.setRenderTarget( shadow.map );
158
+ renderer.clear();
159
159
 
160
160
  const viewportCount = shadow.getViewportCount();
161
161
 
@@ -196,13 +196,13 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
196
196
 
197
197
  scope.needsUpdate = false;
198
198
 
199
- _renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );
199
+ renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );
200
200
 
201
201
  };
202
202
 
203
203
  function VSMPass( shadow, camera ) {
204
204
 
205
- const geometry = _objects.update( fullScreenMesh );
205
+ const geometry = objects.update( fullScreenMesh );
206
206
 
207
207
  if ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) {
208
208
 
@@ -225,18 +225,18 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
225
225
  shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;
226
226
  shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;
227
227
  shadowMaterialVertical.uniforms.radius.value = shadow.radius;
228
- _renderer.setRenderTarget( shadow.mapPass );
229
- _renderer.clear();
230
- _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );
228
+ renderer.setRenderTarget( shadow.mapPass );
229
+ renderer.clear();
230
+ renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );
231
231
 
232
232
  // horizontal pass
233
233
 
234
234
  shadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;
235
235
  shadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;
236
236
  shadowMaterialHorizontal.uniforms.radius.value = shadow.radius;
237
- _renderer.setRenderTarget( shadow.map );
238
- _renderer.clear();
239
- _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );
237
+ renderer.setRenderTarget( shadow.map );
238
+ renderer.clear();
239
+ renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );
240
240
 
241
241
  }
242
242
 
@@ -254,7 +254,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
254
254
 
255
255
  result = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial;
256
256
 
257
- if ( ( _renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||
257
+ if ( ( renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||
258
258
  ( material.displacementMap && material.displacementScale !== 0 ) ||
259
259
  ( material.alphaMap && material.alphaTest > 0 ) ||
260
260
  ( material.map && material.alphaTest > 0 ) ) {
@@ -319,7 +319,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
319
319
 
320
320
  if ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {
321
321
 
322
- const materialProperties = _renderer.properties.get( result );
322
+ const materialProperties = renderer.properties.get( result );
323
323
  materialProperties.light = light;
324
324
 
325
325
  }
@@ -340,7 +340,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
340
340
 
341
341
  object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );
342
342
 
343
- const geometry = _objects.update( object );
343
+ const geometry = objects.update( object );
344
344
  const material = object.material;
345
345
 
346
346
  if ( Array.isArray( material ) ) {
@@ -356,11 +356,11 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
356
356
 
357
357
  const depthMaterial = getDepthMaterial( object, groupMaterial, light, type );
358
358
 
359
- object.onBeforeShadow( _renderer, object, camera, shadowCamera, geometry, depthMaterial, group );
359
+ object.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );
360
360
 
361
- _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );
361
+ renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );
362
362
 
363
- object.onAfterShadow( _renderer, object, camera, shadowCamera, geometry, depthMaterial, group );
363
+ object.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );
364
364
 
365
365
  }
366
366
 
@@ -370,11 +370,11 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
370
370
 
371
371
  const depthMaterial = getDepthMaterial( object, material, light, type );
372
372
 
373
- object.onBeforeShadow( _renderer, object, camera, shadowCamera, geometry, depthMaterial, null );
373
+ object.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );
374
374
 
375
- _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );
375
+ renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );
376
376
 
377
- object.onAfterShadow( _renderer, object, camera, shadowCamera, geometry, depthMaterial, null );
377
+ object.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );
378
378
 
379
379
  }
380
380
 
@@ -1,4 +1,4 @@
1
- import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBAFormat, RGB_ETC1_Format, DepthFormat, DepthStencilFormat, UnsignedIntType, UnsignedInt248Type, FloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, UnsignedByteType, NoColorSpace, LinearSRGBColorSpace, NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, SRGBTransfer, LinearTransfer } from '../../constants.js';
1
+ import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBAFormat, DepthFormat, DepthStencilFormat, UnsignedIntType, UnsignedInt248Type, FloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, UnsignedByteType, NoColorSpace, LinearSRGBColorSpace, NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, SRGBTransfer, LinearTransfer } from '../../constants.js';
2
2
  import { createElementNS } from '../../utils.js';
3
3
  import { ColorManagement } from '../../math/ColorManagement.js';
4
4
  import { Vector2 } from '../../math/Vector2.js';
@@ -747,7 +747,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
747
747
  let mipmap;
748
748
  const mipmaps = texture.mipmaps;
749
749
 
750
- const useTexStorage = ( texture.isVideoTexture !== true && glInternalFormat !== RGB_ETC1_Format );
750
+ const useTexStorage = ( texture.isVideoTexture !== true );
751
751
  const allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );
752
752
  const dataReady = source.dataReady;
753
753
  const levels = getMipLevels( texture, image );
@@ -2004,112 +2004,120 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
2004
2004
 
2005
2005
  }
2006
2006
 
2007
+ const invalidationArrayRead = [];
2008
+ const invalidationArrayDraw = [];
2009
+
2007
2010
  function updateMultisampleRenderTarget( renderTarget ) {
2008
2011
 
2009
- if ( ( renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {
2012
+ if ( renderTarget.samples > 0 ) {
2010
2013
 
2011
- const textures = renderTarget.textures;
2012
- const width = renderTarget.width;
2013
- const height = renderTarget.height;
2014
- let mask = _gl.COLOR_BUFFER_BIT;
2015
- const invalidationArray = [];
2016
- const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
2017
- const renderTargetProperties = properties.get( renderTarget );
2018
- const isMultipleRenderTargets = ( textures.length > 1 );
2019
-
2020
- // If MRT we need to remove FBO attachments
2021
- if ( isMultipleRenderTargets ) {
2014
+ if ( useMultisampledRTT( renderTarget ) === false ) {
2022
2015
 
2023
- for ( let i = 0; i < textures.length; i ++ ) {
2016
+ const textures = renderTarget.textures;
2017
+ const width = renderTarget.width;
2018
+ const height = renderTarget.height;
2019
+ let mask = _gl.COLOR_BUFFER_BIT;
2020
+ const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
2021
+ const renderTargetProperties = properties.get( renderTarget );
2022
+ const isMultipleRenderTargets = ( textures.length > 1 );
2024
2023
 
2025
- state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
2026
- _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null );
2024
+ // If MRT we need to remove FBO attachments
2025
+ if ( isMultipleRenderTargets ) {
2026
+
2027
+ for ( let i = 0; i < textures.length; i ++ ) {
2028
+
2029
+ state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
2030
+ _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null );
2027
2031
 
2028
- state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
2029
- _gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0 );
2032
+ state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
2033
+ _gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0 );
2034
+
2035
+ }
2030
2036
 
2031
2037
  }
2032
2038
 
2033
- }
2039
+ state.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
2040
+ state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
2034
2041
 
2035
- state.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
2036
- state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
2042
+ for ( let i = 0; i < textures.length; i ++ ) {
2037
2043
 
2038
- for ( let i = 0; i < textures.length; i ++ ) {
2044
+ if ( renderTarget.resolveDepthBuffer ) {
2039
2045
 
2040
- invalidationArray.push( _gl.COLOR_ATTACHMENT0 + i );
2046
+ if ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;
2041
2047
 
2042
- if ( renderTarget.depthBuffer ) {
2048
+ // resolving stencil is slow with a D3D backend. disable it for all transmission render targets (see #27799)
2043
2049
 
2044
- invalidationArray.push( depthStyle );
2050
+ if ( renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;
2045
2051
 
2046
- }
2052
+ }
2047
2053
 
2048
- const ignoreDepthValues = ( renderTargetProperties.__ignoreDepthValues !== undefined ) ? renderTargetProperties.__ignoreDepthValues : false;
2054
+ if ( isMultipleRenderTargets ) {
2049
2055
 
2050
- if ( ignoreDepthValues === false ) {
2056
+ _gl.framebufferRenderbuffer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
2051
2057
 
2052
- if ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;
2058
+ const webglTexture = properties.get( textures[ i ] ).__webglTexture;
2059
+ _gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0 );
2053
2060
 
2054
- // resolving stencil is slow with a D3D backend. disable it for all transmission render targets (see #27799)
2061
+ }
2055
2062
 
2056
- if ( renderTarget.stencilBuffer && renderTargetProperties.__isTransmissionRenderTarget !== true ) mask |= _gl.STENCIL_BUFFER_BIT;
2063
+ _gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );
2057
2064
 
2058
- }
2065
+ if ( supportsInvalidateFramebuffer === true ) {
2059
2066
 
2060
- if ( isMultipleRenderTargets ) {
2067
+ invalidationArrayRead.length = 0;
2068
+ invalidationArrayDraw.length = 0;
2061
2069
 
2062
- _gl.framebufferRenderbuffer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
2070
+ invalidationArrayRead.push( _gl.COLOR_ATTACHMENT0 + i );
2063
2071
 
2064
- }
2072
+ if ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false ) {
2065
2073
 
2066
- if ( ignoreDepthValues === true ) {
2074
+ invalidationArrayRead.push( depthStyle );
2075
+ invalidationArrayDraw.push( depthStyle );
2067
2076
 
2068
- _gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, [ depthStyle ] );
2069
- _gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );
2077
+ _gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, invalidationArrayDraw );
2070
2078
 
2071
- }
2079
+ }
2072
2080
 
2073
- if ( isMultipleRenderTargets ) {
2081
+ _gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArrayRead );
2074
2082
 
2075
- const webglTexture = properties.get( textures[ i ] ).__webglTexture;
2076
- _gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0 );
2083
+ }
2077
2084
 
2078
2085
  }
2079
2086
 
2080
- _gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );
2087
+ state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );
2088
+ state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );
2081
2089
 
2082
- if ( supportsInvalidateFramebuffer ) {
2090
+ // If MRT since pre-blit we removed the FBO we need to reconstruct the attachments
2091
+ if ( isMultipleRenderTargets ) {
2083
2092
 
2084
- _gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArray );
2093
+ for ( let i = 0; i < textures.length; i ++ ) {
2085
2094
 
2086
- }
2095
+ state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
2096
+ _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
2087
2097
 
2098
+ const webglTexture = properties.get( textures[ i ] ).__webglTexture;
2088
2099
 
2089
- }
2100
+ state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
2101
+ _gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0 );
2090
2102
 
2091
- state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );
2092
- state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );
2103
+ }
2093
2104
 
2094
- // If MRT since pre-blit we removed the FBO we need to reconstruct the attachments
2095
- if ( isMultipleRenderTargets ) {
2105
+ }
2096
2106
 
2097
- for ( let i = 0; i < textures.length; i ++ ) {
2107
+ state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
2098
2108
 
2099
- state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
2100
- _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
2109
+ } else {
2110
+
2111
+ if ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false && supportsInvalidateFramebuffer ) {
2101
2112
 
2102
- const webglTexture = properties.get( textures[ i ] ).__webglTexture;
2113
+ const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
2103
2114
 
2104
- state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
2105
- _gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0 );
2115
+ _gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );
2106
2116
 
2107
2117
  }
2108
2118
 
2109
2119
  }
2110
2120
 
2111
- state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
2112
-
2113
2121
  }
2114
2122
 
2115
2123
  }
@@ -101,33 +101,15 @@ function WebGLUtils( gl, extensions ) {
101
101
 
102
102
  }
103
103
 
104
- // ETC1
104
+ // ETC
105
105
 
106
- if ( p === RGB_ETC1_Format ) {
107
-
108
- extension = extensions.get( 'WEBGL_compressed_texture_etc1' );
109
-
110
- if ( extension !== null ) {
111
-
112
- return extension.COMPRESSED_RGB_ETC1_WEBGL;
113
-
114
- } else {
115
-
116
- return null;
117
-
118
- }
119
-
120
- }
121
-
122
- // ETC2
123
-
124
- if ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {
106
+ if ( p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {
125
107
 
126
108
  extension = extensions.get( 'WEBGL_compressed_texture_etc' );
127
109
 
128
110
  if ( extension !== null ) {
129
111
 
130
- if ( p === RGB_ETC2_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;
112
+ if ( p === RGB_ETC1_Format || p === RGB_ETC2_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;
131
113
  if ( p === RGBA_ETC2_EAC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;
132
114
 
133
115
  } else {