@gnsx/three 0.185.16 → 0.186.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 +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
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
CullFaceNone, CullFaceBack, CullFaceFront, DoubleSide, BackSide,
|
|
3
3
|
NormalBlending, NoBlending, CustomBlending, AddEquation,
|
|
4
|
-
AdditiveBlending, SubtractiveBlending, MultiplyBlending, SubtractEquation, ReverseSubtractEquation,
|
|
4
|
+
AdditiveBlending, SubtractiveBlending, MultiplyBlending, SubtractEquation, ReverseSubtractEquation, MinEquation, MaxEquation,
|
|
5
5
|
ZeroFactor, OneFactor, SrcColorFactor, SrcAlphaFactor, SrcAlphaSaturateFactor, DstColorFactor, DstAlphaFactor,
|
|
6
6
|
OneMinusSrcColorFactor, OneMinusSrcAlphaFactor, OneMinusDstColorFactor, OneMinusDstAlphaFactor,
|
|
7
|
+
ConstantColorFactor, OneMinusConstantColorFactor, ConstantAlphaFactor, OneMinusConstantAlphaFactor,
|
|
7
8
|
NeverDepth, AlwaysDepth, LessDepth, LessEqualDepth, EqualDepth, GreaterEqualDepth, GreaterDepth, NotEqualDepth,
|
|
8
9
|
MaterialBlending
|
|
9
10
|
} from '../../../constants.js';
|
|
11
|
+
import { Color } from '../../../math/Color.js';
|
|
10
12
|
import { Vector4 } from '../../../math/Vector4.js';
|
|
11
13
|
import { error, ReversedDepthFuncs, warnOnce } from '../../../utils.js';
|
|
12
14
|
|
|
@@ -56,10 +58,14 @@ class WebGLState {
|
|
|
56
58
|
this.currentProgram = null;
|
|
57
59
|
this.currentBlendingEnabled = false;
|
|
58
60
|
this.currentBlending = null;
|
|
61
|
+
this.currentBlendEquation = null;
|
|
62
|
+
this.currentBlendEquationAlpha = null;
|
|
59
63
|
this.currentBlendSrc = null;
|
|
60
64
|
this.currentBlendDst = null;
|
|
61
65
|
this.currentBlendSrcAlpha = null;
|
|
62
66
|
this.currentBlendDstAlpha = null;
|
|
67
|
+
this.currentBlendColor = new Color( 0, 0, 0 );
|
|
68
|
+
this.currentBlendAlpha = 0;
|
|
63
69
|
this.currentPremultipledAlpha = null;
|
|
64
70
|
this.currentPolygonOffsetFactor = null;
|
|
65
71
|
this.currentPolygonOffsetUnits = null;
|
|
@@ -106,7 +112,9 @@ class WebGLState {
|
|
|
106
112
|
equationToGL = {
|
|
107
113
|
[ AddEquation ]: gl.FUNC_ADD,
|
|
108
114
|
[ SubtractEquation ]: gl.FUNC_SUBTRACT,
|
|
109
|
-
[ ReverseSubtractEquation ]: gl.FUNC_REVERSE_SUBTRACT
|
|
115
|
+
[ ReverseSubtractEquation ]: gl.FUNC_REVERSE_SUBTRACT,
|
|
116
|
+
[ MinEquation ]: gl.MIN,
|
|
117
|
+
[ MaxEquation ]: gl.MAX
|
|
110
118
|
};
|
|
111
119
|
|
|
112
120
|
factorToGL = {
|
|
@@ -120,7 +128,11 @@ class WebGLState {
|
|
|
120
128
|
[ OneMinusSrcColorFactor ]: gl.ONE_MINUS_SRC_COLOR,
|
|
121
129
|
[ OneMinusSrcAlphaFactor ]: gl.ONE_MINUS_SRC_ALPHA,
|
|
122
130
|
[ OneMinusDstColorFactor ]: gl.ONE_MINUS_DST_COLOR,
|
|
123
|
-
[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA
|
|
131
|
+
[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA,
|
|
132
|
+
[ ConstantColorFactor ]: gl.CONSTANT_COLOR,
|
|
133
|
+
[ OneMinusConstantColorFactor ]: gl.ONE_MINUS_CONSTANT_COLOR,
|
|
134
|
+
[ ConstantAlphaFactor ]: gl.CONSTANT_ALPHA,
|
|
135
|
+
[ OneMinusConstantAlphaFactor ]: gl.ONE_MINUS_CONSTANT_ALPHA
|
|
124
136
|
};
|
|
125
137
|
|
|
126
138
|
const scissorParam = gl.getParameter( gl.SCISSOR_BOX );
|
|
@@ -422,7 +434,7 @@ class WebGLState {
|
|
|
422
434
|
* Defines the blending.
|
|
423
435
|
*
|
|
424
436
|
* This method caches the state so `gl.blendEquation()`, `gl.blendEquationSeparate()`,
|
|
425
|
-
* `gl.blendFunc()` and
|
|
437
|
+
* `gl.blendFunc()`, `gl.blendFuncSeparate()` and `gl.blendColor()` are only called when necessary.
|
|
426
438
|
*
|
|
427
439
|
* @param {number} blending - The blending type.
|
|
428
440
|
* @param {number} blendEquation - The blending equation.
|
|
@@ -431,9 +443,11 @@ class WebGLState {
|
|
|
431
443
|
* @param {number} blendEquationAlpha - Only relevant for custom blending. The blending equation for alpha.
|
|
432
444
|
* @param {number} blendSrcAlpha - Only relevant for custom blending. The alpha source blending factor.
|
|
433
445
|
* @param {number} blendDstAlpha - Only relevant for custom blending. The alpha destination blending factor.
|
|
446
|
+
* @param {Color} blendColor - Only relevant for custom blending. The RGB values of the constant blend color.
|
|
447
|
+
* @param {number} blendAlpha - Only relevant for custom blending. The alpha value of the constant blend color.
|
|
434
448
|
* @param {boolean} premultipliedAlpha - Whether premultiplied alpha is enabled or not.
|
|
435
449
|
*/
|
|
436
|
-
setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {
|
|
450
|
+
setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, blendColor, blendAlpha, premultipliedAlpha ) {
|
|
437
451
|
|
|
438
452
|
const { gl } = this;
|
|
439
453
|
|
|
@@ -564,6 +578,15 @@ class WebGLState {
|
|
|
564
578
|
|
|
565
579
|
}
|
|
566
580
|
|
|
581
|
+
if ( blendColor.equals( this.currentBlendColor ) === false || blendAlpha !== this.currentBlendAlpha ) {
|
|
582
|
+
|
|
583
|
+
gl.blendColor( blendColor.r, blendColor.g, blendColor.b, blendAlpha );
|
|
584
|
+
|
|
585
|
+
this.currentBlendColor.copy( blendColor );
|
|
586
|
+
this.currentBlendAlpha = blendAlpha;
|
|
587
|
+
|
|
588
|
+
}
|
|
589
|
+
|
|
567
590
|
this.currentBlending = blending;
|
|
568
591
|
this.currentPremultipledAlpha = false;
|
|
569
592
|
|
|
@@ -913,7 +936,7 @@ class WebGLState {
|
|
|
913
936
|
|
|
914
937
|
( material.blending === NormalBlending && material.transparent === false )
|
|
915
938
|
? this.setBlending( NoBlending )
|
|
916
|
-
: this.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );
|
|
939
|
+
: this.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.blendColor, material.blendAlpha, material.premultipliedAlpha );
|
|
917
940
|
|
|
918
941
|
this.setDepthFunc( material.depthFunc );
|
|
919
942
|
this.setDepthTest( material.depthTest );
|
|
@@ -936,28 +959,27 @@ class WebGLState {
|
|
|
936
959
|
? this.enable( gl.SAMPLE_ALPHA_TO_COVERAGE )
|
|
937
960
|
: this.disable( gl.SAMPLE_ALPHA_TO_COVERAGE );
|
|
938
961
|
|
|
939
|
-
if ( hardwareClippingPlanes > 0 ) {
|
|
940
962
|
|
|
941
|
-
|
|
963
|
+
if ( this.currentClippingPlanes !== hardwareClippingPlanes ) {
|
|
942
964
|
|
|
943
|
-
|
|
965
|
+
const CLIP_DISTANCE0_WEBGL = 0x3000;
|
|
944
966
|
|
|
945
|
-
|
|
967
|
+
for ( let i = 0; i < 8; i ++ ) {
|
|
946
968
|
|
|
947
|
-
|
|
969
|
+
if ( i < hardwareClippingPlanes ) {
|
|
948
970
|
|
|
949
|
-
|
|
971
|
+
this.enable( CLIP_DISTANCE0_WEBGL + i );
|
|
950
972
|
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
this.disable( CLIP_DISTANCE0_WEBGL + i );
|
|
973
|
+
} else {
|
|
954
974
|
|
|
955
|
-
|
|
975
|
+
this.disable( CLIP_DISTANCE0_WEBGL + i );
|
|
956
976
|
|
|
957
977
|
}
|
|
958
978
|
|
|
959
979
|
}
|
|
960
980
|
|
|
981
|
+
this.currentClippingPlanes = hardwareClippingPlanes;
|
|
982
|
+
|
|
961
983
|
}
|
|
962
984
|
|
|
963
985
|
}
|
|
@@ -1318,7 +1340,7 @@ class WebGLState {
|
|
|
1318
1340
|
/**
|
|
1319
1341
|
* Returns the value for the given parameter.
|
|
1320
1342
|
*
|
|
1321
|
-
* @param {number} name - The
|
|
1343
|
+
* @param {number} name - The parameter to get the value for.
|
|
1322
1344
|
* @return {any} The value for the given parameter.
|
|
1323
1345
|
*/
|
|
1324
1346
|
getParameter( name ) {
|
|
@@ -1356,6 +1378,130 @@ class WebGLState {
|
|
|
1356
1378
|
|
|
1357
1379
|
}
|
|
1358
1380
|
|
|
1381
|
+
/**
|
|
1382
|
+
* Restores the WebGL state to its default and clears the cache so subsequent renderings
|
|
1383
|
+
* re-apply the required state. Useful when the WebGL context is shared with other libraries.
|
|
1384
|
+
*/
|
|
1385
|
+
reset() {
|
|
1386
|
+
|
|
1387
|
+
const { gl } = this;
|
|
1388
|
+
|
|
1389
|
+
// reset WebGL state
|
|
1390
|
+
|
|
1391
|
+
gl.disable( gl.BLEND );
|
|
1392
|
+
gl.disable( gl.CULL_FACE );
|
|
1393
|
+
gl.disable( gl.DEPTH_TEST );
|
|
1394
|
+
gl.disable( gl.POLYGON_OFFSET_FILL );
|
|
1395
|
+
gl.disable( gl.SCISSOR_TEST );
|
|
1396
|
+
gl.disable( gl.STENCIL_TEST );
|
|
1397
|
+
gl.disable( gl.SAMPLE_ALPHA_TO_COVERAGE );
|
|
1398
|
+
|
|
1399
|
+
gl.blendEquation( gl.FUNC_ADD );
|
|
1400
|
+
gl.blendFunc( gl.ONE, gl.ZERO );
|
|
1401
|
+
gl.blendFuncSeparate( gl.ONE, gl.ZERO, gl.ONE, gl.ZERO );
|
|
1402
|
+
gl.blendColor( 0, 0, 0, 0 );
|
|
1403
|
+
|
|
1404
|
+
gl.colorMask( true, true, true, true );
|
|
1405
|
+
gl.clearColor( 0, 0, 0, 0 );
|
|
1406
|
+
|
|
1407
|
+
gl.depthMask( true );
|
|
1408
|
+
gl.depthFunc( gl.LESS );
|
|
1409
|
+
gl.clearDepth( 1 );
|
|
1410
|
+
|
|
1411
|
+
gl.stencilMask( 0xffffffff );
|
|
1412
|
+
gl.stencilFunc( gl.ALWAYS, 0, 0xffffffff );
|
|
1413
|
+
gl.stencilOp( gl.KEEP, gl.KEEP, gl.KEEP );
|
|
1414
|
+
gl.clearStencil( 0 );
|
|
1415
|
+
|
|
1416
|
+
gl.cullFace( gl.BACK );
|
|
1417
|
+
gl.frontFace( gl.CCW );
|
|
1418
|
+
|
|
1419
|
+
gl.polygonOffset( 0, 0 );
|
|
1420
|
+
|
|
1421
|
+
gl.activeTexture( gl.TEXTURE0 );
|
|
1422
|
+
|
|
1423
|
+
gl.bindFramebuffer( gl.FRAMEBUFFER, null );
|
|
1424
|
+
gl.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );
|
|
1425
|
+
gl.bindFramebuffer( gl.READ_FRAMEBUFFER, null );
|
|
1426
|
+
|
|
1427
|
+
gl.useProgram( null );
|
|
1428
|
+
|
|
1429
|
+
gl.lineWidth( 1 );
|
|
1430
|
+
|
|
1431
|
+
gl.scissor( 0, 0, gl.canvas.width, gl.canvas.height );
|
|
1432
|
+
gl.viewport( 0, 0, gl.canvas.width, gl.canvas.height );
|
|
1433
|
+
|
|
1434
|
+
gl.pixelStorei( gl.PACK_ALIGNMENT, 4 );
|
|
1435
|
+
gl.pixelStorei( gl.UNPACK_ALIGNMENT, 4 );
|
|
1436
|
+
gl.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, false );
|
|
1437
|
+
gl.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false );
|
|
1438
|
+
gl.pixelStorei( gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.BROWSER_DEFAULT_WEBGL );
|
|
1439
|
+
gl.pixelStorei( gl.PACK_ROW_LENGTH, 0 );
|
|
1440
|
+
gl.pixelStorei( gl.PACK_SKIP_PIXELS, 0 );
|
|
1441
|
+
gl.pixelStorei( gl.PACK_SKIP_ROWS, 0 );
|
|
1442
|
+
gl.pixelStorei( gl.UNPACK_ROW_LENGTH, 0 );
|
|
1443
|
+
gl.pixelStorei( gl.UNPACK_IMAGE_HEIGHT, 0 );
|
|
1444
|
+
gl.pixelStorei( gl.UNPACK_SKIP_PIXELS, 0 );
|
|
1445
|
+
gl.pixelStorei( gl.UNPACK_SKIP_ROWS, 0 );
|
|
1446
|
+
gl.pixelStorei( gl.UNPACK_SKIP_IMAGES, 0 );
|
|
1447
|
+
|
|
1448
|
+
this.resetVertexState();
|
|
1449
|
+
|
|
1450
|
+
// reset internal cache
|
|
1451
|
+
|
|
1452
|
+
this.enabled = {};
|
|
1453
|
+
this.parameters = {};
|
|
1454
|
+
this.currentFlipSided = null;
|
|
1455
|
+
this.currentCullFace = null;
|
|
1456
|
+
this.currentProgram = null;
|
|
1457
|
+
this.currentBlendingEnabled = false;
|
|
1458
|
+
this.currentBlending = null;
|
|
1459
|
+
this.currentBlendEquation = null;
|
|
1460
|
+
this.currentBlendEquationAlpha = null;
|
|
1461
|
+
this.currentBlendSrc = null;
|
|
1462
|
+
this.currentBlendDst = null;
|
|
1463
|
+
this.currentBlendSrcAlpha = null;
|
|
1464
|
+
this.currentBlendDstAlpha = null;
|
|
1465
|
+
this.currentBlendColor.set( 0, 0, 0 );
|
|
1466
|
+
this.currentBlendAlpha = 0;
|
|
1467
|
+
this.currentPremultipledAlpha = null;
|
|
1468
|
+
this.currentPolygonOffsetFactor = null;
|
|
1469
|
+
this.currentPolygonOffsetUnits = null;
|
|
1470
|
+
this.currentColorMask = null;
|
|
1471
|
+
this.currentDepthFunc = null;
|
|
1472
|
+
this.currentDepthMask = null;
|
|
1473
|
+
this.currentStencilFunc = null;
|
|
1474
|
+
this.currentStencilRef = null;
|
|
1475
|
+
this.currentStencilFuncMask = null;
|
|
1476
|
+
this.currentStencilFail = null;
|
|
1477
|
+
this.currentStencilZFail = null;
|
|
1478
|
+
this.currentStencilZPass = null;
|
|
1479
|
+
this.currentStencilMask = null;
|
|
1480
|
+
this.currentLineWidth = null;
|
|
1481
|
+
this.currentClippingPlanes = 0;
|
|
1482
|
+
|
|
1483
|
+
this.currentBoundFramebuffers = {};
|
|
1484
|
+
this.currentDrawbuffers = new WeakMap();
|
|
1485
|
+
|
|
1486
|
+
this.currentTextureSlot = null;
|
|
1487
|
+
this.currentBoundTextures = {};
|
|
1488
|
+
this.currentBoundBufferBases = {};
|
|
1489
|
+
|
|
1490
|
+
this.currentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height );
|
|
1491
|
+
this.currentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height );
|
|
1492
|
+
|
|
1493
|
+
// re-apply reversed depth if used by the renderer
|
|
1494
|
+
|
|
1495
|
+
this.currentDepthReversed = false;
|
|
1496
|
+
|
|
1497
|
+
if ( this.backend.renderer.reversedDepthBuffer === true ) {
|
|
1498
|
+
|
|
1499
|
+
this.setReversedDepth( true );
|
|
1500
|
+
|
|
1501
|
+
}
|
|
1502
|
+
|
|
1503
|
+
}
|
|
1504
|
+
|
|
1359
1505
|
}
|
|
1360
1506
|
|
|
1361
1507
|
export default WebGLState;
|
|
@@ -550,12 +550,29 @@ class WebGLTextureUtils {
|
|
|
550
550
|
|
|
551
551
|
if ( texture.isCompressedArrayTexture ) {
|
|
552
552
|
|
|
553
|
-
|
|
554
553
|
if ( texture.format !== gl.RGBA ) {
|
|
555
554
|
|
|
556
555
|
if ( glFormat !== null ) {
|
|
557
556
|
|
|
558
|
-
|
|
557
|
+
if ( texture.layerUpdates.size > 0 ) {
|
|
558
|
+
|
|
559
|
+
const layerByteLength = getByteLength( mipmap.width, mipmap.height, texture.format, texture.type );
|
|
560
|
+
|
|
561
|
+
for ( const layerIndex of texture.layerUpdates ) {
|
|
562
|
+
|
|
563
|
+
const layerData = mipmap.data.subarray(
|
|
564
|
+
layerIndex * layerByteLength / mipmap.data.BYTES_PER_ELEMENT,
|
|
565
|
+
( layerIndex + 1 ) * layerByteLength / mipmap.data.BYTES_PER_ELEMENT
|
|
566
|
+
);
|
|
567
|
+
gl.compressedTexSubImage3D( gl.TEXTURE_2D_ARRAY, i, 0, 0, layerIndex, mipmap.width, mipmap.height, 1, glFormat, layerData );
|
|
568
|
+
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
} else {
|
|
572
|
+
|
|
573
|
+
gl.compressedTexSubImage3D( gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data );
|
|
574
|
+
|
|
575
|
+
}
|
|
559
576
|
|
|
560
577
|
} else {
|
|
561
578
|
|
|
@@ -585,6 +602,7 @@ class WebGLTextureUtils {
|
|
|
585
602
|
|
|
586
603
|
}
|
|
587
604
|
|
|
605
|
+
if ( texture.isCompressedArrayTexture && texture.layerUpdates.size > 0 ) texture.clearLayerUpdates();
|
|
588
606
|
|
|
589
607
|
} else if ( texture.isCubeTexture ) {
|
|
590
608
|
|
|
@@ -1215,7 +1233,7 @@ class WebGLTextureUtils {
|
|
|
1215
1233
|
* @param {number} y - The y coordinate of the copy origin.
|
|
1216
1234
|
* @param {number} width - The width of the copy.
|
|
1217
1235
|
* @param {number} height - The height of the copy.
|
|
1218
|
-
* @param {number} faceIndex - The face index.
|
|
1236
|
+
* @param {number} faceIndex - The cube face, depth slice or array layer index.
|
|
1219
1237
|
* @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.
|
|
1220
1238
|
*/
|
|
1221
1239
|
async copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {
|
|
@@ -1228,9 +1246,17 @@ class WebGLTextureUtils {
|
|
|
1228
1246
|
|
|
1229
1247
|
backend.state.bindFramebuffer( gl.READ_FRAMEBUFFER, fb );
|
|
1230
1248
|
|
|
1231
|
-
|
|
1249
|
+
if ( texture.isData3DTexture || texture.isDataArrayTexture || texture.isArrayTexture ) {
|
|
1250
|
+
|
|
1251
|
+
gl.framebufferTextureLayer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, textureGPU, 0, faceIndex );
|
|
1252
|
+
|
|
1253
|
+
} else {
|
|
1232
1254
|
|
|
1233
|
-
|
|
1255
|
+
const target = texture.isCubeTexture ? gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex : gl.TEXTURE_2D;
|
|
1256
|
+
|
|
1257
|
+
gl.framebufferTexture2D( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, target, textureGPU, 0 );
|
|
1258
|
+
|
|
1259
|
+
}
|
|
1234
1260
|
|
|
1235
1261
|
const typedArrayType = this._getTypedArrayType( glType );
|
|
1236
1262
|
const bytesPerTexel = this._getBytesPerTexel( glType, glFormat );
|
|
@@ -1255,6 +1281,7 @@ class WebGLTextureUtils {
|
|
|
1255
1281
|
|
|
1256
1282
|
backend.state.bindFramebuffer( gl.READ_FRAMEBUFFER, null );
|
|
1257
1283
|
|
|
1284
|
+
gl.deleteBuffer( buffer );
|
|
1258
1285
|
gl.deleteFramebuffer( fb );
|
|
1259
1286
|
|
|
1260
1287
|
return dstBuffer;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { error,
|
|
1
|
+
import { error, warn } from '../../../utils.js';
|
|
2
2
|
import TimestampQueryPool from '../../common/TimestampQueryPool.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -58,11 +58,14 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
58
58
|
|
|
59
59
|
if ( ! this.trackTimestamp ) return null;
|
|
60
60
|
|
|
61
|
-
// Check if we have enough space for a new query pair
|
|
62
61
|
if ( this.currentQueryIndex + 2 > this.maxQueries ) {
|
|
63
62
|
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
this.resolveQueriesAsync();
|
|
64
|
+
|
|
65
|
+
this.currentQueryIndex = 0;
|
|
66
|
+
this.queryOffsets.clear();
|
|
67
|
+
this.queryStates.clear();
|
|
68
|
+
this.activeQuery = null;
|
|
66
69
|
|
|
67
70
|
}
|
|
68
71
|
|
|
@@ -226,6 +229,8 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
226
229
|
|
|
227
230
|
const frames = [];
|
|
228
231
|
|
|
232
|
+
this.timestamps.clear();
|
|
233
|
+
|
|
229
234
|
for ( const [ uid, promise ] of resolvePromises ) {
|
|
230
235
|
|
|
231
236
|
const match = uid.match( /^(.*):f(\d+)$/ );
|
|
@@ -390,6 +395,8 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
390
395
|
this.queries = [];
|
|
391
396
|
this.queryStates.clear();
|
|
392
397
|
this.queryOffsets.clear();
|
|
398
|
+
this.timestamps.clear();
|
|
399
|
+
this.frames = [];
|
|
393
400
|
this.lastValue = 0;
|
|
394
401
|
this.activeQuery = null;
|
|
395
402
|
|