super-three 0.179.0 → 0.184.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +14522 -12207
- package/build/three.core.js +12005 -10954
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +2270 -1005
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +63 -18
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +16573 -7890
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +16533 -7888
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +12 -4
- package/examples/jsm/animation/CCDIKSolver.js +8 -4
- package/examples/jsm/controls/ArcballControls.js +15 -12
- package/examples/jsm/controls/DragControls.js +9 -59
- package/examples/jsm/controls/FirstPersonControls.js +61 -57
- package/examples/jsm/controls/FlyControls.js +5 -1
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +113 -10
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +9 -9
- package/examples/jsm/controls/TransformControls.js +35 -3
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -2
- package/examples/jsm/exporters/GLTFExporter.js +185 -34
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +31 -5
- package/examples/jsm/geometries/DecalGeometry.js +3 -3
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +21 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +110 -13
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +542 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +238 -0
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +380 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +268 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +2072 -0
- package/examples/jsm/inspector/ui/Style.js +1667 -0
- package/examples/jsm/inspector/ui/Tab.js +265 -0
- package/examples/jsm/inspector/ui/Values.js +476 -0
- package/examples/jsm/inspector/ui/utils.js +69 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +3 -3
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +27 -4029
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +692 -53
- package/examples/jsm/loaders/FBXLoader.js +237 -39
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +159 -185
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +162 -53
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +9 -41
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -2
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +91 -7
- package/examples/jsm/objects/SkyMesh.js +151 -17
- package/examples/jsm/objects/Water.js +7 -6
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +11 -13
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +175 -61
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +21 -8
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +7 -6
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +52 -10
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +23 -9
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
- package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +59 -9
- package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +81 -20
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +638 -0
- package/examples/jsm/tsl/display/SSRNode.js +186 -69
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +381 -75
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
- package/package.json +27 -38
- package/src/Three.Core.js +7 -3
- package/src/Three.TSL.js +61 -16
- package/src/Three.WebGPU.Nodes.js +7 -0
- package/src/Three.WebGPU.js +11 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +21 -5
- package/src/animation/AnimationMixer.js +9 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +54 -14
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +11 -10
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +100 -7
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +24 -12
- package/src/core/Clock.js +7 -0
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +55 -6
- package/src/core/Raycaster.js +4 -3
- package/src/core/RenderTarget.js +14 -5
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +259 -57
- package/src/extras/TextureUtils.js +6 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +10 -8
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +9 -3
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +4 -1
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +13 -2
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +30 -2
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +4 -4
- package/src/loaders/ImageBitmapLoader.js +17 -13
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +9 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +6 -4
- package/src/loaders/ObjectLoader.js +57 -17
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +5 -4
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +11 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +11 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +2 -1
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +22 -3
- package/src/materials/nodes/Line2NodeMaterial.js +36 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +95 -35
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +23 -21
- package/src/math/Matrix2.js +14 -10
- package/src/math/Matrix3.js +15 -11
- package/src/math/Matrix4.js +94 -81
- package/src/math/Plane.js +5 -4
- package/src/math/Quaternion.js +60 -84
- package/src/math/Sphere.js +1 -1
- package/src/math/Spherical.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -65
- package/src/nodes/TSL.js +11 -8
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +30 -3
- package/src/nodes/accessors/Camera.js +260 -13
- package/src/nodes/accessors/ClippingNode.js +10 -9
- package/src/nodes/accessors/CubeTextureNode.js +32 -6
- package/src/nodes/accessors/InstanceNode.js +164 -39
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +16 -15
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +51 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
- package/src/nodes/accessors/ReferenceNode.js +11 -10
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -24
- package/src/nodes/accessors/StorageTextureNode.js +62 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +41 -31
- package/src/nodes/accessors/TextureNode.js +193 -63
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +25 -5
- package/src/nodes/code/FunctionNode.js +25 -3
- package/src/nodes/core/ArrayNode.js +22 -2
- package/src/nodes/core/AssignNode.js +6 -5
- package/src/nodes/core/AttributeNode.js +5 -4
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +133 -15
- package/src/nodes/core/IndexNode.js +4 -3
- package/src/nodes/core/InputNode.js +3 -2
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +264 -46
- package/src/nodes/core/NodeBuilder.js +453 -87
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +31 -23
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +25 -97
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +34 -3
- package/src/nodes/core/PropertyNode.js +26 -3
- package/src/nodes/core/StackNode.js +99 -23
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +22 -8
- package/src/nodes/core/StructTypeNode.js +13 -18
- package/src/nodes/core/SubBuildNode.js +4 -4
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +37 -13
- package/src/nodes/core/VarNode.js +96 -34
- package/src/nodes/core/VaryingNode.js +2 -18
- package/src/nodes/display/BlendModes.js +0 -63
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +18 -1
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +41 -5
- package/src/nodes/display/PassNode.js +175 -25
- package/src/nodes/display/RenderOutputNode.js +35 -9
- package/src/nodes/display/ScreenNode.js +47 -15
- package/src/nodes/display/ToneMappingNode.js +32 -5
- package/src/nodes/display/ToonOutlinePassNode.js +10 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +72 -14
- package/src/nodes/fog/Fog.js +18 -34
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +128 -46
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +44 -6
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
- package/src/nodes/gpgpu/ComputeNode.js +76 -38
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +34 -9
- package/src/nodes/lighting/LightsNode.js +10 -32
- package/src/nodes/lighting/PointShadowNode.js +167 -148
- package/src/nodes/lighting/ShadowFilterNode.js +55 -65
- package/src/nodes/lighting/ShadowNode.js +189 -44
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +25 -8
- package/src/nodes/math/MathNode.js +98 -57
- package/src/nodes/math/OperatorNode.js +8 -5
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +111 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -3
- package/src/nodes/tsl/TSLCore.js +488 -166
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +14 -13
- package/src/nodes/utils/EventNode.js +67 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +7 -4
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +60 -8
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +60 -1
- package/src/nodes/utils/RTTNode.js +14 -4
- package/src/nodes/utils/ReflectorNode.js +61 -11
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +12 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +46 -18
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +3 -2
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +12 -2
- package/src/objects/SkinnedMesh.js +29 -10
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +372 -179
- package/src/renderers/common/Animation.js +16 -4
- package/src/renderers/common/Attributes.js +16 -2
- package/src/renderers/common/Backend.js +137 -35
- package/src/renderers/common/Background.js +28 -14
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +83 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +55 -3
- package/src/renderers/common/Info.js +337 -6
- package/src/renderers/common/InspectorBase.js +151 -0
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +41 -8
- package/src/renderers/common/PostProcessing.js +9 -226
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +18 -2
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +32 -6
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +22 -6
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +927 -335
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +52 -14
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +208 -47
- package/src/renderers/common/TimestampQueryPool.js +70 -6
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +64 -2
- package/src/renderers/common/XRManager.js +79 -51
- package/src/renderers/common/extras/PMREMGenerator.js +176 -79
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +49 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +8 -5
- package/src/renderers/shaders/UniformsUtils.js +52 -9
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +11 -5
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +63 -122
- package/src/renderers/webgl/WebGLPrograms.js +65 -52
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +191 -26
- package/src/renderers/webgl/WebGLState.js +79 -40
- package/src/renderers/webgl/WebGLTextures.js +234 -68
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
- package/src/renderers/webgl/WebGLUtils.js +8 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
- package/src/renderers/webgpu/WebGPUBackend.js +403 -253
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +5 -3
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
- package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +45 -29
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +5 -4
- package/src/textures/Texture.js +19 -7
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +344 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -144
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -13,11 +13,14 @@ import {
|
|
|
13
13
|
RGBAFormat, RGBFormat, RedFormat, RGFormat, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, UnsignedByteType, FloatType, HalfFloatType, SRGBTransfer, DepthFormat, DepthStencilFormat,
|
|
14
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,
|
|
15
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,
|
|
16
|
-
NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, IntType, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat
|
|
16
|
+
NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, IntType, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat,
|
|
17
|
+
UnsignedInt101111Type, RGBA_BPTC_Format, RGB_ETC1_Format, RGB_S3TC_DXT1_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format,
|
|
18
|
+
R11_EAC_Format, SIGNED_R11_EAC_Format, RG11_EAC_Format, SIGNED_RG11_EAC_Format,
|
|
19
|
+
Compatibility
|
|
17
20
|
} from '../../../constants.js';
|
|
18
21
|
import { CubeTexture } from '../../../textures/CubeTexture.js';
|
|
19
|
-
import { DepthTexture } from '../../../textures/DepthTexture.js';
|
|
20
22
|
import { Texture } from '../../../textures/Texture.js';
|
|
23
|
+
import { warn, error } from '../../../utils.js';
|
|
21
24
|
|
|
22
25
|
const _compareToWebGPU = {
|
|
23
26
|
[ NeverCompare ]: 'never',
|
|
@@ -86,20 +89,11 @@ class WebGPUTextureUtils {
|
|
|
86
89
|
this.defaultVideoFrame = null;
|
|
87
90
|
|
|
88
91
|
/**
|
|
89
|
-
*
|
|
92
|
+
* A cache of shared texture samplers.
|
|
90
93
|
*
|
|
91
|
-
* @type {
|
|
92
|
-
* @default null
|
|
94
|
+
* @type {Map<string, Object>}
|
|
93
95
|
*/
|
|
94
|
-
this.
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Represents the depth attachment of the default framebuffer.
|
|
98
|
-
*
|
|
99
|
-
* @type {DepthTexture}
|
|
100
|
-
*/
|
|
101
|
-
this.depthTexture = new DepthTexture();
|
|
102
|
-
this.depthTexture.name = 'depthBuffer';
|
|
96
|
+
this._samplerCache = new Map();
|
|
103
97
|
|
|
104
98
|
}
|
|
105
99
|
|
|
@@ -107,39 +101,90 @@ class WebGPUTextureUtils {
|
|
|
107
101
|
* Creates a GPU sampler for the given texture.
|
|
108
102
|
*
|
|
109
103
|
* @param {Texture} texture - The texture to create the sampler for.
|
|
104
|
+
* @return {string} The current sampler key.
|
|
110
105
|
*/
|
|
111
|
-
|
|
106
|
+
updateSampler( texture ) {
|
|
112
107
|
|
|
113
108
|
const backend = this.backend;
|
|
114
|
-
const device = backend.device;
|
|
115
|
-
|
|
116
|
-
const textureGPU = backend.get( texture );
|
|
117
|
-
|
|
118
|
-
const samplerDescriptorGPU = {
|
|
119
|
-
addressModeU: this._convertAddressMode( texture.wrapS ),
|
|
120
|
-
addressModeV: this._convertAddressMode( texture.wrapT ),
|
|
121
|
-
addressModeW: this._convertAddressMode( texture.wrapR ),
|
|
122
|
-
magFilter: this._convertFilterMode( texture.magFilter ),
|
|
123
|
-
minFilter: this._convertFilterMode( texture.minFilter ),
|
|
124
|
-
mipmapFilter: this._convertFilterMode( texture.minFilter ),
|
|
125
|
-
maxAnisotropy: 1
|
|
126
|
-
};
|
|
127
109
|
|
|
128
|
-
|
|
110
|
+
const samplerKey = texture.minFilter + '-' + texture.magFilter + '-' +
|
|
111
|
+
texture.wrapS + '-' + texture.wrapT + '-' + ( texture.wrapR || '0' ) + '-' +
|
|
112
|
+
texture.anisotropy + '-' + ( texture.compareFunction || 0 );
|
|
113
|
+
|
|
114
|
+
let samplerData = this._samplerCache.get( samplerKey );
|
|
115
|
+
|
|
116
|
+
if ( samplerData === undefined ) {
|
|
117
|
+
|
|
118
|
+
const samplerDescriptorGPU = {
|
|
119
|
+
addressModeU: this._convertAddressMode( texture.wrapS ),
|
|
120
|
+
addressModeV: this._convertAddressMode( texture.wrapT ),
|
|
121
|
+
addressModeW: this._convertAddressMode( texture.wrapR ),
|
|
122
|
+
magFilter: this._convertFilterMode( texture.magFilter ),
|
|
123
|
+
minFilter: this._convertFilterMode( texture.minFilter ),
|
|
124
|
+
mipmapFilter: this._convertFilterMode( texture.minFilter ),
|
|
125
|
+
maxAnisotropy: 1
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
// Depth textures without compare function must use non-filtering (nearest) sampling
|
|
129
|
+
if ( texture.isDepthTexture && texture.compareFunction === null ) {
|
|
130
|
+
|
|
131
|
+
samplerDescriptorGPU.magFilter = GPUFilterMode.Nearest;
|
|
132
|
+
samplerDescriptorGPU.minFilter = GPUFilterMode.Nearest;
|
|
133
|
+
samplerDescriptorGPU.mipmapFilter = GPUFilterMode.Nearest;
|
|
134
|
+
|
|
135
|
+
}
|
|
129
136
|
|
|
130
|
-
|
|
137
|
+
// anisotropy can only be used when all filter modes are set to linear.
|
|
131
138
|
|
|
132
|
-
samplerDescriptorGPU.
|
|
139
|
+
if ( samplerDescriptorGPU.magFilter === GPUFilterMode.Linear && samplerDescriptorGPU.minFilter === GPUFilterMode.Linear && samplerDescriptorGPU.mipmapFilter === GPUFilterMode.Linear ) {
|
|
140
|
+
|
|
141
|
+
samplerDescriptorGPU.maxAnisotropy = texture.anisotropy;
|
|
142
|
+
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if ( texture.isDepthTexture && texture.compareFunction !== null && backend.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {
|
|
146
|
+
|
|
147
|
+
samplerDescriptorGPU.compare = _compareToWebGPU[ texture.compareFunction ];
|
|
148
|
+
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const sampler = backend.device.createSampler( samplerDescriptorGPU );
|
|
152
|
+
|
|
153
|
+
samplerData = { sampler, usedTimes: 0 };
|
|
154
|
+
|
|
155
|
+
this._samplerCache.set( samplerKey, samplerData );
|
|
133
156
|
|
|
134
157
|
}
|
|
135
158
|
|
|
136
|
-
|
|
159
|
+
const textureData = backend.get( texture );
|
|
160
|
+
|
|
161
|
+
if ( textureData.sampler !== samplerData.sampler ) {
|
|
137
162
|
|
|
138
|
-
|
|
163
|
+
// check if previous sampler is unused so it can be deleted
|
|
164
|
+
|
|
165
|
+
if ( textureData.sampler !== undefined ) {
|
|
166
|
+
|
|
167
|
+
const oldSamplerData = this._samplerCache.get( textureData.samplerKey );
|
|
168
|
+
oldSamplerData.usedTimes --;
|
|
169
|
+
|
|
170
|
+
if ( oldSamplerData.usedTimes === 0 ) {
|
|
171
|
+
|
|
172
|
+
this._samplerCache.delete( textureData.samplerKey );
|
|
173
|
+
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// update to new sampler data
|
|
179
|
+
|
|
180
|
+
textureData.samplerKey = samplerKey;
|
|
181
|
+
textureData.sampler = samplerData.sampler;
|
|
182
|
+
|
|
183
|
+
samplerData.usedTimes ++;
|
|
139
184
|
|
|
140
185
|
}
|
|
141
186
|
|
|
142
|
-
|
|
187
|
+
return samplerKey;
|
|
143
188
|
|
|
144
189
|
}
|
|
145
190
|
|
|
@@ -153,7 +198,7 @@ class WebGPUTextureUtils {
|
|
|
153
198
|
|
|
154
199
|
let textureGPU;
|
|
155
200
|
|
|
156
|
-
const format = getFormat( texture );
|
|
201
|
+
const format = getFormat( texture, this.backend.device );
|
|
157
202
|
|
|
158
203
|
if ( texture.isCubeTexture ) {
|
|
159
204
|
|
|
@@ -186,6 +231,15 @@ class WebGPUTextureUtils {
|
|
|
186
231
|
|
|
187
232
|
}
|
|
188
233
|
|
|
234
|
+
if ( texture.isExternalTexture ) {
|
|
235
|
+
|
|
236
|
+
textureData.texture = texture.sourceTexture;
|
|
237
|
+
textureData.initialized = true;
|
|
238
|
+
|
|
239
|
+
return;
|
|
240
|
+
|
|
241
|
+
}
|
|
242
|
+
|
|
189
243
|
if ( options.needsMipmaps === undefined ) options.needsMipmaps = false;
|
|
190
244
|
if ( options.levels === undefined ) options.levels = 1;
|
|
191
245
|
if ( options.depth === undefined ) options.depth = 1;
|
|
@@ -221,7 +275,7 @@ class WebGPUTextureUtils {
|
|
|
221
275
|
|
|
222
276
|
}
|
|
223
277
|
|
|
224
|
-
if ( texture.isCompressedTexture !== true && texture.isCompressedArrayTexture !== true ) {
|
|
278
|
+
if ( texture.isCompressedTexture !== true && texture.isCompressedArrayTexture !== true && format !== GPUTextureFormat.RGB9E5UFloat ) {
|
|
225
279
|
|
|
226
280
|
usage |= GPUTextureUsage.RENDER_ATTACHMENT;
|
|
227
281
|
|
|
@@ -245,7 +299,7 @@ class WebGPUTextureUtils {
|
|
|
245
299
|
|
|
246
300
|
if ( format === undefined ) {
|
|
247
301
|
|
|
248
|
-
|
|
302
|
+
warn( 'WebGPURenderer: Texture format not supported.' );
|
|
249
303
|
|
|
250
304
|
this.createDefaultTexture( texture );
|
|
251
305
|
return;
|
|
@@ -258,7 +312,17 @@ class WebGPUTextureUtils {
|
|
|
258
312
|
|
|
259
313
|
}
|
|
260
314
|
|
|
261
|
-
|
|
315
|
+
try {
|
|
316
|
+
|
|
317
|
+
textureData.texture = backend.device.createTexture( textureDescriptorGPU );
|
|
318
|
+
|
|
319
|
+
} catch ( e ) {
|
|
320
|
+
|
|
321
|
+
warn( 'WebGPURenderer: Failed to create texture with descriptor:', textureDescriptorGPU );
|
|
322
|
+
this.createDefaultTexture( texture );
|
|
323
|
+
return;
|
|
324
|
+
|
|
325
|
+
}
|
|
262
326
|
|
|
263
327
|
if ( isMSAA ) {
|
|
264
328
|
|
|
@@ -266,6 +330,7 @@ class WebGPUTextureUtils {
|
|
|
266
330
|
|
|
267
331
|
msaaTextureDescriptorGPU.label = msaaTextureDescriptorGPU.label + '-msaa';
|
|
268
332
|
msaaTextureDescriptorGPU.sampleCount = samples;
|
|
333
|
+
msaaTextureDescriptorGPU.mipLevelCount = 1; // See https://www.w3.org/TR/webgpu/#texture-creation
|
|
269
334
|
|
|
270
335
|
textureData.msaaTexture = backend.device.createTexture( msaaTextureDescriptorGPU );
|
|
271
336
|
|
|
@@ -281,13 +346,14 @@ class WebGPUTextureUtils {
|
|
|
281
346
|
* Destroys the GPU data for the given texture object.
|
|
282
347
|
*
|
|
283
348
|
* @param {Texture} texture - The texture.
|
|
349
|
+
* @param {boolean} [isDefaultTexture=false] - Whether the texture uses a default GPU texture or not.
|
|
284
350
|
*/
|
|
285
|
-
destroyTexture( texture ) {
|
|
351
|
+
destroyTexture( texture, isDefaultTexture = false ) {
|
|
286
352
|
|
|
287
353
|
const backend = this.backend;
|
|
288
354
|
const textureData = backend.get( texture );
|
|
289
355
|
|
|
290
|
-
if ( textureData.texture !== undefined ) textureData.texture.destroy();
|
|
356
|
+
if ( textureData.texture !== undefined && isDefaultTexture === false ) textureData.texture.destroy();
|
|
291
357
|
|
|
292
358
|
if ( textureData.msaaTexture !== undefined ) textureData.msaaTexture.destroy();
|
|
293
359
|
|
|
@@ -295,48 +361,17 @@ class WebGPUTextureUtils {
|
|
|
295
361
|
|
|
296
362
|
}
|
|
297
363
|
|
|
298
|
-
/**
|
|
299
|
-
* Destroys the GPU sampler for the given texture.
|
|
300
|
-
*
|
|
301
|
-
* @param {Texture} texture - The texture to destroy the sampler for.
|
|
302
|
-
*/
|
|
303
|
-
destroySampler( texture ) {
|
|
304
|
-
|
|
305
|
-
const backend = this.backend;
|
|
306
|
-
const textureData = backend.get( texture );
|
|
307
|
-
|
|
308
|
-
delete textureData.sampler;
|
|
309
|
-
|
|
310
|
-
}
|
|
311
|
-
|
|
312
364
|
/**
|
|
313
365
|
* Generates mipmaps for the given texture.
|
|
314
366
|
*
|
|
315
367
|
* @param {Texture} texture - The texture.
|
|
368
|
+
* @param {?GPUCommandEncoder} [encoder=null] - An optional command encoder used to generate mipmaps.
|
|
316
369
|
*/
|
|
317
|
-
generateMipmaps( texture ) {
|
|
370
|
+
generateMipmaps( texture, encoder = null ) {
|
|
318
371
|
|
|
319
372
|
const textureData = this.backend.get( texture );
|
|
320
373
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
for ( let i = 0; i < 6; i ++ ) {
|
|
324
|
-
|
|
325
|
-
this._generateMipmaps( textureData.texture, textureData.textureDescriptorGPU, i );
|
|
326
|
-
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
} else {
|
|
330
|
-
|
|
331
|
-
const depth = texture.image.depth || 1;
|
|
332
|
-
|
|
333
|
-
for ( let i = 0; i < depth; i ++ ) {
|
|
334
|
-
|
|
335
|
-
this._generateMipmaps( textureData.texture, textureData.textureDescriptorGPU, i );
|
|
336
|
-
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
}
|
|
374
|
+
this._generateMipmaps( textureData.texture, encoder );
|
|
340
375
|
|
|
341
376
|
}
|
|
342
377
|
|
|
@@ -348,24 +383,47 @@ class WebGPUTextureUtils {
|
|
|
348
383
|
*/
|
|
349
384
|
getColorBuffer() {
|
|
350
385
|
|
|
351
|
-
if ( this.colorBuffer ) this.colorBuffer.destroy();
|
|
352
|
-
|
|
353
386
|
const backend = this.backend;
|
|
387
|
+
const canvasTarget = backend.renderer.getCanvasTarget();
|
|
354
388
|
const { width, height } = backend.getDrawingBufferSize();
|
|
389
|
+
const samples = backend.renderer.currentSamples;
|
|
390
|
+
|
|
391
|
+
const colorTexture = canvasTarget.colorTexture;
|
|
392
|
+
const colorTextureData = backend.get( colorTexture );
|
|
355
393
|
|
|
356
|
-
|
|
394
|
+
if ( colorTexture.width === width && colorTexture.height === height && colorTexture.samples === samples ) {
|
|
395
|
+
|
|
396
|
+
return colorTextureData.texture;
|
|
397
|
+
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
// recreate
|
|
401
|
+
|
|
402
|
+
let colorBuffer = colorTextureData.texture;
|
|
403
|
+
|
|
404
|
+
if ( colorBuffer ) colorBuffer.destroy();
|
|
405
|
+
|
|
406
|
+
colorBuffer = backend.device.createTexture( {
|
|
357
407
|
label: 'colorBuffer',
|
|
358
408
|
size: {
|
|
359
409
|
width: width,
|
|
360
410
|
height: height,
|
|
361
411
|
depthOrArrayLayers: 1
|
|
362
412
|
},
|
|
363
|
-
sampleCount: backend.utils.getSampleCount( backend.renderer.
|
|
413
|
+
sampleCount: backend.utils.getSampleCount( backend.renderer.currentSamples ),
|
|
364
414
|
format: backend.utils.getPreferredCanvasFormat(),
|
|
365
415
|
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC
|
|
366
416
|
} );
|
|
367
417
|
|
|
368
|
-
|
|
418
|
+
//
|
|
419
|
+
|
|
420
|
+
colorTexture.source.width = width;
|
|
421
|
+
colorTexture.source.height = height;
|
|
422
|
+
colorTexture.samples = samples;
|
|
423
|
+
|
|
424
|
+
colorTextureData.texture = colorBuffer;
|
|
425
|
+
|
|
426
|
+
return colorBuffer;
|
|
369
427
|
|
|
370
428
|
}
|
|
371
429
|
|
|
@@ -380,9 +438,24 @@ class WebGPUTextureUtils {
|
|
|
380
438
|
getDepthBuffer( depth = true, stencil = false ) {
|
|
381
439
|
|
|
382
440
|
const backend = this.backend;
|
|
441
|
+
const canvasTarget = backend.renderer.getCanvasTarget();
|
|
383
442
|
const { width, height } = backend.getDrawingBufferSize();
|
|
443
|
+
const samples = backend.renderer.currentSamples;
|
|
444
|
+
|
|
445
|
+
const depthTexture = canvasTarget.depthTexture;
|
|
446
|
+
|
|
447
|
+
if ( depthTexture.width === width &&
|
|
448
|
+
depthTexture.height === height &&
|
|
449
|
+
depthTexture.samples === samples &&
|
|
450
|
+
depthTexture.depth === depth &&
|
|
451
|
+
depthTexture.stencil === stencil ) {
|
|
452
|
+
|
|
453
|
+
return backend.get( depthTexture ).texture;
|
|
454
|
+
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
//
|
|
384
458
|
|
|
385
|
-
const depthTexture = this.depthTexture;
|
|
386
459
|
const depthTextureGPU = backend.get( depthTexture ).texture;
|
|
387
460
|
|
|
388
461
|
let format, type;
|
|
@@ -390,18 +463,18 @@ class WebGPUTextureUtils {
|
|
|
390
463
|
if ( stencil ) {
|
|
391
464
|
|
|
392
465
|
format = DepthStencilFormat;
|
|
393
|
-
type = UnsignedInt248Type;
|
|
466
|
+
type = backend.renderer.reversedDepthBuffer === true ? FloatType : UnsignedInt248Type;
|
|
394
467
|
|
|
395
468
|
} else if ( depth ) {
|
|
396
469
|
|
|
397
470
|
format = DepthFormat;
|
|
398
|
-
type = UnsignedIntType;
|
|
471
|
+
type = backend.renderer.reversedDepthBuffer === true ? FloatType : UnsignedIntType;
|
|
399
472
|
|
|
400
473
|
}
|
|
401
474
|
|
|
402
475
|
if ( depthTextureGPU !== undefined ) {
|
|
403
476
|
|
|
404
|
-
if ( depthTexture.image.width === width && depthTexture.image.height === height && depthTexture.format === format && depthTexture.type === type ) {
|
|
477
|
+
if ( depthTexture.image.width === width && depthTexture.image.height === height && depthTexture.format === format && depthTexture.type === type && depthTexture.samples === samples ) {
|
|
405
478
|
|
|
406
479
|
return depthTextureGPU;
|
|
407
480
|
|
|
@@ -411,11 +484,14 @@ class WebGPUTextureUtils {
|
|
|
411
484
|
|
|
412
485
|
}
|
|
413
486
|
|
|
487
|
+
// recreate
|
|
488
|
+
|
|
414
489
|
depthTexture.name = 'depthBuffer';
|
|
415
490
|
depthTexture.format = format;
|
|
416
491
|
depthTexture.type = type;
|
|
417
492
|
depthTexture.image.width = width;
|
|
418
493
|
depthTexture.image.height = height;
|
|
494
|
+
depthTexture.samples = samples;
|
|
419
495
|
|
|
420
496
|
this.createTexture( depthTexture, { width, height } );
|
|
421
497
|
|
|
@@ -432,6 +508,7 @@ class WebGPUTextureUtils {
|
|
|
432
508
|
updateTexture( texture, options ) {
|
|
433
509
|
|
|
434
510
|
const textureData = this.backend.get( texture );
|
|
511
|
+
const mipmaps = texture.mipmaps;
|
|
435
512
|
|
|
436
513
|
const { textureDescriptorGPU } = textureData;
|
|
437
514
|
|
|
@@ -442,13 +519,42 @@ class WebGPUTextureUtils {
|
|
|
442
519
|
|
|
443
520
|
if ( texture.isDataTexture ) {
|
|
444
521
|
|
|
445
|
-
|
|
522
|
+
if ( mipmaps.length > 0 ) {
|
|
523
|
+
|
|
524
|
+
for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
|
|
525
|
+
|
|
526
|
+
const mipmap = mipmaps[ i ];
|
|
527
|
+
|
|
528
|
+
this._copyBufferToTexture( mipmap, textureData.texture, textureDescriptorGPU, 0, texture.flipY, 0, i );
|
|
529
|
+
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
|
|
533
|
+
} else {
|
|
534
|
+
|
|
535
|
+
this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY );
|
|
536
|
+
|
|
537
|
+
}
|
|
446
538
|
|
|
447
539
|
} else if ( texture.isArrayTexture || texture.isDataArrayTexture || texture.isData3DTexture ) {
|
|
448
540
|
|
|
449
|
-
|
|
541
|
+
if ( texture.layerUpdates && texture.layerUpdates.size > 0 ) {
|
|
542
|
+
|
|
543
|
+
for ( const layerIndex of texture.layerUpdates ) {
|
|
544
|
+
|
|
545
|
+
this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, layerIndex, texture.flipY, layerIndex );
|
|
546
|
+
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
texture.clearLayerUpdates();
|
|
550
|
+
|
|
551
|
+
} else {
|
|
552
|
+
|
|
553
|
+
for ( let i = 0; i < options.image.depth; i ++ ) {
|
|
450
554
|
|
|
451
|
-
|
|
555
|
+
this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, i, texture.flipY, i );
|
|
556
|
+
|
|
557
|
+
}
|
|
452
558
|
|
|
453
559
|
}
|
|
454
560
|
|
|
@@ -458,11 +564,57 @@ class WebGPUTextureUtils {
|
|
|
458
564
|
|
|
459
565
|
} else if ( texture.isCubeTexture ) {
|
|
460
566
|
|
|
461
|
-
this._copyCubeMapToTexture(
|
|
567
|
+
this._copyCubeMapToTexture( texture, textureData.texture, textureDescriptorGPU );
|
|
568
|
+
|
|
569
|
+
} else if ( texture.isHTMLTexture ) {
|
|
570
|
+
|
|
571
|
+
const device = this.backend.device;
|
|
572
|
+
const canvas = this.backend.renderer.domElement;
|
|
573
|
+
const image = texture.image;
|
|
574
|
+
|
|
575
|
+
if ( typeof device.queue.copyElementImageToTexture !== 'function' ) return;
|
|
576
|
+
|
|
577
|
+
// Skip the first frame — the element needs a paint record first.
|
|
578
|
+
if ( ! textureData.hasPaintCallback ) {
|
|
579
|
+
|
|
580
|
+
textureData.hasPaintCallback = true;
|
|
581
|
+
canvas.requestPaint();
|
|
582
|
+
return;
|
|
583
|
+
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
const width = textureDescriptorGPU.size.width;
|
|
587
|
+
const height = textureDescriptorGPU.size.height;
|
|
588
|
+
|
|
589
|
+
device.queue.copyElementImageToTexture(
|
|
590
|
+
image, width, height,
|
|
591
|
+
{ texture: textureData.texture }
|
|
592
|
+
);
|
|
593
|
+
|
|
594
|
+
if ( texture.flipY ) {
|
|
595
|
+
|
|
596
|
+
this._flipY( textureData.texture, textureDescriptorGPU );
|
|
597
|
+
|
|
598
|
+
}
|
|
462
599
|
|
|
463
600
|
} else {
|
|
464
601
|
|
|
465
|
-
|
|
602
|
+
if ( mipmaps.length > 0 ) {
|
|
603
|
+
|
|
604
|
+
for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
|
|
605
|
+
|
|
606
|
+
const mipmap = mipmaps[ i ];
|
|
607
|
+
|
|
608
|
+
this._copyImageToTexture( mipmap, textureData.texture, textureDescriptorGPU, 0, texture.flipY, texture.premultiplyAlpha, i );
|
|
609
|
+
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
|
|
613
|
+
} else {
|
|
614
|
+
|
|
615
|
+
this._copyImageToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY, texture.premultiplyAlpha );
|
|
616
|
+
|
|
617
|
+
}
|
|
466
618
|
|
|
467
619
|
}
|
|
468
620
|
|
|
@@ -470,8 +622,6 @@ class WebGPUTextureUtils {
|
|
|
470
622
|
|
|
471
623
|
textureData.version = texture.version;
|
|
472
624
|
|
|
473
|
-
if ( texture.onUpdate ) texture.onUpdate( texture );
|
|
474
|
-
|
|
475
625
|
}
|
|
476
626
|
|
|
477
627
|
/**
|
|
@@ -500,7 +650,7 @@ class WebGPUTextureUtils {
|
|
|
500
650
|
|
|
501
651
|
const readBuffer = device.createBuffer(
|
|
502
652
|
{
|
|
503
|
-
size:
|
|
653
|
+
size: ( ( height - 1 ) * bytesPerRow ) + ( width * bytesPerTexel ), // see https://github.com/mrdoob/three.js/issues/31658#issuecomment-3229442010
|
|
504
654
|
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ
|
|
505
655
|
}
|
|
506
656
|
);
|
|
@@ -529,12 +679,23 @@ class WebGPUTextureUtils {
|
|
|
529
679
|
|
|
530
680
|
await readBuffer.mapAsync( GPUMapMode.READ );
|
|
531
681
|
|
|
532
|
-
const buffer = readBuffer.getMappedRange();
|
|
682
|
+
const buffer = readBuffer.getMappedRange().slice();
|
|
683
|
+
|
|
684
|
+
readBuffer.destroy();
|
|
533
685
|
|
|
534
686
|
return new typedArrayType( buffer );
|
|
535
687
|
|
|
536
688
|
}
|
|
537
689
|
|
|
690
|
+
/**
|
|
691
|
+
* Frees all internal resources.
|
|
692
|
+
*/
|
|
693
|
+
dispose() {
|
|
694
|
+
|
|
695
|
+
this._samplerCache.clear();
|
|
696
|
+
|
|
697
|
+
}
|
|
698
|
+
|
|
538
699
|
/**
|
|
539
700
|
* Returns the default GPU texture for the given format.
|
|
540
701
|
*
|
|
@@ -571,7 +732,7 @@ class WebGPUTextureUtils {
|
|
|
571
732
|
*/
|
|
572
733
|
_getDefaultCubeTextureGPU( format ) {
|
|
573
734
|
|
|
574
|
-
let defaultCubeTexture = this.
|
|
735
|
+
let defaultCubeTexture = this.defaultCubeTexture[ format ];
|
|
575
736
|
|
|
576
737
|
if ( defaultCubeTexture === undefined ) {
|
|
577
738
|
|
|
@@ -593,27 +754,46 @@ class WebGPUTextureUtils {
|
|
|
593
754
|
* Uploads cube texture image data to the GPU memory.
|
|
594
755
|
*
|
|
595
756
|
* @private
|
|
596
|
-
* @param {
|
|
757
|
+
* @param {CubeTexture} texture - The cube texture.
|
|
597
758
|
* @param {GPUTexture} textureGPU - The GPU texture.
|
|
598
759
|
* @param {Object} textureDescriptorGPU - The GPU texture descriptor.
|
|
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.
|
|
601
760
|
*/
|
|
602
|
-
_copyCubeMapToTexture(
|
|
761
|
+
_copyCubeMapToTexture( texture, textureGPU, textureDescriptorGPU ) {
|
|
762
|
+
|
|
763
|
+
const images = texture.images;
|
|
764
|
+
const mipmaps = texture.mipmaps;
|
|
603
765
|
|
|
604
766
|
for ( let i = 0; i < 6; i ++ ) {
|
|
605
767
|
|
|
606
768
|
const image = images[ i ];
|
|
607
769
|
|
|
608
|
-
const flipIndex = flipY === true ? _flipMap[ i ] : i;
|
|
770
|
+
const flipIndex = texture.flipY === true ? _flipMap[ i ] : i;
|
|
609
771
|
|
|
610
772
|
if ( image.isDataTexture ) {
|
|
611
773
|
|
|
612
|
-
this._copyBufferToTexture( image.image, textureGPU, textureDescriptorGPU, flipIndex, flipY );
|
|
774
|
+
this._copyBufferToTexture( image.image, textureGPU, textureDescriptorGPU, flipIndex, texture.flipY );
|
|
613
775
|
|
|
614
776
|
} else {
|
|
615
777
|
|
|
616
|
-
this._copyImageToTexture( image, textureGPU, textureDescriptorGPU, flipIndex, flipY, premultiplyAlpha );
|
|
778
|
+
this._copyImageToTexture( image, textureGPU, textureDescriptorGPU, flipIndex, texture.flipY, texture.premultiplyAlpha );
|
|
779
|
+
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
for ( let j = 0; j < mipmaps.length; j ++ ) {
|
|
783
|
+
|
|
784
|
+
const mipmap = mipmaps[ j ];
|
|
785
|
+
const image = mipmap.images[ i ];
|
|
786
|
+
|
|
787
|
+
if ( image.isDataTexture ) {
|
|
788
|
+
|
|
789
|
+
this._copyBufferToTexture( image.image, textureGPU, textureDescriptorGPU, flipIndex, texture.flipY, 0, j + 1 );
|
|
790
|
+
|
|
791
|
+
} else {
|
|
792
|
+
|
|
793
|
+
this._copyImageToTexture( image, textureGPU, textureDescriptorGPU, flipIndex, texture.flipY, texture.premultiplyAlpha, j + 1 );
|
|
794
|
+
|
|
795
|
+
}
|
|
796
|
+
|
|
617
797
|
|
|
618
798
|
}
|
|
619
799
|
|
|
@@ -631,26 +811,36 @@ class WebGPUTextureUtils {
|
|
|
631
811
|
* @param {number} originDepth - The origin depth.
|
|
632
812
|
* @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.
|
|
633
813
|
* @param {boolean} premultiplyAlpha - Whether the texture should have its RGB channels premultiplied by the alpha channel or not.
|
|
814
|
+
* @param {number} [mipLevel=0] - The mip level where the data should be copied to.
|
|
634
815
|
*/
|
|
635
|
-
_copyImageToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, premultiplyAlpha ) {
|
|
816
|
+
_copyImageToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, premultiplyAlpha, mipLevel = 0 ) {
|
|
636
817
|
|
|
637
818
|
const device = this.backend.device;
|
|
638
819
|
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
820
|
+
const width = ( mipLevel > 0 ) ? image.width : textureDescriptorGPU.size.width;
|
|
821
|
+
const height = ( mipLevel > 0 ) ? image.height : textureDescriptorGPU.size.height;
|
|
822
|
+
|
|
823
|
+
try {
|
|
824
|
+
|
|
825
|
+
device.queue.copyExternalImageToTexture(
|
|
826
|
+
{
|
|
827
|
+
source: image,
|
|
828
|
+
flipY: flipY
|
|
829
|
+
}, {
|
|
830
|
+
texture: textureGPU,
|
|
831
|
+
mipLevel: mipLevel,
|
|
832
|
+
origin: { x: 0, y: 0, z: originDepth },
|
|
833
|
+
premultipliedAlpha: premultiplyAlpha
|
|
834
|
+
}, {
|
|
835
|
+
width: width,
|
|
836
|
+
height: height,
|
|
837
|
+
depthOrArrayLayers: 1
|
|
838
|
+
}
|
|
839
|
+
);
|
|
840
|
+
|
|
841
|
+
// try/catch has been added to fix bad video frame data on certain devices, see #32391
|
|
842
|
+
|
|
843
|
+
} catch ( _ ) {}
|
|
654
844
|
|
|
655
845
|
}
|
|
656
846
|
|
|
@@ -679,12 +869,11 @@ class WebGPUTextureUtils {
|
|
|
679
869
|
*
|
|
680
870
|
* @private
|
|
681
871
|
* @param {GPUTexture} textureGPU - The GPU texture object.
|
|
682
|
-
* @param {
|
|
683
|
-
* @param {number} [baseArrayLayer=0] - The index of the first array layer accessible to the texture view.
|
|
872
|
+
* @param {?GPUCommandEncoder} [encoder=null] - An optional command encoder used to generate mipmaps.
|
|
684
873
|
*/
|
|
685
|
-
_generateMipmaps( textureGPU,
|
|
874
|
+
_generateMipmaps( textureGPU, encoder = null ) {
|
|
686
875
|
|
|
687
|
-
this._getPassUtils().generateMipmaps( textureGPU,
|
|
876
|
+
this._getPassUtils().generateMipmaps( textureGPU, encoder );
|
|
688
877
|
|
|
689
878
|
}
|
|
690
879
|
|
|
@@ -711,9 +900,10 @@ class WebGPUTextureUtils {
|
|
|
711
900
|
* @param {Object} textureDescriptorGPU - The GPU texture descriptor.
|
|
712
901
|
* @param {number} originDepth - The origin depth.
|
|
713
902
|
* @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.
|
|
714
|
-
* @param {number} [depth=0] -
|
|
903
|
+
* @param {number} [depth=0] - The depth offset when copying array or 3D texture data.
|
|
904
|
+
* @param {number} [mipLevel=0] - The mip level where the data should be copied to.
|
|
715
905
|
*/
|
|
716
|
-
_copyBufferToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, depth = 0 ) {
|
|
906
|
+
_copyBufferToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, depth = 0, mipLevel = 0 ) {
|
|
717
907
|
|
|
718
908
|
// @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()
|
|
719
909
|
// @TODO: Consider to support valid buffer layouts with other formats like RGB
|
|
@@ -728,7 +918,7 @@ class WebGPUTextureUtils {
|
|
|
728
918
|
device.queue.writeTexture(
|
|
729
919
|
{
|
|
730
920
|
texture: textureGPU,
|
|
731
|
-
mipLevel:
|
|
921
|
+
mipLevel: mipLevel,
|
|
732
922
|
origin: { x: 0, y: 0, z: originDepth }
|
|
733
923
|
},
|
|
734
924
|
data,
|
|
@@ -916,7 +1106,9 @@ class WebGPUTextureUtils {
|
|
|
916
1106
|
format === GPUTextureFormat.RG8Unorm ||
|
|
917
1107
|
format === GPUTextureFormat.RG8Snorm ||
|
|
918
1108
|
format === GPUTextureFormat.RG8Uint ||
|
|
919
|
-
format === GPUTextureFormat.RG8Sint
|
|
1109
|
+
format === GPUTextureFormat.RG8Sint ||
|
|
1110
|
+
format === GPUTextureFormat.R16Unorm ||
|
|
1111
|
+
format === GPUTextureFormat.R16Snorm ) return 2;
|
|
920
1112
|
|
|
921
1113
|
// 32-bit formats
|
|
922
1114
|
if ( format === GPUTextureFormat.R32Uint ||
|
|
@@ -932,6 +1124,8 @@ class WebGPUTextureUtils {
|
|
|
932
1124
|
format === GPUTextureFormat.RGBA8Sint ||
|
|
933
1125
|
format === GPUTextureFormat.BGRA8Unorm ||
|
|
934
1126
|
format === GPUTextureFormat.BGRA8UnormSRGB ||
|
|
1127
|
+
format === GPUTextureFormat.RG16Unorm ||
|
|
1128
|
+
format === GPUTextureFormat.RG16Snorm ||
|
|
935
1129
|
// Packed 32-bit formats
|
|
936
1130
|
format === GPUTextureFormat.RGB9E5UFloat ||
|
|
937
1131
|
format === GPUTextureFormat.RGB10A2Unorm ||
|
|
@@ -947,7 +1141,9 @@ class WebGPUTextureUtils {
|
|
|
947
1141
|
format === GPUTextureFormat.RG32Float ||
|
|
948
1142
|
format === GPUTextureFormat.RGBA16Uint ||
|
|
949
1143
|
format === GPUTextureFormat.RGBA16Sint ||
|
|
950
|
-
format === GPUTextureFormat.RGBA16Float
|
|
1144
|
+
format === GPUTextureFormat.RGBA16Float ||
|
|
1145
|
+
format === GPUTextureFormat.RGBA16Unorm ||
|
|
1146
|
+
format === GPUTextureFormat.RGBA16Snorm ) return 8;
|
|
951
1147
|
|
|
952
1148
|
// 128-bit formats
|
|
953
1149
|
if ( format === GPUTextureFormat.RGBA32Uint ||
|
|
@@ -976,7 +1172,7 @@ class WebGPUTextureUtils {
|
|
|
976
1172
|
if ( format === GPUTextureFormat.RG8Snorm ) return Int8Array;
|
|
977
1173
|
if ( format === GPUTextureFormat.RGBA8Uint ) return Uint8Array;
|
|
978
1174
|
if ( format === GPUTextureFormat.RGBA8Sint ) return Int8Array;
|
|
979
|
-
if ( format === GPUTextureFormat.RGBA8Unorm ) return Uint8Array;
|
|
1175
|
+
if ( format === GPUTextureFormat.RGBA8Unorm || format === GPUTextureFormat.RGBA8UnormSRGB ) return Uint8Array;
|
|
980
1176
|
if ( format === GPUTextureFormat.RGBA8Snorm ) return Int8Array;
|
|
981
1177
|
|
|
982
1178
|
|
|
@@ -990,6 +1186,12 @@ class WebGPUTextureUtils {
|
|
|
990
1186
|
if ( format === GPUTextureFormat.RG16Float ) return Uint16Array;
|
|
991
1187
|
if ( format === GPUTextureFormat.RGBA16Float ) return Uint16Array;
|
|
992
1188
|
|
|
1189
|
+
if ( format === GPUTextureFormat.R16Unorm ) return Uint16Array;
|
|
1190
|
+
if ( format === GPUTextureFormat.R16Snorm ) return Int16Array;
|
|
1191
|
+
if ( format === GPUTextureFormat.RG16Unorm ) return Uint16Array;
|
|
1192
|
+
if ( format === GPUTextureFormat.RG16Snorm ) return Int16Array;
|
|
1193
|
+
if ( format === GPUTextureFormat.RGBA16Unorm ) return Uint16Array;
|
|
1194
|
+
if ( format === GPUTextureFormat.RGBA16Snorm ) return Int16Array;
|
|
993
1195
|
|
|
994
1196
|
if ( format === GPUTextureFormat.R32Uint ) return Uint32Array;
|
|
995
1197
|
if ( format === GPUTextureFormat.R32Sint ) return Int32Array;
|
|
@@ -1001,8 +1203,7 @@ class WebGPUTextureUtils {
|
|
|
1001
1203
|
if ( format === GPUTextureFormat.RGBA32Sint ) return Int32Array;
|
|
1002
1204
|
if ( format === GPUTextureFormat.RGBA32Float ) return Float32Array;
|
|
1003
1205
|
|
|
1004
|
-
if ( format === GPUTextureFormat.BGRA8Unorm ) return Uint8Array;
|
|
1005
|
-
if ( format === GPUTextureFormat.BGRA8UnormSRGB ) return Uint8Array;
|
|
1206
|
+
if ( format === GPUTextureFormat.BGRA8Unorm || format === GPUTextureFormat.BGRA8UnormSRGB ) return Uint8Array;
|
|
1006
1207
|
if ( format === GPUTextureFormat.RGB10A2Unorm ) return Uint32Array;
|
|
1007
1208
|
if ( format === GPUTextureFormat.RGB9E5UFloat ) return Uint32Array;
|
|
1008
1209
|
if ( format === GPUTextureFormat.RG11B10UFloat ) return Uint32Array;
|
|
@@ -1045,23 +1246,38 @@ class WebGPUTextureUtils {
|
|
|
1045
1246
|
* Returns the GPU format for the given texture.
|
|
1046
1247
|
*
|
|
1047
1248
|
* @param {Texture} texture - The texture.
|
|
1048
|
-
* @param {
|
|
1049
|
-
* It is not necessary to apply the device for most formats.
|
|
1249
|
+
* @param {GPUDevice} [device] - The GPU device which is used for feature detection.
|
|
1050
1250
|
* @return {string} The GPU format.
|
|
1051
1251
|
*/
|
|
1052
|
-
export function getFormat( texture, device
|
|
1252
|
+
export function getFormat( texture, device ) {
|
|
1053
1253
|
|
|
1054
1254
|
const format = texture.format;
|
|
1055
1255
|
const type = texture.type;
|
|
1256
|
+
const normalized = texture.normalized;
|
|
1056
1257
|
const colorSpace = texture.colorSpace;
|
|
1057
1258
|
const transfer = ColorManagement.getTransfer( colorSpace );
|
|
1058
1259
|
|
|
1059
1260
|
let formatGPU;
|
|
1060
1261
|
|
|
1262
|
+
let textureFormatsTier1 = false;
|
|
1263
|
+
|
|
1264
|
+
if ( normalized ) {
|
|
1265
|
+
|
|
1266
|
+
textureFormatsTier1 = device.features.has( GPUFeatureName.TextureFormatsTier1 );
|
|
1267
|
+
|
|
1268
|
+
if ( textureFormatsTier1 === false ) {
|
|
1269
|
+
|
|
1270
|
+
warn( 'WebGPURenderer: Unable to use normalized textures without texture-formats-tier1 feature.' );
|
|
1271
|
+
|
|
1272
|
+
}
|
|
1273
|
+
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1061
1276
|
if ( texture.isCompressedTexture === true || texture.isCompressedArrayTexture === true ) {
|
|
1062
1277
|
|
|
1063
1278
|
switch ( format ) {
|
|
1064
1279
|
|
|
1280
|
+
case RGB_S3TC_DXT1_Format:
|
|
1065
1281
|
case RGBA_S3TC_DXT1_Format:
|
|
1066
1282
|
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC1RGBAUnormSRGB : GPUTextureFormat.BC1RGBAUnorm;
|
|
1067
1283
|
break;
|
|
@@ -1074,7 +1290,28 @@ export function getFormat( texture, device = null ) {
|
|
|
1074
1290
|
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC3RGBAUnormSRGB : GPUTextureFormat.BC3RGBAUnorm;
|
|
1075
1291
|
break;
|
|
1076
1292
|
|
|
1293
|
+
case RED_RGTC1_Format:
|
|
1294
|
+
formatGPU = GPUTextureFormat.BC4RUnorm;
|
|
1295
|
+
break;
|
|
1296
|
+
|
|
1297
|
+
case SIGNED_RED_RGTC1_Format:
|
|
1298
|
+
formatGPU = GPUTextureFormat.BC4RSnorm;
|
|
1299
|
+
break;
|
|
1300
|
+
|
|
1301
|
+
case RED_GREEN_RGTC2_Format:
|
|
1302
|
+
formatGPU = GPUTextureFormat.BC5RGUnorm;
|
|
1303
|
+
break;
|
|
1304
|
+
|
|
1305
|
+
case SIGNED_RED_GREEN_RGTC2_Format:
|
|
1306
|
+
formatGPU = GPUTextureFormat.BC5RGSnorm;
|
|
1307
|
+
break;
|
|
1308
|
+
|
|
1309
|
+
case RGBA_BPTC_Format:
|
|
1310
|
+
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC7RGBAUnormSRGB : GPUTextureFormat.BC7RGBAUnorm;
|
|
1311
|
+
break;
|
|
1312
|
+
|
|
1077
1313
|
case RGB_ETC2_Format:
|
|
1314
|
+
case RGB_ETC1_Format:
|
|
1078
1315
|
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ETC2RGB8UnormSRGB : GPUTextureFormat.ETC2RGB8Unorm;
|
|
1079
1316
|
break;
|
|
1080
1317
|
|
|
@@ -1082,6 +1319,22 @@ export function getFormat( texture, device = null ) {
|
|
|
1082
1319
|
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ETC2RGBA8UnormSRGB : GPUTextureFormat.ETC2RGBA8Unorm;
|
|
1083
1320
|
break;
|
|
1084
1321
|
|
|
1322
|
+
case R11_EAC_Format:
|
|
1323
|
+
formatGPU = GPUTextureFormat.EACR11Unorm;
|
|
1324
|
+
break;
|
|
1325
|
+
|
|
1326
|
+
case SIGNED_R11_EAC_Format:
|
|
1327
|
+
formatGPU = GPUTextureFormat.EACR11Snorm;
|
|
1328
|
+
break;
|
|
1329
|
+
|
|
1330
|
+
case RG11_EAC_Format:
|
|
1331
|
+
formatGPU = GPUTextureFormat.EACRG11Unorm;
|
|
1332
|
+
break;
|
|
1333
|
+
|
|
1334
|
+
case SIGNED_RG11_EAC_Format:
|
|
1335
|
+
formatGPU = GPUTextureFormat.EACRG11Snorm;
|
|
1336
|
+
break;
|
|
1337
|
+
|
|
1085
1338
|
case RGBA_ASTC_4x4_Format:
|
|
1086
1339
|
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC4x4UnormSRGB : GPUTextureFormat.ASTC4x4Unorm;
|
|
1087
1340
|
break;
|
|
@@ -1143,7 +1396,7 @@ export function getFormat( texture, device = null ) {
|
|
|
1143
1396
|
break;
|
|
1144
1397
|
|
|
1145
1398
|
default:
|
|
1146
|
-
|
|
1399
|
+
error( 'WebGPURenderer: Unsupported texture format.', format );
|
|
1147
1400
|
|
|
1148
1401
|
}
|
|
1149
1402
|
|
|
@@ -1160,12 +1413,13 @@ export function getFormat( texture, device = null ) {
|
|
|
1160
1413
|
break;
|
|
1161
1414
|
|
|
1162
1415
|
case ShortType:
|
|
1163
|
-
formatGPU = GPUTextureFormat.RGBA16Sint;
|
|
1416
|
+
formatGPU = textureFormatsTier1 ? GPUTextureFormat.RGBA16Snorm : GPUTextureFormat.RGBA16Sint;
|
|
1164
1417
|
break;
|
|
1165
1418
|
|
|
1166
1419
|
case UnsignedShortType:
|
|
1167
|
-
formatGPU = GPUTextureFormat.RGBA16Uint;
|
|
1420
|
+
formatGPU = textureFormatsTier1 ? GPUTextureFormat.RGBA16Unorm : GPUTextureFormat.RGBA16Uint;
|
|
1168
1421
|
break;
|
|
1422
|
+
|
|
1169
1423
|
case UnsignedIntType:
|
|
1170
1424
|
formatGPU = GPUTextureFormat.RGBA32Uint;
|
|
1171
1425
|
break;
|
|
@@ -1187,7 +1441,7 @@ export function getFormat( texture, device = null ) {
|
|
|
1187
1441
|
break;
|
|
1188
1442
|
|
|
1189
1443
|
default:
|
|
1190
|
-
|
|
1444
|
+
error( 'WebGPURenderer: Unsupported texture type with RGBAFormat.', type );
|
|
1191
1445
|
|
|
1192
1446
|
}
|
|
1193
1447
|
|
|
@@ -1201,8 +1455,12 @@ export function getFormat( texture, device = null ) {
|
|
|
1201
1455
|
formatGPU = GPUTextureFormat.RGB9E5UFloat;
|
|
1202
1456
|
break;
|
|
1203
1457
|
|
|
1458
|
+
case UnsignedInt101111Type:
|
|
1459
|
+
formatGPU = GPUTextureFormat.RG11B10UFloat;
|
|
1460
|
+
break;
|
|
1461
|
+
|
|
1204
1462
|
default:
|
|
1205
|
-
|
|
1463
|
+
error( 'WebGPURenderer: Unsupported texture type with RGBFormat.', type );
|
|
1206
1464
|
|
|
1207
1465
|
}
|
|
1208
1466
|
|
|
@@ -1217,11 +1475,11 @@ export function getFormat( texture, device = null ) {
|
|
|
1217
1475
|
break;
|
|
1218
1476
|
|
|
1219
1477
|
case ShortType:
|
|
1220
|
-
formatGPU = GPUTextureFormat.R16Sint;
|
|
1478
|
+
formatGPU = textureFormatsTier1 ? GPUTextureFormat.R16Snorm : GPUTextureFormat.R16Sint;
|
|
1221
1479
|
break;
|
|
1222
1480
|
|
|
1223
1481
|
case UnsignedShortType:
|
|
1224
|
-
formatGPU = GPUTextureFormat.R16Uint;
|
|
1482
|
+
formatGPU = textureFormatsTier1 ? GPUTextureFormat.R16Unorm : GPUTextureFormat.R16Uint;
|
|
1225
1483
|
break;
|
|
1226
1484
|
|
|
1227
1485
|
case UnsignedIntType:
|
|
@@ -1245,7 +1503,7 @@ export function getFormat( texture, device = null ) {
|
|
|
1245
1503
|
break;
|
|
1246
1504
|
|
|
1247
1505
|
default:
|
|
1248
|
-
|
|
1506
|
+
error( 'WebGPURenderer: Unsupported texture type with RedFormat.', type );
|
|
1249
1507
|
|
|
1250
1508
|
}
|
|
1251
1509
|
|
|
@@ -1260,11 +1518,11 @@ export function getFormat( texture, device = null ) {
|
|
|
1260
1518
|
break;
|
|
1261
1519
|
|
|
1262
1520
|
case ShortType:
|
|
1263
|
-
formatGPU = GPUTextureFormat.RG16Sint;
|
|
1521
|
+
formatGPU = textureFormatsTier1 ? GPUTextureFormat.RG16Snorm : GPUTextureFormat.RG16Sint;
|
|
1264
1522
|
break;
|
|
1265
1523
|
|
|
1266
1524
|
case UnsignedShortType:
|
|
1267
|
-
formatGPU = GPUTextureFormat.RG16Uint;
|
|
1525
|
+
formatGPU = textureFormatsTier1 ? GPUTextureFormat.RG16Unorm : GPUTextureFormat.RG16Uint;
|
|
1268
1526
|
break;
|
|
1269
1527
|
|
|
1270
1528
|
case UnsignedIntType:
|
|
@@ -1288,7 +1546,7 @@ export function getFormat( texture, device = null ) {
|
|
|
1288
1546
|
break;
|
|
1289
1547
|
|
|
1290
1548
|
default:
|
|
1291
|
-
|
|
1549
|
+
error( 'WebGPURenderer: Unsupported texture type with RGFormat.', type );
|
|
1292
1550
|
|
|
1293
1551
|
}
|
|
1294
1552
|
|
|
@@ -1311,7 +1569,7 @@ export function getFormat( texture, device = null ) {
|
|
|
1311
1569
|
break;
|
|
1312
1570
|
|
|
1313
1571
|
default:
|
|
1314
|
-
|
|
1572
|
+
error( 'WebGPURenderer: Unsupported texture type with DepthFormat.', type );
|
|
1315
1573
|
|
|
1316
1574
|
}
|
|
1317
1575
|
|
|
@@ -1329,7 +1587,7 @@ export function getFormat( texture, device = null ) {
|
|
|
1329
1587
|
|
|
1330
1588
|
if ( device && device.features.has( GPUFeatureName.Depth32FloatStencil8 ) === false ) {
|
|
1331
1589
|
|
|
1332
|
-
|
|
1590
|
+
error( 'WebGPURenderer: Depth textures with DepthStencilFormat + FloatType can only be used with the "depth32float-stencil8" GPU feature.' );
|
|
1333
1591
|
|
|
1334
1592
|
}
|
|
1335
1593
|
|
|
@@ -1338,7 +1596,7 @@ export function getFormat( texture, device = null ) {
|
|
|
1338
1596
|
break;
|
|
1339
1597
|
|
|
1340
1598
|
default:
|
|
1341
|
-
|
|
1599
|
+
error( 'WebGPURenderer: Unsupported texture type with DepthStencilFormat.', type );
|
|
1342
1600
|
|
|
1343
1601
|
}
|
|
1344
1602
|
|
|
@@ -1357,7 +1615,7 @@ export function getFormat( texture, device = null ) {
|
|
|
1357
1615
|
break;
|
|
1358
1616
|
|
|
1359
1617
|
default:
|
|
1360
|
-
|
|
1618
|
+
error( 'WebGPURenderer: Unsupported texture type with RedIntegerFormat.', type );
|
|
1361
1619
|
|
|
1362
1620
|
}
|
|
1363
1621
|
|
|
@@ -1376,7 +1634,7 @@ export function getFormat( texture, device = null ) {
|
|
|
1376
1634
|
break;
|
|
1377
1635
|
|
|
1378
1636
|
default:
|
|
1379
|
-
|
|
1637
|
+
error( 'WebGPURenderer: Unsupported texture type with RGIntegerFormat.', type );
|
|
1380
1638
|
|
|
1381
1639
|
}
|
|
1382
1640
|
|
|
@@ -1395,14 +1653,14 @@ export function getFormat( texture, device = null ) {
|
|
|
1395
1653
|
break;
|
|
1396
1654
|
|
|
1397
1655
|
default:
|
|
1398
|
-
|
|
1656
|
+
error( 'WebGPURenderer: Unsupported texture type with RGBAIntegerFormat.', type );
|
|
1399
1657
|
|
|
1400
1658
|
}
|
|
1401
1659
|
|
|
1402
1660
|
break;
|
|
1403
1661
|
|
|
1404
1662
|
default:
|
|
1405
|
-
|
|
1663
|
+
error( 'WebGPURenderer: Unsupported texture format.', format );
|
|
1406
1664
|
|
|
1407
1665
|
}
|
|
1408
1666
|
|