@plastic-software/three 0.175.14 → 0.179.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/README.md +4 -4
- package/build/three.cjs +8402 -6787
- package/build/three.core.js +8007 -6688
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +397 -102
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +84 -27
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6831 -2838
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6648 -2838
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -3
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -27
- package/examples/jsm/capabilities/WebGPU.js +2 -1
- package/examples/jsm/controls/ArcballControls.js +15 -4
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +62 -14
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +22 -8
- package/examples/jsm/curves/CurveExtras.js +14 -0
- package/examples/jsm/curves/NURBSCurve.js +1 -0
- package/examples/jsm/curves/NURBSSurface.js +2 -0
- package/examples/jsm/curves/NURBSUtils.js +4 -1
- package/examples/jsm/curves/NURBSVolume.js +2 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -0
- package/examples/jsm/effects/AsciiEffect.js +2 -0
- package/examples/jsm/effects/OutlineEffect.js +2 -0
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
- package/examples/jsm/effects/StereoEffect.js +2 -0
- package/examples/jsm/environments/DebugEnvironment.js +1 -0
- package/examples/jsm/environments/RoomEnvironment.js +57 -38
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -0
- package/examples/jsm/exporters/GLTFExporter.js +7 -4
- package/examples/jsm/exporters/KTX2Exporter.js +2 -0
- package/examples/jsm/exporters/OBJExporter.js +3 -1
- package/examples/jsm/exporters/PLYExporter.js +4 -2
- package/examples/jsm/exporters/STLExporter.js +2 -0
- package/examples/jsm/exporters/USDZExporter.js +679 -300
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -0
- package/examples/jsm/geometries/ParametricFunctions.js +4 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -0
- package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
- package/examples/jsm/geometries/TeapotGeometry.js +1 -0
- package/examples/jsm/geometries/TextGeometry.js +1 -0
- package/examples/jsm/helpers/LightProbeHelper.js +1 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
- package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +1 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -2
- package/examples/jsm/interactive/InteractiveGroup.js +1 -0
- package/examples/jsm/interactive/SelectionBox.js +2 -0
- package/examples/jsm/interactive/SelectionHelper.js +2 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +15 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
- package/examples/jsm/lines/Line2.js +1 -0
- package/examples/jsm/lines/LineGeometry.js +1 -0
- package/examples/jsm/lines/LineMaterial.js +4 -4
- package/examples/jsm/lines/LineSegments2.js +1 -0
- package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
- package/examples/jsm/lines/Wireframe.js +1 -0
- package/examples/jsm/lines/WireframeGeometry2.js +1 -0
- package/examples/jsm/lines/webgpu/Line2.js +1 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +1 -0
- package/examples/jsm/loaders/AMFLoader.js +1 -0
- package/examples/jsm/loaders/BVHLoader.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +6 -5
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +211 -22
- package/examples/jsm/loaders/FBXLoader.js +25 -23
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +213 -30
- package/examples/jsm/loaders/NRRDLoader.js +1 -0
- package/examples/jsm/loaders/OBJLoader.js +1 -0
- package/examples/jsm/loaders/PCDLoader.js +122 -19
- package/examples/jsm/loaders/PDBLoader.js +1 -0
- package/examples/jsm/loaders/PLYLoader.js +1 -0
- package/examples/jsm/loaders/PVRLoader.js +1 -0
- package/examples/jsm/loaders/RGBELoader.js +1 -0
- package/examples/jsm/loaders/RGBMLoader.js +1 -0
- package/examples/jsm/loaders/STLLoader.js +1 -0
- package/examples/jsm/loaders/SVGLoader.js +1 -0
- package/examples/jsm/loaders/TDSLoader.js +1 -0
- package/examples/jsm/loaders/TGALoader.js +1 -0
- package/examples/jsm/loaders/TIFFLoader.js +1 -0
- package/examples/jsm/loaders/TTFLoader.js +14 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -891
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +3 -2
- package/examples/jsm/loaders/VTKLoader.js +1 -0
- package/examples/jsm/loaders/XYZLoader.js +1 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
- package/examples/jsm/math/Capsule.js +2 -0
- package/examples/jsm/math/ColorConverter.js +1 -0
- package/examples/jsm/math/ConvexHull.js +2 -0
- package/examples/jsm/math/ImprovedNoise.js +19 -14
- package/examples/jsm/math/Lut.js +2 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
- package/examples/jsm/math/OBB.js +2 -0
- package/examples/jsm/math/Octree.js +20 -1
- package/examples/jsm/math/SimplexNoise.js +2 -0
- package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/Gyroscope.js +1 -0
- package/examples/jsm/misc/MD2Character.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
- package/examples/jsm/misc/MorphAnimMesh.js +1 -0
- package/examples/jsm/misc/MorphBlendMesh.js +1 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +5 -0
- package/examples/jsm/misc/TubePainter.js +1 -0
- package/examples/jsm/misc/Volume.js +2 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/modifiers/CurveModifier.js +3 -0
- package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
- package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
- package/examples/jsm/modifiers/TessellateModifier.js +2 -0
- package/examples/jsm/objects/GroundedSkybox.js +1 -0
- package/examples/jsm/objects/Lensflare.js +3 -0
- package/examples/jsm/objects/LensflareMesh.js +4 -3
- package/examples/jsm/objects/MarchingCubes.js +2 -0
- package/examples/jsm/objects/Reflector.js +1 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Refractor.js +1 -0
- package/examples/jsm/objects/ShadowMesh.js +1 -0
- package/examples/jsm/objects/Sky.js +2 -1
- package/examples/jsm/objects/SkyMesh.js +22 -19
- package/examples/jsm/objects/Water.js +1 -0
- package/examples/jsm/objects/Water2.js +1 -0
- package/examples/jsm/objects/Water2Mesh.js +3 -1
- package/examples/jsm/objects/WaterMesh.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +1 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +149 -13
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -2
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +14 -12
- package/examples/jsm/postprocessing/GlitchPass.js +2 -1
- package/examples/jsm/postprocessing/HalftonePass.js +2 -1
- package/examples/jsm/postprocessing/LUTPass.js +1 -0
- package/examples/jsm/postprocessing/MaskPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +22 -19
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +3 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +3 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
- package/examples/jsm/postprocessing/SSAOPass.js +12 -10
- package/examples/jsm/postprocessing/SSRPass.js +4 -3
- package/examples/jsm/postprocessing/SavePass.js +2 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
- package/examples/jsm/postprocessing/TexturePass.js +1 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
- package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
- package/examples/jsm/renderers/Projector.js +2 -0
- package/examples/jsm/renderers/SVGRenderer.js +3 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
- package/examples/jsm/shaders/AfterimageShader.js +4 -1
- package/examples/jsm/shaders/BasicShader.js +4 -1
- package/examples/jsm/shaders/BleachBypassShader.js +4 -1
- package/examples/jsm/shaders/BlendShader.js +4 -1
- package/examples/jsm/shaders/BokehShader.js +4 -1
- package/examples/jsm/shaders/BokehShader2.js +4 -1
- package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
- package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
- package/examples/jsm/shaders/ColorifyShader.js +4 -1
- package/examples/jsm/shaders/ConvolutionShader.js +4 -1
- package/examples/jsm/shaders/CopyShader.js +4 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/DigitalGlitch.js +4 -1
- package/examples/jsm/shaders/DotScreenShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +4 -1
- package/examples/jsm/shaders/FXAAShader.js +4 -1
- package/examples/jsm/shaders/FilmShader.js +4 -1
- package/examples/jsm/shaders/FocusShader.js +4 -1
- package/examples/jsm/shaders/FreiChenShader.js +4 -1
- package/examples/jsm/shaders/GTAOShader.js +4 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
- package/examples/jsm/shaders/GodRaysShader.js +4 -1
- package/examples/jsm/shaders/HalftoneShader.js +4 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/HueSaturationShader.js +4 -1
- package/examples/jsm/shaders/KaleidoShader.js +4 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
- package/examples/jsm/shaders/LuminosityShader.js +4 -1
- package/examples/jsm/shaders/MirrorShader.js +4 -1
- package/examples/jsm/shaders/NormalMapShader.js +4 -1
- package/examples/jsm/shaders/OutputShader.js +4 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
- package/examples/jsm/shaders/RGBShiftShader.js +4 -1
- package/examples/jsm/shaders/SAOShader.js +4 -1
- package/examples/jsm/shaders/SMAAShader.js +1 -0
- package/examples/jsm/shaders/SSAOShader.js +4 -1
- package/examples/jsm/shaders/SSRShader.js +1 -0
- package/examples/jsm/shaders/SepiaShader.js +4 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
- package/examples/jsm/shaders/TechnicolorShader.js +4 -1
- package/examples/jsm/shaders/ToonShader.js +2 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
- package/examples/jsm/shaders/VelocityShader.js +4 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/VignetteShader.js +4 -1
- package/examples/jsm/shaders/VolumeShader.js +5 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
- package/examples/jsm/textures/FlakesTexture.js +2 -0
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +9 -7
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
- package/examples/jsm/tsl/display/TransitionNode.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +28 -6
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
- package/examples/jsm/tsl/math/Bayer.js +4 -1
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +6 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +4 -1
- package/examples/jsm/utils/LDrawUtils.js +2 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +4 -1
- package/examples/jsm/utils/ShadowMapViewer.js +2 -0
- package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
- package/examples/jsm/utils/SkeletonUtils.js +4 -1
- package/examples/jsm/utils/SortUtils.js +4 -1
- package/examples/jsm/utils/UVsDebug.js +4 -1
- package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
- package/examples/jsm/utils/WorkerPool.js +2 -0
- package/examples/jsm/webxr/ARButton.js +1 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
- package/examples/jsm/webxr/Text2D.js +4 -1
- package/examples/jsm/webxr/VRButton.js +1 -0
- package/examples/jsm/webxr/XRButton.js +1 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
- package/examples/jsm/webxr/XREstimatedLight.js +1 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
- package/examples/jsm/webxr/XRPlanes.js +1 -0
- package/package.json +6 -4
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +83 -26
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/{examples/jsm/misc → src/core}/Timer.js +4 -40
- package/src/extras/PMREMGenerator.js +11 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/CameraHelper.js +41 -11
- package/src/helpers/SkeletonHelper.js +36 -7
- package/src/lights/LightShadow.js +34 -7
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/SpotLightShadow.js +9 -1
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/BufferGeometryLoader.js +1 -10
- package/src/loaders/FileLoader.js +27 -4
- package/src/loaders/ImageBitmapLoader.js +48 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/Loader.js +14 -0
- package/src/loaders/LoadingManager.js +23 -0
- package/src/loaders/ObjectLoader.js +44 -16
- package/src/loaders/nodes/NodeObjectLoader.js +2 -2
- package/src/materials/Material.js +1 -7
- package/src/materials/MeshBasicMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +0 -8
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +106 -20
- package/src/materials/nodes/PointsNodeMaterial.js +5 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Line3.js +129 -2
- package/src/math/Matrix4.js +48 -27
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/math/Spherical.js +2 -2
- package/src/nodes/Nodes.js +3 -3
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +40 -13
- package/src/nodes/accessors/CubeTextureNode.js +50 -2
- package/src/nodes/accessors/InstanceNode.js +5 -4
- package/src/nodes/accessors/Lights.js +2 -2
- package/src/nodes/accessors/MaterialNode.js +4 -0
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +110 -24
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +19 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +15 -4
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +71 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/ArrayNode.js +12 -0
- package/src/nodes/core/AssignNode.js +30 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +27 -4
- package/src/nodes/core/Node.js +83 -22
- package/src/nodes/core/NodeBuilder.js +273 -49
- package/src/nodes/core/NodeUtils.js +46 -1
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +171 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +63 -5
- package/src/nodes/core/VarNode.js +102 -4
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +165 -20
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/display/ViewportTextureNode.js +67 -7
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +16 -16
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +68 -24
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/ConditionalNode.js +1 -20
- package/src/nodes/math/MathNode.js +146 -75
- package/src/nodes/math/OperatorNode.js +129 -119
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +222 -72
- package/src/nodes/utils/DebugNode.js +16 -4
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +83 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +22 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +20 -6
- package/src/objects/Mesh.js +9 -0
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/Sprite.js +9 -0
- package/src/renderers/WebGL3DRenderTarget.js +1 -0
- package/src/renderers/WebGLArrayRenderTarget.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +2 -4
- package/src/renderers/WebGLRenderer.js +45 -32
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/Bindings.js +19 -18
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/PostProcessing.js +60 -5
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +133 -22
- package/src/renderers/common/SampledTexture.js +3 -71
- package/src/renderers/common/Sampler.js +79 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +19 -0
- package/src/renderers/common/Textures.js +34 -24
- package/src/renderers/common/TimestampQueryPool.js +1 -0
- package/src/renderers/common/Uniform.js +1 -1
- package/src/renderers/common/UniformsGroup.js +14 -18
- package/src/renderers/common/XRManager.js +183 -35
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLMaterials.js +6 -6
- package/src/renderers/webgl/WebGLProgram.js +22 -16
- package/src/renderers/webgl/WebGLPrograms.js +8 -6
- package/src/renderers/webgl/WebGLShadowMap.js +14 -3
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +163 -11
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +505 -143
- package/src/renderers/webgpu/WebGPURenderer.js +7 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
- package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +70 -9
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/ExternalTexture.js +45 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +32 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +31 -3
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
|
-
GPUTextureAspect, GPUTextureViewDimension, GPUTextureSampleType, GPUBufferBindingType, GPUStorageTextureAccess
|
|
2
|
+
GPUTextureAspect, GPUTextureViewDimension, GPUTextureSampleType, GPUBufferBindingType, GPUStorageTextureAccess,
|
|
3
|
+
GPUSamplerBindingType
|
|
3
4
|
} from './WebGPUConstants.js';
|
|
4
5
|
|
|
5
6
|
import { FloatType, IntType, UnsignedIntType } from '../../../constants.js';
|
|
@@ -92,26 +93,6 @@ class WebGPUBindingUtils {
|
|
|
92
93
|
|
|
93
94
|
bindingGPU.buffer = buffer;
|
|
94
95
|
|
|
95
|
-
} else if ( binding.isSampler ) {
|
|
96
|
-
|
|
97
|
-
const sampler = {}; // GPUSamplerBindingLayout
|
|
98
|
-
|
|
99
|
-
if ( binding.texture.isDepthTexture ) {
|
|
100
|
-
|
|
101
|
-
if ( binding.texture.compareFunction !== null ) {
|
|
102
|
-
|
|
103
|
-
sampler.type = 'comparison';
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
bindingGPU.sampler = sampler;
|
|
110
|
-
|
|
111
|
-
} else if ( binding.isSampledTexture && binding.texture.isVideoTexture ) {
|
|
112
|
-
|
|
113
|
-
bindingGPU.externalTexture = {}; // GPUExternalTextureBindingLayout
|
|
114
|
-
|
|
115
96
|
} else if ( binding.isSampledTexture && binding.store ) {
|
|
116
97
|
|
|
117
98
|
const storageTexture = {}; // GPUStorageTextureBindingLayout
|
|
@@ -133,6 +114,16 @@ class WebGPUBindingUtils {
|
|
|
133
114
|
|
|
134
115
|
}
|
|
135
116
|
|
|
117
|
+
if ( binding.texture.isArrayTexture ) {
|
|
118
|
+
|
|
119
|
+
storageTexture.viewDimension = GPUTextureViewDimension.TwoDArray;
|
|
120
|
+
|
|
121
|
+
} else if ( binding.texture.is3DTexture ) {
|
|
122
|
+
|
|
123
|
+
storageTexture.viewDimension = GPUTextureViewDimension.ThreeD;
|
|
124
|
+
|
|
125
|
+
}
|
|
126
|
+
|
|
136
127
|
bindingGPU.storageTexture = storageTexture;
|
|
137
128
|
|
|
138
129
|
} else if ( binding.isSampledTexture ) {
|
|
@@ -155,7 +146,15 @@ class WebGPUBindingUtils {
|
|
|
155
146
|
|
|
156
147
|
if ( binding.texture.isDepthTexture ) {
|
|
157
148
|
|
|
158
|
-
texture.
|
|
149
|
+
if ( backend.compatibilityMode && binding.texture.compareFunction === null ) {
|
|
150
|
+
|
|
151
|
+
texture.sampleType = GPUTextureSampleType.UnfilterableFloat;
|
|
152
|
+
|
|
153
|
+
} else {
|
|
154
|
+
|
|
155
|
+
texture.sampleType = GPUTextureSampleType.Depth;
|
|
156
|
+
|
|
157
|
+
}
|
|
159
158
|
|
|
160
159
|
} else if ( binding.texture.isDataTexture || binding.texture.isDataArrayTexture || binding.texture.isData3DTexture ) {
|
|
161
160
|
|
|
@@ -189,7 +188,7 @@ class WebGPUBindingUtils {
|
|
|
189
188
|
|
|
190
189
|
texture.viewDimension = GPUTextureViewDimension.Cube;
|
|
191
190
|
|
|
192
|
-
} else if ( binding.texture.isDataArrayTexture || binding.texture.isCompressedArrayTexture ) {
|
|
191
|
+
} else if ( binding.texture.isArrayTexture || binding.texture.isDataArrayTexture || binding.texture.isCompressedArrayTexture ) {
|
|
193
192
|
|
|
194
193
|
texture.viewDimension = GPUTextureViewDimension.TwoDArray;
|
|
195
194
|
|
|
@@ -201,6 +200,26 @@ class WebGPUBindingUtils {
|
|
|
201
200
|
|
|
202
201
|
bindingGPU.texture = texture;
|
|
203
202
|
|
|
203
|
+
} else if ( binding.isSampler ) {
|
|
204
|
+
|
|
205
|
+
const sampler = {}; // GPUSamplerBindingLayout
|
|
206
|
+
|
|
207
|
+
if ( binding.texture.isDepthTexture ) {
|
|
208
|
+
|
|
209
|
+
if ( binding.texture.compareFunction !== null ) {
|
|
210
|
+
|
|
211
|
+
sampler.type = GPUSamplerBindingType.Comparison;
|
|
212
|
+
|
|
213
|
+
} else if ( backend.compatibilityMode ) {
|
|
214
|
+
|
|
215
|
+
sampler.type = GPUSamplerBindingType.NonFiltering;
|
|
216
|
+
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
bindingGPU.sampler = sampler;
|
|
222
|
+
|
|
204
223
|
} else {
|
|
205
224
|
|
|
206
225
|
console.error( `WebGPUBindingUtils: Unsupported binding "${ binding }".` );
|
|
@@ -382,12 +401,6 @@ class WebGPUBindingUtils {
|
|
|
382
401
|
|
|
383
402
|
entriesGPU.push( { binding: bindingPoint, resource: { buffer: bindingData.buffer } } );
|
|
384
403
|
|
|
385
|
-
} else if ( binding.isSampler ) {
|
|
386
|
-
|
|
387
|
-
const textureGPU = backend.get( binding.texture );
|
|
388
|
-
|
|
389
|
-
entriesGPU.push( { binding: bindingPoint, resource: textureGPU.sampler } );
|
|
390
|
-
|
|
391
404
|
} else if ( binding.isSampledTexture ) {
|
|
392
405
|
|
|
393
406
|
const textureData = backend.get( binding.texture );
|
|
@@ -401,7 +414,15 @@ class WebGPUBindingUtils {
|
|
|
401
414
|
} else {
|
|
402
415
|
|
|
403
416
|
const mipLevelCount = binding.store ? 1 : textureData.texture.mipLevelCount;
|
|
404
|
-
|
|
417
|
+
let propertyName = `view-${ textureData.texture.width }-${ textureData.texture.height }`;
|
|
418
|
+
|
|
419
|
+
if ( textureData.texture.depthOrArrayLayers > 1 ) {
|
|
420
|
+
|
|
421
|
+
propertyName += `-${ textureData.texture.depthOrArrayLayers }`;
|
|
422
|
+
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
propertyName += `-${ mipLevelCount }`;
|
|
405
426
|
|
|
406
427
|
resourceGPU = textureData[ propertyName ];
|
|
407
428
|
|
|
@@ -419,7 +440,7 @@ class WebGPUBindingUtils {
|
|
|
419
440
|
|
|
420
441
|
dimensionViewGPU = GPUTextureViewDimension.ThreeD;
|
|
421
442
|
|
|
422
|
-
} else if ( binding.texture.isDataArrayTexture || binding.texture.isCompressedArrayTexture ) {
|
|
443
|
+
} else if ( binding.texture.isArrayTexture || binding.texture.isDataArrayTexture || binding.texture.isCompressedArrayTexture ) {
|
|
423
444
|
|
|
424
445
|
dimensionViewGPU = GPUTextureViewDimension.TwoDArray;
|
|
425
446
|
|
|
@@ -437,6 +458,12 @@ class WebGPUBindingUtils {
|
|
|
437
458
|
|
|
438
459
|
entriesGPU.push( { binding: bindingPoint, resource: resourceGPU } );
|
|
439
460
|
|
|
461
|
+
} else if ( binding.isSampler ) {
|
|
462
|
+
|
|
463
|
+
const textureGPU = backend.get( binding.texture );
|
|
464
|
+
|
|
465
|
+
entriesGPU.push( { binding: bindingPoint, resource: textureGPU.sampler } );
|
|
466
|
+
|
|
440
467
|
}
|
|
441
468
|
|
|
442
469
|
bindingPoint ++;
|
|
@@ -227,7 +227,7 @@ export const GPUBlendFactor = {
|
|
|
227
227
|
SrcAlpha: 'src-alpha',
|
|
228
228
|
OneMinusSrcAlpha: 'one-minus-src-alpha',
|
|
229
229
|
Dst: 'dst',
|
|
230
|
-
|
|
230
|
+
OneMinusDst: 'one-minus-dst',
|
|
231
231
|
DstAlpha: 'dst-alpha',
|
|
232
232
|
OneMinusDstAlpha: 'one-minus-dst-alpha',
|
|
233
233
|
SrcAlphaSaturated: 'src-alpha-saturated',
|
|
@@ -316,18 +316,24 @@ export const GPUInputStepMode = {
|
|
|
316
316
|
};
|
|
317
317
|
|
|
318
318
|
export const GPUFeatureName = {
|
|
319
|
+
CoreFeaturesAndLimits: 'core-features-and-limits',
|
|
319
320
|
DepthClipControl: 'depth-clip-control',
|
|
320
321
|
Depth32FloatStencil8: 'depth32float-stencil8',
|
|
321
322
|
TextureCompressionBC: 'texture-compression-bc',
|
|
323
|
+
TextureCompressionBCSliced3D: 'texture-compression-bc-sliced-3d',
|
|
322
324
|
TextureCompressionETC2: 'texture-compression-etc2',
|
|
323
325
|
TextureCompressionASTC: 'texture-compression-astc',
|
|
326
|
+
TextureCompressionASTCSliced3D: 'texture-compression-astc-sliced-3d',
|
|
324
327
|
TimestampQuery: 'timestamp-query',
|
|
325
328
|
IndirectFirstInstance: 'indirect-first-instance',
|
|
326
329
|
ShaderF16: 'shader-f16',
|
|
327
330
|
RG11B10UFloat: 'rg11b10ufloat-renderable',
|
|
328
331
|
BGRA8UNormStorage: 'bgra8unorm-storage',
|
|
329
332
|
Float32Filterable: 'float32-filterable',
|
|
333
|
+
Float32Blendable: 'float32-blendable',
|
|
330
334
|
ClipDistances: 'clip-distances',
|
|
331
335
|
DualSourceBlending: 'dual-source-blending',
|
|
332
|
-
Subgroups: 'subgroups'
|
|
336
|
+
Subgroups: 'subgroups',
|
|
337
|
+
TextureFormatsTier1: 'texture-formats-tier1',
|
|
338
|
+
TextureFormatsTier2: 'texture-formats-tier2'
|
|
333
339
|
};
|
|
@@ -36,6 +36,35 @@ class WebGPUPipelineUtils {
|
|
|
36
36
|
*/
|
|
37
37
|
this.backend = backend;
|
|
38
38
|
|
|
39
|
+
/**
|
|
40
|
+
* A Weak Map that tracks the active pipeline for render or compute passes.
|
|
41
|
+
*
|
|
42
|
+
* @private
|
|
43
|
+
* @type {WeakMap<(GPURenderPassEncoder|GPUComputePassEncoder),(GPURenderPipeline|GPUComputePipeline)>}
|
|
44
|
+
*/
|
|
45
|
+
this._activePipelines = new WeakMap();
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Sets the given pipeline for the given pass. The method makes sure to only set the
|
|
51
|
+
* pipeline when necessary.
|
|
52
|
+
*
|
|
53
|
+
* @param {(GPURenderPassEncoder|GPUComputePassEncoder)} pass - The pass encoder.
|
|
54
|
+
* @param {(GPURenderPipeline|GPUComputePipeline)} pipeline - The pipeline.
|
|
55
|
+
*/
|
|
56
|
+
setPipeline( pass, pipeline ) {
|
|
57
|
+
|
|
58
|
+
const currentPipeline = this._activePipelines.get( pass );
|
|
59
|
+
|
|
60
|
+
if ( currentPipeline !== pipeline ) {
|
|
61
|
+
|
|
62
|
+
pass.setPipeline( pipeline );
|
|
63
|
+
|
|
64
|
+
this._activePipelines.set( pass, pipeline );
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
39
68
|
}
|
|
40
69
|
|
|
41
70
|
/**
|
|
@@ -88,7 +117,7 @@ class WebGPUPipelineUtils {
|
|
|
88
117
|
|
|
89
118
|
let blending;
|
|
90
119
|
|
|
91
|
-
if ( material.
|
|
120
|
+
if ( material.blending !== NoBlending && ( material.blending !== NormalBlending || material.transparent !== false ) ) {
|
|
92
121
|
|
|
93
122
|
blending = this._getBlending( material );
|
|
94
123
|
|
|
@@ -228,9 +257,10 @@ class WebGPUPipelineUtils {
|
|
|
228
257
|
* Creates GPU render bundle encoder for the given render context.
|
|
229
258
|
*
|
|
230
259
|
* @param {RenderContext} renderContext - The render context.
|
|
260
|
+
* @param {?string} [label='renderBundleEncoder'] - The label.
|
|
231
261
|
* @return {GPURenderBundleEncoder} The GPU render bundle encoder.
|
|
232
262
|
*/
|
|
233
|
-
createBundleEncoder( renderContext ) {
|
|
263
|
+
createBundleEncoder( renderContext, label = 'renderBundleEncoder' ) {
|
|
234
264
|
|
|
235
265
|
const backend = this.backend;
|
|
236
266
|
const { utils, device } = backend;
|
|
@@ -240,7 +270,7 @@ class WebGPUPipelineUtils {
|
|
|
240
270
|
const sampleCount = this._getSampleCount( renderContext );
|
|
241
271
|
|
|
242
272
|
const descriptor = {
|
|
243
|
-
label:
|
|
273
|
+
label: label,
|
|
244
274
|
colorFormats: [ colorFormat ],
|
|
245
275
|
depthStencilFormat,
|
|
246
276
|
sampleCount
|
|
@@ -359,7 +389,7 @@ class WebGPUPipelineUtils {
|
|
|
359
389
|
break;
|
|
360
390
|
|
|
361
391
|
case MultiplyBlending:
|
|
362
|
-
setBlend( GPUBlendFactor.
|
|
392
|
+
setBlend( GPUBlendFactor.Dst, GPUBlendFactor.OneMinusSrcAlpha, GPUBlendFactor.Zero, GPUBlendFactor.One );
|
|
363
393
|
break;
|
|
364
394
|
|
|
365
395
|
}
|
|
@@ -373,15 +403,15 @@ class WebGPUPipelineUtils {
|
|
|
373
403
|
break;
|
|
374
404
|
|
|
375
405
|
case AdditiveBlending:
|
|
376
|
-
setBlend( GPUBlendFactor.SrcAlpha, GPUBlendFactor.One, GPUBlendFactor.
|
|
406
|
+
setBlend( GPUBlendFactor.SrcAlpha, GPUBlendFactor.One, GPUBlendFactor.One, GPUBlendFactor.One );
|
|
377
407
|
break;
|
|
378
408
|
|
|
379
409
|
case SubtractiveBlending:
|
|
380
|
-
|
|
410
|
+
console.error( 'THREE.WebGPURenderer: SubtractiveBlending requires material.premultipliedAlpha = true' );
|
|
381
411
|
break;
|
|
382
412
|
|
|
383
413
|
case MultiplyBlending:
|
|
384
|
-
|
|
414
|
+
console.error( 'THREE.WebGPURenderer: MultiplyBlending requires material.premultipliedAlpha = true' );
|
|
385
415
|
break;
|
|
386
416
|
|
|
387
417
|
}
|
|
@@ -443,7 +473,7 @@ class WebGPUPipelineUtils {
|
|
|
443
473
|
break;
|
|
444
474
|
|
|
445
475
|
case OneMinusDstColorFactor:
|
|
446
|
-
blendFactor = GPUBlendFactor.
|
|
476
|
+
blendFactor = GPUBlendFactor.OneMinusDst;
|
|
447
477
|
break;
|
|
448
478
|
|
|
449
479
|
case DstAlphaFactor:
|
|
@@ -682,7 +712,7 @@ class WebGPUPipelineUtils {
|
|
|
682
712
|
*
|
|
683
713
|
* @private
|
|
684
714
|
* @param {Material} material - The material.
|
|
685
|
-
* @return {
|
|
715
|
+
* @return {number} The GPU color write mask.
|
|
686
716
|
*/
|
|
687
717
|
_getColorWriteMask( material ) {
|
|
688
718
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
-
GPUTextureFormat, GPUAddressMode, GPUFilterMode, GPUTextureDimension, GPUFeatureName
|
|
2
|
+
GPUTextureFormat, GPUAddressMode, GPUFilterMode, GPUTextureDimension, GPUFeatureName, GPUTextureViewDimension
|
|
3
3
|
} from './WebGPUConstants.js';
|
|
4
|
+
import { ColorManagement } from '../../../math/ColorManagement.js';
|
|
4
5
|
|
|
5
6
|
import WebGPUTexturePassUtils from './WebGPUTexturePassUtils.js';
|
|
6
7
|
|
|
@@ -9,11 +10,10 @@ import {
|
|
|
9
10
|
NearestFilter, NearestMipmapNearestFilter, NearestMipmapLinearFilter,
|
|
10
11
|
RepeatWrapping, MirroredRepeatWrapping,
|
|
11
12
|
RGB_ETC2_Format, RGBA_ETC2_EAC_Format,
|
|
12
|
-
RGBAFormat, RGBFormat, RedFormat, RGFormat, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, UnsignedByteType, FloatType, HalfFloatType,
|
|
13
|
+
RGBAFormat, RGBFormat, RedFormat, RGFormat, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, UnsignedByteType, FloatType, HalfFloatType, SRGBTransfer, DepthFormat, DepthStencilFormat,
|
|
13
14
|
RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format,
|
|
14
15
|
RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, UnsignedIntType, UnsignedShortType, UnsignedInt248Type, UnsignedInt5999Type,
|
|
15
|
-
NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, IntType, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat
|
|
16
|
-
CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping
|
|
16
|
+
NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, IntType, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat
|
|
17
17
|
} from '../../../constants.js';
|
|
18
18
|
import { CubeTexture } from '../../../textures/CubeTexture.js';
|
|
19
19
|
import { DepthTexture } from '../../../textures/DepthTexture.js';
|
|
@@ -159,10 +159,6 @@ class WebGPUTextureUtils {
|
|
|
159
159
|
|
|
160
160
|
textureGPU = this._getDefaultCubeTextureGPU( format );
|
|
161
161
|
|
|
162
|
-
} else if ( texture.isVideoTexture ) {
|
|
163
|
-
|
|
164
|
-
this.backend.get( texture ).externalTexture = this._getDefaultVideoFrame();
|
|
165
|
-
|
|
166
162
|
} else {
|
|
167
163
|
|
|
168
164
|
textureGPU = this._getDefaultTextureGPU( format );
|
|
@@ -247,33 +243,23 @@ class WebGPUTextureUtils {
|
|
|
247
243
|
|
|
248
244
|
// texture creation
|
|
249
245
|
|
|
250
|
-
if (
|
|
251
|
-
|
|
252
|
-
const video = texture.source.data;
|
|
253
|
-
const videoFrame = new VideoFrame( video );
|
|
246
|
+
if ( format === undefined ) {
|
|
254
247
|
|
|
255
|
-
|
|
256
|
-
textureDescriptorGPU.size.height = videoFrame.displayHeight;
|
|
248
|
+
console.warn( 'WebGPURenderer: Texture format not supported.' );
|
|
257
249
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
textureData.externalTexture = video;
|
|
261
|
-
|
|
262
|
-
} else {
|
|
263
|
-
|
|
264
|
-
if ( format === undefined ) {
|
|
265
|
-
|
|
266
|
-
console.warn( 'WebGPURenderer: Texture format not supported.' );
|
|
250
|
+
this.createDefaultTexture( texture );
|
|
251
|
+
return;
|
|
267
252
|
|
|
268
|
-
|
|
269
|
-
return;
|
|
253
|
+
}
|
|
270
254
|
|
|
271
|
-
|
|
255
|
+
if ( texture.isCubeTexture ) {
|
|
272
256
|
|
|
273
|
-
|
|
257
|
+
textureDescriptorGPU.textureBindingViewDimension = GPUTextureViewDimension.Cube;
|
|
274
258
|
|
|
275
259
|
}
|
|
276
260
|
|
|
261
|
+
textureData.texture = backend.device.createTexture( textureDescriptorGPU );
|
|
262
|
+
|
|
277
263
|
if ( isMSAA ) {
|
|
278
264
|
|
|
279
265
|
const msaaTextureDescriptorGPU = Object.assign( {}, textureDescriptorGPU );
|
|
@@ -458,7 +444,7 @@ class WebGPUTextureUtils {
|
|
|
458
444
|
|
|
459
445
|
this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY );
|
|
460
446
|
|
|
461
|
-
} else if ( texture.isDataArrayTexture || texture.isData3DTexture ) {
|
|
447
|
+
} else if ( texture.isArrayTexture || texture.isDataArrayTexture || texture.isData3DTexture ) {
|
|
462
448
|
|
|
463
449
|
for ( let i = 0; i < options.image.depth; i ++ ) {
|
|
464
450
|
|
|
@@ -472,17 +458,11 @@ class WebGPUTextureUtils {
|
|
|
472
458
|
|
|
473
459
|
} else if ( texture.isCubeTexture ) {
|
|
474
460
|
|
|
475
|
-
this._copyCubeMapToTexture( options.images, textureData.texture, textureDescriptorGPU, texture.flipY );
|
|
476
|
-
|
|
477
|
-
} else if ( texture.isVideoTexture ) {
|
|
478
|
-
|
|
479
|
-
const video = texture.source.data;
|
|
480
|
-
|
|
481
|
-
textureData.externalTexture = video;
|
|
461
|
+
this._copyCubeMapToTexture( options.images, textureData.texture, textureDescriptorGPU, texture.flipY, texture.premultiplyAlpha );
|
|
482
462
|
|
|
483
463
|
} else {
|
|
484
464
|
|
|
485
|
-
this._copyImageToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY );
|
|
465
|
+
this._copyImageToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY, texture.premultiplyAlpha );
|
|
486
466
|
|
|
487
467
|
}
|
|
488
468
|
|
|
@@ -555,21 +535,6 @@ class WebGPUTextureUtils {
|
|
|
555
535
|
|
|
556
536
|
}
|
|
557
537
|
|
|
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
|
-
*/
|
|
565
|
-
_isEnvironmentTexture( texture ) {
|
|
566
|
-
|
|
567
|
-
const mapping = texture.mapping;
|
|
568
|
-
|
|
569
|
-
return ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) || ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );
|
|
570
|
-
|
|
571
|
-
}
|
|
572
|
-
|
|
573
538
|
/**
|
|
574
539
|
* Returns the default GPU texture for the given format.
|
|
575
540
|
*
|
|
@@ -624,33 +589,6 @@ class WebGPUTextureUtils {
|
|
|
624
589
|
|
|
625
590
|
}
|
|
626
591
|
|
|
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
|
-
*/
|
|
633
|
-
_getDefaultVideoFrame() {
|
|
634
|
-
|
|
635
|
-
let defaultVideoFrame = this.defaultVideoFrame;
|
|
636
|
-
|
|
637
|
-
if ( defaultVideoFrame === null ) {
|
|
638
|
-
|
|
639
|
-
const init = {
|
|
640
|
-
timestamp: 0,
|
|
641
|
-
codedWidth: 1,
|
|
642
|
-
codedHeight: 1,
|
|
643
|
-
format: 'RGBA',
|
|
644
|
-
};
|
|
645
|
-
|
|
646
|
-
this.defaultVideoFrame = defaultVideoFrame = new VideoFrame( new Uint8Array( [ 0, 0, 0, 0xff ] ), init );
|
|
647
|
-
|
|
648
|
-
}
|
|
649
|
-
|
|
650
|
-
return defaultVideoFrame;
|
|
651
|
-
|
|
652
|
-
}
|
|
653
|
-
|
|
654
592
|
/**
|
|
655
593
|
* Uploads cube texture image data to the GPU memory.
|
|
656
594
|
*
|
|
@@ -659,8 +597,9 @@ class WebGPUTextureUtils {
|
|
|
659
597
|
* @param {GPUTexture} textureGPU - The GPU texture.
|
|
660
598
|
* @param {Object} textureDescriptorGPU - The GPU texture descriptor.
|
|
661
599
|
* @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.
|
|
600
|
+
* @param {boolean} premultiplyAlpha - Whether the texture should have its RGB channels premultiplied by the alpha channel or not.
|
|
662
601
|
*/
|
|
663
|
-
_copyCubeMapToTexture( images, textureGPU, textureDescriptorGPU, flipY ) {
|
|
602
|
+
_copyCubeMapToTexture( images, textureGPU, textureDescriptorGPU, flipY, premultiplyAlpha ) {
|
|
664
603
|
|
|
665
604
|
for ( let i = 0; i < 6; i ++ ) {
|
|
666
605
|
|
|
@@ -674,7 +613,7 @@ class WebGPUTextureUtils {
|
|
|
674
613
|
|
|
675
614
|
} else {
|
|
676
615
|
|
|
677
|
-
this._copyImageToTexture( image, textureGPU, textureDescriptorGPU, flipIndex, flipY );
|
|
616
|
+
this._copyImageToTexture( image, textureGPU, textureDescriptorGPU, flipIndex, flipY, premultiplyAlpha );
|
|
678
617
|
|
|
679
618
|
}
|
|
680
619
|
|
|
@@ -691,8 +630,9 @@ class WebGPUTextureUtils {
|
|
|
691
630
|
* @param {Object} textureDescriptorGPU - The GPU texture descriptor.
|
|
692
631
|
* @param {number} originDepth - The origin depth.
|
|
693
632
|
* @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.
|
|
633
|
+
* @param {boolean} premultiplyAlpha - Whether the texture should have its RGB channels premultiplied by the alpha channel or not.
|
|
694
634
|
*/
|
|
695
|
-
_copyImageToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY ) {
|
|
635
|
+
_copyImageToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, premultiplyAlpha ) {
|
|
696
636
|
|
|
697
637
|
const device = this.backend.device;
|
|
698
638
|
|
|
@@ -703,10 +643,11 @@ class WebGPUTextureUtils {
|
|
|
703
643
|
}, {
|
|
704
644
|
texture: textureGPU,
|
|
705
645
|
mipLevel: 0,
|
|
706
|
-
origin: { x: 0, y: 0, z: originDepth }
|
|
646
|
+
origin: { x: 0, y: 0, z: originDepth },
|
|
647
|
+
premultipliedAlpha: premultiplyAlpha
|
|
707
648
|
}, {
|
|
708
|
-
width:
|
|
709
|
-
height:
|
|
649
|
+
width: textureDescriptorGPU.size.width,
|
|
650
|
+
height: textureDescriptorGPU.size.height,
|
|
710
651
|
depthOrArrayLayers: 1
|
|
711
652
|
}
|
|
712
653
|
);
|
|
@@ -824,7 +765,7 @@ class WebGPUTextureUtils {
|
|
|
824
765
|
const device = this.backend.device;
|
|
825
766
|
|
|
826
767
|
const blockData = this._getBlockData( textureDescriptorGPU.format );
|
|
827
|
-
const
|
|
768
|
+
const isArrayTexture = textureDescriptorGPU.size.depthOrArrayLayers > 1;
|
|
828
769
|
|
|
829
770
|
for ( let i = 0; i < mipmaps.length; i ++ ) {
|
|
830
771
|
|
|
@@ -832,7 +773,7 @@ class WebGPUTextureUtils {
|
|
|
832
773
|
|
|
833
774
|
const width = mipmap.width;
|
|
834
775
|
const height = mipmap.height;
|
|
835
|
-
const depth =
|
|
776
|
+
const depth = isArrayTexture ? textureDescriptorGPU.size.depthOrArrayLayers : 1;
|
|
836
777
|
|
|
837
778
|
const bytesPerRow = Math.ceil( width / blockData.width ) * blockData.byteLength;
|
|
838
779
|
const bytesPerImage = bytesPerRow * Math.ceil( height / blockData.height );
|
|
@@ -1084,7 +1025,7 @@ class WebGPUTextureUtils {
|
|
|
1084
1025
|
|
|
1085
1026
|
let dimension;
|
|
1086
1027
|
|
|
1087
|
-
if ( texture.isData3DTexture ) {
|
|
1028
|
+
if ( texture.is3DTexture || texture.isData3DTexture ) {
|
|
1088
1029
|
|
|
1089
1030
|
dimension = GPUTextureDimension.ThreeD;
|
|
1090
1031
|
|
|
@@ -1113,6 +1054,7 @@ export function getFormat( texture, device = null ) {
|
|
|
1113
1054
|
const format = texture.format;
|
|
1114
1055
|
const type = texture.type;
|
|
1115
1056
|
const colorSpace = texture.colorSpace;
|
|
1057
|
+
const transfer = ColorManagement.getTransfer( colorSpace );
|
|
1116
1058
|
|
|
1117
1059
|
let formatGPU;
|
|
1118
1060
|
|
|
@@ -1121,83 +1063,83 @@ export function getFormat( texture, device = null ) {
|
|
|
1121
1063
|
switch ( format ) {
|
|
1122
1064
|
|
|
1123
1065
|
case RGBA_S3TC_DXT1_Format:
|
|
1124
|
-
formatGPU = (
|
|
1066
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC1RGBAUnormSRGB : GPUTextureFormat.BC1RGBAUnorm;
|
|
1125
1067
|
break;
|
|
1126
1068
|
|
|
1127
1069
|
case RGBA_S3TC_DXT3_Format:
|
|
1128
|
-
formatGPU = (
|
|
1070
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC2RGBAUnormSRGB : GPUTextureFormat.BC2RGBAUnorm;
|
|
1129
1071
|
break;
|
|
1130
1072
|
|
|
1131
1073
|
case RGBA_S3TC_DXT5_Format:
|
|
1132
|
-
formatGPU = (
|
|
1074
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC3RGBAUnormSRGB : GPUTextureFormat.BC3RGBAUnorm;
|
|
1133
1075
|
break;
|
|
1134
1076
|
|
|
1135
1077
|
case RGB_ETC2_Format:
|
|
1136
|
-
formatGPU = (
|
|
1078
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ETC2RGB8UnormSRGB : GPUTextureFormat.ETC2RGB8Unorm;
|
|
1137
1079
|
break;
|
|
1138
1080
|
|
|
1139
1081
|
case RGBA_ETC2_EAC_Format:
|
|
1140
|
-
formatGPU = (
|
|
1082
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ETC2RGBA8UnormSRGB : GPUTextureFormat.ETC2RGBA8Unorm;
|
|
1141
1083
|
break;
|
|
1142
1084
|
|
|
1143
1085
|
case RGBA_ASTC_4x4_Format:
|
|
1144
|
-
formatGPU = (
|
|
1086
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC4x4UnormSRGB : GPUTextureFormat.ASTC4x4Unorm;
|
|
1145
1087
|
break;
|
|
1146
1088
|
|
|
1147
1089
|
case RGBA_ASTC_5x4_Format:
|
|
1148
|
-
formatGPU = (
|
|
1090
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC5x4UnormSRGB : GPUTextureFormat.ASTC5x4Unorm;
|
|
1149
1091
|
break;
|
|
1150
1092
|
|
|
1151
1093
|
case RGBA_ASTC_5x5_Format:
|
|
1152
|
-
formatGPU = (
|
|
1094
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC5x5UnormSRGB : GPUTextureFormat.ASTC5x5Unorm;
|
|
1153
1095
|
break;
|
|
1154
1096
|
|
|
1155
1097
|
case RGBA_ASTC_6x5_Format:
|
|
1156
|
-
formatGPU = (
|
|
1098
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC6x5UnormSRGB : GPUTextureFormat.ASTC6x5Unorm;
|
|
1157
1099
|
break;
|
|
1158
1100
|
|
|
1159
1101
|
case RGBA_ASTC_6x6_Format:
|
|
1160
|
-
formatGPU = (
|
|
1102
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC6x6UnormSRGB : GPUTextureFormat.ASTC6x6Unorm;
|
|
1161
1103
|
break;
|
|
1162
1104
|
|
|
1163
1105
|
case RGBA_ASTC_8x5_Format:
|
|
1164
|
-
formatGPU = (
|
|
1106
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC8x5UnormSRGB : GPUTextureFormat.ASTC8x5Unorm;
|
|
1165
1107
|
break;
|
|
1166
1108
|
|
|
1167
1109
|
case RGBA_ASTC_8x6_Format:
|
|
1168
|
-
formatGPU = (
|
|
1110
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC8x6UnormSRGB : GPUTextureFormat.ASTC8x6Unorm;
|
|
1169
1111
|
break;
|
|
1170
1112
|
|
|
1171
1113
|
case RGBA_ASTC_8x8_Format:
|
|
1172
|
-
formatGPU = (
|
|
1114
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC8x8UnormSRGB : GPUTextureFormat.ASTC8x8Unorm;
|
|
1173
1115
|
break;
|
|
1174
1116
|
|
|
1175
1117
|
case RGBA_ASTC_10x5_Format:
|
|
1176
|
-
formatGPU = (
|
|
1118
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC10x5UnormSRGB : GPUTextureFormat.ASTC10x5Unorm;
|
|
1177
1119
|
break;
|
|
1178
1120
|
|
|
1179
1121
|
case RGBA_ASTC_10x6_Format:
|
|
1180
|
-
formatGPU = (
|
|
1122
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC10x6UnormSRGB : GPUTextureFormat.ASTC10x6Unorm;
|
|
1181
1123
|
break;
|
|
1182
1124
|
|
|
1183
1125
|
case RGBA_ASTC_10x8_Format:
|
|
1184
|
-
formatGPU = (
|
|
1126
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC10x8UnormSRGB : GPUTextureFormat.ASTC10x8Unorm;
|
|
1185
1127
|
break;
|
|
1186
1128
|
|
|
1187
1129
|
case RGBA_ASTC_10x10_Format:
|
|
1188
|
-
formatGPU = (
|
|
1130
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC10x10UnormSRGB : GPUTextureFormat.ASTC10x10Unorm;
|
|
1189
1131
|
break;
|
|
1190
1132
|
|
|
1191
1133
|
case RGBA_ASTC_12x10_Format:
|
|
1192
|
-
formatGPU = (
|
|
1134
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC12x10UnormSRGB : GPUTextureFormat.ASTC12x10Unorm;
|
|
1193
1135
|
break;
|
|
1194
1136
|
|
|
1195
1137
|
case RGBA_ASTC_12x12_Format:
|
|
1196
|
-
formatGPU = (
|
|
1138
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC12x12UnormSRGB : GPUTextureFormat.ASTC12x12Unorm;
|
|
1197
1139
|
break;
|
|
1198
1140
|
|
|
1199
1141
|
case RGBAFormat:
|
|
1200
|
-
formatGPU = (
|
|
1142
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.RGBA8UnormSRGB : GPUTextureFormat.RGBA8Unorm;
|
|
1201
1143
|
break;
|
|
1202
1144
|
|
|
1203
1145
|
default:
|
|
@@ -1233,7 +1175,7 @@ export function getFormat( texture, device = null ) {
|
|
|
1233
1175
|
break;
|
|
1234
1176
|
|
|
1235
1177
|
case UnsignedByteType:
|
|
1236
|
-
formatGPU = (
|
|
1178
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.RGBA8UnormSRGB : GPUTextureFormat.RGBA8Unorm;
|
|
1237
1179
|
break;
|
|
1238
1180
|
|
|
1239
1181
|
case HalfFloatType:
|
|
@@ -161,29 +161,14 @@ class WebGPUUtils {
|
|
|
161
161
|
/**
|
|
162
162
|
* Returns a modified sample count from the given sample count value.
|
|
163
163
|
*
|
|
164
|
-
* That is required since WebGPU
|
|
164
|
+
* That is required since WebGPU only supports either 1 or 4.
|
|
165
165
|
*
|
|
166
166
|
* @param {number} sampleCount - The input sample count.
|
|
167
167
|
* @return {number} The (potentially updated) output sample count.
|
|
168
168
|
*/
|
|
169
169
|
getSampleCount( sampleCount ) {
|
|
170
170
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
if ( sampleCount > 1 ) {
|
|
174
|
-
|
|
175
|
-
// WebGPU only supports power-of-two sample counts and 2 is not a valid value
|
|
176
|
-
count = Math.pow( 2, Math.floor( Math.log2( sampleCount ) ) );
|
|
177
|
-
|
|
178
|
-
if ( count === 2 ) {
|
|
179
|
-
|
|
180
|
-
count = 4;
|
|
181
|
-
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
return count;
|
|
171
|
+
return sampleCount >= 4 ? 4 : 1;
|
|
187
172
|
|
|
188
173
|
}
|
|
189
174
|
|