super-three 0.181.0 → 0.185.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +21332 -19201
- package/build/three.core.js +20908 -19853
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1947 -862
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +37 -16
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +33628 -25197
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +33394 -25000
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +14 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +13 -6
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +127 -86
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +102 -17
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMFrustum.js +31 -6
- package/examples/jsm/csm/CSMShadowNode.js +10 -3
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +14 -1
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +27 -6
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +266 -21
- package/examples/jsm/exporters/PLYExporter.js +286 -73
- package/examples/jsm/exporters/USDZExporter.js +353 -99
- package/examples/jsm/generators/CityGenerator.js +346 -0
- package/examples/jsm/generators/ForestGenerator.js +347 -0
- package/examples/jsm/generators/TerrainGenerator.js +504 -0
- package/examples/jsm/generators/TreeGenerator.js +377 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
- package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/LoftGeometry.js +355 -0
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelper.js +5 -4
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +83 -14
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +244 -91
- package/examples/jsm/inspector/RendererInspector.js +165 -39
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +241 -25
- package/examples/jsm/inspector/tabs/Memory.js +136 -0
- package/examples/jsm/inspector/tabs/Parameters.js +115 -7
- package/examples/jsm/inspector/tabs/Performance.js +24 -9
- package/examples/jsm/inspector/tabs/Settings.js +306 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
- package/examples/jsm/inspector/tabs/Viewer.js +723 -9
- package/examples/jsm/inspector/ui/Graph.js +162 -25
- package/examples/jsm/inspector/ui/Item.js +92 -13
- package/examples/jsm/inspector/ui/List.js +2 -2
- package/examples/jsm/inspector/ui/Profiler.js +1991 -44
- package/examples/jsm/inspector/ui/Style.js +1943 -543
- package/examples/jsm/inspector/ui/Tab.js +226 -5
- package/examples/jsm/inspector/ui/Values.js +126 -8
- package/examples/jsm/inspector/ui/utils.js +143 -10
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/basis/README.md +0 -1
- package/examples/jsm/libs/demuxer_mp4.js +3 -3
- package/examples/jsm/libs/draco/README.md +0 -1
- package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
- package/examples/jsm/libs/mikktspace.module.js +34 -9
- package/examples/jsm/lighting/ClusteredLighting.js +55 -0
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +681 -0
- package/examples/jsm/lines/LineMaterial.js +45 -16
- package/examples/jsm/lines/LineSegments2.js +8 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
- package/examples/jsm/loaders/3DMLoader.js +6 -5
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +51 -18
- package/examples/jsm/loaders/EXRLoader.js +701 -90
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +7 -30
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +58 -17
- package/examples/jsm/loaders/LDrawLoader.js +49 -58
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +11 -39
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MaterialXLoader.js +31 -9
- package/examples/jsm/loaders/NRRDLoader.js +5 -5
- package/examples/jsm/loaders/PCDLoader.js +11 -9
- package/examples/jsm/loaders/PLYLoader.js +218 -55
- package/examples/jsm/loaders/SVGLoader.js +549 -497
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDLoader.js +127 -43
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +80 -3
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +504 -344
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
- package/examples/jsm/misc/Volume.js +2 -3
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/GroundedSkybox.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +72 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/Water2Mesh.js +1 -1
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +27 -15
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +36 -7
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/shaders/VolumeShader.js +31 -44
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
- package/examples/jsm/transpiler/Linker.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +75 -25
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +13 -14
- package/examples/jsm/tsl/display/GTAONode.js +40 -17
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
- package/examples/jsm/tsl/display/SSGINode.js +96 -62
- package/examples/jsm/tsl/display/SSRNode.js +831 -134
- package/examples/jsm/tsl/display/SSSNode.js +8 -6
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/tsl/math/curlNoise.js +107 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
- package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
- package/examples/jsm/tsl/utils/RNoise.js +51 -0
- package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/SceneOptimizer.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/ARButton.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +28 -34
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +35 -14
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +13 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +18 -4
- package/src/animation/AnimationClip.js +0 -139
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyBinding.js +2 -2
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +34 -4
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/StereoCamera.js +5 -2
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +43 -9
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +69 -11
- package/src/core/Raycaster.js +3 -3
- package/src/core/RenderTarget.js +19 -6
- package/src/extras/PMREMGenerator.js +13 -22
- package/src/extras/TextureUtils.js +6 -2
- package/src/extras/core/ShapePath.js +149 -160
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/SphereGeometry.js +8 -3
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +6 -1
- package/src/helpers/HemisphereLightHelper.js +5 -0
- package/src/helpers/PointLightHelper.js +3 -25
- package/src/helpers/SpotLightHelper.js +4 -1
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +75 -42
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/LoadingManager.js +5 -0
- package/src/loaders/MaterialLoader.js +37 -266
- package/src/loaders/ObjectLoader.js +48 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +198 -1
- package/src/materials/MeshBasicMaterial.js +24 -0
- package/src/materials/MeshDepthMaterial.js +10 -0
- package/src/materials/MeshDistanceMaterial.js +10 -0
- package/src/materials/MeshLambertMaterial.js +49 -1
- package/src/materials/MeshMatcapMaterial.js +25 -1
- package/src/materials/MeshNormalMaterial.js +9 -1
- package/src/materials/MeshPhongMaterial.js +49 -1
- package/src/materials/MeshPhysicalMaterial.js +38 -0
- package/src/materials/MeshStandardMaterial.js +42 -1
- package/src/materials/MeshToonMaterial.js +35 -2
- package/src/materials/PointsMaterial.js +7 -0
- package/src/materials/ShaderMaterial.js +106 -1
- package/src/materials/SpriteMaterial.js +7 -0
- package/src/materials/nodes/Line2NodeMaterial.js +380 -297
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
- package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
- package/src/materials/nodes/NodeMaterial.js +153 -89
- package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
- package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
- package/src/math/Box3.js +5 -0
- package/src/math/FrustumArray.js +103 -133
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +12 -12
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +24 -9
- package/src/math/Matrix4.js +112 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +13 -9
- package/src/math/Vector3.js +17 -15
- package/src/math/Vector4.js +15 -11
- package/src/math/interpolants/BezierInterpolant.js +106 -0
- package/src/nodes/Nodes.js +86 -71
- package/src/nodes/TSL.js +15 -13
- package/src/nodes/accessors/Arrays.js +5 -5
- package/src/nodes/accessors/Batch.js +108 -0
- package/src/nodes/accessors/Bitangent.js +7 -7
- package/src/nodes/accessors/BufferAttributeNode.js +120 -17
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +5 -5
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/Instance.js +264 -0
- package/src/nodes/accessors/MaterialNode.js +27 -3
- package/src/nodes/accessors/MaterialProperties.js +6 -8
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
- package/src/nodes/accessors/Normal.js +24 -24
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +39 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +9 -8
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/Skinning.js +263 -0
- package/src/nodes/accessors/StorageBufferNode.js +16 -27
- package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
- package/src/nodes/accessors/StorageTextureNode.js +74 -11
- package/src/nodes/accessors/Tangent.js +8 -18
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +124 -25
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +4 -19
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +55 -4
- package/src/nodes/core/Node.js +151 -17
- package/src/nodes/core/NodeBuilder.js +479 -101
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +20 -18
- package/src/nodes/core/OutputStructNode.js +13 -11
- package/src/nodes/core/OverrideContextNode.js +153 -0
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +66 -4
- package/src/nodes/core/StackNode.js +91 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +20 -8
- package/src/nodes/core/StructTypeNode.js +17 -23
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +56 -23
- package/src/nodes/core/VaryingNode.js +14 -21
- package/src/nodes/display/BlendModes.js +1 -105
- package/src/nodes/display/BumpMapNode.js +6 -1
- package/src/nodes/display/ColorAdjustment.js +27 -9
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +38 -9
- package/src/nodes/display/NormalMapNode.js +41 -6
- package/src/nodes/display/PassNode.js +157 -56
- package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
- package/src/nodes/display/RenderOutputNode.js +19 -10
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/functions/VolumetricLightingModel.js +40 -7
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +30 -5
- package/src/nodes/lighting/IESSpotLightNode.js +40 -2
- package/src/nodes/lighting/LightingContextNode.js +10 -2
- package/src/nodes/lighting/LightsNode.js +97 -65
- package/src/nodes/lighting/PointShadowNode.js +166 -148
- package/src/nodes/lighting/ShadowFilterNode.js +74 -117
- package/src/nodes/lighting/ShadowNode.js +149 -51
- package/src/nodes/materialx/lib/mx_noise.js +2 -2
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +6 -6
- package/src/nodes/math/MathNode.js +115 -52
- package/src/nodes/math/OperatorNode.js +24 -23
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +34 -3
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +99 -33
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EquirectUV.js +30 -5
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +48 -5
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +41 -25
- package/src/nodes/utils/ReflectorNode.js +4 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +66 -30
- package/src/objects/InstancedMesh.js +19 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +344 -156
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +78 -13
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +141 -57
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ClippingContext.js +10 -2
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +374 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +51 -19
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +41 -4
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +88 -16
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +700 -163
- package/src/renderers/common/Sampler.js +16 -48
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +121 -9
- package/src/renderers/common/TimestampQueryPool.js +6 -4
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +84 -1
- package/src/renderers/common/XRManager.js +377 -51
- package/src/renderers/common/extras/PMREMGenerator.js +40 -61
- package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/src/renderers/common/nodes/NodeLibrary.js +4 -4
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +3 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +271 -0
- package/src/renderers/webgl/WebGLProgram.js +54 -113
- package/src/renderers/webgl/WebGLPrograms.js +74 -55
- package/src/renderers/webgl/WebGLRenderLists.js +24 -1
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShaderCache.js +5 -11
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +230 -56
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
- package/src/renderers/webgpu/WebGPUBackend.js +733 -302
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
- package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
- package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
- package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
- package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
- package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
- package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
- package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
- package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
- package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
- package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
- package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
- package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/DepthTexture.js +1 -1
- package/src/textures/ExternalTexture.js +0 -3
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/fonts/LICENSE +0 -13
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
- package/examples/fonts/README.md +0 -11
- package/examples/fonts/droid/NOTICE +0 -190
- package/examples/fonts/droid/README.txt +0 -18
- package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
- package/examples/fonts/gentilis_bold.typeface.json +0 -1
- package/examples/fonts/gentilis_regular.typeface.json +0 -1
- package/examples/fonts/helvetiker_bold.typeface.json +0 -1
- package/examples/fonts/helvetiker_regular.typeface.json +0 -1
- package/examples/fonts/optimer_bold.typeface.json +0 -1
- package/examples/fonts/optimer_regular.typeface.json +0 -1
- package/examples/fonts/ttf/README.md +0 -9
- package/examples/fonts/ttf/kenpixel.ttf +0 -0
- package/examples/jsm/libs/ammo.wasm.js +0 -822
- package/examples/jsm/libs/ammo.wasm.wasm +0 -0
- package/examples/jsm/libs/draco/draco_encoder.js +0 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
- package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
- package/examples/jsm/libs/opentype.module.js +0 -14506
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lighting/TiledLighting.js +0 -42
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
- package/src/nodes/accessors/BatchNode.js +0 -163
- package/src/nodes/accessors/InstanceNode.js +0 -244
- package/src/nodes/accessors/InstancedMeshNode.js +0 -50
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/accessors/SkinningNode.js +0 -327
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -11,8 +11,8 @@ import WebGLCapabilities from './utils/WebGLCapabilities.js';
|
|
|
11
11
|
import { GLFeatureName } from './utils/WebGLConstants.js';
|
|
12
12
|
import { WebGLBufferRenderer } from './WebGLBufferRenderer.js';
|
|
13
13
|
|
|
14
|
-
import { warnOnce, warn, error } from '../../utils.js';
|
|
15
|
-
import { WebGLCoordinateSystem, TimestampQuery } from '../../constants.js';
|
|
14
|
+
import { isTypedArray, warnOnce, warn, error } from '../../utils.js';
|
|
15
|
+
import { WebGLCoordinateSystem, TimestampQuery, Compatibility } from '../../constants.js';
|
|
16
16
|
import WebGLTimestampQueryPool from './utils/WebGLTimestampQueryPool.js';
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -28,6 +28,7 @@ class WebGLBackend extends Backend {
|
|
|
28
28
|
*
|
|
29
29
|
* @typedef {Object} WebGLBackend~Options
|
|
30
30
|
* @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
31
|
+
* @property {boolean} [reversedDepthBuffer=false] - Whether reversed depth buffer is enabled or not.
|
|
31
32
|
* @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
32
33
|
* @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
33
34
|
* @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
@@ -184,7 +185,6 @@ class WebGLBackend extends Backend {
|
|
|
184
185
|
*/
|
|
185
186
|
this._knownBindings = new WeakSet();
|
|
186
187
|
|
|
187
|
-
|
|
188
188
|
/**
|
|
189
189
|
* Whether the device supports framebuffers invalidation or not.
|
|
190
190
|
*
|
|
@@ -265,9 +265,33 @@ class WebGLBackend extends Backend {
|
|
|
265
265
|
this.extensions.get( 'WEBGL_render_shared_exponent' );
|
|
266
266
|
this.extensions.get( 'WEBGL_multi_draw' );
|
|
267
267
|
this.extensions.get( 'OVR_multiview2' );
|
|
268
|
+
this.extensions.get( 'EXT_clip_control' );
|
|
268
269
|
|
|
269
270
|
this.disjoint = this.extensions.get( 'EXT_disjoint_timer_query_webgl2' );
|
|
270
271
|
this.parallel = this.extensions.get( 'KHR_parallel_shader_compile' );
|
|
272
|
+
this.drawBuffersIndexedExt = this.extensions.get( 'OES_draw_buffers_indexed' );
|
|
273
|
+
|
|
274
|
+
if ( parameters.reversedDepthBuffer ) {
|
|
275
|
+
|
|
276
|
+
if ( this.extensions.has( 'EXT_clip_control' ) ) {
|
|
277
|
+
|
|
278
|
+
renderer.reversedDepthBuffer = true;
|
|
279
|
+
|
|
280
|
+
} else {
|
|
281
|
+
|
|
282
|
+
warn( 'WebGPURenderer: Unable to use reversed depth buffer due to missing EXT_clip_control extension. Fallback to default depth buffer.' );
|
|
283
|
+
|
|
284
|
+
renderer.reversedDepthBuffer = false;
|
|
285
|
+
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
if ( renderer.reversedDepthBuffer ) {
|
|
291
|
+
|
|
292
|
+
this.state.setReversedDepth( true );
|
|
293
|
+
|
|
294
|
+
}
|
|
271
295
|
|
|
272
296
|
}
|
|
273
297
|
|
|
@@ -283,17 +307,34 @@ class WebGLBackend extends Backend {
|
|
|
283
307
|
|
|
284
308
|
}
|
|
285
309
|
|
|
310
|
+
/**
|
|
311
|
+
* Whether the backend supports query timestamps or not.
|
|
312
|
+
*
|
|
313
|
+
* @type {boolean}
|
|
314
|
+
* @readonly
|
|
315
|
+
*/
|
|
316
|
+
get hasTimestamp() {
|
|
317
|
+
|
|
318
|
+
return this.disjoint !== null;
|
|
319
|
+
|
|
320
|
+
}
|
|
321
|
+
|
|
286
322
|
/**
|
|
287
323
|
* This method performs a readback operation by moving buffer data from
|
|
288
|
-
* a storage buffer attribute from the GPU to the CPU.
|
|
324
|
+
* a storage buffer attribute from the GPU to the CPU. ReadbackBuffer can
|
|
325
|
+
* be used to retain and reuse handles to the intermediate buffers and prevent
|
|
326
|
+
* new allocation.
|
|
289
327
|
*
|
|
290
328
|
* @async
|
|
291
|
-
* @param {
|
|
292
|
-
* @
|
|
329
|
+
* @param {BufferAttribute} attribute - The storage buffer attribute to read frm.
|
|
330
|
+
* @param {ReadbackBuffer|ArrayBuffer} target - The storage buffer attribute.
|
|
331
|
+
* @param {number} offset - The storage buffer attribute.
|
|
332
|
+
* @param {number} count - The offset from which to start reading the
|
|
333
|
+
* @return {Promise<ArrayBuffer|ReadbackBuffer>} A promise that resolves with the buffer data when the data are ready.
|
|
293
334
|
*/
|
|
294
|
-
async getArrayBufferAsync( attribute ) {
|
|
335
|
+
async getArrayBufferAsync( attribute, target = null, offset = 0, count = - 1 ) {
|
|
295
336
|
|
|
296
|
-
return await this.attributeUtils.getArrayBufferAsync( attribute );
|
|
337
|
+
return await this.attributeUtils.getArrayBufferAsync( attribute, target, offset, count );
|
|
297
338
|
|
|
298
339
|
}
|
|
299
340
|
|
|
@@ -445,9 +486,12 @@ class WebGLBackend extends Backend {
|
|
|
445
486
|
|
|
446
487
|
if ( renderContext.scissor ) {
|
|
447
488
|
|
|
448
|
-
|
|
489
|
+
this.updateScissor( renderContext );
|
|
490
|
+
|
|
491
|
+
} else {
|
|
449
492
|
|
|
450
|
-
|
|
493
|
+
const { width, height } = this.getDrawingBufferSize();
|
|
494
|
+
state.scissor( 0, 0, width, height );
|
|
451
495
|
|
|
452
496
|
}
|
|
453
497
|
|
|
@@ -544,6 +588,17 @@ class WebGLBackend extends Backend {
|
|
|
544
588
|
|
|
545
589
|
}
|
|
546
590
|
|
|
591
|
+
if ( previousContext.scissor ) {
|
|
592
|
+
|
|
593
|
+
this.updateScissor( previousContext );
|
|
594
|
+
|
|
595
|
+
} else {
|
|
596
|
+
|
|
597
|
+
const { width, height } = this.getDrawingBufferSize();
|
|
598
|
+
state.scissor( 0, 0, width, height );
|
|
599
|
+
|
|
600
|
+
}
|
|
601
|
+
|
|
547
602
|
}
|
|
548
603
|
|
|
549
604
|
this.prepareTimestampBuffer( TimestampQuery.RENDER, this.getTimestampUID( renderContext ) );
|
|
@@ -645,6 +700,20 @@ class WebGLBackend extends Backend {
|
|
|
645
700
|
|
|
646
701
|
}
|
|
647
702
|
|
|
703
|
+
/**
|
|
704
|
+
* Updates the scissor with the values from the given render context.
|
|
705
|
+
*
|
|
706
|
+
* @param {RenderContext} renderContext - The render context.
|
|
707
|
+
*/
|
|
708
|
+
updateScissor( renderContext ) {
|
|
709
|
+
|
|
710
|
+
const { state } = this;
|
|
711
|
+
const { x, y, width, height } = renderContext.scissorValue;
|
|
712
|
+
|
|
713
|
+
state.scissor( x, renderContext.height - height - y, width, height );
|
|
714
|
+
|
|
715
|
+
}
|
|
716
|
+
|
|
648
717
|
/**
|
|
649
718
|
* Defines the scissor test.
|
|
650
719
|
*
|
|
@@ -775,6 +844,14 @@ class WebGLBackend extends Backend {
|
|
|
775
844
|
|
|
776
845
|
if ( setFrameBuffer && resolveRenderTarget ) this._resolveRenderTarget( descriptor );
|
|
777
846
|
|
|
847
|
+
// Restore the framebuffer of the active render pass when clearing an unrelated
|
|
848
|
+
// render target, so subsequent draws in the pass don't bind to the cleared target.
|
|
849
|
+
if ( setFrameBuffer && this._currentContext !== null && this._currentContext !== descriptor ) {
|
|
850
|
+
|
|
851
|
+
this._setFramebuffer( this._currentContext );
|
|
852
|
+
|
|
853
|
+
}
|
|
854
|
+
|
|
778
855
|
}
|
|
779
856
|
|
|
780
857
|
}
|
|
@@ -814,7 +891,7 @@ class WebGLBackend extends Backend {
|
|
|
814
891
|
if ( this.discard === false ) {
|
|
815
892
|
|
|
816
893
|
// required here to handle async behaviour of render.compute()
|
|
817
|
-
|
|
894
|
+
state.enable( gl.RASTERIZER_DISCARD );
|
|
818
895
|
this.discard = true;
|
|
819
896
|
|
|
820
897
|
}
|
|
@@ -900,11 +977,11 @@ class WebGLBackend extends Backend {
|
|
|
900
977
|
*/
|
|
901
978
|
finishCompute( computeGroup ) {
|
|
902
979
|
|
|
903
|
-
const gl = this
|
|
980
|
+
const { state, gl } = this;
|
|
904
981
|
|
|
905
982
|
this.discard = false;
|
|
906
983
|
|
|
907
|
-
|
|
984
|
+
state.disable( gl.RASTERIZER_DISCARD );
|
|
908
985
|
|
|
909
986
|
this.prepareTimestampBuffer( TimestampQuery.COMPUTE, this.getTimestampUID( computeGroup ) );
|
|
910
987
|
|
|
@@ -930,6 +1007,56 @@ class WebGLBackend extends Backend {
|
|
|
930
1007
|
|
|
931
1008
|
}
|
|
932
1009
|
|
|
1010
|
+
/**
|
|
1011
|
+
* Internal draw function.
|
|
1012
|
+
*
|
|
1013
|
+
* @private
|
|
1014
|
+
* @param {Object3D} object - The object to render.
|
|
1015
|
+
* @param {WebGLBufferRenderer} renderer - The internal renderer.
|
|
1016
|
+
* @param {number} firstVertex - The first vertex to render.
|
|
1017
|
+
* @param {number} vertexCount - The vertex count.
|
|
1018
|
+
* @param {number} instanceCount - The intance count.
|
|
1019
|
+
* @param {WebGLProgram} programGPU - The raw WebGL shader program.
|
|
1020
|
+
*/
|
|
1021
|
+
_draw( object, renderer, firstVertex, vertexCount, instanceCount, programGPU ) {
|
|
1022
|
+
|
|
1023
|
+
if ( object.isBatchedMesh ) {
|
|
1024
|
+
|
|
1025
|
+
if ( this.hasFeature( 'WEBGL_multi_draw' ) === false ) {
|
|
1026
|
+
|
|
1027
|
+
const { gl } = this;
|
|
1028
|
+
|
|
1029
|
+
const drawIdLocation = gl.getUniformLocation( programGPU, 'nodeUniformDrawId' );
|
|
1030
|
+
|
|
1031
|
+
const starts = object._multiDrawStarts;
|
|
1032
|
+
const counts = object._multiDrawCounts;
|
|
1033
|
+
const drawCount = object._multiDrawCount;
|
|
1034
|
+
|
|
1035
|
+
for ( let i = 0; i < drawCount; i ++ ) {
|
|
1036
|
+
|
|
1037
|
+
gl.uniform1ui( drawIdLocation, i );
|
|
1038
|
+
renderer.render( starts[ i ], counts[ i ] );
|
|
1039
|
+
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
} else {
|
|
1043
|
+
|
|
1044
|
+
renderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );
|
|
1045
|
+
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
} else if ( instanceCount > 1 ) {
|
|
1049
|
+
|
|
1050
|
+
renderer.renderInstances( firstVertex, vertexCount, instanceCount );
|
|
1051
|
+
|
|
1052
|
+
} else {
|
|
1053
|
+
|
|
1054
|
+
renderer.render( firstVertex, vertexCount );
|
|
1055
|
+
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
}
|
|
1059
|
+
|
|
933
1060
|
/**
|
|
934
1061
|
* Executes a draw command for the given render object.
|
|
935
1062
|
*
|
|
@@ -953,10 +1080,16 @@ class WebGLBackend extends Backend {
|
|
|
953
1080
|
|
|
954
1081
|
this._bindUniforms( renderObject.getBindings() );
|
|
955
1082
|
|
|
956
|
-
const frontFaceCW = ( object.isMesh && object.matrixWorld.
|
|
1083
|
+
const frontFaceCW = ( object.isMesh && object.matrixWorld.determinantAffine() < 0 );
|
|
957
1084
|
|
|
958
1085
|
state.setMaterial( material, frontFaceCW, hardwareClippingPlanes );
|
|
959
1086
|
|
|
1087
|
+
if ( context.mrt !== null && context.textures !== null ) {
|
|
1088
|
+
|
|
1089
|
+
state.setMRTBlending( context.textures, context.mrt, material );
|
|
1090
|
+
|
|
1091
|
+
}
|
|
1092
|
+
|
|
960
1093
|
state.useProgram( programGPU );
|
|
961
1094
|
|
|
962
1095
|
// vertex state
|
|
@@ -1061,38 +1194,6 @@ class WebGLBackend extends Backend {
|
|
|
1061
1194
|
|
|
1062
1195
|
}
|
|
1063
1196
|
|
|
1064
|
-
const draw = () => {
|
|
1065
|
-
|
|
1066
|
-
if ( object.isBatchedMesh ) {
|
|
1067
|
-
|
|
1068
|
-
if ( object._multiDrawInstances !== null ) {
|
|
1069
|
-
|
|
1070
|
-
// @deprecated, r174
|
|
1071
|
-
warnOnce( 'WebGLBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
|
|
1072
|
-
renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
|
|
1073
|
-
|
|
1074
|
-
} else if ( ! this.hasFeature( 'WEBGL_multi_draw' ) ) {
|
|
1075
|
-
|
|
1076
|
-
warnOnce( 'WebGLBackend: WEBGL_multi_draw not supported.' );
|
|
1077
|
-
|
|
1078
|
-
} else {
|
|
1079
|
-
|
|
1080
|
-
renderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );
|
|
1081
|
-
|
|
1082
|
-
}
|
|
1083
|
-
|
|
1084
|
-
} else if ( instanceCount > 1 ) {
|
|
1085
|
-
|
|
1086
|
-
renderer.renderInstances( firstVertex, vertexCount, instanceCount );
|
|
1087
|
-
|
|
1088
|
-
} else {
|
|
1089
|
-
|
|
1090
|
-
renderer.render( firstVertex, vertexCount );
|
|
1091
|
-
|
|
1092
|
-
}
|
|
1093
|
-
|
|
1094
|
-
};
|
|
1095
|
-
|
|
1096
1197
|
if ( renderObject.camera.isArrayCamera === true && renderObject.camera.cameras.length > 0 && renderObject.camera.isMultiViewCamera === false ) {
|
|
1097
1198
|
|
|
1098
1199
|
const cameraData = this.get( renderObject.camera );
|
|
@@ -1121,7 +1222,20 @@ class WebGLBackend extends Backend {
|
|
|
1121
1222
|
|
|
1122
1223
|
}
|
|
1123
1224
|
|
|
1124
|
-
|
|
1225
|
+
let cameraIndexBufferIndex = 0;
|
|
1226
|
+
|
|
1227
|
+
bindingsSearch: for ( const bindGroup of renderObject.getBindings() ) {
|
|
1228
|
+
|
|
1229
|
+
for ( const binding of bindGroup.bindings ) {
|
|
1230
|
+
|
|
1231
|
+
if ( binding === cameraIndex ) break bindingsSearch;
|
|
1232
|
+
|
|
1233
|
+
if ( binding.isUniformsGroup || binding.isUniformBuffer ) cameraIndexBufferIndex ++;
|
|
1234
|
+
|
|
1235
|
+
}
|
|
1236
|
+
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1125
1239
|
const pixelRatio = this.renderer.getPixelRatio();
|
|
1126
1240
|
|
|
1127
1241
|
const renderTarget = this._currentContext.renderTarget;
|
|
@@ -1190,9 +1304,9 @@ class WebGLBackend extends Backend {
|
|
|
1190
1304
|
|
|
1191
1305
|
}
|
|
1192
1306
|
|
|
1193
|
-
state.bindBufferBase( gl.UNIFORM_BUFFER,
|
|
1307
|
+
state.bindBufferBase( gl.UNIFORM_BUFFER, cameraIndexBufferIndex, cameraData.indexesGPU[ i ] );
|
|
1194
1308
|
|
|
1195
|
-
|
|
1309
|
+
this._draw( object, renderer, firstVertex, vertexCount, instanceCount, programGPU );
|
|
1196
1310
|
|
|
1197
1311
|
}
|
|
1198
1312
|
|
|
@@ -1203,7 +1317,7 @@ class WebGLBackend extends Backend {
|
|
|
1203
1317
|
|
|
1204
1318
|
} else {
|
|
1205
1319
|
|
|
1206
|
-
|
|
1320
|
+
this._draw( object, renderer, firstVertex, vertexCount, instanceCount, programGPU );
|
|
1207
1321
|
|
|
1208
1322
|
}
|
|
1209
1323
|
|
|
@@ -1315,10 +1429,10 @@ class WebGLBackend extends Backend {
|
|
|
1315
1429
|
/**
|
|
1316
1430
|
* This method does nothing since WebGL 2 has no concept of samplers.
|
|
1317
1431
|
*
|
|
1318
|
-
* @param {
|
|
1432
|
+
* @param {Sampler} binding - The sampler binding to update.
|
|
1319
1433
|
* @return {string} The current sampler key.
|
|
1320
1434
|
*/
|
|
1321
|
-
updateSampler( /*
|
|
1435
|
+
updateSampler( /*binding*/ ) {
|
|
1322
1436
|
|
|
1323
1437
|
return '';
|
|
1324
1438
|
|
|
@@ -1527,7 +1641,7 @@ class WebGLBackend extends Backend {
|
|
|
1527
1641
|
const fragmentErrors = this._getShaderErrors( gl, glFragmentShader, 'fragment' );
|
|
1528
1642
|
|
|
1529
1643
|
error(
|
|
1530
|
-
'
|
|
1644
|
+
'WebGLProgram: Shader Error ' + gl.getError() + ' - ' +
|
|
1531
1645
|
'VALIDATE_STATUS ' + gl.getProgramParameter( programGPU, gl.VALIDATE_STATUS ) + '\n\n' +
|
|
1532
1646
|
'Program Info Log: ' + programLog + '\n' +
|
|
1533
1647
|
vertexErrors + '\n' +
|
|
@@ -1576,7 +1690,8 @@ class WebGLBackend extends Backend {
|
|
|
1576
1690
|
//
|
|
1577
1691
|
|
|
1578
1692
|
this.set( pipeline, {
|
|
1579
|
-
programGPU
|
|
1693
|
+
programGPU,
|
|
1694
|
+
pipeline: programGPU
|
|
1580
1695
|
} );
|
|
1581
1696
|
|
|
1582
1697
|
}
|
|
@@ -1732,41 +1847,46 @@ class WebGLBackend extends Backend {
|
|
|
1732
1847
|
|
|
1733
1848
|
const { gl } = this;
|
|
1734
1849
|
|
|
1735
|
-
const bindGroupData = this.get( bindGroup );
|
|
1736
|
-
|
|
1737
|
-
let i = bindGroupData.uniformBuffers;
|
|
1738
|
-
let t = bindGroupData.textures;
|
|
1739
|
-
|
|
1740
1850
|
for ( const binding of bindGroup.bindings ) {
|
|
1741
1851
|
|
|
1742
1852
|
const map = this.get( binding );
|
|
1743
1853
|
|
|
1744
1854
|
if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
|
|
1745
1855
|
|
|
1746
|
-
const
|
|
1747
|
-
|
|
1856
|
+
const array = binding.buffer;
|
|
1857
|
+
const bufferGPU = map.bufferGPU;
|
|
1748
1858
|
|
|
1749
|
-
|
|
1859
|
+
gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
|
|
1750
1860
|
|
|
1751
|
-
|
|
1861
|
+
// update
|
|
1752
1862
|
|
|
1753
|
-
|
|
1754
|
-
gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
|
|
1755
|
-
gl.bufferData( gl.UNIFORM_BUFFER, data, gl.DYNAMIC_DRAW );
|
|
1863
|
+
const updateRanges = binding.updateRanges;
|
|
1756
1864
|
|
|
1757
|
-
|
|
1865
|
+
gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
|
|
1866
|
+
|
|
1867
|
+
if ( updateRanges.length === 0 ) {
|
|
1868
|
+
|
|
1869
|
+
gl.bufferData( gl.UNIFORM_BUFFER, array, gl.DYNAMIC_DRAW );
|
|
1758
1870
|
|
|
1759
1871
|
} else {
|
|
1760
1872
|
|
|
1761
|
-
|
|
1873
|
+
const isTyped = isTypedArray( array );
|
|
1874
|
+
const byteOffsetFactor = isTyped ? 1 : array.BYTES_PER_ELEMENT;
|
|
1762
1875
|
|
|
1763
|
-
|
|
1764
|
-
gl.bufferSubData( gl.UNIFORM_BUFFER, 0, data );
|
|
1876
|
+
for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
|
|
1765
1877
|
|
|
1766
|
-
|
|
1878
|
+
const range = updateRanges[ i ];
|
|
1767
1879
|
|
|
1768
|
-
|
|
1769
|
-
|
|
1880
|
+
const dataOffset = range.start * byteOffsetFactor;
|
|
1881
|
+
const size = range.count * byteOffsetFactor;
|
|
1882
|
+
|
|
1883
|
+
const bufferOffset = dataOffset * ( isTyped ? array.BYTES_PER_ELEMENT : 1 ); // bufferOffset is always in bytes
|
|
1884
|
+
|
|
1885
|
+
gl.bufferSubData( gl.UNIFORM_BUFFER, bufferOffset, array, dataOffset, size );
|
|
1886
|
+
|
|
1887
|
+
}
|
|
1888
|
+
|
|
1889
|
+
}
|
|
1770
1890
|
|
|
1771
1891
|
this.set( binding, map );
|
|
1772
1892
|
|
|
@@ -1774,7 +1894,6 @@ class WebGLBackend extends Backend {
|
|
|
1774
1894
|
|
|
1775
1895
|
const { textureGPU, glTextureType } = this.get( binding.texture );
|
|
1776
1896
|
|
|
1777
|
-
map.index = t ++;
|
|
1778
1897
|
map.textureGPU = textureGPU;
|
|
1779
1898
|
map.glTextureType = glTextureType;
|
|
1780
1899
|
|
|
@@ -1799,10 +1918,53 @@ class WebGLBackend extends Backend {
|
|
|
1799
1918
|
|
|
1800
1919
|
const bindingData = this.get( binding );
|
|
1801
1920
|
const bufferGPU = bindingData.bufferGPU;
|
|
1802
|
-
const
|
|
1921
|
+
const array = binding.buffer;
|
|
1922
|
+
|
|
1923
|
+
const updateRanges = binding.updateRanges;
|
|
1803
1924
|
|
|
1804
1925
|
gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
|
|
1805
|
-
|
|
1926
|
+
|
|
1927
|
+
if ( updateRanges.length === 0 ) {
|
|
1928
|
+
|
|
1929
|
+
gl.bufferData( gl.UNIFORM_BUFFER, array, gl.DYNAMIC_DRAW );
|
|
1930
|
+
|
|
1931
|
+
} else {
|
|
1932
|
+
|
|
1933
|
+
const isTyped = isTypedArray( array );
|
|
1934
|
+
const byteOffsetFactor = isTyped ? 1 : array.BYTES_PER_ELEMENT;
|
|
1935
|
+
|
|
1936
|
+
// Update ranges arrive sorted and non-overlapping which makes
|
|
1937
|
+
// it easy to merge contiguous ranges.
|
|
1938
|
+
|
|
1939
|
+
let start = updateRanges[ 0 ].start; // start of the current merged range
|
|
1940
|
+
|
|
1941
|
+
for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
|
|
1942
|
+
|
|
1943
|
+
const range = updateRanges[ i ];
|
|
1944
|
+
const next = updateRanges[ i + 1 ];
|
|
1945
|
+
|
|
1946
|
+
const end = range.start + range.count; // exclusive end of the current range
|
|
1947
|
+
|
|
1948
|
+
// keep merging while the next range is contiguous
|
|
1949
|
+
|
|
1950
|
+
if ( next !== undefined && next.start === end ) continue;
|
|
1951
|
+
|
|
1952
|
+
// write the merged range
|
|
1953
|
+
|
|
1954
|
+
const dataOffset = start * byteOffsetFactor;
|
|
1955
|
+
const size = ( end - start ) * byteOffsetFactor;
|
|
1956
|
+
|
|
1957
|
+
const bufferOffset = dataOffset * ( isTyped ? array.BYTES_PER_ELEMENT : 1 ); // bufferOffset is always in bytes
|
|
1958
|
+
|
|
1959
|
+
gl.bufferSubData( gl.UNIFORM_BUFFER, bufferOffset, array, dataOffset, size );
|
|
1960
|
+
|
|
1961
|
+
// start next if possible
|
|
1962
|
+
|
|
1963
|
+
if ( next !== undefined ) start = next.start;
|
|
1964
|
+
|
|
1965
|
+
}
|
|
1966
|
+
|
|
1967
|
+
}
|
|
1806
1968
|
|
|
1807
1969
|
}
|
|
1808
1970
|
|
|
@@ -1810,6 +1972,44 @@ class WebGLBackend extends Backend {
|
|
|
1810
1972
|
|
|
1811
1973
|
// attributes
|
|
1812
1974
|
|
|
1975
|
+
/**
|
|
1976
|
+
* Creates a uniform buffer.
|
|
1977
|
+
*
|
|
1978
|
+
* @param {Buffer} uniformBuffer - The uniform buffer.
|
|
1979
|
+
*/
|
|
1980
|
+
createUniformBuffer( uniformBuffer ) {
|
|
1981
|
+
|
|
1982
|
+
const uniformBufferData = this.get( uniformBuffer );
|
|
1983
|
+
|
|
1984
|
+
if ( uniformBufferData.bufferGPU === undefined ) {
|
|
1985
|
+
|
|
1986
|
+
const gl = this.gl;
|
|
1987
|
+
const array = uniformBuffer.buffer;
|
|
1988
|
+
|
|
1989
|
+
uniformBufferData.bufferGPU = gl.createBuffer();
|
|
1990
|
+
|
|
1991
|
+
gl.bindBuffer( gl.UNIFORM_BUFFER, uniformBufferData.bufferGPU );
|
|
1992
|
+
gl.bufferData( gl.UNIFORM_BUFFER, array.byteLength, gl.DYNAMIC_DRAW );
|
|
1993
|
+
|
|
1994
|
+
}
|
|
1995
|
+
|
|
1996
|
+
}
|
|
1997
|
+
|
|
1998
|
+
/**
|
|
1999
|
+
* Destroys the GPU data for the given uniform buffer.
|
|
2000
|
+
*
|
|
2001
|
+
* @param {Buffer} uniformBuffer - The uniform buffer.
|
|
2002
|
+
*/
|
|
2003
|
+
destroyUniformBuffer( uniformBuffer ) {
|
|
2004
|
+
|
|
2005
|
+
const uniformBufferData = this.get( uniformBuffer );
|
|
2006
|
+
|
|
2007
|
+
this.gl.deleteBuffer( uniformBufferData.bufferGPU );
|
|
2008
|
+
|
|
2009
|
+
this.delete( uniformBuffer );
|
|
2010
|
+
|
|
2011
|
+
}
|
|
2012
|
+
|
|
1813
2013
|
/**
|
|
1814
2014
|
* Creates the GPU buffer of an indexed shader attribute.
|
|
1815
2015
|
*
|
|
@@ -1897,17 +2097,6 @@ class WebGLBackend extends Backend {
|
|
|
1897
2097
|
|
|
1898
2098
|
}
|
|
1899
2099
|
|
|
1900
|
-
/**
|
|
1901
|
-
* Returns the maximum anisotropy texture filtering value.
|
|
1902
|
-
*
|
|
1903
|
-
* @return {number} The maximum anisotropy texture filtering value.
|
|
1904
|
-
*/
|
|
1905
|
-
getMaxAnisotropy() {
|
|
1906
|
-
|
|
1907
|
-
return this.capabilities.getMaxAnisotropy();
|
|
1908
|
-
|
|
1909
|
-
}
|
|
1910
|
-
|
|
1911
2100
|
/**
|
|
1912
2101
|
* Copies data of the given source texture to the given destination texture.
|
|
1913
2102
|
*
|
|
@@ -1937,6 +2126,35 @@ class WebGLBackend extends Backend {
|
|
|
1937
2126
|
|
|
1938
2127
|
}
|
|
1939
2128
|
|
|
2129
|
+
/**
|
|
2130
|
+
* Checks if the given compatibility is supported by the backend.
|
|
2131
|
+
*
|
|
2132
|
+
* @param {string} name - The compatibility name.
|
|
2133
|
+
* @return {boolean} Whether the compatibility is supported or not.
|
|
2134
|
+
*/
|
|
2135
|
+
hasCompatibility( name ) {
|
|
2136
|
+
|
|
2137
|
+
if ( name === Compatibility.TEXTURE_COMPARE ) return true;
|
|
2138
|
+
|
|
2139
|
+
return super.hasCompatibility( name );
|
|
2140
|
+
|
|
2141
|
+
}
|
|
2142
|
+
|
|
2143
|
+
/**
|
|
2144
|
+
* Initializes the render target defined in the given render context.
|
|
2145
|
+
*
|
|
2146
|
+
* @param {RenderContext} renderContext - The render context.
|
|
2147
|
+
*/
|
|
2148
|
+
initRenderTarget( renderContext ) {
|
|
2149
|
+
|
|
2150
|
+
const { gl, state } = this;
|
|
2151
|
+
|
|
2152
|
+
this._setFramebuffer( renderContext );
|
|
2153
|
+
|
|
2154
|
+
state.bindFramebuffer( gl.FRAMEBUFFER, null );
|
|
2155
|
+
|
|
2156
|
+
}
|
|
2157
|
+
|
|
1940
2158
|
/**
|
|
1941
2159
|
* Configures the active framebuffer from the given render context.
|
|
1942
2160
|
*
|
|
@@ -1955,7 +2173,7 @@ class WebGLBackend extends Backend {
|
|
|
1955
2173
|
const renderTargetContextData = this.get( renderTarget );
|
|
1956
2174
|
const { samples, depthBuffer, stencilBuffer } = renderTarget;
|
|
1957
2175
|
|
|
1958
|
-
const isCube = renderTarget.
|
|
2176
|
+
const isCube = renderTarget.isCubeRenderTarget === true;
|
|
1959
2177
|
const isRenderTarget3D = renderTarget.isRenderTarget3D === true;
|
|
1960
2178
|
const isRenderTargetArray = renderTarget.depth > 1;
|
|
1961
2179
|
const isXRRenderTarget = renderTarget.isXRRenderTarget === true;
|
|
@@ -2091,6 +2309,12 @@ class WebGLBackend extends Backend {
|
|
|
2091
2309
|
|
|
2092
2310
|
gl.framebufferTextureLayer( gl.FRAMEBUFFER, depthStyle, textureData.textureGPU, 0, layer );
|
|
2093
2311
|
|
|
2312
|
+
} else if ( descriptor.depthTexture.isCubeTexture ) {
|
|
2313
|
+
|
|
2314
|
+
const cubeFace = this.renderer._activeCubeFace;
|
|
2315
|
+
|
|
2316
|
+
gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_CUBE_MAP_POSITIVE_X + cubeFace, textureData.textureGPU, 0 );
|
|
2317
|
+
|
|
2094
2318
|
} else {
|
|
2095
2319
|
|
|
2096
2320
|
gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0 );
|
|
@@ -2400,20 +2624,22 @@ class WebGLBackend extends Backend {
|
|
|
2400
2624
|
|
|
2401
2625
|
const gl = this.gl;
|
|
2402
2626
|
|
|
2627
|
+
let uniformBuffers = 0;
|
|
2628
|
+
let textures = 0;
|
|
2629
|
+
|
|
2403
2630
|
for ( const bindGroup of bindings ) {
|
|
2404
2631
|
|
|
2405
2632
|
for ( const binding of bindGroup.bindings ) {
|
|
2406
2633
|
|
|
2407
|
-
const bindingData = this.get( binding );
|
|
2408
|
-
const index = bindingData.index;
|
|
2409
|
-
|
|
2410
2634
|
if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
|
|
2411
2635
|
|
|
2636
|
+
const index = uniformBuffers ++;
|
|
2412
2637
|
const location = gl.getUniformBlockIndex( programGPU, binding.name );
|
|
2413
2638
|
gl.uniformBlockBinding( programGPU, location, index );
|
|
2414
2639
|
|
|
2415
2640
|
} else if ( binding.isSampledTexture ) {
|
|
2416
2641
|
|
|
2642
|
+
const index = textures ++;
|
|
2417
2643
|
const location = gl.getUniformLocation( programGPU, binding.name );
|
|
2418
2644
|
gl.uniform1i( location, index );
|
|
2419
2645
|
|
|
@@ -2435,20 +2661,24 @@ class WebGLBackend extends Backend {
|
|
|
2435
2661
|
|
|
2436
2662
|
const { gl, state } = this;
|
|
2437
2663
|
|
|
2664
|
+
let uniformBuffers = 0;
|
|
2665
|
+
let textures = 0;
|
|
2666
|
+
|
|
2438
2667
|
for ( const bindGroup of bindings ) {
|
|
2439
2668
|
|
|
2440
2669
|
for ( const binding of bindGroup.bindings ) {
|
|
2441
2670
|
|
|
2442
2671
|
const bindingData = this.get( binding );
|
|
2443
|
-
const index = bindingData.index;
|
|
2444
2672
|
|
|
2445
2673
|
if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
|
|
2446
2674
|
|
|
2675
|
+
const index = uniformBuffers ++;
|
|
2447
2676
|
// TODO USE bindBufferRange to group multiple uniform buffers
|
|
2448
2677
|
state.bindBufferBase( gl.UNIFORM_BUFFER, index, bindingData.bufferGPU );
|
|
2449
2678
|
|
|
2450
2679
|
} else if ( binding.isSampledTexture ) {
|
|
2451
2680
|
|
|
2681
|
+
const index = textures ++;
|
|
2452
2682
|
state.bindTexture( bindingData.glTextureType, bindingData.textureGPU, gl.TEXTURE0 + index );
|
|
2453
2683
|
|
|
2454
2684
|
}
|