super-three 0.181.0 → 0.184.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 +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- 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 +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- 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/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- 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 +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- 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 +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- 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 +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- 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 +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -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/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -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/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- 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/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- 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/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- 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 +1 -1
- 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 +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -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 +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- 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 +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- 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/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/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/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.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/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- 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 +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- 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/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- 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 +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -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 +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- 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 +2 -3
- 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 +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- 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 +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- 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/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 +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- 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/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- 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 +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -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/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -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/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- 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 +29 -14
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- 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 +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- 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/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- 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 +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -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/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- 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 +2 -0
- 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_maps.glsl.js +7 -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 +1 -1
- 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} +1 -2
- 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 +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- 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 +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- 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 +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- 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/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/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- 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
|
@@ -10,12 +10,15 @@ import Backend from '../common/Backend.js';
|
|
|
10
10
|
import WebGPUUtils from './utils/WebGPUUtils.js';
|
|
11
11
|
import WebGPUAttributeUtils from './utils/WebGPUAttributeUtils.js';
|
|
12
12
|
import WebGPUBindingUtils from './utils/WebGPUBindingUtils.js';
|
|
13
|
+
import WebGPUCapabilities from './utils/WebGPUCapabilities.js';
|
|
13
14
|
import WebGPUPipelineUtils from './utils/WebGPUPipelineUtils.js';
|
|
14
15
|
import WebGPUTextureUtils from './utils/WebGPUTextureUtils.js';
|
|
15
16
|
|
|
16
|
-
import { WebGPUCoordinateSystem, TimestampQuery, REVISION, HalfFloatType } from '../../constants.js';
|
|
17
|
+
import { WebGPUCoordinateSystem, TimestampQuery, REVISION, HalfFloatType, Compatibility } from '../../constants.js';
|
|
17
18
|
import WebGPUTimestampQueryPool from './utils/WebGPUTimestampQueryPool.js';
|
|
18
|
-
import {
|
|
19
|
+
import { error } from '../../utils.js';
|
|
20
|
+
|
|
21
|
+
const _clearValue = { r: 0, g: 0, b: 0, a: 1 };
|
|
19
22
|
|
|
20
23
|
/**
|
|
21
24
|
* A backend implementation targeting WebGPU.
|
|
@@ -30,8 +33,8 @@ class WebGPUBackend extends Backend {
|
|
|
30
33
|
*
|
|
31
34
|
* @typedef {Object} WebGPUBackend~Options
|
|
32
35
|
* @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
36
|
+
* @property {boolean} [reversedDepthBuffer=false] - Whether reversed depth buffer is enabled or not.
|
|
33
37
|
* @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
34
|
-
* @property {boolean} [compatibilityMode=false] - Whether the backend should be in compatibility mode or not.
|
|
35
38
|
* @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
36
39
|
* @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
37
40
|
* @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
@@ -64,16 +67,18 @@ class WebGPUBackend extends Backend {
|
|
|
64
67
|
|
|
65
68
|
// some parameters require default values other than "undefined"
|
|
66
69
|
this.parameters.alpha = ( parameters.alpha === undefined ) ? true : parameters.alpha;
|
|
67
|
-
this.parameters.compatibilityMode = ( parameters.compatibilityMode === undefined ) ? false : parameters.compatibilityMode;
|
|
68
70
|
|
|
69
71
|
this.parameters.requiredLimits = ( parameters.requiredLimits === undefined ) ? {} : parameters.requiredLimits;
|
|
70
72
|
|
|
71
73
|
/**
|
|
72
|
-
* Indicates whether the backend is in compatibility mode or not.
|
|
73
|
-
*
|
|
74
|
-
*
|
|
74
|
+
* Indicates whether the backend is in WebGPU compatibility mode or not.
|
|
75
|
+
* The backend must be initialized before the property can be evaluated.
|
|
76
|
+
*
|
|
77
|
+
* @type {?boolean}
|
|
78
|
+
* @readonly
|
|
79
|
+
* @default null
|
|
75
80
|
*/
|
|
76
|
-
this.compatibilityMode =
|
|
81
|
+
this.compatibilityMode = null;
|
|
77
82
|
|
|
78
83
|
/**
|
|
79
84
|
* A reference to the device.
|
|
@@ -114,6 +119,14 @@ class WebGPUBackend extends Backend {
|
|
|
114
119
|
*/
|
|
115
120
|
this.bindingUtils = new WebGPUBindingUtils( this );
|
|
116
121
|
|
|
122
|
+
/**
|
|
123
|
+
* A reference to a backend module holding device capability related
|
|
124
|
+
* utility functions.
|
|
125
|
+
*
|
|
126
|
+
* @type {WebGPUCapabilities}
|
|
127
|
+
*/
|
|
128
|
+
this.capabilities = new WebGPUCapabilities( this );
|
|
129
|
+
|
|
117
130
|
/**
|
|
118
131
|
* A reference to a backend module holding shader pipeline-related
|
|
119
132
|
* utility functions.
|
|
@@ -137,6 +150,19 @@ class WebGPUBackend extends Backend {
|
|
|
137
150
|
*/
|
|
138
151
|
this.occludedResolveCache = new Map();
|
|
139
152
|
|
|
153
|
+
// compatibility checks
|
|
154
|
+
|
|
155
|
+
const compatibilityTextureCompare = typeof navigator === 'undefined' ? true : /Android/.test( navigator.userAgent ) === false;
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* A map of compatibility checks.
|
|
159
|
+
*
|
|
160
|
+
* @type {Object}
|
|
161
|
+
*/
|
|
162
|
+
this._compatibility = {
|
|
163
|
+
[ Compatibility.TEXTURE_COMPARE ]: compatibilityTextureCompare
|
|
164
|
+
};
|
|
165
|
+
|
|
140
166
|
}
|
|
141
167
|
|
|
142
168
|
/**
|
|
@@ -162,7 +188,7 @@ class WebGPUBackend extends Backend {
|
|
|
162
188
|
|
|
163
189
|
const adapterOptions = {
|
|
164
190
|
powerPreference: parameters.powerPreference,
|
|
165
|
-
featureLevel:
|
|
191
|
+
featureLevel: 'compatibility'
|
|
166
192
|
};
|
|
167
193
|
|
|
168
194
|
const adapter = ( typeof navigator !== 'undefined' ) ? await navigator.gpu.requestAdapter( adapterOptions ) : null;
|
|
@@ -202,8 +228,18 @@ class WebGPUBackend extends Backend {
|
|
|
202
228
|
|
|
203
229
|
}
|
|
204
230
|
|
|
231
|
+
this.compatibilityMode = ! device.features.has( 'core-features-and-limits' );
|
|
232
|
+
|
|
233
|
+
if ( this.compatibilityMode ) {
|
|
234
|
+
|
|
235
|
+
renderer._samples = 0;
|
|
236
|
+
|
|
237
|
+
}
|
|
238
|
+
|
|
205
239
|
device.lost.then( ( info ) => {
|
|
206
240
|
|
|
241
|
+
if ( info.reason === 'destroyed' ) return;
|
|
242
|
+
|
|
207
243
|
const deviceLossInfo = {
|
|
208
244
|
api: 'WebGPU',
|
|
209
245
|
message: info.message || 'Unknown reason',
|
|
@@ -289,15 +325,20 @@ class WebGPUBackend extends Backend {
|
|
|
289
325
|
|
|
290
326
|
/**
|
|
291
327
|
* This method performs a readback operation by moving buffer data from
|
|
292
|
-
* a storage buffer attribute from the GPU to the CPU.
|
|
328
|
+
* a storage buffer attribute from the GPU to the CPU. ReadbackBuffer can
|
|
329
|
+
* be used to retain and reuse handles to the intermediate buffers and prevent
|
|
330
|
+
* new allocation.
|
|
293
331
|
*
|
|
294
332
|
* @async
|
|
295
|
-
* @param {
|
|
296
|
-
* @
|
|
333
|
+
* @param {BufferAttribute} attribute - The storage buffer attribute to read frm.
|
|
334
|
+
* @param {number} count - The offset from which to start reading the
|
|
335
|
+
* @param {number} offset - The storage buffer attribute.
|
|
336
|
+
* @param {ReadbackBuffer|ArrayBuffer} target - The storage buffer attribute.
|
|
337
|
+
* @return {Promise<ArrayBuffer|ReadbackBuffer>} A promise that resolves with the buffer data when the data are ready.
|
|
297
338
|
*/
|
|
298
|
-
async getArrayBufferAsync( attribute ) {
|
|
339
|
+
async getArrayBufferAsync( attribute, target = null, offset = 0, count = - 1 ) {
|
|
299
340
|
|
|
300
|
-
return await this.attributeUtils.getArrayBufferAsync( attribute );
|
|
341
|
+
return await this.attributeUtils.getArrayBufferAsync( attribute, target, offset, count );
|
|
301
342
|
|
|
302
343
|
}
|
|
303
344
|
|
|
@@ -519,7 +560,7 @@ class WebGPUBackend extends Backend {
|
|
|
519
560
|
|
|
520
561
|
const depthTextureData = this.get( renderContext.depthTexture );
|
|
521
562
|
const options = {};
|
|
522
|
-
if ( renderContext.depthTexture.isArrayTexture ) {
|
|
563
|
+
if ( renderContext.depthTexture.isArrayTexture || renderContext.depthTexture.isCubeTexture ) {
|
|
523
564
|
|
|
524
565
|
options.dimension = GPUTextureViewDimension.TwoD;
|
|
525
566
|
options.arrayLayerCount = 1;
|
|
@@ -648,7 +689,21 @@ class WebGPUBackend extends Backend {
|
|
|
648
689
|
|
|
649
690
|
if ( renderContext.clearColor ) {
|
|
650
691
|
|
|
651
|
-
|
|
692
|
+
if ( i === 0 ) {
|
|
693
|
+
|
|
694
|
+
colorAttachment.clearValue = renderContext.clearColorValue;
|
|
695
|
+
|
|
696
|
+
} else {
|
|
697
|
+
|
|
698
|
+
_clearValue.r = 0;
|
|
699
|
+
_clearValue.g = 0;
|
|
700
|
+
_clearValue.b = 0;
|
|
701
|
+
_clearValue.a = 1;
|
|
702
|
+
|
|
703
|
+
colorAttachment.clearValue = _clearValue;
|
|
704
|
+
|
|
705
|
+
}
|
|
706
|
+
|
|
652
707
|
colorAttachment.loadOp = GPULoadOp.Clear;
|
|
653
708
|
|
|
654
709
|
} else {
|
|
@@ -1190,7 +1245,6 @@ class WebGPUBackend extends Backend {
|
|
|
1190
1245
|
|
|
1191
1246
|
let colorAttachments = [];
|
|
1192
1247
|
let depthStencilAttachment;
|
|
1193
|
-
let clearValue;
|
|
1194
1248
|
|
|
1195
1249
|
let supportsDepth;
|
|
1196
1250
|
let supportsStencil;
|
|
@@ -1198,7 +1252,11 @@ class WebGPUBackend extends Backend {
|
|
|
1198
1252
|
if ( color ) {
|
|
1199
1253
|
|
|
1200
1254
|
const clearColor = this.getClearColor();
|
|
1201
|
-
|
|
1255
|
+
|
|
1256
|
+
_clearValue.r = clearColor.r;
|
|
1257
|
+
_clearValue.g = clearColor.g;
|
|
1258
|
+
_clearValue.b = clearColor.b;
|
|
1259
|
+
_clearValue.a = clearColor.a;
|
|
1202
1260
|
|
|
1203
1261
|
}
|
|
1204
1262
|
|
|
@@ -1215,7 +1273,7 @@ class WebGPUBackend extends Backend {
|
|
|
1215
1273
|
|
|
1216
1274
|
const colorAttachment = colorAttachments[ 0 ];
|
|
1217
1275
|
|
|
1218
|
-
colorAttachment.clearValue =
|
|
1276
|
+
colorAttachment.clearValue = _clearValue;
|
|
1219
1277
|
colorAttachment.loadOp = GPULoadOp.Clear;
|
|
1220
1278
|
colorAttachment.storeOp = GPUStoreOp.Store;
|
|
1221
1279
|
|
|
@@ -1234,7 +1292,7 @@ class WebGPUBackend extends Backend {
|
|
|
1234
1292
|
|
|
1235
1293
|
const clearConfig = {
|
|
1236
1294
|
loadOp: color ? GPULoadOp.Clear : GPULoadOp.Load,
|
|
1237
|
-
clearValue: color ?
|
|
1295
|
+
clearValue: color ? _clearValue : undefined
|
|
1238
1296
|
};
|
|
1239
1297
|
|
|
1240
1298
|
if ( supportsDepth ) {
|
|
@@ -1372,13 +1430,13 @@ class WebGPUBackend extends Backend {
|
|
|
1372
1430
|
|
|
1373
1431
|
if ( dispatchSize === null ) {
|
|
1374
1432
|
|
|
1375
|
-
dispatchSize = computeNode.count;
|
|
1433
|
+
dispatchSize = computeNode.dispatchSize || computeNode.count;
|
|
1376
1434
|
|
|
1377
1435
|
}
|
|
1378
1436
|
|
|
1379
1437
|
// When the dispatchSize is set with a StorageBuffer from the GPU.
|
|
1380
1438
|
|
|
1381
|
-
if ( dispatchSize &&
|
|
1439
|
+
if ( dispatchSize && dispatchSize.isIndirectStorageBufferAttribute ) {
|
|
1382
1440
|
|
|
1383
1441
|
const dispatchBuffer = this.get( dispatchSize ).buffer;
|
|
1384
1442
|
|
|
@@ -1457,183 +1515,201 @@ class WebGPUBackend extends Backend {
|
|
|
1457
1515
|
|
|
1458
1516
|
}
|
|
1459
1517
|
|
|
1460
|
-
// render object
|
|
1461
|
-
|
|
1462
1518
|
/**
|
|
1463
|
-
*
|
|
1519
|
+
* Internal draw function that performs the draw with the given pass encoder.
|
|
1464
1520
|
*
|
|
1465
|
-
* @
|
|
1521
|
+
* @private
|
|
1522
|
+
* @param {RenderObject} renderObject - The render object.
|
|
1466
1523
|
* @param {Info} info - Holds a series of statistical information about the GPU memory and the rendering process.
|
|
1524
|
+
* @param {Object} renderContextData - The render context data object, holding current pass state and occlusion query tracking.
|
|
1525
|
+
* @param {GPURenderPipeline} pipelineGPU - The GPU render pipeline.
|
|
1526
|
+
* @param {Array<BindGroup>} bindings - The bind groups.
|
|
1527
|
+
* @param {Array<BufferAttribute>} vertexBuffers - The vertex buffers.
|
|
1528
|
+
* @param {{vertexCount: number, firstVertex: number, instanceCount: number, firstInstance: number}} drawParams - The draw parameters.
|
|
1529
|
+
* @param {GPURenderPassEncoder|GPURenderBundleEncoder} passEncoderGPU - The GPU pass encoder used for recording draw commands.
|
|
1530
|
+
* @param {Object} currentSets - Tracking object for currently set pipeline, attributes, bind groups, and index state.
|
|
1467
1531
|
*/
|
|
1468
|
-
|
|
1532
|
+
_draw( renderObject, info, renderContextData, pipelineGPU, bindings, vertexBuffers, drawParams, passEncoderGPU, currentSets ) {
|
|
1469
1533
|
|
|
1470
|
-
const { object, material, context
|
|
1471
|
-
const bindings = renderObject.getBindings();
|
|
1472
|
-
const renderContextData = this.get( context );
|
|
1473
|
-
const pipelineData = this.get( pipeline );
|
|
1474
|
-
const pipelineGPU = pipelineData.pipeline;
|
|
1475
|
-
|
|
1476
|
-
if ( pipelineData.error === true ) return;
|
|
1534
|
+
const { object, material, context } = renderObject;
|
|
1477
1535
|
|
|
1478
1536
|
const index = renderObject.getIndex();
|
|
1479
1537
|
const hasIndex = ( index !== null );
|
|
1480
1538
|
|
|
1481
|
-
|
|
1482
|
-
const drawParams = renderObject.getDrawParameters();
|
|
1483
|
-
if ( drawParams === null ) return;
|
|
1484
|
-
|
|
1485
1539
|
// pipeline
|
|
1540
|
+
this.pipelineUtils.setPipeline( passEncoderGPU, pipelineGPU );
|
|
1541
|
+
currentSets.pipeline = pipelineGPU;
|
|
1486
1542
|
|
|
1487
|
-
|
|
1543
|
+
// bind groups
|
|
1544
|
+
const currentBindingGroups = currentSets.bindingGroups;
|
|
1545
|
+
for ( let i = 0, l = bindings.length; i < l; i ++ ) {
|
|
1488
1546
|
|
|
1489
|
-
|
|
1490
|
-
this.
|
|
1491
|
-
|
|
1547
|
+
const bindGroup = bindings[ i ];
|
|
1548
|
+
const bindingsData = this.get( bindGroup );
|
|
1549
|
+
if ( currentBindingGroups[ i ] !== bindGroup.id ) {
|
|
1492
1550
|
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
for ( let i = 0, l = bindings.length; i < l; i ++ ) {
|
|
1551
|
+
passEncoderGPU.setBindGroup( i, bindingsData.group );
|
|
1552
|
+
currentBindingGroups[ i ] = bindGroup.id;
|
|
1496
1553
|
|
|
1497
|
-
|
|
1498
|
-
const bindingsData = this.get( bindGroup );
|
|
1499
|
-
if ( currentBindingGroups[ bindGroup.index ] !== bindGroup.id ) {
|
|
1554
|
+
}
|
|
1500
1555
|
|
|
1501
|
-
|
|
1502
|
-
currentBindingGroups[ bindGroup.index ] = bindGroup.id;
|
|
1556
|
+
}
|
|
1503
1557
|
|
|
1504
|
-
|
|
1558
|
+
// attributes
|
|
1505
1559
|
|
|
1506
|
-
|
|
1560
|
+
// index
|
|
1507
1561
|
|
|
1508
|
-
|
|
1562
|
+
if ( hasIndex === true ) {
|
|
1509
1563
|
|
|
1510
|
-
|
|
1564
|
+
if ( currentSets.index !== index ) {
|
|
1511
1565
|
|
|
1512
|
-
|
|
1566
|
+
const buffer = this.get( index ).buffer;
|
|
1567
|
+
const indexFormat = ( index.array instanceof Uint16Array ) ? GPUIndexFormat.Uint16 : GPUIndexFormat.Uint32;
|
|
1513
1568
|
|
|
1514
|
-
|
|
1569
|
+
passEncoderGPU.setIndexBuffer( buffer, indexFormat );
|
|
1515
1570
|
|
|
1516
|
-
|
|
1517
|
-
const indexFormat = ( index.array instanceof Uint16Array ) ? GPUIndexFormat.Uint16 : GPUIndexFormat.Uint32;
|
|
1571
|
+
currentSets.index = index;
|
|
1518
1572
|
|
|
1519
|
-
|
|
1573
|
+
}
|
|
1520
1574
|
|
|
1521
|
-
|
|
1575
|
+
}
|
|
1522
1576
|
|
|
1523
|
-
|
|
1577
|
+
for ( let i = 0, l = vertexBuffers.length; i < l; i ++ ) {
|
|
1524
1578
|
|
|
1525
|
-
|
|
1526
|
-
// vertex buffers
|
|
1579
|
+
const vertexBuffer = vertexBuffers[ i ];
|
|
1527
1580
|
|
|
1528
|
-
|
|
1581
|
+
if ( currentSets.attributes[ i ] !== vertexBuffer ) {
|
|
1529
1582
|
|
|
1530
|
-
|
|
1583
|
+
const buffer = this.get( vertexBuffer ).buffer;
|
|
1584
|
+
passEncoderGPU.setVertexBuffer( i, buffer );
|
|
1531
1585
|
|
|
1532
|
-
|
|
1586
|
+
currentSets.attributes[ i ] = vertexBuffer;
|
|
1533
1587
|
|
|
1534
|
-
|
|
1588
|
+
}
|
|
1535
1589
|
|
|
1536
|
-
|
|
1537
|
-
|
|
1590
|
+
}
|
|
1591
|
+
// stencil
|
|
1538
1592
|
|
|
1539
|
-
|
|
1593
|
+
if ( context.stencil === true && material.stencilWrite === true && renderContextData.currentStencilRef !== material.stencilRef ) {
|
|
1540
1594
|
|
|
1541
|
-
|
|
1595
|
+
passEncoderGPU.setStencilReference( material.stencilRef );
|
|
1596
|
+
renderContextData.currentStencilRef = material.stencilRef;
|
|
1542
1597
|
|
|
1543
|
-
|
|
1544
|
-
// stencil
|
|
1598
|
+
}
|
|
1545
1599
|
|
|
1546
|
-
|
|
1600
|
+
if ( object.isBatchedMesh === true ) {
|
|
1547
1601
|
|
|
1548
|
-
|
|
1549
|
-
|
|
1602
|
+
const starts = object._multiDrawStarts;
|
|
1603
|
+
const counts = object._multiDrawCounts;
|
|
1604
|
+
const drawCount = object._multiDrawCount;
|
|
1550
1605
|
|
|
1551
|
-
|
|
1606
|
+
let bytesPerElement = ( hasIndex === true ) ? index.array.BYTES_PER_ELEMENT : 1;
|
|
1552
1607
|
|
|
1608
|
+
if ( material.wireframe ) {
|
|
1553
1609
|
|
|
1554
|
-
|
|
1610
|
+
bytesPerElement = object.geometry.attributes.position.count > 65535 ? 4 : 2;
|
|
1555
1611
|
|
|
1556
|
-
|
|
1557
|
-
const draw = ( passEncoderGPU, currentSets ) => {
|
|
1612
|
+
}
|
|
1558
1613
|
|
|
1559
|
-
|
|
1614
|
+
for ( let i = 0; i < drawCount; i ++ ) {
|
|
1560
1615
|
|
|
1561
|
-
|
|
1616
|
+
if ( hasIndex === true ) {
|
|
1562
1617
|
|
|
1563
|
-
|
|
1564
|
-
const counts = object._multiDrawCounts;
|
|
1565
|
-
const drawCount = object._multiDrawCount;
|
|
1566
|
-
const drawInstances = object._multiDrawInstances;
|
|
1618
|
+
passEncoderGPU.drawIndexed( counts[ i ], 1, starts[ i ] / bytesPerElement, 0, i );
|
|
1567
1619
|
|
|
1568
|
-
|
|
1620
|
+
} else {
|
|
1569
1621
|
|
|
1570
|
-
|
|
1571
|
-
warnOnce( 'WebGPUBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
|
|
1622
|
+
passEncoderGPU.draw( counts[ i ], 1, starts[ i ], i );
|
|
1572
1623
|
|
|
1573
1624
|
}
|
|
1574
1625
|
|
|
1575
|
-
|
|
1626
|
+
info.update( object, counts[ i ], 1 );
|
|
1576
1627
|
|
|
1577
|
-
|
|
1578
|
-
const firstInstance = count > 1 ? 0 : i;
|
|
1628
|
+
}
|
|
1579
1629
|
|
|
1580
|
-
|
|
1630
|
+
} else if ( hasIndex === true ) {
|
|
1581
1631
|
|
|
1582
|
-
|
|
1632
|
+
const { vertexCount: indexCount, instanceCount, firstVertex: firstIndex } = drawParams;
|
|
1583
1633
|
|
|
1584
|
-
|
|
1634
|
+
const indirect = renderObject.getIndirect();
|
|
1585
1635
|
|
|
1586
|
-
|
|
1636
|
+
if ( indirect !== null ) {
|
|
1587
1637
|
|
|
1588
|
-
|
|
1638
|
+
const buffer = this.get( indirect ).buffer;
|
|
1639
|
+
const indirectOffset = renderObject.getIndirectOffset();
|
|
1640
|
+
const indirectOffsets = Array.isArray( indirectOffset ) ? indirectOffset : [ indirectOffset ];
|
|
1641
|
+
|
|
1642
|
+
for ( let i = 0; i < indirectOffsets.length; i ++ ) {
|
|
1589
1643
|
|
|
1590
|
-
|
|
1644
|
+
passEncoderGPU.drawIndexedIndirect( buffer, indirectOffsets[ i ] );
|
|
1591
1645
|
|
|
1592
1646
|
}
|
|
1593
1647
|
|
|
1594
|
-
} else
|
|
1648
|
+
} else {
|
|
1595
1649
|
|
|
1596
|
-
|
|
1650
|
+
passEncoderGPU.drawIndexed( indexCount, instanceCount, firstIndex, 0, 0 );
|
|
1597
1651
|
|
|
1598
|
-
|
|
1652
|
+
}
|
|
1599
1653
|
|
|
1600
|
-
|
|
1654
|
+
info.update( object, indexCount, instanceCount );
|
|
1601
1655
|
|
|
1602
|
-
|
|
1656
|
+
} else {
|
|
1603
1657
|
|
|
1604
|
-
|
|
1658
|
+
const { vertexCount, instanceCount, firstVertex } = drawParams;
|
|
1605
1659
|
|
|
1606
|
-
|
|
1660
|
+
const indirect = renderObject.getIndirect();
|
|
1607
1661
|
|
|
1608
|
-
|
|
1662
|
+
if ( indirect !== null ) {
|
|
1663
|
+
|
|
1664
|
+
const buffer = this.get( indirect ).buffer;
|
|
1665
|
+
const indirectOffset = renderObject.getIndirectOffset();
|
|
1666
|
+
const indirectOffsets = Array.isArray( indirectOffset ) ? indirectOffset : [ indirectOffset ];
|
|
1667
|
+
|
|
1668
|
+
for ( let i = 0; i < indirectOffsets.length; i ++ ) {
|
|
1669
|
+
|
|
1670
|
+
passEncoderGPU.drawIndirect( buffer, indirectOffsets[ i ] );
|
|
1609
1671
|
|
|
1610
1672
|
}
|
|
1611
1673
|
|
|
1612
|
-
info.update( object, indexCount, instanceCount );
|
|
1613
1674
|
|
|
1614
1675
|
} else {
|
|
1615
1676
|
|
|
1616
|
-
|
|
1677
|
+
passEncoderGPU.draw( vertexCount, instanceCount, firstVertex, 0 );
|
|
1678
|
+
|
|
1679
|
+
}
|
|
1617
1680
|
|
|
1618
|
-
|
|
1681
|
+
info.update( object, vertexCount, instanceCount );
|
|
1619
1682
|
|
|
1620
|
-
|
|
1683
|
+
}
|
|
1621
1684
|
|
|
1622
|
-
|
|
1685
|
+
}
|
|
1623
1686
|
|
|
1624
|
-
|
|
1687
|
+
// render object
|
|
1625
1688
|
|
|
1626
|
-
|
|
1689
|
+
/**
|
|
1690
|
+
* Executes a draw command for the given render object.
|
|
1691
|
+
*
|
|
1692
|
+
* @param {RenderObject} renderObject - The render object to draw.
|
|
1693
|
+
* @param {Info} info - Holds a series of statistical information about the GPU memory and the rendering process.
|
|
1694
|
+
*/
|
|
1695
|
+
draw( renderObject, info ) {
|
|
1627
1696
|
|
|
1628
|
-
|
|
1697
|
+
const { object, context, pipeline } = renderObject;
|
|
1698
|
+
const renderContextData = this.get( context );
|
|
1699
|
+
const pipelineData = this.get( pipeline );
|
|
1700
|
+
const pipelineGPU = pipelineData.pipeline;
|
|
1629
1701
|
|
|
1630
|
-
|
|
1702
|
+
// Skip if pipeline has error
|
|
1703
|
+
if ( pipelineData.error === true ) return;
|
|
1631
1704
|
|
|
1632
|
-
|
|
1705
|
+
const drawParams = renderObject.getDrawParameters();
|
|
1706
|
+
if ( drawParams === null ) return;
|
|
1633
1707
|
|
|
1634
|
-
|
|
1708
|
+
const bindings = renderObject.getBindings();
|
|
1635
1709
|
|
|
1636
|
-
|
|
1710
|
+
// vertex buffers
|
|
1711
|
+
|
|
1712
|
+
const vertexBuffers = renderObject.getVertexBuffers();
|
|
1637
1713
|
|
|
1638
1714
|
if ( renderObject.camera.isArrayCamera && renderObject.camera.cameras.length > 0 ) {
|
|
1639
1715
|
|
|
@@ -1652,7 +1728,9 @@ class WebGPUBackend extends Backend {
|
|
|
1652
1728
|
|
|
1653
1729
|
data[ 0 ] = i;
|
|
1654
1730
|
|
|
1655
|
-
const
|
|
1731
|
+
const { layoutGPU } = bindingsData.layout;
|
|
1732
|
+
|
|
1733
|
+
const bindGroupIndex = this.bindingUtils.createBindGroupIndex( data, layoutGPU );
|
|
1656
1734
|
|
|
1657
1735
|
indexesGPU.push( bindGroupIndex );
|
|
1658
1736
|
|
|
@@ -1672,8 +1750,6 @@ class WebGPUBackend extends Backend {
|
|
|
1672
1750
|
|
|
1673
1751
|
const vp = subCamera.viewport;
|
|
1674
1752
|
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
1753
|
let pass = renderContextData.currentPass;
|
|
1678
1754
|
let sets = renderContextData.currentSets;
|
|
1679
1755
|
if ( renderContextData.bundleEncoders ) {
|
|
@@ -1685,8 +1761,6 @@ class WebGPUBackend extends Backend {
|
|
|
1685
1761
|
|
|
1686
1762
|
}
|
|
1687
1763
|
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
1764
|
if ( vp ) {
|
|
1691
1765
|
|
|
1692
1766
|
pass.setViewport(
|
|
@@ -1700,17 +1774,16 @@ class WebGPUBackend extends Backend {
|
|
|
1700
1774
|
|
|
1701
1775
|
}
|
|
1702
1776
|
|
|
1703
|
-
|
|
1704
1777
|
// Set camera index binding for this layer
|
|
1705
1778
|
if ( cameraIndex && cameraData.indexesGPU ) {
|
|
1706
1779
|
|
|
1707
|
-
|
|
1708
|
-
|
|
1780
|
+
const indexPos = bindings.indexOf( cameraIndex );
|
|
1781
|
+
pass.setBindGroup( indexPos, cameraData.indexesGPU[ i ] );
|
|
1782
|
+
sets.bindingGroups[ indexPos ] = cameraIndex.id;
|
|
1709
1783
|
|
|
1710
1784
|
}
|
|
1711
1785
|
|
|
1712
|
-
|
|
1713
|
-
|
|
1786
|
+
this._draw( renderObject, info, renderContextData, pipelineGPU, bindings, vertexBuffers, drawParams, pass, sets );
|
|
1714
1787
|
|
|
1715
1788
|
}
|
|
1716
1789
|
|
|
@@ -1747,7 +1820,7 @@ class WebGPUBackend extends Backend {
|
|
|
1747
1820
|
|
|
1748
1821
|
}
|
|
1749
1822
|
|
|
1750
|
-
|
|
1823
|
+
this._draw( renderObject, info, renderContextData, pipelineGPU, bindings, vertexBuffers, drawParams, renderContextData.currentPass, renderContextData.currentSets );
|
|
1751
1824
|
|
|
1752
1825
|
}
|
|
1753
1826
|
|
|
@@ -2144,6 +2217,17 @@ class WebGPUBackend extends Backend {
|
|
|
2144
2217
|
|
|
2145
2218
|
}
|
|
2146
2219
|
|
|
2220
|
+
/**
|
|
2221
|
+
* Delete data associated with the current bind group.
|
|
2222
|
+
*
|
|
2223
|
+
* @param {BindGroup} bindGroup - The bind group.
|
|
2224
|
+
*/
|
|
2225
|
+
deleteBindGroupData( bindGroup ) {
|
|
2226
|
+
|
|
2227
|
+
this.bindingUtils.deleteBindGroupData( bindGroup );
|
|
2228
|
+
|
|
2229
|
+
}
|
|
2230
|
+
|
|
2147
2231
|
// attributes
|
|
2148
2232
|
|
|
2149
2233
|
/**
|
|
@@ -2233,17 +2317,6 @@ class WebGPUBackend extends Backend {
|
|
|
2233
2317
|
|
|
2234
2318
|
// utils public
|
|
2235
2319
|
|
|
2236
|
-
/**
|
|
2237
|
-
* Returns the maximum anisotropy texture filtering value.
|
|
2238
|
-
*
|
|
2239
|
-
* @return {number} The maximum anisotropy texture filtering value.
|
|
2240
|
-
*/
|
|
2241
|
-
getMaxAnisotropy() {
|
|
2242
|
-
|
|
2243
|
-
return 16;
|
|
2244
|
-
|
|
2245
|
-
}
|
|
2246
|
-
|
|
2247
2320
|
/**
|
|
2248
2321
|
* Checks if the given feature is supported by the backend.
|
|
2249
2322
|
*
|
|
@@ -2471,10 +2544,57 @@ class WebGPUBackend extends Backend {
|
|
|
2471
2544
|
|
|
2472
2545
|
}
|
|
2473
2546
|
|
|
2547
|
+
/**
|
|
2548
|
+
* Checks if the given compatibility is supported by the backend.
|
|
2549
|
+
*
|
|
2550
|
+
* @param {string} name - The compatibility name.
|
|
2551
|
+
* @return {boolean} Whether the compatibility is supported or not.
|
|
2552
|
+
*/
|
|
2553
|
+
hasCompatibility( name ) {
|
|
2554
|
+
|
|
2555
|
+
if ( this._compatibility[ name ] !== undefined ) {
|
|
2556
|
+
|
|
2557
|
+
return this._compatibility[ name ];
|
|
2558
|
+
|
|
2559
|
+
}
|
|
2560
|
+
|
|
2561
|
+
return super.hasCompatibility( name );
|
|
2562
|
+
|
|
2563
|
+
}
|
|
2564
|
+
|
|
2474
2565
|
dispose() {
|
|
2475
2566
|
|
|
2567
|
+
this.bindingUtils.dispose();
|
|
2476
2568
|
this.textureUtils.dispose();
|
|
2477
2569
|
|
|
2570
|
+
if ( this.occludedResolveCache ) {
|
|
2571
|
+
|
|
2572
|
+
for ( const buffer of this.occludedResolveCache.values() ) {
|
|
2573
|
+
|
|
2574
|
+
buffer.destroy();
|
|
2575
|
+
|
|
2576
|
+
}
|
|
2577
|
+
|
|
2578
|
+
this.occludedResolveCache.clear();
|
|
2579
|
+
|
|
2580
|
+
}
|
|
2581
|
+
|
|
2582
|
+
if ( this.timestampQueryPool ) {
|
|
2583
|
+
|
|
2584
|
+
for ( const queryPool of Object.values( this.timestampQueryPool ) ) {
|
|
2585
|
+
|
|
2586
|
+
if ( queryPool !== null ) queryPool.dispose();
|
|
2587
|
+
|
|
2588
|
+
}
|
|
2589
|
+
|
|
2590
|
+
}
|
|
2591
|
+
|
|
2592
|
+
if ( this.parameters.device === undefined && this.device !== null ) {
|
|
2593
|
+
|
|
2594
|
+
this.device.destroy();
|
|
2595
|
+
|
|
2596
|
+
}
|
|
2597
|
+
|
|
2478
2598
|
}
|
|
2479
2599
|
|
|
2480
2600
|
}
|