@plastic-software/three 0.167.3 → 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 +36277 -24023
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46743
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50670
- package/build/three.webgpu.min.js +2 -2
- 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/points.glsl.js +2 -0
- 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
|
@@ -2,19 +2,53 @@ import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, Near
|
|
|
2
2
|
|
|
3
3
|
let initialized = false, wrappingToGL, filterToGL, compareToGL;
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* A WebGL 2 backend utility module for managing textures.
|
|
7
|
+
*
|
|
8
|
+
* @private
|
|
9
|
+
*/
|
|
5
10
|
class WebGLTextureUtils {
|
|
6
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new utility object.
|
|
14
|
+
*
|
|
15
|
+
* @param {WebGLBackend} backend - The WebGL 2 backend.
|
|
16
|
+
*/
|
|
7
17
|
constructor( backend ) {
|
|
8
18
|
|
|
19
|
+
/**
|
|
20
|
+
* A reference to the WebGL 2 backend.
|
|
21
|
+
*
|
|
22
|
+
* @type {WebGLBackend}
|
|
23
|
+
*/
|
|
9
24
|
this.backend = backend;
|
|
10
25
|
|
|
26
|
+
/**
|
|
27
|
+
* A reference to the rendering context.
|
|
28
|
+
*
|
|
29
|
+
* @type {WebGL2RenderingContext}
|
|
30
|
+
*/
|
|
11
31
|
this.gl = backend.gl;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* A reference to a backend module holding extension-related
|
|
35
|
+
* utility functions.
|
|
36
|
+
*
|
|
37
|
+
* @type {WebGLExtensions}
|
|
38
|
+
*/
|
|
12
39
|
this.extensions = backend.extensions;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* A dictionary for managing default textures. The key
|
|
43
|
+
* is the binding point (target), the value the WEbGL texture object.
|
|
44
|
+
*
|
|
45
|
+
* @type {Object<GLenum,WebGLTexture>}
|
|
46
|
+
*/
|
|
13
47
|
this.defaultTextures = {};
|
|
14
48
|
|
|
15
49
|
if ( initialized === false ) {
|
|
16
50
|
|
|
17
|
-
this._init(
|
|
51
|
+
this._init();
|
|
18
52
|
|
|
19
53
|
initialized = true;
|
|
20
54
|
|
|
@@ -22,7 +56,14 @@ class WebGLTextureUtils {
|
|
|
22
56
|
|
|
23
57
|
}
|
|
24
58
|
|
|
25
|
-
|
|
59
|
+
/**
|
|
60
|
+
* Inits the state of the utility.
|
|
61
|
+
*
|
|
62
|
+
* @private
|
|
63
|
+
*/
|
|
64
|
+
_init() {
|
|
65
|
+
|
|
66
|
+
const gl = this.gl;
|
|
26
67
|
|
|
27
68
|
// Store only WebGL constants here.
|
|
28
69
|
|
|
@@ -55,20 +96,12 @@ class WebGLTextureUtils {
|
|
|
55
96
|
|
|
56
97
|
}
|
|
57
98
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
return gl.NEAREST;
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
return gl.LINEAR;
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
|
|
99
|
+
/**
|
|
100
|
+
* Returns the native texture type for the given texture.
|
|
101
|
+
*
|
|
102
|
+
* @param {Texture} texture - The texture.
|
|
103
|
+
* @return {GLenum} The native texture type.
|
|
104
|
+
*/
|
|
72
105
|
getGLTextureType( texture ) {
|
|
73
106
|
|
|
74
107
|
const { gl } = this;
|
|
@@ -79,11 +112,11 @@ class WebGLTextureUtils {
|
|
|
79
112
|
|
|
80
113
|
glTextureType = gl.TEXTURE_CUBE_MAP;
|
|
81
114
|
|
|
82
|
-
} else if ( texture.isDataArrayTexture === true ) {
|
|
115
|
+
} else if ( texture.isDataArrayTexture === true || texture.isCompressedArrayTexture === true ) {
|
|
83
116
|
|
|
84
117
|
glTextureType = gl.TEXTURE_2D_ARRAY;
|
|
85
118
|
|
|
86
|
-
} else if ( texture.isData3DTexture === true ) {
|
|
119
|
+
} else if ( texture.isData3DTexture === true ) { // TODO: isCompressed3DTexture, wait for #26642
|
|
87
120
|
|
|
88
121
|
glTextureType = gl.TEXTURE_3D;
|
|
89
122
|
|
|
@@ -98,6 +131,16 @@ class WebGLTextureUtils {
|
|
|
98
131
|
|
|
99
132
|
}
|
|
100
133
|
|
|
134
|
+
/**
|
|
135
|
+
* Returns the native texture type for the given texture.
|
|
136
|
+
*
|
|
137
|
+
* @param {?string} internalFormatName - The internal format name. When `null`, the internal format is derived from the subsequent parameters.
|
|
138
|
+
* @param {GLenum} glFormat - The WebGL format.
|
|
139
|
+
* @param {GLenum} glType - The WebGL type.
|
|
140
|
+
* @param {string} colorSpace - The texture's color space.
|
|
141
|
+
* @param {boolean} [forceLinearTransfer=false] - Whether to force a linear transfer or not.
|
|
142
|
+
* @return {GLenum} The internal format.
|
|
143
|
+
*/
|
|
101
144
|
getInternalFormat( internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false ) {
|
|
102
145
|
|
|
103
146
|
const { gl, extensions } = this;
|
|
@@ -218,7 +261,8 @@ class WebGLTextureUtils {
|
|
|
218
261
|
|
|
219
262
|
if ( glFormat === gl.DEPTH_COMPONENT ) {
|
|
220
263
|
|
|
221
|
-
if ( glType === gl.
|
|
264
|
+
if ( glType === gl.UNSIGNED_SHORT ) internalFormat = gl.DEPTH_COMPONENT16;
|
|
265
|
+
if ( glType === gl.UNSIGNED_INT ) internalFormat = gl.DEPTH_COMPONENT24;
|
|
222
266
|
if ( glType === gl.FLOAT ) internalFormat = gl.DEPTH_COMPONENT32F;
|
|
223
267
|
|
|
224
268
|
}
|
|
@@ -241,11 +285,21 @@ class WebGLTextureUtils {
|
|
|
241
285
|
|
|
242
286
|
}
|
|
243
287
|
|
|
288
|
+
/**
|
|
289
|
+
* Sets the texture parameters for the given texture.
|
|
290
|
+
*
|
|
291
|
+
* @param {GLenum} textureType - The texture type.
|
|
292
|
+
* @param {Texture} texture - The texture.
|
|
293
|
+
*/
|
|
244
294
|
setTextureParameters( textureType, texture ) {
|
|
245
295
|
|
|
246
296
|
const { gl, extensions, backend } = this;
|
|
247
297
|
|
|
248
|
-
|
|
298
|
+
|
|
299
|
+
gl.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );
|
|
300
|
+
gl.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
|
|
301
|
+
gl.pixelStorei( gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
|
|
302
|
+
gl.pixelStorei( gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE );
|
|
249
303
|
|
|
250
304
|
gl.texParameteri( textureType, gl.TEXTURE_WRAP_S, wrappingToGL[ texture.wrapS ] );
|
|
251
305
|
gl.texParameteri( textureType, gl.TEXTURE_WRAP_T, wrappingToGL[ texture.wrapT ] );
|
|
@@ -259,8 +313,10 @@ class WebGLTextureUtils {
|
|
|
259
313
|
gl.texParameteri( textureType, gl.TEXTURE_MAG_FILTER, filterToGL[ texture.magFilter ] );
|
|
260
314
|
|
|
261
315
|
|
|
316
|
+
const hasMipmaps = texture.mipmaps !== undefined && texture.mipmaps.length > 0;
|
|
317
|
+
|
|
262
318
|
// follow WebGPU backend mapping for texture filtering
|
|
263
|
-
const minFilter =
|
|
319
|
+
const minFilter = texture.minFilter === LinearFilter && hasMipmaps ? LinearMipmapLinearFilter : texture.minFilter;
|
|
264
320
|
|
|
265
321
|
gl.texParameteri( textureType, gl.TEXTURE_MIN_FILTER, filterToGL[ minFilter ] );
|
|
266
322
|
|
|
@@ -277,11 +333,10 @@ class WebGLTextureUtils {
|
|
|
277
333
|
if ( texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter ) return;
|
|
278
334
|
if ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension for WebGL 1 and WebGL 2
|
|
279
335
|
|
|
280
|
-
if ( texture.anisotropy > 1
|
|
336
|
+
if ( texture.anisotropy > 1 ) {
|
|
281
337
|
|
|
282
338
|
const extension = extensions.get( 'EXT_texture_filter_anisotropic' );
|
|
283
339
|
gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, backend.getMaxAnisotropy() ) );
|
|
284
|
-
backend.get( texture ).currentAnisotropy = texture.anisotropy;
|
|
285
340
|
|
|
286
341
|
}
|
|
287
342
|
|
|
@@ -289,6 +344,12 @@ class WebGLTextureUtils {
|
|
|
289
344
|
|
|
290
345
|
}
|
|
291
346
|
|
|
347
|
+
/**
|
|
348
|
+
* Creates a default texture for the given texture that can be used
|
|
349
|
+
* as a placeholder until the actual texture is ready for usage.
|
|
350
|
+
*
|
|
351
|
+
* @param {Texture} texture - The texture to create a default texture for.
|
|
352
|
+
*/
|
|
292
353
|
createDefaultTexture( texture ) {
|
|
293
354
|
|
|
294
355
|
const { gl, backend, defaultTextures } = this;
|
|
@@ -320,6 +381,13 @@ class WebGLTextureUtils {
|
|
|
320
381
|
|
|
321
382
|
}
|
|
322
383
|
|
|
384
|
+
/**
|
|
385
|
+
* Defines a texture on the GPU for the given texture object.
|
|
386
|
+
*
|
|
387
|
+
* @param {Texture} texture - The texture.
|
|
388
|
+
* @param {Object} [options={}] - Optional configuration parameter.
|
|
389
|
+
* @return {undefined}
|
|
390
|
+
*/
|
|
323
391
|
createTexture( texture, options ) {
|
|
324
392
|
|
|
325
393
|
const { gl, backend } = this;
|
|
@@ -334,14 +402,9 @@ class WebGLTextureUtils {
|
|
|
334
402
|
|
|
335
403
|
backend.state.bindTexture( glTextureType, textureGPU );
|
|
336
404
|
|
|
337
|
-
gl.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );
|
|
338
|
-
gl.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
|
|
339
|
-
gl.pixelStorei( gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
|
|
340
|
-
gl.pixelStorei( gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE );
|
|
341
|
-
|
|
342
405
|
this.setTextureParameters( glTextureType, texture );
|
|
343
406
|
|
|
344
|
-
if ( texture.isDataArrayTexture ) {
|
|
407
|
+
if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {
|
|
345
408
|
|
|
346
409
|
gl.texStorage3D( gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, width, height, depth );
|
|
347
410
|
|
|
@@ -365,6 +428,12 @@ class WebGLTextureUtils {
|
|
|
365
428
|
|
|
366
429
|
}
|
|
367
430
|
|
|
431
|
+
/**
|
|
432
|
+
* Uploads texture buffer data to the GPU memory.
|
|
433
|
+
*
|
|
434
|
+
* @param {WebGLBuffer} buffer - The buffer data.
|
|
435
|
+
* @param {Texture} texture - The texture,
|
|
436
|
+
*/
|
|
368
437
|
copyBufferToTexture( buffer, texture ) {
|
|
369
438
|
|
|
370
439
|
const { gl, backend } = this;
|
|
@@ -400,6 +469,12 @@ class WebGLTextureUtils {
|
|
|
400
469
|
|
|
401
470
|
}
|
|
402
471
|
|
|
472
|
+
/**
|
|
473
|
+
* Uploads the updated texture data to the GPU.
|
|
474
|
+
*
|
|
475
|
+
* @param {Texture} texture - The texture.
|
|
476
|
+
* @param {Object} [options={}] - Optional configuration parameter.
|
|
477
|
+
*/
|
|
403
478
|
updateTexture( texture, options ) {
|
|
404
479
|
|
|
405
480
|
const { gl } = this;
|
|
@@ -415,7 +490,10 @@ class WebGLTextureUtils {
|
|
|
415
490
|
|
|
416
491
|
return source.image.data;
|
|
417
492
|
|
|
418
|
-
} else if (
|
|
493
|
+
} else if ( ( typeof HTMLImageElement !== 'undefined' && source instanceof HTMLImageElement ) ||
|
|
494
|
+
( typeof HTMLCanvasElement !== 'undefined' && source instanceof HTMLCanvasElement ) ||
|
|
495
|
+
( typeof ImageBitmap !== 'undefined' && source instanceof ImageBitmap ) ||
|
|
496
|
+
source instanceof OffscreenCanvas ) {
|
|
419
497
|
|
|
420
498
|
return source;
|
|
421
499
|
|
|
@@ -427,9 +505,12 @@ class WebGLTextureUtils {
|
|
|
427
505
|
|
|
428
506
|
this.backend.state.bindTexture( glTextureType, textureGPU );
|
|
429
507
|
|
|
508
|
+
this.setTextureParameters( glTextureType, texture );
|
|
509
|
+
|
|
430
510
|
if ( texture.isCompressedTexture ) {
|
|
431
511
|
|
|
432
512
|
const mipmaps = texture.mipmaps;
|
|
513
|
+
const image = options.image;
|
|
433
514
|
|
|
434
515
|
for ( let i = 0; i < mipmaps.length; i ++ ) {
|
|
435
516
|
|
|
@@ -437,14 +518,12 @@ class WebGLTextureUtils {
|
|
|
437
518
|
|
|
438
519
|
if ( texture.isCompressedArrayTexture ) {
|
|
439
520
|
|
|
440
|
-
const image = options.image;
|
|
441
521
|
|
|
442
522
|
if ( texture.format !== gl.RGBA ) {
|
|
443
523
|
|
|
444
524
|
if ( glFormat !== null ) {
|
|
445
525
|
|
|
446
|
-
gl.compressedTexSubImage3D( gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data
|
|
447
|
-
|
|
526
|
+
gl.compressedTexSubImage3D( gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data );
|
|
448
527
|
|
|
449
528
|
} else {
|
|
450
529
|
|
|
@@ -474,6 +553,7 @@ class WebGLTextureUtils {
|
|
|
474
553
|
|
|
475
554
|
}
|
|
476
555
|
|
|
556
|
+
|
|
477
557
|
} else if ( texture.isCubeTexture ) {
|
|
478
558
|
|
|
479
559
|
const images = options.images;
|
|
@@ -515,6 +595,11 @@ class WebGLTextureUtils {
|
|
|
515
595
|
|
|
516
596
|
}
|
|
517
597
|
|
|
598
|
+
/**
|
|
599
|
+
* Generates mipmaps for the given texture.
|
|
600
|
+
*
|
|
601
|
+
* @param {Texture} texture - The texture.
|
|
602
|
+
*/
|
|
518
603
|
generateMipmaps( texture ) {
|
|
519
604
|
|
|
520
605
|
const { gl, backend } = this;
|
|
@@ -525,6 +610,11 @@ class WebGLTextureUtils {
|
|
|
525
610
|
|
|
526
611
|
}
|
|
527
612
|
|
|
613
|
+
/**
|
|
614
|
+
* Deallocates the render buffers of the given render target.
|
|
615
|
+
*
|
|
616
|
+
* @param {RenderTarget} renderTarget - The render target.
|
|
617
|
+
*/
|
|
528
618
|
deallocateRenderBuffers( renderTarget ) {
|
|
529
619
|
|
|
530
620
|
const { gl, backend } = this;
|
|
@@ -585,6 +675,11 @@ class WebGLTextureUtils {
|
|
|
585
675
|
|
|
586
676
|
}
|
|
587
677
|
|
|
678
|
+
/**
|
|
679
|
+
* Destroys the GPU data for the given texture object.
|
|
680
|
+
*
|
|
681
|
+
* @param {Texture} texture - The texture.
|
|
682
|
+
*/
|
|
588
683
|
destroyTexture( texture ) {
|
|
589
684
|
|
|
590
685
|
const { gl, backend } = this;
|
|
@@ -597,6 +692,15 @@ class WebGLTextureUtils {
|
|
|
597
692
|
|
|
598
693
|
}
|
|
599
694
|
|
|
695
|
+
/**
|
|
696
|
+
* Copies data of the given source texture to the given destination texture.
|
|
697
|
+
*
|
|
698
|
+
* @param {Texture} srcTexture - The source texture.
|
|
699
|
+
* @param {Texture} dstTexture - The destination texture.
|
|
700
|
+
* @param {?Vector4} [srcRegion=null] - The region of the source texture to copy.
|
|
701
|
+
* @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.
|
|
702
|
+
* @param {number} [level=0] - The mip level to copy.
|
|
703
|
+
*/
|
|
600
704
|
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {
|
|
601
705
|
|
|
602
706
|
const { gl, backend } = this;
|
|
@@ -604,9 +708,9 @@ class WebGLTextureUtils {
|
|
|
604
708
|
|
|
605
709
|
const { textureGPU: dstTextureGPU, glTextureType, glType, glFormat } = backend.get( dstTexture );
|
|
606
710
|
|
|
607
|
-
|
|
608
711
|
let width, height, minX, minY;
|
|
609
712
|
let dstX, dstY;
|
|
713
|
+
|
|
610
714
|
if ( srcRegion !== null ) {
|
|
611
715
|
|
|
612
716
|
width = srcRegion.max.x - srcRegion.min.x;
|
|
@@ -657,20 +761,46 @@ class WebGLTextureUtils {
|
|
|
657
761
|
gl.pixelStorei( gl.UNPACK_SKIP_PIXELS, minX );
|
|
658
762
|
gl.pixelStorei( gl.UNPACK_SKIP_ROWS, minY );
|
|
659
763
|
|
|
764
|
+
if ( srcTexture.isRenderTargetTexture || srcTexture.isDepthTexture ) {
|
|
765
|
+
|
|
766
|
+
const srcTextureData = backend.get( srcTexture );
|
|
767
|
+
const dstTextureData = backend.get( dstTexture );
|
|
768
|
+
|
|
769
|
+
const srcRenderContextData = backend.get( srcTextureData.renderTarget );
|
|
770
|
+
const dstRenderContextData = backend.get( dstTextureData.renderTarget );
|
|
771
|
+
|
|
772
|
+
const srcFramebuffer = srcRenderContextData.framebuffers[ srcTextureData.cacheKey ];
|
|
773
|
+
const dstFramebuffer = dstRenderContextData.framebuffers[ dstTextureData.cacheKey ];
|
|
660
774
|
|
|
661
|
-
|
|
775
|
+
state.bindFramebuffer( gl.READ_FRAMEBUFFER, srcFramebuffer );
|
|
776
|
+
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, dstFramebuffer );
|
|
662
777
|
|
|
663
|
-
|
|
778
|
+
let mask = gl.COLOR_BUFFER_BIT;
|
|
779
|
+
|
|
780
|
+
if ( srcTexture.isDepthTexture ) mask = gl.DEPTH_BUFFER_BIT;
|
|
781
|
+
|
|
782
|
+
gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, mask, gl.NEAREST );
|
|
783
|
+
|
|
784
|
+
state.bindFramebuffer( gl.READ_FRAMEBUFFER, null );
|
|
785
|
+
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );
|
|
664
786
|
|
|
665
787
|
} else {
|
|
666
788
|
|
|
667
|
-
if ( srcTexture.
|
|
789
|
+
if ( srcTexture.isDataTexture ) {
|
|
668
790
|
|
|
669
|
-
gl.
|
|
791
|
+
gl.texSubImage2D( gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image.data );
|
|
670
792
|
|
|
671
793
|
} else {
|
|
672
794
|
|
|
673
|
-
|
|
795
|
+
if ( srcTexture.isCompressedTexture ) {
|
|
796
|
+
|
|
797
|
+
gl.compressedTexSubImage2D( gl.TEXTURE_2D, level, dstX, dstY, image.width, image.height, glFormat, image.data );
|
|
798
|
+
|
|
799
|
+
} else {
|
|
800
|
+
|
|
801
|
+
gl.texSubImage2D( gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image );
|
|
802
|
+
|
|
803
|
+
}
|
|
674
804
|
|
|
675
805
|
}
|
|
676
806
|
|
|
@@ -689,20 +819,29 @@ class WebGLTextureUtils {
|
|
|
689
819
|
|
|
690
820
|
}
|
|
691
821
|
|
|
692
|
-
|
|
822
|
+
/**
|
|
823
|
+
* Copies the current bound framebuffer to the given texture.
|
|
824
|
+
*
|
|
825
|
+
* @param {Texture} texture - The destination texture.
|
|
826
|
+
* @param {RenderContext} renderContext - The render context.
|
|
827
|
+
* @param {Vector4} rectangle - A four dimensional vector defining the origin and dimension of the copy.
|
|
828
|
+
*/
|
|
829
|
+
copyFramebufferToTexture( texture, renderContext, rectangle ) {
|
|
693
830
|
|
|
694
831
|
const { gl } = this;
|
|
695
832
|
const { state } = this.backend;
|
|
696
833
|
|
|
697
834
|
const { textureGPU } = this.backend.get( texture );
|
|
698
835
|
|
|
699
|
-
const width =
|
|
700
|
-
const height = texture.image.height;
|
|
836
|
+
const { x, y, z: width, w: height } = rectangle;
|
|
701
837
|
|
|
702
838
|
const requireDrawFrameBuffer = texture.isDepthTexture === true || ( renderContext.renderTarget && renderContext.renderTarget.samples > 0 );
|
|
703
839
|
|
|
840
|
+
const srcHeight = renderContext.renderTarget ? renderContext.renderTarget.height : this.backend.getDrawingBufferSize().y;
|
|
841
|
+
|
|
704
842
|
if ( requireDrawFrameBuffer ) {
|
|
705
843
|
|
|
844
|
+
const partial = ( x !== 0 || y !== 0 );
|
|
706
845
|
let mask;
|
|
707
846
|
let attachment;
|
|
708
847
|
|
|
@@ -724,19 +863,45 @@ class WebGLTextureUtils {
|
|
|
724
863
|
|
|
725
864
|
}
|
|
726
865
|
|
|
727
|
-
|
|
728
|
-
|
|
866
|
+
if ( partial ) {
|
|
867
|
+
|
|
868
|
+
const renderTargetContextData = this.backend.get( renderContext.renderTarget );
|
|
869
|
+
|
|
870
|
+
const fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ];
|
|
871
|
+
const msaaFrameBuffer = renderTargetContextData.msaaFrameBuffer;
|
|
872
|
+
|
|
873
|
+
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );
|
|
874
|
+
state.bindFramebuffer( gl.READ_FRAMEBUFFER, msaaFrameBuffer );
|
|
875
|
+
|
|
876
|
+
const flippedY = srcHeight - y - height;
|
|
877
|
+
|
|
878
|
+
gl.blitFramebuffer( x, flippedY, x + width, flippedY + height, x, flippedY, x + width, flippedY + height, mask, gl.NEAREST );
|
|
879
|
+
|
|
880
|
+
state.bindFramebuffer( gl.READ_FRAMEBUFFER, fb );
|
|
881
|
+
|
|
882
|
+
state.bindTexture( gl.TEXTURE_2D, textureGPU );
|
|
729
883
|
|
|
730
|
-
|
|
884
|
+
gl.copyTexSubImage2D( gl.TEXTURE_2D, 0, 0, 0, x, flippedY, width, height );
|
|
731
885
|
|
|
732
|
-
|
|
886
|
+
state.unbindTexture();
|
|
733
887
|
|
|
734
|
-
|
|
888
|
+
} else {
|
|
889
|
+
|
|
890
|
+
const fb = gl.createFramebuffer();
|
|
891
|
+
|
|
892
|
+
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );
|
|
893
|
+
|
|
894
|
+
gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureGPU, 0 );
|
|
895
|
+
gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, gl.NEAREST );
|
|
896
|
+
|
|
897
|
+
gl.deleteFramebuffer( fb );
|
|
898
|
+
|
|
899
|
+
}
|
|
735
900
|
|
|
736
901
|
} else {
|
|
737
902
|
|
|
738
903
|
state.bindTexture( gl.TEXTURE_2D, textureGPU );
|
|
739
|
-
gl.copyTexSubImage2D( gl.TEXTURE_2D, 0, 0, 0,
|
|
904
|
+
gl.copyTexSubImage2D( gl.TEXTURE_2D, 0, 0, 0, x, srcHeight - height - y, width, height );
|
|
740
905
|
|
|
741
906
|
state.unbindTexture();
|
|
742
907
|
|
|
@@ -748,13 +913,20 @@ class WebGLTextureUtils {
|
|
|
748
913
|
|
|
749
914
|
}
|
|
750
915
|
|
|
751
|
-
|
|
752
|
-
|
|
916
|
+
/**
|
|
917
|
+
* SetupS storage for internal depth/stencil buffers and bind to correct framebuffer.
|
|
918
|
+
*
|
|
919
|
+
* @param {WebGLRenderbuffer} renderbuffer - The render buffer.
|
|
920
|
+
* @param {RenderContext} renderContext - The render context.
|
|
921
|
+
* @param {number} samples - The MSAA sample count.
|
|
922
|
+
* @param {boolean} [useMultisampledRTT=false] - Whether to use WEBGL_multisampled_render_to_texture or not.
|
|
923
|
+
*/
|
|
924
|
+
setupRenderBufferStorage( renderbuffer, renderContext, samples, useMultisampledRTT = false ) {
|
|
753
925
|
|
|
754
926
|
const { gl } = this;
|
|
755
927
|
const renderTarget = renderContext.renderTarget;
|
|
756
928
|
|
|
757
|
-
const {
|
|
929
|
+
const { depthTexture, depthBuffer, stencilBuffer, width, height } = renderTarget;
|
|
758
930
|
|
|
759
931
|
gl.bindRenderbuffer( gl.RENDERBUFFER, renderbuffer );
|
|
760
932
|
|
|
@@ -762,7 +934,13 @@ class WebGLTextureUtils {
|
|
|
762
934
|
|
|
763
935
|
let glInternalFormat = gl.DEPTH_COMPONENT24;
|
|
764
936
|
|
|
765
|
-
if (
|
|
937
|
+
if ( useMultisampledRTT === true ) {
|
|
938
|
+
|
|
939
|
+
const multisampledRTTExt = this.extensions.get( 'WEBGL_multisampled_render_to_texture' );
|
|
940
|
+
|
|
941
|
+
multisampledRTTExt.renderbufferStorageMultisampleEXT( gl.RENDERBUFFER, renderTarget.samples, glInternalFormat, width, height );
|
|
942
|
+
|
|
943
|
+
} else if ( samples > 0 ) {
|
|
766
944
|
|
|
767
945
|
if ( depthTexture && depthTexture.isDepthTexture ) {
|
|
768
946
|
|
|
@@ -803,7 +981,19 @@ class WebGLTextureUtils {
|
|
|
803
981
|
|
|
804
982
|
}
|
|
805
983
|
|
|
806
|
-
|
|
984
|
+
/**
|
|
985
|
+
* Returns texture data as a typed array.
|
|
986
|
+
*
|
|
987
|
+
* @async
|
|
988
|
+
* @param {Texture} texture - The texture to copy.
|
|
989
|
+
* @param {number} x - The x coordinate of the copy origin.
|
|
990
|
+
* @param {number} y - The y coordinate of the copy origin.
|
|
991
|
+
* @param {number} width - The width of the copy.
|
|
992
|
+
* @param {number} height - The height of the copy.
|
|
993
|
+
* @param {number} faceIndex - The face index.
|
|
994
|
+
* @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.
|
|
995
|
+
*/
|
|
996
|
+
async copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {
|
|
807
997
|
|
|
808
998
|
const { backend, gl } = this;
|
|
809
999
|
|
|
@@ -812,10 +1002,13 @@ class WebGLTextureUtils {
|
|
|
812
1002
|
const fb = gl.createFramebuffer();
|
|
813
1003
|
|
|
814
1004
|
gl.bindFramebuffer( gl.READ_FRAMEBUFFER, fb );
|
|
815
|
-
|
|
1005
|
+
|
|
1006
|
+
const target = texture.isCubeTexture ? gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex : gl.TEXTURE_2D;
|
|
1007
|
+
|
|
1008
|
+
gl.framebufferTexture2D( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, target, textureGPU, 0 );
|
|
816
1009
|
|
|
817
1010
|
const typedArrayType = this._getTypedArrayType( glType );
|
|
818
|
-
const bytesPerTexel = this._getBytesPerTexel( glFormat );
|
|
1011
|
+
const bytesPerTexel = this._getBytesPerTexel( glType, glFormat );
|
|
819
1012
|
|
|
820
1013
|
const elementCount = width * height;
|
|
821
1014
|
const byteLength = elementCount * bytesPerTexel;
|
|
@@ -841,6 +1034,13 @@ class WebGLTextureUtils {
|
|
|
841
1034
|
|
|
842
1035
|
}
|
|
843
1036
|
|
|
1037
|
+
/**
|
|
1038
|
+
* Returns the corresponding typed array type for the given WebGL data type.
|
|
1039
|
+
*
|
|
1040
|
+
* @private
|
|
1041
|
+
* @param {GLenum} glType - The WebGL data type.
|
|
1042
|
+
* @return {TypedArray.constructor} The typed array type.
|
|
1043
|
+
*/
|
|
844
1044
|
_getTypedArrayType( glType ) {
|
|
845
1045
|
|
|
846
1046
|
const { gl } = this;
|
|
@@ -853,19 +1053,41 @@ class WebGLTextureUtils {
|
|
|
853
1053
|
if ( glType === gl.UNSIGNED_SHORT ) return Uint16Array;
|
|
854
1054
|
if ( glType === gl.UNSIGNED_INT ) return Uint32Array;
|
|
855
1055
|
|
|
1056
|
+
if ( glType === gl.HALF_FLOAT ) return Uint16Array;
|
|
856
1057
|
if ( glType === gl.FLOAT ) return Float32Array;
|
|
857
1058
|
|
|
858
1059
|
throw new Error( `Unsupported WebGL type: ${glType}` );
|
|
859
1060
|
|
|
860
1061
|
}
|
|
861
1062
|
|
|
862
|
-
|
|
1063
|
+
/**
|
|
1064
|
+
* Returns the bytes-per-texel value for the given WebGL data type and texture format.
|
|
1065
|
+
*
|
|
1066
|
+
* @private
|
|
1067
|
+
* @param {GLenum} glType - The WebGL data type.
|
|
1068
|
+
* @param {GLenum} glFormat - The WebGL texture format.
|
|
1069
|
+
* @return {number} The bytes-per-texel.
|
|
1070
|
+
*/
|
|
1071
|
+
_getBytesPerTexel( glType, glFormat ) {
|
|
863
1072
|
|
|
864
1073
|
const { gl } = this;
|
|
865
1074
|
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
if (
|
|
1075
|
+
let bytesPerComponent = 0;
|
|
1076
|
+
|
|
1077
|
+
if ( glType === gl.UNSIGNED_BYTE ) bytesPerComponent = 1;
|
|
1078
|
+
|
|
1079
|
+
if ( glType === gl.UNSIGNED_SHORT_4_4_4_4 ||
|
|
1080
|
+
glType === gl.UNSIGNED_SHORT_5_5_5_1 ||
|
|
1081
|
+
glType === gl.UNSIGNED_SHORT_5_6_5 ||
|
|
1082
|
+
glType === gl.UNSIGNED_SHORT ||
|
|
1083
|
+
glType === gl.HALF_FLOAT ) bytesPerComponent = 2;
|
|
1084
|
+
|
|
1085
|
+
if ( glType === gl.UNSIGNED_INT ||
|
|
1086
|
+
glType === gl.FLOAT ) bytesPerComponent = 4;
|
|
1087
|
+
|
|
1088
|
+
if ( glFormat === gl.RGBA ) return bytesPerComponent * 4;
|
|
1089
|
+
if ( glFormat === gl.RGB ) return bytesPerComponent * 3;
|
|
1090
|
+
if ( glFormat === gl.ALPHA ) return bytesPerComponent;
|
|
869
1091
|
|
|
870
1092
|
}
|
|
871
1093
|
|