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
|
@@ -9,17 +9,50 @@ import { BackSide, LinearSRGBColorSpace } from '../../constants.js';
|
|
|
9
9
|
|
|
10
10
|
const _clearColor = /*@__PURE__*/ new Color4();
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* This renderer module manages the background.
|
|
14
|
+
*
|
|
15
|
+
* @private
|
|
16
|
+
* @augments DataMap
|
|
17
|
+
*/
|
|
12
18
|
class Background extends DataMap {
|
|
13
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new background management component.
|
|
22
|
+
*
|
|
23
|
+
* @param {Renderer} renderer - The renderer.
|
|
24
|
+
* @param {Nodes} nodes - Renderer component for managing nodes related logic.
|
|
25
|
+
*/
|
|
14
26
|
constructor( renderer, nodes ) {
|
|
15
27
|
|
|
16
28
|
super();
|
|
17
29
|
|
|
30
|
+
/**
|
|
31
|
+
* The renderer.
|
|
32
|
+
*
|
|
33
|
+
* @type {Renderer}
|
|
34
|
+
*/
|
|
18
35
|
this.renderer = renderer;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Renderer component for managing nodes related logic.
|
|
39
|
+
*
|
|
40
|
+
* @type {Nodes}
|
|
41
|
+
*/
|
|
19
42
|
this.nodes = nodes;
|
|
20
43
|
|
|
21
44
|
}
|
|
22
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Updates the background for the given scene. Depending on how `Scene.background`
|
|
48
|
+
* or `Scene.backgroundNode` are configured, this method might configure a simple clear
|
|
49
|
+
* or add a mesh to the render list for rendering the background as a textured plane
|
|
50
|
+
* or skybox.
|
|
51
|
+
*
|
|
52
|
+
* @param {Scene} scene - The scene.
|
|
53
|
+
* @param {RenderList} renderList - The current render list.
|
|
54
|
+
* @param {RenderContext} renderContext - The current render context.
|
|
55
|
+
*/
|
|
23
56
|
update( scene, renderList, renderContext ) {
|
|
24
57
|
|
|
25
58
|
const renderer = this.renderer;
|
|
@@ -60,7 +93,7 @@ class Background extends DataMap {
|
|
|
60
93
|
getTextureLevel: () => backgroundBlurriness
|
|
61
94
|
} );
|
|
62
95
|
|
|
63
|
-
let viewProj = modelViewProjection
|
|
96
|
+
let viewProj = modelViewProjection;
|
|
64
97
|
viewProj = viewProj.setZ( viewProj.w );
|
|
65
98
|
|
|
66
99
|
const nodeMaterial = new NodeMaterial();
|
|
@@ -109,6 +142,20 @@ class Background extends DataMap {
|
|
|
109
142
|
|
|
110
143
|
//
|
|
111
144
|
|
|
145
|
+
const environmentBlendMode = renderer.xr.getEnvironmentBlendMode();
|
|
146
|
+
|
|
147
|
+
if ( environmentBlendMode === 'additive' ) {
|
|
148
|
+
|
|
149
|
+
_clearColor.set( 0, 0, 0, 1 );
|
|
150
|
+
|
|
151
|
+
} else if ( environmentBlendMode === 'alpha-blend' ) {
|
|
152
|
+
|
|
153
|
+
_clearColor.set( 0, 0, 0, 0 );
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
//
|
|
158
|
+
|
|
112
159
|
if ( renderer.autoClear === true || forceClear === true ) {
|
|
113
160
|
|
|
114
161
|
const clearColorValue = renderContext.clearColorValue;
|
|
@@ -1,14 +1,57 @@
|
|
|
1
1
|
let _id = 0;
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* A bind group represents a collection of bindings and thus a collection
|
|
5
|
+
* or resources. Bind groups are assigned to pipelines to provide them
|
|
6
|
+
* with the required resources (like uniform buffers or textures).
|
|
7
|
+
*
|
|
8
|
+
* @private
|
|
9
|
+
*/
|
|
3
10
|
class BindGroup {
|
|
4
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new bind group.
|
|
14
|
+
*
|
|
15
|
+
* @param {String} name - The bind group's name.
|
|
16
|
+
* @param {Array<Binding>} bindings - An array of bindings.
|
|
17
|
+
* @param {Number} index - The group index.
|
|
18
|
+
* @param {Array<Binding>} bindingsReference - An array of reference bindings.
|
|
19
|
+
*/
|
|
5
20
|
constructor( name = '', bindings = [], index = 0, bindingsReference = [] ) {
|
|
6
21
|
|
|
22
|
+
/**
|
|
23
|
+
* The bind group's name.
|
|
24
|
+
*
|
|
25
|
+
* @type {String}
|
|
26
|
+
*/
|
|
7
27
|
this.name = name;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* An array of bindings.
|
|
31
|
+
*
|
|
32
|
+
* @type {Array<Binding>}
|
|
33
|
+
*/
|
|
8
34
|
this.bindings = bindings;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The group index.
|
|
38
|
+
*
|
|
39
|
+
* @type {Number}
|
|
40
|
+
*/
|
|
9
41
|
this.index = index;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* An array of reference bindings.
|
|
45
|
+
*
|
|
46
|
+
* @type {Array<Binding>}
|
|
47
|
+
*/
|
|
10
48
|
this.bindingsReference = bindingsReference;
|
|
11
49
|
|
|
50
|
+
/**
|
|
51
|
+
* The group's ID.
|
|
52
|
+
*
|
|
53
|
+
* @type {Number}
|
|
54
|
+
*/
|
|
12
55
|
this.id = _id ++;
|
|
13
56
|
|
|
14
57
|
}
|
|
@@ -1,19 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A binding represents the connection between a resource (like a texture, sampler
|
|
3
|
+
* or uniform buffer) and the resource definition in a shader stage.
|
|
4
|
+
*
|
|
5
|
+
* This module is an abstract base class for all concrete bindings types.
|
|
6
|
+
*
|
|
7
|
+
* @abstract
|
|
8
|
+
* @private
|
|
9
|
+
*/
|
|
1
10
|
class Binding {
|
|
2
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new binding.
|
|
14
|
+
*
|
|
15
|
+
* @param {String} [name=''] - The binding's name.
|
|
16
|
+
*/
|
|
3
17
|
constructor( name = '' ) {
|
|
4
18
|
|
|
19
|
+
/**
|
|
20
|
+
* The binding's name.
|
|
21
|
+
*
|
|
22
|
+
* @type {String}
|
|
23
|
+
*/
|
|
5
24
|
this.name = name;
|
|
6
25
|
|
|
26
|
+
/**
|
|
27
|
+
* A bitmask that defines in what shader stages the
|
|
28
|
+
* binding's resource is accessible.
|
|
29
|
+
*
|
|
30
|
+
* @type {Number}
|
|
31
|
+
*/
|
|
7
32
|
this.visibility = 0;
|
|
8
33
|
|
|
9
34
|
}
|
|
10
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Makes sure binding's resource is visible for the given shader stage.
|
|
38
|
+
*
|
|
39
|
+
* @param {Number} visibility - The shader stage.
|
|
40
|
+
*/
|
|
11
41
|
setVisibility( visibility ) {
|
|
12
42
|
|
|
13
43
|
this.visibility |= visibility;
|
|
14
44
|
|
|
15
45
|
}
|
|
16
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Clones the binding.
|
|
49
|
+
*
|
|
50
|
+
* @return {Binding} The cloned binding.
|
|
51
|
+
*/
|
|
17
52
|
clone() {
|
|
18
53
|
|
|
19
54
|
return Object.assign( new this.constructor(), this );
|
|
@@ -1,23 +1,80 @@
|
|
|
1
1
|
import DataMap from './DataMap.js';
|
|
2
2
|
import { AttributeType } from './Constants.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* This renderer module manages the bindings of the renderer.
|
|
6
|
+
*
|
|
7
|
+
* @private
|
|
8
|
+
* @augments DataMap
|
|
9
|
+
*/
|
|
4
10
|
class Bindings extends DataMap {
|
|
5
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new bindings management component.
|
|
14
|
+
*
|
|
15
|
+
* @param {Backend} backend - The renderer's backend.
|
|
16
|
+
* @param {Nodes} nodes - Renderer component for managing nodes related logic.
|
|
17
|
+
* @param {Textures} textures - Renderer component for managing textures.
|
|
18
|
+
* @param {Attributes} attributes - Renderer component for managing attributes.
|
|
19
|
+
* @param {Pipelines} pipelines - Renderer component for managing pipelines.
|
|
20
|
+
* @param {Info} info - Renderer component for managing metrics and monitoring data.
|
|
21
|
+
*/
|
|
6
22
|
constructor( backend, nodes, textures, attributes, pipelines, info ) {
|
|
7
23
|
|
|
8
24
|
super();
|
|
9
25
|
|
|
26
|
+
/**
|
|
27
|
+
* The renderer's backend.
|
|
28
|
+
*
|
|
29
|
+
* @type {Backend}
|
|
30
|
+
*/
|
|
10
31
|
this.backend = backend;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Renderer component for managing textures.
|
|
35
|
+
*
|
|
36
|
+
* @type {Textures}
|
|
37
|
+
*/
|
|
11
38
|
this.textures = textures;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Renderer component for managing pipelines.
|
|
42
|
+
*
|
|
43
|
+
* @type {Pipelines}
|
|
44
|
+
*/
|
|
12
45
|
this.pipelines = pipelines;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Renderer component for managing attributes.
|
|
49
|
+
*
|
|
50
|
+
* @type {Attributes}
|
|
51
|
+
*/
|
|
13
52
|
this.attributes = attributes;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Renderer component for managing nodes related logic.
|
|
56
|
+
*
|
|
57
|
+
* @type {Nodes}
|
|
58
|
+
*/
|
|
14
59
|
this.nodes = nodes;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Renderer component for managing metrics and monitoring data.
|
|
63
|
+
*
|
|
64
|
+
* @type {Info}
|
|
65
|
+
*/
|
|
15
66
|
this.info = info;
|
|
16
67
|
|
|
17
68
|
this.pipelines.bindings = this; // assign bindings to pipelines
|
|
18
69
|
|
|
19
70
|
}
|
|
20
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Returns the bind groups for the given render object.
|
|
74
|
+
*
|
|
75
|
+
* @param {RenderObject} renderObject - The render object.
|
|
76
|
+
* @return {Array<BindGroup>} The bind groups.
|
|
77
|
+
*/
|
|
21
78
|
getForRender( renderObject ) {
|
|
22
79
|
|
|
23
80
|
const bindings = renderObject.getBindings();
|
|
@@ -44,6 +101,12 @@ class Bindings extends DataMap {
|
|
|
44
101
|
|
|
45
102
|
}
|
|
46
103
|
|
|
104
|
+
/**
|
|
105
|
+
* Returns the bind groups for the given compute node.
|
|
106
|
+
*
|
|
107
|
+
* @param {Node} computeNode - The compute node.
|
|
108
|
+
* @return {Array<BindGroup>} The bind groups.
|
|
109
|
+
*/
|
|
47
110
|
getForCompute( computeNode ) {
|
|
48
111
|
|
|
49
112
|
const bindings = this.nodes.getForCompute( computeNode ).bindings;
|
|
@@ -68,18 +131,33 @@ class Bindings extends DataMap {
|
|
|
68
131
|
|
|
69
132
|
}
|
|
70
133
|
|
|
134
|
+
/**
|
|
135
|
+
* Updates the bindings for the given compute node.
|
|
136
|
+
*
|
|
137
|
+
* @param {Node} computeNode - The compute node.
|
|
138
|
+
*/
|
|
71
139
|
updateForCompute( computeNode ) {
|
|
72
140
|
|
|
73
141
|
this._updateBindings( this.getForCompute( computeNode ) );
|
|
74
142
|
|
|
75
143
|
}
|
|
76
144
|
|
|
145
|
+
/**
|
|
146
|
+
* Updates the bindings for the given render object.
|
|
147
|
+
*
|
|
148
|
+
* @param {RenderObject} renderObject - The render object.
|
|
149
|
+
*/
|
|
77
150
|
updateForRender( renderObject ) {
|
|
78
151
|
|
|
79
152
|
this._updateBindings( this.getForRender( renderObject ) );
|
|
80
153
|
|
|
81
154
|
}
|
|
82
155
|
|
|
156
|
+
/**
|
|
157
|
+
* Updates the given array of bindings.
|
|
158
|
+
*
|
|
159
|
+
* @param {Array<BindGroup>} bindings - The bind groups.
|
|
160
|
+
*/
|
|
83
161
|
_updateBindings( bindings ) {
|
|
84
162
|
|
|
85
163
|
for ( const bindGroup of bindings ) {
|
|
@@ -90,6 +168,11 @@ class Bindings extends DataMap {
|
|
|
90
168
|
|
|
91
169
|
}
|
|
92
170
|
|
|
171
|
+
/**
|
|
172
|
+
* Initializes the given bind group.
|
|
173
|
+
*
|
|
174
|
+
* @param {BindGroup} bindGroup - The bind group to initialize.
|
|
175
|
+
*/
|
|
93
176
|
_init( bindGroup ) {
|
|
94
177
|
|
|
95
178
|
for ( const binding of bindGroup.bindings ) {
|
|
@@ -111,6 +194,12 @@ class Bindings extends DataMap {
|
|
|
111
194
|
|
|
112
195
|
}
|
|
113
196
|
|
|
197
|
+
/**
|
|
198
|
+
* Updates the given bind group.
|
|
199
|
+
*
|
|
200
|
+
* @param {BindGroup} bindGroup - The bind group to update.
|
|
201
|
+
* @param {Array<BindGroup>} bindings - The bind groups.
|
|
202
|
+
*/
|
|
114
203
|
_update( bindGroup, bindings ) {
|
|
115
204
|
|
|
116
205
|
const { backend } = this;
|
|
@@ -128,7 +217,10 @@ class Bindings extends DataMap {
|
|
|
128
217
|
|
|
129
218
|
const updated = this.nodes.updateGroup( binding );
|
|
130
219
|
|
|
131
|
-
if
|
|
220
|
+
// every uniforms group is a uniform buffer. So if no update is required,
|
|
221
|
+
// we move one with the next binding. Otherwise the next if block will update the group.
|
|
222
|
+
|
|
223
|
+
if ( updated === false ) continue;
|
|
132
224
|
|
|
133
225
|
}
|
|
134
226
|
|
|
@@ -1,32 +1,81 @@
|
|
|
1
1
|
import Binding from './Binding.js';
|
|
2
2
|
import { getFloatLength } from './BufferUtils.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Represents a buffer binding type.
|
|
6
|
+
*
|
|
7
|
+
* @private
|
|
8
|
+
* @abstract
|
|
9
|
+
* @augments Binding
|
|
10
|
+
*/
|
|
4
11
|
class Buffer extends Binding {
|
|
5
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Constructs a new buffer.
|
|
15
|
+
*
|
|
16
|
+
* @param {String} name - The buffer's name.
|
|
17
|
+
* @param {TypedArray} [buffer=null] - The buffer.
|
|
18
|
+
*/
|
|
6
19
|
constructor( name, buffer = null ) {
|
|
7
20
|
|
|
8
21
|
super( name );
|
|
9
22
|
|
|
23
|
+
/**
|
|
24
|
+
* This flag can be used for type testing.
|
|
25
|
+
*
|
|
26
|
+
* @type {Boolean}
|
|
27
|
+
* @readonly
|
|
28
|
+
* @default true
|
|
29
|
+
*/
|
|
10
30
|
this.isBuffer = true;
|
|
11
31
|
|
|
32
|
+
/**
|
|
33
|
+
* The bytes per element.
|
|
34
|
+
*
|
|
35
|
+
* @type {Number}
|
|
36
|
+
*/
|
|
12
37
|
this.bytesPerElement = Float32Array.BYTES_PER_ELEMENT;
|
|
13
38
|
|
|
39
|
+
/**
|
|
40
|
+
* A reference to the internal buffer.
|
|
41
|
+
*
|
|
42
|
+
* @private
|
|
43
|
+
* @type {TypedArray}
|
|
44
|
+
*/
|
|
14
45
|
this._buffer = buffer;
|
|
15
46
|
|
|
16
47
|
}
|
|
17
48
|
|
|
49
|
+
/**
|
|
50
|
+
* The buffer's byte length.
|
|
51
|
+
*
|
|
52
|
+
* @type {Number}
|
|
53
|
+
* @readonly
|
|
54
|
+
*/
|
|
18
55
|
get byteLength() {
|
|
19
56
|
|
|
20
57
|
return getFloatLength( this._buffer.byteLength );
|
|
21
58
|
|
|
22
59
|
}
|
|
23
60
|
|
|
61
|
+
/**
|
|
62
|
+
* A reference to the internal buffer.
|
|
63
|
+
*
|
|
64
|
+
* @type {Float32Array}
|
|
65
|
+
* @readonly
|
|
66
|
+
*/
|
|
24
67
|
get buffer() {
|
|
25
68
|
|
|
26
69
|
return this._buffer;
|
|
27
70
|
|
|
28
71
|
}
|
|
29
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Updates the binding.
|
|
75
|
+
*
|
|
76
|
+
* @return {Boolean} Whether the buffer has been updated and must be
|
|
77
|
+
* uploaded to the GPU.
|
|
78
|
+
*/
|
|
30
79
|
update() {
|
|
31
80
|
|
|
32
81
|
return true;
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import { GPU_CHUNK_BYTES } from './Constants.js';
|
|
2
2
|
|
|
3
|
+
/** @module BufferUtils **/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* This function is usually called with the length in bytes of an array buffer.
|
|
7
|
+
* It returns an padded value which ensure chunk size alignment according to STD140 layout.
|
|
8
|
+
*
|
|
9
|
+
* @function
|
|
10
|
+
* @param {Number} floatLength - The buffer length.
|
|
11
|
+
* @return {Number} The padded length.
|
|
12
|
+
*/
|
|
3
13
|
function getFloatLength( floatLength ) {
|
|
4
14
|
|
|
5
15
|
// ensure chunk size alignment (STD140 layout)
|
|
@@ -8,6 +18,15 @@ function getFloatLength( floatLength ) {
|
|
|
8
18
|
|
|
9
19
|
}
|
|
10
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Given the count of vectors and their vector length, this function computes
|
|
23
|
+
* a total length in bytes with buffer alignment according to STD140 layout.
|
|
24
|
+
*
|
|
25
|
+
* @function
|
|
26
|
+
* @param {Number} count - The number of vectors.
|
|
27
|
+
* @param {Number} [vectorLength=4] - The vector length.
|
|
28
|
+
* @return {Number} The padded length.
|
|
29
|
+
*/
|
|
11
30
|
function getVectorLength( count, vectorLength = 4 ) {
|
|
12
31
|
|
|
13
32
|
const strideLength = getStrideLength( vectorLength );
|
|
@@ -18,6 +37,14 @@ function getVectorLength( count, vectorLength = 4 ) {
|
|
|
18
37
|
|
|
19
38
|
}
|
|
20
39
|
|
|
40
|
+
/**
|
|
41
|
+
* This function is called with a vector length and ensure the computed length
|
|
42
|
+
* matches a predefined stride (in this case `4`).
|
|
43
|
+
*
|
|
44
|
+
* @function
|
|
45
|
+
* @param {Number} vectorLength - The vector length.
|
|
46
|
+
* @return {Number} The padded length.
|
|
47
|
+
*/
|
|
21
48
|
function getStrideLength( vectorLength ) {
|
|
22
49
|
|
|
23
50
|
const strideLength = 4;
|
|
@@ -1,20 +1,77 @@
|
|
|
1
1
|
import { Group } from '../../objects/Group.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* A specialized group which enables applications access to the
|
|
5
|
+
* Render Bundle API of WebGPU. The group with all its descendant nodes
|
|
6
|
+
* are considered as one render bundle and processed as such by
|
|
7
|
+
* the renderer.
|
|
8
|
+
*
|
|
9
|
+
* This module is only fully supported by `WebGPURenderer` with a WebGPU backend.
|
|
10
|
+
* With a WebGL backend, the group can technically be rendered but without
|
|
11
|
+
* any performance improvements.
|
|
12
|
+
*
|
|
13
|
+
* @augments Group
|
|
14
|
+
*/
|
|
3
15
|
class BundleGroup extends Group {
|
|
4
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Constructs a new bundle group.
|
|
19
|
+
*/
|
|
5
20
|
constructor() {
|
|
6
21
|
|
|
7
22
|
super();
|
|
8
23
|
|
|
24
|
+
/**
|
|
25
|
+
* This flag can be used for type testing.
|
|
26
|
+
*
|
|
27
|
+
* @type {Boolean}
|
|
28
|
+
* @readonly
|
|
29
|
+
* @default true
|
|
30
|
+
*/
|
|
9
31
|
this.isBundleGroup = true;
|
|
10
32
|
|
|
33
|
+
/**
|
|
34
|
+
* This property is only relevant for detecting types
|
|
35
|
+
* during serialization/deserialization. It should always
|
|
36
|
+
* match the class name.
|
|
37
|
+
*
|
|
38
|
+
* @type {String}
|
|
39
|
+
* @readonly
|
|
40
|
+
* @default 'BundleGroup'
|
|
41
|
+
*/
|
|
11
42
|
this.type = 'BundleGroup';
|
|
12
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Whether the bundle is static or not. When set to `true`, the structure
|
|
46
|
+
* is assumed to be static and does not change. E.g. no new objects are
|
|
47
|
+
* added to the group
|
|
48
|
+
*
|
|
49
|
+
* If a change is required, an update can still be forced by setting the
|
|
50
|
+
* `needsUpdate` flag to `true`.
|
|
51
|
+
*
|
|
52
|
+
* @type {Boolean}
|
|
53
|
+
* @default true
|
|
54
|
+
*/
|
|
13
55
|
this.static = true;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The bundle group's version.
|
|
59
|
+
*
|
|
60
|
+
* @type {Number}
|
|
61
|
+
* @readonly
|
|
62
|
+
* @default 0
|
|
63
|
+
*/
|
|
14
64
|
this.version = 0;
|
|
15
65
|
|
|
16
66
|
}
|
|
17
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Set this property to `true` when the bundle group has changed.
|
|
70
|
+
*
|
|
71
|
+
* @type {Boolean}
|
|
72
|
+
* @default false
|
|
73
|
+
* @param {Boolean} value
|
|
74
|
+
*/
|
|
18
75
|
set needsUpdate( value ) {
|
|
19
76
|
|
|
20
77
|
if ( value === true ) this.version ++;
|
|
@@ -1,16 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Data structure for the renderer. It allows defining values
|
|
3
|
+
* with chained, hierarchical keys. Keys are meant to be
|
|
4
|
+
* objects since the module internally works with Weak Maps
|
|
5
|
+
* for performance reasons.
|
|
6
|
+
*
|
|
7
|
+
* @private
|
|
8
|
+
*/
|
|
9
|
+
class ChainMap {
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Constructs a new Chain Map.
|
|
13
|
+
*/
|
|
3
14
|
constructor() {
|
|
4
15
|
|
|
16
|
+
/**
|
|
17
|
+
* The root Weak Map.
|
|
18
|
+
*
|
|
19
|
+
* @type {WeakMap}
|
|
20
|
+
*/
|
|
5
21
|
this.weakMap = new WeakMap();
|
|
6
22
|
|
|
7
23
|
}
|
|
8
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Returns the value for the given array of keys.
|
|
27
|
+
*
|
|
28
|
+
* @param {Array<Object>} keys - List of keys.
|
|
29
|
+
* @return {Any} The value. Returns `undefined` if no value was found.
|
|
30
|
+
*/
|
|
9
31
|
get( keys ) {
|
|
10
32
|
|
|
11
33
|
let map = this.weakMap;
|
|
12
34
|
|
|
13
|
-
for ( let i = 0; i < keys.length; i ++ ) {
|
|
35
|
+
for ( let i = 0; i < keys.length - 1; i ++ ) {
|
|
14
36
|
|
|
15
37
|
map = map.get( keys[ i ] );
|
|
16
38
|
|
|
@@ -22,11 +44,18 @@ export default class ChainMap {
|
|
|
22
44
|
|
|
23
45
|
}
|
|
24
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Sets the value for the given keys.
|
|
49
|
+
*
|
|
50
|
+
* @param {Array<Object>} keys - List of keys.
|
|
51
|
+
* @param {Any} value - The value to set.
|
|
52
|
+
* @return {ChainMap} A reference to this Chain Map.
|
|
53
|
+
*/
|
|
25
54
|
set( keys, value ) {
|
|
26
55
|
|
|
27
56
|
let map = this.weakMap;
|
|
28
57
|
|
|
29
|
-
for ( let i = 0; i < keys.length; i ++ ) {
|
|
58
|
+
for ( let i = 0; i < keys.length - 1; i ++ ) {
|
|
30
59
|
|
|
31
60
|
const key = keys[ i ];
|
|
32
61
|
|
|
@@ -36,15 +65,23 @@ export default class ChainMap {
|
|
|
36
65
|
|
|
37
66
|
}
|
|
38
67
|
|
|
39
|
-
|
|
68
|
+
map.set( keys[ keys.length - 1 ], value );
|
|
69
|
+
|
|
70
|
+
return this;
|
|
40
71
|
|
|
41
72
|
}
|
|
42
73
|
|
|
74
|
+
/**
|
|
75
|
+
* Deletes a value for the given keys.
|
|
76
|
+
*
|
|
77
|
+
* @param {Array<Object>} keys - The keys.
|
|
78
|
+
* @return {Boolean} Returns `true` if the value has been removed successfully and `false` if the value has not be found.
|
|
79
|
+
*/
|
|
43
80
|
delete( keys ) {
|
|
44
81
|
|
|
45
82
|
let map = this.weakMap;
|
|
46
83
|
|
|
47
|
-
for ( let i = 0; i < keys.length; i ++ ) {
|
|
84
|
+
for ( let i = 0; i < keys.length - 1; i ++ ) {
|
|
48
85
|
|
|
49
86
|
map = map.get( keys[ i ] );
|
|
50
87
|
|
|
@@ -57,3 +94,5 @@ export default class ChainMap {
|
|
|
57
94
|
}
|
|
58
95
|
|
|
59
96
|
}
|
|
97
|
+
|
|
98
|
+
export default ChainMap;
|