@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
@@ -5,9 +5,15 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
5
5
  const geometries = {};
6
6
  const wireframeAttributes = new WeakMap();
7
7
 
8
+ const registry = new FinalizationRegistry( ( id ) => delete geometries[ id ] );
9
+
8
10
  function onGeometryDispose( event ) {
9
11
 
10
- const geometry = event.target;
12
+ destroyGeometry( event.target );
13
+
14
+ }
15
+
16
+ function destroyGeometry( geometry ) {
11
17
 
12
18
  if ( geometry.index !== null ) {
13
19
 
@@ -24,6 +30,7 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
24
30
  geometry.removeEventListener( 'dispose', onGeometryDispose );
25
31
 
26
32
  delete geometries[ geometry.id ];
33
+ registry.unregister( geometry );
27
34
 
28
35
  const attribute = wireframeAttributes.get( geometry );
29
36
 
@@ -50,11 +57,12 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
50
57
 
51
58
  function get( object, geometry ) {
52
59
 
53
- if ( geometries[ geometry.id ] === true ) return geometry;
60
+ if ( geometries[ geometry.id ] !== undefined ) return geometry;
54
61
 
55
62
  geometry.addEventListener( 'dispose', onGeometryDispose );
56
63
 
57
- geometries[ geometry.id ] = true;
64
+ geometries[ geometry.id ] = new WeakRef( geometry );
65
+ registry.register( geometry, geometry.id, geometry );
58
66
 
59
67
  info.memory.geometries ++;
60
68
 
@@ -78,8 +86,6 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
78
86
 
79
87
  function updateWireframeAttribute( geometry ) {
80
88
 
81
- const indices = [];
82
-
83
89
  const geometryIndex = geometry.index;
84
90
  const geometryPosition = geometry.attributes.position;
85
91
  let version = 0;
@@ -90,41 +96,49 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
90
96
 
91
97
  }
92
98
 
99
+ const count = geometryIndex !== null ? geometryIndex.array.length : ( geometryPosition.array.length / 3 ) - 1;
100
+
101
+ // check whether a 32 bit or 16 bit buffer is required to store the indices
102
+ // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565
103
+ const IndexBufferAttribute = geometryPosition.count >= 65535 ? Uint32BufferAttribute : Uint16BufferAttribute;
104
+ const attribute = new IndexBufferAttribute( Math.ceil( count / 3 ) * 6, 1 );
105
+ const indices = attribute.array;
106
+
93
107
  if ( geometryIndex !== null ) {
94
108
 
95
109
  const array = geometryIndex.array;
96
110
  version = geometryIndex.version;
97
111
 
98
- for ( let i = 0, l = array.length; i < l; i += 3 ) {
112
+ for ( let i = 0, j = 0; i < count; i += 3 ) {
99
113
 
100
114
  const a = array[ i + 0 ];
101
115
  const b = array[ i + 1 ];
102
116
  const c = array[ i + 2 ];
103
117
 
104
- indices.push( a, b, b, c, c, a );
118
+ indices[ j ++ ] = a; indices[ j ++ ] = b;
119
+ indices[ j ++ ] = b; indices[ j ++ ] = c;
120
+ indices[ j ++ ] = c; indices[ j ++ ] = a;
105
121
 
106
122
  }
107
123
 
108
124
  } else {
109
125
 
110
- const array = geometryPosition.array;
111
126
  version = geometryPosition.version;
112
127
 
113
- for ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {
128
+ for ( let i = 0, j = 0; i < count; i += 3 ) {
114
129
 
115
130
  const a = i + 0;
116
131
  const b = i + 1;
117
132
  const c = i + 2;
118
133
 
119
- indices.push( a, b, b, c, c, a );
134
+ indices[ j ++ ] = a; indices[ j ++ ] = b;
135
+ indices[ j ++ ] = b; indices[ j ++ ] = c;
136
+ indices[ j ++ ] = c; indices[ j ++ ] = a;
120
137
 
121
138
  }
122
139
 
123
140
  }
124
141
 
125
- // check whether a 32 bit or 16 bit buffer is required to store the indices
126
- // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565
127
- const attribute = new ( geometryPosition.count >= 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );
128
142
  attribute.version = version;
129
143
 
130
144
  // Updating index buffer in VAO now. See WebGLBindingStates
@@ -171,12 +185,26 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
171
185
 
172
186
  }
173
187
 
188
+ function dispose() {
189
+
190
+ for ( const id in geometries ) {
191
+
192
+ const geometry = geometries[ id ].deref();
193
+
194
+ if ( geometry !== undefined ) destroyGeometry( geometry );
195
+
196
+ }
197
+
198
+ }
199
+
174
200
  return {
175
201
 
176
202
  get: get,
177
203
  update: update,
178
204
 
179
- getWireframeAttribute: getWireframeAttribute
205
+ getWireframeAttribute: getWireframeAttribute,
206
+
207
+ dispose: dispose
180
208
 
181
209
  };
182
210
 
@@ -414,6 +414,19 @@ function WebGLMaterials( renderer, properties ) {
414
414
 
415
415
  uniforms.ior.value = material.ior; // also part of uniforms common
416
416
 
417
+ if ( material.diffuseRoughness > 0 ) {
418
+
419
+ uniforms.diffuseRoughness.value = material.diffuseRoughness;
420
+
421
+ if ( material.diffuseRoughnessMap ) {
422
+
423
+ uniforms.diffuseRoughnessMap.value = material.diffuseRoughnessMap;
424
+ refreshTransformUniform( material.diffuseRoughnessMap, uniforms.diffuseRoughnessMapTransform );
425
+
426
+ }
427
+
428
+ }
429
+
417
430
  if ( material.sheen > 0 ) {
418
431
 
419
432
  uniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar( material.sheen );
@@ -493,8 +506,8 @@ function WebGLMaterials( renderer, properties ) {
493
506
 
494
507
  uniforms.iridescence.value = material.iridescence;
495
508
  uniforms.iridescenceIOR.value = material.iridescenceIOR;
496
- uniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessRange[ 0 ];
497
- uniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessRange[ 1 ];
509
+ uniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessMinimum;
510
+ uniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessMaximum;
498
511
 
499
512
  if ( material.iridescenceMap ) {
500
513
 
@@ -8,13 +8,16 @@ import {
8
8
  NeutralToneMapping,
9
9
  CustomToneMapping,
10
10
  SRGBTransfer,
11
- HalfFloatType
11
+ HalfFloatType,
12
+ DepthStencilFormat,
13
+ UnsignedInt248Type
12
14
  } from '../../constants.js';
13
15
  import { BufferGeometry } from '../../core/BufferGeometry.js';
14
16
  import { Float32BufferAttribute } from '../../core/BufferAttribute.js';
15
17
  import { RawShaderMaterial } from '../../materials/RawShaderMaterial.js';
16
18
  import { Mesh } from '../../objects/Mesh.js';
17
19
  import { OrthographicCamera } from '../../cameras/OrthographicCamera.js';
20
+ import { DepthTexture } from '../../textures/DepthTexture.js';
18
21
  import { WebGLRenderTarget } from '../WebGLRenderTarget.js';
19
22
  import { ColorManagement } from '../../math/ColorManagement.js';
20
23
 
@@ -46,6 +49,9 @@ function WebGLOutput( type, width, height, antialias, depth, stencil ) {
46
49
  let targetA = null;
47
50
  let targetB = null;
48
51
 
52
+ // scene depth for effects with needsDepthTexture set to true, allocated on demand
53
+ let depthTexture = null;
54
+
49
55
  // create fullscreen triangle geometry
50
56
  const geometry = new BufferGeometry();
51
57
  geometry.setAttribute( 'position', new Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );
@@ -150,10 +156,40 @@ function WebGLOutput( type, width, height, antialias, depth, stencil ) {
150
156
 
151
157
  }
152
158
 
159
+ // only store and resolve the scene depth if an effect reads it
160
+
161
+ const needsDepthTexture = depth === true && _effects.some( ( effect ) => effect.needsDepthTexture === true );
162
+
163
+ if ( needsDepthTexture !== ( targetScene.depthTexture !== null ) ) {
164
+
165
+ if ( needsDepthTexture === true && depthTexture === null ) {
166
+
167
+ depthTexture = new DepthTexture( width, height );
168
+
169
+ if ( stencil === true ) {
170
+
171
+ depthTexture.format = DepthStencilFormat;
172
+ depthTexture.type = UnsignedInt248Type;
173
+
174
+ }
175
+
176
+ }
177
+
178
+ // release GPU resources so the scene target is rebuilt with the new depth setup
179
+
180
+ targetScene.dispose();
181
+
182
+ targetScene.depthTexture = needsDepthTexture ? depthTexture : null;
183
+ targetScene.resolveDepthBuffer = needsDepthTexture;
184
+ targetScene.storeMultisampledDepthBuffer = needsDepthTexture;
185
+
186
+ }
187
+
153
188
  for ( let i = 0; i < _effects.length; i ++ ) {
154
189
 
155
190
  const effect = _effects[ i ];
156
191
  if ( effect.setSize ) effect.setSize( width, height );
192
+ if ( needsDepthTexture && effect.needsDepthTexture === true && effect.setDepthTexture ) effect.setDepthTexture( depthTexture );
157
193
 
158
194
  }
159
195
 
@@ -1,7 +1,7 @@
1
1
  import { WebGLUniforms } from './WebGLUniforms.js';
2
2
  import { WebGLShader } from './WebGLShader.js';
3
3
  import { ShaderChunk } from '../shaders/ShaderChunk.js';
4
- import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFShadowMap, VSMShadowMap, AgXToneMapping, ACESFilmicToneMapping, NeutralToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearTransfer, SRGBTransfer } from '../../constants.js';
4
+ import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, PCFShadowMap, VSMShadowMap, AgXToneMapping, ACESFilmicToneMapping, NeutralToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearTransfer, SRGBTransfer } from '../../constants.js';
5
5
  import { ColorManagement } from '../../math/ColorManagement.js';
6
6
  import { Vector3 } from '../../math/Vector3.js';
7
7
  import { Matrix3 } from '../../math/Matrix3.js';
@@ -89,7 +89,7 @@ function getTexelEncodingFunction( functionName, colorSpace ) {
89
89
 
90
90
  `vec4 ${functionName}( vec4 value ) {`,
91
91
 
92
- ` return ${components[ 1 ]}( vec4( value.rgb * ${components[ 0 ]}, value.a ) );`,
92
+ ` return ${components[ 1 ]}( vec4( ${components[ 0 ]} * value.rgb, value.a ) );`,
93
93
 
94
94
  '}',
95
95
 
@@ -228,7 +228,8 @@ function replaceLightNums( string, parameters ) {
228
228
  .replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )
229
229
  .replace( /NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps )
230
230
  .replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )
231
- .replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );
231
+ .replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows )
232
+ .replace( /NUM_LIGHT_PROBE_GRIDS/g, parameters.numLightProbeGrids );
232
233
 
233
234
  }
234
235
 
@@ -250,26 +251,13 @@ function resolveIncludes( string ) {
250
251
 
251
252
  }
252
253
 
253
- const shaderChunkMap = new Map();
254
-
255
254
  function includeReplacer( match, include ) {
256
255
 
257
- let string = ShaderChunk[ include ];
256
+ const string = ShaderChunk[ include ];
258
257
 
259
258
  if ( string === undefined ) {
260
259
 
261
- const newInclude = shaderChunkMap.get( include );
262
-
263
- if ( newInclude !== undefined ) {
264
-
265
- string = ShaderChunk[ newInclude ];
266
- warn( 'WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.', include, newInclude );
267
-
268
- } else {
269
-
270
- throw new Error( 'THREE.WebGLProgram: Can not resolve #include <' + include + '>' );
271
-
272
- }
260
+ throw new Error( 'THREE.WebGLProgram: Can not resolve #include <' + include + '>' );
273
261
 
274
262
  }
275
263
 
@@ -355,20 +343,6 @@ function generateShadowMapTypeDefine( parameters ) {
355
343
 
356
344
  }
357
345
 
358
- const envMapTypeDefines = {
359
- [ CubeReflectionMapping ]: 'ENVMAP_TYPE_CUBE',
360
- [ CubeRefractionMapping ]: 'ENVMAP_TYPE_CUBE',
361
- [ CubeUVReflectionMapping ]: 'ENVMAP_TYPE_CUBE_UV'
362
- };
363
-
364
- function generateEnvMapTypeDefine( parameters ) {
365
-
366
- if ( parameters.envMap === false ) return 'ENVMAP_TYPE_CUBE';
367
-
368
- return envMapTypeDefines[ parameters.envMapMode ] || 'ENVMAP_TYPE_CUBE';
369
-
370
- }
371
-
372
346
  const envMapModeDefines = {
373
347
  [ CubeRefractionMapping ]: 'ENVMAP_MODE_REFRACTION'
374
348
  };
@@ -395,22 +369,6 @@ function generateEnvMapBlendingDefine( parameters ) {
395
369
 
396
370
  }
397
371
 
398
- function generateCubeUVSize( parameters ) {
399
-
400
- const imageHeight = parameters.envMapCubeUVHeight;
401
-
402
- if ( imageHeight === null ) return null;
403
-
404
- const maxMip = Math.log2( imageHeight ) - 2;
405
-
406
- const texelHeight = 1.0 / imageHeight;
407
-
408
- const texelWidth = 1.0 / ( 3 * Math.max( Math.pow( 2, maxMip ), 7 * 16 ) );
409
-
410
- return { texelWidth, texelHeight, maxMip };
411
-
412
- }
413
-
414
372
  function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
415
373
 
416
374
  // TODO Send this event to Three.js DevTools
@@ -424,10 +382,9 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
424
382
  let fragmentShader = parameters.fragmentShader;
425
383
 
426
384
  const shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );
427
- const envMapTypeDefine = generateEnvMapTypeDefine( parameters );
385
+ const envMapTypeDefine = parameters.envMapPMREM === true ? 'ENVMAP_TYPE_PMREM' : 'ENVMAP_TYPE_CUBE';
428
386
  const envMapModeDefine = generateEnvMapModeDefine( parameters );
429
387
  const envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );
430
- const envMapCubeUVSize = generateCubeUVSize( parameters );
431
388
 
432
389
  const customVertexExtensions = generateVertexExtensions( parameters );
433
390
 
@@ -509,6 +466,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
509
466
  parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',
510
467
  parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',
511
468
  parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',
469
+ parameters.diffuseRoughnessMap ? '#define USE_DIFFUSE_ROUGHNESSMAP' : '',
512
470
 
513
471
  parameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',
514
472
  parameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',
@@ -548,6 +506,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
548
506
  parameters.clearcoatMapUv ? '#define CLEARCOATMAP_UV ' + parameters.clearcoatMapUv : '',
549
507
  parameters.clearcoatNormalMapUv ? '#define CLEARCOAT_NORMALMAP_UV ' + parameters.clearcoatNormalMapUv : '',
550
508
  parameters.clearcoatRoughnessMapUv ? '#define CLEARCOAT_ROUGHNESSMAP_UV ' + parameters.clearcoatRoughnessMapUv : '',
509
+ parameters.diffuseRoughnessMapUv ? '#define DIFFUSE_ROUGHNESSMAP_UV ' + parameters.diffuseRoughnessMapUv : '',
551
510
 
552
511
  parameters.iridescenceMapUv ? '#define IRIDESCENCEMAP_UV ' + parameters.iridescenceMapUv : '',
553
512
  parameters.iridescenceThicknessMapUv ? '#define IRIDESCENCE_THICKNESSMAP_UV ' + parameters.iridescenceThicknessMapUv : '',
@@ -690,9 +649,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
690
649
  parameters.envMap ? '#define ' + envMapTypeDefine : '',
691
650
  parameters.envMap ? '#define ' + envMapModeDefine : '',
692
651
  parameters.envMap ? '#define ' + envMapBlendingDefine : '',
693
- envMapCubeUVSize ? '#define CUBEUV_TEXEL_WIDTH ' + envMapCubeUVSize.texelWidth : '',
694
- envMapCubeUVSize ? '#define CUBEUV_TEXEL_HEIGHT ' + envMapCubeUVSize.texelHeight : '',
695
- envMapCubeUVSize ? '#define CUBEUV_MAX_MIP ' + envMapCubeUVSize.maxMip + '.0' : '',
652
+ parameters.envMapPMREM ? '#define ENVMAP_MAX_LOD ' + parameters.envMapMaxLod + '.0' : '',
653
+ parameters.envMapPMREM ? '#define ENVMAP_SIZE ' + parameters.envMapSize + '.0' : '',
696
654
  parameters.lightMap ? '#define USE_LIGHTMAP' : '',
697
655
  parameters.aoMap ? '#define USE_AOMAP' : '',
698
656
  parameters.bumpMap ? '#define USE_BUMPMAP' : '',
@@ -710,6 +668,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
710
668
  parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',
711
669
  parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',
712
670
 
671
+ parameters.diffuseRoughness ? '#define USE_DIFFUSE_ROUGHNESS' : '',
672
+ parameters.diffuseRoughnessMap ? '#define USE_DIFFUSE_ROUGHNESSMAP' : '',
713
673
  parameters.dispersion ? '#define USE_DISPERSION' : '',
714
674
  parameters.retroreflection ? '#define USE_RETROREFLECTION' : '',
715
675
 
@@ -759,7 +719,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
759
719
 
760
720
  parameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',
761
721
 
762
- parameters.numLightProbeGrids > 0 ? '#define USE_LIGHT_PROBES_GRID' : '',
763
722
 
764
723
  parameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',
765
724
  parameters.decodeVideoTextureEmissive ? '#define DECODE_VIDEO_TEXTURE_EMISSIVE' : '',
@@ -1,4 +1,4 @@
1
- import { BackSide, DoubleSide, CubeUVReflectionMapping, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping, NormalBlending, SRGBTransfer, RGFormat, RG11_EAC_Format, RED_GREEN_RGTC2_Format } from '../../constants.js';
1
+ import { BackSide, DoubleSide, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping, NormalBlending, SRGBTransfer, RGFormat, RG11_EAC_Format, RED_GREEN_RGTC2_Format } from '../../constants.js';
2
2
  import { Layers } from '../../core/Layers.js';
3
3
  import { WebGLProgram } from './WebGLProgram.js';
4
4
  import { WebGLShaderCache } from './WebGLShaderCache.js';
@@ -23,8 +23,6 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin
23
23
 
24
24
  const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;
25
25
 
26
- let precision = capabilities.precision;
27
-
28
26
  const shaderIDs = {
29
27
  MeshDepthMaterial: 'depth',
30
28
  MeshDistanceMaterial: 'distance',
@@ -61,13 +59,14 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin
61
59
 
62
60
  const usePMREM = material.isMeshStandardMaterial || ( material.isMeshLambertMaterial && ! material.envMap ) || ( material.isMeshPhongMaterial && ! material.envMap );
63
61
  const envMap = environments.get( material.envMap || environment, usePMREM );
64
- const envMapCubeUVHeight = ( !! envMap ) && ( envMap.mapping === CubeUVReflectionMapping ) ? envMap.image.height : null;
65
62
 
66
63
  const shaderID = shaderIDs[ material.type ];
67
64
 
68
65
  // heuristics to create shader parameters according to lights in the scene
69
66
  // (not to blow over maxLights budget)
70
67
 
68
+ let precision = capabilities.precision;
69
+
71
70
  if ( material.precision !== null ) {
72
71
 
73
72
  precision = capabilities.getMaxPrecision( material.precision );
@@ -127,6 +126,7 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin
127
126
  const HAS_MAP = !! material.map;
128
127
  const HAS_MATCAP = !! material.matcap;
129
128
  const HAS_ENVMAP = !! envMap;
129
+ const HAS_PMREM = HAS_ENVMAP && envMap.isPMREMTexture === true;
130
130
  const HAS_AOMAP = !! material.aoMap;
131
131
  const HAS_LIGHTMAP = !! material.lightMap;
132
132
  const HAS_BUMPMAP = !! material.bumpMap && material.wireframe === false;
@@ -139,6 +139,7 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin
139
139
 
140
140
  const HAS_ANISOTROPY = material.anisotropy > 0;
141
141
  const HAS_CLEARCOAT = material.clearcoat > 0;
142
+ const HAS_DIFFUSE_ROUGHNESS = material.diffuseRoughness > 0;
142
143
  const HAS_DISPERSION = material.dispersion > 0;
143
144
  const HAS_RETROREFLECTION = material.retroreflectivity > 0;
144
145
  const HAS_IRIDESCENCE = material.iridescence > 0;
@@ -150,6 +151,7 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin
150
151
  const HAS_CLEARCOATMAP = HAS_CLEARCOAT && !! material.clearcoatMap;
151
152
  const HAS_CLEARCOAT_NORMALMAP = HAS_CLEARCOAT && !! material.clearcoatNormalMap;
152
153
  const HAS_CLEARCOAT_ROUGHNESSMAP = HAS_CLEARCOAT && !! material.clearcoatRoughnessMap;
154
+ const HAS_DIFFUSE_ROUGHNESSMAP = HAS_DIFFUSE_ROUGHNESS && !! material.diffuseRoughnessMap;
153
155
 
154
156
  const HAS_IRIDESCENCEMAP = HAS_IRIDESCENCE && !! material.iridescenceMap;
155
157
  const HAS_IRIDESCENCE_THICKNESSMAP = HAS_IRIDESCENCE && !! material.iridescenceThicknessMap;
@@ -186,6 +188,8 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin
186
188
 
187
189
  }
188
190
 
191
+ const envMapMipmaps = HAS_PMREM ? ( envMap.isCompressedCubeTexture ? envMap.image[ 0 ].mipmaps : envMap.mipmaps ) : null;
192
+
189
193
  const parameters = {
190
194
 
191
195
  shaderID: shaderID,
@@ -217,7 +221,9 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin
217
221
  matcap: HAS_MATCAP,
218
222
  envMap: HAS_ENVMAP,
219
223
  envMapMode: HAS_ENVMAP && envMap.mapping,
220
- envMapCubeUVHeight: envMapCubeUVHeight,
224
+ envMapPMREM: HAS_PMREM,
225
+ envMapMaxLod: HAS_PMREM ? envMapMipmaps.length - 1 : null,
226
+ envMapSize: HAS_PMREM ? envMapMipmaps[ 0 ].width : null,
221
227
  aoMap: HAS_AOMAP,
222
228
  lightMap: HAS_LIGHTMAP,
223
229
  bumpMap: HAS_BUMPMAP,
@@ -240,6 +246,8 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin
240
246
  clearcoatNormalMap: HAS_CLEARCOAT_NORMALMAP,
241
247
  clearcoatRoughnessMap: HAS_CLEARCOAT_ROUGHNESSMAP,
242
248
 
249
+ diffuseRoughness: HAS_DIFFUSE_ROUGHNESS,
250
+ diffuseRoughnessMap: HAS_DIFFUSE_ROUGHNESSMAP,
243
251
  dispersion: HAS_DISPERSION,
244
252
  retroreflection: HAS_RETROREFLECTION,
245
253
 
@@ -287,6 +295,7 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin
287
295
  clearcoatMapUv: HAS_CLEARCOATMAP && getChannel( material.clearcoatMap.channel ),
288
296
  clearcoatNormalMapUv: HAS_CLEARCOAT_NORMALMAP && getChannel( material.clearcoatNormalMap.channel ),
289
297
  clearcoatRoughnessMapUv: HAS_CLEARCOAT_ROUGHNESSMAP && getChannel( material.clearcoatRoughnessMap.channel ),
298
+ diffuseRoughnessMapUv: HAS_DIFFUSE_ROUGHNESSMAP && getChannel( material.diffuseRoughnessMap.channel ),
290
299
 
291
300
  iridescenceMapUv: HAS_IRIDESCENCEMAP && getChannel( material.iridescenceMap.channel ),
292
301
  iridescenceThicknessMapUv: HAS_IRIDESCENCE_THICKNESSMAP && getChannel( material.iridescenceThicknessMap.channel ),
@@ -353,7 +362,7 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin
353
362
 
354
363
  numLightProbes: lights.numLightProbes,
355
364
 
356
- numLightProbeGrids: lightProbeGrids.length,
365
+ numLightProbeGrids: lightProbeGrids.filter( grid => grid.texture !== null ).length,
357
366
 
358
367
  numClippingPlanes: clipping.numPlanes,
359
368
  numClipIntersection: clipping.numIntersection,
@@ -444,7 +453,9 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin
444
453
  array.push( parameters.precision );
445
454
  array.push( parameters.outputColorSpace );
446
455
  array.push( parameters.envMapMode );
447
- array.push( parameters.envMapCubeUVHeight );
456
+ array.push( parameters.envMapPMREM );
457
+ array.push( parameters.envMapMaxLod );
458
+ array.push( parameters.envMapSize );
448
459
  array.push( parameters.mapUv );
449
460
  array.push( parameters.alphaMapUv );
450
461
  array.push( parameters.lightMapUv );
@@ -459,6 +470,7 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin
459
470
  array.push( parameters.clearcoatMapUv );
460
471
  array.push( parameters.clearcoatNormalMapUv );
461
472
  array.push( parameters.clearcoatRoughnessMapUv );
473
+ array.push( parameters.diffuseRoughnessMapUv );
462
474
  array.push( parameters.iridescenceMapUv );
463
475
  array.push( parameters.iridescenceThicknessMapUv );
464
476
  array.push( parameters.sheenColorMapUv );
@@ -472,7 +484,6 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin
472
484
  array.push( parameters.fogExp2 );
473
485
  array.push( parameters.sizeAttenuation );
474
486
  array.push( parameters.morphTargetsCount );
475
- array.push( parameters.morphAttributeCount );
476
487
  array.push( parameters.numSunLights );
477
488
  array.push( parameters.numDirLights );
478
489
  array.push( parameters.numPointLights );
@@ -486,6 +497,7 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin
486
497
  array.push( parameters.numSpotLightShadows );
487
498
  array.push( parameters.numSpotLightShadowsWithMaps );
488
499
  array.push( parameters.numLightProbes );
500
+ array.push( parameters.numLightProbeGrids );
489
501
  array.push( parameters.shadowMapType );
490
502
  array.push( parameters.toneMapping );
491
503
  array.push( parameters.numClippingPlanes );
@@ -540,6 +552,8 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin
540
552
  _programLayers.enable( 19 );
541
553
  if ( parameters.retroreflection )
542
554
  _programLayers.enable( 24 );
555
+ if ( parameters.diffuseRoughness )
556
+ _programLayers.enable( 25 );
543
557
  if ( parameters.batchingColor )
544
558
  _programLayers.enable( 20 );
545
559
  if ( parameters.gradientMap )
@@ -20,19 +20,21 @@ function WebGLRenderState( extensions ) {
20
20
 
21
21
  function pushLight( light ) {
22
22
 
23
- lightsArray.push( light );
23
+ if ( light.isLightProbeGrid ) {
24
24
 
25
- }
25
+ lightProbeGridArray.push( light );
26
26
 
27
- function pushShadow( shadowLight ) {
27
+ } else {
28
28
 
29
- shadowsArray.push( shadowLight );
29
+ lightsArray.push( light );
30
+
31
+ }
30
32
 
31
33
  }
32
34
 
33
- function pushLightProbeGrid( volume ) {
35
+ function pushShadow( shadowLight ) {
34
36
 
35
- lightProbeGridArray.push( volume );
37
+ shadowsArray.push( shadowLight );
36
38
 
37
39
  }
38
40
 
@@ -40,6 +42,8 @@ function WebGLRenderState( extensions ) {
40
42
 
41
43
  lights.setup( lightsArray );
42
44
 
45
+ lightProbeGridArray.sort( ( a, b ) => a.priority - b.priority || a.id - b.id );
46
+
43
47
  }
44
48
 
45
49
  function setupLightsView( camera ) {
@@ -68,8 +72,7 @@ function WebGLRenderState( extensions ) {
68
72
  setupLightsView: setupLightsView,
69
73
 
70
74
  pushLight: pushLight,
71
- pushShadow: pushShadow,
72
- pushLightProbeGrid: pushLightProbeGrid
75
+ pushShadow: pushShadow
73
76
  };
74
77
 
75
78
  }
@@ -290,6 +290,8 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
290
290
 
291
291
  if ( light.isPointLight !== true ) shadow.updateMatrices( light, camera );
292
292
 
293
+ const layers = ( shadow.camera.layers.mask & 0xFFFFFFFE ) !== 0 ? shadow.camera.layers : camera.layers;
294
+
293
295
  for ( let face = 0; face < faceCount; face ++ ) {
294
296
 
295
297
  const shadowCamera = shadow.getCamera( face );
@@ -355,7 +357,7 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
355
357
 
356
358
  _frustum = shadow.getFrustum( face );
357
359
 
358
- renderObject( scene, camera, shadowCamera, light, this.type );
360
+ renderObject( scene, camera, shadowCamera, light, layers, this.type );
359
361
 
360
362
  }
361
363
 
@@ -515,11 +517,11 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
515
517
 
516
518
  }
517
519
 
518
- function renderObject( object, camera, shadowCamera, light, type ) {
520
+ function renderObject( object, camera, shadowCamera, light, layers, type ) {
519
521
 
520
522
  if ( object.visible === false ) return;
521
523
 
522
- const visible = object.layers.test( camera.layers );
524
+ const visible = object.layers.test( layers );
523
525
 
524
526
  if ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {
525
527
 
@@ -573,7 +575,7 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
573
575
 
574
576
  for ( let i = 0, l = children.length; i < l; i ++ ) {
575
577
 
576
- renderObject( children[ i ], camera, shadowCamera, light, type );
578
+ renderObject( children[ i ], camera, shadowCamera, light, layers, type );
577
579
 
578
580
  }
579
581
 
@@ -349,7 +349,7 @@ function WebGLState( gl, extensions ) {
349
349
  const depthBuffer = new DepthBuffer();
350
350
  const stencilBuffer = new StencilBuffer();
351
351
 
352
- const uboBindings = new WeakMap();
352
+ let uboBindings = {};
353
353
  const uboProgramMap = new WeakMap();
354
354
 
355
355
  let enabledCapabilities = {};
@@ -871,6 +871,7 @@ function WebGLState( gl, extensions ) {
871
871
  if ( depthBuffer.getReversed() ) {
872
872
 
873
873
  factor = - factor;
874
+ units = - units;
874
875
 
875
876
  }
876
877
 
@@ -1180,23 +1181,25 @@ function WebGLState( gl, extensions ) {
1180
1181
 
1181
1182
  blockIndex = gl.getUniformBlockIndex( program, uniformsGroup.name );
1182
1183
 
1184
+ // use the block index as the binding point
1185
+ gl.uniformBlockBinding( program, blockIndex, blockIndex );
1186
+
1183
1187
  mapping.set( uniformsGroup, blockIndex );
1184
1188
 
1185
1189
  }
1186
1190
 
1187
1191
  }
1188
1192
 
1189
- function uniformBlockBinding( uniformsGroup, program ) {
1193
+ function uniformBlockBinding( uniformsGroup, program, buffer ) {
1190
1194
 
1191
1195
  const mapping = uboProgramMap.get( program );
1192
1196
  const blockIndex = mapping.get( uniformsGroup );
1193
1197
 
1194
- if ( uboBindings.get( program ) !== blockIndex ) {
1198
+ if ( uboBindings[ blockIndex ] !== buffer ) {
1195
1199
 
1196
- // bind shader specific block index to global block point
1197
- gl.uniformBlockBinding( program, blockIndex, uniformsGroup.__bindingPointIndex );
1200
+ gl.bindBufferBase( gl.UNIFORM_BUFFER, blockIndex, buffer );
1198
1201
 
1199
- uboBindings.set( program, blockIndex );
1202
+ uboBindings[ blockIndex ] = buffer;
1200
1203
 
1201
1204
  }
1202
1205
 
@@ -1277,6 +1280,7 @@ function WebGLState( gl, extensions ) {
1277
1280
  currentBoundTextures = {};
1278
1281
 
1279
1282
  currentBoundFramebuffers = {};
1283
+ uboBindings = {};
1280
1284
  currentDrawbuffers = new WeakMap();
1281
1285
  defaultDrawbuffers = [];
1282
1286