@plastic-software/three 0.179.0 → 0.181.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +1108 -591
- package/build/three.core.js +616 -345
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +488 -250
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +37 -6
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6576 -2152
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6575 -2151
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +8 -8
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +1 -1
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +9 -2
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -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 +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -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/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/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/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +3 -3
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- 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/SimplexNoise.js +1 -1
- 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/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +1 -1
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- 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 +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- 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 +1 -1
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
- package/examples/jsm/transpiler/TSLEncoder.js +9 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +24 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +7 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +49 -35
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +124 -7
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +4 -2
- package/src/Three.TSL.js +36 -5
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +2 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +7 -6
- package/src/animation/PropertyBinding.js +12 -11
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- 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 +11 -3
- package/src/core/BufferGeometry.js +10 -10
- 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 +3 -2
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- 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 +268 -55
- package/src/extras/TextureUtils.js +2 -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/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 +8 -6
- 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/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 +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +3 -2
- package/src/loaders/ImageBitmapLoader.js +5 -4
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +3 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -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 +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/NodeMaterial.js +62 -22
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
- 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/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +7 -7
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +68 -66
- package/src/math/Spherical.js +1 -1
- package/src/nodes/Nodes.js +4 -1
- package/src/nodes/TSL.js +4 -1
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +133 -7
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +5 -4
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +18 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +3 -2
- package/src/nodes/accessors/SceneNode.js +2 -1
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +22 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureNode.js +130 -44
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +1 -0
- package/src/nodes/core/AssignNode.js +4 -3
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +29 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
- package/src/nodes/core/Node.js +152 -31
- package/src/nodes/core/NodeBuilder.js +183 -35
- package/src/nodes/core/NodeFrame.js +21 -21
- 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 +17 -91
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +43 -16
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformNode.js +18 -10
- package/src/nodes/core/VarNode.js +70 -33
- package/src/nodes/core/VaryingNode.js +3 -2
- package/src/nodes/display/BlendModes.js +5 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +2 -1
- package/src/nodes/display/PassNode.js +52 -11
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -14
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +42 -12
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +3 -2
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +17 -5
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
- package/src/nodes/lighting/EnvironmentNode.js +6 -6
- package/src/nodes/lighting/LightsNode.js +3 -4
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ShadowFilterNode.js +2 -0
- package/src/nodes/lighting/ShadowNode.js +75 -8
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +24 -7
- package/src/nodes/math/MathNode.js +25 -19
- package/src/nodes/math/OperatorNode.js +7 -5
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +5 -2
- package/src/nodes/tsl/TSLCore.js +460 -159
- package/src/nodes/utils/DebugNode.js +2 -1
- package/src/nodes/utils/EventNode.js +36 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +13 -3
- package/src/nodes/utils/ReflectorNode.js +58 -7
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/objects/BatchedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +48 -41
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +2 -1
- package/src/renderers/common/Bindings.js +58 -2
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +6 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +16 -2
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +473 -245
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +50 -12
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +121 -45
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +42 -22
- package/src/renderers/common/extras/PMREMGenerator.js +160 -65
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- 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/shadowmap_pars_fragment.glsl.js +7 -15
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLCapabilities.js +2 -1
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +15 -14
- package/src/renderers/webgl/WebGLPrograms.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +15 -14
- package/src/renderers/webgl/WebGLTextures.js +19 -14
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +153 -123
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
- package/src/renderers/webxr/WebXRManager.js +42 -26
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/Source.js +3 -2
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
|
@@ -17,6 +17,7 @@ import VarNode from '../../../nodes/core/VarNode.js';
|
|
|
17
17
|
import ExpressionNode from '../../../nodes/code/ExpressionNode.js';
|
|
18
18
|
|
|
19
19
|
import { FloatType, RepeatWrapping, ClampToEdgeWrapping, MirroredRepeatWrapping, NearestFilter } from '../../../constants.js';
|
|
20
|
+
import { warn, error } from '../../../utils.js';
|
|
20
21
|
|
|
21
22
|
// GPUShaderStage is not defined in browsers not supporting WebGPU
|
|
22
23
|
const GPUShaderStage = ( typeof self !== 'undefined' ) ? self.GPUShaderStage : { VERTEX: 1, FRAGMENT: 2, COMPUTE: 4 };
|
|
@@ -131,22 +132,6 @@ const wgslMethods = {
|
|
|
131
132
|
bitcast: 'bitcast<f32>'
|
|
132
133
|
};
|
|
133
134
|
|
|
134
|
-
// WebGPU issue: does not support pow() with negative base on Windows
|
|
135
|
-
|
|
136
|
-
if ( typeof navigator !== 'undefined' && /Windows/g.test( navigator.userAgent ) ) {
|
|
137
|
-
|
|
138
|
-
wgslPolyfill.pow_float = new CodeNode( 'fn tsl_pow_float( a : f32, b : f32 ) -> f32 { return select( -pow( -a, b ), pow( a, b ), a > 0.0 ); }' );
|
|
139
|
-
wgslPolyfill.pow_vec2 = new CodeNode( 'fn tsl_pow_vec2( a : vec2f, b : vec2f ) -> vec2f { return vec2f( tsl_pow_float( a.x, b.x ), tsl_pow_float( a.y, b.y ) ); }', [ wgslPolyfill.pow_float ] );
|
|
140
|
-
wgslPolyfill.pow_vec3 = new CodeNode( 'fn tsl_pow_vec3( a : vec3f, b : vec3f ) -> vec3f { return vec3f( tsl_pow_float( a.x, b.x ), tsl_pow_float( a.y, b.y ), tsl_pow_float( a.z, b.z ) ); }', [ wgslPolyfill.pow_float ] );
|
|
141
|
-
wgslPolyfill.pow_vec4 = new CodeNode( 'fn tsl_pow_vec4( a : vec4f, b : vec4f ) -> vec4f { return vec4f( tsl_pow_float( a.x, b.x ), tsl_pow_float( a.y, b.y ), tsl_pow_float( a.z, b.z ), tsl_pow_float( a.w, b.w ) ); }', [ wgslPolyfill.pow_float ] );
|
|
142
|
-
|
|
143
|
-
wgslMethods.pow_float = 'tsl_pow_float';
|
|
144
|
-
wgslMethods.pow_vec2 = 'tsl_pow_vec2';
|
|
145
|
-
wgslMethods.pow_vec3 = 'tsl_pow_vec3';
|
|
146
|
-
wgslMethods.pow_vec4 = 'tsl_pow_vec4';
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
|
|
150
135
|
//
|
|
151
136
|
|
|
152
137
|
let diagnostics = '';
|
|
@@ -219,19 +204,32 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
219
204
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
220
205
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
221
206
|
* @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
207
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
222
208
|
* @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
223
209
|
* @return {string} The WGSL snippet.
|
|
224
210
|
*/
|
|
225
|
-
_generateTextureSample( texture, textureProperty, uvSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
211
|
+
_generateTextureSample( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {
|
|
226
212
|
|
|
227
213
|
if ( shaderStage === 'fragment' ) {
|
|
228
214
|
|
|
229
215
|
if ( depthSnippet ) {
|
|
230
216
|
|
|
217
|
+
if ( offsetSnippet ) {
|
|
218
|
+
|
|
219
|
+
return `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ offsetSnippet } )`;
|
|
220
|
+
|
|
221
|
+
}
|
|
222
|
+
|
|
231
223
|
return `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet } )`;
|
|
232
224
|
|
|
233
225
|
} else {
|
|
234
226
|
|
|
227
|
+
if ( offsetSnippet ) {
|
|
228
|
+
|
|
229
|
+
return `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ offsetSnippet } )`;
|
|
230
|
+
|
|
231
|
+
}
|
|
232
|
+
|
|
235
233
|
return `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet } )`;
|
|
236
234
|
|
|
237
235
|
}
|
|
@@ -253,21 +251,28 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
253
251
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
254
252
|
* @param {string} levelSnippet - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
255
253
|
* @param {string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
254
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
256
255
|
* @return {string} The WGSL snippet.
|
|
257
256
|
*/
|
|
258
|
-
generateTextureSampleLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet ) {
|
|
257
|
+
generateTextureSampleLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet ) {
|
|
259
258
|
|
|
260
259
|
if ( this.isUnfilterable( texture ) === false ) {
|
|
261
260
|
|
|
261
|
+
if ( offsetSnippet ) {
|
|
262
|
+
|
|
263
|
+
return `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet }, ${ offsetSnippet } )`;
|
|
264
|
+
|
|
265
|
+
}
|
|
266
|
+
|
|
262
267
|
return `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet } )`;
|
|
263
268
|
|
|
264
269
|
} else if ( this.isFilteredTexture( texture ) ) {
|
|
265
270
|
|
|
266
|
-
return this.generateFilteredTexture( texture, textureProperty, uvSnippet, levelSnippet );
|
|
271
|
+
return this.generateFilteredTexture( texture, textureProperty, uvSnippet, offsetSnippet, levelSnippet );
|
|
267
272
|
|
|
268
273
|
} else {
|
|
269
274
|
|
|
270
|
-
return this.generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, levelSnippet );
|
|
275
|
+
return this.generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, levelSnippet );
|
|
271
276
|
|
|
272
277
|
}
|
|
273
278
|
|
|
@@ -317,7 +322,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
317
322
|
|
|
318
323
|
code += `\t\tcoord.${ axis }`;
|
|
319
324
|
|
|
320
|
-
|
|
325
|
+
warn( `WebGPURenderer: Unsupported texture wrap type "${ wrap }" for vertex shader.` );
|
|
321
326
|
|
|
322
327
|
}
|
|
323
328
|
|
|
@@ -445,16 +450,23 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
445
450
|
* @param {Texture} texture - The texture.
|
|
446
451
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
447
452
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
448
|
-
* @param {string}
|
|
453
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
454
|
+
* @param {string} [levelSnippet='0u'] - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
449
455
|
* @return {string} The WGSL snippet.
|
|
450
456
|
*/
|
|
451
|
-
generateFilteredTexture( texture, textureProperty, uvSnippet, levelSnippet = '0u' ) {
|
|
457
|
+
generateFilteredTexture( texture, textureProperty, uvSnippet, offsetSnippet, levelSnippet = '0u' ) {
|
|
452
458
|
|
|
453
459
|
this._include( 'biquadraticTexture' );
|
|
454
460
|
|
|
455
461
|
const wrapFunction = this.generateWrapFunction( texture );
|
|
456
462
|
const textureDimension = this.generateTextureDimension( texture, textureProperty, levelSnippet );
|
|
457
463
|
|
|
464
|
+
if ( offsetSnippet ) {
|
|
465
|
+
|
|
466
|
+
uvSnippet = `${ uvSnippet } + vec2<f32>(${ offsetSnippet }) / ${ textureDimension }`;
|
|
467
|
+
|
|
468
|
+
}
|
|
469
|
+
|
|
458
470
|
return `tsl_biquadraticTexture( ${ textureProperty }, ${ wrapFunction }( ${ uvSnippet } ), ${ textureDimension }, u32( ${ levelSnippet } ) )`;
|
|
459
471
|
|
|
460
472
|
}
|
|
@@ -467,18 +479,26 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
467
479
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
468
480
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
469
481
|
* @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
482
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
470
483
|
* @param {string} [levelSnippet='0u'] - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
471
484
|
* @return {string} The WGSL snippet.
|
|
472
485
|
*/
|
|
473
|
-
generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, levelSnippet = '0u' ) {
|
|
486
|
+
generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, levelSnippet = '0u' ) {
|
|
474
487
|
|
|
475
488
|
const wrapFunction = this.generateWrapFunction( texture );
|
|
476
489
|
const textureDimension = this.generateTextureDimension( texture, textureProperty, levelSnippet );
|
|
477
490
|
|
|
478
491
|
const vecType = texture.isData3DTexture ? 'vec3' : 'vec2';
|
|
492
|
+
|
|
493
|
+
if ( offsetSnippet ) {
|
|
494
|
+
|
|
495
|
+
uvSnippet = `${ uvSnippet } + ${ vecType }<f32>(${ offsetSnippet }) / ${ vecType }<f32>( ${ textureDimension } )`;
|
|
496
|
+
|
|
497
|
+
}
|
|
498
|
+
|
|
479
499
|
const coordSnippet = `${ vecType }<u32>( ${ wrapFunction }( ${ uvSnippet } ) * ${ vecType }<f32>( ${ textureDimension } ) )`;
|
|
480
500
|
|
|
481
|
-
return this.generateTextureLoad( texture, textureProperty, coordSnippet, depthSnippet,
|
|
501
|
+
return this.generateTextureLoad( texture, textureProperty, coordSnippet, levelSnippet, depthSnippet, null );
|
|
482
502
|
|
|
483
503
|
}
|
|
484
504
|
|
|
@@ -488,11 +508,20 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
488
508
|
* @param {Texture} texture - The texture.
|
|
489
509
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
490
510
|
* @param {string} uvIndexSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
511
|
+
* @param {?string} levelSnippet - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
491
512
|
* @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
492
|
-
* @param {string}
|
|
513
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
493
514
|
* @return {string} The WGSL snippet.
|
|
494
515
|
*/
|
|
495
|
-
generateTextureLoad( texture, textureProperty, uvIndexSnippet, depthSnippet,
|
|
516
|
+
generateTextureLoad( texture, textureProperty, uvIndexSnippet, levelSnippet, depthSnippet, offsetSnippet ) {
|
|
517
|
+
|
|
518
|
+
if ( levelSnippet === null ) levelSnippet = '0u';
|
|
519
|
+
|
|
520
|
+
if ( offsetSnippet ) {
|
|
521
|
+
|
|
522
|
+
uvIndexSnippet = `${ uvIndexSnippet } + ${ offsetSnippet }`;
|
|
523
|
+
|
|
524
|
+
}
|
|
496
525
|
|
|
497
526
|
let snippet;
|
|
498
527
|
|
|
@@ -578,20 +607,21 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
578
607
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
579
608
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
580
609
|
* @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
610
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
581
611
|
* @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
582
612
|
* @return {string} The WGSL snippet.
|
|
583
613
|
*/
|
|
584
|
-
generateTexture( texture, textureProperty, uvSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
614
|
+
generateTexture( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {
|
|
585
615
|
|
|
586
616
|
let snippet = null;
|
|
587
617
|
|
|
588
618
|
if ( this.isUnfilterable( texture ) ) {
|
|
589
619
|
|
|
590
|
-
snippet = this.generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, '0', shaderStage );
|
|
620
|
+
snippet = this.generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, '0', shaderStage );
|
|
591
621
|
|
|
592
622
|
} else {
|
|
593
623
|
|
|
594
|
-
snippet = this._generateTextureSample( texture, textureProperty, uvSnippet, depthSnippet, shaderStage );
|
|
624
|
+
snippet = this._generateTextureSample( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, shaderStage );
|
|
595
625
|
|
|
596
626
|
}
|
|
597
627
|
|
|
@@ -607,19 +637,26 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
607
637
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
608
638
|
* @param {Array<string>} gradSnippet - An array holding both gradient WGSL snippets.
|
|
609
639
|
* @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
640
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
610
641
|
* @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
611
642
|
* @return {string} The WGSL snippet.
|
|
612
643
|
*/
|
|
613
|
-
generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
644
|
+
generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {
|
|
614
645
|
|
|
615
646
|
if ( shaderStage === 'fragment' ) {
|
|
616
647
|
|
|
617
648
|
// TODO handle i32 or u32 --> uvSnippet, array_index: A, ddx, ddy
|
|
649
|
+
if ( offsetSnippet ) {
|
|
650
|
+
|
|
651
|
+
return `textureSampleGrad( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] }, ${ offsetSnippet } )`;
|
|
652
|
+
|
|
653
|
+
}
|
|
654
|
+
|
|
618
655
|
return `textureSampleGrad( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] } )`;
|
|
619
656
|
|
|
620
657
|
} else {
|
|
621
658
|
|
|
622
|
-
|
|
659
|
+
error( `WebGPURenderer: THREE.TextureNode.gradient() does not support ${ shaderStage } shader.` );
|
|
623
660
|
|
|
624
661
|
}
|
|
625
662
|
|
|
@@ -634,24 +671,37 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
634
671
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
635
672
|
* @param {string} compareSnippet - A WGSL snippet that represents the reference value.
|
|
636
673
|
* @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
674
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
637
675
|
* @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
638
676
|
* @return {string} The WGSL snippet.
|
|
639
677
|
*/
|
|
640
|
-
generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
678
|
+
generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {
|
|
641
679
|
|
|
642
680
|
if ( shaderStage === 'fragment' ) {
|
|
643
681
|
|
|
644
682
|
if ( texture.isDepthTexture === true && texture.isArrayTexture === true ) {
|
|
645
683
|
|
|
684
|
+
if ( offsetSnippet ) {
|
|
685
|
+
|
|
686
|
+
return `textureSampleCompare( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ compareSnippet }, ${ offsetSnippet } )`;
|
|
687
|
+
|
|
688
|
+
}
|
|
689
|
+
|
|
646
690
|
return `textureSampleCompare( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ compareSnippet } )`;
|
|
647
691
|
|
|
648
692
|
}
|
|
649
693
|
|
|
694
|
+
if ( offsetSnippet ) {
|
|
695
|
+
|
|
696
|
+
return `textureSampleCompare( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ compareSnippet }, ${ offsetSnippet } )`;
|
|
697
|
+
|
|
698
|
+
}
|
|
699
|
+
|
|
650
700
|
return `textureSampleCompare( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ compareSnippet } )`;
|
|
651
701
|
|
|
652
702
|
} else {
|
|
653
703
|
|
|
654
|
-
|
|
704
|
+
error( `WebGPURenderer: THREE.DepthTexture.compareFunction() does not support ${ shaderStage } shader.` );
|
|
655
705
|
|
|
656
706
|
}
|
|
657
707
|
|
|
@@ -665,22 +715,29 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
665
715
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
666
716
|
* @param {string} levelSnippet - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
667
717
|
* @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
718
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
668
719
|
* @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
669
720
|
* @return {string} The WGSL snippet.
|
|
670
721
|
*/
|
|
671
|
-
generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet ) {
|
|
722
|
+
generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet ) {
|
|
672
723
|
|
|
673
724
|
if ( this.isUnfilterable( texture ) === false ) {
|
|
674
725
|
|
|
726
|
+
if ( offsetSnippet ) {
|
|
727
|
+
|
|
728
|
+
return `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet }, ${ offsetSnippet } )`;
|
|
729
|
+
|
|
730
|
+
}
|
|
731
|
+
|
|
675
732
|
return `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet } )`;
|
|
676
733
|
|
|
677
734
|
} else if ( this.isFilteredTexture( texture ) ) {
|
|
678
735
|
|
|
679
|
-
return this.generateFilteredTexture( texture, textureProperty, uvSnippet, levelSnippet );
|
|
736
|
+
return this.generateFilteredTexture( texture, textureProperty, uvSnippet, offsetSnippet, levelSnippet );
|
|
680
737
|
|
|
681
738
|
} else {
|
|
682
739
|
|
|
683
|
-
return this.generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, levelSnippet );
|
|
740
|
+
return this.generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, levelSnippet );
|
|
684
741
|
|
|
685
742
|
}
|
|
686
743
|
|
|
@@ -694,18 +751,25 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
694
751
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
695
752
|
* @param {string} biasSnippet - A WGSL snippet that represents the bias to apply to the mip level before sampling.
|
|
696
753
|
* @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
754
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
697
755
|
* @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
698
756
|
* @return {string} The WGSL snippet.
|
|
699
757
|
*/
|
|
700
|
-
generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
758
|
+
generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {
|
|
701
759
|
|
|
702
760
|
if ( shaderStage === 'fragment' ) {
|
|
703
761
|
|
|
762
|
+
if ( offsetSnippet ) {
|
|
763
|
+
|
|
764
|
+
return `textureSampleBias( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ biasSnippet }, ${ offsetSnippet } )`;
|
|
765
|
+
|
|
766
|
+
}
|
|
767
|
+
|
|
704
768
|
return `textureSampleBias( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ biasSnippet } )`;
|
|
705
769
|
|
|
706
770
|
} else {
|
|
707
771
|
|
|
708
|
-
|
|
772
|
+
error( `WebGPURenderer: THREE.TextureNode.biasNode does not support ${ shaderStage } shader.` );
|
|
709
773
|
|
|
710
774
|
}
|
|
711
775
|
|
|
@@ -805,7 +869,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
805
869
|
|
|
806
870
|
if ( node.isAtomic === true ) {
|
|
807
871
|
|
|
808
|
-
|
|
872
|
+
warn( 'WebGPURenderer: Atomic operations are only supported in compute shaders.' );
|
|
809
873
|
|
|
810
874
|
return NodeAccess.READ_WRITE;
|
|
811
875
|
|
|
@@ -888,6 +952,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
888
952
|
}
|
|
889
953
|
|
|
890
954
|
texture.store = node.isStorageTextureNode === true;
|
|
955
|
+
texture.mipLevel = texture.store ? node.mipLevel : 0;
|
|
891
956
|
texture.setVisibility( gpuShaderStageLib[ shaderStage ] );
|
|
892
957
|
|
|
893
958
|
if ( this.isUnfilterable( node.value ) === false && texture.store === false ) {
|
|
@@ -1051,7 +1116,8 @@ ${ flowData.code }
|
|
|
1051
1116
|
}
|
|
1052
1117
|
|
|
1053
1118
|
/**
|
|
1054
|
-
*
|
|
1119
|
+
* Contextually returns either the vertex stage instance index builtin
|
|
1120
|
+
* or the linearized index of an compute invocation within a grid of workgroups.
|
|
1055
1121
|
*
|
|
1056
1122
|
* @return {string} The instance index.
|
|
1057
1123
|
*/
|
|
@@ -1067,8 +1133,9 @@ ${ flowData.code }
|
|
|
1067
1133
|
|
|
1068
1134
|
}
|
|
1069
1135
|
|
|
1136
|
+
|
|
1070
1137
|
/**
|
|
1071
|
-
* Returns the invocation
|
|
1138
|
+
* Returns a builtin representing the index of a compute invocation within the scope of a workgroup load.
|
|
1072
1139
|
*
|
|
1073
1140
|
* @return {string} The invocation local index.
|
|
1074
1141
|
*/
|
|
@@ -1079,7 +1146,7 @@ ${ flowData.code }
|
|
|
1079
1146
|
}
|
|
1080
1147
|
|
|
1081
1148
|
/**
|
|
1082
|
-
* Returns the subgroup
|
|
1149
|
+
* Returns a builtin representing the size of a subgroup within the current shader.
|
|
1083
1150
|
*
|
|
1084
1151
|
* @return {string} The subgroup size.
|
|
1085
1152
|
*/
|
|
@@ -1092,7 +1159,7 @@ ${ flowData.code }
|
|
|
1092
1159
|
}
|
|
1093
1160
|
|
|
1094
1161
|
/**
|
|
1095
|
-
* Returns the invocation
|
|
1162
|
+
* Returns a builtin representing the index of a compute invocation within the scope of a subgroup.
|
|
1096
1163
|
*
|
|
1097
1164
|
* @return {string} The invocation subgroup index.
|
|
1098
1165
|
*/
|
|
@@ -1105,7 +1172,7 @@ ${ flowData.code }
|
|
|
1105
1172
|
}
|
|
1106
1173
|
|
|
1107
1174
|
/**
|
|
1108
|
-
* Returns the subgroup
|
|
1175
|
+
* Returns a builtin representing the index of a compute invocation's subgroup within its workgroup.
|
|
1109
1176
|
*
|
|
1110
1177
|
* @return {string} The subgroup index.
|
|
1111
1178
|
*/
|
|
@@ -1899,6 +1966,35 @@ ${ flowData.code }
|
|
|
1899
1966
|
|
|
1900
1967
|
}
|
|
1901
1968
|
|
|
1969
|
+
/**
|
|
1970
|
+
* Returns the bitcast method name for a given input and outputType.
|
|
1971
|
+
*
|
|
1972
|
+
* @param {string} type - The output type to bitcast to.
|
|
1973
|
+
* @return {string} The resolved WGSL bitcast invocation.
|
|
1974
|
+
*/
|
|
1975
|
+
getBitcastMethod( type ) {
|
|
1976
|
+
|
|
1977
|
+
const dataType = this.getType( type );
|
|
1978
|
+
|
|
1979
|
+
return `bitcast<${ dataType }>`;
|
|
1980
|
+
|
|
1981
|
+
}
|
|
1982
|
+
|
|
1983
|
+
/**
|
|
1984
|
+
* Returns the native snippet for a ternary operation.
|
|
1985
|
+
*
|
|
1986
|
+
* @param {string} condSnippet - The condition determining which expression gets resolved.
|
|
1987
|
+
* @param {string} ifSnippet - The expression to resolve to if the condition is true.
|
|
1988
|
+
* @param {string} elseSnippet - The expression to resolve to if the condition is false.
|
|
1989
|
+
* @return {string} The resolved method name.
|
|
1990
|
+
*/
|
|
1991
|
+
getTernary( condSnippet, ifSnippet, elseSnippet ) {
|
|
1992
|
+
|
|
1993
|
+
return `select( ${elseSnippet}, ${ifSnippet}, ${condSnippet} )`;
|
|
1994
|
+
|
|
1995
|
+
}
|
|
1996
|
+
|
|
1997
|
+
|
|
1902
1998
|
/**
|
|
1903
1999
|
* Returns the WGSL type of the given node data type.
|
|
1904
2000
|
*
|
|
@@ -1973,11 +2069,7 @@ ${ flowData.code }
|
|
|
1973
2069
|
const codeNode = wgslPolyfill[ name ];
|
|
1974
2070
|
codeNode.build( this );
|
|
1975
2071
|
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
this.currentFunctionNode.includes.push( codeNode );
|
|
1979
|
-
|
|
1980
|
-
}
|
|
2072
|
+
this.addInclude( codeNode );
|
|
1981
2073
|
|
|
1982
2074
|
return codeNode;
|
|
1983
2075
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { GPUInputStepMode } from './WebGPUConstants.js';
|
|
2
2
|
|
|
3
3
|
import { Float16BufferAttribute } from '../../../core/BufferAttribute.js';
|
|
4
|
+
import { error } from '../../../utils.js';
|
|
4
5
|
|
|
5
6
|
const typedArraysToVertexFormatPrefix = new Map( [
|
|
6
7
|
[ Int8Array, [ 'sint8', 'snorm8' ]],
|
|
@@ -406,7 +407,7 @@ class WebGPUAttributeUtils {
|
|
|
406
407
|
|
|
407
408
|
if ( ! format ) {
|
|
408
409
|
|
|
409
|
-
|
|
410
|
+
error( 'WebGPUAttributeUtils: Vertex format not supported yet.' );
|
|
410
411
|
|
|
411
412
|
}
|
|
412
413
|
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
|
|
6
6
|
import { FloatType, IntType, UnsignedIntType } from '../../../constants.js';
|
|
7
7
|
import { NodeAccess } from '../../../nodes/core/constants.js';
|
|
8
|
+
import { error } from '../../../utils.js';
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* A WebGPU backend utility module for managing bindings.
|
|
@@ -222,7 +223,7 @@ class WebGPUBindingUtils {
|
|
|
222
223
|
|
|
223
224
|
} else {
|
|
224
225
|
|
|
225
|
-
|
|
226
|
+
error( `WebGPUBindingUtils: Unsupported binding "${ binding }".` );
|
|
226
227
|
|
|
227
228
|
}
|
|
228
229
|
|
|
@@ -414,6 +415,7 @@ class WebGPUBindingUtils {
|
|
|
414
415
|
} else {
|
|
415
416
|
|
|
416
417
|
const mipLevelCount = binding.store ? 1 : textureData.texture.mipLevelCount;
|
|
418
|
+
const baseMipLevel = binding.store ? binding.mipLevel : 0;
|
|
417
419
|
let propertyName = `view-${ textureData.texture.width }-${ textureData.texture.height }`;
|
|
418
420
|
|
|
419
421
|
if ( textureData.texture.depthOrArrayLayers > 1 ) {
|
|
@@ -422,7 +424,7 @@ class WebGPUBindingUtils {
|
|
|
422
424
|
|
|
423
425
|
}
|
|
424
426
|
|
|
425
|
-
propertyName += `-${ mipLevelCount }`;
|
|
427
|
+
propertyName += `-${ mipLevelCount }-${ baseMipLevel }`;
|
|
426
428
|
|
|
427
429
|
resourceGPU = textureData[ propertyName ];
|
|
428
430
|
|
|
@@ -450,7 +452,7 @@ class WebGPUBindingUtils {
|
|
|
450
452
|
|
|
451
453
|
}
|
|
452
454
|
|
|
453
|
-
resourceGPU = textureData[ propertyName ] = textureData.texture.createView( { aspect: aspectGPU, dimension: dimensionViewGPU, mipLevelCount } );
|
|
455
|
+
resourceGPU = textureData[ propertyName ] = textureData.texture.createView( { aspect: aspectGPU, dimension: dimensionViewGPU, mipLevelCount, baseMipLevel } );
|
|
454
456
|
|
|
455
457
|
}
|
|
456
458
|
|
|
@@ -113,7 +113,7 @@ export const GPUTextureFormat = {
|
|
|
113
113
|
// Packed 32-bit formats
|
|
114
114
|
RGB9E5UFloat: 'rgb9e5ufloat',
|
|
115
115
|
RGB10A2Unorm: 'rgb10a2unorm',
|
|
116
|
-
RG11B10UFloat: '
|
|
116
|
+
RG11B10UFloat: 'rg11b10ufloat',
|
|
117
117
|
|
|
118
118
|
// 64-bit formats
|
|
119
119
|
|
|
@@ -158,7 +158,7 @@ export const GPUTextureFormat = {
|
|
|
158
158
|
BC6HRGBUFloat: 'bc6h-rgb-ufloat',
|
|
159
159
|
BC6HRGBFloat: 'bc6h-rgb-float',
|
|
160
160
|
BC7RGBAUnorm: 'bc7-rgba-unorm',
|
|
161
|
-
BC7RGBAUnormSRGB: 'bc7-rgba-srgb',
|
|
161
|
+
BC7RGBAUnormSRGB: 'bc7-rgba-unorm-srgb',
|
|
162
162
|
|
|
163
163
|
// ETC2 compressed formats usable if 'texture-compression-etc2' is both
|
|
164
164
|
// supported by the device/user agent and enabled in requestDevice.
|
|
@@ -337,3 +337,8 @@ export const GPUFeatureName = {
|
|
|
337
337
|
TextureFormatsTier1: 'texture-formats-tier1',
|
|
338
338
|
TextureFormatsTier2: 'texture-formats-tier2'
|
|
339
339
|
};
|
|
340
|
+
|
|
341
|
+
export const GPUFeatureMap = {
|
|
342
|
+
'texture-compression-s3tc': 'texture-compression-bc',
|
|
343
|
+
'texture-compression-etc1': 'texture-compression-etc2'
|
|
344
|
+
};
|