super-three 0.171.0 → 0.173.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +594 -427
- package/build/three.core.js +515 -81
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +79 -350
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +20 -7
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +29362 -3427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +29361 -3427
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +9 -7
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +48 -37
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +34 -29
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +22 -4
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -2
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
- package/examples/jsm/misc/Volume.js +27 -17
- package/examples/jsm/misc/VolumeSlice.js +7 -5
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +29 -24
- package/examples/jsm/physics/JoltPhysics.js +7 -7
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +5 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +2 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +4 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +18 -5
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/ArrayCamera.js +1 -0
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +6 -1
- package/src/core/BufferAttribute.js +4 -0
- package/src/core/EventDispatcher.js +8 -6
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/ImageUtils.js +1 -11
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +476 -23
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +121 -10
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
- package/src/nodes/Nodes.js +5 -6
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +47 -6
- package/src/nodes/accessors/BatchNode.js +42 -6
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +113 -3
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +306 -12
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +65 -5
- package/src/nodes/accessors/Object3DNode.js +101 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +56 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
- package/src/nodes/accessors/ReferenceNode.js +201 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +209 -8
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +38 -2
- package/src/nodes/accessors/Texture3DNode.js +91 -7
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +316 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +231 -25
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +80 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/ArrayNode.js +125 -0
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +350 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1166 -26
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +152 -1
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +51 -10
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +98 -1
- package/src/nodes/core/StructNode.js +121 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +105 -6
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +146 -7
- package/src/nodes/core/VaryingNode.js +100 -3
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BlendModes.js +88 -1
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +300 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +96 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +110 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +241 -35
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +78 -4
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +627 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +329 -18
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +3 -2
- package/src/nodes/tsl/TSLCore.js +22 -2
- package/src/nodes/utils/ArrayElementNode.js +39 -3
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +82 -2
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +54 -0
- package/src/nodes/utils/Timer.js +40 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +2 -3
- package/src/objects/ClippingGroup.js +49 -0
- package/src/objects/Line.js +6 -6
- package/src/renderers/WebGLRenderer.js +30 -4
- package/src/renderers/common/Animation.js +85 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +502 -44
- package/src/renderers/common/Background.js +48 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +108 -15
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +91 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +34 -6
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +99 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +201 -2
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +40 -3
- package/src/renderers/common/RenderObject.js +400 -17
- package/src/renderers/common/RenderObjects.js +103 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1170 -86
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +120 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +97 -7
- package/src/renderers/common/TimestampQueryPool.js +39 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +141 -2
- package/src/renderers/common/XRManager.js +1193 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +76 -10
- package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +243 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +352 -78
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl/WebGLBackground.js +4 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +578 -164
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
- package/src/renderers/webgpu/WebGPURenderer.js +36 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +19 -2
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/src/textures/VideoFrameTexture.js +35 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/objects/InstancedPoints.js +0 -19
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -9,7 +9,6 @@ import { NoColorSpace, ByteType, ShortType, RGBAIntegerFormat, RGBIntegerFormat,
|
|
|
9
9
|
import { DataTexture } from '../../../textures/DataTexture.js';
|
|
10
10
|
|
|
11
11
|
const glslMethods = {
|
|
12
|
-
atan2: 'atan',
|
|
13
12
|
textureDimensions: 'textureSize',
|
|
14
13
|
equals: 'equal'
|
|
15
14
|
};
|
|
@@ -46,39 +45,109 @@ precision highp isampler2DArray;
|
|
|
46
45
|
precision lowp sampler2DShadow;
|
|
47
46
|
`;
|
|
48
47
|
|
|
48
|
+
/**
|
|
49
|
+
* A node builder targeting GLSL.
|
|
50
|
+
*
|
|
51
|
+
* This module generates GLSL shader code from node materials and also
|
|
52
|
+
* generates the respective bindings and vertex buffer definitions. These
|
|
53
|
+
* data are later used by the renderer to create render and compute pipelines
|
|
54
|
+
* for render objects.
|
|
55
|
+
*
|
|
56
|
+
* @augments NodeBuilder
|
|
57
|
+
*/
|
|
49
58
|
class GLSLNodeBuilder extends NodeBuilder {
|
|
50
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Constructs a new GLSL node builder renderer.
|
|
62
|
+
*
|
|
63
|
+
* @param {Object3D} object - The 3D object.
|
|
64
|
+
* @param {Renderer} renderer - The renderer.
|
|
65
|
+
*/
|
|
51
66
|
constructor( object, renderer ) {
|
|
52
67
|
|
|
53
68
|
super( object, renderer, new GLSLNodeParser() );
|
|
54
69
|
|
|
70
|
+
/**
|
|
71
|
+
* A dictionary holds for each shader stage ('vertex', 'fragment', 'compute')
|
|
72
|
+
* another dictionary which manages UBOs per group ('render','frame','object').
|
|
73
|
+
*
|
|
74
|
+
* @type {Object<String,Object<String,NodeUniformsGroup>>}
|
|
75
|
+
*/
|
|
55
76
|
this.uniformGroups = {};
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* An array that holds objects defining the varying and attribute data in
|
|
80
|
+
* context of Transform Feedback.
|
|
81
|
+
*
|
|
82
|
+
* @type {Object<String,Map<String,Object>>}
|
|
83
|
+
*/
|
|
56
84
|
this.transforms = [];
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* A dictionary that holds for each shader stage a Map of used extensions.
|
|
88
|
+
*
|
|
89
|
+
* @type {Object<String,Map<String,Object>>}
|
|
90
|
+
*/
|
|
57
91
|
this.extensions = {};
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* A dictionary that holds for each shader stage an Array of used builtins.
|
|
95
|
+
*
|
|
96
|
+
* @type {Object<String,Array<String>>}
|
|
97
|
+
*/
|
|
58
98
|
this.builtins = { vertex: [], fragment: [], compute: [] };
|
|
59
99
|
|
|
100
|
+
/**
|
|
101
|
+
* Whether comparison in shader code are generated with methods or not.
|
|
102
|
+
*
|
|
103
|
+
* @type {Boolean}
|
|
104
|
+
* @default true
|
|
105
|
+
*/
|
|
60
106
|
this.useComparisonMethod = true;
|
|
61
107
|
|
|
62
108
|
}
|
|
63
109
|
|
|
110
|
+
/**
|
|
111
|
+
* Checks if the given texture requires a manual conversion to the working color space.
|
|
112
|
+
*
|
|
113
|
+
* @param {Texture} texture - The texture to check.
|
|
114
|
+
* @return {Boolean} Whether the given texture requires a conversion to working color space or not.
|
|
115
|
+
*/
|
|
64
116
|
needsToWorkingColorSpace( texture ) {
|
|
65
117
|
|
|
66
118
|
return texture.isVideoTexture === true && texture.colorSpace !== NoColorSpace;
|
|
67
119
|
|
|
68
120
|
}
|
|
69
121
|
|
|
122
|
+
/**
|
|
123
|
+
* Returns the native shader method name for a given generic name.
|
|
124
|
+
*
|
|
125
|
+
* @param {String} method - The method name to resolve.
|
|
126
|
+
* @return {String} The resolved GLSL method name.
|
|
127
|
+
*/
|
|
70
128
|
getMethod( method ) {
|
|
71
129
|
|
|
72
130
|
return glslMethods[ method ] || method;
|
|
73
131
|
|
|
74
132
|
}
|
|
75
133
|
|
|
134
|
+
/**
|
|
135
|
+
* Returns the output struct name. Not relevant for GLSL.
|
|
136
|
+
*
|
|
137
|
+
* @return {String}
|
|
138
|
+
*/
|
|
76
139
|
getOutputStructName() {
|
|
77
140
|
|
|
78
141
|
return '';
|
|
79
142
|
|
|
80
143
|
}
|
|
81
144
|
|
|
145
|
+
/**
|
|
146
|
+
* Builds the given shader node.
|
|
147
|
+
*
|
|
148
|
+
* @param {ShaderNodeInternal} shaderNode - The shader node.
|
|
149
|
+
* @return {String} The GLSL function code.
|
|
150
|
+
*/
|
|
82
151
|
buildFunctionCode( shaderNode ) {
|
|
83
152
|
|
|
84
153
|
const layout = shaderNode.layout;
|
|
@@ -109,6 +178,12 @@ ${ flowData.code }
|
|
|
109
178
|
|
|
110
179
|
}
|
|
111
180
|
|
|
181
|
+
/**
|
|
182
|
+
* Setups the Pixel Buffer Object (PBO) for the given storage
|
|
183
|
+
* buffer node.
|
|
184
|
+
*
|
|
185
|
+
* @param {StorageBufferNode} storageBufferNode - The storage buffer node.
|
|
186
|
+
*/
|
|
112
187
|
setupPBO( storageBufferNode ) {
|
|
113
188
|
|
|
114
189
|
const attribute = storageBufferNode.value;
|
|
@@ -177,6 +252,13 @@ ${ flowData.code }
|
|
|
177
252
|
|
|
178
253
|
}
|
|
179
254
|
|
|
255
|
+
/**
|
|
256
|
+
* Returns a GLSL snippet that represents the property name of the given node.
|
|
257
|
+
*
|
|
258
|
+
* @param {Node} node - The node.
|
|
259
|
+
* @param {String} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
260
|
+
* @return {String} The property name.
|
|
261
|
+
*/
|
|
180
262
|
getPropertyName( node, shaderStage = this.shaderStage ) {
|
|
181
263
|
|
|
182
264
|
if ( node.isNodeUniform && node.node.isTextureNode !== true && node.node.isBufferNode !== true ) {
|
|
@@ -189,6 +271,13 @@ ${ flowData.code }
|
|
|
189
271
|
|
|
190
272
|
}
|
|
191
273
|
|
|
274
|
+
/**
|
|
275
|
+
* Setups the Pixel Buffer Object (PBO) for the given storage
|
|
276
|
+
* buffer node.
|
|
277
|
+
*
|
|
278
|
+
* @param {StorageArrayElementNode} storageArrayElementNode - The storage array element node.
|
|
279
|
+
* @return {String} The property name.
|
|
280
|
+
*/
|
|
192
281
|
generatePBO( storageArrayElementNode ) {
|
|
193
282
|
|
|
194
283
|
const { node, indexNode } = storageArrayElementNode;
|
|
@@ -271,6 +360,16 @@ ${ flowData.code }
|
|
|
271
360
|
|
|
272
361
|
}
|
|
273
362
|
|
|
363
|
+
/**
|
|
364
|
+
* Generates the GLSL snippet that reads a single texel from a texture without sampling or filtering.
|
|
365
|
+
*
|
|
366
|
+
* @param {Texture} texture - The texture.
|
|
367
|
+
* @param {String} textureProperty - The name of the texture uniform in the shader.
|
|
368
|
+
* @param {String} uvIndexSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
369
|
+
* @param {String?} depthSnippet - A GLSL snippet that represents the 0-based texture array index to sample.
|
|
370
|
+
* @param {String} [levelSnippet='0u'] - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
371
|
+
* @return {String} The GLSL snippet.
|
|
372
|
+
*/
|
|
274
373
|
generateTextureLoad( texture, textureProperty, uvIndexSnippet, depthSnippet, levelSnippet = '0' ) {
|
|
275
374
|
|
|
276
375
|
if ( depthSnippet ) {
|
|
@@ -285,6 +384,15 @@ ${ flowData.code }
|
|
|
285
384
|
|
|
286
385
|
}
|
|
287
386
|
|
|
387
|
+
/**
|
|
388
|
+
* Generates the GLSL snippet for sampling/loading the given texture.
|
|
389
|
+
*
|
|
390
|
+
* @param {Texture} texture - The texture.
|
|
391
|
+
* @param {String} textureProperty - The name of the texture uniform in the shader.
|
|
392
|
+
* @param {String} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
393
|
+
* @param {String?} depthSnippet - A GLSL snippet that represents the 0-based texture array index to sample.
|
|
394
|
+
* @return {String} The GLSL snippet.
|
|
395
|
+
*/
|
|
288
396
|
generateTexture( texture, textureProperty, uvSnippet, depthSnippet ) {
|
|
289
397
|
|
|
290
398
|
if ( texture.isDepthTexture ) {
|
|
@@ -301,24 +409,63 @@ ${ flowData.code }
|
|
|
301
409
|
|
|
302
410
|
}
|
|
303
411
|
|
|
412
|
+
/**
|
|
413
|
+
* Generates the GLSL snippet when sampling textures with explicit mip level.
|
|
414
|
+
*
|
|
415
|
+
* @param {Texture} texture - The texture.
|
|
416
|
+
* @param {String} textureProperty - The name of the texture uniform in the shader.
|
|
417
|
+
* @param {String} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
418
|
+
* @param {String} levelSnippet - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
419
|
+
* @return {String} The GLSL snippet.
|
|
420
|
+
*/
|
|
304
421
|
generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet ) {
|
|
305
422
|
|
|
306
423
|
return `textureLod( ${ textureProperty }, ${ uvSnippet }, ${ levelSnippet } )`;
|
|
307
424
|
|
|
308
425
|
}
|
|
309
426
|
|
|
427
|
+
/**
|
|
428
|
+
* Generates the GLSL snippet when sampling textures with a bias to the mip level.
|
|
429
|
+
*
|
|
430
|
+
* @param {Texture} texture - The texture.
|
|
431
|
+
* @param {String} textureProperty - The name of the texture uniform in the shader.
|
|
432
|
+
* @param {String} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
433
|
+
* @param {String} biasSnippet - A GLSL snippet that represents the bias to apply to the mip level before sampling.
|
|
434
|
+
* @return {String} The GLSL snippet.
|
|
435
|
+
*/
|
|
310
436
|
generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet ) {
|
|
311
437
|
|
|
312
438
|
return `texture( ${ textureProperty }, ${ uvSnippet }, ${ biasSnippet } )`;
|
|
313
439
|
|
|
314
440
|
}
|
|
315
441
|
|
|
442
|
+
/**
|
|
443
|
+
* Generates the GLSL snippet for sampling/loading the given texture using explicit gradients.
|
|
444
|
+
*
|
|
445
|
+
* @param {Texture} texture - The texture.
|
|
446
|
+
* @param {String} textureProperty - The name of the texture uniform in the shader.
|
|
447
|
+
* @param {String} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
448
|
+
* @param {Array<String>} gradSnippet - An array holding both gradient GLSL snippets.
|
|
449
|
+
* @return {String} The GLSL snippet.
|
|
450
|
+
*/
|
|
316
451
|
generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet ) {
|
|
317
452
|
|
|
318
453
|
return `textureGrad( ${ textureProperty }, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] } )`;
|
|
319
454
|
|
|
320
455
|
}
|
|
321
456
|
|
|
457
|
+
/**
|
|
458
|
+
* Generates the GLSL snippet for sampling a depth texture and comparing the sampled depth values
|
|
459
|
+
* against a reference value.
|
|
460
|
+
*
|
|
461
|
+
* @param {Texture} texture - The texture.
|
|
462
|
+
* @param {String} textureProperty - The name of the texture uniform in the shader.
|
|
463
|
+
* @param {String} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
464
|
+
* @param {String} compareSnippet - A GLSL snippet that represents the reference value.
|
|
465
|
+
* @param {String?} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
|
|
466
|
+
* @param {String} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
467
|
+
* @return {String} The GLSL snippet.
|
|
468
|
+
*/
|
|
322
469
|
generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
323
470
|
|
|
324
471
|
if ( shaderStage === 'fragment' ) {
|
|
@@ -333,6 +480,12 @@ ${ flowData.code }
|
|
|
333
480
|
|
|
334
481
|
}
|
|
335
482
|
|
|
483
|
+
/**
|
|
484
|
+
* Returns the variables of the given shader stage as a GLSL string.
|
|
485
|
+
*
|
|
486
|
+
* @param {String} shaderStage - The shader stage.
|
|
487
|
+
* @return {String} The GLSL snippet that defines the variables.
|
|
488
|
+
*/
|
|
336
489
|
getVars( shaderStage ) {
|
|
337
490
|
|
|
338
491
|
const snippets = [];
|
|
@@ -343,7 +496,7 @@ ${ flowData.code }
|
|
|
343
496
|
|
|
344
497
|
for ( const variable of vars ) {
|
|
345
498
|
|
|
346
|
-
snippets.push( `${ this.getVar( variable.type, variable.name ) };` );
|
|
499
|
+
snippets.push( `${ this.getVar( variable.type, variable.name, variable.count ) };` );
|
|
347
500
|
|
|
348
501
|
}
|
|
349
502
|
|
|
@@ -353,6 +506,12 @@ ${ flowData.code }
|
|
|
353
506
|
|
|
354
507
|
}
|
|
355
508
|
|
|
509
|
+
/**
|
|
510
|
+
* Returns the uniforms of the given shader stage as a GLSL string.
|
|
511
|
+
*
|
|
512
|
+
* @param {String} shaderStage - The shader stage.
|
|
513
|
+
* @return {String} The GLSL snippet that defines the uniforms.
|
|
514
|
+
*/
|
|
356
515
|
getUniforms( shaderStage ) {
|
|
357
516
|
|
|
358
517
|
const uniforms = this.uniforms[ shaderStage ];
|
|
@@ -470,6 +629,12 @@ ${ flowData.code }
|
|
|
470
629
|
|
|
471
630
|
}
|
|
472
631
|
|
|
632
|
+
/**
|
|
633
|
+
* Returns the type for a given buffer attribute.
|
|
634
|
+
*
|
|
635
|
+
* @param {BufferAttribute} attribute - The buffer attribute.
|
|
636
|
+
* @return {String} The type.
|
|
637
|
+
*/
|
|
473
638
|
getTypeFromAttribute( attribute ) {
|
|
474
639
|
|
|
475
640
|
let nodeType = super.getTypeFromAttribute( attribute );
|
|
@@ -494,6 +659,12 @@ ${ flowData.code }
|
|
|
494
659
|
|
|
495
660
|
}
|
|
496
661
|
|
|
662
|
+
/**
|
|
663
|
+
* Returns the shader attributes of the given shader stage as a GLSL string.
|
|
664
|
+
*
|
|
665
|
+
* @param {String} shaderStage - The shader stage.
|
|
666
|
+
* @return {String} The GLSL snippet that defines the shader attributes.
|
|
667
|
+
*/
|
|
497
668
|
getAttributes( shaderStage ) {
|
|
498
669
|
|
|
499
670
|
let snippet = '';
|
|
@@ -516,15 +687,19 @@ ${ flowData.code }
|
|
|
516
687
|
|
|
517
688
|
}
|
|
518
689
|
|
|
690
|
+
/**
|
|
691
|
+
* Returns the members of the given struct type node as a GLSL string.
|
|
692
|
+
*
|
|
693
|
+
* @param {StructTypeNode} struct - The struct type node.
|
|
694
|
+
* @return {String} The GLSL snippet that defines the struct members.
|
|
695
|
+
*/
|
|
519
696
|
getStructMembers( struct ) {
|
|
520
697
|
|
|
521
698
|
const snippets = [];
|
|
522
|
-
const members = struct.getMemberTypes();
|
|
523
699
|
|
|
524
|
-
for (
|
|
700
|
+
for ( const member of struct.members ) {
|
|
525
701
|
|
|
526
|
-
|
|
527
|
-
snippets.push( `layout( location = ${i} ) out ${ member} m${i};` );
|
|
702
|
+
snippets.push( `\t${ member.type } ${ member.name };` );
|
|
528
703
|
|
|
529
704
|
}
|
|
530
705
|
|
|
@@ -532,33 +707,57 @@ ${ flowData.code }
|
|
|
532
707
|
|
|
533
708
|
}
|
|
534
709
|
|
|
710
|
+
/**
|
|
711
|
+
* Returns the structs of the given shader stage as a GLSL string.
|
|
712
|
+
*
|
|
713
|
+
* @param {String} shaderStage - The shader stage.
|
|
714
|
+
* @return {String} The GLSL snippet that defines the structs.
|
|
715
|
+
*/
|
|
535
716
|
getStructs( shaderStage ) {
|
|
536
717
|
|
|
537
718
|
const snippets = [];
|
|
538
719
|
const structs = this.structs[ shaderStage ];
|
|
539
720
|
|
|
540
|
-
|
|
721
|
+
const outputSnippet = [];
|
|
541
722
|
|
|
542
|
-
|
|
723
|
+
for ( const struct of structs ) {
|
|
543
724
|
|
|
544
|
-
|
|
725
|
+
if ( struct.output ) {
|
|
726
|
+
|
|
727
|
+
for ( const member of struct.members ) {
|
|
728
|
+
|
|
729
|
+
outputSnippet.push( `layout( location = ${ member.index } ) out ${ member.type } ${ member.name };` );
|
|
730
|
+
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
} else {
|
|
734
|
+
|
|
735
|
+
let snippet = 'struct ' + struct.name + ' {\n';
|
|
736
|
+
snippet += this.getStructMembers( struct );
|
|
737
|
+
snippet += '\n};\n';
|
|
738
|
+
|
|
739
|
+
snippets.push( snippet );
|
|
545
740
|
|
|
546
|
-
|
|
741
|
+
}
|
|
547
742
|
|
|
548
|
-
|
|
743
|
+
}
|
|
549
744
|
|
|
550
|
-
|
|
551
|
-
snippet += this.getStructMembers( struct );
|
|
552
|
-
snippet += '\n';
|
|
745
|
+
if ( outputSnippet.length === 0 ) {
|
|
553
746
|
|
|
554
|
-
|
|
747
|
+
outputSnippet.push( 'layout( location = 0 ) out vec4 fragColor;' );
|
|
555
748
|
|
|
556
749
|
}
|
|
557
750
|
|
|
558
|
-
return
|
|
751
|
+
return '\n' + outputSnippet.join( '\n' ) + '\n\n' + snippets.join( '\n' );
|
|
559
752
|
|
|
560
753
|
}
|
|
561
754
|
|
|
755
|
+
/**
|
|
756
|
+
* Returns the varyings of the given shader stage as a GLSL string.
|
|
757
|
+
*
|
|
758
|
+
* @param {String} shaderStage - The shader stage.
|
|
759
|
+
* @return {String} The GLSL snippet that defines the varyings.
|
|
760
|
+
*/
|
|
562
761
|
getVaryings( shaderStage ) {
|
|
563
762
|
|
|
564
763
|
let snippet = '';
|
|
@@ -570,10 +769,20 @@ ${ flowData.code }
|
|
|
570
769
|
for ( const varying of varyings ) {
|
|
571
770
|
|
|
572
771
|
if ( shaderStage === 'compute' ) varying.needsInterpolation = true;
|
|
772
|
+
|
|
573
773
|
const type = this.getType( varying.type );
|
|
574
|
-
const flat = type.includes( 'int' ) || type.includes( 'uv' ) || type.includes( 'iv' ) ? 'flat ' : '';
|
|
575
774
|
|
|
576
|
-
|
|
775
|
+
if ( varying.needsInterpolation ) {
|
|
776
|
+
|
|
777
|
+
const flat = type.includes( 'int' ) || type.includes( 'uv' ) || type.includes( 'iv' ) ? 'flat ' : '';
|
|
778
|
+
|
|
779
|
+
snippet += `${flat} out ${type} ${varying.name};\n`;
|
|
780
|
+
|
|
781
|
+
} else {
|
|
782
|
+
|
|
783
|
+
snippet += `${type} ${varying.name};\n`; // generate variable (no varying required)
|
|
784
|
+
|
|
785
|
+
}
|
|
577
786
|
|
|
578
787
|
}
|
|
579
788
|
|
|
@@ -604,18 +813,33 @@ ${ flowData.code }
|
|
|
604
813
|
|
|
605
814
|
}
|
|
606
815
|
|
|
816
|
+
/**
|
|
817
|
+
* Returns the vertex index builtin.
|
|
818
|
+
*
|
|
819
|
+
* @return {String} The vertex index.
|
|
820
|
+
*/
|
|
607
821
|
getVertexIndex() {
|
|
608
822
|
|
|
609
823
|
return 'uint( gl_VertexID )';
|
|
610
824
|
|
|
611
825
|
}
|
|
612
826
|
|
|
827
|
+
/**
|
|
828
|
+
* Returns the instance index builtin.
|
|
829
|
+
*
|
|
830
|
+
* @return {String} The instance index.
|
|
831
|
+
*/
|
|
613
832
|
getInstanceIndex() {
|
|
614
833
|
|
|
615
834
|
return 'uint( gl_InstanceID )';
|
|
616
835
|
|
|
617
836
|
}
|
|
618
837
|
|
|
838
|
+
/**
|
|
839
|
+
* Returns the invocation local index builtin.
|
|
840
|
+
*
|
|
841
|
+
* @return {String} The invocation local index.
|
|
842
|
+
*/
|
|
619
843
|
getInvocationLocalIndex() {
|
|
620
844
|
|
|
621
845
|
const workgroupSize = this.object.workgroupSize;
|
|
@@ -626,6 +850,11 @@ ${ flowData.code }
|
|
|
626
850
|
|
|
627
851
|
}
|
|
628
852
|
|
|
853
|
+
/**
|
|
854
|
+
* Returns the draw index builtin.
|
|
855
|
+
*
|
|
856
|
+
* @return {String?} The drawIndex shader string. Returns `null` if `WEBGL_multi_draw` isn't supported by the device.
|
|
857
|
+
*/
|
|
629
858
|
getDrawIndex() {
|
|
630
859
|
|
|
631
860
|
const extensions = this.renderer.backend.extensions;
|
|
@@ -640,24 +869,46 @@ ${ flowData.code }
|
|
|
640
869
|
|
|
641
870
|
}
|
|
642
871
|
|
|
872
|
+
/**
|
|
873
|
+
* Returns the front facing builtin.
|
|
874
|
+
*
|
|
875
|
+
* @return {String} The front facing builtin.
|
|
876
|
+
*/
|
|
643
877
|
getFrontFacing() {
|
|
644
878
|
|
|
645
879
|
return 'gl_FrontFacing';
|
|
646
880
|
|
|
647
881
|
}
|
|
648
882
|
|
|
883
|
+
/**
|
|
884
|
+
* Returns the frag coord builtin.
|
|
885
|
+
*
|
|
886
|
+
* @return {String} The frag coord builtin.
|
|
887
|
+
*/
|
|
649
888
|
getFragCoord() {
|
|
650
889
|
|
|
651
890
|
return 'gl_FragCoord.xy';
|
|
652
891
|
|
|
653
892
|
}
|
|
654
893
|
|
|
894
|
+
/**
|
|
895
|
+
* Returns the frag depth builtin.
|
|
896
|
+
*
|
|
897
|
+
* @return {String} The frag depth builtin.
|
|
898
|
+
*/
|
|
655
899
|
getFragDepth() {
|
|
656
900
|
|
|
657
901
|
return 'gl_FragDepth';
|
|
658
902
|
|
|
659
903
|
}
|
|
660
904
|
|
|
905
|
+
/**
|
|
906
|
+
* Enables the given extension.
|
|
907
|
+
*
|
|
908
|
+
* @param {String} name - The extension name.
|
|
909
|
+
* @param {String} behavior - The extension behavior.
|
|
910
|
+
* @param {String} [shaderStage=this.shaderStage] - The shader stage.
|
|
911
|
+
*/
|
|
661
912
|
enableExtension( name, behavior, shaderStage = this.shaderStage ) {
|
|
662
913
|
|
|
663
914
|
const map = this.extensions[ shaderStage ] || ( this.extensions[ shaderStage ] = new Map() );
|
|
@@ -673,6 +924,12 @@ ${ flowData.code }
|
|
|
673
924
|
|
|
674
925
|
}
|
|
675
926
|
|
|
927
|
+
/**
|
|
928
|
+
* Returns the enabled extensions of the given shader stage as a GLSL string.
|
|
929
|
+
*
|
|
930
|
+
* @param {String} shaderStage - The shader stage.
|
|
931
|
+
* @return {String} The GLSL snippet that defines the enabled extensions.
|
|
932
|
+
*/
|
|
676
933
|
getExtensions( shaderStage ) {
|
|
677
934
|
|
|
678
935
|
const snippets = [];
|
|
@@ -706,12 +963,23 @@ ${ flowData.code }
|
|
|
706
963
|
|
|
707
964
|
}
|
|
708
965
|
|
|
966
|
+
/**
|
|
967
|
+
* Returns the clip distances builtin.
|
|
968
|
+
*
|
|
969
|
+
* @return {String} The clip distances builtin.
|
|
970
|
+
*/
|
|
709
971
|
getClipDistance() {
|
|
710
972
|
|
|
711
973
|
return 'gl_ClipDistance';
|
|
712
974
|
|
|
713
975
|
}
|
|
714
976
|
|
|
977
|
+
/**
|
|
978
|
+
* Whether the requested feature is available or not.
|
|
979
|
+
*
|
|
980
|
+
* @param {String} name - The requested feature.
|
|
981
|
+
* @return {Boolean} Whether the requested feature is supported or not.
|
|
982
|
+
*/
|
|
715
983
|
isAvailable( name ) {
|
|
716
984
|
|
|
717
985
|
let result = supports[ name ];
|
|
@@ -755,12 +1023,22 @@ ${ flowData.code }
|
|
|
755
1023
|
|
|
756
1024
|
}
|
|
757
1025
|
|
|
1026
|
+
/**
|
|
1027
|
+
* Whether to flip texture data along its vertical axis or not.
|
|
1028
|
+
*
|
|
1029
|
+
* @return {Boolean} Returns always `true` in context of GLSL.
|
|
1030
|
+
*/
|
|
758
1031
|
isFlipY() {
|
|
759
1032
|
|
|
760
1033
|
return true;
|
|
761
1034
|
|
|
762
1035
|
}
|
|
763
1036
|
|
|
1037
|
+
/**
|
|
1038
|
+
* Enables hardware clipping.
|
|
1039
|
+
*
|
|
1040
|
+
* @param {String} planeCount - The clipping plane count.
|
|
1041
|
+
*/
|
|
764
1042
|
enableHardwareClipping( planeCount ) {
|
|
765
1043
|
|
|
766
1044
|
this.enableExtension( 'GL_ANGLE_clip_cull_distance', 'require' );
|
|
@@ -769,12 +1047,24 @@ ${ flowData.code }
|
|
|
769
1047
|
|
|
770
1048
|
}
|
|
771
1049
|
|
|
1050
|
+
/**
|
|
1051
|
+
* Registers a transform in context of Transform Feedback.
|
|
1052
|
+
*
|
|
1053
|
+
* @param {String} varyingName - The varying name.
|
|
1054
|
+
* @param {AttributeNode} attributeNode - The attribute node.
|
|
1055
|
+
*/
|
|
772
1056
|
registerTransform( varyingName, attributeNode ) {
|
|
773
1057
|
|
|
774
1058
|
this.transforms.push( { varyingName, attributeNode } );
|
|
775
1059
|
|
|
776
1060
|
}
|
|
777
1061
|
|
|
1062
|
+
/**
|
|
1063
|
+
* Returns the transforms of the given shader stage as a GLSL string.
|
|
1064
|
+
*
|
|
1065
|
+
* @param {String} shaderStage - The shader stage.
|
|
1066
|
+
* @return {String} The GLSL snippet that defines the transforms.
|
|
1067
|
+
*/
|
|
778
1068
|
getTransforms( /* shaderStage */ ) {
|
|
779
1069
|
|
|
780
1070
|
const transforms = this.transforms;
|
|
@@ -795,6 +1085,14 @@ ${ flowData.code }
|
|
|
795
1085
|
|
|
796
1086
|
}
|
|
797
1087
|
|
|
1088
|
+
/**
|
|
1089
|
+
* Returns a GLSL struct based on the given name and variables.
|
|
1090
|
+
*
|
|
1091
|
+
* @private
|
|
1092
|
+
* @param {String} name - The struct name.
|
|
1093
|
+
* @param {String} vars - The struct variables.
|
|
1094
|
+
* @return {String} The GLSL snippet representing a struct.
|
|
1095
|
+
*/
|
|
798
1096
|
_getGLSLUniformStruct( name, vars ) {
|
|
799
1097
|
|
|
800
1098
|
return `
|
|
@@ -804,6 +1102,13 @@ ${vars}
|
|
|
804
1102
|
|
|
805
1103
|
}
|
|
806
1104
|
|
|
1105
|
+
/**
|
|
1106
|
+
* Returns a GLSL vertex shader based on the given shader data.
|
|
1107
|
+
*
|
|
1108
|
+
* @private
|
|
1109
|
+
* @param {Object} shaderData - The shader data.
|
|
1110
|
+
* @return {String} The vertex shader.
|
|
1111
|
+
*/
|
|
807
1112
|
_getGLSLVertexCode( shaderData ) {
|
|
808
1113
|
|
|
809
1114
|
return `#version 300 es
|
|
@@ -846,6 +1151,13 @@ void main() {
|
|
|
846
1151
|
|
|
847
1152
|
}
|
|
848
1153
|
|
|
1154
|
+
/**
|
|
1155
|
+
* Returns a GLSL fragment shader based on the given shader data.
|
|
1156
|
+
*
|
|
1157
|
+
* @private
|
|
1158
|
+
* @param {Object} shaderData - The shader data.
|
|
1159
|
+
* @return {String} The vertex shader.
|
|
1160
|
+
*/
|
|
849
1161
|
_getGLSLFragmentCode( shaderData ) {
|
|
850
1162
|
|
|
851
1163
|
return `#version 300 es
|
|
@@ -864,6 +1176,7 @@ ${shaderData.varyings}
|
|
|
864
1176
|
// codes
|
|
865
1177
|
${shaderData.codes}
|
|
866
1178
|
|
|
1179
|
+
// structs
|
|
867
1180
|
${shaderData.structs}
|
|
868
1181
|
|
|
869
1182
|
void main() {
|
|
@@ -879,6 +1192,9 @@ void main() {
|
|
|
879
1192
|
|
|
880
1193
|
}
|
|
881
1194
|
|
|
1195
|
+
/**
|
|
1196
|
+
* Controls the code build of the shader stages.
|
|
1197
|
+
*/
|
|
882
1198
|
buildCode() {
|
|
883
1199
|
|
|
884
1200
|
const shadersData = this.material !== null ? { fragment: {}, vertex: {} } : { compute: {} };
|
|
@@ -959,6 +1275,19 @@ void main() {
|
|
|
959
1275
|
|
|
960
1276
|
}
|
|
961
1277
|
|
|
1278
|
+
/**
|
|
1279
|
+
* This method is one of the more important ones since it's responsible
|
|
1280
|
+
* for generating a matching binding instance for the given uniform node.
|
|
1281
|
+
*
|
|
1282
|
+
* These bindings are later used in the renderer to create bind groups
|
|
1283
|
+
* and layouts.
|
|
1284
|
+
*
|
|
1285
|
+
* @param {UniformNode} node - The uniform node.
|
|
1286
|
+
* @param {String} type - The node data type.
|
|
1287
|
+
* @param {String} shaderStage - The shader stage.
|
|
1288
|
+
* @param {String?} [name=null] - An optional uniform name.
|
|
1289
|
+
* @return {NodeUniform} The node uniform object.
|
|
1290
|
+
*/
|
|
962
1291
|
getUniformFromNode( node, type, shaderStage, name = null ) {
|
|
963
1292
|
|
|
964
1293
|
const uniformNode = super.getUniformFromNode( node, type, shaderStage, name );
|