@plastic-software/three 0.167.4 → 0.174.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +36217 -23964
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46744
- package/build/three.module.min.js +2 -3
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50671
- package/build/three.webgpu.min.js +2 -3
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
|
@@ -17,9 +17,7 @@ import {
|
|
|
17
17
|
UnsignedInt248Type,
|
|
18
18
|
UnsignedShort4444Type,
|
|
19
19
|
UnsignedShort5551Type,
|
|
20
|
-
WebGLCoordinateSystem
|
|
21
|
-
DisplayP3ColorSpace,
|
|
22
|
-
LinearDisplayP3ColorSpace
|
|
20
|
+
WebGLCoordinateSystem
|
|
23
21
|
} from '../constants.js';
|
|
24
22
|
import { Color } from '../math/Color.js';
|
|
25
23
|
import { Frustum } from '../math/Frustum.js';
|
|
@@ -54,7 +52,7 @@ import { WebGLUtils } from './webgl/WebGLUtils.js';
|
|
|
54
52
|
import { WebXRManager } from './webxr/WebXRManager.js';
|
|
55
53
|
import { WebGLMaterials } from './webgl/WebGLMaterials.js';
|
|
56
54
|
import { WebGLUniformsGroups } from './webgl/WebGLUniformsGroups.js';
|
|
57
|
-
import { createCanvasElement, probeAsync, warnOnce } from '../utils.js';
|
|
55
|
+
import { createCanvasElement, probeAsync, toNormalizedProjectionMatrix, toReversedProjectionMatrix, warnOnce } from '../utils.js';
|
|
58
56
|
import { ColorManagement } from '../math/ColorManagement.js';
|
|
59
57
|
|
|
60
58
|
class WebGLRenderer {
|
|
@@ -72,6 +70,7 @@ class WebGLRenderer {
|
|
|
72
70
|
preserveDrawingBuffer = false,
|
|
73
71
|
powerPreference = 'default',
|
|
74
72
|
failIfMajorPerformanceCaveat = false,
|
|
73
|
+
reverseDepthBuffer = false,
|
|
75
74
|
} = parameters;
|
|
76
75
|
|
|
77
76
|
this.isWebGLRenderer = true;
|
|
@@ -194,8 +193,12 @@ class WebGLRenderer {
|
|
|
194
193
|
let _clippingEnabled = false;
|
|
195
194
|
let _localClippingEnabled = false;
|
|
196
195
|
|
|
196
|
+
// transmission render target scale
|
|
197
|
+
this.transmissionResolutionScale = 1.0;
|
|
198
|
+
|
|
197
199
|
// camera matrices cache
|
|
198
200
|
|
|
201
|
+
const _currentProjectionMatrix = new Matrix4();
|
|
199
202
|
const _projScreenMatrix = new Matrix4();
|
|
200
203
|
|
|
201
204
|
const _vector3 = new Vector3();
|
|
@@ -289,7 +292,13 @@ class WebGLRenderer {
|
|
|
289
292
|
|
|
290
293
|
capabilities = new WebGLCapabilities( _gl, extensions, parameters, utils );
|
|
291
294
|
|
|
292
|
-
state = new WebGLState( _gl );
|
|
295
|
+
state = new WebGLState( _gl, extensions );
|
|
296
|
+
|
|
297
|
+
if ( capabilities.reverseDepthBuffer && reverseDepthBuffer ) {
|
|
298
|
+
|
|
299
|
+
state.buffers.depth.setReversed( true );
|
|
300
|
+
|
|
301
|
+
}
|
|
293
302
|
|
|
294
303
|
info = new WebGLInfo( _gl );
|
|
295
304
|
properties = new WebGLProperties();
|
|
@@ -513,7 +522,7 @@ class WebGLRenderer {
|
|
|
513
522
|
|
|
514
523
|
this.setClearColor = function () {
|
|
515
524
|
|
|
516
|
-
background.setClearColor
|
|
525
|
+
background.setClearColor( ...arguments );
|
|
517
526
|
|
|
518
527
|
};
|
|
519
528
|
|
|
@@ -525,7 +534,7 @@ class WebGLRenderer {
|
|
|
525
534
|
|
|
526
535
|
this.setClearAlpha = function () {
|
|
527
536
|
|
|
528
|
-
background.setClearAlpha
|
|
537
|
+
background.setClearAlpha( ...arguments );
|
|
529
538
|
|
|
530
539
|
};
|
|
531
540
|
|
|
@@ -590,7 +599,12 @@ class WebGLRenderer {
|
|
|
590
599
|
|
|
591
600
|
}
|
|
592
601
|
|
|
593
|
-
if ( depth )
|
|
602
|
+
if ( depth ) {
|
|
603
|
+
|
|
604
|
+
bits |= _gl.DEPTH_BUFFER_BIT;
|
|
605
|
+
|
|
606
|
+
}
|
|
607
|
+
|
|
594
608
|
if ( stencil ) {
|
|
595
609
|
|
|
596
610
|
bits |= _gl.STENCIL_BUFFER_BIT;
|
|
@@ -628,6 +642,7 @@ class WebGLRenderer {
|
|
|
628
642
|
canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );
|
|
629
643
|
canvas.removeEventListener( 'webglcontextcreationerror', onContextCreationError, false );
|
|
630
644
|
|
|
645
|
+
background.dispose();
|
|
631
646
|
renderLists.dispose();
|
|
632
647
|
renderStates.dispose();
|
|
633
648
|
properties.dispose();
|
|
@@ -855,6 +870,8 @@ class WebGLRenderer {
|
|
|
855
870
|
|
|
856
871
|
if ( object._multiDrawInstances !== null ) {
|
|
857
872
|
|
|
873
|
+
// @deprecated, r174
|
|
874
|
+
warnOnce( 'THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
|
|
858
875
|
renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
|
|
859
876
|
|
|
860
877
|
} else {
|
|
@@ -979,6 +996,12 @@ class WebGLRenderer {
|
|
|
979
996
|
|
|
980
997
|
scene.traverse( function ( object ) {
|
|
981
998
|
|
|
999
|
+
if ( ! ( object.isMesh || object.isPoints || object.isLine || object.isSprite ) ) {
|
|
1000
|
+
|
|
1001
|
+
return;
|
|
1002
|
+
|
|
1003
|
+
}
|
|
1004
|
+
|
|
982
1005
|
const material = object.material;
|
|
983
1006
|
|
|
984
1007
|
if ( material ) {
|
|
@@ -1005,8 +1028,7 @@ class WebGLRenderer {
|
|
|
1005
1028
|
|
|
1006
1029
|
} );
|
|
1007
1030
|
|
|
1008
|
-
renderStateStack.pop();
|
|
1009
|
-
currentRenderState = null;
|
|
1031
|
+
currentRenderState = renderStateStack.pop();
|
|
1010
1032
|
|
|
1011
1033
|
return materials;
|
|
1012
1034
|
|
|
@@ -1251,7 +1273,7 @@ class WebGLRenderer {
|
|
|
1251
1273
|
|
|
1252
1274
|
//
|
|
1253
1275
|
|
|
1254
|
-
if ( _currentRenderTarget !== null ) {
|
|
1276
|
+
if ( _currentRenderTarget !== null && _currentActiveMipmapLevel === 0 ) {
|
|
1255
1277
|
|
|
1256
1278
|
// resolve multisample renderbuffers to a single-sample texture if necessary
|
|
1257
1279
|
|
|
@@ -1479,7 +1501,7 @@ class WebGLRenderer {
|
|
|
1479
1501
|
const transmissionRenderTarget = currentRenderState.state.transmissionRenderTarget[ camera.id ];
|
|
1480
1502
|
|
|
1481
1503
|
const activeViewport = camera.viewport || _currentViewport;
|
|
1482
|
-
transmissionRenderTarget.setSize( activeViewport.z, activeViewport.w );
|
|
1504
|
+
transmissionRenderTarget.setSize( activeViewport.z * _this.transmissionResolutionScale, activeViewport.w * _this.transmissionResolutionScale );
|
|
1483
1505
|
|
|
1484
1506
|
//
|
|
1485
1507
|
|
|
@@ -1845,11 +1867,11 @@ class WebGLRenderer {
|
|
|
1845
1867
|
|
|
1846
1868
|
needsProgramChange = true;
|
|
1847
1869
|
|
|
1848
|
-
} else if (object.isBatchedMesh && materialProperties.batchingMatrix === false && object._matricesTexture !== null) {
|
|
1870
|
+
} else if ( object.isBatchedMesh && materialProperties.batchingMatrix === false && object._matricesTexture !== null ) {
|
|
1849
1871
|
|
|
1850
1872
|
needsProgramChange = true;
|
|
1851
1873
|
|
|
1852
|
-
} else if (object.isBatchedMesh && materialProperties.batchingMatrix === true && object._matricesTexture === null) {
|
|
1874
|
+
} else if ( object.isBatchedMesh && materialProperties.batchingMatrix === true && object._matricesTexture === null ) {
|
|
1853
1875
|
|
|
1854
1876
|
needsProgramChange = true;
|
|
1855
1877
|
|
|
@@ -1973,7 +1995,23 @@ class WebGLRenderer {
|
|
|
1973
1995
|
|
|
1974
1996
|
// common camera uniforms
|
|
1975
1997
|
|
|
1976
|
-
|
|
1998
|
+
const reverseDepthBuffer = state.buffers.depth.getReversed();
|
|
1999
|
+
|
|
2000
|
+
if ( reverseDepthBuffer ) {
|
|
2001
|
+
|
|
2002
|
+
_currentProjectionMatrix.copy( camera.projectionMatrix );
|
|
2003
|
+
|
|
2004
|
+
toNormalizedProjectionMatrix( _currentProjectionMatrix );
|
|
2005
|
+
toReversedProjectionMatrix( _currentProjectionMatrix );
|
|
2006
|
+
|
|
2007
|
+
p_uniforms.setValue( _gl, 'projectionMatrix', _currentProjectionMatrix );
|
|
2008
|
+
|
|
2009
|
+
} else {
|
|
2010
|
+
|
|
2011
|
+
p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );
|
|
2012
|
+
|
|
2013
|
+
}
|
|
2014
|
+
|
|
1977
2015
|
p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );
|
|
1978
2016
|
|
|
1979
2017
|
const uCamPos = p_uniforms.map.cameraPosition;
|
|
@@ -2246,6 +2284,7 @@ class WebGLRenderer {
|
|
|
2246
2284
|
|
|
2247
2285
|
};
|
|
2248
2286
|
|
|
2287
|
+
const _scratchFrameBuffer = _gl.createFramebuffer();
|
|
2249
2288
|
this.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {
|
|
2250
2289
|
|
|
2251
2290
|
_currentRenderTarget = renderTarget;
|
|
@@ -2354,6 +2393,14 @@ class WebGLRenderer {
|
|
|
2354
2393
|
|
|
2355
2394
|
}
|
|
2356
2395
|
|
|
2396
|
+
// Use a scratch frame buffer if rendering to a mip level to avoid depth buffers
|
|
2397
|
+
// being bound that are different sizes.
|
|
2398
|
+
if ( activeMipmapLevel !== 0 ) {
|
|
2399
|
+
|
|
2400
|
+
framebuffer = _scratchFrameBuffer;
|
|
2401
|
+
|
|
2402
|
+
}
|
|
2403
|
+
|
|
2357
2404
|
const framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
2358
2405
|
|
|
2359
2406
|
if ( framebufferBound && useDefaultFramebuffer ) {
|
|
@@ -2374,8 +2421,15 @@ class WebGLRenderer {
|
|
|
2374
2421
|
} else if ( isRenderTarget3D ) {
|
|
2375
2422
|
|
|
2376
2423
|
const textureProperties = properties.get( renderTarget.texture );
|
|
2377
|
-
const layer = activeCubeFace
|
|
2378
|
-
_gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel
|
|
2424
|
+
const layer = activeCubeFace;
|
|
2425
|
+
_gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel, layer );
|
|
2426
|
+
|
|
2427
|
+
} else if ( renderTarget !== null && activeMipmapLevel !== 0 ) {
|
|
2428
|
+
|
|
2429
|
+
// Only bind the frame buffer if we are using a scratch frame buffer to render to a mipmap.
|
|
2430
|
+
// If we rebind the texture when using a multi sample buffer then an error about inconsistent samples will be thrown.
|
|
2431
|
+
const textureProperties = properties.get( renderTarget.texture );
|
|
2432
|
+
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, textureProperties.__webglTexture, activeMipmapLevel );
|
|
2379
2433
|
|
|
2380
2434
|
}
|
|
2381
2435
|
|
|
@@ -2462,61 +2516,55 @@ class WebGLRenderer {
|
|
|
2462
2516
|
|
|
2463
2517
|
if ( framebuffer ) {
|
|
2464
2518
|
|
|
2465
|
-
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
const texture = renderTarget.texture;
|
|
2470
|
-
const textureFormat = texture.format;
|
|
2471
|
-
const textureType = texture.type;
|
|
2472
|
-
|
|
2473
|
-
if ( ! capabilities.textureFormatReadable( textureFormat ) ) {
|
|
2519
|
+
const texture = renderTarget.texture;
|
|
2520
|
+
const textureFormat = texture.format;
|
|
2521
|
+
const textureType = texture.type;
|
|
2474
2522
|
|
|
2475
|
-
|
|
2523
|
+
if ( ! capabilities.textureFormatReadable( textureFormat ) ) {
|
|
2476
2524
|
|
|
2477
|
-
|
|
2525
|
+
throw new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.' );
|
|
2478
2526
|
|
|
2479
|
-
|
|
2527
|
+
}
|
|
2480
2528
|
|
|
2481
|
-
|
|
2529
|
+
if ( ! capabilities.textureTypeReadable( textureType ) ) {
|
|
2482
2530
|
|
|
2483
|
-
|
|
2531
|
+
throw new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.' );
|
|
2484
2532
|
|
|
2485
|
-
|
|
2486
|
-
if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {
|
|
2487
|
-
|
|
2488
|
-
const glBuffer = _gl.createBuffer();
|
|
2489
|
-
_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );
|
|
2490
|
-
_gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );
|
|
2491
|
-
_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), 0 );
|
|
2492
|
-
_gl.flush();
|
|
2533
|
+
}
|
|
2493
2534
|
|
|
2494
|
-
|
|
2495
|
-
|
|
2496
|
-
await probeAsync( _gl, sync, 4 );
|
|
2535
|
+
// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)
|
|
2536
|
+
if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {
|
|
2497
2537
|
|
|
2498
|
-
|
|
2538
|
+
// set the active frame buffer to the one we want to read
|
|
2539
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
2499
2540
|
|
|
2500
|
-
|
|
2501
|
-
|
|
2541
|
+
const glBuffer = _gl.createBuffer();
|
|
2542
|
+
_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );
|
|
2543
|
+
_gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );
|
|
2544
|
+
_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), 0 );
|
|
2502
2545
|
|
|
2503
|
-
|
|
2546
|
+
// reset the frame buffer to the currently set buffer before waiting
|
|
2547
|
+
const currFramebuffer = _currentRenderTarget !== null ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;
|
|
2548
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, currFramebuffer );
|
|
2504
2549
|
|
|
2505
|
-
|
|
2506
|
-
|
|
2550
|
+
// check if the commands have finished every 8 ms
|
|
2551
|
+
const sync = _gl.fenceSync( _gl.SYNC_GPU_COMMANDS_COMPLETE, 0 );
|
|
2507
2552
|
|
|
2508
|
-
|
|
2553
|
+
_gl.flush();
|
|
2509
2554
|
|
|
2510
|
-
|
|
2555
|
+
await probeAsync( _gl, sync, 4 );
|
|
2511
2556
|
|
|
2512
|
-
|
|
2557
|
+
// read the data and delete the buffer
|
|
2558
|
+
_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );
|
|
2559
|
+
_gl.getBufferSubData( _gl.PIXEL_PACK_BUFFER, 0, buffer );
|
|
2560
|
+
_gl.deleteBuffer( glBuffer );
|
|
2561
|
+
_gl.deleteSync( sync );
|
|
2513
2562
|
|
|
2514
|
-
|
|
2563
|
+
return buffer;
|
|
2515
2564
|
|
|
2516
|
-
|
|
2565
|
+
} else {
|
|
2517
2566
|
|
|
2518
|
-
|
|
2519
|
-
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
2567
|
+
throw new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.' );
|
|
2520
2568
|
|
|
2521
2569
|
}
|
|
2522
2570
|
|
|
@@ -2552,7 +2600,9 @@ class WebGLRenderer {
|
|
|
2552
2600
|
|
|
2553
2601
|
};
|
|
2554
2602
|
|
|
2555
|
-
|
|
2603
|
+
const _srcFramebuffer = _gl.createFramebuffer();
|
|
2604
|
+
const _dstFramebuffer = _gl.createFramebuffer();
|
|
2605
|
+
this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = null ) {
|
|
2556
2606
|
|
|
2557
2607
|
// support previous signature with dstPosition first
|
|
2558
2608
|
if ( srcTexture.isTexture !== true ) {
|
|
@@ -2563,26 +2613,64 @@ class WebGLRenderer {
|
|
|
2563
2613
|
dstPosition = arguments[ 0 ] || null;
|
|
2564
2614
|
srcTexture = arguments[ 1 ];
|
|
2565
2615
|
dstTexture = arguments[ 2 ];
|
|
2566
|
-
|
|
2616
|
+
dstLevel = arguments[ 3 ] || 0;
|
|
2567
2617
|
srcRegion = null;
|
|
2568
2618
|
|
|
2569
2619
|
}
|
|
2570
2620
|
|
|
2571
|
-
|
|
2572
|
-
|
|
2621
|
+
// support the previous signature with just a single dst mipmap level
|
|
2622
|
+
if ( dstLevel === null ) {
|
|
2623
|
+
|
|
2624
|
+
if ( srcLevel !== 0 ) {
|
|
2625
|
+
|
|
2626
|
+
// @deprecated, r171
|
|
2627
|
+
warnOnce( 'WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels.' );
|
|
2628
|
+
dstLevel = srcLevel;
|
|
2629
|
+
srcLevel = 0;
|
|
2630
|
+
|
|
2631
|
+
} else {
|
|
2632
|
+
|
|
2633
|
+
dstLevel = 0;
|
|
2634
|
+
|
|
2635
|
+
}
|
|
2636
|
+
|
|
2637
|
+
}
|
|
2638
|
+
|
|
2639
|
+
// gather the necessary dimensions to copy
|
|
2640
|
+
let width, height, depth, minX, minY, minZ;
|
|
2641
|
+
let dstX, dstY, dstZ;
|
|
2642
|
+
const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ dstLevel ] : srcTexture.image;
|
|
2573
2643
|
if ( srcRegion !== null ) {
|
|
2574
2644
|
|
|
2575
2645
|
width = srcRegion.max.x - srcRegion.min.x;
|
|
2576
2646
|
height = srcRegion.max.y - srcRegion.min.y;
|
|
2647
|
+
depth = srcRegion.isBox3 ? srcRegion.max.z - srcRegion.min.z : 1;
|
|
2577
2648
|
minX = srcRegion.min.x;
|
|
2578
2649
|
minY = srcRegion.min.y;
|
|
2650
|
+
minZ = srcRegion.isBox3 ? srcRegion.min.z : 0;
|
|
2579
2651
|
|
|
2580
2652
|
} else {
|
|
2581
2653
|
|
|
2582
|
-
|
|
2583
|
-
|
|
2654
|
+
const levelScale = Math.pow( 2, - srcLevel );
|
|
2655
|
+
width = Math.floor( image.width * levelScale );
|
|
2656
|
+
height = Math.floor( image.height * levelScale );
|
|
2657
|
+
if ( srcTexture.isDataArrayTexture ) {
|
|
2658
|
+
|
|
2659
|
+
depth = image.depth;
|
|
2660
|
+
|
|
2661
|
+
} else if ( srcTexture.isData3DTexture ) {
|
|
2662
|
+
|
|
2663
|
+
depth = Math.floor( image.depth * levelScale );
|
|
2664
|
+
|
|
2665
|
+
} else {
|
|
2666
|
+
|
|
2667
|
+
depth = 1;
|
|
2668
|
+
|
|
2669
|
+
}
|
|
2670
|
+
|
|
2584
2671
|
minX = 0;
|
|
2585
2672
|
minY = 0;
|
|
2673
|
+
minZ = 0;
|
|
2586
2674
|
|
|
2587
2675
|
}
|
|
2588
2676
|
|
|
@@ -2590,177 +2678,179 @@ class WebGLRenderer {
|
|
|
2590
2678
|
|
|
2591
2679
|
dstX = dstPosition.x;
|
|
2592
2680
|
dstY = dstPosition.y;
|
|
2681
|
+
dstZ = dstPosition.z;
|
|
2593
2682
|
|
|
2594
2683
|
} else {
|
|
2595
2684
|
|
|
2596
2685
|
dstX = 0;
|
|
2597
2686
|
dstY = 0;
|
|
2687
|
+
dstZ = 0;
|
|
2598
2688
|
|
|
2599
2689
|
}
|
|
2600
2690
|
|
|
2691
|
+
// Set up the destination target
|
|
2601
2692
|
const glFormat = utils.convert( dstTexture.format );
|
|
2602
2693
|
const glType = utils.convert( dstTexture.type );
|
|
2694
|
+
let glTarget;
|
|
2695
|
+
|
|
2696
|
+
if ( dstTexture.isData3DTexture ) {
|
|
2697
|
+
|
|
2698
|
+
textures.setTexture3D( dstTexture, 0 );
|
|
2699
|
+
glTarget = _gl.TEXTURE_3D;
|
|
2700
|
+
|
|
2701
|
+
} else if ( dstTexture.isDataArrayTexture || dstTexture.isCompressedArrayTexture ) {
|
|
2702
|
+
|
|
2703
|
+
textures.setTexture2DArray( dstTexture, 0 );
|
|
2704
|
+
glTarget = _gl.TEXTURE_2D_ARRAY;
|
|
2705
|
+
|
|
2706
|
+
} else {
|
|
2603
2707
|
|
|
2604
|
-
|
|
2708
|
+
textures.setTexture2D( dstTexture, 0 );
|
|
2709
|
+
glTarget = _gl.TEXTURE_2D;
|
|
2710
|
+
|
|
2711
|
+
}
|
|
2605
2712
|
|
|
2606
|
-
// As another texture upload may have changed pixelStorei
|
|
2607
|
-
// parameters, make sure they are correct for the dstTexture
|
|
2608
2713
|
_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
|
|
2609
2714
|
_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
|
|
2610
2715
|
_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
|
|
2611
2716
|
|
|
2717
|
+
// used for copying data from cpu
|
|
2612
2718
|
const currentUnpackRowLen = _gl.getParameter( _gl.UNPACK_ROW_LENGTH );
|
|
2613
2719
|
const currentUnpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );
|
|
2614
2720
|
const currentUnpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );
|
|
2615
2721
|
const currentUnpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );
|
|
2616
2722
|
const currentUnpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );
|
|
2617
2723
|
|
|
2618
|
-
const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;
|
|
2619
|
-
|
|
2620
2724
|
_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );
|
|
2621
2725
|
_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );
|
|
2622
2726
|
_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, minX );
|
|
2623
2727
|
_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, minY );
|
|
2728
|
+
_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, minZ );
|
|
2624
2729
|
|
|
2625
|
-
|
|
2730
|
+
// set up the src texture
|
|
2731
|
+
const isSrc3D = srcTexture.isDataArrayTexture || srcTexture.isData3DTexture;
|
|
2732
|
+
const isDst3D = dstTexture.isDataArrayTexture || dstTexture.isData3DTexture;
|
|
2733
|
+
if ( srcTexture.isDepthTexture ) {
|
|
2626
2734
|
|
|
2627
|
-
|
|
2735
|
+
const srcTextureProperties = properties.get( srcTexture );
|
|
2736
|
+
const dstTextureProperties = properties.get( dstTexture );
|
|
2737
|
+
const srcRenderTargetProperties = properties.get( srcTextureProperties.__renderTarget );
|
|
2738
|
+
const dstRenderTargetProperties = properties.get( dstTextureProperties.__renderTarget );
|
|
2739
|
+
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, srcRenderTargetProperties.__webglFramebuffer );
|
|
2740
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, dstRenderTargetProperties.__webglFramebuffer );
|
|
2628
2741
|
|
|
2629
|
-
|
|
2742
|
+
for ( let i = 0; i < depth; i ++ ) {
|
|
2630
2743
|
|
|
2631
|
-
|
|
2744
|
+
// if the source or destination are a 3d target then a layer needs to be bound
|
|
2745
|
+
if ( isSrc3D ) {
|
|
2632
2746
|
|
|
2633
|
-
|
|
2747
|
+
_gl.framebufferTextureLayer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( srcTexture ).__webglTexture, srcLevel, minZ + i );
|
|
2748
|
+
_gl.framebufferTextureLayer( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( dstTexture ).__webglTexture, dstLevel, dstZ + i );
|
|
2634
2749
|
|
|
2635
|
-
|
|
2750
|
+
}
|
|
2636
2751
|
|
|
2637
|
-
_gl.
|
|
2752
|
+
_gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, _gl.DEPTH_BUFFER_BIT, _gl.NEAREST );
|
|
2638
2753
|
|
|
2639
2754
|
}
|
|
2640
2755
|
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );
|
|
2644
|
-
_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );
|
|
2645
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );
|
|
2646
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );
|
|
2647
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );
|
|
2756
|
+
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );
|
|
2757
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );
|
|
2648
2758
|
|
|
2649
|
-
|
|
2650
|
-
if ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( _gl.TEXTURE_2D );
|
|
2759
|
+
} else if ( srcLevel !== 0 || srcTexture.isRenderTargetTexture || properties.has( srcTexture ) ) {
|
|
2651
2760
|
|
|
2652
|
-
|
|
2761
|
+
// get the appropriate frame buffers
|
|
2762
|
+
const srcTextureProperties = properties.get( srcTexture );
|
|
2763
|
+
const dstTextureProperties = properties.get( dstTexture );
|
|
2653
2764
|
|
|
2654
|
-
|
|
2765
|
+
// bind the frame buffer targets
|
|
2766
|
+
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, _srcFramebuffer );
|
|
2767
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, _dstFramebuffer );
|
|
2655
2768
|
|
|
2656
|
-
|
|
2769
|
+
for ( let i = 0; i < depth; i ++ ) {
|
|
2657
2770
|
|
|
2658
|
-
|
|
2659
|
-
|
|
2771
|
+
// assign the correct layers and mip maps to the frame buffers
|
|
2772
|
+
if ( isSrc3D ) {
|
|
2660
2773
|
|
|
2661
|
-
|
|
2662
|
-
warnOnce( 'WebGLRenderer: copyTextureToTexture3D function signature has changed.' );
|
|
2774
|
+
_gl.framebufferTextureLayer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, srcTextureProperties.__webglTexture, srcLevel, minZ + i );
|
|
2663
2775
|
|
|
2664
|
-
|
|
2665
|
-
dstPosition = arguments[ 1 ] || null;
|
|
2666
|
-
srcTexture = arguments[ 2 ];
|
|
2667
|
-
dstTexture = arguments[ 3 ];
|
|
2668
|
-
level = arguments[ 4 ] || 0;
|
|
2776
|
+
} else {
|
|
2669
2777
|
|
|
2670
|
-
|
|
2778
|
+
_gl.framebufferTexture2D( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, srcTextureProperties.__webglTexture, srcLevel );
|
|
2671
2779
|
|
|
2672
|
-
|
|
2673
|
-
let dstX, dstY, dstZ;
|
|
2674
|
-
const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;
|
|
2675
|
-
if ( srcRegion !== null ) {
|
|
2780
|
+
}
|
|
2676
2781
|
|
|
2677
|
-
|
|
2678
|
-
height = srcRegion.max.y - srcRegion.min.y;
|
|
2679
|
-
depth = srcRegion.max.z - srcRegion.min.z;
|
|
2680
|
-
minX = srcRegion.min.x;
|
|
2681
|
-
minY = srcRegion.min.y;
|
|
2682
|
-
minZ = srcRegion.min.z;
|
|
2782
|
+
if ( isDst3D ) {
|
|
2683
2783
|
|
|
2684
|
-
|
|
2784
|
+
_gl.framebufferTextureLayer( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, dstTextureProperties.__webglTexture, dstLevel, dstZ + i );
|
|
2685
2785
|
|
|
2686
|
-
|
|
2687
|
-
height = image.height;
|
|
2688
|
-
depth = image.depth;
|
|
2689
|
-
minX = 0;
|
|
2690
|
-
minY = 0;
|
|
2691
|
-
minZ = 0;
|
|
2786
|
+
} else {
|
|
2692
2787
|
|
|
2693
|
-
|
|
2788
|
+
_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, dstTextureProperties.__webglTexture, dstLevel );
|
|
2694
2789
|
|
|
2695
|
-
|
|
2790
|
+
}
|
|
2696
2791
|
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
dstZ = dstPosition.z;
|
|
2792
|
+
// copy the data using the fastest function that can achieve the copy
|
|
2793
|
+
if ( srcLevel !== 0 ) {
|
|
2700
2794
|
|
|
2701
|
-
|
|
2795
|
+
_gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, _gl.COLOR_BUFFER_BIT, _gl.NEAREST );
|
|
2702
2796
|
|
|
2703
|
-
|
|
2704
|
-
dstY = 0;
|
|
2705
|
-
dstZ = 0;
|
|
2797
|
+
} else if ( isDst3D ) {
|
|
2706
2798
|
|
|
2707
|
-
|
|
2799
|
+
_gl.copyTexSubImage3D( glTarget, dstLevel, dstX, dstY, dstZ + i, minX, minY, width, height );
|
|
2708
2800
|
|
|
2709
|
-
|
|
2710
|
-
const glType = utils.convert( dstTexture.type );
|
|
2711
|
-
let glTarget;
|
|
2801
|
+
} else {
|
|
2712
2802
|
|
|
2713
|
-
|
|
2803
|
+
_gl.copyTexSubImage2D( glTarget, dstLevel, dstX, dstY, minX, minY, width, height );
|
|
2714
2804
|
|
|
2715
|
-
|
|
2716
|
-
glTarget = _gl.TEXTURE_3D;
|
|
2805
|
+
}
|
|
2717
2806
|
|
|
2718
|
-
|
|
2807
|
+
}
|
|
2719
2808
|
|
|
2720
|
-
|
|
2721
|
-
|
|
2809
|
+
// unbind read, draw buffers
|
|
2810
|
+
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );
|
|
2811
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );
|
|
2722
2812
|
|
|
2723
2813
|
} else {
|
|
2724
2814
|
|
|
2725
|
-
|
|
2726
|
-
return;
|
|
2815
|
+
if ( isDst3D ) {
|
|
2727
2816
|
|
|
2728
|
-
|
|
2817
|
+
// copy data into the 3d texture
|
|
2818
|
+
if ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {
|
|
2729
2819
|
|
|
2730
|
-
|
|
2731
|
-
_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
|
|
2732
|
-
_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
|
|
2820
|
+
_gl.texSubImage3D( glTarget, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image.data );
|
|
2733
2821
|
|
|
2734
|
-
|
|
2735
|
-
const currentUnpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );
|
|
2736
|
-
const currentUnpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );
|
|
2737
|
-
const currentUnpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );
|
|
2738
|
-
const currentUnpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );
|
|
2822
|
+
} else if ( dstTexture.isCompressedArrayTexture ) {
|
|
2739
2823
|
|
|
2740
|
-
|
|
2741
|
-
_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );
|
|
2742
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, minX );
|
|
2743
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, minY );
|
|
2744
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, minZ );
|
|
2824
|
+
_gl.compressedTexSubImage3D( glTarget, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, image.data );
|
|
2745
2825
|
|
|
2746
|
-
|
|
2826
|
+
} else {
|
|
2747
2827
|
|
|
2748
|
-
|
|
2828
|
+
_gl.texSubImage3D( glTarget, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image );
|
|
2749
2829
|
|
|
2750
|
-
|
|
2830
|
+
}
|
|
2751
2831
|
|
|
2752
|
-
|
|
2832
|
+
} else {
|
|
2753
2833
|
|
|
2754
|
-
|
|
2834
|
+
// copy data into the 2d texture
|
|
2835
|
+
if ( srcTexture.isDataTexture ) {
|
|
2755
2836
|
|
|
2756
|
-
|
|
2837
|
+
_gl.texSubImage2D( _gl.TEXTURE_2D, dstLevel, dstX, dstY, width, height, glFormat, glType, image.data );
|
|
2838
|
+
|
|
2839
|
+
} else if ( srcTexture.isCompressedTexture ) {
|
|
2840
|
+
|
|
2841
|
+
_gl.compressedTexSubImage2D( _gl.TEXTURE_2D, dstLevel, dstX, dstY, image.width, image.height, glFormat, image.data );
|
|
2842
|
+
|
|
2843
|
+
} else {
|
|
2844
|
+
|
|
2845
|
+
_gl.texSubImage2D( _gl.TEXTURE_2D, dstLevel, dstX, dstY, width, height, glFormat, glType, image );
|
|
2757
2846
|
|
|
2758
|
-
|
|
2847
|
+
}
|
|
2759
2848
|
|
|
2760
2849
|
}
|
|
2761
2850
|
|
|
2762
2851
|
}
|
|
2763
2852
|
|
|
2853
|
+
// reset values
|
|
2764
2854
|
_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );
|
|
2765
2855
|
_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );
|
|
2766
2856
|
_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );
|
|
@@ -2768,12 +2858,39 @@ class WebGLRenderer {
|
|
|
2768
2858
|
_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );
|
|
2769
2859
|
|
|
2770
2860
|
// Generate mipmaps only when copying level 0
|
|
2771
|
-
if (
|
|
2861
|
+
if ( dstLevel === 0 && dstTexture.generateMipmaps ) {
|
|
2862
|
+
|
|
2863
|
+
_gl.generateMipmap( glTarget );
|
|
2864
|
+
|
|
2865
|
+
}
|
|
2772
2866
|
|
|
2773
2867
|
state.unbindTexture();
|
|
2774
2868
|
|
|
2775
2869
|
};
|
|
2776
2870
|
|
|
2871
|
+
this.copyTextureToTexture3D = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {
|
|
2872
|
+
|
|
2873
|
+
// support previous signature with source box first
|
|
2874
|
+
if ( srcTexture.isTexture !== true ) {
|
|
2875
|
+
|
|
2876
|
+
// @deprecated, r165
|
|
2877
|
+
warnOnce( 'WebGLRenderer: copyTextureToTexture3D function signature has changed.' );
|
|
2878
|
+
|
|
2879
|
+
srcRegion = arguments[ 0 ] || null;
|
|
2880
|
+
dstPosition = arguments[ 1 ] || null;
|
|
2881
|
+
srcTexture = arguments[ 2 ];
|
|
2882
|
+
dstTexture = arguments[ 3 ];
|
|
2883
|
+
level = arguments[ 4 ] || 0;
|
|
2884
|
+
|
|
2885
|
+
}
|
|
2886
|
+
|
|
2887
|
+
// @deprecated, r170
|
|
2888
|
+
warnOnce( 'WebGLRenderer: copyTextureToTexture3D function has been deprecated. Use "copyTextureToTexture" instead.' );
|
|
2889
|
+
|
|
2890
|
+
return this.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, level );
|
|
2891
|
+
|
|
2892
|
+
};
|
|
2893
|
+
|
|
2777
2894
|
this.initRenderTarget = function ( target ) {
|
|
2778
2895
|
|
|
2779
2896
|
if ( properties.get( target ).__webglFramebuffer === undefined ) {
|
|
@@ -2844,8 +2961,8 @@ class WebGLRenderer {
|
|
|
2844
2961
|
this._outputColorSpace = colorSpace;
|
|
2845
2962
|
|
|
2846
2963
|
const gl = this.getContext();
|
|
2847
|
-
gl.
|
|
2848
|
-
gl.unpackColorSpace = ColorManagement.
|
|
2964
|
+
gl.drawingBufferColorspace = ColorManagement._getDrawingBufferColorSpace( colorSpace );
|
|
2965
|
+
gl.unpackColorSpace = ColorManagement._getUnpackColorSpace();
|
|
2849
2966
|
|
|
2850
2967
|
}
|
|
2851
2968
|
|