super-three 0.177.0 → 0.179.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 (211) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +959 -231
  3. package/build/three.core.js +751 -170
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +210 -64
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +78 -29
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +3269 -1545
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +3093 -1545
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +1 -2
  14. package/examples/jsm/capabilities/WebGL.js +0 -27
  15. package/examples/jsm/capabilities/WebGPU.js +1 -1
  16. package/examples/jsm/controls/ArcballControls.js +1 -1
  17. package/examples/jsm/controls/TransformControls.js +61 -14
  18. package/examples/jsm/csm/CSMShadowNode.js +4 -4
  19. package/examples/jsm/environments/RoomEnvironment.js +8 -3
  20. package/examples/jsm/exporters/USDZExporter.js +676 -299
  21. package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
  22. package/examples/jsm/interactive/HTMLMesh.js +5 -3
  23. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  24. package/examples/jsm/lights/LightProbeGenerator.js +14 -3
  25. package/examples/jsm/loaders/ColladaLoader.js +1 -1
  26. package/examples/jsm/loaders/EXRLoader.js +210 -22
  27. package/examples/jsm/loaders/FBXLoader.js +2 -2
  28. package/examples/jsm/loaders/MaterialXLoader.js +212 -30
  29. package/examples/jsm/loaders/TTFLoader.js +13 -1
  30. package/examples/jsm/loaders/USDLoader.js +219 -0
  31. package/examples/jsm/loaders/USDZLoader.js +4 -892
  32. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  33. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  34. package/examples/jsm/objects/LensflareMesh.js +3 -3
  35. package/examples/jsm/objects/SkyMesh.js +2 -2
  36. package/examples/jsm/physics/RapierPhysics.js +95 -16
  37. package/examples/jsm/postprocessing/GTAOPass.js +10 -9
  38. package/examples/jsm/postprocessing/OutlinePass.js +17 -17
  39. package/examples/jsm/postprocessing/SSAOPass.js +10 -9
  40. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
  41. package/examples/jsm/transpiler/AST.js +381 -30
  42. package/examples/jsm/transpiler/GLSLDecoder.js +226 -86
  43. package/examples/jsm/transpiler/Linker.js +327 -0
  44. package/examples/jsm/transpiler/TSLEncoder.js +197 -92
  45. package/examples/jsm/transpiler/Transpiler.js +17 -1
  46. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  47. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  48. package/examples/jsm/tsl/display/BloomNode.js +8 -7
  49. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  50. package/examples/jsm/tsl/display/GaussianBlurNode.js +8 -10
  51. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  52. package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +181 -172
  53. package/examples/jsm/tsl/display/hashBlur.js +3 -3
  54. package/examples/jsm/tsl/lighting/TiledLightsNode.js +1 -1
  55. package/package.json +1 -1
  56. package/src/Three.Core.js +1 -0
  57. package/src/Three.TSL.js +77 -28
  58. package/src/Three.WebGPU.js +2 -0
  59. package/src/animation/KeyframeTrack.js +1 -1
  60. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  61. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  62. package/src/cameras/Camera.js +14 -0
  63. package/src/cameras/OrthographicCamera.js +1 -1
  64. package/src/cameras/PerspectiveCamera.js +1 -1
  65. package/src/constants.js +3 -3
  66. package/src/core/BufferAttribute.js +3 -3
  67. package/src/core/Clock.js +2 -8
  68. package/src/core/GLBufferAttribute.js +13 -1
  69. package/src/core/Object3D.js +1 -1
  70. package/{examples/jsm/misc → src/core}/Timer.js +4 -42
  71. package/src/extras/PMREMGenerator.js +11 -0
  72. package/src/extras/core/Path.js +22 -22
  73. package/src/helpers/CameraHelper.js +41 -11
  74. package/src/helpers/SkeletonHelper.js +35 -6
  75. package/src/lights/LightShadow.js +21 -8
  76. package/src/lights/PointLightShadow.js +1 -1
  77. package/src/loaders/FileLoader.js +27 -4
  78. package/src/loaders/ImageBitmapLoader.js +27 -4
  79. package/src/loaders/ImageLoader.js +55 -8
  80. package/src/loaders/Loader.js +14 -0
  81. package/src/loaders/LoadingManager.js +23 -0
  82. package/src/materials/MeshBasicMaterial.js +1 -1
  83. package/src/materials/nodes/Line2NodeMaterial.js +0 -8
  84. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  85. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  86. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  87. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  88. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  89. package/src/materials/nodes/NodeMaterial.js +28 -5
  90. package/src/materials/nodes/PointsNodeMaterial.js +5 -0
  91. package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -2
  92. package/src/math/Frustum.js +25 -9
  93. package/src/math/FrustumArray.js +10 -5
  94. package/src/math/Line3.js +129 -2
  95. package/src/math/Matrix4.js +48 -27
  96. package/src/math/Quaternion.js +1 -1
  97. package/src/math/Spherical.js +2 -2
  98. package/src/nodes/Nodes.js +2 -3
  99. package/src/nodes/TSL.js +5 -3
  100. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  101. package/src/nodes/accessors/Bitangent.js +31 -25
  102. package/src/nodes/accessors/Camera.js +12 -12
  103. package/src/nodes/accessors/Normal.js +95 -29
  104. package/src/nodes/accessors/Object3DNode.js +1 -1
  105. package/src/nodes/accessors/Position.js +7 -7
  106. package/src/nodes/accessors/ReferenceNode.js +18 -3
  107. package/src/nodes/accessors/ReflectVector.js +3 -3
  108. package/src/nodes/accessors/SceneNode.js +1 -1
  109. package/src/nodes/accessors/StorageTextureNode.js +1 -1
  110. package/src/nodes/accessors/Tangent.js +25 -17
  111. package/src/nodes/accessors/TangentUtils.js +46 -0
  112. package/src/nodes/accessors/TextureBicubic.js +21 -3
  113. package/src/nodes/accessors/TextureNode.js +12 -0
  114. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  115. package/src/nodes/core/ArrayNode.js +12 -0
  116. package/src/nodes/core/AssignNode.js +3 -0
  117. package/src/nodes/core/CacheNode.js +0 -14
  118. package/src/nodes/core/ContextNode.js +20 -1
  119. package/src/nodes/core/Node.js +15 -3
  120. package/src/nodes/core/NodeBuilder.js +228 -92
  121. package/src/nodes/core/NodeUtils.js +4 -1
  122. package/src/nodes/core/StackNode.js +49 -29
  123. package/src/nodes/core/SubBuildNode.js +89 -0
  124. package/src/nodes/core/UniformNode.js +63 -5
  125. package/src/nodes/core/VarNode.js +91 -2
  126. package/src/nodes/core/VaryingNode.js +6 -4
  127. package/src/nodes/display/BlendModes.js +2 -2
  128. package/src/nodes/display/FrontFacingNode.js +34 -2
  129. package/src/nodes/display/NormalMapNode.js +19 -50
  130. package/src/nodes/display/PassNode.js +157 -9
  131. package/src/nodes/display/ScreenNode.js +0 -26
  132. package/src/nodes/display/ViewportTextureNode.js +67 -7
  133. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  134. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  135. package/src/nodes/functions/PhongLightingModel.js +3 -3
  136. package/src/nodes/functions/PhysicalLightingModel.js +16 -16
  137. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  138. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  139. package/src/nodes/gpgpu/ComputeNode.js +67 -23
  140. package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
  141. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  142. package/src/nodes/lighting/LightsNode.js +4 -4
  143. package/src/nodes/lighting/ProjectorLightNode.js +19 -6
  144. package/src/nodes/lighting/ShadowFilterNode.js +1 -1
  145. package/src/nodes/lighting/ShadowNode.js +2 -2
  146. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  147. package/src/nodes/materialx/lib/mx_noise.js +165 -1
  148. package/src/nodes/math/ConditionalNode.js +1 -20
  149. package/src/nodes/math/MathNode.js +90 -55
  150. package/src/nodes/math/OperatorNode.js +22 -39
  151. package/src/nodes/tsl/TSLBase.js +1 -0
  152. package/src/nodes/tsl/TSLCore.js +114 -55
  153. package/src/nodes/utils/DebugNode.js +1 -1
  154. package/src/nodes/utils/EquirectUV.js +27 -0
  155. package/src/nodes/utils/EventNode.js +83 -0
  156. package/src/nodes/utils/LoopNode.js +0 -17
  157. package/src/nodes/utils/MatcapUV.js +22 -0
  158. package/src/nodes/utils/RTTNode.js +22 -5
  159. package/src/nodes/utils/ReflectorNode.js +11 -4
  160. package/src/nodes/utils/SampleNode.js +81 -0
  161. package/src/nodes/utils/TriplanarTextures.js +65 -0
  162. package/src/objects/BatchedMesh.js +4 -2
  163. package/src/renderers/WebGLRenderer.js +26 -24
  164. package/src/renderers/common/Background.js +2 -2
  165. package/src/renderers/common/Bindings.js +19 -18
  166. package/src/renderers/common/Color4.js +2 -2
  167. package/src/renderers/common/CubeRenderTarget.js +1 -1
  168. package/src/renderers/common/PostProcessing.js +60 -5
  169. package/src/renderers/common/RenderObject.js +68 -3
  170. package/src/renderers/common/Renderer.js +19 -16
  171. package/src/renderers/common/SampledTexture.js +3 -71
  172. package/src/renderers/common/Sampler.js +79 -0
  173. package/src/renderers/common/Storage3DTexture.js +100 -0
  174. package/src/renderers/common/StorageArrayTexture.js +84 -0
  175. package/src/renderers/common/StorageTexture.js +19 -0
  176. package/src/renderers/common/Textures.js +19 -3
  177. package/src/renderers/common/XRManager.js +31 -12
  178. package/src/renderers/common/XRRenderTarget.js +21 -4
  179. package/src/renderers/common/extras/PMREMGenerator.js +1 -1
  180. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  181. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
  182. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  183. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  184. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  185. package/src/renderers/webgl/WebGLProgram.js +12 -6
  186. package/src/renderers/webgl/WebGLPrograms.js +6 -4
  187. package/src/renderers/webgl/WebGLShadowMap.js +11 -1
  188. package/src/renderers/webgl/WebGLState.js +4 -4
  189. package/src/renderers/webgl/WebGLTextures.js +19 -7
  190. package/src/renderers/webgl-fallback/WebGLBackend.js +103 -72
  191. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -5
  192. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  193. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  194. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +2 -0
  195. package/src/renderers/webgpu/WebGPUBackend.js +63 -16
  196. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +64 -79
  197. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +6 -0
  198. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +45 -31
  199. package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -1
  200. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +5 -5
  201. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +12 -65
  202. package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
  203. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  204. package/src/renderers/webxr/WebXRManager.js +68 -6
  205. package/src/textures/ExternalTexture.js +45 -0
  206. package/src/textures/FramebufferTexture.js +2 -2
  207. package/src/textures/Source.js +11 -1
  208. package/src/textures/VideoTexture.js +30 -2
  209. package/src/nodes/utils/EquirectUVNode.js +0 -65
  210. package/src/nodes/utils/MatcapUVNode.js +0 -49
  211. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -171,6 +171,15 @@ class XRManager extends EventDispatcher {
171
171
  */
172
172
  this._supportsLayers = false;
173
173
 
174
+ /**
175
+ * Whether the device supports binding gl objects.
176
+ *
177
+ * @private
178
+ * @type {boolean}
179
+ * @readonly
180
+ */
181
+ this._supportsGlBinding = typeof XRWebGLBinding !== 'undefined';
182
+
174
183
  this._frameBufferTargets = null;
175
184
 
176
185
  /**
@@ -357,7 +366,7 @@ class XRManager extends EventDispatcher {
357
366
  * @type {boolean}
358
367
  * @readonly
359
368
  */
360
- this._useLayers = ( typeof XRWebGLBinding !== 'undefined' && 'createProjectionLayer' in XRWebGLBinding.prototype ); // eslint-disable-line compat/compat
369
+ this._useLayers = ( this._supportsGlBinding && 'createProjectionLayer' in XRWebGLBinding.prototype ); // eslint-disable-line compat/compat
361
370
 
362
371
  /**
363
372
  * Whether the usage of multiview has been requested by the application or not.
@@ -641,7 +650,7 @@ class XRManager extends EventDispatcher {
641
650
  resolveStencilBuffer: false
642
651
  } );
643
652
 
644
- renderTarget.autoAllocateDepthBuffer = true;
653
+ renderTarget._autoAllocateDepthBuffer = true;
645
654
 
646
655
  const material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );
647
656
  material.map = renderTarget.texture;
@@ -732,7 +741,7 @@ class XRManager extends EventDispatcher {
732
741
  resolveStencilBuffer: false
733
742
  } );
734
743
 
735
- renderTarget.autoAllocateDepthBuffer = true;
744
+ renderTarget._autoAllocateDepthBuffer = true;
736
745
 
737
746
  const material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );
738
747
  material.map = renderTarget.texture;
@@ -806,7 +815,7 @@ class XRManager extends EventDispatcher {
806
815
  for ( const layer of this._layers ) {
807
816
 
808
817
  layer.renderTarget.isXRRenderTarget = this._session !== null;
809
- layer.renderTarget.hasExternalTextures = layer.renderTarget.isXRRenderTarget;
818
+ layer.renderTarget._hasExternalTextures = layer.renderTarget.isXRRenderTarget;
810
819
 
811
820
  if ( layer.renderTarget.isXRRenderTarget && this._supportsLayers ) {
812
821
 
@@ -915,9 +924,18 @@ class XRManager extends EventDispatcher {
915
924
 
916
925
  //
917
926
 
927
+ if ( this._supportsGlBinding ) {
928
+
929
+ const glBinding = new XRWebGLBinding( session, gl );
930
+ this._glBinding = glBinding;
931
+
932
+ }
933
+
934
+ //
935
+
918
936
  if ( this._useLayers === true ) {
919
937
 
920
- // default path using XRWebGLBinding/XRProjectionLayer
938
+ // default path using XRProjectionLayer
921
939
 
922
940
  let depthFormat = null;
923
941
  let depthType = null;
@@ -945,11 +963,9 @@ class XRManager extends EventDispatcher {
945
963
 
946
964
  }
947
965
 
948
- const glBinding = new XRWebGLBinding( session, gl );
949
- const glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
966
+ const glProjLayer = this._glBinding.createProjectionLayer( projectionlayerInit );
950
967
  const layersArray = [ glProjLayer ];
951
968
 
952
- this._glBinding = glBinding;
953
969
  this._glProjLayer = glProjLayer;
954
970
 
955
971
  renderer.setPixelRatio( 1 );
@@ -974,7 +990,7 @@ class XRManager extends EventDispatcher {
974
990
  multiview: this._useMultiview
975
991
  } );
976
992
 
977
- this._xrRenderTarget.hasExternalTextures = true;
993
+ this._xrRenderTarget._hasExternalTextures = true;
978
994
  this._xrRenderTarget.depth = this._useMultiview ? 2 : 1;
979
995
 
980
996
  this._supportsLayers = session.enabledFeatures.includes( 'layers' );
@@ -1036,6 +1052,7 @@ class XRManager extends EventDispatcher {
1036
1052
  }
1037
1053
  );
1038
1054
 
1055
+ this._xrRenderTarget._isOpaqueFramebuffer = true;
1039
1056
  this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
1040
1057
 
1041
1058
  }
@@ -1094,9 +1111,11 @@ class XRManager extends EventDispatcher {
1094
1111
 
1095
1112
  }
1096
1113
 
1097
- cameraL.layers.mask = camera.layers.mask | 0b010;
1098
- cameraR.layers.mask = camera.layers.mask | 0b100;
1099
- cameraXR.layers.mask = cameraL.layers.mask | cameraR.layers.mask;
1114
+ // inherit camera layers and enable eye layers (1 = left, 2 = right)
1115
+ cameraXR.layers.mask = camera.layers.mask | 0b110;
1116
+ cameraL.layers.mask = cameraXR.layers.mask & 0b011;
1117
+ cameraR.layers.mask = cameraXR.layers.mask & 0b101;
1118
+
1100
1119
 
1101
1120
  const parent = camera.parent;
1102
1121
  const cameras = cameraXR.cameras;
@@ -34,10 +34,11 @@ class XRRenderTarget extends RenderTarget {
34
34
  * are defined by external textures. This flag is
35
35
  * set to `true` when using the WebXR Layers API.
36
36
  *
37
+ * @private
37
38
  * @type {boolean}
38
39
  * @default false
39
40
  */
40
- this.hasExternalTextures = false;
41
+ this._hasExternalTextures = false;
41
42
 
42
43
  /**
43
44
  * Whether a depth buffer should automatically be allocated
@@ -50,10 +51,25 @@ class XRRenderTarget extends RenderTarget {
50
51
  *
51
52
  * Reference: {@link https://www.w3.org/TR/webxrlayers-1/#dom-xrprojectionlayer-ignoredepthvalues}.
52
53
  *
54
+ * @private
53
55
  * @type {boolean}
54
56
  * @default true
55
57
  */
56
- this.autoAllocateDepthBuffer = true;
58
+ this._autoAllocateDepthBuffer = true;
59
+
60
+ /**
61
+ * Whether this render target is associated with a XRWebGLLayer.
62
+ *
63
+ * A XRWebGLLayer points to an opaque framebuffer. Basically,
64
+ * this means that you don't have access to its bound color,
65
+ * stencil and depth buffers. We need to handle this framebuffer
66
+ * differently since its textures are always bound.
67
+ *
68
+ * @private
69
+ * @type {boolean}
70
+ * @default false
71
+ * */
72
+ this._isOpaqueFramebuffer = false;
57
73
 
58
74
  }
59
75
 
@@ -61,8 +77,9 @@ class XRRenderTarget extends RenderTarget {
61
77
 
62
78
  super.copy( source );
63
79
 
64
- this.hasExternalTextures = source.hasExternalTextures;
65
- this.autoAllocateDepthBuffer = source.autoAllocateDepthBuffer;
80
+ this._hasExternalTextures = source._hasExternalTextures;
81
+ this._autoAllocateDepthBuffer = source._autoAllocateDepthBuffer;
82
+ this._isOpaqueFramebuffer = source._isOpaqueFramebuffer;
66
83
 
67
84
  return this;
68
85
 
@@ -1,6 +1,6 @@
1
1
  import NodeMaterial from '../../../materials/nodes/NodeMaterial.js';
2
2
  import { getDirection, blur } from '../../../nodes/pmrem/PMREMUtils.js';
3
- import { equirectUV } from '../../../nodes/utils/EquirectUVNode.js';
3
+ import { equirectUV } from '../../../nodes/utils/EquirectUV.js';
4
4
  import { uniform } from '../../../nodes/core/UniformNode.js';
5
5
  import { uniformArray } from '../../../nodes/accessors/UniformArrayNode.js';
6
6
  import { texture } from '../../../nodes/accessors/TextureNode.js';
@@ -45,18 +45,6 @@ class NodeSampledTexture extends SampledTexture {
45
45
 
46
46
  }
47
47
 
48
- /**
49
- * Overwrites the default to additionally check if the node value has changed.
50
- *
51
- * @param {number} generation - The generation.
52
- * @return {boolean} Whether an update is required or not.
53
- */
54
- needsBindingsUpdate( generation ) {
55
-
56
- return this.textureNode.value !== this.texture || super.needsBindingsUpdate( generation );
57
-
58
- }
59
-
60
48
  /**
61
49
  * Updates the binding.
62
50
  *
@@ -75,7 +75,17 @@ export default /* glsl */`
75
75
 
76
76
  float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {
77
77
 
78
- return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );
78
+ float depth = unpackRGBAToDepth( texture2D( depths, uv ) );
79
+
80
+ #ifdef USE_REVERSEDEPTHBUF
81
+
82
+ return step( depth, compare );
83
+
84
+ #else
85
+
86
+ return step( compare, depth );
87
+
88
+ #endif
79
89
 
80
90
  }
81
91
 
@@ -91,7 +101,15 @@ export default /* glsl */`
91
101
 
92
102
  vec2 distribution = texture2DDistribution( shadow, uv );
93
103
 
94
- float hard_shadow = step( compare , distribution.x ); // Hard Shadow
104
+ #ifdef USE_REVERSEDEPTHBUF
105
+
106
+ float hard_shadow = step( distribution.x, compare ); // Hard Shadow
107
+
108
+ #else
109
+
110
+ float hard_shadow = step( compare , distribution.x ); // Hard Shadow
111
+
112
+ #endif
95
113
 
96
114
  if (hard_shadow != 1.0 ) {
97
115
 
@@ -80,8 +80,17 @@ void main() {
80
80
 
81
81
  #include <logdepthbuf_fragment>
82
82
 
83
- // Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.
84
- float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;
83
+ // Higher precision equivalent of gl_FragCoord.z
84
+
85
+ #ifdef USE_REVERSEDEPTHBUF
86
+
87
+ float fragCoordZ = vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ];
88
+
89
+ #else
90
+
91
+ float fragCoordZ = 0.5 * vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ] + 0.5;
92
+
93
+ #endif
85
94
 
86
95
  #if DEPTH_PACKING == 3200
87
96
 
@@ -21,6 +21,10 @@ function WebGLAttributes( gl ) {
21
21
 
22
22
  type = gl.FLOAT;
23
23
 
24
+ } else if ( typeof Float16Array !== 'undefined' && array instanceof Float16Array ) {
25
+
26
+ type = gl.HALF_FLOAT;
27
+
24
28
  } else if ( array instanceof Uint16Array ) {
25
29
 
26
30
  if ( attribute.isFloat16BufferAttribute ) {
@@ -92,7 +92,7 @@ function WebGLCapabilities( gl, extensions, parameters, utils ) {
92
92
  }
93
93
 
94
94
  const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;
95
- const reverseDepthBuffer = parameters.reverseDepthBuffer === true && extensions.has( 'EXT_clip_control' );
95
+ const reversedDepthBuffer = parameters.reversedDepthBuffer === true && extensions.has( 'EXT_clip_control' );
96
96
 
97
97
  const maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );
98
98
  const maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );
@@ -120,7 +120,7 @@ function WebGLCapabilities( gl, extensions, parameters, utils ) {
120
120
 
121
121
  precision: precision,
122
122
  logarithmicDepthBuffer: logarithmicDepthBuffer,
123
- reverseDepthBuffer: reverseDepthBuffer,
123
+ reversedDepthBuffer: reversedDepthBuffer,
124
124
 
125
125
  maxTextures: maxTextures,
126
126
  maxVertexTextures: maxVertexTextures,
@@ -57,7 +57,9 @@ function getEncodingComponents( colorSpace ) {
57
57
  function getShaderErrors( gl, shader, type ) {
58
58
 
59
59
  const status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );
60
- const errors = gl.getShaderInfoLog( shader ).trim();
60
+
61
+ const shaderInfoLog = gl.getShaderInfoLog( shader ) || '';
62
+ const errors = shaderInfoLog.trim();
61
63
 
62
64
  if ( status && errors === '' ) return '';
63
65
 
@@ -654,7 +656,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
654
656
  parameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',
655
657
 
656
658
  parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
657
- parameters.reverseDepthBuffer ? '#define USE_REVERSEDEPTHBUF' : '',
659
+ parameters.reversedDepthBuffer ? '#define USE_REVERSEDEPTHBUF' : '',
658
660
 
659
661
  'uniform mat4 modelMatrix;',
660
662
  'uniform mat4 modelViewMatrix;',
@@ -821,7 +823,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
821
823
  parameters.decodeVideoTextureEmissive ? '#define DECODE_VIDEO_TEXTURE_EMISSIVE' : '',
822
824
 
823
825
  parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
824
- parameters.reverseDepthBuffer ? '#define USE_REVERSEDEPTHBUF' : '',
826
+ parameters.reversedDepthBuffer ? '#define USE_REVERSEDEPTHBUF' : '',
825
827
 
826
828
  'uniform mat4 viewMatrix;',
827
829
  'uniform vec3 cameraPosition;',
@@ -967,9 +969,13 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
967
969
  // check for link errors
968
970
  if ( renderer.debug.checkShaderErrors ) {
969
971
 
970
- const programLog = gl.getProgramInfoLog( program ).trim();
971
- const vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();
972
- const fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();
972
+ const programInfoLog = gl.getProgramInfoLog( program ) || '';
973
+ const vertexShaderInfoLog = gl.getShaderInfoLog( glVertexShader ) || '';
974
+ const fragmentShaderInfoLog = gl.getShaderInfoLog( glFragmentShader ) || '';
975
+
976
+ const programLog = programInfoLog.trim();
977
+ const vertexLog = vertexShaderInfoLog.trim();
978
+ const fragmentLog = fragmentShaderInfoLog.trim();
973
979
 
974
980
  let runnable = true;
975
981
  let haveDiagnostics = true;
@@ -108,7 +108,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
108
108
  }
109
109
 
110
110
  const currentRenderTarget = renderer.getRenderTarget();
111
- const reverseDepthBuffer = renderer.state.buffers.depth.getReversed();
111
+ const reversedDepthBuffer = renderer.state.buffers.depth.getReversed();
112
112
 
113
113
  const numMultiviewViews = currentRenderTarget && currentRenderTarget.isWebGLMultiviewRenderTarget ? currentRenderTarget.numViews : 0;
114
114
 
@@ -305,11 +305,11 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
305
305
  useFog: material.fog === true,
306
306
  fogExp2: ( !! fog && fog.isFogExp2 ),
307
307
 
308
- flatShading: material.flatShading === true,
308
+ flatShading: ( material.flatShading === true && material.wireframe === false ),
309
309
 
310
310
  sizeAttenuation: material.sizeAttenuation === true,
311
311
  logarithmicDepthBuffer: logarithmicDepthBuffer,
312
- reverseDepthBuffer: reverseDepthBuffer,
312
+ reversedDepthBuffer: reversedDepthBuffer,
313
313
 
314
314
  skinning: object.isSkinnedMesh === true,
315
315
 
@@ -518,6 +518,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
518
518
  _programLayers.enable( 20 );
519
519
  if ( parameters.batchingColor )
520
520
  _programLayers.enable( 21 );
521
+ if ( parameters.gradientMap )
522
+ _programLayers.enable( 22 );
521
523
 
522
524
  array.push( _programLayers.mask );
523
525
  _programLayers.disableAll();
@@ -530,7 +532,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
530
532
  _programLayers.enable( 2 );
531
533
  if ( parameters.logarithmicDepthBuffer )
532
534
  _programLayers.enable( 3 );
533
- if ( parameters.reverseDepthBuffer )
535
+ if ( parameters.reversedDepthBuffer )
534
536
  _programLayers.enable( 4 );
535
537
  if ( parameters.skinning )
536
538
  _programLayers.enable( 5 );
@@ -84,7 +84,17 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
84
84
 
85
85
  // Set GL state for depth map.
86
86
  _state.setBlending( NoBlending );
87
- _state.buffers.color.setClear( 1, 1, 1, 1 );
87
+
88
+ if ( _state.buffers.depth.getReversed() ) {
89
+
90
+ _state.buffers.color.setClear( 0, 0, 0, 0 );
91
+
92
+ } else {
93
+
94
+ _state.buffers.color.setClear( 1, 1, 1, 1 );
95
+
96
+ }
97
+
88
98
  _state.buffers.depth.setTest( true );
89
99
  _state.setScissorTest( false );
90
100
 
@@ -667,7 +667,7 @@ function WebGLState( gl, extensions ) {
667
667
  break;
668
668
 
669
669
  case MultiplyBlending:
670
- gl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );
670
+ gl.blendFuncSeparate( gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA, gl.ZERO, gl.ONE );
671
671
  break;
672
672
 
673
673
  default:
@@ -685,15 +685,15 @@ function WebGLState( gl, extensions ) {
685
685
  break;
686
686
 
687
687
  case AdditiveBlending:
688
- gl.blendFunc( gl.SRC_ALPHA, gl.ONE );
688
+ gl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE, gl.ONE, gl.ONE );
689
689
  break;
690
690
 
691
691
  case SubtractiveBlending:
692
- gl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );
692
+ console.error( 'THREE.WebGLState: SubtractiveBlending requires material.premultipliedAlpha = true' );
693
693
  break;
694
694
 
695
695
  case MultiplyBlending:
696
- gl.blendFunc( gl.ZERO, gl.SRC_COLOR );
696
+ console.error( 'THREE.WebGLState: MultiplyBlending requires material.premultipliedAlpha = true' );
697
697
  break;
698
698
 
699
699
  default:
@@ -519,7 +519,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
519
519
 
520
520
  if ( texture.isVideoTexture ) updateVideoTexture( texture );
521
521
 
522
- if ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {
522
+ if ( texture.isRenderTargetTexture === false && texture.isExternalTexture !== true && texture.version > 0 && textureProperties.__version !== texture.version ) {
523
523
 
524
524
  const image = texture.image;
525
525
 
@@ -541,6 +541,10 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
541
541
 
542
542
  }
543
543
 
544
+ } else if ( texture.isExternalTexture ) {
545
+
546
+ textureProperties.__webglTexture = texture.sourceTexture ? texture.sourceTexture : null;
547
+
544
548
  }
545
549
 
546
550
  state.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );
@@ -551,7 +555,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
551
555
 
552
556
  const textureProperties = properties.get( texture );
553
557
 
554
- if ( texture.version > 0 && textureProperties.__version !== texture.version ) {
558
+ if ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {
555
559
 
556
560
  uploadTexture( textureProperties, texture, slot );
557
561
  return;
@@ -566,7 +570,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
566
570
 
567
571
  const textureProperties = properties.get( texture );
568
572
 
569
- if ( texture.version > 0 && textureProperties.__version !== texture.version ) {
573
+ if ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {
570
574
 
571
575
  uploadTexture( textureProperties, texture, slot );
572
576
  return;
@@ -2167,13 +2171,21 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
2167
2171
  const attachment = textures[ i ];
2168
2172
  const attachmentProperties = properties.get( attachment );
2169
2173
 
2170
- state.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture );
2171
- setTextureParameters( _gl.TEXTURE_2D, attachment );
2172
- setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, 0 );
2174
+ let glTextureType = _gl.TEXTURE_2D;
2175
+
2176
+ if ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {
2177
+
2178
+ glTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;
2179
+
2180
+ }
2181
+
2182
+ state.bindTexture( glTextureType, attachmentProperties.__webglTexture );
2183
+ setTextureParameters( glTextureType, attachment );
2184
+ setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, glTextureType, 0 );
2173
2185
 
2174
2186
  if ( textureNeedsGenerateMipmaps( attachment ) ) {
2175
2187
 
2176
- generateMipmap( _gl.TEXTURE_2D );
2188
+ generateMipmap( glTextureType );
2177
2189
 
2178
2190
  }
2179
2191