super-three 0.171.0 → 0.173.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 +1 -1
- package/build/three.cjs +594 -427
- package/build/three.core.js +515 -81
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +79 -350
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +20 -7
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +29362 -3427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +29361 -3427
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +9 -7
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +48 -37
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +34 -29
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +22 -4
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -2
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
- package/examples/jsm/misc/Volume.js +27 -17
- package/examples/jsm/misc/VolumeSlice.js +7 -5
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +29 -24
- package/examples/jsm/physics/JoltPhysics.js +7 -7
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +5 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +2 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +4 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +18 -5
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/ArrayCamera.js +1 -0
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +6 -1
- package/src/core/BufferAttribute.js +4 -0
- package/src/core/EventDispatcher.js +8 -6
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/ImageUtils.js +1 -11
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +476 -23
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +121 -10
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
- package/src/nodes/Nodes.js +5 -6
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +47 -6
- package/src/nodes/accessors/BatchNode.js +42 -6
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +113 -3
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +306 -12
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +65 -5
- package/src/nodes/accessors/Object3DNode.js +101 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +56 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
- package/src/nodes/accessors/ReferenceNode.js +201 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +209 -8
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +38 -2
- package/src/nodes/accessors/Texture3DNode.js +91 -7
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +316 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +231 -25
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +80 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/ArrayNode.js +125 -0
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +350 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1166 -26
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +152 -1
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +51 -10
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +98 -1
- package/src/nodes/core/StructNode.js +121 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +105 -6
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +146 -7
- package/src/nodes/core/VaryingNode.js +100 -3
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BlendModes.js +88 -1
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +300 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +96 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +110 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +241 -35
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +78 -4
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +627 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +329 -18
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +3 -2
- package/src/nodes/tsl/TSLCore.js +22 -2
- package/src/nodes/utils/ArrayElementNode.js +39 -3
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +82 -2
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +54 -0
- package/src/nodes/utils/Timer.js +40 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +2 -3
- package/src/objects/ClippingGroup.js +49 -0
- package/src/objects/Line.js +6 -6
- package/src/renderers/WebGLRenderer.js +30 -4
- package/src/renderers/common/Animation.js +85 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +502 -44
- package/src/renderers/common/Background.js +48 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +108 -15
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +91 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +34 -6
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +99 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +201 -2
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +40 -3
- package/src/renderers/common/RenderObject.js +400 -17
- package/src/renderers/common/RenderObjects.js +103 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1170 -86
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +120 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +97 -7
- package/src/renderers/common/TimestampQueryPool.js +39 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +141 -2
- package/src/renderers/common/XRManager.js +1193 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +76 -10
- package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +243 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +352 -78
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl/WebGLBackground.js +4 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +578 -164
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
- package/src/renderers/webgpu/WebGPURenderer.js +36 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +19 -2
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/src/textures/VideoFrameTexture.js +35 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/objects/InstancedPoints.js +0 -19
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -58,6 +58,7 @@ const wgslTypeLib = {
|
|
|
58
58
|
'texture_multisampled_2d': 'cubeTexture',
|
|
59
59
|
|
|
60
60
|
'texture_depth_2d': 'depthTexture',
|
|
61
|
+
'texture_depth_multisampled_2d': 'depthTexture',
|
|
61
62
|
|
|
62
63
|
'texture_3d': 'texture3D',
|
|
63
64
|
|
|
@@ -140,8 +141,18 @@ const parse = ( source ) => {
|
|
|
140
141
|
|
|
141
142
|
};
|
|
142
143
|
|
|
144
|
+
/**
|
|
145
|
+
* This class represents a WSL node function.
|
|
146
|
+
*
|
|
147
|
+
* @augments NodeFunction
|
|
148
|
+
*/
|
|
143
149
|
class WGSLNodeFunction extends NodeFunction {
|
|
144
150
|
|
|
151
|
+
/**
|
|
152
|
+
* Constructs a new WGSL node function.
|
|
153
|
+
*
|
|
154
|
+
* @param {String} source - The WGSL source.
|
|
155
|
+
*/
|
|
145
156
|
constructor( source ) {
|
|
146
157
|
|
|
147
158
|
const { type, inputs, name, inputsCode, blockCode, outputType } = parse( source );
|
|
@@ -154,6 +165,12 @@ class WGSLNodeFunction extends NodeFunction {
|
|
|
154
165
|
|
|
155
166
|
}
|
|
156
167
|
|
|
168
|
+
/**
|
|
169
|
+
* This method returns the WGSL code of the node function.
|
|
170
|
+
*
|
|
171
|
+
* @param {String} [name=this.name] - The function's name.
|
|
172
|
+
* @return {String} The shader code.
|
|
173
|
+
*/
|
|
157
174
|
getCode( name = this.name ) {
|
|
158
175
|
|
|
159
176
|
const outputType = this.outputType !== 'void' ? '-> ' + this.outputType : '';
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import NodeParser from '../../../nodes/core/NodeParser.js';
|
|
2
2
|
import WGSLNodeFunction from './WGSLNodeFunction.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* A WGSL node parser.
|
|
6
|
+
*
|
|
7
|
+
* @augments NodeParser
|
|
8
|
+
*/
|
|
4
9
|
class WGSLNodeParser extends NodeParser {
|
|
5
10
|
|
|
11
|
+
/**
|
|
12
|
+
* The method parses the given WGSL code an returns a node function.
|
|
13
|
+
*
|
|
14
|
+
* @param {String} source - The WGSL code.
|
|
15
|
+
* @return {WGSLNodeFunction} A node function.
|
|
16
|
+
*/
|
|
6
17
|
parseFunction( source ) {
|
|
7
18
|
|
|
8
19
|
return new WGSLNodeFunction( source );
|
|
@@ -24,14 +24,35 @@ const typeArraysToVertexFormatPrefixForItemSize1 = new Map( [
|
|
|
24
24
|
[ Float32Array, 'float32' ]
|
|
25
25
|
] );
|
|
26
26
|
|
|
27
|
+
/**
|
|
28
|
+
* A WebGPU backend utility module for managing shader attributes.
|
|
29
|
+
*
|
|
30
|
+
* @private
|
|
31
|
+
*/
|
|
27
32
|
class WebGPUAttributeUtils {
|
|
28
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Constructs a new utility object.
|
|
36
|
+
*
|
|
37
|
+
* @param {WebGPUBackend} backend - The WebGPU backend.
|
|
38
|
+
*/
|
|
29
39
|
constructor( backend ) {
|
|
30
40
|
|
|
41
|
+
/**
|
|
42
|
+
* A reference to the WebGPU backend.
|
|
43
|
+
*
|
|
44
|
+
* @type {WebGPUBackend}
|
|
45
|
+
*/
|
|
31
46
|
this.backend = backend;
|
|
32
47
|
|
|
33
48
|
}
|
|
34
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Creates the GPU buffer for the given buffer attribute.
|
|
52
|
+
*
|
|
53
|
+
* @param {BufferAttribute} attribute - The buffer attribute.
|
|
54
|
+
* @param {GPUBufferUsage} usage - A flag that indicates how the buffer may be used after its creation.
|
|
55
|
+
*/
|
|
35
56
|
createAttribute( attribute, usage ) {
|
|
36
57
|
|
|
37
58
|
const bufferAttribute = this._getBufferAttribute( attribute );
|
|
@@ -48,16 +69,27 @@ class WebGPUAttributeUtils {
|
|
|
48
69
|
let array = bufferAttribute.array;
|
|
49
70
|
|
|
50
71
|
// patch for INT16 and UINT16
|
|
51
|
-
if ( attribute.normalized === false
|
|
72
|
+
if ( attribute.normalized === false ) {
|
|
52
73
|
|
|
53
|
-
|
|
54
|
-
for ( let i = 0; i < array.length; i ++ ) {
|
|
74
|
+
if ( array.constructor === Int16Array ) {
|
|
55
75
|
|
|
56
|
-
|
|
76
|
+
array = new Int32Array( array );
|
|
57
77
|
|
|
58
|
-
}
|
|
78
|
+
} else if ( array.constructor === Uint16Array ) {
|
|
79
|
+
|
|
80
|
+
array = new Uint32Array( array );
|
|
81
|
+
|
|
82
|
+
if ( usage & GPUBufferUsage.INDEX ) {
|
|
83
|
+
|
|
84
|
+
for ( let i = 0; i < array.length; i ++ ) {
|
|
59
85
|
|
|
60
|
-
|
|
86
|
+
if ( array[ i ] === 0xffff ) array[ i ] = 0xffffffff; // use correct primitive restart index
|
|
87
|
+
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
}
|
|
61
93
|
|
|
62
94
|
}
|
|
63
95
|
|
|
@@ -98,6 +130,11 @@ class WebGPUAttributeUtils {
|
|
|
98
130
|
|
|
99
131
|
}
|
|
100
132
|
|
|
133
|
+
/**
|
|
134
|
+
* Updates the GPU buffer of the given buffer attribute.
|
|
135
|
+
*
|
|
136
|
+
* @param {BufferAttribute} attribute - The buffer attribute.
|
|
137
|
+
*/
|
|
101
138
|
updateAttribute( attribute ) {
|
|
102
139
|
|
|
103
140
|
const bufferAttribute = this._getBufferAttribute( attribute );
|
|
@@ -149,6 +186,13 @@ class WebGPUAttributeUtils {
|
|
|
149
186
|
|
|
150
187
|
}
|
|
151
188
|
|
|
189
|
+
/**
|
|
190
|
+
* This method creates the vertex buffer layout data which are
|
|
191
|
+
* require when creating a render pipeline for the given render object.
|
|
192
|
+
*
|
|
193
|
+
* @param {RenderObject} renderObject - The render object.
|
|
194
|
+
* @return {Array<Object>} An array holding objects which describe the vertex buffer layout.
|
|
195
|
+
*/
|
|
152
196
|
createShaderVertexBuffers( renderObject ) {
|
|
153
197
|
|
|
154
198
|
const attributes = renderObject.getAttributes();
|
|
@@ -210,6 +254,11 @@ class WebGPUAttributeUtils {
|
|
|
210
254
|
|
|
211
255
|
}
|
|
212
256
|
|
|
257
|
+
/**
|
|
258
|
+
* Destroys the GPU buffer of the given buffer attribute.
|
|
259
|
+
*
|
|
260
|
+
* @param {BufferAttribute} attribute - The buffer attribute.
|
|
261
|
+
*/
|
|
213
262
|
destroyAttribute( attribute ) {
|
|
214
263
|
|
|
215
264
|
const backend = this.backend;
|
|
@@ -221,24 +270,32 @@ class WebGPUAttributeUtils {
|
|
|
221
270
|
|
|
222
271
|
}
|
|
223
272
|
|
|
273
|
+
/**
|
|
274
|
+
* This method performs a readback operation by moving buffer data from
|
|
275
|
+
* a storage buffer attribute from the GPU to the CPU.
|
|
276
|
+
*
|
|
277
|
+
* @async
|
|
278
|
+
* @param {StorageBufferAttribute} attribute - The storage buffer attribute.
|
|
279
|
+
* @return {Promise<ArrayBuffer>} A promise that resolves with the buffer data when the data are ready.
|
|
280
|
+
*/
|
|
224
281
|
async getArrayBufferAsync( attribute ) {
|
|
225
282
|
|
|
226
283
|
const backend = this.backend;
|
|
227
284
|
const device = backend.device;
|
|
228
285
|
|
|
229
286
|
const data = backend.get( this._getBufferAttribute( attribute ) );
|
|
230
|
-
|
|
231
287
|
const bufferGPU = data.buffer;
|
|
232
288
|
const size = bufferGPU.size;
|
|
233
289
|
|
|
234
290
|
const readBufferGPU = device.createBuffer( {
|
|
235
|
-
label: attribute.name
|
|
291
|
+
label: `${ attribute.name }_readback`,
|
|
236
292
|
size,
|
|
237
293
|
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ
|
|
238
294
|
} );
|
|
239
295
|
|
|
240
|
-
|
|
241
|
-
|
|
296
|
+
const cmdEncoder = device.createCommandEncoder( {
|
|
297
|
+
label: `readback_encoder_${ attribute.name }`
|
|
298
|
+
} );
|
|
242
299
|
|
|
243
300
|
cmdEncoder.copyBufferToBuffer(
|
|
244
301
|
bufferGPU,
|
|
@@ -248,8 +305,6 @@ class WebGPUAttributeUtils {
|
|
|
248
305
|
size
|
|
249
306
|
);
|
|
250
307
|
|
|
251
|
-
readBufferGPU.unmap();
|
|
252
|
-
|
|
253
308
|
const gpuCommands = cmdEncoder.finish();
|
|
254
309
|
device.queue.submit( [ gpuCommands ] );
|
|
255
310
|
|
|
@@ -257,10 +312,21 @@ class WebGPUAttributeUtils {
|
|
|
257
312
|
|
|
258
313
|
const arrayBuffer = readBufferGPU.getMappedRange();
|
|
259
314
|
|
|
260
|
-
|
|
315
|
+
const dstBuffer = new attribute.array.constructor( arrayBuffer.slice( 0 ) );
|
|
316
|
+
|
|
317
|
+
readBufferGPU.unmap();
|
|
318
|
+
|
|
319
|
+
return dstBuffer.buffer;
|
|
261
320
|
|
|
262
321
|
}
|
|
263
322
|
|
|
323
|
+
/**
|
|
324
|
+
* Returns the vertex format of the given buffer attribute.
|
|
325
|
+
*
|
|
326
|
+
* @private
|
|
327
|
+
* @param {BufferAttribute} geometryAttribute - The buffer attribute.
|
|
328
|
+
* @return {String} The vertex format (e.g. 'float32x3').
|
|
329
|
+
*/
|
|
264
330
|
_getVertexFormat( geometryAttribute ) {
|
|
265
331
|
|
|
266
332
|
const { itemSize, normalized } = geometryAttribute;
|
|
@@ -269,7 +335,7 @@ class WebGPUAttributeUtils {
|
|
|
269
335
|
|
|
270
336
|
let format;
|
|
271
337
|
|
|
272
|
-
if ( itemSize
|
|
338
|
+
if ( itemSize === 1 ) {
|
|
273
339
|
|
|
274
340
|
format = typeArraysToVertexFormatPrefixForItemSize1.get( ArrayType );
|
|
275
341
|
|
|
@@ -306,12 +372,27 @@ class WebGPUAttributeUtils {
|
|
|
306
372
|
|
|
307
373
|
}
|
|
308
374
|
|
|
375
|
+
/**
|
|
376
|
+
* Returns `true` if the given array is a typed array.
|
|
377
|
+
*
|
|
378
|
+
* @private
|
|
379
|
+
* @param {Any} array - The array.
|
|
380
|
+
* @return {Boolean} Whether the given array is a typed array or not.
|
|
381
|
+
*/
|
|
309
382
|
_isTypedArray( array ) {
|
|
310
383
|
|
|
311
384
|
return ArrayBuffer.isView( array ) && ! ( array instanceof DataView );
|
|
312
385
|
|
|
313
386
|
}
|
|
314
387
|
|
|
388
|
+
/**
|
|
389
|
+
* Utility method for handling interleaved buffer attributes correctly.
|
|
390
|
+
* To process them, their `InterleavedBuffer` is returned.
|
|
391
|
+
*
|
|
392
|
+
* @private
|
|
393
|
+
* @param {BufferAttribute} attribute - The attribute.
|
|
394
|
+
* @return {BufferAttribute|InterleavedBuffer}
|
|
395
|
+
*/
|
|
315
396
|
_getBufferAttribute( attribute ) {
|
|
316
397
|
|
|
317
398
|
if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;
|
|
@@ -5,15 +5,47 @@ import {
|
|
|
5
5
|
import { FloatType, IntType, UnsignedIntType } from '../../../constants.js';
|
|
6
6
|
import { NodeAccess } from '../../../nodes/core/constants.js';
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* A WebGPU backend utility module for managing bindings.
|
|
10
|
+
*
|
|
11
|
+
* When reading the documentation it's helpful to keep in mind that
|
|
12
|
+
* all class definitions starting with 'GPU*' are modules from the
|
|
13
|
+
* WebGPU API. So for example `BindGroup` is a class from the engine
|
|
14
|
+
* whereas `GPUBindGroup` is a class from WebGPU.
|
|
15
|
+
*
|
|
16
|
+
* @private
|
|
17
|
+
*/
|
|
8
18
|
class WebGPUBindingUtils {
|
|
9
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new utility object.
|
|
22
|
+
*
|
|
23
|
+
* @param {WebGPUBackend} backend - The WebGPU backend.
|
|
24
|
+
*/
|
|
10
25
|
constructor( backend ) {
|
|
11
26
|
|
|
27
|
+
/**
|
|
28
|
+
* A reference to the WebGPU backend.
|
|
29
|
+
*
|
|
30
|
+
* @type {WebGPUBackend}
|
|
31
|
+
*/
|
|
12
32
|
this.backend = backend;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* A cache for managing bind group layouts.
|
|
36
|
+
*
|
|
37
|
+
* @type {WeakMap<Array<Binding>,GPUBindGroupLayout>}
|
|
38
|
+
*/
|
|
13
39
|
this.bindGroupLayoutCache = new WeakMap();
|
|
14
40
|
|
|
15
41
|
}
|
|
16
42
|
|
|
43
|
+
/**
|
|
44
|
+
* Creates a GPU bind group layout for the given bind group.
|
|
45
|
+
*
|
|
46
|
+
* @param {BindGroup} bindGroup - The bind group.
|
|
47
|
+
* @return {GPUBindGroupLayout} The GPU bind group layout.
|
|
48
|
+
*/
|
|
17
49
|
createBindingsLayout( bindGroup ) {
|
|
18
50
|
|
|
19
51
|
const backend = this.backend;
|
|
@@ -107,10 +139,18 @@ class WebGPUBindingUtils {
|
|
|
107
139
|
|
|
108
140
|
const texture = {}; // GPUTextureBindingLayout
|
|
109
141
|
|
|
110
|
-
|
|
142
|
+
const { primarySamples } = backend.utils.getTextureSampleData( binding.texture );
|
|
143
|
+
|
|
144
|
+
if ( primarySamples > 1 ) {
|
|
111
145
|
|
|
112
146
|
texture.multisampled = true;
|
|
113
147
|
|
|
148
|
+
if ( ! binding.texture.isDepthTexture ) {
|
|
149
|
+
|
|
150
|
+
texture.sampleType = GPUTextureSampleType.UnfilterableFloat;
|
|
151
|
+
|
|
152
|
+
}
|
|
153
|
+
|
|
114
154
|
}
|
|
115
155
|
|
|
116
156
|
if ( binding.texture.isDepthTexture ) {
|
|
@@ -175,6 +215,14 @@ class WebGPUBindingUtils {
|
|
|
175
215
|
|
|
176
216
|
}
|
|
177
217
|
|
|
218
|
+
/**
|
|
219
|
+
* Creates bindings from the given bind group definition.
|
|
220
|
+
*
|
|
221
|
+
* @param {BindGroup} bindGroup - The bind group.
|
|
222
|
+
* @param {Array<BindGroup>} bindings - Array of bind groups.
|
|
223
|
+
* @param {Number} cacheIndex - The cache index.
|
|
224
|
+
* @param {Number} version - The version.
|
|
225
|
+
*/
|
|
178
226
|
createBindings( bindGroup, bindings, cacheIndex, version = 0 ) {
|
|
179
227
|
|
|
180
228
|
const { backend, bindGroupLayoutCache } = this;
|
|
@@ -228,6 +276,11 @@ class WebGPUBindingUtils {
|
|
|
228
276
|
|
|
229
277
|
}
|
|
230
278
|
|
|
279
|
+
/**
|
|
280
|
+
* Updates a buffer binding.
|
|
281
|
+
*
|
|
282
|
+
* @param {Buffer} binding - The buffer binding to update.
|
|
283
|
+
*/
|
|
231
284
|
updateBinding( binding ) {
|
|
232
285
|
|
|
233
286
|
const backend = this.backend;
|
|
@@ -240,6 +293,46 @@ class WebGPUBindingUtils {
|
|
|
240
293
|
|
|
241
294
|
}
|
|
242
295
|
|
|
296
|
+
/**
|
|
297
|
+
* Creates a GPU bind group for the camera index.
|
|
298
|
+
*
|
|
299
|
+
* @param {Uint32Array} data - The index data.
|
|
300
|
+
* @param {GPUBindGroupLayout} layout - The GPU bind group layout.
|
|
301
|
+
* @return {GPUBindGroup} The GPU bind group.
|
|
302
|
+
*/
|
|
303
|
+
createBindGroupIndex( data, layout ) {
|
|
304
|
+
|
|
305
|
+
const backend = this.backend;
|
|
306
|
+
const device = backend.device;
|
|
307
|
+
|
|
308
|
+
const usage = GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST;
|
|
309
|
+
const index = data[ 0 ];
|
|
310
|
+
|
|
311
|
+
const buffer = device.createBuffer( {
|
|
312
|
+
label: 'bindingCameraIndex_' + index,
|
|
313
|
+
size: 16, // uint(4) * 4
|
|
314
|
+
usage: usage
|
|
315
|
+
} );
|
|
316
|
+
|
|
317
|
+
device.queue.writeBuffer( buffer, 0, data, 0 );
|
|
318
|
+
|
|
319
|
+
const entries = [ { binding: 0, resource: { buffer } } ];
|
|
320
|
+
|
|
321
|
+
return device.createBindGroup( {
|
|
322
|
+
label: 'bindGroupCameraIndex_' + index,
|
|
323
|
+
layout,
|
|
324
|
+
entries
|
|
325
|
+
} );
|
|
326
|
+
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* Creates a GPU bind group for the given bind group and GPU layout.
|
|
331
|
+
*
|
|
332
|
+
* @param {BindGroup} bindGroup - The bind group.
|
|
333
|
+
* @param {GPUBindGroupLayout} layoutGPU - The GPU bind group layout.
|
|
334
|
+
* @return {GPUBindGroup} The GPU bind group.
|
|
335
|
+
*/
|
|
243
336
|
createBindGroup( bindGroup, layoutGPU ) {
|
|
244
337
|
|
|
245
338
|
const backend = this.backend;
|
|
@@ -15,20 +15,48 @@ import {
|
|
|
15
15
|
NeverStencilFunc, AlwaysStencilFunc, LessStencilFunc, LessEqualStencilFunc, EqualStencilFunc, GreaterEqualStencilFunc, GreaterStencilFunc, NotEqualStencilFunc
|
|
16
16
|
} from '../../../constants.js';
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
* A WebGPU backend utility module for managing pipelines.
|
|
20
|
+
*
|
|
21
|
+
* @private
|
|
22
|
+
*/
|
|
18
23
|
class WebGPUPipelineUtils {
|
|
19
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a new utility object.
|
|
27
|
+
*
|
|
28
|
+
* @param {WebGPUBackend} backend - The WebGPU backend.
|
|
29
|
+
*/
|
|
20
30
|
constructor( backend ) {
|
|
21
31
|
|
|
32
|
+
/**
|
|
33
|
+
* A reference to the WebGPU backend.
|
|
34
|
+
*
|
|
35
|
+
* @type {WebGPUBackend}
|
|
36
|
+
*/
|
|
22
37
|
this.backend = backend;
|
|
23
38
|
|
|
24
39
|
}
|
|
25
40
|
|
|
26
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Returns the sample count derived from the given render context.
|
|
43
|
+
*
|
|
44
|
+
* @private
|
|
45
|
+
* @param {RenderContext} renderContext - The render context.
|
|
46
|
+
* @return {Number} The sample count.
|
|
47
|
+
*/
|
|
48
|
+
_getSampleCount( renderContext ) {
|
|
27
49
|
|
|
28
|
-
return this.backend.utils.getSampleCountRenderContext(
|
|
50
|
+
return this.backend.utils.getSampleCountRenderContext( renderContext );
|
|
29
51
|
|
|
30
52
|
}
|
|
31
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Creates a render pipeline for the given render object.
|
|
56
|
+
*
|
|
57
|
+
* @param {RenderObject} renderObject - The render object.
|
|
58
|
+
* @param {Array<Promise>} promises - An array of compilation promises which are used in `compileAsync()`.
|
|
59
|
+
*/
|
|
32
60
|
createRenderPipeline( renderObject, promises ) {
|
|
33
61
|
|
|
34
62
|
const { object, material, geometry, pipeline } = renderObject;
|
|
@@ -188,6 +216,12 @@ class WebGPUPipelineUtils {
|
|
|
188
216
|
|
|
189
217
|
}
|
|
190
218
|
|
|
219
|
+
/**
|
|
220
|
+
* Creates GPU render bundle encoder for the given render context.
|
|
221
|
+
*
|
|
222
|
+
* @param {RenderContext} renderContext - The render context.
|
|
223
|
+
* @return {GPURenderBundleEncoder} The GPU render bundle encoder.
|
|
224
|
+
*/
|
|
191
225
|
createBundleEncoder( renderContext ) {
|
|
192
226
|
|
|
193
227
|
const backend = this.backend;
|
|
@@ -208,6 +242,12 @@ class WebGPUPipelineUtils {
|
|
|
208
242
|
|
|
209
243
|
}
|
|
210
244
|
|
|
245
|
+
/**
|
|
246
|
+
* Creates a compute pipeline for the given compute node.
|
|
247
|
+
*
|
|
248
|
+
* @param {ComputePipeline} pipeline - The compute pipeline.
|
|
249
|
+
* @param {Array<BindGroup>} bindings - The bindings.
|
|
250
|
+
*/
|
|
211
251
|
createComputePipeline( pipeline, bindings ) {
|
|
212
252
|
|
|
213
253
|
const backend = this.backend;
|
|
@@ -238,6 +278,14 @@ class WebGPUPipelineUtils {
|
|
|
238
278
|
|
|
239
279
|
}
|
|
240
280
|
|
|
281
|
+
/**
|
|
282
|
+
* Returns the blending state as a descriptor object required
|
|
283
|
+
* for the pipeline creation.
|
|
284
|
+
*
|
|
285
|
+
* @private
|
|
286
|
+
* @param {Material} material - The material.
|
|
287
|
+
* @return {Object} The blending state.
|
|
288
|
+
*/
|
|
241
289
|
_getBlending( material ) {
|
|
242
290
|
|
|
243
291
|
let color, alpha;
|
|
@@ -345,7 +393,13 @@ class WebGPUPipelineUtils {
|
|
|
345
393
|
}
|
|
346
394
|
|
|
347
395
|
}
|
|
348
|
-
|
|
396
|
+
/**
|
|
397
|
+
* Returns the GPU blend factor which is required for the pipeline creation.
|
|
398
|
+
*
|
|
399
|
+
* @private
|
|
400
|
+
* @param {Number} blend - The blend factor as a three.js constant.
|
|
401
|
+
* @return {String} The GPU blend factor.
|
|
402
|
+
*/
|
|
349
403
|
_getBlendFactor( blend ) {
|
|
350
404
|
|
|
351
405
|
let blendFactor;
|
|
@@ -413,6 +467,13 @@ class WebGPUPipelineUtils {
|
|
|
413
467
|
|
|
414
468
|
}
|
|
415
469
|
|
|
470
|
+
/**
|
|
471
|
+
* Returns the GPU stencil compare function which is required for the pipeline creation.
|
|
472
|
+
*
|
|
473
|
+
* @private
|
|
474
|
+
* @param {Material} material - The material.
|
|
475
|
+
* @return {String} The GPU stencil compare function.
|
|
476
|
+
*/
|
|
416
477
|
_getStencilCompare( material ) {
|
|
417
478
|
|
|
418
479
|
let stencilCompare;
|
|
@@ -462,6 +523,13 @@ class WebGPUPipelineUtils {
|
|
|
462
523
|
|
|
463
524
|
}
|
|
464
525
|
|
|
526
|
+
/**
|
|
527
|
+
* Returns the GPU stencil operation which is required for the pipeline creation.
|
|
528
|
+
*
|
|
529
|
+
* @private
|
|
530
|
+
* @param {Number} op - A three.js constant defining the stencil operation.
|
|
531
|
+
* @return {String} The GPU stencil operation.
|
|
532
|
+
*/
|
|
465
533
|
_getStencilOperation( op ) {
|
|
466
534
|
|
|
467
535
|
let stencilOperation;
|
|
@@ -509,6 +577,13 @@ class WebGPUPipelineUtils {
|
|
|
509
577
|
|
|
510
578
|
}
|
|
511
579
|
|
|
580
|
+
/**
|
|
581
|
+
* Returns the GPU blend operation which is required for the pipeline creation.
|
|
582
|
+
*
|
|
583
|
+
* @private
|
|
584
|
+
* @param {Number} blendEquation - A three.js constant defining the blend equation.
|
|
585
|
+
* @return {String} The GPU blend operation.
|
|
586
|
+
*/
|
|
512
587
|
_getBlendOperation( blendEquation ) {
|
|
513
588
|
|
|
514
589
|
let blendOperation;
|
|
@@ -544,6 +619,16 @@ class WebGPUPipelineUtils {
|
|
|
544
619
|
|
|
545
620
|
}
|
|
546
621
|
|
|
622
|
+
/**
|
|
623
|
+
* Returns the primitive state as a descriptor object required
|
|
624
|
+
* for the pipeline creation.
|
|
625
|
+
*
|
|
626
|
+
* @private
|
|
627
|
+
* @param {Object3D} object - The 3D object.
|
|
628
|
+
* @param {BufferGeometry} geometry - The geometry.
|
|
629
|
+
* @param {Material} material - The material.
|
|
630
|
+
* @return {Object} The primitive state.
|
|
631
|
+
*/
|
|
547
632
|
_getPrimitiveState( object, geometry, material ) {
|
|
548
633
|
|
|
549
634
|
const descriptor = {};
|
|
@@ -584,12 +669,26 @@ class WebGPUPipelineUtils {
|
|
|
584
669
|
|
|
585
670
|
}
|
|
586
671
|
|
|
672
|
+
/**
|
|
673
|
+
* Returns the GPU color write mask which is required for the pipeline creation.
|
|
674
|
+
*
|
|
675
|
+
* @private
|
|
676
|
+
* @param {Material} material - The material.
|
|
677
|
+
* @return {String} The GPU color write mask.
|
|
678
|
+
*/
|
|
587
679
|
_getColorWriteMask( material ) {
|
|
588
680
|
|
|
589
681
|
return ( material.colorWrite === true ) ? GPUColorWriteFlags.All : GPUColorWriteFlags.None;
|
|
590
682
|
|
|
591
683
|
}
|
|
592
684
|
|
|
685
|
+
/**
|
|
686
|
+
* Returns the GPU depth compare function which is required for the pipeline creation.
|
|
687
|
+
*
|
|
688
|
+
* @private
|
|
689
|
+
* @param {Material} material - The material.
|
|
690
|
+
* @return {String} The GPU depth compare function.
|
|
691
|
+
*/
|
|
593
692
|
_getDepthCompare( material ) {
|
|
594
693
|
|
|
595
694
|
let depthCompare;
|