@plastic-software/three 0.181.3 → 0.183.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +11330 -10017
- package/build/three.core.js +10011 -9493
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1414 -631
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +21 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +8007 -5427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +8005 -5426
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -3
- package/examples/jsm/animation/CCDIKSolver.js +2 -2
- package/examples/jsm/controls/ArcballControls.js +3 -3
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +109 -6
- package/examples/jsm/controls/TrackballControls.js +6 -6
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +131 -4
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Inspector.js +74 -14
- package/examples/jsm/inspector/RendererInspector.js +12 -2
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Parameters.js +18 -2
- package/examples/jsm/inspector/tabs/Performance.js +2 -2
- package/examples/jsm/inspector/tabs/Viewer.js +4 -4
- package/examples/jsm/inspector/ui/Profiler.js +1836 -31
- package/examples/jsm/inspector/ui/Style.js +973 -14
- package/examples/jsm/inspector/ui/Tab.js +188 -1
- package/examples/jsm/inspector/ui/Values.js +17 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
- package/examples/jsm/lines/LineMaterial.js +6 -0
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -4
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +122 -171
- package/examples/jsm/loaders/HDRLoader.js +0 -1
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +19 -3
- package/examples/jsm/loaders/LDrawLoader.js +2 -3
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +1 -1
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +37 -24
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/usd/USDAParser.js +447 -366
- package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Sky.js +76 -4
- package/examples/jsm/objects/SkyMesh.js +127 -10
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +268 -30
- package/examples/jsm/renderers/SVGRenderer.js +193 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +5 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
- package/examples/jsm/tsl/display/GodraysNode.js +624 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +3 -3
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -20
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TRAANode.js +273 -125
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/math/Bayer.js +40 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/package.json +20 -26
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +19 -11
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +1 -1
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +56 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +3 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/ImageBitmapLoader.js +8 -3
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +2 -1
- package/src/loaders/ObjectLoader.js +21 -2
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +7 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +72 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
- package/src/math/Line3.js +3 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix4.js +74 -65
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Vector3.js +3 -5
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +87 -68
- package/src/nodes/TSL.js +6 -6
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +98 -12
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +20 -1
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
- package/src/nodes/accessors/ReferenceNode.js +4 -4
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +4 -21
- package/src/nodes/accessors/StorageTextureNode.js +37 -1
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +58 -22
- package/src/nodes/accessors/UniformArrayNode.js +4 -2
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionNode.js +1 -2
- package/src/nodes/core/ArrayNode.js +20 -1
- package/src/nodes/core/AssignNode.js +2 -2
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +103 -4
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +29 -3
- package/src/nodes/core/NodeBuilder.js +170 -53
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +10 -8
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +3 -3
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +65 -16
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +16 -2
- package/src/nodes/core/StructTypeNode.js +11 -17
- package/src/nodes/core/SubBuildNode.js +1 -1
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +47 -22
- package/src/nodes/core/VaryingNode.js +1 -18
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +98 -9
- package/src/nodes/display/RenderOutputNode.js +3 -3
- package/src/nodes/display/ScreenNode.js +3 -1
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportTextureNode.js +21 -4
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +4 -2
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
- package/src/nodes/gpgpu/ComputeNode.js +5 -4
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +2 -2
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +97 -41
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +2 -2
- package/src/nodes/math/MathNode.js +3 -40
- package/src/nodes/math/OperatorNode.js +2 -1
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLCore.js +17 -14
- package/src/nodes/utils/ArrayElementNode.js +13 -0
- package/src/nodes/utils/DebugNode.js +11 -11
- package/src/nodes/utils/EventNode.js +1 -2
- package/src/nodes/utils/JoinNode.js +2 -2
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +1 -1
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +27 -14
- package/src/objects/InstancedMesh.js +11 -0
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/renderers/WebGLRenderer.js +178 -92
- package/src/renderers/common/Backend.js +29 -0
- package/src/renderers/common/Background.js +24 -11
- package/src/renderers/common/BindGroup.js +1 -9
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +27 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/CubeRenderTarget.js +50 -6
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +4 -4
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/RenderBundles.js +2 -1
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +15 -3
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +18 -2
- package/src/renderers/common/RenderPipeline.js +203 -17
- package/src/renderers/common/Renderer.js +257 -72
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +17 -1
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +61 -0
- package/src/renderers/common/XRManager.js +3 -2
- package/src/renderers/common/extras/PMREMGenerator.js +2 -8
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +3 -3
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -5
- package/src/renderers/shaders/UniformsLib.js +0 -3
- package/src/renderers/webgl/WebGLBackground.js +2 -2
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLCapabilities.js +3 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +267 -0
- package/src/renderers/webgl/WebGLProgram.js +45 -109
- package/src/renderers/webgl/WebGLPrograms.js +45 -49
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +32 -37
- package/src/renderers/webgl/WebGLTextures.js +89 -28
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
- package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +119 -13
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +65 -42
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/Source.js +1 -1
- package/src/textures/Texture.js +3 -3
- package/src/utils.js +258 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -11,8 +11,8 @@ import WebGLCapabilities from './utils/WebGLCapabilities.js';
|
|
|
11
11
|
import { GLFeatureName } from './utils/WebGLConstants.js';
|
|
12
12
|
import { WebGLBufferRenderer } from './WebGLBufferRenderer.js';
|
|
13
13
|
|
|
14
|
-
import { warnOnce, warn, error } from '../../utils.js';
|
|
15
|
-
import { WebGLCoordinateSystem, TimestampQuery } from '../../constants.js';
|
|
14
|
+
import { isTypedArray, warnOnce, warn, error } from '../../utils.js';
|
|
15
|
+
import { WebGLCoordinateSystem, TimestampQuery, Compatibility } from '../../constants.js';
|
|
16
16
|
import WebGLTimestampQueryPool from './utils/WebGLTimestampQueryPool.js';
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -28,6 +28,7 @@ class WebGLBackend extends Backend {
|
|
|
28
28
|
*
|
|
29
29
|
* @typedef {Object} WebGLBackend~Options
|
|
30
30
|
* @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
31
|
+
* @property {boolean} [reversedDepthBuffer=false] - Whether reversed depth buffer is enabled or not.
|
|
31
32
|
* @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
32
33
|
* @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
33
34
|
* @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
@@ -184,7 +185,6 @@ class WebGLBackend extends Backend {
|
|
|
184
185
|
*/
|
|
185
186
|
this._knownBindings = new WeakSet();
|
|
186
187
|
|
|
187
|
-
|
|
188
188
|
/**
|
|
189
189
|
* Whether the device supports framebuffers invalidation or not.
|
|
190
190
|
*
|
|
@@ -265,9 +265,17 @@ class WebGLBackend extends Backend {
|
|
|
265
265
|
this.extensions.get( 'WEBGL_render_shared_exponent' );
|
|
266
266
|
this.extensions.get( 'WEBGL_multi_draw' );
|
|
267
267
|
this.extensions.get( 'OVR_multiview2' );
|
|
268
|
+
this.extensions.get( 'EXT_clip_control' );
|
|
268
269
|
|
|
269
270
|
this.disjoint = this.extensions.get( 'EXT_disjoint_timer_query_webgl2' );
|
|
270
271
|
this.parallel = this.extensions.get( 'KHR_parallel_shader_compile' );
|
|
272
|
+
this.drawBuffersIndexedExt = this.extensions.get( 'OES_draw_buffers_indexed' );
|
|
273
|
+
|
|
274
|
+
if ( parameters.reversedDepthBuffer === true && this.extensions.has( 'EXT_clip_control' ) ) {
|
|
275
|
+
|
|
276
|
+
this.state.setReversedDepth( true );
|
|
277
|
+
|
|
278
|
+
}
|
|
271
279
|
|
|
272
280
|
}
|
|
273
281
|
|
|
@@ -445,9 +453,12 @@ class WebGLBackend extends Backend {
|
|
|
445
453
|
|
|
446
454
|
if ( renderContext.scissor ) {
|
|
447
455
|
|
|
448
|
-
|
|
456
|
+
this.updateScissor( renderContext );
|
|
457
|
+
|
|
458
|
+
} else {
|
|
449
459
|
|
|
450
|
-
|
|
460
|
+
const { width, height } = this.getDrawingBufferSize();
|
|
461
|
+
state.scissor( 0, 0, width, height );
|
|
451
462
|
|
|
452
463
|
}
|
|
453
464
|
|
|
@@ -544,6 +555,17 @@ class WebGLBackend extends Backend {
|
|
|
544
555
|
|
|
545
556
|
}
|
|
546
557
|
|
|
558
|
+
if ( previousContext.scissor ) {
|
|
559
|
+
|
|
560
|
+
this.updateScissor( previousContext );
|
|
561
|
+
|
|
562
|
+
} else {
|
|
563
|
+
|
|
564
|
+
const { width, height } = this.getDrawingBufferSize();
|
|
565
|
+
state.scissor( 0, 0, width, height );
|
|
566
|
+
|
|
567
|
+
}
|
|
568
|
+
|
|
547
569
|
}
|
|
548
570
|
|
|
549
571
|
this.prepareTimestampBuffer( TimestampQuery.RENDER, this.getTimestampUID( renderContext ) );
|
|
@@ -645,6 +667,20 @@ class WebGLBackend extends Backend {
|
|
|
645
667
|
|
|
646
668
|
}
|
|
647
669
|
|
|
670
|
+
/**
|
|
671
|
+
* Updates the scissor with the values from the given render context.
|
|
672
|
+
*
|
|
673
|
+
* @param {RenderContext} renderContext - The render context.
|
|
674
|
+
*/
|
|
675
|
+
updateScissor( renderContext ) {
|
|
676
|
+
|
|
677
|
+
const { state } = this;
|
|
678
|
+
const { x, y, width, height } = renderContext.scissorValue;
|
|
679
|
+
|
|
680
|
+
state.scissor( x, renderContext.height - height - y, width, height );
|
|
681
|
+
|
|
682
|
+
}
|
|
683
|
+
|
|
648
684
|
/**
|
|
649
685
|
* Defines the scissor test.
|
|
650
686
|
*
|
|
@@ -814,7 +850,7 @@ class WebGLBackend extends Backend {
|
|
|
814
850
|
if ( this.discard === false ) {
|
|
815
851
|
|
|
816
852
|
// required here to handle async behaviour of render.compute()
|
|
817
|
-
|
|
853
|
+
state.enable( gl.RASTERIZER_DISCARD );
|
|
818
854
|
this.discard = true;
|
|
819
855
|
|
|
820
856
|
}
|
|
@@ -900,11 +936,11 @@ class WebGLBackend extends Backend {
|
|
|
900
936
|
*/
|
|
901
937
|
finishCompute( computeGroup ) {
|
|
902
938
|
|
|
903
|
-
const gl = this
|
|
939
|
+
const { state, gl } = this;
|
|
904
940
|
|
|
905
941
|
this.discard = false;
|
|
906
942
|
|
|
907
|
-
|
|
943
|
+
state.disable( gl.RASTERIZER_DISCARD );
|
|
908
944
|
|
|
909
945
|
this.prepareTimestampBuffer( TimestampQuery.COMPUTE, this.getTimestampUID( computeGroup ) );
|
|
910
946
|
|
|
@@ -957,6 +993,12 @@ class WebGLBackend extends Backend {
|
|
|
957
993
|
|
|
958
994
|
state.setMaterial( material, frontFaceCW, hardwareClippingPlanes );
|
|
959
995
|
|
|
996
|
+
if ( context.mrt !== null && context.textures !== null ) {
|
|
997
|
+
|
|
998
|
+
state.setMRTBlending( context.textures, context.mrt, material );
|
|
999
|
+
|
|
1000
|
+
}
|
|
1001
|
+
|
|
960
1002
|
state.useProgram( programGPU );
|
|
961
1003
|
|
|
962
1004
|
// vertex state
|
|
@@ -1743,25 +1785,53 @@ class WebGLBackend extends Backend {
|
|
|
1743
1785
|
|
|
1744
1786
|
if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
|
|
1745
1787
|
|
|
1746
|
-
const
|
|
1747
|
-
let { bufferGPU } = this.get(
|
|
1788
|
+
const array = binding.buffer;
|
|
1789
|
+
let { bufferGPU } = this.get( array );
|
|
1748
1790
|
|
|
1749
1791
|
if ( bufferGPU === undefined ) {
|
|
1750
1792
|
|
|
1751
1793
|
// create
|
|
1752
1794
|
|
|
1753
1795
|
bufferGPU = gl.createBuffer();
|
|
1796
|
+
|
|
1754
1797
|
gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
|
|
1755
|
-
gl.bufferData( gl.UNIFORM_BUFFER,
|
|
1798
|
+
gl.bufferData( gl.UNIFORM_BUFFER, array.byteLength, gl.DYNAMIC_DRAW );
|
|
1756
1799
|
|
|
1757
|
-
this.set(
|
|
1800
|
+
this.set( array, { bufferGPU } );
|
|
1758
1801
|
|
|
1759
1802
|
} else {
|
|
1760
1803
|
|
|
1761
|
-
// update
|
|
1762
|
-
|
|
1763
1804
|
gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
|
|
1764
|
-
|
|
1805
|
+
|
|
1806
|
+
}
|
|
1807
|
+
|
|
1808
|
+
// update
|
|
1809
|
+
|
|
1810
|
+
const updateRanges = binding.updateRanges;
|
|
1811
|
+
|
|
1812
|
+
gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
|
|
1813
|
+
|
|
1814
|
+
if ( updateRanges.length === 0 ) {
|
|
1815
|
+
|
|
1816
|
+
gl.bufferData( gl.UNIFORM_BUFFER, array, gl.DYNAMIC_DRAW );
|
|
1817
|
+
|
|
1818
|
+
} else {
|
|
1819
|
+
|
|
1820
|
+
const isTyped = isTypedArray( array );
|
|
1821
|
+
const byteOffsetFactor = isTyped ? 1 : array.BYTES_PER_ELEMENT;
|
|
1822
|
+
|
|
1823
|
+
for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
|
|
1824
|
+
|
|
1825
|
+
const range = updateRanges[ i ];
|
|
1826
|
+
|
|
1827
|
+
const dataOffset = range.start * byteOffsetFactor;
|
|
1828
|
+
const size = range.count * byteOffsetFactor;
|
|
1829
|
+
|
|
1830
|
+
const bufferOffset = dataOffset * ( isTyped ? array.BYTES_PER_ELEMENT : 1 ); // bufferOffset is always in bytes
|
|
1831
|
+
|
|
1832
|
+
gl.bufferSubData( gl.UNIFORM_BUFFER, bufferOffset, array, dataOffset, size );
|
|
1833
|
+
|
|
1834
|
+
}
|
|
1765
1835
|
|
|
1766
1836
|
}
|
|
1767
1837
|
|
|
@@ -1799,10 +1869,35 @@ class WebGLBackend extends Backend {
|
|
|
1799
1869
|
|
|
1800
1870
|
const bindingData = this.get( binding );
|
|
1801
1871
|
const bufferGPU = bindingData.bufferGPU;
|
|
1802
|
-
const
|
|
1872
|
+
const array = binding.buffer;
|
|
1873
|
+
|
|
1874
|
+
const updateRanges = binding.updateRanges;
|
|
1803
1875
|
|
|
1804
1876
|
gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
|
|
1805
|
-
|
|
1877
|
+
|
|
1878
|
+
if ( updateRanges.length === 0 ) {
|
|
1879
|
+
|
|
1880
|
+
gl.bufferData( gl.UNIFORM_BUFFER, array, gl.DYNAMIC_DRAW );
|
|
1881
|
+
|
|
1882
|
+
} else {
|
|
1883
|
+
|
|
1884
|
+
const isTyped = isTypedArray( array );
|
|
1885
|
+
const byteOffsetFactor = isTyped ? 1 : array.BYTES_PER_ELEMENT;
|
|
1886
|
+
|
|
1887
|
+
for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
|
|
1888
|
+
|
|
1889
|
+
const range = updateRanges[ i ];
|
|
1890
|
+
|
|
1891
|
+
const dataOffset = range.start * byteOffsetFactor;
|
|
1892
|
+
const size = range.count * byteOffsetFactor;
|
|
1893
|
+
|
|
1894
|
+
const bufferOffset = dataOffset * ( isTyped ? array.BYTES_PER_ELEMENT : 1 ); // bufferOffset is always in bytes
|
|
1895
|
+
|
|
1896
|
+
gl.bufferSubData( gl.UNIFORM_BUFFER, bufferOffset, array, dataOffset, size );
|
|
1897
|
+
|
|
1898
|
+
}
|
|
1899
|
+
|
|
1900
|
+
}
|
|
1806
1901
|
|
|
1807
1902
|
}
|
|
1808
1903
|
|
|
@@ -1937,6 +2032,35 @@ class WebGLBackend extends Backend {
|
|
|
1937
2032
|
|
|
1938
2033
|
}
|
|
1939
2034
|
|
|
2035
|
+
/**
|
|
2036
|
+
* Checks if the given compatibility is supported by the backend.
|
|
2037
|
+
*
|
|
2038
|
+
* @param {string} name - The compatibility name.
|
|
2039
|
+
* @return {boolean} Whether the compatibility is supported or not.
|
|
2040
|
+
*/
|
|
2041
|
+
hasCompatibility( name ) {
|
|
2042
|
+
|
|
2043
|
+
if ( name === Compatibility.TEXTURE_COMPARE ) return true;
|
|
2044
|
+
|
|
2045
|
+
return super.hasCompatibility( name );
|
|
2046
|
+
|
|
2047
|
+
}
|
|
2048
|
+
|
|
2049
|
+
/**
|
|
2050
|
+
* Initializes the render target defined in the given render context.
|
|
2051
|
+
*
|
|
2052
|
+
* @param {RenderContext} renderContext - The render context.
|
|
2053
|
+
*/
|
|
2054
|
+
initRenderTarget( renderContext ) {
|
|
2055
|
+
|
|
2056
|
+
const { gl, state } = this;
|
|
2057
|
+
|
|
2058
|
+
this._setFramebuffer( renderContext );
|
|
2059
|
+
|
|
2060
|
+
state.bindFramebuffer( gl.FRAMEBUFFER, null );
|
|
2061
|
+
|
|
2062
|
+
}
|
|
2063
|
+
|
|
1940
2064
|
/**
|
|
1941
2065
|
* Configures the active framebuffer from the given render context.
|
|
1942
2066
|
*
|
|
@@ -1955,7 +2079,7 @@ class WebGLBackend extends Backend {
|
|
|
1955
2079
|
const renderTargetContextData = this.get( renderTarget );
|
|
1956
2080
|
const { samples, depthBuffer, stencilBuffer } = renderTarget;
|
|
1957
2081
|
|
|
1958
|
-
const isCube = renderTarget.
|
|
2082
|
+
const isCube = renderTarget.isCubeRenderTarget === true;
|
|
1959
2083
|
const isRenderTarget3D = renderTarget.isRenderTarget3D === true;
|
|
1960
2084
|
const isRenderTargetArray = renderTarget.depth > 1;
|
|
1961
2085
|
const isXRRenderTarget = renderTarget.isXRRenderTarget === true;
|
|
@@ -2091,6 +2215,12 @@ class WebGLBackend extends Backend {
|
|
|
2091
2215
|
|
|
2092
2216
|
gl.framebufferTextureLayer( gl.FRAMEBUFFER, depthStyle, textureData.textureGPU, 0, layer );
|
|
2093
2217
|
|
|
2218
|
+
} else if ( descriptor.depthTexture.isCubeTexture ) {
|
|
2219
|
+
|
|
2220
|
+
const cubeFace = this.renderer._activeCubeFace;
|
|
2221
|
+
|
|
2222
|
+
gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_CUBE_MAP_POSITIVE_X + cubeFace, textureData.textureGPU, 0 );
|
|
2223
|
+
|
|
2094
2224
|
} else {
|
|
2095
2225
|
|
|
2096
2226
|
gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0 );
|
|
@@ -10,8 +10,8 @@ import { DataTexture } from '../../../textures/DataTexture.js';
|
|
|
10
10
|
import { error } from '../../../utils.js';
|
|
11
11
|
|
|
12
12
|
const glslPolyfills = {
|
|
13
|
-
bitcast_int_uint: new CodeNode( /* glsl */'uint
|
|
14
|
-
bitcast_uint_int: new CodeNode( /* glsl */'uint
|
|
13
|
+
bitcast_int_uint: new CodeNode( /* glsl */'uint tsl_bitcast_int_to_uint ( int x ) { return floatBitsToUint( intBitsToFloat ( x ) ); }' ),
|
|
14
|
+
bitcast_uint_int: new CodeNode( /* glsl */'uint tsl_bitcast_uint_to_int ( uint x ) { return floatBitsToInt( uintBitsToFloat ( x ) ); }' )
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
const glslMethods = {
|
|
@@ -22,7 +22,13 @@ const glslMethods = {
|
|
|
22
22
|
bitcast_uint_float: 'uintBitsToFloat',
|
|
23
23
|
bitcast_float_uint: 'floatBitsToUint',
|
|
24
24
|
bitcast_uint_int: 'tsl_bitcast_uint_to_int',
|
|
25
|
-
bitcast_int_uint: 'tsl_bitcast_int_to_uint'
|
|
25
|
+
bitcast_int_uint: 'tsl_bitcast_int_to_uint',
|
|
26
|
+
floatpack_snorm_2x16: 'packSnorm2x16',
|
|
27
|
+
floatpack_unorm_2x16: 'packUnorm2x16',
|
|
28
|
+
floatpack_float16_2x16: 'packHalf2x16',
|
|
29
|
+
floatunpack_snorm_2x16: 'unpackSnorm2x16',
|
|
30
|
+
floatunpack_unorm_2x16: 'unpackUnorm2x16',
|
|
31
|
+
floatunpack_float16_2x16: 'unpackHalf2x16'
|
|
26
32
|
};
|
|
27
33
|
|
|
28
34
|
const precisionLib = {
|
|
@@ -63,9 +69,9 @@ precision highp isampler3D;
|
|
|
63
69
|
precision highp isamplerCube;
|
|
64
70
|
precision highp isampler2DArray;
|
|
65
71
|
|
|
66
|
-
precision
|
|
67
|
-
precision
|
|
68
|
-
precision
|
|
72
|
+
precision highp sampler2DShadow;
|
|
73
|
+
precision highp sampler2DArrayShadow;
|
|
74
|
+
precision highp samplerCubeShadow;
|
|
69
75
|
`;
|
|
70
76
|
|
|
71
77
|
/**
|
|
@@ -184,6 +190,30 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
184
190
|
|
|
185
191
|
}
|
|
186
192
|
|
|
193
|
+
/**
|
|
194
|
+
* Returns the float packing method name for a given numeric encoding.
|
|
195
|
+
*
|
|
196
|
+
* @param {string} encoding - The numeric encoding that describes how the float values are mapped to the integer range.
|
|
197
|
+
* @returns {string} The resolved GLSL float packing method name.
|
|
198
|
+
*/
|
|
199
|
+
getFloatPackingMethod( encoding ) {
|
|
200
|
+
|
|
201
|
+
return this.getMethod( `floatpack_${ encoding }_2x16` );
|
|
202
|
+
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Returns the float unpacking method name for a given numeric encoding.
|
|
207
|
+
*
|
|
208
|
+
* @param {string} encoding - The numeric encoding that describes how the integer values are mapped to the float range.
|
|
209
|
+
* @returns {string} The resolved GLSL float unpacking method name.
|
|
210
|
+
*/
|
|
211
|
+
getFloatUnpackingMethod( encoding ) {
|
|
212
|
+
|
|
213
|
+
return this.getMethod( `floatunpack_${ encoding }_2x16` );
|
|
214
|
+
|
|
215
|
+
}
|
|
216
|
+
|
|
187
217
|
/**
|
|
188
218
|
* Returns the native snippet for a ternary operation.
|
|
189
219
|
*
|
|
@@ -330,7 +360,7 @@ ${ flowData.code }
|
|
|
330
360
|
|
|
331
361
|
if ( node.isNodeUniform && node.node.isTextureNode !== true && node.node.isBufferNode !== true ) {
|
|
332
362
|
|
|
333
|
-
return
|
|
363
|
+
return node.name;
|
|
334
364
|
|
|
335
365
|
}
|
|
336
366
|
|
|
@@ -515,10 +545,13 @@ ${ flowData.code }
|
|
|
515
545
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
516
546
|
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
517
547
|
* @param {string} levelSnippet - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
548
|
+
* @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
|
|
518
549
|
* @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
519
550
|
* @return {string} The GLSL snippet.
|
|
520
551
|
*/
|
|
521
|
-
generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, offsetSnippet ) {
|
|
552
|
+
generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet ) {
|
|
553
|
+
|
|
554
|
+
if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
|
|
522
555
|
|
|
523
556
|
if ( offsetSnippet ) {
|
|
524
557
|
|
|
@@ -537,10 +570,13 @@ ${ flowData.code }
|
|
|
537
570
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
538
571
|
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
539
572
|
* @param {string} biasSnippet - A GLSL snippet that represents the bias to apply to the mip level before sampling.
|
|
573
|
+
* @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
|
|
540
574
|
* @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
541
575
|
* @return {string} The GLSL snippet.
|
|
542
576
|
*/
|
|
543
|
-
generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, offsetSnippet ) {
|
|
577
|
+
generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, offsetSnippet ) {
|
|
578
|
+
|
|
579
|
+
if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
|
|
544
580
|
|
|
545
581
|
if ( offsetSnippet ) {
|
|
546
582
|
|
|
@@ -559,10 +595,13 @@ ${ flowData.code }
|
|
|
559
595
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
560
596
|
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
561
597
|
* @param {Array<string>} gradSnippet - An array holding both gradient GLSL snippets.
|
|
598
|
+
* @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
|
|
562
599
|
* @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
563
600
|
* @return {string} The GLSL snippet.
|
|
564
601
|
*/
|
|
565
|
-
generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, offsetSnippet ) {
|
|
602
|
+
generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, offsetSnippet ) {
|
|
603
|
+
|
|
604
|
+
if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
|
|
566
605
|
|
|
567
606
|
if ( offsetSnippet ) {
|
|
568
607
|
|
|
@@ -591,6 +630,13 @@ ${ flowData.code }
|
|
|
591
630
|
|
|
592
631
|
if ( shaderStage === 'fragment' ) {
|
|
593
632
|
|
|
633
|
+
// Cube shadow maps use vec4(direction, compareValue)
|
|
634
|
+
if ( texture.isCubeTexture ) {
|
|
635
|
+
|
|
636
|
+
return `texture( ${ textureProperty }, vec4( ${ uvSnippet }, ${ compareSnippet } ) )`;
|
|
637
|
+
|
|
638
|
+
}
|
|
639
|
+
|
|
594
640
|
if ( depthSnippet ) {
|
|
595
641
|
|
|
596
642
|
if ( offsetSnippet ) {
|
|
@@ -713,6 +759,20 @@ ${ flowData.code }
|
|
|
713
759
|
|
|
714
760
|
snippet = `samplerCube ${ uniform.name };`;
|
|
715
761
|
|
|
762
|
+
} else if ( uniform.type === 'cubeDepthTexture' ) {
|
|
763
|
+
|
|
764
|
+
const texture = uniform.node.value;
|
|
765
|
+
|
|
766
|
+
if ( texture.compareFunction ) {
|
|
767
|
+
|
|
768
|
+
snippet = `samplerCubeShadow ${ uniform.name };`;
|
|
769
|
+
|
|
770
|
+
} else {
|
|
771
|
+
|
|
772
|
+
snippet = `samplerCube ${ uniform.name };`;
|
|
773
|
+
|
|
774
|
+
}
|
|
775
|
+
|
|
716
776
|
} else if ( uniform.type === 'buffer' ) {
|
|
717
777
|
|
|
718
778
|
const bufferNode = uniform.node;
|
|
@@ -724,32 +784,56 @@ ${ flowData.code }
|
|
|
724
784
|
|
|
725
785
|
} else {
|
|
726
786
|
|
|
727
|
-
const
|
|
787
|
+
const groupName = uniform.groupNode.name;
|
|
728
788
|
|
|
729
|
-
|
|
789
|
+
// Check if this group has already been processed
|
|
790
|
+
if ( uniformGroups[ groupName ] === undefined ) {
|
|
730
791
|
|
|
731
|
-
|
|
792
|
+
// Get the shared uniform group that contains uniforms from all stages
|
|
793
|
+
const sharedUniformGroup = this.uniformGroups[ groupName ];
|
|
732
794
|
|
|
733
|
-
|
|
795
|
+
if ( sharedUniformGroup !== undefined ) {
|
|
796
|
+
|
|
797
|
+
// Generate snippets for ALL uniforms in this shared group
|
|
798
|
+
const snippets = [];
|
|
734
799
|
|
|
735
|
-
|
|
800
|
+
for ( const sharedUniform of sharedUniformGroup.uniforms ) {
|
|
736
801
|
|
|
737
|
-
|
|
802
|
+
const type = sharedUniform.getType();
|
|
803
|
+
const vectorType = this.getVectorType( type );
|
|
804
|
+
const precision = sharedUniform.nodeUniform.node.precision;
|
|
738
805
|
|
|
739
|
-
|
|
806
|
+
let uniformSnippet = `${ vectorType } ${ sharedUniform.name };`;
|
|
807
|
+
|
|
808
|
+
if ( precision !== null ) {
|
|
809
|
+
|
|
810
|
+
uniformSnippet = precisionLib[ precision ] + ' ' + uniformSnippet;
|
|
811
|
+
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
snippets.push( '\t' + uniformSnippet );
|
|
815
|
+
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
uniformGroups[ groupName ] = snippets;
|
|
819
|
+
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
group = true;
|
|
740
825
|
|
|
741
826
|
}
|
|
742
827
|
|
|
743
|
-
if ( group ) {
|
|
828
|
+
if ( ! group ) {
|
|
744
829
|
|
|
745
|
-
|
|
830
|
+
const precision = uniform.node.precision;
|
|
746
831
|
|
|
747
|
-
|
|
748
|
-
const groupSnippets = uniformGroups[ groupName ] || ( uniformGroups[ groupName ] = [] );
|
|
832
|
+
if ( precision !== null ) {
|
|
749
833
|
|
|
750
|
-
|
|
834
|
+
snippet = precisionLib[ precision ] + ' ' + snippet;
|
|
751
835
|
|
|
752
|
-
|
|
836
|
+
}
|
|
753
837
|
|
|
754
838
|
snippet = 'uniform ' + snippet;
|
|
755
839
|
|
|
@@ -765,7 +849,7 @@ ${ flowData.code }
|
|
|
765
849
|
|
|
766
850
|
const groupSnippets = uniformGroups[ name ];
|
|
767
851
|
|
|
768
|
-
output += this._getGLSLUniformStruct(
|
|
852
|
+
output += this._getGLSLUniformStruct( name, groupSnippets.join( '\n' ) ) + '\n';
|
|
769
853
|
|
|
770
854
|
}
|
|
771
855
|
|
|
@@ -1232,6 +1316,18 @@ ${ flowData.code }
|
|
|
1232
1316
|
|
|
1233
1317
|
}
|
|
1234
1318
|
|
|
1319
|
+
/**
|
|
1320
|
+
* Returns the maximum number of bytes available for uniform buffers.
|
|
1321
|
+
*
|
|
1322
|
+
* @return {number} The maximum number of bytes available for uniform buffers.
|
|
1323
|
+
*/
|
|
1324
|
+
getUniformBufferLimit() {
|
|
1325
|
+
|
|
1326
|
+
const gl = this.renderer.backend.gl;
|
|
1327
|
+
return gl.getParameter( gl.MAX_UNIFORM_BLOCK_SIZE );
|
|
1328
|
+
|
|
1329
|
+
}
|
|
1330
|
+
|
|
1235
1331
|
/**
|
|
1236
1332
|
* Enables hardware clipping.
|
|
1237
1333
|
*
|
|
@@ -1519,7 +1615,7 @@ void main() {
|
|
|
1519
1615
|
uniformGPU = new NodeSampledTexture( uniformNode.name, uniformNode.node, group );
|
|
1520
1616
|
bindings.push( uniformGPU );
|
|
1521
1617
|
|
|
1522
|
-
} else if ( type === 'cubeTexture' ) {
|
|
1618
|
+
} else if ( type === 'cubeTexture' || type === 'cubeDepthTexture' ) {
|
|
1523
1619
|
|
|
1524
1620
|
uniformGPU = new NodeSampledCubeTexture( uniformNode.name, uniformNode.node, group );
|
|
1525
1621
|
bindings.push( uniformGPU );
|
|
@@ -1531,11 +1627,22 @@ void main() {
|
|
|
1531
1627
|
|
|
1532
1628
|
} else if ( type === 'buffer' ) {
|
|
1533
1629
|
|
|
1534
|
-
node.name = `NodeBuffer_${ node.id }`;
|
|
1535
1630
|
uniformNode.name = `buffer${ node.id }`;
|
|
1536
1631
|
|
|
1537
|
-
const
|
|
1538
|
-
|
|
1632
|
+
const sharedData = this.getSharedDataFromNode( node );
|
|
1633
|
+
|
|
1634
|
+
let buffer = sharedData.buffer;
|
|
1635
|
+
|
|
1636
|
+
if ( buffer === undefined ) {
|
|
1637
|
+
|
|
1638
|
+
node.name = `NodeBuffer_${ node.id }`;
|
|
1639
|
+
|
|
1640
|
+
buffer = new NodeUniformBuffer( node, group );
|
|
1641
|
+
buffer.name = node.name;
|
|
1642
|
+
|
|
1643
|
+
sharedData.buffer = buffer;
|
|
1644
|
+
|
|
1645
|
+
}
|
|
1539
1646
|
|
|
1540
1647
|
bindings.push( buffer );
|
|
1541
1648
|
|
|
@@ -1543,24 +1650,38 @@ void main() {
|
|
|
1543
1650
|
|
|
1544
1651
|
} else {
|
|
1545
1652
|
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
let uniformsGroup = uniformsStage[ groupName ];
|
|
1653
|
+
let uniformsGroup = this.uniformGroups[ groupName ];
|
|
1549
1654
|
|
|
1550
1655
|
if ( uniformsGroup === undefined ) {
|
|
1551
1656
|
|
|
1552
|
-
uniformsGroup = new NodeUniformsGroup(
|
|
1553
|
-
//uniformsGroup.setVisibility( gpuShaderStageLib[ shaderStage ] );
|
|
1657
|
+
uniformsGroup = new NodeUniformsGroup( groupName, group );
|
|
1554
1658
|
|
|
1555
|
-
|
|
1659
|
+
this.uniformGroups[ groupName ] = uniformsGroup;
|
|
1556
1660
|
|
|
1557
1661
|
bindings.push( uniformsGroup );
|
|
1558
1662
|
|
|
1663
|
+
} else {
|
|
1664
|
+
|
|
1665
|
+
// Add to bindings for this stage if not already present
|
|
1666
|
+
if ( bindings.indexOf( uniformsGroup ) === - 1 ) {
|
|
1667
|
+
|
|
1668
|
+
bindings.push( uniformsGroup );
|
|
1669
|
+
|
|
1670
|
+
}
|
|
1671
|
+
|
|
1559
1672
|
}
|
|
1560
1673
|
|
|
1561
1674
|
uniformGPU = this.getNodeUniform( uniformNode, type );
|
|
1562
1675
|
|
|
1563
|
-
|
|
1676
|
+
// Only add uniform if not already present in the group (check by name to avoid duplicates across stages)
|
|
1677
|
+
const uniformName = uniformGPU.name;
|
|
1678
|
+
const alreadyExists = uniformsGroup.uniforms.some( u => u.name === uniformName );
|
|
1679
|
+
|
|
1680
|
+
if ( ! alreadyExists ) {
|
|
1681
|
+
|
|
1682
|
+
uniformsGroup.addUniform( uniformGPU );
|
|
1683
|
+
|
|
1684
|
+
}
|
|
1564
1685
|
|
|
1565
1686
|
}
|
|
1566
1687
|
|