@plastic-software/three 0.167.3 → 0.174.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 +1 -1
- package/build/three.cjs +36277 -24023
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46743
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50670
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- 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/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- 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 +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- 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 +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- 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/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- 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 +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- 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 +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/points.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- 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/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
|
@@ -6,17 +6,47 @@ import {
|
|
|
6
6
|
OneMinusSrcColorFactor, OneMinusSrcAlphaFactor, OneMinusDstColorFactor, OneMinusDstAlphaFactor,
|
|
7
7
|
NeverDepth, AlwaysDepth, LessDepth, LessEqualDepth, EqualDepth, GreaterEqualDepth, GreaterDepth, NotEqualDepth
|
|
8
8
|
} from '../../../constants.js';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
import { Vector4 } from '../../../math/Vector4.js';
|
|
10
|
+
|
|
11
|
+
let equationToGL, factorToGL;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* A WebGL 2 backend utility module for managing the WebGL state.
|
|
15
|
+
*
|
|
16
|
+
* The major goal of this module is to reduce the number of state changes
|
|
17
|
+
* by caching the WEbGL state with a series of variables. In this way, the
|
|
18
|
+
* renderer only executes state change commands when necessary which
|
|
19
|
+
* improves the overall performance.
|
|
20
|
+
*
|
|
21
|
+
* @private
|
|
22
|
+
*/
|
|
12
23
|
class WebGLState {
|
|
13
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a new utility object.
|
|
27
|
+
*
|
|
28
|
+
* @param {WebGLBackend} backend - The WebGL 2 backend.
|
|
29
|
+
*/
|
|
14
30
|
constructor( backend ) {
|
|
15
31
|
|
|
32
|
+
/**
|
|
33
|
+
* A reference to the WebGL 2 backend.
|
|
34
|
+
*
|
|
35
|
+
* @type {WebGLBackend}
|
|
36
|
+
*/
|
|
16
37
|
this.backend = backend;
|
|
17
38
|
|
|
39
|
+
/**
|
|
40
|
+
* A reference to the rendering context.
|
|
41
|
+
*
|
|
42
|
+
* @type {WebGL2RenderingContext}
|
|
43
|
+
*/
|
|
18
44
|
this.gl = this.backend.gl;
|
|
19
45
|
|
|
46
|
+
// Below properties are intended to cache
|
|
47
|
+
// the WebGL state and are not explicitly
|
|
48
|
+
// documented for convenience reasons.
|
|
49
|
+
|
|
20
50
|
this.enabled = {};
|
|
21
51
|
this.currentFlipSided = null;
|
|
22
52
|
this.currentCullFace = null;
|
|
@@ -41,6 +71,10 @@ class WebGLState {
|
|
|
41
71
|
this.currentStencilZPass = null;
|
|
42
72
|
this.currentStencilMask = null;
|
|
43
73
|
this.currentLineWidth = null;
|
|
74
|
+
this.currentClippingPlanes = 0;
|
|
75
|
+
|
|
76
|
+
this.currentVAO = null;
|
|
77
|
+
this.currentIndex = null;
|
|
44
78
|
|
|
45
79
|
this.currentBoundFramebuffers = {};
|
|
46
80
|
this.currentDrawbuffers = new WeakMap();
|
|
@@ -48,18 +82,21 @@ class WebGLState {
|
|
|
48
82
|
this.maxTextures = this.gl.getParameter( this.gl.MAX_TEXTURE_IMAGE_UNITS );
|
|
49
83
|
this.currentTextureSlot = null;
|
|
50
84
|
this.currentBoundTextures = {};
|
|
85
|
+
this.currentBoundBufferBases = {};
|
|
51
86
|
|
|
52
|
-
if ( initialized === false ) {
|
|
53
|
-
|
|
54
|
-
this._init( this.gl );
|
|
55
|
-
|
|
56
|
-
initialized = true;
|
|
57
87
|
|
|
58
|
-
|
|
88
|
+
this._init();
|
|
59
89
|
|
|
60
90
|
}
|
|
61
91
|
|
|
62
|
-
|
|
92
|
+
/**
|
|
93
|
+
* Inits the state of the utility.
|
|
94
|
+
*
|
|
95
|
+
* @private
|
|
96
|
+
*/
|
|
97
|
+
_init() {
|
|
98
|
+
|
|
99
|
+
const gl = this.gl;
|
|
63
100
|
|
|
64
101
|
// Store only WebGL constants here.
|
|
65
102
|
|
|
@@ -83,8 +120,24 @@ class WebGLState {
|
|
|
83
120
|
[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA
|
|
84
121
|
};
|
|
85
122
|
|
|
123
|
+
const scissorParam = gl.getParameter( gl.SCISSOR_BOX );
|
|
124
|
+
const viewportParam = gl.getParameter( gl.VIEWPORT );
|
|
125
|
+
|
|
126
|
+
this.currentScissor = new Vector4().fromArray( scissorParam );
|
|
127
|
+
this.currentViewport = new Vector4().fromArray( viewportParam );
|
|
128
|
+
|
|
129
|
+
this._tempVec4 = new Vector4();
|
|
130
|
+
|
|
86
131
|
}
|
|
87
132
|
|
|
133
|
+
/**
|
|
134
|
+
* Enables the given WebGL capability.
|
|
135
|
+
*
|
|
136
|
+
* This method caches the capability state so
|
|
137
|
+
* `gl.enable()` is only called when necessary.
|
|
138
|
+
*
|
|
139
|
+
* @param {GLenum} id - The capability to enable.
|
|
140
|
+
*/
|
|
88
141
|
enable( id ) {
|
|
89
142
|
|
|
90
143
|
const { enabled } = this;
|
|
@@ -98,6 +151,14 @@ class WebGLState {
|
|
|
98
151
|
|
|
99
152
|
}
|
|
100
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Disables the given WebGL capability.
|
|
156
|
+
*
|
|
157
|
+
* This method caches the capability state so
|
|
158
|
+
* `gl.disable()` is only called when necessary.
|
|
159
|
+
*
|
|
160
|
+
* @param {GLenum} id - The capability to enable.
|
|
161
|
+
*/
|
|
101
162
|
disable( id ) {
|
|
102
163
|
|
|
103
164
|
const { enabled } = this;
|
|
@@ -111,6 +172,15 @@ class WebGLState {
|
|
|
111
172
|
|
|
112
173
|
}
|
|
113
174
|
|
|
175
|
+
/**
|
|
176
|
+
* Specifies whether polygons are front- or back-facing
|
|
177
|
+
* by setting the winding orientation.
|
|
178
|
+
*
|
|
179
|
+
* This method caches the state so `gl.frontFace()` is only
|
|
180
|
+
* called when necessary.
|
|
181
|
+
*
|
|
182
|
+
* @param {boolean} flipSided - Whether triangles flipped their sides or not.
|
|
183
|
+
*/
|
|
114
184
|
setFlipSided( flipSided ) {
|
|
115
185
|
|
|
116
186
|
if ( this.currentFlipSided !== flipSided ) {
|
|
@@ -133,6 +203,15 @@ class WebGLState {
|
|
|
133
203
|
|
|
134
204
|
}
|
|
135
205
|
|
|
206
|
+
/**
|
|
207
|
+
* Specifies whether or not front- and/or back-facing
|
|
208
|
+
* polygons can be culled.
|
|
209
|
+
*
|
|
210
|
+
* This method caches the state so `gl.cullFace()` is only
|
|
211
|
+
* called when necessary.
|
|
212
|
+
*
|
|
213
|
+
* @param {number} cullFace - Defines which polygons are candidates for culling.
|
|
214
|
+
*/
|
|
136
215
|
setCullFace( cullFace ) {
|
|
137
216
|
|
|
138
217
|
const { gl } = this;
|
|
@@ -169,6 +248,14 @@ class WebGLState {
|
|
|
169
248
|
|
|
170
249
|
}
|
|
171
250
|
|
|
251
|
+
/**
|
|
252
|
+
* Specifies the width of line primitives.
|
|
253
|
+
*
|
|
254
|
+
* This method caches the state so `gl.lineWidth()` is only
|
|
255
|
+
* called when necessary.
|
|
256
|
+
*
|
|
257
|
+
* @param {number} width - The line width.
|
|
258
|
+
*/
|
|
172
259
|
setLineWidth( width ) {
|
|
173
260
|
|
|
174
261
|
const { currentLineWidth, gl } = this;
|
|
@@ -183,7 +270,21 @@ class WebGLState {
|
|
|
183
270
|
|
|
184
271
|
}
|
|
185
272
|
|
|
186
|
-
|
|
273
|
+
/**
|
|
274
|
+
* Defines the blending.
|
|
275
|
+
*
|
|
276
|
+
* This method caches the state so `gl.blendEquation()`, `gl.blendEquationSeparate()`,
|
|
277
|
+
* `gl.blendFunc()` and `gl.blendFuncSeparate()` are only called when necessary.
|
|
278
|
+
*
|
|
279
|
+
* @param {number} blending - The blending type.
|
|
280
|
+
* @param {number} blendEquation - The blending equation.
|
|
281
|
+
* @param {number} blendSrc - Only relevant for custom blending. The RGB source blending factor.
|
|
282
|
+
* @param {number} blendDst - Only relevant for custom blending. The RGB destination blending factor.
|
|
283
|
+
* @param {number} blendEquationAlpha - Only relevant for custom blending. The blending equation for alpha.
|
|
284
|
+
* @param {number} blendSrcAlpha - Only relevant for custom blending. The alpha source blending factor.
|
|
285
|
+
* @param {number} blendDstAlpha - Only relevant for custom blending. The alpha destination blending factor.
|
|
286
|
+
* @param {boolean} premultipliedAlpha - Whether premultiplied alpha is enabled or not.
|
|
287
|
+
*/
|
|
187
288
|
setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {
|
|
188
289
|
|
|
189
290
|
const { gl } = this;
|
|
@@ -320,6 +421,15 @@ class WebGLState {
|
|
|
320
421
|
|
|
321
422
|
}
|
|
322
423
|
|
|
424
|
+
/**
|
|
425
|
+
* Specifies whether colors can be written when rendering
|
|
426
|
+
* into a framebuffer or not.
|
|
427
|
+
*
|
|
428
|
+
* This method caches the state so `gl.colorMask()` is only
|
|
429
|
+
* called when necessary.
|
|
430
|
+
*
|
|
431
|
+
* @param {boolean} colorMask - The color mask.
|
|
432
|
+
*/
|
|
323
433
|
setColorMask( colorMask ) {
|
|
324
434
|
|
|
325
435
|
if ( this.currentColorMask !== colorMask ) {
|
|
@@ -331,6 +441,11 @@ class WebGLState {
|
|
|
331
441
|
|
|
332
442
|
}
|
|
333
443
|
|
|
444
|
+
/**
|
|
445
|
+
* Specifies whether the depth test is enabled or not.
|
|
446
|
+
*
|
|
447
|
+
* @param {boolean} depthTest - Whether the depth test is enabled or not.
|
|
448
|
+
*/
|
|
334
449
|
setDepthTest( depthTest ) {
|
|
335
450
|
|
|
336
451
|
const { gl } = this;
|
|
@@ -347,6 +462,15 @@ class WebGLState {
|
|
|
347
462
|
|
|
348
463
|
}
|
|
349
464
|
|
|
465
|
+
/**
|
|
466
|
+
* Specifies whether depth values can be written when rendering
|
|
467
|
+
* into a framebuffer or not.
|
|
468
|
+
*
|
|
469
|
+
* This method caches the state so `gl.depthMask()` is only
|
|
470
|
+
* called when necessary.
|
|
471
|
+
*
|
|
472
|
+
* @param {boolean} depthMask - The depth mask.
|
|
473
|
+
*/
|
|
350
474
|
setDepthMask( depthMask ) {
|
|
351
475
|
|
|
352
476
|
if ( this.currentDepthMask !== depthMask ) {
|
|
@@ -358,6 +482,14 @@ class WebGLState {
|
|
|
358
482
|
|
|
359
483
|
}
|
|
360
484
|
|
|
485
|
+
/**
|
|
486
|
+
* Specifies the depth compare function.
|
|
487
|
+
*
|
|
488
|
+
* This method caches the state so `gl.depthFunc()` is only
|
|
489
|
+
* called when necessary.
|
|
490
|
+
*
|
|
491
|
+
* @param {number} depthFunc - The depth compare function.
|
|
492
|
+
*/
|
|
361
493
|
setDepthFunc( depthFunc ) {
|
|
362
494
|
|
|
363
495
|
if ( this.currentDepthFunc !== depthFunc ) {
|
|
@@ -418,6 +550,80 @@ class WebGLState {
|
|
|
418
550
|
|
|
419
551
|
}
|
|
420
552
|
|
|
553
|
+
/**
|
|
554
|
+
* Specifies the scissor box.
|
|
555
|
+
*
|
|
556
|
+
* @param {number} x - The x-coordinate of the lower left corner of the viewport.
|
|
557
|
+
* @param {number} y - The y-coordinate of the lower left corner of the viewport.
|
|
558
|
+
* @param {number} width - The width of the viewport.
|
|
559
|
+
* @param {number} height - The height of the viewport.
|
|
560
|
+
*
|
|
561
|
+
*/
|
|
562
|
+
scissor( x, y, width, height ) {
|
|
563
|
+
|
|
564
|
+
const scissor = this._tempVec4.set( x, y, width, height );
|
|
565
|
+
|
|
566
|
+
if ( this.currentScissor.equals( scissor ) === false ) {
|
|
567
|
+
|
|
568
|
+
const { gl } = this;
|
|
569
|
+
|
|
570
|
+
gl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );
|
|
571
|
+
this.currentScissor.copy( scissor );
|
|
572
|
+
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
/**
|
|
578
|
+
* Specifies the viewport.
|
|
579
|
+
*
|
|
580
|
+
* @param {number} x - The x-coordinate of the lower left corner of the viewport.
|
|
581
|
+
* @param {number} y - The y-coordinate of the lower left corner of the viewport.
|
|
582
|
+
* @param {number} width - The width of the viewport.
|
|
583
|
+
* @param {number} height - The height of the viewport.
|
|
584
|
+
*
|
|
585
|
+
*/
|
|
586
|
+
viewport( x, y, width, height ) {
|
|
587
|
+
|
|
588
|
+
const viewport = this._tempVec4.set( x, y, width, height );
|
|
589
|
+
|
|
590
|
+
if ( this.currentViewport.equals( viewport ) === false ) {
|
|
591
|
+
|
|
592
|
+
const { gl } = this;
|
|
593
|
+
|
|
594
|
+
gl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );
|
|
595
|
+
this.currentViewport.copy( viewport );
|
|
596
|
+
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
/**
|
|
602
|
+
* Defines the scissor test.
|
|
603
|
+
*
|
|
604
|
+
* @param {boolean} boolean - Whether the scissor test should be enabled or not.
|
|
605
|
+
*/
|
|
606
|
+
setScissorTest( boolean ) {
|
|
607
|
+
|
|
608
|
+
const gl = this.gl;
|
|
609
|
+
|
|
610
|
+
if ( boolean ) {
|
|
611
|
+
|
|
612
|
+
gl.enable( gl.SCISSOR_TEST );
|
|
613
|
+
|
|
614
|
+
} else {
|
|
615
|
+
|
|
616
|
+
gl.disable( gl.SCISSOR_TEST );
|
|
617
|
+
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
/**
|
|
623
|
+
* Specifies whether the stencil test is enabled or not.
|
|
624
|
+
*
|
|
625
|
+
* @param {boolean} stencilTest - Whether the stencil test is enabled or not.
|
|
626
|
+
*/
|
|
421
627
|
setStencilTest( stencilTest ) {
|
|
422
628
|
|
|
423
629
|
const { gl } = this;
|
|
@@ -434,6 +640,15 @@ class WebGLState {
|
|
|
434
640
|
|
|
435
641
|
}
|
|
436
642
|
|
|
643
|
+
/**
|
|
644
|
+
* Specifies whether stencil values can be written when rendering
|
|
645
|
+
* into a framebuffer or not.
|
|
646
|
+
*
|
|
647
|
+
* This method caches the state so `gl.stencilMask()` is only
|
|
648
|
+
* called when necessary.
|
|
649
|
+
*
|
|
650
|
+
* @param {boolean} stencilMask - The stencil mask.
|
|
651
|
+
*/
|
|
437
652
|
setStencilMask( stencilMask ) {
|
|
438
653
|
|
|
439
654
|
if ( this.currentStencilMask !== stencilMask ) {
|
|
@@ -445,6 +660,16 @@ class WebGLState {
|
|
|
445
660
|
|
|
446
661
|
}
|
|
447
662
|
|
|
663
|
+
/**
|
|
664
|
+
* Specifies whether the stencil test functions.
|
|
665
|
+
*
|
|
666
|
+
* This method caches the state so `gl.stencilFunc()` is only
|
|
667
|
+
* called when necessary.
|
|
668
|
+
*
|
|
669
|
+
* @param {number} stencilFunc - The stencil compare function.
|
|
670
|
+
* @param {number} stencilRef - The reference value for the stencil test.
|
|
671
|
+
* @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.
|
|
672
|
+
*/
|
|
448
673
|
setStencilFunc( stencilFunc, stencilRef, stencilMask ) {
|
|
449
674
|
|
|
450
675
|
if ( this.currentStencilFunc !== stencilFunc ||
|
|
@@ -461,6 +686,17 @@ class WebGLState {
|
|
|
461
686
|
|
|
462
687
|
}
|
|
463
688
|
|
|
689
|
+
/**
|
|
690
|
+
* Specifies whether the stencil test operation.
|
|
691
|
+
*
|
|
692
|
+
* This method caches the state so `gl.stencilOp()` is only
|
|
693
|
+
* called when necessary.
|
|
694
|
+
*
|
|
695
|
+
* @param {number} stencilFail - The function to use when the stencil test fails.
|
|
696
|
+
* @param {number} stencilZFail - The function to use when the stencil test passes, but the depth test fail.
|
|
697
|
+
* @param {number} stencilZPass - The function to use when both the stencil test and the depth test pass,
|
|
698
|
+
* or when the stencil test passes and there is no depth buffer or depth testing is disabled.
|
|
699
|
+
*/
|
|
464
700
|
setStencilOp( stencilFail, stencilZFail, stencilZPass ) {
|
|
465
701
|
|
|
466
702
|
if ( this.currentStencilFail !== stencilFail ||
|
|
@@ -477,7 +713,14 @@ class WebGLState {
|
|
|
477
713
|
|
|
478
714
|
}
|
|
479
715
|
|
|
480
|
-
|
|
716
|
+
/**
|
|
717
|
+
* Configures the WebGL state for the given material.
|
|
718
|
+
*
|
|
719
|
+
* @param {Material} material - The material to configure the state for.
|
|
720
|
+
* @param {number} frontFaceCW - Whether the front faces are counter-clockwise or not.
|
|
721
|
+
* @param {number} hardwareClippingPlanes - The number of hardware clipping planes.
|
|
722
|
+
*/
|
|
723
|
+
setMaterial( material, frontFaceCW, hardwareClippingPlanes ) {
|
|
481
724
|
|
|
482
725
|
const { gl } = this;
|
|
483
726
|
|
|
@@ -511,12 +754,46 @@ class WebGLState {
|
|
|
511
754
|
|
|
512
755
|
this.setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );
|
|
513
756
|
|
|
514
|
-
material.alphaToCoverage === true
|
|
757
|
+
material.alphaToCoverage === true && this.backend.renderer.samples > 1
|
|
515
758
|
? this.enable( gl.SAMPLE_ALPHA_TO_COVERAGE )
|
|
516
759
|
: this.disable( gl.SAMPLE_ALPHA_TO_COVERAGE );
|
|
517
760
|
|
|
761
|
+
if ( hardwareClippingPlanes > 0 ) {
|
|
762
|
+
|
|
763
|
+
if ( this.currentClippingPlanes !== hardwareClippingPlanes ) {
|
|
764
|
+
|
|
765
|
+
const CLIP_DISTANCE0_WEBGL = 0x3000;
|
|
766
|
+
|
|
767
|
+
for ( let i = 0; i < 8; i ++ ) {
|
|
768
|
+
|
|
769
|
+
if ( i < hardwareClippingPlanes ) {
|
|
770
|
+
|
|
771
|
+
this.enable( CLIP_DISTANCE0_WEBGL + i );
|
|
772
|
+
|
|
773
|
+
} else {
|
|
774
|
+
|
|
775
|
+
this.disable( CLIP_DISTANCE0_WEBGL + i );
|
|
776
|
+
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
}
|
|
784
|
+
|
|
518
785
|
}
|
|
519
786
|
|
|
787
|
+
/**
|
|
788
|
+
* Specifies the polygon offset.
|
|
789
|
+
*
|
|
790
|
+
* This method caches the state so `gl.polygonOffset()` is only
|
|
791
|
+
* called when necessary.
|
|
792
|
+
*
|
|
793
|
+
* @param {boolean} polygonOffset - Whether polygon offset is enabled or not.
|
|
794
|
+
* @param {number} factor - The scale factor for the variable depth offset for each polygon.
|
|
795
|
+
* @param {number} units - The multiplier by which an implementation-specific value is multiplied with to create a constant depth offset.
|
|
796
|
+
*/
|
|
520
797
|
setPolygonOffset( polygonOffset, factor, units ) {
|
|
521
798
|
|
|
522
799
|
const { gl } = this;
|
|
@@ -542,6 +819,15 @@ class WebGLState {
|
|
|
542
819
|
|
|
543
820
|
}
|
|
544
821
|
|
|
822
|
+
/**
|
|
823
|
+
* Defines the usage of the given WebGL program.
|
|
824
|
+
*
|
|
825
|
+
* This method caches the state so `gl.useProgram()` is only
|
|
826
|
+
* called when necessary.
|
|
827
|
+
*
|
|
828
|
+
* @param {WebGLProgram} program - The WebGL program to use.
|
|
829
|
+
* @return {boolean} Whether a program change has been executed or not.
|
|
830
|
+
*/
|
|
545
831
|
useProgram( program ) {
|
|
546
832
|
|
|
547
833
|
if ( this.currentProgram !== program ) {
|
|
@@ -558,9 +844,66 @@ class WebGLState {
|
|
|
558
844
|
|
|
559
845
|
}
|
|
560
846
|
|
|
847
|
+
/**
|
|
848
|
+
* Sets the vertex state by binding the given VAO and element buffer.
|
|
849
|
+
*
|
|
850
|
+
* @param {WebGLVertexArrayObject} vao - The VAO.
|
|
851
|
+
* @param {WebGLBuffer} indexBuffer - The index buffer.
|
|
852
|
+
* @return {boolean} Whether a vertex state has been changed or not.
|
|
853
|
+
*/
|
|
854
|
+
setVertexState( vao, indexBuffer = null ) {
|
|
855
|
+
|
|
856
|
+
const gl = this.gl;
|
|
857
|
+
|
|
858
|
+
if ( this.currentVAO !== vao || this.currentIndex !== indexBuffer ) {
|
|
859
|
+
|
|
860
|
+
gl.bindVertexArray( vao );
|
|
861
|
+
|
|
862
|
+
if ( indexBuffer !== null ) {
|
|
863
|
+
|
|
864
|
+
gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, indexBuffer );
|
|
865
|
+
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
this.currentVAO = vao;
|
|
869
|
+
this.currentIndex = indexBuffer;
|
|
870
|
+
|
|
871
|
+
return true;
|
|
872
|
+
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
return false;
|
|
876
|
+
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
/**
|
|
880
|
+
* Resets the vertex array state by resetting the VAO and element buffer.
|
|
881
|
+
*/
|
|
882
|
+
resetVertexState() {
|
|
883
|
+
|
|
884
|
+
const gl = this.gl;
|
|
885
|
+
|
|
886
|
+
gl.bindVertexArray( null );
|
|
887
|
+
gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, null );
|
|
888
|
+
|
|
889
|
+
this.currentVAO = null;
|
|
890
|
+
this.currentIndex = null;
|
|
891
|
+
|
|
892
|
+
}
|
|
893
|
+
|
|
561
894
|
// framebuffer
|
|
562
895
|
|
|
563
896
|
|
|
897
|
+
/**
|
|
898
|
+
* Binds the given framebuffer.
|
|
899
|
+
*
|
|
900
|
+
* This method caches the state so `gl.bindFramebuffer()` is only
|
|
901
|
+
* called when necessary.
|
|
902
|
+
*
|
|
903
|
+
* @param {number} target - The binding point (target).
|
|
904
|
+
* @param {WebGLFramebuffer} framebuffer - The WebGL framebuffer to bind.
|
|
905
|
+
* @return {boolean} Whether a bind has been executed or not.
|
|
906
|
+
*/
|
|
564
907
|
bindFramebuffer( target, framebuffer ) {
|
|
565
908
|
|
|
566
909
|
const { gl, currentBoundFramebuffers } = this;
|
|
@@ -593,6 +936,16 @@ class WebGLState {
|
|
|
593
936
|
|
|
594
937
|
}
|
|
595
938
|
|
|
939
|
+
/**
|
|
940
|
+
* Defines draw buffers to which fragment colors are written into.
|
|
941
|
+
* Configures the MRT setup of custom framebuffers.
|
|
942
|
+
*
|
|
943
|
+
* This method caches the state so `gl.drawBuffers()` is only
|
|
944
|
+
* called when necessary.
|
|
945
|
+
*
|
|
946
|
+
* @param {RenderContext} renderContext - The render context.
|
|
947
|
+
* @param {WebGLFramebuffer} framebuffer - The WebGL framebuffer.
|
|
948
|
+
*/
|
|
596
949
|
drawBuffers( renderContext, framebuffer ) {
|
|
597
950
|
|
|
598
951
|
const { gl } = this;
|
|
@@ -648,12 +1001,19 @@ class WebGLState {
|
|
|
648
1001
|
|
|
649
1002
|
}
|
|
650
1003
|
|
|
651
|
-
|
|
652
1004
|
}
|
|
653
1005
|
|
|
654
1006
|
|
|
655
1007
|
// texture
|
|
656
1008
|
|
|
1009
|
+
/**
|
|
1010
|
+
* Makes the given texture unit active.
|
|
1011
|
+
*
|
|
1012
|
+
* This method caches the state so `gl.activeTexture()` is only
|
|
1013
|
+
* called when necessary.
|
|
1014
|
+
*
|
|
1015
|
+
* @param {number} webglSlot - The texture unit to make active.
|
|
1016
|
+
*/
|
|
657
1017
|
activeTexture( webglSlot ) {
|
|
658
1018
|
|
|
659
1019
|
const { gl, currentTextureSlot, maxTextures } = this;
|
|
@@ -669,6 +1029,16 @@ class WebGLState {
|
|
|
669
1029
|
|
|
670
1030
|
}
|
|
671
1031
|
|
|
1032
|
+
/**
|
|
1033
|
+
* Binds the given WebGL texture to a target.
|
|
1034
|
+
*
|
|
1035
|
+
* This method caches the state so `gl.bindTexture()` is only
|
|
1036
|
+
* called when necessary.
|
|
1037
|
+
*
|
|
1038
|
+
* @param {number} webglType - The binding point (target).
|
|
1039
|
+
* @param {WebGLTexture} webglTexture - The WebGL texture to bind.
|
|
1040
|
+
* @param {number} webglSlot - The texture.
|
|
1041
|
+
*/
|
|
672
1042
|
bindTexture( webglType, webglTexture, webglSlot ) {
|
|
673
1043
|
|
|
674
1044
|
const { gl, currentTextureSlot, currentBoundTextures, maxTextures } = this;
|
|
@@ -710,12 +1080,47 @@ class WebGLState {
|
|
|
710
1080
|
boundTexture.type = webglType;
|
|
711
1081
|
boundTexture.texture = webglTexture;
|
|
712
1082
|
|
|
1083
|
+
}
|
|
1084
|
+
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
/**
|
|
1088
|
+
* Binds a given WebGL buffer to a given binding point (target) at a given index.
|
|
1089
|
+
*
|
|
1090
|
+
* This method caches the state so `gl.bindBufferBase()` is only
|
|
1091
|
+
* called when necessary.
|
|
1092
|
+
*
|
|
1093
|
+
* @param {number} target - The target for the bind operation.
|
|
1094
|
+
* @param {number} index - The index of the target.
|
|
1095
|
+
* @param {WebGLBuffer} buffer - The WebGL buffer.
|
|
1096
|
+
* @return {boolean} Whether a bind has been executed or not.
|
|
1097
|
+
*/
|
|
1098
|
+
bindBufferBase( target, index, buffer ) {
|
|
1099
|
+
|
|
1100
|
+
const { gl } = this;
|
|
1101
|
+
|
|
1102
|
+
const key = `${target}-${index}`;
|
|
1103
|
+
|
|
1104
|
+
if ( this.currentBoundBufferBases[ key ] !== buffer ) {
|
|
1105
|
+
|
|
1106
|
+
gl.bindBufferBase( target, index, buffer );
|
|
1107
|
+
this.currentBoundBufferBases[ key ] = buffer;
|
|
1108
|
+
|
|
1109
|
+
return true;
|
|
713
1110
|
|
|
714
1111
|
}
|
|
715
1112
|
|
|
1113
|
+
return false;
|
|
716
1114
|
|
|
717
1115
|
}
|
|
718
1116
|
|
|
1117
|
+
|
|
1118
|
+
/**
|
|
1119
|
+
* Unbinds the current bound texture.
|
|
1120
|
+
*
|
|
1121
|
+
* This method caches the state so `gl.bindTexture()` is only
|
|
1122
|
+
* called when necessary.
|
|
1123
|
+
*/
|
|
719
1124
|
unbindTexture() {
|
|
720
1125
|
|
|
721
1126
|
const { gl, currentTextureSlot, currentBoundTextures } = this;
|