super-three 0.177.0 → 0.181.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/README.md +1 -1
- package/build/three.cjs +1994 -749
- package/build/three.core.js +1358 -506
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +631 -247
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +113 -33
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +9571 -3424
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +9397 -3426
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +2 -3
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +0 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +9 -9
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +62 -15
- package/examples/jsm/csm/CSMShadowNode.js +4 -4
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/RoomEnvironment.js +8 -3
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +683 -299
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -13
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lights/LightProbeGenerator.js +14 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +4 -4
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +210 -22
- package/examples/jsm/loaders/FBXLoader.js +4 -4
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +233 -34
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +13 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -892
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +3 -3
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/physics/RapierPhysics.js +95 -16
- package/examples/jsm/postprocessing/GTAOPass.js +10 -9
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +17 -17
- package/examples/jsm/postprocessing/SSAOPass.js +10 -9
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +196 -92
- package/examples/jsm/transpiler/Transpiler.js +17 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +11 -6
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +578 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +18 -20
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +5 -2
- package/src/Three.TSL.js +112 -32
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +8 -7
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +13 -5
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/Clock.js +2 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +4 -3
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/{examples/jsm/misc → src/core}/Timer.js +4 -42
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +279 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/Path.js +22 -22
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +8 -6
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +42 -12
- package/src/helpers/SkeletonHelper.js +35 -6
- package/src/lights/LightShadow.js +21 -8
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +29 -5
- package/src/loaders/ImageBitmapLoader.js +32 -8
- package/src/loaders/ImageLoader.js +56 -9
- package/src/loaders/Loader.js +17 -3
- package/src/loaders/LoadingManager.js +45 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +2 -1
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -10
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
- package/src/materials/nodes/NodeMaterial.js +90 -27
- package/src/materials/nodes/PointsNodeMaterial.js +86 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +10 -5
- package/src/math/Line3.js +129 -2
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +55 -34
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +69 -67
- package/src/math/Spherical.js +3 -3
- package/src/nodes/Nodes.js +6 -4
- package/src/nodes/TSL.js +9 -4
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +31 -25
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +142 -16
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +97 -30
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +25 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +20 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +23 -1
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +142 -44
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +13 -0
- package/src/nodes/core/AssignNode.js +6 -2
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +48 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
- package/src/nodes/core/Node.js +167 -34
- package/src/nodes/core/NodeBuilder.js +404 -120
- package/src/nodes/core/NodeFrame.js +21 -21
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +17 -88
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +77 -30
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +80 -14
- package/src/nodes/core/VarNode.js +142 -16
- package/src/nodes/core/VaryingNode.js +9 -6
- package/src/nodes/display/BlendModes.js +7 -6
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +35 -7
- package/src/nodes/display/NormalMapNode.js +20 -50
- package/src/nodes/display/PassNode.js +206 -17
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -40
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +94 -4
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +19 -18
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +81 -25
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
- package/src/nodes/lighting/EnvironmentNode.js +11 -11
- package/src/nodes/lighting/LightsNode.js +7 -8
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ProjectorLightNode.js +19 -6
- package/src/nodes/lighting/ShadowFilterNode.js +3 -1
- package/src/nodes/lighting/ShadowNode.js +77 -10
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +165 -1
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +25 -27
- package/src/nodes/math/MathNode.js +106 -65
- package/src/nodes/math/OperatorNode.js +28 -43
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -2
- package/src/nodes/tsl/TSLCore.js +546 -186
- package/src/nodes/utils/DebugNode.js +3 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +119 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -41
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +33 -6
- package/src/nodes/utils/ReflectorNode.js +68 -10
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +6 -4
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +77 -66
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/Bindings.js +76 -19
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +61 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +84 -5
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +486 -255
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -68
- package/src/renderers/common/Sampler.js +117 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +27 -0
- package/src/renderers/common/Textures.js +138 -46
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +63 -24
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +161 -66
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +4 -3
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +25 -18
- package/src/renderers/webgl/WebGLPrograms.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -2
- package/src/renderers/webgl/WebGLState.js +17 -16
- package/src/renderers/webgl/WebGLTextures.js +38 -21
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +205 -128
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
- package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +89 -13
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +14 -3
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +29 -2
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -1,26 +1,31 @@
|
|
|
1
|
-
import { Program, FunctionDeclaration, For, AccessorElements, Ternary, Varying, DynamicElement, StaticElement, FunctionParameter, Unary, Conditional, VariableDeclaration, Operator, Number, String, FunctionCall, Return, Accessor, Uniform, Discard } from './AST.js';
|
|
1
|
+
import { Program, FunctionDeclaration, Switch, For, AccessorElements, Ternary, Varying, DynamicElement, StaticElement, FunctionParameter, Unary, Conditional, VariableDeclaration, Operator, Number, String, FunctionCall, Return, Accessor, Uniform, Discard, SwitchCase, Continue, Break, While, Comment } from './AST.js';
|
|
2
|
+
|
|
3
|
+
import { isType } from './TranspilerUtils.js';
|
|
2
4
|
|
|
3
5
|
const unaryOperators = [
|
|
4
6
|
'+', '-', '~', '!', '++', '--'
|
|
5
7
|
];
|
|
6
8
|
|
|
9
|
+
const arithmeticOperators = [
|
|
10
|
+
'*', '/', '%', '+', '-', '<<', '>>'
|
|
11
|
+
];
|
|
12
|
+
|
|
7
13
|
const precedenceOperators = [
|
|
8
|
-
'
|
|
9
|
-
'
|
|
10
|
-
'
|
|
11
|
-
|
|
12
|
-
'
|
|
13
|
-
'
|
|
14
|
-
'
|
|
15
|
-
'
|
|
16
|
-
'
|
|
17
|
-
'
|
|
18
|
-
'
|
|
19
|
-
'
|
|
20
|
-
'
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
].reverse();
|
|
14
|
+
[ ',' ],
|
|
15
|
+
[ '=', '+=', '-=', '*=', '/=', '%=', '^=', '&=', '|=', '<<=', '>>=' ],
|
|
16
|
+
[ '?' ],
|
|
17
|
+
[ '||' ],
|
|
18
|
+
[ '^^' ],
|
|
19
|
+
[ '&&' ],
|
|
20
|
+
[ '|' ],
|
|
21
|
+
[ '^' ],
|
|
22
|
+
[ '&' ],
|
|
23
|
+
[ '==', '!=' ],
|
|
24
|
+
[ '<', '>', '<=', '>=' ],
|
|
25
|
+
[ '<<', '>>' ],
|
|
26
|
+
[ '+', '-' ],
|
|
27
|
+
[ '*', '/', '%' ]
|
|
28
|
+
];
|
|
24
29
|
|
|
25
30
|
const associativityRightToLeft = [
|
|
26
31
|
'=',
|
|
@@ -41,7 +46,7 @@ const samplers3D = [ 'sampler3D', 'isampler3D', 'usampler3D' ];
|
|
|
41
46
|
const spaceRegExp = /^((\t| )\n*)+/;
|
|
42
47
|
const lineRegExp = /^\n+/;
|
|
43
48
|
const commentRegExp = /^\/\*[\s\S]*?\*\//;
|
|
44
|
-
const inlineCommentRegExp = /^\/\/.*?(
|
|
49
|
+
const inlineCommentRegExp = /^\/\/.*?(?=\n|$)/;
|
|
45
50
|
|
|
46
51
|
const numberRegExp = /^((0x\w+)|(\.?\d+\.?\d*((e-?\d+)|\w)?))/;
|
|
47
52
|
const stringDoubleRegExp = /^(\"((?:[^"\\]|\\.)*)\")/;
|
|
@@ -80,7 +85,9 @@ class Token {
|
|
|
80
85
|
this.str = str;
|
|
81
86
|
this.pos = pos;
|
|
82
87
|
|
|
83
|
-
this.
|
|
88
|
+
this.isTag = false;
|
|
89
|
+
|
|
90
|
+
this.tags = null;
|
|
84
91
|
|
|
85
92
|
}
|
|
86
93
|
|
|
@@ -189,7 +196,7 @@ class Tokenizer {
|
|
|
189
196
|
|
|
190
197
|
}
|
|
191
198
|
|
|
192
|
-
|
|
199
|
+
nextToken() {
|
|
193
200
|
|
|
194
201
|
const remainingCode = this.skip( spaceRegExp );
|
|
195
202
|
|
|
@@ -201,35 +208,46 @@ class Tokenizer {
|
|
|
201
208
|
if ( result ) {
|
|
202
209
|
|
|
203
210
|
const token = new Token( this, parser.type, result[ parser.group || 0 ], this.position );
|
|
211
|
+
token.isTag = parser.isTag;
|
|
204
212
|
|
|
205
213
|
this.position += result[ 0 ].length;
|
|
206
214
|
|
|
207
|
-
|
|
215
|
+
return token;
|
|
216
|
+
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
}
|
|
208
222
|
|
|
209
|
-
|
|
223
|
+
readToken() {
|
|
210
224
|
|
|
211
|
-
|
|
225
|
+
let token = this.nextToken();
|
|
212
226
|
|
|
213
|
-
|
|
227
|
+
if ( token && token.isTag ) {
|
|
214
228
|
|
|
215
|
-
|
|
229
|
+
const tags = [];
|
|
216
230
|
|
|
217
|
-
|
|
231
|
+
while ( token.isTag ) {
|
|
218
232
|
|
|
219
|
-
|
|
233
|
+
tags.push( token );
|
|
220
234
|
|
|
221
|
-
|
|
235
|
+
token = this.nextToken();
|
|
236
|
+
|
|
237
|
+
if ( ! token ) return;
|
|
222
238
|
|
|
223
239
|
}
|
|
224
240
|
|
|
241
|
+
token.tags = tags;
|
|
242
|
+
|
|
225
243
|
}
|
|
226
244
|
|
|
245
|
+
return token;
|
|
246
|
+
|
|
227
247
|
}
|
|
228
248
|
|
|
229
249
|
}
|
|
230
250
|
|
|
231
|
-
const isType = ( str ) => /void|bool|float|u?int|mat[234]|mat[234]x[234]|(u|i|b)?vec[234]/.test( str );
|
|
232
|
-
|
|
233
251
|
class GLSLDecoder {
|
|
234
252
|
|
|
235
253
|
constructor() {
|
|
@@ -238,8 +256,6 @@ class GLSLDecoder {
|
|
|
238
256
|
this.tokenizer = null;
|
|
239
257
|
this.keywords = [];
|
|
240
258
|
|
|
241
|
-
this._currentFunction = null;
|
|
242
|
-
|
|
243
259
|
this.addPolyfill( 'gl_FragCoord', 'vec3 gl_FragCoord = vec3( screenCoordinate.x, screenCoordinate.y.oneMinus(), screenCoordinate.z );' );
|
|
244
260
|
|
|
245
261
|
}
|
|
@@ -317,7 +333,7 @@ class GLSLDecoder {
|
|
|
317
333
|
|
|
318
334
|
let groupIndex = 0;
|
|
319
335
|
|
|
320
|
-
for ( const
|
|
336
|
+
for ( const operators of precedenceOperators ) {
|
|
321
337
|
|
|
322
338
|
const parseToken = ( i, inverse = false ) => {
|
|
323
339
|
|
|
@@ -327,7 +343,16 @@ class GLSLDecoder {
|
|
|
327
343
|
|
|
328
344
|
if ( ! token.isOperator || i === 0 || i === tokens.length - 1 ) return;
|
|
329
345
|
|
|
330
|
-
|
|
346
|
+
// important for negate operator after arithmetic operator: a * -1, a * -( b )
|
|
347
|
+
if ( inverse && arithmeticOperators.includes( tokens[ i - 1 ].str ) ) {
|
|
348
|
+
|
|
349
|
+
return;
|
|
350
|
+
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
if ( groupIndex === 0 && operators.includes( token.str ) ) {
|
|
354
|
+
|
|
355
|
+
const operator = token.str;
|
|
331
356
|
|
|
332
357
|
if ( operator === '?' ) {
|
|
333
358
|
|
|
@@ -346,7 +371,7 @@ class GLSLDecoder {
|
|
|
346
371
|
const left = this.parseExpressionFromTokens( tokens.slice( 0, i ) );
|
|
347
372
|
const right = this.parseExpressionFromTokens( tokens.slice( i + 1, tokens.length ) );
|
|
348
373
|
|
|
349
|
-
return
|
|
374
|
+
return new Operator( operator, left, right );
|
|
350
375
|
|
|
351
376
|
}
|
|
352
377
|
|
|
@@ -372,7 +397,9 @@ class GLSLDecoder {
|
|
|
372
397
|
|
|
373
398
|
};
|
|
374
399
|
|
|
375
|
-
|
|
400
|
+
const isRightAssociative = operators.some( op => associativityRightToLeft.includes( op ) );
|
|
401
|
+
|
|
402
|
+
if ( isRightAssociative ) {
|
|
376
403
|
|
|
377
404
|
for ( let i = 0; i < tokens.length; i ++ ) {
|
|
378
405
|
|
|
@@ -447,7 +474,7 @@ class GLSLDecoder {
|
|
|
447
474
|
const rightTokens = tokens.slice( leftTokens.length + 1 );
|
|
448
475
|
const right = this.parseExpressionFromTokens( rightTokens );
|
|
449
476
|
|
|
450
|
-
return
|
|
477
|
+
return new Operator( operator.str, left, right );
|
|
451
478
|
|
|
452
479
|
}
|
|
453
480
|
|
|
@@ -492,6 +519,14 @@ class GLSLDecoder {
|
|
|
492
519
|
|
|
493
520
|
return new Discard();
|
|
494
521
|
|
|
522
|
+
} else if ( firstToken.str === 'continue' ) {
|
|
523
|
+
|
|
524
|
+
return new Continue();
|
|
525
|
+
|
|
526
|
+
} else if ( firstToken.str === 'break' ) {
|
|
527
|
+
|
|
528
|
+
return new Break();
|
|
529
|
+
|
|
495
530
|
}
|
|
496
531
|
|
|
497
532
|
const secondToken = tokens[ 1 ];
|
|
@@ -657,14 +692,9 @@ class GLSLDecoder {
|
|
|
657
692
|
const paramsTokens = this.readTokensUntil( ')' );
|
|
658
693
|
|
|
659
694
|
const params = this.parseFunctionParams( paramsTokens.slice( 1, paramsTokens.length - 1 ) );
|
|
695
|
+
const body = this.parseBlock();
|
|
660
696
|
|
|
661
|
-
const func = new FunctionDeclaration( type, name, params );
|
|
662
|
-
|
|
663
|
-
this._currentFunction = func;
|
|
664
|
-
|
|
665
|
-
this.parseBlock( func );
|
|
666
|
-
|
|
667
|
-
this._currentFunction = null;
|
|
697
|
+
const func = new FunctionDeclaration( type, name, params, body );
|
|
668
698
|
|
|
669
699
|
return func;
|
|
670
700
|
|
|
@@ -760,6 +790,31 @@ class GLSLDecoder {
|
|
|
760
790
|
|
|
761
791
|
}
|
|
762
792
|
|
|
793
|
+
parseWhile() {
|
|
794
|
+
|
|
795
|
+
this.readToken(); // skip 'while'
|
|
796
|
+
|
|
797
|
+
const conditionTokens = this.readTokensUntil( ')' ).slice( 1, - 1 );
|
|
798
|
+
const condition = this.parseExpressionFromTokens( conditionTokens );
|
|
799
|
+
|
|
800
|
+
let body;
|
|
801
|
+
|
|
802
|
+
if ( this.getToken().str === '{' ) {
|
|
803
|
+
|
|
804
|
+
body = this.parseBlock();
|
|
805
|
+
|
|
806
|
+
} else {
|
|
807
|
+
|
|
808
|
+
body = [ this.parseExpression() ];
|
|
809
|
+
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
const statement = new While( condition, body );
|
|
813
|
+
|
|
814
|
+
return statement;
|
|
815
|
+
|
|
816
|
+
}
|
|
817
|
+
|
|
763
818
|
parseFor() {
|
|
764
819
|
|
|
765
820
|
this.readToken(); // skip 'for'
|
|
@@ -785,22 +840,100 @@ class GLSLDecoder {
|
|
|
785
840
|
const condition = this.parseExpressionFromTokens( conditionTokens );
|
|
786
841
|
const afterthought = this.parseExpressionFromTokens( afterthoughtTokens );
|
|
787
842
|
|
|
788
|
-
|
|
843
|
+
let body;
|
|
789
844
|
|
|
790
845
|
if ( this.getToken().str === '{' ) {
|
|
791
846
|
|
|
792
|
-
this.parseBlock(
|
|
847
|
+
body = this.parseBlock();
|
|
793
848
|
|
|
794
849
|
} else {
|
|
795
850
|
|
|
796
|
-
|
|
851
|
+
body = [ this.parseExpression() ];
|
|
797
852
|
|
|
798
853
|
}
|
|
799
854
|
|
|
855
|
+
const statement = new For( initialization, condition, afterthought, body );
|
|
856
|
+
|
|
800
857
|
return statement;
|
|
801
858
|
|
|
802
859
|
}
|
|
803
860
|
|
|
861
|
+
parseSwitch() {
|
|
862
|
+
|
|
863
|
+
this.readToken(); // Skip 'switch'
|
|
864
|
+
|
|
865
|
+
const switchDeterminantTokens = this.readTokensUntil( ')' );
|
|
866
|
+
|
|
867
|
+
// Parse expression between parentheses. Index 1: char after '('. Index -1: char before ')'
|
|
868
|
+
const discriminant = this.parseExpressionFromTokens( switchDeterminantTokens.slice( 1, - 1 ) );
|
|
869
|
+
|
|
870
|
+
// Validate curly braces
|
|
871
|
+
if ( this.getToken().str !== '{' ) {
|
|
872
|
+
|
|
873
|
+
throw new Error( 'Expected \'{\' after switch(...) ' );
|
|
874
|
+
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
this.readToken(); // Skip '{'
|
|
878
|
+
|
|
879
|
+
const cases = this.parseSwitchCases();
|
|
880
|
+
|
|
881
|
+
const switchStatement = new Switch( discriminant, cases );
|
|
882
|
+
|
|
883
|
+
return switchStatement;
|
|
884
|
+
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
parseSwitchCases() {
|
|
888
|
+
|
|
889
|
+
const cases = [];
|
|
890
|
+
|
|
891
|
+
let token = this.getToken();
|
|
892
|
+
let conditions = null;
|
|
893
|
+
|
|
894
|
+
const isCase = ( token ) => token.str === 'case' || token.str === 'default';
|
|
895
|
+
|
|
896
|
+
while ( isCase( token ) ) {
|
|
897
|
+
|
|
898
|
+
this.readToken(); // Skip 'case' or 'default'
|
|
899
|
+
|
|
900
|
+
if ( token.str === 'case' ) {
|
|
901
|
+
|
|
902
|
+
const caseTokens = this.readTokensUntil( ':' );
|
|
903
|
+
const caseStatement = this.parseExpressionFromTokens( caseTokens.slice( 0, - 1 ) );
|
|
904
|
+
|
|
905
|
+
conditions = conditions || [];
|
|
906
|
+
conditions.push( caseStatement );
|
|
907
|
+
|
|
908
|
+
} else {
|
|
909
|
+
|
|
910
|
+
this.readTokensUntil( ':' ); // Skip 'default:'
|
|
911
|
+
|
|
912
|
+
conditions = null;
|
|
913
|
+
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
token = this.getToken();
|
|
917
|
+
|
|
918
|
+
if ( isCase( token ) ) {
|
|
919
|
+
|
|
920
|
+
// If the next token is another case/default, continue parsing
|
|
921
|
+
continue;
|
|
922
|
+
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
cases.push( new SwitchCase( this.parseBlock(), conditions ) );
|
|
926
|
+
|
|
927
|
+
token = this.getToken();
|
|
928
|
+
|
|
929
|
+
conditions = null;
|
|
930
|
+
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
return cases;
|
|
934
|
+
|
|
935
|
+
}
|
|
936
|
+
|
|
804
937
|
parseIf() {
|
|
805
938
|
|
|
806
939
|
const parseIfExpression = () => {
|
|
@@ -813,25 +946,28 @@ class GLSLDecoder {
|
|
|
813
946
|
|
|
814
947
|
};
|
|
815
948
|
|
|
816
|
-
const parseIfBlock = (
|
|
949
|
+
const parseIfBlock = () => {
|
|
950
|
+
|
|
951
|
+
let body;
|
|
817
952
|
|
|
818
953
|
if ( this.getToken().str === '{' ) {
|
|
819
954
|
|
|
820
|
-
this.parseBlock(
|
|
955
|
+
body = this.parseBlock();
|
|
821
956
|
|
|
822
957
|
} else {
|
|
823
958
|
|
|
824
|
-
|
|
959
|
+
body = [ this.parseExpression() ];
|
|
825
960
|
|
|
826
961
|
}
|
|
827
962
|
|
|
963
|
+
return body;
|
|
964
|
+
|
|
828
965
|
};
|
|
829
966
|
|
|
830
967
|
//
|
|
831
968
|
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
parseIfBlock( conditional );
|
|
969
|
+
// Parse the first if statement
|
|
970
|
+
const conditional = new Conditional( parseIfExpression(), parseIfBlock() );
|
|
835
971
|
|
|
836
972
|
//
|
|
837
973
|
|
|
@@ -841,21 +977,24 @@ class GLSLDecoder {
|
|
|
841
977
|
|
|
842
978
|
this.readToken(); // skip 'else'
|
|
843
979
|
|
|
980
|
+
// Assign the current if/else statement as the previous within the chain of conditionals
|
|
844
981
|
const previous = current;
|
|
845
982
|
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
current = new Conditional( parseIfExpression() );
|
|
983
|
+
let expression = null;
|
|
849
984
|
|
|
850
|
-
|
|
985
|
+
// If an 'else if' statement, parse the conditional within the if
|
|
986
|
+
if ( this.getToken().str === 'if' ) {
|
|
851
987
|
|
|
852
|
-
|
|
988
|
+
// Current conditional now equal to next conditional in the chain
|
|
989
|
+
expression = parseIfExpression();
|
|
853
990
|
|
|
854
991
|
}
|
|
855
992
|
|
|
856
|
-
|
|
993
|
+
current = new Conditional( expression, parseIfBlock() );
|
|
994
|
+
current.parent = previous;
|
|
857
995
|
|
|
858
|
-
|
|
996
|
+
// n - 1 conditional's else statement assigned to new if/else statement
|
|
997
|
+
previous.elseConditional = current;
|
|
859
998
|
|
|
860
999
|
}
|
|
861
1000
|
|
|
@@ -863,7 +1002,9 @@ class GLSLDecoder {
|
|
|
863
1002
|
|
|
864
1003
|
}
|
|
865
1004
|
|
|
866
|
-
parseBlock(
|
|
1005
|
+
parseBlock() {
|
|
1006
|
+
|
|
1007
|
+
const body = [];
|
|
867
1008
|
|
|
868
1009
|
const firstToken = this.getToken();
|
|
869
1010
|
|
|
@@ -883,16 +1024,47 @@ class GLSLDecoder {
|
|
|
883
1024
|
|
|
884
1025
|
groupIndex += getGroupDelta( token.str );
|
|
885
1026
|
|
|
886
|
-
if ( groupIndex
|
|
1027
|
+
if ( groupIndex === 0 && ( token.str === 'case' || token.str === 'default' ) ) {
|
|
1028
|
+
|
|
1029
|
+
return body; // switch case or default statement, return body
|
|
1030
|
+
|
|
1031
|
+
} else if ( groupIndex < 0 ) {
|
|
887
1032
|
|
|
888
1033
|
this.readToken(); // skip '}'
|
|
889
1034
|
|
|
890
|
-
|
|
1035
|
+
return body;
|
|
891
1036
|
|
|
892
1037
|
}
|
|
893
1038
|
|
|
894
1039
|
//
|
|
895
1040
|
|
|
1041
|
+
if ( token.tags ) {
|
|
1042
|
+
|
|
1043
|
+
let lastStatement = null;
|
|
1044
|
+
|
|
1045
|
+
for ( const tag of token.tags ) {
|
|
1046
|
+
|
|
1047
|
+
if ( tag.type === Token.COMMENT ) {
|
|
1048
|
+
|
|
1049
|
+
const str = tag.str.replace( /\t/g, '' );
|
|
1050
|
+
|
|
1051
|
+
if ( ! lastStatement || lastStatement.isComment !== true ) {
|
|
1052
|
+
|
|
1053
|
+
lastStatement = new Comment( str );
|
|
1054
|
+
body.push( lastStatement );
|
|
1055
|
+
|
|
1056
|
+
} else {
|
|
1057
|
+
|
|
1058
|
+
lastStatement.comment += '\n' + str;
|
|
1059
|
+
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
}
|
|
1067
|
+
|
|
896
1068
|
if ( token.isLiteral || token.isOperator ) {
|
|
897
1069
|
|
|
898
1070
|
if ( token.str === 'const' ) {
|
|
@@ -931,6 +1103,14 @@ class GLSLDecoder {
|
|
|
931
1103
|
|
|
932
1104
|
statement = this.parseFor();
|
|
933
1105
|
|
|
1106
|
+
} else if ( token.str === 'while' ) {
|
|
1107
|
+
|
|
1108
|
+
statement = this.parseWhile();
|
|
1109
|
+
|
|
1110
|
+
} else if ( token.str === 'switch' ) {
|
|
1111
|
+
|
|
1112
|
+
statement = this.parseSwitch();
|
|
1113
|
+
|
|
934
1114
|
} else {
|
|
935
1115
|
|
|
936
1116
|
statement = this.parseExpression();
|
|
@@ -941,7 +1121,7 @@ class GLSLDecoder {
|
|
|
941
1121
|
|
|
942
1122
|
if ( statement ) {
|
|
943
1123
|
|
|
944
|
-
|
|
1124
|
+
body.push( statement );
|
|
945
1125
|
|
|
946
1126
|
} else {
|
|
947
1127
|
|
|
@@ -951,43 +1131,7 @@ class GLSLDecoder {
|
|
|
951
1131
|
|
|
952
1132
|
}
|
|
953
1133
|
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
_evalOperator( operator ) {
|
|
957
|
-
|
|
958
|
-
if ( operator.type.includes( '=' ) ) {
|
|
959
|
-
|
|
960
|
-
const parameter = this._getFunctionParameter( operator.left.property );
|
|
961
|
-
|
|
962
|
-
if ( parameter !== undefined ) {
|
|
963
|
-
|
|
964
|
-
// Parameters are immutable in WGSL
|
|
965
|
-
|
|
966
|
-
parameter.immutable = false;
|
|
967
|
-
|
|
968
|
-
}
|
|
969
|
-
|
|
970
|
-
}
|
|
971
|
-
|
|
972
|
-
return operator;
|
|
973
|
-
|
|
974
|
-
}
|
|
975
|
-
|
|
976
|
-
_getFunctionParameter( name ) {
|
|
977
|
-
|
|
978
|
-
if ( this._currentFunction ) {
|
|
979
|
-
|
|
980
|
-
for ( const param of this._currentFunction.params ) {
|
|
981
|
-
|
|
982
|
-
if ( param.name === name ) {
|
|
983
|
-
|
|
984
|
-
return param;
|
|
985
|
-
|
|
986
|
-
}
|
|
987
|
-
|
|
988
|
-
}
|
|
989
|
-
|
|
990
|
-
}
|
|
1134
|
+
return body;
|
|
991
1135
|
|
|
992
1136
|
}
|
|
993
1137
|
|
|
@@ -1014,9 +1158,8 @@ class GLSLDecoder {
|
|
|
1014
1158
|
this.index = 0;
|
|
1015
1159
|
this.tokenizer = new Tokenizer( polyfill + source ).tokenize();
|
|
1016
1160
|
|
|
1017
|
-
const
|
|
1018
|
-
|
|
1019
|
-
this.parseBlock( program );
|
|
1161
|
+
const body = this.parseBlock();
|
|
1162
|
+
const program = new Program( body );
|
|
1020
1163
|
|
|
1021
1164
|
return program;
|
|
1022
1165
|
|