super-three 0.181.0 → 0.185.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 +3 -4
- package/build/three.cjs +21332 -19201
- package/build/three.core.js +20908 -19853
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1947 -862
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +37 -16
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +33628 -25197
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +33394 -25000
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +14 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +13 -6
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +127 -86
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +102 -17
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMFrustum.js +31 -6
- package/examples/jsm/csm/CSMShadowNode.js +10 -3
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +14 -1
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +27 -6
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +266 -21
- package/examples/jsm/exporters/PLYExporter.js +286 -73
- package/examples/jsm/exporters/USDZExporter.js +353 -99
- package/examples/jsm/generators/CityGenerator.js +346 -0
- package/examples/jsm/generators/ForestGenerator.js +347 -0
- package/examples/jsm/generators/TerrainGenerator.js +504 -0
- package/examples/jsm/generators/TreeGenerator.js +377 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
- package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/LoftGeometry.js +355 -0
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelper.js +5 -4
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +83 -14
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +244 -91
- package/examples/jsm/inspector/RendererInspector.js +165 -39
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +241 -25
- package/examples/jsm/inspector/tabs/Memory.js +136 -0
- package/examples/jsm/inspector/tabs/Parameters.js +115 -7
- package/examples/jsm/inspector/tabs/Performance.js +24 -9
- package/examples/jsm/inspector/tabs/Settings.js +306 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
- package/examples/jsm/inspector/tabs/Viewer.js +723 -9
- package/examples/jsm/inspector/ui/Graph.js +162 -25
- package/examples/jsm/inspector/ui/Item.js +92 -13
- package/examples/jsm/inspector/ui/List.js +2 -2
- package/examples/jsm/inspector/ui/Profiler.js +1991 -44
- package/examples/jsm/inspector/ui/Style.js +1943 -543
- package/examples/jsm/inspector/ui/Tab.js +226 -5
- package/examples/jsm/inspector/ui/Values.js +126 -8
- package/examples/jsm/inspector/ui/utils.js +143 -10
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/basis/README.md +0 -1
- package/examples/jsm/libs/demuxer_mp4.js +3 -3
- package/examples/jsm/libs/draco/README.md +0 -1
- package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
- package/examples/jsm/libs/mikktspace.module.js +34 -9
- package/examples/jsm/lighting/ClusteredLighting.js +55 -0
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +681 -0
- package/examples/jsm/lines/LineMaterial.js +45 -16
- package/examples/jsm/lines/LineSegments2.js +8 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
- package/examples/jsm/loaders/3DMLoader.js +6 -5
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +51 -18
- package/examples/jsm/loaders/EXRLoader.js +701 -90
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +7 -30
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +58 -17
- package/examples/jsm/loaders/LDrawLoader.js +49 -58
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +11 -39
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MaterialXLoader.js +31 -9
- package/examples/jsm/loaders/NRRDLoader.js +5 -5
- package/examples/jsm/loaders/PCDLoader.js +11 -9
- package/examples/jsm/loaders/PLYLoader.js +218 -55
- package/examples/jsm/loaders/SVGLoader.js +549 -497
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDLoader.js +127 -43
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +80 -3
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +504 -344
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
- package/examples/jsm/misc/Volume.js +2 -3
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/GroundedSkybox.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +72 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/Water2Mesh.js +1 -1
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +27 -15
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +36 -7
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/shaders/VolumeShader.js +31 -44
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
- package/examples/jsm/transpiler/Linker.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +75 -25
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +13 -14
- package/examples/jsm/tsl/display/GTAONode.js +40 -17
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
- package/examples/jsm/tsl/display/SSGINode.js +96 -62
- package/examples/jsm/tsl/display/SSRNode.js +831 -134
- package/examples/jsm/tsl/display/SSSNode.js +8 -6
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/tsl/math/curlNoise.js +107 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
- package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
- package/examples/jsm/tsl/utils/RNoise.js +51 -0
- package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/SceneOptimizer.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/ARButton.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +28 -34
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +35 -14
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +13 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +18 -4
- package/src/animation/AnimationClip.js +0 -139
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyBinding.js +2 -2
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +34 -4
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/StereoCamera.js +5 -2
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +43 -9
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +69 -11
- package/src/core/Raycaster.js +3 -3
- package/src/core/RenderTarget.js +19 -6
- package/src/extras/PMREMGenerator.js +13 -22
- package/src/extras/TextureUtils.js +6 -2
- package/src/extras/core/ShapePath.js +149 -160
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/SphereGeometry.js +8 -3
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +6 -1
- package/src/helpers/HemisphereLightHelper.js +5 -0
- package/src/helpers/PointLightHelper.js +3 -25
- package/src/helpers/SpotLightHelper.js +4 -1
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +75 -42
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/LoadingManager.js +5 -0
- package/src/loaders/MaterialLoader.js +37 -266
- package/src/loaders/ObjectLoader.js +48 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +198 -1
- package/src/materials/MeshBasicMaterial.js +24 -0
- package/src/materials/MeshDepthMaterial.js +10 -0
- package/src/materials/MeshDistanceMaterial.js +10 -0
- package/src/materials/MeshLambertMaterial.js +49 -1
- package/src/materials/MeshMatcapMaterial.js +25 -1
- package/src/materials/MeshNormalMaterial.js +9 -1
- package/src/materials/MeshPhongMaterial.js +49 -1
- package/src/materials/MeshPhysicalMaterial.js +38 -0
- package/src/materials/MeshStandardMaterial.js +42 -1
- package/src/materials/MeshToonMaterial.js +35 -2
- package/src/materials/PointsMaterial.js +7 -0
- package/src/materials/ShaderMaterial.js +106 -1
- package/src/materials/SpriteMaterial.js +7 -0
- package/src/materials/nodes/Line2NodeMaterial.js +380 -297
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
- package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
- package/src/materials/nodes/NodeMaterial.js +153 -89
- package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
- package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
- package/src/math/Box3.js +5 -0
- package/src/math/FrustumArray.js +103 -133
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +12 -12
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +24 -9
- package/src/math/Matrix4.js +112 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +13 -9
- package/src/math/Vector3.js +17 -15
- package/src/math/Vector4.js +15 -11
- package/src/math/interpolants/BezierInterpolant.js +106 -0
- package/src/nodes/Nodes.js +86 -71
- package/src/nodes/TSL.js +15 -13
- package/src/nodes/accessors/Arrays.js +5 -5
- package/src/nodes/accessors/Batch.js +108 -0
- package/src/nodes/accessors/Bitangent.js +7 -7
- package/src/nodes/accessors/BufferAttributeNode.js +120 -17
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +5 -5
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/Instance.js +264 -0
- package/src/nodes/accessors/MaterialNode.js +27 -3
- package/src/nodes/accessors/MaterialProperties.js +6 -8
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
- package/src/nodes/accessors/Normal.js +24 -24
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +39 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +9 -8
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/Skinning.js +263 -0
- package/src/nodes/accessors/StorageBufferNode.js +16 -27
- package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
- package/src/nodes/accessors/StorageTextureNode.js +74 -11
- package/src/nodes/accessors/Tangent.js +8 -18
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +124 -25
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +4 -19
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +55 -4
- package/src/nodes/core/Node.js +151 -17
- package/src/nodes/core/NodeBuilder.js +479 -101
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +20 -18
- package/src/nodes/core/OutputStructNode.js +13 -11
- package/src/nodes/core/OverrideContextNode.js +153 -0
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +66 -4
- package/src/nodes/core/StackNode.js +91 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +20 -8
- package/src/nodes/core/StructTypeNode.js +17 -23
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +56 -23
- package/src/nodes/core/VaryingNode.js +14 -21
- package/src/nodes/display/BlendModes.js +1 -105
- package/src/nodes/display/BumpMapNode.js +6 -1
- package/src/nodes/display/ColorAdjustment.js +27 -9
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +38 -9
- package/src/nodes/display/NormalMapNode.js +41 -6
- package/src/nodes/display/PassNode.js +157 -56
- package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
- package/src/nodes/display/RenderOutputNode.js +19 -10
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/functions/VolumetricLightingModel.js +40 -7
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +30 -5
- package/src/nodes/lighting/IESSpotLightNode.js +40 -2
- package/src/nodes/lighting/LightingContextNode.js +10 -2
- package/src/nodes/lighting/LightsNode.js +97 -65
- package/src/nodes/lighting/PointShadowNode.js +166 -148
- package/src/nodes/lighting/ShadowFilterNode.js +74 -117
- package/src/nodes/lighting/ShadowNode.js +149 -51
- package/src/nodes/materialx/lib/mx_noise.js +2 -2
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +6 -6
- package/src/nodes/math/MathNode.js +115 -52
- package/src/nodes/math/OperatorNode.js +24 -23
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +34 -3
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +99 -33
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EquirectUV.js +30 -5
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +48 -5
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +41 -25
- package/src/nodes/utils/ReflectorNode.js +4 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +66 -30
- package/src/objects/InstancedMesh.js +19 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +344 -156
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +78 -13
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +141 -57
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ClippingContext.js +10 -2
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +374 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +51 -19
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +41 -4
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +88 -16
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +700 -163
- package/src/renderers/common/Sampler.js +16 -48
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +121 -9
- package/src/renderers/common/TimestampQueryPool.js +6 -4
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +84 -1
- package/src/renderers/common/XRManager.js +377 -51
- package/src/renderers/common/extras/PMREMGenerator.js +40 -61
- package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/src/renderers/common/nodes/NodeLibrary.js +4 -4
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- 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/common.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -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_pars_begin.glsl.js +3 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
- 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 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +271 -0
- package/src/renderers/webgl/WebGLProgram.js +54 -113
- package/src/renderers/webgl/WebGLPrograms.js +74 -55
- package/src/renderers/webgl/WebGLRenderLists.js +24 -1
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShaderCache.js +5 -11
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +230 -56
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
- package/src/renderers/webgpu/WebGPUBackend.js +733 -302
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
- package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
- package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
- package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
- package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
- package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
- package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
- package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
- package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
- package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
- package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
- package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
- package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/DepthTexture.js +1 -1
- package/src/textures/ExternalTexture.js +0 -3
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/fonts/LICENSE +0 -13
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
- package/examples/fonts/README.md +0 -11
- package/examples/fonts/droid/NOTICE +0 -190
- package/examples/fonts/droid/README.txt +0 -18
- package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
- package/examples/fonts/gentilis_bold.typeface.json +0 -1
- package/examples/fonts/gentilis_regular.typeface.json +0 -1
- package/examples/fonts/helvetiker_bold.typeface.json +0 -1
- package/examples/fonts/helvetiker_regular.typeface.json +0 -1
- package/examples/fonts/optimer_bold.typeface.json +0 -1
- package/examples/fonts/optimer_regular.typeface.json +0 -1
- package/examples/fonts/ttf/README.md +0 -9
- package/examples/fonts/ttf/kenpixel.ttf +0 -0
- package/examples/jsm/libs/ammo.wasm.js +0 -822
- package/examples/jsm/libs/ammo.wasm.wasm +0 -0
- package/examples/jsm/libs/draco/draco_encoder.js +0 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
- package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
- package/examples/jsm/libs/opentype.module.js +0 -14506
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lighting/TiledLighting.js +0 -42
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
- package/src/nodes/accessors/BatchNode.js +0 -163
- package/src/nodes/accessors/InstanceNode.js +0 -244
- package/src/nodes/accessors/InstancedMeshNode.js +0 -50
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/accessors/SkinningNode.js +0 -327
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -91,47 +91,6 @@ class WebGLBufferRenderer {
|
|
|
91
91
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
renderMultiDrawInstances( starts, counts, drawCount, primcount ) {
|
|
95
|
-
|
|
96
|
-
const { extensions, mode, object, info } = this;
|
|
97
|
-
|
|
98
|
-
if ( drawCount === 0 ) return;
|
|
99
|
-
|
|
100
|
-
const extension = extensions.get( 'WEBGL_multi_draw' );
|
|
101
|
-
|
|
102
|
-
if ( extension === null ) {
|
|
103
|
-
|
|
104
|
-
for ( let i = 0; i < drawCount; i ++ ) {
|
|
105
|
-
|
|
106
|
-
this.renderInstances( starts[ i ], counts[ i ], primcount[ i ] );
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
} else {
|
|
111
|
-
|
|
112
|
-
if ( this.index !== 0 ) {
|
|
113
|
-
|
|
114
|
-
extension.multiDrawElementsInstancedWEBGL( mode, counts, 0, this.type, starts, 0, primcount, 0, drawCount );
|
|
115
|
-
|
|
116
|
-
} else {
|
|
117
|
-
|
|
118
|
-
extension.multiDrawArraysInstancedWEBGL( mode, starts, 0, counts, 0, primcount, 0, drawCount );
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
let elementCount = 0;
|
|
123
|
-
for ( let i = 0; i < drawCount; i ++ ) {
|
|
124
|
-
|
|
125
|
-
elementCount += counts[ i ] * primcount[ i ];
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
info.update( object, elementCount, 1 );
|
|
130
|
-
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
|
|
135
94
|
//
|
|
136
95
|
|
|
137
96
|
}
|
|
@@ -10,8 +10,68 @@ import { DataTexture } from '../../../textures/DataTexture.js';
|
|
|
10
10
|
import { error } from '../../../utils.js';
|
|
11
11
|
|
|
12
12
|
const glslPolyfills = {
|
|
13
|
-
bitcast_int_uint: new CodeNode( /* glsl */'uint
|
|
14
|
-
bitcast_uint_int: new CodeNode( /* glsl */'uint
|
|
13
|
+
bitcast_int_uint: new CodeNode( /* glsl */'uint tsl_bitcast_int_to_uint ( int x ) { return floatBitsToUint( intBitsToFloat ( x ) ); }' ),
|
|
14
|
+
bitcast_uint_int: new CodeNode( /* glsl */'uint tsl_bitcast_uint_to_int ( uint x ) { return floatBitsToInt( uintBitsToFloat ( x ) ); }' ),
|
|
15
|
+
textureGather: new CodeNode( /* glsl */`
|
|
16
|
+
vec4 tsl_textureGather( const int comp, sampler2D map, vec2 coord, ivec2 offset, bool flipY ) {
|
|
17
|
+
if ( flipY ) offset.y = - offset.y;
|
|
18
|
+
vec2 size = vec2( textureSize( map, 0 ) );
|
|
19
|
+
vec2 st = floor( coord * size + vec2( offset ) - 0.5 );
|
|
20
|
+
vec4 ij = vec4( st + 0.5, st + 1.5 ) / size.xyxy;
|
|
21
|
+
vec4 ret = vec4(
|
|
22
|
+
textureLod( map, ij.xw, 0.0 )[ comp ],
|
|
23
|
+
textureLod( map, ij.zw, 0.0 )[ comp ],
|
|
24
|
+
textureLod( map, ij.zy, 0.0 )[ comp ],
|
|
25
|
+
textureLod( map, ij.xy, 0.0 )[ comp ]
|
|
26
|
+
);
|
|
27
|
+
return flipY ? ret.wzyx : ret;
|
|
28
|
+
}
|
|
29
|
+
` ),
|
|
30
|
+
textureGatherArray: new CodeNode( /* glsl */`
|
|
31
|
+
vec4 tsl_textureGather_array( const int comp, sampler2DArray map, vec3 coord, ivec2 offset, bool flipY ) {
|
|
32
|
+
if ( flipY ) offset.y = - offset.y;
|
|
33
|
+
vec2 size = vec2( textureSize( map, 0 ).xy );
|
|
34
|
+
vec2 st = floor( coord.xy * size + vec2( offset ) - 0.5 );
|
|
35
|
+
vec4 ij = vec4( st + 0.5, st + 1.5 ) / size.xyxy;
|
|
36
|
+
vec4 ret = vec4(
|
|
37
|
+
textureLod( map, vec3( ij.xw, coord.z ), 0.0 )[ comp ],
|
|
38
|
+
textureLod( map, vec3( ij.zw, coord.z ), 0.0 )[ comp ],
|
|
39
|
+
textureLod( map, vec3( ij.zy, coord.z ), 0.0 )[ comp ],
|
|
40
|
+
textureLod( map, vec3( ij.xy, coord.z ), 0.0 )[ comp ]
|
|
41
|
+
);
|
|
42
|
+
return flipY ? ret.wzyx : ret;
|
|
43
|
+
}
|
|
44
|
+
` ),
|
|
45
|
+
textureGatherCompare: new CodeNode( /* glsl */`
|
|
46
|
+
vec4 tsl_textureGatherCompare( sampler2DShadow map, vec2 coord, ivec2 offset, float ref, bool flipY ) {
|
|
47
|
+
if ( flipY ) offset.y = - offset.y;
|
|
48
|
+
vec2 size = vec2( textureSize( map, 0 ) );
|
|
49
|
+
vec2 st = floor( coord * size + vec2( offset ) - 0.5 );
|
|
50
|
+
vec4 ij = vec4( st + 0.5, st + 1.5 ) / size.xyxy;
|
|
51
|
+
vec4 ret = vec4(
|
|
52
|
+
textureLod( map, vec3( ij.xw, ref ), 0.0 ),
|
|
53
|
+
textureLod( map, vec3( ij.zw, ref ), 0.0 ),
|
|
54
|
+
textureLod( map, vec3( ij.zy, ref ), 0.0 ),
|
|
55
|
+
textureLod( map, vec3( ij.xy, ref ), 0.0 )
|
|
56
|
+
);
|
|
57
|
+
return flipY ? ret.wzyx : ret;
|
|
58
|
+
}
|
|
59
|
+
` ),
|
|
60
|
+
textureGatherCompareArray: new CodeNode( /* glsl */`
|
|
61
|
+
vec4 tsl_textureGatherCompare_array( sampler2DArrayShadow map, vec3 coord, ivec2 offset, float ref, bool flipY ) {
|
|
62
|
+
if ( flipY ) offset.y = - offset.y;
|
|
63
|
+
vec2 size = vec2( textureSize( map, 0 ).xy );
|
|
64
|
+
vec2 st = floor( coord.xy * size + vec2( offset ) - 0.5 );
|
|
65
|
+
vec4 ij = vec4( st + 0.5, st + 1.5 ) / size.xyxy;
|
|
66
|
+
vec4 ret = vec4(
|
|
67
|
+
texture( map, vec4( ij.xw, coord.z, ref ) ),
|
|
68
|
+
texture( map, vec4( ij.zw, coord.z, ref ) ),
|
|
69
|
+
texture( map, vec4( ij.zy, coord.z, ref ) ),
|
|
70
|
+
texture( map, vec4( ij.xy, coord.z, ref ) )
|
|
71
|
+
);
|
|
72
|
+
return flipY ? ret.wzyx : ret;
|
|
73
|
+
}
|
|
74
|
+
` )
|
|
15
75
|
};
|
|
16
76
|
|
|
17
77
|
const glslMethods = {
|
|
@@ -22,7 +82,13 @@ const glslMethods = {
|
|
|
22
82
|
bitcast_uint_float: 'uintBitsToFloat',
|
|
23
83
|
bitcast_float_uint: 'floatBitsToUint',
|
|
24
84
|
bitcast_uint_int: 'tsl_bitcast_uint_to_int',
|
|
25
|
-
bitcast_int_uint: 'tsl_bitcast_int_to_uint'
|
|
85
|
+
bitcast_int_uint: 'tsl_bitcast_int_to_uint',
|
|
86
|
+
floatpack_snorm_2x16: 'packSnorm2x16',
|
|
87
|
+
floatpack_unorm_2x16: 'packUnorm2x16',
|
|
88
|
+
floatpack_float16_2x16: 'packHalf2x16',
|
|
89
|
+
floatunpack_snorm_2x16: 'unpackSnorm2x16',
|
|
90
|
+
floatunpack_unorm_2x16: 'unpackUnorm2x16',
|
|
91
|
+
floatunpack_float16_2x16: 'unpackHalf2x16'
|
|
26
92
|
};
|
|
27
93
|
|
|
28
94
|
const precisionLib = {
|
|
@@ -63,9 +129,9 @@ precision highp isampler3D;
|
|
|
63
129
|
precision highp isamplerCube;
|
|
64
130
|
precision highp isampler2DArray;
|
|
65
131
|
|
|
66
|
-
precision
|
|
67
|
-
precision
|
|
68
|
-
precision
|
|
132
|
+
precision highp sampler2DShadow;
|
|
133
|
+
precision highp sampler2DArrayShadow;
|
|
134
|
+
precision highp samplerCubeShadow;
|
|
69
135
|
`;
|
|
70
136
|
|
|
71
137
|
/**
|
|
@@ -176,7 +242,7 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
176
242
|
*
|
|
177
243
|
* @param {string} type - The output type to bitcast to.
|
|
178
244
|
* @param {string} inputType - The input type of the.
|
|
179
|
-
* @return {string} The resolved
|
|
245
|
+
* @return {string} The resolved GLSL bitcast invocation.
|
|
180
246
|
*/
|
|
181
247
|
getBitcastMethod( type, inputType ) {
|
|
182
248
|
|
|
@@ -184,6 +250,30 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
184
250
|
|
|
185
251
|
}
|
|
186
252
|
|
|
253
|
+
/**
|
|
254
|
+
* Returns the float packing method name for a given numeric encoding.
|
|
255
|
+
*
|
|
256
|
+
* @param {string} encoding - The numeric encoding that describes how the float values are mapped to the integer range.
|
|
257
|
+
* @returns {string} The resolved GLSL float packing method name.
|
|
258
|
+
*/
|
|
259
|
+
getFloatPackingMethod( encoding ) {
|
|
260
|
+
|
|
261
|
+
return this.getMethod( `floatpack_${ encoding }_2x16` );
|
|
262
|
+
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Returns the float unpacking method name for a given numeric encoding.
|
|
267
|
+
*
|
|
268
|
+
* @param {string} encoding - The numeric encoding that describes how the integer values are mapped to the float range.
|
|
269
|
+
* @returns {string} The resolved GLSL float unpacking method name.
|
|
270
|
+
*/
|
|
271
|
+
getFloatUnpackingMethod( encoding ) {
|
|
272
|
+
|
|
273
|
+
return this.getMethod( `floatunpack_${ encoding }_2x16` );
|
|
274
|
+
|
|
275
|
+
}
|
|
276
|
+
|
|
187
277
|
/**
|
|
188
278
|
* Returns the native snippet for a ternary operation.
|
|
189
279
|
*
|
|
@@ -330,7 +420,7 @@ ${ flowData.code }
|
|
|
330
420
|
|
|
331
421
|
if ( node.isNodeUniform && node.node.isTextureNode !== true && node.node.isBufferNode !== true ) {
|
|
332
422
|
|
|
333
|
-
return
|
|
423
|
+
return node.name;
|
|
334
424
|
|
|
335
425
|
}
|
|
336
426
|
|
|
@@ -448,11 +538,11 @@ ${ flowData.code }
|
|
|
448
538
|
|
|
449
539
|
if ( offsetSnippet ) {
|
|
450
540
|
|
|
451
|
-
snippet = `texelFetchOffset( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), ${ levelSnippet }, ${ offsetSnippet } )`;
|
|
541
|
+
snippet = `texelFetchOffset( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), int( ${ levelSnippet } ), ${ offsetSnippet } )`;
|
|
452
542
|
|
|
453
543
|
} else {
|
|
454
544
|
|
|
455
|
-
snippet = `texelFetch( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), ${ levelSnippet } )`;
|
|
545
|
+
snippet = `texelFetch( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), int( ${ levelSnippet } ) )`;
|
|
456
546
|
|
|
457
547
|
}
|
|
458
548
|
|
|
@@ -460,11 +550,11 @@ ${ flowData.code }
|
|
|
460
550
|
|
|
461
551
|
if ( offsetSnippet ) {
|
|
462
552
|
|
|
463
|
-
snippet = `texelFetchOffset( ${ textureProperty }, ${ uvIndexSnippet }, ${ levelSnippet }, ${ offsetSnippet } )`;
|
|
553
|
+
snippet = `texelFetchOffset( ${ textureProperty }, ${ uvIndexSnippet }, int( ${ levelSnippet } ), ${ offsetSnippet } )`;
|
|
464
554
|
|
|
465
555
|
} else {
|
|
466
556
|
|
|
467
|
-
snippet = `texelFetch( ${ textureProperty }, ${ uvIndexSnippet }, ${ levelSnippet } )`;
|
|
557
|
+
snippet = `texelFetch( ${ textureProperty }, ${ uvIndexSnippet }, int( ${ levelSnippet } ) )`;
|
|
468
558
|
|
|
469
559
|
}
|
|
470
560
|
|
|
@@ -515,10 +605,13 @@ ${ flowData.code }
|
|
|
515
605
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
516
606
|
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
517
607
|
* @param {string} levelSnippet - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
608
|
+
* @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
|
|
518
609
|
* @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
519
610
|
* @return {string} The GLSL snippet.
|
|
520
611
|
*/
|
|
521
|
-
generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, offsetSnippet ) {
|
|
612
|
+
generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet ) {
|
|
613
|
+
|
|
614
|
+
if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
|
|
522
615
|
|
|
523
616
|
if ( offsetSnippet ) {
|
|
524
617
|
|
|
@@ -537,10 +630,13 @@ ${ flowData.code }
|
|
|
537
630
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
538
631
|
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
539
632
|
* @param {string} biasSnippet - A GLSL snippet that represents the bias to apply to the mip level before sampling.
|
|
633
|
+
* @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
|
|
540
634
|
* @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
541
635
|
* @return {string} The GLSL snippet.
|
|
542
636
|
*/
|
|
543
|
-
generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, offsetSnippet ) {
|
|
637
|
+
generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, offsetSnippet ) {
|
|
638
|
+
|
|
639
|
+
if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
|
|
544
640
|
|
|
545
641
|
if ( offsetSnippet ) {
|
|
546
642
|
|
|
@@ -559,10 +655,13 @@ ${ flowData.code }
|
|
|
559
655
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
560
656
|
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
561
657
|
* @param {Array<string>} gradSnippet - An array holding both gradient GLSL snippets.
|
|
658
|
+
* @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
|
|
562
659
|
* @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
563
660
|
* @return {string} The GLSL snippet.
|
|
564
661
|
*/
|
|
565
|
-
generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, offsetSnippet ) {
|
|
662
|
+
generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, offsetSnippet ) {
|
|
663
|
+
|
|
664
|
+
if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
|
|
566
665
|
|
|
567
666
|
if ( offsetSnippet ) {
|
|
568
667
|
|
|
@@ -591,6 +690,13 @@ ${ flowData.code }
|
|
|
591
690
|
|
|
592
691
|
if ( shaderStage === 'fragment' ) {
|
|
593
692
|
|
|
693
|
+
// Cube shadow maps use vec4(direction, compareValue)
|
|
694
|
+
if ( texture.isCubeTexture ) {
|
|
695
|
+
|
|
696
|
+
return `texture( ${ textureProperty }, vec4( ${ uvSnippet }, ${ compareSnippet } ) )`;
|
|
697
|
+
|
|
698
|
+
}
|
|
699
|
+
|
|
594
700
|
if ( depthSnippet ) {
|
|
595
701
|
|
|
596
702
|
if ( offsetSnippet ) {
|
|
@@ -620,28 +726,68 @@ ${ flowData.code }
|
|
|
620
726
|
}
|
|
621
727
|
|
|
622
728
|
/**
|
|
623
|
-
*
|
|
729
|
+
* Generates the GLSL snippet for gathering four texels from the given texture.
|
|
624
730
|
*
|
|
625
|
-
* @param {
|
|
626
|
-
* @
|
|
731
|
+
* @param {Texture} texture - The texture.
|
|
732
|
+
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
733
|
+
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
734
|
+
* @param {string} gatherSnippet - A GLSL snippet that represents the index of the channel to read.
|
|
735
|
+
* @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
|
|
736
|
+
* @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
737
|
+
* @param {?string} flipYSnippet - A GLSL snippet that represents the y-flip. Only used for WebGL.
|
|
738
|
+
* @return {string} The GLSL snippet.
|
|
627
739
|
*/
|
|
628
|
-
|
|
740
|
+
generateTextureGather( texture, textureProperty, uvSnippet, gatherSnippet, depthSnippet, offsetSnippet, flipYSnippet ) {
|
|
629
741
|
|
|
630
|
-
|
|
742
|
+
if ( texture.isDepthTexture ) gatherSnippet = '0';
|
|
631
743
|
|
|
632
|
-
|
|
744
|
+
if ( offsetSnippet === null ) offsetSnippet = 'ivec2( 0 )';
|
|
633
745
|
|
|
634
|
-
if (
|
|
746
|
+
if ( flipYSnippet === null ) flipYSnippet = 'false';
|
|
635
747
|
|
|
636
|
-
|
|
748
|
+
if ( depthSnippet ) {
|
|
637
749
|
|
|
638
|
-
|
|
750
|
+
this._include( 'textureGatherArray' );
|
|
639
751
|
|
|
640
|
-
}
|
|
752
|
+
return `tsl_textureGather_array( ${gatherSnippet}, ${ textureProperty }, vec3( ${ uvSnippet }, ${ depthSnippet } ), ${ offsetSnippet }, ${ flipYSnippet } )`;
|
|
641
753
|
|
|
642
754
|
}
|
|
643
755
|
|
|
644
|
-
|
|
756
|
+
this._include( 'textureGather' );
|
|
757
|
+
|
|
758
|
+
return `tsl_textureGather( ${gatherSnippet}, ${ textureProperty }, ${ uvSnippet }, ${ offsetSnippet }, ${ flipYSnippet } )`;
|
|
759
|
+
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
/**
|
|
763
|
+
* Generates the GLSL snippet for performing a depth comparison on four texels in the given depth texture.
|
|
764
|
+
*
|
|
765
|
+
* @param {Texture} texture - The texture.
|
|
766
|
+
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
767
|
+
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
768
|
+
* @param {string} compareSnippet - A GLSL snippet that represents the reference value.
|
|
769
|
+
* @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
|
|
770
|
+
* @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
771
|
+
* @param {?string} flipYSnippet - A GLSL snippet that represents the y-flip. Only used for WebGL.
|
|
772
|
+
* @return {string} The GLSL snippet.
|
|
773
|
+
*/
|
|
774
|
+
generateTextureGatherCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, offsetSnippet, flipYSnippet ) {
|
|
775
|
+
|
|
776
|
+
if ( offsetSnippet === null ) offsetSnippet = 'ivec2( 0 )';
|
|
777
|
+
|
|
778
|
+
if ( flipYSnippet === null ) flipYSnippet = 'false';
|
|
779
|
+
|
|
780
|
+
if ( depthSnippet ) {
|
|
781
|
+
|
|
782
|
+
this._include( 'textureGatherCompareArray' );
|
|
783
|
+
|
|
784
|
+
return `tsl_textureGatherCompare_array( ${ textureProperty }, vec3( ${ uvSnippet }, ${depthSnippet} ), ${ offsetSnippet }, ${ compareSnippet }, ${ flipYSnippet } )`;
|
|
785
|
+
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
this._include( 'textureGatherCompare' );
|
|
789
|
+
|
|
790
|
+
return `tsl_textureGatherCompare( ${ textureProperty }, ${ uvSnippet }, ${ offsetSnippet }, ${ compareSnippet }, ${ flipYSnippet } )`;
|
|
645
791
|
|
|
646
792
|
}
|
|
647
793
|
|
|
@@ -665,7 +811,8 @@ ${ flowData.code }
|
|
|
665
811
|
|
|
666
812
|
if ( uniform.type === 'texture' || uniform.type === 'texture3D' ) {
|
|
667
813
|
|
|
668
|
-
const
|
|
814
|
+
const textureNode = uniform.node;
|
|
815
|
+
const texture = textureNode.value;
|
|
669
816
|
|
|
670
817
|
let typePrefix = '';
|
|
671
818
|
|
|
@@ -687,7 +834,7 @@ ${ flowData.code }
|
|
|
687
834
|
|
|
688
835
|
snippet = `${typePrefix}sampler3D ${ uniform.name };`;
|
|
689
836
|
|
|
690
|
-
} else if ( texture.compareFunction ) {
|
|
837
|
+
} else if ( texture.compareFunction && textureNode.compareNode !== null ) {
|
|
691
838
|
|
|
692
839
|
if ( texture.isArrayTexture === true ) {
|
|
693
840
|
|
|
@@ -713,6 +860,20 @@ ${ flowData.code }
|
|
|
713
860
|
|
|
714
861
|
snippet = `samplerCube ${ uniform.name };`;
|
|
715
862
|
|
|
863
|
+
} else if ( uniform.type === 'cubeDepthTexture' ) {
|
|
864
|
+
|
|
865
|
+
const texture = uniform.node.value;
|
|
866
|
+
|
|
867
|
+
if ( texture.compareFunction ) {
|
|
868
|
+
|
|
869
|
+
snippet = `samplerCubeShadow ${ uniform.name };`;
|
|
870
|
+
|
|
871
|
+
} else {
|
|
872
|
+
|
|
873
|
+
snippet = `samplerCube ${ uniform.name };`;
|
|
874
|
+
|
|
875
|
+
}
|
|
876
|
+
|
|
716
877
|
} else if ( uniform.type === 'buffer' ) {
|
|
717
878
|
|
|
718
879
|
const bufferNode = uniform.node;
|
|
@@ -724,32 +885,56 @@ ${ flowData.code }
|
|
|
724
885
|
|
|
725
886
|
} else {
|
|
726
887
|
|
|
727
|
-
const
|
|
888
|
+
const groupName = uniform.groupNode.name;
|
|
728
889
|
|
|
729
|
-
|
|
890
|
+
// Check if this group has already been processed
|
|
891
|
+
if ( uniformGroups[ groupName ] === undefined ) {
|
|
730
892
|
|
|
731
|
-
|
|
893
|
+
// Get the shared uniform group that contains uniforms from all stages
|
|
894
|
+
const sharedUniformGroup = this.uniformGroups[ groupName ];
|
|
732
895
|
|
|
733
|
-
|
|
896
|
+
if ( sharedUniformGroup !== undefined ) {
|
|
897
|
+
|
|
898
|
+
// Generate snippets for ALL uniforms in this shared group
|
|
899
|
+
const snippets = [];
|
|
900
|
+
|
|
901
|
+
for ( const sharedUniform of sharedUniformGroup.uniforms ) {
|
|
734
902
|
|
|
735
|
-
|
|
903
|
+
const type = sharedUniform.getType();
|
|
904
|
+
const vectorType = this.getVectorType( type );
|
|
905
|
+
const precision = sharedUniform.nodeUniform.node.precision;
|
|
736
906
|
|
|
737
|
-
|
|
907
|
+
let uniformSnippet = `${ vectorType } ${ sharedUniform.name };`;
|
|
738
908
|
|
|
739
|
-
|
|
909
|
+
if ( precision !== null ) {
|
|
910
|
+
|
|
911
|
+
uniformSnippet = precisionLib[ precision ] + ' ' + uniformSnippet;
|
|
912
|
+
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
snippets.push( '\t' + uniformSnippet );
|
|
916
|
+
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
uniformGroups[ groupName ] = snippets;
|
|
920
|
+
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
group = true;
|
|
740
926
|
|
|
741
927
|
}
|
|
742
928
|
|
|
743
|
-
if ( group ) {
|
|
929
|
+
if ( ! group ) {
|
|
744
930
|
|
|
745
|
-
|
|
931
|
+
const precision = uniform.node.precision;
|
|
746
932
|
|
|
747
|
-
|
|
748
|
-
const groupSnippets = uniformGroups[ groupName ] || ( uniformGroups[ groupName ] = [] );
|
|
933
|
+
if ( precision !== null ) {
|
|
749
934
|
|
|
750
|
-
|
|
935
|
+
snippet = precisionLib[ precision ] + ' ' + snippet;
|
|
751
936
|
|
|
752
|
-
|
|
937
|
+
}
|
|
753
938
|
|
|
754
939
|
snippet = 'uniform ' + snippet;
|
|
755
940
|
|
|
@@ -765,7 +950,7 @@ ${ flowData.code }
|
|
|
765
950
|
|
|
766
951
|
const groupSnippets = uniformGroups[ name ];
|
|
767
952
|
|
|
768
|
-
output += this._getGLSLUniformStruct(
|
|
953
|
+
output += this._getGLSLUniformStruct( name, groupSnippets.join( '\n' ) ) + '\n';
|
|
769
954
|
|
|
770
955
|
}
|
|
771
956
|
|
|
@@ -888,9 +1073,9 @@ ${ flowData.code }
|
|
|
888
1073
|
|
|
889
1074
|
}
|
|
890
1075
|
|
|
891
|
-
if ( outputSnippet.length === 0 ) {
|
|
1076
|
+
if ( shaderStage === 'fragment' && outputSnippet.length === 0 ) {
|
|
892
1077
|
|
|
893
|
-
outputSnippet.push(
|
|
1078
|
+
outputSnippet.push( `layout( location = 0 ) out ${ this.getOutputType() } fragColor;` );
|
|
894
1079
|
|
|
895
1080
|
}
|
|
896
1081
|
|
|
@@ -1061,9 +1246,11 @@ ${ flowData.code }
|
|
|
1061
1246
|
|
|
1062
1247
|
return 'uint( gl_DrawID )';
|
|
1063
1248
|
|
|
1064
|
-
}
|
|
1249
|
+
} else {
|
|
1250
|
+
|
|
1251
|
+
return 'nodeUniformDrawId'; // fallback to uniform
|
|
1065
1252
|
|
|
1066
|
-
|
|
1253
|
+
}
|
|
1067
1254
|
|
|
1068
1255
|
}
|
|
1069
1256
|
|
|
@@ -1330,6 +1517,9 @@ ${shaderData.extensions}
|
|
|
1330
1517
|
// precision
|
|
1331
1518
|
${ defaultPrecisions }
|
|
1332
1519
|
|
|
1520
|
+
// structs
|
|
1521
|
+
${shaderData.structs}
|
|
1522
|
+
|
|
1333
1523
|
// uniforms
|
|
1334
1524
|
${shaderData.uniforms}
|
|
1335
1525
|
|
|
@@ -1339,14 +1529,14 @@ ${shaderData.varyings}
|
|
|
1339
1529
|
// attributes
|
|
1340
1530
|
${shaderData.attributes}
|
|
1341
1531
|
|
|
1532
|
+
// vars
|
|
1533
|
+
${shaderData.vars}
|
|
1534
|
+
|
|
1342
1535
|
// codes
|
|
1343
1536
|
${shaderData.codes}
|
|
1344
1537
|
|
|
1345
1538
|
void main() {
|
|
1346
1539
|
|
|
1347
|
-
// vars
|
|
1348
|
-
${shaderData.vars}
|
|
1349
|
-
|
|
1350
1540
|
// transforms
|
|
1351
1541
|
${shaderData.transforms}
|
|
1352
1542
|
|
|
@@ -1388,14 +1578,14 @@ ${shaderData.uniforms}
|
|
|
1388
1578
|
// varyings
|
|
1389
1579
|
${shaderData.varyings}
|
|
1390
1580
|
|
|
1581
|
+
// vars
|
|
1582
|
+
${shaderData.vars}
|
|
1583
|
+
|
|
1391
1584
|
// codes
|
|
1392
1585
|
${shaderData.codes}
|
|
1393
1586
|
|
|
1394
1587
|
void main() {
|
|
1395
1588
|
|
|
1396
|
-
// vars
|
|
1397
|
-
${shaderData.vars}
|
|
1398
|
-
|
|
1399
1589
|
// flow
|
|
1400
1590
|
${shaderData.flow}
|
|
1401
1591
|
|
|
@@ -1443,14 +1633,14 @@ void main() {
|
|
|
1443
1633
|
if ( shaderStage === 'vertex' ) {
|
|
1444
1634
|
|
|
1445
1635
|
flow += 'gl_Position = ';
|
|
1446
|
-
flow += `${ flowSlotData.result };`;
|
|
1636
|
+
flow += `${ this.format( flowSlotData.result, mainNode.getNodeType( this ), 'vec4' ) };`;
|
|
1447
1637
|
|
|
1448
1638
|
} else if ( shaderStage === 'fragment' ) {
|
|
1449
1639
|
|
|
1450
1640
|
if ( ! node.outputNode.isOutputStructNode ) {
|
|
1451
1641
|
|
|
1452
1642
|
flow += 'fragColor = ';
|
|
1453
|
-
flow += `${ flowSlotData.result };`;
|
|
1643
|
+
flow += `${ this.format( flowSlotData.result, mainNode.getNodeType( this ), this.getOutputType() ) };`;
|
|
1454
1644
|
|
|
1455
1645
|
}
|
|
1456
1646
|
|
|
@@ -1466,12 +1656,26 @@ void main() {
|
|
|
1466
1656
|
stageData.uniforms = this.getUniforms( shaderStage );
|
|
1467
1657
|
stageData.attributes = this.getAttributes( shaderStage );
|
|
1468
1658
|
stageData.varyings = this.getVaryings( shaderStage );
|
|
1469
|
-
stageData.vars = this.getVars( shaderStage );
|
|
1659
|
+
stageData.vars = this.getVars( shaderStage, true );
|
|
1470
1660
|
stageData.structs = this.getStructs( shaderStage );
|
|
1471
1661
|
stageData.codes = this.getCodes( shaderStage );
|
|
1472
1662
|
stageData.transforms = this.getTransforms( shaderStage );
|
|
1473
1663
|
stageData.flow = flow;
|
|
1474
1664
|
|
|
1665
|
+
// fallbacks
|
|
1666
|
+
|
|
1667
|
+
if ( shaderStage === 'vertex' ) {
|
|
1668
|
+
|
|
1669
|
+
const ext = this.renderer.backend.extensions;
|
|
1670
|
+
|
|
1671
|
+
if ( this.object.isBatchedMesh && ext.has( 'WEBGL_multi_draw' ) === false ) {
|
|
1672
|
+
|
|
1673
|
+
stageData.uniforms += '\nuniform uint nodeUniformDrawId;\n';
|
|
1674
|
+
|
|
1675
|
+
}
|
|
1676
|
+
|
|
1677
|
+
}
|
|
1678
|
+
|
|
1475
1679
|
}
|
|
1476
1680
|
|
|
1477
1681
|
if ( this.material !== null ) {
|
|
@@ -1519,7 +1723,7 @@ void main() {
|
|
|
1519
1723
|
uniformGPU = new NodeSampledTexture( uniformNode.name, uniformNode.node, group );
|
|
1520
1724
|
bindings.push( uniformGPU );
|
|
1521
1725
|
|
|
1522
|
-
} else if ( type === 'cubeTexture' ) {
|
|
1726
|
+
} else if ( type === 'cubeTexture' || type === 'cubeDepthTexture' ) {
|
|
1523
1727
|
|
|
1524
1728
|
uniformGPU = new NodeSampledCubeTexture( uniformNode.name, uniformNode.node, group );
|
|
1525
1729
|
bindings.push( uniformGPU );
|
|
@@ -1531,11 +1735,22 @@ void main() {
|
|
|
1531
1735
|
|
|
1532
1736
|
} else if ( type === 'buffer' ) {
|
|
1533
1737
|
|
|
1534
|
-
node.name = `NodeBuffer_${ node.id }`;
|
|
1535
1738
|
uniformNode.name = `buffer${ node.id }`;
|
|
1536
1739
|
|
|
1537
|
-
const
|
|
1538
|
-
|
|
1740
|
+
const sharedData = this.getSharedDataFromNode( node );
|
|
1741
|
+
|
|
1742
|
+
let buffer = sharedData.buffer;
|
|
1743
|
+
|
|
1744
|
+
if ( buffer === undefined ) {
|
|
1745
|
+
|
|
1746
|
+
node.name = `NodeBuffer_${ node.id }`;
|
|
1747
|
+
|
|
1748
|
+
buffer = new NodeUniformBuffer( node, group );
|
|
1749
|
+
buffer.name = node.name;
|
|
1750
|
+
|
|
1751
|
+
sharedData.buffer = buffer;
|
|
1752
|
+
|
|
1753
|
+
}
|
|
1539
1754
|
|
|
1540
1755
|
bindings.push( buffer );
|
|
1541
1756
|
|
|
@@ -1543,24 +1758,38 @@ void main() {
|
|
|
1543
1758
|
|
|
1544
1759
|
} else {
|
|
1545
1760
|
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
let uniformsGroup = uniformsStage[ groupName ];
|
|
1761
|
+
let uniformsGroup = this.uniformGroups[ groupName ];
|
|
1549
1762
|
|
|
1550
1763
|
if ( uniformsGroup === undefined ) {
|
|
1551
1764
|
|
|
1552
|
-
uniformsGroup = new NodeUniformsGroup(
|
|
1553
|
-
//uniformsGroup.setVisibility( gpuShaderStageLib[ shaderStage ] );
|
|
1765
|
+
uniformsGroup = new NodeUniformsGroup( groupName, group );
|
|
1554
1766
|
|
|
1555
|
-
|
|
1767
|
+
this.uniformGroups[ groupName ] = uniformsGroup;
|
|
1556
1768
|
|
|
1557
1769
|
bindings.push( uniformsGroup );
|
|
1558
1770
|
|
|
1771
|
+
} else {
|
|
1772
|
+
|
|
1773
|
+
// Add to bindings for this stage if not already present
|
|
1774
|
+
if ( bindings.indexOf( uniformsGroup ) === - 1 ) {
|
|
1775
|
+
|
|
1776
|
+
bindings.push( uniformsGroup );
|
|
1777
|
+
|
|
1778
|
+
}
|
|
1779
|
+
|
|
1559
1780
|
}
|
|
1560
1781
|
|
|
1561
1782
|
uniformGPU = this.getNodeUniform( uniformNode, type );
|
|
1562
1783
|
|
|
1563
|
-
|
|
1784
|
+
// Only add uniform if not already present in the group (check by name to avoid duplicates across stages)
|
|
1785
|
+
const uniformName = uniformGPU.name;
|
|
1786
|
+
const alreadyExists = uniformsGroup.uniforms.some( u => u.name === uniformName );
|
|
1787
|
+
|
|
1788
|
+
if ( ! alreadyExists ) {
|
|
1789
|
+
|
|
1790
|
+
uniformsGroup.addUniform( uniformGPU );
|
|
1791
|
+
|
|
1792
|
+
}
|
|
1564
1793
|
|
|
1565
1794
|
}
|
|
1566
1795
|
|