@unikia/upe-renderer 0.186.110 → 0.187.11

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 (506) hide show
  1. package/README.md +5 -7
  2. package/UPSTREAM.md +4 -4
  3. package/build/three.core.js +853 -277
  4. package/build/three.module.js +1098 -1280
  5. package/build/three.tsl.js +41938 -686
  6. package/build/three.webgpu.js +10604 -49055
  7. package/build/three.webgpu.nodes.js +9249 -5788
  8. package/examples/jsm/Addons.js +2 -0
  9. package/examples/jsm/animation/CCDIKSolver.js +17 -5
  10. package/examples/jsm/controls/FirstPersonControls.js +1 -1
  11. package/examples/jsm/controls/OrbitControls.js +27 -14
  12. package/examples/jsm/csm/CSMShader.js +74 -3
  13. package/examples/jsm/curves/CurveExtras.js +4 -4
  14. package/examples/jsm/curves/NURBSCurve.js +14 -0
  15. package/examples/jsm/exporters/EXRExporter.js +673 -16
  16. package/examples/jsm/exporters/GLTFExporter.js +4 -4
  17. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  18. package/examples/jsm/exporters/OBJExporter.js +48 -5
  19. package/examples/jsm/exporters/PLYExporter.js +22 -11
  20. package/examples/jsm/generators/CityGenerator.js +3 -2
  21. package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
  22. package/examples/jsm/gpgpu/BitonicSort.js +30 -23
  23. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
  24. package/examples/jsm/inspector/Extension.js +1 -1
  25. package/examples/jsm/inspector/Inspector.js +6 -46
  26. package/examples/jsm/inspector/RendererInspector.js +43 -8
  27. package/examples/jsm/inspector/Storage.js +49 -0
  28. package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
  29. package/examples/jsm/inspector/tabs/Parameters.js +5 -1
  30. package/examples/jsm/inspector/tabs/Performance.js +22 -7
  31. package/examples/jsm/inspector/tabs/Settings.js +1 -1
  32. package/examples/jsm/inspector/tabs/Timeline.js +83 -7
  33. package/examples/jsm/inspector/tabs/Viewer.js +25 -10
  34. package/examples/jsm/inspector/ui/Profiler.js +1 -1
  35. package/examples/jsm/inspector/ui/Style.js +21 -53
  36. package/examples/jsm/inspector/ui/Values.js +28 -3
  37. package/examples/jsm/libs/fflate.module.js +83 -56
  38. package/examples/jsm/libs/mikktspace.README.md +27 -0
  39. package/examples/jsm/libs/mikktspace.module.js +721 -109
  40. package/examples/jsm/lighting/ClusteredLighting.js +100 -2
  41. package/examples/jsm/lighting/LightMapper.js +295 -0
  42. package/examples/jsm/lighting/LightProbeGrid.js +242 -139
  43. package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
  44. package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
  45. package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
  46. package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
  47. package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
  48. package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
  49. package/examples/jsm/lights/SunLight.js +9 -4
  50. package/examples/jsm/lights/SunLightNode.js +3 -3
  51. package/examples/jsm/lines/LineMaterial.js +26 -10
  52. package/examples/jsm/loaders/3DMLoader.js +10 -1
  53. package/examples/jsm/loaders/3MFLoader.js +5 -1
  54. package/examples/jsm/loaders/AMFLoader.js +2 -0
  55. package/examples/jsm/loaders/BVHLoader.js +2 -0
  56. package/examples/jsm/loaders/ColladaLoader.js +8 -0
  57. package/examples/jsm/loaders/DDSLoader.js +1 -1
  58. package/examples/jsm/loaders/DRACOLoader.js +5 -1
  59. package/examples/jsm/loaders/EXRLoader.js +120 -104
  60. package/examples/jsm/loaders/FBXLoader.js +4 -0
  61. package/examples/jsm/loaders/FontLoader.js +2 -0
  62. package/examples/jsm/loaders/GCodeLoader.js +5 -9
  63. package/examples/jsm/loaders/GLTFLoader.js +112 -31
  64. package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
  65. package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
  66. package/examples/jsm/loaders/IESLoader.js +46 -12
  67. package/examples/jsm/loaders/JXLLoader.js +159 -0
  68. package/examples/jsm/loaders/KMZLoader.js +6 -0
  69. package/examples/jsm/loaders/KSPLATLoader.js +2 -0
  70. package/examples/jsm/loaders/KTX2Loader.js +49 -4
  71. package/examples/jsm/loaders/KTXLoader.js +5 -3
  72. package/examples/jsm/loaders/LDrawLoader.js +15 -22
  73. package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
  74. package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
  75. package/examples/jsm/loaders/LUTImageLoader.js +2 -0
  76. package/examples/jsm/loaders/LWOLoader.js +6 -0
  77. package/examples/jsm/loaders/MD2Loader.js +2 -0
  78. package/examples/jsm/loaders/MDDLoader.js +4 -0
  79. package/examples/jsm/loaders/MTLLoader.js +8 -0
  80. package/examples/jsm/loaders/MaterialXLoader.js +57 -5
  81. package/examples/jsm/loaders/NRRDLoader.js +4 -2
  82. package/examples/jsm/loaders/OBJLoader.js +10 -4
  83. package/examples/jsm/loaders/PCDLoader.js +6 -2
  84. package/examples/jsm/loaders/PDBLoader.js +5 -3
  85. package/examples/jsm/loaders/PLYLoader.js +39 -15
  86. package/examples/jsm/loaders/PVRLoader.js +2 -2
  87. package/examples/jsm/loaders/SPLATLoader.js +2 -0
  88. package/examples/jsm/loaders/SPZLoader.js +2 -0
  89. package/examples/jsm/loaders/STLLoader.js +3 -1
  90. package/examples/jsm/loaders/SVGLoader.js +27 -49
  91. package/examples/jsm/loaders/TDSLoader.js +4 -0
  92. package/examples/jsm/loaders/TGALoader.js +6 -5
  93. package/examples/jsm/loaders/TTFLoader.js +2 -0
  94. package/examples/jsm/loaders/USDLoader.js +14 -0
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
  96. package/examples/jsm/loaders/VOXLoader.js +3 -0
  97. package/examples/jsm/loaders/VRMLLoader.js +4 -0
  98. package/examples/jsm/loaders/VTKLoader.js +2 -0
  99. package/examples/jsm/loaders/XYZLoader.js +2 -0
  100. package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
  101. package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
  102. package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
  103. package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
  104. package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
  105. package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
  106. package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
  107. package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
  108. package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
  109. package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
  110. package/examples/jsm/loaders/usd/USDAParser.js +56 -47
  111. package/examples/jsm/loaders/usd/USDComposer.js +25 -30
  112. package/examples/jsm/math/ColorConverter.js +7 -3
  113. package/examples/jsm/math/Lut.js +2 -2
  114. package/examples/jsm/math/OBB.js +3 -3
  115. package/examples/jsm/math/Octree.js +20 -17
  116. package/examples/jsm/objects/GaussianSplat.js +5 -4
  117. package/examples/jsm/objects/Reflector.js +5 -0
  118. package/examples/jsm/objects/SkyMesh.js +14 -7
  119. package/examples/jsm/objects/Water2Mesh.js +2 -2
  120. package/examples/jsm/physics/RapierPhysics.js +2 -2
  121. package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
  122. package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
  123. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  124. package/examples/jsm/postprocessing/GTAOPass.js +26 -18
  125. package/examples/jsm/renderers/SVGRenderer.js +3 -2
  126. package/examples/jsm/shaders/GTAOShader.js +7 -4
  127. package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
  128. package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
  129. package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
  130. package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
  131. package/examples/jsm/tsl/display/BloomNode.js +3 -3
  132. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
  133. package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
  134. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  135. package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
  136. package/examples/jsm/tsl/display/FSR1Node.js +3 -3
  137. package/examples/jsm/tsl/display/FXAANode.js +3 -10
  138. package/examples/jsm/tsl/display/FilmNode.js +3 -3
  139. package/examples/jsm/tsl/display/GTAONode.js +33 -25
  140. package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
  141. package/examples/jsm/tsl/display/GodraysNode.js +5 -19
  142. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
  143. package/examples/jsm/tsl/display/LensflareNode.js +3 -3
  144. package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
  145. package/examples/jsm/tsl/display/OITPassNode.js +0 -11
  146. package/examples/jsm/tsl/display/OutlineNode.js +107 -5
  147. package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
  148. package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
  149. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
  150. package/examples/jsm/tsl/display/SMAANode.js +3 -3
  151. package/examples/jsm/tsl/display/SSAONode.js +6 -20
  152. package/examples/jsm/tsl/display/SSGINode.js +36 -29
  153. package/examples/jsm/tsl/display/SSRNode.js +135 -63
  154. package/examples/jsm/tsl/display/SSSNode.js +6 -20
  155. package/examples/jsm/tsl/display/SharpenNode.js +3 -3
  156. package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
  157. package/examples/jsm/tsl/display/TAAUNode.js +10 -42
  158. package/examples/jsm/tsl/display/TRAANode.js +11 -43
  159. package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
  160. package/examples/jsm/tsl/display/TransitionNode.js +3 -3
  161. package/examples/jsm/tsl/display/lensDirt.js +30 -0
  162. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
  163. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
  164. package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
  165. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
  166. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
  167. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
  168. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
  169. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
  170. package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
  171. package/examples/jsm/tsl/utils/Raymarching.js +1 -1
  172. package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
  173. package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
  174. package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
  175. package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
  176. package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
  177. package/examples/jsm/utils/SceneOptimizer.js +2 -1
  178. package/examples/jsm/utils/SceneUtils.js +1 -1
  179. package/examples/jsm/utils/unwrapUVs.js +865 -0
  180. package/examples/jsm/webxr/XREstimatedLight.js +11 -4
  181. package/package.json +3 -3
  182. package/src/Three.TSL.js +2 -683
  183. package/src/Three.WebGPU.Nodes.js +2 -1
  184. package/src/Three.WebGPU.js +2 -1
  185. package/src/animation/AnimationAction.js +1 -1
  186. package/src/animation/AnimationUtils.js +1 -3
  187. package/src/animation/KeyframeTrack.js +19 -0
  188. package/src/cameras/ArrayCamera.js +12 -0
  189. package/src/cameras/CubeCamera.js +3 -3
  190. package/src/constants.js +1 -9
  191. package/src/core/BufferAttribute.js +57 -21
  192. package/src/core/BufferGeometry.js +5 -13
  193. package/src/core/Clock.js +1 -1
  194. package/src/core/InterleavedBuffer.js +28 -18
  195. package/src/core/InterleavedBufferAttribute.js +54 -20
  196. package/src/core/Object3D.js +19 -9
  197. package/src/core/Raycaster.js +2 -0
  198. package/src/core/RenderTarget.js +11 -5
  199. package/src/core/UniformsGroup.js +7 -3
  200. package/src/extras/PMREMGenerator.js +392 -685
  201. package/src/extras/core/Curve.js +4 -0
  202. package/src/extras/core/CurvePath.js +13 -0
  203. package/src/extras/core/ShapePath.js +1 -1
  204. package/src/geometries/EdgesGeometry.js +12 -10
  205. package/src/geometries/LatheGeometry.js +2 -0
  206. package/src/helpers/PolarGridHelper.js +1 -1
  207. package/src/lights/Light.js +11 -0
  208. package/src/lights/LightProbe.js +2 -0
  209. package/src/lights/LightShadow.js +2 -0
  210. package/src/loaders/AnimationLoader.js +2 -0
  211. package/src/loaders/AudioLoader.js +2 -0
  212. package/src/loaders/BufferGeometryLoader.js +2 -0
  213. package/src/loaders/CompressedTextureLoader.js +2 -0
  214. package/src/loaders/CubeTextureLoader.js +2 -0
  215. package/src/loaders/DataTextureLoader.js +2 -0
  216. package/src/loaders/FileLoader.js +2 -0
  217. package/src/loaders/ImageBitmapLoader.js +3 -1
  218. package/src/loaders/ImageLoader.js +1 -0
  219. package/src/loaders/Loader.js +47 -0
  220. package/src/loaders/MaterialLoader.js +2 -0
  221. package/src/loaders/ObjectLoader.js +27 -8
  222. package/src/loaders/TextureLoader.js +5 -3
  223. package/src/loaders/nodes/NodeLoader.js +2 -0
  224. package/src/materials/Material.js +21 -2
  225. package/src/materials/MeshDepthMaterial.js +1 -1
  226. package/src/materials/MeshDistanceMaterial.js +1 -1
  227. package/src/materials/MeshLambertMaterial.js +1 -1
  228. package/src/materials/MeshMatcapMaterial.js +1 -1
  229. package/src/materials/MeshNormalMaterial.js +1 -1
  230. package/src/materials/MeshPhongMaterial.js +1 -1
  231. package/src/materials/MeshPhysicalMaterial.js +90 -11
  232. package/src/materials/MeshStandardMaterial.js +1 -1
  233. package/src/materials/MeshToonMaterial.js +1 -1
  234. package/src/materials/nodes/Line2NodeMaterial.js +32 -10
  235. package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
  236. package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
  237. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
  238. package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
  239. package/src/materials/nodes/NodeMaterial.js +36 -16
  240. package/src/materials/nodes/NodeMaterialInstance.js +193 -0
  241. package/src/materials/nodes/NodeMaterials.js +1 -0
  242. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  243. package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
  244. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
  245. package/src/math/Box3.js +2 -2
  246. package/src/math/Color.js +8 -8
  247. package/src/math/ColorManagement.js +2 -21
  248. package/src/math/FrustumArray.js +12 -0
  249. package/src/math/Interpolant.js +1 -1
  250. package/src/math/Line3.js +2 -4
  251. package/src/math/MathUtils.js +33 -46
  252. package/src/math/Matrix2.js +1 -1
  253. package/src/math/Matrix3.js +1 -1
  254. package/src/math/Matrix4.js +1 -1
  255. package/src/math/Triangle.js +2 -1
  256. package/src/math/Vector2.js +1 -1
  257. package/src/math/Vector3.js +1 -1
  258. package/src/math/Vector4.js +1 -1
  259. package/src/nodes/Nodes.js +1 -0
  260. package/src/nodes/TSL.js +2 -0
  261. package/src/nodes/accessors/Arrays.js +1 -1
  262. package/src/nodes/accessors/Batch.js +29 -23
  263. package/src/nodes/accessors/BufferAttributeNode.js +21 -1
  264. package/src/nodes/accessors/BuiltinNode.js +6 -0
  265. package/src/nodes/accessors/Camera.js +100 -93
  266. package/src/nodes/accessors/ClippingNode.js +17 -6
  267. package/src/nodes/accessors/CubeTextureNode.js +12 -24
  268. package/src/nodes/accessors/Instance.js +198 -160
  269. package/src/nodes/accessors/Lights.js +19 -6
  270. package/src/nodes/accessors/MaterialNode.js +33 -4
  271. package/src/nodes/accessors/Morph.js +81 -22
  272. package/src/nodes/accessors/Normal.js +0 -42
  273. package/src/nodes/accessors/Object3DNode.js +6 -0
  274. package/src/nodes/accessors/PointUVNode.js +6 -0
  275. package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
  276. package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
  277. package/src/nodes/accessors/ReferenceNode.js +6 -0
  278. package/src/nodes/accessors/Skinning.js +57 -52
  279. package/src/nodes/accessors/StorageBufferNode.js +3 -12
  280. package/src/nodes/accessors/TextureBicubic.js +30 -27
  281. package/src/nodes/accessors/TextureNode.js +164 -78
  282. package/src/nodes/accessors/TextureSizeNode.js +6 -0
  283. package/src/nodes/accessors/UniformArrayNode.js +8 -15
  284. package/src/nodes/accessors/VelocityNode.js +13 -8
  285. package/src/nodes/code/CodeNode.js +6 -0
  286. package/src/nodes/code/ExpressionNode.js +6 -0
  287. package/src/nodes/code/FunctionCallNode.js +3 -3
  288. package/src/nodes/code/FunctionNode.js +15 -13
  289. package/src/nodes/core/ArrayNode.js +3 -3
  290. package/src/nodes/core/AssignNode.js +10 -9
  291. package/src/nodes/core/AttributeNode.js +39 -0
  292. package/src/nodes/core/BypassNode.js +6 -0
  293. package/src/nodes/core/ConstNode.js +31 -1
  294. package/src/nodes/core/ContextNode.js +11 -6
  295. package/src/nodes/core/IndexNode.js +6 -0
  296. package/src/nodes/core/InputNode.js +6 -0
  297. package/src/nodes/core/InspectorNode.js +17 -31
  298. package/src/nodes/core/IsolateNode.js +8 -0
  299. package/src/nodes/core/Node.js +367 -67
  300. package/src/nodes/core/NodeBuilder.js +664 -222
  301. package/src/nodes/core/NodeUtils.js +25 -0
  302. package/src/nodes/core/NodeVar.js +10 -1
  303. package/src/nodes/core/OutputStructNode.js +6 -0
  304. package/src/nodes/core/OverrideContextNode.js +38 -37
  305. package/src/nodes/core/PropertyNode.js +14 -0
  306. package/src/nodes/core/StackNode.js +33 -21
  307. package/src/nodes/core/StructNode.js +6 -0
  308. package/src/nodes/core/StructTypeNode.js +6 -0
  309. package/src/nodes/core/SubBuildNode.js +8 -0
  310. package/src/nodes/core/TempNode.js +10 -35
  311. package/src/nodes/core/UniformGroupNode.js +6 -0
  312. package/src/nodes/core/VarNode.js +43 -135
  313. package/src/nodes/core/VaryingNode.js +33 -2
  314. package/src/nodes/display/BlendModes.js +5 -40
  315. package/src/nodes/display/BumpMapNode.js +17 -7
  316. package/src/nodes/display/ColorAdjustment.js +22 -10
  317. package/src/nodes/display/ColorSpaceFunctions.js +2 -14
  318. package/src/nodes/display/ColorSpaceNode.js +3 -3
  319. package/src/nodes/display/FrontFacingNode.js +6 -0
  320. package/src/nodes/display/NormalMapNode.js +3 -3
  321. package/src/nodes/display/PassNode.js +75 -16
  322. package/src/nodes/display/RenderOutputNode.js +22 -5
  323. package/src/nodes/display/ScreenNode.js +6 -0
  324. package/src/nodes/display/ToneMappingFunctions.js +9 -51
  325. package/src/nodes/display/ToneMappingNode.js +3 -3
  326. package/src/nodes/display/ToonOutlinePassNode.js +66 -2
  327. package/src/nodes/display/ViewportDepthNode.js +34 -4
  328. package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
  329. package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
  330. package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
  331. package/src/nodes/functions/BSDF/D_GGX.js +1 -8
  332. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
  333. package/src/nodes/functions/BSDF/LTC.js +20 -47
  334. package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
  335. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
  336. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
  337. package/src/nodes/functions/PhysicalLightingModel.js +84 -51
  338. package/src/nodes/functions/VolumetricLightingModel.js +1 -1
  339. package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
  340. package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
  341. package/src/nodes/functions/material/getRoughness.js +3 -1
  342. package/src/nodes/geometry/RangeNode.js +52 -69
  343. package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
  344. package/src/nodes/gpgpu/BarrierNode.js +6 -0
  345. package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
  346. package/src/nodes/gpgpu/ComputeNode.js +6 -0
  347. package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
  348. package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
  349. package/src/nodes/lighting/AnalyticLightNode.js +7 -14
  350. package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
  351. package/src/nodes/lighting/EnvironmentNode.js +58 -8
  352. package/src/nodes/lighting/IESSpotLightNode.js +19 -4
  353. package/src/nodes/lighting/LightProbeNode.js +2 -1
  354. package/src/nodes/lighting/LightUtils.js +2 -2
  355. package/src/nodes/lighting/LightingNode.js +6 -0
  356. package/src/nodes/lighting/LightsNode.js +26 -32
  357. package/src/nodes/lighting/PointShadowNode.js +92 -48
  358. package/src/nodes/lighting/ProjectorLightNode.js +1 -1
  359. package/src/nodes/lighting/RectAreaLightNode.js +13 -14
  360. package/src/nodes/lighting/ShadowBaseNode.js +9 -17
  361. package/src/nodes/lighting/ShadowFilterNode.js +26 -3
  362. package/src/nodes/lighting/ShadowNode.js +13 -11
  363. package/src/nodes/materialx/MaterialXColor.js +2 -14
  364. package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
  365. package/src/nodes/materialx/MaterialXNodes.js +8 -11
  366. package/src/nodes/materialx/MaterialXNoise.js +195 -454
  367. package/src/nodes/math/BitcastNode.js +5 -5
  368. package/src/nodes/math/BitcountNode.js +18 -46
  369. package/src/nodes/math/ConditionalNode.js +92 -22
  370. package/src/nodes/math/Hash.js +1 -1
  371. package/src/nodes/math/MathNode.js +86 -64
  372. package/src/nodes/math/MathUtils.js +2 -2
  373. package/src/nodes/math/OperatorNode.js +42 -59
  374. package/src/nodes/math/PackFloatNode.js +9 -9
  375. package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
  376. package/src/nodes/math/TriNoise3D.js +3 -23
  377. package/src/nodes/math/UnpackFloatNode.js +9 -9
  378. package/src/nodes/pmrem/PMREMNode.js +38 -75
  379. package/src/nodes/pmrem/PMREMUtils.js +108 -272
  380. package/src/nodes/procedural/Checker.js +1 -1
  381. package/src/nodes/tsl/TSLCore.js +199 -74
  382. package/src/nodes/utils/ArrayElementNode.js +19 -1
  383. package/src/nodes/utils/CubeMapNode.js +3 -3
  384. package/src/nodes/utils/DebugNode.js +2 -2
  385. package/src/nodes/utils/EventNode.js +6 -0
  386. package/src/nodes/utils/FlipNode.js +3 -3
  387. package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
  388. package/src/nodes/utils/JoinNode.js +3 -3
  389. package/src/nodes/utils/LoopNode.js +14 -9
  390. package/src/nodes/utils/MemberNode.js +18 -0
  391. package/src/nodes/utils/PostProcessingUtils.js +20 -25
  392. package/src/nodes/utils/RTTNode.js +2 -0
  393. package/src/nodes/utils/ReflectorNode.js +24 -0
  394. package/src/nodes/utils/RotateNode.js +3 -3
  395. package/src/nodes/utils/SampleNode.js +6 -0
  396. package/src/nodes/utils/SetNode.js +3 -3
  397. package/src/nodes/utils/SplitNode.js +6 -0
  398. package/src/nodes/utils/UVUtils.js +2 -2
  399. package/src/objects/BatchedMesh.js +146 -15
  400. package/src/objects/InstancedMesh.js +12 -4
  401. package/src/objects/Line.js +20 -0
  402. package/src/objects/Mesh.js +8 -0
  403. package/src/objects/Points.js +20 -0
  404. package/src/objects/Skeleton.js +26 -0
  405. package/src/objects/SkinnedMesh.js +3 -3
  406. package/src/objects/Sprite.js +10 -0
  407. package/src/renderers/WebGLRenderer.js +104 -70
  408. package/src/renderers/common/Animation.js +5 -1
  409. package/src/renderers/common/Attributes.js +67 -57
  410. package/src/renderers/common/Backend.js +78 -3
  411. package/src/renderers/common/BindGroup.js +11 -0
  412. package/src/renderers/common/Binding.js +0 -11
  413. package/src/renderers/common/Bindings.js +116 -10
  414. package/src/renderers/common/Buffer.js +1 -1
  415. package/src/renderers/common/ClippingContext.js +12 -1
  416. package/src/renderers/common/ComputePipeline.js +17 -1
  417. package/src/renderers/common/DirectRenderPipeline.js +7 -3
  418. package/src/renderers/common/Geometries.js +170 -132
  419. package/src/renderers/common/Info.js +1 -1
  420. package/src/renderers/common/InspectorBase.js +5 -5
  421. package/src/renderers/common/Lighting.js +59 -0
  422. package/src/renderers/common/Pipelines.js +26 -12
  423. package/src/renderers/common/ProgrammableStage.js +1 -17
  424. package/src/renderers/common/RenderContext.js +21 -0
  425. package/src/renderers/common/RenderContexts.js +13 -4
  426. package/src/renderers/common/RenderObject.js +111 -35
  427. package/src/renderers/common/RenderObjects.js +37 -19
  428. package/src/renderers/common/Renderer.js +537 -295
  429. package/src/renderers/common/RendererUtils.js +15 -0
  430. package/src/renderers/common/StandardDrawingPipeline.js +343 -0
  431. package/src/renderers/common/Storage3DTexture.js +11 -0
  432. package/src/renderers/common/StorageArrayTexture.js +10 -0
  433. package/src/renderers/common/StorageTexture.js +0 -9
  434. package/src/renderers/common/Textures.js +144 -37
  435. package/src/renderers/common/UniformsGroup.js +19 -0
  436. package/src/renderers/common/XRManager.js +10 -91
  437. package/src/renderers/common/extras/PMREMGenerator.js +298 -576
  438. package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
  439. package/src/renderers/common/nodes/NodeLibrary.js +11 -35
  440. package/src/renderers/common/nodes/NodeManager.js +80 -31
  441. package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
  442. package/src/renderers/common/nodes/NodeSampler.js +14 -0
  443. package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
  444. package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
  445. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
  446. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
  447. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
  448. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
  449. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  450. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
  451. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
  452. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
  453. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
  454. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
  455. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
  456. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
  457. package/src/renderers/shaders/ShaderChunk.js +0 -2
  458. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
  459. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  461. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
  462. package/src/renderers/shaders/ShaderLib.js +3 -0
  463. package/src/renderers/shaders/UniformsLib.js +4 -5
  464. package/src/renderers/webgl/WebGLBackground.js +3 -3
  465. package/src/renderers/webgl/WebGLBindingStates.js +4 -2
  466. package/src/renderers/webgl/WebGLCapabilities.js +7 -1
  467. package/src/renderers/webgl/WebGLEnvironments.js +2 -2
  468. package/src/renderers/webgl/WebGLGeometries.js +42 -14
  469. package/src/renderers/webgl/WebGLMaterials.js +15 -2
  470. package/src/renderers/webgl/WebGLOutput.js +37 -1
  471. package/src/renderers/webgl/WebGLProgram.js +13 -54
  472. package/src/renderers/webgl/WebGLPrograms.js +22 -8
  473. package/src/renderers/webgl/WebGLRenderStates.js +11 -8
  474. package/src/renderers/webgl/WebGLShadowMap.js +6 -4
  475. package/src/renderers/webgl/WebGLState.js +10 -6
  476. package/src/renderers/webgl/WebGLTextures.js +129 -77
  477. package/src/renderers/webgl/WebGLUniforms.js +44 -6
  478. package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
  479. package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
  480. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
  481. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
  482. package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
  483. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
  484. package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
  485. package/src/renderers/webgpu/WebGPUBackend.js +140 -82
  486. package/src/renderers/webgpu/WebGPURenderer.js +1 -1
  487. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
  488. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
  489. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
  490. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
  491. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
  492. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
  493. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
  494. package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
  495. package/src/renderers/webxr/WebXRController.js +3 -3
  496. package/src/renderers/webxr/WebXRManager.js +5 -90
  497. package/src/scenes/Scene.js +4 -4
  498. package/src/textures/CompressedTexture.js +2 -2
  499. package/src/textures/DepthTexture.js +2 -2
  500. package/src/textures/FramebufferTexture.js +11 -0
  501. package/src/textures/Texture.js +29 -1
  502. package/src/textures/TextureSource.js +1 -1
  503. package/src/upe.js +1 -1
  504. package/src/utils.js +4 -4
  505. package/examples/jsm/libs/surfaceNet.js +0 -201
  506. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
@@ -16,6 +16,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
16
16
 
17
17
  const _sources = new WeakMap(); // maps WebglTexture objects to instances of TextureSource
18
18
 
19
+ const _tracked = new Set();
20
+ const _registry = new FinalizationRegistry( ( ref ) => _tracked.delete( ref ) );
21
+
19
22
  // cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,
20
23
  // also OffscreenCanvas.getContext("webgl"), but not OffscreenCanvas.getContext("2d")!
21
24
  // Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).
@@ -299,7 +302,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
299
302
 
300
303
  return Math.log2( Math.max( image.width, image.height ) ) + 1;
301
304
 
302
- } else if ( texture.mipmaps !== undefined && texture.mipmaps.length > 0 ) {
305
+ } else if ( texture.mipmaps.length > 0 ) {
303
306
 
304
307
  // user-defined mipmaps
305
308
 
@@ -321,12 +324,45 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
321
324
 
322
325
  //
323
326
 
327
+ function track( object ) {
328
+
329
+ const ref = new WeakRef( object );
330
+
331
+ properties.get( object ).__ref = ref;
332
+
333
+ _tracked.add( ref );
334
+ _registry.register( object, ref, ref );
335
+
336
+ }
337
+
338
+ function untrack( object ) {
339
+
340
+ const ref = properties.get( object ).__ref;
341
+
342
+ if ( ref === undefined ) return;
343
+
344
+ _tracked.delete( ref );
345
+ _registry.unregister( ref );
346
+
347
+ }
348
+
324
349
  function onTextureDispose( event ) {
325
350
 
326
- const texture = event.target;
351
+ destroyTexture( event.target );
352
+
353
+ }
354
+
355
+ function onRenderTargetDispose( event ) {
356
+
357
+ destroyRenderTarget( event.target );
358
+
359
+ }
360
+
361
+ function destroyTexture( texture ) {
327
362
 
328
363
  texture.removeEventListener( 'dispose', onTextureDispose );
329
364
 
365
+ untrack( texture );
330
366
  deallocateTexture( texture );
331
367
 
332
368
  if ( texture.isVideoTexture ) {
@@ -343,16 +379,40 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
343
379
 
344
380
  }
345
381
 
346
- function onRenderTargetDispose( event ) {
347
-
348
- const renderTarget = event.target;
382
+ function destroyRenderTarget( renderTarget ) {
349
383
 
350
384
  renderTarget.removeEventListener( 'dispose', onRenderTargetDispose );
351
385
 
386
+ untrack( renderTarget );
352
387
  deallocateRenderTarget( renderTarget );
353
388
 
354
389
  }
355
390
 
391
+ function dispose() {
392
+
393
+ for ( const ref of _tracked ) {
394
+
395
+ const object = ref.deref();
396
+
397
+ if ( object === undefined ) continue;
398
+
399
+ if ( object.isRenderTarget === true ) {
400
+
401
+ destroyRenderTarget( object );
402
+
403
+ } else {
404
+
405
+ destroyTexture( object );
406
+
407
+ }
408
+
409
+ }
410
+
411
+ _tracked.clear();
412
+ _htmlTextures.clear();
413
+
414
+ }
415
+
356
416
  //
357
417
 
358
418
  function deallocateTexture( texture ) {
@@ -410,13 +470,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
410
470
 
411
471
  const renderTargetProperties = properties.get( renderTarget );
412
472
 
413
- if ( renderTarget.depthTexture ) {
473
+ if ( renderTargetProperties.__depthDisposeCallback ) renderTargetProperties.__depthDisposeCallback();
414
474
 
415
- renderTarget.depthTexture.dispose();
475
+ const depthTexture = renderTarget.depthTexture;
416
476
 
417
- properties.remove( renderTarget.depthTexture );
477
+ // only destroy depth texture the render target owns
418
478
 
419
- }
479
+ if ( depthTexture && depthTexture.renderTarget === renderTarget ) destroyTexture( depthTexture );
420
480
 
421
481
  if ( renderTarget.isWebGLCubeRenderTarget ) {
422
482
 
@@ -539,6 +599,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
539
599
  array.push( texture.format );
540
600
  array.push( texture.type );
541
601
  array.push( texture.generateMipmaps );
602
+ array.push( texture.mipmapsAutoUpdate );
542
603
  array.push( texture.premultiplyAlpha );
543
604
  array.push( texture.flipY );
544
605
  array.push( texture.unpackAlignment );
@@ -623,7 +684,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
623
684
 
624
685
  const textureProperties = properties.get( texture );
625
686
 
626
- if ( texture.isCubeDepthTexture !== true && texture.version > 0 && textureProperties.__version !== texture.version ) {
687
+ if ( texture.version > 0 && textureProperties.__version !== texture.version ) {
627
688
 
628
689
  uploadCubeTexture( textureProperties, texture, slot );
629
690
  return;
@@ -717,6 +778,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
717
778
  textureProperties.__webglInit = true;
718
779
 
719
780
  texture.addEventListener( 'dispose', onTextureDispose );
781
+ track( texture );
720
782
 
721
783
  }
722
784
 
@@ -1388,7 +1450,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1388
1450
 
1389
1451
  }
1390
1452
 
1391
- if ( textureNeedsGenerateMipmaps( texture ) ) {
1453
+ if ( textureNeedsGenerateMipmaps( texture ) && texture.mipmapsAutoUpdate === true ) {
1392
1454
 
1393
1455
  generateMipmap( textureType );
1394
1456
 
@@ -1451,8 +1513,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1451
1513
 
1452
1514
  const image = cubeImage[ 0 ],
1453
1515
  glFormat = utils.convert( texture.format, texture.colorSpace ),
1454
- glType = utils.convert( texture.type ),
1455
- glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace );
1516
+ glType = utils.convert( texture.type );
1517
+
1518
+ let glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace );
1456
1519
 
1457
1520
  const useTexStorage = ( texture.isVideoTexture !== true );
1458
1521
  const allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );
@@ -1463,7 +1526,31 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1463
1526
 
1464
1527
  let mipmaps;
1465
1528
 
1466
- if ( isCompressed ) {
1529
+ if ( texture.isDepthTexture ) {
1530
+
1531
+ glInternalFormat = getInternalDepthFormat( texture.format === DepthStencilFormat, texture.type );
1532
+
1533
+ //
1534
+
1535
+ if ( allocateMemory ) {
1536
+
1537
+ if ( useTexStorage ) {
1538
+
1539
+ state.texStorage2D( _gl.TEXTURE_CUBE_MAP, 1, glInternalFormat, image.width, image.height );
1540
+
1541
+ } else {
1542
+
1543
+ for ( let i = 0; i < 6; i ++ ) {
1544
+
1545
+ state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );
1546
+
1547
+ }
1548
+
1549
+ }
1550
+
1551
+ }
1552
+
1553
+ } else if ( isCompressed ) {
1467
1554
 
1468
1555
  if ( useTexStorage && allocateMemory ) {
1469
1556
 
@@ -1624,7 +1711,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1624
1711
 
1625
1712
  }
1626
1713
 
1627
- if ( textureNeedsGenerateMipmaps( texture ) ) {
1714
+ if ( textureNeedsGenerateMipmaps( texture ) && texture.mipmapsAutoUpdate === true ) {
1628
1715
 
1629
1716
  // We assume images for cube map have the same size.
1630
1717
  generateMipmap( _gl.TEXTURE_CUBE_MAP );
@@ -1768,57 +1855,21 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1768
1855
  textureProperties.__renderTarget = renderTarget;
1769
1856
 
1770
1857
  // upload an empty depth texture with framebuffer size
1858
+ const image = isCube ? renderTarget.depthTexture.image[ 0 ] : renderTarget.depthTexture.image;
1859
+
1771
1860
  if ( ! textureProperties.__webglTexture ||
1772
- renderTarget.depthTexture.image.width !== renderTarget.width ||
1773
- renderTarget.depthTexture.image.height !== renderTarget.height ) {
1861
+ image.width !== renderTarget.width ||
1862
+ image.height !== renderTarget.height ) {
1774
1863
 
1775
- renderTarget.depthTexture.image.width = renderTarget.width;
1776
- renderTarget.depthTexture.image.height = renderTarget.height;
1864
+ image.width = renderTarget.width;
1865
+ image.height = renderTarget.height;
1777
1866
  renderTarget.depthTexture.needsUpdate = true;
1778
1867
 
1779
1868
  }
1780
1869
 
1781
1870
  if ( isCube ) {
1782
1871
 
1783
- // For cube depth textures, initialize and bind without uploading image data
1784
- if ( textureProperties.__webglInit === undefined ) {
1785
-
1786
- textureProperties.__webglInit = true;
1787
- renderTarget.depthTexture.addEventListener( 'dispose', onTextureDispose );
1788
-
1789
- }
1790
-
1791
- // Only create and allocate storage once
1792
- if ( textureProperties.__webglTexture === undefined ) {
1793
-
1794
- textureProperties.__webglTexture = _gl.createTexture();
1795
-
1796
- state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );
1797
- setTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.depthTexture );
1798
-
1799
- // Allocate storage for all 6 faces with correct depth texture format
1800
- const glFormat = utils.convert( renderTarget.depthTexture.format );
1801
- const glType = utils.convert( renderTarget.depthTexture.type );
1802
-
1803
- // Use proper internal format for depth textures
1804
- let glInternalFormat;
1805
- if ( renderTarget.depthTexture.format === DepthFormat ) {
1806
-
1807
- glInternalFormat = _gl.DEPTH_COMPONENT24;
1808
-
1809
- } else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {
1810
-
1811
- glInternalFormat = _gl.DEPTH24_STENCIL8;
1812
-
1813
- }
1814
-
1815
- for ( let i = 0; i < 6; i ++ ) {
1816
-
1817
- _gl.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );
1818
-
1819
- }
1820
-
1821
- }
1872
+ setTextureCube( renderTarget.depthTexture, 0 );
1822
1873
 
1823
1874
  } else {
1824
1875
 
@@ -1916,7 +1967,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1916
1967
 
1917
1968
  const mipmaps = renderTarget.texture.mipmaps;
1918
1969
 
1919
- if ( mipmaps && mipmaps.length > 0 ) {
1970
+ if ( mipmaps.length > 0 ) {
1920
1971
 
1921
1972
  setupDepthTexture( renderTargetProperties.__webglFramebuffer[ 0 ], renderTarget, 0 );
1922
1973
 
@@ -1959,7 +2010,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1959
2010
 
1960
2011
  const mipmaps = renderTarget.texture.mipmaps;
1961
2012
 
1962
- if ( mipmaps && mipmaps.length > 0 ) {
2013
+ if ( mipmaps.length > 0 ) {
1963
2014
 
1964
2015
  state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ 0 ] );
1965
2016
 
@@ -2020,6 +2071,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
2020
2071
  const textureProperties = properties.get( texture );
2021
2072
 
2022
2073
  renderTarget.addEventListener( 'dispose', onRenderTargetDispose );
2074
+ track( renderTarget );
2023
2075
 
2024
2076
  const textures = renderTarget.textures;
2025
2077
 
@@ -2047,7 +2099,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
2047
2099
 
2048
2100
  for ( let i = 0; i < 6; i ++ ) {
2049
2101
 
2050
- if ( texture.mipmaps && texture.mipmaps.length > 0 ) {
2102
+ if ( texture.mipmaps.length > 0 ) {
2051
2103
 
2052
2104
  renderTargetProperties.__webglFramebuffer[ i ] = [];
2053
2105
 
@@ -2067,7 +2119,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
2067
2119
 
2068
2120
  } else {
2069
2121
 
2070
- if ( texture.mipmaps && texture.mipmaps.length > 0 ) {
2122
+ if ( texture.mipmaps.length > 0 ) {
2071
2123
 
2072
2124
  renderTargetProperties.__webglFramebuffer = [];
2073
2125
 
@@ -2149,7 +2201,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
2149
2201
 
2150
2202
  for ( let i = 0; i < 6; i ++ ) {
2151
2203
 
2152
- if ( texture.mipmaps && texture.mipmaps.length > 0 ) {
2204
+ if ( texture.mipmaps.length > 0 ) {
2153
2205
 
2154
2206
  for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
2155
2207
 
@@ -2169,6 +2221,11 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
2169
2221
 
2170
2222
  generateMipmap( _gl.TEXTURE_CUBE_MAP );
2171
2223
 
2224
+ } else if ( texture.mipmaps.length > 0 ) {
2225
+
2226
+ // Limit the max level to keep partial mip chains complete.
2227
+ _gl.texParameteri( _gl.TEXTURE_CUBE_MAP, _gl.TEXTURE_MAX_LEVEL, texture.mipmaps.length - 1 );
2228
+
2172
2229
  }
2173
2230
 
2174
2231
  state.unbindTexture();
@@ -2215,7 +2272,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
2215
2272
  state.bindTexture( glTextureType, textureProperties.__webglTexture );
2216
2273
  setTextureParameters( glTextureType, texture );
2217
2274
 
2218
- if ( texture.mipmaps && texture.mipmaps.length > 0 ) {
2275
+ if ( texture.mipmaps.length > 0 ) {
2219
2276
 
2220
2277
  for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
2221
2278
 
@@ -2233,6 +2290,11 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
2233
2290
 
2234
2291
  generateMipmap( glTextureType );
2235
2292
 
2293
+ } else if ( texture.mipmaps.length > 0 ) {
2294
+
2295
+ // Limit the max level to keep partial mip chains complete.
2296
+ _gl.texParameteri( glTextureType, _gl.TEXTURE_MAX_LEVEL, texture.mipmaps.length - 1 );
2297
+
2236
2298
  }
2237
2299
 
2238
2300
  state.unbindTexture();
@@ -2257,7 +2319,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
2257
2319
 
2258
2320
  const texture = textures[ i ];
2259
2321
 
2260
- if ( textureNeedsGenerateMipmaps( texture ) ) {
2322
+ if ( textureNeedsGenerateMipmaps( texture ) && texture.mipmapsAutoUpdate === true ) {
2261
2323
 
2262
2324
  const targetType = getTargetType( renderTarget );
2263
2325
  const webglTexture = properties.get( texture ).__webglTexture;
@@ -2273,7 +2335,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
2273
2335
  }
2274
2336
 
2275
2337
  const invalidationArrayRead = [];
2276
- const invalidationArrayDraw = [];
2277
2338
 
2278
2339
  function updateMultisampleRenderTarget( renderTarget ) {
2279
2340
 
@@ -2308,7 +2369,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
2308
2369
 
2309
2370
  const mipmaps = renderTarget.texture.mipmaps;
2310
2371
 
2311
- if ( mipmaps && mipmaps.length > 0 ) {
2372
+ if ( mipmaps.length > 0 ) {
2312
2373
 
2313
2374
  state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ 0 ] );
2314
2375
 
@@ -2344,16 +2405,12 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
2344
2405
  if ( supportsInvalidateFramebuffer === true ) {
2345
2406
 
2346
2407
  invalidationArrayRead.length = 0;
2347
- invalidationArrayDraw.length = 0;
2348
2408
 
2349
2409
  invalidationArrayRead.push( _gl.COLOR_ATTACHMENT0 + i );
2350
2410
 
2351
2411
  if ( renderTarget.depthBuffer && renderTarget.storeMultisampledDepthBuffer === false ) {
2352
2412
 
2353
2413
  invalidationArrayRead.push( depthStyle );
2354
- invalidationArrayDraw.push( depthStyle );
2355
-
2356
- _gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, invalidationArrayDraw );
2357
2414
 
2358
2415
  }
2359
2416
 
@@ -2507,12 +2564,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
2507
2564
  this.setupDepthRenderbuffer = setupDepthRenderbuffer;
2508
2565
  this.setupFrameBufferTexture = setupFrameBufferTexture;
2509
2566
  this.useMultisampledRTT = useMultisampledRTT;
2510
-
2511
- this.isReversedDepthBuffer = function () {
2512
-
2513
- return state.buffers.depth.getReversed();
2514
-
2515
- };
2567
+ this.dispose = dispose;
2516
2568
 
2517
2569
  }
2518
2570
 
@@ -46,11 +46,13 @@ import { Texture } from '../../textures/Texture.js';
46
46
  import { DataArrayTexture } from '../../textures/DataArrayTexture.js';
47
47
  import { Data3DTexture } from '../../textures/Data3DTexture.js';
48
48
  import { DepthTexture } from '../../textures/DepthTexture.js';
49
- import { LessEqualCompare, GreaterEqualCompare } from '../../constants.js';
49
+ import { CubeDepthTexture } from '../../textures/CubeDepthTexture.js';
50
+ import { AlwaysCompare } from '../../constants.js';
50
51
 
51
52
  const emptyTexture = /*@__PURE__*/ new Texture();
52
53
 
53
54
  const emptyShadowTexture = /*@__PURE__*/ new DepthTexture( 1, 1 );
55
+ const emptyCubeShadowTexture = /*@__PURE__*/ new CubeDepthTexture( 1 );
54
56
 
55
57
  const emptyArrayTexture = /*@__PURE__*/ new DataArrayTexture();
56
58
  const empty3dTexture = /*@__PURE__*/ new Data3DTexture();
@@ -554,6 +556,19 @@ function setValueV4ui( gl, v ) {
554
556
  }
555
557
 
556
558
 
559
+ function initShadowTexture( texture ) {
560
+
561
+ if ( texture.version === 0 ) {
562
+
563
+ texture.compareFunction = AlwaysCompare;
564
+ texture.needsUpdate = true;
565
+
566
+ }
567
+
568
+ return texture;
569
+
570
+ }
571
+
557
572
  // Single texture (2D / Cube)
558
573
 
559
574
  function setValueT1( gl, v, textures ) {
@@ -572,8 +587,7 @@ function setValueT1( gl, v, textures ) {
572
587
 
573
588
  if ( this.type === gl.SAMPLER_2D_SHADOW ) {
574
589
 
575
- emptyShadowTexture.compareFunction = textures.isReversedDepthBuffer() ? GreaterEqualCompare : LessEqualCompare;
576
- emptyTexture2D = emptyShadowTexture;
590
+ emptyTexture2D = initShadowTexture( emptyShadowTexture );
577
591
 
578
592
  } else {
579
593
 
@@ -613,7 +627,19 @@ function setValueT6( gl, v, textures ) {
613
627
 
614
628
  }
615
629
 
616
- textures.setTextureCube( v || emptyCubeTexture, unit );
630
+ let emptyTextureCube;
631
+
632
+ if ( this.type === gl.SAMPLER_CUBE_SHADOW ) {
633
+
634
+ emptyTextureCube = initShadowTexture( emptyCubeShadowTexture );
635
+
636
+ } else {
637
+
638
+ emptyTextureCube = emptyCubeTexture;
639
+
640
+ }
641
+
642
+ textures.setTextureCube( v || emptyTextureCube, unit );
617
643
 
618
644
  }
619
645
 
@@ -826,7 +852,7 @@ function setValueT1Array( gl, v, textures ) {
826
852
 
827
853
  if ( this.type === gl.SAMPLER_2D_SHADOW ) {
828
854
 
829
- emptyTexture2D = emptyShadowTexture;
855
+ emptyTexture2D = initShadowTexture( emptyShadowTexture );
830
856
 
831
857
  } else {
832
858
 
@@ -882,9 +908,21 @@ function setValueT6Array( gl, v, textures ) {
882
908
 
883
909
  }
884
910
 
911
+ let emptyTextureCube;
912
+
913
+ if ( this.type === gl.SAMPLER_CUBE_SHADOW ) {
914
+
915
+ emptyTextureCube = initShadowTexture( emptyCubeShadowTexture );
916
+
917
+ } else {
918
+
919
+ emptyTextureCube = emptyCubeTexture;
920
+
921
+ }
922
+
885
923
  for ( let i = 0; i !== n; ++ i ) {
886
924
 
887
- textures.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );
925
+ textures.setTextureCube( v[ i ] || emptyTextureCube, units[ i ] );
888
926
 
889
927
  }
890
928