@needle-tools/three 0.169.20 → 0.183.2-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +5 -6
- package/build/three.cjs +54178 -56709
- package/build/three.core.js +59506 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +11645 -73012
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +648 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +53905 -51657
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +53884 -51814
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +5 -15
- package/examples/jsm/animation/AnimationClipCreator.js +58 -6
- package/examples/jsm/animation/CCDIKSolver.js +152 -45
- package/examples/jsm/capabilities/WebGL.js +28 -29
- package/examples/jsm/capabilities/WebGPU.js +19 -17
- package/examples/jsm/controls/ArcballControls.js +474 -178
- package/examples/jsm/controls/DragControls.js +100 -58
- package/examples/jsm/controls/FirstPersonControls.js +116 -6
- package/examples/jsm/controls/FlyControls.js +50 -2
- package/examples/jsm/controls/MapControls.js +96 -8
- package/examples/jsm/controls/OrbitControls.js +496 -57
- package/examples/jsm/controls/PointerLockControls.js +115 -22
- package/examples/jsm/controls/TrackballControls.js +166 -14
- package/examples/jsm/controls/TransformControls.js +336 -26
- package/examples/jsm/csm/CSM.js +232 -18
- package/examples/jsm/csm/CSMFrustum.js +61 -4
- package/examples/jsm/csm/CSMHelper.js +50 -0
- package/examples/jsm/csm/CSMShader.js +13 -1
- package/examples/jsm/csm/CSMShadowNode.js +599 -0
- package/examples/jsm/curves/CurveExtras.js +303 -31
- package/examples/jsm/curves/NURBSCurve.js +91 -16
- package/examples/jsm/curves/NURBSSurface.js +52 -6
- package/examples/jsm/curves/NURBSUtils.js +102 -112
- package/examples/jsm/curves/NURBSVolume.js +24 -4
- package/examples/jsm/effects/AnaglyphEffect.js +134 -7
- package/examples/jsm/effects/AsciiEffect.js +69 -22
- package/examples/jsm/effects/OutlineEffect.js +61 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +30 -0
- package/examples/jsm/effects/StereoEffect.js +31 -0
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/DebugEnvironment.js +50 -0
- package/examples/jsm/environments/RoomEnvironment.js +83 -42
- package/examples/jsm/exporters/DRACOExporter.js +56 -14
- package/examples/jsm/exporters/EXRExporter.js +40 -9
- package/examples/jsm/exporters/GLTFExporter.js +502 -169
- package/examples/jsm/exporters/OBJExporter.js +21 -1
- package/examples/jsm/exporters/PLYExporter.js +44 -12
- package/examples/jsm/exporters/STLExporter.js +27 -5
- package/examples/jsm/exporters/USDZExporter.js +781 -291
- package/examples/jsm/geometries/BoxLineGeometry.js +23 -0
- package/examples/jsm/geometries/ConvexGeometry.js +19 -0
- package/examples/jsm/geometries/DecalGeometry.js +91 -30
- package/examples/jsm/geometries/ParametricFunctions.js +100 -0
- package/examples/jsm/geometries/ParametricGeometry.js +38 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +68 -7
- package/examples/jsm/geometries/TeapotGeometry.js +23 -38
- package/examples/jsm/geometries/TextGeometry.js +48 -29
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeHelper.js +36 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +38 -1
- package/examples/jsm/helpers/OctreeHelper.js +36 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +60 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +36 -3
- package/examples/jsm/helpers/TextureHelper.js +28 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +214 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +61 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +47 -2
- package/examples/jsm/helpers/ViewHelper.js +181 -9
- package/examples/jsm/inspector/Inspector.js +487 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/tabs/Console.js +238 -0
- package/examples/jsm/inspector/tabs/Parameters.js +348 -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 +1975 -0
- package/examples/jsm/inspector/ui/Style.js +1613 -0
- package/examples/jsm/inspector/ui/Tab.js +233 -0
- package/examples/jsm/inspector/ui/Values.js +439 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +43 -12
- package/examples/jsm/interactive/InteractiveGroup.js +170 -52
- package/examples/jsm/interactive/SelectionBox.js +106 -9
- package/examples/jsm/interactive/SelectionHelper.js +76 -30
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +76 -58
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +42 -0
- package/examples/jsm/lights/LightProbeGenerator.js +44 -7
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +50 -14
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +16 -0
- package/examples/jsm/lines/Line2.js +41 -4
- package/examples/jsm/lines/LineGeometry.js +80 -2
- package/examples/jsm/lines/LineMaterial.js +105 -5
- package/examples/jsm/lines/LineSegments2.js +54 -4
- package/examples/jsm/lines/LineSegmentsGeometry.js +65 -8
- package/examples/jsm/lines/Wireframe.js +41 -4
- package/examples/jsm/lines/WireframeGeometry2.js +27 -2
- package/examples/jsm/lines/webgpu/Line2.js +28 -2
- package/examples/jsm/lines/webgpu/LineSegments2.js +59 -24
- package/examples/jsm/lines/webgpu/Wireframe.js +86 -0
- package/examples/jsm/loaders/3DMLoader.js +78 -6
- package/examples/jsm/loaders/3MFLoader.js +148 -7
- package/examples/jsm/loaders/AMFLoader.js +34 -14
- package/examples/jsm/loaders/BVHLoader.js +59 -12
- package/examples/jsm/loaders/ColladaLoader.js +61 -4027
- package/examples/jsm/loaders/DDSLoader.js +68 -1
- package/examples/jsm/loaders/DRACOLoader.js +146 -22
- package/examples/jsm/loaders/EXRLoader.js +255 -34
- package/examples/jsm/loaders/FBXLoader.js +80 -42
- package/examples/jsm/loaders/FontLoader.js +83 -6
- package/examples/jsm/loaders/GCodeLoader.js +71 -14
- package/examples/jsm/loaders/GLTFLoader.js +381 -263
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +52 -3
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/IESLoader.js +42 -0
- package/examples/jsm/loaders/KMZLoader.js +39 -6
- package/examples/jsm/loaders/KTX2Loader.js +124 -48
- package/examples/jsm/loaders/KTXLoader.js +31 -10
- package/examples/jsm/loaders/LDrawLoader.js +192 -145
- package/examples/jsm/loaders/LUT3dlLoader.js +47 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +46 -9
- package/examples/jsm/loaders/LUTImageLoader.js +79 -38
- package/examples/jsm/loaders/LWOLoader.js +54 -59
- package/examples/jsm/loaders/LottieLoader.js +54 -1
- package/examples/jsm/loaders/MD2Loader.js +37 -1
- package/examples/jsm/loaders/MDDLoader.js +57 -12
- package/examples/jsm/loaders/MTLLoader.js +60 -35
- package/examples/jsm/loaders/MaterialXLoader.js +268 -34
- package/examples/jsm/loaders/NRRDLoader.js +40 -8
- package/examples/jsm/loaders/OBJLoader.js +51 -2
- package/examples/jsm/loaders/PCDLoader.js +173 -21
- package/examples/jsm/loaders/PDBLoader.js +41 -2
- package/examples/jsm/loaders/PLYLoader.js +70 -39
- package/examples/jsm/loaders/PVRLoader.js +25 -6
- package/examples/jsm/loaders/RGBELoader.js +6 -438
- package/examples/jsm/loaders/STLLoader.js +48 -38
- package/examples/jsm/loaders/SVGLoader.js +119 -25
- package/examples/jsm/loaders/TDSLoader.js +92 -74
- package/examples/jsm/loaders/TGALoader.js +23 -2
- package/examples/jsm/loaders/TIFFLoader.js +23 -0
- package/examples/jsm/loaders/TTFLoader.js +50 -3
- package/examples/jsm/loaders/USDLoader.js +279 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -858
- package/examples/jsm/loaders/UltraHDRLoader.js +338 -166
- package/examples/jsm/loaders/VOXLoader.js +688 -87
- package/examples/jsm/loaders/VRMLLoader.js +121 -12
- package/examples/jsm/loaders/VTKLoader.js +77 -25
- package/examples/jsm/loaders/XYZLoader.js +36 -0
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +77 -77
- package/examples/jsm/loaders/usd/USDAParser.js +822 -0
- package/examples/jsm/loaders/usd/USDCParser.js +1852 -0
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +183 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +154 -0
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/Capsule.js +91 -14
- package/examples/jsm/math/ColorConverter.js +22 -0
- package/examples/jsm/math/ColorSpaces.js +74 -2
- package/examples/jsm/math/ConvexHull.js +517 -93
- package/examples/jsm/math/ImprovedNoise.js +32 -15
- package/examples/jsm/math/Lut.js +113 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +78 -13
- package/examples/jsm/math/OBB.js +141 -29
- package/examples/jsm/math/Octree.js +283 -7
- package/examples/jsm/math/SimplexNoise.js +68 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +45 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +96 -20
- package/examples/jsm/misc/Gyroscope.js +12 -0
- package/examples/jsm/misc/MD2Character.js +117 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +175 -11
- package/examples/jsm/misc/MorphAnimMesh.js +44 -0
- package/examples/jsm/misc/MorphBlendMesh.js +103 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +100 -54
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +322 -0
- package/examples/jsm/misc/RollerCoaster.js +57 -0
- package/examples/jsm/misc/TubePainter.js +437 -40
- package/examples/jsm/misc/Volume.js +123 -76
- package/examples/jsm/misc/VolumeSlice.js +95 -49
- package/examples/jsm/modifiers/CurveModifier.js +66 -38
- package/examples/jsm/modifiers/CurveModifierGPU.js +42 -19
- package/examples/jsm/modifiers/EdgeSplitModifier.js +20 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +24 -10
- package/examples/jsm/modifiers/TessellateModifier.js +35 -2
- package/examples/jsm/objects/GroundedSkybox.js +25 -6
- package/examples/jsm/objects/Lensflare.js +94 -2
- package/examples/jsm/objects/LensflareMesh.js +64 -10
- package/examples/jsm/objects/MarchingCubes.js +90 -5
- package/examples/jsm/objects/Reflector.js +76 -2
- package/examples/jsm/objects/ReflectorForSSRPass.js +41 -0
- package/examples/jsm/objects/Refractor.js +62 -0
- package/examples/jsm/objects/ShadowMesh.js +54 -4
- package/examples/jsm/objects/Sky.js +106 -16
- package/examples/jsm/objects/SkyMesh.js +211 -38
- package/examples/jsm/objects/Water.js +49 -8
- package/examples/jsm/objects/Water2.js +49 -7
- package/examples/jsm/objects/Water2Mesh.js +50 -9
- package/examples/jsm/objects/WaterMesh.js +136 -43
- package/examples/jsm/physics/AmmoPhysics.js +60 -7
- package/examples/jsm/physics/JoltPhysics.js +65 -12
- package/examples/jsm/physics/RapierPhysics.js +217 -21
- package/examples/jsm/postprocessing/AfterimagePass.js +110 -29
- package/examples/jsm/postprocessing/BloomPass.js +128 -26
- package/examples/jsm/postprocessing/BokehPass.js +99 -22
- package/examples/jsm/postprocessing/ClearPass.js +54 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +82 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +59 -10
- package/examples/jsm/postprocessing/EffectComposer.js +140 -6
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +54 -5
- package/examples/jsm/postprocessing/GTAOPass.js +202 -57
- package/examples/jsm/postprocessing/GlitchPass.js +86 -34
- package/examples/jsm/postprocessing/HalftonePass.js +65 -10
- package/examples/jsm/postprocessing/LUTPass.js +38 -8
- package/examples/jsm/postprocessing/MaskPass.js +91 -0
- package/examples/jsm/postprocessing/OutlinePass.js +272 -135
- package/examples/jsm/postprocessing/OutputPass.js +65 -14
- package/examples/jsm/postprocessing/Pass.js +100 -4
- package/examples/jsm/postprocessing/RenderPass.js +94 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +124 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +120 -21
- package/examples/jsm/postprocessing/SAOPass.js +128 -55
- package/examples/jsm/postprocessing/SMAAPass.js +106 -75
- package/examples/jsm/postprocessing/SSAARenderPass.js +118 -35
- package/examples/jsm/postprocessing/SSAOPass.js +173 -60
- package/examples/jsm/postprocessing/SSRPass.js +268 -53
- package/examples/jsm/postprocessing/SavePass.js +69 -16
- package/examples/jsm/postprocessing/ShaderPass.js +65 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +79 -24
- package/examples/jsm/postprocessing/TexturePass.js +72 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +168 -59
- package/examples/jsm/renderers/CSS2DRenderer.js +98 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +111 -7
- package/examples/jsm/renderers/Projector.js +288 -32
- package/examples/jsm/renderers/SVGRenderer.js +323 -61
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +3 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +5 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +12 -5
- package/examples/jsm/shaders/AfterimageShader.js +8 -3
- package/examples/jsm/shaders/BasicShader.js +8 -1
- package/examples/jsm/shaders/BleachBypassShader.js +10 -3
- package/examples/jsm/shaders/BlendShader.js +8 -1
- package/examples/jsm/shaders/BokehShader.js +9 -3
- package/examples/jsm/shaders/BokehShader2.js +11 -4
- package/examples/jsm/shaders/BrightnessContrastShader.js +10 -4
- package/examples/jsm/shaders/ColorCorrectionShader.js +8 -1
- package/examples/jsm/shaders/ColorifyShader.js +8 -1
- package/examples/jsm/shaders/ConvolutionShader.js +9 -38
- package/examples/jsm/shaders/CopyShader.js +8 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +10 -3
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +10 -1
- package/examples/jsm/shaders/DigitalGlitch.js +10 -7
- package/examples/jsm/shaders/DotScreenShader.js +8 -3
- package/examples/jsm/shaders/ExposureShader.js +8 -1
- package/examples/jsm/shaders/FXAAShader.js +233 -221
- package/examples/jsm/shaders/FilmShader.js +13 -0
- package/examples/jsm/shaders/FocusShader.js +8 -3
- package/examples/jsm/shaders/FreiChenShader.js +10 -3
- package/examples/jsm/shaders/GTAOShader.js +55 -45
- package/examples/jsm/shaders/GammaCorrectionShader.js +11 -2
- package/examples/jsm/shaders/HalftoneShader.js +24 -4
- package/examples/jsm/shaders/HorizontalBlurShader.js +12 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +9 -2
- package/examples/jsm/shaders/HueSaturationShader.js +10 -3
- package/examples/jsm/shaders/KaleidoShader.js +11 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +8 -4
- package/examples/jsm/shaders/LuminosityShader.js +8 -2
- package/examples/jsm/shaders/MirrorShader.js +10 -4
- package/examples/jsm/shaders/NormalMapShader.js +7 -2
- package/examples/jsm/shaders/OutputShader.js +19 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +30 -17
- package/examples/jsm/shaders/RGBShiftShader.js +8 -1
- package/examples/jsm/shaders/SAOShader.js +27 -5
- package/examples/jsm/shaders/SMAAShader.js +24 -1
- package/examples/jsm/shaders/SSAOShader.js +37 -6
- package/examples/jsm/shaders/SSRShader.js +32 -6
- package/examples/jsm/shaders/SepiaShader.js +8 -3
- package/examples/jsm/shaders/SobelOperatorShader.js +9 -3
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +13 -8
- package/examples/jsm/shaders/TechnicolorShader.js +10 -4
- package/examples/jsm/shaders/ToonShader.js +29 -6
- package/examples/jsm/shaders/TriangleBlurShader.js +9 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +19 -6
- package/examples/jsm/shaders/VelocityShader.js +8 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +9 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +8 -1
- package/examples/jsm/shaders/VignetteShader.js +8 -3
- package/examples/jsm/shaders/VolumeShader.js +11 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +11 -0
- package/examples/jsm/textures/FlakesTexture.js +14 -0
- package/examples/jsm/transpiler/AST.js +436 -31
- package/examples/jsm/transpiler/GLSLDecoder.js +380 -135
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -1
- package/examples/jsm/transpiler/TSLEncoder.js +363 -97
- package/examples/jsm/transpiler/Transpiler.js +50 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +839 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +244 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +549 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +282 -0
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/{src/nodes → examples/jsm/tsl}/display/BleachBypass.js +11 -4
- package/examples/jsm/tsl/display/BloomNode.js +534 -0
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +334 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +554 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +104 -0
- package/examples/jsm/tsl/display/FXAANode.js +365 -0
- package/examples/jsm/tsl/display/FilmNode.js +101 -0
- package/examples/jsm/tsl/display/GTAONode.js +571 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +389 -0
- package/examples/jsm/tsl/display/GodraysNode.js +624 -0
- package/examples/jsm/tsl/display/LensflareNode.js +279 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +109 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +762 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +89 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +335 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +96 -0
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +768 -0
- package/{src/nodes → examples/jsm/tsl}/display/SSAAPassNode.js +120 -49
- package/examples/jsm/tsl/display/SSGINode.js +642 -0
- package/examples/jsm/tsl/display/SSRNode.js +656 -0
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- package/{src/nodes → examples/jsm/tsl}/display/Sepia.js +9 -2
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +61 -19
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +192 -0
- package/{src/nodes → examples/jsm/tsl}/display/StereoPassNode.js +48 -12
- package/examples/jsm/tsl/display/TRAANode.js +726 -0
- package/examples/jsm/tsl/display/TransitionNode.js +141 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/hashBlur.js +54 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +442 -0
- package/examples/jsm/tsl/math/Bayer.js +73 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +70 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +91 -29
- package/examples/jsm/utils/CameraUtils.js +15 -6
- package/examples/jsm/utils/GeometryCompressionUtils.js +23 -30
- package/examples/jsm/utils/GeometryUtils.js +32 -27
- package/examples/jsm/utils/LDrawUtils.js +14 -5
- package/examples/jsm/utils/SceneOptimizer.js +458 -0
- package/examples/jsm/utils/SceneUtils.js +53 -3
- package/examples/jsm/utils/ShadowMapViewer.js +72 -33
- package/examples/jsm/utils/ShadowMapViewerGPU.js +61 -29
- package/examples/jsm/utils/SkeletonUtils.js +48 -0
- package/examples/jsm/utils/SortUtils.js +17 -5
- package/examples/jsm/utils/UVsDebug.js +12 -4
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +16 -0
- package/examples/jsm/utils/{TextureUtilsGPU.js → WebGPUTextureUtils.js} +20 -2
- package/examples/jsm/utils/WorkerPool.js +67 -2
- package/examples/jsm/webxr/ARButton.js +19 -0
- package/examples/jsm/webxr/OculusHandModel.js +84 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +148 -22
- package/examples/jsm/webxr/Text2D.js +20 -6
- package/examples/jsm/webxr/VRButton.js +31 -0
- package/examples/jsm/webxr/XRButton.js +23 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +94 -3
- package/examples/jsm/webxr/XREstimatedLight.js +35 -4
- package/examples/jsm/webxr/XRHandMeshModel.js +37 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +96 -6
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +44 -0
- package/examples/jsm/webxr/XRPlanes.js +18 -0
- package/package.json +29 -34
- package/src/Three.Core.js +198 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +641 -0
- package/src/Three.WebGPU.Nodes.js +14 -186
- package/src/Three.WebGPU.js +16 -186
- package/src/Three.js +2 -197
- package/src/animation/AnimationAction.js +263 -31
- package/src/animation/AnimationClip.js +162 -7
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +45 -21
- package/src/animation/AnimationUtils.js +163 -24
- package/src/animation/KeyframeTrack.js +191 -17
- package/src/animation/PropertyBinding.js +91 -16
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/Audio.js +386 -8
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +94 -13
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +37 -0
- package/src/cameras/Camera.js +61 -0
- package/src/cameras/CubeCamera.js +86 -0
- package/src/cameras/OrthographicCamera.js +110 -1
- package/src/cameras/PerspectiveCamera.js +174 -35
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +1546 -11
- package/src/core/BufferAttribute.js +417 -3
- package/src/core/BufferGeometry.js +407 -22
- package/src/core/Clock.js +69 -8
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/GLBufferAttribute.js +113 -2
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +141 -7
- package/src/core/InterleavedBufferAttribute.js +200 -2
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +673 -26
- package/src/core/Raycaster.js +136 -2
- package/src/core/RenderTarget.js +256 -27
- package/src/core/RenderTarget3D.js +48 -0
- package/src/core/Timer.js +184 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +89 -1
- package/src/extras/DataUtils.js +50 -9
- package/src/extras/Earcut.js +18 -779
- package/src/extras/ImageUtils.js +22 -14
- package/src/extras/PMREMGenerator.js +316 -67
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +101 -15
- package/src/extras/core/Curve.js +156 -55
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +34 -2
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +80 -4
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/BoxGeometry.js +39 -0
- package/src/geometries/CapsuleGeometry.js +196 -11
- package/src/geometries/CircleGeometry.js +41 -0
- package/src/geometries/ConeGeometry.js +39 -0
- package/src/geometries/CylinderGeometry.js +42 -2
- package/src/geometries/DodecahedronGeometry.js +33 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +148 -52
- package/src/geometries/IcosahedronGeometry.js +33 -0
- package/src/geometries/LatheGeometry.js +44 -3
- package/src/geometries/OctahedronGeometry.js +33 -0
- package/src/geometries/PlaneGeometry.js +35 -0
- package/src/geometries/PolyhedronGeometry.js +30 -1
- package/src/geometries/RingGeometry.js +37 -0
- package/src/geometries/ShapeGeometry.js +38 -0
- package/src/geometries/SphereGeometry.js +38 -0
- package/src/geometries/TetrahedronGeometry.js +33 -0
- package/src/geometries/TorusGeometry.js +44 -3
- package/src/geometries/TorusKnotGeometry.js +39 -0
- package/src/geometries/TubeGeometry.js +50 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +62 -5
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +103 -27
- package/src/helpers/DirectionalLightHelper.js +55 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +42 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -24
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +73 -7
- package/src/helpers/SpotLightHelper.js +43 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +70 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +42 -0
- package/src/lights/Light.js +37 -11
- package/src/lights/LightProbe.js +37 -9
- package/src/lights/LightShadow.js +202 -7
- package/src/lights/PointLight.js +74 -0
- package/src/lights/PointLightShadow.js +15 -80
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +124 -1
- package/src/lights/SpotLightShadow.js +33 -3
- package/src/lights/webgpu/IESSpotLight.js +22 -0
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/AnimationLoader.js +34 -2
- package/src/loaders/AudioLoader.js +34 -2
- package/src/loaders/BufferGeometryLoader.js +38 -13
- package/src/loaders/Cache.js +75 -2
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +45 -4
- package/src/loaders/FileLoader.js +85 -5
- package/src/loaders/ImageBitmapLoader.js +113 -11
- package/src/loaders/ImageLoader.js +85 -8
- package/src/loaders/Loader.js +144 -0
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +187 -0
- package/src/loaders/MaterialLoader.js +62 -3
- package/src/loaders/ObjectLoader.js +131 -31
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +68 -4
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -1
- package/src/materials/Material.js +502 -8
- package/src/materials/MeshBasicMaterial.js +168 -2
- package/src/materials/MeshDepthMaterial.js +94 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +283 -0
- package/src/materials/MeshMatcapMaterial.js +164 -0
- package/src/materials/MeshNormalMaterial.js +114 -0
- package/src/materials/MeshPhongMaterial.js +298 -0
- package/src/materials/MeshPhysicalMaterial.js +296 -4
- package/src/materials/MeshStandardMaterial.js +300 -2
- package/src/materials/MeshToonMaterial.js +219 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +234 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +158 -53
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +81 -6
- package/src/materials/nodes/MeshBasicNodeMaterial.js +59 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +23 -3
- package/src/materials/nodes/MeshNormalNodeMaterial.js +27 -4
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +276 -3
- package/src/materials/nodes/MeshSSSNodeMaterial.js +98 -10
- package/src/materials/nodes/MeshStandardNodeMaterial.js +83 -4
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +789 -74
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +180 -11
- package/src/materials/nodes/ShadowNodeMaterial.js +38 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +86 -23
- package/src/materials/nodes/VolumeNodeMaterial.js +57 -84
- package/src/materials/nodes/manager/NodeMaterialObserver.js +329 -12
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +271 -0
- package/src/math/Color.js +355 -11
- package/src/math/ColorManagement.js +158 -92
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +139 -5
- package/src/math/Frustum.js +108 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +221 -2
- package/src/math/MathUtils.js +408 -20
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +489 -94
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +322 -90
- package/src/math/Ray.js +162 -0
- package/src/math/Sphere.js +175 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +206 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -15
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +91 -88
- package/src/nodes/TSL.js +32 -38
- package/src/nodes/accessors/AccessorsUtils.js +37 -9
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +49 -14
- package/src/nodes/accessors/Bitangent.js +82 -13
- package/src/nodes/accessors/BufferAttributeNode.js +269 -8
- package/src/nodes/accessors/BufferNode.js +91 -2
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +400 -10
- package/src/nodes/accessors/ClippingNode.js +149 -45
- package/src/nodes/accessors/CubeTextureNode.js +137 -7
- package/src/nodes/accessors/InstanceNode.js +245 -40
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +88 -0
- package/src/nodes/accessors/MaterialNode.js +355 -13
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +52 -14
- package/src/nodes/accessors/ModelNode.js +117 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -39
- package/src/nodes/accessors/MorphNode.js +73 -26
- package/src/nodes/accessors/Normal.js +174 -19
- package/src/nodes/accessors/Object3DNode.js +146 -12
- package/src/nodes/accessors/PointUVNode.js +25 -0
- package/src/nodes/accessors/Position.js +119 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +190 -4
- package/src/nodes/accessors/ReferenceNode.js +223 -8
- package/src/nodes/accessors/ReflectVector.js +29 -3
- package/src/nodes/accessors/RendererReferenceNode.js +45 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +180 -43
- package/src/nodes/accessors/StorageBufferNode.js +278 -26
- package/src/nodes/accessors/StorageTextureNode.js +205 -12
- package/src/nodes/accessors/Tangent.js +48 -10
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +104 -11
- package/src/nodes/accessors/TextureBicubic.js +31 -4
- package/src/nodes/accessors/TextureNode.js +564 -52
- package/src/nodes/accessors/TextureSizeNode.js +42 -1
- package/src/nodes/accessors/UV.js +9 -1
- package/src/nodes/accessors/UniformArrayNode.js +226 -34
- package/src/nodes/accessors/UserDataNode.js +46 -2
- package/src/nodes/accessors/VelocityNode.js +93 -3
- package/src/nodes/accessors/VertexColorNode.js +39 -4
- package/src/nodes/code/CodeNode.js +101 -8
- package/src/nodes/code/ExpressionNode.js +29 -2
- package/src/nodes/code/FunctionCallNode.js +98 -10
- package/src/nodes/code/FunctionNode.js +69 -2
- package/src/nodes/core/ArrayNode.js +174 -0
- package/src/nodes/core/AssignNode.js +80 -9
- package/src/nodes/core/AttributeNode.js +47 -4
- package/src/nodes/core/BypassNode.js +47 -3
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +220 -14
- package/src/nodes/core/IndexNode.js +72 -7
- package/src/nodes/core/InputNode.js +50 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/IsolateNode.js +133 -0
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +113 -2
- package/src/nodes/core/Node.js +595 -36
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1840 -121
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +153 -24
- package/src/nodes/core/NodeFunction.js +48 -1
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +13 -1
- package/src/nodes/core/NodeUniform.js +53 -1
- package/src/nodes/core/NodeUtils.js +201 -51
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +47 -1
- package/src/nodes/core/OutputStructNode.js +54 -12
- package/src/nodes/core/ParameterNode.js +60 -2
- package/src/nodes/core/PropertyNode.js +286 -7
- package/src/nodes/core/StackNode.js +337 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +134 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +126 -6
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +85 -7
- package/src/nodes/core/UniformNode.js +163 -16
- package/src/nodes/core/VarNode.js +317 -10
- package/src/nodes/core/VaryingNode.js +115 -13
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +171 -0
- package/src/nodes/display/BumpMapNode.js +38 -2
- package/src/nodes/display/ColorAdjustment.js +118 -6
- package/src/nodes/display/ColorSpaceFunctions.js +22 -6
- package/src/nodes/display/ColorSpaceNode.js +97 -47
- package/src/nodes/display/FrontFacingNode.js +64 -7
- package/src/nodes/display/NormalMapNode.js +101 -54
- package/src/nodes/display/PassNode.js +690 -33
- package/src/nodes/display/RenderOutputNode.js +94 -4
- package/src/nodes/display/ScreenNode.js +138 -27
- package/src/nodes/display/ToneMappingFunctions.js +62 -10
- package/src/nodes/display/ToneMappingNode.js +88 -8
- package/src/nodes/display/ToonOutlinePassNode.js +84 -4
- package/src/nodes/display/ViewportDepthNode.js +227 -10
- package/src/nodes/display/ViewportDepthTextureNode.js +39 -5
- package/src/nodes/display/ViewportSharedTextureNode.js +35 -1
- package/src/nodes/display/ViewportTextureNode.js +171 -7
- package/src/nodes/fog/Fog.js +97 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +45 -1
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
- package/src/nodes/functions/BasicLightingModel.js +28 -6
- package/src/nodes/functions/PhongLightingModel.js +36 -6
- package/src/nodes/functions/PhysicalLightingModel.js +336 -91
- package/src/nodes/functions/ShadowMaskModel.js +30 -3
- package/src/nodes/functions/ToonLightingModel.js +21 -2
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/geometry/RangeNode.js +97 -8
- package/src/nodes/gpgpu/AtomicFunctionNode.js +198 -23
- package/src/nodes/gpgpu/BarrierNode.js +52 -3
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +135 -6
- package/src/nodes/gpgpu/ComputeNode.js +212 -16
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +143 -9
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +186 -399
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +12 -11
- package/src/nodes/lighting/EnvironmentNode.js +59 -19
- package/src/nodes/lighting/HemisphereLightNode.js +33 -2
- package/src/nodes/lighting/IESSpotLightNode.js +13 -1
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +11 -3
- package/src/nodes/lighting/LightingContextNode.js +52 -4
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +238 -35
- package/src/nodes/lighting/PointLightNode.js +60 -25
- package/src/nodes/lighting/PointShadowNode.js +325 -0
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/RectAreaLightNode.js +50 -14
- package/src/nodes/lighting/ShadowBaseNode.js +81 -0
- package/src/nodes/lighting/ShadowFilterNode.js +264 -0
- package/src/nodes/lighting/ShadowNode.js +867 -0
- package/src/nodes/lighting/SpotLightNode.js +99 -18
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +110 -21
- package/src/nodes/math/Hash.js +8 -0
- package/src/nodes/math/MathNode.js +820 -97
- package/src/nodes/math/MathUtils.js +47 -1
- package/src/nodes/math/OperatorNode.js +517 -84
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/TriNoise3D.js +17 -7
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +180 -23
- package/src/nodes/pmrem/PMREMUtils.js +114 -5
- package/src/nodes/procedural/Checker.js +8 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +10 -4
- package/src/nodes/tsl/TSLCore.js +732 -160
- package/src/nodes/utils/ArrayElementNode.js +55 -4
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +79 -2
- package/src/nodes/utils/DebugNode.js +83 -0
- package/src/nodes/utils/Discard.js +18 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +118 -0
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +91 -22
- package/src/nodes/utils/JoinNode.js +57 -4
- package/src/nodes/utils/LoopNode.js +193 -55
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -1
- package/src/nodes/utils/MemberNode.js +120 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +30 -1
- package/src/nodes/utils/PostProcessingUtils.js +154 -0
- package/src/nodes/utils/RTTNode.js +165 -9
- package/src/nodes/utils/ReflectorNode.js +407 -21
- package/src/nodes/utils/RemapNode.js +81 -2
- package/src/nodes/utils/RotateNode.js +41 -1
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +66 -3
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/SpriteUtils.js +16 -0
- package/src/nodes/utils/StorageArrayElementNode.js +56 -3
- package/src/nodes/utils/Timer.js +26 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/nodes/utils/UVUtils.js +48 -0
- package/src/nodes/utils/ViewportUtils.js +12 -0
- package/src/objects/BatchedMesh.js +798 -309
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +131 -2
- package/src/objects/LOD.js +99 -5
- package/src/objects/Line.js +90 -7
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +20 -1
- package/src/objects/Mesh.js +84 -0
- package/src/objects/Points.js +60 -0
- package/src/objects/Skeleton.js +120 -5
- package/src/objects/SkinnedMesh.js +102 -6
- package/src/objects/Sprite.js +65 -1
- package/src/renderers/WebGL3DRenderTarget.js +26 -0
- package/src/renderers/WebGLArrayRenderTarget.js +26 -0
- package/src/renderers/WebGLCubeRenderTarget.js +41 -5
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +1016 -278
- package/src/renderers/common/Animation.js +123 -14
- package/src/renderers/common/Attributes.js +41 -1
- package/src/renderers/common/Backend.js +623 -44
- package/src/renderers/common/Background.js +99 -16
- package/src/renderers/common/BindGroup.js +37 -2
- package/src/renderers/common/Binding.js +46 -0
- package/src/renderers/common/Bindings.js +211 -20
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +89 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +73 -10
- package/src/renderers/common/ClippingContext.js +172 -87
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +77 -7
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +163 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +81 -36
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Lighting.js +57 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +150 -7
- package/src/renderers/common/PostProcessing.js +22 -84
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +63 -6
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +40 -10
- package/src/renderers/common/RenderContext.js +219 -4
- package/src/renderers/common/RenderContexts.js +54 -17
- package/src/renderers/common/RenderList.js +233 -24
- package/src/renderers/common/RenderLists.js +46 -6
- package/src/renderers/common/RenderObject.js +548 -46
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +133 -15
- package/src/renderers/common/RenderPipeline.js +216 -6
- package/src/renderers/common/Renderer.js +2155 -332
- package/src/renderers/common/RendererUtils.js +200 -0
- package/src/renderers/common/SampledTexture.js +99 -39
- package/src/renderers/common/Sampler.js +148 -1
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageBuffer.js +38 -2
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +65 -0
- package/src/renderers/common/Textures.js +273 -57
- package/src/renderers/common/TimestampQueryPool.js +163 -0
- package/src/renderers/common/Uniform.js +233 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +235 -26
- package/src/renderers/common/XRManager.js +1677 -0
- package/src/renderers/common/XRRenderTarget.js +91 -0
- package/src/renderers/common/extras/PMREMGenerator.js +371 -108
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +95 -17
- package/src/renderers/common/nodes/NodeManager.js +852 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +84 -8
- package/src/renderers/common/nodes/NodeSampler.js +41 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +48 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +81 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/shaders/DFGLUTData.js +49 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +154 -59
- 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/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +230 -181
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk.js +3 -3
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +14 -2
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -5
- package/src/renderers/shaders/UniformsLib.js +2 -7
- package/src/renderers/shaders/UniformsUtils.js +21 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLBackground.js +30 -5
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +7 -14
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -35
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +267 -0
- package/src/renderers/webgl/WebGLProgram.js +87 -148
- package/src/renderers/webgl/WebGLPrograms.js +53 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +204 -28
- package/src/renderers/webgl/WebGLState.js +88 -56
- package/src/renderers/webgl/WebGLTextures.js +293 -59
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +7 -5
- package/src/renderers/webgl-fallback/WebGLBackend.js +1416 -293
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +785 -92
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +62 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +3 -3
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +584 -20
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +468 -80
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +396 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +72 -24
- package/src/renderers/webgpu/WebGPUBackend.js +1517 -428
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +31 -4
- package/src/renderers/webgpu/WebGPURenderer.js +55 -4
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +23 -16
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +37 -42
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +1335 -241
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +32 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +144 -20
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +460 -116
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -4
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +283 -69
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +225 -178
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +583 -191
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +310 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +150 -28
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +52 -7
- package/src/renderers/webxr/WebXRManager.js +275 -15
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +88 -0
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +79 -2
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -11
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +106 -4
- package/src/textures/Texture.js +488 -6
- package/src/textures/VideoFrameTexture.js +72 -0
- package/src/textures/VideoTexture.js +78 -6
- package/src/utils.js +322 -3
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -153
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/GLTFLoaderAnimationPointer.js +0 -729
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/RGBMLoader.js +0 -1081
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -432
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -144
- package/examples/jsm/misc/Timer.js +0 -128
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/GodRaysShader.js +0 -321
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/accessors/SceneNode.js +0 -55
- package/src/nodes/code/ScriptableNode.js +0 -505
- package/src/nodes/code/ScriptableValueNode.js +0 -170
- package/src/nodes/core/CacheNode.js +0 -50
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -158
- package/src/nodes/display/AnaglyphPassNode.js +0 -67
- package/src/nodes/display/AnamorphicNode.js +0 -151
- package/src/nodes/display/BlendMode.js +0 -54
- package/src/nodes/display/BloomNode.js +0 -341
- package/src/nodes/display/DenoiseNode.js +0 -204
- package/src/nodes/display/DepthOfFieldNode.js +0 -124
- package/src/nodes/display/DotScreenNode.js +0 -66
- package/src/nodes/display/FXAANode.js +0 -332
- package/src/nodes/display/FilmNode.js +0 -56
- package/src/nodes/display/GTAONode.js +0 -331
- package/src/nodes/display/GaussianBlurNode.js +0 -213
- package/src/nodes/display/Lut3DNode.js +0 -57
- package/src/nodes/display/MotionBlur.js +0 -25
- package/src/nodes/display/ParallaxBarrierPassNode.js +0 -58
- package/src/nodes/display/PixelationPassNode.js +0 -213
- package/src/nodes/display/PosterizeNode.js +0 -33
- package/src/nodes/display/RGBShiftNode.js +0 -53
- package/src/nodes/display/StereoCompositePassNode.js +0 -110
- package/src/nodes/display/TransitionNode.js +0 -80
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
- package/src/nodes/utils/EquirectUVNode.js +0 -36
- package/src/nodes/utils/MatcapUVNode.js +0 -33
- package/src/nodes/utils/OscNode.js +0 -85
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -45
- package/src/nodes/utils/TimerNode.js +0 -97
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -64
- package/src/renderers/common/nodes/Nodes.js +0 -534
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -136
|
@@ -4,19 +4,51 @@ import {
|
|
|
4
4
|
AdditiveBlending, SubtractiveBlending, MultiplyBlending, SubtractEquation, ReverseSubtractEquation,
|
|
5
5
|
ZeroFactor, OneFactor, SrcColorFactor, SrcAlphaFactor, SrcAlphaSaturateFactor, DstColorFactor, DstAlphaFactor,
|
|
6
6
|
OneMinusSrcColorFactor, OneMinusSrcAlphaFactor, OneMinusDstColorFactor, OneMinusDstAlphaFactor,
|
|
7
|
-
NeverDepth, AlwaysDepth, LessDepth, LessEqualDepth, EqualDepth, GreaterEqualDepth, GreaterDepth, NotEqualDepth
|
|
7
|
+
NeverDepth, AlwaysDepth, LessDepth, LessEqualDepth, EqualDepth, GreaterEqualDepth, GreaterDepth, NotEqualDepth,
|
|
8
|
+
MaterialBlending
|
|
8
9
|
} from '../../../constants.js';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
import { Vector4 } from '../../../math/Vector4.js';
|
|
11
|
+
import { error, ReversedDepthFuncs, warnOnce } from '../../../utils.js';
|
|
12
|
+
|
|
13
|
+
let equationToGL, factorToGL;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* A WebGL 2 backend utility module for managing the WebGL state.
|
|
17
|
+
*
|
|
18
|
+
* The major goal of this module is to reduce the number of state changes
|
|
19
|
+
* by caching the WEbGL state with a series of variables. In this way, the
|
|
20
|
+
* renderer only executes state change commands when necessary which
|
|
21
|
+
* improves the overall performance.
|
|
22
|
+
*
|
|
23
|
+
* @private
|
|
24
|
+
*/
|
|
12
25
|
class WebGLState {
|
|
13
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Constructs a new utility object.
|
|
29
|
+
*
|
|
30
|
+
* @param {WebGLBackend} backend - The WebGL 2 backend.
|
|
31
|
+
*/
|
|
14
32
|
constructor( backend ) {
|
|
15
33
|
|
|
34
|
+
/**
|
|
35
|
+
* A reference to the WebGL 2 backend.
|
|
36
|
+
*
|
|
37
|
+
* @type {WebGLBackend}
|
|
38
|
+
*/
|
|
16
39
|
this.backend = backend;
|
|
17
40
|
|
|
41
|
+
/**
|
|
42
|
+
* A reference to the rendering context.
|
|
43
|
+
*
|
|
44
|
+
* @type {WebGL2RenderingContext}
|
|
45
|
+
*/
|
|
18
46
|
this.gl = this.backend.gl;
|
|
19
47
|
|
|
48
|
+
// Below properties are intended to cache
|
|
49
|
+
// the WebGL state and are not explicitly
|
|
50
|
+
// documented for convenience reasons.
|
|
51
|
+
|
|
20
52
|
this.enabled = {};
|
|
21
53
|
this.currentFlipSided = null;
|
|
22
54
|
this.currentCullFace = null;
|
|
@@ -31,6 +63,7 @@ class WebGLState {
|
|
|
31
63
|
this.currentPolygonOffsetFactor = null;
|
|
32
64
|
this.currentPolygonOffsetUnits = null;
|
|
33
65
|
this.currentColorMask = null;
|
|
66
|
+
this.currentDepthReversed = false;
|
|
34
67
|
this.currentDepthFunc = null;
|
|
35
68
|
this.currentDepthMask = null;
|
|
36
69
|
this.currentStencilFunc = null;
|
|
@@ -41,6 +74,10 @@ class WebGLState {
|
|
|
41
74
|
this.currentStencilZPass = null;
|
|
42
75
|
this.currentStencilMask = null;
|
|
43
76
|
this.currentLineWidth = null;
|
|
77
|
+
this.currentClippingPlanes = 0;
|
|
78
|
+
|
|
79
|
+
this.currentVAO = null;
|
|
80
|
+
this.currentIndex = null;
|
|
44
81
|
|
|
45
82
|
this.currentBoundFramebuffers = {};
|
|
46
83
|
this.currentDrawbuffers = new WeakMap();
|
|
@@ -50,17 +87,18 @@ class WebGLState {
|
|
|
50
87
|
this.currentBoundTextures = {};
|
|
51
88
|
this.currentBoundBufferBases = {};
|
|
52
89
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
this._init( this.gl );
|
|
56
|
-
|
|
57
|
-
initialized = true;
|
|
58
|
-
|
|
59
|
-
}
|
|
90
|
+
this._init();
|
|
60
91
|
|
|
61
92
|
}
|
|
62
93
|
|
|
63
|
-
|
|
94
|
+
/**
|
|
95
|
+
* Inits the state of the utility.
|
|
96
|
+
*
|
|
97
|
+
* @private
|
|
98
|
+
*/
|
|
99
|
+
_init() {
|
|
100
|
+
|
|
101
|
+
const gl = this.gl;
|
|
64
102
|
|
|
65
103
|
// Store only WebGL constants here.
|
|
66
104
|
|
|
@@ -84,8 +122,24 @@ class WebGLState {
|
|
|
84
122
|
[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA
|
|
85
123
|
};
|
|
86
124
|
|
|
125
|
+
const scissorParam = gl.getParameter( gl.SCISSOR_BOX );
|
|
126
|
+
const viewportParam = gl.getParameter( gl.VIEWPORT );
|
|
127
|
+
|
|
128
|
+
this.currentScissor = new Vector4().fromArray( scissorParam );
|
|
129
|
+
this.currentViewport = new Vector4().fromArray( viewportParam );
|
|
130
|
+
|
|
131
|
+
this._tempVec4 = new Vector4();
|
|
132
|
+
|
|
87
133
|
}
|
|
88
134
|
|
|
135
|
+
/**
|
|
136
|
+
* Enables the given WebGL capability.
|
|
137
|
+
*
|
|
138
|
+
* This method caches the capability state so
|
|
139
|
+
* `gl.enable()` is only called when necessary.
|
|
140
|
+
*
|
|
141
|
+
* @param {GLenum} id - The capability to enable.
|
|
142
|
+
*/
|
|
89
143
|
enable( id ) {
|
|
90
144
|
|
|
91
145
|
const { enabled } = this;
|
|
@@ -99,6 +153,14 @@ class WebGLState {
|
|
|
99
153
|
|
|
100
154
|
}
|
|
101
155
|
|
|
156
|
+
/**
|
|
157
|
+
* Disables the given WebGL capability.
|
|
158
|
+
*
|
|
159
|
+
* This method caches the capability state so
|
|
160
|
+
* `gl.disable()` is only called when necessary.
|
|
161
|
+
*
|
|
162
|
+
* @param {GLenum} id - The capability to enable.
|
|
163
|
+
*/
|
|
102
164
|
disable( id ) {
|
|
103
165
|
|
|
104
166
|
const { enabled } = this;
|
|
@@ -112,6 +174,15 @@ class WebGLState {
|
|
|
112
174
|
|
|
113
175
|
}
|
|
114
176
|
|
|
177
|
+
/**
|
|
178
|
+
* Specifies whether polygons are front- or back-facing
|
|
179
|
+
* by setting the winding orientation.
|
|
180
|
+
*
|
|
181
|
+
* This method caches the state so `gl.frontFace()` is only
|
|
182
|
+
* called when necessary.
|
|
183
|
+
*
|
|
184
|
+
* @param {boolean} flipSided - Whether triangles flipped their sides or not.
|
|
185
|
+
*/
|
|
115
186
|
setFlipSided( flipSided ) {
|
|
116
187
|
|
|
117
188
|
if ( this.currentFlipSided !== flipSided ) {
|
|
@@ -134,6 +205,15 @@ class WebGLState {
|
|
|
134
205
|
|
|
135
206
|
}
|
|
136
207
|
|
|
208
|
+
/**
|
|
209
|
+
* Specifies whether or not front- and/or back-facing
|
|
210
|
+
* polygons can be culled.
|
|
211
|
+
*
|
|
212
|
+
* This method caches the state so `gl.cullFace()` is only
|
|
213
|
+
* called when necessary.
|
|
214
|
+
*
|
|
215
|
+
* @param {number} cullFace - Defines which polygons are candidates for culling.
|
|
216
|
+
*/
|
|
137
217
|
setCullFace( cullFace ) {
|
|
138
218
|
|
|
139
219
|
const { gl } = this;
|
|
@@ -170,6 +250,14 @@ class WebGLState {
|
|
|
170
250
|
|
|
171
251
|
}
|
|
172
252
|
|
|
253
|
+
/**
|
|
254
|
+
* Specifies the width of line primitives.
|
|
255
|
+
*
|
|
256
|
+
* This method caches the state so `gl.lineWidth()` is only
|
|
257
|
+
* called when necessary.
|
|
258
|
+
*
|
|
259
|
+
* @param {number} width - The line width.
|
|
260
|
+
*/
|
|
173
261
|
setLineWidth( width ) {
|
|
174
262
|
|
|
175
263
|
const { currentLineWidth, gl } = this;
|
|
@@ -184,7 +272,166 @@ class WebGLState {
|
|
|
184
272
|
|
|
185
273
|
}
|
|
186
274
|
|
|
275
|
+
setMRTBlending( textures, mrt, material ) {
|
|
276
|
+
|
|
277
|
+
const gl = this.gl;
|
|
278
|
+
const drawBuffersIndexedExt = this.backend.drawBuffersIndexedExt;
|
|
279
|
+
|
|
280
|
+
if ( ! drawBuffersIndexedExt ) {
|
|
281
|
+
|
|
282
|
+
warnOnce( 'WebGPURenderer: Multiple Render Targets (MRT) blending configuration is not fully supported in compatibility mode. The material blending will be used for all render targets.' );
|
|
283
|
+
|
|
284
|
+
return;
|
|
285
|
+
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
289
|
+
|
|
290
|
+
const texture = textures[ i ];
|
|
291
|
+
|
|
292
|
+
let blending = null;
|
|
187
293
|
|
|
294
|
+
if ( mrt !== null ) {
|
|
295
|
+
|
|
296
|
+
const blendMode = mrt.getBlendMode( texture.name );
|
|
297
|
+
|
|
298
|
+
if ( blendMode.blending === MaterialBlending ) {
|
|
299
|
+
|
|
300
|
+
// use material blending
|
|
301
|
+
blending = material;
|
|
302
|
+
|
|
303
|
+
} else if ( blendMode.blending !== NoBlending ) {
|
|
304
|
+
|
|
305
|
+
blending = blendMode;
|
|
306
|
+
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
} else {
|
|
310
|
+
|
|
311
|
+
// use material blending
|
|
312
|
+
blending = material;
|
|
313
|
+
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
if ( blending !== null ) {
|
|
317
|
+
|
|
318
|
+
this._setMRTBlendingIndex( i, blending );
|
|
319
|
+
|
|
320
|
+
} else {
|
|
321
|
+
|
|
322
|
+
// use opaque blending (no blending)
|
|
323
|
+
drawBuffersIndexedExt.blendFuncSeparateiOES( i, gl.ONE, gl.ZERO, gl.ONE, gl.ZERO );
|
|
324
|
+
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Applies blending configuration for a specific draw buffer index.
|
|
333
|
+
*
|
|
334
|
+
* @private
|
|
335
|
+
* @param {number} index - The draw buffer index.
|
|
336
|
+
* @param {Object} blending - The blending configuration (material or BlendMode).
|
|
337
|
+
*/
|
|
338
|
+
_setMRTBlendingIndex( index, blending ) {
|
|
339
|
+
|
|
340
|
+
const { gl } = this;
|
|
341
|
+
const drawBuffersIndexedExt = this.backend.drawBuffersIndexedExt;
|
|
342
|
+
|
|
343
|
+
const blendingType = blending.blending;
|
|
344
|
+
const blendSrc = blending.blendSrc;
|
|
345
|
+
const blendDst = blending.blendDst;
|
|
346
|
+
const blendEquation = blending.blendEquation;
|
|
347
|
+
const premultipliedAlpha = blending.premultipliedAlpha;
|
|
348
|
+
|
|
349
|
+
if ( blendingType === CustomBlending ) {
|
|
350
|
+
|
|
351
|
+
const blendSrcAlpha = blending.blendSrcAlpha !== null ? blending.blendSrcAlpha : blendSrc;
|
|
352
|
+
const blendDstAlpha = blending.blendDstAlpha !== null ? blending.blendDstAlpha : blendDst;
|
|
353
|
+
const blendEquationAlpha = blending.blendEquationAlpha !== null ? blending.blendEquationAlpha : blendEquation;
|
|
354
|
+
|
|
355
|
+
drawBuffersIndexedExt.blendEquationSeparateiOES( index, equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );
|
|
356
|
+
drawBuffersIndexedExt.blendFuncSeparateiOES( index, factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );
|
|
357
|
+
|
|
358
|
+
} else {
|
|
359
|
+
|
|
360
|
+
drawBuffersIndexedExt.blendEquationSeparateiOES( index, gl.FUNC_ADD, gl.FUNC_ADD );
|
|
361
|
+
|
|
362
|
+
if ( premultipliedAlpha ) {
|
|
363
|
+
|
|
364
|
+
switch ( blendingType ) {
|
|
365
|
+
|
|
366
|
+
case NormalBlending:
|
|
367
|
+
drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );
|
|
368
|
+
break;
|
|
369
|
+
|
|
370
|
+
case AdditiveBlending:
|
|
371
|
+
drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.ONE, gl.ONE, gl.ONE, gl.ONE );
|
|
372
|
+
break;
|
|
373
|
+
|
|
374
|
+
case SubtractiveBlending:
|
|
375
|
+
drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );
|
|
376
|
+
break;
|
|
377
|
+
|
|
378
|
+
case MultiplyBlending:
|
|
379
|
+
drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA, gl.ZERO, gl.ONE );
|
|
380
|
+
break;
|
|
381
|
+
|
|
382
|
+
default:
|
|
383
|
+
drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );
|
|
384
|
+
break;
|
|
385
|
+
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
} else {
|
|
389
|
+
|
|
390
|
+
switch ( blendingType ) {
|
|
391
|
+
|
|
392
|
+
case NormalBlending:
|
|
393
|
+
drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );
|
|
394
|
+
break;
|
|
395
|
+
|
|
396
|
+
case AdditiveBlending:
|
|
397
|
+
drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.SRC_ALPHA, gl.ONE, gl.ONE, gl.ONE );
|
|
398
|
+
break;
|
|
399
|
+
|
|
400
|
+
case SubtractiveBlending:
|
|
401
|
+
drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );
|
|
402
|
+
break;
|
|
403
|
+
|
|
404
|
+
case MultiplyBlending:
|
|
405
|
+
drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA, gl.ZERO, gl.ONE );
|
|
406
|
+
break;
|
|
407
|
+
|
|
408
|
+
default:
|
|
409
|
+
drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );
|
|
410
|
+
break;
|
|
411
|
+
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/**
|
|
421
|
+
* Defines the blending.
|
|
422
|
+
*
|
|
423
|
+
* This method caches the state so `gl.blendEquation()`, `gl.blendEquationSeparate()`,
|
|
424
|
+
* `gl.blendFunc()` and `gl.blendFuncSeparate()` are only called when necessary.
|
|
425
|
+
*
|
|
426
|
+
* @param {number} blending - The blending type.
|
|
427
|
+
* @param {number} blendEquation - The blending equation.
|
|
428
|
+
* @param {number} blendSrc - Only relevant for custom blending. The RGB source blending factor.
|
|
429
|
+
* @param {number} blendDst - Only relevant for custom blending. The RGB destination blending factor.
|
|
430
|
+
* @param {number} blendEquationAlpha - Only relevant for custom blending. The blending equation for alpha.
|
|
431
|
+
* @param {number} blendSrcAlpha - Only relevant for custom blending. The alpha source blending factor.
|
|
432
|
+
* @param {number} blendDstAlpha - Only relevant for custom blending. The alpha destination blending factor.
|
|
433
|
+
* @param {boolean} premultipliedAlpha - Whether premultiplied alpha is enabled or not.
|
|
434
|
+
*/
|
|
188
435
|
setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {
|
|
189
436
|
|
|
190
437
|
const { gl } = this;
|
|
@@ -239,11 +486,11 @@ class WebGLState {
|
|
|
239
486
|
break;
|
|
240
487
|
|
|
241
488
|
case MultiplyBlending:
|
|
242
|
-
gl.blendFuncSeparate( gl.
|
|
489
|
+
gl.blendFuncSeparate( gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA, gl.ZERO, gl.ONE );
|
|
243
490
|
break;
|
|
244
491
|
|
|
245
492
|
default:
|
|
246
|
-
|
|
493
|
+
error( 'WebGLState: Invalid blending: ', blending );
|
|
247
494
|
break;
|
|
248
495
|
|
|
249
496
|
}
|
|
@@ -257,19 +504,19 @@ class WebGLState {
|
|
|
257
504
|
break;
|
|
258
505
|
|
|
259
506
|
case AdditiveBlending:
|
|
260
|
-
gl.
|
|
507
|
+
gl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE, gl.ONE, gl.ONE );
|
|
261
508
|
break;
|
|
262
509
|
|
|
263
510
|
case SubtractiveBlending:
|
|
264
|
-
|
|
511
|
+
error( 'WebGLState: SubtractiveBlending requires material.premultipliedAlpha = true' );
|
|
265
512
|
break;
|
|
266
513
|
|
|
267
514
|
case MultiplyBlending:
|
|
268
|
-
|
|
515
|
+
error( 'WebGLState: MultiplyBlending requires material.premultipliedAlpha = true' );
|
|
269
516
|
break;
|
|
270
517
|
|
|
271
518
|
default:
|
|
272
|
-
|
|
519
|
+
error( 'WebGLState: Invalid blending: ', blending );
|
|
273
520
|
break;
|
|
274
521
|
|
|
275
522
|
}
|
|
@@ -321,6 +568,15 @@ class WebGLState {
|
|
|
321
568
|
|
|
322
569
|
}
|
|
323
570
|
|
|
571
|
+
/**
|
|
572
|
+
* Specifies whether colors can be written when rendering
|
|
573
|
+
* into a framebuffer or not.
|
|
574
|
+
*
|
|
575
|
+
* This method caches the state so `gl.colorMask()` is only
|
|
576
|
+
* called when necessary.
|
|
577
|
+
*
|
|
578
|
+
* @param {boolean} colorMask - The color mask.
|
|
579
|
+
*/
|
|
324
580
|
setColorMask( colorMask ) {
|
|
325
581
|
|
|
326
582
|
if ( this.currentColorMask !== colorMask ) {
|
|
@@ -332,6 +588,11 @@ class WebGLState {
|
|
|
332
588
|
|
|
333
589
|
}
|
|
334
590
|
|
|
591
|
+
/**
|
|
592
|
+
* Specifies whether the depth test is enabled or not.
|
|
593
|
+
*
|
|
594
|
+
* @param {boolean} depthTest - Whether the depth test is enabled or not.
|
|
595
|
+
*/
|
|
335
596
|
setDepthTest( depthTest ) {
|
|
336
597
|
|
|
337
598
|
const { gl } = this;
|
|
@@ -348,6 +609,43 @@ class WebGLState {
|
|
|
348
609
|
|
|
349
610
|
}
|
|
350
611
|
|
|
612
|
+
|
|
613
|
+
/**
|
|
614
|
+
* Configures the WebGL state to use a reversed depth buffer.
|
|
615
|
+
*
|
|
616
|
+
* @param {boolean} reversed - Whether the depth buffer is reversed or not.
|
|
617
|
+
*/
|
|
618
|
+
setReversedDepth( reversed ) {
|
|
619
|
+
|
|
620
|
+
if ( this.currentDepthReversed !== reversed ) {
|
|
621
|
+
|
|
622
|
+
const ext = this.backend.extensions.get( 'EXT_clip_control' );
|
|
623
|
+
|
|
624
|
+
if ( reversed ) {
|
|
625
|
+
|
|
626
|
+
ext.clipControlEXT( ext.LOWER_LEFT_EXT, ext.ZERO_TO_ONE_EXT );
|
|
627
|
+
|
|
628
|
+
} else {
|
|
629
|
+
|
|
630
|
+
ext.clipControlEXT( ext.LOWER_LEFT_EXT, ext.NEGATIVE_ONE_TO_ONE_EXT );
|
|
631
|
+
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
this.currentDepthReversed = reversed;
|
|
635
|
+
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
/**
|
|
641
|
+
* Specifies whether depth values can be written when rendering
|
|
642
|
+
* into a framebuffer or not.
|
|
643
|
+
*
|
|
644
|
+
* This method caches the state so `gl.depthMask()` is only
|
|
645
|
+
* called when necessary.
|
|
646
|
+
*
|
|
647
|
+
* @param {boolean} depthMask - The depth mask.
|
|
648
|
+
*/
|
|
351
649
|
setDepthMask( depthMask ) {
|
|
352
650
|
|
|
353
651
|
if ( this.currentDepthMask !== depthMask ) {
|
|
@@ -359,8 +657,18 @@ class WebGLState {
|
|
|
359
657
|
|
|
360
658
|
}
|
|
361
659
|
|
|
660
|
+
/**
|
|
661
|
+
* Specifies the depth compare function.
|
|
662
|
+
*
|
|
663
|
+
* This method caches the state so `gl.depthFunc()` is only
|
|
664
|
+
* called when necessary.
|
|
665
|
+
*
|
|
666
|
+
* @param {number} depthFunc - The depth compare function.
|
|
667
|
+
*/
|
|
362
668
|
setDepthFunc( depthFunc ) {
|
|
363
669
|
|
|
670
|
+
if ( this.currentDepthReversed ) depthFunc = ReversedDepthFuncs[ depthFunc ];
|
|
671
|
+
|
|
364
672
|
if ( this.currentDepthFunc !== depthFunc ) {
|
|
365
673
|
|
|
366
674
|
const { gl } = this;
|
|
@@ -419,6 +727,80 @@ class WebGLState {
|
|
|
419
727
|
|
|
420
728
|
}
|
|
421
729
|
|
|
730
|
+
/**
|
|
731
|
+
* Specifies the scissor box.
|
|
732
|
+
*
|
|
733
|
+
* @param {number} x - The x-coordinate of the lower left corner of the viewport.
|
|
734
|
+
* @param {number} y - The y-coordinate of the lower left corner of the viewport.
|
|
735
|
+
* @param {number} width - The width of the viewport.
|
|
736
|
+
* @param {number} height - The height of the viewport.
|
|
737
|
+
*
|
|
738
|
+
*/
|
|
739
|
+
scissor( x, y, width, height ) {
|
|
740
|
+
|
|
741
|
+
const scissor = this._tempVec4.set( x, y, width, height );
|
|
742
|
+
|
|
743
|
+
if ( this.currentScissor.equals( scissor ) === false ) {
|
|
744
|
+
|
|
745
|
+
const { gl } = this;
|
|
746
|
+
|
|
747
|
+
gl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );
|
|
748
|
+
this.currentScissor.copy( scissor );
|
|
749
|
+
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
/**
|
|
755
|
+
* Specifies the viewport.
|
|
756
|
+
*
|
|
757
|
+
* @param {number} x - The x-coordinate of the lower left corner of the viewport.
|
|
758
|
+
* @param {number} y - The y-coordinate of the lower left corner of the viewport.
|
|
759
|
+
* @param {number} width - The width of the viewport.
|
|
760
|
+
* @param {number} height - The height of the viewport.
|
|
761
|
+
*
|
|
762
|
+
*/
|
|
763
|
+
viewport( x, y, width, height ) {
|
|
764
|
+
|
|
765
|
+
const viewport = this._tempVec4.set( x, y, width, height );
|
|
766
|
+
|
|
767
|
+
if ( this.currentViewport.equals( viewport ) === false ) {
|
|
768
|
+
|
|
769
|
+
const { gl } = this;
|
|
770
|
+
|
|
771
|
+
gl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );
|
|
772
|
+
this.currentViewport.copy( viewport );
|
|
773
|
+
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
/**
|
|
779
|
+
* Defines the scissor test.
|
|
780
|
+
*
|
|
781
|
+
* @param {boolean} boolean - Whether the scissor test should be enabled or not.
|
|
782
|
+
*/
|
|
783
|
+
setScissorTest( boolean ) {
|
|
784
|
+
|
|
785
|
+
const gl = this.gl;
|
|
786
|
+
|
|
787
|
+
if ( boolean ) {
|
|
788
|
+
|
|
789
|
+
this.enable( gl.SCISSOR_TEST );
|
|
790
|
+
|
|
791
|
+
} else {
|
|
792
|
+
|
|
793
|
+
this.disable( gl.SCISSOR_TEST );
|
|
794
|
+
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
/**
|
|
800
|
+
* Specifies whether the stencil test is enabled or not.
|
|
801
|
+
*
|
|
802
|
+
* @param {boolean} stencilTest - Whether the stencil test is enabled or not.
|
|
803
|
+
*/
|
|
422
804
|
setStencilTest( stencilTest ) {
|
|
423
805
|
|
|
424
806
|
const { gl } = this;
|
|
@@ -435,6 +817,15 @@ class WebGLState {
|
|
|
435
817
|
|
|
436
818
|
}
|
|
437
819
|
|
|
820
|
+
/**
|
|
821
|
+
* Specifies whether stencil values can be written when rendering
|
|
822
|
+
* into a framebuffer or not.
|
|
823
|
+
*
|
|
824
|
+
* This method caches the state so `gl.stencilMask()` is only
|
|
825
|
+
* called when necessary.
|
|
826
|
+
*
|
|
827
|
+
* @param {boolean} stencilMask - The stencil mask.
|
|
828
|
+
*/
|
|
438
829
|
setStencilMask( stencilMask ) {
|
|
439
830
|
|
|
440
831
|
if ( this.currentStencilMask !== stencilMask ) {
|
|
@@ -446,6 +837,16 @@ class WebGLState {
|
|
|
446
837
|
|
|
447
838
|
}
|
|
448
839
|
|
|
840
|
+
/**
|
|
841
|
+
* Specifies whether the stencil test functions.
|
|
842
|
+
*
|
|
843
|
+
* This method caches the state so `gl.stencilFunc()` is only
|
|
844
|
+
* called when necessary.
|
|
845
|
+
*
|
|
846
|
+
* @param {number} stencilFunc - The stencil compare function.
|
|
847
|
+
* @param {number} stencilRef - The reference value for the stencil test.
|
|
848
|
+
* @param {number} stencilMask - A bit-wise mask that is used to AND the reference value and the stored stencil value when the test is done.
|
|
849
|
+
*/
|
|
449
850
|
setStencilFunc( stencilFunc, stencilRef, stencilMask ) {
|
|
450
851
|
|
|
451
852
|
if ( this.currentStencilFunc !== stencilFunc ||
|
|
@@ -462,6 +863,17 @@ class WebGLState {
|
|
|
462
863
|
|
|
463
864
|
}
|
|
464
865
|
|
|
866
|
+
/**
|
|
867
|
+
* Specifies whether the stencil test operation.
|
|
868
|
+
*
|
|
869
|
+
* This method caches the state so `gl.stencilOp()` is only
|
|
870
|
+
* called when necessary.
|
|
871
|
+
*
|
|
872
|
+
* @param {number} stencilFail - The function to use when the stencil test fails.
|
|
873
|
+
* @param {number} stencilZFail - The function to use when the stencil test passes, but the depth test fail.
|
|
874
|
+
* @param {number} stencilZPass - The function to use when both the stencil test and the depth test pass,
|
|
875
|
+
* or when the stencil test passes and there is no depth buffer or depth testing is disabled.
|
|
876
|
+
*/
|
|
465
877
|
setStencilOp( stencilFail, stencilZFail, stencilZPass ) {
|
|
466
878
|
|
|
467
879
|
if ( this.currentStencilFail !== stencilFail ||
|
|
@@ -478,7 +890,14 @@ class WebGLState {
|
|
|
478
890
|
|
|
479
891
|
}
|
|
480
892
|
|
|
481
|
-
|
|
893
|
+
/**
|
|
894
|
+
* Configures the WebGL state for the given material.
|
|
895
|
+
*
|
|
896
|
+
* @param {Material} material - The material to configure the state for.
|
|
897
|
+
* @param {number} frontFaceCW - Whether the front faces are counter-clockwise or not.
|
|
898
|
+
* @param {number} hardwareClippingPlanes - The number of hardware clipping planes.
|
|
899
|
+
*/
|
|
900
|
+
setMaterial( material, frontFaceCW, hardwareClippingPlanes ) {
|
|
482
901
|
|
|
483
902
|
const { gl } = this;
|
|
484
903
|
|
|
@@ -512,12 +931,46 @@ class WebGLState {
|
|
|
512
931
|
|
|
513
932
|
this.setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );
|
|
514
933
|
|
|
515
|
-
material.alphaToCoverage === true && this.backend.renderer.
|
|
934
|
+
material.alphaToCoverage === true && this.backend.renderer.currentSamples > 0
|
|
516
935
|
? this.enable( gl.SAMPLE_ALPHA_TO_COVERAGE )
|
|
517
936
|
: this.disable( gl.SAMPLE_ALPHA_TO_COVERAGE );
|
|
518
937
|
|
|
938
|
+
if ( hardwareClippingPlanes > 0 ) {
|
|
939
|
+
|
|
940
|
+
if ( this.currentClippingPlanes !== hardwareClippingPlanes ) {
|
|
941
|
+
|
|
942
|
+
const CLIP_DISTANCE0_WEBGL = 0x3000;
|
|
943
|
+
|
|
944
|
+
for ( let i = 0; i < 8; i ++ ) {
|
|
945
|
+
|
|
946
|
+
if ( i < hardwareClippingPlanes ) {
|
|
947
|
+
|
|
948
|
+
this.enable( CLIP_DISTANCE0_WEBGL + i );
|
|
949
|
+
|
|
950
|
+
} else {
|
|
951
|
+
|
|
952
|
+
this.disable( CLIP_DISTANCE0_WEBGL + i );
|
|
953
|
+
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
}
|
|
961
|
+
|
|
519
962
|
}
|
|
520
963
|
|
|
964
|
+
/**
|
|
965
|
+
* Specifies the polygon offset.
|
|
966
|
+
*
|
|
967
|
+
* This method caches the state so `gl.polygonOffset()` is only
|
|
968
|
+
* called when necessary.
|
|
969
|
+
*
|
|
970
|
+
* @param {boolean} polygonOffset - Whether polygon offset is enabled or not.
|
|
971
|
+
* @param {number} factor - The scale factor for the variable depth offset for each polygon.
|
|
972
|
+
* @param {number} units - The multiplier by which an implementation-specific value is multiplied with to create a constant depth offset.
|
|
973
|
+
*/
|
|
521
974
|
setPolygonOffset( polygonOffset, factor, units ) {
|
|
522
975
|
|
|
523
976
|
const { gl } = this;
|
|
@@ -543,6 +996,15 @@ class WebGLState {
|
|
|
543
996
|
|
|
544
997
|
}
|
|
545
998
|
|
|
999
|
+
/**
|
|
1000
|
+
* Defines the usage of the given WebGL program.
|
|
1001
|
+
*
|
|
1002
|
+
* This method caches the state so `gl.useProgram()` is only
|
|
1003
|
+
* called when necessary.
|
|
1004
|
+
*
|
|
1005
|
+
* @param {WebGLProgram} program - The WebGL program to use.
|
|
1006
|
+
* @return {boolean} Whether a program change has been executed or not.
|
|
1007
|
+
*/
|
|
546
1008
|
useProgram( program ) {
|
|
547
1009
|
|
|
548
1010
|
if ( this.currentProgram !== program ) {
|
|
@@ -559,9 +1021,66 @@ class WebGLState {
|
|
|
559
1021
|
|
|
560
1022
|
}
|
|
561
1023
|
|
|
1024
|
+
/**
|
|
1025
|
+
* Sets the vertex state by binding the given VAO and element buffer.
|
|
1026
|
+
*
|
|
1027
|
+
* @param {WebGLVertexArrayObject} vao - The VAO.
|
|
1028
|
+
* @param {?WebGLBuffer} indexBuffer - The index buffer.
|
|
1029
|
+
* @return {boolean} Whether a vertex state has been changed or not.
|
|
1030
|
+
*/
|
|
1031
|
+
setVertexState( vao, indexBuffer = null ) {
|
|
1032
|
+
|
|
1033
|
+
const gl = this.gl;
|
|
1034
|
+
|
|
1035
|
+
if ( this.currentVAO !== vao || this.currentIndex !== indexBuffer ) {
|
|
1036
|
+
|
|
1037
|
+
gl.bindVertexArray( vao );
|
|
1038
|
+
|
|
1039
|
+
if ( indexBuffer !== null ) {
|
|
1040
|
+
|
|
1041
|
+
gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, indexBuffer );
|
|
1042
|
+
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
this.currentVAO = vao;
|
|
1046
|
+
this.currentIndex = indexBuffer;
|
|
1047
|
+
|
|
1048
|
+
return true;
|
|
1049
|
+
|
|
1050
|
+
}
|
|
1051
|
+
|
|
1052
|
+
return false;
|
|
1053
|
+
|
|
1054
|
+
}
|
|
1055
|
+
|
|
1056
|
+
/**
|
|
1057
|
+
* Resets the vertex array state by resetting the VAO and element buffer.
|
|
1058
|
+
*/
|
|
1059
|
+
resetVertexState() {
|
|
1060
|
+
|
|
1061
|
+
const gl = this.gl;
|
|
1062
|
+
|
|
1063
|
+
gl.bindVertexArray( null );
|
|
1064
|
+
gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, null );
|
|
1065
|
+
|
|
1066
|
+
this.currentVAO = null;
|
|
1067
|
+
this.currentIndex = null;
|
|
1068
|
+
|
|
1069
|
+
}
|
|
1070
|
+
|
|
562
1071
|
// framebuffer
|
|
563
1072
|
|
|
564
1073
|
|
|
1074
|
+
/**
|
|
1075
|
+
* Binds the given framebuffer.
|
|
1076
|
+
*
|
|
1077
|
+
* This method caches the state so `gl.bindFramebuffer()` is only
|
|
1078
|
+
* called when necessary.
|
|
1079
|
+
*
|
|
1080
|
+
* @param {number} target - The binding point (target).
|
|
1081
|
+
* @param {WebGLFramebuffer} framebuffer - The WebGL framebuffer to bind.
|
|
1082
|
+
* @return {boolean} Whether a bind has been executed or not.
|
|
1083
|
+
*/
|
|
565
1084
|
bindFramebuffer( target, framebuffer ) {
|
|
566
1085
|
|
|
567
1086
|
const { gl, currentBoundFramebuffers } = this;
|
|
@@ -594,6 +1113,16 @@ class WebGLState {
|
|
|
594
1113
|
|
|
595
1114
|
}
|
|
596
1115
|
|
|
1116
|
+
/**
|
|
1117
|
+
* Defines draw buffers to which fragment colors are written into.
|
|
1118
|
+
* Configures the MRT setup of custom framebuffers.
|
|
1119
|
+
*
|
|
1120
|
+
* This method caches the state so `gl.drawBuffers()` is only
|
|
1121
|
+
* called when necessary.
|
|
1122
|
+
*
|
|
1123
|
+
* @param {RenderContext} renderContext - The render context.
|
|
1124
|
+
* @param {WebGLFramebuffer} framebuffer - The WebGL framebuffer.
|
|
1125
|
+
*/
|
|
597
1126
|
drawBuffers( renderContext, framebuffer ) {
|
|
598
1127
|
|
|
599
1128
|
const { gl } = this;
|
|
@@ -654,6 +1183,14 @@ class WebGLState {
|
|
|
654
1183
|
|
|
655
1184
|
// texture
|
|
656
1185
|
|
|
1186
|
+
/**
|
|
1187
|
+
* Makes the given texture unit active.
|
|
1188
|
+
*
|
|
1189
|
+
* This method caches the state so `gl.activeTexture()` is only
|
|
1190
|
+
* called when necessary.
|
|
1191
|
+
*
|
|
1192
|
+
* @param {number} webglSlot - The texture unit to make active.
|
|
1193
|
+
*/
|
|
657
1194
|
activeTexture( webglSlot ) {
|
|
658
1195
|
|
|
659
1196
|
const { gl, currentTextureSlot, maxTextures } = this;
|
|
@@ -669,6 +1206,16 @@ class WebGLState {
|
|
|
669
1206
|
|
|
670
1207
|
}
|
|
671
1208
|
|
|
1209
|
+
/**
|
|
1210
|
+
* Binds the given WebGL texture to a target.
|
|
1211
|
+
*
|
|
1212
|
+
* This method caches the state so `gl.bindTexture()` is only
|
|
1213
|
+
* called when necessary.
|
|
1214
|
+
*
|
|
1215
|
+
* @param {number} webglType - The binding point (target).
|
|
1216
|
+
* @param {WebGLTexture} webglTexture - The WebGL texture to bind.
|
|
1217
|
+
* @param {number} webglSlot - The texture.
|
|
1218
|
+
*/
|
|
672
1219
|
bindTexture( webglType, webglTexture, webglSlot ) {
|
|
673
1220
|
|
|
674
1221
|
const { gl, currentTextureSlot, currentBoundTextures, maxTextures } = this;
|
|
@@ -714,6 +1261,17 @@ class WebGLState {
|
|
|
714
1261
|
|
|
715
1262
|
}
|
|
716
1263
|
|
|
1264
|
+
/**
|
|
1265
|
+
* Binds a given WebGL buffer to a given binding point (target) at a given index.
|
|
1266
|
+
*
|
|
1267
|
+
* This method caches the state so `gl.bindBufferBase()` is only
|
|
1268
|
+
* called when necessary.
|
|
1269
|
+
*
|
|
1270
|
+
* @param {number} target - The target for the bind operation.
|
|
1271
|
+
* @param {number} index - The index of the target.
|
|
1272
|
+
* @param {WebGLBuffer} buffer - The WebGL buffer.
|
|
1273
|
+
* @return {boolean} Whether a bind has been executed or not.
|
|
1274
|
+
*/
|
|
717
1275
|
bindBufferBase( target, index, buffer ) {
|
|
718
1276
|
|
|
719
1277
|
const { gl } = this;
|
|
@@ -734,6 +1292,12 @@ class WebGLState {
|
|
|
734
1292
|
}
|
|
735
1293
|
|
|
736
1294
|
|
|
1295
|
+
/**
|
|
1296
|
+
* Unbinds the current bound texture.
|
|
1297
|
+
*
|
|
1298
|
+
* This method caches the state so `gl.bindTexture()` is only
|
|
1299
|
+
* called when necessary.
|
|
1300
|
+
*/
|
|
737
1301
|
unbindTexture() {
|
|
738
1302
|
|
|
739
1303
|
const { gl, currentTextureSlot, currentBoundTextures } = this;
|