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
|
@@ -11,8 +11,8 @@ import WebGLCapabilities from './utils/WebGLCapabilities.js';
|
|
|
11
11
|
import { GLFeatureName } from './utils/WebGLConstants.js';
|
|
12
12
|
import { WebGLBufferRenderer } from './WebGLBufferRenderer.js';
|
|
13
13
|
|
|
14
|
-
import { warnOnce, warn, error } from '../../utils.js';
|
|
15
|
-
import { WebGLCoordinateSystem, TimestampQuery } from '../../constants.js';
|
|
14
|
+
import { isTypedArray, warnOnce, warn, error } from '../../utils.js';
|
|
15
|
+
import { WebGLCoordinateSystem, TimestampQuery, Compatibility } from '../../constants.js';
|
|
16
16
|
import WebGLTimestampQueryPool from './utils/WebGLTimestampQueryPool.js';
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -28,6 +28,7 @@ class WebGLBackend extends Backend {
|
|
|
28
28
|
*
|
|
29
29
|
* @typedef {Object} WebGLBackend~Options
|
|
30
30
|
* @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
31
|
+
* @property {boolean} [reversedDepthBuffer=false] - Whether reversed depth buffer is enabled or not.
|
|
31
32
|
* @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
32
33
|
* @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
33
34
|
* @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
@@ -184,7 +185,6 @@ class WebGLBackend extends Backend {
|
|
|
184
185
|
*/
|
|
185
186
|
this._knownBindings = new WeakSet();
|
|
186
187
|
|
|
187
|
-
|
|
188
188
|
/**
|
|
189
189
|
* Whether the device supports framebuffers invalidation or not.
|
|
190
190
|
*
|
|
@@ -265,9 +265,33 @@ class WebGLBackend extends Backend {
|
|
|
265
265
|
this.extensions.get( 'WEBGL_render_shared_exponent' );
|
|
266
266
|
this.extensions.get( 'WEBGL_multi_draw' );
|
|
267
267
|
this.extensions.get( 'OVR_multiview2' );
|
|
268
|
+
this.extensions.get( 'EXT_clip_control' );
|
|
268
269
|
|
|
269
270
|
this.disjoint = this.extensions.get( 'EXT_disjoint_timer_query_webgl2' );
|
|
270
271
|
this.parallel = this.extensions.get( 'KHR_parallel_shader_compile' );
|
|
272
|
+
this.drawBuffersIndexedExt = this.extensions.get( 'OES_draw_buffers_indexed' );
|
|
273
|
+
|
|
274
|
+
if ( parameters.reversedDepthBuffer ) {
|
|
275
|
+
|
|
276
|
+
if ( this.extensions.has( 'EXT_clip_control' ) ) {
|
|
277
|
+
|
|
278
|
+
renderer.reversedDepthBuffer = true;
|
|
279
|
+
|
|
280
|
+
} else {
|
|
281
|
+
|
|
282
|
+
warn( 'WebGPURenderer: Unable to use reversed depth buffer due to missing EXT_clip_control extension. Fallback to default depth buffer.' );
|
|
283
|
+
|
|
284
|
+
renderer.reversedDepthBuffer = false;
|
|
285
|
+
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
if ( renderer.reversedDepthBuffer ) {
|
|
291
|
+
|
|
292
|
+
this.state.setReversedDepth( true );
|
|
293
|
+
|
|
294
|
+
}
|
|
271
295
|
|
|
272
296
|
}
|
|
273
297
|
|
|
@@ -285,15 +309,20 @@ class WebGLBackend extends Backend {
|
|
|
285
309
|
|
|
286
310
|
/**
|
|
287
311
|
* This method performs a readback operation by moving buffer data from
|
|
288
|
-
* a storage buffer attribute from the GPU to the CPU.
|
|
312
|
+
* a storage buffer attribute from the GPU to the CPU. ReadbackBuffer can
|
|
313
|
+
* be used to retain and reuse handles to the intermediate buffers and prevent
|
|
314
|
+
* new allocation.
|
|
289
315
|
*
|
|
290
316
|
* @async
|
|
291
|
-
* @param {
|
|
292
|
-
* @
|
|
317
|
+
* @param {BufferAttribute} attribute - The storage buffer attribute to read frm.
|
|
318
|
+
* @param {ReadbackBuffer|ArrayBuffer} target - The storage buffer attribute.
|
|
319
|
+
* @param {number} offset - The storage buffer attribute.
|
|
320
|
+
* @param {number} count - The offset from which to start reading the
|
|
321
|
+
* @return {Promise<ArrayBuffer|ReadbackBuffer>} A promise that resolves with the buffer data when the data are ready.
|
|
293
322
|
*/
|
|
294
|
-
async getArrayBufferAsync( attribute ) {
|
|
323
|
+
async getArrayBufferAsync( attribute, target = null, offset = 0, count = - 1 ) {
|
|
295
324
|
|
|
296
|
-
return await this.attributeUtils.getArrayBufferAsync( attribute );
|
|
325
|
+
return await this.attributeUtils.getArrayBufferAsync( attribute, target, offset, count );
|
|
297
326
|
|
|
298
327
|
}
|
|
299
328
|
|
|
@@ -445,9 +474,12 @@ class WebGLBackend extends Backend {
|
|
|
445
474
|
|
|
446
475
|
if ( renderContext.scissor ) {
|
|
447
476
|
|
|
448
|
-
|
|
477
|
+
this.updateScissor( renderContext );
|
|
449
478
|
|
|
450
|
-
|
|
479
|
+
} else {
|
|
480
|
+
|
|
481
|
+
const { width, height } = this.getDrawingBufferSize();
|
|
482
|
+
state.scissor( 0, 0, width, height );
|
|
451
483
|
|
|
452
484
|
}
|
|
453
485
|
|
|
@@ -544,6 +576,17 @@ class WebGLBackend extends Backend {
|
|
|
544
576
|
|
|
545
577
|
}
|
|
546
578
|
|
|
579
|
+
if ( previousContext.scissor ) {
|
|
580
|
+
|
|
581
|
+
this.updateScissor( previousContext );
|
|
582
|
+
|
|
583
|
+
} else {
|
|
584
|
+
|
|
585
|
+
const { width, height } = this.getDrawingBufferSize();
|
|
586
|
+
state.scissor( 0, 0, width, height );
|
|
587
|
+
|
|
588
|
+
}
|
|
589
|
+
|
|
547
590
|
}
|
|
548
591
|
|
|
549
592
|
this.prepareTimestampBuffer( TimestampQuery.RENDER, this.getTimestampUID( renderContext ) );
|
|
@@ -645,6 +688,20 @@ class WebGLBackend extends Backend {
|
|
|
645
688
|
|
|
646
689
|
}
|
|
647
690
|
|
|
691
|
+
/**
|
|
692
|
+
* Updates the scissor with the values from the given render context.
|
|
693
|
+
*
|
|
694
|
+
* @param {RenderContext} renderContext - The render context.
|
|
695
|
+
*/
|
|
696
|
+
updateScissor( renderContext ) {
|
|
697
|
+
|
|
698
|
+
const { state } = this;
|
|
699
|
+
const { x, y, width, height } = renderContext.scissorValue;
|
|
700
|
+
|
|
701
|
+
state.scissor( x, renderContext.height - height - y, width, height );
|
|
702
|
+
|
|
703
|
+
}
|
|
704
|
+
|
|
648
705
|
/**
|
|
649
706
|
* Defines the scissor test.
|
|
650
707
|
*
|
|
@@ -814,7 +871,7 @@ class WebGLBackend extends Backend {
|
|
|
814
871
|
if ( this.discard === false ) {
|
|
815
872
|
|
|
816
873
|
// required here to handle async behaviour of render.compute()
|
|
817
|
-
|
|
874
|
+
state.enable( gl.RASTERIZER_DISCARD );
|
|
818
875
|
this.discard = true;
|
|
819
876
|
|
|
820
877
|
}
|
|
@@ -900,11 +957,11 @@ class WebGLBackend extends Backend {
|
|
|
900
957
|
*/
|
|
901
958
|
finishCompute( computeGroup ) {
|
|
902
959
|
|
|
903
|
-
const gl = this
|
|
960
|
+
const { state, gl } = this;
|
|
904
961
|
|
|
905
962
|
this.discard = false;
|
|
906
963
|
|
|
907
|
-
|
|
964
|
+
state.disable( gl.RASTERIZER_DISCARD );
|
|
908
965
|
|
|
909
966
|
this.prepareTimestampBuffer( TimestampQuery.COMPUTE, this.getTimestampUID( computeGroup ) );
|
|
910
967
|
|
|
@@ -930,6 +987,56 @@ class WebGLBackend extends Backend {
|
|
|
930
987
|
|
|
931
988
|
}
|
|
932
989
|
|
|
990
|
+
/**
|
|
991
|
+
* Internal draw function.
|
|
992
|
+
*
|
|
993
|
+
* @private
|
|
994
|
+
* @param {Object3D} object - The object to render.
|
|
995
|
+
* @param {WebGLBufferRenderer} renderer - The internal renderer.
|
|
996
|
+
* @param {number} firstVertex - The first vertex to render.
|
|
997
|
+
* @param {number} vertexCount - The vertex count.
|
|
998
|
+
* @param {number} instanceCount - The intance count.
|
|
999
|
+
* @param {WebGLProgram} programGPU - The raw WebGL shader program.
|
|
1000
|
+
*/
|
|
1001
|
+
_draw( object, renderer, firstVertex, vertexCount, instanceCount, programGPU ) {
|
|
1002
|
+
|
|
1003
|
+
if ( object.isBatchedMesh ) {
|
|
1004
|
+
|
|
1005
|
+
if ( this.hasFeature( 'WEBGL_multi_draw' ) === false ) {
|
|
1006
|
+
|
|
1007
|
+
const { gl } = this;
|
|
1008
|
+
|
|
1009
|
+
const drawIdLocation = gl.getUniformLocation( programGPU, 'nodeUniformDrawId' );
|
|
1010
|
+
|
|
1011
|
+
const starts = object._multiDrawStarts;
|
|
1012
|
+
const counts = object._multiDrawCounts;
|
|
1013
|
+
const drawCount = object._multiDrawCount;
|
|
1014
|
+
|
|
1015
|
+
for ( let i = 0; i < drawCount; i ++ ) {
|
|
1016
|
+
|
|
1017
|
+
gl.uniform1ui( drawIdLocation, i );
|
|
1018
|
+
renderer.render( starts[ i ], counts[ i ] );
|
|
1019
|
+
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
} else {
|
|
1023
|
+
|
|
1024
|
+
renderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );
|
|
1025
|
+
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
} else if ( instanceCount > 1 ) {
|
|
1029
|
+
|
|
1030
|
+
renderer.renderInstances( firstVertex, vertexCount, instanceCount );
|
|
1031
|
+
|
|
1032
|
+
} else {
|
|
1033
|
+
|
|
1034
|
+
renderer.render( firstVertex, vertexCount );
|
|
1035
|
+
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
}
|
|
1039
|
+
|
|
933
1040
|
/**
|
|
934
1041
|
* Executes a draw command for the given render object.
|
|
935
1042
|
*
|
|
@@ -957,6 +1064,12 @@ class WebGLBackend extends Backend {
|
|
|
957
1064
|
|
|
958
1065
|
state.setMaterial( material, frontFaceCW, hardwareClippingPlanes );
|
|
959
1066
|
|
|
1067
|
+
if ( context.mrt !== null && context.textures !== null ) {
|
|
1068
|
+
|
|
1069
|
+
state.setMRTBlending( context.textures, context.mrt, material );
|
|
1070
|
+
|
|
1071
|
+
}
|
|
1072
|
+
|
|
960
1073
|
state.useProgram( programGPU );
|
|
961
1074
|
|
|
962
1075
|
// vertex state
|
|
@@ -1061,38 +1174,6 @@ class WebGLBackend extends Backend {
|
|
|
1061
1174
|
|
|
1062
1175
|
}
|
|
1063
1176
|
|
|
1064
|
-
const draw = () => {
|
|
1065
|
-
|
|
1066
|
-
if ( object.isBatchedMesh ) {
|
|
1067
|
-
|
|
1068
|
-
if ( object._multiDrawInstances !== null ) {
|
|
1069
|
-
|
|
1070
|
-
// @deprecated, r174
|
|
1071
|
-
warnOnce( 'WebGLBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
|
|
1072
|
-
renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
|
|
1073
|
-
|
|
1074
|
-
} else if ( ! this.hasFeature( 'WEBGL_multi_draw' ) ) {
|
|
1075
|
-
|
|
1076
|
-
warnOnce( 'WebGLBackend: WEBGL_multi_draw not supported.' );
|
|
1077
|
-
|
|
1078
|
-
} else {
|
|
1079
|
-
|
|
1080
|
-
renderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );
|
|
1081
|
-
|
|
1082
|
-
}
|
|
1083
|
-
|
|
1084
|
-
} else if ( instanceCount > 1 ) {
|
|
1085
|
-
|
|
1086
|
-
renderer.renderInstances( firstVertex, vertexCount, instanceCount );
|
|
1087
|
-
|
|
1088
|
-
} else {
|
|
1089
|
-
|
|
1090
|
-
renderer.render( firstVertex, vertexCount );
|
|
1091
|
-
|
|
1092
|
-
}
|
|
1093
|
-
|
|
1094
|
-
};
|
|
1095
|
-
|
|
1096
1177
|
if ( renderObject.camera.isArrayCamera === true && renderObject.camera.cameras.length > 0 && renderObject.camera.isMultiViewCamera === false ) {
|
|
1097
1178
|
|
|
1098
1179
|
const cameraData = this.get( renderObject.camera );
|
|
@@ -1121,7 +1202,20 @@ class WebGLBackend extends Backend {
|
|
|
1121
1202
|
|
|
1122
1203
|
}
|
|
1123
1204
|
|
|
1124
|
-
|
|
1205
|
+
let cameraIndexBufferIndex = 0;
|
|
1206
|
+
|
|
1207
|
+
bindingsSearch: for ( const bindGroup of renderObject.getBindings() ) {
|
|
1208
|
+
|
|
1209
|
+
for ( const binding of bindGroup.bindings ) {
|
|
1210
|
+
|
|
1211
|
+
if ( binding === cameraIndex ) break bindingsSearch;
|
|
1212
|
+
|
|
1213
|
+
if ( binding.isUniformsGroup || binding.isUniformBuffer ) cameraIndexBufferIndex ++;
|
|
1214
|
+
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1125
1219
|
const pixelRatio = this.renderer.getPixelRatio();
|
|
1126
1220
|
|
|
1127
1221
|
const renderTarget = this._currentContext.renderTarget;
|
|
@@ -1190,9 +1284,9 @@ class WebGLBackend extends Backend {
|
|
|
1190
1284
|
|
|
1191
1285
|
}
|
|
1192
1286
|
|
|
1193
|
-
state.bindBufferBase( gl.UNIFORM_BUFFER,
|
|
1287
|
+
state.bindBufferBase( gl.UNIFORM_BUFFER, cameraIndexBufferIndex, cameraData.indexesGPU[ i ] );
|
|
1194
1288
|
|
|
1195
|
-
|
|
1289
|
+
this._draw( object, renderer, firstVertex, vertexCount, instanceCount, programGPU );
|
|
1196
1290
|
|
|
1197
1291
|
}
|
|
1198
1292
|
|
|
@@ -1203,7 +1297,7 @@ class WebGLBackend extends Backend {
|
|
|
1203
1297
|
|
|
1204
1298
|
} else {
|
|
1205
1299
|
|
|
1206
|
-
|
|
1300
|
+
this._draw( object, renderer, firstVertex, vertexCount, instanceCount, programGPU );
|
|
1207
1301
|
|
|
1208
1302
|
}
|
|
1209
1303
|
|
|
@@ -1576,7 +1670,8 @@ class WebGLBackend extends Backend {
|
|
|
1576
1670
|
//
|
|
1577
1671
|
|
|
1578
1672
|
this.set( pipeline, {
|
|
1579
|
-
programGPU
|
|
1673
|
+
programGPU,
|
|
1674
|
+
pipeline: programGPU
|
|
1580
1675
|
} );
|
|
1581
1676
|
|
|
1582
1677
|
}
|
|
@@ -1732,40 +1827,62 @@ class WebGLBackend extends Backend {
|
|
|
1732
1827
|
|
|
1733
1828
|
const { gl } = this;
|
|
1734
1829
|
|
|
1735
|
-
const bindGroupData = this.get( bindGroup );
|
|
1736
|
-
|
|
1737
|
-
let i = bindGroupData.uniformBuffers;
|
|
1738
|
-
let t = bindGroupData.textures;
|
|
1739
|
-
|
|
1740
1830
|
for ( const binding of bindGroup.bindings ) {
|
|
1741
1831
|
|
|
1742
1832
|
const map = this.get( binding );
|
|
1743
1833
|
|
|
1744
1834
|
if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
|
|
1745
1835
|
|
|
1746
|
-
const
|
|
1747
|
-
let { bufferGPU } = this.get(
|
|
1836
|
+
const array = binding.buffer;
|
|
1837
|
+
let { bufferGPU } = this.get( array );
|
|
1748
1838
|
|
|
1749
1839
|
if ( bufferGPU === undefined ) {
|
|
1750
1840
|
|
|
1751
1841
|
// create
|
|
1752
1842
|
|
|
1753
1843
|
bufferGPU = gl.createBuffer();
|
|
1844
|
+
|
|
1754
1845
|
gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
|
|
1755
|
-
gl.bufferData( gl.UNIFORM_BUFFER,
|
|
1846
|
+
gl.bufferData( gl.UNIFORM_BUFFER, array.byteLength, gl.DYNAMIC_DRAW );
|
|
1756
1847
|
|
|
1757
|
-
this.set(
|
|
1848
|
+
this.set( array, { bufferGPU } );
|
|
1758
1849
|
|
|
1759
1850
|
} else {
|
|
1760
1851
|
|
|
1761
|
-
// update
|
|
1762
|
-
|
|
1763
1852
|
gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
|
|
1764
|
-
gl.bufferSubData( gl.UNIFORM_BUFFER, 0, data );
|
|
1765
1853
|
|
|
1766
1854
|
}
|
|
1767
1855
|
|
|
1768
|
-
|
|
1856
|
+
// update
|
|
1857
|
+
|
|
1858
|
+
const updateRanges = binding.updateRanges;
|
|
1859
|
+
|
|
1860
|
+
gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
|
|
1861
|
+
|
|
1862
|
+
if ( updateRanges.length === 0 ) {
|
|
1863
|
+
|
|
1864
|
+
gl.bufferData( gl.UNIFORM_BUFFER, array, gl.DYNAMIC_DRAW );
|
|
1865
|
+
|
|
1866
|
+
} else {
|
|
1867
|
+
|
|
1868
|
+
const isTyped = isTypedArray( array );
|
|
1869
|
+
const byteOffsetFactor = isTyped ? 1 : array.BYTES_PER_ELEMENT;
|
|
1870
|
+
|
|
1871
|
+
for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
|
|
1872
|
+
|
|
1873
|
+
const range = updateRanges[ i ];
|
|
1874
|
+
|
|
1875
|
+
const dataOffset = range.start * byteOffsetFactor;
|
|
1876
|
+
const size = range.count * byteOffsetFactor;
|
|
1877
|
+
|
|
1878
|
+
const bufferOffset = dataOffset * ( isTyped ? array.BYTES_PER_ELEMENT : 1 ); // bufferOffset is always in bytes
|
|
1879
|
+
|
|
1880
|
+
gl.bufferSubData( gl.UNIFORM_BUFFER, bufferOffset, array, dataOffset, size );
|
|
1881
|
+
|
|
1882
|
+
}
|
|
1883
|
+
|
|
1884
|
+
}
|
|
1885
|
+
|
|
1769
1886
|
map.bufferGPU = bufferGPU;
|
|
1770
1887
|
|
|
1771
1888
|
this.set( binding, map );
|
|
@@ -1774,7 +1891,6 @@ class WebGLBackend extends Backend {
|
|
|
1774
1891
|
|
|
1775
1892
|
const { textureGPU, glTextureType } = this.get( binding.texture );
|
|
1776
1893
|
|
|
1777
|
-
map.index = t ++;
|
|
1778
1894
|
map.textureGPU = textureGPU;
|
|
1779
1895
|
map.glTextureType = glTextureType;
|
|
1780
1896
|
|
|
@@ -1799,10 +1915,35 @@ class WebGLBackend extends Backend {
|
|
|
1799
1915
|
|
|
1800
1916
|
const bindingData = this.get( binding );
|
|
1801
1917
|
const bufferGPU = bindingData.bufferGPU;
|
|
1802
|
-
const
|
|
1918
|
+
const array = binding.buffer;
|
|
1919
|
+
|
|
1920
|
+
const updateRanges = binding.updateRanges;
|
|
1803
1921
|
|
|
1804
1922
|
gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
|
|
1805
|
-
|
|
1923
|
+
|
|
1924
|
+
if ( updateRanges.length === 0 ) {
|
|
1925
|
+
|
|
1926
|
+
gl.bufferData( gl.UNIFORM_BUFFER, array, gl.DYNAMIC_DRAW );
|
|
1927
|
+
|
|
1928
|
+
} else {
|
|
1929
|
+
|
|
1930
|
+
const isTyped = isTypedArray( array );
|
|
1931
|
+
const byteOffsetFactor = isTyped ? 1 : array.BYTES_PER_ELEMENT;
|
|
1932
|
+
|
|
1933
|
+
for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
|
|
1934
|
+
|
|
1935
|
+
const range = updateRanges[ i ];
|
|
1936
|
+
|
|
1937
|
+
const dataOffset = range.start * byteOffsetFactor;
|
|
1938
|
+
const size = range.count * byteOffsetFactor;
|
|
1939
|
+
|
|
1940
|
+
const bufferOffset = dataOffset * ( isTyped ? array.BYTES_PER_ELEMENT : 1 ); // bufferOffset is always in bytes
|
|
1941
|
+
|
|
1942
|
+
gl.bufferSubData( gl.UNIFORM_BUFFER, bufferOffset, array, dataOffset, size );
|
|
1943
|
+
|
|
1944
|
+
}
|
|
1945
|
+
|
|
1946
|
+
}
|
|
1806
1947
|
|
|
1807
1948
|
}
|
|
1808
1949
|
|
|
@@ -1897,17 +2038,6 @@ class WebGLBackend extends Backend {
|
|
|
1897
2038
|
|
|
1898
2039
|
}
|
|
1899
2040
|
|
|
1900
|
-
/**
|
|
1901
|
-
* Returns the maximum anisotropy texture filtering value.
|
|
1902
|
-
*
|
|
1903
|
-
* @return {number} The maximum anisotropy texture filtering value.
|
|
1904
|
-
*/
|
|
1905
|
-
getMaxAnisotropy() {
|
|
1906
|
-
|
|
1907
|
-
return this.capabilities.getMaxAnisotropy();
|
|
1908
|
-
|
|
1909
|
-
}
|
|
1910
|
-
|
|
1911
2041
|
/**
|
|
1912
2042
|
* Copies data of the given source texture to the given destination texture.
|
|
1913
2043
|
*
|
|
@@ -1937,6 +2067,35 @@ class WebGLBackend extends Backend {
|
|
|
1937
2067
|
|
|
1938
2068
|
}
|
|
1939
2069
|
|
|
2070
|
+
/**
|
|
2071
|
+
* Checks if the given compatibility is supported by the backend.
|
|
2072
|
+
*
|
|
2073
|
+
* @param {string} name - The compatibility name.
|
|
2074
|
+
* @return {boolean} Whether the compatibility is supported or not.
|
|
2075
|
+
*/
|
|
2076
|
+
hasCompatibility( name ) {
|
|
2077
|
+
|
|
2078
|
+
if ( name === Compatibility.TEXTURE_COMPARE ) return true;
|
|
2079
|
+
|
|
2080
|
+
return super.hasCompatibility( name );
|
|
2081
|
+
|
|
2082
|
+
}
|
|
2083
|
+
|
|
2084
|
+
/**
|
|
2085
|
+
* Initializes the render target defined in the given render context.
|
|
2086
|
+
*
|
|
2087
|
+
* @param {RenderContext} renderContext - The render context.
|
|
2088
|
+
*/
|
|
2089
|
+
initRenderTarget( renderContext ) {
|
|
2090
|
+
|
|
2091
|
+
const { gl, state } = this;
|
|
2092
|
+
|
|
2093
|
+
this._setFramebuffer( renderContext );
|
|
2094
|
+
|
|
2095
|
+
state.bindFramebuffer( gl.FRAMEBUFFER, null );
|
|
2096
|
+
|
|
2097
|
+
}
|
|
2098
|
+
|
|
1940
2099
|
/**
|
|
1941
2100
|
* Configures the active framebuffer from the given render context.
|
|
1942
2101
|
*
|
|
@@ -1955,7 +2114,7 @@ class WebGLBackend extends Backend {
|
|
|
1955
2114
|
const renderTargetContextData = this.get( renderTarget );
|
|
1956
2115
|
const { samples, depthBuffer, stencilBuffer } = renderTarget;
|
|
1957
2116
|
|
|
1958
|
-
const isCube = renderTarget.
|
|
2117
|
+
const isCube = renderTarget.isCubeRenderTarget === true;
|
|
1959
2118
|
const isRenderTarget3D = renderTarget.isRenderTarget3D === true;
|
|
1960
2119
|
const isRenderTargetArray = renderTarget.depth > 1;
|
|
1961
2120
|
const isXRRenderTarget = renderTarget.isXRRenderTarget === true;
|
|
@@ -2091,6 +2250,12 @@ class WebGLBackend extends Backend {
|
|
|
2091
2250
|
|
|
2092
2251
|
gl.framebufferTextureLayer( gl.FRAMEBUFFER, depthStyle, textureData.textureGPU, 0, layer );
|
|
2093
2252
|
|
|
2253
|
+
} else if ( descriptor.depthTexture.isCubeTexture ) {
|
|
2254
|
+
|
|
2255
|
+
const cubeFace = this.renderer._activeCubeFace;
|
|
2256
|
+
|
|
2257
|
+
gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_CUBE_MAP_POSITIVE_X + cubeFace, textureData.textureGPU, 0 );
|
|
2258
|
+
|
|
2094
2259
|
} else {
|
|
2095
2260
|
|
|
2096
2261
|
gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0 );
|
|
@@ -2400,20 +2565,22 @@ class WebGLBackend extends Backend {
|
|
|
2400
2565
|
|
|
2401
2566
|
const gl = this.gl;
|
|
2402
2567
|
|
|
2568
|
+
let uniformBuffers = 0;
|
|
2569
|
+
let textures = 0;
|
|
2570
|
+
|
|
2403
2571
|
for ( const bindGroup of bindings ) {
|
|
2404
2572
|
|
|
2405
2573
|
for ( const binding of bindGroup.bindings ) {
|
|
2406
2574
|
|
|
2407
|
-
const bindingData = this.get( binding );
|
|
2408
|
-
const index = bindingData.index;
|
|
2409
|
-
|
|
2410
2575
|
if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
|
|
2411
2576
|
|
|
2577
|
+
const index = uniformBuffers ++;
|
|
2412
2578
|
const location = gl.getUniformBlockIndex( programGPU, binding.name );
|
|
2413
2579
|
gl.uniformBlockBinding( programGPU, location, index );
|
|
2414
2580
|
|
|
2415
2581
|
} else if ( binding.isSampledTexture ) {
|
|
2416
2582
|
|
|
2583
|
+
const index = textures ++;
|
|
2417
2584
|
const location = gl.getUniformLocation( programGPU, binding.name );
|
|
2418
2585
|
gl.uniform1i( location, index );
|
|
2419
2586
|
|
|
@@ -2435,20 +2602,24 @@ class WebGLBackend extends Backend {
|
|
|
2435
2602
|
|
|
2436
2603
|
const { gl, state } = this;
|
|
2437
2604
|
|
|
2605
|
+
let uniformBuffers = 0;
|
|
2606
|
+
let textures = 0;
|
|
2607
|
+
|
|
2438
2608
|
for ( const bindGroup of bindings ) {
|
|
2439
2609
|
|
|
2440
2610
|
for ( const binding of bindGroup.bindings ) {
|
|
2441
2611
|
|
|
2442
2612
|
const bindingData = this.get( binding );
|
|
2443
|
-
const index = bindingData.index;
|
|
2444
2613
|
|
|
2445
2614
|
if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
|
|
2446
2615
|
|
|
2616
|
+
const index = uniformBuffers ++;
|
|
2447
2617
|
// TODO USE bindBufferRange to group multiple uniform buffers
|
|
2448
2618
|
state.bindBufferBase( gl.UNIFORM_BUFFER, index, bindingData.bufferGPU );
|
|
2449
2619
|
|
|
2450
2620
|
} else if ( binding.isSampledTexture ) {
|
|
2451
2621
|
|
|
2622
|
+
const index = textures ++;
|
|
2452
2623
|
state.bindTexture( bindingData.glTextureType, bindingData.textureGPU, gl.TEXTURE0 + index );
|
|
2453
2624
|
|
|
2454
2625
|
}
|
|
@@ -91,47 +91,6 @@ class WebGLBufferRenderer {
|
|
|
91
91
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
renderMultiDrawInstances( starts, counts, drawCount, primcount ) {
|
|
95
|
-
|
|
96
|
-
const { extensions, mode, object, info } = this;
|
|
97
|
-
|
|
98
|
-
if ( drawCount === 0 ) return;
|
|
99
|
-
|
|
100
|
-
const extension = extensions.get( 'WEBGL_multi_draw' );
|
|
101
|
-
|
|
102
|
-
if ( extension === null ) {
|
|
103
|
-
|
|
104
|
-
for ( let i = 0; i < drawCount; i ++ ) {
|
|
105
|
-
|
|
106
|
-
this.renderInstances( starts[ i ], counts[ i ], primcount[ i ] );
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
} else {
|
|
111
|
-
|
|
112
|
-
if ( this.index !== 0 ) {
|
|
113
|
-
|
|
114
|
-
extension.multiDrawElementsInstancedWEBGL( mode, counts, 0, this.type, starts, 0, primcount, 0, drawCount );
|
|
115
|
-
|
|
116
|
-
} else {
|
|
117
|
-
|
|
118
|
-
extension.multiDrawArraysInstancedWEBGL( mode, starts, 0, counts, 0, primcount, 0, drawCount );
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
let elementCount = 0;
|
|
123
|
-
for ( let i = 0; i < drawCount; i ++ ) {
|
|
124
|
-
|
|
125
|
-
elementCount += counts[ i ] * primcount[ i ];
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
info.update( object, elementCount, 1 );
|
|
130
|
-
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
|
|
135
94
|
//
|
|
136
95
|
|
|
137
96
|
}
|