super-three 0.181.0 → 0.185.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 +21332 -19201
- package/build/three.core.js +20908 -19853
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1947 -862
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +37 -16
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +33628 -25197
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +33394 -25000
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +14 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +13 -6
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +127 -86
- 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 +102 -17
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMFrustum.js +31 -6
- package/examples/jsm/csm/CSMShadowNode.js +10 -3
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +14 -1
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +27 -6
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +266 -21
- package/examples/jsm/exporters/PLYExporter.js +286 -73
- package/examples/jsm/exporters/USDZExporter.js +353 -99
- package/examples/jsm/generators/CityGenerator.js +346 -0
- package/examples/jsm/generators/ForestGenerator.js +347 -0
- package/examples/jsm/generators/TerrainGenerator.js +504 -0
- package/examples/jsm/generators/TreeGenerator.js +377 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
- package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/LoftGeometry.js +355 -0
- 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/LightProbeHelper.js +5 -4
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +83 -14
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +244 -91
- package/examples/jsm/inspector/RendererInspector.js +165 -39
- 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 +241 -25
- package/examples/jsm/inspector/tabs/Memory.js +136 -0
- package/examples/jsm/inspector/tabs/Parameters.js +115 -7
- package/examples/jsm/inspector/tabs/Performance.js +24 -9
- package/examples/jsm/inspector/tabs/Settings.js +306 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
- package/examples/jsm/inspector/tabs/Viewer.js +723 -9
- package/examples/jsm/inspector/ui/Graph.js +162 -25
- package/examples/jsm/inspector/ui/Item.js +92 -13
- package/examples/jsm/inspector/ui/List.js +2 -2
- package/examples/jsm/inspector/ui/Profiler.js +1991 -44
- package/examples/jsm/inspector/ui/Style.js +1943 -543
- package/examples/jsm/inspector/ui/Tab.js +226 -5
- package/examples/jsm/inspector/ui/Values.js +126 -8
- package/examples/jsm/inspector/ui/utils.js +143 -10
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/basis/README.md +0 -1
- package/examples/jsm/libs/demuxer_mp4.js +3 -3
- package/examples/jsm/libs/draco/README.md +0 -1
- package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
- package/examples/jsm/libs/mikktspace.module.js +34 -9
- package/examples/jsm/lighting/ClusteredLighting.js +55 -0
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +681 -0
- package/examples/jsm/lines/LineMaterial.js +45 -16
- package/examples/jsm/lines/LineSegments2.js +8 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
- package/examples/jsm/loaders/3DMLoader.js +6 -5
- 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 +51 -18
- package/examples/jsm/loaders/EXRLoader.js +701 -90
- 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 +7 -30
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +58 -17
- package/examples/jsm/loaders/LDrawLoader.js +49 -58
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +11 -39
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MaterialXLoader.js +31 -9
- package/examples/jsm/loaders/NRRDLoader.js +5 -5
- package/examples/jsm/loaders/PCDLoader.js +11 -9
- package/examples/jsm/loaders/PLYLoader.js +218 -55
- package/examples/jsm/loaders/SVGLoader.js +549 -497
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDLoader.js +127 -43
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +80 -3
- 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 +504 -344
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4627 -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/TileCreasedNormalsPlugin.js +270 -0
- package/examples/jsm/misc/Volume.js +2 -3
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/GroundedSkybox.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +72 -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/Water2Mesh.js +1 -1
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +27 -15
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +36 -7
- 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/shaders/VolumeShader.js +31 -44
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
- package/examples/jsm/transpiler/Linker.js +1 -1
- 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/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +75 -25
- 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 +3 -3
- 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 +13 -14
- package/examples/jsm/tsl/display/GTAONode.js +40 -17
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -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 +9 -8
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
- 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 +15 -27
- package/examples/jsm/tsl/display/SSGINode.js +96 -62
- package/examples/jsm/tsl/display/SSRNode.js +831 -134
- package/examples/jsm/tsl/display/SSSNode.js +8 -6
- 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/TemporalReprojectNode.js +1023 -0
- 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/ClusteredLightsNode.js +622 -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/tsl/math/curlNoise.js +107 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
- package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
- package/examples/jsm/tsl/utils/RNoise.js +51 -0
- package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/SceneOptimizer.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/ARButton.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +28 -34
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +35 -14
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +13 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +18 -4
- package/src/animation/AnimationClip.js +0 -139
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyBinding.js +2 -2
- 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 +34 -4
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/StereoCamera.js +5 -2
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +43 -9
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +69 -11
- package/src/core/Raycaster.js +3 -3
- package/src/core/RenderTarget.js +19 -6
- package/src/extras/PMREMGenerator.js +13 -22
- package/src/extras/TextureUtils.js +6 -2
- package/src/extras/core/ShapePath.js +149 -160
- 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/SphereGeometry.js +8 -3
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +6 -1
- package/src/helpers/HemisphereLightHelper.js +5 -0
- package/src/helpers/PointLightHelper.js +3 -25
- package/src/helpers/SpotLightHelper.js +4 -1
- 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 +75 -42
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/LoadingManager.js +5 -0
- package/src/loaders/MaterialLoader.js +37 -266
- package/src/loaders/ObjectLoader.js +48 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +198 -1
- package/src/materials/MeshBasicMaterial.js +24 -0
- package/src/materials/MeshDepthMaterial.js +10 -0
- package/src/materials/MeshDistanceMaterial.js +10 -0
- package/src/materials/MeshLambertMaterial.js +49 -1
- package/src/materials/MeshMatcapMaterial.js +25 -1
- package/src/materials/MeshNormalMaterial.js +9 -1
- package/src/materials/MeshPhongMaterial.js +49 -1
- package/src/materials/MeshPhysicalMaterial.js +38 -0
- package/src/materials/MeshStandardMaterial.js +42 -1
- package/src/materials/MeshToonMaterial.js +35 -2
- package/src/materials/PointsMaterial.js +7 -0
- package/src/materials/ShaderMaterial.js +106 -1
- package/src/materials/SpriteMaterial.js +7 -0
- package/src/materials/nodes/Line2NodeMaterial.js +380 -297
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
- package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
- package/src/materials/nodes/NodeMaterial.js +153 -89
- package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
- package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
- package/src/math/Box3.js +5 -0
- package/src/math/FrustumArray.js +103 -133
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +12 -12
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +24 -9
- package/src/math/Matrix4.js +112 -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 +13 -9
- package/src/math/Vector3.js +17 -15
- package/src/math/Vector4.js +15 -11
- package/src/math/interpolants/BezierInterpolant.js +106 -0
- package/src/nodes/Nodes.js +86 -71
- package/src/nodes/TSL.js +15 -13
- package/src/nodes/accessors/Arrays.js +5 -5
- package/src/nodes/accessors/Batch.js +108 -0
- package/src/nodes/accessors/Bitangent.js +7 -7
- package/src/nodes/accessors/BufferAttributeNode.js +120 -17
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +5 -5
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/Instance.js +264 -0
- package/src/nodes/accessors/MaterialNode.js +27 -3
- package/src/nodes/accessors/MaterialProperties.js +6 -8
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
- package/src/nodes/accessors/Normal.js +24 -24
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +39 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +9 -8
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/Skinning.js +263 -0
- package/src/nodes/accessors/StorageBufferNode.js +16 -27
- package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
- package/src/nodes/accessors/StorageTextureNode.js +74 -11
- package/src/nodes/accessors/Tangent.js +8 -18
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +124 -25
- 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 +4 -19
- 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 +55 -4
- package/src/nodes/core/Node.js +151 -17
- package/src/nodes/core/NodeBuilder.js +479 -101
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +20 -18
- package/src/nodes/core/OutputStructNode.js +13 -11
- package/src/nodes/core/OverrideContextNode.js +153 -0
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +66 -4
- package/src/nodes/core/StackNode.js +91 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +20 -8
- package/src/nodes/core/StructTypeNode.js +17 -23
- 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 +56 -23
- package/src/nodes/core/VaryingNode.js +14 -21
- package/src/nodes/display/BlendModes.js +1 -105
- package/src/nodes/display/BumpMapNode.js +6 -1
- package/src/nodes/display/ColorAdjustment.js +27 -9
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +38 -9
- package/src/nodes/display/NormalMapNode.js +41 -6
- package/src/nodes/display/PassNode.js +157 -56
- package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
- package/src/nodes/display/RenderOutputNode.js +19 -10
- 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/functions/VolumetricLightingModel.js +40 -7
- 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 +5 -5
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +30 -5
- package/src/nodes/lighting/IESSpotLightNode.js +40 -2
- package/src/nodes/lighting/LightingContextNode.js +10 -2
- package/src/nodes/lighting/LightsNode.js +97 -65
- package/src/nodes/lighting/PointShadowNode.js +166 -148
- package/src/nodes/lighting/ShadowFilterNode.js +74 -117
- package/src/nodes/lighting/ShadowNode.js +149 -51
- package/src/nodes/materialx/lib/mx_noise.js +2 -2
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +6 -6
- package/src/nodes/math/MathNode.js +115 -52
- package/src/nodes/math/OperatorNode.js +24 -23
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +34 -3
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +99 -33
- 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/EquirectUV.js +30 -5
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
- 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 +48 -5
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +41 -25
- package/src/nodes/utils/ReflectorNode.js +4 -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/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +66 -30
- package/src/objects/InstancedMesh.js +19 -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/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +344 -156
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +78 -13
- 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 +141 -57
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ClippingContext.js +10 -2
- 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 +374 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +51 -19
- 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/RenderList.js +41 -4
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +88 -16
- 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 +700 -163
- package/src/renderers/common/Sampler.js +16 -48
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +121 -9
- package/src/renderers/common/TimestampQueryPool.js +6 -4
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +84 -1
- package/src/renderers/common/XRManager.js +377 -51
- package/src/renderers/common/extras/PMREMGenerator.js +40 -61
- package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/src/renderers/common/nodes/NodeLibrary.js +4 -4
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -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/common.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
- 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 +3 -1
- 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_begin.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -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 +2 -2
- 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} +2 -3
- 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 +271 -0
- package/src/renderers/webgl/WebGLProgram.js +54 -113
- package/src/renderers/webgl/WebGLPrograms.js +74 -55
- package/src/renderers/webgl/WebGLRenderLists.js +24 -1
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShaderCache.js +5 -11
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +230 -56
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
- 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 +118 -73
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
- package/src/renderers/webgpu/WebGPUBackend.js +733 -302
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
- package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
- package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
- package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
- package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
- package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
- package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
- package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
- package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
- package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
- package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
- package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
- 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 +224 -91
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
- package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
- 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/DepthTexture.js +1 -1
- package/src/textures/ExternalTexture.js +0 -3
- 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/fonts/LICENSE +0 -13
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
- package/examples/fonts/README.md +0 -11
- package/examples/fonts/droid/NOTICE +0 -190
- package/examples/fonts/droid/README.txt +0 -18
- package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
- package/examples/fonts/gentilis_bold.typeface.json +0 -1
- package/examples/fonts/gentilis_regular.typeface.json +0 -1
- package/examples/fonts/helvetiker_bold.typeface.json +0 -1
- package/examples/fonts/helvetiker_regular.typeface.json +0 -1
- package/examples/fonts/optimer_bold.typeface.json +0 -1
- package/examples/fonts/optimer_regular.typeface.json +0 -1
- package/examples/fonts/ttf/README.md +0 -9
- package/examples/fonts/ttf/kenpixel.ttf +0 -0
- package/examples/jsm/libs/ammo.wasm.js +0 -822
- package/examples/jsm/libs/ammo.wasm.wasm +0 -0
- package/examples/jsm/libs/draco/draco_encoder.js +0 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
- package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
- package/examples/jsm/libs/opentype.module.js +0 -14506
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lighting/TiledLighting.js +0 -42
- 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/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
- package/src/nodes/accessors/BatchNode.js +0 -163
- package/src/nodes/accessors/InstanceNode.js +0 -244
- package/src/nodes/accessors/InstancedMeshNode.js +0 -50
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/accessors/SkinningNode.js +0 -327
- 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
|
@@ -8,7 +8,6 @@ import {
|
|
|
8
8
|
NoToneMapping,
|
|
9
9
|
LinearMipmapLinearFilter,
|
|
10
10
|
SRGBColorSpace,
|
|
11
|
-
LinearSRGBColorSpace,
|
|
12
11
|
RGBAIntegerFormat,
|
|
13
12
|
RGIntegerFormat,
|
|
14
13
|
RedIntegerFormat,
|
|
@@ -31,8 +30,7 @@ import { WebGLBindingStates } from './webgl/WebGLBindingStates.js';
|
|
|
31
30
|
import { WebGLBufferRenderer } from './webgl/WebGLBufferRenderer.js';
|
|
32
31
|
import { WebGLCapabilities } from './webgl/WebGLCapabilities.js';
|
|
33
32
|
import { WebGLClipping } from './webgl/WebGLClipping.js';
|
|
34
|
-
import {
|
|
35
|
-
import { WebGLCubeUVMaps } from './webgl/WebGLCubeUVMaps.js';
|
|
33
|
+
import { WebGLEnvironments } from './webgl/WebGLEnvironments.js';
|
|
36
34
|
import { WebGLExtensions } from './webgl/WebGLExtensions.js';
|
|
37
35
|
import { WebGLGeometries } from './webgl/WebGLGeometries.js';
|
|
38
36
|
import { WebGLIndexedBufferRenderer } from './webgl/WebGLIndexedBufferRenderer.js';
|
|
@@ -40,6 +38,7 @@ import { WebGLInfo } from './webgl/WebGLInfo.js';
|
|
|
40
38
|
import { WebGLMorphtargets } from './webgl/WebGLMorphtargets.js';
|
|
41
39
|
import { WebGLMultiview } from './webgl/WebGLMultiview.js';
|
|
42
40
|
import { WebGLObjects } from './webgl/WebGLObjects.js';
|
|
41
|
+
import { WebGLOutput } from './webgl/WebGLOutput.js';
|
|
43
42
|
import { WebGLPrograms } from './webgl/WebGLPrograms.js';
|
|
44
43
|
import { WebGLProperties } from './webgl/WebGLProperties.js';
|
|
45
44
|
import { WebGLRenderLists } from './webgl/WebGLRenderLists.js';
|
|
@@ -53,7 +52,7 @@ import { WebGLUtils } from './webgl/WebGLUtils.js';
|
|
|
53
52
|
import { WebXRManager } from './webxr/WebXRManager.js';
|
|
54
53
|
import { WebGLMaterials } from './webgl/WebGLMaterials.js';
|
|
55
54
|
import { WebGLUniformsGroups } from './webgl/WebGLUniformsGroups.js';
|
|
56
|
-
import { createCanvasElement, probeAsync,
|
|
55
|
+
import { createCanvasElement, probeAsync, error, warn, log } from '../utils.js';
|
|
57
56
|
import { ColorManagement } from '../math/ColorManagement.js';
|
|
58
57
|
import { getDFGLUT } from './shaders/DFGLUTData.js';
|
|
59
58
|
|
|
@@ -83,6 +82,7 @@ class WebGLRenderer {
|
|
|
83
82
|
powerPreference = 'default',
|
|
84
83
|
failIfMajorPerformanceCaveat = false,
|
|
85
84
|
reversedDepthBuffer = false,
|
|
85
|
+
outputBufferType = UnsignedByteType,
|
|
86
86
|
multiviewStereo = false,
|
|
87
87
|
} = parameters;
|
|
88
88
|
|
|
@@ -113,6 +113,8 @@ class WebGLRenderer {
|
|
|
113
113
|
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
+
const _outputBufferType = outputBufferType;
|
|
117
|
+
|
|
116
118
|
const INTEGER_FORMATS = new Set( [
|
|
117
119
|
RGBAIntegerFormat,
|
|
118
120
|
RGIntegerFormat,
|
|
@@ -130,6 +132,7 @@ class WebGLRenderer {
|
|
|
130
132
|
|
|
131
133
|
const uintClearColor = new Uint32Array( 4 );
|
|
132
134
|
const intClearColor = new Int32Array( 4 );
|
|
135
|
+
const objectPosition = new Vector3();
|
|
133
136
|
|
|
134
137
|
let currentRenderList = null;
|
|
135
138
|
let currentRenderState = null;
|
|
@@ -140,10 +143,14 @@ class WebGLRenderer {
|
|
|
140
143
|
const renderListStack = [];
|
|
141
144
|
const renderStateStack = [];
|
|
142
145
|
|
|
146
|
+
// internal render target for non-UnsignedByteType color buffer
|
|
147
|
+
|
|
148
|
+
let output = null;
|
|
149
|
+
|
|
143
150
|
// public properties
|
|
144
151
|
|
|
145
152
|
/**
|
|
146
|
-
* A canvas where the renderer draws its output.This is automatically created by the renderer
|
|
153
|
+
* A canvas where the renderer draws its output. This is automatically created by the renderer
|
|
147
154
|
* in the constructor (if not provided already); you just need to add it to your page like so:
|
|
148
155
|
* ```js
|
|
149
156
|
* document.body.appendChild( renderer.domElement );
|
|
@@ -159,7 +166,7 @@ class WebGLRenderer {
|
|
|
159
166
|
* - `checkShaderErrors`: If it is `true`, defines whether material shader programs are
|
|
160
167
|
* checked for errors during compilation and linkage process. It may be useful to disable
|
|
161
168
|
* this check in production for performance gain. It is strongly recommended to keep these
|
|
162
|
-
* checks enabled during development. If the shader does not compile and link
|
|
169
|
+
* checks enabled during development. If the shader does not compile and link, it will not
|
|
163
170
|
* work and associated material will not render.
|
|
164
171
|
* - `onShaderError(gl, program, glVertexShader,glFragmentShader)`: A callback function that
|
|
165
172
|
* can be used for custom error reporting. The callback receives the WebGL context, an instance
|
|
@@ -288,6 +295,11 @@ class WebGLRenderer {
|
|
|
288
295
|
const _this = this;
|
|
289
296
|
|
|
290
297
|
let _isContextLost = false;
|
|
298
|
+
let _nodesHandler = null;
|
|
299
|
+
|
|
300
|
+
let _scratchFramebuffer = null;
|
|
301
|
+
let _srcFramebuffer = null;
|
|
302
|
+
let _dstFramebuffer = null;
|
|
291
303
|
|
|
292
304
|
// internal state cache
|
|
293
305
|
|
|
@@ -388,11 +400,11 @@ class WebGLRenderer {
|
|
|
388
400
|
|
|
389
401
|
if ( getContext( contextName ) ) {
|
|
390
402
|
|
|
391
|
-
throw new Error( 'Error creating WebGL context with your selected attributes.' );
|
|
403
|
+
throw new Error( 'THREE.WebGLRenderer: Error creating WebGL context with your selected attributes.' );
|
|
392
404
|
|
|
393
405
|
} else {
|
|
394
406
|
|
|
395
|
-
throw new Error( 'Error creating WebGL context.' );
|
|
407
|
+
throw new Error( 'THREE.WebGLRenderer: Error creating WebGL context.' );
|
|
396
408
|
|
|
397
409
|
}
|
|
398
410
|
|
|
@@ -400,15 +412,15 @@ class WebGLRenderer {
|
|
|
400
412
|
|
|
401
413
|
}
|
|
402
414
|
|
|
403
|
-
} catch (
|
|
415
|
+
} catch ( e ) {
|
|
404
416
|
|
|
405
|
-
error( 'WebGLRenderer: ' +
|
|
406
|
-
throw
|
|
417
|
+
error( 'WebGLRenderer: ' + e.message );
|
|
418
|
+
throw e;
|
|
407
419
|
|
|
408
420
|
}
|
|
409
421
|
|
|
410
422
|
let extensions, capabilities, state, info;
|
|
411
|
-
let properties, textures,
|
|
423
|
+
let properties, textures, environments, attributes, geometries, objects;
|
|
412
424
|
let programCache, materials, renderLists, renderStates, clipping, shadowMap;
|
|
413
425
|
let multiview;
|
|
414
426
|
|
|
@@ -433,22 +445,25 @@ class WebGLRenderer {
|
|
|
433
445
|
|
|
434
446
|
}
|
|
435
447
|
|
|
448
|
+
_scratchFramebuffer = _gl.createFramebuffer();
|
|
449
|
+
_srcFramebuffer = _gl.createFramebuffer();
|
|
450
|
+
_dstFramebuffer = _gl.createFramebuffer();
|
|
451
|
+
|
|
436
452
|
info = new WebGLInfo( _gl );
|
|
437
453
|
properties = new WebGLProperties();
|
|
438
454
|
textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );
|
|
439
|
-
|
|
440
|
-
cubeuvmaps = new WebGLCubeUVMaps( _this );
|
|
455
|
+
environments = new WebGLEnvironments( _this );
|
|
441
456
|
attributes = new WebGLAttributes( _gl );
|
|
442
457
|
bindingStates = new WebGLBindingStates( _gl, attributes );
|
|
443
458
|
geometries = new WebGLGeometries( _gl, attributes, info, bindingStates );
|
|
444
|
-
objects = new WebGLObjects( _gl, geometries, attributes, info );
|
|
459
|
+
objects = new WebGLObjects( _gl, geometries, attributes, bindingStates, info );
|
|
445
460
|
morphtargets = new WebGLMorphtargets( _gl, capabilities, textures );
|
|
446
461
|
clipping = new WebGLClipping( properties );
|
|
447
|
-
programCache = new WebGLPrograms( _this,
|
|
462
|
+
programCache = new WebGLPrograms( _this, environments, extensions, capabilities, bindingStates, clipping );
|
|
448
463
|
materials = new WebGLMaterials( _this, properties );
|
|
449
464
|
renderLists = new WebGLRenderLists();
|
|
450
465
|
renderStates = new WebGLRenderStates( extensions );
|
|
451
|
-
background = new WebGLBackground( _this,
|
|
466
|
+
background = new WebGLBackground( _this, environments, state, objects, _alpha, premultipliedAlpha );
|
|
452
467
|
multiview = new WebGLMultiview( _this, extensions, _gl );
|
|
453
468
|
shadowMap = new WebGLShadowMap( _this, objects, capabilities );
|
|
454
469
|
uniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );
|
|
@@ -537,6 +552,14 @@ class WebGLRenderer {
|
|
|
537
552
|
|
|
538
553
|
initGLContext();
|
|
539
554
|
|
|
555
|
+
// initialize internal render target for non-UnsignedByteType color buffer
|
|
556
|
+
|
|
557
|
+
if ( _outputBufferType !== UnsignedByteType ) {
|
|
558
|
+
|
|
559
|
+
output = new WebGLOutput( _outputBufferType, canvas.width, canvas.height, antialias, depth, stencil );
|
|
560
|
+
|
|
561
|
+
}
|
|
562
|
+
|
|
540
563
|
// xr
|
|
541
564
|
|
|
542
565
|
const xr = new WebXRManager( _this, _gl, extensions, multiviewStereo );
|
|
@@ -659,6 +682,12 @@ class WebGLRenderer {
|
|
|
659
682
|
|
|
660
683
|
}
|
|
661
684
|
|
|
685
|
+
if ( output !== null ) {
|
|
686
|
+
|
|
687
|
+
output.setSize( canvas.width, canvas.height );
|
|
688
|
+
|
|
689
|
+
}
|
|
690
|
+
|
|
662
691
|
this.setViewport( 0, 0, width, height );
|
|
663
692
|
|
|
664
693
|
};
|
|
@@ -702,6 +731,39 @@ class WebGLRenderer {
|
|
|
702
731
|
|
|
703
732
|
};
|
|
704
733
|
|
|
734
|
+
/**
|
|
735
|
+
* Sets the post-processing effects to be applied after rendering.
|
|
736
|
+
*
|
|
737
|
+
* @param {Array} effects - An array of post-processing effects.
|
|
738
|
+
*/
|
|
739
|
+
this.setEffects = function ( effects ) {
|
|
740
|
+
|
|
741
|
+
if ( _outputBufferType === UnsignedByteType ) {
|
|
742
|
+
|
|
743
|
+
error( 'WebGLRenderer: setEffects() requires outputBufferType set to HalfFloatType or FloatType.' );
|
|
744
|
+
return;
|
|
745
|
+
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
if ( effects ) {
|
|
749
|
+
|
|
750
|
+
for ( let i = 0; i < effects.length; i ++ ) {
|
|
751
|
+
|
|
752
|
+
if ( effects[ i ].isOutputPass === true ) {
|
|
753
|
+
|
|
754
|
+
warn( 'WebGLRenderer: OutputPass is not needed in setEffects(). Tone mapping and color space conversion are applied automatically.' );
|
|
755
|
+
break;
|
|
756
|
+
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
output.setEffects( effects || [] );
|
|
764
|
+
|
|
765
|
+
};
|
|
766
|
+
|
|
705
767
|
/**
|
|
706
768
|
* Returns the current viewport definition.
|
|
707
769
|
*
|
|
@@ -949,6 +1011,7 @@ class WebGLRenderer {
|
|
|
949
1011
|
if ( depth ) {
|
|
950
1012
|
|
|
951
1013
|
bits |= _gl.DEPTH_BUFFER_BIT;
|
|
1014
|
+
this.state.buffers.depth.setMask( true );
|
|
952
1015
|
|
|
953
1016
|
}
|
|
954
1017
|
|
|
@@ -959,7 +1022,11 @@ class WebGLRenderer {
|
|
|
959
1022
|
|
|
960
1023
|
}
|
|
961
1024
|
|
|
962
|
-
|
|
1025
|
+
if ( bits !== 0 ) {
|
|
1026
|
+
|
|
1027
|
+
_gl.clear( bits );
|
|
1028
|
+
|
|
1029
|
+
}
|
|
963
1030
|
|
|
964
1031
|
};
|
|
965
1032
|
|
|
@@ -990,6 +1057,20 @@ class WebGLRenderer {
|
|
|
990
1057
|
|
|
991
1058
|
};
|
|
992
1059
|
|
|
1060
|
+
/**
|
|
1061
|
+
* Sets a compatibility node builder for rendering node materials with WebGLRenderer.
|
|
1062
|
+
* This enables using TSL (Three.js Shading Language) node materials to prepare
|
|
1063
|
+
* for migration to WebGPURenderer.
|
|
1064
|
+
*
|
|
1065
|
+
* @param {WebGLNodesHandler} nodesHandler - The node builder instance.
|
|
1066
|
+
*/
|
|
1067
|
+
this.setNodesHandler = function ( nodesHandler ) {
|
|
1068
|
+
|
|
1069
|
+
nodesHandler.setRenderer( this );
|
|
1070
|
+
_nodesHandler = nodesHandler;
|
|
1071
|
+
|
|
1072
|
+
};
|
|
1073
|
+
|
|
993
1074
|
/**
|
|
994
1075
|
* Frees the GPU-related resources allocated by this instance. Call this
|
|
995
1076
|
* method whenever this instance is no longer used in your app.
|
|
@@ -1004,8 +1085,7 @@ class WebGLRenderer {
|
|
|
1004
1085
|
renderLists.dispose();
|
|
1005
1086
|
renderStates.dispose();
|
|
1006
1087
|
properties.dispose();
|
|
1007
|
-
|
|
1008
|
-
cubeuvmaps.dispose();
|
|
1088
|
+
environments.dispose();
|
|
1009
1089
|
objects.dispose();
|
|
1010
1090
|
bindingStates.dispose();
|
|
1011
1091
|
uniformsGroups.dispose();
|
|
@@ -1109,7 +1189,7 @@ class WebGLRenderer {
|
|
|
1109
1189
|
|
|
1110
1190
|
if ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)
|
|
1111
1191
|
|
|
1112
|
-
const frontFaceCW = ( object.isMesh && object.matrixWorld.
|
|
1192
|
+
const frontFaceCW = ( object.isMesh && object.matrixWorld.determinantAffine() < 0 );
|
|
1113
1193
|
|
|
1114
1194
|
const program = setProgram( camera, scene, geometry, material, object );
|
|
1115
1195
|
|
|
@@ -1226,33 +1306,23 @@ class WebGLRenderer {
|
|
|
1226
1306
|
|
|
1227
1307
|
if ( object.isBatchedMesh ) {
|
|
1228
1308
|
|
|
1229
|
-
if (
|
|
1230
|
-
|
|
1231
|
-
// @deprecated, r174
|
|
1232
|
-
warnOnce( 'WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
|
|
1233
|
-
renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
|
|
1234
|
-
|
|
1235
|
-
} else {
|
|
1236
|
-
|
|
1237
|
-
if ( ! extensions.get( 'WEBGL_multi_draw' ) ) {
|
|
1238
|
-
|
|
1239
|
-
const starts = object._multiDrawStarts;
|
|
1240
|
-
const counts = object._multiDrawCounts;
|
|
1241
|
-
const drawCount = object._multiDrawCount;
|
|
1242
|
-
const bytesPerElement = index ? attributes.get( index ).bytesPerElement : 1;
|
|
1243
|
-
const uniforms = properties.get( material ).currentProgram.getUniforms();
|
|
1244
|
-
for ( let i = 0; i < drawCount; i ++ ) {
|
|
1309
|
+
if ( ! extensions.get( 'WEBGL_multi_draw' ) ) {
|
|
1245
1310
|
|
|
1246
|
-
|
|
1247
|
-
|
|
1311
|
+
const starts = object._multiDrawStarts;
|
|
1312
|
+
const counts = object._multiDrawCounts;
|
|
1313
|
+
const drawCount = object._multiDrawCount;
|
|
1314
|
+
const bytesPerElement = index ? attributes.get( index ).bytesPerElement : 1;
|
|
1315
|
+
const uniforms = properties.get( material ).currentProgram.getUniforms();
|
|
1316
|
+
for ( let i = 0; i < drawCount; i ++ ) {
|
|
1248
1317
|
|
|
1249
|
-
|
|
1318
|
+
uniforms.setValue( _gl, '_gl_DrawID', i );
|
|
1319
|
+
renderer.render( starts[ i ] / bytesPerElement, counts[ i ] );
|
|
1250
1320
|
|
|
1251
|
-
}
|
|
1321
|
+
}
|
|
1252
1322
|
|
|
1253
|
-
|
|
1323
|
+
} else {
|
|
1254
1324
|
|
|
1255
|
-
|
|
1325
|
+
renderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );
|
|
1256
1326
|
|
|
1257
1327
|
}
|
|
1258
1328
|
|
|
@@ -1551,6 +1621,19 @@ class WebGLRenderer {
|
|
|
1551
1621
|
|
|
1552
1622
|
if ( _isContextLost === true ) return;
|
|
1553
1623
|
|
|
1624
|
+
// update node builder if available
|
|
1625
|
+
if ( _nodesHandler !== null ) {
|
|
1626
|
+
|
|
1627
|
+
_nodesHandler.renderStart( scene, camera );
|
|
1628
|
+
|
|
1629
|
+
}
|
|
1630
|
+
|
|
1631
|
+
// use internal render target for HalfFloatType color buffer (only when tone mapping is enabled)
|
|
1632
|
+
|
|
1633
|
+
const isXRPresenting = xr.enabled === true && xr.isPresenting === true;
|
|
1634
|
+
|
|
1635
|
+
const useOutput = output !== null && ( _currentRenderTarget === null || isXRPresenting ) && output.begin( _this, _currentRenderTarget );
|
|
1636
|
+
|
|
1554
1637
|
// update scene graph
|
|
1555
1638
|
|
|
1556
1639
|
if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
|
|
@@ -1559,7 +1642,7 @@ class WebGLRenderer {
|
|
|
1559
1642
|
|
|
1560
1643
|
if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
|
|
1561
1644
|
|
|
1562
|
-
if ( xr.enabled === true && xr.isPresenting === true ) {
|
|
1645
|
+
if ( xr.enabled === true && xr.isPresenting === true && ( output === null || output.isCompositing() === false ) ) {
|
|
1563
1646
|
|
|
1564
1647
|
if ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );
|
|
1565
1648
|
|
|
@@ -1573,6 +1656,7 @@ class WebGLRenderer {
|
|
|
1573
1656
|
currentRenderState = renderStates.get( scene, renderStateStack.length );
|
|
1574
1657
|
currentRenderState.init( camera );
|
|
1575
1658
|
|
|
1659
|
+
currentRenderState.state.textureUnits = textures.getTextureUnits();
|
|
1576
1660
|
renderStateStack.push( currentRenderState );
|
|
1577
1661
|
|
|
1578
1662
|
_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
|
|
@@ -1604,7 +1688,7 @@ class WebGLRenderer {
|
|
|
1604
1688
|
|
|
1605
1689
|
if ( _this.sortObjects === true ) {
|
|
1606
1690
|
|
|
1607
|
-
currentRenderList.sort( _opaqueSort, _transparentSort );
|
|
1691
|
+
currentRenderList.sort( _opaqueSort, _transparentSort, camera.reversedDepth );
|
|
1608
1692
|
|
|
1609
1693
|
}
|
|
1610
1694
|
|
|
@@ -1619,6 +1703,8 @@ class WebGLRenderer {
|
|
|
1619
1703
|
|
|
1620
1704
|
this.info.render.frame ++;
|
|
1621
1705
|
|
|
1706
|
+
if ( this.info.autoReset === true ) this.info.reset();
|
|
1707
|
+
|
|
1622
1708
|
if ( _clippingEnabled === true ) clipping.beginShadows();
|
|
1623
1709
|
|
|
1624
1710
|
const shadowsArray = currentRenderState.state.shadowsArray;
|
|
@@ -1629,58 +1715,62 @@ class WebGLRenderer {
|
|
|
1629
1715
|
|
|
1630
1716
|
//
|
|
1631
1717
|
|
|
1632
|
-
|
|
1718
|
+
// render scene (skip if first effect is a render pass - it will render the scene itself)
|
|
1633
1719
|
|
|
1634
|
-
|
|
1720
|
+
const skipSceneRender = useOutput && output.hasRenderPass();
|
|
1635
1721
|
|
|
1636
|
-
|
|
1637
|
-
const transmissiveObjects = currentRenderList.transmissive;
|
|
1722
|
+
if ( skipSceneRender === false ) {
|
|
1638
1723
|
|
|
1639
|
-
|
|
1724
|
+
const opaqueObjects = currentRenderList.opaque;
|
|
1725
|
+
const transmissiveObjects = currentRenderList.transmissive;
|
|
1726
|
+
|
|
1727
|
+
currentRenderState.setupLights();
|
|
1640
1728
|
|
|
1641
|
-
|
|
1729
|
+
if ( camera.isArrayCamera ) {
|
|
1642
1730
|
|
|
1643
|
-
|
|
1731
|
+
const cameras = camera.cameras;
|
|
1644
1732
|
|
|
1645
|
-
|
|
1733
|
+
if ( transmissiveObjects.length > 0 ) {
|
|
1646
1734
|
|
|
1647
|
-
|
|
1735
|
+
for ( let i = 0, l = cameras.length; i < l; i ++ ) {
|
|
1648
1736
|
|
|
1649
|
-
|
|
1737
|
+
const camera2 = cameras[ i ];
|
|
1650
1738
|
|
|
1651
|
-
|
|
1739
|
+
renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera2 );
|
|
1740
|
+
|
|
1741
|
+
}
|
|
1652
1742
|
|
|
1653
1743
|
}
|
|
1654
1744
|
|
|
1655
|
-
|
|
1745
|
+
if ( _renderBackground ) background.render( scene );
|
|
1656
1746
|
|
|
1657
|
-
|
|
1747
|
+
if ( xr.enabled && xr.isMultiview ) {
|
|
1658
1748
|
|
|
1659
|
-
|
|
1749
|
+
textures.setDeferTextureUploads( true );
|
|
1660
1750
|
|
|
1661
|
-
|
|
1751
|
+
renderScene( currentRenderList, scene, camera, camera.cameras[ 0 ].viewport );
|
|
1662
1752
|
|
|
1663
|
-
|
|
1753
|
+
} else {
|
|
1664
1754
|
|
|
1665
|
-
|
|
1755
|
+
for ( let i = 0, l = cameras.length; i < l; i ++ ) {
|
|
1666
1756
|
|
|
1667
|
-
|
|
1757
|
+
const camera2 = cameras[ i ];
|
|
1668
1758
|
|
|
1669
|
-
|
|
1759
|
+
renderScene( currentRenderList, scene, camera2, camera2.viewport );
|
|
1670
1760
|
|
|
1671
|
-
|
|
1761
|
+
}
|
|
1672
1762
|
|
|
1673
1763
|
}
|
|
1674
1764
|
|
|
1675
|
-
}
|
|
1765
|
+
} else {
|
|
1676
1766
|
|
|
1677
|
-
|
|
1767
|
+
if ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera );
|
|
1678
1768
|
|
|
1679
|
-
|
|
1769
|
+
if ( _renderBackground ) background.render( scene );
|
|
1680
1770
|
|
|
1681
|
-
|
|
1771
|
+
renderScene( currentRenderList, scene, camera );
|
|
1682
1772
|
|
|
1683
|
-
|
|
1773
|
+
}
|
|
1684
1774
|
|
|
1685
1775
|
}
|
|
1686
1776
|
|
|
@@ -1698,12 +1788,18 @@ class WebGLRenderer {
|
|
|
1698
1788
|
|
|
1699
1789
|
}
|
|
1700
1790
|
|
|
1791
|
+
// copy from internal render target to canvas using fullscreen quad
|
|
1792
|
+
|
|
1793
|
+
if ( useOutput ) {
|
|
1794
|
+
|
|
1795
|
+
output.end( _this );
|
|
1796
|
+
|
|
1797
|
+
}
|
|
1798
|
+
|
|
1701
1799
|
//
|
|
1702
1800
|
|
|
1703
1801
|
if ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );
|
|
1704
1802
|
|
|
1705
|
-
textures.runDeferredUploads();
|
|
1706
|
-
|
|
1707
1803
|
// _gl.finish();
|
|
1708
1804
|
|
|
1709
1805
|
bindingStates.resetDefaultState();
|
|
@@ -1716,6 +1812,8 @@ class WebGLRenderer {
|
|
|
1716
1812
|
|
|
1717
1813
|
currentRenderState = renderStateStack[ renderStateStack.length - 1 ];
|
|
1718
1814
|
|
|
1815
|
+
textures.setTextureUnits( currentRenderState.state.textureUnits );
|
|
1816
|
+
|
|
1719
1817
|
if ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, currentRenderState.state.camera );
|
|
1720
1818
|
|
|
1721
1819
|
} else {
|
|
@@ -1736,6 +1834,12 @@ class WebGLRenderer {
|
|
|
1736
1834
|
|
|
1737
1835
|
}
|
|
1738
1836
|
|
|
1837
|
+
if ( _nodesHandler !== null ) {
|
|
1838
|
+
|
|
1839
|
+
_nodesHandler.renderEnd();
|
|
1840
|
+
|
|
1841
|
+
}
|
|
1842
|
+
|
|
1739
1843
|
};
|
|
1740
1844
|
|
|
1741
1845
|
function projectObject( object, camera, groupOrder, sortObjects ) {
|
|
@@ -1754,6 +1858,10 @@ class WebGLRenderer {
|
|
|
1754
1858
|
|
|
1755
1859
|
if ( object.autoUpdate === true ) object.update( camera );
|
|
1756
1860
|
|
|
1861
|
+
} else if ( object.isLightProbeGrid ) {
|
|
1862
|
+
|
|
1863
|
+
currentRenderState.pushLightProbeGrid( object );
|
|
1864
|
+
|
|
1757
1865
|
} else if ( object.isLight ) {
|
|
1758
1866
|
|
|
1759
1867
|
currentRenderState.pushLight( object );
|
|
@@ -1888,11 +1996,13 @@ class WebGLRenderer {
|
|
|
1888
1996
|
|
|
1889
1997
|
if ( currentRenderState.state.transmissionRenderTarget[ camera.id ] === undefined ) {
|
|
1890
1998
|
|
|
1999
|
+
const hasHalfFloatSupport = extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' );
|
|
2000
|
+
|
|
1891
2001
|
currentRenderState.state.transmissionRenderTarget[ camera.id ] = new WebGLRenderTarget( 1, 1, {
|
|
1892
2002
|
generateMipmaps: true,
|
|
1893
|
-
type:
|
|
2003
|
+
type: hasHalfFloatSupport ? HalfFloatType : UnsignedByteType,
|
|
1894
2004
|
minFilter: LinearMipmapLinearFilter,
|
|
1895
|
-
samples: 4,
|
|
2005
|
+
samples: Math.max( 4, capabilities.samples ), // to avoid feedback loops, the transmission render target requires a resolve, see #26177
|
|
1896
2006
|
stencilBuffer: stencil,
|
|
1897
2007
|
resolveDepthBuffer: false,
|
|
1898
2008
|
resolveStencilBuffer: false,
|
|
@@ -2067,16 +2177,18 @@ class WebGLRenderer {
|
|
|
2067
2177
|
|
|
2068
2178
|
const lightsStateVersion = lights.state.version;
|
|
2069
2179
|
|
|
2070
|
-
const parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );
|
|
2180
|
+
const parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object, currentRenderState.state.lightProbeGridArray );
|
|
2071
2181
|
const programCacheKey = programCache.getProgramCacheKey( parameters );
|
|
2072
2182
|
|
|
2073
2183
|
let programs = materialProperties.programs;
|
|
2074
2184
|
|
|
2075
2185
|
// always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change
|
|
2076
2186
|
|
|
2077
|
-
materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;
|
|
2187
|
+
materialProperties.environment = ( material.isMeshStandardMaterial || material.isMeshLambertMaterial || material.isMeshPhongMaterial ) ? scene.environment : null;
|
|
2078
2188
|
materialProperties.fog = scene.fog;
|
|
2079
|
-
|
|
2189
|
+
|
|
2190
|
+
const usePMREM = material.isMeshStandardMaterial || ( material.isMeshLambertMaterial && ! material.envMap ) || ( material.isMeshPhongMaterial && ! material.envMap );
|
|
2191
|
+
materialProperties.envMap = environments.get( material.envMap || materialProperties.environment, usePMREM );
|
|
2080
2192
|
materialProperties.envMapRotation = ( materialProperties.environment !== null && material.envMap === null ) ? scene.environmentRotation : material.envMapRotation;
|
|
2081
2193
|
|
|
2082
2194
|
if ( programs === undefined ) {
|
|
@@ -2108,6 +2220,13 @@ class WebGLRenderer {
|
|
|
2108
2220
|
|
|
2109
2221
|
parameters.uniforms = programCache.getUniforms( material );
|
|
2110
2222
|
|
|
2223
|
+
// Use node builder for node materials if available
|
|
2224
|
+
if ( _nodesHandler !== null && material.isNodeMaterial ) {
|
|
2225
|
+
|
|
2226
|
+
_nodesHandler.build( material, object, parameters );
|
|
2227
|
+
|
|
2228
|
+
}
|
|
2229
|
+
|
|
2111
2230
|
material.onBeforeCompile( parameters, _this );
|
|
2112
2231
|
|
|
2113
2232
|
program = programCache.acquireProgram( parameters, programCacheKey );
|
|
@@ -2149,17 +2268,16 @@ class WebGLRenderer {
|
|
|
2149
2268
|
uniforms.pointLightShadows.value = lights.state.pointShadow;
|
|
2150
2269
|
uniforms.hemisphereLights.value = lights.state.hemi;
|
|
2151
2270
|
|
|
2152
|
-
uniforms.directionalShadowMap.value = lights.state.directionalShadowMap;
|
|
2153
2271
|
uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;
|
|
2154
|
-
uniforms.spotShadowMap.value = lights.state.spotShadowMap;
|
|
2155
2272
|
uniforms.spotLightMatrix.value = lights.state.spotLightMatrix;
|
|
2156
2273
|
uniforms.spotLightMap.value = lights.state.spotLightMap;
|
|
2157
|
-
uniforms.pointShadowMap.value = lights.state.pointShadowMap;
|
|
2158
2274
|
uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;
|
|
2159
2275
|
// TODO (abelnation): add area lights shadow info to uniforms
|
|
2160
2276
|
|
|
2161
2277
|
}
|
|
2162
2278
|
|
|
2279
|
+
materialProperties.lightProbeGrid = currentRenderState.state.lightProbeGridArray.length > 0;
|
|
2280
|
+
|
|
2163
2281
|
materialProperties.currentProgram = program;
|
|
2164
2282
|
materialProperties.uniformsList = null;
|
|
2165
2283
|
|
|
@@ -2204,6 +2322,30 @@ class WebGLRenderer {
|
|
|
2204
2322
|
|
|
2205
2323
|
}
|
|
2206
2324
|
|
|
2325
|
+
function findLightProbeGrid( volumes, object ) {
|
|
2326
|
+
|
|
2327
|
+
if ( volumes.length === 0 ) return null;
|
|
2328
|
+
|
|
2329
|
+
if ( volumes.length === 1 ) {
|
|
2330
|
+
|
|
2331
|
+
return volumes[ 0 ].texture !== null ? volumes[ 0 ] : null;
|
|
2332
|
+
|
|
2333
|
+
}
|
|
2334
|
+
|
|
2335
|
+
objectPosition.setFromMatrixPosition( object.matrixWorld );
|
|
2336
|
+
|
|
2337
|
+
for ( let i = 0, l = volumes.length; i < l; i ++ ) {
|
|
2338
|
+
|
|
2339
|
+
const v = volumes[ i ];
|
|
2340
|
+
|
|
2341
|
+
if ( v.texture !== null && v.boundingBox.containsPoint( objectPosition ) ) return v;
|
|
2342
|
+
|
|
2343
|
+
}
|
|
2344
|
+
|
|
2345
|
+
return null;
|
|
2346
|
+
|
|
2347
|
+
}
|
|
2348
|
+
|
|
2207
2349
|
function setProgram( camera, scene, geometry, material, object ) {
|
|
2208
2350
|
|
|
2209
2351
|
if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...
|
|
@@ -2211,9 +2353,10 @@ class WebGLRenderer {
|
|
|
2211
2353
|
textures.resetTextureUnits();
|
|
2212
2354
|
|
|
2213
2355
|
const fog = scene.fog;
|
|
2214
|
-
const environment = material.isMeshStandardMaterial ? scene.environment : null;
|
|
2215
|
-
const colorSpace = ( _currentRenderTarget === null ) ? _this.outputColorSpace : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.colorSpace :
|
|
2216
|
-
const
|
|
2356
|
+
const environment = ( material.isMeshStandardMaterial || material.isMeshLambertMaterial || material.isMeshPhongMaterial ) ? scene.environment : null;
|
|
2357
|
+
const colorSpace = ( _currentRenderTarget === null ) ? _this.outputColorSpace : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.colorSpace : ColorManagement.workingColorSpace );
|
|
2358
|
+
const usePMREM = material.isMeshStandardMaterial || ( material.isMeshLambertMaterial && ! material.envMap ) || ( material.isMeshPhongMaterial && ! material.envMap );
|
|
2359
|
+
const envMap = environments.get( material.envMap || environment, usePMREM );
|
|
2217
2360
|
const vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;
|
|
2218
2361
|
const vertexTangents = !! geometry.attributes.tangent && ( !! material.normalMap || material.anisotropy > 0 );
|
|
2219
2362
|
const morphTargets = !! geometry.morphAttributes.position;
|
|
@@ -2361,6 +2504,10 @@ class WebGLRenderer {
|
|
|
2361
2504
|
|
|
2362
2505
|
needsProgramChange = true;
|
|
2363
2506
|
|
|
2507
|
+
} else if ( !! materialProperties.lightProbeGrid !== ( currentRenderState.state.lightProbeGridArray.length > 0 ) ) {
|
|
2508
|
+
|
|
2509
|
+
needsProgramChange = true;
|
|
2510
|
+
|
|
2364
2511
|
} else if ( materialProperties.numMultiviewViews !== numMultiviewViews ) {
|
|
2365
2512
|
|
|
2366
2513
|
needsProgramChange = true;
|
|
@@ -2382,6 +2529,14 @@ class WebGLRenderer {
|
|
|
2382
2529
|
|
|
2383
2530
|
program = getProgram( material, scene, object );
|
|
2384
2531
|
|
|
2532
|
+
// notify the node builder that the program has changed so uniforms and update nodes can
|
|
2533
|
+
// be cached and triggered.
|
|
2534
|
+
if ( _nodesHandler && material.isNodeMaterial ) {
|
|
2535
|
+
|
|
2536
|
+
_nodesHandler.onUpdateProgram( material, program, materialProperties );
|
|
2537
|
+
|
|
2538
|
+
}
|
|
2539
|
+
|
|
2385
2540
|
}
|
|
2386
2541
|
|
|
2387
2542
|
let refreshProgram = false;
|
|
@@ -2407,6 +2562,19 @@ class WebGLRenderer {
|
|
|
2407
2562
|
|
|
2408
2563
|
}
|
|
2409
2564
|
|
|
2565
|
+
if ( materialProperties.needsLights ) {
|
|
2566
|
+
|
|
2567
|
+
const objectVolume = findLightProbeGrid( currentRenderState.state.lightProbeGridArray, object );
|
|
2568
|
+
|
|
2569
|
+
if ( materialProperties.lightProbeGrid !== objectVolume ) {
|
|
2570
|
+
|
|
2571
|
+
materialProperties.lightProbeGrid = objectVolume;
|
|
2572
|
+
refreshMaterial = true;
|
|
2573
|
+
|
|
2574
|
+
}
|
|
2575
|
+
|
|
2576
|
+
}
|
|
2577
|
+
|
|
2410
2578
|
if ( refreshProgram || _currentCamera !== camera ) {
|
|
2411
2579
|
|
|
2412
2580
|
// common camera uniforms
|
|
@@ -2433,6 +2601,7 @@ class WebGLRenderer {
|
|
|
2433
2601
|
|
|
2434
2602
|
}
|
|
2435
2603
|
|
|
2604
|
+
|
|
2436
2605
|
const uCamPos = p_uniforms.map.cameraPosition;
|
|
2437
2606
|
|
|
2438
2607
|
if ( uCamPos !== undefined ) {
|
|
@@ -2476,6 +2645,30 @@ class WebGLRenderer {
|
|
|
2476
2645
|
|
|
2477
2646
|
}
|
|
2478
2647
|
|
|
2648
|
+
// Pre-allocate texture units for shadow samplers before setting data textures
|
|
2649
|
+
if ( materialProperties.needsLights ) {
|
|
2650
|
+
|
|
2651
|
+
// Set shadow map uniforms first to ensure they get the first texture units
|
|
2652
|
+
if ( lights.state.directionalShadowMap.length > 0 ) {
|
|
2653
|
+
|
|
2654
|
+
p_uniforms.setValue( _gl, 'directionalShadowMap', lights.state.directionalShadowMap, textures );
|
|
2655
|
+
|
|
2656
|
+
}
|
|
2657
|
+
|
|
2658
|
+
if ( lights.state.spotShadowMap.length > 0 ) {
|
|
2659
|
+
|
|
2660
|
+
p_uniforms.setValue( _gl, 'spotShadowMap', lights.state.spotShadowMap, textures );
|
|
2661
|
+
|
|
2662
|
+
}
|
|
2663
|
+
|
|
2664
|
+
if ( lights.state.pointShadowMap.length > 0 ) {
|
|
2665
|
+
|
|
2666
|
+
p_uniforms.setValue( _gl, 'pointShadowMap', lights.state.pointShadowMap, textures );
|
|
2667
|
+
|
|
2668
|
+
}
|
|
2669
|
+
|
|
2670
|
+
}
|
|
2671
|
+
|
|
2479
2672
|
// skinning and morph target uniforms must be set even if material didn't change
|
|
2480
2673
|
// auto-setting of texture unit for bone and morph texture must go before other textures
|
|
2481
2674
|
// otherwise textures used for skinning and morphing can take over texture units reserved for other material textures
|
|
@@ -2529,17 +2722,7 @@ class WebGLRenderer {
|
|
|
2529
2722
|
|
|
2530
2723
|
}
|
|
2531
2724
|
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
if ( material.isMeshGouraudMaterial && material.envMap !== null ) {
|
|
2535
|
-
|
|
2536
|
-
m_uniforms.envMap.value = envMap;
|
|
2537
|
-
|
|
2538
|
-
m_uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;
|
|
2539
|
-
|
|
2540
|
-
}
|
|
2541
|
-
|
|
2542
|
-
if ( material.isMeshStandardMaterial && material.envMap === null && scene.environment !== null ) {
|
|
2725
|
+
if ( ( material.isMeshStandardMaterial || material.isMeshLambertMaterial || material.isMeshPhongMaterial ) && material.envMap === null && scene.environment !== null ) {
|
|
2543
2726
|
|
|
2544
2727
|
m_uniforms.envMapIntensity.value = scene.environmentIntensity;
|
|
2545
2728
|
|
|
@@ -2581,6 +2764,19 @@ class WebGLRenderer {
|
|
|
2581
2764
|
|
|
2582
2765
|
materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, currentRenderState.state.transmissionRenderTarget[ camera.id ] );
|
|
2583
2766
|
|
|
2767
|
+
// light probe volume
|
|
2768
|
+
|
|
2769
|
+
if ( materialProperties.needsLights && materialProperties.lightProbeGrid ) {
|
|
2770
|
+
|
|
2771
|
+
const volume = materialProperties.lightProbeGrid;
|
|
2772
|
+
|
|
2773
|
+
m_uniforms.probesSH.value = volume.texture;
|
|
2774
|
+
m_uniforms.probesMin.value.copy( volume.boundingBox.min );
|
|
2775
|
+
m_uniforms.probesMax.value.copy( volume.boundingBox.max );
|
|
2776
|
+
m_uniforms.probesResolution.value.copy( volume.resolution );
|
|
2777
|
+
|
|
2778
|
+
}
|
|
2779
|
+
|
|
2584
2780
|
WebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );
|
|
2585
2781
|
|
|
2586
2782
|
}
|
|
@@ -2615,7 +2811,7 @@ class WebGLRenderer {
|
|
|
2615
2811
|
|
|
2616
2812
|
// UBOs
|
|
2617
2813
|
|
|
2618
|
-
if ( material.
|
|
2814
|
+
if ( material.uniformsGroups !== undefined ) {
|
|
2619
2815
|
|
|
2620
2816
|
const groups = material.uniformsGroups;
|
|
2621
2817
|
|
|
@@ -2725,7 +2921,7 @@ class WebGLRenderer {
|
|
|
2725
2921
|
const renderTargetProperties = properties.get( renderTarget );
|
|
2726
2922
|
|
|
2727
2923
|
renderTargetProperties.__autoAllocateDepthBuffer = renderTarget.resolveDepthBuffer === false;
|
|
2728
|
-
if (
|
|
2924
|
+
if ( renderTargetProperties.__autoAllocateDepthBuffer === false && ( ! _currentRenderTarget || ! _currentRenderTarget.isWebGLMultiviewRenderTarget ) ) {
|
|
2729
2925
|
|
|
2730
2926
|
// The multisample_render_to_texture extension doesn't work properly if there
|
|
2731
2927
|
// are midframe flushes and an external depth buffer. Disable use of the extension.
|
|
@@ -2748,8 +2944,6 @@ class WebGLRenderer {
|
|
|
2748
2944
|
|
|
2749
2945
|
};
|
|
2750
2946
|
|
|
2751
|
-
const _scratchFrameBuffer = _gl.createFramebuffer();
|
|
2752
|
-
|
|
2753
2947
|
/**
|
|
2754
2948
|
* Sets the active rendertarget.
|
|
2755
2949
|
*
|
|
@@ -2772,7 +2966,6 @@ class WebGLRenderer {
|
|
|
2772
2966
|
_currentActiveCubeFace = activeCubeFace;
|
|
2773
2967
|
_currentActiveMipmapLevel = activeMipmapLevel;
|
|
2774
2968
|
|
|
2775
|
-
let useDefaultFramebuffer = true;
|
|
2776
2969
|
let framebuffer = null;
|
|
2777
2970
|
let isCube = false;
|
|
2778
2971
|
let isRenderTarget3D = false;
|
|
@@ -2783,9 +2976,21 @@ class WebGLRenderer {
|
|
|
2783
2976
|
|
|
2784
2977
|
if ( renderTargetProperties.__useDefaultFramebuffer !== undefined ) {
|
|
2785
2978
|
|
|
2786
|
-
//
|
|
2787
|
-
|
|
2788
|
-
|
|
2979
|
+
// Externally-managed framebuffer (e.g. XR)
|
|
2980
|
+
// Bind to the stored framebuffer (may be null for default, or a WebGLFramebuffer)
|
|
2981
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
2982
|
+
|
|
2983
|
+
_currentViewport.copy( renderTarget.viewport );
|
|
2984
|
+
_currentScissor.copy( renderTarget.scissor );
|
|
2985
|
+
_currentScissorTest = renderTarget.scissorTest;
|
|
2986
|
+
|
|
2987
|
+
state.viewport( _currentViewport );
|
|
2988
|
+
state.scissor( _currentScissor );
|
|
2989
|
+
state.setScissorTest( _currentScissorTest );
|
|
2990
|
+
|
|
2991
|
+
_currentMaterialId = - 1;
|
|
2992
|
+
|
|
2993
|
+
return;
|
|
2789
2994
|
|
|
2790
2995
|
} else if ( renderTargetProperties.__webglFramebuffer === undefined ) {
|
|
2791
2996
|
|
|
@@ -2809,7 +3014,7 @@ class WebGLRenderer {
|
|
|
2809
3014
|
( renderTarget.width !== depthTexture.image.width || renderTarget.height !== depthTexture.image.height )
|
|
2810
3015
|
) {
|
|
2811
3016
|
|
|
2812
|
-
throw new Error( '
|
|
3017
|
+
throw new Error( 'THREE.WebGLRenderer: Attached DepthTexture is initialized to the incorrect size.' );
|
|
2813
3018
|
|
|
2814
3019
|
}
|
|
2815
3020
|
|
|
@@ -2878,13 +3083,13 @@ class WebGLRenderer {
|
|
|
2878
3083
|
// being bound that are different sizes.
|
|
2879
3084
|
if ( activeMipmapLevel !== 0 ) {
|
|
2880
3085
|
|
|
2881
|
-
framebuffer =
|
|
3086
|
+
framebuffer = _scratchFramebuffer;
|
|
2882
3087
|
|
|
2883
3088
|
}
|
|
2884
3089
|
|
|
2885
3090
|
const framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
2886
3091
|
|
|
2887
|
-
if ( framebufferBound
|
|
3092
|
+
if ( framebufferBound ) {
|
|
2888
3093
|
|
|
2889
3094
|
state.drawBuffers( renderTarget, framebuffer );
|
|
2890
3095
|
|
|
@@ -2963,6 +3168,10 @@ class WebGLRenderer {
|
|
|
2963
3168
|
const textureFormat = texture.format;
|
|
2964
3169
|
const textureType = texture.type;
|
|
2965
3170
|
|
|
3171
|
+
// when using MRT, select the correct color buffer for the subsequent read command
|
|
3172
|
+
|
|
3173
|
+
if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
|
|
3174
|
+
|
|
2966
3175
|
if ( ! capabilities.textureFormatReadable( textureFormat ) ) {
|
|
2967
3176
|
|
|
2968
3177
|
error( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );
|
|
@@ -2981,10 +3190,6 @@ class WebGLRenderer {
|
|
|
2981
3190
|
|
|
2982
3191
|
if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {
|
|
2983
3192
|
|
|
2984
|
-
// when using MRT, select the correct color buffer for the subsequent read command
|
|
2985
|
-
|
|
2986
|
-
if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
|
|
2987
|
-
|
|
2988
3193
|
_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );
|
|
2989
3194
|
|
|
2990
3195
|
}
|
|
@@ -3045,6 +3250,11 @@ class WebGLRenderer {
|
|
|
3045
3250
|
const textureFormat = texture.format;
|
|
3046
3251
|
const textureType = texture.type;
|
|
3047
3252
|
|
|
3253
|
+
// when using MRT, select the correct color buffer for the subsequent read command
|
|
3254
|
+
|
|
3255
|
+
if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
|
|
3256
|
+
|
|
3257
|
+
|
|
3048
3258
|
if ( ! capabilities.textureFormatReadable( textureFormat ) ) {
|
|
3049
3259
|
|
|
3050
3260
|
throw new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.' );
|
|
@@ -3061,10 +3271,6 @@ class WebGLRenderer {
|
|
|
3061
3271
|
_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );
|
|
3062
3272
|
_gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );
|
|
3063
3273
|
|
|
3064
|
-
// when using MRT, select the correct color buffer for the subsequent read command
|
|
3065
|
-
|
|
3066
|
-
if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
|
|
3067
|
-
|
|
3068
3274
|
_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), 0 );
|
|
3069
3275
|
|
|
3070
3276
|
// reset the frame buffer to the currently set buffer before waiting
|
|
@@ -3120,8 +3326,6 @@ class WebGLRenderer {
|
|
|
3120
3326
|
|
|
3121
3327
|
};
|
|
3122
3328
|
|
|
3123
|
-
const _srcFramebuffer = _gl.createFramebuffer();
|
|
3124
|
-
const _dstFramebuffer = _gl.createFramebuffer();
|
|
3125
3329
|
|
|
3126
3330
|
/**
|
|
3127
3331
|
* Copies data of the given source texture into a destination texture.
|
|
@@ -3134,27 +3338,9 @@ class WebGLRenderer {
|
|
|
3134
3338
|
* @param {?(Box2|Box3)} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.
|
|
3135
3339
|
* @param {?(Vector2|Vector3)} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.
|
|
3136
3340
|
* @param {number} [srcLevel=0] - The source mipmap level to copy.
|
|
3137
|
-
* @param {?number} [dstLevel=
|
|
3341
|
+
* @param {?number} [dstLevel=0] - The destination mipmap level.
|
|
3138
3342
|
*/
|
|
3139
|
-
this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel =
|
|
3140
|
-
|
|
3141
|
-
// support the previous signature with just a single dst mipmap level
|
|
3142
|
-
if ( dstLevel === null ) {
|
|
3143
|
-
|
|
3144
|
-
if ( srcLevel !== 0 ) {
|
|
3145
|
-
|
|
3146
|
-
// @deprecated, r171
|
|
3147
|
-
warnOnce( 'WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels.' );
|
|
3148
|
-
dstLevel = srcLevel;
|
|
3149
|
-
srcLevel = 0;
|
|
3150
|
-
|
|
3151
|
-
} else {
|
|
3152
|
-
|
|
3153
|
-
dstLevel = 0;
|
|
3154
|
-
|
|
3155
|
-
}
|
|
3156
|
-
|
|
3157
|
-
}
|
|
3343
|
+
this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {
|
|
3158
3344
|
|
|
3159
3345
|
// gather the necessary dimensions to copy
|
|
3160
3346
|
let width, height, depth, minX, minY, minZ;
|
|
@@ -3230,22 +3416,24 @@ class WebGLRenderer {
|
|
|
3230
3416
|
|
|
3231
3417
|
}
|
|
3232
3418
|
|
|
3233
|
-
|
|
3234
|
-
|
|
3235
|
-
|
|
3419
|
+
state.activeTexture( _gl.TEXTURE0 ); // see #33153
|
|
3420
|
+
|
|
3421
|
+
state.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
|
|
3422
|
+
state.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
|
|
3423
|
+
state.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
|
|
3236
3424
|
|
|
3237
3425
|
// used for copying data from cpu
|
|
3238
|
-
const currentUnpackRowLen =
|
|
3239
|
-
const currentUnpackImageHeight =
|
|
3240
|
-
const currentUnpackSkipPixels =
|
|
3241
|
-
const currentUnpackSkipRows =
|
|
3242
|
-
const currentUnpackSkipImages =
|
|
3243
|
-
|
|
3244
|
-
|
|
3245
|
-
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
|
|
3426
|
+
const currentUnpackRowLen = state.getParameter( _gl.UNPACK_ROW_LENGTH );
|
|
3427
|
+
const currentUnpackImageHeight = state.getParameter( _gl.UNPACK_IMAGE_HEIGHT );
|
|
3428
|
+
const currentUnpackSkipPixels = state.getParameter( _gl.UNPACK_SKIP_PIXELS );
|
|
3429
|
+
const currentUnpackSkipRows = state.getParameter( _gl.UNPACK_SKIP_ROWS );
|
|
3430
|
+
const currentUnpackSkipImages = state.getParameter( _gl.UNPACK_SKIP_IMAGES );
|
|
3431
|
+
|
|
3432
|
+
state.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );
|
|
3433
|
+
state.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );
|
|
3434
|
+
state.pixelStorei( _gl.UNPACK_SKIP_PIXELS, minX );
|
|
3435
|
+
state.pixelStorei( _gl.UNPACK_SKIP_ROWS, minY );
|
|
3436
|
+
state.pixelStorei( _gl.UNPACK_SKIP_IMAGES, minZ );
|
|
3249
3437
|
|
|
3250
3438
|
// set up the src texture
|
|
3251
3439
|
const isSrc3D = srcTexture.isDataArrayTexture || srcTexture.isData3DTexture;
|
|
@@ -3371,11 +3559,11 @@ class WebGLRenderer {
|
|
|
3371
3559
|
}
|
|
3372
3560
|
|
|
3373
3561
|
// reset values
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
|
|
3377
|
-
|
|
3378
|
-
|
|
3562
|
+
state.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );
|
|
3563
|
+
state.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );
|
|
3564
|
+
state.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );
|
|
3565
|
+
state.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );
|
|
3566
|
+
state.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );
|
|
3379
3567
|
|
|
3380
3568
|
// Generate mipmaps only when copying level 0
|
|
3381
3569
|
if ( dstLevel === 0 && dstTexture.generateMipmaps ) {
|
|
@@ -3519,6 +3707,7 @@ class WebGLRenderer {
|
|
|
3519
3707
|
* Note that this setting uses `gl_FragDepth` if available which disables the Early Fragment Test optimization and can cause a decrease in performance.
|
|
3520
3708
|
* @property {boolean} [reversedDepthBuffer=false] Whether to use a reverse depth buffer. Requires the `EXT_clip_control` extension.
|
|
3521
3709
|
* This is a more faster and accurate version than logarithmic depth buffer.
|
|
3710
|
+
* @property {number} [outputBufferType=UnsignedByteType] Defines the type of the output buffer. Use `HalfFloatType` for HDR rendering with tone mapping and post-processing support.
|
|
3522
3711
|
**/
|
|
3523
3712
|
|
|
3524
3713
|
/**
|
|
@@ -3540,7 +3729,6 @@ class WebGLRenderer {
|
|
|
3540
3729
|
* @property {string} precision - The shader precision currently being used by the renderer.
|
|
3541
3730
|
* @property {boolean} reversedDepthBuffer - `true` if `reversedDepthBuffer` was set to `true` in the constructor
|
|
3542
3731
|
* and the rendering context supports `EXT_clip_control`.
|
|
3543
|
-
* @property {boolean} vertexTextures - `true` if vertex textures can be used.
|
|
3544
3732
|
**/
|
|
3545
3733
|
|
|
3546
3734
|
/**
|
|
@@ -3582,7 +3770,7 @@ class WebGLRenderer {
|
|
|
3582
3770
|
* If you do not require dynamic lighting / shadows, you may set this to `false`.
|
|
3583
3771
|
* @property {boolean} [needsUpdate=false] - When set to `true`, shadow maps in the scene
|
|
3584
3772
|
* will be updated in the next `render` call.
|
|
3585
|
-
* @property {(BasicShadowMap|PCFShadowMap|
|
|
3773
|
+
* @property {(BasicShadowMap|PCFShadowMap|VSMShadowMap)} [type=PCFShadowMap] - Defines the shadow map type.
|
|
3586
3774
|
**/
|
|
3587
3775
|
|
|
3588
3776
|
export { WebGLRenderer };
|