super-three 0.184.0 → 0.185.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.cjs +1260 -927
- package/build/three.core.js +1104 -829
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +156 -98
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +11 -4
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +7538 -3367
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +7538 -3366
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +3 -0
- package/examples/jsm/controls/ArcballControls.js +6 -2
- package/examples/jsm/controls/FirstPersonControls.js +79 -42
- package/examples/jsm/controls/TransformControls.js +68 -15
- package/examples/jsm/csm/CSMFrustum.js +31 -6
- package/examples/jsm/csm/CSMShadowNode.js +4 -1
- package/examples/jsm/effects/AsciiEffect.js +14 -1
- package/examples/jsm/exporters/DRACOExporter.js +27 -6
- package/examples/jsm/exporters/GLTFExporter.js +114 -12
- package/examples/jsm/exporters/PLYExporter.js +286 -73
- package/examples/jsm/exporters/USDZExporter.js +347 -112
- package/examples/jsm/generators/CityGenerator.js +346 -0
- package/examples/jsm/generators/ForestGenerator.js +347 -0
- package/examples/jsm/generators/TerrainGenerator.js +504 -0
- package/examples/jsm/generators/TreeGenerator.js +377 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
- package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
- package/examples/jsm/geometries/LoftGeometry.js +355 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +1 -1
- package/examples/jsm/helpers/LightProbeHelper.js +5 -4
- package/examples/jsm/helpers/ViewHelper.js +16 -6
- package/examples/jsm/inspector/Inspector.js +53 -15
- package/examples/jsm/inspector/RendererInspector.js +152 -36
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +1 -1
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -1
- package/examples/jsm/inspector/tabs/Console.js +200 -18
- package/examples/jsm/inspector/tabs/Memory.js +8 -0
- package/examples/jsm/inspector/tabs/Parameters.js +64 -4
- package/examples/jsm/inspector/tabs/Performance.js +21 -6
- package/examples/jsm/inspector/tabs/Settings.js +51 -9
- package/examples/jsm/inspector/tabs/Timeline.js +178 -93
- package/examples/jsm/inspector/tabs/Viewer.js +628 -16
- package/examples/jsm/inspector/ui/Graph.js +162 -25
- package/examples/jsm/inspector/ui/Item.js +92 -13
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +90 -45
- package/examples/jsm/inspector/ui/Style.js +1788 -1401
- package/examples/jsm/inspector/ui/Tab.js +5 -3
- package/examples/jsm/inspector/ui/Values.js +71 -6
- package/examples/jsm/inspector/ui/utils.js +130 -10
- package/examples/jsm/libs/basis/README.md +0 -1
- package/examples/jsm/libs/demuxer_mp4.js +3 -3
- package/examples/jsm/libs/draco/README.md +0 -1
- package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
- package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
- package/examples/jsm/libs/mikktspace.module.js +34 -9
- package/examples/jsm/lighting/ClusteredLighting.js +55 -0
- package/examples/jsm/lighting/LightProbeGrid.js +106 -76
- package/examples/jsm/lines/LineMaterial.js +38 -15
- package/examples/jsm/lines/LineSegments2.js +8 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +46 -13
- package/examples/jsm/loaders/EXRLoader.js +27 -55
- package/examples/jsm/loaders/HDRLoader.js +6 -28
- package/examples/jsm/loaders/KTX2Loader.js +31 -12
- package/examples/jsm/loaders/LDrawLoader.js +8 -8
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +4 -0
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MaterialXLoader.js +31 -9
- package/examples/jsm/loaders/NRRDLoader.js +3 -3
- package/examples/jsm/loaders/PCDLoader.js +7 -7
- package/examples/jsm/loaders/PLYLoader.js +218 -55
- package/examples/jsm/loaders/SVGLoader.js +547 -495
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDLoader.js +33 -9
- package/examples/jsm/loaders/VRMLLoader.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +93 -20
- package/examples/jsm/loaders/usd/USDCParser.js +1 -1
- package/examples/jsm/loaders/usd/USDComposer.js +52 -19
- package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
- package/examples/jsm/misc/Volume.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +1 -1
- package/examples/jsm/objects/Reflector.js +2 -3
- package/examples/jsm/objects/Water2Mesh.js +1 -1
- package/examples/jsm/physics/AmmoPhysics.js +15 -8
- package/examples/jsm/physics/RapierPhysics.js +27 -2
- package/examples/jsm/shaders/VolumeShader.js +31 -44
- package/examples/jsm/transpiler/GLSLDecoder.js +6 -6
- package/examples/jsm/transpiler/Linker.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +59 -19
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +2 -2
- package/examples/jsm/tsl/display/FXAANode.js +11 -12
- package/examples/jsm/tsl/display/GTAONode.js +34 -13
- package/examples/jsm/tsl/display/GodraysNode.js +1 -1
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +2 -2
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +13 -25
- package/examples/jsm/tsl/display/SSGINode.js +89 -39
- package/examples/jsm/tsl/display/SSRNode.js +829 -132
- package/examples/jsm/tsl/display/SSSNode.js +2 -2
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +1 -1
- package/examples/jsm/tsl/math/curlNoise.js +107 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
- package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
- package/examples/jsm/tsl/utils/RNoise.js +51 -0
- package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +126 -59
- package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
- package/examples/jsm/utils/SceneOptimizer.js +1 -1
- package/examples/jsm/webxr/ARButton.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
- package/package.json +7 -7
- package/src/Three.TSL.js +10 -3
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationAction.js +15 -11
- package/src/animation/AnimationClip.js +0 -139
- package/src/animation/KeyframeTrack.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/Camera.js +2 -2
- package/src/cameras/StereoCamera.js +5 -2
- package/src/constants.js +1 -1
- package/src/core/BufferGeometry.js +29 -7
- package/src/core/Object3D.js +17 -7
- package/src/core/Raycaster.js +1 -1
- package/src/core/RenderTarget.js +15 -2
- package/src/extras/PMREMGenerator.js +6 -4
- package/src/extras/TextureUtils.js +1 -1
- package/src/extras/core/ShapePath.js +149 -160
- package/src/geometries/SphereGeometry.js +8 -3
- package/src/helpers/DirectionalLightHelper.js +2 -0
- package/src/helpers/HemisphereLightHelper.js +2 -0
- package/src/helpers/PointLightHelper.js +2 -0
- package/src/helpers/SpotLightHelper.js +1 -1
- package/src/loaders/DataTextureLoader.js +69 -38
- package/src/loaders/LoadingManager.js +5 -0
- package/src/loaders/MaterialLoader.js +36 -266
- package/src/loaders/ObjectLoader.js +3 -1
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +196 -1
- package/src/materials/MeshBasicMaterial.js +24 -0
- package/src/materials/MeshDepthMaterial.js +10 -0
- package/src/materials/MeshDistanceMaterial.js +10 -0
- package/src/materials/MeshLambertMaterial.js +40 -1
- package/src/materials/MeshMatcapMaterial.js +25 -1
- package/src/materials/MeshNormalMaterial.js +9 -1
- package/src/materials/MeshPhongMaterial.js +40 -1
- package/src/materials/MeshPhysicalMaterial.js +38 -0
- package/src/materials/MeshStandardMaterial.js +42 -1
- package/src/materials/MeshToonMaterial.js +34 -1
- package/src/materials/PointsMaterial.js +7 -0
- package/src/materials/ShaderMaterial.js +86 -0
- package/src/materials/SpriteMaterial.js +7 -0
- package/src/materials/nodes/Line2NodeMaterial.js +378 -322
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +0 -30
- package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
- package/src/materials/nodes/MeshStandardNodeMaterial.js +0 -11
- package/src/materials/nodes/NodeMaterial.js +115 -71
- package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
- package/src/materials/nodes/manager/NodeMaterialObserver.js +49 -20
- package/src/math/Box3.js +5 -0
- package/src/math/FrustumArray.js +103 -133
- package/src/math/Interpolant.js +1 -1
- package/src/math/MathUtils.js +2 -2
- package/src/math/Matrix3.js +11 -0
- package/src/math/Matrix4.js +28 -3
- package/src/math/Vector2.js +2 -2
- package/src/math/Vector3.js +2 -2
- package/src/math/Vector4.js +2 -2
- package/src/math/interpolants/BezierInterpolant.js +4 -6
- package/src/nodes/Nodes.js +2 -5
- package/src/nodes/TSL.js +8 -6
- package/src/nodes/accessors/Arrays.js +4 -4
- package/src/nodes/accessors/Batch.js +108 -0
- package/src/nodes/accessors/Bitangent.js +2 -2
- package/src/nodes/accessors/BufferAttributeNode.js +13 -2
- package/src/nodes/accessors/Camera.js +7 -7
- package/src/nodes/accessors/ClippingNode.js +1 -1
- package/src/nodes/accessors/Instance.js +264 -0
- package/src/nodes/accessors/MaterialNode.js +18 -2
- package/src/nodes/accessors/MaterialProperties.js +4 -3
- package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
- package/src/nodes/accessors/Normal.js +13 -13
- package/src/nodes/accessors/Position.js +5 -1
- package/src/nodes/accessors/ReferenceNode.js +1 -0
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneProperties.js +1 -1
- package/src/nodes/accessors/Skinning.js +263 -0
- package/src/nodes/accessors/StorageBufferNode.js +2 -2
- package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
- package/src/nodes/accessors/StorageTextureNode.js +39 -7
- package/src/nodes/accessors/Tangent.js +4 -4
- package/src/nodes/accessors/TextureNode.js +60 -5
- package/src/nodes/code/FunctionNode.js +2 -16
- package/src/nodes/core/MRTNode.js +7 -2
- package/src/nodes/core/Node.js +39 -2
- package/src/nodes/core/NodeBuilder.js +201 -41
- package/src/nodes/core/NodeUtils.js +13 -13
- package/src/nodes/core/OutputStructNode.js +1 -1
- package/src/nodes/core/OverrideContextNode.js +153 -0
- package/src/nodes/core/PropertyNode.js +51 -5
- package/src/nodes/core/StackNode.js +56 -34
- package/src/nodes/core/StructNode.js +4 -6
- package/src/nodes/core/StructTypeNode.js +6 -6
- package/src/nodes/core/VarNode.js +8 -0
- package/src/nodes/core/VaryingNode.js +12 -2
- package/src/nodes/display/BlendModes.js +1 -41
- package/src/nodes/display/BumpMapNode.js +6 -1
- package/src/nodes/display/ColorAdjustment.js +10 -9
- package/src/nodes/display/FrontFacingNode.js +38 -9
- package/src/nodes/display/NormalMapNode.js +2 -2
- package/src/nodes/display/PassNode.js +35 -43
- package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
- package/src/nodes/display/RenderOutputNode.js +12 -3
- package/src/nodes/functions/VolumetricLightingModel.js +40 -7
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +1 -1
- package/src/nodes/lighting/EnvironmentNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +40 -2
- package/src/nodes/lighting/LightingContextNode.js +10 -2
- package/src/nodes/lighting/LightsNode.js +90 -37
- package/src/nodes/lighting/PointShadowNode.js +6 -1
- package/src/nodes/lighting/ShadowFilterNode.js +21 -52
- package/src/nodes/lighting/ShadowNode.js +34 -14
- package/src/nodes/materialx/lib/mx_noise.js +2 -2
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +39 -11
- package/src/nodes/math/OperatorNode.js +23 -23
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +33 -2
- package/src/nodes/tsl/TSLCore.js +63 -18
- package/src/nodes/utils/EquirectUV.js +30 -5
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/Packing.js +35 -4
- package/src/nodes/utils/RTTNode.js +40 -24
- package/src/nodes/utils/ReflectorNode.js +1 -0
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/objects/BatchedMesh.js +22 -14
- package/src/objects/InstancedMesh.js +0 -11
- package/src/objects/Skeleton.js +0 -9
- package/src/renderers/WebGLRenderer.js +19 -15
- package/src/renderers/common/Backend.js +49 -5
- package/src/renderers/common/Bindings.js +114 -45
- package/src/renderers/common/Buffer.js +9 -0
- package/src/renderers/common/ClippingContext.js +10 -2
- package/src/renderers/common/Info.js +63 -22
- package/src/renderers/common/Lighting.js +53 -5
- package/src/renderers/common/RenderList.js +41 -4
- package/src/renderers/common/RenderObject.js +73 -13
- package/src/renderers/common/Renderer.js +281 -108
- package/src/renderers/common/Sampler.js +16 -48
- package/src/renderers/common/Textures.js +32 -5
- package/src/renderers/common/TimestampQueryPool.js +1 -1
- package/src/renderers/common/UniformsGroup.js +31 -9
- package/src/renderers/common/XRManager.js +340 -22
- package/src/renderers/common/extras/PMREMGenerator.js +15 -38
- package/src/renderers/common/nodes/NodeBuilderState.js +9 -1
- package/src/renderers/common/nodes/NodeLibrary.js +4 -4
- package/src/renderers/common/nodes/NodeManager.js +63 -14
- package/src/renderers/common/nodes/NodeUniformBuffer.js +13 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/distance.glsl.js +1 -1
- package/src/renderers/webgl/WebGLOutput.js +2 -1
- package/src/renderers/webgl/WebGLProgram.js +5 -4
- package/src/renderers/webgl/WebGLPrograms.js +12 -5
- package/src/renderers/webgl/WebGLRenderLists.js +9 -1
- package/src/renderers/webgl/WebGLShaderCache.js +5 -11
- package/src/renderers/webgl/WebGLTextures.js +20 -7
- package/src/renderers/webgl/WebGLUniformsGroups.js +66 -38
- package/src/renderers/webgl-fallback/WebGLBackend.js +84 -25
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +138 -8
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +52 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +4 -2
- package/src/renderers/webgpu/WebGPUBackend.js +480 -169
- package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
- package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
- package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
- package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
- package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
- package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
- package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
- package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
- package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
- package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
- package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
- package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +164 -7
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +98 -38
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +72 -68
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +164 -69
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +158 -95
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +297 -141
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +33 -18
- package/src/renderers/webgpu/utils/WebGPUUtils.js +38 -3
- package/src/textures/DepthTexture.js +1 -1
- package/src/textures/ExternalTexture.js +0 -3
- package/examples/fonts/LICENSE +0 -13
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
- package/examples/fonts/README.md +0 -11
- package/examples/fonts/droid/NOTICE +0 -190
- package/examples/fonts/droid/README.txt +0 -18
- package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
- package/examples/fonts/gentilis_bold.typeface.json +0 -1
- package/examples/fonts/gentilis_regular.typeface.json +0 -1
- package/examples/fonts/helvetiker_bold.typeface.json +0 -1
- package/examples/fonts/helvetiker_regular.typeface.json +0 -1
- package/examples/fonts/optimer_bold.typeface.json +0 -1
- package/examples/fonts/optimer_regular.typeface.json +0 -1
- package/examples/fonts/ttf/README.md +0 -9
- package/examples/fonts/ttf/kenpixel.ttf +0 -0
- package/examples/jsm/inspector/extensions/extensions.json +0 -6
- package/examples/jsm/libs/ammo.wasm.js +0 -822
- package/examples/jsm/libs/ammo.wasm.wasm +0 -0
- package/examples/jsm/libs/draco/draco_encoder.js +0 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
- package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
- package/examples/jsm/libs/opentype.module.js +0 -14506
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lighting/TiledLighting.js +0 -42
- package/examples/jsm/tsl/display/AnamorphicNode.js +0 -293
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
- package/src/nodes/accessors/BatchNode.js +0 -163
- package/src/nodes/accessors/InstanceNode.js +0 -349
- package/src/nodes/accessors/InstancedMeshNode.js +0 -50
- package/src/nodes/accessors/SkinningNode.js +0 -328
|
@@ -4,18 +4,40 @@ import {
|
|
|
4
4
|
import { ColorManagement } from '../../../math/ColorManagement.js';
|
|
5
5
|
|
|
6
6
|
import WebGPUTexturePassUtils from './WebGPUTexturePassUtils.js';
|
|
7
|
+
import { submit } from './WebGPUUtils.js';
|
|
8
|
+
import GPUBufferDescriptor from '../descriptors/GPUBufferDescriptor.js';
|
|
9
|
+
import GPUCommandEncoderDescriptor from '../descriptors/GPUCommandEncoderDescriptor.js';
|
|
10
|
+
import GPUSamplerDescriptor from '../descriptors/GPUSamplerDescriptor.js';
|
|
11
|
+
import GPUTexelCopyTextureInfo from '../descriptors/GPUTexelCopyTextureInfo.js';
|
|
12
|
+
import GPUTexelCopyBufferInfo from '../descriptors/GPUTexelCopyBufferInfo.js';
|
|
13
|
+
import GPUTexelCopyBufferLayout from '../descriptors/GPUTexelCopyBufferLayout.js';
|
|
14
|
+
import GPUCopyExternalImageSourceInfo from '../descriptors/GPUCopyExternalImageSourceInfo.js';
|
|
15
|
+
import GPUCopyExternalImageDestInfo from '../descriptors/GPUCopyExternalImageDestInfo.js';
|
|
16
|
+
import GPUTextureDescriptor from '../descriptors/GPUTextureDescriptor.js';
|
|
17
|
+
import GPUExtent3D from '../descriptors/GPUExtent3D.js';
|
|
18
|
+
|
|
19
|
+
const _bufferDescriptor = new GPUBufferDescriptor();
|
|
20
|
+
const _commandEncoderDescriptor = new GPUCommandEncoderDescriptor();
|
|
21
|
+
const _samplerDescriptor = new GPUSamplerDescriptor();
|
|
22
|
+
const _texelCopyTextureInfo = new GPUTexelCopyTextureInfo();
|
|
23
|
+
const _texelCopyBufferInfo = new GPUTexelCopyBufferInfo();
|
|
24
|
+
const _texelCopyBufferLayout = new GPUTexelCopyBufferLayout();
|
|
25
|
+
const _copyExternalImageSourceInfo = new GPUCopyExternalImageSourceInfo();
|
|
26
|
+
const _copyExternalImageDestInfo = new GPUCopyExternalImageDestInfo();
|
|
27
|
+
const _textureDescriptor = new GPUTextureDescriptor();
|
|
28
|
+
const _extent3D = new GPUExtent3D();
|
|
7
29
|
|
|
8
30
|
import {
|
|
9
31
|
ByteType, ShortType,
|
|
10
|
-
NearestFilter, NearestMipmapNearestFilter, NearestMipmapLinearFilter,
|
|
32
|
+
NearestFilter, NearestMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter,
|
|
11
33
|
RepeatWrapping, MirroredRepeatWrapping,
|
|
12
34
|
RGB_ETC2_Format, RGBA_ETC2_EAC_Format,
|
|
13
35
|
RGBAFormat, RGBFormat, RedFormat, RGFormat, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, UnsignedByteType, FloatType, HalfFloatType, SRGBTransfer, DepthFormat, DepthStencilFormat,
|
|
14
36
|
RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format,
|
|
15
37
|
RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, UnsignedIntType, UnsignedShortType, UnsignedInt248Type, UnsignedInt5999Type,
|
|
16
38
|
NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, IntType, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat,
|
|
17
|
-
UnsignedInt101111Type, RGBA_BPTC_Format, RGB_ETC1_Format, RGB_S3TC_DXT1_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format,
|
|
18
|
-
R11_EAC_Format, SIGNED_R11_EAC_Format, RG11_EAC_Format, SIGNED_RG11_EAC_Format,
|
|
39
|
+
UnsignedInt101111Type, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RGB_ETC1_Format, RGB_S3TC_DXT1_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format,
|
|
40
|
+
SIGNED_RED_GREEN_RGTC2_Format, R11_EAC_Format, SIGNED_R11_EAC_Format, RG11_EAC_Format, SIGNED_RG11_EAC_Format,
|
|
19
41
|
Compatibility
|
|
20
42
|
} from '../../../constants.js';
|
|
21
43
|
import { CubeTexture } from '../../../textures/CubeTexture.js';
|
|
@@ -35,6 +57,32 @@ const _compareToWebGPU = {
|
|
|
35
57
|
|
|
36
58
|
const _flipMap = [ 0, 1, 3, 2, 4, 5 ];
|
|
37
59
|
|
|
60
|
+
function writeTextureLayer( device, textureGPU, mipLevel, layerIndex, mipmap, bytesPerImage, bytesPerRow, rowsPerImage, textureWidth, textureHeight ) {
|
|
61
|
+
|
|
62
|
+
_texelCopyTextureInfo.texture = textureGPU;
|
|
63
|
+
_texelCopyTextureInfo.mipLevel = mipLevel;
|
|
64
|
+
_texelCopyTextureInfo.origin.z = layerIndex;
|
|
65
|
+
|
|
66
|
+
_texelCopyBufferLayout.offset = layerIndex * bytesPerImage;
|
|
67
|
+
_texelCopyBufferLayout.bytesPerRow = bytesPerRow;
|
|
68
|
+
_texelCopyBufferLayout.rowsPerImage = rowsPerImage;
|
|
69
|
+
|
|
70
|
+
_extent3D.width = textureWidth;
|
|
71
|
+
_extent3D.height = textureHeight;
|
|
72
|
+
|
|
73
|
+
device.queue.writeTexture(
|
|
74
|
+
_texelCopyTextureInfo,
|
|
75
|
+
mipmap.data,
|
|
76
|
+
_texelCopyBufferLayout,
|
|
77
|
+
_extent3D
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
_texelCopyTextureInfo.reset();
|
|
81
|
+
_texelCopyBufferLayout.reset();
|
|
82
|
+
_extent3D.reset();
|
|
83
|
+
|
|
84
|
+
}
|
|
85
|
+
|
|
38
86
|
/**
|
|
39
87
|
* A WebGPU backend utility module for managing textures.
|
|
40
88
|
*
|
|
@@ -100,55 +148,57 @@ class WebGPUTextureUtils {
|
|
|
100
148
|
/**
|
|
101
149
|
* Creates a GPU sampler for the given texture.
|
|
102
150
|
*
|
|
103
|
-
* @param {
|
|
151
|
+
* @param {Sampler} binding - The sampler binding to update.
|
|
104
152
|
* @return {string} The current sampler key.
|
|
105
153
|
*/
|
|
106
|
-
updateSampler(
|
|
154
|
+
updateSampler( binding ) {
|
|
107
155
|
|
|
108
156
|
const backend = this.backend;
|
|
157
|
+
const texture = binding.texture;
|
|
158
|
+
const textureNode = binding.textureNode;
|
|
109
159
|
|
|
110
160
|
const samplerKey = texture.minFilter + '-' + texture.magFilter + '-' +
|
|
111
161
|
texture.wrapS + '-' + texture.wrapT + '-' + ( texture.wrapR || '0' ) + '-' +
|
|
112
|
-
texture.anisotropy + '-' + ( texture.
|
|
162
|
+
texture.anisotropy + '-' + ( texture.isDepthTexture === true ? 1 : 0 ) + '-' +
|
|
163
|
+
( texture.compareFunction !== null && textureNode.compareNode !== null ? texture.compareFunction : 0 );
|
|
113
164
|
|
|
114
165
|
let samplerData = this._samplerCache.get( samplerKey );
|
|
115
166
|
|
|
116
167
|
if ( samplerData === undefined ) {
|
|
117
168
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
mipmapFilter: this._convertFilterMode( texture.minFilter ),
|
|
125
|
-
maxAnisotropy: 1
|
|
126
|
-
};
|
|
169
|
+
_samplerDescriptor.addressModeU = this._convertAddressMode( texture.wrapS );
|
|
170
|
+
_samplerDescriptor.addressModeV = this._convertAddressMode( texture.wrapT );
|
|
171
|
+
_samplerDescriptor.addressModeW = this._convertAddressMode( texture.wrapR );
|
|
172
|
+
_samplerDescriptor.magFilter = this._convertFilterMode( texture.magFilter );
|
|
173
|
+
_samplerDescriptor.minFilter = this._convertFilterMode( texture.minFilter );
|
|
174
|
+
_samplerDescriptor.mipmapFilter = this._convertMipmapFilterMode( texture.minFilter );
|
|
127
175
|
|
|
128
176
|
// Depth textures without compare function must use non-filtering (nearest) sampling
|
|
129
|
-
if ( texture.isDepthTexture && texture.compareFunction === null ) {
|
|
177
|
+
if ( texture.isDepthTexture && ( texture.compareFunction === null || textureNode.compareNode === null ) ) {
|
|
130
178
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
179
|
+
_samplerDescriptor.magFilter = GPUFilterMode.Nearest;
|
|
180
|
+
_samplerDescriptor.minFilter = GPUFilterMode.Nearest;
|
|
181
|
+
_samplerDescriptor.mipmapFilter = GPUFilterMode.Nearest;
|
|
134
182
|
|
|
135
183
|
}
|
|
136
184
|
|
|
137
185
|
// anisotropy can only be used when all filter modes are set to linear.
|
|
138
186
|
|
|
139
|
-
if (
|
|
187
|
+
if ( _samplerDescriptor.magFilter === GPUFilterMode.Linear && _samplerDescriptor.minFilter === GPUFilterMode.Linear && _samplerDescriptor.mipmapFilter === GPUFilterMode.Linear ) {
|
|
140
188
|
|
|
141
|
-
|
|
189
|
+
_samplerDescriptor.maxAnisotropy = texture.anisotropy;
|
|
142
190
|
|
|
143
191
|
}
|
|
144
192
|
|
|
145
|
-
if ( texture.isDepthTexture && texture.compareFunction !== null && backend.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {
|
|
193
|
+
if ( texture.isDepthTexture && texture.compareFunction !== null && textureNode.compareNode !== null && backend.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {
|
|
146
194
|
|
|
147
|
-
|
|
195
|
+
_samplerDescriptor.compare = _compareToWebGPU[ texture.compareFunction ];
|
|
148
196
|
|
|
149
197
|
}
|
|
150
198
|
|
|
151
|
-
const sampler = backend.device.createSampler(
|
|
199
|
+
const sampler = backend.device.createSampler( _samplerDescriptor );
|
|
200
|
+
|
|
201
|
+
_samplerDescriptor.reset();
|
|
152
202
|
|
|
153
203
|
samplerData = { sampler, usedTimes: 0 };
|
|
154
204
|
|
|
@@ -156,35 +206,62 @@ class WebGPUTextureUtils {
|
|
|
156
206
|
|
|
157
207
|
}
|
|
158
208
|
|
|
159
|
-
const
|
|
209
|
+
const bindingData = backend.get( binding );
|
|
160
210
|
|
|
161
|
-
if (
|
|
211
|
+
if ( bindingData.sampler !== samplerData.sampler ) {
|
|
162
212
|
|
|
163
|
-
//
|
|
213
|
+
// release the previous sampler (if any) so it can be deleted when unused
|
|
164
214
|
|
|
165
|
-
|
|
215
|
+
this._releaseSampler( bindingData );
|
|
166
216
|
|
|
167
|
-
|
|
168
|
-
oldSamplerData.usedTimes --;
|
|
217
|
+
// update to new sampler data
|
|
169
218
|
|
|
170
|
-
|
|
219
|
+
bindingData.samplerKey = samplerKey;
|
|
220
|
+
bindingData.sampler = samplerData.sampler;
|
|
171
221
|
|
|
172
|
-
|
|
222
|
+
samplerData.usedTimes ++;
|
|
173
223
|
|
|
174
|
-
|
|
224
|
+
}
|
|
175
225
|
|
|
176
|
-
|
|
226
|
+
return samplerKey;
|
|
177
227
|
|
|
178
|
-
|
|
228
|
+
}
|
|
179
229
|
|
|
180
|
-
|
|
181
|
-
|
|
230
|
+
/**
|
|
231
|
+
* Frees the GPU sampler referenced by the given sampler binding.
|
|
232
|
+
*
|
|
233
|
+
* @param {Sampler} binding - The sampler binding to free.
|
|
234
|
+
*/
|
|
235
|
+
destroySampler( binding ) {
|
|
182
236
|
|
|
183
|
-
|
|
237
|
+
this._releaseSampler( this.backend.get( binding ) );
|
|
184
238
|
|
|
185
|
-
|
|
239
|
+
}
|
|
186
240
|
|
|
187
|
-
|
|
241
|
+
/**
|
|
242
|
+
* Releases the pooled sampler referenced by the given binding data and
|
|
243
|
+
* removes it from the cache when no binding references it anymore.
|
|
244
|
+
*
|
|
245
|
+
* @private
|
|
246
|
+
* @param {Object} bindingData - The binding data holding the sampler reference.
|
|
247
|
+
*/
|
|
248
|
+
_releaseSampler( bindingData ) {
|
|
249
|
+
|
|
250
|
+
if ( bindingData.sampler !== undefined ) {
|
|
251
|
+
|
|
252
|
+
const samplerData = this._samplerCache.get( bindingData.samplerKey );
|
|
253
|
+
samplerData.usedTimes --;
|
|
254
|
+
|
|
255
|
+
if ( samplerData.usedTimes === 0 ) {
|
|
256
|
+
|
|
257
|
+
this._samplerCache.delete( bindingData.samplerKey );
|
|
258
|
+
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
bindingData.sampler = undefined;
|
|
262
|
+
bindingData.samplerKey = undefined;
|
|
263
|
+
|
|
264
|
+
}
|
|
188
265
|
|
|
189
266
|
}
|
|
190
267
|
|
|
@@ -227,7 +304,14 @@ class WebGPUTextureUtils {
|
|
|
227
304
|
|
|
228
305
|
if ( textureData.initialized ) {
|
|
229
306
|
|
|
230
|
-
|
|
307
|
+
// Skip creation for external XR textures - they are already set up
|
|
308
|
+
if ( textureData.externalTexture === true ) {
|
|
309
|
+
|
|
310
|
+
return;
|
|
311
|
+
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
throw new Error( 'THREE.WebGPUTextureUtils: Texture already initialized.' );
|
|
231
315
|
|
|
232
316
|
}
|
|
233
317
|
|
|
@@ -281,19 +365,16 @@ class WebGPUTextureUtils {
|
|
|
281
365
|
|
|
282
366
|
}
|
|
283
367
|
|
|
284
|
-
const textureDescriptorGPU =
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
format: format,
|
|
295
|
-
usage: usage
|
|
296
|
-
};
|
|
368
|
+
const textureDescriptorGPU = new GPUTextureDescriptor();
|
|
369
|
+
textureDescriptorGPU.label = texture.name;
|
|
370
|
+
textureDescriptorGPU.size.width = width;
|
|
371
|
+
textureDescriptorGPU.size.height = height;
|
|
372
|
+
textureDescriptorGPU.size.depthOrArrayLayers = depth;
|
|
373
|
+
textureDescriptorGPU.mipLevelCount = levels;
|
|
374
|
+
textureDescriptorGPU.sampleCount = primarySamples;
|
|
375
|
+
textureDescriptorGPU.dimension = dimension;
|
|
376
|
+
textureDescriptorGPU.format = format;
|
|
377
|
+
textureDescriptorGPU.usage = usage;
|
|
297
378
|
|
|
298
379
|
// texture creation
|
|
299
380
|
|
|
@@ -353,7 +434,7 @@ class WebGPUTextureUtils {
|
|
|
353
434
|
const backend = this.backend;
|
|
354
435
|
const textureData = backend.get( texture );
|
|
355
436
|
|
|
356
|
-
if ( textureData.texture !== undefined && isDefaultTexture === false ) textureData.texture.destroy();
|
|
437
|
+
if ( textureData.texture !== undefined && isDefaultTexture === false && texture.isExternalTexture !== true ) textureData.texture.destroy();
|
|
357
438
|
|
|
358
439
|
if ( textureData.msaaTexture !== undefined ) textureData.msaaTexture.destroy();
|
|
359
440
|
|
|
@@ -403,17 +484,16 @@ class WebGPUTextureUtils {
|
|
|
403
484
|
|
|
404
485
|
if ( colorBuffer ) colorBuffer.destroy();
|
|
405
486
|
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
} );
|
|
487
|
+
_textureDescriptor.label = 'colorBuffer';
|
|
488
|
+
_textureDescriptor.size.width = width;
|
|
489
|
+
_textureDescriptor.size.height = height;
|
|
490
|
+
_textureDescriptor.sampleCount = backend.utils.getSampleCount( backend.renderer.currentSamples );
|
|
491
|
+
_textureDescriptor.format = backend.utils.getPreferredCanvasFormat();
|
|
492
|
+
_textureDescriptor.usage = GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC;
|
|
493
|
+
|
|
494
|
+
colorBuffer = backend.device.createTexture( _textureDescriptor );
|
|
495
|
+
|
|
496
|
+
_textureDescriptor.reset();
|
|
417
497
|
|
|
418
498
|
//
|
|
419
499
|
|
|
@@ -560,7 +640,17 @@ class WebGPUTextureUtils {
|
|
|
560
640
|
|
|
561
641
|
} else if ( texture.isCompressedTexture || texture.isCompressedArrayTexture ) {
|
|
562
642
|
|
|
563
|
-
|
|
643
|
+
if ( texture.isCompressedArrayTexture && texture.layerUpdates.size > 0 ) {
|
|
644
|
+
|
|
645
|
+
this._copyCompressedBufferToTexture( texture.mipmaps, textureData.texture, textureDescriptorGPU, texture.layerUpdates );
|
|
646
|
+
|
|
647
|
+
texture.clearLayerUpdates();
|
|
648
|
+
|
|
649
|
+
} else {
|
|
650
|
+
|
|
651
|
+
this._copyCompressedBufferToTexture( texture.mipmaps, textureData.texture, textureDescriptorGPU );
|
|
652
|
+
|
|
653
|
+
}
|
|
564
654
|
|
|
565
655
|
} else if ( texture.isCubeTexture ) {
|
|
566
656
|
|
|
@@ -586,10 +676,29 @@ class WebGPUTextureUtils {
|
|
|
586
676
|
const width = textureDescriptorGPU.size.width;
|
|
587
677
|
const height = textureDescriptorGPU.size.height;
|
|
588
678
|
|
|
589
|
-
device.queue.copyElementImageToTexture
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
679
|
+
if ( device.queue.copyElementImageToTexture.length === 2 ) {
|
|
680
|
+
|
|
681
|
+
// Chrome 150+
|
|
682
|
+
|
|
683
|
+
device.queue.copyElementImageToTexture(
|
|
684
|
+
{ source: image },
|
|
685
|
+
{
|
|
686
|
+
destination: { texture: textureData.texture },
|
|
687
|
+
width: width,
|
|
688
|
+
height: height
|
|
689
|
+
}
|
|
690
|
+
);
|
|
691
|
+
|
|
692
|
+
} else {
|
|
693
|
+
|
|
694
|
+
// Chrome 138 - 149
|
|
695
|
+
|
|
696
|
+
device.queue.copyElementImageToTexture(
|
|
697
|
+
image, width, height,
|
|
698
|
+
{ texture: textureData.texture }
|
|
699
|
+
);
|
|
700
|
+
|
|
701
|
+
}
|
|
593
702
|
|
|
594
703
|
if ( texture.flipY ) {
|
|
595
704
|
|
|
@@ -648,34 +757,39 @@ class WebGPUTextureUtils {
|
|
|
648
757
|
let bytesPerRow = width * bytesPerTexel;
|
|
649
758
|
bytesPerRow = Math.ceil( bytesPerRow / 256 ) * 256; // Align to 256 bytes
|
|
650
759
|
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
size: ( ( height - 1 ) * bytesPerRow ) + ( width * bytesPerTexel ), // see https://github.com/mrdoob/three.js/issues/31658#issuecomment-3229442010
|
|
654
|
-
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ
|
|
655
|
-
}
|
|
656
|
-
);
|
|
760
|
+
_bufferDescriptor.size = ( ( height - 1 ) * bytesPerRow ) + ( width * bytesPerTexel ); // see https://github.com/mrdoob/three.js/issues/31658#issuecomment-3229442010
|
|
761
|
+
_bufferDescriptor.usage = GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ;
|
|
657
762
|
|
|
658
|
-
const
|
|
763
|
+
const readBuffer = device.createBuffer( _bufferDescriptor );
|
|
659
764
|
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
},
|
|
669
|
-
{
|
|
670
|
-
width: width,
|
|
671
|
-
height: height
|
|
672
|
-
}
|
|
765
|
+
_bufferDescriptor.reset();
|
|
766
|
+
|
|
767
|
+
const encoder = device.createCommandEncoder( _commandEncoderDescriptor );
|
|
768
|
+
|
|
769
|
+
_texelCopyTextureInfo.texture = textureGPU;
|
|
770
|
+
_texelCopyTextureInfo.origin.x = x;
|
|
771
|
+
_texelCopyTextureInfo.origin.y = y;
|
|
772
|
+
_texelCopyTextureInfo.origin.z = faceIndex;
|
|
673
773
|
|
|
774
|
+
_texelCopyBufferInfo.buffer = readBuffer;
|
|
775
|
+
_texelCopyBufferInfo.bytesPerRow = bytesPerRow;
|
|
776
|
+
|
|
777
|
+
_extent3D.width = width;
|
|
778
|
+
_extent3D.height = height;
|
|
779
|
+
|
|
780
|
+
encoder.copyTextureToBuffer(
|
|
781
|
+
_texelCopyTextureInfo,
|
|
782
|
+
_texelCopyBufferInfo,
|
|
783
|
+
_extent3D
|
|
674
784
|
);
|
|
675
785
|
|
|
786
|
+
_texelCopyTextureInfo.reset();
|
|
787
|
+
_texelCopyBufferInfo.reset();
|
|
788
|
+
_extent3D.reset();
|
|
789
|
+
|
|
676
790
|
const typedArrayType = this._getTypedArrayType( format );
|
|
677
791
|
|
|
678
|
-
|
|
792
|
+
submit( device, encoder.finish() );
|
|
679
793
|
|
|
680
794
|
await readBuffer.mapAsync( GPUMapMode.READ );
|
|
681
795
|
|
|
@@ -820,27 +934,36 @@ class WebGPUTextureUtils {
|
|
|
820
934
|
const width = ( mipLevel > 0 ) ? image.width : textureDescriptorGPU.size.width;
|
|
821
935
|
const height = ( mipLevel > 0 ) ? image.height : textureDescriptorGPU.size.height;
|
|
822
936
|
|
|
937
|
+
_copyExternalImageSourceInfo.source = image;
|
|
938
|
+
_copyExternalImageSourceInfo.flipY = flipY;
|
|
939
|
+
|
|
940
|
+
_copyExternalImageDestInfo.texture = textureGPU;
|
|
941
|
+
_copyExternalImageDestInfo.mipLevel = mipLevel;
|
|
942
|
+
_copyExternalImageDestInfo.origin.z = originDepth;
|
|
943
|
+
_copyExternalImageDestInfo.premultipliedAlpha = premultiplyAlpha;
|
|
944
|
+
|
|
945
|
+
_extent3D.width = width;
|
|
946
|
+
_extent3D.height = height;
|
|
947
|
+
|
|
823
948
|
try {
|
|
824
949
|
|
|
825
950
|
device.queue.copyExternalImageToTexture(
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
}, {
|
|
830
|
-
texture: textureGPU,
|
|
831
|
-
mipLevel: mipLevel,
|
|
832
|
-
origin: { x: 0, y: 0, z: originDepth },
|
|
833
|
-
premultipliedAlpha: premultiplyAlpha
|
|
834
|
-
}, {
|
|
835
|
-
width: width,
|
|
836
|
-
height: height,
|
|
837
|
-
depthOrArrayLayers: 1
|
|
838
|
-
}
|
|
951
|
+
_copyExternalImageSourceInfo,
|
|
952
|
+
_copyExternalImageDestInfo,
|
|
953
|
+
_extent3D
|
|
839
954
|
);
|
|
840
955
|
|
|
841
956
|
// try/catch has been added to fix bad video frame data on certain devices, see #32391
|
|
842
957
|
|
|
843
|
-
} catch ( _ ) {
|
|
958
|
+
} catch ( _ ) {
|
|
959
|
+
|
|
960
|
+
} finally {
|
|
961
|
+
|
|
962
|
+
_copyExternalImageSourceInfo.reset();
|
|
963
|
+
_copyExternalImageDestInfo.reset();
|
|
964
|
+
_extent3D.reset();
|
|
965
|
+
|
|
966
|
+
}
|
|
844
967
|
|
|
845
968
|
}
|
|
846
969
|
|
|
@@ -915,22 +1038,26 @@ class WebGPUTextureUtils {
|
|
|
915
1038
|
const bytesPerTexel = this._getBytesPerTexel( textureDescriptorGPU.format );
|
|
916
1039
|
const bytesPerRow = image.width * bytesPerTexel;
|
|
917
1040
|
|
|
1041
|
+
_texelCopyTextureInfo.texture = textureGPU;
|
|
1042
|
+
_texelCopyTextureInfo.mipLevel = mipLevel;
|
|
1043
|
+
_texelCopyTextureInfo.origin.z = originDepth;
|
|
1044
|
+
|
|
1045
|
+
_texelCopyBufferLayout.offset = image.width * image.height * bytesPerTexel * depth;
|
|
1046
|
+
_texelCopyBufferLayout.bytesPerRow = bytesPerRow;
|
|
1047
|
+
|
|
1048
|
+
_extent3D.width = image.width;
|
|
1049
|
+
_extent3D.height = image.height;
|
|
1050
|
+
|
|
918
1051
|
device.queue.writeTexture(
|
|
919
|
-
|
|
920
|
-
texture: textureGPU,
|
|
921
|
-
mipLevel: mipLevel,
|
|
922
|
-
origin: { x: 0, y: 0, z: originDepth }
|
|
923
|
-
},
|
|
1052
|
+
_texelCopyTextureInfo,
|
|
924
1053
|
data,
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
depthOrArrayLayers: 1
|
|
933
|
-
} );
|
|
1054
|
+
_texelCopyBufferLayout,
|
|
1055
|
+
_extent3D
|
|
1056
|
+
);
|
|
1057
|
+
|
|
1058
|
+
_texelCopyTextureInfo.reset();
|
|
1059
|
+
_texelCopyBufferLayout.reset();
|
|
1060
|
+
_extent3D.reset();
|
|
934
1061
|
|
|
935
1062
|
if ( flipY === true ) {
|
|
936
1063
|
|
|
@@ -947,8 +1074,9 @@ class WebGPUTextureUtils {
|
|
|
947
1074
|
* @param {Array<Object>} mipmaps - An array with mipmap data.
|
|
948
1075
|
* @param {GPUTexture} textureGPU - The GPU texture.
|
|
949
1076
|
* @param {Object} textureDescriptorGPU - The GPU texture descriptor.
|
|
1077
|
+
* @param {?Set<number>} [layerUpdates=null] - The layer indices to update.
|
|
950
1078
|
*/
|
|
951
|
-
_copyCompressedBufferToTexture( mipmaps, textureGPU, textureDescriptorGPU ) {
|
|
1079
|
+
_copyCompressedBufferToTexture( mipmaps, textureGPU, textureDescriptorGPU, layerUpdates = null ) {
|
|
952
1080
|
|
|
953
1081
|
// @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()
|
|
954
1082
|
|
|
@@ -956,6 +1084,7 @@ class WebGPUTextureUtils {
|
|
|
956
1084
|
|
|
957
1085
|
const blockData = this._getBlockData( textureDescriptorGPU.format );
|
|
958
1086
|
const isArrayTexture = textureDescriptorGPU.size.depthOrArrayLayers > 1;
|
|
1087
|
+
const activeLayerUpdates = layerUpdates && layerUpdates.size > 0 ? layerUpdates : null;
|
|
959
1088
|
|
|
960
1089
|
for ( let i = 0; i < mipmaps.length; i ++ ) {
|
|
961
1090
|
|
|
@@ -966,28 +1095,26 @@ class WebGPUTextureUtils {
|
|
|
966
1095
|
const depth = isArrayTexture ? textureDescriptorGPU.size.depthOrArrayLayers : 1;
|
|
967
1096
|
|
|
968
1097
|
const bytesPerRow = Math.ceil( width / blockData.width ) * blockData.byteLength;
|
|
969
|
-
const
|
|
1098
|
+
const rowsPerImage = Math.ceil( height / blockData.height );
|
|
1099
|
+
const bytesPerImage = bytesPerRow * rowsPerImage;
|
|
1100
|
+
const textureWidth = Math.ceil( width / blockData.width ) * blockData.width;
|
|
1101
|
+
const textureHeight = rowsPerImage * blockData.height;
|
|
970
1102
|
|
|
971
|
-
|
|
1103
|
+
if ( activeLayerUpdates !== null ) {
|
|
972
1104
|
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
width: Math.ceil( width / blockData.width ) * blockData.width,
|
|
987
|
-
height: Math.ceil( height / blockData.height ) * blockData.height,
|
|
988
|
-
depthOrArrayLayers: 1
|
|
989
|
-
}
|
|
990
|
-
);
|
|
1105
|
+
for ( const layerIndex of activeLayerUpdates ) {
|
|
1106
|
+
|
|
1107
|
+
writeTextureLayer( device, textureGPU, i, layerIndex, mipmap, bytesPerImage, bytesPerRow, rowsPerImage, textureWidth, textureHeight );
|
|
1108
|
+
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
} else {
|
|
1112
|
+
|
|
1113
|
+
for ( let layerIndex = 0; layerIndex < depth; layerIndex ++ ) {
|
|
1114
|
+
|
|
1115
|
+
writeTextureLayer( device, textureGPU, i, layerIndex, mipmap, bytesPerImage, bytesPerRow, rowsPerImage, textureWidth, textureHeight );
|
|
1116
|
+
|
|
1117
|
+
}
|
|
991
1118
|
|
|
992
1119
|
}
|
|
993
1120
|
|
|
@@ -1084,6 +1211,27 @@ class WebGPUTextureUtils {
|
|
|
1084
1211
|
|
|
1085
1212
|
}
|
|
1086
1213
|
|
|
1214
|
+
/**
|
|
1215
|
+
* Converts the three.js filter constants to a GPU mipmap filter constant.
|
|
1216
|
+
* Unlike `_convertFilterMode`, this extracts the between-mip-level filtering
|
|
1217
|
+
* axis from the combined three.js constant rather than the within-level axis.
|
|
1218
|
+
*
|
|
1219
|
+
* @private
|
|
1220
|
+
* @param {number} value - The three.js constant defining a filter mode.
|
|
1221
|
+
* @return {string} The GPU mipmap filter mode.
|
|
1222
|
+
*/
|
|
1223
|
+
_convertMipmapFilterMode( value ) {
|
|
1224
|
+
|
|
1225
|
+
if ( value === NearestMipmapLinearFilter || value === LinearMipmapLinearFilter ) {
|
|
1226
|
+
|
|
1227
|
+
return GPUFilterMode.Linear;
|
|
1228
|
+
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1231
|
+
return GPUFilterMode.Nearest;
|
|
1232
|
+
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1087
1235
|
/**
|
|
1088
1236
|
* Returns the bytes-per-texel value for the given GPU texture format.
|
|
1089
1237
|
*
|
|
@@ -1310,6 +1458,14 @@ export function getFormat( texture, device ) {
|
|
|
1310
1458
|
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC7RGBAUnormSRGB : GPUTextureFormat.BC7RGBAUnorm;
|
|
1311
1459
|
break;
|
|
1312
1460
|
|
|
1461
|
+
case RGB_BPTC_SIGNED_Format:
|
|
1462
|
+
formatGPU = GPUTextureFormat.BC6HRGBFloat;
|
|
1463
|
+
break;
|
|
1464
|
+
|
|
1465
|
+
case RGB_BPTC_UNSIGNED_Format:
|
|
1466
|
+
formatGPU = GPUTextureFormat.BC6HRGBUFloat;
|
|
1467
|
+
break;
|
|
1468
|
+
|
|
1313
1469
|
case RGB_ETC2_Format:
|
|
1314
1470
|
case RGB_ETC1_Format:
|
|
1315
1471
|
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ETC2RGB8UnormSRGB : GPUTextureFormat.ETC2RGB8Unorm;
|