@plastic-software/three 0.174.0 → 0.175.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/build/three.cjs +10655 -1446
- package/build/three.core.js +9626 -1094
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +834 -157
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +4 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2658 -1697
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2654 -1709
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +93 -39
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +171 -48
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +71 -29
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +41 -3
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +35 -0
- package/examples/jsm/loaders/DDSLoader.js +24 -0
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +42 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +218 -5
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +86 -18
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +38 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +81 -61
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +79 -2
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +108 -72
- package/examples/jsm/misc/VolumeSlice.js +88 -45
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +70 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +131 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +266 -133
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +1 -1
- package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -1
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
- package/examples/jsm/tsl/math/Bayer.js +14 -1
- package/examples/jsm/tsl/utils/Raymarching.js +4 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +1 -1
- package/src/Three.TSL.js +3 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +168 -18
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/AudioAnalyser.js +1 -1
- package/src/audio/AudioListener.js +2 -2
- package/src/audio/PositionalAudio.js +5 -5
- package/src/constants.js +1429 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +23 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +166 -7
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +16 -1
- package/src/extras/Earcut.js +3 -781
- package/src/extras/ImageUtils.js +3 -2
- package/src/extras/PMREMGenerator.js +22 -17
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +1 -1
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/ConeGeometry.js +2 -2
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/geometries/ExtrudeGeometry.js +71 -39
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/lights/LightShadow.js +1 -1
- package/src/lights/webgpu/IESSpotLight.js +1 -1
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +4 -6
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +53 -0
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +6 -2
- package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
- package/src/loaders/nodes/NodeObjectLoader.js +3 -3
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +1 -1
- package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +7 -3
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
- package/src/math/Color.js +1 -1
- package/src/math/MathUtils.js +223 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/accessors/BatchNode.js +8 -8
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +1 -1
- package/src/nodes/accessors/InstanceNode.js +5 -5
- package/src/nodes/accessors/InstancedMeshNode.js +1 -1
- package/src/nodes/accessors/MorphNode.js +27 -23
- package/src/nodes/accessors/Normal.js +1 -1
- package/src/nodes/accessors/Object3DNode.js +12 -12
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +46 -37
- package/src/nodes/accessors/StorageBufferNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +25 -5
- package/src/nodes/accessors/TextureSizeNode.js +1 -1
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/CodeNode.js +4 -4
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +23 -3
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/code/ScriptableValueNode.js +2 -2
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/CacheNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/Node.js +14 -2
- package/src/nodes/core/NodeBuilder.js +86 -14
- package/src/nodes/core/StackNode.js +5 -5
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/VarNode.js +2 -8
- package/src/nodes/core/VaryingNode.js +3 -3
- package/src/nodes/display/BlendModes.js +4 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PosterizeNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +3 -3
- package/src/nodes/display/ViewportDepthNode.js +2 -2
- package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
- package/src/nodes/display/ViewportTextureNode.js +4 -4
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +30 -2
- package/src/nodes/lighting/AnalyticLightNode.js +9 -1
- package/src/nodes/lighting/LightsNode.js +3 -3
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +20 -3
- package/src/nodes/math/MathNode.js +83 -78
- package/src/nodes/math/OperatorNode.js +171 -82
- package/src/nodes/pmrem/PMREMNode.js +4 -4
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +115 -12
- package/src/nodes/utils/ArrayElementNode.js +3 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/EquirectUVNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +27 -2
- package/src/nodes/utils/LoopNode.js +58 -28
- package/src/nodes/utils/MaxMipLevelNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -2
- package/src/nodes/utils/RemapNode.js +6 -6
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/src/objects/BatchedMesh.js +4 -4
- package/src/objects/InstancedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Skeleton.js +1 -1
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +617 -79
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Attributes.js +2 -2
- package/src/renderers/common/Backend.js +12 -3
- package/src/renderers/common/Background.js +1 -0
- package/src/renderers/common/Color4.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/PostProcessing.js +2 -0
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderObject.js +1 -1
- package/src/renderers/common/RenderObjects.js +2 -2
- package/src/renderers/common/Renderer.js +52 -31
- package/src/renderers/common/XRManager.js +333 -10
- package/src/renderers/common/extras/PMREMGenerator.js +6 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/shaders/UniformsLib.js +1 -4
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLState.js +9 -9
- package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +128 -87
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
- package/src/renderers/webgpu/WebGPURenderer.js +17 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +173 -1
- package/src/scenes/Scene.js +2 -1
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +5 -5
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -79,7 +79,7 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
79
79
|
* An array that holds objects defining the varying and attribute data in
|
|
80
80
|
* context of Transform Feedback.
|
|
81
81
|
*
|
|
82
|
-
* @type {Object<string,
|
|
82
|
+
* @type {Array<Object<string,AttributeNode|string>>}
|
|
83
83
|
*/
|
|
84
84
|
this.transforms = [];
|
|
85
85
|
|
|
@@ -97,14 +97,6 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
97
97
|
*/
|
|
98
98
|
this.builtins = { vertex: [], fragment: [], compute: [] };
|
|
99
99
|
|
|
100
|
-
/**
|
|
101
|
-
* Whether comparison in shader code are generated with methods or not.
|
|
102
|
-
*
|
|
103
|
-
* @type {boolean}
|
|
104
|
-
* @default true
|
|
105
|
-
*/
|
|
106
|
-
this.useComparisonMethod = true;
|
|
107
|
-
|
|
108
100
|
}
|
|
109
101
|
|
|
110
102
|
/**
|
|
@@ -775,7 +767,7 @@ ${ flowData.code }
|
|
|
775
767
|
|
|
776
768
|
const flat = type.includes( 'int' ) || type.includes( 'uv' ) || type.includes( 'iv' ) ? 'flat ' : '';
|
|
777
769
|
|
|
778
|
-
snippet += `${flat}
|
|
770
|
+
snippet += `${flat}out ${type} ${varying.name};\n`;
|
|
779
771
|
|
|
780
772
|
} else {
|
|
781
773
|
|
|
@@ -1073,10 +1065,9 @@ ${ flowData.code }
|
|
|
1073
1065
|
for ( let i = 0; i < transforms.length; i ++ ) {
|
|
1074
1066
|
|
|
1075
1067
|
const transform = transforms[ i ];
|
|
1076
|
-
|
|
1077
1068
|
const attributeName = this.getPropertyName( transform.attributeNode );
|
|
1078
1069
|
|
|
1079
|
-
snippet += `${ transform.varyingName } = ${ attributeName };\n\t`;
|
|
1070
|
+
if ( attributeName ) snippet += `${ transform.varyingName } = ${ attributeName };\n\t`;
|
|
1080
1071
|
|
|
1081
1072
|
}
|
|
1082
1073
|
|
|
@@ -697,33 +697,57 @@ class WebGLTextureUtils {
|
|
|
697
697
|
*
|
|
698
698
|
* @param {Texture} srcTexture - The source texture.
|
|
699
699
|
* @param {Texture} dstTexture - The destination texture.
|
|
700
|
-
* @param {?
|
|
700
|
+
* @param {?(Box3|Box2)} [srcRegion=null] - The region of the source texture to copy.
|
|
701
701
|
* @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.
|
|
702
|
-
* @param {number} [
|
|
702
|
+
* @param {number} [srcLevel=0] - The source mip level to copy from.
|
|
703
|
+
* @param {number} [dstLevel=0] - The destination mip level to copy to.
|
|
703
704
|
*/
|
|
704
|
-
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null,
|
|
705
|
+
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {
|
|
705
706
|
|
|
706
707
|
const { gl, backend } = this;
|
|
707
708
|
const { state } = this.backend;
|
|
708
709
|
|
|
709
710
|
const { textureGPU: dstTextureGPU, glTextureType, glType, glFormat } = backend.get( dstTexture );
|
|
710
711
|
|
|
711
|
-
|
|
712
|
-
|
|
712
|
+
state.bindTexture( glTextureType, dstTextureGPU );
|
|
713
|
+
|
|
714
|
+
// gather the necessary dimensions to copy
|
|
715
|
+
let width, height, depth, minX, minY, minZ;
|
|
716
|
+
let dstX, dstY, dstZ;
|
|
717
|
+
const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ dstLevel ] : srcTexture.image;
|
|
713
718
|
|
|
714
719
|
if ( srcRegion !== null ) {
|
|
715
720
|
|
|
716
721
|
width = srcRegion.max.x - srcRegion.min.x;
|
|
717
722
|
height = srcRegion.max.y - srcRegion.min.y;
|
|
723
|
+
depth = srcRegion.isBox3 ? srcRegion.max.z - srcRegion.min.z : 1;
|
|
718
724
|
minX = srcRegion.min.x;
|
|
719
725
|
minY = srcRegion.min.y;
|
|
726
|
+
minZ = srcRegion.isBox3 ? srcRegion.min.z : 0;
|
|
720
727
|
|
|
721
728
|
} else {
|
|
722
729
|
|
|
723
|
-
|
|
724
|
-
|
|
730
|
+
const levelScale = Math.pow( 2, - srcLevel );
|
|
731
|
+
width = Math.floor( image.width * levelScale );
|
|
732
|
+
height = Math.floor( image.height * levelScale );
|
|
733
|
+
|
|
734
|
+
if ( srcTexture.isDataArrayTexture ) {
|
|
735
|
+
|
|
736
|
+
depth = image.depth;
|
|
737
|
+
|
|
738
|
+
} else if ( srcTexture.isData3DTexture ) {
|
|
739
|
+
|
|
740
|
+
depth = Math.floor( image.depth * levelScale );
|
|
741
|
+
|
|
742
|
+
} else {
|
|
743
|
+
|
|
744
|
+
depth = 1;
|
|
745
|
+
|
|
746
|
+
}
|
|
747
|
+
|
|
725
748
|
minX = 0;
|
|
726
749
|
minY = 0;
|
|
750
|
+
minZ = 0;
|
|
727
751
|
|
|
728
752
|
}
|
|
729
753
|
|
|
@@ -731,36 +755,36 @@ class WebGLTextureUtils {
|
|
|
731
755
|
|
|
732
756
|
dstX = dstPosition.x;
|
|
733
757
|
dstY = dstPosition.y;
|
|
758
|
+
dstZ = dstPosition.z;
|
|
734
759
|
|
|
735
760
|
} else {
|
|
736
761
|
|
|
737
762
|
dstX = 0;
|
|
738
763
|
dstY = 0;
|
|
764
|
+
dstZ = 0;
|
|
739
765
|
|
|
740
766
|
}
|
|
741
767
|
|
|
742
|
-
state.bindTexture( glTextureType, dstTextureGPU );
|
|
743
768
|
|
|
744
|
-
// As another texture upload may have changed pixelStorei
|
|
745
|
-
// parameters, make sure they are correct for the dstTexture
|
|
746
|
-
gl.pixelStorei( gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
|
|
747
769
|
gl.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
|
|
748
770
|
gl.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
|
|
749
771
|
gl.pixelStorei( gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
|
|
750
772
|
|
|
773
|
+
// used for copying data from cpu
|
|
751
774
|
const currentUnpackRowLen = gl.getParameter( gl.UNPACK_ROW_LENGTH );
|
|
752
775
|
const currentUnpackImageHeight = gl.getParameter( gl.UNPACK_IMAGE_HEIGHT );
|
|
753
776
|
const currentUnpackSkipPixels = gl.getParameter( gl.UNPACK_SKIP_PIXELS );
|
|
754
777
|
const currentUnpackSkipRows = gl.getParameter( gl.UNPACK_SKIP_ROWS );
|
|
755
778
|
const currentUnpackSkipImages = gl.getParameter( gl.UNPACK_SKIP_IMAGES );
|
|
756
779
|
|
|
757
|
-
const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;
|
|
758
|
-
|
|
759
780
|
gl.pixelStorei( gl.UNPACK_ROW_LENGTH, image.width );
|
|
760
781
|
gl.pixelStorei( gl.UNPACK_IMAGE_HEIGHT, image.height );
|
|
761
782
|
gl.pixelStorei( gl.UNPACK_SKIP_PIXELS, minX );
|
|
762
783
|
gl.pixelStorei( gl.UNPACK_SKIP_ROWS, minY );
|
|
784
|
+
gl.pixelStorei( gl.UNPACK_SKIP_IMAGES, minZ );
|
|
763
785
|
|
|
786
|
+
// set up the src texture
|
|
787
|
+
const isDst3D = dstTexture.isDataArrayTexture || dstTexture.isData3DTexture;
|
|
764
788
|
if ( srcTexture.isRenderTargetTexture || srcTexture.isDepthTexture ) {
|
|
765
789
|
|
|
766
790
|
const srcTextureData = backend.get( srcTexture );
|
|
@@ -786,19 +810,37 @@ class WebGLTextureUtils {
|
|
|
786
810
|
|
|
787
811
|
} else {
|
|
788
812
|
|
|
789
|
-
if (
|
|
813
|
+
if ( isDst3D ) {
|
|
790
814
|
|
|
791
|
-
|
|
815
|
+
// copy data into the 3d texture
|
|
816
|
+
if ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {
|
|
817
|
+
|
|
818
|
+
gl.texSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image.data );
|
|
819
|
+
|
|
820
|
+
} else if ( dstTexture.isCompressedArrayTexture ) {
|
|
821
|
+
|
|
822
|
+
gl.compressedTexSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, image.data );
|
|
823
|
+
|
|
824
|
+
} else {
|
|
825
|
+
|
|
826
|
+
gl.texSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image );
|
|
827
|
+
|
|
828
|
+
}
|
|
792
829
|
|
|
793
830
|
} else {
|
|
794
831
|
|
|
795
|
-
|
|
832
|
+
// copy data into the 2d texture
|
|
833
|
+
if ( srcTexture.isDataTexture ) {
|
|
834
|
+
|
|
835
|
+
gl.texSubImage2D( glTextureType, dstLevel, dstX, dstY, width, height, glFormat, glType, image.data );
|
|
796
836
|
|
|
797
|
-
|
|
837
|
+
} else if ( srcTexture.isCompressedTexture ) {
|
|
838
|
+
|
|
839
|
+
gl.compressedTexSubImage2D( glTextureType, dstLevel, dstX, dstY, image.width, image.height, glFormat, image.data );
|
|
798
840
|
|
|
799
841
|
} else {
|
|
800
842
|
|
|
801
|
-
gl.texSubImage2D(
|
|
843
|
+
gl.texSubImage2D( glTextureType, dstLevel, dstX, dstY, width, height, glFormat, glType, image );
|
|
802
844
|
|
|
803
845
|
}
|
|
804
846
|
|
|
@@ -806,6 +848,7 @@ class WebGLTextureUtils {
|
|
|
806
848
|
|
|
807
849
|
}
|
|
808
850
|
|
|
851
|
+
// reset values
|
|
809
852
|
gl.pixelStorei( gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );
|
|
810
853
|
gl.pixelStorei( gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );
|
|
811
854
|
gl.pixelStorei( gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );
|
|
@@ -813,12 +856,17 @@ class WebGLTextureUtils {
|
|
|
813
856
|
gl.pixelStorei( gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );
|
|
814
857
|
|
|
815
858
|
// Generate mipmaps only when copying level 0
|
|
816
|
-
if (
|
|
859
|
+
if ( dstLevel === 0 && dstTexture.generateMipmaps ) {
|
|
860
|
+
|
|
861
|
+
gl.generateMipmap( glTextureType );
|
|
862
|
+
|
|
863
|
+
}
|
|
817
864
|
|
|
818
865
|
state.unbindTexture();
|
|
819
866
|
|
|
820
867
|
}
|
|
821
868
|
|
|
869
|
+
|
|
822
870
|
/**
|
|
823
871
|
* Copies the current bound framebuffer to the given texture.
|
|
824
872
|
*
|
|
@@ -45,7 +45,7 @@ class WebGLUtils {
|
|
|
45
45
|
*
|
|
46
46
|
* @param {number} p - The three.js constant.
|
|
47
47
|
* @param {string} [colorSpace=NoColorSpace] - The color space.
|
|
48
|
-
* @return {number} The corresponding WebGL constant.
|
|
48
|
+
* @return {?number} The corresponding WebGL constant.
|
|
49
49
|
*/
|
|
50
50
|
convert( p, colorSpace = NoColorSpace ) {
|
|
51
51
|
|
|
@@ -25,22 +25,28 @@ import { warnOnce } from '../../utils.js';
|
|
|
25
25
|
*/
|
|
26
26
|
class WebGPUBackend extends Backend {
|
|
27
27
|
|
|
28
|
+
/**
|
|
29
|
+
* WebGPUBackend options.
|
|
30
|
+
*
|
|
31
|
+
* @typedef {Object} WebGPUBackend~Options
|
|
32
|
+
* @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
33
|
+
* @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
34
|
+
* @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
35
|
+
* @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
36
|
+
* @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
37
|
+
* @property {number} [samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
|
|
38
|
+
* @property {boolean} [forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
|
|
39
|
+
* @property {boolean} [trackTimestamp=false] - Whether to track timestamps with a Timestamp Query API or not.
|
|
40
|
+
* @property {string} [powerPreference=undefined] - The power preference.
|
|
41
|
+
* @property {Object} [requiredLimits=undefined] - Specifies the limits that are required by the device request. The request will fail if the adapter cannot provide these limits.
|
|
42
|
+
* @property {GPUDevice} [device=undefined] - If there is an existing GPU device on app level, it can be passed to the renderer as a parameter.
|
|
43
|
+
* @property {number} [outputType=undefined] - Texture type for output to canvas. By default, device's preferred format is used; other formats may incur overhead.
|
|
44
|
+
*/
|
|
45
|
+
|
|
28
46
|
/**
|
|
29
47
|
* Constructs a new WebGPU backend.
|
|
30
48
|
*
|
|
31
|
-
* @param {
|
|
32
|
-
* @param {boolean} [parameters.logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
33
|
-
* @param {boolean} [parameters.alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
34
|
-
* @param {boolean} [parameters.depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
35
|
-
* @param {boolean} [parameters.stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
36
|
-
* @param {boolean} [parameters.antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
37
|
-
* @param {number} [parameters.samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
|
|
38
|
-
* @param {boolean} [parameters.forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
|
|
39
|
-
* @param {boolean} [parameters.trackTimestamp=false] - Whether to track timestamps with a Timestamp Query API or not.
|
|
40
|
-
* @param {string} [parameters.powerPreference=undefined] - The power preference.
|
|
41
|
-
* @param {Object} [parameters.requiredLimits=undefined] - Specifies the limits that are required by the device request. The request will fail if the adapter cannot provide these limits.
|
|
42
|
-
* @param {GPUDevice} [parameters.device=undefined] - If there is an existing GPU device on app level, it can be passed to the renderer as a parameter.
|
|
43
|
-
* @param {number} [parameters.outputType=undefined] - Texture type for output to canvas. By default, device's preferred format is used; other formats may incur overhead.
|
|
49
|
+
* @param {WebGPUBackend~Options} [parameters] - The configuration parameter.
|
|
44
50
|
*/
|
|
45
51
|
constructor( parameters = {} ) {
|
|
46
52
|
|
|
@@ -60,14 +66,6 @@ class WebGPUBackend extends Backend {
|
|
|
60
66
|
|
|
61
67
|
this.parameters.requiredLimits = ( parameters.requiredLimits === undefined ) ? {} : parameters.requiredLimits;
|
|
62
68
|
|
|
63
|
-
/**
|
|
64
|
-
* Whether to track timestamps with a Timestamp Query API or not.
|
|
65
|
-
*
|
|
66
|
-
* @type {boolean}
|
|
67
|
-
* @default false
|
|
68
|
-
*/
|
|
69
|
-
this.trackTimestamp = ( parameters.trackTimestamp === true );
|
|
70
|
-
|
|
71
69
|
/**
|
|
72
70
|
* A reference to the device.
|
|
73
71
|
*
|
|
@@ -363,10 +361,9 @@ class WebGPUBackend extends Backend {
|
|
|
363
361
|
renderTargetData.width !== renderTarget.width ||
|
|
364
362
|
renderTargetData.height !== renderTarget.height ||
|
|
365
363
|
renderTargetData.dimensions !== renderTarget.dimensions ||
|
|
366
|
-
renderTargetData.activeMipmapLevel !==
|
|
364
|
+
renderTargetData.activeMipmapLevel !== renderContext.activeMipmapLevel ||
|
|
367
365
|
renderTargetData.activeCubeFace !== renderContext.activeCubeFace ||
|
|
368
|
-
renderTargetData.samples !== renderTarget.samples
|
|
369
|
-
renderTargetData.loadOp !== colorAttachmentsConfig.loadOp
|
|
366
|
+
renderTargetData.samples !== renderTarget.samples
|
|
370
367
|
) {
|
|
371
368
|
|
|
372
369
|
descriptors = {};
|
|
@@ -378,23 +375,25 @@ class WebGPUBackend extends Backend {
|
|
|
378
375
|
const onDispose = () => {
|
|
379
376
|
|
|
380
377
|
renderTarget.removeEventListener( 'dispose', onDispose );
|
|
381
|
-
|
|
382
378
|
this.delete( renderTarget );
|
|
383
379
|
|
|
384
380
|
};
|
|
385
381
|
|
|
386
|
-
renderTarget.
|
|
382
|
+
if ( renderTarget.hasEventListener( 'dispose', onDispose ) === false ) {
|
|
383
|
+
|
|
384
|
+
renderTarget.addEventListener( 'dispose', onDispose );
|
|
385
|
+
|
|
386
|
+
}
|
|
387
387
|
|
|
388
388
|
}
|
|
389
389
|
|
|
390
390
|
const cacheKey = renderContext.getCacheKey();
|
|
391
|
+
let descriptorBase = descriptors[ cacheKey ];
|
|
391
392
|
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
if ( descriptor === undefined ) {
|
|
393
|
+
if ( descriptorBase === undefined ) {
|
|
395
394
|
|
|
396
395
|
const textures = renderContext.textures;
|
|
397
|
-
const
|
|
396
|
+
const textureViews = [];
|
|
398
397
|
|
|
399
398
|
let sliceIndex;
|
|
400
399
|
|
|
@@ -442,44 +441,24 @@ class WebGPUBackend extends Backend {
|
|
|
442
441
|
|
|
443
442
|
}
|
|
444
443
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
let clearValue = { r: 0, g: 0, b: 0, a: 1 };
|
|
448
|
-
|
|
449
|
-
if ( i === 0 && colorAttachmentsConfig.clearValue ) {
|
|
450
|
-
|
|
451
|
-
clearValue = colorAttachmentsConfig.clearValue;
|
|
452
|
-
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
colorAttachments.push( {
|
|
444
|
+
textureViews.push( {
|
|
456
445
|
view,
|
|
457
|
-
depthSlice: sliceIndex,
|
|
458
446
|
resolveTarget,
|
|
459
|
-
|
|
460
|
-
storeOp: colorAttachmentsConfig.storeOP || GPUStoreOp.Store,
|
|
461
|
-
clearValue: clearValue
|
|
447
|
+
depthSlice: sliceIndex
|
|
462
448
|
} );
|
|
463
449
|
|
|
464
450
|
}
|
|
465
451
|
|
|
466
|
-
|
|
467
|
-
descriptor = {
|
|
468
|
-
colorAttachments,
|
|
469
|
-
};
|
|
452
|
+
descriptorBase = { textureViews };
|
|
470
453
|
|
|
471
454
|
if ( renderContext.depth ) {
|
|
472
455
|
|
|
473
456
|
const depthTextureData = this.get( renderContext.depthTexture );
|
|
474
|
-
|
|
475
|
-
const depthStencilAttachment = {
|
|
476
|
-
view: depthTextureData.texture.createView()
|
|
477
|
-
};
|
|
478
|
-
descriptor.depthStencilAttachment = depthStencilAttachment;
|
|
457
|
+
descriptorBase.depthStencilView = depthTextureData.texture.createView();
|
|
479
458
|
|
|
480
459
|
}
|
|
481
460
|
|
|
482
|
-
descriptors[ cacheKey ] =
|
|
461
|
+
descriptors[ cacheKey ] = descriptorBase;
|
|
483
462
|
|
|
484
463
|
renderTargetData.width = renderTarget.width;
|
|
485
464
|
renderTargetData.height = renderTarget.height;
|
|
@@ -487,8 +466,41 @@ class WebGPUBackend extends Backend {
|
|
|
487
466
|
renderTargetData.activeMipmapLevel = renderContext.activeMipmapLevel;
|
|
488
467
|
renderTargetData.activeCubeFace = renderContext.activeCubeFace;
|
|
489
468
|
renderTargetData.dimensions = renderTarget.dimensions;
|
|
490
|
-
|
|
491
|
-
|
|
469
|
+
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
const descriptor = {
|
|
473
|
+
colorAttachments: []
|
|
474
|
+
};
|
|
475
|
+
|
|
476
|
+
// Apply dynamic properties to cached views
|
|
477
|
+
for ( let i = 0; i < descriptorBase.textureViews.length; i ++ ) {
|
|
478
|
+
|
|
479
|
+
const viewInfo = descriptorBase.textureViews[ i ];
|
|
480
|
+
|
|
481
|
+
let clearValue = { r: 0, g: 0, b: 0, a: 1 };
|
|
482
|
+
if ( i === 0 && colorAttachmentsConfig.clearValue ) {
|
|
483
|
+
|
|
484
|
+
clearValue = colorAttachmentsConfig.clearValue;
|
|
485
|
+
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
descriptor.colorAttachments.push( {
|
|
489
|
+
view: viewInfo.view,
|
|
490
|
+
depthSlice: viewInfo.depthSlice,
|
|
491
|
+
resolveTarget: viewInfo.resolveTarget,
|
|
492
|
+
loadOp: colorAttachmentsConfig.loadOp || GPULoadOp.Load,
|
|
493
|
+
storeOp: colorAttachmentsConfig.storeOp || GPUStoreOp.Store,
|
|
494
|
+
clearValue: clearValue
|
|
495
|
+
} );
|
|
496
|
+
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
if ( descriptorBase.depthStencilView ) {
|
|
500
|
+
|
|
501
|
+
descriptor.depthStencilAttachment = {
|
|
502
|
+
view: descriptorBase.depthStencilView
|
|
503
|
+
};
|
|
492
504
|
|
|
493
505
|
}
|
|
494
506
|
|
|
@@ -867,7 +879,6 @@ class WebGPUBackend extends Backend {
|
|
|
867
879
|
const renderer = this.renderer;
|
|
868
880
|
|
|
869
881
|
let colorAttachments = [];
|
|
870
|
-
|
|
871
882
|
let depthStencilAttachment;
|
|
872
883
|
let clearValue;
|
|
873
884
|
|
|
@@ -911,29 +922,35 @@ class WebGPUBackend extends Backend {
|
|
|
911
922
|
supportsDepth = renderTargetContext.depth;
|
|
912
923
|
supportsStencil = renderTargetContext.stencil;
|
|
913
924
|
|
|
914
|
-
|
|
925
|
+
const clearConfig = {
|
|
926
|
+
loadOp: color ? GPULoadOp.Clear : GPULoadOp.Load,
|
|
927
|
+
clearValue: color ? clearValue : undefined
|
|
928
|
+
};
|
|
915
929
|
|
|
916
|
-
|
|
930
|
+
if ( supportsDepth ) {
|
|
917
931
|
|
|
918
|
-
|
|
932
|
+
clearConfig.depthLoadOp = depth ? GPULoadOp.Clear : GPULoadOp.Load;
|
|
933
|
+
clearConfig.depthClearValue = depth ? renderer.getClearDepth() : undefined;
|
|
934
|
+
clearConfig.depthStoreOp = GPUStoreOp.Store;
|
|
919
935
|
|
|
920
936
|
}
|
|
921
937
|
|
|
922
|
-
if (
|
|
923
|
-
|
|
924
|
-
const depthTextureData = this.get( renderTargetContext.depthTexture );
|
|
938
|
+
if ( supportsStencil ) {
|
|
925
939
|
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
940
|
+
clearConfig.stencilLoadOp = stencil ? GPULoadOp.Clear : GPULoadOp.Load;
|
|
941
|
+
clearConfig.stencilClearValue = stencil ? renderer.getClearStencil() : undefined;
|
|
942
|
+
clearConfig.stencilStoreOp = GPUStoreOp.Store;
|
|
929
943
|
|
|
930
944
|
}
|
|
931
945
|
|
|
932
|
-
|
|
946
|
+
const descriptor = this._getRenderPassDescriptor( renderTargetContext, clearConfig );
|
|
933
947
|
|
|
934
|
-
|
|
948
|
+
colorAttachments = descriptor.colorAttachments;
|
|
949
|
+
depthStencilAttachment = descriptor.depthStencilAttachment;
|
|
950
|
+
|
|
951
|
+
}
|
|
935
952
|
|
|
936
|
-
if ( supportsDepth ) {
|
|
953
|
+
if ( supportsDepth && depthStencilAttachment && depthStencilAttachment.depthLoadOp === undefined ) {
|
|
937
954
|
|
|
938
955
|
if ( depth ) {
|
|
939
956
|
|
|
@@ -952,7 +969,7 @@ class WebGPUBackend extends Backend {
|
|
|
952
969
|
|
|
953
970
|
//
|
|
954
971
|
|
|
955
|
-
if ( supportsStencil ) {
|
|
972
|
+
if ( supportsStencil && depthStencilAttachment && depthStencilAttachment.stencilLoadOp === undefined ) {
|
|
956
973
|
|
|
957
974
|
if ( stencil ) {
|
|
958
975
|
|
|
@@ -1865,38 +1882,56 @@ class WebGPUBackend extends Backend {
|
|
|
1865
1882
|
*
|
|
1866
1883
|
* @param {Texture} srcTexture - The source texture.
|
|
1867
1884
|
* @param {Texture} dstTexture - The destination texture.
|
|
1868
|
-
* @param {?
|
|
1885
|
+
* @param {?(Box3|Box2)} [srcRegion=null] - The region of the source texture to copy.
|
|
1869
1886
|
* @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.
|
|
1870
|
-
* @param {number} [
|
|
1887
|
+
* @param {number} [srcLevel=0] - The mipmap level to copy.
|
|
1888
|
+
* @param {number} [dstLevel=0] - The destination mip level to copy to.
|
|
1871
1889
|
*/
|
|
1872
|
-
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null,
|
|
1890
|
+
copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {
|
|
1873
1891
|
|
|
1874
1892
|
let dstX = 0;
|
|
1875
1893
|
let dstY = 0;
|
|
1876
|
-
let
|
|
1894
|
+
let dstZ = 0;
|
|
1877
1895
|
|
|
1878
1896
|
let srcX = 0;
|
|
1879
1897
|
let srcY = 0;
|
|
1880
|
-
let
|
|
1898
|
+
let srcZ = 0;
|
|
1881
1899
|
|
|
1882
1900
|
let srcWidth = srcTexture.image.width;
|
|
1883
1901
|
let srcHeight = srcTexture.image.height;
|
|
1902
|
+
let srcDepth = 1;
|
|
1903
|
+
|
|
1884
1904
|
|
|
1885
1905
|
if ( srcRegion !== null ) {
|
|
1886
1906
|
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1907
|
+
if ( srcRegion.isBox3 === true ) {
|
|
1908
|
+
|
|
1909
|
+
srcX = srcRegion.min.x;
|
|
1910
|
+
srcY = srcRegion.min.y;
|
|
1911
|
+
srcZ = srcRegion.min.z;
|
|
1912
|
+
srcWidth = srcRegion.max.x - srcRegion.min.x;
|
|
1913
|
+
srcHeight = srcRegion.max.y - srcRegion.min.y;
|
|
1914
|
+
srcDepth = srcRegion.max.z - srcRegion.min.z;
|
|
1915
|
+
|
|
1916
|
+
} else {
|
|
1917
|
+
|
|
1918
|
+
// Assume it's a Box2
|
|
1919
|
+
srcX = srcRegion.min.x;
|
|
1920
|
+
srcY = srcRegion.min.y;
|
|
1921
|
+
srcWidth = srcRegion.max.x - srcRegion.min.x;
|
|
1922
|
+
srcHeight = srcRegion.max.y - srcRegion.min.y;
|
|
1923
|
+
srcDepth = 1;
|
|
1924
|
+
|
|
1925
|
+
}
|
|
1892
1926
|
|
|
1893
1927
|
}
|
|
1894
1928
|
|
|
1929
|
+
|
|
1895
1930
|
if ( dstPosition !== null ) {
|
|
1896
1931
|
|
|
1897
1932
|
dstX = dstPosition.x;
|
|
1898
1933
|
dstY = dstPosition.y;
|
|
1899
|
-
|
|
1934
|
+
dstZ = dstPosition.z || 0;
|
|
1900
1935
|
|
|
1901
1936
|
}
|
|
1902
1937
|
|
|
@@ -1908,23 +1943,29 @@ class WebGPUBackend extends Backend {
|
|
|
1908
1943
|
encoder.copyTextureToTexture(
|
|
1909
1944
|
{
|
|
1910
1945
|
texture: sourceGPU,
|
|
1911
|
-
mipLevel:
|
|
1912
|
-
origin: { x: srcX, y: srcY, z:
|
|
1946
|
+
mipLevel: srcLevel,
|
|
1947
|
+
origin: { x: srcX, y: srcY, z: srcZ }
|
|
1913
1948
|
},
|
|
1914
1949
|
{
|
|
1915
1950
|
texture: destinationGPU,
|
|
1916
|
-
mipLevel:
|
|
1917
|
-
origin: { x: dstX, y: dstY, z:
|
|
1951
|
+
mipLevel: dstLevel,
|
|
1952
|
+
origin: { x: dstX, y: dstY, z: dstZ }
|
|
1918
1953
|
},
|
|
1919
1954
|
[
|
|
1920
1955
|
srcWidth,
|
|
1921
1956
|
srcHeight,
|
|
1922
|
-
|
|
1957
|
+
srcDepth
|
|
1923
1958
|
]
|
|
1924
1959
|
);
|
|
1925
1960
|
|
|
1926
1961
|
this.device.queue.submit( [ encoder.finish() ] );
|
|
1927
1962
|
|
|
1963
|
+
if ( dstLevel === 0 && dstTexture.generateMipmaps ) {
|
|
1964
|
+
|
|
1965
|
+
this.textureUtils.generateMipmaps( dstTexture );
|
|
1966
|
+
|
|
1967
|
+
}
|
|
1968
|
+
|
|
1928
1969
|
}
|
|
1929
1970
|
|
|
1930
1971
|
/**
|
|
@@ -15,17 +15,7 @@ class WebGPURenderer extends Renderer {
|
|
|
15
15
|
/**
|
|
16
16
|
* Constructs a new WebGPU renderer.
|
|
17
17
|
*
|
|
18
|
-
* @param {
|
|
19
|
-
* @param {boolean} [parameters.logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
20
|
-
* @param {boolean} [parameters.alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
21
|
-
* @param {boolean} [parameters.depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
22
|
-
* @param {boolean} [parameters.stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
23
|
-
* @param {boolean} [parameters.antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
24
|
-
* @param {number} [parameters.samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
|
|
25
|
-
* @param {boolean} [parameters.forceWebGL=false] - If set to `true`, the renderer uses it WebGL 2 backend no matter if WebGPU is supported or not.
|
|
26
|
-
* @param {number} [parameters.outputType=undefined] - Texture type for output to canvas. By default, device's preferred format is used; other formats may incur overhead.
|
|
27
|
-
* @param {number} [parameters.colorBufferType=HalfFloatType] - Defines the type of color buffers. The default `HalfFloatType` is recommend for best
|
|
28
|
-
* quality. To save memory and bandwidth, `UnsignedByteType` might be used. This will reduce rendering quality though.
|
|
18
|
+
* @param {WebGPURenderer~Options} [parameters] - The configuration parameter.
|
|
29
19
|
*/
|
|
30
20
|
constructor( parameters = {} ) {
|
|
31
21
|
|
|
@@ -27,20 +27,26 @@ const debugHandler = {
|
|
|
27
27
|
class WebGPURenderer extends Renderer {
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
|
-
*
|
|
30
|
+
* WebGPURenderer options.
|
|
31
31
|
*
|
|
32
|
-
* @
|
|
33
|
-
* @
|
|
34
|
-
* @
|
|
35
|
-
* @
|
|
36
|
-
* @
|
|
37
|
-
* @
|
|
38
|
-
* @
|
|
39
|
-
* @
|
|
40
|
-
* @
|
|
41
|
-
* @
|
|
32
|
+
* @typedef {Object} WebGPURenderer~Options
|
|
33
|
+
* @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
34
|
+
* @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
35
|
+
* @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
36
|
+
* @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
37
|
+
* @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
|
|
38
|
+
* @property {number} [samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
|
|
39
|
+
* @property {boolean} [forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
|
|
40
|
+
* @property {number} [outputType=undefined] - Texture type for output to canvas. By default, device's preferred format is used; other formats may incur overhead.
|
|
41
|
+
* @property {number} [colorBufferType=HalfFloatType] - Defines the type of color buffers. The default `HalfFloatType` is recommend for best
|
|
42
42
|
* quality. To save memory and bandwidth, `UnsignedByteType` might be used. This will reduce rendering quality though.
|
|
43
43
|
*/
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Constructs a new WebGPU renderer.
|
|
47
|
+
*
|
|
48
|
+
* @param {WebGPURenderer~Options} [parameters] - The configuration parameter.
|
|
49
|
+
*/
|
|
44
50
|
constructor( parameters = {} ) {
|
|
45
51
|
|
|
46
52
|
let BackendClass;
|