super-three 0.171.0 → 0.173.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +594 -427
- package/build/three.core.js +515 -81
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +79 -350
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +20 -7
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +29362 -3427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +29361 -3427
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +9 -7
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +48 -37
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +34 -29
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +22 -4
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -2
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
- package/examples/jsm/misc/Volume.js +27 -17
- package/examples/jsm/misc/VolumeSlice.js +7 -5
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +29 -24
- package/examples/jsm/physics/JoltPhysics.js +7 -7
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +5 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +2 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +4 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +18 -5
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/ArrayCamera.js +1 -0
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +6 -1
- package/src/core/BufferAttribute.js +4 -0
- package/src/core/EventDispatcher.js +8 -6
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/ImageUtils.js +1 -11
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +476 -23
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +121 -10
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
- package/src/nodes/Nodes.js +5 -6
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +47 -6
- package/src/nodes/accessors/BatchNode.js +42 -6
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +113 -3
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +306 -12
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +65 -5
- package/src/nodes/accessors/Object3DNode.js +101 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +56 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
- package/src/nodes/accessors/ReferenceNode.js +201 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +209 -8
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +38 -2
- package/src/nodes/accessors/Texture3DNode.js +91 -7
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +316 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +231 -25
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +80 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/ArrayNode.js +125 -0
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +350 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1166 -26
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +152 -1
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +51 -10
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +98 -1
- package/src/nodes/core/StructNode.js +121 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +105 -6
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +146 -7
- package/src/nodes/core/VaryingNode.js +100 -3
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BlendModes.js +88 -1
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +300 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +96 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +110 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +241 -35
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +78 -4
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +627 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +329 -18
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +3 -2
- package/src/nodes/tsl/TSLCore.js +22 -2
- package/src/nodes/utils/ArrayElementNode.js +39 -3
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +82 -2
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +54 -0
- package/src/nodes/utils/Timer.js +40 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +2 -3
- package/src/objects/ClippingGroup.js +49 -0
- package/src/objects/Line.js +6 -6
- package/src/renderers/WebGLRenderer.js +30 -4
- package/src/renderers/common/Animation.js +85 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +502 -44
- package/src/renderers/common/Background.js +48 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +108 -15
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +91 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +34 -6
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +99 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +201 -2
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +40 -3
- package/src/renderers/common/RenderObject.js +400 -17
- package/src/renderers/common/RenderObjects.js +103 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1170 -86
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +120 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +97 -7
- package/src/renderers/common/TimestampQueryPool.js +39 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +141 -2
- package/src/renderers/common/XRManager.js +1193 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +76 -10
- package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +243 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +352 -78
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl/WebGLBackground.js +4 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +578 -164
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
- package/src/renderers/webgpu/WebGPURenderer.js +36 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +19 -2
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/src/textures/VideoFrameTexture.js +35 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/objects/InstancedPoints.js +0 -19
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -1,12 +1,27 @@
|
|
|
1
1
|
import DataMap from '../../common/DataMap.js';
|
|
2
2
|
import { GPUTextureViewDimension, GPUIndexFormat, GPUFilterMode, GPUPrimitiveTopology, GPULoadOp, GPUStoreOp } from './WebGPUConstants.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* A WebGPU backend utility module used by {@link WebGPUTextureUtils}.
|
|
6
|
+
*
|
|
7
|
+
* @private
|
|
8
|
+
*/
|
|
4
9
|
class WebGPUTexturePassUtils extends DataMap {
|
|
5
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Constructs a new utility object.
|
|
13
|
+
*
|
|
14
|
+
* @param {GPUDevice} device - The WebGPU device.
|
|
15
|
+
*/
|
|
6
16
|
constructor( device ) {
|
|
7
17
|
|
|
8
18
|
super();
|
|
9
19
|
|
|
20
|
+
/**
|
|
21
|
+
* The WebGPU device.
|
|
22
|
+
*
|
|
23
|
+
* @type {GPUDevice}
|
|
24
|
+
*/
|
|
10
25
|
this.device = device;
|
|
11
26
|
|
|
12
27
|
const mipmapVertexSource = `
|
|
@@ -71,23 +86,62 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
|
|
|
71
86
|
|
|
72
87
|
}
|
|
73
88
|
`;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* The mipmap GPU sampler.
|
|
92
|
+
*
|
|
93
|
+
* @type {GPUSampler}
|
|
94
|
+
*/
|
|
74
95
|
this.mipmapSampler = device.createSampler( { minFilter: GPUFilterMode.Linear } );
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* The flipY GPU sampler.
|
|
99
|
+
*
|
|
100
|
+
* @type {GPUSampler}
|
|
101
|
+
*/
|
|
75
102
|
this.flipYSampler = device.createSampler( { minFilter: GPUFilterMode.Nearest } ); //@TODO?: Consider using textureLoad()
|
|
76
103
|
|
|
77
|
-
|
|
104
|
+
/**
|
|
105
|
+
* A cache for GPU render pipelines used for copy/transfer passes.
|
|
106
|
+
* Every texture format requires a unique pipeline.
|
|
107
|
+
*
|
|
108
|
+
* @type {Object<String,GPURenderPipeline>}
|
|
109
|
+
*/
|
|
78
110
|
this.transferPipelines = {};
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* A cache for GPU render pipelines used for flipY passes.
|
|
114
|
+
* Every texture format requires a unique pipeline.
|
|
115
|
+
*
|
|
116
|
+
* @type {Object<String,GPURenderPipeline>}
|
|
117
|
+
*/
|
|
79
118
|
this.flipYPipelines = {};
|
|
80
119
|
|
|
120
|
+
/**
|
|
121
|
+
* The mipmap vertex shader module.
|
|
122
|
+
*
|
|
123
|
+
* @type {GPUShaderModule}
|
|
124
|
+
*/
|
|
81
125
|
this.mipmapVertexShaderModule = device.createShaderModule( {
|
|
82
126
|
label: 'mipmapVertex',
|
|
83
127
|
code: mipmapVertexSource
|
|
84
128
|
} );
|
|
85
129
|
|
|
130
|
+
/**
|
|
131
|
+
* The mipmap fragment shader module.
|
|
132
|
+
*
|
|
133
|
+
* @type {GPUShaderModule}
|
|
134
|
+
*/
|
|
86
135
|
this.mipmapFragmentShaderModule = device.createShaderModule( {
|
|
87
136
|
label: 'mipmapFragment',
|
|
88
137
|
code: mipmapFragmentSource
|
|
89
138
|
} );
|
|
90
139
|
|
|
140
|
+
/**
|
|
141
|
+
* The flipY fragment shader module.
|
|
142
|
+
*
|
|
143
|
+
* @type {GPUShaderModule}
|
|
144
|
+
*/
|
|
91
145
|
this.flipYFragmentShaderModule = device.createShaderModule( {
|
|
92
146
|
label: 'flipYFragment',
|
|
93
147
|
code: flipYFragmentSource
|
|
@@ -95,6 +149,13 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
|
|
|
95
149
|
|
|
96
150
|
}
|
|
97
151
|
|
|
152
|
+
/**
|
|
153
|
+
* Returns a render pipeline for the internal copy render pass. The pass
|
|
154
|
+
* requires a unique render pipeline for each texture format.
|
|
155
|
+
*
|
|
156
|
+
* @param {String} format - The GPU texture format
|
|
157
|
+
* @return {GPURenderPipeline} The GPU render pipeline.
|
|
158
|
+
*/
|
|
98
159
|
getTransferPipeline( format ) {
|
|
99
160
|
|
|
100
161
|
let pipeline = this.transferPipelines[ format ];
|
|
@@ -127,6 +188,13 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
|
|
|
127
188
|
|
|
128
189
|
}
|
|
129
190
|
|
|
191
|
+
/**
|
|
192
|
+
* Returns a render pipeline for the flipY render pass. The pass
|
|
193
|
+
* requires a unique render pipeline for each texture format.
|
|
194
|
+
*
|
|
195
|
+
* @param {String} format - The GPU texture format
|
|
196
|
+
* @return {GPURenderPipeline} The GPU render pipeline.
|
|
197
|
+
*/
|
|
130
198
|
getFlipYPipeline( format ) {
|
|
131
199
|
|
|
132
200
|
let pipeline = this.flipYPipelines[ format ];
|
|
@@ -159,6 +227,13 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
|
|
|
159
227
|
|
|
160
228
|
}
|
|
161
229
|
|
|
230
|
+
/**
|
|
231
|
+
* Flip the contents of the given GPU texture along its vertical axis.
|
|
232
|
+
*
|
|
233
|
+
* @param {GPUTexture} textureGPU - The GPU texture object.
|
|
234
|
+
* @param {Object} textureGPUDescriptor - The texture descriptor.
|
|
235
|
+
* @param {Number} [baseArrayLayer=0] - The index of the first array layer accessible to the texture view.
|
|
236
|
+
*/
|
|
162
237
|
flipY( textureGPU, textureGPUDescriptor, baseArrayLayer = 0 ) {
|
|
163
238
|
|
|
164
239
|
const format = textureGPUDescriptor.format;
|
|
@@ -229,6 +304,13 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
|
|
|
229
304
|
|
|
230
305
|
}
|
|
231
306
|
|
|
307
|
+
/**
|
|
308
|
+
* Generates mipmaps for the given GPU texture.
|
|
309
|
+
*
|
|
310
|
+
* @param {GPUTexture} textureGPU - The GPU texture object.
|
|
311
|
+
* @param {Object} textureGPUDescriptor - The texture descriptor.
|
|
312
|
+
* @param {Number} [baseArrayLayer=0] - The index of the first array layer accessible to the texture view.
|
|
313
|
+
*/
|
|
232
314
|
generateMipmaps( textureGPU, textureGPUDescriptor, baseArrayLayer = 0 ) {
|
|
233
315
|
|
|
234
316
|
const textureData = this.get( textureGPU );
|
|
@@ -254,6 +336,15 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
|
|
|
254
336
|
|
|
255
337
|
}
|
|
256
338
|
|
|
339
|
+
/**
|
|
340
|
+
* Since multiple copy render passes are required to generate mipmaps, the passes
|
|
341
|
+
* are managed as render bundles to improve performance.
|
|
342
|
+
*
|
|
343
|
+
* @param {GPUTexture} textureGPU - The GPU texture object.
|
|
344
|
+
* @param {Object} textureGPUDescriptor - The texture descriptor.
|
|
345
|
+
* @param {Number} baseArrayLayer - The index of the first array layer accessible to the texture view.
|
|
346
|
+
* @return {Array} An array of render bundles.
|
|
347
|
+
*/
|
|
257
348
|
_mipmapCreateBundles( textureGPU, textureGPUDescriptor, baseArrayLayer ) {
|
|
258
349
|
|
|
259
350
|
const pipeline = this.getTransferPipeline( textureGPUDescriptor.format );
|
|
@@ -319,6 +410,12 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
|
|
|
319
410
|
|
|
320
411
|
}
|
|
321
412
|
|
|
413
|
+
/**
|
|
414
|
+
* Executes the render bundles.
|
|
415
|
+
*
|
|
416
|
+
* @param {GPUCommandEncoder} commandEncoder - The GPU command encoder.
|
|
417
|
+
* @param {Array} passes - An array of render bundles.
|
|
418
|
+
*/
|
|
322
419
|
_mipmapRunBundles( commandEncoder, passes ) {
|
|
323
420
|
|
|
324
421
|
const levels = passes.length;
|
|
@@ -32,25 +32,82 @@ const _compareToWebGPU = {
|
|
|
32
32
|
|
|
33
33
|
const _flipMap = [ 0, 1, 3, 2, 4, 5 ];
|
|
34
34
|
|
|
35
|
+
/**
|
|
36
|
+
* A WebGPU backend utility module for managing textures.
|
|
37
|
+
*
|
|
38
|
+
* @private
|
|
39
|
+
*/
|
|
35
40
|
class WebGPUTextureUtils {
|
|
36
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Constructs a new utility object.
|
|
44
|
+
*
|
|
45
|
+
* @param {WebGPUBackend} backend - The WebGPU backend.
|
|
46
|
+
*/
|
|
37
47
|
constructor( backend ) {
|
|
38
48
|
|
|
49
|
+
/**
|
|
50
|
+
* A reference to the WebGPU backend.
|
|
51
|
+
*
|
|
52
|
+
* @type {WebGPUBackend}
|
|
53
|
+
*/
|
|
39
54
|
this.backend = backend;
|
|
40
55
|
|
|
56
|
+
/**
|
|
57
|
+
* A reference to the pass utils.
|
|
58
|
+
*
|
|
59
|
+
* @type {WebGPUTexturePassUtils?}
|
|
60
|
+
* @default null
|
|
61
|
+
*/
|
|
41
62
|
this._passUtils = null;
|
|
42
63
|
|
|
64
|
+
/**
|
|
65
|
+
* A dictionary for managing default textures. The key
|
|
66
|
+
* is the texture format, the value the texture object.
|
|
67
|
+
*
|
|
68
|
+
* @type {Object<String,Texture>}
|
|
69
|
+
*/
|
|
43
70
|
this.defaultTexture = {};
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* A dictionary for managing default cube textures. The key
|
|
74
|
+
* is the texture format, the value the texture object.
|
|
75
|
+
*
|
|
76
|
+
* @type {Object<String,CubeTexture>}
|
|
77
|
+
*/
|
|
44
78
|
this.defaultCubeTexture = {};
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* A default video frame.
|
|
82
|
+
*
|
|
83
|
+
* @type {VideoFrame?}
|
|
84
|
+
* @default null
|
|
85
|
+
*/
|
|
45
86
|
this.defaultVideoFrame = null;
|
|
46
87
|
|
|
88
|
+
/**
|
|
89
|
+
* Represents the color attachment of the default framebuffer.
|
|
90
|
+
*
|
|
91
|
+
* @type {GPUTexture?}
|
|
92
|
+
* @default null
|
|
93
|
+
*/
|
|
47
94
|
this.colorBuffer = null;
|
|
48
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Represents the depth attachment of the default framebuffer.
|
|
98
|
+
*
|
|
99
|
+
* @type {DepthTexture}
|
|
100
|
+
*/
|
|
49
101
|
this.depthTexture = new DepthTexture();
|
|
50
102
|
this.depthTexture.name = 'depthBuffer';
|
|
51
103
|
|
|
52
104
|
}
|
|
53
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Creates a GPU sampler for the given texture.
|
|
108
|
+
*
|
|
109
|
+
* @param {Texture} texture - The texture to create the sampler for.
|
|
110
|
+
*/
|
|
54
111
|
createSampler( texture ) {
|
|
55
112
|
|
|
56
113
|
const backend = this.backend;
|
|
@@ -86,6 +143,12 @@ class WebGPUTextureUtils {
|
|
|
86
143
|
|
|
87
144
|
}
|
|
88
145
|
|
|
146
|
+
/**
|
|
147
|
+
* Creates a default texture for the given texture that can be used
|
|
148
|
+
* as a placeholder until the actual texture is ready for usage.
|
|
149
|
+
*
|
|
150
|
+
* @param {Texture} texture - The texture to create a default texture for.
|
|
151
|
+
*/
|
|
89
152
|
createDefaultTexture( texture ) {
|
|
90
153
|
|
|
91
154
|
let textureGPU;
|
|
@@ -110,6 +173,13 @@ class WebGPUTextureUtils {
|
|
|
110
173
|
|
|
111
174
|
}
|
|
112
175
|
|
|
176
|
+
/**
|
|
177
|
+
* Defines a texture on the GPU for the given texture object.
|
|
178
|
+
*
|
|
179
|
+
* @param {Texture} texture - The texture.
|
|
180
|
+
* @param {Object} [options={}] - Optional configuration parameter.
|
|
181
|
+
* @return {undefined}
|
|
182
|
+
*/
|
|
113
183
|
createTexture( texture, options = {} ) {
|
|
114
184
|
|
|
115
185
|
const backend = this.backend;
|
|
@@ -146,11 +216,7 @@ class WebGPUTextureUtils {
|
|
|
146
216
|
|
|
147
217
|
textureData.format = format;
|
|
148
218
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
sampleCount = backend.utils.getSampleCount( sampleCount );
|
|
152
|
-
|
|
153
|
-
const primarySampleCount = texture.isRenderTargetTexture && ! texture.isMultisampleRenderTargetTexture ? 1 : sampleCount;
|
|
219
|
+
const { samples, primarySamples, isMSAA } = backend.utils.getTextureSampleData( texture );
|
|
154
220
|
|
|
155
221
|
let usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC;
|
|
156
222
|
|
|
@@ -174,7 +240,7 @@ class WebGPUTextureUtils {
|
|
|
174
240
|
depthOrArrayLayers: depth,
|
|
175
241
|
},
|
|
176
242
|
mipLevelCount: levels,
|
|
177
|
-
sampleCount:
|
|
243
|
+
sampleCount: primarySamples,
|
|
178
244
|
dimension: dimension,
|
|
179
245
|
format: format,
|
|
180
246
|
usage: usage
|
|
@@ -208,12 +274,12 @@ class WebGPUTextureUtils {
|
|
|
208
274
|
|
|
209
275
|
}
|
|
210
276
|
|
|
211
|
-
if (
|
|
277
|
+
if ( isMSAA ) {
|
|
212
278
|
|
|
213
279
|
const msaaTextureDescriptorGPU = Object.assign( {}, textureDescriptorGPU );
|
|
214
280
|
|
|
215
281
|
msaaTextureDescriptorGPU.label = msaaTextureDescriptorGPU.label + '-msaa';
|
|
216
|
-
msaaTextureDescriptorGPU.sampleCount =
|
|
282
|
+
msaaTextureDescriptorGPU.sampleCount = samples;
|
|
217
283
|
|
|
218
284
|
textureData.msaaTexture = backend.device.createTexture( msaaTextureDescriptorGPU );
|
|
219
285
|
|
|
@@ -225,6 +291,11 @@ class WebGPUTextureUtils {
|
|
|
225
291
|
|
|
226
292
|
}
|
|
227
293
|
|
|
294
|
+
/**
|
|
295
|
+
* Destroys the GPU data for the given texture object.
|
|
296
|
+
*
|
|
297
|
+
* @param {Texture} texture - The texture.
|
|
298
|
+
*/
|
|
228
299
|
destroyTexture( texture ) {
|
|
229
300
|
|
|
230
301
|
const backend = this.backend;
|
|
@@ -238,6 +309,11 @@ class WebGPUTextureUtils {
|
|
|
238
309
|
|
|
239
310
|
}
|
|
240
311
|
|
|
312
|
+
/**
|
|
313
|
+
* Destroys the GPU sampler for the given texture.
|
|
314
|
+
*
|
|
315
|
+
* @param {Texture} texture - The texture to destroy the sampler for.
|
|
316
|
+
*/
|
|
241
317
|
destroySampler( texture ) {
|
|
242
318
|
|
|
243
319
|
const backend = this.backend;
|
|
@@ -247,6 +323,11 @@ class WebGPUTextureUtils {
|
|
|
247
323
|
|
|
248
324
|
}
|
|
249
325
|
|
|
326
|
+
/**
|
|
327
|
+
* Generates mipmaps for the given texture.
|
|
328
|
+
*
|
|
329
|
+
* @param {Texture} texture - The texture.
|
|
330
|
+
*/
|
|
250
331
|
generateMipmaps( texture ) {
|
|
251
332
|
|
|
252
333
|
const textureData = this.backend.get( texture );
|
|
@@ -273,6 +354,12 @@ class WebGPUTextureUtils {
|
|
|
273
354
|
|
|
274
355
|
}
|
|
275
356
|
|
|
357
|
+
/**
|
|
358
|
+
* Returns the color buffer representing the color
|
|
359
|
+
* attachment of the default framebuffer.
|
|
360
|
+
*
|
|
361
|
+
* @return {GPUTexture} The color buffer.
|
|
362
|
+
*/
|
|
276
363
|
getColorBuffer() {
|
|
277
364
|
|
|
278
365
|
if ( this.colorBuffer ) this.colorBuffer.destroy();
|
|
@@ -296,6 +383,14 @@ class WebGPUTextureUtils {
|
|
|
296
383
|
|
|
297
384
|
}
|
|
298
385
|
|
|
386
|
+
/**
|
|
387
|
+
* Returns the depth buffer representing the depth
|
|
388
|
+
* attachment of the default framebuffer.
|
|
389
|
+
*
|
|
390
|
+
* @param {Boolean} [depth=true] - Whether depth is enabled or not.
|
|
391
|
+
* @param {Boolean} [stencil=false] - Whether stencil is enabled or not.
|
|
392
|
+
* @return {GPUTexture} The depth buffer.
|
|
393
|
+
*/
|
|
299
394
|
getDepthBuffer( depth = true, stencil = false ) {
|
|
300
395
|
|
|
301
396
|
const backend = this.backend;
|
|
@@ -336,12 +431,18 @@ class WebGPUTextureUtils {
|
|
|
336
431
|
depthTexture.image.width = width;
|
|
337
432
|
depthTexture.image.height = height;
|
|
338
433
|
|
|
339
|
-
this.createTexture( depthTexture, {
|
|
434
|
+
this.createTexture( depthTexture, { width, height } );
|
|
340
435
|
|
|
341
436
|
return backend.get( depthTexture ).texture;
|
|
342
437
|
|
|
343
438
|
}
|
|
344
439
|
|
|
440
|
+
/**
|
|
441
|
+
* Uploads the updated texture data to the GPU.
|
|
442
|
+
*
|
|
443
|
+
* @param {Texture} texture - The texture.
|
|
444
|
+
* @param {Object} [options={}] - Optional configuration parameter.
|
|
445
|
+
*/
|
|
345
446
|
updateTexture( texture, options ) {
|
|
346
447
|
|
|
347
448
|
const textureData = this.backend.get( texture );
|
|
@@ -393,6 +494,18 @@ class WebGPUTextureUtils {
|
|
|
393
494
|
|
|
394
495
|
}
|
|
395
496
|
|
|
497
|
+
/**
|
|
498
|
+
* Returns texture data as a typed array.
|
|
499
|
+
*
|
|
500
|
+
* @async
|
|
501
|
+
* @param {Texture} texture - The texture to copy.
|
|
502
|
+
* @param {Number} x - The x coordinate of the copy origin.
|
|
503
|
+
* @param {Number} y - The y coordinate of the copy origin.
|
|
504
|
+
* @param {Number} width - The width of the copy.
|
|
505
|
+
* @param {Number} height - The height of the copy.
|
|
506
|
+
* @param {Number} faceIndex - The face index.
|
|
507
|
+
* @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.
|
|
508
|
+
*/
|
|
396
509
|
async copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {
|
|
397
510
|
|
|
398
511
|
const device = this.backend.device;
|
|
@@ -442,6 +555,13 @@ class WebGPUTextureUtils {
|
|
|
442
555
|
|
|
443
556
|
}
|
|
444
557
|
|
|
558
|
+
/**
|
|
559
|
+
* Returns `true` if the given texture is an environment map.
|
|
560
|
+
*
|
|
561
|
+
* @private
|
|
562
|
+
* @param {Texture} texture - The texture.
|
|
563
|
+
* @return {Boolean} Whether the given texture is an environment map or not.
|
|
564
|
+
*/
|
|
445
565
|
_isEnvironmentTexture( texture ) {
|
|
446
566
|
|
|
447
567
|
const mapping = texture.mapping;
|
|
@@ -450,6 +570,13 @@ class WebGPUTextureUtils {
|
|
|
450
570
|
|
|
451
571
|
}
|
|
452
572
|
|
|
573
|
+
/**
|
|
574
|
+
* Returns the default GPU texture for the given format.
|
|
575
|
+
*
|
|
576
|
+
* @private
|
|
577
|
+
* @param {String} format - The GPU format.
|
|
578
|
+
* @return {GPUTexture} The GPU texture.
|
|
579
|
+
*/
|
|
453
580
|
_getDefaultTextureGPU( format ) {
|
|
454
581
|
|
|
455
582
|
let defaultTexture = this.defaultTexture[ format ];
|
|
@@ -470,6 +597,13 @@ class WebGPUTextureUtils {
|
|
|
470
597
|
|
|
471
598
|
}
|
|
472
599
|
|
|
600
|
+
/**
|
|
601
|
+
* Returns the default GPU cube texture for the given format.
|
|
602
|
+
*
|
|
603
|
+
* @private
|
|
604
|
+
* @param {String} format - The GPU format.
|
|
605
|
+
* @return {GPUTexture} The GPU texture.
|
|
606
|
+
*/
|
|
473
607
|
_getDefaultCubeTextureGPU( format ) {
|
|
474
608
|
|
|
475
609
|
let defaultCubeTexture = this.defaultTexture[ format ];
|
|
@@ -490,6 +624,12 @@ class WebGPUTextureUtils {
|
|
|
490
624
|
|
|
491
625
|
}
|
|
492
626
|
|
|
627
|
+
/**
|
|
628
|
+
* Returns the default video frame used as default data in context of video textures.
|
|
629
|
+
*
|
|
630
|
+
* @private
|
|
631
|
+
* @return {VideoFrame} The video frame.
|
|
632
|
+
*/
|
|
493
633
|
_getDefaultVideoFrame() {
|
|
494
634
|
|
|
495
635
|
let defaultVideoFrame = this.defaultVideoFrame;
|
|
@@ -511,6 +651,15 @@ class WebGPUTextureUtils {
|
|
|
511
651
|
|
|
512
652
|
}
|
|
513
653
|
|
|
654
|
+
/**
|
|
655
|
+
* Uploads cube texture image data to the GPU memory.
|
|
656
|
+
*
|
|
657
|
+
* @private
|
|
658
|
+
* @param {Array} images - The cube image data.
|
|
659
|
+
* @param {GPUTexture} textureGPU - The GPU texture.
|
|
660
|
+
* @param {Object} textureDescriptorGPU - The GPU texture descriptor.
|
|
661
|
+
* @param {Boolean} flipY - Whether to flip texture data along their vertical axis or not.
|
|
662
|
+
*/
|
|
514
663
|
_copyCubeMapToTexture( images, textureGPU, textureDescriptorGPU, flipY ) {
|
|
515
664
|
|
|
516
665
|
for ( let i = 0; i < 6; i ++ ) {
|
|
@@ -533,13 +682,24 @@ class WebGPUTextureUtils {
|
|
|
533
682
|
|
|
534
683
|
}
|
|
535
684
|
|
|
685
|
+
/**
|
|
686
|
+
* Uploads texture image data to the GPU memory.
|
|
687
|
+
*
|
|
688
|
+
* @private
|
|
689
|
+
* @param {HTMLImageElement|ImageBitmap|HTMLCanvasElement} image - The image data.
|
|
690
|
+
* @param {GPUTexture} textureGPU - The GPU texture.
|
|
691
|
+
* @param {Object} textureDescriptorGPU - The GPU texture descriptor.
|
|
692
|
+
* @param {Number} originDepth - The origin depth.
|
|
693
|
+
* @param {Boolean} flipY - Whether to flip texture data along their vertical axis or not.
|
|
694
|
+
*/
|
|
536
695
|
_copyImageToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY ) {
|
|
537
696
|
|
|
538
697
|
const device = this.backend.device;
|
|
539
698
|
|
|
540
699
|
device.queue.copyExternalImageToTexture(
|
|
541
700
|
{
|
|
542
|
-
source: image
|
|
701
|
+
source: image,
|
|
702
|
+
flipY: flipY
|
|
543
703
|
}, {
|
|
544
704
|
texture: textureGPU,
|
|
545
705
|
mipLevel: 0,
|
|
@@ -551,14 +711,14 @@ class WebGPUTextureUtils {
|
|
|
551
711
|
}
|
|
552
712
|
);
|
|
553
713
|
|
|
554
|
-
if ( flipY === true ) {
|
|
555
|
-
|
|
556
|
-
this._flipY( textureGPU, textureDescriptorGPU, originDepth );
|
|
557
|
-
|
|
558
|
-
}
|
|
559
|
-
|
|
560
714
|
}
|
|
561
715
|
|
|
716
|
+
/**
|
|
717
|
+
* Returns the pass utils singleton.
|
|
718
|
+
*
|
|
719
|
+
* @private
|
|
720
|
+
* @return {WebGPUTexturePassUtils} The utils instance.
|
|
721
|
+
*/
|
|
562
722
|
_getPassUtils() {
|
|
563
723
|
|
|
564
724
|
let passUtils = this._passUtils;
|
|
@@ -573,18 +733,45 @@ class WebGPUTextureUtils {
|
|
|
573
733
|
|
|
574
734
|
}
|
|
575
735
|
|
|
736
|
+
/**
|
|
737
|
+
* Generates mipmaps for the given GPU texture.
|
|
738
|
+
*
|
|
739
|
+
* @private
|
|
740
|
+
* @param {GPUTexture} textureGPU - The GPU texture object.
|
|
741
|
+
* @param {Object} textureDescriptorGPU - The texture descriptor.
|
|
742
|
+
* @param {Number} [baseArrayLayer=0] - The index of the first array layer accessible to the texture view.
|
|
743
|
+
*/
|
|
576
744
|
_generateMipmaps( textureGPU, textureDescriptorGPU, baseArrayLayer = 0 ) {
|
|
577
745
|
|
|
578
746
|
this._getPassUtils().generateMipmaps( textureGPU, textureDescriptorGPU, baseArrayLayer );
|
|
579
747
|
|
|
580
748
|
}
|
|
581
749
|
|
|
750
|
+
/**
|
|
751
|
+
* Flip the contents of the given GPU texture along its vertical axis.
|
|
752
|
+
*
|
|
753
|
+
* @private
|
|
754
|
+
* @param {GPUTexture} textureGPU - The GPU texture object.
|
|
755
|
+
* @param {Object} textureDescriptorGPU - The texture descriptor.
|
|
756
|
+
* @param {Number} [originDepth=0] - The origin depth.
|
|
757
|
+
*/
|
|
582
758
|
_flipY( textureGPU, textureDescriptorGPU, originDepth = 0 ) {
|
|
583
759
|
|
|
584
760
|
this._getPassUtils().flipY( textureGPU, textureDescriptorGPU, originDepth );
|
|
585
761
|
|
|
586
762
|
}
|
|
587
763
|
|
|
764
|
+
/**
|
|
765
|
+
* Uploads texture buffer data to the GPU memory.
|
|
766
|
+
*
|
|
767
|
+
* @private
|
|
768
|
+
* @param {Object} image - An object defining the image buffer data.
|
|
769
|
+
* @param {GPUTexture} textureGPU - The GPU texture.
|
|
770
|
+
* @param {Object} textureDescriptorGPU - The GPU texture descriptor.
|
|
771
|
+
* @param {Number} originDepth - The origin depth.
|
|
772
|
+
* @param {Boolean} flipY - Whether to flip texture data along their vertical axis or not.
|
|
773
|
+
* @param {Number} [depth=0] - TODO.
|
|
774
|
+
*/
|
|
588
775
|
_copyBufferToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, depth = 0 ) {
|
|
589
776
|
|
|
590
777
|
// @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()
|
|
@@ -622,6 +809,14 @@ class WebGPUTextureUtils {
|
|
|
622
809
|
|
|
623
810
|
}
|
|
624
811
|
|
|
812
|
+
/**
|
|
813
|
+
* Uploads compressed texture data to the GPU memory.
|
|
814
|
+
*
|
|
815
|
+
* @private
|
|
816
|
+
* @param {Array<Object>} mipmaps - An array with mipmap data.
|
|
817
|
+
* @param {GPUTexture} textureGPU - The GPU texture.
|
|
818
|
+
* @param {Object} textureDescriptorGPU - The GPU texture descriptor.
|
|
819
|
+
*/
|
|
625
820
|
_copyCompressedBufferToTexture( mipmaps, textureGPU, textureDescriptorGPU ) {
|
|
626
821
|
|
|
627
822
|
// @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()
|
|
@@ -669,10 +864,16 @@ class WebGPUTextureUtils {
|
|
|
669
864
|
|
|
670
865
|
}
|
|
671
866
|
|
|
867
|
+
/**
|
|
868
|
+
* This method is only relevant for compressed texture formats. It returns a block
|
|
869
|
+
* data descriptor for the given GPU compressed texture format.
|
|
870
|
+
*
|
|
871
|
+
* @private
|
|
872
|
+
* @param {String} format - The GPU compressed texture format.
|
|
873
|
+
* @return {Object} The block data descriptor.
|
|
874
|
+
*/
|
|
672
875
|
_getBlockData( format ) {
|
|
673
876
|
|
|
674
|
-
// this method is only relevant for compressed texture formats
|
|
675
|
-
|
|
676
877
|
if ( format === GPUTextureFormat.BC1RGBAUnorm || format === GPUTextureFormat.BC1RGBAUnormSRGB ) return { byteLength: 8, width: 4, height: 4 }; // DXT1
|
|
677
878
|
if ( format === GPUTextureFormat.BC2RGBAUnorm || format === GPUTextureFormat.BC2RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // DXT3
|
|
678
879
|
if ( format === GPUTextureFormat.BC3RGBAUnorm || format === GPUTextureFormat.BC3RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // DXT5
|
|
@@ -706,6 +907,13 @@ class WebGPUTextureUtils {
|
|
|
706
907
|
|
|
707
908
|
}
|
|
708
909
|
|
|
910
|
+
/**
|
|
911
|
+
* Converts the three.js uv wrapping constants to GPU address mode constants.
|
|
912
|
+
*
|
|
913
|
+
* @private
|
|
914
|
+
* @param {Number} value - The three.js constant defining a uv wrapping mode.
|
|
915
|
+
* @return {String} The GPU address mode.
|
|
916
|
+
*/
|
|
709
917
|
_convertAddressMode( value ) {
|
|
710
918
|
|
|
711
919
|
let addressMode = GPUAddressMode.ClampToEdge;
|
|
@@ -724,6 +932,13 @@ class WebGPUTextureUtils {
|
|
|
724
932
|
|
|
725
933
|
}
|
|
726
934
|
|
|
935
|
+
/**
|
|
936
|
+
* Converts the three.js filter constants to GPU filter constants.
|
|
937
|
+
*
|
|
938
|
+
* @private
|
|
939
|
+
* @param {Number} value - The three.js constant defining a filter mode.
|
|
940
|
+
* @return {String} The GPU filter mode.
|
|
941
|
+
*/
|
|
727
942
|
_convertFilterMode( value ) {
|
|
728
943
|
|
|
729
944
|
let filterMode = GPUFilterMode.Linear;
|
|
@@ -738,6 +953,13 @@ class WebGPUTextureUtils {
|
|
|
738
953
|
|
|
739
954
|
}
|
|
740
955
|
|
|
956
|
+
/**
|
|
957
|
+
* Returns the bytes-per-texel value for the given GPU texture format.
|
|
958
|
+
*
|
|
959
|
+
* @private
|
|
960
|
+
* @param {String} format - The GPU texture format.
|
|
961
|
+
* @return {Number} The bytes-per-texel.
|
|
962
|
+
*/
|
|
741
963
|
_getBytesPerTexel( format ) {
|
|
742
964
|
|
|
743
965
|
// 8-bit formats
|
|
@@ -794,6 +1016,13 @@ class WebGPUTextureUtils {
|
|
|
794
1016
|
|
|
795
1017
|
}
|
|
796
1018
|
|
|
1019
|
+
/**
|
|
1020
|
+
* Returns the corresponding typed array type for the given GPU texture format.
|
|
1021
|
+
*
|
|
1022
|
+
* @private
|
|
1023
|
+
* @param {String} format - The GPU texture format.
|
|
1024
|
+
* @return {TypedArray.constructor} The typed array type.
|
|
1025
|
+
*/
|
|
797
1026
|
_getTypedArrayType( format ) {
|
|
798
1027
|
|
|
799
1028
|
if ( format === GPUTextureFormat.R8Uint ) return Uint8Array;
|
|
@@ -844,6 +1073,13 @@ class WebGPUTextureUtils {
|
|
|
844
1073
|
|
|
845
1074
|
}
|
|
846
1075
|
|
|
1076
|
+
/**
|
|
1077
|
+
* Returns the GPU dimensions for the given texture.
|
|
1078
|
+
*
|
|
1079
|
+
* @private
|
|
1080
|
+
* @param {Texture} texture - The texture.
|
|
1081
|
+
* @return {String} The GPU dimension.
|
|
1082
|
+
*/
|
|
847
1083
|
_getDimension( texture ) {
|
|
848
1084
|
|
|
849
1085
|
let dimension;
|
|
@@ -864,6 +1100,14 @@ class WebGPUTextureUtils {
|
|
|
864
1100
|
|
|
865
1101
|
}
|
|
866
1102
|
|
|
1103
|
+
/**
|
|
1104
|
+
* Returns the GPU format for the given texture.
|
|
1105
|
+
*
|
|
1106
|
+
* @param {Texture} texture - The texture.
|
|
1107
|
+
* @param {GPUDevice?} [device=null] - The GPU device which is used for feature detection.
|
|
1108
|
+
* It is not necessary to apply the device for most formats.
|
|
1109
|
+
* @return {String} The GPU format.
|
|
1110
|
+
*/
|
|
867
1111
|
export function getFormat( texture, device = null ) {
|
|
868
1112
|
|
|
869
1113
|
const format = texture.format;
|