super-three 0.177.0 → 0.181.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/README.md +1 -1
- package/build/three.cjs +1994 -749
- package/build/three.core.js +1358 -506
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +631 -247
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +113 -33
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +9571 -3424
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +9397 -3426
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +2 -3
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +0 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +9 -9
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +62 -15
- package/examples/jsm/csm/CSMShadowNode.js +4 -4
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/RoomEnvironment.js +8 -3
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +683 -299
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -13
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lights/LightProbeGenerator.js +14 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +4 -4
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +210 -22
- package/examples/jsm/loaders/FBXLoader.js +4 -4
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +233 -34
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +13 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -892
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +3 -3
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/physics/RapierPhysics.js +95 -16
- package/examples/jsm/postprocessing/GTAOPass.js +10 -9
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +17 -17
- package/examples/jsm/postprocessing/SSAOPass.js +10 -9
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +196 -92
- package/examples/jsm/transpiler/Transpiler.js +17 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +11 -6
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +578 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +18 -20
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +5 -2
- package/src/Three.TSL.js +112 -32
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +8 -7
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +13 -5
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/Clock.js +2 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +4 -3
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/{examples/jsm/misc → src/core}/Timer.js +4 -42
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +279 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/Path.js +22 -22
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +8 -6
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +42 -12
- package/src/helpers/SkeletonHelper.js +35 -6
- package/src/lights/LightShadow.js +21 -8
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +29 -5
- package/src/loaders/ImageBitmapLoader.js +32 -8
- package/src/loaders/ImageLoader.js +56 -9
- package/src/loaders/Loader.js +17 -3
- package/src/loaders/LoadingManager.js +45 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +2 -1
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -10
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
- package/src/materials/nodes/NodeMaterial.js +90 -27
- package/src/materials/nodes/PointsNodeMaterial.js +86 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +10 -5
- package/src/math/Line3.js +129 -2
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +55 -34
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +69 -67
- package/src/math/Spherical.js +3 -3
- package/src/nodes/Nodes.js +6 -4
- package/src/nodes/TSL.js +9 -4
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +31 -25
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +142 -16
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +97 -30
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +25 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +20 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +23 -1
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +142 -44
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +13 -0
- package/src/nodes/core/AssignNode.js +6 -2
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +48 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
- package/src/nodes/core/Node.js +167 -34
- package/src/nodes/core/NodeBuilder.js +404 -120
- package/src/nodes/core/NodeFrame.js +21 -21
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +17 -88
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +77 -30
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +80 -14
- package/src/nodes/core/VarNode.js +142 -16
- package/src/nodes/core/VaryingNode.js +9 -6
- package/src/nodes/display/BlendModes.js +7 -6
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +35 -7
- package/src/nodes/display/NormalMapNode.js +20 -50
- package/src/nodes/display/PassNode.js +206 -17
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -40
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +94 -4
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +19 -18
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +81 -25
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
- package/src/nodes/lighting/EnvironmentNode.js +11 -11
- package/src/nodes/lighting/LightsNode.js +7 -8
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ProjectorLightNode.js +19 -6
- package/src/nodes/lighting/ShadowFilterNode.js +3 -1
- package/src/nodes/lighting/ShadowNode.js +77 -10
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +165 -1
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +25 -27
- package/src/nodes/math/MathNode.js +106 -65
- package/src/nodes/math/OperatorNode.js +28 -43
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -2
- package/src/nodes/tsl/TSLCore.js +546 -186
- package/src/nodes/utils/DebugNode.js +3 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +119 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -41
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +33 -6
- package/src/nodes/utils/ReflectorNode.js +68 -10
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +6 -4
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +77 -66
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/Bindings.js +76 -19
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +61 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +84 -5
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +486 -255
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -68
- package/src/renderers/common/Sampler.js +117 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +27 -0
- package/src/renderers/common/Textures.js +138 -46
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +63 -24
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +161 -66
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +4 -3
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +25 -18
- package/src/renderers/webgl/WebGLPrograms.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -2
- package/src/renderers/webgl/WebGLState.js +17 -16
- package/src/renderers/webgl/WebGLTextures.js +38 -21
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +205 -128
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
- package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +89 -13
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +14 -3
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +29 -2
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import 'https://greggman.github.io/webgpu-avoid-redundant-state-setting/webgpu-check-redundant-state-setting.js';
|
|
3
3
|
//*/
|
|
4
4
|
|
|
5
|
-
import { GPUFeatureName, GPULoadOp, GPUStoreOp, GPUIndexFormat, GPUTextureViewDimension } from './utils/WebGPUConstants.js';
|
|
5
|
+
import { GPUFeatureName, GPULoadOp, GPUStoreOp, GPUIndexFormat, GPUTextureViewDimension, GPUFeatureMap } from './utils/WebGPUConstants.js';
|
|
6
6
|
|
|
7
7
|
import WGSLNodeBuilder from './nodes/WGSLNodeBuilder.js';
|
|
8
8
|
import Backend from '../common/Backend.js';
|
|
@@ -13,9 +13,9 @@ import WebGPUBindingUtils from './utils/WebGPUBindingUtils.js';
|
|
|
13
13
|
import WebGPUPipelineUtils from './utils/WebGPUPipelineUtils.js';
|
|
14
14
|
import WebGPUTextureUtils from './utils/WebGPUTextureUtils.js';
|
|
15
15
|
|
|
16
|
-
import { WebGPUCoordinateSystem } from '../../constants.js';
|
|
16
|
+
import { WebGPUCoordinateSystem, TimestampQuery, REVISION, HalfFloatType } from '../../constants.js';
|
|
17
17
|
import WebGPUTimestampQueryPool from './utils/WebGPUTimestampQueryPool.js';
|
|
18
|
-
import { warnOnce } from '../../utils.js';
|
|
18
|
+
import { warnOnce, error } from '../../utils.js';
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* A backend implementation targeting WebGPU.
|
|
@@ -83,22 +83,6 @@ class WebGPUBackend extends Backend {
|
|
|
83
83
|
*/
|
|
84
84
|
this.device = null;
|
|
85
85
|
|
|
86
|
-
/**
|
|
87
|
-
* A reference to the context.
|
|
88
|
-
*
|
|
89
|
-
* @type {?GPUCanvasContext}
|
|
90
|
-
* @default null
|
|
91
|
-
*/
|
|
92
|
-
this.context = null;
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* A reference to the color attachment of the default framebuffer.
|
|
96
|
-
*
|
|
97
|
-
* @type {?GPUTexture}
|
|
98
|
-
* @default null
|
|
99
|
-
*/
|
|
100
|
-
this.colorBuffer = null;
|
|
101
|
-
|
|
102
86
|
/**
|
|
103
87
|
* A reference to the default render pass descriptor.
|
|
104
88
|
*
|
|
@@ -231,26 +215,66 @@ class WebGPUBackend extends Backend {
|
|
|
231
215
|
|
|
232
216
|
} );
|
|
233
217
|
|
|
234
|
-
const context = ( parameters.context !== undefined ) ? parameters.context : renderer.domElement.getContext( 'webgpu' );
|
|
235
|
-
|
|
236
218
|
this.device = device;
|
|
237
|
-
this.context = context;
|
|
238
|
-
|
|
239
|
-
const alphaMode = parameters.alpha ? 'premultiplied' : 'opaque';
|
|
240
219
|
|
|
241
220
|
this.trackTimestamp = this.trackTimestamp && this.hasFeature( GPUFeatureName.TimestampQuery );
|
|
242
221
|
|
|
243
|
-
this.context.configure( {
|
|
244
|
-
device: this.device,
|
|
245
|
-
format: this.utils.getPreferredCanvasFormat(),
|
|
246
|
-
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC,
|
|
247
|
-
alphaMode: alphaMode
|
|
248
|
-
} );
|
|
249
|
-
|
|
250
222
|
this.updateSize();
|
|
251
223
|
|
|
252
224
|
}
|
|
253
225
|
|
|
226
|
+
/**
|
|
227
|
+
* A reference to the context.
|
|
228
|
+
*
|
|
229
|
+
* @type {?GPUCanvasContext}
|
|
230
|
+
* @default null
|
|
231
|
+
*/
|
|
232
|
+
get context() {
|
|
233
|
+
|
|
234
|
+
const canvasTarget = this.renderer.getCanvasTarget();
|
|
235
|
+
const canvasData = this.get( canvasTarget );
|
|
236
|
+
|
|
237
|
+
let context = canvasData.context;
|
|
238
|
+
|
|
239
|
+
if ( context === undefined ) {
|
|
240
|
+
|
|
241
|
+
const parameters = this.parameters;
|
|
242
|
+
|
|
243
|
+
if ( canvasTarget.isDefaultCanvasTarget === true && parameters.context !== undefined ) {
|
|
244
|
+
|
|
245
|
+
context = parameters.context;
|
|
246
|
+
|
|
247
|
+
} else {
|
|
248
|
+
|
|
249
|
+
context = canvasTarget.domElement.getContext( 'webgpu' );
|
|
250
|
+
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// OffscreenCanvas does not have setAttribute, see #22811
|
|
254
|
+
if ( 'setAttribute' in canvasTarget.domElement ) canvasTarget.domElement.setAttribute( 'data-engine', `three.js r${ REVISION } webgpu` );
|
|
255
|
+
|
|
256
|
+
const alphaMode = parameters.alpha ? 'premultiplied' : 'opaque';
|
|
257
|
+
|
|
258
|
+
const toneMappingMode = parameters.outputType === HalfFloatType ? 'extended' : 'standard';
|
|
259
|
+
|
|
260
|
+
context.configure( {
|
|
261
|
+
device: this.device,
|
|
262
|
+
format: this.utils.getPreferredCanvasFormat(),
|
|
263
|
+
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC,
|
|
264
|
+
alphaMode: alphaMode,
|
|
265
|
+
toneMapping: {
|
|
266
|
+
mode: toneMappingMode
|
|
267
|
+
}
|
|
268
|
+
} );
|
|
269
|
+
|
|
270
|
+
canvasData.context = context;
|
|
271
|
+
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
return context;
|
|
275
|
+
|
|
276
|
+
}
|
|
277
|
+
|
|
254
278
|
/**
|
|
255
279
|
* The coordinate system of the backend.
|
|
256
280
|
*
|
|
@@ -300,19 +324,22 @@ class WebGPUBackend extends Backend {
|
|
|
300
324
|
*/
|
|
301
325
|
_getDefaultRenderPassDescriptor() {
|
|
302
326
|
|
|
303
|
-
|
|
327
|
+
const renderer = this.renderer;
|
|
328
|
+
const canvasTarget = renderer.getCanvasTarget();
|
|
329
|
+
const canvasData = this.get( canvasTarget );
|
|
330
|
+
const samples = renderer.currentSamples;
|
|
304
331
|
|
|
305
|
-
|
|
332
|
+
let descriptor = canvasData.descriptor;
|
|
306
333
|
|
|
307
|
-
|
|
334
|
+
if ( descriptor === undefined || canvasData.samples !== samples ) {
|
|
308
335
|
|
|
309
336
|
descriptor = {
|
|
310
337
|
colorAttachments: [ {
|
|
311
338
|
view: null
|
|
312
|
-
} ]
|
|
339
|
+
} ]
|
|
313
340
|
};
|
|
314
341
|
|
|
315
|
-
if (
|
|
342
|
+
if ( renderer.depth === true || renderer.stencil === true ) {
|
|
316
343
|
|
|
317
344
|
descriptor.depthStencilAttachment = {
|
|
318
345
|
view: this.textureUtils.getDepthBuffer( renderer.depth, renderer.stencil ).createView()
|
|
@@ -322,9 +349,9 @@ class WebGPUBackend extends Backend {
|
|
|
322
349
|
|
|
323
350
|
const colorAttachment = descriptor.colorAttachments[ 0 ];
|
|
324
351
|
|
|
325
|
-
if (
|
|
352
|
+
if ( samples > 0 ) {
|
|
326
353
|
|
|
327
|
-
colorAttachment.view = this.
|
|
354
|
+
colorAttachment.view = this.textureUtils.getColorBuffer().createView();
|
|
328
355
|
|
|
329
356
|
} else {
|
|
330
357
|
|
|
@@ -332,13 +359,14 @@ class WebGPUBackend extends Backend {
|
|
|
332
359
|
|
|
333
360
|
}
|
|
334
361
|
|
|
335
|
-
|
|
362
|
+
canvasData.descriptor = descriptor;
|
|
363
|
+
canvasData.samples = samples;
|
|
336
364
|
|
|
337
365
|
}
|
|
338
366
|
|
|
339
367
|
const colorAttachment = descriptor.colorAttachments[ 0 ];
|
|
340
368
|
|
|
341
|
-
if (
|
|
369
|
+
if ( samples > 0 ) {
|
|
342
370
|
|
|
343
371
|
colorAttachment.resolveTarget = this.context.getCurrentTexture().createView();
|
|
344
372
|
|
|
@@ -384,9 +412,6 @@ class WebGPUBackend extends Backend {
|
|
|
384
412
|
if ( descriptors === undefined ||
|
|
385
413
|
renderTargetData.width !== renderTarget.width ||
|
|
386
414
|
renderTargetData.height !== renderTarget.height ||
|
|
387
|
-
renderTargetData.dimensions !== renderTarget.dimensions ||
|
|
388
|
-
renderTargetData.activeMipmapLevel !== renderContext.activeMipmapLevel ||
|
|
389
|
-
renderTargetData.activeCubeFace !== renderContext.activeCubeFace ||
|
|
390
415
|
renderTargetData.samples !== renderTarget.samples
|
|
391
416
|
) {
|
|
392
417
|
|
|
@@ -394,21 +419,6 @@ class WebGPUBackend extends Backend {
|
|
|
394
419
|
|
|
395
420
|
renderTargetData.descriptors = descriptors;
|
|
396
421
|
|
|
397
|
-
// dispose
|
|
398
|
-
|
|
399
|
-
const onDispose = () => {
|
|
400
|
-
|
|
401
|
-
renderTarget.removeEventListener( 'dispose', onDispose );
|
|
402
|
-
this.delete( renderTarget );
|
|
403
|
-
|
|
404
|
-
};
|
|
405
|
-
|
|
406
|
-
if ( renderTarget.hasEventListener( 'dispose', onDispose ) === false ) {
|
|
407
|
-
|
|
408
|
-
renderTarget.addEventListener( 'dispose', onDispose );
|
|
409
|
-
|
|
410
|
-
}
|
|
411
|
-
|
|
412
422
|
}
|
|
413
423
|
|
|
414
424
|
const cacheKey = renderContext.getCacheKey();
|
|
@@ -528,7 +538,6 @@ class WebGPUBackend extends Backend {
|
|
|
528
538
|
renderTargetData.samples = renderTarget.samples;
|
|
529
539
|
renderTargetData.activeMipmapLevel = renderContext.activeMipmapLevel;
|
|
530
540
|
renderTargetData.activeCubeFace = renderContext.activeCubeFace;
|
|
531
|
-
renderTargetData.dimensions = renderTarget.dimensions;
|
|
532
541
|
|
|
533
542
|
}
|
|
534
543
|
|
|
@@ -581,6 +590,8 @@ class WebGPUBackend extends Backend {
|
|
|
581
590
|
|
|
582
591
|
const renderContextData = this.get( renderContext );
|
|
583
592
|
|
|
593
|
+
//
|
|
594
|
+
|
|
584
595
|
const device = this.device;
|
|
585
596
|
const occlusionQueryCount = renderContext.occlusionQueryCount;
|
|
586
597
|
|
|
@@ -621,7 +632,7 @@ class WebGPUBackend extends Backend {
|
|
|
621
632
|
|
|
622
633
|
}
|
|
623
634
|
|
|
624
|
-
this.initTimestampQuery( renderContext, descriptor );
|
|
635
|
+
this.initTimestampQuery( TimestampQuery.RENDER, this.getTimestampUID( renderContext ), descriptor );
|
|
625
636
|
|
|
626
637
|
descriptor.occlusionQuerySet = occlusionQuerySet;
|
|
627
638
|
|
|
@@ -766,8 +777,7 @@ class WebGPUBackend extends Backend {
|
|
|
766
777
|
|
|
767
778
|
if ( renderContext.scissor ) {
|
|
768
779
|
|
|
769
|
-
|
|
770
|
-
currentPass.setScissorRect( x, y, width, height );
|
|
780
|
+
this.updateScissor( renderContext );
|
|
771
781
|
|
|
772
782
|
}
|
|
773
783
|
|
|
@@ -1127,6 +1137,20 @@ class WebGPUBackend extends Backend {
|
|
|
1127
1137
|
|
|
1128
1138
|
}
|
|
1129
1139
|
|
|
1140
|
+
/**
|
|
1141
|
+
* Updates the scissor with the values from the given render context.
|
|
1142
|
+
*
|
|
1143
|
+
* @param {RenderContext} renderContext - The render context.
|
|
1144
|
+
*/
|
|
1145
|
+
updateScissor( renderContext ) {
|
|
1146
|
+
|
|
1147
|
+
const { currentPass } = this.get( renderContext );
|
|
1148
|
+
const { x, y, width, height } = renderContext.scissorValue;
|
|
1149
|
+
|
|
1150
|
+
currentPass.setScissorRect( x, y, width, height );
|
|
1151
|
+
|
|
1152
|
+
}
|
|
1153
|
+
|
|
1130
1154
|
/**
|
|
1131
1155
|
* Returns the clear color and alpha into a single
|
|
1132
1156
|
* color object.
|
|
@@ -1236,7 +1260,7 @@ class WebGPUBackend extends Backend {
|
|
|
1236
1260
|
|
|
1237
1261
|
}
|
|
1238
1262
|
|
|
1239
|
-
if ( supportsDepth && depthStencilAttachment
|
|
1263
|
+
if ( supportsDepth && depthStencilAttachment ) {
|
|
1240
1264
|
|
|
1241
1265
|
if ( depth ) {
|
|
1242
1266
|
|
|
@@ -1255,7 +1279,7 @@ class WebGPUBackend extends Backend {
|
|
|
1255
1279
|
|
|
1256
1280
|
//
|
|
1257
1281
|
|
|
1258
|
-
if ( supportsStencil && depthStencilAttachment
|
|
1282
|
+
if ( supportsStencil && depthStencilAttachment ) {
|
|
1259
1283
|
|
|
1260
1284
|
if ( stencil ) {
|
|
1261
1285
|
|
|
@@ -1298,12 +1322,13 @@ class WebGPUBackend extends Backend {
|
|
|
1298
1322
|
|
|
1299
1323
|
const groupGPU = this.get( computeGroup );
|
|
1300
1324
|
|
|
1325
|
+
//
|
|
1301
1326
|
|
|
1302
1327
|
const descriptor = {
|
|
1303
1328
|
label: 'computeGroup_' + computeGroup.id
|
|
1304
1329
|
};
|
|
1305
1330
|
|
|
1306
|
-
this.initTimestampQuery( computeGroup, descriptor );
|
|
1331
|
+
this.initTimestampQuery( TimestampQuery.COMPUTE, this.getTimestampUID( computeGroup ), descriptor );
|
|
1307
1332
|
|
|
1308
1333
|
groupGPU.cmdEncoderGPU = this.device.createCommandEncoder( { label: 'computeGroup_' + computeGroup.id } );
|
|
1309
1334
|
|
|
@@ -1318,9 +1343,14 @@ class WebGPUBackend extends Backend {
|
|
|
1318
1343
|
* @param {Node} computeNode - The compute node.
|
|
1319
1344
|
* @param {Array<BindGroup>} bindings - The bindings.
|
|
1320
1345
|
* @param {ComputePipeline} pipeline - The compute pipeline.
|
|
1346
|
+
* @param {number|Array<number>|IndirectStorageBufferAttribute} [dispatchSize=null]
|
|
1347
|
+
* - A single number representing count, or
|
|
1348
|
+
* - An array [x, y, z] representing dispatch size, or
|
|
1349
|
+
* - A IndirectStorageBufferAttribute for indirect dispatch size.
|
|
1321
1350
|
*/
|
|
1322
|
-
compute( computeGroup, computeNode, bindings, pipeline ) {
|
|
1351
|
+
compute( computeGroup, computeNode, bindings, pipeline, dispatchSize = null ) {
|
|
1323
1352
|
|
|
1353
|
+
const computeNodeData = this.get( computeNode );
|
|
1324
1354
|
const { passEncoderGPU } = this.get( computeGroup );
|
|
1325
1355
|
|
|
1326
1356
|
// pipeline
|
|
@@ -1340,29 +1370,73 @@ class WebGPUBackend extends Backend {
|
|
|
1340
1370
|
|
|
1341
1371
|
}
|
|
1342
1372
|
|
|
1343
|
-
|
|
1373
|
+
if ( dispatchSize === null ) {
|
|
1344
1374
|
|
|
1345
|
-
|
|
1375
|
+
dispatchSize = computeNode.count;
|
|
1346
1376
|
|
|
1347
|
-
|
|
1377
|
+
}
|
|
1348
1378
|
|
|
1349
|
-
|
|
1379
|
+
// When the dispatchSize is set with a StorageBuffer from the GPU.
|
|
1350
1380
|
|
|
1351
|
-
if (
|
|
1381
|
+
if ( dispatchSize && typeof dispatchSize === 'object' && dispatchSize.isIndirectStorageBufferAttribute ) {
|
|
1352
1382
|
|
|
1353
|
-
|
|
1354
|
-
dispatchSize.y = Math.ceil( computeNode.dispatchCount / maxComputeWorkgroupsPerDimension );
|
|
1383
|
+
const dispatchBuffer = this.get( dispatchSize ).buffer;
|
|
1355
1384
|
|
|
1356
|
-
|
|
1385
|
+
passEncoderGPU.dispatchWorkgroupsIndirect( dispatchBuffer, 0 );
|
|
1386
|
+
|
|
1387
|
+
return;
|
|
1388
|
+
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1391
|
+
if ( typeof dispatchSize === 'number' ) {
|
|
1392
|
+
|
|
1393
|
+
// If a single number is given, we calculate the dispatch size based on the workgroup size
|
|
1394
|
+
|
|
1395
|
+
const count = dispatchSize;
|
|
1396
|
+
|
|
1397
|
+
if ( computeNodeData.dispatchSize === undefined || computeNodeData.count !== count ) {
|
|
1398
|
+
|
|
1399
|
+
// cache dispatch size to avoid recalculating it every time
|
|
1400
|
+
|
|
1401
|
+
computeNodeData.dispatchSize = [ 0, 1, 1 ];
|
|
1402
|
+
computeNodeData.count = count;
|
|
1403
|
+
|
|
1404
|
+
const workgroupSize = computeNode.workgroupSize;
|
|
1405
|
+
|
|
1406
|
+
let size = workgroupSize[ 0 ];
|
|
1407
|
+
|
|
1408
|
+
for ( let i = 1; i < workgroupSize.length; i ++ )
|
|
1409
|
+
size *= workgroupSize[ i ];
|
|
1410
|
+
|
|
1411
|
+
const dispatchCount = Math.ceil( count / size );
|
|
1412
|
+
|
|
1413
|
+
//
|
|
1357
1414
|
|
|
1358
|
-
|
|
1415
|
+
const maxComputeWorkgroupsPerDimension = this.device.limits.maxComputeWorkgroupsPerDimension;
|
|
1416
|
+
|
|
1417
|
+
dispatchSize = [ dispatchCount, 1, 1 ];
|
|
1418
|
+
|
|
1419
|
+
if ( dispatchCount > maxComputeWorkgroupsPerDimension ) {
|
|
1420
|
+
|
|
1421
|
+
dispatchSize[ 0 ] = Math.min( dispatchCount, maxComputeWorkgroupsPerDimension );
|
|
1422
|
+
dispatchSize[ 1 ] = Math.ceil( dispatchCount / maxComputeWorkgroupsPerDimension );
|
|
1423
|
+
|
|
1424
|
+
}
|
|
1425
|
+
|
|
1426
|
+
computeNodeData.dispatchSize = dispatchSize;
|
|
1427
|
+
|
|
1428
|
+
}
|
|
1429
|
+
|
|
1430
|
+
dispatchSize = computeNodeData.dispatchSize;
|
|
1359
1431
|
|
|
1360
1432
|
}
|
|
1361
1433
|
|
|
1434
|
+
//
|
|
1435
|
+
|
|
1362
1436
|
passEncoderGPU.dispatchWorkgroups(
|
|
1363
|
-
dispatchSize
|
|
1364
|
-
dispatchSize
|
|
1365
|
-
dispatchSize
|
|
1437
|
+
dispatchSize[ 0 ],
|
|
1438
|
+
dispatchSize[ 1 ] || 1,
|
|
1439
|
+
dispatchSize[ 2 ] || 1
|
|
1366
1440
|
);
|
|
1367
1441
|
|
|
1368
1442
|
}
|
|
@@ -1383,19 +1457,6 @@ class WebGPUBackend extends Backend {
|
|
|
1383
1457
|
|
|
1384
1458
|
}
|
|
1385
1459
|
|
|
1386
|
-
/**
|
|
1387
|
-
* Can be used to synchronize CPU operations with GPU tasks. So when this method is called,
|
|
1388
|
-
* the CPU waits for the GPU to complete its operation (e.g. a compute task).
|
|
1389
|
-
*
|
|
1390
|
-
* @async
|
|
1391
|
-
* @return {Promise} A Promise that resolves when synchronization has been finished.
|
|
1392
|
-
*/
|
|
1393
|
-
async waitForGPU() {
|
|
1394
|
-
|
|
1395
|
-
await this.device.queue.onSubmittedWorkDone();
|
|
1396
|
-
|
|
1397
|
-
}
|
|
1398
|
-
|
|
1399
1460
|
// render object
|
|
1400
1461
|
|
|
1401
1462
|
/**
|
|
@@ -1409,7 +1470,10 @@ class WebGPUBackend extends Backend {
|
|
|
1409
1470
|
const { object, material, context, pipeline } = renderObject;
|
|
1410
1471
|
const bindings = renderObject.getBindings();
|
|
1411
1472
|
const renderContextData = this.get( context );
|
|
1412
|
-
const
|
|
1473
|
+
const pipelineData = this.get( pipeline );
|
|
1474
|
+
const pipelineGPU = pipelineData.pipeline;
|
|
1475
|
+
|
|
1476
|
+
if ( pipelineData.error === true ) return;
|
|
1413
1477
|
|
|
1414
1478
|
const index = renderObject.getIndex();
|
|
1415
1479
|
const hasIndex = ( index !== null );
|
|
@@ -1504,7 +1568,7 @@ class WebGPUBackend extends Backend {
|
|
|
1504
1568
|
if ( drawInstances !== null ) {
|
|
1505
1569
|
|
|
1506
1570
|
// @deprecated, r174
|
|
1507
|
-
warnOnce( '
|
|
1571
|
+
warnOnce( 'WebGPUBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
|
|
1508
1572
|
|
|
1509
1573
|
}
|
|
1510
1574
|
|
|
@@ -1768,6 +1832,11 @@ class WebGPUBackend extends Backend {
|
|
|
1768
1832
|
const utils = this.utils;
|
|
1769
1833
|
const renderContext = renderObject.context;
|
|
1770
1834
|
|
|
1835
|
+
// meshes with negative scale have a different frontFace render pipeline
|
|
1836
|
+
// descriptor value so the following must be honored in the cache key
|
|
1837
|
+
|
|
1838
|
+
const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );
|
|
1839
|
+
|
|
1771
1840
|
return [
|
|
1772
1841
|
material.transparent, material.blending, material.premultipliedAlpha,
|
|
1773
1842
|
material.blendSrc, material.blendDst, material.blendEquation,
|
|
@@ -1778,6 +1847,7 @@ class WebGPUBackend extends Backend {
|
|
|
1778
1847
|
material.stencilFail, material.stencilZFail, material.stencilZPass,
|
|
1779
1848
|
material.stencilFuncMask, material.stencilWriteMask,
|
|
1780
1849
|
material.side,
|
|
1850
|
+
frontFaceCW,
|
|
1781
1851
|
utils.getSampleCountRenderContext( renderContext ),
|
|
1782
1852
|
utils.getCurrentColorSpace( renderContext ), utils.getCurrentColorFormat( renderContext ), utils.getCurrentDepthStencilFormat( renderContext ),
|
|
1783
1853
|
utils.getPrimitiveTopology( object, material ),
|
|
@@ -1790,24 +1860,14 @@ class WebGPUBackend extends Backend {
|
|
|
1790
1860
|
// textures
|
|
1791
1861
|
|
|
1792
1862
|
/**
|
|
1793
|
-
*
|
|
1863
|
+
* Updates a GPU sampler for the given texture.
|
|
1794
1864
|
*
|
|
1795
|
-
* @param {Texture} texture - The texture to
|
|
1865
|
+
* @param {Texture} texture - The texture to update the sampler for.
|
|
1866
|
+
* @return {string} The current sampler key.
|
|
1796
1867
|
*/
|
|
1797
|
-
|
|
1868
|
+
updateSampler( texture ) {
|
|
1798
1869
|
|
|
1799
|
-
this.textureUtils.
|
|
1800
|
-
|
|
1801
|
-
}
|
|
1802
|
-
|
|
1803
|
-
/**
|
|
1804
|
-
* Destroys the GPU sampler for the given texture.
|
|
1805
|
-
*
|
|
1806
|
-
* @param {Texture} texture - The texture to destroy the sampler for.
|
|
1807
|
-
*/
|
|
1808
|
-
destroySampler( texture ) {
|
|
1809
|
-
|
|
1810
|
-
this.textureUtils.destroySampler( texture );
|
|
1870
|
+
return this.textureUtils.updateSampler( texture );
|
|
1811
1871
|
|
|
1812
1872
|
}
|
|
1813
1873
|
|
|
@@ -1816,10 +1876,11 @@ class WebGPUBackend extends Backend {
|
|
|
1816
1876
|
* as a placeholder until the actual texture is ready for usage.
|
|
1817
1877
|
*
|
|
1818
1878
|
* @param {Texture} texture - The texture to create a default texture for.
|
|
1879
|
+
* @return {boolean} Whether the sampler has been updated or not.
|
|
1819
1880
|
*/
|
|
1820
1881
|
createDefaultTexture( texture ) {
|
|
1821
1882
|
|
|
1822
|
-
this.textureUtils.createDefaultTexture( texture );
|
|
1883
|
+
return this.textureUtils.createDefaultTexture( texture );
|
|
1823
1884
|
|
|
1824
1885
|
}
|
|
1825
1886
|
|
|
@@ -1862,10 +1923,11 @@ class WebGPUBackend extends Backend {
|
|
|
1862
1923
|
* Destroys the GPU data for the given texture object.
|
|
1863
1924
|
*
|
|
1864
1925
|
* @param {Texture} texture - The texture.
|
|
1926
|
+
* @param {boolean} [isDefaultTexture=false] - Whether the texture uses a default GPU texture or not.
|
|
1865
1927
|
*/
|
|
1866
|
-
destroyTexture( texture ) {
|
|
1928
|
+
destroyTexture( texture, isDefaultTexture = false ) {
|
|
1867
1929
|
|
|
1868
|
-
this.textureUtils.destroyTexture( texture );
|
|
1930
|
+
this.textureUtils.destroyTexture( texture, isDefaultTexture );
|
|
1869
1931
|
|
|
1870
1932
|
}
|
|
1871
1933
|
|
|
@@ -1890,15 +1952,14 @@ class WebGPUBackend extends Backend {
|
|
|
1890
1952
|
/**
|
|
1891
1953
|
* Inits a time stamp query for the given render context.
|
|
1892
1954
|
*
|
|
1893
|
-
* @param {
|
|
1955
|
+
* @param {string} type - The type of the timestamp query (e.g. 'render', 'compute').
|
|
1956
|
+
* @param {number} uid - Unique id for the context (e.g. render context id).
|
|
1894
1957
|
* @param {Object} descriptor - The query descriptor.
|
|
1895
1958
|
*/
|
|
1896
|
-
initTimestampQuery(
|
|
1959
|
+
initTimestampQuery( type, uid, descriptor ) {
|
|
1897
1960
|
|
|
1898
1961
|
if ( ! this.trackTimestamp ) return;
|
|
1899
1962
|
|
|
1900
|
-
const type = renderContext.isComputeNode ? 'compute' : 'render';
|
|
1901
|
-
|
|
1902
1963
|
if ( ! this.timestampQueryPool[ type ] ) {
|
|
1903
1964
|
|
|
1904
1965
|
// TODO: Variable maxQueries?
|
|
@@ -1908,13 +1969,13 @@ class WebGPUBackend extends Backend {
|
|
|
1908
1969
|
|
|
1909
1970
|
const timestampQueryPool = this.timestampQueryPool[ type ];
|
|
1910
1971
|
|
|
1911
|
-
const baseOffset = timestampQueryPool.allocateQueriesForContext(
|
|
1972
|
+
const baseOffset = timestampQueryPool.allocateQueriesForContext( uid );
|
|
1912
1973
|
|
|
1913
1974
|
descriptor.timestampWrites = {
|
|
1914
1975
|
querySet: timestampQueryPool.querySet,
|
|
1915
1976
|
beginningOfPassWriteIndex: baseOffset,
|
|
1916
1977
|
endOfPassWriteIndex: baseOffset + 1,
|
|
1917
|
-
|
|
1978
|
+
};
|
|
1918
1979
|
|
|
1919
1980
|
}
|
|
1920
1981
|
|
|
@@ -2092,7 +2153,15 @@ class WebGPUBackend extends Backend {
|
|
|
2092
2153
|
*/
|
|
2093
2154
|
createIndexAttribute( attribute ) {
|
|
2094
2155
|
|
|
2095
|
-
|
|
2156
|
+
let usage = GPUBufferUsage.INDEX | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST;
|
|
2157
|
+
|
|
2158
|
+
if ( attribute.isStorageBufferAttribute || attribute.isStorageInstancedBufferAttribute ) {
|
|
2159
|
+
|
|
2160
|
+
usage |= GPUBufferUsage.STORAGE;
|
|
2161
|
+
|
|
2162
|
+
}
|
|
2163
|
+
|
|
2164
|
+
this.attributeUtils.createAttribute( attribute, usage );
|
|
2096
2165
|
|
|
2097
2166
|
}
|
|
2098
2167
|
|
|
@@ -2158,8 +2227,7 @@ class WebGPUBackend extends Backend {
|
|
|
2158
2227
|
*/
|
|
2159
2228
|
updateSize() {
|
|
2160
2229
|
|
|
2161
|
-
this.
|
|
2162
|
-
this.defaultRenderPassdescriptor = null;
|
|
2230
|
+
this.delete( this.renderer.getCanvasTarget() );
|
|
2163
2231
|
|
|
2164
2232
|
}
|
|
2165
2233
|
|
|
@@ -2177,13 +2245,15 @@ class WebGPUBackend extends Backend {
|
|
|
2177
2245
|
}
|
|
2178
2246
|
|
|
2179
2247
|
/**
|
|
2180
|
-
* Checks if the given feature is supported
|
|
2248
|
+
* Checks if the given feature is supported by the backend.
|
|
2181
2249
|
*
|
|
2182
2250
|
* @param {string} name - The feature's name.
|
|
2183
2251
|
* @return {boolean} Whether the feature is supported or not.
|
|
2184
2252
|
*/
|
|
2185
2253
|
hasFeature( name ) {
|
|
2186
2254
|
|
|
2255
|
+
if ( GPUFeatureMap[ name ] !== undefined ) name = GPUFeatureMap[ name ];
|
|
2256
|
+
|
|
2187
2257
|
return this.device.features.has( name );
|
|
2188
2258
|
|
|
2189
2259
|
}
|
|
@@ -2322,7 +2392,7 @@ class WebGPUBackend extends Backend {
|
|
|
2322
2392
|
|
|
2323
2393
|
if ( sourceGPU.format !== destinationGPU.format ) {
|
|
2324
2394
|
|
|
2325
|
-
|
|
2395
|
+
error( 'WebGPUBackend: copyFramebufferToTexture: Source and destination formats do not match.', sourceGPU.format, destinationGPU.format );
|
|
2326
2396
|
|
|
2327
2397
|
return;
|
|
2328
2398
|
|
|
@@ -2356,6 +2426,15 @@ class WebGPUBackend extends Backend {
|
|
|
2356
2426
|
]
|
|
2357
2427
|
);
|
|
2358
2428
|
|
|
2429
|
+
// mipmaps must be genereated with the same encoder otherwise the copied texture data
|
|
2430
|
+
// might be out-of-sync, see #31768
|
|
2431
|
+
|
|
2432
|
+
if ( texture.generateMipmaps ) {
|
|
2433
|
+
|
|
2434
|
+
this.textureUtils.generateMipmaps( texture, encoder );
|
|
2435
|
+
|
|
2436
|
+
}
|
|
2437
|
+
|
|
2359
2438
|
if ( renderContextData.currentPass ) {
|
|
2360
2439
|
|
|
2361
2440
|
const { descriptor } = renderContextData;
|
|
@@ -2380,9 +2459,7 @@ class WebGPUBackend extends Backend {
|
|
|
2380
2459
|
|
|
2381
2460
|
if ( renderContext.scissor ) {
|
|
2382
2461
|
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
renderContextData.currentPass.setScissorRect( x, y, width, height );
|
|
2462
|
+
this.updateScissor( renderContext );
|
|
2386
2463
|
|
|
2387
2464
|
}
|
|
2388
2465
|
|
|
@@ -2392,11 +2469,11 @@ class WebGPUBackend extends Backend {
|
|
|
2392
2469
|
|
|
2393
2470
|
}
|
|
2394
2471
|
|
|
2395
|
-
|
|
2472
|
+
}
|
|
2396
2473
|
|
|
2397
|
-
|
|
2474
|
+
dispose() {
|
|
2398
2475
|
|
|
2399
|
-
|
|
2476
|
+
this.textureUtils.dispose();
|
|
2400
2477
|
|
|
2401
2478
|
}
|
|
2402
2479
|
|
|
@@ -2,6 +2,7 @@ import Renderer from '../common/Renderer.js';
|
|
|
2
2
|
import WebGLBackend from '../webgl-fallback/WebGLBackend.js';
|
|
3
3
|
import WebGPUBackend from './WebGPUBackend.js';
|
|
4
4
|
import BasicNodeLibrary from './nodes/BasicNodeLibrary.js';
|
|
5
|
+
import { warn } from '../../utils.js';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* This alternative version of {@link WebGPURenderer} only supports node materials.
|
|
@@ -31,7 +32,7 @@ class WebGPURenderer extends Renderer {
|
|
|
31
32
|
|
|
32
33
|
parameters.getFallback = () => {
|
|
33
34
|
|
|
34
|
-
|
|
35
|
+
warn( 'WebGPURenderer: WebGPU is not available, running under WebGL2 backend.' );
|
|
35
36
|
|
|
36
37
|
return new WebGLBackend( parameters );
|
|
37
38
|
|
|
@@ -2,13 +2,14 @@ import Renderer from '../common/Renderer.js';
|
|
|
2
2
|
import WebGLBackend from '../webgl-fallback/WebGLBackend.js';
|
|
3
3
|
import WebGPUBackend from './WebGPUBackend.js';
|
|
4
4
|
import StandardNodeLibrary from './nodes/StandardNodeLibrary.js';
|
|
5
|
+
import { warn } from '../../utils.js';
|
|
5
6
|
/*
|
|
6
7
|
const debugHandler = {
|
|
7
8
|
|
|
8
9
|
get: function ( target, name ) {
|
|
9
10
|
|
|
10
11
|
// Add |update
|
|
11
|
-
if ( /^(create|destroy)/.test( name ) )
|
|
12
|
+
if ( /^(create|destroy)/.test( name ) ) log( 'WebGPUBackend.' + name );
|
|
12
13
|
|
|
13
14
|
return target[ name ];
|
|
14
15
|
|
|
@@ -62,7 +63,7 @@ class WebGPURenderer extends Renderer {
|
|
|
62
63
|
|
|
63
64
|
parameters.getFallback = () => {
|
|
64
65
|
|
|
65
|
-
|
|
66
|
+
warn( 'WebGPURenderer: WebGPU is not available, running under WebGL2 backend.' );
|
|
66
67
|
|
|
67
68
|
return new WebGLBackend( parameters );
|
|
68
69
|
|