super-three 0.133.4 → 0.136.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/LICENSE +1 -1
- package/build/three.js +2285 -1983
- package/build/three.min.js +1 -1
- package/build/three.module.js +5983 -5358
- package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
- package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
- package/examples/fonts/open-sans/open-sans.css +9 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
- package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
- package/examples/js/animation/CCDIKSolver.js +0 -1
- package/examples/js/animation/MMDPhysics.js +2 -4
- package/examples/js/cameras/CinematicCamera.js +2 -7
- package/examples/js/controls/ArcballControls.js +99 -72
- package/examples/js/controls/DragControls.js +7 -0
- package/examples/js/controls/OrbitControls.js +5 -36
- package/examples/js/controls/TrackballControls.js +3 -2
- package/examples/js/controls/TransformControls.js +24 -1
- package/examples/js/csm/CSM.js +2 -2
- package/examples/js/csm/CSMFrustum.js +133 -0
- package/examples/js/curves/CurveExtras.js +0 -2
- package/examples/js/effects/AsciiEffect.js +2 -9
- package/examples/js/exporters/GLTFExporter.js +148 -64
- package/examples/js/exporters/MMDExporter.js +1 -1
- package/examples/js/exporters/USDZExporter.js +45 -26
- package/examples/js/geometries/ConvexGeometry.js +1 -1
- package/examples/js/geometries/TeapotGeometry.js +0 -1
- package/examples/js/interactive/SelectionBox.js +2 -0
- package/examples/js/interactive/SelectionHelper.js +22 -7
- package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
- package/examples/js/lines/LineMaterial.js +58 -20
- package/examples/js/lines/LineSegments2.js +29 -24
- package/examples/js/loaders/3DMLoader.js +24 -11
- package/examples/js/loaders/3MFLoader.js +2 -2
- package/examples/js/loaders/AMFLoader.js +0 -2
- package/examples/js/loaders/BasisTextureLoader.js +1 -0
- package/examples/js/loaders/ColladaLoader.js +61 -4
- package/examples/js/loaders/EXRLoader.js +201 -272
- package/examples/js/loaders/FBXLoader.js +4 -5
- package/examples/js/loaders/GLTFLoader.js +98 -35
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -10
- package/examples/js/loaders/KTX2Loader.js +23 -2
- package/examples/js/loaders/KTXLoader.js +1 -1
- package/examples/js/loaders/LDrawLoader.js +1169 -901
- package/examples/js/loaders/LUT3dlLoader.js +19 -10
- package/examples/js/loaders/LUTCubeLoader.js +5 -4
- package/examples/js/loaders/LWOLoader.js +8 -6
- package/examples/js/loaders/LogLuvLoader.js +766 -0
- package/examples/js/loaders/MMDLoader.js +0 -1
- package/examples/js/loaders/NRRDLoader.js +9 -2
- package/examples/js/loaders/OBJLoader.js +0 -2
- package/examples/js/loaders/PLYLoader.js +33 -8
- package/examples/js/loaders/RGBELoader.js +8 -22
- package/examples/js/loaders/RGBMLoader.js +56 -6
- package/examples/js/loaders/SVGLoader.js +12 -6
- package/examples/js/loaders/TDSLoader.js +237 -271
- package/examples/js/loaders/VOXLoader.js +1 -0
- package/examples/js/loaders/VRMLLoader.js +11 -22
- package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
- package/examples/js/math/ConvexHull.js +7 -13
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/misc/GPUComputationRenderer.js +3 -1
- package/examples/js/misc/Volume.js +2 -2
- package/examples/js/modifiers/CurveModifier.js +8 -7
- package/examples/js/modifiers/EdgeSplitModifier.js +1 -1
- package/examples/js/modifiers/SimplifyModifier.js +1 -1
- package/examples/js/objects/Lensflare.js +2 -10
- package/examples/js/objects/MarchingCubes.js +42 -128
- package/examples/js/objects/Reflector.js +8 -13
- package/examples/js/objects/ReflectorForSSRPass.js +0 -10
- package/examples/js/objects/Refractor.js +8 -13
- package/examples/js/objects/Sky.js +1 -1
- package/examples/js/objects/Water.js +3 -15
- package/examples/js/objects/Water2.js +4 -7
- package/examples/js/postprocessing/GlitchPass.js +6 -5
- package/examples/js/postprocessing/SMAAPass.js +2 -9
- package/examples/js/postprocessing/SSAOPass.js +10 -21
- package/examples/js/postprocessing/SavePass.js +1 -5
- package/examples/js/renderers/CSS2DRenderer.js +4 -4
- package/examples/js/renderers/CSS3DRenderer.js +4 -4
- package/examples/js/shaders/ConvolutionShader.js +0 -1
- package/examples/js/shaders/DigitalGlitch.js +3 -3
- package/examples/js/shaders/FXAAShader.js +1 -1
- package/examples/js/shaders/FilmShader.js +1 -1
- package/examples/js/shaders/GammaCorrectionShader.js +1 -1
- package/examples/js/shaders/HorizontalBlurShader.js +1 -2
- package/examples/js/shaders/MMDToonShader.js +0 -1
- package/examples/js/shaders/SSAOShader.js +1 -1
- package/examples/js/shaders/SSRShader.js +1 -1
- package/examples/js/shaders/SSRrShader.js +1 -1
- package/examples/js/shaders/VerticalBlurShader.js +1 -2
- package/examples/js/utils/GeometryUtils.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +0 -1
- package/examples/jsm/animation/MMDPhysics.js +1 -3
- package/examples/jsm/cameras/CinematicCamera.js +2 -5
- package/examples/jsm/{WebGL.js → capabilities/WebGL.js} +2 -2
- package/examples/jsm/{renderers/webgpu → capabilities}/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +80 -77
- package/examples/jsm/controls/DragControls.js +7 -0
- package/examples/jsm/controls/OrbitControls.js +9 -51
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +24 -1
- package/examples/jsm/csm/CSM.js +3 -3
- package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
- package/examples/jsm/curves/CurveExtras.js +0 -2
- package/examples/jsm/effects/AsciiEffect.js +2 -9
- package/examples/jsm/exporters/GLTFExporter.js +169 -99
- package/examples/jsm/exporters/MMDExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +47 -26
- package/examples/jsm/geometries/ConvexGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +0 -1
- package/examples/jsm/interactive/SelectionBox.js +1 -0
- package/examples/jsm/interactive/SelectionHelper.js +19 -7
- package/examples/jsm/libs/flow.module.js +3338 -0
- package/examples/jsm/libs/lil-gui.module.min.js +8 -0
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
- package/examples/jsm/lines/LineMaterial.js +59 -23
- package/examples/jsm/lines/LineSegments2.js +22 -18
- package/examples/jsm/loaders/3DMLoader.js +18 -12
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +0 -2
- package/examples/jsm/loaders/BasisTextureLoader.js +7 -0
- package/examples/jsm/loaders/ColladaLoader.js +61 -4
- package/examples/jsm/loaders/EXRLoader.js +200 -306
- package/examples/jsm/loaders/FBXLoader.js +4 -5
- package/examples/jsm/loaders/GLTFLoader.js +102 -40
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -17
- package/examples/jsm/loaders/KTX2Loader.js +30 -2
- package/examples/jsm/loaders/KTXLoader.js +1 -1
- package/examples/jsm/loaders/LDrawLoader.js +1159 -898
- package/examples/jsm/loaders/LUT3dlLoader.js +19 -12
- package/examples/jsm/loaders/LUTCubeLoader.js +5 -5
- package/examples/jsm/loaders/LWOLoader.js +8 -6
- package/examples/jsm/loaders/LogLuvLoader.js +606 -0
- package/examples/jsm/loaders/MMDLoader.js +0 -1
- package/examples/jsm/loaders/NRRDLoader.js +10 -2
- package/examples/jsm/loaders/OBJLoader.js +0 -2
- package/examples/jsm/loaders/PLYLoader.js +34 -8
- package/examples/jsm/loaders/RGBELoader.js +7 -28
- package/examples/jsm/loaders/RGBMLoader.js +62 -8
- package/examples/jsm/loaders/SVGLoader.js +15 -7
- package/examples/jsm/loaders/TDSLoader.js +236 -275
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +11 -23
- package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
- package/examples/jsm/math/ConvexHull.js +7 -13
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
- package/examples/jsm/misc/Volume.js +2 -2
- package/examples/jsm/modifiers/CurveModifier.js +9 -8
- package/examples/jsm/modifiers/EdgeSplitModifier.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/node-editor/NodeEditor.js +455 -0
- package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
- package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
- package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
- package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
- package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
- package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
- package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
- package/examples/jsm/node-editor/examples/rim.json +1 -0
- package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
- package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
- package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
- package/examples/jsm/node-editor/math/DotEditor.js +36 -0
- package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
- package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
- package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
- package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
- package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
- package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
- package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
- package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
- package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
- package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
- package/examples/jsm/nodes/math/MathNode.js +12 -0
- package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
- package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
- package/examples/jsm/nodes/utils/ColorSpaceNode.js +5 -177
- package/examples/jsm/objects/Lensflare.js +5 -16
- package/examples/jsm/objects/MarchingCubes.js +46 -152
- package/examples/jsm/objects/Reflector.js +8 -16
- package/examples/jsm/objects/ReflectorForSSRPass.js +0 -12
- package/examples/jsm/objects/Refractor.js +8 -16
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/Water.js +3 -18
- package/examples/jsm/objects/Water2.js +4 -8
- package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
- package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
- package/examples/jsm/postprocessing/BloomPass.js +1 -1
- package/examples/jsm/postprocessing/BokehPass.js +1 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -1
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
- package/examples/jsm/postprocessing/EffectComposer.js +3 -3
- package/examples/jsm/postprocessing/FilmPass.js +1 -1
- package/examples/jsm/postprocessing/GlitchPass.js +10 -7
- package/examples/jsm/postprocessing/HalftonePass.js +1 -1
- package/examples/jsm/postprocessing/MaskPass.js +1 -1
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -1
- package/examples/jsm/postprocessing/SAOPass.js +2 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -12
- package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +15 -26
- package/examples/jsm/postprocessing/SSRPass.js +1 -1
- package/examples/jsm/postprocessing/SSRrPass.js +1 -1
- package/examples/jsm/postprocessing/SavePass.js +2 -4
- package/examples/jsm/postprocessing/ShaderPass.js +1 -1
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/TexturePass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
- package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
- package/examples/jsm/renderers/nodes/Nodes.js +17 -13
- package/examples/jsm/renderers/nodes/ShaderNode.js +229 -49
- package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
- package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
- package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
- package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
- package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
- package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
- package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
- package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
- package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
- package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
- package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
- package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
- package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
- package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
- package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
- package/examples/jsm/renderers/nodes/core/Node.js +32 -10
- package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
- package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
- package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
- package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
- package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
- package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
- package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
- package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
- package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
- package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
- package/examples/jsm/renderers/nodes/core/constants.js +2 -0
- package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +43 -63
- package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
- package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
- package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
- package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
- package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
- package/examples/jsm/renderers/nodes/inputs/TextureNode.js +13 -10
- package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
- package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
- package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
- package/examples/jsm/renderers/nodes/math/MathNode.js +91 -37
- package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
- package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
- package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
- package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
- package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
- package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
- package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
- package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
- package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
- package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
- package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
- package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
- package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
- package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
- package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
- package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
- package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
- package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +13 -31
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +35 -29
- package/examples/jsm/renderers/webgpu/constants.js +2 -2
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +459 -95
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
- package/examples/jsm/shaders/ConvolutionShader.js +0 -1
- package/examples/jsm/shaders/DigitalGlitch.js +3 -3
- package/examples/jsm/shaders/FXAAShader.js +1 -1
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
- package/examples/jsm/shaders/MMDToonShader.js +0 -1
- package/examples/jsm/shaders/SSAOShader.js +1 -1
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SSRrShader.js +1 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
- package/examples/jsm/utils/GeometryUtils.js +1 -1
- package/examples/jsm/utils/LDrawUtils.js +195 -0
- package/examples/jsm/utils/WorkerPool.js +11 -11
- package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
- package/examples/jsm/webxr/VRButton.js +24 -0
- package/examples/jsm/webxr/XREstimatedLight.js +2 -0
- package/package.json +27 -18
- package/src/Three.Legacy.js +18 -0
- package/src/Three.js +1 -3
- package/src/animation/AnimationMixer.js +1 -0
- package/src/cameras/CubeCamera.js +2 -0
- package/src/cameras/StereoCamera.js +8 -7
- package/src/constants.js +3 -23
- package/src/core/Layers.js +7 -1
- package/src/core/Object3D.js +3 -1
- package/src/extras/ImageUtils.js +63 -0
- package/src/extras/PMREMGenerator.js +49 -185
- package/src/extras/core/Interpolations.js +1 -1
- package/src/geometries/LatheGeometry.js +70 -47
- package/src/helpers/CameraHelper.js +1 -1
- package/src/loaders/FileLoader.js +98 -144
- package/src/loaders/ImageLoader.js +9 -4
- package/src/loaders/LoaderUtils.js +26 -0
- package/src/loaders/MaterialLoader.js +8 -5
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/Material.js +8 -8
- package/src/materials/MeshPhysicalMaterial.js +20 -14
- package/src/math/Color.js +1 -39
- package/src/math/MathUtils.js +5 -16
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -2
- package/src/math/Sphere.js +10 -1
- package/src/objects/Skeleton.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +0 -2
- package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
- package/src/renderers/WebGLRenderer.js +106 -199
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -78
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +10 -3
- package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +9 -8
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -3
- package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -3
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib.js +8 -6
- package/src/renderers/shaders/UniformsLib.js +1 -2
- package/src/renderers/webgl/WebGLCapabilities.js +0 -2
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -4
- package/src/renderers/webgl/WebGLCubeUVMaps.js +29 -16
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLMaterials.js +27 -15
- package/src/renderers/webgl/WebGLMorphtargets.js +13 -0
- package/src/renderers/webgl/WebGLProgram.js +12 -37
- package/src/renderers/webgl/WebGLPrograms.js +192 -70
- package/src/renderers/webgl/WebGLRenderLists.js +4 -14
- package/src/renderers/webgl/WebGLShaderCache.js +120 -0
- package/src/renderers/webgl/WebGLShadowMap.js +14 -5
- package/src/renderers/webgl/WebGLState.js +157 -17
- package/src/renderers/webgl/WebGLTextures.js +442 -83
- package/src/renderers/webgl/WebGLUniforms.js +45 -1
- package/src/renderers/webgl/WebGLUtils.js +86 -28
- package/src/renderers/webxr/WebXRManager.js +77 -109
- package/src/scenes/Scene.js +1 -1
- package/src/textures/DataTexture.js +0 -2
- package/src/textures/DataTexture2DArray.js +0 -2
- package/src/textures/DataTexture3D.js +0 -2
- package/src/textures/FramebufferTexture.js +25 -0
- package/src/textures/Texture.js +8 -1
- package/src/textures/VideoTexture.js +1 -3
- package/examples/js/WebGL.js +0 -90
- package/examples/js/controls/DeviceOrientationControls.js +0 -147
- package/examples/js/libs/dat.gui.min.js +0 -14
- package/examples/js/utils/RoughnessMipmapper.js +0 -278
- package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
- package/examples/jsm/libs/dat.gui.module.js +0 -3575
- package/examples/jsm/libs/glslang.js +0 -78
- package/examples/jsm/libs/glslang.wasm +0 -0
- package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
- package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
- package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
- package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
- package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
- package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
- package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
- package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
- package/examples/jsm/utils/RoughnessMipmapper.js +0 -300
- package/src/extras/objects/ImmediateRenderObject.js +0 -31
|
@@ -3,14 +3,13 @@ import WebGPUProgrammableStage from './WebGPUProgrammableStage.js';
|
|
|
3
3
|
|
|
4
4
|
class WebGPURenderPipelines {
|
|
5
5
|
|
|
6
|
-
constructor( renderer,
|
|
6
|
+
constructor( renderer, device, sampleCount, nodes, bindings = null ) {
|
|
7
7
|
|
|
8
8
|
this.renderer = renderer;
|
|
9
|
-
this.properties = properties;
|
|
10
9
|
this.device = device;
|
|
11
|
-
this.glslang = glslang;
|
|
12
10
|
this.sampleCount = sampleCount;
|
|
13
11
|
this.nodes = nodes;
|
|
12
|
+
this.bindings = bindings;
|
|
14
13
|
|
|
15
14
|
this.pipelines = [];
|
|
16
15
|
this.objectCache = new WeakMap();
|
|
@@ -25,11 +24,7 @@ class WebGPURenderPipelines {
|
|
|
25
24
|
get( object ) {
|
|
26
25
|
|
|
27
26
|
const device = this.device;
|
|
28
|
-
const glslang = this.glslang;
|
|
29
|
-
const properties = this.properties;
|
|
30
|
-
|
|
31
27
|
const material = object.material;
|
|
32
|
-
const materialProperties = properties.get( material );
|
|
33
28
|
|
|
34
29
|
const cache = this._getCache( object );
|
|
35
30
|
|
|
@@ -37,6 +32,14 @@ class WebGPURenderPipelines {
|
|
|
37
32
|
|
|
38
33
|
if ( this._needsUpdate( object, cache ) ) {
|
|
39
34
|
|
|
35
|
+
// release previous cache
|
|
36
|
+
|
|
37
|
+
if ( cache.currentPipeline !== undefined ) {
|
|
38
|
+
|
|
39
|
+
this._releaseObject( object );
|
|
40
|
+
|
|
41
|
+
}
|
|
42
|
+
|
|
40
43
|
// get shader
|
|
41
44
|
|
|
42
45
|
const nodeBuilder = this.nodes.get( object );
|
|
@@ -47,7 +50,7 @@ class WebGPURenderPipelines {
|
|
|
47
50
|
|
|
48
51
|
if ( stageVertex === undefined ) {
|
|
49
52
|
|
|
50
|
-
stageVertex = new WebGPUProgrammableStage( device,
|
|
53
|
+
stageVertex = new WebGPUProgrammableStage( device, nodeBuilder.vertexShader, 'vertex' );
|
|
51
54
|
this.stages.vertex.set( nodeBuilder.vertexShader, stageVertex );
|
|
52
55
|
|
|
53
56
|
}
|
|
@@ -56,7 +59,7 @@ class WebGPURenderPipelines {
|
|
|
56
59
|
|
|
57
60
|
if ( stageFragment === undefined ) {
|
|
58
61
|
|
|
59
|
-
stageFragment = new WebGPUProgrammableStage( device,
|
|
62
|
+
stageFragment = new WebGPUProgrammableStage( device, nodeBuilder.fragmentShader, 'fragment' );
|
|
60
63
|
this.stages.fragment.set( nodeBuilder.fragmentShader, stageFragment );
|
|
61
64
|
|
|
62
65
|
}
|
|
@@ -66,37 +69,15 @@ class WebGPURenderPipelines {
|
|
|
66
69
|
currentPipeline = this._acquirePipeline( stageVertex, stageFragment, object, nodeBuilder );
|
|
67
70
|
cache.currentPipeline = currentPipeline;
|
|
68
71
|
|
|
69
|
-
// keep track of all
|
|
70
|
-
|
|
71
|
-
let materialPipelines = materialProperties.pipelines;
|
|
72
|
-
|
|
73
|
-
if ( materialPipelines === undefined ) {
|
|
74
|
-
|
|
75
|
-
materialPipelines = new Set();
|
|
76
|
-
materialProperties.pipelines = materialPipelines;
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
if ( materialPipelines.has( currentPipeline ) === false ) {
|
|
72
|
+
// keep track of all used times
|
|
81
73
|
|
|
82
|
-
|
|
74
|
+
currentPipeline.usedTimes ++;
|
|
75
|
+
stageVertex.usedTimes ++;
|
|
76
|
+
stageFragment.usedTimes ++;
|
|
83
77
|
|
|
84
|
-
|
|
85
|
-
stageVertex.usedTimes ++;
|
|
86
|
-
stageFragment.usedTimes ++;
|
|
78
|
+
// events
|
|
87
79
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
// dispose
|
|
91
|
-
|
|
92
|
-
if ( materialProperties.disposeCallback === undefined ) {
|
|
93
|
-
|
|
94
|
-
const disposeCallback = onMaterialDispose.bind( this );
|
|
95
|
-
materialProperties.disposeCallback = disposeCallback;
|
|
96
|
-
|
|
97
|
-
material.addEventListener( 'dispose', disposeCallback );
|
|
98
|
-
|
|
99
|
-
}
|
|
80
|
+
material.addEventListener( 'dispose', cache.dispose );
|
|
100
81
|
|
|
101
82
|
} else {
|
|
102
83
|
|
|
@@ -184,7 +165,20 @@ class WebGPURenderPipelines {
|
|
|
184
165
|
|
|
185
166
|
if ( cache === undefined ) {
|
|
186
167
|
|
|
187
|
-
cache = {
|
|
168
|
+
cache = {
|
|
169
|
+
|
|
170
|
+
dispose: () => {
|
|
171
|
+
|
|
172
|
+
this._releaseObject( object );
|
|
173
|
+
|
|
174
|
+
this.objectCache.delete( object );
|
|
175
|
+
|
|
176
|
+
object.material.removeEventListener( 'dispose', cache.dispose );
|
|
177
|
+
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
};
|
|
181
|
+
|
|
188
182
|
this.objectCache.set( object, cache );
|
|
189
183
|
|
|
190
184
|
}
|
|
@@ -193,6 +187,18 @@ class WebGPURenderPipelines {
|
|
|
193
187
|
|
|
194
188
|
}
|
|
195
189
|
|
|
190
|
+
_releaseObject( object ) {
|
|
191
|
+
|
|
192
|
+
const cache = this.objectCache.get( object );
|
|
193
|
+
|
|
194
|
+
this._releasePipeline( cache.currentPipeline );
|
|
195
|
+
delete cache.currentPipeline;
|
|
196
|
+
|
|
197
|
+
this.nodes.remove( object );
|
|
198
|
+
this.bindings.remove( object );
|
|
199
|
+
|
|
200
|
+
}
|
|
201
|
+
|
|
196
202
|
_releasePipeline( pipeline ) {
|
|
197
203
|
|
|
198
204
|
if ( -- pipeline.usedTimes === 0 ) {
|
|
@@ -284,31 +290,4 @@ class WebGPURenderPipelines {
|
|
|
284
290
|
|
|
285
291
|
}
|
|
286
292
|
|
|
287
|
-
function onMaterialDispose( event ) {
|
|
288
|
-
|
|
289
|
-
const properties = this.properties;
|
|
290
|
-
|
|
291
|
-
const material = event.target;
|
|
292
|
-
const materialProperties = properties.get( material );
|
|
293
|
-
|
|
294
|
-
material.removeEventListener( 'dispose', materialProperties.disposeCallback );
|
|
295
|
-
|
|
296
|
-
properties.remove( material );
|
|
297
|
-
|
|
298
|
-
// remove references to pipelines
|
|
299
|
-
|
|
300
|
-
const pipelines = materialProperties.pipelines;
|
|
301
|
-
|
|
302
|
-
if ( pipelines !== undefined ) {
|
|
303
|
-
|
|
304
|
-
for ( const pipeline of pipelines ) {
|
|
305
|
-
|
|
306
|
-
this._releasePipeline( pipeline );
|
|
307
|
-
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
}
|
|
313
|
-
|
|
314
293
|
export default WebGPURenderPipelines;
|
|
@@ -12,8 +12,6 @@ import WebGPUTextures from './WebGPUTextures.js';
|
|
|
12
12
|
import WebGPUBackground from './WebGPUBackground.js';
|
|
13
13
|
import WebGPUNodes from './nodes/WebGPUNodes.js';
|
|
14
14
|
|
|
15
|
-
import glslang from '../../libs/glslang.js';
|
|
16
|
-
|
|
17
15
|
import { Frustum, Matrix4, Vector3, Color, LinearEncoding } from 'three';
|
|
18
16
|
|
|
19
17
|
console.info( 'THREE.WebGPURenderer: Modified Matrix4.makePerspective() and Matrix4.makeOrtographic() to work with WebGPU, see https://github.com/mrdoob/three.js/issues/20276.' );
|
|
@@ -94,7 +92,6 @@ class WebGPURenderer {
|
|
|
94
92
|
this._adapter = null;
|
|
95
93
|
this._device = null;
|
|
96
94
|
this._context = null;
|
|
97
|
-
this._swapChain = null;
|
|
98
95
|
this._colorBuffer = null;
|
|
99
96
|
this._depthBuffer = null;
|
|
100
97
|
|
|
@@ -166,30 +163,27 @@ class WebGPURenderer {
|
|
|
166
163
|
|
|
167
164
|
const device = await adapter.requestDevice( deviceDescriptor );
|
|
168
165
|
|
|
169
|
-
const compiler = await glslang();
|
|
170
|
-
|
|
171
166
|
const context = ( parameters.context !== undefined ) ? parameters.context : this.domElement.getContext( 'webgpu' );
|
|
172
167
|
|
|
173
|
-
|
|
168
|
+
context.configure( {
|
|
174
169
|
device: device,
|
|
175
|
-
format: GPUTextureFormat.
|
|
170
|
+
format: GPUTextureFormat.BGRA8Unorm // this is the only valid context format right now (r121)
|
|
176
171
|
} );
|
|
177
172
|
|
|
178
173
|
this._adapter = adapter;
|
|
179
174
|
this._device = device;
|
|
180
175
|
this._context = context;
|
|
181
|
-
this._swapChain = swapChain;
|
|
182
176
|
|
|
183
177
|
this._info = new WebGPUInfo();
|
|
184
178
|
this._properties = new WebGPUProperties();
|
|
185
179
|
this._attributes = new WebGPUAttributes( device );
|
|
186
180
|
this._geometries = new WebGPUGeometries( this._attributes, this._info );
|
|
187
|
-
this._textures = new WebGPUTextures( device, this._properties, this._info
|
|
181
|
+
this._textures = new WebGPUTextures( device, this._properties, this._info );
|
|
188
182
|
this._objects = new WebGPUObjects( this._geometries, this._info );
|
|
189
183
|
this._nodes = new WebGPUNodes( this );
|
|
190
|
-
this.
|
|
191
|
-
this.
|
|
192
|
-
this._bindings = new WebGPUBindings( device, this._info, this._properties, this._textures, this._renderPipelines, this._computePipelines, this._attributes, this._nodes );
|
|
184
|
+
this._computePipelines = new WebGPUComputePipelines( device );
|
|
185
|
+
this._renderPipelines = new WebGPURenderPipelines( this, device, parameters.sampleCount, this._nodes );
|
|
186
|
+
this._bindings = this._renderPipelines.bindings = new WebGPUBindings( device, this._info, this._properties, this._textures, this._renderPipelines, this._computePipelines, this._attributes, this._nodes );
|
|
193
187
|
this._renderLists = new WebGPURenderLists();
|
|
194
188
|
this._background = new WebGPUBackground( this );
|
|
195
189
|
|
|
@@ -493,7 +487,7 @@ class WebGPURenderer {
|
|
|
493
487
|
|
|
494
488
|
} else {
|
|
495
489
|
|
|
496
|
-
format = GPUTextureFormat.
|
|
490
|
+
format = GPUTextureFormat.BGRA8Unorm; // default context format
|
|
497
491
|
|
|
498
492
|
}
|
|
499
493
|
|
|
@@ -639,7 +633,6 @@ class WebGPURenderer {
|
|
|
639
633
|
|
|
640
634
|
_projectObject( object, camera, groupOrder ) {
|
|
641
635
|
|
|
642
|
-
const info = this._info;
|
|
643
636
|
const currentRenderList = this._currentRenderList;
|
|
644
637
|
|
|
645
638
|
if ( object.visible === false ) return;
|
|
@@ -693,19 +686,6 @@ class WebGPURenderer {
|
|
|
693
686
|
|
|
694
687
|
} else if ( object.isMesh || object.isLine || object.isPoints ) {
|
|
695
688
|
|
|
696
|
-
if ( object.isSkinnedMesh ) {
|
|
697
|
-
|
|
698
|
-
// update skeleton only once in a frame
|
|
699
|
-
|
|
700
|
-
if ( object.skeleton.frame !== info.render.frame ) {
|
|
701
|
-
|
|
702
|
-
object.skeleton.update();
|
|
703
|
-
object.skeleton.frame = info.render.frame;
|
|
704
|
-
|
|
705
|
-
}
|
|
706
|
-
|
|
707
|
-
}
|
|
708
|
-
|
|
709
689
|
if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {
|
|
710
690
|
|
|
711
691
|
if ( this.sortObjects === true ) {
|
|
@@ -791,7 +771,7 @@ class WebGPURenderer {
|
|
|
791
771
|
passEncoder.setViewport( vp.x, vp.y, vp.width, vp.height, minDepth, maxDepth );
|
|
792
772
|
|
|
793
773
|
this._nodes.update( object, camera2 );
|
|
794
|
-
this._bindings.update( object
|
|
774
|
+
this._bindings.update( object );
|
|
795
775
|
this._renderObject( object, passEncoder );
|
|
796
776
|
|
|
797
777
|
}
|
|
@@ -801,7 +781,7 @@ class WebGPURenderer {
|
|
|
801
781
|
} else {
|
|
802
782
|
|
|
803
783
|
this._nodes.update( object, camera );
|
|
804
|
-
this._bindings.update( object
|
|
784
|
+
this._bindings.update( object );
|
|
805
785
|
this._renderObject( object, passEncoder );
|
|
806
786
|
|
|
807
787
|
}
|
|
@@ -914,7 +894,7 @@ class WebGPURenderer {
|
|
|
914
894
|
depthOrArrayLayers: 1
|
|
915
895
|
},
|
|
916
896
|
sampleCount: this._parameters.sampleCount,
|
|
917
|
-
format: GPUTextureFormat.
|
|
897
|
+
format: GPUTextureFormat.BGRA8Unorm,
|
|
918
898
|
usage: GPUTextureUsage.RENDER_ATTACHMENT
|
|
919
899
|
} );
|
|
920
900
|
|
|
@@ -953,7 +933,7 @@ class WebGPURenderer {
|
|
|
953
933
|
|
|
954
934
|
this._context.configure( {
|
|
955
935
|
device: device,
|
|
956
|
-
format: GPUTextureFormat.
|
|
936
|
+
format: GPUTextureFormat.BGRA8Unorm,
|
|
957
937
|
usage: GPUTextureUsage.RENDER_ATTACHMENT,
|
|
958
938
|
size: {
|
|
959
939
|
width: Math.floor( this._width * this._pixelRatio ),
|
|
@@ -976,4 +956,6 @@ class WebGPURenderer {
|
|
|
976
956
|
|
|
977
957
|
}
|
|
978
958
|
|
|
959
|
+
WebGPURenderer.prototype.isWebGPURenderer = true;
|
|
960
|
+
|
|
979
961
|
export default WebGPURenderer;
|
|
@@ -24,28 +24,59 @@ import { GPUIndexFormat, GPUFilterMode, GPUPrimitiveTopology } from './constants
|
|
|
24
24
|
|
|
25
25
|
class WebGPUTextureUtils {
|
|
26
26
|
|
|
27
|
-
constructor( device
|
|
27
|
+
constructor( device ) {
|
|
28
28
|
|
|
29
29
|
this.device = device;
|
|
30
30
|
|
|
31
|
-
const mipmapVertexSource =
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
31
|
+
const mipmapVertexSource = `
|
|
32
|
+
struct VarysStruct {
|
|
33
|
+
|
|
34
|
+
[[ builtin( position ) ]] Position: vec4<f32>;
|
|
35
|
+
[[ location( 0 ) ]] vTex : vec2<f32>;
|
|
36
|
+
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
[[ stage( vertex ) ]]
|
|
40
|
+
fn main( [[ builtin( vertex_index ) ]] vertexIndex : u32 ) -> VarysStruct {
|
|
41
|
+
|
|
42
|
+
var Varys: VarysStruct;
|
|
43
|
+
|
|
44
|
+
var pos = array< vec2<f32>, 4 >(
|
|
45
|
+
vec2<f32>( -1.0, 1.0 ),
|
|
46
|
+
vec2<f32>( 1.0, 1.0 ),
|
|
47
|
+
vec2<f32>( -1.0, -1.0 ),
|
|
48
|
+
vec2<f32>( 1.0, -1.0 )
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
var tex = array< vec2<f32>, 4 >(
|
|
52
|
+
vec2<f32>( 0.0, 0.0 ),
|
|
53
|
+
vec2<f32>( 1.0, 0.0 ),
|
|
54
|
+
vec2<f32>( 0.0, 1.0 ),
|
|
55
|
+
vec2<f32>( 1.0, 1.0 )
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
Varys.vTex = tex[ vertexIndex ];
|
|
59
|
+
Varys.Position = vec4<f32>( pos[ vertexIndex ], 0.0, 1.0 );
|
|
60
|
+
|
|
61
|
+
return Varys;
|
|
62
|
+
|
|
63
|
+
}
|
|
64
|
+
`;
|
|
65
|
+
|
|
66
|
+
const mipmapFragmentSource = `
|
|
67
|
+
[[ group( 0 ), binding( 0 ) ]]
|
|
68
|
+
var imgSampler : sampler;
|
|
69
|
+
|
|
70
|
+
[[ group( 0 ), binding( 1 ) ]]
|
|
71
|
+
var img : texture_2d<f32>;
|
|
72
|
+
|
|
73
|
+
[[ stage( fragment ) ]]
|
|
74
|
+
fn main( [[ location( 0 ) ]] vTex : vec2<f32> ) -> [[ location( 0 ) ]] vec4<f32> {
|
|
75
|
+
|
|
76
|
+
return textureSample( img, imgSampler, vTex );
|
|
77
|
+
|
|
78
|
+
}
|
|
79
|
+
`;
|
|
49
80
|
|
|
50
81
|
this.sampler = device.createSampler( { minFilter: GPUFilterMode.Linear } );
|
|
51
82
|
|
|
@@ -53,10 +84,11 @@ class WebGPUTextureUtils {
|
|
|
53
84
|
this.pipelines = {};
|
|
54
85
|
|
|
55
86
|
this.mipmapVertexShaderModule = device.createShaderModule( {
|
|
56
|
-
code:
|
|
87
|
+
code: mipmapVertexSource
|
|
57
88
|
} );
|
|
89
|
+
|
|
58
90
|
this.mipmapFragmentShaderModule = device.createShaderModule( {
|
|
59
|
-
code:
|
|
91
|
+
code: mipmapFragmentSource
|
|
60
92
|
} );
|
|
61
93
|
|
|
62
94
|
}
|
|
@@ -82,6 +114,7 @@ class WebGPUTextureUtils {
|
|
|
82
114
|
stripIndexFormat: GPUIndexFormat.Uint32
|
|
83
115
|
}
|
|
84
116
|
} );
|
|
117
|
+
|
|
85
118
|
this.pipelines[ format ] = pipeline;
|
|
86
119
|
|
|
87
120
|
}
|
|
@@ -99,32 +132,32 @@ class WebGPUTextureUtils {
|
|
|
99
132
|
|
|
100
133
|
let srcView = textureGPU.createView( {
|
|
101
134
|
baseMipLevel: 0,
|
|
102
|
-
mipLevelCount: 1
|
|
135
|
+
mipLevelCount: 1
|
|
103
136
|
} );
|
|
104
137
|
|
|
105
138
|
for ( let i = 1; i < textureGPUDescriptor.mipLevelCount; i ++ ) {
|
|
106
139
|
|
|
107
140
|
const dstView = textureGPU.createView( {
|
|
108
141
|
baseMipLevel: i,
|
|
109
|
-
mipLevelCount: 1
|
|
142
|
+
mipLevelCount: 1
|
|
110
143
|
} );
|
|
111
144
|
|
|
112
145
|
const passEncoder = commandEncoder.beginRenderPass( {
|
|
113
146
|
colorAttachments: [ {
|
|
114
147
|
view: dstView,
|
|
115
|
-
loadValue: [ 0, 0, 0, 0 ]
|
|
116
|
-
} ]
|
|
148
|
+
loadValue: [ 0, 0, 0, 0 ]
|
|
149
|
+
} ]
|
|
117
150
|
} );
|
|
118
151
|
|
|
119
152
|
const bindGroup = this.device.createBindGroup( {
|
|
120
153
|
layout: bindGroupLayout,
|
|
121
154
|
entries: [ {
|
|
122
155
|
binding: 0,
|
|
123
|
-
resource: this.sampler
|
|
156
|
+
resource: this.sampler
|
|
124
157
|
}, {
|
|
125
158
|
binding: 1,
|
|
126
|
-
resource: srcView
|
|
127
|
-
} ]
|
|
159
|
+
resource: srcView
|
|
160
|
+
} ]
|
|
128
161
|
} );
|
|
129
162
|
|
|
130
163
|
passEncoder.setPipeline( pipeline );
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { GPUTextureFormat, GPUAddressMode, GPUFilterMode, GPUTextureDimension } from './constants.js';
|
|
2
2
|
import { CubeTexture, Texture, NearestFilter, NearestMipmapNearestFilter, NearestMipmapLinearFilter, LinearFilter, RepeatWrapping, MirroredRepeatWrapping,
|
|
3
|
-
|
|
3
|
+
RGBAFormat, RedFormat, RGFormat, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, UnsignedByteType, FloatType, HalfFloatType, sRGBEncoding
|
|
4
4
|
} from 'three';
|
|
5
5
|
import WebGPUTextureUtils from './WebGPUTextureUtils.js';
|
|
6
6
|
|
|
7
7
|
class WebGPUTextures {
|
|
8
8
|
|
|
9
|
-
constructor( device, properties, info
|
|
9
|
+
constructor( device, properties, info ) {
|
|
10
10
|
|
|
11
11
|
this.device = device;
|
|
12
12
|
this.properties = properties;
|
|
13
13
|
this.info = info;
|
|
14
|
-
this.glslang = glslang;
|
|
15
14
|
|
|
16
15
|
this.defaultTexture = null;
|
|
17
16
|
this.defaultCubeTexture = null;
|
|
@@ -42,7 +41,9 @@ class WebGPUTextures {
|
|
|
42
41
|
texture.minFilter = NearestFilter;
|
|
43
42
|
texture.magFilter = NearestFilter;
|
|
44
43
|
|
|
45
|
-
this.
|
|
44
|
+
this._uploadTexture( texture );
|
|
45
|
+
|
|
46
|
+
this.defaultTexture = this.getTextureGPU( texture );
|
|
46
47
|
|
|
47
48
|
}
|
|
48
49
|
|
|
@@ -58,7 +59,9 @@ class WebGPUTextures {
|
|
|
58
59
|
texture.minFilter = NearestFilter;
|
|
59
60
|
texture.magFilter = NearestFilter;
|
|
60
61
|
|
|
61
|
-
this.
|
|
62
|
+
this._uploadTexture( texture );
|
|
63
|
+
|
|
64
|
+
this.defaultCubeTexture = this.getTextureGPU( texture );
|
|
62
65
|
|
|
63
66
|
}
|
|
64
67
|
|
|
@@ -84,7 +87,7 @@ class WebGPUTextures {
|
|
|
84
87
|
|
|
85
88
|
updateTexture( texture ) {
|
|
86
89
|
|
|
87
|
-
let
|
|
90
|
+
let needsUpdate = false;
|
|
88
91
|
|
|
89
92
|
const textureProperties = this.properties.get( texture );
|
|
90
93
|
|
|
@@ -117,21 +120,9 @@ class WebGPUTextures {
|
|
|
117
120
|
|
|
118
121
|
}
|
|
119
122
|
|
|
120
|
-
//
|
|
121
|
-
|
|
122
|
-
if ( textureProperties.textureGPU !== undefined ) {
|
|
123
|
+
//
|
|
123
124
|
|
|
124
|
-
|
|
125
|
-
// are updated, a buffer upload should be sufficient. However, if the user changes
|
|
126
|
-
// the dimensions of the texture, format or usage, a new instance of GPUTexture is required.
|
|
127
|
-
|
|
128
|
-
textureProperties.textureGPU.destroy();
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
textureProperties.textureGPU = this._createTexture( texture );
|
|
133
|
-
textureProperties.version = texture.version;
|
|
134
|
-
forceUpdate = true;
|
|
125
|
+
needsUpdate = this._uploadTexture( texture );
|
|
135
126
|
|
|
136
127
|
}
|
|
137
128
|
|
|
@@ -143,11 +134,11 @@ class WebGPUTextures {
|
|
|
143
134
|
if ( textureProperties.initializedRTT === false ) {
|
|
144
135
|
|
|
145
136
|
textureProperties.initializedRTT = true;
|
|
146
|
-
|
|
137
|
+
needsUpdate = true;
|
|
147
138
|
|
|
148
139
|
}
|
|
149
140
|
|
|
150
|
-
return
|
|
141
|
+
return needsUpdate;
|
|
151
142
|
|
|
152
143
|
}
|
|
153
144
|
|
|
@@ -305,11 +296,15 @@ class WebGPUTextures {
|
|
|
305
296
|
|
|
306
297
|
}
|
|
307
298
|
|
|
308
|
-
|
|
299
|
+
_uploadTexture( texture ) {
|
|
300
|
+
|
|
301
|
+
let needsUpdate = false;
|
|
309
302
|
|
|
310
303
|
const device = this.device;
|
|
311
304
|
const image = texture.image;
|
|
312
305
|
|
|
306
|
+
const textureProperties = this.properties.get( texture );
|
|
307
|
+
|
|
313
308
|
const { width, height, depth } = this._getSize( texture );
|
|
314
309
|
const needsMipmaps = this._needsMipmaps( texture );
|
|
315
310
|
const dimension = this._getDimension( texture );
|
|
@@ -326,8 +321,6 @@ class WebGPUTextures {
|
|
|
326
321
|
|
|
327
322
|
}
|
|
328
323
|
|
|
329
|
-
// texture creation
|
|
330
|
-
|
|
331
324
|
const textureGPUDescriptor = {
|
|
332
325
|
size: {
|
|
333
326
|
width: width,
|
|
@@ -340,7 +333,19 @@ class WebGPUTextures {
|
|
|
340
333
|
format: format,
|
|
341
334
|
usage: usage
|
|
342
335
|
};
|
|
343
|
-
|
|
336
|
+
|
|
337
|
+
// texture creation
|
|
338
|
+
|
|
339
|
+
let textureGPU = textureProperties.textureGPU;
|
|
340
|
+
|
|
341
|
+
if ( textureGPU === undefined ) {
|
|
342
|
+
|
|
343
|
+
textureGPU = device.createTexture( textureGPUDescriptor );
|
|
344
|
+
textureProperties.textureGPU = textureGPU;
|
|
345
|
+
|
|
346
|
+
needsUpdate = true;
|
|
347
|
+
|
|
348
|
+
}
|
|
344
349
|
|
|
345
350
|
// transfer texture data
|
|
346
351
|
|
|
@@ -376,7 +381,9 @@ class WebGPUTextures {
|
|
|
376
381
|
|
|
377
382
|
}
|
|
378
383
|
|
|
379
|
-
|
|
384
|
+
textureProperties.version = texture.version;
|
|
385
|
+
|
|
386
|
+
return needsUpdate;
|
|
380
387
|
|
|
381
388
|
}
|
|
382
389
|
|
|
@@ -481,7 +488,7 @@ class WebGPUTextures {
|
|
|
481
488
|
|
|
482
489
|
if ( this.utils === null ) {
|
|
483
490
|
|
|
484
|
-
this.utils = new WebGPUTextureUtils( this.device
|
|
491
|
+
this.utils = new WebGPUTextureUtils( this.device ); // only create this helper if necessary
|
|
485
492
|
|
|
486
493
|
}
|
|
487
494
|
|
|
@@ -557,7 +564,6 @@ class WebGPUTextures {
|
|
|
557
564
|
formatGPU = ( encoding === sRGBEncoding ) ? GPUTextureFormat.BC3RGBAUnormSRGB : GPUTextureFormat.BC3RGBAUnorm;
|
|
558
565
|
break;
|
|
559
566
|
|
|
560
|
-
case RGBFormat:
|
|
561
567
|
case RGBAFormat:
|
|
562
568
|
|
|
563
569
|
switch ( type ) {
|
|
@@ -107,8 +107,8 @@ export const GPUTextureFormat = {
|
|
|
107
107
|
RGBA8Snorm: 'rgba8snorm',
|
|
108
108
|
RGBA8Uint: 'rgba8uint',
|
|
109
109
|
RGBA8Sint: 'rgba8sint',
|
|
110
|
-
|
|
111
|
-
|
|
110
|
+
BGRA8Unorm: 'bgra8unorm',
|
|
111
|
+
BGRA8UnormSRGB: 'bgra8unorm-srgb',
|
|
112
112
|
// Packed 32-bit formats
|
|
113
113
|
RGB9E5UFloat: 'rgb9e5ufloat',
|
|
114
114
|
RGB10A2Unorm: 'rgb10a2unorm',
|