super-three 0.133.3 → 0.136.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.js +1059 -783
- package/build/three.min.js +1 -1
- package/build/three.module.js +1424 -895
- 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 +1 -3
- 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/USDZExporter.js +45 -26
- 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/ColladaLoader.js +61 -4
- package/examples/js/loaders/EXRLoader.js +185 -262
- package/examples/js/loaders/FBXLoader.js +4 -5
- package/examples/js/loaders/GLTFLoader.js +96 -33
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -8
- package/examples/js/loaders/KTX2Loader.js +23 -2
- package/examples/js/loaders/KTXLoader.js +1 -1
- package/examples/js/loaders/LDrawLoader.js +26 -30
- package/examples/js/loaders/LUT3dlLoader.js +2 -0
- package/examples/js/loaders/LUTCubeLoader.js +2 -0
- 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 +2 -16
- package/examples/js/loaders/RGBMLoader.js +55 -5
- package/examples/js/loaders/SVGLoader.js +9 -5
- package/examples/js/loaders/TDSLoader.js +237 -271
- package/examples/js/loaders/VOXLoader.js +1 -0
- package/examples/js/loaders/VRMLLoader.js +2 -1
- package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/misc/GPUComputationRenderer.js +3 -1
- package/examples/js/objects/Lensflare.js +2 -10
- package/examples/js/objects/MarchingCubes.js +42 -128
- package/examples/js/objects/Reflector.js +7 -0
- package/examples/js/objects/Refractor.js +7 -0
- package/examples/js/objects/Sky.js +1 -1
- package/examples/js/objects/Water.js +2 -2
- package/examples/js/objects/Water2.js +4 -7
- package/examples/js/postprocessing/GlitchPass.js +3 -1
- package/examples/js/postprocessing/SSAOPass.js +1 -0
- 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/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/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/js/utils/RoughnessMipmapper.js +18 -28
- package/examples/jsm/animation/CCDIKSolver.js +0 -1
- package/examples/jsm/animation/MMDPhysics.js +0 -2
- 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 +161 -75
- package/examples/jsm/exporters/USDZExporter.js +47 -26
- 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/ColladaLoader.js +61 -4
- package/examples/jsm/loaders/EXRLoader.js +184 -293
- package/examples/jsm/loaders/FBXLoader.js +4 -5
- package/examples/jsm/loaders/GLTFLoader.js +101 -37
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -14
- package/examples/jsm/loaders/KTX2Loader.js +30 -2
- package/examples/jsm/loaders/KTXLoader.js +1 -1
- package/examples/jsm/loaders/LDrawLoader.js +23 -24
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -0
- 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 +0 -20
- package/examples/jsm/loaders/RGBMLoader.js +61 -7
- package/examples/jsm/loaders/SVGLoader.js +9 -6
- package/examples/jsm/loaders/TDSLoader.js +236 -275
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +2 -1
- package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
- package/examples/jsm/node-editor/NodeEditor.js +456 -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 +1 -164
- package/examples/jsm/objects/Lensflare.js +3 -14
- package/examples/jsm/objects/MarchingCubes.js +46 -152
- package/examples/jsm/objects/Reflector.js +7 -0
- package/examples/jsm/objects/Refractor.js +7 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/Water.js +2 -2
- 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 +4 -2
- 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 +1 -1
- package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -1
- package/examples/jsm/postprocessing/SSRPass.js +1 -1
- package/examples/jsm/postprocessing/SSRrPass.js +1 -1
- package/examples/jsm/postprocessing/SavePass.js +1 -1
- 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 +15 -13
- package/examples/jsm/renderers/nodes/ShaderNode.js +194 -41
- 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 +60 -43
- 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 +10 -2
- 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 +90 -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/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 +12 -28
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +34 -27
- package/examples/jsm/renderers/webgpu/constants.js +2 -2
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +453 -95
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
- package/examples/jsm/shaders/ConvolutionShader.js +0 -1
- 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/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/RoughnessMipmapper.js +19 -31
- package/examples/jsm/utils/WorkerPool.js +11 -11
- package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
- package/package.json +24 -18
- package/src/Three.Legacy.js +18 -0
- package/src/Three.js +1 -3
- package/src/cameras/StereoCamera.js +8 -7
- package/src/constants.js +1 -8
- package/src/core/Layers.js +7 -1
- package/src/core/Object3D.js +3 -1
- package/src/extras/PMREMGenerator.js +23 -109
- 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 +7 -4
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/Material.js +4 -4
- package/src/materials/MeshPhysicalMaterial.js +20 -14
- package/src/math/Color.js +0 -38
- package/src/math/MathUtils.js +5 -16
- package/src/math/Ray.js +2 -2
- package/src/math/Sphere.js +10 -1
- package/src/objects/Skeleton.js +1 -0
- package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
- package/src/renderers/WebGLRenderer.js +105 -132
- 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/encodings_pars_fragment.glsl.js +0 -74
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.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/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 +1 -1
- 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 +6 -4
- package/src/renderers/shaders/UniformsLib.js +1 -2
- package/src/renderers/webgl/WebGLCapabilities.js +0 -2
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLMaterials.js +27 -15
- package/src/renderers/webgl/WebGLMorphtargets.js +1 -0
- package/src/renderers/webgl/WebGLProgram.js +11 -24
- package/src/renderers/webgl/WebGLPrograms.js +194 -33
- 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 +76 -17
- package/src/renderers/webgl/WebGLTextures.js +367 -61
- package/src/renderers/webgl/WebGLUniforms.js +45 -1
- 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 +6 -0
- package/examples/js/controls/DeviceOrientationControls.js +0 -147
- package/examples/js/libs/dat.gui.min.js +0 -14
- 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/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.' );
|
|
@@ -166,13 +164,11 @@ class WebGPURenderer {
|
|
|
166
164
|
|
|
167
165
|
const device = await adapter.requestDevice( deviceDescriptor );
|
|
168
166
|
|
|
169
|
-
const compiler = await glslang();
|
|
170
|
-
|
|
171
167
|
const context = ( parameters.context !== undefined ) ? parameters.context : this.domElement.getContext( 'webgpu' );
|
|
172
168
|
|
|
173
169
|
const swapChain = context.configure( {
|
|
174
170
|
device: device,
|
|
175
|
-
format: GPUTextureFormat.
|
|
171
|
+
format: GPUTextureFormat.BGRA8Unorm // this is the only valid swap chain format right now (r121)
|
|
176
172
|
} );
|
|
177
173
|
|
|
178
174
|
this._adapter = adapter;
|
|
@@ -184,12 +180,12 @@ class WebGPURenderer {
|
|
|
184
180
|
this._properties = new WebGPUProperties();
|
|
185
181
|
this._attributes = new WebGPUAttributes( device );
|
|
186
182
|
this._geometries = new WebGPUGeometries( this._attributes, this._info );
|
|
187
|
-
this._textures = new WebGPUTextures( device, this._properties, this._info
|
|
183
|
+
this._textures = new WebGPUTextures( device, this._properties, this._info );
|
|
188
184
|
this._objects = new WebGPUObjects( this._geometries, this._info );
|
|
189
185
|
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 );
|
|
186
|
+
this._computePipelines = new WebGPUComputePipelines( device );
|
|
187
|
+
this._renderPipelines = new WebGPURenderPipelines( this, device, parameters.sampleCount, this._nodes );
|
|
188
|
+
this._bindings = this._renderPipelines.bindings = new WebGPUBindings( device, this._info, this._properties, this._textures, this._renderPipelines, this._computePipelines, this._attributes, this._nodes );
|
|
193
189
|
this._renderLists = new WebGPURenderLists();
|
|
194
190
|
this._background = new WebGPUBackground( this );
|
|
195
191
|
|
|
@@ -493,7 +489,7 @@ class WebGPURenderer {
|
|
|
493
489
|
|
|
494
490
|
} else {
|
|
495
491
|
|
|
496
|
-
format = GPUTextureFormat.
|
|
492
|
+
format = GPUTextureFormat.BGRA8Unorm; // default swap chain format
|
|
497
493
|
|
|
498
494
|
}
|
|
499
495
|
|
|
@@ -639,7 +635,6 @@ class WebGPURenderer {
|
|
|
639
635
|
|
|
640
636
|
_projectObject( object, camera, groupOrder ) {
|
|
641
637
|
|
|
642
|
-
const info = this._info;
|
|
643
638
|
const currentRenderList = this._currentRenderList;
|
|
644
639
|
|
|
645
640
|
if ( object.visible === false ) return;
|
|
@@ -693,19 +688,6 @@ class WebGPURenderer {
|
|
|
693
688
|
|
|
694
689
|
} else if ( object.isMesh || object.isLine || object.isPoints ) {
|
|
695
690
|
|
|
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
691
|
if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {
|
|
710
692
|
|
|
711
693
|
if ( this.sortObjects === true ) {
|
|
@@ -791,7 +773,7 @@ class WebGPURenderer {
|
|
|
791
773
|
passEncoder.setViewport( vp.x, vp.y, vp.width, vp.height, minDepth, maxDepth );
|
|
792
774
|
|
|
793
775
|
this._nodes.update( object, camera2 );
|
|
794
|
-
this._bindings.update( object
|
|
776
|
+
this._bindings.update( object );
|
|
795
777
|
this._renderObject( object, passEncoder );
|
|
796
778
|
|
|
797
779
|
}
|
|
@@ -801,7 +783,7 @@ class WebGPURenderer {
|
|
|
801
783
|
} else {
|
|
802
784
|
|
|
803
785
|
this._nodes.update( object, camera );
|
|
804
|
-
this._bindings.update( object
|
|
786
|
+
this._bindings.update( object );
|
|
805
787
|
this._renderObject( object, passEncoder );
|
|
806
788
|
|
|
807
789
|
}
|
|
@@ -914,7 +896,7 @@ class WebGPURenderer {
|
|
|
914
896
|
depthOrArrayLayers: 1
|
|
915
897
|
},
|
|
916
898
|
sampleCount: this._parameters.sampleCount,
|
|
917
|
-
format: GPUTextureFormat.
|
|
899
|
+
format: GPUTextureFormat.BGRA8Unorm,
|
|
918
900
|
usage: GPUTextureUsage.RENDER_ATTACHMENT
|
|
919
901
|
} );
|
|
920
902
|
|
|
@@ -953,7 +935,7 @@ class WebGPURenderer {
|
|
|
953
935
|
|
|
954
936
|
this._context.configure( {
|
|
955
937
|
device: device,
|
|
956
|
-
format: GPUTextureFormat.
|
|
938
|
+
format: GPUTextureFormat.BGRA8Unorm,
|
|
957
939
|
usage: GPUTextureUsage.RENDER_ATTACHMENT,
|
|
958
940
|
size: {
|
|
959
941
|
width: Math.floor( this._width * this._pixelRatio ),
|
|
@@ -976,4 +958,6 @@ class WebGPURenderer {
|
|
|
976
958
|
|
|
977
959
|
}
|
|
978
960
|
|
|
961
|
+
WebGPURenderer.prototype.isWebGPURenderer = true;
|
|
962
|
+
|
|
979
963
|
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 );
|
|
@@ -6,12 +6,11 @@ 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
|
|
|
@@ -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',
|