@gnsx/three 0.185.15 → 0.186.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 +10 -82600
- package/build/three.core.js +1303 -728
- package/build/three.module.js +439 -338
- package/build/three.tsl.js +74 -44
- package/build/three.webgpu.js +6036 -2184
- package/build/three.webgpu.nodes.js +6020 -2184
- package/examples/jsm/Addons.js +6 -6
- package/examples/jsm/controls/ArcballControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +44 -20
- package/examples/jsm/controls/OrbitControls.js +9 -0
- package/examples/jsm/controls/TrackballControls.js +109 -4
- package/examples/jsm/csm/CSMShadowNode.js +13 -0
- package/examples/jsm/exporters/GLTFExporter.js +23 -7
- package/examples/jsm/exporters/USDZExporter.js +2 -2
- package/examples/jsm/generators/CityGenerator.js +377 -45
- package/examples/jsm/generators/ForestGenerator.js +12 -12
- package/examples/jsm/generators/TerrainGenerator.js +49 -37
- package/examples/jsm/generators/TreeGenerator.js +70 -76
- package/examples/jsm/generators/city/BenchGenerator.js +127 -0
- package/examples/jsm/generators/city/CarGenerator.js +479 -0
- package/examples/jsm/generators/city/CityGeneratorUtils.js +31 -0
- package/examples/jsm/generators/city/HydrantGenerator.js +106 -0
- package/examples/jsm/generators/city/InstancedMeshGenerator.js +86 -0
- package/examples/jsm/generators/city/PersonGenerator.js +447 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +33 -38
- package/examples/jsm/generators/city/SkyscraperGenerator.js +448 -48
- package/examples/jsm/generators/city/StreetTreeGenerator.js +231 -0
- package/examples/jsm/generators/city/StreetlightGenerator.js +100 -0
- package/examples/jsm/generators/city/TrafficlightGenerator.js +106 -0
- package/examples/jsm/generators/city/TrashcanGenerator.js +100 -0
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +1 -1
- package/examples/jsm/gpgpu/CountingSort.js +271 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +60 -239
- package/examples/jsm/helpers/LightProbeGridHelperWebGL.js +221 -0
- package/examples/jsm/inspector/Extension.js +94 -0
- package/examples/jsm/inspector/Inspector.js +145 -41
- package/examples/jsm/inspector/RendererInspector.js +100 -52
- package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +2609 -0
- package/examples/jsm/inspector/extensions/color-grading/ColorWheel.js +352 -0
- package/examples/jsm/inspector/extensions/color-grading/CurveEditor.js +599 -0
- package/examples/jsm/inspector/extensions/color-grading/LUT3DStyle.js +1201 -0
- package/examples/jsm/inspector/extensions/color-grading/LUTMath.js +788 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/BrightnessModule.js +72 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ColorWheelModule.js +112 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ContrastModule.js +82 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/CurvesModule.js +109 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ExposureHueModule.js +110 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ExposureModule.js +73 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/HueModule.js +78 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ImportedCubeModule.js +89 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/Module.js +285 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/OutputModule.js +101 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/RendererModule.js +225 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/SatVibranceModule.js +102 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/SaturationModule.js +76 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/VibranceModule.js +76 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/WhiteBalanceModule.js +86 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +26 -31
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -0
- package/examples/jsm/inspector/tabs/Memory.js +0 -2
- package/examples/jsm/inspector/tabs/Settings.js +4 -0
- package/examples/jsm/inspector/tabs/Timeline.js +223 -171
- package/examples/jsm/inspector/tabs/Viewer.js +515 -21
- package/examples/jsm/inspector/ui/List.js +15 -9
- package/examples/jsm/inspector/ui/Profiler.js +170 -14
- package/examples/jsm/inspector/ui/Style.js +269 -23
- package/examples/jsm/inspector/ui/Tab.js +2 -0
- package/examples/jsm/inspector/ui/Values.js +14 -2
- package/examples/jsm/interactive/HTMLMesh.js +19 -3
- package/examples/jsm/lighting/LightProbeGrid.js +484 -889
- package/examples/jsm/lighting/LightProbeGridUtils.js +107 -0
- package/examples/jsm/lighting/LightProbeGridWebGL.js +841 -0
- package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +194 -0
- package/examples/jsm/lighting/vxgi/VXGINode.js +660 -0
- package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +478 -0
- package/examples/jsm/lighting/vxgi/VXGIVolume.js +1430 -0
- package/examples/jsm/lights/SunLight.js +95 -0
- package/examples/jsm/lights/SunLightNode.js +56 -0
- package/examples/jsm/lights/SunLightShadow.js +319 -0
- package/examples/jsm/lights/SunShadowNode.js +312 -0
- package/examples/jsm/loaders/3DMLoader.js +150 -49
- package/examples/jsm/loaders/3MFLoader.js +202 -1
- package/examples/jsm/loaders/FBXLoader.js +81 -5
- package/examples/jsm/loaders/GLTFGaussianSplatLoaderExtension.js +330 -0
- package/examples/jsm/loaders/GLTFLoader.js +79 -14
- package/examples/jsm/loaders/GaussianSplatPLYLoader.js +386 -0
- package/examples/jsm/loaders/KSPLATLoader.js +463 -0
- package/examples/jsm/loaders/MaterialXLoader.js +111 -1010
- package/examples/jsm/loaders/PCDLoader.js +1 -1
- package/examples/jsm/loaders/SPLATLoader.js +139 -0
- package/examples/jsm/loaders/SPZLoader.js +561 -0
- package/examples/jsm/loaders/materialx/MaterialXArchive.js +108 -0
- package/examples/jsm/loaders/materialx/MaterialXDocument.js +878 -0
- package/examples/jsm/loaders/materialx/MaterialXHextile.js +183 -0
- package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +376 -0
- package/examples/jsm/loaders/materialx/MaterialXLog.js +75 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +4 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +1021 -0
- package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +661 -0
- package/examples/jsm/loaders/materialx/MaterialXUtils.js +57 -0
- package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +997 -0
- package/examples/jsm/loaders/materialx/parse/MaterialXParser.js +28 -0
- package/examples/jsm/loaders/usd/USDAParser.js +15 -2
- package/examples/jsm/loaders/usd/USDCParser.js +1 -4
- package/examples/jsm/loaders/usd/USDComposer.js +80 -42
- package/examples/jsm/materials/WoodNodeMaterial.js +6 -108
- package/examples/jsm/misc/RollerCoaster.js +2 -2
- package/examples/jsm/misc/SculptGL.LICENSE.txt +21 -0
- package/examples/jsm/misc/Sculptor.js +1679 -0
- package/examples/jsm/misc/SculptorMesh.js +1504 -0
- package/examples/jsm/misc/SculptorTools.js +1180 -0
- package/examples/jsm/misc/SculptorUtils.js +345 -0
- package/examples/jsm/misc/TubePainter.js +28 -16
- package/examples/jsm/misc/VolumeSlice.js +24 -24
- package/examples/jsm/modifiers/SimplifyModifier.js +63 -556
- package/examples/jsm/objects/GaussianSplat.js +1039 -0
- package/examples/jsm/objects/Sky.js +66 -45
- package/examples/jsm/objects/SkyMesh.js +70 -51
- package/examples/jsm/physics/JoltPhysics.js +1 -1
- package/examples/jsm/postprocessing/AfterimagePass.js +4 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/GTAOPass.js +1 -1
- package/examples/jsm/postprocessing/OutlinePass.js +5 -5
- package/examples/jsm/postprocessing/SAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +4 -2
- package/examples/jsm/postprocessing/SavePass.js +1 -1
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +30 -13
- package/examples/jsm/renderers/CSS2DRenderer.js +29 -5
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +1 -1
- package/examples/jsm/shaders/FilmShader.js +2 -1
- package/examples/jsm/transpiler/AST.js +21 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +498 -8
- package/examples/jsm/transpiler/TSLEncoder.js +82 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +33 -4
- package/examples/jsm/tsl/WebGLNodesHandler.js +29 -39
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +3 -2
- package/examples/jsm/tsl/display/BilateralBlurNode.js +5 -2
- package/examples/jsm/tsl/display/BloomNode.js +55 -30
- package/examples/jsm/tsl/display/DenoiseNode.js +21 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +24 -6
- package/examples/jsm/tsl/display/DotScreenNode.js +11 -11
- package/examples/jsm/tsl/display/FSR1Node.js +8 -4
- package/examples/jsm/tsl/display/GTAONode.js +199 -86
- package/examples/jsm/tsl/display/GaussianBlurNode.js +65 -52
- package/examples/jsm/tsl/display/GodraysNode.js +5 -2
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +2 -2
- package/examples/jsm/tsl/display/LensflareNode.js +5 -2
- package/examples/jsm/tsl/display/OITPassNode.js +352 -0
- package/examples/jsm/tsl/display/OutlineNode.js +2 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +3 -2
- package/examples/jsm/tsl/display/RGBShiftNode.js +9 -9
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +7 -4
- package/examples/jsm/tsl/display/RetroPassNode.js +1 -1
- package/examples/jsm/tsl/display/SMAANode.js +22 -61
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -4
- package/examples/jsm/tsl/display/SSAONode.js +436 -0
- package/examples/jsm/tsl/display/SSGINode.js +5 -2
- package/examples/jsm/tsl/display/SSRNode.js +7 -2
- package/examples/jsm/tsl/display/SSSNode.js +5 -2
- package/examples/jsm/tsl/display/SharpenNode.js +5 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -3
- package/examples/jsm/tsl/display/TAAUNode.js +22 -125
- package/examples/jsm/tsl/display/TRAANode.js +16 -142
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +21 -15
- package/examples/jsm/tsl/display/depthAwareBlur.js +63 -0
- package/examples/jsm/tsl/display/hashBlur.js +3 -2
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +38 -27
- package/examples/jsm/tsl/lighting/LightProbeGridNode.js +136 -0
- package/examples/jsm/tsl/math/voronoiNoise.js +112 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +4 -6
- package/examples/jsm/tsl/utils/Raymarching.js +5 -5
- package/examples/jsm/tsl/utils/SoftParticles.js +60 -0
- package/examples/jsm/tsl/utils/TAAUtils.js +195 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +14 -14
- package/examples/jsm/utils/GaussianSplatUtils.js +229 -0
- package/examples/jsm/utils/WebGLTextureUtils.js +1 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +2 -16
- package/examples/jsm/webxr/XRControllerModelFactory.js +16 -4
- package/package.json +9 -16
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +73 -43
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +1 -0
- package/src/animation/AnimationClip.js +15 -2
- package/src/animation/AnimationObjectGroup.js +18 -6
- package/src/animation/AnimationUtils.js +26 -0
- package/src/animation/KeyframeTrack.js +37 -0
- package/src/constants.js +23 -1
- package/src/core/BufferAttribute.js +3 -2
- package/src/core/BufferGeometry.js +1 -1
- package/src/core/InterleavedBuffer.js +5 -1
- package/src/core/Object3D.js +40 -12
- package/src/core/Raycaster.js +4 -0
- package/src/core/RenderTarget.js +99 -9
- package/src/core/RenderTarget3D.js +12 -8
- package/src/extras/Controls.js +0 -8
- package/src/extras/PMREMGenerator.js +99 -205
- package/src/geometries/TorusGeometry.js +1 -1
- package/src/helpers/ArrowHelper.js +2 -0
- package/src/helpers/AxesHelper.js +2 -0
- package/src/helpers/Box3Helper.js +2 -0
- package/src/helpers/BoxHelper.js +2 -0
- package/src/helpers/CameraHelper.js +2 -0
- package/src/helpers/DirectionalLightHelper.js +2 -0
- package/src/helpers/GridHelper.js +2 -0
- package/src/helpers/HemisphereLightHelper.js +2 -0
- package/src/helpers/PlaneHelper.js +2 -0
- package/src/helpers/PointLightHelper.js +2 -0
- package/src/helpers/PolarGridHelper.js +2 -0
- package/src/helpers/SkeletonHelper.js +2 -0
- package/src/helpers/SpotLightHelper.js +2 -0
- package/src/lights/Light.js +0 -10
- package/src/lights/LightShadow.js +43 -12
- package/src/lights/SpotLightShadow.js +18 -0
- package/src/loaders/BufferGeometryLoader.js +5 -0
- package/src/loaders/ImageBitmapLoader.js +3 -1
- package/src/loaders/ObjectLoader.js +8 -5
- package/src/materials/Material.js +80 -57
- package/src/materials/MeshPhysicalMaterial.js +32 -0
- package/src/materials/nodes/Line2NodeMaterial.js +17 -8
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +42 -5
- package/src/materials/nodes/NodeMaterial.js +19 -13
- package/src/materials/nodes/PointsNodeMaterial.js +2 -1
- package/src/materials/nodes/manager/NodeMaterialObserver.js +282 -55
- package/src/math/Frustum.js +9 -0
- package/src/math/FrustumArray.js +1 -1
- package/src/math/MathUtils.js +5 -3
- package/src/math/Matrix4.js +2 -9
- package/src/math/Plane.js +30 -1
- package/src/math/Quaternion.js +0 -10
- package/src/math/Ray.js +95 -45
- package/src/math/Triangle.js +0 -2
- package/src/math/Vector3.js +2 -2
- package/src/math/Vector4.js +0 -4
- package/src/math/interpolants/BezierInterpolant.js +36 -23
- package/src/nodes/Nodes.js +2 -0
- package/src/nodes/TSL.js +11 -3
- package/src/nodes/accessors/Batch.js +85 -13
- package/src/nodes/accessors/BufferAttributeNode.js +1 -1
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/Instance.js +19 -18
- package/src/nodes/accessors/MaterialNode.js +9 -0
- package/src/nodes/accessors/ModelNode.js +85 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -70
- package/src/nodes/accessors/ReferenceElementNode.js +72 -0
- package/src/nodes/accessors/ReferenceNode.js +1 -70
- package/src/nodes/accessors/Skinning.js +124 -12
- package/src/nodes/accessors/StorageTextureNode.js +7 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +51 -21
- package/src/nodes/accessors/TextureSizeNode.js +4 -2
- package/src/nodes/accessors/UniformArrayNode.js +30 -5
- package/src/nodes/code/CodeNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +12 -2
- package/src/nodes/core/ArrayNode.js +2 -2
- package/src/nodes/core/ContextNode.js +57 -4
- package/src/nodes/core/IndexNode.js +69 -4
- package/src/nodes/core/InspectorNode.js +2 -2
- package/src/nodes/core/MRTNode.js +44 -2
- package/src/nodes/core/Node.js +6 -3
- package/src/nodes/core/NodeBuilder.js +65 -50
- package/src/nodes/core/NodeFrame.js +11 -3
- package/src/nodes/core/NodeUtils.js +88 -0
- package/src/nodes/core/PropertyNode.js +8 -0
- package/src/nodes/core/StackNode.js +0 -1
- package/src/nodes/core/StructNode.js +4 -3
- package/src/nodes/core/UniformGroupNode.js +3 -2
- package/src/nodes/core/UniformNode.js +26 -12
- package/src/nodes/core/VarNode.js +0 -1
- package/src/nodes/display/BumpMapNode.js +2 -2
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/PassNode.js +76 -15
- package/src/nodes/display/ScreenNode.js +22 -65
- package/src/nodes/fog/Fog.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_GGX.js +6 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +1 -1
- package/src/nodes/functions/BSDF/DFGLUT.js +2 -1
- package/src/nodes/functions/BSDF/LTC.js +1 -1
- package/src/nodes/functions/PhongLightingModel.js +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +83 -25
- package/src/nodes/functions/ToonLightingModel.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +3 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +64 -13
- package/src/nodes/gpgpu/BarrierNode.js +13 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +20 -17
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +165 -37
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +44 -6
- package/src/nodes/lighting/EnvironmentNode.js +40 -4
- package/src/nodes/lighting/LightsNode.js +20 -4
- package/src/nodes/lighting/ShadowBaseNode.js +158 -1
- package/src/nodes/lighting/ShadowFilterNode.js +2 -106
- package/src/nodes/lighting/ShadowNode.js +22 -91
- package/src/nodes/materialx/{lib/mx_hsv.js → MaterialXColor.js} +3 -6
- package/src/nodes/materialx/{lib/mx_transform_color.js → MaterialXColorTransform.js} +3 -6
- package/src/nodes/materialx/MaterialXCore.js +37 -0
- package/src/nodes/materialx/MaterialXNodes.js +64 -72
- package/src/nodes/materialx/{lib/mx_noise.js → MaterialXNoise.js} +426 -197
- package/src/nodes/math/BitcountNode.js +24 -4
- package/src/nodes/math/MathNode.js +4 -4
- package/src/nodes/math/MathUtils.js +15 -4
- package/src/nodes/math/OperatorNode.js +2 -2
- package/src/nodes/math/PackFloatNode.js +29 -1
- package/src/nodes/math/Packed4x8IntegerNode.js +433 -0
- package/src/nodes/math/UnpackFloatNode.js +30 -2
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +31 -74
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLCore.js +1 -31
- package/src/nodes/utils/EventNode.js +75 -0
- package/src/nodes/utils/LoopNode.js +54 -13
- package/src/nodes/utils/PostProcessingUtils.js +23 -2
- package/src/nodes/utils/RTTNode.js +97 -32
- package/src/nodes/utils/ReflectorNode.js +8 -4
- package/src/nodes/utils/RotateNode.js +85 -8
- package/src/nodes/utils/SpriteUtils.js +58 -23
- package/src/objects/BatchedMesh.js +6 -0
- package/src/objects/InstancedMesh.js +1 -1
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +12 -0
- package/src/objects/Mesh.js +12 -0
- package/src/objects/Points.js +12 -0
- package/src/objects/Sprite.js +12 -0
- package/src/renderers/WebGLRenderer.js +93 -27
- package/src/renderers/common/Animation.js +12 -2
- package/src/renderers/common/Backend.js +38 -10
- package/src/renderers/common/BindGroup.js +0 -1
- package/src/renderers/common/Bindings.js +50 -4
- package/src/renderers/common/BundleGroup.js +4 -0
- package/src/renderers/common/ClippingContext.js +11 -1
- package/src/renderers/common/Color4.js +9 -0
- package/src/renderers/common/Constants.js +0 -5
- package/src/renderers/common/DirectRenderPipeline.js +233 -0
- package/src/renderers/common/Geometries.js +24 -3
- package/src/renderers/common/Info.js +3 -3
- package/src/renderers/common/InspectorBase.js +37 -8
- package/src/renderers/common/Lighting.js +11 -4
- package/src/renderers/common/Pipelines.js +6 -4
- package/src/renderers/common/QuadMesh.js +16 -2
- package/src/renderers/common/RenderContext.js +8 -0
- package/src/renderers/common/RenderList.js +53 -19
- package/src/renderers/common/RenderLists.js +58 -11
- package/src/renderers/common/RenderObject.js +14 -0
- package/src/renderers/common/RenderObjects.js +14 -9
- package/src/renderers/common/RenderPipeline.js +52 -44
- package/src/renderers/common/Renderer.js +226 -55
- package/src/renderers/common/Storage3DTexture.js +16 -0
- package/src/renderers/common/Textures.js +3 -3
- package/src/renderers/common/XRManager.js +79 -72
- package/src/renderers/common/extras/PMREMGenerator.js +76 -144
- package/src/renderers/common/nodes/NodeManager.js +144 -6
- package/src/renderers/common/nodes/NodeStorageBuffer.js +3 -1
- package/src/renderers/common/nodes/NodeUniformBuffer.js +3 -1
- package/src/renderers/shaders/DFGLUTData.js +2 -1
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +4 -2
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +48 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +53 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +20 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +61 -57
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +9 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +15 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
- package/src/renderers/shaders/ShaderLib.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +16 -0
- package/src/renderers/webgl/WebGLAnimation.js +2 -2
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLLights.js +74 -4
- package/src/renderers/webgl/WebGLMaterials.js +6 -0
- package/src/renderers/webgl/WebGLOutput.js +36 -24
- package/src/renderers/webgl/WebGLProgram.js +3 -0
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLRenderLists.js +6 -10
- package/src/renderers/webgl/WebGLShadowMap.js +47 -44
- package/src/renderers/webgl/WebGLTextures.js +7 -7
- package/src/renderers/webgl-fallback/WebGLBackend.js +153 -45
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +83 -29
- package/src/renderers/webgl-fallback/utils/WebGLState.js +163 -17
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +32 -5
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +11 -4
- package/src/renderers/webgpu/WebGPUBackend.js +513 -145
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +99 -20
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -12
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +24 -14
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +80 -14
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +62 -7
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +9 -3
- package/src/renderers/webgpu/utils/WebGPUUtils.js +16 -4
- package/src/renderers/webxr/WebXRManager.js +25 -2
- package/src/scenes/Scene.js +3 -3
- package/src/textures/CompressedArrayTexture.js +16 -0
- package/src/textures/Data3DTexture.js +16 -0
- package/src/textures/DataArrayTexture.js +16 -0
- package/src/textures/DepthTexture.js +3 -3
- package/src/textures/Texture.js +3 -3
- package/src/textures/{Source.js → TextureSource.js} +39 -8
- package/build/three.core.min.js +0 -6
- package/build/three.module.min.js +0 -6
- package/build/three.tsl.min.js +0 -6
- package/build/three.webgpu.min.js +0 -6
- package/build/three.webgpu.nodes.min.js +0 -6
- package/examples/jsm/libs/ecsy.module.js +0 -1792
- package/examples/jsm/loaders/LottieLoader.js +0 -130
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +0 -52
|
@@ -157,10 +157,12 @@ class WebGPUTextureUtils {
|
|
|
157
157
|
const texture = binding.texture;
|
|
158
158
|
const textureNode = binding.textureNode;
|
|
159
159
|
|
|
160
|
+
const isComparison = texture.isDepthTexture === true && texture.compareFunction !== null && textureNode.isSampleCompare() && backend.hasCompatibility( Compatibility.TEXTURE_COMPARE );
|
|
161
|
+
|
|
160
162
|
const samplerKey = texture.minFilter + '-' + texture.magFilter + '-' +
|
|
161
163
|
texture.wrapS + '-' + texture.wrapT + '-' + ( texture.wrapR || '0' ) + '-' +
|
|
162
164
|
texture.anisotropy + '-' + ( texture.isDepthTexture === true ? 1 : 0 ) + '-' +
|
|
163
|
-
(
|
|
165
|
+
( isComparison ? texture.compareFunction : 0 );
|
|
164
166
|
|
|
165
167
|
let samplerData = this._samplerCache.get( samplerKey );
|
|
166
168
|
|
|
@@ -174,7 +176,7 @@ class WebGPUTextureUtils {
|
|
|
174
176
|
_samplerDescriptor.mipmapFilter = this._convertMipmapFilterMode( texture.minFilter );
|
|
175
177
|
|
|
176
178
|
// Depth textures without compare function must use non-filtering (nearest) sampling
|
|
177
|
-
if ( texture.isDepthTexture &&
|
|
179
|
+
if ( texture.isDepthTexture && isComparison === false ) {
|
|
178
180
|
|
|
179
181
|
_samplerDescriptor.magFilter = GPUFilterMode.Nearest;
|
|
180
182
|
_samplerDescriptor.minFilter = GPUFilterMode.Nearest;
|
|
@@ -190,7 +192,7 @@ class WebGPUTextureUtils {
|
|
|
190
192
|
|
|
191
193
|
}
|
|
192
194
|
|
|
193
|
-
if (
|
|
195
|
+
if ( isComparison ) {
|
|
194
196
|
|
|
195
197
|
_samplerDescriptor.compare = _compareToWebGPU[ texture.compareFunction ];
|
|
196
198
|
|
|
@@ -361,6 +363,20 @@ class WebGPUTextureUtils {
|
|
|
361
363
|
textureData.format = format;
|
|
362
364
|
|
|
363
365
|
const { samples, primarySamples, isMSAA } = backend.utils.getTextureSampleData( texture );
|
|
366
|
+
const renderTarget = texture.renderTarget;
|
|
367
|
+
|
|
368
|
+
// WebGPU multisampled 2D textures can only have a single array layer.
|
|
369
|
+
const useSeparateMSAATextures = samples > 1 && renderTarget !== null && depth > 1 && dimension === GPUTextureDimension.TwoD;
|
|
370
|
+
const supportsTransientAttachments = GPUTextureUsage.TRANSIENT_ATTACHMENT !== undefined;
|
|
371
|
+
// Layered rendering can resume after a framebuffer copy, so its attachments must support loading.
|
|
372
|
+
const useTransientAttachments = supportsTransientAttachments && useSeparateMSAATextures === false;
|
|
373
|
+
const useTransientDepthAttachment = texture.isDepthTexture === true &&
|
|
374
|
+
useTransientAttachments &&
|
|
375
|
+
renderTarget?.storeMultisampledDepthBuffer === false &&
|
|
376
|
+
( renderTarget.stencilBuffer === false || renderTarget.storeMultisampledStencilBuffer === false );
|
|
377
|
+
const useTransientColorAttachment = texture.isDepthTexture !== true &&
|
|
378
|
+
useTransientAttachments &&
|
|
379
|
+
renderTarget?.storeMultisampledColorBuffer === false;
|
|
364
380
|
|
|
365
381
|
let usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC;
|
|
366
382
|
|
|
@@ -376,6 +392,14 @@ class WebGPUTextureUtils {
|
|
|
376
392
|
|
|
377
393
|
}
|
|
378
394
|
|
|
395
|
+
// when the multisampled data are discarded, try to use a transient attachment if possible
|
|
396
|
+
|
|
397
|
+
if ( primarySamples > 1 && useTransientDepthAttachment ) {
|
|
398
|
+
|
|
399
|
+
usage = GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TRANSIENT_ATTACHMENT;
|
|
400
|
+
|
|
401
|
+
}
|
|
402
|
+
|
|
379
403
|
const textureDescriptorGPU = new GPUTextureDescriptor();
|
|
380
404
|
textureDescriptorGPU.label = texture.name;
|
|
381
405
|
textureDescriptorGPU.size.width = width;
|
|
@@ -416,7 +440,7 @@ class WebGPUTextureUtils {
|
|
|
416
440
|
|
|
417
441
|
}
|
|
418
442
|
|
|
419
|
-
if ( isMSAA ) {
|
|
443
|
+
if ( isMSAA || useSeparateMSAATextures ) {
|
|
420
444
|
|
|
421
445
|
const msaaTextureDescriptorGPU = Object.assign( {}, textureDescriptorGPU );
|
|
422
446
|
|
|
@@ -424,7 +448,32 @@ class WebGPUTextureUtils {
|
|
|
424
448
|
msaaTextureDescriptorGPU.sampleCount = samples;
|
|
425
449
|
msaaTextureDescriptorGPU.mipLevelCount = 1; // See https://www.w3.org/TR/webgpu/#texture-creation
|
|
426
450
|
|
|
427
|
-
|
|
451
|
+
// when the multisampled data are discarded, try to use a transient attachment if possible
|
|
452
|
+
|
|
453
|
+
if ( useTransientDepthAttachment || useTransientColorAttachment ) {
|
|
454
|
+
|
|
455
|
+
msaaTextureDescriptorGPU.usage = GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TRANSIENT_ATTACHMENT;
|
|
456
|
+
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
if ( useSeparateMSAATextures ) {
|
|
460
|
+
|
|
461
|
+
msaaTextureDescriptorGPU.size = Object.assign( {}, msaaTextureDescriptorGPU.size, { depthOrArrayLayers: 1 } );
|
|
462
|
+
|
|
463
|
+
textureData.msaaTextures = [];
|
|
464
|
+
|
|
465
|
+
for ( let i = 0; i < depth; i ++ ) {
|
|
466
|
+
|
|
467
|
+
msaaTextureDescriptorGPU.label = textureDescriptorGPU.label + '-msaa-' + i;
|
|
468
|
+
textureData.msaaTextures.push( backend.device.createTexture( msaaTextureDescriptorGPU ) );
|
|
469
|
+
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
} else {
|
|
473
|
+
|
|
474
|
+
textureData.msaaTexture = backend.device.createTexture( msaaTextureDescriptorGPU );
|
|
475
|
+
|
|
476
|
+
}
|
|
428
477
|
|
|
429
478
|
}
|
|
430
479
|
|
|
@@ -445,10 +494,16 @@ class WebGPUTextureUtils {
|
|
|
445
494
|
const backend = this.backend;
|
|
446
495
|
const textureData = backend.get( texture );
|
|
447
496
|
|
|
448
|
-
if ( textureData.texture !== undefined && isDefaultTexture === false && texture.isExternalTexture !== true ) textureData.texture.destroy();
|
|
497
|
+
if ( textureData.texture !== undefined && isDefaultTexture === false && texture.isExternalTexture !== true && textureData.externalTexture !== true ) textureData.texture.destroy();
|
|
449
498
|
|
|
450
499
|
if ( textureData.msaaTexture !== undefined ) textureData.msaaTexture.destroy();
|
|
451
500
|
|
|
501
|
+
if ( textureData.msaaTextures !== undefined ) {
|
|
502
|
+
|
|
503
|
+
for ( const msaaTexture of textureData.msaaTextures ) msaaTexture.destroy();
|
|
504
|
+
|
|
505
|
+
}
|
|
506
|
+
|
|
452
507
|
backend.delete( texture );
|
|
453
508
|
|
|
454
509
|
}
|
|
@@ -753,7 +808,7 @@ class WebGPUTextureUtils {
|
|
|
753
808
|
* @param {number} y - The y coordinate of the copy origin.
|
|
754
809
|
* @param {number} width - The width of the copy.
|
|
755
810
|
* @param {number} height - The height of the copy.
|
|
756
|
-
* @param {number} faceIndex - The face index.
|
|
811
|
+
* @param {number} faceIndex - The cube face, depth slice or array layer index.
|
|
757
812
|
* @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.
|
|
758
813
|
*/
|
|
759
814
|
async copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { error
|
|
1
|
+
import { error } from '../../../utils.js';
|
|
2
2
|
import TimestampQueryPool from '../../common/TimestampQueryPool.js';
|
|
3
3
|
import { submit } from './WebGPUUtils.js';
|
|
4
4
|
import GPUBufferDescriptor from '../descriptors/GPUBufferDescriptor.js';
|
|
@@ -70,8 +70,10 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
70
70
|
|
|
71
71
|
if ( this.currentQueryIndex + 2 > this.maxQueries ) {
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
this.resolveQueriesAsync();
|
|
74
|
+
|
|
75
|
+
this.currentQueryIndex = 0;
|
|
76
|
+
this.queryOffsets.clear();
|
|
75
77
|
|
|
76
78
|
}
|
|
77
79
|
|
|
@@ -213,6 +215,8 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
213
215
|
|
|
214
216
|
const frames = [];
|
|
215
217
|
|
|
218
|
+
this.timestamps.clear();
|
|
219
|
+
|
|
216
220
|
for ( const [ uid, offsetOrOffsets ] of currentOffsets ) {
|
|
217
221
|
|
|
218
222
|
const match = uid.match( /^(.*):f(\d+)$/ );
|
|
@@ -352,6 +356,8 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
352
356
|
}
|
|
353
357
|
|
|
354
358
|
this.queryOffsets.clear();
|
|
359
|
+
this.timestamps.clear();
|
|
360
|
+
this.frames = [];
|
|
355
361
|
// WITH_GENESYS
|
|
356
362
|
this.timestampRanges.clear();
|
|
357
363
|
// !WITH_GENESYS
|
|
@@ -111,10 +111,21 @@ class WebGPUUtils {
|
|
|
111
111
|
|
|
112
112
|
} else if ( texture.isDepthTexture && ! texture.renderTarget ) {
|
|
113
113
|
|
|
114
|
-
const
|
|
115
|
-
const renderTarget = renderer.getRenderTarget();
|
|
114
|
+
const textureData = this.backend.get( texture );
|
|
116
115
|
|
|
117
|
-
|
|
116
|
+
if ( textureData.texture !== undefined ) {
|
|
117
|
+
|
|
118
|
+
// use the effective sample count of the allocated texture
|
|
119
|
+
|
|
120
|
+
samples = textureData.texture.sampleCount;
|
|
121
|
+
|
|
122
|
+
} else {
|
|
123
|
+
|
|
124
|
+
// otherwise use the current samples of the renderer
|
|
125
|
+
|
|
126
|
+
samples = this.backend.renderer.currentSamples;
|
|
127
|
+
|
|
128
|
+
}
|
|
118
129
|
|
|
119
130
|
} else if ( texture.renderTarget ) {
|
|
120
131
|
|
|
@@ -125,7 +136,8 @@ class WebGPUUtils {
|
|
|
125
136
|
samples = this.getSampleCount( samples || 1 );
|
|
126
137
|
|
|
127
138
|
const isMSAA = samples > 1 && texture.renderTarget !== null && ( texture.isDepthTexture !== true && texture.isFramebufferTexture !== true );
|
|
128
|
-
const
|
|
139
|
+
const isMSAAArrayDepthTexture = samples > 1 && texture.renderTarget !== null && texture.isDepthTexture === true && texture.isArrayTexture === true;
|
|
140
|
+
const primarySamples = isMSAA || isMSAAArrayDepthTexture ? 1 : samples;
|
|
129
141
|
|
|
130
142
|
return { samples, primarySamples, isMSAA };
|
|
131
143
|
|
|
@@ -67,6 +67,7 @@ class WebXRManager extends EventDispatcher {
|
|
|
67
67
|
|
|
68
68
|
const currentSize = new Vector2();
|
|
69
69
|
let currentPixelRatio = null;
|
|
70
|
+
let currentCameraSettings = null;
|
|
70
71
|
|
|
71
72
|
//
|
|
72
73
|
|
|
@@ -262,6 +263,18 @@ class WebXRManager extends EventDispatcher {
|
|
|
262
263
|
renderer.setPixelRatio( currentPixelRatio );
|
|
263
264
|
renderer.setSize( currentSize.width, currentSize.height, false );
|
|
264
265
|
|
|
266
|
+
if ( currentCameraSettings !== null ) {
|
|
267
|
+
|
|
268
|
+
const camera = currentCameraSettings.camera;
|
|
269
|
+
|
|
270
|
+
camera.fov = currentCameraSettings.fov;
|
|
271
|
+
camera.zoom = currentCameraSettings.zoom;
|
|
272
|
+
camera.updateProjectionMatrix();
|
|
273
|
+
|
|
274
|
+
currentCameraSettings = null;
|
|
275
|
+
|
|
276
|
+
}
|
|
277
|
+
|
|
265
278
|
scope.dispatchEvent( { type: 'sessionend' } );
|
|
266
279
|
|
|
267
280
|
}
|
|
@@ -451,7 +464,9 @@ class WebXRManager extends EventDispatcher {
|
|
|
451
464
|
colorSpace: renderer.outputColorSpace,
|
|
452
465
|
stencilBuffer: attributes.stencil,
|
|
453
466
|
resolveDepthBuffer: ( glBaseLayer.ignoreDepthValues === false ),
|
|
454
|
-
resolveStencilBuffer: ( glBaseLayer.ignoreDepthValues === false )
|
|
467
|
+
resolveStencilBuffer: ( glBaseLayer.ignoreDepthValues === false ),
|
|
468
|
+
storeMultisampledDepthBuffer: ( glBaseLayer.ignoreDepthValues === false ),
|
|
469
|
+
storeMultisampledStencilBuffer: ( glBaseLayer.ignoreDepthValues === false )
|
|
455
470
|
|
|
456
471
|
}
|
|
457
472
|
);
|
|
@@ -496,7 +511,9 @@ class WebXRManager extends EventDispatcher {
|
|
|
496
511
|
colorSpace: renderer.outputColorSpace,
|
|
497
512
|
samples: attributes.antialias ? 4 : 0,
|
|
498
513
|
resolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false ),
|
|
499
|
-
resolveStencilBuffer: ( glProjLayer.ignoreDepthValues === false )
|
|
514
|
+
resolveStencilBuffer: ( glProjLayer.ignoreDepthValues === false ),
|
|
515
|
+
storeMultisampledDepthBuffer: ( glProjLayer.ignoreDepthValues === false ),
|
|
516
|
+
storeMultisampledStencilBuffer: ( glProjLayer.ignoreDepthValues === false )
|
|
500
517
|
} );
|
|
501
518
|
|
|
502
519
|
}
|
|
@@ -779,6 +796,12 @@ class WebXRManager extends EventDispatcher {
|
|
|
779
796
|
|
|
780
797
|
// update user camera and its children
|
|
781
798
|
|
|
799
|
+
if ( currentCameraSettings === null && camera.isPerspectiveCamera ) {
|
|
800
|
+
|
|
801
|
+
currentCameraSettings = { camera: camera, fov: camera.fov, zoom: camera.zoom };
|
|
802
|
+
|
|
803
|
+
}
|
|
804
|
+
|
|
782
805
|
updateUserCamera( camera, cameraXR, parent );
|
|
783
806
|
|
|
784
807
|
};
|
package/src/scenes/Scene.js
CHANGED
|
@@ -149,11 +149,11 @@ class Scene extends Object3D {
|
|
|
149
149
|
|
|
150
150
|
if ( this.fog !== null ) data.object.fog = this.fog.toJSON();
|
|
151
151
|
|
|
152
|
-
|
|
153
|
-
|
|
152
|
+
data.object.backgroundBlurriness = this.backgroundBlurriness;
|
|
153
|
+
data.object.backgroundIntensity = this.backgroundIntensity;
|
|
154
154
|
data.object.backgroundRotation = this.backgroundRotation.toArray();
|
|
155
155
|
|
|
156
|
-
|
|
156
|
+
data.object.environmentIntensity = this.environmentIntensity;
|
|
157
157
|
data.object.environmentRotation = this.environmentRotation.toArray();
|
|
158
158
|
|
|
159
159
|
return data;
|
|
@@ -60,6 +60,22 @@ class CompressedArrayTexture extends CompressedTexture {
|
|
|
60
60
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Copies the values of the given texture to this instance.
|
|
65
|
+
*
|
|
66
|
+
* @param {CompressedArrayTexture} source - The texture to copy.
|
|
67
|
+
* @return {CompressedArrayTexture} A reference to this instance.
|
|
68
|
+
*/
|
|
69
|
+
copy( source ) {
|
|
70
|
+
|
|
71
|
+
super.copy( source );
|
|
72
|
+
|
|
73
|
+
this.wrapR = source.wrapR;
|
|
74
|
+
|
|
75
|
+
return this;
|
|
76
|
+
|
|
77
|
+
}
|
|
78
|
+
|
|
63
79
|
/**
|
|
64
80
|
* Describes that a specific layer of the texture needs to be updated.
|
|
65
81
|
* Normally when {@link Texture#needsUpdate} is set to `true`, the
|
|
@@ -107,6 +107,22 @@ class Data3DTexture extends Texture {
|
|
|
107
107
|
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
+
/**
|
|
111
|
+
* Copies the values of the given texture to this instance.
|
|
112
|
+
*
|
|
113
|
+
* @param {Data3DTexture} source - The texture to copy.
|
|
114
|
+
* @return {Data3DTexture} A reference to this instance.
|
|
115
|
+
*/
|
|
116
|
+
copy( source ) {
|
|
117
|
+
|
|
118
|
+
super.copy( source );
|
|
119
|
+
|
|
120
|
+
this.wrapR = source.wrapR;
|
|
121
|
+
|
|
122
|
+
return this;
|
|
123
|
+
|
|
124
|
+
}
|
|
125
|
+
|
|
110
126
|
}
|
|
111
127
|
|
|
112
128
|
export { Data3DTexture };
|
|
@@ -105,6 +105,22 @@ class DataArrayTexture extends Texture {
|
|
|
105
105
|
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
+
/**
|
|
109
|
+
* Copies the values of the given texture to this instance.
|
|
110
|
+
*
|
|
111
|
+
* @param {DataArrayTexture} source - The texture to copy.
|
|
112
|
+
* @return {DataArrayTexture} A reference to this instance.
|
|
113
|
+
*/
|
|
114
|
+
copy( source ) {
|
|
115
|
+
|
|
116
|
+
super.copy( source );
|
|
117
|
+
|
|
118
|
+
this.wrapR = source.wrapR;
|
|
119
|
+
|
|
120
|
+
return this;
|
|
121
|
+
|
|
122
|
+
}
|
|
123
|
+
|
|
108
124
|
/**
|
|
109
125
|
* Describes that a specific layer of the texture needs to be updated.
|
|
110
126
|
* Normally when {@link Texture#needsUpdate} is set to `true`, the
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TextureSource } from './TextureSource.js';
|
|
2
2
|
import { Texture } from './Texture.js';
|
|
3
3
|
import { NearestFilter, UnsignedIntType, DepthFormat, DepthStencilFormat } from '../constants.js';
|
|
4
4
|
|
|
@@ -82,7 +82,7 @@ class DepthTexture extends Texture {
|
|
|
82
82
|
|
|
83
83
|
super.copy( source );
|
|
84
84
|
|
|
85
|
-
this.source = new
|
|
85
|
+
this.source = new TextureSource( Object.assign( {}, source.image ) ); // see #30540
|
|
86
86
|
this.compareFunction = source.compareFunction;
|
|
87
87
|
|
|
88
88
|
return this;
|
|
@@ -93,7 +93,7 @@ class DepthTexture extends Texture {
|
|
|
93
93
|
|
|
94
94
|
const data = super.toJSON( meta );
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
data.compareFunction = this.compareFunction;
|
|
97
97
|
|
|
98
98
|
return data;
|
|
99
99
|
|
package/src/textures/Texture.js
CHANGED
|
@@ -14,7 +14,7 @@ import { generateUUID } from '../math/MathUtils.js';
|
|
|
14
14
|
import { Vector2 } from '../math/Vector2.js';
|
|
15
15
|
import { Vector3 } from '../math/Vector3.js';
|
|
16
16
|
import { Matrix3 } from '../math/Matrix3.js';
|
|
17
|
-
import {
|
|
17
|
+
import { TextureSource } from './TextureSource.js';
|
|
18
18
|
import { warn } from '../utils.js';
|
|
19
19
|
|
|
20
20
|
let _textureId = 0;
|
|
@@ -88,9 +88,9 @@ class Texture extends EventDispatcher {
|
|
|
88
88
|
* where multiple textures render the same data but with different texture
|
|
89
89
|
* transformations.
|
|
90
90
|
*
|
|
91
|
-
* @type {
|
|
91
|
+
* @type {TextureSource}
|
|
92
92
|
*/
|
|
93
|
-
this.source = new
|
|
93
|
+
this.source = new TextureSource( image );
|
|
94
94
|
|
|
95
95
|
/**
|
|
96
96
|
* An array holding user-defined mipmaps.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ImageUtils } from '../extras/ImageUtils.js';
|
|
2
2
|
import { generateUUID } from '../math/MathUtils.js';
|
|
3
|
-
import { warn } from '../utils.js';
|
|
3
|
+
import { warn, warnOnce } from '../utils.js';
|
|
4
4
|
|
|
5
5
|
let _sourceId = 0;
|
|
6
6
|
|
|
@@ -10,10 +10,10 @@ let _sourceId = 0;
|
|
|
10
10
|
* The main purpose of this class is to decouple the data definition from the texture
|
|
11
11
|
* definition so the same data can be used with multiple texture instances.
|
|
12
12
|
*/
|
|
13
|
-
class
|
|
13
|
+
class TextureSource {
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
|
-
* Constructs a new
|
|
16
|
+
* Constructs a new texture source.
|
|
17
17
|
*
|
|
18
18
|
* @param {any} [data=null] - The data definition of a texture.
|
|
19
19
|
*/
|
|
@@ -26,12 +26,12 @@ class Source {
|
|
|
26
26
|
* @readonly
|
|
27
27
|
* @default true
|
|
28
28
|
*/
|
|
29
|
-
this.
|
|
29
|
+
this.isTextureSource = true;
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* The ID of the source.
|
|
33
33
|
*
|
|
34
|
-
* @name
|
|
34
|
+
* @name TextureSource#id
|
|
35
35
|
* @type {number}
|
|
36
36
|
* @readonly
|
|
37
37
|
*/
|
|
@@ -53,7 +53,7 @@ class Source {
|
|
|
53
53
|
this.data = data;
|
|
54
54
|
|
|
55
55
|
/**
|
|
56
|
-
* This property is only relevant when {@link
|
|
56
|
+
* This property is only relevant when {@link TextureSource#needsUpdate} is set to `true` and
|
|
57
57
|
* provides more control on how texture data should be processed. When `dataReady` is set
|
|
58
58
|
* to `false`, the engine performs the memory allocation (if necessary) but does not transfer
|
|
59
59
|
* the data into the GPU memory.
|
|
@@ -64,7 +64,7 @@ class Source {
|
|
|
64
64
|
this.dataReady = true;
|
|
65
65
|
|
|
66
66
|
/**
|
|
67
|
-
* This starts at `0` and counts how many times {@link
|
|
67
|
+
* This starts at `0` and counts how many times {@link TextureSource#needsUpdate} is set to `true`.
|
|
68
68
|
*
|
|
69
69
|
* @type {number}
|
|
70
70
|
* @readonly
|
|
@@ -227,4 +227,35 @@ function serializeImage( image ) {
|
|
|
227
227
|
|
|
228
228
|
}
|
|
229
229
|
|
|
230
|
-
|
|
230
|
+
/**
|
|
231
|
+
* @deprecated since r186. Use {@link TextureSource} instead. `Source` has been renamed to `TextureSource`.
|
|
232
|
+
*/
|
|
233
|
+
class Source extends TextureSource {
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Constructs a new texture source.
|
|
237
|
+
*
|
|
238
|
+
* @param {any} [data=null] - The data definition of a texture.
|
|
239
|
+
* @deprecated since r186. Use {@link TextureSource} instead.
|
|
240
|
+
*/
|
|
241
|
+
constructor( data = null ) {
|
|
242
|
+
|
|
243
|
+
warnOnce( 'Source: "Source" has been renamed to "TextureSource". Please update your code to use "THREE.TextureSource" instead.' ); // @deprecated, r186
|
|
244
|
+
|
|
245
|
+
super( data );
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* This flag can be used for type testing.
|
|
249
|
+
*
|
|
250
|
+
* @deprecated since r186. Use {@link TextureSource#isTextureSource} instead.
|
|
251
|
+
* @type {boolean}
|
|
252
|
+
* @readonly
|
|
253
|
+
* @default true
|
|
254
|
+
*/
|
|
255
|
+
this.isSource = true;
|
|
256
|
+
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
export { Source, TextureSource };
|