@plastic-software/three 0.179.0 → 0.181.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +1108 -591
- package/build/three.core.js +616 -345
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +488 -250
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +37 -6
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6576 -2152
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6575 -2151
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +8 -8
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +1 -1
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +9 -2
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +3 -3
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +1 -1
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +1 -1
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
- package/examples/jsm/transpiler/TSLEncoder.js +9 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +24 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +7 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +49 -35
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +124 -7
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +4 -2
- package/src/Three.TSL.js +36 -5
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +2 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +7 -6
- package/src/animation/PropertyBinding.js +12 -11
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +11 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +3 -2
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +268 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +8 -6
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +3 -2
- package/src/loaders/ImageBitmapLoader.js +5 -4
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +3 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/NodeMaterial.js +62 -22
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +7 -7
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +68 -66
- package/src/math/Spherical.js +1 -1
- package/src/nodes/Nodes.js +4 -1
- package/src/nodes/TSL.js +4 -1
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +133 -7
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +5 -4
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +18 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +3 -2
- package/src/nodes/accessors/SceneNode.js +2 -1
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +22 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureNode.js +130 -44
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +1 -0
- package/src/nodes/core/AssignNode.js +4 -3
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +29 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
- package/src/nodes/core/Node.js +152 -31
- package/src/nodes/core/NodeBuilder.js +183 -35
- package/src/nodes/core/NodeFrame.js +21 -21
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +17 -91
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +43 -16
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformNode.js +18 -10
- package/src/nodes/core/VarNode.js +70 -33
- package/src/nodes/core/VaryingNode.js +3 -2
- package/src/nodes/display/BlendModes.js +5 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +2 -1
- package/src/nodes/display/PassNode.js +52 -11
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -14
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +42 -12
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +3 -2
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +17 -5
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
- package/src/nodes/lighting/EnvironmentNode.js +6 -6
- package/src/nodes/lighting/LightsNode.js +3 -4
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ShadowFilterNode.js +2 -0
- package/src/nodes/lighting/ShadowNode.js +75 -8
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +24 -7
- package/src/nodes/math/MathNode.js +25 -19
- package/src/nodes/math/OperatorNode.js +7 -5
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +5 -2
- package/src/nodes/tsl/TSLCore.js +460 -159
- package/src/nodes/utils/DebugNode.js +2 -1
- package/src/nodes/utils/EventNode.js +36 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +13 -3
- package/src/nodes/utils/ReflectorNode.js +58 -7
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/objects/BatchedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +48 -41
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +2 -1
- package/src/renderers/common/Bindings.js +58 -2
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +6 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +16 -2
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +473 -245
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +50 -12
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +121 -45
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +42 -22
- package/src/renderers/common/extras/PMREMGenerator.js +160 -65
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -15
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLCapabilities.js +2 -1
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +15 -14
- package/src/renderers/webgl/WebGLPrograms.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +15 -14
- package/src/renderers/webgl/WebGLTextures.js +19 -14
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +153 -123
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
- package/src/renderers/webxr/WebXRManager.js +42 -26
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/Source.js +3 -2
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, FloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, NoColorSpace, LinearTransfer, SRGBTransfer } from '../../../constants.js';
|
|
2
2
|
import { ColorManagement } from '../../../math/ColorManagement.js';
|
|
3
|
+
import { getByteLength } from '../../../extras/TextureUtils.js';
|
|
4
|
+
import { warn } from '../../../utils.js';
|
|
3
5
|
|
|
4
6
|
let initialized = false, wrappingToGL, filterToGL, compareToGL;
|
|
5
7
|
|
|
@@ -47,6 +49,24 @@ class WebGLTextureUtils {
|
|
|
47
49
|
*/
|
|
48
50
|
this.defaultTextures = {};
|
|
49
51
|
|
|
52
|
+
/**
|
|
53
|
+
* A scratch framebuffer used for attaching the source texture in
|
|
54
|
+
* {@link copyTextureToTexture}.
|
|
55
|
+
*
|
|
56
|
+
* @private
|
|
57
|
+
* @type {?WebGLFramebuffer}
|
|
58
|
+
*/
|
|
59
|
+
this._srcFramebuffer = null;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* A scratch framebuffer used for attaching the destination texture in
|
|
63
|
+
* {@link copyTextureToTexture}.
|
|
64
|
+
*
|
|
65
|
+
* @private
|
|
66
|
+
* @type {?WebGLFramebuffer}
|
|
67
|
+
*/
|
|
68
|
+
this._dstFramebuffer = null;
|
|
69
|
+
|
|
50
70
|
if ( initialized === false ) {
|
|
51
71
|
|
|
52
72
|
this._init();
|
|
@@ -150,7 +170,7 @@ class WebGLTextureUtils {
|
|
|
150
170
|
|
|
151
171
|
if ( gl[ internalFormatName ] !== undefined ) return gl[ internalFormatName ];
|
|
152
172
|
|
|
153
|
-
|
|
173
|
+
warn( 'WebGLBackend: Attempt to use non-existing WebGL internal format \'' + internalFormatName + '\'' );
|
|
154
174
|
|
|
155
175
|
}
|
|
156
176
|
|
|
@@ -221,6 +241,7 @@ class WebGLTextureUtils {
|
|
|
221
241
|
if ( glType === gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = gl.RGB5_A1;
|
|
222
242
|
if ( glType === gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = gl.RGB4;
|
|
223
243
|
if ( glType === gl.UNSIGNED_INT_5_9_9_9_REV ) internalFormat = gl.RGB9_E5;
|
|
244
|
+
if ( glType === gl.UNSIGNED_INT_10F_11F_11F_REV ) internalFormat = gl.R11F_G11F_B10F;
|
|
224
245
|
|
|
225
246
|
}
|
|
226
247
|
|
|
@@ -388,8 +409,7 @@ class WebGLTextureUtils {
|
|
|
388
409
|
|
|
389
410
|
backend.set( texture, {
|
|
390
411
|
textureGPU,
|
|
391
|
-
glTextureType
|
|
392
|
-
isDefault: true
|
|
412
|
+
glTextureType
|
|
393
413
|
} );
|
|
394
414
|
|
|
395
415
|
}
|
|
@@ -478,7 +498,7 @@ class WebGLTextureUtils {
|
|
|
478
498
|
|
|
479
499
|
// gl.readPixels( 0, 0, width, height, altFormat, altType, readout );
|
|
480
500
|
// gl.bindFramebuffer( gl.FRAMEBUFFER, null );
|
|
481
|
-
//
|
|
501
|
+
// log( readout );
|
|
482
502
|
|
|
483
503
|
}
|
|
484
504
|
|
|
@@ -521,7 +541,7 @@ class WebGLTextureUtils {
|
|
|
521
541
|
|
|
522
542
|
} else {
|
|
523
543
|
|
|
524
|
-
|
|
544
|
+
warn( 'WebGLBackend: Attempt to load unsupported compressed texture format in .uploadTexture()' );
|
|
525
545
|
|
|
526
546
|
}
|
|
527
547
|
|
|
@@ -539,7 +559,7 @@ class WebGLTextureUtils {
|
|
|
539
559
|
|
|
540
560
|
} else {
|
|
541
561
|
|
|
542
|
-
|
|
562
|
+
warn( 'WebGLBackend: Unsupported compressed texture format' );
|
|
543
563
|
|
|
544
564
|
}
|
|
545
565
|
|
|
@@ -551,6 +571,7 @@ class WebGLTextureUtils {
|
|
|
551
571
|
} else if ( texture.isCubeTexture ) {
|
|
552
572
|
|
|
553
573
|
const images = options.images;
|
|
574
|
+
const mipmaps = texture.mipmaps;
|
|
554
575
|
|
|
555
576
|
for ( let i = 0; i < 6; i ++ ) {
|
|
556
577
|
|
|
@@ -558,13 +579,42 @@ class WebGLTextureUtils {
|
|
|
558
579
|
|
|
559
580
|
gl.texSubImage2D( gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, width, height, glFormat, glType, image );
|
|
560
581
|
|
|
582
|
+
for ( let j = 0; j < mipmaps.length; j ++ ) {
|
|
583
|
+
|
|
584
|
+
const mipmap = mipmaps[ j ];
|
|
585
|
+
const image = getImage( mipmap.images[ i ] );
|
|
586
|
+
|
|
587
|
+
gl.texSubImage2D( gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, image.width, image.height, glFormat, glType, image );
|
|
588
|
+
|
|
589
|
+
}
|
|
590
|
+
|
|
561
591
|
}
|
|
562
592
|
|
|
563
593
|
} else if ( texture.isDataArrayTexture || texture.isArrayTexture ) {
|
|
564
594
|
|
|
565
595
|
const image = options.image;
|
|
566
596
|
|
|
567
|
-
|
|
597
|
+
if ( texture.layerUpdates.size > 0 ) {
|
|
598
|
+
|
|
599
|
+
const layerByteLength = getByteLength( image.width, image.height, texture.format, texture.type );
|
|
600
|
+
|
|
601
|
+
for ( const layerIndex of texture.layerUpdates ) {
|
|
602
|
+
|
|
603
|
+
const layerData = image.data.subarray(
|
|
604
|
+
layerIndex * layerByteLength / image.data.BYTES_PER_ELEMENT,
|
|
605
|
+
( layerIndex + 1 ) * layerByteLength / image.data.BYTES_PER_ELEMENT
|
|
606
|
+
);
|
|
607
|
+
gl.texSubImage3D( gl.TEXTURE_2D_ARRAY, 0, 0, 0, layerIndex, image.width, image.height, 1, glFormat, glType, layerData );
|
|
608
|
+
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
texture.clearLayerUpdates();
|
|
612
|
+
|
|
613
|
+
} else {
|
|
614
|
+
|
|
615
|
+
gl.texSubImage3D( gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
|
|
616
|
+
|
|
617
|
+
}
|
|
568
618
|
|
|
569
619
|
} else if ( texture.isData3DTexture ) {
|
|
570
620
|
|
|
@@ -581,9 +631,26 @@ class WebGLTextureUtils {
|
|
|
581
631
|
|
|
582
632
|
} else {
|
|
583
633
|
|
|
584
|
-
const
|
|
634
|
+
const mipmaps = texture.mipmaps;
|
|
635
|
+
|
|
636
|
+
if ( mipmaps.length > 0 ) {
|
|
637
|
+
|
|
638
|
+
for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
|
|
639
|
+
|
|
640
|
+
const mipmap = mipmaps[ i ];
|
|
641
|
+
|
|
642
|
+
const image = getImage( mipmap );
|
|
643
|
+
gl.texSubImage2D( glTextureType, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, image );
|
|
644
|
+
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
} else {
|
|
648
|
+
|
|
649
|
+
const image = getImage( options.image );
|
|
650
|
+
gl.texSubImage2D( glTextureType, 0, 0, 0, width, height, glFormat, glType, image );
|
|
651
|
+
|
|
652
|
+
}
|
|
585
653
|
|
|
586
|
-
gl.texSubImage2D( glTextureType, 0, 0, 0, width, height, glFormat, glType, image );
|
|
587
654
|
|
|
588
655
|
}
|
|
589
656
|
|
|
@@ -673,14 +740,20 @@ class WebGLTextureUtils {
|
|
|
673
740
|
* Destroys the GPU data for the given texture object.
|
|
674
741
|
*
|
|
675
742
|
* @param {Texture} texture - The texture.
|
|
743
|
+
* @param {boolean} [isDefaultTexture=false] - Whether the texture uses a default GPU texture or not.
|
|
676
744
|
*/
|
|
677
|
-
destroyTexture( texture ) {
|
|
745
|
+
destroyTexture( texture, isDefaultTexture = false ) {
|
|
678
746
|
|
|
679
747
|
const { gl, backend } = this;
|
|
680
748
|
const { textureGPU, renderTarget } = backend.get( texture );
|
|
681
749
|
|
|
682
750
|
this.deallocateRenderBuffers( renderTarget );
|
|
683
|
-
|
|
751
|
+
|
|
752
|
+
if ( isDefaultTexture === false ) {
|
|
753
|
+
|
|
754
|
+
gl.deleteTexture( textureGPU );
|
|
755
|
+
|
|
756
|
+
}
|
|
684
757
|
|
|
685
758
|
backend.delete( texture );
|
|
686
759
|
|
|
@@ -759,7 +832,6 @@ class WebGLTextureUtils {
|
|
|
759
832
|
|
|
760
833
|
}
|
|
761
834
|
|
|
762
|
-
|
|
763
835
|
gl.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
|
|
764
836
|
gl.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
|
|
765
837
|
gl.pixelStorei( gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
|
|
@@ -778,8 +850,10 @@ class WebGLTextureUtils {
|
|
|
778
850
|
gl.pixelStorei( gl.UNPACK_SKIP_IMAGES, minZ );
|
|
779
851
|
|
|
780
852
|
// set up the src texture
|
|
853
|
+
const isSrc3D = srcTexture.isDataArrayTexture || srcTexture.isData3DTexture || dstTexture.isArrayTexture;
|
|
781
854
|
const isDst3D = dstTexture.isDataArrayTexture || dstTexture.isData3DTexture || dstTexture.isArrayTexture;
|
|
782
|
-
|
|
855
|
+
|
|
856
|
+
if ( srcTexture.isDepthTexture ) {
|
|
783
857
|
|
|
784
858
|
const srcTextureData = backend.get( srcTexture );
|
|
785
859
|
const dstTextureData = backend.get( dstTexture );
|
|
@@ -793,15 +867,79 @@ class WebGLTextureUtils {
|
|
|
793
867
|
state.bindFramebuffer( gl.READ_FRAMEBUFFER, srcFramebuffer );
|
|
794
868
|
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, dstFramebuffer );
|
|
795
869
|
|
|
796
|
-
let
|
|
870
|
+
for ( let i = 0; i < depth; i ++ ) {
|
|
797
871
|
|
|
798
|
-
|
|
872
|
+
// if the source or destination are a 3d target then a layer needs to be bound
|
|
873
|
+
if ( isSrc3D ) {
|
|
799
874
|
|
|
800
|
-
|
|
875
|
+
gl.framebufferTextureLayer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, srcTextureData.textureGPU, srcLevel, minZ + i );
|
|
876
|
+
gl.framebufferTextureLayer( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, dstTextureGPU, dstLevel, dstZ + i );
|
|
877
|
+
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, gl.DEPTH_BUFFER_BIT, gl.NEAREST );
|
|
881
|
+
|
|
882
|
+
}
|
|
801
883
|
|
|
802
884
|
state.bindFramebuffer( gl.READ_FRAMEBUFFER, null );
|
|
803
885
|
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );
|
|
804
886
|
|
|
887
|
+
} else if ( srcLevel !== 0 || srcTexture.isRenderTargetTexture || backend.has( srcTexture ) ) {
|
|
888
|
+
|
|
889
|
+
// get the appropriate frame buffers
|
|
890
|
+
const srcTextureData = backend.get( srcTexture );
|
|
891
|
+
|
|
892
|
+
if ( this._srcFramebuffer === null ) this._srcFramebuffer = gl.createFramebuffer();
|
|
893
|
+
if ( this._dstFramebuffer === null ) this._dstFramebuffer = gl.createFramebuffer();
|
|
894
|
+
|
|
895
|
+
// bind the frame buffer targets
|
|
896
|
+
state.bindFramebuffer( gl.READ_FRAMEBUFFER, this._srcFramebuffer );
|
|
897
|
+
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, this._dstFramebuffer );
|
|
898
|
+
|
|
899
|
+
for ( let i = 0; i < depth; i ++ ) {
|
|
900
|
+
|
|
901
|
+
// assign the correct layers and mip maps to the frame buffers
|
|
902
|
+
if ( isSrc3D ) {
|
|
903
|
+
|
|
904
|
+
gl.framebufferTextureLayer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, srcTextureData.textureGPU, srcLevel, minZ + i );
|
|
905
|
+
|
|
906
|
+
} else {
|
|
907
|
+
|
|
908
|
+
gl.framebufferTexture2D( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, srcTextureData.textureGPU, srcLevel );
|
|
909
|
+
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
if ( isDst3D ) {
|
|
913
|
+
|
|
914
|
+
gl.framebufferTextureLayer( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, dstTextureGPU, dstLevel, dstZ + i );
|
|
915
|
+
|
|
916
|
+
} else {
|
|
917
|
+
|
|
918
|
+
gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, dstTextureGPU, dstLevel );
|
|
919
|
+
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
// copy the data using the fastest function that can achieve the copy
|
|
923
|
+
if ( srcLevel !== 0 ) {
|
|
924
|
+
|
|
925
|
+
gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, gl.COLOR_BUFFER_BIT, gl.NEAREST );
|
|
926
|
+
|
|
927
|
+
} else if ( isDst3D ) {
|
|
928
|
+
|
|
929
|
+
gl.copyTexSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ + i, minX, minY, width, height );
|
|
930
|
+
|
|
931
|
+
} else {
|
|
932
|
+
|
|
933
|
+
gl.copyTexSubImage2D( glTextureType, dstLevel, dstX, dstY, minX, minY, width, height );
|
|
934
|
+
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
// unbind read, draw buffers
|
|
940
|
+
state.bindFramebuffer( gl.READ_FRAMEBUFFER, null );
|
|
941
|
+
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );
|
|
942
|
+
|
|
805
943
|
} else {
|
|
806
944
|
|
|
807
945
|
if ( isDst3D ) {
|
|
@@ -826,15 +964,15 @@ class WebGLTextureUtils {
|
|
|
826
964
|
// copy data into the 2d texture
|
|
827
965
|
if ( srcTexture.isDataTexture ) {
|
|
828
966
|
|
|
829
|
-
gl.texSubImage2D(
|
|
967
|
+
gl.texSubImage2D( gl.TEXTURE_2D, dstLevel, dstX, dstY, width, height, glFormat, glType, image.data );
|
|
830
968
|
|
|
831
969
|
} else if ( srcTexture.isCompressedTexture ) {
|
|
832
970
|
|
|
833
|
-
gl.compressedTexSubImage2D(
|
|
971
|
+
gl.compressedTexSubImage2D( gl.TEXTURE_2D, dstLevel, dstX, dstY, image.width, image.height, glFormat, image.data );
|
|
834
972
|
|
|
835
973
|
} else {
|
|
836
974
|
|
|
837
|
-
gl.texSubImage2D(
|
|
975
|
+
gl.texSubImage2D( gl.TEXTURE_2D, dstLevel, dstX, dstY, width, height, glFormat, glType, image );
|
|
838
976
|
|
|
839
977
|
}
|
|
840
978
|
|
|
@@ -1135,6 +1273,18 @@ class WebGLTextureUtils {
|
|
|
1135
1273
|
|
|
1136
1274
|
}
|
|
1137
1275
|
|
|
1276
|
+
/**
|
|
1277
|
+
* Frees the internal resources.
|
|
1278
|
+
*/
|
|
1279
|
+
dispose() {
|
|
1280
|
+
|
|
1281
|
+
const { gl } = this;
|
|
1282
|
+
|
|
1283
|
+
if ( this._srcFramebuffer !== null ) gl.deleteFramebuffer( this._srcFramebuffer );
|
|
1284
|
+
if ( this._dstFramebuffer !== null ) gl.deleteFramebuffer( this._dstFramebuffer );
|
|
1285
|
+
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1138
1288
|
}
|
|
1139
1289
|
|
|
1140
1290
|
function getImage( source ) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { warnOnce } from '../../../utils.js';
|
|
1
|
+
import { warnOnce, warn } from '../../../utils.js';
|
|
2
2
|
import TimestampQueryPool from '../../common/TimestampQueryPool.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -29,7 +29,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
29
29
|
|
|
30
30
|
if ( ! this.ext ) {
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
warn( 'EXT_disjoint_timer_query not supported; timestamps will be disabled.' );
|
|
33
33
|
this.trackTimestamp = false;
|
|
34
34
|
return;
|
|
35
35
|
|
|
@@ -51,10 +51,10 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
51
51
|
/**
|
|
52
52
|
* Allocates a pair of queries for a given render context.
|
|
53
53
|
*
|
|
54
|
-
* @param {
|
|
54
|
+
* @param {string} uid - A unique identifier for the render context.
|
|
55
55
|
* @returns {?number} The base offset for the allocated queries, or null if allocation failed.
|
|
56
56
|
*/
|
|
57
|
-
allocateQueriesForContext(
|
|
57
|
+
allocateQueriesForContext( uid ) {
|
|
58
58
|
|
|
59
59
|
if ( ! this.trackTimestamp ) return null;
|
|
60
60
|
|
|
@@ -71,7 +71,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
71
71
|
|
|
72
72
|
// Initialize query states
|
|
73
73
|
this.queryStates.set( baseOffset, 'inactive' );
|
|
74
|
-
this.queryOffsets.set(
|
|
74
|
+
this.queryOffsets.set( uid, baseOffset );
|
|
75
75
|
|
|
76
76
|
return baseOffset;
|
|
77
77
|
|
|
@@ -80,9 +80,9 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
80
80
|
/**
|
|
81
81
|
* Begins a timestamp query for the specified render context.
|
|
82
82
|
*
|
|
83
|
-
* @param {
|
|
83
|
+
* @param {string} uid - A unique identifier for the render context.
|
|
84
84
|
*/
|
|
85
|
-
beginQuery(
|
|
85
|
+
beginQuery( uid ) {
|
|
86
86
|
|
|
87
87
|
if ( ! this.trackTimestamp || this.isDisposed ) {
|
|
88
88
|
|
|
@@ -90,7 +90,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
90
90
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
const baseOffset = this.queryOffsets.get(
|
|
93
|
+
const baseOffset = this.queryOffsets.get( uid );
|
|
94
94
|
if ( baseOffset == null ) {
|
|
95
95
|
|
|
96
96
|
return;
|
|
@@ -124,7 +124,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
124
124
|
|
|
125
125
|
} catch ( error ) {
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
error( 'Error in beginQuery:', error );
|
|
128
128
|
this.activeQuery = null;
|
|
129
129
|
this.queryStates.set( baseOffset, 'inactive' );
|
|
130
130
|
|
|
@@ -135,10 +135,9 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
135
135
|
/**
|
|
136
136
|
* Ends the active timestamp query for the specified render context.
|
|
137
137
|
*
|
|
138
|
-
* @param {
|
|
139
|
-
* @param {string} renderContext.id - Unique identifier for the render context.
|
|
138
|
+
* @param {string} uid - A unique identifier for the render context.
|
|
140
139
|
*/
|
|
141
|
-
endQuery(
|
|
140
|
+
endQuery( uid ) {
|
|
142
141
|
|
|
143
142
|
if ( ! this.trackTimestamp || this.isDisposed ) {
|
|
144
143
|
|
|
@@ -146,7 +145,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
146
145
|
|
|
147
146
|
}
|
|
148
147
|
|
|
149
|
-
const baseOffset = this.queryOffsets.get(
|
|
148
|
+
const baseOffset = this.queryOffsets.get( uid );
|
|
150
149
|
if ( baseOffset == null ) {
|
|
151
150
|
|
|
152
151
|
return;
|
|
@@ -168,7 +167,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
168
167
|
|
|
169
168
|
} catch ( error ) {
|
|
170
169
|
|
|
171
|
-
|
|
170
|
+
error( 'Error in endQuery:', error );
|
|
172
171
|
// Reset state on error
|
|
173
172
|
this.queryStates.set( baseOffset, 'inactive' );
|
|
174
173
|
this.activeQuery = null;
|
|
@@ -196,30 +195,60 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
196
195
|
try {
|
|
197
196
|
|
|
198
197
|
// Wait for all ended queries to complete
|
|
199
|
-
const resolvePromises =
|
|
198
|
+
const resolvePromises = new Map();
|
|
200
199
|
|
|
201
|
-
for ( const [
|
|
200
|
+
for ( const [ uid, baseOffset ] of this.queryOffsets ) {
|
|
201
|
+
|
|
202
|
+
const state = this.queryStates.get( baseOffset );
|
|
202
203
|
|
|
203
204
|
if ( state === 'ended' ) {
|
|
204
205
|
|
|
205
206
|
const query = this.queries[ baseOffset ];
|
|
206
|
-
resolvePromises.
|
|
207
|
+
resolvePromises.set( uid, this.resolveQuery( query ) );
|
|
207
208
|
|
|
208
209
|
}
|
|
209
210
|
|
|
210
211
|
}
|
|
211
212
|
|
|
212
|
-
if ( resolvePromises.
|
|
213
|
+
if ( resolvePromises.size === 0 ) {
|
|
213
214
|
|
|
214
215
|
return this.lastValue;
|
|
215
216
|
|
|
216
217
|
}
|
|
217
218
|
|
|
218
|
-
|
|
219
|
-
|
|
219
|
+
//
|
|
220
|
+
|
|
221
|
+
const framesDuration = {};
|
|
222
|
+
|
|
223
|
+
const frames = [];
|
|
224
|
+
|
|
225
|
+
for ( const [ uid, promise ] of resolvePromises ) {
|
|
226
|
+
|
|
227
|
+
const match = uid.match( /^(.*):f(\d+)$/ );
|
|
228
|
+
const frame = parseInt( match[ 2 ] );
|
|
229
|
+
|
|
230
|
+
if ( frames.includes( frame ) === false ) {
|
|
231
|
+
|
|
232
|
+
frames.push( frame );
|
|
233
|
+
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
if ( framesDuration[ frame ] === undefined ) framesDuration[ frame ] = 0;
|
|
237
|
+
|
|
238
|
+
const duration = await promise;
|
|
239
|
+
|
|
240
|
+
this.timestamps.set( uid, duration );
|
|
241
|
+
|
|
242
|
+
framesDuration[ frame ] += duration;
|
|
243
|
+
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Return the total duration of the last frame
|
|
247
|
+
const totalDuration = framesDuration[ frames[ frames.length - 1 ] ];
|
|
220
248
|
|
|
221
249
|
// Store the last valid result
|
|
222
250
|
this.lastValue = totalDuration;
|
|
251
|
+
this.frames = frames;
|
|
223
252
|
|
|
224
253
|
// Reset states
|
|
225
254
|
this.currentQueryIndex = 0;
|
|
@@ -231,7 +260,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
231
260
|
|
|
232
261
|
} catch ( error ) {
|
|
233
262
|
|
|
234
|
-
|
|
263
|
+
error( 'Error resolving queries:', error );
|
|
235
264
|
return this.lastValue;
|
|
236
265
|
|
|
237
266
|
} finally {
|
|
@@ -319,7 +348,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
319
348
|
|
|
320
349
|
} catch ( error ) {
|
|
321
350
|
|
|
322
|
-
|
|
351
|
+
error( 'Error checking query:', error );
|
|
323
352
|
resolve( this.lastValue );
|
|
324
353
|
|
|
325
354
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, RGB_S3TC_DXT1_Format, DepthFormat, DepthStencilFormat, RedFormat, RGBFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedInt5999Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, SRGBTransfer, NoColorSpace } from '../../../constants.js';
|
|
1
|
+
import { RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, RGB_S3TC_DXT1_Format, DepthFormat, DepthStencilFormat, RedFormat, RGBFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedInt5999Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, SRGBTransfer, NoColorSpace, UnsignedInt101111Type } from '../../../constants.js';
|
|
2
2
|
import { ColorManagement } from '../../../math/ColorManagement.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -60,6 +60,7 @@ class WebGLUtils {
|
|
|
60
60
|
if ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;
|
|
61
61
|
if ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;
|
|
62
62
|
if ( p === UnsignedInt5999Type ) return gl.UNSIGNED_INT_5_9_9_9_REV;
|
|
63
|
+
if ( p === UnsignedInt101111Type ) return gl.UNSIGNED_INT_10F_11F_11F_REV;
|
|
63
64
|
|
|
64
65
|
if ( p === ByteType ) return gl.BYTE;
|
|
65
66
|
if ( p === ShortType ) return gl.SHORT;
|
|
@@ -231,7 +232,7 @@ class WebGLUtils {
|
|
|
231
232
|
|
|
232
233
|
if ( extension !== null ) {
|
|
233
234
|
|
|
234
|
-
if ( p ===
|
|
235
|
+
if ( p === RED_RGTC1_Format ) return extension.COMPRESSED_RED_RGTC1_EXT;
|
|
235
236
|
if ( p === SIGNED_RED_RGTC1_Format ) return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT;
|
|
236
237
|
if ( p === RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_RED_GREEN_RGTC2_EXT;
|
|
237
238
|
if ( p === SIGNED_RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;
|