super-three 0.164.0 → 0.167.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 (416) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +1273 -503
  3. package/build/three.module.js +1269 -504
  4. package/build/three.module.min.js +1 -1
  5. package/build/three.webgpu.js +76086 -0
  6. package/build/three.webgpu.min.js +6 -0
  7. package/examples/jsm/Addons.js +2 -1
  8. package/examples/jsm/controls/TransformControls.js +1 -1
  9. package/examples/jsm/csm/CSMShader.js +4 -4
  10. package/examples/jsm/environments/RoomEnvironment.js +1 -5
  11. package/examples/jsm/exporters/GLTFExporter.js +8 -4
  12. package/examples/jsm/exporters/USDZExporter.js +6 -4
  13. package/examples/jsm/geometries/TeapotGeometry.js +1 -1
  14. package/examples/jsm/helpers/ViewHelper.js +75 -61
  15. package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
  16. package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
  17. package/examples/jsm/lines/LineMaterial.js +1 -15
  18. package/examples/jsm/lines/LineSegments2.js +15 -0
  19. package/examples/jsm/lines/Wireframe.js +16 -1
  20. package/examples/jsm/lines/webgpu/Line2.js +20 -0
  21. package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
  22. package/examples/jsm/loaders/DRACOLoader.js +1 -1
  23. package/examples/jsm/loaders/FBXLoader.js +47 -58
  24. package/examples/jsm/loaders/GLTFLoader.js +12 -4
  25. package/examples/jsm/loaders/LDrawLoader.js +3 -2
  26. package/examples/jsm/loaders/MMDLoader.js +31 -12
  27. package/examples/jsm/loaders/MaterialXLoader.js +2 -9
  28. package/examples/jsm/loaders/USDZLoader.js +124 -76
  29. package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
  30. package/examples/jsm/loaders/VTKLoader.js +76 -3
  31. package/examples/jsm/misc/GPUComputationRenderer.js +9 -19
  32. package/examples/jsm/modifiers/CurveModifier.js +11 -9
  33. package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
  34. package/examples/jsm/objects/InstancedPoints.js +2 -2
  35. package/examples/jsm/objects/Lensflare.js +2 -2
  36. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  37. package/examples/jsm/postprocessing/RenderTransitionPass.js +13 -38
  38. package/examples/jsm/postprocessing/SSAOPass.js +6 -9
  39. package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
  40. package/examples/jsm/renderers/CSS2DRenderer.js +25 -5
  41. package/examples/jsm/renderers/CSS3DRenderer.js +24 -3
  42. package/examples/jsm/shaders/ColorifyShader.js +1 -2
  43. package/examples/jsm/shaders/FXAAShader.js +0 -2
  44. package/examples/jsm/shaders/GTAOShader.js +1 -1
  45. package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
  46. package/examples/jsm/transpiler/GLSLDecoder.js +46 -4
  47. package/examples/jsm/transpiler/TSLEncoder.js +17 -15
  48. package/examples/jsm/utils/BufferGeometryUtils.js +18 -16
  49. package/examples/jsm/utils/GPUStatsPanel.js +2 -0
  50. package/examples/jsm/utils/SortUtils.js +8 -5
  51. package/package.json +9 -7
  52. package/src/Three.WebGPU.js +194 -0
  53. package/src/Three.js +2 -0
  54. package/src/animation/tracks/BooleanKeyframeTrack.js +10 -1
  55. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -2
  56. package/src/animation/tracks/StringKeyframeTrack.js +10 -1
  57. package/src/constants.js +4 -1
  58. package/src/core/Object3D.js +24 -22
  59. package/src/core/Raycaster.js +6 -2
  60. package/src/extras/TextureUtils.js +210 -0
  61. package/src/lights/Light.js +1 -0
  62. package/src/lights/LightShadow.js +5 -0
  63. package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
  64. package/src/loaders/FileLoader.js +4 -0
  65. package/src/loaders/LoaderUtils.js +3 -1
  66. package/src/loaders/ObjectLoader.js +34 -2
  67. package/src/materials/Material.js +13 -4
  68. package/src/math/Box2.js +4 -4
  69. package/src/math/Box3.js +6 -6
  70. package/src/math/ColorManagement.js +10 -0
  71. package/src/math/Matrix2.js +54 -0
  72. package/src/math/Vector4.js +13 -0
  73. package/{examples/jsm → src}/nodes/Nodes.js +39 -20
  74. package/{examples/jsm → src}/nodes/accessors/BatchNode.js +28 -10
  75. package/src/nodes/accessors/BitangentNode.js +13 -0
  76. package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +36 -1
  77. package/{examples/jsm → src}/nodes/accessors/BufferNode.js +6 -0
  78. package/src/nodes/accessors/CameraNode.js +19 -0
  79. package/{examples/jsm → src}/nodes/accessors/CubeTextureNode.js +22 -5
  80. package/src/nodes/accessors/InstanceNode.js +140 -0
  81. package/{examples/jsm → src}/nodes/accessors/MaterialNode.js +24 -2
  82. package/{examples/jsm → src}/nodes/accessors/ModelNode.js +4 -0
  83. package/{examples/jsm → src}/nodes/accessors/MorphNode.js +24 -20
  84. package/src/nodes/accessors/NormalNode.js +14 -0
  85. package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +1 -1
  86. package/src/nodes/accessors/PositionNode.js +10 -0
  87. package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +7 -1
  88. package/src/nodes/accessors/ReflectVectorNode.js +10 -0
  89. package/{examples/jsm → src}/nodes/accessors/StorageBufferNode.js +50 -1
  90. package/{examples/jsm/nodes/accessors/TextureStoreNode.js → src/nodes/accessors/StorageTextureNode.js} +28 -6
  91. package/src/nodes/accessors/TangentNode.js +23 -0
  92. package/src/nodes/accessors/Texture3DNode.js +100 -0
  93. package/{examples/jsm → src}/nodes/accessors/TextureNode.js +55 -18
  94. package/src/nodes/accessors/UVNode.js +3 -0
  95. package/{examples/jsm → src}/nodes/accessors/UniformsNode.js +7 -1
  96. package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +2 -1
  97. package/{examples/jsm → src}/nodes/code/ScriptableNode.js +14 -0
  98. package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +2 -1
  99. package/{examples/jsm → src}/nodes/core/AttributeNode.js +34 -8
  100. package/{examples/jsm → src}/nodes/core/CacheNode.js +7 -10
  101. package/{examples/jsm → src}/nodes/core/ContextNode.js +6 -0
  102. package/{examples/jsm → src}/nodes/core/IndexNode.js +6 -0
  103. package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
  104. package/src/nodes/core/MRTNode.js +76 -0
  105. package/{examples/jsm → src}/nodes/core/Node.js +33 -14
  106. package/{examples/jsm → src}/nodes/core/NodeBuilder.js +194 -45
  107. package/src/nodes/core/NodeCache.js +36 -0
  108. package/{examples/jsm → src}/nodes/core/NodeFrame.js +42 -0
  109. package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
  110. package/{examples/jsm → src}/nodes/core/NodeKeywords.js +1 -1
  111. package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
  112. package/{examples/jsm → src}/nodes/core/NodeUtils.js +6 -1
  113. package/{examples/jsm → src}/nodes/core/OutputStructNode.js +1 -5
  114. package/{examples/jsm → src}/nodes/core/PropertyNode.js +2 -0
  115. package/{examples/jsm → src}/nodes/core/TempNode.js +2 -2
  116. package/{examples/jsm → src}/nodes/core/UniformGroupNode.js +20 -0
  117. package/{examples/jsm → src}/nodes/core/UniformNode.js +10 -1
  118. package/{examples/jsm → src}/nodes/core/VarNode.js +2 -6
  119. package/src/nodes/core/VaryingNode.js +104 -0
  120. package/{examples/jsm → src}/nodes/display/AfterImageNode.js +24 -20
  121. package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +18 -21
  122. package/src/nodes/display/BloomNode.js +333 -0
  123. package/{examples/jsm → src}/nodes/display/ColorAdjustmentNode.js +7 -2
  124. package/{examples/jsm → src}/nodes/display/ColorSpaceNode.js +1 -1
  125. package/src/nodes/display/DenoiseNode.js +198 -0
  126. package/src/nodes/display/DepthOfFieldNode.js +119 -0
  127. package/src/nodes/display/DotScreenNode.js +75 -0
  128. package/src/nodes/display/FXAANode.js +327 -0
  129. package/src/nodes/display/FilmNode.js +52 -0
  130. package/{examples/jsm → src}/nodes/display/FrontFacingNode.js +2 -1
  131. package/src/nodes/display/GTAONode.js +324 -0
  132. package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +34 -17
  133. package/src/nodes/display/Lut3DNode.js +53 -0
  134. package/{examples/jsm → src}/nodes/display/NormalMapNode.js +1 -1
  135. package/src/nodes/display/PassNode.js +291 -0
  136. package/src/nodes/display/PixelationPassNode.js +201 -0
  137. package/src/nodes/display/RGBShiftNode.js +49 -0
  138. package/src/nodes/display/RenderOutputNode.js +56 -0
  139. package/src/nodes/display/SobelOperatorNode.js +121 -0
  140. package/{examples/jsm → src}/nodes/display/ToneMappingNode.js +44 -5
  141. package/src/nodes/display/TransitionNode.js +76 -0
  142. package/{examples/jsm → src}/nodes/display/ViewportDepthNode.js +39 -16
  143. package/{examples/jsm → src}/nodes/display/ViewportDepthTextureNode.js +2 -1
  144. package/{examples/jsm → src}/nodes/display/ViewportNode.js +3 -2
  145. package/{examples/jsm → src}/nodes/display/ViewportSharedTextureNode.js +2 -1
  146. package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +5 -2
  147. package/src/nodes/functions/BSDF/LTC.js +131 -0
  148. package/src/nodes/functions/BasicLightingModel.js +78 -0
  149. package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +5 -3
  150. package/{examples/jsm → src}/nodes/functions/PhysicalLightingModel.js +103 -18
  151. package/src/nodes/functions/ToonLightingModel.js +51 -0
  152. package/{examples/jsm → src}/nodes/geometry/RangeNode.js +19 -6
  153. package/{examples/jsm → src}/nodes/lighting/AONode.js +1 -4
  154. package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +1 -1
  155. package/src/nodes/lighting/AnalyticLightNode.js +333 -0
  156. package/src/nodes/lighting/BasicEnvironmentNode.js +26 -0
  157. package/src/nodes/lighting/BasicLightMapNode.js +29 -0
  158. package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +2 -3
  159. package/{examples/jsm → src}/nodes/lighting/EnvironmentNode.js +5 -4
  160. package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +2 -1
  161. package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +1 -1
  162. package/{examples/jsm → src}/nodes/lighting/LightingNode.js +2 -0
  163. package/{examples/jsm → src}/nodes/lighting/LightsNode.js +18 -3
  164. package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +2 -3
  165. package/src/nodes/lighting/RectAreaLightNode.js +97 -0
  166. package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +2 -3
  167. package/{examples/jsm → src}/nodes/loaders/NodeLoader.js +3 -1
  168. package/{examples/jsm → src}/nodes/loaders/NodeMaterialLoader.js +2 -1
  169. package/{examples/jsm → src}/nodes/loaders/NodeObjectLoader.js +2 -1
  170. package/{examples/jsm → src}/nodes/materials/InstancedPointsNodeMaterial.js +3 -3
  171. package/{examples/jsm → src}/nodes/materials/Line2NodeMaterial.js +4 -4
  172. package/{examples/jsm → src}/nodes/materials/LineBasicNodeMaterial.js +3 -3
  173. package/{examples/jsm → src}/nodes/materials/LineDashedNodeMaterial.js +4 -3
  174. package/{examples/jsm → src}/nodes/materials/Materials.js +3 -0
  175. package/src/nodes/materials/MeshBasicNodeMaterial.js +73 -0
  176. package/{examples/jsm → src}/nodes/materials/MeshLambertNodeMaterial.js +12 -3
  177. package/src/nodes/materials/MeshMatcapNodeMaterial.js +53 -0
  178. package/{examples/jsm → src}/nodes/materials/MeshNormalNodeMaterial.js +5 -3
  179. package/{examples/jsm → src}/nodes/materials/MeshPhongNodeMaterial.js +11 -3
  180. package/{examples/jsm → src}/nodes/materials/MeshPhysicalNodeMaterial.js +26 -8
  181. package/{examples/jsm → src}/nodes/materials/MeshStandardNodeMaterial.js +14 -3
  182. package/src/nodes/materials/MeshToonNodeMaterial.js +34 -0
  183. package/{examples/jsm → src}/nodes/materials/NodeMaterial.js +97 -24
  184. package/{examples/jsm → src}/nodes/materials/PointsNodeMaterial.js +3 -3
  185. package/{examples/jsm → src}/nodes/materials/ShadowNodeMaterial.js +3 -3
  186. package/{examples/jsm → src}/nodes/materials/SpriteNodeMaterial.js +3 -3
  187. package/src/nodes/materials/VolumeNodeMaterial.js +106 -0
  188. package/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +9 -17
  189. package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +474 -577
  190. package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +2 -8
  191. package/{examples/jsm → src}/nodes/math/CondNode.js +13 -6
  192. package/{examples/jsm → src}/nodes/math/HashNode.js +2 -2
  193. package/{examples/jsm → src}/nodes/math/MathNode.js +14 -1
  194. package/{examples/jsm → src}/nodes/math/OperatorNode.js +6 -6
  195. package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
  196. package/{examples/jsm → src}/nodes/pmrem/PMREMNode.js +2 -1
  197. package/{examples/jsm → src}/nodes/shadernode/ShaderNode.js +57 -33
  198. package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +1 -1
  199. package/{examples/jsm → src}/nodes/utils/DiscardNode.js +1 -0
  200. package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +2 -0
  201. package/{examples/jsm → src}/nodes/utils/LoopNode.js +7 -6
  202. package/{examples/jsm → src}/nodes/utils/MatcapUVNode.js +1 -1
  203. package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +8 -2
  204. package/src/nodes/utils/RTTNode.js +130 -0
  205. package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +9 -1
  206. package/{examples/jsm → src}/nodes/utils/TimerNode.js +1 -1
  207. package/src/objects/BatchedMesh.js +232 -162
  208. package/src/objects/InstancedMesh.js +1 -1
  209. package/src/renderers/WebGLRenderer.js +312 -68
  210. package/{examples/jsm → src}/renderers/common/Attributes.js +4 -1
  211. package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
  212. package/{examples/jsm → src}/renderers/common/Background.js +9 -3
  213. package/src/renderers/common/BindGroup.js +16 -0
  214. package/{examples/jsm → src}/renderers/common/Bindings.js +54 -22
  215. package/src/renderers/common/ChainMap.js +59 -0
  216. package/{examples/jsm → src}/renderers/common/ClippingContext.js +8 -6
  217. package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
  218. package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +7 -1
  219. package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
  220. package/{examples/jsm → src}/renderers/common/Info.js +34 -6
  221. package/{examples/jsm → src}/renderers/common/Pipelines.js +2 -2
  222. package/src/renderers/common/PostProcessing.js +87 -0
  223. package/{examples/jsm/objects → src/renderers/common}/QuadMesh.js +6 -3
  224. package/src/renderers/common/RenderBundle.js +18 -0
  225. package/src/renderers/common/RenderBundles.js +38 -0
  226. package/{examples/jsm → src}/renderers/common/RenderContext.js +1 -1
  227. package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
  228. package/{examples/jsm → src}/renderers/common/RenderList.js +9 -0
  229. package/{examples/jsm → src}/renderers/common/RenderObject.js +50 -11
  230. package/{examples/jsm → src}/renderers/common/Renderer.js +220 -40
  231. package/{examples/jsm → src}/renderers/common/SampledTexture.js +2 -2
  232. package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
  233. package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
  234. package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
  235. package/{examples/jsm → src}/renderers/common/Textures.js +6 -2
  236. package/{examples/jsm → src}/renderers/common/Uniform.js +10 -5
  237. package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
  238. package/{examples/jsm → src}/renderers/common/extras/PMREMGenerator.js +13 -12
  239. package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
  240. package/{examples/jsm → src}/renderers/common/nodes/NodeSampledTexture.js +19 -4
  241. package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +8 -1
  242. package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
  243. package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
  244. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
  245. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
  246. package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +37 -16
  247. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +31 -1
  248. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  249. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
  250. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
  251. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
  252. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
  253. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  254. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
  255. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
  256. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +1 -1
  257. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
  258. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +10 -31
  259. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
  260. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  261. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -4
  262. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  263. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  264. package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
  265. package/src/renderers/shaders/UniformsLib.js +3 -0
  266. package/src/renderers/webgl/WebGLAttributes.js +2 -2
  267. package/src/renderers/webgl/WebGLBackground.js +6 -0
  268. package/src/renderers/webgl/WebGLBufferRenderer.js +6 -19
  269. package/src/renderers/webgl/WebGLExtensions.js +3 -1
  270. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +6 -18
  271. package/src/renderers/webgl/WebGLLights.js +15 -12
  272. package/src/renderers/webgl/WebGLMaterials.js +1 -5
  273. package/src/renderers/webgl/WebGLMorphtargets.js +1 -2
  274. package/src/renderers/webgl/WebGLProgram.js +28 -31
  275. package/src/renderers/webgl/WebGLPrograms.js +15 -15
  276. package/src/renderers/webgl/WebGLRenderStates.js +2 -2
  277. package/src/renderers/webgl/WebGLTextures.js +100 -70
  278. package/src/renderers/webgl/WebGLUniforms.js +12 -2
  279. package/src/renderers/webgl/WebGLUniformsGroups.js +7 -7
  280. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +156 -54
  281. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +188 -41
  282. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +2 -2
  283. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +1 -0
  284. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
  285. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +1 -1
  286. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +126 -7
  287. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +1 -1
  288. package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +212 -78
  289. package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +2 -2
  290. package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +245 -49
  291. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
  292. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  293. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +30 -14
  294. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +9 -1
  295. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +74 -24
  296. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +101 -25
  297. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +24 -3
  298. package/src/renderers/webxr/WebXRDepthSensing.js +9 -3
  299. package/src/renderers/webxr/WebXRManager.js +12 -2
  300. package/src/textures/CompressedArrayTexture.js +14 -0
  301. package/src/textures/DataArrayTexture.js +14 -0
  302. package/src/textures/DepthTexture.js +1 -3
  303. package/src/utils.js +30 -1
  304. package/examples/jsm/nodes/accessors/BitangentNode.js +0 -89
  305. package/examples/jsm/nodes/accessors/CameraNode.js +0 -119
  306. package/examples/jsm/nodes/accessors/InstanceNode.js +0 -94
  307. package/examples/jsm/nodes/accessors/NormalNode.js +0 -106
  308. package/examples/jsm/nodes/accessors/PositionNode.js +0 -104
  309. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -35
  310. package/examples/jsm/nodes/accessors/TangentNode.js +0 -109
  311. package/examples/jsm/nodes/accessors/UVNode.js +0 -47
  312. package/examples/jsm/nodes/core/NodeCache.js +0 -26
  313. package/examples/jsm/nodes/core/VaryingNode.js +0 -65
  314. package/examples/jsm/nodes/display/PassNode.js +0 -199
  315. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -255
  316. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  317. package/examples/jsm/renderers/common/ChainMap.js +0 -89
  318. package/examples/jsm/renderers/common/PostProcessing.js +0 -33
  319. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  320. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  321. /package/{examples/jsm → src}/nodes/accessors/AccessorsUtils.js +0 -0
  322. /package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +0 -0
  323. /package/{examples/jsm → src}/nodes/accessors/InstancedPointsMaterialNode.js +0 -0
  324. /package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +0 -0
  325. /package/{examples/jsm → src}/nodes/accessors/ModelViewProjectionNode.js +0 -0
  326. /package/{examples/jsm → src}/nodes/accessors/PointUVNode.js +0 -0
  327. /package/{examples/jsm → src}/nodes/accessors/RendererReferenceNode.js +0 -0
  328. /package/{examples/jsm → src}/nodes/accessors/SceneNode.js +0 -0
  329. /package/{examples/jsm → src}/nodes/accessors/SkinningNode.js +0 -0
  330. /package/{examples/jsm → src}/nodes/accessors/TextureBicubicNode.js +0 -0
  331. /package/{examples/jsm → src}/nodes/accessors/TextureSizeNode.js +0 -0
  332. /package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +0 -0
  333. /package/{examples/jsm → src}/nodes/code/CodeNode.js +0 -0
  334. /package/{examples/jsm → src}/nodes/code/ExpressionNode.js +0 -0
  335. /package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +0 -0
  336. /package/{examples/jsm → src}/nodes/code/FunctionNode.js +0 -0
  337. /package/{examples/jsm → src}/nodes/core/AssignNode.js +0 -0
  338. /package/{examples/jsm → src}/nodes/core/BypassNode.js +0 -0
  339. /package/{examples/jsm → src}/nodes/core/ConstNode.js +0 -0
  340. /package/{examples/jsm → src}/nodes/core/InputNode.js +0 -0
  341. /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
  342. /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
  343. /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
  344. /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
  345. /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
  346. /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
  347. /package/{examples/jsm → src}/nodes/core/ParameterNode.js +0 -0
  348. /package/{examples/jsm → src}/nodes/core/StackNode.js +0 -0
  349. /package/{examples/jsm → src}/nodes/core/StructTypeNode.js +0 -0
  350. /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
  351. /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
  352. /package/{examples/jsm → src}/nodes/display/BlendModeNode.js +0 -0
  353. /package/{examples/jsm → src}/nodes/display/BumpMapNode.js +0 -0
  354. /package/{examples/jsm → src}/nodes/display/PosterizeNode.js +0 -0
  355. /package/{examples/jsm → src}/nodes/fog/FogExp2Node.js +0 -0
  356. /package/{examples/jsm → src}/nodes/fog/FogNode.js +0 -0
  357. /package/{examples/jsm → src}/nodes/fog/FogRangeNode.js +0 -0
  358. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_GGX.js +0 -0
  359. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +0 -0
  360. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +0 -0
  361. /package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +0 -0
  362. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +0 -0
  363. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX_Anisotropic.js +0 -0
  364. /package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +0 -0
  365. /package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +0 -0
  366. /package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +0 -0
  367. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +0 -0
  368. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +0 -0
  369. /package/{examples/jsm → src}/nodes/functions/ShadowMaskModel.js +0 -0
  370. /package/{examples/jsm → src}/nodes/functions/material/getGeometryRoughness.js +0 -0
  371. /package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +0 -0
  372. /package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +0 -0
  373. /package/{examples/jsm → src}/nodes/lighting/IrradianceNode.js +0 -0
  374. /package/{examples/jsm → src}/nodes/lighting/LightNode.js +0 -0
  375. /package/{examples/jsm → src}/nodes/lighting/LightUtils.js +0 -0
  376. /package/{examples/jsm → src}/nodes/lighting/LightingContextNode.js +0 -0
  377. /package/{examples/jsm → src}/nodes/materials/MeshSSSNodeMaterial.js +0 -0
  378. /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
  379. /package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +0 -0
  380. /package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -0
  381. /package/{examples/jsm → src}/nodes/math/TriNoise3D.js +0 -0
  382. /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
  383. /package/{examples/jsm → src}/nodes/pmrem/PMREMUtils.js +0 -0
  384. /package/{examples/jsm → src}/nodes/procedural/CheckerNode.js +0 -0
  385. /package/{examples/jsm → src}/nodes/utils/ConvertNode.js +0 -0
  386. /package/{examples/jsm → src}/nodes/utils/EquirectUVNode.js +0 -0
  387. /package/{examples/jsm → src}/nodes/utils/JoinNode.js +0 -0
  388. /package/{examples/jsm → src}/nodes/utils/OscNode.js +0 -0
  389. /package/{examples/jsm → src}/nodes/utils/PackingNode.js +0 -0
  390. /package/{examples/jsm → src}/nodes/utils/RemapNode.js +0 -0
  391. /package/{examples/jsm → src}/nodes/utils/RotateNode.js +0 -0
  392. /package/{examples/jsm → src}/nodes/utils/RotateUVNode.js +0 -0
  393. /package/{examples/jsm → src}/nodes/utils/SetNode.js +0 -0
  394. /package/{examples/jsm → src}/nodes/utils/SplitNode.js +0 -0
  395. /package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +0 -0
  396. /package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +0 -0
  397. /package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +0 -0
  398. /package/{examples/jsm → src}/renderers/common/Animation.js +0 -0
  399. /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
  400. /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
  401. /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
  402. /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
  403. /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
  404. /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
  405. /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
  406. /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
  407. /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
  408. /package/{examples/jsm → src}/renderers/common/RenderObjects.js +0 -0
  409. /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
  410. /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
  411. /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
  412. /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
  413. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBufferRenderer.js +0 -0
  414. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
  415. /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
  416. /package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +0 -0
@@ -249,11 +249,7 @@ function WebGLMaterials( renderer, properties ) {
249
249
  if ( material.lightMap ) {
250
250
 
251
251
  uniforms.lightMap.value = material.lightMap;
252
-
253
- // artist-friendly light intensity scaling factor
254
- const scaleFactor = ( renderer._useLegacyLights === true ) ? Math.PI : 1;
255
-
256
- uniforms.lightMapIntensity.value = material.lightMapIntensity * scaleFactor;
252
+ uniforms.lightMapIntensity.value = material.lightMapIntensity;
257
253
 
258
254
  refreshTransformUniform( material.lightMap, uniforms.lightMapTransform );
259
255
 
@@ -12,8 +12,7 @@ function WebGLMorphtargets( gl, capabilities, textures ) {
12
12
 
13
13
  const objectInfluences = object.morphTargetInfluences;
14
14
 
15
- // instead of using attributes, the WebGL 2 code path encodes morph targets
16
- // into an array of data textures. Each layer represents a single morph target.
15
+ // the following encodes morph targets into an array of data textures. Each layer represents a single morph target.
17
16
 
18
17
  const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
19
18
  const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
@@ -3,6 +3,7 @@ import { WebGLShader } from './WebGLShader.js';
3
3
  import { ShaderChunk } from '../shaders/ShaderChunk.js';
4
4
  import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, AgXToneMapping, ACESFilmicToneMapping, NeutralToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearSRGBColorSpace, SRGBColorSpace, LinearDisplayP3ColorSpace, DisplayP3ColorSpace, P3Primaries, Rec709Primaries } from '../../constants.js';
5
5
  import { ColorManagement } from '../../math/ColorManagement.js';
6
+ import { Vector3 } from '../../math/Vector3.js';
6
7
 
7
8
  // From https://www.khronos.org/registry/webgl/extensions/KHR_parallel_shader_compile/
8
9
  const COMPLETION_STATUS_KHR = 0x91B1;
@@ -142,6 +143,30 @@ function getToneMappingFunction( functionName, toneMapping ) {
142
143
 
143
144
  }
144
145
 
146
+ const _v0 = /*@__PURE__*/ new Vector3();
147
+
148
+ function getLuminanceFunction() {
149
+
150
+ ColorManagement.getLuminanceCoefficients( _v0 );
151
+
152
+ const r = _v0.x.toFixed( 4 );
153
+ const g = _v0.y.toFixed( 4 );
154
+ const b = _v0.z.toFixed( 4 );
155
+
156
+ return [
157
+
158
+ 'float luminance( const in vec3 rgb ) {',
159
+
160
+ ` const vec3 weights = vec3( ${ r }, ${ g }, ${ b } );`,
161
+
162
+ ' return dot( weights, rgb );',
163
+
164
+ '}'
165
+
166
+ ].join( '\n' );
167
+
168
+ }
169
+
145
170
  function generateVertexExtensions( parameters ) {
146
171
 
147
172
  const chunks = [
@@ -524,6 +549,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
524
549
 
525
550
  parameters.extensionClipCullDistance ? '#define USE_CLIP_DISTANCE' : '',
526
551
  parameters.batching ? '#define USE_BATCHING' : '',
552
+ parameters.batchingColor ? '#define USE_BATCHING_COLOR' : '',
527
553
  parameters.instancing ? '#define USE_INSTANCING' : '',
528
554
  parameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',
529
555
  parameters.instancingMorph ? '#define USE_INSTANCING_MORPH' : '',
@@ -620,7 +646,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
620
646
  parameters.morphTargets ? '#define USE_MORPHTARGETS' : '',
621
647
  parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',
622
648
  ( parameters.morphColors ) ? '#define USE_MORPHCOLORS' : '',
623
- ( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_TEXTURE' : '',
624
649
  ( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '',
625
650
  ( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',
626
651
  parameters.doubleSided ? '#define DOUBLE_SIDED' : '',
@@ -633,8 +658,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
633
658
 
634
659
  parameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',
635
660
 
636
- parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
637
-
638
661
  parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
639
662
 
640
663
  'uniform mat4 modelMatrix;',
@@ -701,31 +724,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
701
724
 
702
725
  '#endif',
703
726
 
704
- '#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )',
705
-
706
- ' attribute vec3 morphTarget0;',
707
- ' attribute vec3 morphTarget1;',
708
- ' attribute vec3 morphTarget2;',
709
- ' attribute vec3 morphTarget3;',
710
-
711
- ' #ifdef USE_MORPHNORMALS',
712
-
713
- ' attribute vec3 morphNormal0;',
714
- ' attribute vec3 morphNormal1;',
715
- ' attribute vec3 morphNormal2;',
716
- ' attribute vec3 morphNormal3;',
717
-
718
- ' #else',
719
-
720
- ' attribute vec3 morphTarget4;',
721
- ' attribute vec3 morphTarget5;',
722
- ' attribute vec3 morphTarget6;',
723
- ' attribute vec3 morphTarget7;',
724
-
725
- ' #endif',
726
-
727
- '#endif',
728
-
729
727
  '#ifdef USE_SKINNING',
730
728
 
731
729
  ' attribute vec4 skinIndex;',
@@ -801,7 +799,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
801
799
  parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',
802
800
 
803
801
  parameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',
804
- parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',
802
+ parameters.vertexColors || parameters.instancingColor || parameters.batchingColor ? '#define USE_COLOR' : '',
805
803
  parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',
806
804
  parameters.vertexUv1s ? '#define USE_UV1' : '',
807
805
  parameters.vertexUv2s ? '#define USE_UV2' : '',
@@ -823,8 +821,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
823
821
 
824
822
  parameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',
825
823
 
826
- parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
827
-
828
824
  parameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',
829
825
 
830
826
  parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
@@ -842,6 +838,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
842
838
 
843
839
  ShaderChunk[ 'colorspace_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below
844
840
  getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputColorSpace ),
841
+ getLuminanceFunction(),
845
842
 
846
843
  parameters.useDepthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',
847
844
 
@@ -194,6 +194,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
194
194
  precision: precision,
195
195
 
196
196
  batching: IS_BATCHEDMESH,
197
+ batchingColor: IS_BATCHEDMESH && object._colorsTexture !== null,
197
198
  instancing: IS_INSTANCEDMESH,
198
199
  instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,
199
200
  instancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null,
@@ -339,7 +340,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
339
340
  shadowMapType: renderer.shadowMap.type,
340
341
 
341
342
  toneMapping: toneMapping,
342
- useLegacyLights: renderer._useLegacyLights,
343
343
 
344
344
  decodeVideoTexture: HAS_MAP && ( material.map.isVideoTexture === true ) && ( ColorManagement.getTransfer( material.map.colorSpace ) === SRGBTransfer ),
345
345
 
@@ -354,7 +354,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
354
354
  index0AttributeName: material.index0AttributeName,
355
355
 
356
356
  extensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance === true && extensions.has( 'WEBGL_clip_cull_distance' ),
357
- extensionMultiDraw: HAS_EXTENSIONS && material.extensions.multiDraw === true && extensions.has( 'WEBGL_multi_draw' ),
357
+ extensionMultiDraw: ( HAS_EXTENSIONS && material.extensions.multiDraw === true || IS_BATCHEDMESH ) && extensions.has( 'WEBGL_multi_draw' ),
358
358
 
359
359
  rendererExtensionParallelShaderCompile: extensions.has( 'KHR_parallel_shader_compile' ),
360
360
 
@@ -513,6 +513,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
513
513
  _programLayers.enable( 19 );
514
514
  if ( parameters.dispersion )
515
515
  _programLayers.enable( 20 );
516
+ if ( parameters.batchingColor )
517
+ _programLayers.enable( 21 );
516
518
 
517
519
  array.push( _programLayers.mask );
518
520
  _programLayers.disableAll();
@@ -537,30 +539,28 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
537
539
  _programLayers.enable( 8 );
538
540
  if ( parameters.shadowMapEnabled )
539
541
  _programLayers.enable( 9 );
540
- if ( parameters.useLegacyLights )
541
- _programLayers.enable( 10 );
542
542
  if ( parameters.doubleSided )
543
- _programLayers.enable( 11 );
543
+ _programLayers.enable( 10 );
544
544
  if ( parameters.flipSided )
545
- _programLayers.enable( 12 );
545
+ _programLayers.enable( 11 );
546
546
  if ( parameters.useDepthPacking )
547
- _programLayers.enable( 13 );
547
+ _programLayers.enable( 12 );
548
548
  if ( parameters.dithering )
549
- _programLayers.enable( 14 );
549
+ _programLayers.enable( 13 );
550
550
  if ( parameters.transmission )
551
- _programLayers.enable( 15 );
551
+ _programLayers.enable( 14 );
552
552
  if ( parameters.sheen )
553
- _programLayers.enable( 16 );
553
+ _programLayers.enable( 15 );
554
554
  if ( parameters.opaque )
555
- _programLayers.enable( 17 );
555
+ _programLayers.enable( 16 );
556
556
  if ( parameters.pointsUvs )
557
- _programLayers.enable( 18 );
557
+ _programLayers.enable( 17 );
558
558
  if ( parameters.decodeVideoTexture )
559
- _programLayers.enable( 19 );
559
+ _programLayers.enable( 18 );
560
560
  if ( parameters.alphaToCoverage )
561
- _programLayers.enable( 20 );
561
+ _programLayers.enable( 19 );
562
562
  if ( parameters.numMultiviewViews )
563
- _programLayers.enable( 21 );
563
+ _programLayers.enable( 20 );
564
564
 
565
565
  array.push( _programLayers.mask );
566
566
 
@@ -28,9 +28,9 @@ function WebGLRenderState( extensions ) {
28
28
 
29
29
  }
30
30
 
31
- function setupLights( useLegacyLights ) {
31
+ function setupLights() {
32
32
 
33
- lights.setup( lightsArray, useLegacyLights );
33
+ lights.setup( lightsArray );
34
34
 
35
35
  }
36
36
 
@@ -1,7 +1,8 @@
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';
1
+ import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBAFormat, DepthFormat, DepthStencilFormat, UnsignedIntType, FloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, UnsignedByteType, NoColorSpace, LinearSRGBColorSpace, NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, SRGBTransfer, LinearTransfer, UnsignedShortType, UnsignedInt248Type } 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';
5
+ import { getByteLength } from '../../extras/TextureUtils.js';
5
6
 
6
7
  function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {
7
8
 
@@ -200,6 +201,48 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
200
201
 
201
202
  }
202
203
 
204
+ function getInternalDepthFormat( useStencil, depthType ) {
205
+
206
+ let glInternalFormat;
207
+ if ( useStencil ) {
208
+
209
+ if ( depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type ) {
210
+
211
+ glInternalFormat = _gl.DEPTH24_STENCIL8;
212
+
213
+ } else if ( depthType === FloatType ) {
214
+
215
+ glInternalFormat = _gl.DEPTH32F_STENCIL8;
216
+
217
+ } else if ( depthType === UnsignedShortType ) {
218
+
219
+ glInternalFormat = _gl.DEPTH24_STENCIL8;
220
+ console.warn( 'DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.' );
221
+
222
+ }
223
+
224
+ } else {
225
+
226
+ if ( depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type ) {
227
+
228
+ glInternalFormat = _gl.DEPTH_COMPONENT24;
229
+
230
+ } else if ( depthType === FloatType ) {
231
+
232
+ glInternalFormat = _gl.DEPTH_COMPONENT32F;
233
+
234
+ } else if ( depthType === UnsignedShortType ) {
235
+
236
+ glInternalFormat = _gl.DEPTH_COMPONENT16;
237
+
238
+ }
239
+
240
+ }
241
+
242
+ return glInternalFormat;
243
+
244
+ }
245
+
203
246
  function getMipLevels( texture, image ) {
204
247
 
205
248
  if ( textureNeedsGenerateMipmaps( texture ) === true || ( texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) ) {
@@ -754,23 +797,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
754
797
 
755
798
  if ( texture.isDepthTexture ) {
756
799
 
757
- // populate depth texture with dummy data
758
-
759
- glInternalFormat = _gl.DEPTH_COMPONENT16;
760
-
761
- if ( texture.type === FloatType ) {
762
-
763
- glInternalFormat = _gl.DEPTH_COMPONENT32F;
764
-
765
- } else if ( texture.type === UnsignedIntType ) {
766
-
767
- glInternalFormat = _gl.DEPTH_COMPONENT24;
768
-
769
- } else if ( texture.type === UnsignedInt248Type ) {
770
-
771
- glInternalFormat = _gl.DEPTH24_STENCIL8;
772
-
773
- }
800
+ glInternalFormat = getInternalDepthFormat( texture.format === DepthStencilFormat, texture.type );
774
801
 
775
802
  //
776
803
 
@@ -870,7 +897,27 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
870
897
 
871
898
  if ( dataReady ) {
872
899
 
873
- state.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data, 0, 0 );
900
+ if ( texture.layerUpdates.size > 0 ) {
901
+
902
+ const layerByteLength = getByteLength( mipmap.width, mipmap.height, texture.format, texture.type );
903
+
904
+ for ( const layerIndex of texture.layerUpdates ) {
905
+
906
+ const layerData = mipmap.data.subarray(
907
+ layerIndex * layerByteLength / mipmap.data.BYTES_PER_ELEMENT,
908
+ ( layerIndex + 1 ) * layerByteLength / mipmap.data.BYTES_PER_ELEMENT
909
+ );
910
+ state.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, layerIndex, mipmap.width, mipmap.height, 1, glFormat, layerData, 0, 0 );
911
+
912
+ }
913
+
914
+ texture.clearLayerUpdates();
915
+
916
+ } else {
917
+
918
+ state.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data, 0, 0 );
919
+
920
+ }
874
921
 
875
922
  }
876
923
 
@@ -976,7 +1023,27 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
976
1023
 
977
1024
  if ( dataReady ) {
978
1025
 
979
- state.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
1026
+ if ( texture.layerUpdates.size > 0 ) {
1027
+
1028
+ const layerByteLength = getByteLength( image.width, image.height, texture.format, texture.type );
1029
+
1030
+ for ( const layerIndex of texture.layerUpdates ) {
1031
+
1032
+ const layerData = image.data.subarray(
1033
+ layerIndex * layerByteLength / image.data.BYTES_PER_ELEMENT,
1034
+ ( layerIndex + 1 ) * layerByteLength / image.data.BYTES_PER_ELEMENT
1035
+ );
1036
+ state.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, layerIndex, image.width, image.height, 1, glFormat, glType, layerData );
1037
+
1038
+ }
1039
+
1040
+ texture.clearLayerUpdates();
1041
+
1042
+ } else {
1043
+
1044
+ state.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
1045
+
1046
+ }
980
1047
 
981
1048
  }
982
1049
 
@@ -1420,7 +1487,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1420
1487
 
1421
1488
  }
1422
1489
 
1423
-
1424
1490
  // Setup storage for internal depth/stencil buffers and bind to correct framebuffer
1425
1491
  function setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {
1426
1492
 
@@ -1480,66 +1546,30 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1480
1546
 
1481
1547
  } else if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {
1482
1548
 
1483
- let glInternalFormat = _gl.DEPTH_COMPONENT24;
1484
-
1485
- if ( isMultisample || useMultisampledRTT( renderTarget ) ) {
1486
-
1487
- const depthTexture = renderTarget.depthTexture;
1488
-
1489
- if ( depthTexture && depthTexture.isDepthTexture ) {
1490
-
1491
- if ( depthTexture.type === FloatType ) {
1492
-
1493
- glInternalFormat = _gl.DEPTH_COMPONENT32F;
1494
-
1495
- } else if ( depthTexture.type === UnsignedIntType ) {
1496
-
1497
- glInternalFormat = _gl.DEPTH_COMPONENT24;
1498
-
1499
- }
1500
-
1501
- }
1502
-
1503
- const samples = getRenderTargetSamples( renderTarget );
1504
-
1505
- if ( useMultisampledRTT( renderTarget ) ) {
1506
-
1507
- multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
1508
-
1509
- } else {
1510
-
1511
- _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
1512
-
1513
- }
1514
-
1515
- } else {
1516
-
1517
- _gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );
1518
-
1519
- }
1520
-
1521
- _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );
1522
-
1523
- } else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {
1549
+ // retrieve the depth attachment types
1550
+ const depthTexture = renderTarget.depthTexture;
1551
+ const depthType = depthTexture && depthTexture.isDepthTexture ? depthTexture.type : null;
1552
+ const glInternalFormat = getInternalDepthFormat( renderTarget.stencilBuffer, depthType );
1553
+ const glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
1524
1554
 
1555
+ // set up the attachment
1525
1556
  const samples = getRenderTargetSamples( renderTarget );
1557
+ const isUseMultisampledRTT = useMultisampledRTT( renderTarget );
1558
+ if ( isUseMultisampledRTT ) {
1526
1559
 
1527
- if ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {
1528
-
1529
- _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );
1560
+ multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
1530
1561
 
1531
- } else if ( useMultisampledRTT( renderTarget ) ) {
1562
+ } else if ( isMultisample ) {
1532
1563
 
1533
- multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );
1564
+ _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
1534
1565
 
1535
1566
  } else {
1536
1567
 
1537
- _gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height );
1568
+ _gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );
1538
1569
 
1539
1570
  }
1540
1571
 
1541
-
1542
- _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );
1572
+ _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer );
1543
1573
 
1544
1574
  } else {
1545
1575
 
@@ -51,7 +51,6 @@ import { LessEqualCompare } from '../../constants.js';
51
51
  const emptyTexture = /*@__PURE__*/ new Texture();
52
52
 
53
53
  const emptyShadowTexture = /*@__PURE__*/ new DepthTexture( 1, 1 );
54
- emptyShadowTexture.compareFunction = LessEqualCompare;
55
54
 
56
55
  const emptyArrayTexture = /*@__PURE__*/ new DataArrayTexture();
57
56
  const empty3dTexture = /*@__PURE__*/ new Data3DTexture();
@@ -569,7 +568,18 @@ function setValueT1( gl, v, textures ) {
569
568
 
570
569
  }
571
570
 
572
- const emptyTexture2D = ( this.type === gl.SAMPLER_2D_SHADOW ) ? emptyShadowTexture : emptyTexture;
571
+ let emptyTexture2D;
572
+
573
+ if ( this.type === gl.SAMPLER_2D_SHADOW ) {
574
+
575
+ emptyShadowTexture.compareFunction = LessEqualCompare; // #28670
576
+ emptyTexture2D = emptyShadowTexture;
577
+
578
+ } else {
579
+
580
+ emptyTexture2D = emptyTexture;
581
+
582
+ }
573
583
 
574
584
  textures.setTexture2D( v || emptyTexture2D, unit );
575
585
 
@@ -240,27 +240,27 @@ function WebGLUniformsGroups( gl, info, capabilities, state ) {
240
240
 
241
241
  const info = getUniformSize( value );
242
242
 
243
- // Calculate the chunk offset
244
- const chunkOffsetUniform = offset % chunkSize;
243
+ const chunkOffset = offset % chunkSize; // offset in the current chunk
244
+ const chunkPadding = chunkOffset % info.boundary; // required padding to match boundary
245
+ const chunkStart = chunkOffset + chunkPadding; // the start position in the current chunk for the data
246
+
247
+ offset += chunkPadding;
245
248
 
246
249
  // Check for chunk overflow
247
- if ( chunkOffsetUniform !== 0 && ( chunkSize - chunkOffsetUniform ) < info.boundary ) {
250
+ if ( chunkStart !== 0 && ( chunkSize - chunkStart ) < info.storage ) {
248
251
 
249
252
  // Add padding and adjust offset
250
- offset += ( chunkSize - chunkOffsetUniform );
253
+ offset += ( chunkSize - chunkStart );
251
254
 
252
255
  }
253
256
 
254
257
  // the following two properties will be used for partial buffer updates
255
-
256
258
  uniform.__data = new Float32Array( info.storage / Float32Array.BYTES_PER_ELEMENT );
257
259
  uniform.__offset = offset;
258
260
 
259
-
260
261
  // Update the global offset
261
262
  offset += info.storage;
262
263
 
263
-
264
264
  }
265
265
 
266
266
  }