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
|
@@ -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,15 +128,27 @@ 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
|
-
this.shadowPass = ( scene.overrideMaterial !== null && scene.overrideMaterial.
|
|
139
|
+
this.shadowPass = ( scene.overrideMaterial !== null && scene.overrideMaterial.isShadowPassMaterial );
|
|
65
140
|
this.viewMatrix = camera.matrixWorldInverse;
|
|
66
141
|
|
|
67
142
|
this.viewNormalMatrix.getNormalMatrix( this.viewMatrix );
|
|
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,25 @@
|
|
|
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
|
+
* You can also pass a single THREE.Color, hex or
|
|
16
|
+
* string argument to this constructor.
|
|
17
|
+
*
|
|
18
|
+
* @param {Number|String} [r=1] - The red value.
|
|
19
|
+
* @param {Number} [g=1] - The green value.
|
|
20
|
+
* @param {Number} [b=1] - The blue value.
|
|
21
|
+
* @param {Number} [a=1] - The alpha value.
|
|
22
|
+
*/
|
|
5
23
|
constructor( r, g, b, a = 1 ) {
|
|
6
24
|
|
|
7
25
|
super( r, g, b );
|
|
@@ -10,6 +28,17 @@ class Color4 extends Color {
|
|
|
10
28
|
|
|
11
29
|
}
|
|
12
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Overwrites the default to honor alpha.
|
|
33
|
+
* You can also pass a single THREE.Color, hex or
|
|
34
|
+
* string argument to this method.
|
|
35
|
+
*
|
|
36
|
+
* @param {Number|String} r - The red value.
|
|
37
|
+
* @param {Number} g - The green value.
|
|
38
|
+
* @param {Number} b - The blue value.
|
|
39
|
+
* @param {Number} [a=1] - The alpha value.
|
|
40
|
+
* @return {Color4} A reference to this object.
|
|
41
|
+
*/
|
|
13
42
|
set( r, g, b, a = 1 ) {
|
|
14
43
|
|
|
15
44
|
this.a = a;
|
|
@@ -18,6 +47,12 @@ class Color4 extends Color {
|
|
|
18
47
|
|
|
19
48
|
}
|
|
20
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Overwrites the default to honor alpha.
|
|
52
|
+
*
|
|
53
|
+
* @param {Color4} color - The color to copy.
|
|
54
|
+
* @return {Color4} A reference to this object.
|
|
55
|
+
*/
|
|
21
56
|
copy( color ) {
|
|
22
57
|
|
|
23
58
|
if ( color.a !== undefined ) this.a = color.a;
|
|
@@ -26,6 +61,11 @@ class Color4 extends Color {
|
|
|
26
61
|
|
|
27
62
|
}
|
|
28
63
|
|
|
64
|
+
/**
|
|
65
|
+
* Overwrites the default to honor alpha.
|
|
66
|
+
*
|
|
67
|
+
* @return {Color4} The cloned color.
|
|
68
|
+
*/
|
|
29
69
|
clone() {
|
|
30
70
|
|
|
31
71
|
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();
|
|
@@ -1,28 +1,31 @@
|
|
|
1
1
|
import DataMap from './DataMap.js';
|
|
2
2
|
import { AttributeType } from './Constants.js';
|
|
3
|
+
import { arrayNeedsUint32 } from '../../utils.js';
|
|
3
4
|
|
|
4
5
|
import { Uint16BufferAttribute, Uint32BufferAttribute } from '../../core/BufferAttribute.js';
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
return false;
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Returns the wireframe version for the given geometry.
|
|
9
|
+
*
|
|
10
|
+
* @private
|
|
11
|
+
* @function
|
|
12
|
+
* @param {BufferGeometry} geometry - The geometry.
|
|
13
|
+
* @return {Number} The version.
|
|
14
|
+
*/
|
|
20
15
|
function getWireframeVersion( geometry ) {
|
|
21
16
|
|
|
22
17
|
return ( geometry.index !== null ) ? geometry.index.version : geometry.attributes.position.version;
|
|
23
18
|
|
|
24
19
|
}
|
|
25
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Returns a wireframe index attribute for the given geometry.
|
|
23
|
+
*
|
|
24
|
+
* @private
|
|
25
|
+
* @function
|
|
26
|
+
* @param {BufferGeometry} geometry - The geometry.
|
|
27
|
+
* @return {BufferAttribute} The wireframe index attribute.
|
|
28
|
+
*/
|
|
26
29
|
function getWireframeIndex( geometry ) {
|
|
27
30
|
|
|
28
31
|
const indices = [];
|
|
@@ -67,21 +70,61 @@ function getWireframeIndex( geometry ) {
|
|
|
67
70
|
|
|
68
71
|
}
|
|
69
72
|
|
|
73
|
+
/**
|
|
74
|
+
* This renderer module manages geometries.
|
|
75
|
+
*
|
|
76
|
+
* @private
|
|
77
|
+
* @augments DataMap
|
|
78
|
+
*/
|
|
70
79
|
class Geometries extends DataMap {
|
|
71
80
|
|
|
81
|
+
/**
|
|
82
|
+
* Constructs a new geometry management component.
|
|
83
|
+
*
|
|
84
|
+
* @param {Attributes} attributes - Renderer component for managing attributes.
|
|
85
|
+
* @param {Info} info - Renderer component for managing metrics and monitoring data.
|
|
86
|
+
*/
|
|
72
87
|
constructor( attributes, info ) {
|
|
73
88
|
|
|
74
89
|
super();
|
|
75
90
|
|
|
91
|
+
/**
|
|
92
|
+
* Renderer component for managing attributes.
|
|
93
|
+
*
|
|
94
|
+
* @type {Attributes}
|
|
95
|
+
*/
|
|
76
96
|
this.attributes = attributes;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Renderer component for managing metrics and monitoring data.
|
|
100
|
+
*
|
|
101
|
+
* @type {Info}
|
|
102
|
+
*/
|
|
77
103
|
this.info = info;
|
|
78
104
|
|
|
105
|
+
/**
|
|
106
|
+
* Weak Map for managing attributes for wireframe rendering.
|
|
107
|
+
*
|
|
108
|
+
* @type {WeakMap<BufferGeometry,BufferAttribute>}
|
|
109
|
+
*/
|
|
79
110
|
this.wireframes = new WeakMap();
|
|
80
111
|
|
|
112
|
+
/**
|
|
113
|
+
* This Weak Map is used to make sure buffer attributes are
|
|
114
|
+
* updated only once per render call.
|
|
115
|
+
*
|
|
116
|
+
* @type {WeakMap<BufferAttribute,Number>}
|
|
117
|
+
*/
|
|
81
118
|
this.attributeCall = new WeakMap();
|
|
82
119
|
|
|
83
120
|
}
|
|
84
121
|
|
|
122
|
+
/**
|
|
123
|
+
* Returns `true` if the given render object has an initialized geometry.
|
|
124
|
+
*
|
|
125
|
+
* @param {RenderObject} renderObject - The render object.
|
|
126
|
+
* @return {Boolean} Whether if the given render object has an initialized geometry or not.
|
|
127
|
+
*/
|
|
85
128
|
has( renderObject ) {
|
|
86
129
|
|
|
87
130
|
const geometry = renderObject.geometry;
|
|
@@ -90,6 +133,11 @@ class Geometries extends DataMap {
|
|
|
90
133
|
|
|
91
134
|
}
|
|
92
135
|
|
|
136
|
+
/**
|
|
137
|
+
* Prepares the geometry of the given render object for rendering.
|
|
138
|
+
*
|
|
139
|
+
* @param {RenderObject} renderObject - The render object.
|
|
140
|
+
*/
|
|
93
141
|
updateForRender( renderObject ) {
|
|
94
142
|
|
|
95
143
|
if ( this.has( renderObject ) === false ) this.initGeometry( renderObject );
|
|
@@ -98,6 +146,11 @@ class Geometries extends DataMap {
|
|
|
98
146
|
|
|
99
147
|
}
|
|
100
148
|
|
|
149
|
+
/**
|
|
150
|
+
* Initializes the geometry of the given render object.
|
|
151
|
+
*
|
|
152
|
+
* @param {RenderObject} renderObject - The render object.
|
|
153
|
+
*/
|
|
101
154
|
initGeometry( renderObject ) {
|
|
102
155
|
|
|
103
156
|
const geometry = renderObject.geometry;
|
|
@@ -142,6 +195,11 @@ class Geometries extends DataMap {
|
|
|
142
195
|
|
|
143
196
|
}
|
|
144
197
|
|
|
198
|
+
/**
|
|
199
|
+
* Updates the geometry attributes of the given render object.
|
|
200
|
+
*
|
|
201
|
+
* @param {RenderObject} renderObject - The render object.
|
|
202
|
+
*/
|
|
145
203
|
updateAttributes( renderObject ) {
|
|
146
204
|
|
|
147
205
|
// attributes
|
|
@@ -184,6 +242,12 @@ class Geometries extends DataMap {
|
|
|
184
242
|
|
|
185
243
|
}
|
|
186
244
|
|
|
245
|
+
/**
|
|
246
|
+
* Updates the given attribute.
|
|
247
|
+
*
|
|
248
|
+
* @param {BufferAttribute} attribute - The attribute to update.
|
|
249
|
+
* @param {Number} type - The attribute type.
|
|
250
|
+
*/
|
|
187
251
|
updateAttribute( attribute, type ) {
|
|
188
252
|
|
|
189
253
|
const callId = this.info.render.calls;
|
|
@@ -220,12 +284,25 @@ class Geometries extends DataMap {
|
|
|
220
284
|
|
|
221
285
|
}
|
|
222
286
|
|
|
287
|
+
/**
|
|
288
|
+
* Returns the indirect buffer attribute of the given render object.
|
|
289
|
+
*
|
|
290
|
+
* @param {RenderObject} renderObject - The render object.
|
|
291
|
+
* @return {BufferAttribute?} The indirect attribute. `null` if no indirect drawing is used.
|
|
292
|
+
*/
|
|
223
293
|
getIndirect( renderObject ) {
|
|
224
294
|
|
|
225
295
|
return renderObject.geometry.indirect;
|
|
226
296
|
|
|
227
297
|
}
|
|
228
298
|
|
|
299
|
+
/**
|
|
300
|
+
* Returns the index of the given render object's geometry. This is implemented
|
|
301
|
+
* in a method to return a wireframe index if necessary.
|
|
302
|
+
*
|
|
303
|
+
* @param {RenderObject} renderObject - The render object.
|
|
304
|
+
* @return {BufferAttribute?} The index. Returns `null` for non-indexed geometries.
|
|
305
|
+
*/
|
|
229
306
|
getIndex( renderObject ) {
|
|
230
307
|
|
|
231
308
|
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
|
}
|