super-three 0.181.0 → 0.184.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 +3 -4
- package/build/three.cjs +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +2 -3
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +29 -14
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -10,7 +10,7 @@ class Animation {
|
|
|
10
10
|
* Constructs a new animation loop management component.
|
|
11
11
|
*
|
|
12
12
|
* @param {Renderer} renderer - A reference to the main renderer.
|
|
13
|
-
* @param {
|
|
13
|
+
* @param {NodeManager} nodes - Renderer component for managing nodes related logic.
|
|
14
14
|
* @param {Info} info - Renderer component for managing metrics and monitoring data.
|
|
15
15
|
*/
|
|
16
16
|
constructor( renderer, nodes, info ) {
|
|
@@ -25,7 +25,7 @@ class Animation {
|
|
|
25
25
|
/**
|
|
26
26
|
* Renderer component for managing nodes related logic.
|
|
27
27
|
*
|
|
28
|
-
* @type {
|
|
28
|
+
* @type {NodeManager}
|
|
29
29
|
*/
|
|
30
30
|
this.nodes = nodes;
|
|
31
31
|
|
|
@@ -95,7 +95,7 @@ class Animation {
|
|
|
95
95
|
*/
|
|
96
96
|
stop() {
|
|
97
97
|
|
|
98
|
-
this._context.cancelAnimationFrame( this._requestId );
|
|
98
|
+
if ( this._context !== null ) this._context.cancelAnimationFrame( this._requestId );
|
|
99
99
|
|
|
100
100
|
this._requestId = null;
|
|
101
101
|
|
|
@@ -15,8 +15,9 @@ class Attributes extends DataMap {
|
|
|
15
15
|
* Constructs a new attribute management component.
|
|
16
16
|
*
|
|
17
17
|
* @param {Backend} backend - The renderer's backend.
|
|
18
|
+
* @param {Info} info - Renderer component for managing metrics and monitoring data.
|
|
18
19
|
*/
|
|
19
|
-
constructor( backend ) {
|
|
20
|
+
constructor( backend, info ) {
|
|
20
21
|
|
|
21
22
|
super();
|
|
22
23
|
|
|
@@ -27,6 +28,13 @@ class Attributes extends DataMap {
|
|
|
27
28
|
*/
|
|
28
29
|
this.backend = backend;
|
|
29
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Renderer component for managing metrics and monitoring data.
|
|
33
|
+
*
|
|
34
|
+
* @type {Info}
|
|
35
|
+
*/
|
|
36
|
+
this.info = info;
|
|
37
|
+
|
|
30
38
|
}
|
|
31
39
|
|
|
32
40
|
/**
|
|
@@ -43,6 +51,8 @@ class Attributes extends DataMap {
|
|
|
43
51
|
|
|
44
52
|
this.backend.destroyAttribute( attribute );
|
|
45
53
|
|
|
54
|
+
this.info.destroyAttribute( attribute );
|
|
55
|
+
|
|
46
56
|
}
|
|
47
57
|
|
|
48
58
|
return attributeData;
|
|
@@ -65,18 +75,22 @@ class Attributes extends DataMap {
|
|
|
65
75
|
if ( type === AttributeType.VERTEX ) {
|
|
66
76
|
|
|
67
77
|
this.backend.createAttribute( attribute );
|
|
78
|
+
this.info.createAttribute( attribute );
|
|
68
79
|
|
|
69
80
|
} else if ( type === AttributeType.INDEX ) {
|
|
70
81
|
|
|
71
82
|
this.backend.createIndexAttribute( attribute );
|
|
83
|
+
this.info.createIndexAttribute( attribute );
|
|
72
84
|
|
|
73
85
|
} else if ( type === AttributeType.STORAGE ) {
|
|
74
86
|
|
|
75
87
|
this.backend.createStorageAttribute( attribute );
|
|
88
|
+
this.info.createStorageAttribute( attribute );
|
|
76
89
|
|
|
77
90
|
} else if ( type === AttributeType.INDIRECT ) {
|
|
78
91
|
|
|
79
92
|
this.backend.createIndirectStorageAttribute( attribute );
|
|
93
|
+
this.info.createIndirectStorageAttribute( attribute );
|
|
80
94
|
|
|
81
95
|
}
|
|
82
96
|
|
|
@@ -604,14 +604,6 @@ class Backend {
|
|
|
604
604
|
*/
|
|
605
605
|
hasFeature( /*name*/ ) {}
|
|
606
606
|
|
|
607
|
-
/**
|
|
608
|
-
* Returns the maximum anisotropy texture filtering value.
|
|
609
|
-
*
|
|
610
|
-
* @abstract
|
|
611
|
-
* @return {number} The maximum anisotropy texture filtering value.
|
|
612
|
-
*/
|
|
613
|
-
getMaxAnisotropy() {}
|
|
614
|
-
|
|
615
607
|
/**
|
|
616
608
|
* Returns the drawing buffer size.
|
|
617
609
|
*
|
|
@@ -678,6 +670,27 @@ class Backend {
|
|
|
678
670
|
|
|
679
671
|
}
|
|
680
672
|
|
|
673
|
+
/**
|
|
674
|
+
* Checks if the backend has the given compatibility.
|
|
675
|
+
*
|
|
676
|
+
* @abstract
|
|
677
|
+
* @param {string} name - The compatibility.
|
|
678
|
+
* @return {boolean} Whether the backend has the given compatibility or not.
|
|
679
|
+
*/
|
|
680
|
+
hasCompatibility( /*name*/ ) {
|
|
681
|
+
|
|
682
|
+
return false;
|
|
683
|
+
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
/**
|
|
687
|
+
* Initializes the render target defined in the given render context.
|
|
688
|
+
*
|
|
689
|
+
* @abstract
|
|
690
|
+
* @param {RenderContext} renderContext - The render context.
|
|
691
|
+
*/
|
|
692
|
+
initRenderTarget( /*renderContext*/ ) {}
|
|
693
|
+
|
|
681
694
|
/**
|
|
682
695
|
* Sets a dictionary for the given object into the
|
|
683
696
|
* internal data structure.
|
|
@@ -736,6 +749,14 @@ class Backend {
|
|
|
736
749
|
|
|
737
750
|
}
|
|
738
751
|
|
|
752
|
+
/**
|
|
753
|
+
* Delete GPU data associated with a bind group.
|
|
754
|
+
*
|
|
755
|
+
* @abstract
|
|
756
|
+
* @param {BindGroup} bindGroup - The bind group.
|
|
757
|
+
*/
|
|
758
|
+
deleteBindGroupData( /*bindGroup*/ ) { }
|
|
759
|
+
|
|
739
760
|
/**
|
|
740
761
|
* Frees internal resources.
|
|
741
762
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import DataMap from './DataMap.js';
|
|
2
2
|
import Color4 from './Color4.js';
|
|
3
|
-
import { vec4,
|
|
3
|
+
import { vec4, normalWorldGeometry, backgroundBlurriness, backgroundIntensity, backgroundRotation, positionLocal, cameraProjectionMatrix, modelViewMatrix, div } from '../../nodes/TSL.js';
|
|
4
4
|
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
5
5
|
|
|
6
6
|
import { Mesh } from '../../objects/Mesh.js';
|
|
@@ -22,7 +22,7 @@ class Background extends DataMap {
|
|
|
22
22
|
* Constructs a new background management component.
|
|
23
23
|
*
|
|
24
24
|
* @param {Renderer} renderer - The renderer.
|
|
25
|
-
* @param {
|
|
25
|
+
* @param {NodeManager} nodes - Renderer component for managing nodes related logic.
|
|
26
26
|
*/
|
|
27
27
|
constructor( renderer, nodes ) {
|
|
28
28
|
|
|
@@ -38,7 +38,7 @@ class Background extends DataMap {
|
|
|
38
38
|
/**
|
|
39
39
|
* Renderer component for managing nodes related logic.
|
|
40
40
|
*
|
|
41
|
-
* @type {
|
|
41
|
+
* @type {NodeManager}
|
|
42
42
|
*/
|
|
43
43
|
this.nodes = nodes;
|
|
44
44
|
|
|
@@ -88,13 +88,32 @@ class Background extends DataMap {
|
|
|
88
88
|
|
|
89
89
|
if ( backgroundMesh === undefined ) {
|
|
90
90
|
|
|
91
|
-
const backgroundMeshNode =
|
|
91
|
+
const backgroundMeshNode = vec4( backgroundNode ).mul( backgroundIntensity ).context( {
|
|
92
92
|
// @TODO: Add Texture2D support using node context
|
|
93
93
|
getUV: () => backgroundRotation.mul( normalWorldGeometry ),
|
|
94
94
|
getTextureLevel: () => backgroundBlurriness
|
|
95
95
|
} );
|
|
96
96
|
|
|
97
|
-
|
|
97
|
+
// when using orthographic cameras, we must scale the skybox sphere
|
|
98
|
+
// up to exceed the dimensions of the camera's viewing box.
|
|
99
|
+
const isOrtho = cameraProjectionMatrix.element( 3 ).element( 3 ).equal( 1.0 );
|
|
100
|
+
|
|
101
|
+
// calculate the orthographic scale
|
|
102
|
+
// projectionMatrix[1][1] is (1 / top). Invert it to get the height and multiply by 3.0
|
|
103
|
+
// (an arbitrary safety factor) to ensure the skybox is large enough to cover the corners
|
|
104
|
+
// of the rectangular screen
|
|
105
|
+
const orthoScale = div( 1.0, cameraProjectionMatrix.element( 1 ).element( 1 ) ).mul( 3.0 );
|
|
106
|
+
|
|
107
|
+
// compute vertex position
|
|
108
|
+
const modifiedPosition = isOrtho.select( positionLocal.mul( orthoScale ), positionLocal );
|
|
109
|
+
|
|
110
|
+
// by using a w component of 0, the skybox will not translate when the camera moves through the scene
|
|
111
|
+
const viewPosition = modelViewMatrix.mul( vec4( modifiedPosition, 0.0 ) );
|
|
112
|
+
|
|
113
|
+
// we force w=1.0 here to prevent the w_clip=0 divide-by-zero error for ortho cameras.
|
|
114
|
+
let viewProj = cameraProjectionMatrix.mul( vec4( viewPosition.xyz, 1.0 ) );
|
|
115
|
+
|
|
116
|
+
// force background to far plane so it does not occlude objects
|
|
98
117
|
viewProj = viewProj.setZ( viewProj.w );
|
|
99
118
|
|
|
100
119
|
const nodeMaterial = new NodeMaterial();
|
|
@@ -113,12 +132,6 @@ class Background extends DataMap {
|
|
|
113
132
|
backgroundMesh.frustumCulled = false;
|
|
114
133
|
backgroundMesh.name = 'Background.mesh';
|
|
115
134
|
|
|
116
|
-
backgroundMesh.onBeforeRender = function ( renderer, scene, camera ) {
|
|
117
|
-
|
|
118
|
-
this.matrixWorld.copyPosition( camera.matrixWorld );
|
|
119
|
-
|
|
120
|
-
};
|
|
121
|
-
|
|
122
135
|
function onBackgroundDispose() {
|
|
123
136
|
|
|
124
137
|
background.removeEventListener( 'dispose', onBackgroundDispose );
|
|
@@ -190,8 +203,8 @@ class Background extends DataMap {
|
|
|
190
203
|
|
|
191
204
|
//
|
|
192
205
|
|
|
193
|
-
renderContext.depthClearValue = renderer.
|
|
194
|
-
renderContext.stencilClearValue = renderer.
|
|
206
|
+
renderContext.depthClearValue = renderer.getClearDepth();
|
|
207
|
+
renderContext.stencilClearValue = renderer.getClearStencil();
|
|
195
208
|
|
|
196
209
|
renderContext.clearColor = renderer.autoClearColor === true;
|
|
197
210
|
renderContext.clearDepth = renderer.autoClearDepth === true;
|
|
@@ -15,9 +15,8 @@ class BindGroup {
|
|
|
15
15
|
* @param {string} name - The bind group's name.
|
|
16
16
|
* @param {Array<Binding>} bindings - An array of bindings.
|
|
17
17
|
* @param {number} index - The group index.
|
|
18
|
-
* @param {Array<Binding>} bindingsReference - An array of reference bindings.
|
|
19
18
|
*/
|
|
20
|
-
constructor( name = '', bindings = []
|
|
19
|
+
constructor( name = '', bindings = [] ) {
|
|
21
20
|
|
|
22
21
|
/**
|
|
23
22
|
* The bind group's name.
|
|
@@ -33,20 +32,6 @@ class BindGroup {
|
|
|
33
32
|
*/
|
|
34
33
|
this.bindings = bindings;
|
|
35
34
|
|
|
36
|
-
/**
|
|
37
|
-
* The group index.
|
|
38
|
-
*
|
|
39
|
-
* @type {number}
|
|
40
|
-
*/
|
|
41
|
-
this.index = index;
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* An array of reference bindings.
|
|
45
|
-
*
|
|
46
|
-
* @type {Array<Binding>}
|
|
47
|
-
*/
|
|
48
|
-
this.bindingsReference = bindingsReference;
|
|
49
|
-
|
|
50
35
|
/**
|
|
51
36
|
* The group's ID.
|
|
52
37
|
*
|
|
@@ -44,6 +44,17 @@ class Binding {
|
|
|
44
44
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
/**
|
|
48
|
+
* The shader stages in which the binding's resource is visible.
|
|
49
|
+
*
|
|
50
|
+
* @return {number} The visibility bitmask.
|
|
51
|
+
*/
|
|
52
|
+
getVisibility() {
|
|
53
|
+
|
|
54
|
+
return this.visibility;
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
47
58
|
/**
|
|
48
59
|
* Clones the binding.
|
|
49
60
|
*
|
|
@@ -13,7 +13,7 @@ class Bindings extends DataMap {
|
|
|
13
13
|
* Constructs a new bindings management component.
|
|
14
14
|
*
|
|
15
15
|
* @param {Backend} backend - The renderer's backend.
|
|
16
|
-
* @param {
|
|
16
|
+
* @param {NodeManager} nodes - Renderer component for managing nodes related logic.
|
|
17
17
|
* @param {Textures} textures - Renderer component for managing textures.
|
|
18
18
|
* @param {Attributes} attributes - Renderer component for managing attributes.
|
|
19
19
|
* @param {Pipelines} pipelines - Renderer component for managing pipelines.
|
|
@@ -54,7 +54,7 @@ class Bindings extends DataMap {
|
|
|
54
54
|
/**
|
|
55
55
|
* Renderer component for managing nodes related logic.
|
|
56
56
|
*
|
|
57
|
-
* @type {
|
|
57
|
+
* @type {NodeManager}
|
|
58
58
|
*/
|
|
59
59
|
this.nodes = nodes;
|
|
60
60
|
|
|
@@ -164,6 +164,7 @@ class Bindings extends DataMap {
|
|
|
164
164
|
|
|
165
165
|
for ( const bindGroup of bindings ) {
|
|
166
166
|
|
|
167
|
+
this.backend.deleteBindGroupData( bindGroup );
|
|
167
168
|
this.delete( bindGroup );
|
|
168
169
|
|
|
169
170
|
}
|
|
@@ -181,6 +182,7 @@ class Bindings extends DataMap {
|
|
|
181
182
|
|
|
182
183
|
for ( const bindGroup of bindings ) {
|
|
183
184
|
|
|
185
|
+
this.backend.deleteBindGroupData( bindGroup );
|
|
184
186
|
this.delete( bindGroup );
|
|
185
187
|
|
|
186
188
|
}
|
|
@@ -251,24 +253,31 @@ class Bindings extends DataMap {
|
|
|
251
253
|
|
|
252
254
|
for ( const binding of bindGroup.bindings ) {
|
|
253
255
|
|
|
254
|
-
|
|
256
|
+
const updatedGroup = this.nodes.updateGroup( binding );
|
|
255
257
|
|
|
256
|
-
|
|
258
|
+
// every uniforms group is a uniform buffer. So if no update is required,
|
|
259
|
+
// we move one with the next binding. Otherwise the next if block will update the group.
|
|
257
260
|
|
|
258
|
-
|
|
259
|
-
// we move one with the next binding. Otherwise the next if block will update the group.
|
|
261
|
+
if ( updatedGroup === false ) continue;
|
|
260
262
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
}
|
|
263
|
+
//
|
|
264
264
|
|
|
265
265
|
if ( binding.isStorageBuffer ) {
|
|
266
266
|
|
|
267
267
|
const attribute = binding.attribute;
|
|
268
268
|
const attributeType = attribute.isIndirectStorageBufferAttribute ? AttributeType.INDIRECT : AttributeType.STORAGE;
|
|
269
269
|
|
|
270
|
+
const bindingData = backend.get( binding );
|
|
271
|
+
|
|
270
272
|
this.attributes.update( attribute, attributeType );
|
|
271
273
|
|
|
274
|
+
if ( bindingData.attribute !== attribute ) {
|
|
275
|
+
|
|
276
|
+
bindingData.attribute = attribute;
|
|
277
|
+
|
|
278
|
+
needsBindingsUpdate = true;
|
|
279
|
+
|
|
280
|
+
}
|
|
272
281
|
|
|
273
282
|
}
|
|
274
283
|
|
|
@@ -297,7 +306,7 @@ class Bindings extends DataMap {
|
|
|
297
306
|
|
|
298
307
|
this.textures.updateTexture( texture );
|
|
299
308
|
|
|
300
|
-
// generation: update the bindings if a
|
|
309
|
+
// generation: update the bindings if the binding refers to a different texture object
|
|
301
310
|
|
|
302
311
|
if ( binding.generation !== texturesTextureData.generation ) {
|
|
303
312
|
|
|
@@ -305,10 +314,12 @@ class Bindings extends DataMap {
|
|
|
305
314
|
|
|
306
315
|
needsBindingsUpdate = true;
|
|
307
316
|
|
|
308
|
-
cacheBindings = false;
|
|
309
|
-
|
|
310
317
|
}
|
|
311
318
|
|
|
319
|
+
// keep track which bind groups refer to the current texture (this is needed for dispose)
|
|
320
|
+
|
|
321
|
+
texturesTextureData.bindGroups.add( bindGroup );
|
|
322
|
+
|
|
312
323
|
}
|
|
313
324
|
|
|
314
325
|
const textureData = backend.get( texture );
|
|
@@ -356,14 +367,18 @@ class Bindings extends DataMap {
|
|
|
356
367
|
|
|
357
368
|
needsBindingsUpdate = true;
|
|
358
369
|
|
|
359
|
-
cacheBindings = false;
|
|
360
|
-
|
|
361
370
|
}
|
|
362
371
|
|
|
363
372
|
}
|
|
364
373
|
|
|
365
374
|
}
|
|
366
375
|
|
|
376
|
+
if ( binding.isBuffer && binding.updateRanges.length > 0 ) {
|
|
377
|
+
|
|
378
|
+
binding.clearUpdateRanges();
|
|
379
|
+
|
|
380
|
+
}
|
|
381
|
+
|
|
367
382
|
}
|
|
368
383
|
|
|
369
384
|
if ( needsBindingsUpdate === true ) {
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { NormalBlending, AddEquation, SrcAlphaFactor, OneMinusSrcAlphaFactor } from '../../constants.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Represents blending configuration.
|
|
5
|
+
*
|
|
6
|
+
* This class encapsulates all blending-related properties that control how
|
|
7
|
+
* a material's colors are combined with the colors already in the frame buffer.
|
|
8
|
+
*/
|
|
9
|
+
class BlendMode {
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Constructs a new blending configuration.
|
|
13
|
+
*
|
|
14
|
+
* @param {(NoBlending|NormalBlending|AdditiveBlending|SubtractiveBlending|MultiplyBlending|CustomBlending|MaterialBlending)} [blending=NormalBlending] - The blending mode.
|
|
15
|
+
*/
|
|
16
|
+
constructor( blending = NormalBlending ) {
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Defines the blending type.
|
|
20
|
+
*
|
|
21
|
+
* It must be set to `CustomBlending` if custom blending properties like
|
|
22
|
+
* {@link BlendMode#blendSrc}, {@link BlendMode#blendDst} or {@link BlendMode#blendEquation}
|
|
23
|
+
* should have any effect.
|
|
24
|
+
*
|
|
25
|
+
* @type {(NoBlending|NormalBlending|AdditiveBlending|SubtractiveBlending|MultiplyBlending|CustomBlending|MaterialBlending)}
|
|
26
|
+
* @default NormalBlending
|
|
27
|
+
*/
|
|
28
|
+
this.blending = blending;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Defines the blending source factor.
|
|
32
|
+
*
|
|
33
|
+
* This determines how the source (incoming) fragment color is factored before being added
|
|
34
|
+
* to the destination (existing) fragment color in the frame buffer.
|
|
35
|
+
*
|
|
36
|
+
* @type {(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}
|
|
37
|
+
* @default SrcAlphaFactor
|
|
38
|
+
*/
|
|
39
|
+
this.blendSrc = SrcAlphaFactor;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Defines the blending destination factor.
|
|
43
|
+
*
|
|
44
|
+
* This determines how the destination (existing) fragment color in the frame buffer
|
|
45
|
+
* is factored before being combined with the source (incoming) fragment color.
|
|
46
|
+
*
|
|
47
|
+
* @type {(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}
|
|
48
|
+
* @default OneMinusSrcAlphaFactor
|
|
49
|
+
*/
|
|
50
|
+
this.blendDst = OneMinusSrcAlphaFactor;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Defines the blending equation.
|
|
54
|
+
*
|
|
55
|
+
* This determines how the source and destination colors are combined.
|
|
56
|
+
*
|
|
57
|
+
* @type {(AddEquation|SubtractEquation|ReverseSubtractEquation|MinEquation|MaxEquation)}
|
|
58
|
+
* @default AddEquation
|
|
59
|
+
*/
|
|
60
|
+
this.blendEquation = AddEquation;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Defines the blending source alpha factor.
|
|
64
|
+
*
|
|
65
|
+
* When set, this allows separate control of the alpha channel's source blending factor.
|
|
66
|
+
* If `null`, {@link BlendMode#blendSrc} is used for the alpha channel as well.
|
|
67
|
+
*
|
|
68
|
+
* @type {?(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}
|
|
69
|
+
* @default null
|
|
70
|
+
*/
|
|
71
|
+
this.blendSrcAlpha = null;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Defines the blending destination alpha factor.
|
|
75
|
+
*
|
|
76
|
+
* When set, this allows separate control of the alpha channel's destination blending factor.
|
|
77
|
+
* If `null`, {@link BlendMode#blendDst} is used for the alpha channel as well.
|
|
78
|
+
*
|
|
79
|
+
* @type {?(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}
|
|
80
|
+
* @default null
|
|
81
|
+
*/
|
|
82
|
+
this.blendDstAlpha = null;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Defines the blending equation of the alpha channel.
|
|
86
|
+
*
|
|
87
|
+
* When set, this allows separate control of the alpha channel's blending equation.
|
|
88
|
+
* If `null`, {@link BlendMode#blendEquation} is used for the alpha channel as well.
|
|
89
|
+
*
|
|
90
|
+
* @type {?(AddEquation|SubtractEquation|ReverseSubtractEquation|MinEquation|MaxEquation)}
|
|
91
|
+
* @default null
|
|
92
|
+
*/
|
|
93
|
+
this.blendEquationAlpha = null;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Defines whether to premultiply the alpha (transparency) value.
|
|
97
|
+
*
|
|
98
|
+
* If `true`, the RGB color of the texture or material is multiplied by its alpha value.
|
|
99
|
+
* This is useful for transparent textures/materials where the color data
|
|
100
|
+
* should already include the transparency information.
|
|
101
|
+
*
|
|
102
|
+
* @type {boolean}
|
|
103
|
+
* @default false
|
|
104
|
+
*/
|
|
105
|
+
this.premultiplyAlpha = false;
|
|
106
|
+
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Copies the blending properties from the given source to this instance.
|
|
111
|
+
*
|
|
112
|
+
* @param {BlendMode} source - The blending configuration to copy from.
|
|
113
|
+
* @return {BlendMode} A reference to this instance.
|
|
114
|
+
*/
|
|
115
|
+
copy( source ) {
|
|
116
|
+
|
|
117
|
+
this.blending = source.blending;
|
|
118
|
+
this.blendSrc = source.blendSrc;
|
|
119
|
+
this.blendDst = source.blendDst;
|
|
120
|
+
this.blendEquation = source.blendEquation;
|
|
121
|
+
this.blendSrcAlpha = source.blendSrcAlpha;
|
|
122
|
+
this.blendDstAlpha = source.blendDstAlpha;
|
|
123
|
+
this.blendEquationAlpha = source.blendEquationAlpha;
|
|
124
|
+
this.premultiplyAlpha = source.premultiplyAlpha;
|
|
125
|
+
|
|
126
|
+
return this;
|
|
127
|
+
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Returns a clone of this blending configuration.
|
|
132
|
+
*
|
|
133
|
+
* @return {BlendMode} A new Blending instance with the same properties.
|
|
134
|
+
*/
|
|
135
|
+
clone() {
|
|
136
|
+
|
|
137
|
+
return new this.constructor().copy( this );
|
|
138
|
+
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export default BlendMode;
|
|
@@ -44,6 +44,46 @@ class Buffer extends Binding {
|
|
|
44
44
|
*/
|
|
45
45
|
this._buffer = buffer;
|
|
46
46
|
|
|
47
|
+
/**
|
|
48
|
+
* An array of update ranges.
|
|
49
|
+
*
|
|
50
|
+
* @private
|
|
51
|
+
* @type {Array<{start: number, count: number}>}
|
|
52
|
+
*/
|
|
53
|
+
this._updateRanges = [];
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The array of update ranges.
|
|
59
|
+
*
|
|
60
|
+
* @type {Array<{start: number, count: number}>}
|
|
61
|
+
*/
|
|
62
|
+
get updateRanges() {
|
|
63
|
+
|
|
64
|
+
return this._updateRanges;
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Adds an update range.
|
|
70
|
+
*
|
|
71
|
+
* @param {number} start - The start index.
|
|
72
|
+
* @param {number} count - The number of elements.
|
|
73
|
+
*/
|
|
74
|
+
addUpdateRange( start, count ) {
|
|
75
|
+
|
|
76
|
+
this.updateRanges.push( { start, count } );
|
|
77
|
+
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Clears all update ranges.
|
|
82
|
+
*/
|
|
83
|
+
clearUpdateRanges() {
|
|
84
|
+
|
|
85
|
+
this.updateRanges.length = 0;
|
|
86
|
+
|
|
47
87
|
}
|
|
48
88
|
|
|
49
89
|
/**
|
|
@@ -44,7 +44,7 @@ class BundleGroup extends Group {
|
|
|
44
44
|
/**
|
|
45
45
|
* Whether the bundle is static or not. When set to `true`, the structure
|
|
46
46
|
* is assumed to be static and does not change. E.g. no new objects are
|
|
47
|
-
* added to the group
|
|
47
|
+
* added to the group.
|
|
48
48
|
*
|
|
49
49
|
* If a change is required, an update can still be forced by setting the
|
|
50
50
|
* `needsUpdate` flag to `true`.
|
|
@@ -14,11 +14,35 @@ class ChainMap {
|
|
|
14
14
|
constructor() {
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* A map of Weak Maps by their key length.
|
|
18
18
|
*
|
|
19
|
-
* @type {
|
|
19
|
+
* @type {Object<number, WeakMap>}
|
|
20
20
|
*/
|
|
21
|
-
this.
|
|
21
|
+
this.weakMaps = {};
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Returns the Weak Map for the given keys.
|
|
28
|
+
*
|
|
29
|
+
* @param {Array<Object>} keys - List of keys.
|
|
30
|
+
* @return {WeakMap} The weak map.
|
|
31
|
+
*/
|
|
32
|
+
_getWeakMap( keys ) {
|
|
33
|
+
|
|
34
|
+
const length = keys.length;
|
|
35
|
+
|
|
36
|
+
let weakMap = this.weakMaps[ length ];
|
|
37
|
+
|
|
38
|
+
if ( weakMap === undefined ) {
|
|
39
|
+
|
|
40
|
+
weakMap = new WeakMap();
|
|
41
|
+
this.weakMaps[ length ] = weakMap;
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return weakMap;
|
|
22
46
|
|
|
23
47
|
}
|
|
24
48
|
|
|
@@ -30,7 +54,7 @@ class ChainMap {
|
|
|
30
54
|
*/
|
|
31
55
|
get( keys ) {
|
|
32
56
|
|
|
33
|
-
let map = this.
|
|
57
|
+
let map = this._getWeakMap( keys );
|
|
34
58
|
|
|
35
59
|
for ( let i = 0; i < keys.length - 1; i ++ ) {
|
|
36
60
|
|
|
@@ -53,7 +77,7 @@ class ChainMap {
|
|
|
53
77
|
*/
|
|
54
78
|
set( keys, value ) {
|
|
55
79
|
|
|
56
|
-
let map = this.
|
|
80
|
+
let map = this._getWeakMap( keys );
|
|
57
81
|
|
|
58
82
|
for ( let i = 0; i < keys.length - 1; i ++ ) {
|
|
59
83
|
|
|
@@ -79,7 +103,7 @@ class ChainMap {
|
|
|
79
103
|
*/
|
|
80
104
|
delete( keys ) {
|
|
81
105
|
|
|
82
|
-
let map = this.
|
|
106
|
+
let map = this._getWeakMap( keys );
|
|
83
107
|
|
|
84
108
|
for ( let i = 0; i < keys.length - 1; i ++ ) {
|
|
85
109
|
|
|
@@ -9,7 +9,7 @@ import Pipeline from './Pipeline.js';
|
|
|
9
9
|
class ComputePipeline extends Pipeline {
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* Constructs a new
|
|
12
|
+
* Constructs a new compute pipeline.
|
|
13
13
|
*
|
|
14
14
|
* @param {string} cacheKey - The pipeline's cache key.
|
|
15
15
|
* @param {ProgrammableStage} computeProgram - The pipeline's compute shader.
|