@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
|
@@ -11,8 +11,8 @@ import WebGLCapabilities from './utils/WebGLCapabilities.js';
|
|
|
11
11
|
import { GLFeatureName } from './utils/WebGLConstants.js';
|
|
12
12
|
import { WebGLBufferRenderer } from './WebGLBufferRenderer.js';
|
|
13
13
|
|
|
14
|
-
import { warnOnce } from '../../utils.js';
|
|
15
|
-
import { WebGLCoordinateSystem } from '../../constants.js';
|
|
14
|
+
import { warnOnce, warn, error } from '../../utils.js';
|
|
15
|
+
import { WebGLCoordinateSystem, TimestampQuery } from '../../constants.js';
|
|
16
16
|
import WebGLTimestampQueryPool from './utils/WebGLTimestampQueryPool.js';
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -198,7 +198,7 @@ class WebGLBackend extends Backend {
|
|
|
198
198
|
* the WebXR device API.
|
|
199
199
|
*
|
|
200
200
|
* @private
|
|
201
|
-
* @type {WebGLFramebuffer}
|
|
201
|
+
* @type {?WebGLFramebuffer}
|
|
202
202
|
* @default null
|
|
203
203
|
*/
|
|
204
204
|
this._xrFramebuffer = null;
|
|
@@ -219,7 +219,7 @@ class WebGLBackend extends Backend {
|
|
|
219
219
|
const parameters = this.parameters;
|
|
220
220
|
|
|
221
221
|
const contextAttributes = {
|
|
222
|
-
antialias: renderer.
|
|
222
|
+
antialias: renderer.currentSamples > 0,
|
|
223
223
|
alpha: true, // always true for performance reasons
|
|
224
224
|
depth: renderer.depth,
|
|
225
225
|
stencil: renderer.stencil
|
|
@@ -297,19 +297,6 @@ class WebGLBackend extends Backend {
|
|
|
297
297
|
|
|
298
298
|
}
|
|
299
299
|
|
|
300
|
-
/**
|
|
301
|
-
* Can be used to synchronize CPU operations with GPU tasks. So when this method is called,
|
|
302
|
-
* the CPU waits for the GPU to complete its operation (e.g. a compute task).
|
|
303
|
-
*
|
|
304
|
-
* @async
|
|
305
|
-
* @return {Promise} A Promise that resolves when synchronization has been finished.
|
|
306
|
-
*/
|
|
307
|
-
async waitForGPU() {
|
|
308
|
-
|
|
309
|
-
await this.utils._clientWaitAsync();
|
|
310
|
-
|
|
311
|
-
}
|
|
312
|
-
|
|
313
300
|
/**
|
|
314
301
|
* Ensures the backend is XR compatible.
|
|
315
302
|
*
|
|
@@ -363,7 +350,7 @@ class WebGLBackend extends Backend {
|
|
|
363
350
|
// are midframe flushes and an external depth texture.
|
|
364
351
|
if ( ( this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) && renderTarget._autoAllocateDepthBuffer === true && renderTarget.multiview === false ) {
|
|
365
352
|
|
|
366
|
-
|
|
353
|
+
warn( 'WebGLBackend: Render-to-texture extension was disabled because an external texture was provided' );
|
|
367
354
|
|
|
368
355
|
}
|
|
369
356
|
|
|
@@ -376,14 +363,13 @@ class WebGLBackend extends Backend {
|
|
|
376
363
|
/**
|
|
377
364
|
* Inits a time stamp query for the given render context.
|
|
378
365
|
*
|
|
379
|
-
* @param {
|
|
366
|
+
* @param {string} type - The type of the timestamp query.
|
|
367
|
+
* @param {string} uid - A unique identifier for the timestamp query.
|
|
380
368
|
*/
|
|
381
|
-
initTimestampQuery(
|
|
369
|
+
initTimestampQuery( type, uid ) {
|
|
382
370
|
|
|
383
371
|
if ( ! this.disjoint || ! this.trackTimestamp ) return;
|
|
384
372
|
|
|
385
|
-
const type = renderContext.isComputeNode ? 'compute' : 'render';
|
|
386
|
-
|
|
387
373
|
if ( ! this.timestampQueryPool[ type ] ) {
|
|
388
374
|
|
|
389
375
|
// TODO: Variable maxQueries?
|
|
@@ -393,11 +379,11 @@ class WebGLBackend extends Backend {
|
|
|
393
379
|
|
|
394
380
|
const timestampQueryPool = this.timestampQueryPool[ type ];
|
|
395
381
|
|
|
396
|
-
const baseOffset = timestampQueryPool.allocateQueriesForContext(
|
|
382
|
+
const baseOffset = timestampQueryPool.allocateQueriesForContext( uid );
|
|
397
383
|
|
|
398
384
|
if ( baseOffset !== null ) {
|
|
399
385
|
|
|
400
|
-
timestampQueryPool.beginQuery(
|
|
386
|
+
timestampQueryPool.beginQuery( uid );
|
|
401
387
|
|
|
402
388
|
}
|
|
403
389
|
|
|
@@ -408,16 +394,16 @@ class WebGLBackend extends Backend {
|
|
|
408
394
|
/**
|
|
409
395
|
* Prepares the timestamp buffer.
|
|
410
396
|
*
|
|
411
|
-
* @param {
|
|
397
|
+
* @param {string} type - The type of the timestamp query.
|
|
398
|
+
* @param {string} uid - A unique identifier for the timestamp query.
|
|
412
399
|
*/
|
|
413
|
-
prepareTimestampBuffer(
|
|
400
|
+
prepareTimestampBuffer( type, uid ) {
|
|
414
401
|
|
|
415
402
|
if ( ! this.disjoint || ! this.trackTimestamp ) return;
|
|
416
403
|
|
|
417
|
-
const type = renderContext.isComputeNode ? 'compute' : 'render';
|
|
418
404
|
const timestampQueryPool = this.timestampQueryPool[ type ];
|
|
419
405
|
|
|
420
|
-
timestampQueryPool.endQuery(
|
|
406
|
+
timestampQueryPool.endQuery( uid );
|
|
421
407
|
|
|
422
408
|
}
|
|
423
409
|
|
|
@@ -467,7 +453,7 @@ class WebGLBackend extends Backend {
|
|
|
467
453
|
|
|
468
454
|
//
|
|
469
455
|
|
|
470
|
-
this.initTimestampQuery( renderContext );
|
|
456
|
+
this.initTimestampQuery( TimestampQuery.RENDER, this.getTimestampUID( renderContext ) );
|
|
471
457
|
|
|
472
458
|
renderContextData.previousContext = this._currentContext;
|
|
473
459
|
this._currentContext = renderContext;
|
|
@@ -540,107 +526,8 @@ class WebGLBackend extends Backend {
|
|
|
540
526
|
}
|
|
541
527
|
|
|
542
528
|
this._currentContext = previousContext;
|
|
543
|
-
const renderTarget = renderContext.renderTarget;
|
|
544
|
-
|
|
545
|
-
if ( renderContext.textures !== null && renderTarget ) {
|
|
546
|
-
|
|
547
|
-
const renderTargetContextData = this.get( renderTarget );
|
|
548
|
-
|
|
549
|
-
if ( renderTarget.samples > 0 && this._useMultisampledExtension( renderTarget ) === false ) {
|
|
550
|
-
|
|
551
|
-
const fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ];
|
|
552
|
-
|
|
553
|
-
let mask = gl.COLOR_BUFFER_BIT;
|
|
554
|
-
|
|
555
|
-
if ( renderTarget.resolveDepthBuffer ) {
|
|
556
|
-
|
|
557
|
-
if ( renderTarget.depthBuffer ) mask |= gl.DEPTH_BUFFER_BIT;
|
|
558
|
-
if ( renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer ) mask |= gl.STENCIL_BUFFER_BIT;
|
|
559
|
-
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
const msaaFrameBuffer = renderTargetContextData.msaaFrameBuffer;
|
|
563
|
-
const msaaRenderbuffers = renderTargetContextData.msaaRenderbuffers;
|
|
564
529
|
|
|
565
|
-
|
|
566
|
-
const isMRT = textures.length > 1;
|
|
567
|
-
|
|
568
|
-
state.bindFramebuffer( gl.READ_FRAMEBUFFER, msaaFrameBuffer );
|
|
569
|
-
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );
|
|
570
|
-
|
|
571
|
-
if ( isMRT ) {
|
|
572
|
-
|
|
573
|
-
// blitFramebuffer() can only copy/resolve the first color attachment of a framebuffer. When using MRT,
|
|
574
|
-
// the engine temporarily removes all attachments and then configures each attachment for the resolve.
|
|
575
|
-
|
|
576
|
-
for ( let i = 0; i < textures.length; i ++ ) {
|
|
577
|
-
|
|
578
|
-
gl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, null );
|
|
579
|
-
gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.TEXTURE_2D, null, 0 );
|
|
580
|
-
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
for ( let i = 0; i < textures.length; i ++ ) {
|
|
586
|
-
|
|
587
|
-
if ( isMRT ) {
|
|
588
|
-
|
|
589
|
-
// configure attachment for resolve
|
|
590
|
-
|
|
591
|
-
const { textureGPU } = this.get( textures[ i ] );
|
|
592
|
-
|
|
593
|
-
gl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, msaaRenderbuffers[ i ] );
|
|
594
|
-
gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, textureGPU, 0 );
|
|
595
|
-
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
if ( renderContext.scissor ) {
|
|
599
|
-
|
|
600
|
-
const { x, y, width, height } = renderContext.scissorValue;
|
|
601
|
-
|
|
602
|
-
const viewY = renderContext.height - height - y;
|
|
603
|
-
|
|
604
|
-
gl.blitFramebuffer( x, viewY, x + width, viewY + height, x, viewY, x + width, viewY + height, mask, gl.NEAREST );
|
|
605
|
-
|
|
606
|
-
} else {
|
|
607
|
-
|
|
608
|
-
gl.blitFramebuffer( 0, 0, renderContext.width, renderContext.height, 0, 0, renderContext.width, renderContext.height, mask, gl.NEAREST );
|
|
609
|
-
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
if ( isMRT ) {
|
|
615
|
-
|
|
616
|
-
// restore attachments
|
|
617
|
-
|
|
618
|
-
for ( let i = 0; i < textures.length; i ++ ) {
|
|
619
|
-
|
|
620
|
-
const { textureGPU } = this.get( textures[ i ] );
|
|
621
|
-
|
|
622
|
-
gl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, msaaRenderbuffers[ i ] );
|
|
623
|
-
gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.TEXTURE_2D, textureGPU, 0 );
|
|
624
|
-
|
|
625
|
-
}
|
|
626
|
-
|
|
627
|
-
}
|
|
628
|
-
|
|
629
|
-
if ( this._supportsInvalidateFramebuffer === true ) {
|
|
630
|
-
|
|
631
|
-
gl.invalidateFramebuffer( gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray );
|
|
632
|
-
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
} else if ( renderTarget.resolveDepthBuffer === false && renderTargetContextData.framebuffers ) {
|
|
636
|
-
|
|
637
|
-
const fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ];
|
|
638
|
-
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );
|
|
639
|
-
gl.invalidateFramebuffer( gl.DRAW_FRAMEBUFFER, renderTargetContextData.depthInvalidationArray );
|
|
640
|
-
|
|
641
|
-
}
|
|
642
|
-
|
|
643
|
-
}
|
|
530
|
+
this._resolveRenderTarget( renderContext );
|
|
644
531
|
|
|
645
532
|
if ( previousContext !== null ) {
|
|
646
533
|
|
|
@@ -659,7 +546,7 @@ class WebGLBackend extends Backend {
|
|
|
659
546
|
|
|
660
547
|
}
|
|
661
548
|
|
|
662
|
-
this.prepareTimestampBuffer( renderContext );
|
|
549
|
+
this.prepareTimestampBuffer( TimestampQuery.RENDER, this.getTimestampUID( renderContext ) );
|
|
663
550
|
|
|
664
551
|
}
|
|
665
552
|
|
|
@@ -799,9 +686,11 @@ class WebGLBackend extends Backend {
|
|
|
799
686
|
* @param {boolean} depth - Whether the depth buffer should be cleared or not.
|
|
800
687
|
* @param {boolean} stencil - Whether the stencil buffer should be cleared or not.
|
|
801
688
|
* @param {?Object} [descriptor=null] - The render context of the current set render target.
|
|
802
|
-
* @param {boolean} [setFrameBuffer=true] -
|
|
689
|
+
* @param {boolean} [setFrameBuffer=true] - Controls whether the intermediate framebuffer should be set or not.
|
|
690
|
+
* @param {boolean} [resolveRenderTarget=true] - Controls whether an active render target should be resolved
|
|
691
|
+
* or not. Only relevant for explicit clears.
|
|
803
692
|
*/
|
|
804
|
-
clear( color, depth, stencil, descriptor = null, setFrameBuffer = true ) {
|
|
693
|
+
clear( color, depth, stencil, descriptor = null, setFrameBuffer = true, resolveRenderTarget = true ) {
|
|
805
694
|
|
|
806
695
|
const { gl, renderer } = this;
|
|
807
696
|
|
|
@@ -884,6 +773,8 @@ class WebGLBackend extends Backend {
|
|
|
884
773
|
|
|
885
774
|
}
|
|
886
775
|
|
|
776
|
+
if ( setFrameBuffer && resolveRenderTarget ) this._resolveRenderTarget( descriptor );
|
|
777
|
+
|
|
887
778
|
}
|
|
888
779
|
|
|
889
780
|
}
|
|
@@ -900,8 +791,10 @@ class WebGLBackend extends Backend {
|
|
|
900
791
|
|
|
901
792
|
const { state, gl } = this;
|
|
902
793
|
|
|
794
|
+
//
|
|
795
|
+
|
|
903
796
|
state.bindFramebuffer( gl.FRAMEBUFFER, null );
|
|
904
|
-
this.initTimestampQuery( computeGroup );
|
|
797
|
+
this.initTimestampQuery( TimestampQuery.COMPUTE, this.getTimestampUID( computeGroup ) );
|
|
905
798
|
|
|
906
799
|
}
|
|
907
800
|
|
|
@@ -912,7 +805,7 @@ class WebGLBackend extends Backend {
|
|
|
912
805
|
* @param {Node} computeNode - The compute node.
|
|
913
806
|
* @param {Array<BindGroup>} bindings - The bindings.
|
|
914
807
|
* @param {ComputePipeline} pipeline - The compute pipeline.
|
|
915
|
-
* @param {number
|
|
808
|
+
* @param {?number} [count=null] - The count of compute invocations. If `null`, the count is determined by the compute node.
|
|
916
809
|
*/
|
|
917
810
|
compute( computeGroup, computeNode, bindings, pipeline, count = null ) {
|
|
918
811
|
|
|
@@ -959,6 +852,12 @@ class WebGLBackend extends Backend {
|
|
|
959
852
|
|
|
960
853
|
count = count[ 0 ];
|
|
961
854
|
|
|
855
|
+
} else if ( count && typeof count === 'object' && count.isIndirectStorageBufferAttribute ) {
|
|
856
|
+
|
|
857
|
+
warnOnce( 'WebGLBackend.compute(): The count parameter must be a single number, not IndirectStorageBufferAttribute' );
|
|
858
|
+
|
|
859
|
+
count = computeNode.count;
|
|
860
|
+
|
|
962
861
|
}
|
|
963
862
|
|
|
964
863
|
if ( attributes[ 0 ].isStorageInstancedBufferAttribute ) {
|
|
@@ -1007,7 +906,7 @@ class WebGLBackend extends Backend {
|
|
|
1007
906
|
|
|
1008
907
|
gl.disable( gl.RASTERIZER_DISCARD );
|
|
1009
908
|
|
|
1010
|
-
this.prepareTimestampBuffer( computeGroup );
|
|
909
|
+
this.prepareTimestampBuffer( TimestampQuery.COMPUTE, this.getTimestampUID( computeGroup ) );
|
|
1011
910
|
|
|
1012
911
|
if ( this._currentContext ) {
|
|
1013
912
|
|
|
@@ -1169,12 +1068,12 @@ class WebGLBackend extends Backend {
|
|
|
1169
1068
|
if ( object._multiDrawInstances !== null ) {
|
|
1170
1069
|
|
|
1171
1070
|
// @deprecated, r174
|
|
1172
|
-
warnOnce( '
|
|
1071
|
+
warnOnce( 'WebGLBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
|
|
1173
1072
|
renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
|
|
1174
1073
|
|
|
1175
1074
|
} else if ( ! this.hasFeature( 'WEBGL_multi_draw' ) ) {
|
|
1176
1075
|
|
|
1177
|
-
warnOnce( '
|
|
1076
|
+
warnOnce( 'WebGLBackend: WEBGL_multi_draw not supported.' );
|
|
1178
1077
|
|
|
1179
1078
|
} else {
|
|
1180
1079
|
|
|
@@ -1246,7 +1145,7 @@ class WebGLBackend extends Backend {
|
|
|
1246
1145
|
this._currentContext.activeCubeFace = i;
|
|
1247
1146
|
|
|
1248
1147
|
this._setFramebuffer( this._currentContext );
|
|
1249
|
-
this.clear( false, true, stencilBuffer, this._currentContext, false );
|
|
1148
|
+
this.clear( false, true, stencilBuffer, this._currentContext, false, false );
|
|
1250
1149
|
|
|
1251
1150
|
}
|
|
1252
1151
|
|
|
@@ -1387,10 +1286,11 @@ class WebGLBackend extends Backend {
|
|
|
1387
1286
|
* Destroys the GPU data for the given texture object.
|
|
1388
1287
|
*
|
|
1389
1288
|
* @param {Texture} texture - The texture.
|
|
1289
|
+
* @param {boolean} [isDefaultTexture=false] - Whether the texture uses a default GPU texture or not.
|
|
1390
1290
|
*/
|
|
1391
|
-
destroyTexture( texture ) {
|
|
1291
|
+
destroyTexture( texture, isDefaultTexture = false ) {
|
|
1392
1292
|
|
|
1393
|
-
this.textureUtils.destroyTexture( texture );
|
|
1293
|
+
this.textureUtils.destroyTexture( texture, isDefaultTexture );
|
|
1394
1294
|
|
|
1395
1295
|
}
|
|
1396
1296
|
|
|
@@ -1415,21 +1315,15 @@ class WebGLBackend extends Backend {
|
|
|
1415
1315
|
/**
|
|
1416
1316
|
* This method does nothing since WebGL 2 has no concept of samplers.
|
|
1417
1317
|
*
|
|
1418
|
-
* @param {Texture} texture - The texture to
|
|
1318
|
+
* @param {Texture} texture - The texture to update the sampler for.
|
|
1319
|
+
* @return {string} The current sampler key.
|
|
1419
1320
|
*/
|
|
1420
|
-
|
|
1321
|
+
updateSampler( /*texture*/ ) {
|
|
1421
1322
|
|
|
1422
|
-
|
|
1323
|
+
return '';
|
|
1423
1324
|
|
|
1424
1325
|
}
|
|
1425
1326
|
|
|
1426
|
-
/**
|
|
1427
|
-
* This method does nothing since WebGL 2 has no concept of samplers.
|
|
1428
|
-
*
|
|
1429
|
-
* @param {Texture} texture - The texture to destroy the sampler for.
|
|
1430
|
-
*/
|
|
1431
|
-
destroySampler( /*texture*/ ) {}
|
|
1432
|
-
|
|
1433
1327
|
// node builder
|
|
1434
1328
|
|
|
1435
1329
|
/**
|
|
@@ -1632,7 +1526,7 @@ class WebGLBackend extends Backend {
|
|
|
1632
1526
|
const vertexErrors = this._getShaderErrors( gl, glVertexShader, 'vertex' );
|
|
1633
1527
|
const fragmentErrors = this._getShaderErrors( gl, glFragmentShader, 'fragment' );
|
|
1634
1528
|
|
|
1635
|
-
|
|
1529
|
+
error(
|
|
1636
1530
|
'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +
|
|
1637
1531
|
'VALIDATE_STATUS ' + gl.getProgramParameter( programGPU, gl.VALIDATE_STATUS ) + '\n\n' +
|
|
1638
1532
|
'Program Info Log: ' + programLog + '\n' +
|
|
@@ -1644,7 +1538,7 @@ class WebGLBackend extends Backend {
|
|
|
1644
1538
|
|
|
1645
1539
|
} else if ( programLog !== '' ) {
|
|
1646
1540
|
|
|
1647
|
-
|
|
1541
|
+
warn( 'WebGLProgram: Program Info Log:', programLog );
|
|
1648
1542
|
|
|
1649
1543
|
}
|
|
1650
1544
|
|
|
@@ -1845,28 +1739,46 @@ class WebGLBackend extends Backend {
|
|
|
1845
1739
|
|
|
1846
1740
|
for ( const binding of bindGroup.bindings ) {
|
|
1847
1741
|
|
|
1742
|
+
const map = this.get( binding );
|
|
1743
|
+
|
|
1848
1744
|
if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
|
|
1849
1745
|
|
|
1850
1746
|
const data = binding.buffer;
|
|
1851
|
-
|
|
1747
|
+
let { bufferGPU } = this.get( data );
|
|
1852
1748
|
|
|
1853
|
-
|
|
1854
|
-
gl.bufferData( gl.UNIFORM_BUFFER, data, gl.DYNAMIC_DRAW );
|
|
1749
|
+
if ( bufferGPU === undefined ) {
|
|
1855
1750
|
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
bufferGPU
|
|
1859
|
-
|
|
1751
|
+
// create
|
|
1752
|
+
|
|
1753
|
+
bufferGPU = gl.createBuffer();
|
|
1754
|
+
gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
|
|
1755
|
+
gl.bufferData( gl.UNIFORM_BUFFER, data, gl.DYNAMIC_DRAW );
|
|
1756
|
+
|
|
1757
|
+
this.set( data, { bufferGPU } );
|
|
1758
|
+
|
|
1759
|
+
} else {
|
|
1760
|
+
|
|
1761
|
+
// update
|
|
1762
|
+
|
|
1763
|
+
gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
|
|
1764
|
+
gl.bufferSubData( gl.UNIFORM_BUFFER, 0, data );
|
|
1765
|
+
|
|
1766
|
+
}
|
|
1767
|
+
|
|
1768
|
+
map.index = i ++;
|
|
1769
|
+
map.bufferGPU = bufferGPU;
|
|
1770
|
+
|
|
1771
|
+
this.set( binding, map );
|
|
1860
1772
|
|
|
1861
1773
|
} else if ( binding.isSampledTexture ) {
|
|
1862
1774
|
|
|
1863
1775
|
const { textureGPU, glTextureType } = this.get( binding.texture );
|
|
1864
1776
|
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1777
|
+
map.index = t ++;
|
|
1778
|
+
map.textureGPU = textureGPU;
|
|
1779
|
+
map.glTextureType = glTextureType;
|
|
1780
|
+
|
|
1781
|
+
this.set( binding, map );
|
|
1870
1782
|
|
|
1871
1783
|
}
|
|
1872
1784
|
|
|
@@ -2092,8 +2004,9 @@ class WebGLBackend extends Backend {
|
|
|
2092
2004
|
const { textureGPU } = this.get( textures[ 0 ] );
|
|
2093
2005
|
|
|
2094
2006
|
const cubeFace = this.renderer._activeCubeFace;
|
|
2007
|
+
const mipLevel = this.renderer._activeMipmapLevel;
|
|
2095
2008
|
|
|
2096
|
-
gl.framebufferTexture2D( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_CUBE_MAP_POSITIVE_X + cubeFace, textureGPU,
|
|
2009
|
+
gl.framebufferTexture2D( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_CUBE_MAP_POSITIVE_X + cubeFace, textureGPU, mipLevel );
|
|
2097
2010
|
|
|
2098
2011
|
} else {
|
|
2099
2012
|
|
|
@@ -2115,8 +2028,9 @@ class WebGLBackend extends Backend {
|
|
|
2115
2028
|
} else if ( isRenderTarget3D || isRenderTargetArray ) {
|
|
2116
2029
|
|
|
2117
2030
|
const layer = this.renderer._activeCubeFace;
|
|
2031
|
+
const mipLevel = this.renderer._activeMipmapLevel;
|
|
2118
2032
|
|
|
2119
|
-
gl.framebufferTextureLayer( gl.FRAMEBUFFER, attachment, textureData.textureGPU,
|
|
2033
|
+
gl.framebufferTextureLayer( gl.FRAMEBUFFER, attachment, textureData.textureGPU, mipLevel, layer );
|
|
2120
2034
|
|
|
2121
2035
|
} else {
|
|
2122
2036
|
|
|
@@ -2126,7 +2040,9 @@ class WebGLBackend extends Backend {
|
|
|
2126
2040
|
|
|
2127
2041
|
} else {
|
|
2128
2042
|
|
|
2129
|
-
|
|
2043
|
+
const mipLevel = this.renderer._activeMipmapLevel;
|
|
2044
|
+
|
|
2045
|
+
gl.framebufferTexture2D( gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureData.textureGPU, mipLevel );
|
|
2130
2046
|
|
|
2131
2047
|
}
|
|
2132
2048
|
|
|
@@ -2543,6 +2459,120 @@ class WebGLBackend extends Backend {
|
|
|
2543
2459
|
|
|
2544
2460
|
}
|
|
2545
2461
|
|
|
2462
|
+
/**
|
|
2463
|
+
* The method ensures multisampled render targets are resolved.
|
|
2464
|
+
*
|
|
2465
|
+
* @private
|
|
2466
|
+
* @param {RenderContext} renderContext - The render context.
|
|
2467
|
+
*/
|
|
2468
|
+
_resolveRenderTarget( renderContext ) {
|
|
2469
|
+
|
|
2470
|
+
const { gl, state } = this;
|
|
2471
|
+
|
|
2472
|
+
const renderTarget = renderContext.renderTarget;
|
|
2473
|
+
|
|
2474
|
+
if ( renderContext.textures !== null && renderTarget ) {
|
|
2475
|
+
|
|
2476
|
+
const renderTargetContextData = this.get( renderTarget );
|
|
2477
|
+
|
|
2478
|
+
if ( renderTarget.samples > 0 && this._useMultisampledExtension( renderTarget ) === false ) {
|
|
2479
|
+
|
|
2480
|
+
const fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ];
|
|
2481
|
+
|
|
2482
|
+
let mask = gl.COLOR_BUFFER_BIT;
|
|
2483
|
+
|
|
2484
|
+
if ( renderTarget.resolveDepthBuffer ) {
|
|
2485
|
+
|
|
2486
|
+
if ( renderTarget.depthBuffer ) mask |= gl.DEPTH_BUFFER_BIT;
|
|
2487
|
+
if ( renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer ) mask |= gl.STENCIL_BUFFER_BIT;
|
|
2488
|
+
|
|
2489
|
+
}
|
|
2490
|
+
|
|
2491
|
+
const msaaFrameBuffer = renderTargetContextData.msaaFrameBuffer;
|
|
2492
|
+
const msaaRenderbuffers = renderTargetContextData.msaaRenderbuffers;
|
|
2493
|
+
|
|
2494
|
+
const textures = renderContext.textures;
|
|
2495
|
+
const isMRT = textures.length > 1;
|
|
2496
|
+
|
|
2497
|
+
state.bindFramebuffer( gl.READ_FRAMEBUFFER, msaaFrameBuffer );
|
|
2498
|
+
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );
|
|
2499
|
+
|
|
2500
|
+
if ( isMRT ) {
|
|
2501
|
+
|
|
2502
|
+
// blitFramebuffer() can only copy/resolve the first color attachment of a framebuffer. When using MRT,
|
|
2503
|
+
// the engine temporarily removes all attachments and then configures each attachment for the resolve.
|
|
2504
|
+
|
|
2505
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
2506
|
+
|
|
2507
|
+
gl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, null );
|
|
2508
|
+
gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.TEXTURE_2D, null, 0 );
|
|
2509
|
+
|
|
2510
|
+
}
|
|
2511
|
+
|
|
2512
|
+
}
|
|
2513
|
+
|
|
2514
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
2515
|
+
|
|
2516
|
+
if ( isMRT ) {
|
|
2517
|
+
|
|
2518
|
+
// configure attachment for resolve
|
|
2519
|
+
|
|
2520
|
+
const { textureGPU } = this.get( textures[ i ] );
|
|
2521
|
+
|
|
2522
|
+
gl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, msaaRenderbuffers[ i ] );
|
|
2523
|
+
gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, textureGPU, 0 );
|
|
2524
|
+
|
|
2525
|
+
}
|
|
2526
|
+
|
|
2527
|
+
if ( renderContext.scissor ) {
|
|
2528
|
+
|
|
2529
|
+
const { x, y, width, height } = renderContext.scissorValue;
|
|
2530
|
+
|
|
2531
|
+
const viewY = renderContext.height - height - y;
|
|
2532
|
+
|
|
2533
|
+
gl.blitFramebuffer( x, viewY, x + width, viewY + height, x, viewY, x + width, viewY + height, mask, gl.NEAREST );
|
|
2534
|
+
|
|
2535
|
+
} else {
|
|
2536
|
+
|
|
2537
|
+
gl.blitFramebuffer( 0, 0, renderContext.width, renderContext.height, 0, 0, renderContext.width, renderContext.height, mask, gl.NEAREST );
|
|
2538
|
+
|
|
2539
|
+
}
|
|
2540
|
+
|
|
2541
|
+
}
|
|
2542
|
+
|
|
2543
|
+
if ( isMRT ) {
|
|
2544
|
+
|
|
2545
|
+
// restore attachments
|
|
2546
|
+
|
|
2547
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
2548
|
+
|
|
2549
|
+
const { textureGPU } = this.get( textures[ i ] );
|
|
2550
|
+
|
|
2551
|
+
gl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, msaaRenderbuffers[ i ] );
|
|
2552
|
+
gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.TEXTURE_2D, textureGPU, 0 );
|
|
2553
|
+
|
|
2554
|
+
}
|
|
2555
|
+
|
|
2556
|
+
}
|
|
2557
|
+
|
|
2558
|
+
if ( this._supportsInvalidateFramebuffer === true ) {
|
|
2559
|
+
|
|
2560
|
+
gl.invalidateFramebuffer( gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray );
|
|
2561
|
+
|
|
2562
|
+
}
|
|
2563
|
+
|
|
2564
|
+
} else if ( renderTarget.resolveDepthBuffer === false && renderTargetContextData.framebuffers ) {
|
|
2565
|
+
|
|
2566
|
+
const fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ];
|
|
2567
|
+
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );
|
|
2568
|
+
gl.invalidateFramebuffer( gl.DRAW_FRAMEBUFFER, renderTargetContextData.depthInvalidationArray );
|
|
2569
|
+
|
|
2570
|
+
}
|
|
2571
|
+
|
|
2572
|
+
}
|
|
2573
|
+
|
|
2574
|
+
}
|
|
2575
|
+
|
|
2546
2576
|
/**
|
|
2547
2577
|
* Returns `true` if the `WEBGL_multisampled_render_to_texture` extension
|
|
2548
2578
|
* should be used when MSAA is enabled.
|
|
@@ -2568,6 +2598,8 @@ class WebGLBackend extends Backend {
|
|
|
2568
2598
|
*/
|
|
2569
2599
|
dispose() {
|
|
2570
2600
|
|
|
2601
|
+
if ( this.textureUtils !== null ) this.textureUtils.dispose();
|
|
2602
|
+
|
|
2571
2603
|
const extension = this.extensions.get( 'WEBGL_lose_context' );
|
|
2572
2604
|
if ( extension ) extension.loseContext();
|
|
2573
2605
|
|