super-three 0.171.0 → 0.172.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 +157 -49
- package/build/three.core.js +104 -42
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +53 -8
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +10 -5
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +21191 -1008
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +21189 -1008
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +3 -2
- package/examples/jsm/controls/ArcballControls.js +28 -19
- 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 +11 -7
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -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 +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +22 -2
- 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 -1
- 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/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
- package/examples/jsm/misc/Volume.js +20 -12
- package/examples/jsm/misc/VolumeSlice.js +2 -2
- 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 +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/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/SobelOperatorShader.js +1 -1
- 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 +2 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +9 -4
- 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/PerspectiveCamera.js +18 -2
- package/src/constants.js +1 -1
- 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/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/InstancedPointsNodeMaterial.js +72 -19
- 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 +474 -21
- package/src/materials/nodes/PointsNodeMaterial.js +22 -13
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
- package/src/nodes/Nodes.js +1 -6
- package/src/nodes/TSL.js +2 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +24 -5
- package/src/nodes/accessors/BatchNode.js +39 -3
- 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 +49 -0
- 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/InstancedPointsMaterialNode.js +13 -0
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +302 -8
- 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 +59 -3
- package/src/nodes/accessors/Object3DNode.js +102 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +53 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
- package/src/nodes/accessors/ReferenceNode.js +202 -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 +168 -4
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +36 -0
- package/src/nodes/accessors/Texture3DNode.js +89 -5
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +309 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +223 -23
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +82 -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/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 +24 -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 +337 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +945 -15
- 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 +141 -0
- package/src/nodes/core/NodeVar.js +30 -0
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +33 -2
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +78 -0
- package/src/nodes/core/StructTypeNode.js +39 -1
- package/src/nodes/core/TempNode.js +30 -4
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +52 -0
- package/src/nodes/core/VaryingNode.js +83 -2
- package/src/nodes/core/constants.js +36 -0
- 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 +298 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +87 -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 +93 -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 +157 -1
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -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 +240 -34
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +70 -3
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +614 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +233 -0
- 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 +1 -1
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/tsl/TSLBase.js +2 -2
- package/src/nodes/utils/ArrayElementNode.js +38 -2
- 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 +74 -1
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -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 +40 -0
- package/src/nodes/utils/Timer.js +19 -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 +1 -2
- package/src/objects/ClippingGroup.js +49 -0
- package/src/renderers/WebGLRenderer.js +23 -4
- package/src/renderers/common/Animation.js +63 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +467 -52
- package/src/renderers/common/Background.js +34 -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 +38 -1
- package/src/renderers/common/ClippingContext.js +107 -14
- package/src/renderers/common/Color4.js +36 -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 +98 -0
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +87 -0
- package/src/renderers/common/Lighting.js +26 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +75 -3
- 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 +33 -10
- package/src/renderers/common/RenderContext.js +169 -4
- package/src/renderers/common/RenderContexts.js +42 -2
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +31 -0
- package/src/renderers/common/RenderObject.js +328 -4
- package/src/renderers/common/RenderObjects.js +101 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1096 -31
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +121 -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 +83 -0
- package/src/renderers/common/Uniform.js +188 -2
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +139 -2
- package/src/renderers/common/extras/PMREMGenerator.js +24 -3
- package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +91 -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 +189 -0
- 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 +327 -60
- 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-fallback/WebGLBackend.js +547 -29
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +480 -49
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
- package/src/renderers/webgpu/WebGPURenderer.js +35 -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 +59 -11
- 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 +10 -8
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +7 -1
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -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/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- 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
|
@@ -4,41 +4,110 @@ import { Vector4 } from '../../math/Vector4.js';
|
|
|
4
4
|
|
|
5
5
|
const _plane = /*@__PURE__*/ new Plane();
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Represents the state that is used to perform clipping via clipping planes.
|
|
9
|
+
* There is a default clipping context for each render context. When the
|
|
10
|
+
* scene holds instances of `ClippingGroup`, there will be a context for each
|
|
11
|
+
* group.
|
|
12
|
+
*
|
|
13
|
+
* @private
|
|
14
|
+
*/
|
|
7
15
|
class ClippingContext {
|
|
8
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Constructs a new clipping context.
|
|
19
|
+
*
|
|
20
|
+
* @param {ClippingContext?} [parentContext=null] - A reference to the parent clipping context.
|
|
21
|
+
*/
|
|
9
22
|
constructor( parentContext = null ) {
|
|
10
23
|
|
|
24
|
+
/**
|
|
25
|
+
* The clipping context's version.
|
|
26
|
+
*
|
|
27
|
+
* @type {Number}
|
|
28
|
+
* @readonly
|
|
29
|
+
*/
|
|
11
30
|
this.version = 0;
|
|
12
31
|
|
|
32
|
+
/**
|
|
33
|
+
* Whether the intersection of the clipping planes is used to clip objects, rather than their union.
|
|
34
|
+
*
|
|
35
|
+
* @type {Boolean?}
|
|
36
|
+
* @default null
|
|
37
|
+
*/
|
|
13
38
|
this.clipIntersection = null;
|
|
14
|
-
this.cacheKey = '';
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
if ( parentContext === null ) {
|
|
18
39
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
40
|
+
/**
|
|
41
|
+
* The clipping context's cache key.
|
|
42
|
+
*
|
|
43
|
+
* @type {String}
|
|
44
|
+
*/
|
|
45
|
+
this.cacheKey = '';
|
|
24
46
|
|
|
25
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Whether the shadow pass is active or not.
|
|
49
|
+
*
|
|
50
|
+
* @type {Boolean}
|
|
51
|
+
* @default false
|
|
52
|
+
*/
|
|
53
|
+
this.shadowPass = false;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The view normal matrix.
|
|
57
|
+
*
|
|
58
|
+
* @type {Matrix3}
|
|
59
|
+
*/
|
|
60
|
+
this.viewNormalMatrix = new Matrix3();
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Internal cache for maintaining clipping contexts.
|
|
64
|
+
*
|
|
65
|
+
* @type {WeakMap<ClippingGroup,ClippingContext>}
|
|
66
|
+
*/
|
|
67
|
+
this.clippingGroupContexts = new WeakMap();
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* The intersection planes.
|
|
71
|
+
*
|
|
72
|
+
* @type {Array<Vector4>}
|
|
73
|
+
*/
|
|
74
|
+
this.intersectionPlanes = [];
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The intersection planes.
|
|
78
|
+
*
|
|
79
|
+
* @type {Array<Vector4>}
|
|
80
|
+
*/
|
|
81
|
+
this.unionPlanes = [];
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* The version of the clipping context's parent context.
|
|
85
|
+
*
|
|
86
|
+
* @type {Number?}
|
|
87
|
+
* @readonly
|
|
88
|
+
*/
|
|
89
|
+
this.parentVersion = null;
|
|
26
90
|
|
|
27
|
-
|
|
91
|
+
if ( parentContext !== null ) {
|
|
28
92
|
|
|
29
93
|
this.viewNormalMatrix = parentContext.viewNormalMatrix;
|
|
30
94
|
this.clippingGroupContexts = parentContext.clippingGroupContexts;
|
|
31
95
|
|
|
32
96
|
this.shadowPass = parentContext.shadowPass;
|
|
33
|
-
|
|
34
97
|
this.viewMatrix = parentContext.viewMatrix;
|
|
35
98
|
|
|
36
99
|
}
|
|
37
100
|
|
|
38
|
-
this.parentVersion = null;
|
|
39
|
-
|
|
40
101
|
}
|
|
41
102
|
|
|
103
|
+
/**
|
|
104
|
+
* Projects the given source clipping planes and writes the result into the
|
|
105
|
+
* destination array.
|
|
106
|
+
*
|
|
107
|
+
* @param {Array<Plane>} source - The source clipping planes.
|
|
108
|
+
* @param {Array<Vector4>} destination - The destination.
|
|
109
|
+
* @param {Number} offset - The offset.
|
|
110
|
+
*/
|
|
42
111
|
projectPlanes( source, destination, offset ) {
|
|
43
112
|
|
|
44
113
|
const l = source.length;
|
|
@@ -59,6 +128,12 @@ class ClippingContext {
|
|
|
59
128
|
|
|
60
129
|
}
|
|
61
130
|
|
|
131
|
+
/**
|
|
132
|
+
* Updates the root clipping context of a scene.
|
|
133
|
+
*
|
|
134
|
+
* @param {Scene} scene - The scene.
|
|
135
|
+
* @param {Camera} camera - The camera that is used to render the scene.
|
|
136
|
+
*/
|
|
62
137
|
updateGlobal( scene, camera ) {
|
|
63
138
|
|
|
64
139
|
this.shadowPass = ( scene.overrideMaterial !== null && scene.overrideMaterial.isShadowNodeMaterial );
|
|
@@ -68,6 +143,12 @@ class ClippingContext {
|
|
|
68
143
|
|
|
69
144
|
}
|
|
70
145
|
|
|
146
|
+
/**
|
|
147
|
+
* Updates the clipping context.
|
|
148
|
+
*
|
|
149
|
+
* @param {ClippingContext} parentContext - The parent context.
|
|
150
|
+
* @param {ClippingGroup} clippingGroup - The clipping group this context belongs to.
|
|
151
|
+
*/
|
|
71
152
|
update( parentContext, clippingGroup ) {
|
|
72
153
|
|
|
73
154
|
let update = false;
|
|
@@ -139,6 +220,12 @@ class ClippingContext {
|
|
|
139
220
|
|
|
140
221
|
}
|
|
141
222
|
|
|
223
|
+
/**
|
|
224
|
+
* Returns a clipping context for the given clipping group.
|
|
225
|
+
*
|
|
226
|
+
* @param {ClippingGroup} clippingGroup - The clipping group.
|
|
227
|
+
* @return {ClippingContext} The clipping context.
|
|
228
|
+
*/
|
|
142
229
|
getGroupContext( clippingGroup ) {
|
|
143
230
|
|
|
144
231
|
if ( this.shadowPass && ! clippingGroup.clipShadows ) return this;
|
|
@@ -158,6 +245,12 @@ class ClippingContext {
|
|
|
158
245
|
|
|
159
246
|
}
|
|
160
247
|
|
|
248
|
+
/**
|
|
249
|
+
* The count of union clipping planes.
|
|
250
|
+
*
|
|
251
|
+
* @type {Number}
|
|
252
|
+
* @readonly
|
|
253
|
+
*/
|
|
161
254
|
get unionClippingCount() {
|
|
162
255
|
|
|
163
256
|
return this.unionPlanes.length;
|
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
import { Color } from '../../math/Color.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* A four-component version of {@link Color} which is internally
|
|
5
|
+
* used by the renderer to represents clear color with alpha as
|
|
6
|
+
* one object.
|
|
7
|
+
*
|
|
8
|
+
* @private
|
|
9
|
+
* @augments Color
|
|
10
|
+
*/
|
|
3
11
|
class Color4 extends Color {
|
|
4
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Constructs a new four-component color.
|
|
15
|
+
*
|
|
16
|
+
* @param {Number|String} r - The red value.
|
|
17
|
+
* @param {Number} g - The green value.
|
|
18
|
+
* @param {Number} b - The blue value.
|
|
19
|
+
* @param {Number} [a=1] - The alpha value.
|
|
20
|
+
*/
|
|
5
21
|
constructor( r, g, b, a = 1 ) {
|
|
6
22
|
|
|
7
23
|
super( r, g, b );
|
|
@@ -10,6 +26,15 @@ class Color4 extends Color {
|
|
|
10
26
|
|
|
11
27
|
}
|
|
12
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Overwrites the default to honor alpha.
|
|
31
|
+
*
|
|
32
|
+
* @param {Number|String} r - The red value.
|
|
33
|
+
* @param {Number} g - The green value.
|
|
34
|
+
* @param {Number} b - The blue value.
|
|
35
|
+
* @param {Number} [a=1] - The alpha value.
|
|
36
|
+
* @return {Color4} A reference to this object.
|
|
37
|
+
*/
|
|
13
38
|
set( r, g, b, a = 1 ) {
|
|
14
39
|
|
|
15
40
|
this.a = a;
|
|
@@ -18,6 +43,12 @@ class Color4 extends Color {
|
|
|
18
43
|
|
|
19
44
|
}
|
|
20
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Overwrites the default to honor alpha.
|
|
48
|
+
*
|
|
49
|
+
* @param {Color4} color - The color to copy.
|
|
50
|
+
* @return {Color4} A reference to this object.
|
|
51
|
+
*/
|
|
21
52
|
copy( color ) {
|
|
22
53
|
|
|
23
54
|
if ( color.a !== undefined ) this.a = color.a;
|
|
@@ -26,6 +57,11 @@ class Color4 extends Color {
|
|
|
26
57
|
|
|
27
58
|
}
|
|
28
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Overwrites the default to honor alpha.
|
|
62
|
+
*
|
|
63
|
+
* @return {Color4} The cloned color.
|
|
64
|
+
*/
|
|
29
65
|
clone() {
|
|
30
66
|
|
|
31
67
|
return new this.constructor( this.r, this.g, this.b, this.a );
|
|
@@ -1,13 +1,37 @@
|
|
|
1
1
|
import Pipeline from './Pipeline.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Class for representing compute pipelines.
|
|
5
|
+
*
|
|
6
|
+
* @private
|
|
7
|
+
* @augments Pipeline
|
|
8
|
+
*/
|
|
3
9
|
class ComputePipeline extends Pipeline {
|
|
4
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Constructs a new render pipeline.
|
|
13
|
+
*
|
|
14
|
+
* @param {String} cacheKey - The pipeline's cache key.
|
|
15
|
+
* @param {ProgrammableStage} computeProgram - The pipeline's compute shader.
|
|
16
|
+
*/
|
|
5
17
|
constructor( cacheKey, computeProgram ) {
|
|
6
18
|
|
|
7
19
|
super( cacheKey );
|
|
8
20
|
|
|
21
|
+
/**
|
|
22
|
+
* The pipeline's compute shader.
|
|
23
|
+
*
|
|
24
|
+
* @type {ProgrammableStage}
|
|
25
|
+
*/
|
|
9
26
|
this.computeProgram = computeProgram;
|
|
10
27
|
|
|
28
|
+
/**
|
|
29
|
+
* This flag can be used for type testing.
|
|
30
|
+
*
|
|
31
|
+
* @type {Boolean}
|
|
32
|
+
* @readonly
|
|
33
|
+
* @default true
|
|
34
|
+
*/
|
|
11
35
|
this.isComputePipeline = true;
|
|
12
36
|
|
|
13
37
|
}
|
|
@@ -12,6 +12,12 @@ import { BackSide, NoBlending, LinearFilter, LinearMipmapLinearFilter } from '..
|
|
|
12
12
|
|
|
13
13
|
// @TODO: Consider rename WebGLCubeRenderTarget to just CubeRenderTarget
|
|
14
14
|
|
|
15
|
+
/**
|
|
16
|
+
* This class represents a cube render target. It is a special version
|
|
17
|
+
* of `WebGLCubeRenderTarget` which is compatible with `WebGPURenderer`.
|
|
18
|
+
*
|
|
19
|
+
* @augments WebGLCubeRenderTarget
|
|
20
|
+
*/
|
|
15
21
|
class CubeRenderTarget extends WebGLCubeRenderTarget {
|
|
16
22
|
|
|
17
23
|
constructor( size = 1, options = {} ) {
|
|
@@ -22,6 +28,13 @@ class CubeRenderTarget extends WebGLCubeRenderTarget {
|
|
|
22
28
|
|
|
23
29
|
}
|
|
24
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Converts the given equirectangular texture to a cube map.
|
|
33
|
+
*
|
|
34
|
+
* @param {Renderer} renderer - The renderer.
|
|
35
|
+
* @param {Texture} texture - The equirectangular texture.
|
|
36
|
+
* @return {CubeRenderTarget} A reference to this cube render target.
|
|
37
|
+
*/
|
|
25
38
|
fromEquirectangularTexture( renderer, texture ) {
|
|
26
39
|
|
|
27
40
|
const currentMinFilter = texture.minFilter;
|
|
@@ -1,11 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data structure for the renderer. It is intended to manage
|
|
3
|
+
* data of objects in dictionaries.
|
|
4
|
+
*
|
|
5
|
+
* @private
|
|
6
|
+
*/
|
|
1
7
|
class DataMap {
|
|
2
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Constructs a new data map.
|
|
11
|
+
*/
|
|
3
12
|
constructor() {
|
|
4
13
|
|
|
14
|
+
/**
|
|
15
|
+
* `DataMap` internally uses a weak map
|
|
16
|
+
* to manage its data.
|
|
17
|
+
*
|
|
18
|
+
* @type {WeakMap}
|
|
19
|
+
*/
|
|
5
20
|
this.data = new WeakMap();
|
|
6
21
|
|
|
7
22
|
}
|
|
8
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Returns the dictionary for the given object.
|
|
26
|
+
*
|
|
27
|
+
* @param {Object} object - The object.
|
|
28
|
+
* @return {Object} The dictionary.
|
|
29
|
+
*/
|
|
9
30
|
get( object ) {
|
|
10
31
|
|
|
11
32
|
let map = this.data.get( object );
|
|
@@ -21,9 +42,15 @@ class DataMap {
|
|
|
21
42
|
|
|
22
43
|
}
|
|
23
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Deletes the dictionary for the given object.
|
|
47
|
+
*
|
|
48
|
+
* @param {Object} object - The object.
|
|
49
|
+
* @return {Object?} The deleted dictionary.
|
|
50
|
+
*/
|
|
24
51
|
delete( object ) {
|
|
25
52
|
|
|
26
|
-
let map;
|
|
53
|
+
let map = null;
|
|
27
54
|
|
|
28
55
|
if ( this.data.has( object ) ) {
|
|
29
56
|
|
|
@@ -37,12 +64,21 @@ class DataMap {
|
|
|
37
64
|
|
|
38
65
|
}
|
|
39
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Returns `true` if the given object has a dictionary defined.
|
|
69
|
+
*
|
|
70
|
+
* @param {Object} object - The object to test.
|
|
71
|
+
* @return {Boolean} Whether a dictionary is defined or not.
|
|
72
|
+
*/
|
|
40
73
|
has( object ) {
|
|
41
74
|
|
|
42
75
|
return this.data.has( object );
|
|
43
76
|
|
|
44
77
|
}
|
|
45
78
|
|
|
79
|
+
/**
|
|
80
|
+
* Frees internal resources.
|
|
81
|
+
*/
|
|
46
82
|
dispose() {
|
|
47
83
|
|
|
48
84
|
this.data = new WeakMap();
|
|
@@ -3,6 +3,14 @@ import { AttributeType } from './Constants.js';
|
|
|
3
3
|
|
|
4
4
|
import { Uint16BufferAttribute, Uint32BufferAttribute } from '../../core/BufferAttribute.js';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Returns `true` if the given array has values that require an Uint32 array type.
|
|
8
|
+
*
|
|
9
|
+
* @private
|
|
10
|
+
* @function
|
|
11
|
+
* @param {Array<Number>} array - The array to test.
|
|
12
|
+
* @return {Booolean} Whether the given array has values that require an Uint32 array type or not.
|
|
13
|
+
*/
|
|
6
14
|
function arrayNeedsUint32( array ) {
|
|
7
15
|
|
|
8
16
|
// assumes larger values usually on last
|
|
@@ -17,12 +25,28 @@ function arrayNeedsUint32( array ) {
|
|
|
17
25
|
|
|
18
26
|
}
|
|
19
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Returns the wireframe version for the given geometry.
|
|
30
|
+
*
|
|
31
|
+
* @private
|
|
32
|
+
* @function
|
|
33
|
+
* @param {BufferGeometry} geometry - The geometry.
|
|
34
|
+
* @return {Number} The versio.
|
|
35
|
+
*/
|
|
20
36
|
function getWireframeVersion( geometry ) {
|
|
21
37
|
|
|
22
38
|
return ( geometry.index !== null ) ? geometry.index.version : geometry.attributes.position.version;
|
|
23
39
|
|
|
24
40
|
}
|
|
25
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Returns a wireframe index attribute for the given geometry.
|
|
44
|
+
*
|
|
45
|
+
* @private
|
|
46
|
+
* @function
|
|
47
|
+
* @param {BufferGeometry} geometry - The geometry.
|
|
48
|
+
* @return {BufferAttribute} The wireframe index attribute.
|
|
49
|
+
*/
|
|
26
50
|
function getWireframeIndex( geometry ) {
|
|
27
51
|
|
|
28
52
|
const indices = [];
|
|
@@ -67,21 +91,61 @@ function getWireframeIndex( geometry ) {
|
|
|
67
91
|
|
|
68
92
|
}
|
|
69
93
|
|
|
94
|
+
/**
|
|
95
|
+
* This renderer module manages geometries.
|
|
96
|
+
*
|
|
97
|
+
* @private
|
|
98
|
+
* @augments DataMap
|
|
99
|
+
*/
|
|
70
100
|
class Geometries extends DataMap {
|
|
71
101
|
|
|
102
|
+
/**
|
|
103
|
+
* Constructs a new geometry management component.
|
|
104
|
+
*
|
|
105
|
+
* @param {Attributes} attributes - Renderer component for managing attributes.
|
|
106
|
+
* @param {Info} info - Renderer component for managing metrics and monitoring data.
|
|
107
|
+
*/
|
|
72
108
|
constructor( attributes, info ) {
|
|
73
109
|
|
|
74
110
|
super();
|
|
75
111
|
|
|
112
|
+
/**
|
|
113
|
+
* Renderer component for managing attributes.
|
|
114
|
+
*
|
|
115
|
+
* @type {Attributes}
|
|
116
|
+
*/
|
|
76
117
|
this.attributes = attributes;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Renderer component for managing metrics and monitoring data.
|
|
121
|
+
*
|
|
122
|
+
* @type {Info}
|
|
123
|
+
*/
|
|
77
124
|
this.info = info;
|
|
78
125
|
|
|
126
|
+
/**
|
|
127
|
+
* Weak Map for managing attributes for wireframe rendering.
|
|
128
|
+
*
|
|
129
|
+
* @type {WeakMap<BufferGeometry,BufferAttribute>}
|
|
130
|
+
*/
|
|
79
131
|
this.wireframes = new WeakMap();
|
|
80
132
|
|
|
133
|
+
/**
|
|
134
|
+
* This Weak Map is used to make sure buffer attributes are
|
|
135
|
+
* updated only once per render call.
|
|
136
|
+
*
|
|
137
|
+
* @type {WeakMap<BufferAttribute,Number>}
|
|
138
|
+
*/
|
|
81
139
|
this.attributeCall = new WeakMap();
|
|
82
140
|
|
|
83
141
|
}
|
|
84
142
|
|
|
143
|
+
/**
|
|
144
|
+
* Returns `true` if the given render object has an initialized geometry.
|
|
145
|
+
*
|
|
146
|
+
* @param {RenderObject} renderObject - The render object.
|
|
147
|
+
* @return {Boolean} Whether if the given render object has an initialized geometry or not.
|
|
148
|
+
*/
|
|
85
149
|
has( renderObject ) {
|
|
86
150
|
|
|
87
151
|
const geometry = renderObject.geometry;
|
|
@@ -90,6 +154,11 @@ class Geometries extends DataMap {
|
|
|
90
154
|
|
|
91
155
|
}
|
|
92
156
|
|
|
157
|
+
/**
|
|
158
|
+
* Prepares the geometry of the given render object for rendering.
|
|
159
|
+
*
|
|
160
|
+
* @param {RenderObject} renderObject - The render object.
|
|
161
|
+
*/
|
|
93
162
|
updateForRender( renderObject ) {
|
|
94
163
|
|
|
95
164
|
if ( this.has( renderObject ) === false ) this.initGeometry( renderObject );
|
|
@@ -98,6 +167,11 @@ class Geometries extends DataMap {
|
|
|
98
167
|
|
|
99
168
|
}
|
|
100
169
|
|
|
170
|
+
/**
|
|
171
|
+
* Initializes the geometry of the given render object.
|
|
172
|
+
*
|
|
173
|
+
* @param {RenderObject} renderObject - The render object.
|
|
174
|
+
*/
|
|
101
175
|
initGeometry( renderObject ) {
|
|
102
176
|
|
|
103
177
|
const geometry = renderObject.geometry;
|
|
@@ -142,6 +216,11 @@ class Geometries extends DataMap {
|
|
|
142
216
|
|
|
143
217
|
}
|
|
144
218
|
|
|
219
|
+
/**
|
|
220
|
+
* Updates the geometry attributes of the given render object.
|
|
221
|
+
*
|
|
222
|
+
* @param {RenderObject} renderObject - The render object.
|
|
223
|
+
*/
|
|
145
224
|
updateAttributes( renderObject ) {
|
|
146
225
|
|
|
147
226
|
// attributes
|
|
@@ -184,6 +263,12 @@ class Geometries extends DataMap {
|
|
|
184
263
|
|
|
185
264
|
}
|
|
186
265
|
|
|
266
|
+
/**
|
|
267
|
+
* Updates the given attribute.
|
|
268
|
+
*
|
|
269
|
+
* @param {BufferAttribute} attribute - The attribute to update.
|
|
270
|
+
* @param {Number} type - The attribute type.
|
|
271
|
+
*/
|
|
187
272
|
updateAttribute( attribute, type ) {
|
|
188
273
|
|
|
189
274
|
const callId = this.info.render.calls;
|
|
@@ -220,12 +305,25 @@ class Geometries extends DataMap {
|
|
|
220
305
|
|
|
221
306
|
}
|
|
222
307
|
|
|
308
|
+
/**
|
|
309
|
+
* Returns the indirect buffer attribute of the given render object.
|
|
310
|
+
*
|
|
311
|
+
* @param {RenderObject} renderObject - The render object.
|
|
312
|
+
* @return {BufferAttribute?} The indirect attribute. `null` if no indirect drawing is used.
|
|
313
|
+
*/
|
|
223
314
|
getIndirect( renderObject ) {
|
|
224
315
|
|
|
225
316
|
return renderObject.geometry.indirect;
|
|
226
317
|
|
|
227
318
|
}
|
|
228
319
|
|
|
320
|
+
/**
|
|
321
|
+
* Returns the index of the given render object's geometry. This is implemented
|
|
322
|
+
* in a method to return a wireframe index if necessary.
|
|
323
|
+
*
|
|
324
|
+
* @param {RenderObject} renderObject - The render object.
|
|
325
|
+
* @return {BufferAttribute?} The index. Returns `null` for non-indexed geometries.
|
|
326
|
+
*/
|
|
229
327
|
getIndex( renderObject ) {
|
|
230
328
|
|
|
231
329
|
const { geometry, material } = renderObject;
|
|
@@ -1,11 +1,34 @@
|
|
|
1
1
|
import StorageBufferAttribute from './StorageBufferAttribute.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* This special type of buffer attribute is intended for compute shaders.
|
|
5
|
+
* It can be used to encode draw parameters for indirect draw calls.
|
|
6
|
+
*
|
|
7
|
+
* Note: This type of buffer attribute can only be used with `WebGPURenderer`
|
|
8
|
+
* and a WebGPU backend.
|
|
9
|
+
*
|
|
10
|
+
* @augments StorageBufferAttribute
|
|
11
|
+
*/
|
|
3
12
|
class IndirectStorageBufferAttribute extends StorageBufferAttribute {
|
|
4
13
|
|
|
5
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new storage buffer attribute.
|
|
16
|
+
*
|
|
17
|
+
* @param {Number|Uint32Array} count - The item count. It is also valid to pass a `Uint32Array` as an argument.
|
|
18
|
+
* The subsequent parameter is then obsolete.
|
|
19
|
+
* @param {Number} itemSize - The item size.
|
|
20
|
+
*/
|
|
21
|
+
constructor( count, itemSize ) {
|
|
6
22
|
|
|
7
|
-
super(
|
|
23
|
+
super( count, itemSize, Uint32Array );
|
|
8
24
|
|
|
25
|
+
/**
|
|
26
|
+
* This flag can be used for type testing.
|
|
27
|
+
*
|
|
28
|
+
* @type {Boolean}
|
|
29
|
+
* @readonly
|
|
30
|
+
* @default true
|
|
31
|
+
*/
|
|
9
32
|
this.isIndirectStorageBufferAttribute = true;
|
|
10
33
|
|
|
11
34
|
}
|