@unikia/upe-renderer 0.186.110 → 0.187.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -7
- package/UPSTREAM.md +4 -4
- package/build/three.core.js +853 -277
- package/build/three.module.js +1098 -1280
- package/build/three.tsl.js +41938 -686
- package/build/three.webgpu.js +10604 -49055
- package/build/three.webgpu.nodes.js +9249 -5788
- package/examples/jsm/Addons.js +2 -0
- package/examples/jsm/animation/CCDIKSolver.js +17 -5
- package/examples/jsm/controls/FirstPersonControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +27 -14
- package/examples/jsm/csm/CSMShader.js +74 -3
- package/examples/jsm/curves/CurveExtras.js +4 -4
- package/examples/jsm/curves/NURBSCurve.js +14 -0
- package/examples/jsm/exporters/EXRExporter.js +673 -16
- package/examples/jsm/exporters/GLTFExporter.js +4 -4
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/OBJExporter.js +48 -5
- package/examples/jsm/exporters/PLYExporter.js +22 -11
- package/examples/jsm/generators/CityGenerator.js +3 -2
- package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
- package/examples/jsm/gpgpu/BitonicSort.js +30 -23
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
- package/examples/jsm/inspector/Extension.js +1 -1
- package/examples/jsm/inspector/Inspector.js +6 -46
- package/examples/jsm/inspector/RendererInspector.js +43 -8
- package/examples/jsm/inspector/Storage.js +49 -0
- package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
- package/examples/jsm/inspector/tabs/Parameters.js +5 -1
- package/examples/jsm/inspector/tabs/Performance.js +22 -7
- package/examples/jsm/inspector/tabs/Settings.js +1 -1
- package/examples/jsm/inspector/tabs/Timeline.js +83 -7
- package/examples/jsm/inspector/tabs/Viewer.js +25 -10
- package/examples/jsm/inspector/ui/Profiler.js +1 -1
- package/examples/jsm/inspector/ui/Style.js +21 -53
- package/examples/jsm/inspector/ui/Values.js +28 -3
- package/examples/jsm/libs/fflate.module.js +83 -56
- package/examples/jsm/libs/mikktspace.README.md +27 -0
- package/examples/jsm/libs/mikktspace.module.js +721 -109
- package/examples/jsm/lighting/ClusteredLighting.js +100 -2
- package/examples/jsm/lighting/LightMapper.js +295 -0
- package/examples/jsm/lighting/LightProbeGrid.js +242 -139
- package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
- package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
- package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
- package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
- package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
- package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
- package/examples/jsm/lights/SunLight.js +9 -4
- package/examples/jsm/lights/SunLightNode.js +3 -3
- package/examples/jsm/lines/LineMaterial.js +26 -10
- package/examples/jsm/loaders/3DMLoader.js +10 -1
- package/examples/jsm/loaders/3MFLoader.js +5 -1
- package/examples/jsm/loaders/AMFLoader.js +2 -0
- package/examples/jsm/loaders/BVHLoader.js +2 -0
- package/examples/jsm/loaders/ColladaLoader.js +8 -0
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +5 -1
- package/examples/jsm/loaders/EXRLoader.js +120 -104
- package/examples/jsm/loaders/FBXLoader.js +4 -0
- package/examples/jsm/loaders/FontLoader.js +2 -0
- package/examples/jsm/loaders/GCodeLoader.js +5 -9
- package/examples/jsm/loaders/GLTFLoader.js +112 -31
- package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
- package/examples/jsm/loaders/IESLoader.js +46 -12
- package/examples/jsm/loaders/JXLLoader.js +159 -0
- package/examples/jsm/loaders/KMZLoader.js +6 -0
- package/examples/jsm/loaders/KSPLATLoader.js +2 -0
- package/examples/jsm/loaders/KTX2Loader.js +49 -4
- package/examples/jsm/loaders/KTXLoader.js +5 -3
- package/examples/jsm/loaders/LDrawLoader.js +15 -22
- package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
- package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
- package/examples/jsm/loaders/LUTImageLoader.js +2 -0
- package/examples/jsm/loaders/LWOLoader.js +6 -0
- package/examples/jsm/loaders/MD2Loader.js +2 -0
- package/examples/jsm/loaders/MDDLoader.js +4 -0
- package/examples/jsm/loaders/MTLLoader.js +8 -0
- package/examples/jsm/loaders/MaterialXLoader.js +57 -5
- package/examples/jsm/loaders/NRRDLoader.js +4 -2
- package/examples/jsm/loaders/OBJLoader.js +10 -4
- package/examples/jsm/loaders/PCDLoader.js +6 -2
- package/examples/jsm/loaders/PDBLoader.js +5 -3
- package/examples/jsm/loaders/PLYLoader.js +39 -15
- package/examples/jsm/loaders/PVRLoader.js +2 -2
- package/examples/jsm/loaders/SPLATLoader.js +2 -0
- package/examples/jsm/loaders/SPZLoader.js +2 -0
- package/examples/jsm/loaders/STLLoader.js +3 -1
- package/examples/jsm/loaders/SVGLoader.js +27 -49
- package/examples/jsm/loaders/TDSLoader.js +4 -0
- package/examples/jsm/loaders/TGALoader.js +6 -5
- package/examples/jsm/loaders/TTFLoader.js +2 -0
- package/examples/jsm/loaders/USDLoader.js +14 -0
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
- package/examples/jsm/loaders/VOXLoader.js +3 -0
- package/examples/jsm/loaders/VRMLLoader.js +4 -0
- package/examples/jsm/loaders/VTKLoader.js +2 -0
- package/examples/jsm/loaders/XYZLoader.js +2 -0
- package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
- package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
- package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
- package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
- package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
- package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
- package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
- package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
- package/examples/jsm/loaders/usd/USDAParser.js +56 -47
- package/examples/jsm/loaders/usd/USDComposer.js +25 -30
- package/examples/jsm/math/ColorConverter.js +7 -3
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/OBB.js +3 -3
- package/examples/jsm/math/Octree.js +20 -17
- package/examples/jsm/objects/GaussianSplat.js +5 -4
- package/examples/jsm/objects/Reflector.js +5 -0
- package/examples/jsm/objects/SkyMesh.js +14 -7
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/physics/RapierPhysics.js +2 -2
- package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
- package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
- package/examples/jsm/postprocessing/BokehPass.js +1 -1
- package/examples/jsm/postprocessing/GTAOPass.js +26 -18
- package/examples/jsm/renderers/SVGRenderer.js +3 -2
- package/examples/jsm/shaders/GTAOShader.js +7 -4
- package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
- package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
- package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
- package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
- package/examples/jsm/tsl/display/BloomNode.js +3 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
- package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
- package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
- package/examples/jsm/tsl/display/FSR1Node.js +3 -3
- package/examples/jsm/tsl/display/FXAANode.js +3 -10
- package/examples/jsm/tsl/display/FilmNode.js +3 -3
- package/examples/jsm/tsl/display/GTAONode.js +33 -25
- package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
- package/examples/jsm/tsl/display/GodraysNode.js +5 -19
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
- package/examples/jsm/tsl/display/LensflareNode.js +3 -3
- package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
- package/examples/jsm/tsl/display/OITPassNode.js +0 -11
- package/examples/jsm/tsl/display/OutlineNode.js +107 -5
- package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
- package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
- package/examples/jsm/tsl/display/SMAANode.js +3 -3
- package/examples/jsm/tsl/display/SSAONode.js +6 -20
- package/examples/jsm/tsl/display/SSGINode.js +36 -29
- package/examples/jsm/tsl/display/SSRNode.js +135 -63
- package/examples/jsm/tsl/display/SSSNode.js +6 -20
- package/examples/jsm/tsl/display/SharpenNode.js +3 -3
- package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
- package/examples/jsm/tsl/display/TAAUNode.js +10 -42
- package/examples/jsm/tsl/display/TRAANode.js +11 -43
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
- package/examples/jsm/tsl/display/TransitionNode.js +3 -3
- package/examples/jsm/tsl/display/lensDirt.js +30 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
- package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
- package/examples/jsm/tsl/utils/Raymarching.js +1 -1
- package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
- package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
- package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
- package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
- package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -1
- package/examples/jsm/utils/SceneUtils.js +1 -1
- package/examples/jsm/utils/unwrapUVs.js +865 -0
- package/examples/jsm/webxr/XREstimatedLight.js +11 -4
- package/package.json +3 -3
- package/src/Three.TSL.js +2 -683
- package/src/Three.WebGPU.Nodes.js +2 -1
- package/src/Three.WebGPU.js +2 -1
- package/src/animation/AnimationAction.js +1 -1
- package/src/animation/AnimationUtils.js +1 -3
- package/src/animation/KeyframeTrack.js +19 -0
- package/src/cameras/ArrayCamera.js +12 -0
- package/src/cameras/CubeCamera.js +3 -3
- package/src/constants.js +1 -9
- package/src/core/BufferAttribute.js +57 -21
- package/src/core/BufferGeometry.js +5 -13
- package/src/core/Clock.js +1 -1
- package/src/core/InterleavedBuffer.js +28 -18
- package/src/core/InterleavedBufferAttribute.js +54 -20
- package/src/core/Object3D.js +19 -9
- package/src/core/Raycaster.js +2 -0
- package/src/core/RenderTarget.js +11 -5
- package/src/core/UniformsGroup.js +7 -3
- package/src/extras/PMREMGenerator.js +392 -685
- package/src/extras/core/Curve.js +4 -0
- package/src/extras/core/CurvePath.js +13 -0
- package/src/extras/core/ShapePath.js +1 -1
- package/src/geometries/EdgesGeometry.js +12 -10
- package/src/geometries/LatheGeometry.js +2 -0
- package/src/helpers/PolarGridHelper.js +1 -1
- package/src/lights/Light.js +11 -0
- package/src/lights/LightProbe.js +2 -0
- package/src/lights/LightShadow.js +2 -0
- package/src/loaders/AnimationLoader.js +2 -0
- package/src/loaders/AudioLoader.js +2 -0
- package/src/loaders/BufferGeometryLoader.js +2 -0
- package/src/loaders/CompressedTextureLoader.js +2 -0
- package/src/loaders/CubeTextureLoader.js +2 -0
- package/src/loaders/DataTextureLoader.js +2 -0
- package/src/loaders/FileLoader.js +2 -0
- package/src/loaders/ImageBitmapLoader.js +3 -1
- package/src/loaders/ImageLoader.js +1 -0
- package/src/loaders/Loader.js +47 -0
- package/src/loaders/MaterialLoader.js +2 -0
- package/src/loaders/ObjectLoader.js +27 -8
- package/src/loaders/TextureLoader.js +5 -3
- package/src/loaders/nodes/NodeLoader.js +2 -0
- package/src/materials/Material.js +21 -2
- package/src/materials/MeshDepthMaterial.js +1 -1
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +1 -1
- package/src/materials/MeshMatcapMaterial.js +1 -1
- package/src/materials/MeshNormalMaterial.js +1 -1
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +90 -11
- package/src/materials/MeshStandardMaterial.js +1 -1
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +32 -10
- package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
- package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
- package/src/materials/nodes/NodeMaterial.js +36 -16
- package/src/materials/nodes/NodeMaterialInstance.js +193 -0
- package/src/materials/nodes/NodeMaterials.js +1 -0
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
- package/src/math/Box3.js +2 -2
- package/src/math/Color.js +8 -8
- package/src/math/ColorManagement.js +2 -21
- package/src/math/FrustumArray.js +12 -0
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +2 -4
- package/src/math/MathUtils.js +33 -46
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +1 -1
- package/src/math/Matrix4.js +1 -1
- package/src/math/Triangle.js +2 -1
- package/src/math/Vector2.js +1 -1
- package/src/math/Vector3.js +1 -1
- package/src/math/Vector4.js +1 -1
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +2 -0
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/Batch.js +29 -23
- package/src/nodes/accessors/BufferAttributeNode.js +21 -1
- package/src/nodes/accessors/BuiltinNode.js +6 -0
- package/src/nodes/accessors/Camera.js +100 -93
- package/src/nodes/accessors/ClippingNode.js +17 -6
- package/src/nodes/accessors/CubeTextureNode.js +12 -24
- package/src/nodes/accessors/Instance.js +198 -160
- package/src/nodes/accessors/Lights.js +19 -6
- package/src/nodes/accessors/MaterialNode.js +33 -4
- package/src/nodes/accessors/Morph.js +81 -22
- package/src/nodes/accessors/Normal.js +0 -42
- package/src/nodes/accessors/Object3DNode.js +6 -0
- package/src/nodes/accessors/PointUVNode.js +6 -0
- package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
- package/src/nodes/accessors/ReferenceNode.js +6 -0
- package/src/nodes/accessors/Skinning.js +57 -52
- package/src/nodes/accessors/StorageBufferNode.js +3 -12
- package/src/nodes/accessors/TextureBicubic.js +30 -27
- package/src/nodes/accessors/TextureNode.js +164 -78
- package/src/nodes/accessors/TextureSizeNode.js +6 -0
- package/src/nodes/accessors/UniformArrayNode.js +8 -15
- package/src/nodes/accessors/VelocityNode.js +13 -8
- package/src/nodes/code/CodeNode.js +6 -0
- package/src/nodes/code/ExpressionNode.js +6 -0
- package/src/nodes/code/FunctionCallNode.js +3 -3
- package/src/nodes/code/FunctionNode.js +15 -13
- package/src/nodes/core/ArrayNode.js +3 -3
- package/src/nodes/core/AssignNode.js +10 -9
- package/src/nodes/core/AttributeNode.js +39 -0
- package/src/nodes/core/BypassNode.js +6 -0
- package/src/nodes/core/ConstNode.js +31 -1
- package/src/nodes/core/ContextNode.js +11 -6
- package/src/nodes/core/IndexNode.js +6 -0
- package/src/nodes/core/InputNode.js +6 -0
- package/src/nodes/core/InspectorNode.js +17 -31
- package/src/nodes/core/IsolateNode.js +8 -0
- package/src/nodes/core/Node.js +367 -67
- package/src/nodes/core/NodeBuilder.js +664 -222
- package/src/nodes/core/NodeUtils.js +25 -0
- package/src/nodes/core/NodeVar.js +10 -1
- package/src/nodes/core/OutputStructNode.js +6 -0
- package/src/nodes/core/OverrideContextNode.js +38 -37
- package/src/nodes/core/PropertyNode.js +14 -0
- package/src/nodes/core/StackNode.js +33 -21
- package/src/nodes/core/StructNode.js +6 -0
- package/src/nodes/core/StructTypeNode.js +6 -0
- package/src/nodes/core/SubBuildNode.js +8 -0
- package/src/nodes/core/TempNode.js +10 -35
- package/src/nodes/core/UniformGroupNode.js +6 -0
- package/src/nodes/core/VarNode.js +43 -135
- package/src/nodes/core/VaryingNode.js +33 -2
- package/src/nodes/display/BlendModes.js +5 -40
- package/src/nodes/display/BumpMapNode.js +17 -7
- package/src/nodes/display/ColorAdjustment.js +22 -10
- package/src/nodes/display/ColorSpaceFunctions.js +2 -14
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +6 -0
- package/src/nodes/display/NormalMapNode.js +3 -3
- package/src/nodes/display/PassNode.js +75 -16
- package/src/nodes/display/RenderOutputNode.js +22 -5
- package/src/nodes/display/ScreenNode.js +6 -0
- package/src/nodes/display/ToneMappingFunctions.js +9 -51
- package/src/nodes/display/ToneMappingNode.js +3 -3
- package/src/nodes/display/ToonOutlinePassNode.js +66 -2
- package/src/nodes/display/ViewportDepthNode.js +34 -4
- package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
- package/src/nodes/functions/BSDF/D_GGX.js +1 -8
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
- package/src/nodes/functions/BSDF/LTC.js +20 -47
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
- package/src/nodes/functions/PhysicalLightingModel.js +84 -51
- package/src/nodes/functions/VolumetricLightingModel.js +1 -1
- package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
- package/src/nodes/functions/material/getRoughness.js +3 -1
- package/src/nodes/geometry/RangeNode.js +52 -69
- package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
- package/src/nodes/gpgpu/BarrierNode.js +6 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
- package/src/nodes/gpgpu/ComputeNode.js +6 -0
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
- package/src/nodes/lighting/AnalyticLightNode.js +7 -14
- package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
- package/src/nodes/lighting/EnvironmentNode.js +58 -8
- package/src/nodes/lighting/IESSpotLightNode.js +19 -4
- package/src/nodes/lighting/LightProbeNode.js +2 -1
- package/src/nodes/lighting/LightUtils.js +2 -2
- package/src/nodes/lighting/LightingNode.js +6 -0
- package/src/nodes/lighting/LightsNode.js +26 -32
- package/src/nodes/lighting/PointShadowNode.js +92 -48
- package/src/nodes/lighting/ProjectorLightNode.js +1 -1
- package/src/nodes/lighting/RectAreaLightNode.js +13 -14
- package/src/nodes/lighting/ShadowBaseNode.js +9 -17
- package/src/nodes/lighting/ShadowFilterNode.js +26 -3
- package/src/nodes/lighting/ShadowNode.js +13 -11
- package/src/nodes/materialx/MaterialXColor.js +2 -14
- package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
- package/src/nodes/materialx/MaterialXNodes.js +8 -11
- package/src/nodes/materialx/MaterialXNoise.js +195 -454
- package/src/nodes/math/BitcastNode.js +5 -5
- package/src/nodes/math/BitcountNode.js +18 -46
- package/src/nodes/math/ConditionalNode.js +92 -22
- package/src/nodes/math/Hash.js +1 -1
- package/src/nodes/math/MathNode.js +86 -64
- package/src/nodes/math/MathUtils.js +2 -2
- package/src/nodes/math/OperatorNode.js +42 -59
- package/src/nodes/math/PackFloatNode.js +9 -9
- package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
- package/src/nodes/math/TriNoise3D.js +3 -23
- package/src/nodes/math/UnpackFloatNode.js +9 -9
- package/src/nodes/pmrem/PMREMNode.js +38 -75
- package/src/nodes/pmrem/PMREMUtils.js +108 -272
- package/src/nodes/procedural/Checker.js +1 -1
- package/src/nodes/tsl/TSLCore.js +199 -74
- package/src/nodes/utils/ArrayElementNode.js +19 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +2 -2
- package/src/nodes/utils/EventNode.js +6 -0
- package/src/nodes/utils/FlipNode.js +3 -3
- package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +14 -9
- package/src/nodes/utils/MemberNode.js +18 -0
- package/src/nodes/utils/PostProcessingUtils.js +20 -25
- package/src/nodes/utils/RTTNode.js +2 -0
- package/src/nodes/utils/ReflectorNode.js +24 -0
- package/src/nodes/utils/RotateNode.js +3 -3
- package/src/nodes/utils/SampleNode.js +6 -0
- package/src/nodes/utils/SetNode.js +3 -3
- package/src/nodes/utils/SplitNode.js +6 -0
- package/src/nodes/utils/UVUtils.js +2 -2
- package/src/objects/BatchedMesh.js +146 -15
- package/src/objects/InstancedMesh.js +12 -4
- package/src/objects/Line.js +20 -0
- package/src/objects/Mesh.js +8 -0
- package/src/objects/Points.js +20 -0
- package/src/objects/Skeleton.js +26 -0
- package/src/objects/SkinnedMesh.js +3 -3
- package/src/objects/Sprite.js +10 -0
- package/src/renderers/WebGLRenderer.js +104 -70
- package/src/renderers/common/Animation.js +5 -1
- package/src/renderers/common/Attributes.js +67 -57
- package/src/renderers/common/Backend.js +78 -3
- package/src/renderers/common/BindGroup.js +11 -0
- package/src/renderers/common/Binding.js +0 -11
- package/src/renderers/common/Bindings.js +116 -10
- package/src/renderers/common/Buffer.js +1 -1
- package/src/renderers/common/ClippingContext.js +12 -1
- package/src/renderers/common/ComputePipeline.js +17 -1
- package/src/renderers/common/DirectRenderPipeline.js +7 -3
- package/src/renderers/common/Geometries.js +170 -132
- package/src/renderers/common/Info.js +1 -1
- package/src/renderers/common/InspectorBase.js +5 -5
- package/src/renderers/common/Lighting.js +59 -0
- package/src/renderers/common/Pipelines.js +26 -12
- package/src/renderers/common/ProgrammableStage.js +1 -17
- package/src/renderers/common/RenderContext.js +21 -0
- package/src/renderers/common/RenderContexts.js +13 -4
- package/src/renderers/common/RenderObject.js +111 -35
- package/src/renderers/common/RenderObjects.js +37 -19
- package/src/renderers/common/Renderer.js +537 -295
- package/src/renderers/common/RendererUtils.js +15 -0
- package/src/renderers/common/StandardDrawingPipeline.js +343 -0
- package/src/renderers/common/Storage3DTexture.js +11 -0
- package/src/renderers/common/StorageArrayTexture.js +10 -0
- package/src/renderers/common/StorageTexture.js +0 -9
- package/src/renderers/common/Textures.js +144 -37
- package/src/renderers/common/UniformsGroup.js +19 -0
- package/src/renderers/common/XRManager.js +10 -91
- package/src/renderers/common/extras/PMREMGenerator.js +298 -576
- package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
- package/src/renderers/common/nodes/NodeLibrary.js +11 -35
- package/src/renderers/common/nodes/NodeManager.js +80 -31
- package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
- package/src/renderers/common/nodes/NodeSampler.js +14 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
- package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk.js +0 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
- package/src/renderers/shaders/ShaderLib.js +3 -0
- package/src/renderers/shaders/UniformsLib.js +4 -5
- package/src/renderers/webgl/WebGLBackground.js +3 -3
- package/src/renderers/webgl/WebGLBindingStates.js +4 -2
- package/src/renderers/webgl/WebGLCapabilities.js +7 -1
- package/src/renderers/webgl/WebGLEnvironments.js +2 -2
- package/src/renderers/webgl/WebGLGeometries.js +42 -14
- package/src/renderers/webgl/WebGLMaterials.js +15 -2
- package/src/renderers/webgl/WebGLOutput.js +37 -1
- package/src/renderers/webgl/WebGLProgram.js +13 -54
- package/src/renderers/webgl/WebGLPrograms.js +22 -8
- package/src/renderers/webgl/WebGLRenderStates.js +11 -8
- package/src/renderers/webgl/WebGLShadowMap.js +6 -4
- package/src/renderers/webgl/WebGLState.js +10 -6
- package/src/renderers/webgl/WebGLTextures.js +129 -77
- package/src/renderers/webgl/WebGLUniforms.js +44 -6
- package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
- package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
- package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
- package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
- package/src/renderers/webgpu/WebGPUBackend.js +140 -82
- package/src/renderers/webgpu/WebGPURenderer.js +1 -1
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
- package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
- package/src/renderers/webxr/WebXRController.js +3 -3
- package/src/renderers/webxr/WebXRManager.js +5 -90
- package/src/scenes/Scene.js +4 -4
- package/src/textures/CompressedTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -2
- package/src/textures/FramebufferTexture.js +11 -0
- package/src/textures/Texture.js +29 -1
- package/src/textures/TextureSource.js +1 -1
- package/src/upe.js +1 -1
- package/src/utils.js +4 -4
- package/examples/jsm/libs/surfaceNet.js +0 -201
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
|
@@ -329,6 +329,47 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
329
329
|
|
|
330
330
|
}
|
|
331
331
|
|
|
332
|
+
/**
|
|
333
|
+
* Returns the native snippet for a genuinely per-component vector select.
|
|
334
|
+
* GLSL has no vector ternary, so `float` types use `mix()`'s `bvecN`-selector
|
|
335
|
+
* overload; `int`/`uint`/`bool` types use an arithmetic select instead, since
|
|
336
|
+
* that overload doesn't exist for them.
|
|
337
|
+
*
|
|
338
|
+
* @param {string} condSnippet - The per-component boolean (`bvecN`) condition.
|
|
339
|
+
* @param {string} ifSnippet - The vector expression selected where `condSnippet` is `true`.
|
|
340
|
+
* @param {string} elseSnippet - The vector expression selected where `condSnippet` is `false`.
|
|
341
|
+
* @param {string} type - The (vector) type of `ifSnippet`/`elseSnippet`.
|
|
342
|
+
* @return {string} The resolved method name.
|
|
343
|
+
*/
|
|
344
|
+
getVectorSelect( condSnippet, ifSnippet, elseSnippet, type ) {
|
|
345
|
+
|
|
346
|
+
const componentType = this.getComponentType( type );
|
|
347
|
+
|
|
348
|
+
if ( componentType === 'float' ) {
|
|
349
|
+
|
|
350
|
+
return `mix( ${elseSnippet}, ${ifSnippet}, ${condSnippet} )`;
|
|
351
|
+
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
const glslType = this.getType( type );
|
|
355
|
+
|
|
356
|
+
if ( componentType === 'bool' ) {
|
|
357
|
+
|
|
358
|
+
const intType = this.getType( this.getTypeFromLength( this.getTypeLength( type ), 'int' ) );
|
|
359
|
+
const maskSnippet = `${intType}( ${condSnippet} )`;
|
|
360
|
+
const ifIntSnippet = `${intType}( ${ifSnippet} )`;
|
|
361
|
+
const elseIntSnippet = `${intType}( ${elseSnippet} )`;
|
|
362
|
+
|
|
363
|
+
return `${glslType}( ${elseIntSnippet} + ${maskSnippet} * ( ${ifIntSnippet} - ${elseIntSnippet} ) )`;
|
|
364
|
+
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
const maskSnippet = `${glslType}( ${condSnippet} )`;
|
|
368
|
+
|
|
369
|
+
return `${elseSnippet} + ${maskSnippet} * ( ${ifSnippet} - ${elseSnippet} )`;
|
|
370
|
+
|
|
371
|
+
}
|
|
372
|
+
|
|
332
373
|
/**
|
|
333
374
|
* Returns the output struct name. Not relevant for GLSL.
|
|
334
375
|
*
|
|
@@ -560,7 +601,10 @@ ${ flowData.code }
|
|
|
560
601
|
|
|
561
602
|
}
|
|
562
603
|
|
|
563
|
-
this.
|
|
604
|
+
const texelType = this.getTypeFromLength( itemSize, this.getComponentType( prefix ) );
|
|
605
|
+
const elementType = storageArrayElementNode.getNodeType( this );
|
|
606
|
+
|
|
607
|
+
this.addLineFlowCode( `${ propertyName } = ${ this.format( `${prefix}(${ snippet })${channel}`, texelType, elementType ) }`, storageArrayElementNode );
|
|
564
608
|
|
|
565
609
|
elementNodeData.propertyName = propertyName;
|
|
566
610
|
|
|
@@ -680,6 +724,18 @@ ${ flowData.code }
|
|
|
680
724
|
|
|
681
725
|
if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
|
|
682
726
|
|
|
727
|
+
if ( texture.isDepthTexture ) {
|
|
728
|
+
|
|
729
|
+
if ( offsetSnippet ) {
|
|
730
|
+
|
|
731
|
+
return `textureLodOffset( ${ textureProperty }, ${ uvSnippet }, ${ levelSnippet }, ${ offsetSnippet } ).x`;
|
|
732
|
+
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
return `textureLod( ${ textureProperty }, ${ uvSnippet }, ${ levelSnippet } ).x`;
|
|
736
|
+
|
|
737
|
+
}
|
|
738
|
+
|
|
683
739
|
if ( offsetSnippet ) {
|
|
684
740
|
|
|
685
741
|
return `textureLodOffset( ${ textureProperty }, ${ uvSnippet }, ${ levelSnippet }, ${ offsetSnippet } )`;
|
|
@@ -858,6 +914,41 @@ ${ flowData.code }
|
|
|
858
914
|
|
|
859
915
|
}
|
|
860
916
|
|
|
917
|
+
/**
|
|
918
|
+
* Returns the uniform block name of the given buffer uniform.
|
|
919
|
+
*
|
|
920
|
+
* @param {NodeUniform} uniform - The buffer uniform.
|
|
921
|
+
* @param {string} shaderStage - The shader stage.
|
|
922
|
+
* @return {string} The uniform block name.
|
|
923
|
+
*/
|
|
924
|
+
getUniformBufferName( uniform, shaderStage ) {
|
|
925
|
+
|
|
926
|
+
return this.getDataFromNode( uniform.node, shaderStage, this.globalCache ).uniformGPU.name;
|
|
927
|
+
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
/**
|
|
931
|
+
* Returns a bind group for the given group name and bindings. Uniform blocks are
|
|
932
|
+
* named after their position in the group since shared bind groups are created
|
|
933
|
+
* by one build but looked up by name in the programs of every build sharing them.
|
|
934
|
+
*
|
|
935
|
+
* @private
|
|
936
|
+
* @param {string} groupName - The group name.
|
|
937
|
+
* @param {Array<NodeUniformsGroup>} bindings - List of bindings.
|
|
938
|
+
* @return {BindGroup} The bind group
|
|
939
|
+
*/
|
|
940
|
+
_getBindGroup( groupName, bindings ) {
|
|
941
|
+
|
|
942
|
+
for ( let i = 0; i < bindings.length; i ++ ) {
|
|
943
|
+
|
|
944
|
+
if ( bindings[ i ].isNodeUniformBuffer === true ) bindings[ i ].name = 'NodeBuffer_' + groupName + '_' + i;
|
|
945
|
+
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
return super._getBindGroup( groupName, bindings );
|
|
949
|
+
|
|
950
|
+
}
|
|
951
|
+
|
|
861
952
|
/**
|
|
862
953
|
* Returns the uniforms of the given shader stage as a GLSL string.
|
|
863
954
|
*
|
|
@@ -935,7 +1026,7 @@ ${ flowData.code }
|
|
|
935
1026
|
const bufferCount = bufferNode.bufferCount;
|
|
936
1027
|
|
|
937
1028
|
const bufferCountSnippet = bufferCount > 0 ? bufferCount : '';
|
|
938
|
-
snippet = `${
|
|
1029
|
+
snippet = `${ this.getUniformBufferName( uniform, shaderStage ) } {\n\t${ bufferType } ${ uniform.name }[${ bufferCountSnippet }];\n};\n`;
|
|
939
1030
|
|
|
940
1031
|
} else {
|
|
941
1032
|
|
|
@@ -1137,6 +1228,34 @@ ${ flowData.code }
|
|
|
1137
1228
|
|
|
1138
1229
|
}
|
|
1139
1230
|
|
|
1231
|
+
/**
|
|
1232
|
+
* Returns a single const variable statement as a GLSL string for the given variable type and name.
|
|
1233
|
+
*
|
|
1234
|
+
* @param {string} type - The variable's type.
|
|
1235
|
+
* @param {string} name - The variable's name.
|
|
1236
|
+
* @param {?number} [count=null] - The array length.
|
|
1237
|
+
* @return {string} The GLSL snippet that defines a const variable.
|
|
1238
|
+
*/
|
|
1239
|
+
generateConstStatement( type, name, count = null ) {
|
|
1240
|
+
|
|
1241
|
+
return `const ${ this.getVar( type, name, count ) }`;
|
|
1242
|
+
|
|
1243
|
+
}
|
|
1244
|
+
|
|
1245
|
+
/**
|
|
1246
|
+
* Returns a single variable statement as a GLSL string for the given variable type and name.
|
|
1247
|
+
*
|
|
1248
|
+
* @param {string} type - The variable's type.
|
|
1249
|
+
* @param {string} name - The variable's name.
|
|
1250
|
+
* @param {?number} [count=null] - The array length.
|
|
1251
|
+
* @return {string} The GLSL snippet that defines a variable.
|
|
1252
|
+
*/
|
|
1253
|
+
generateVarStatement( type, name, count = null ) {
|
|
1254
|
+
|
|
1255
|
+
return this.getVar( type, name, count );
|
|
1256
|
+
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1140
1259
|
/**
|
|
1141
1260
|
* Returns the varyings of the given shader stage as a GLSL string.
|
|
1142
1261
|
*
|
|
@@ -1145,7 +1264,7 @@ ${ flowData.code }
|
|
|
1145
1264
|
*/
|
|
1146
1265
|
getVaryings( shaderStage ) {
|
|
1147
1266
|
|
|
1148
|
-
let snippet = '';
|
|
1267
|
+
let snippet = shaderStage === 'vertex' && this.context.invariant === true ? 'invariant gl_Position;\n' : '';
|
|
1149
1268
|
|
|
1150
1269
|
const varyings = this.varyings;
|
|
1151
1270
|
|
|
@@ -1287,6 +1406,36 @@ ${ flowData.code }
|
|
|
1287
1406
|
|
|
1288
1407
|
}
|
|
1289
1408
|
|
|
1409
|
+
/**
|
|
1410
|
+
* Enables subgroups.
|
|
1411
|
+
*/
|
|
1412
|
+
enableSubGroups() {
|
|
1413
|
+
|
|
1414
|
+
error( 'GLSLNodeBuilder: WebGLBackend does not support subgroup operations' );
|
|
1415
|
+
|
|
1416
|
+
}
|
|
1417
|
+
|
|
1418
|
+
/**
|
|
1419
|
+
* Enables 16 bit floats.
|
|
1420
|
+
*/
|
|
1421
|
+
enableShaderF16() {
|
|
1422
|
+
|
|
1423
|
+
error( 'GLSLNodeBuilder: WebGLBackend does not support 16 bit floats' );
|
|
1424
|
+
|
|
1425
|
+
}
|
|
1426
|
+
|
|
1427
|
+
/**
|
|
1428
|
+
* Enables dual source blending.
|
|
1429
|
+
*
|
|
1430
|
+
* WebGL 2 can express this through the `WEBGL_blend_func_extended` extension,
|
|
1431
|
+
* but WebGLBackend does not implement it.
|
|
1432
|
+
*/
|
|
1433
|
+
enableDualSourceBlending() {
|
|
1434
|
+
|
|
1435
|
+
error( 'GLSLNodeBuilder: WebGLBackend does not support dual source blending' );
|
|
1436
|
+
|
|
1437
|
+
}
|
|
1438
|
+
|
|
1290
1439
|
/**
|
|
1291
1440
|
* Returns the draw index builtin.
|
|
1292
1441
|
*
|
|
@@ -1760,7 +1909,7 @@ void main() {
|
|
|
1760
1909
|
*/
|
|
1761
1910
|
getUniformFromNode( node, type, shaderStage, name = null ) {
|
|
1762
1911
|
|
|
1763
|
-
const uniformNode = super.getUniformFromNode( node, type, shaderStage, name );
|
|
1912
|
+
const uniformNode = super.getUniformFromNode( node, type, shaderStage, type === 'buffer' ? null : name );
|
|
1764
1913
|
const nodeData = this.getDataFromNode( node, shaderStage, this.globalCache );
|
|
1765
1914
|
|
|
1766
1915
|
let uniformGPU = nodeData.uniformGPU;
|
|
@@ -1789,22 +1938,7 @@ void main() {
|
|
|
1789
1938
|
|
|
1790
1939
|
} else if ( type === 'buffer' ) {
|
|
1791
1940
|
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
const sharedData = this.getSharedDataFromNode( node );
|
|
1795
|
-
|
|
1796
|
-
let buffer = sharedData.buffer;
|
|
1797
|
-
|
|
1798
|
-
if ( buffer === undefined ) {
|
|
1799
|
-
|
|
1800
|
-
node.name = `NodeBuffer_${ node.id }`;
|
|
1801
|
-
|
|
1802
|
-
buffer = new NodeUniformBuffer( node, group );
|
|
1803
|
-
buffer.name = node.name;
|
|
1804
|
-
|
|
1805
|
-
sharedData.buffer = buffer;
|
|
1806
|
-
|
|
1807
|
-
}
|
|
1941
|
+
const buffer = new NodeUniformBuffer( node, group );
|
|
1808
1942
|
|
|
1809
1943
|
bindings.push( buffer );
|
|
1810
1944
|
|
|
@@ -23,14 +23,7 @@ class DualAttributeData {
|
|
|
23
23
|
this.version = attributeData.version;
|
|
24
24
|
this.isInteger = attributeData.isInteger;
|
|
25
25
|
this.activeBufferIndex = 0;
|
|
26
|
-
this.
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
get id() {
|
|
32
|
-
|
|
33
|
-
return `${ this.baseId }|${ this.activeBufferIndex }`;
|
|
26
|
+
this.id = attributeData.id;
|
|
34
27
|
|
|
35
28
|
}
|
|
36
29
|
|
|
@@ -88,23 +81,14 @@ class WebGLAttributeUtils {
|
|
|
88
81
|
const backend = this.backend;
|
|
89
82
|
const { gl } = backend;
|
|
90
83
|
|
|
91
|
-
const
|
|
92
|
-
const usage = attribute.usage || gl.STATIC_DRAW;
|
|
93
|
-
|
|
94
|
-
const bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute;
|
|
95
|
-
const bufferData = backend.get( bufferAttribute );
|
|
96
|
-
|
|
97
|
-
let bufferGPU = bufferData.bufferGPU;
|
|
98
|
-
|
|
99
|
-
if ( bufferGPU === undefined ) {
|
|
84
|
+
const bufferAttribute = backend.getBufferAttribute( attribute );
|
|
100
85
|
|
|
101
|
-
|
|
86
|
+
if ( backend.get( bufferAttribute ).bufferGPU !== undefined ) return;
|
|
102
87
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
bufferData.version = bufferAttribute.version;
|
|
88
|
+
const array = attribute.array;
|
|
89
|
+
const usage = attribute.usage || gl.STATIC_DRAW;
|
|
106
90
|
|
|
107
|
-
|
|
91
|
+
const bufferGPU = this._createBuffer( gl, bufferType, array, usage );
|
|
108
92
|
|
|
109
93
|
//attribute.onUploadCallback();
|
|
110
94
|
|
|
@@ -166,7 +150,7 @@ class WebGLAttributeUtils {
|
|
|
166
150
|
type,
|
|
167
151
|
byteLength: array.byteLength,
|
|
168
152
|
bytesPerElement: array.BYTES_PER_ELEMENT,
|
|
169
|
-
version:
|
|
153
|
+
version: bufferAttribute.version,
|
|
170
154
|
pbo: attribute.pbo,
|
|
171
155
|
isInteger: type === gl.INT || type === gl.UNSIGNED_INT || attribute.gpuType === IntType,
|
|
172
156
|
id: _id ++
|
|
@@ -180,7 +164,7 @@ class WebGLAttributeUtils {
|
|
|
180
164
|
|
|
181
165
|
}
|
|
182
166
|
|
|
183
|
-
backend.set(
|
|
167
|
+
backend.set( bufferAttribute, attributeData );
|
|
184
168
|
|
|
185
169
|
}
|
|
186
170
|
|
|
@@ -195,25 +179,29 @@ class WebGLAttributeUtils {
|
|
|
195
179
|
const { gl } = backend;
|
|
196
180
|
|
|
197
181
|
const array = attribute.array;
|
|
198
|
-
const bufferAttribute =
|
|
182
|
+
const bufferAttribute = backend.getBufferAttribute( attribute );
|
|
199
183
|
const bufferData = backend.get( bufferAttribute );
|
|
200
|
-
const
|
|
201
|
-
const updateRanges = attribute.isInterleavedBufferAttribute ? attribute.data.updateRanges : attribute.updateRanges;
|
|
184
|
+
const updateRanges = bufferAttribute.updateRanges;
|
|
202
185
|
|
|
203
|
-
|
|
186
|
+
// the element buffer binding is part of the VAO state, so index buffers are updated
|
|
187
|
+
// via the copy target to keep the bound VAO intact
|
|
188
|
+
|
|
189
|
+
const target = bufferData.bufferType === gl.ELEMENT_ARRAY_BUFFER ? gl.COPY_WRITE_BUFFER : bufferData.bufferType;
|
|
190
|
+
|
|
191
|
+
gl.bindBuffer( target, bufferData.bufferGPU );
|
|
204
192
|
|
|
205
193
|
if ( updateRanges.length === 0 ) {
|
|
206
194
|
|
|
207
195
|
// Not using update ranges
|
|
208
196
|
|
|
209
|
-
gl.bufferSubData(
|
|
197
|
+
gl.bufferSubData( target, 0, array );
|
|
210
198
|
|
|
211
199
|
} else {
|
|
212
200
|
|
|
213
201
|
for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
|
|
214
202
|
|
|
215
203
|
const range = updateRanges[ i ];
|
|
216
|
-
gl.bufferSubData(
|
|
204
|
+
gl.bufferSubData( target, range.start * array.BYTES_PER_ELEMENT,
|
|
217
205
|
array, range.start, range.count );
|
|
218
206
|
|
|
219
207
|
}
|
|
@@ -222,7 +210,7 @@ class WebGLAttributeUtils {
|
|
|
222
210
|
|
|
223
211
|
}
|
|
224
212
|
|
|
225
|
-
gl.bindBuffer(
|
|
213
|
+
gl.bindBuffer( target, null );
|
|
226
214
|
|
|
227
215
|
bufferData.version = bufferAttribute.version;
|
|
228
216
|
|
|
@@ -238,17 +226,25 @@ class WebGLAttributeUtils {
|
|
|
238
226
|
const backend = this.backend;
|
|
239
227
|
const { gl } = backend;
|
|
240
228
|
|
|
241
|
-
|
|
229
|
+
const bufferAttribute = backend.getBufferAttribute( attribute );
|
|
230
|
+
const attributeData = backend.get( bufferAttribute );
|
|
242
231
|
|
|
243
|
-
|
|
232
|
+
if ( attributeData.buffers !== undefined ) {
|
|
244
233
|
|
|
245
|
-
|
|
234
|
+
// storage attributes hold a second buffer for transform feedback
|
|
235
|
+
for ( const buffer of attributeData.buffers ) {
|
|
246
236
|
|
|
247
|
-
|
|
237
|
+
gl.deleteBuffer( buffer );
|
|
248
238
|
|
|
249
|
-
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
} else {
|
|
250
242
|
|
|
251
|
-
|
|
243
|
+
gl.deleteBuffer( attributeData.bufferGPU );
|
|
244
|
+
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
backend.delete( bufferAttribute );
|
|
252
248
|
|
|
253
249
|
}
|
|
254
250
|
|
|
@@ -259,10 +255,10 @@ class WebGLAttributeUtils {
|
|
|
259
255
|
* new allocation.
|
|
260
256
|
*
|
|
261
257
|
* @async
|
|
262
|
-
* @param {BufferAttribute} attribute - The storage buffer attribute to read
|
|
263
|
-
* @param {ReadbackBuffer|ArrayBuffer} target - The
|
|
264
|
-
* @param {number} offset - The
|
|
265
|
-
* @param {number} count - The
|
|
258
|
+
* @param {BufferAttribute} attribute - The storage buffer attribute to read from.
|
|
259
|
+
* @param {?(ReadbackBuffer|ArrayBuffer)} [target=null] - The readback buffer or array buffer that receives the data. If `null`, a new array buffer is returned.
|
|
260
|
+
* @param {number} [offset=0] - The byte offset to start reading from. Must be a multiple of 4.
|
|
261
|
+
* @param {number} [count=-1] - The number of bytes to read. Must be a multiple of 4, or `-1` to read to the end of the buffer.
|
|
266
262
|
* @return {Promise<ArrayBuffer|ReadbackBuffer>} A promise that resolves with the buffer data when the data are ready.
|
|
267
263
|
*/
|
|
268
264
|
async getArrayBufferAsync( attribute, target = null, offset = 0, count = - 1 ) {
|
|
@@ -270,7 +266,7 @@ class WebGLAttributeUtils {
|
|
|
270
266
|
const backend = this.backend;
|
|
271
267
|
const { gl } = backend;
|
|
272
268
|
|
|
273
|
-
const bufferAttribute =
|
|
269
|
+
const bufferAttribute = backend.getBufferAttribute( attribute );
|
|
274
270
|
const attributeInfo = backend.get( bufferAttribute );
|
|
275
271
|
const { bufferGPU } = attributeInfo;
|
|
276
272
|
|
|
@@ -346,6 +342,13 @@ class WebGLAttributeUtils {
|
|
|
346
342
|
|
|
347
343
|
const bufferGPU = gl.createBuffer();
|
|
348
344
|
|
|
345
|
+
// the element buffer binding is part of the VAO state, so the bound VAO must not be affected.
|
|
346
|
+
// the first binding defines the buffer type so the copy target can not be used here
|
|
347
|
+
|
|
348
|
+
const state = this.backend.state;
|
|
349
|
+
|
|
350
|
+
if ( bufferType === gl.ELEMENT_ARRAY_BUFFER && state.currentVAO !== null ) state.resetVertexState();
|
|
351
|
+
|
|
349
352
|
gl.bindBuffer( bufferType, bufferGPU );
|
|
350
353
|
gl.bufferData( bufferType, array, usage );
|
|
351
354
|
gl.bindBuffer( bufferType, null );
|
|
@@ -285,6 +285,13 @@ class WebGLState {
|
|
|
285
285
|
|
|
286
286
|
}
|
|
287
287
|
|
|
288
|
+
/**
|
|
289
|
+
* Defines the blending for each draw buffer of a MRT-configured render target.
|
|
290
|
+
*
|
|
291
|
+
* @param {Array<Texture>} textures - The textures of the render target.
|
|
292
|
+
* @param {?MRTNode} mrt - The MRT configuration.
|
|
293
|
+
* @param {Material} material - The material whose blending is used for outputs with `MaterialBlending`.
|
|
294
|
+
*/
|
|
288
295
|
setMRTBlending( textures, mrt, material ) {
|
|
289
296
|
|
|
290
297
|
const gl = this.gl;
|
|
@@ -339,6 +346,17 @@ class WebGLState {
|
|
|
339
346
|
|
|
340
347
|
}
|
|
341
348
|
|
|
349
|
+
// invalidate cache
|
|
350
|
+
|
|
351
|
+
this.currentBlending = null;
|
|
352
|
+
this.currentBlendEquation = null;
|
|
353
|
+
this.currentBlendEquationAlpha = null;
|
|
354
|
+
this.currentBlendSrc = null;
|
|
355
|
+
this.currentBlendDst = null;
|
|
356
|
+
this.currentBlendSrcAlpha = null;
|
|
357
|
+
this.currentBlendDstAlpha = null;
|
|
358
|
+
this.currentPremultipledAlpha = null;
|
|
359
|
+
|
|
342
360
|
}
|
|
343
361
|
|
|
344
362
|
/**
|
|
@@ -1004,11 +1022,18 @@ class WebGLState {
|
|
|
1004
1022
|
|
|
1005
1023
|
if ( this.currentPolygonOffsetFactor !== factor || this.currentPolygonOffsetUnits !== units ) {
|
|
1006
1024
|
|
|
1007
|
-
gl.polygonOffset( factor, units );
|
|
1008
|
-
|
|
1009
1025
|
this.currentPolygonOffsetFactor = factor;
|
|
1010
1026
|
this.currentPolygonOffsetUnits = units;
|
|
1011
1027
|
|
|
1028
|
+
if ( this.currentDepthReversed ) {
|
|
1029
|
+
|
|
1030
|
+
factor = - factor;
|
|
1031
|
+
units = - units;
|
|
1032
|
+
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1035
|
+
gl.polygonOffset( factor, units );
|
|
1036
|
+
|
|
1012
1037
|
}
|
|
1013
1038
|
|
|
1014
1039
|
} else {
|
|
@@ -1160,7 +1185,7 @@ class WebGLState {
|
|
|
1160
1185
|
|
|
1161
1186
|
if ( drawBuffers === undefined ) {
|
|
1162
1187
|
|
|
1163
|
-
drawBuffers = [];
|
|
1188
|
+
drawBuffers = [ gl.COLOR_ATTACHMENT0 ];
|
|
1164
1189
|
this.currentDrawbuffers.set( framebuffer, drawBuffers );
|
|
1165
1190
|
|
|
1166
1191
|
}
|
|
@@ -1168,7 +1193,7 @@ class WebGLState {
|
|
|
1168
1193
|
|
|
1169
1194
|
const textures = renderContext.textures;
|
|
1170
1195
|
|
|
1171
|
-
if ( drawBuffers.length !== textures.length
|
|
1196
|
+
if ( drawBuffers.length !== textures.length ) {
|
|
1172
1197
|
|
|
1173
1198
|
for ( let i = 0, il = textures.length; i < il; i ++ ) {
|
|
1174
1199
|
|