@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
|
@@ -32,25 +32,82 @@ const _compareToWebGPU = {
|
|
|
32
32
|
|
|
33
33
|
const _flipMap = [ 0, 1, 3, 2, 4, 5 ];
|
|
34
34
|
|
|
35
|
+
/**
|
|
36
|
+
* A WebGPU backend utility module for managing textures.
|
|
37
|
+
*
|
|
38
|
+
* @private
|
|
39
|
+
*/
|
|
35
40
|
class WebGPUTextureUtils {
|
|
36
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Constructs a new utility object.
|
|
44
|
+
*
|
|
45
|
+
* @param {WebGPUBackend} backend - The WebGPU backend.
|
|
46
|
+
*/
|
|
37
47
|
constructor( backend ) {
|
|
38
48
|
|
|
49
|
+
/**
|
|
50
|
+
* A reference to the WebGPU backend.
|
|
51
|
+
*
|
|
52
|
+
* @type {WebGPUBackend}
|
|
53
|
+
*/
|
|
39
54
|
this.backend = backend;
|
|
40
55
|
|
|
56
|
+
/**
|
|
57
|
+
* A reference to the pass utils.
|
|
58
|
+
*
|
|
59
|
+
* @type {?WebGPUTexturePassUtils}
|
|
60
|
+
* @default null
|
|
61
|
+
*/
|
|
41
62
|
this._passUtils = null;
|
|
42
63
|
|
|
64
|
+
/**
|
|
65
|
+
* A dictionary for managing default textures. The key
|
|
66
|
+
* is the texture format, the value the texture object.
|
|
67
|
+
*
|
|
68
|
+
* @type {Object<string,Texture>}
|
|
69
|
+
*/
|
|
43
70
|
this.defaultTexture = {};
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* A dictionary for managing default cube textures. The key
|
|
74
|
+
* is the texture format, the value the texture object.
|
|
75
|
+
*
|
|
76
|
+
* @type {Object<string,CubeTexture>}
|
|
77
|
+
*/
|
|
44
78
|
this.defaultCubeTexture = {};
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* A default video frame.
|
|
82
|
+
*
|
|
83
|
+
* @type {?VideoFrame}
|
|
84
|
+
* @default null
|
|
85
|
+
*/
|
|
45
86
|
this.defaultVideoFrame = null;
|
|
46
87
|
|
|
88
|
+
/**
|
|
89
|
+
* Represents the color attachment of the default framebuffer.
|
|
90
|
+
*
|
|
91
|
+
* @type {?GPUTexture}
|
|
92
|
+
* @default null
|
|
93
|
+
*/
|
|
47
94
|
this.colorBuffer = null;
|
|
48
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Represents the depth attachment of the default framebuffer.
|
|
98
|
+
*
|
|
99
|
+
* @type {DepthTexture}
|
|
100
|
+
*/
|
|
49
101
|
this.depthTexture = new DepthTexture();
|
|
50
102
|
this.depthTexture.name = 'depthBuffer';
|
|
51
103
|
|
|
52
104
|
}
|
|
53
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Creates a GPU sampler for the given texture.
|
|
108
|
+
*
|
|
109
|
+
* @param {Texture} texture - The texture to create the sampler for.
|
|
110
|
+
*/
|
|
54
111
|
createSampler( texture ) {
|
|
55
112
|
|
|
56
113
|
const backend = this.backend;
|
|
@@ -65,9 +122,17 @@ class WebGPUTextureUtils {
|
|
|
65
122
|
magFilter: this._convertFilterMode( texture.magFilter ),
|
|
66
123
|
minFilter: this._convertFilterMode( texture.minFilter ),
|
|
67
124
|
mipmapFilter: this._convertFilterMode( texture.minFilter ),
|
|
68
|
-
maxAnisotropy:
|
|
125
|
+
maxAnisotropy: 1
|
|
69
126
|
};
|
|
70
127
|
|
|
128
|
+
// anisotropy can only be used when all filter modes are set to linear.
|
|
129
|
+
|
|
130
|
+
if ( samplerDescriptorGPU.magFilter === GPUFilterMode.Linear && samplerDescriptorGPU.minFilter === GPUFilterMode.Linear && samplerDescriptorGPU.mipmapFilter === GPUFilterMode.Linear ) {
|
|
131
|
+
|
|
132
|
+
samplerDescriptorGPU.maxAnisotropy = texture.anisotropy;
|
|
133
|
+
|
|
134
|
+
}
|
|
135
|
+
|
|
71
136
|
if ( texture.isDepthTexture && texture.compareFunction !== null ) {
|
|
72
137
|
|
|
73
138
|
samplerDescriptorGPU.compare = _compareToWebGPU[ texture.compareFunction ];
|
|
@@ -78,6 +143,12 @@ class WebGPUTextureUtils {
|
|
|
78
143
|
|
|
79
144
|
}
|
|
80
145
|
|
|
146
|
+
/**
|
|
147
|
+
* Creates a default texture for the given texture that can be used
|
|
148
|
+
* as a placeholder until the actual texture is ready for usage.
|
|
149
|
+
*
|
|
150
|
+
* @param {Texture} texture - The texture to create a default texture for.
|
|
151
|
+
*/
|
|
81
152
|
createDefaultTexture( texture ) {
|
|
82
153
|
|
|
83
154
|
let textureGPU;
|
|
@@ -102,6 +173,12 @@ class WebGPUTextureUtils {
|
|
|
102
173
|
|
|
103
174
|
}
|
|
104
175
|
|
|
176
|
+
/**
|
|
177
|
+
* Defines a texture on the GPU for the given texture object.
|
|
178
|
+
*
|
|
179
|
+
* @param {Texture} texture - The texture.
|
|
180
|
+
* @param {Object} [options={}] - Optional configuration parameter.
|
|
181
|
+
*/
|
|
105
182
|
createTexture( texture, options = {} ) {
|
|
106
183
|
|
|
107
184
|
const backend = this.backend;
|
|
@@ -119,14 +196,26 @@ class WebGPUTextureUtils {
|
|
|
119
196
|
|
|
120
197
|
const { width, height, depth, levels } = options;
|
|
121
198
|
|
|
199
|
+
if ( texture.isFramebufferTexture ) {
|
|
200
|
+
|
|
201
|
+
if ( options.renderTarget ) {
|
|
202
|
+
|
|
203
|
+
options.format = this.backend.utils.getCurrentColorFormat( options.renderTarget );
|
|
204
|
+
|
|
205
|
+
} else {
|
|
206
|
+
|
|
207
|
+
options.format = this.backend.utils.getPreferredCanvasFormat();
|
|
208
|
+
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
}
|
|
212
|
+
|
|
122
213
|
const dimension = this._getDimension( texture );
|
|
123
214
|
const format = texture.internalFormat || options.format || getFormat( texture, backend.device );
|
|
124
215
|
|
|
125
|
-
|
|
216
|
+
textureData.format = format;
|
|
126
217
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const primarySampleCount = texture.isRenderTargetTexture && ! texture.isMultisampleRenderTargetTexture ? 1 : sampleCount;
|
|
218
|
+
const { samples, primarySamples, isMSAA } = backend.utils.getTextureSampleData( texture );
|
|
130
219
|
|
|
131
220
|
let usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC;
|
|
132
221
|
|
|
@@ -136,7 +225,7 @@ class WebGPUTextureUtils {
|
|
|
136
225
|
|
|
137
226
|
}
|
|
138
227
|
|
|
139
|
-
if ( texture.isCompressedTexture !== true ) {
|
|
228
|
+
if ( texture.isCompressedTexture !== true && texture.isCompressedArrayTexture !== true ) {
|
|
140
229
|
|
|
141
230
|
usage |= GPUTextureUsage.RENDER_ATTACHMENT;
|
|
142
231
|
|
|
@@ -150,7 +239,7 @@ class WebGPUTextureUtils {
|
|
|
150
239
|
depthOrArrayLayers: depth,
|
|
151
240
|
},
|
|
152
241
|
mipLevelCount: levels,
|
|
153
|
-
sampleCount:
|
|
242
|
+
sampleCount: primarySamples,
|
|
154
243
|
dimension: dimension,
|
|
155
244
|
format: format,
|
|
156
245
|
usage: usage
|
|
@@ -176,7 +265,8 @@ class WebGPUTextureUtils {
|
|
|
176
265
|
|
|
177
266
|
console.warn( 'WebGPURenderer: Texture format not supported.' );
|
|
178
267
|
|
|
179
|
-
|
|
268
|
+
this.createDefaultTexture( texture );
|
|
269
|
+
return;
|
|
180
270
|
|
|
181
271
|
}
|
|
182
272
|
|
|
@@ -184,12 +274,12 @@ class WebGPUTextureUtils {
|
|
|
184
274
|
|
|
185
275
|
}
|
|
186
276
|
|
|
187
|
-
if (
|
|
277
|
+
if ( isMSAA ) {
|
|
188
278
|
|
|
189
279
|
const msaaTextureDescriptorGPU = Object.assign( {}, textureDescriptorGPU );
|
|
190
280
|
|
|
191
281
|
msaaTextureDescriptorGPU.label = msaaTextureDescriptorGPU.label + '-msaa';
|
|
192
|
-
msaaTextureDescriptorGPU.sampleCount =
|
|
282
|
+
msaaTextureDescriptorGPU.sampleCount = samples;
|
|
193
283
|
|
|
194
284
|
textureData.msaaTexture = backend.device.createTexture( msaaTextureDescriptorGPU );
|
|
195
285
|
|
|
@@ -201,12 +291,17 @@ class WebGPUTextureUtils {
|
|
|
201
291
|
|
|
202
292
|
}
|
|
203
293
|
|
|
294
|
+
/**
|
|
295
|
+
* Destroys the GPU data for the given texture object.
|
|
296
|
+
*
|
|
297
|
+
* @param {Texture} texture - The texture.
|
|
298
|
+
*/
|
|
204
299
|
destroyTexture( texture ) {
|
|
205
300
|
|
|
206
301
|
const backend = this.backend;
|
|
207
302
|
const textureData = backend.get( texture );
|
|
208
303
|
|
|
209
|
-
textureData.texture.destroy();
|
|
304
|
+
if ( textureData.texture !== undefined ) textureData.texture.destroy();
|
|
210
305
|
|
|
211
306
|
if ( textureData.msaaTexture !== undefined ) textureData.msaaTexture.destroy();
|
|
212
307
|
|
|
@@ -214,6 +309,11 @@ class WebGPUTextureUtils {
|
|
|
214
309
|
|
|
215
310
|
}
|
|
216
311
|
|
|
312
|
+
/**
|
|
313
|
+
* Destroys the GPU sampler for the given texture.
|
|
314
|
+
*
|
|
315
|
+
* @param {Texture} texture - The texture to destroy the sampler for.
|
|
316
|
+
*/
|
|
217
317
|
destroySampler( texture ) {
|
|
218
318
|
|
|
219
319
|
const backend = this.backend;
|
|
@@ -223,6 +323,11 @@ class WebGPUTextureUtils {
|
|
|
223
323
|
|
|
224
324
|
}
|
|
225
325
|
|
|
326
|
+
/**
|
|
327
|
+
* Generates mipmaps for the given texture.
|
|
328
|
+
*
|
|
329
|
+
* @param {Texture} texture - The texture.
|
|
330
|
+
*/
|
|
226
331
|
generateMipmaps( texture ) {
|
|
227
332
|
|
|
228
333
|
const textureData = this.backend.get( texture );
|
|
@@ -237,12 +342,24 @@ class WebGPUTextureUtils {
|
|
|
237
342
|
|
|
238
343
|
} else {
|
|
239
344
|
|
|
240
|
-
|
|
345
|
+
const depth = texture.image.depth || 1;
|
|
346
|
+
|
|
347
|
+
for ( let i = 0; i < depth; i ++ ) {
|
|
348
|
+
|
|
349
|
+
this._generateMipmaps( textureData.texture, textureData.textureDescriptorGPU, i );
|
|
350
|
+
|
|
351
|
+
}
|
|
241
352
|
|
|
242
353
|
}
|
|
243
354
|
|
|
244
355
|
}
|
|
245
356
|
|
|
357
|
+
/**
|
|
358
|
+
* Returns the color buffer representing the color
|
|
359
|
+
* attachment of the default framebuffer.
|
|
360
|
+
*
|
|
361
|
+
* @return {GPUTexture} The color buffer.
|
|
362
|
+
*/
|
|
246
363
|
getColorBuffer() {
|
|
247
364
|
|
|
248
365
|
if ( this.colorBuffer ) this.colorBuffer.destroy();
|
|
@@ -258,7 +375,7 @@ class WebGPUTextureUtils {
|
|
|
258
375
|
depthOrArrayLayers: 1
|
|
259
376
|
},
|
|
260
377
|
sampleCount: backend.utils.getSampleCount( backend.renderer.samples ),
|
|
261
|
-
format:
|
|
378
|
+
format: backend.utils.getPreferredCanvasFormat(),
|
|
262
379
|
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC
|
|
263
380
|
} );
|
|
264
381
|
|
|
@@ -266,6 +383,14 @@ class WebGPUTextureUtils {
|
|
|
266
383
|
|
|
267
384
|
}
|
|
268
385
|
|
|
386
|
+
/**
|
|
387
|
+
* Returns the depth buffer representing the depth
|
|
388
|
+
* attachment of the default framebuffer.
|
|
389
|
+
*
|
|
390
|
+
* @param {boolean} [depth=true] - Whether depth is enabled or not.
|
|
391
|
+
* @param {boolean} [stencil=false] - Whether stencil is enabled or not.
|
|
392
|
+
* @return {GPUTexture} The depth buffer.
|
|
393
|
+
*/
|
|
269
394
|
getDepthBuffer( depth = true, stencil = false ) {
|
|
270
395
|
|
|
271
396
|
const backend = this.backend;
|
|
@@ -306,12 +431,18 @@ class WebGPUTextureUtils {
|
|
|
306
431
|
depthTexture.image.width = width;
|
|
307
432
|
depthTexture.image.height = height;
|
|
308
433
|
|
|
309
|
-
this.createTexture( depthTexture, {
|
|
434
|
+
this.createTexture( depthTexture, { width, height } );
|
|
310
435
|
|
|
311
436
|
return backend.get( depthTexture ).texture;
|
|
312
437
|
|
|
313
438
|
}
|
|
314
439
|
|
|
440
|
+
/**
|
|
441
|
+
* Uploads the updated texture data to the GPU.
|
|
442
|
+
*
|
|
443
|
+
* @param {Texture} texture - The texture.
|
|
444
|
+
* @param {Object} [options={}] - Optional configuration parameter.
|
|
445
|
+
*/
|
|
315
446
|
updateTexture( texture, options ) {
|
|
316
447
|
|
|
317
448
|
const textureData = this.backend.get( texture );
|
|
@@ -335,7 +466,7 @@ class WebGPUTextureUtils {
|
|
|
335
466
|
|
|
336
467
|
}
|
|
337
468
|
|
|
338
|
-
} else if ( texture.isCompressedTexture ) {
|
|
469
|
+
} else if ( texture.isCompressedTexture || texture.isCompressedArrayTexture ) {
|
|
339
470
|
|
|
340
471
|
this._copyCompressedBufferToTexture( texture.mipmaps, textureData.texture, textureDescriptorGPU );
|
|
341
472
|
|
|
@@ -363,7 +494,19 @@ class WebGPUTextureUtils {
|
|
|
363
494
|
|
|
364
495
|
}
|
|
365
496
|
|
|
366
|
-
|
|
497
|
+
/**
|
|
498
|
+
* Returns texture data as a typed array.
|
|
499
|
+
*
|
|
500
|
+
* @async
|
|
501
|
+
* @param {Texture} texture - The texture to copy.
|
|
502
|
+
* @param {number} x - The x coordinate of the copy origin.
|
|
503
|
+
* @param {number} y - The y coordinate of the copy origin.
|
|
504
|
+
* @param {number} width - The width of the copy.
|
|
505
|
+
* @param {number} height - The height of the copy.
|
|
506
|
+
* @param {number} faceIndex - The face index.
|
|
507
|
+
* @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.
|
|
508
|
+
*/
|
|
509
|
+
async copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {
|
|
367
510
|
|
|
368
511
|
const device = this.backend.device;
|
|
369
512
|
|
|
@@ -387,7 +530,7 @@ class WebGPUTextureUtils {
|
|
|
387
530
|
encoder.copyTextureToBuffer(
|
|
388
531
|
{
|
|
389
532
|
texture: textureGPU,
|
|
390
|
-
origin: { x, y },
|
|
533
|
+
origin: { x, y, z: faceIndex },
|
|
391
534
|
},
|
|
392
535
|
{
|
|
393
536
|
buffer: readBuffer,
|
|
@@ -412,6 +555,13 @@ class WebGPUTextureUtils {
|
|
|
412
555
|
|
|
413
556
|
}
|
|
414
557
|
|
|
558
|
+
/**
|
|
559
|
+
* Returns `true` if the given texture is an environment map.
|
|
560
|
+
*
|
|
561
|
+
* @private
|
|
562
|
+
* @param {Texture} texture - The texture.
|
|
563
|
+
* @return {boolean} Whether the given texture is an environment map or not.
|
|
564
|
+
*/
|
|
415
565
|
_isEnvironmentTexture( texture ) {
|
|
416
566
|
|
|
417
567
|
const mapping = texture.mapping;
|
|
@@ -420,6 +570,13 @@ class WebGPUTextureUtils {
|
|
|
420
570
|
|
|
421
571
|
}
|
|
422
572
|
|
|
573
|
+
/**
|
|
574
|
+
* Returns the default GPU texture for the given format.
|
|
575
|
+
*
|
|
576
|
+
* @private
|
|
577
|
+
* @param {string} format - The GPU format.
|
|
578
|
+
* @return {GPUTexture} The GPU texture.
|
|
579
|
+
*/
|
|
423
580
|
_getDefaultTextureGPU( format ) {
|
|
424
581
|
|
|
425
582
|
let defaultTexture = this.defaultTexture[ format ];
|
|
@@ -440,6 +597,13 @@ class WebGPUTextureUtils {
|
|
|
440
597
|
|
|
441
598
|
}
|
|
442
599
|
|
|
600
|
+
/**
|
|
601
|
+
* Returns the default GPU cube texture for the given format.
|
|
602
|
+
*
|
|
603
|
+
* @private
|
|
604
|
+
* @param {string} format - The GPU format.
|
|
605
|
+
* @return {GPUTexture} The GPU texture.
|
|
606
|
+
*/
|
|
443
607
|
_getDefaultCubeTextureGPU( format ) {
|
|
444
608
|
|
|
445
609
|
let defaultCubeTexture = this.defaultTexture[ format ];
|
|
@@ -460,6 +624,12 @@ class WebGPUTextureUtils {
|
|
|
460
624
|
|
|
461
625
|
}
|
|
462
626
|
|
|
627
|
+
/**
|
|
628
|
+
* Returns the default video frame used as default data in context of video textures.
|
|
629
|
+
*
|
|
630
|
+
* @private
|
|
631
|
+
* @return {VideoFrame} The video frame.
|
|
632
|
+
*/
|
|
463
633
|
_getDefaultVideoFrame() {
|
|
464
634
|
|
|
465
635
|
let defaultVideoFrame = this.defaultVideoFrame;
|
|
@@ -481,6 +651,15 @@ class WebGPUTextureUtils {
|
|
|
481
651
|
|
|
482
652
|
}
|
|
483
653
|
|
|
654
|
+
/**
|
|
655
|
+
* Uploads cube texture image data to the GPU memory.
|
|
656
|
+
*
|
|
657
|
+
* @private
|
|
658
|
+
* @param {Array} images - The cube image data.
|
|
659
|
+
* @param {GPUTexture} textureGPU - The GPU texture.
|
|
660
|
+
* @param {Object} textureDescriptorGPU - The GPU texture descriptor.
|
|
661
|
+
* @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.
|
|
662
|
+
*/
|
|
484
663
|
_copyCubeMapToTexture( images, textureGPU, textureDescriptorGPU, flipY ) {
|
|
485
664
|
|
|
486
665
|
for ( let i = 0; i < 6; i ++ ) {
|
|
@@ -503,13 +682,24 @@ class WebGPUTextureUtils {
|
|
|
503
682
|
|
|
504
683
|
}
|
|
505
684
|
|
|
685
|
+
/**
|
|
686
|
+
* Uploads texture image data to the GPU memory.
|
|
687
|
+
*
|
|
688
|
+
* @private
|
|
689
|
+
* @param {HTMLImageElement|ImageBitmap|HTMLCanvasElement} image - The image data.
|
|
690
|
+
* @param {GPUTexture} textureGPU - The GPU texture.
|
|
691
|
+
* @param {Object} textureDescriptorGPU - The GPU texture descriptor.
|
|
692
|
+
* @param {number} originDepth - The origin depth.
|
|
693
|
+
* @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.
|
|
694
|
+
*/
|
|
506
695
|
_copyImageToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY ) {
|
|
507
696
|
|
|
508
697
|
const device = this.backend.device;
|
|
509
698
|
|
|
510
699
|
device.queue.copyExternalImageToTexture(
|
|
511
700
|
{
|
|
512
|
-
source: image
|
|
701
|
+
source: image,
|
|
702
|
+
flipY: flipY
|
|
513
703
|
}, {
|
|
514
704
|
texture: textureGPU,
|
|
515
705
|
mipLevel: 0,
|
|
@@ -521,14 +711,14 @@ class WebGPUTextureUtils {
|
|
|
521
711
|
}
|
|
522
712
|
);
|
|
523
713
|
|
|
524
|
-
if ( flipY === true ) {
|
|
525
|
-
|
|
526
|
-
this._flipY( textureGPU, textureDescriptorGPU, originDepth );
|
|
527
|
-
|
|
528
|
-
}
|
|
529
|
-
|
|
530
714
|
}
|
|
531
715
|
|
|
716
|
+
/**
|
|
717
|
+
* Returns the pass utils singleton.
|
|
718
|
+
*
|
|
719
|
+
* @private
|
|
720
|
+
* @return {WebGPUTexturePassUtils} The utils instance.
|
|
721
|
+
*/
|
|
532
722
|
_getPassUtils() {
|
|
533
723
|
|
|
534
724
|
let passUtils = this._passUtils;
|
|
@@ -543,18 +733,45 @@ class WebGPUTextureUtils {
|
|
|
543
733
|
|
|
544
734
|
}
|
|
545
735
|
|
|
736
|
+
/**
|
|
737
|
+
* Generates mipmaps for the given GPU texture.
|
|
738
|
+
*
|
|
739
|
+
* @private
|
|
740
|
+
* @param {GPUTexture} textureGPU - The GPU texture object.
|
|
741
|
+
* @param {Object} textureDescriptorGPU - The texture descriptor.
|
|
742
|
+
* @param {number} [baseArrayLayer=0] - The index of the first array layer accessible to the texture view.
|
|
743
|
+
*/
|
|
546
744
|
_generateMipmaps( textureGPU, textureDescriptorGPU, baseArrayLayer = 0 ) {
|
|
547
745
|
|
|
548
746
|
this._getPassUtils().generateMipmaps( textureGPU, textureDescriptorGPU, baseArrayLayer );
|
|
549
747
|
|
|
550
748
|
}
|
|
551
749
|
|
|
750
|
+
/**
|
|
751
|
+
* Flip the contents of the given GPU texture along its vertical axis.
|
|
752
|
+
*
|
|
753
|
+
* @private
|
|
754
|
+
* @param {GPUTexture} textureGPU - The GPU texture object.
|
|
755
|
+
* @param {Object} textureDescriptorGPU - The texture descriptor.
|
|
756
|
+
* @param {number} [originDepth=0] - The origin depth.
|
|
757
|
+
*/
|
|
552
758
|
_flipY( textureGPU, textureDescriptorGPU, originDepth = 0 ) {
|
|
553
759
|
|
|
554
760
|
this._getPassUtils().flipY( textureGPU, textureDescriptorGPU, originDepth );
|
|
555
761
|
|
|
556
762
|
}
|
|
557
763
|
|
|
764
|
+
/**
|
|
765
|
+
* Uploads texture buffer data to the GPU memory.
|
|
766
|
+
*
|
|
767
|
+
* @private
|
|
768
|
+
* @param {Object} image - An object defining the image buffer data.
|
|
769
|
+
* @param {GPUTexture} textureGPU - The GPU texture.
|
|
770
|
+
* @param {Object} textureDescriptorGPU - The GPU texture descriptor.
|
|
771
|
+
* @param {number} originDepth - The origin depth.
|
|
772
|
+
* @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.
|
|
773
|
+
* @param {number} [depth=0] - TODO.
|
|
774
|
+
*/
|
|
558
775
|
_copyBufferToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, depth = 0 ) {
|
|
559
776
|
|
|
560
777
|
// @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()
|
|
@@ -592,6 +809,14 @@ class WebGPUTextureUtils {
|
|
|
592
809
|
|
|
593
810
|
}
|
|
594
811
|
|
|
812
|
+
/**
|
|
813
|
+
* Uploads compressed texture data to the GPU memory.
|
|
814
|
+
*
|
|
815
|
+
* @private
|
|
816
|
+
* @param {Array<Object>} mipmaps - An array with mipmap data.
|
|
817
|
+
* @param {GPUTexture} textureGPU - The GPU texture.
|
|
818
|
+
* @param {Object} textureDescriptorGPU - The GPU texture descriptor.
|
|
819
|
+
*/
|
|
595
820
|
_copyCompressedBufferToTexture( mipmaps, textureGPU, textureDescriptorGPU ) {
|
|
596
821
|
|
|
597
822
|
// @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()
|
|
@@ -599,6 +824,7 @@ class WebGPUTextureUtils {
|
|
|
599
824
|
const device = this.backend.device;
|
|
600
825
|
|
|
601
826
|
const blockData = this._getBlockData( textureDescriptorGPU.format );
|
|
827
|
+
const isTextureArray = textureDescriptorGPU.size.depthOrArrayLayers > 1;
|
|
602
828
|
|
|
603
829
|
for ( let i = 0; i < mipmaps.length; i ++ ) {
|
|
604
830
|
|
|
@@ -606,34 +832,48 @@ class WebGPUTextureUtils {
|
|
|
606
832
|
|
|
607
833
|
const width = mipmap.width;
|
|
608
834
|
const height = mipmap.height;
|
|
835
|
+
const depth = isTextureArray ? textureDescriptorGPU.size.depthOrArrayLayers : 1;
|
|
609
836
|
|
|
610
837
|
const bytesPerRow = Math.ceil( width / blockData.width ) * blockData.byteLength;
|
|
838
|
+
const bytesPerImage = bytesPerRow * Math.ceil( height / blockData.height );
|
|
839
|
+
|
|
840
|
+
for ( let j = 0; j < depth; j ++ ) {
|
|
841
|
+
|
|
842
|
+
device.queue.writeTexture(
|
|
843
|
+
{
|
|
844
|
+
texture: textureGPU,
|
|
845
|
+
mipLevel: i,
|
|
846
|
+
origin: { x: 0, y: 0, z: j }
|
|
847
|
+
},
|
|
848
|
+
mipmap.data,
|
|
849
|
+
{
|
|
850
|
+
offset: j * bytesPerImage,
|
|
851
|
+
bytesPerRow,
|
|
852
|
+
rowsPerImage: Math.ceil( height / blockData.height )
|
|
853
|
+
},
|
|
854
|
+
{
|
|
855
|
+
width: Math.ceil( width / blockData.width ) * blockData.width,
|
|
856
|
+
height: Math.ceil( height / blockData.height ) * blockData.height,
|
|
857
|
+
depthOrArrayLayers: 1
|
|
858
|
+
}
|
|
859
|
+
);
|
|
611
860
|
|
|
612
|
-
|
|
613
|
-
{
|
|
614
|
-
texture: textureGPU,
|
|
615
|
-
mipLevel: i
|
|
616
|
-
},
|
|
617
|
-
mipmap.data,
|
|
618
|
-
{
|
|
619
|
-
offset: 0,
|
|
620
|
-
bytesPerRow
|
|
621
|
-
},
|
|
622
|
-
{
|
|
623
|
-
width: Math.ceil( width / blockData.width ) * blockData.width,
|
|
624
|
-
height: Math.ceil( height / blockData.width ) * blockData.width,
|
|
625
|
-
depthOrArrayLayers: 1
|
|
626
|
-
}
|
|
627
|
-
);
|
|
861
|
+
}
|
|
628
862
|
|
|
629
863
|
}
|
|
630
864
|
|
|
631
865
|
}
|
|
632
866
|
|
|
867
|
+
/**
|
|
868
|
+
* This method is only relevant for compressed texture formats. It returns a block
|
|
869
|
+
* data descriptor for the given GPU compressed texture format.
|
|
870
|
+
*
|
|
871
|
+
* @private
|
|
872
|
+
* @param {string} format - The GPU compressed texture format.
|
|
873
|
+
* @return {Object} The block data descriptor.
|
|
874
|
+
*/
|
|
633
875
|
_getBlockData( format ) {
|
|
634
876
|
|
|
635
|
-
// this method is only relevant for compressed texture formats
|
|
636
|
-
|
|
637
877
|
if ( format === GPUTextureFormat.BC1RGBAUnorm || format === GPUTextureFormat.BC1RGBAUnormSRGB ) return { byteLength: 8, width: 4, height: 4 }; // DXT1
|
|
638
878
|
if ( format === GPUTextureFormat.BC2RGBAUnorm || format === GPUTextureFormat.BC2RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // DXT3
|
|
639
879
|
if ( format === GPUTextureFormat.BC3RGBAUnorm || format === GPUTextureFormat.BC3RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // DXT5
|
|
@@ -667,6 +907,13 @@ class WebGPUTextureUtils {
|
|
|
667
907
|
|
|
668
908
|
}
|
|
669
909
|
|
|
910
|
+
/**
|
|
911
|
+
* Converts the three.js uv wrapping constants to GPU address mode constants.
|
|
912
|
+
*
|
|
913
|
+
* @private
|
|
914
|
+
* @param {number} value - The three.js constant defining a uv wrapping mode.
|
|
915
|
+
* @return {string} The GPU address mode.
|
|
916
|
+
*/
|
|
670
917
|
_convertAddressMode( value ) {
|
|
671
918
|
|
|
672
919
|
let addressMode = GPUAddressMode.ClampToEdge;
|
|
@@ -685,6 +932,13 @@ class WebGPUTextureUtils {
|
|
|
685
932
|
|
|
686
933
|
}
|
|
687
934
|
|
|
935
|
+
/**
|
|
936
|
+
* Converts the three.js filter constants to GPU filter constants.
|
|
937
|
+
*
|
|
938
|
+
* @private
|
|
939
|
+
* @param {number} value - The three.js constant defining a filter mode.
|
|
940
|
+
* @return {string} The GPU filter mode.
|
|
941
|
+
*/
|
|
688
942
|
_convertFilterMode( value ) {
|
|
689
943
|
|
|
690
944
|
let filterMode = GPUFilterMode.Linear;
|
|
@@ -699,6 +953,13 @@ class WebGPUTextureUtils {
|
|
|
699
953
|
|
|
700
954
|
}
|
|
701
955
|
|
|
956
|
+
/**
|
|
957
|
+
* Returns the bytes-per-texel value for the given GPU texture format.
|
|
958
|
+
*
|
|
959
|
+
* @private
|
|
960
|
+
* @param {string} format - The GPU texture format.
|
|
961
|
+
* @return {number} The bytes-per-texel.
|
|
962
|
+
*/
|
|
702
963
|
_getBytesPerTexel( format ) {
|
|
703
964
|
|
|
704
965
|
// 8-bit formats
|
|
@@ -755,6 +1016,13 @@ class WebGPUTextureUtils {
|
|
|
755
1016
|
|
|
756
1017
|
}
|
|
757
1018
|
|
|
1019
|
+
/**
|
|
1020
|
+
* Returns the corresponding typed array type for the given GPU texture format.
|
|
1021
|
+
*
|
|
1022
|
+
* @private
|
|
1023
|
+
* @param {string} format - The GPU texture format.
|
|
1024
|
+
* @return {TypedArray.constructor} The typed array type.
|
|
1025
|
+
*/
|
|
758
1026
|
_getTypedArrayType( format ) {
|
|
759
1027
|
|
|
760
1028
|
if ( format === GPUTextureFormat.R8Uint ) return Uint8Array;
|
|
@@ -777,9 +1045,9 @@ class WebGPUTextureUtils {
|
|
|
777
1045
|
if ( format === GPUTextureFormat.RG16Sint ) return Int16Array;
|
|
778
1046
|
if ( format === GPUTextureFormat.RGBA16Uint ) return Uint16Array;
|
|
779
1047
|
if ( format === GPUTextureFormat.RGBA16Sint ) return Int16Array;
|
|
780
|
-
if ( format === GPUTextureFormat.R16Float ) return
|
|
781
|
-
if ( format === GPUTextureFormat.RG16Float ) return
|
|
782
|
-
if ( format === GPUTextureFormat.RGBA16Float ) return
|
|
1048
|
+
if ( format === GPUTextureFormat.R16Float ) return Uint16Array;
|
|
1049
|
+
if ( format === GPUTextureFormat.RG16Float ) return Uint16Array;
|
|
1050
|
+
if ( format === GPUTextureFormat.RGBA16Float ) return Uint16Array;
|
|
783
1051
|
|
|
784
1052
|
|
|
785
1053
|
if ( format === GPUTextureFormat.R32Uint ) return Uint32Array;
|
|
@@ -805,6 +1073,13 @@ class WebGPUTextureUtils {
|
|
|
805
1073
|
|
|
806
1074
|
}
|
|
807
1075
|
|
|
1076
|
+
/**
|
|
1077
|
+
* Returns the GPU dimensions for the given texture.
|
|
1078
|
+
*
|
|
1079
|
+
* @private
|
|
1080
|
+
* @param {Texture} texture - The texture.
|
|
1081
|
+
* @return {string} The GPU dimension.
|
|
1082
|
+
*/
|
|
808
1083
|
_getDimension( texture ) {
|
|
809
1084
|
|
|
810
1085
|
let dimension;
|
|
@@ -825,6 +1100,14 @@ class WebGPUTextureUtils {
|
|
|
825
1100
|
|
|
826
1101
|
}
|
|
827
1102
|
|
|
1103
|
+
/**
|
|
1104
|
+
* Returns the GPU format for the given texture.
|
|
1105
|
+
*
|
|
1106
|
+
* @param {Texture} texture - The texture.
|
|
1107
|
+
* @param {?GPUDevice} [device=null] - The GPU device which is used for feature detection.
|
|
1108
|
+
* It is not necessary to apply the device for most formats.
|
|
1109
|
+
* @return {string} The GPU format.
|
|
1110
|
+
*/
|
|
828
1111
|
export function getFormat( texture, device = null ) {
|
|
829
1112
|
|
|
830
1113
|
const format = texture.format;
|
|
@@ -833,11 +1116,7 @@ export function getFormat( texture, device = null ) {
|
|
|
833
1116
|
|
|
834
1117
|
let formatGPU;
|
|
835
1118
|
|
|
836
|
-
if ( texture.
|
|
837
|
-
|
|
838
|
-
formatGPU = GPUTextureFormat.BGRA8Unorm;
|
|
839
|
-
|
|
840
|
-
} else if ( texture.isCompressedTexture === true ) {
|
|
1119
|
+
if ( texture.isCompressedTexture === true || texture.isCompressedArrayTexture === true ) {
|
|
841
1120
|
|
|
842
1121
|
switch ( format ) {
|
|
843
1122
|
|
|
@@ -917,6 +1196,10 @@ export function getFormat( texture, device = null ) {
|
|
|
917
1196
|
formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC12x12UnormSRGB : GPUTextureFormat.ASTC12x12Unorm;
|
|
918
1197
|
break;
|
|
919
1198
|
|
|
1199
|
+
case RGBAFormat:
|
|
1200
|
+
formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.RGBA8UnormSRGB : GPUTextureFormat.RGBA8Unorm;
|
|
1201
|
+
break;
|
|
1202
|
+
|
|
920
1203
|
default:
|
|
921
1204
|
console.error( 'WebGPURenderer: Unsupported texture format.', format );
|
|
922
1205
|
|