super-three 0.165.0 → 0.168.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/build/three.cjs +854 -410
- package/build/three.module.js +849 -411
- package/build/three.module.min.js +1 -1
- package/build/three.webgpu.js +77755 -0
- package/build/three.webgpu.min.js +6 -0
- package/examples/jsm/Addons.js +5 -2
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/controls/ArcballControls.js +174 -158
- package/examples/jsm/controls/DragControls.js +260 -132
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +777 -786
- package/examples/jsm/controls/PointerLockControls.js +24 -15
- package/examples/jsm/controls/TrackballControls.js +453 -452
- package/examples/jsm/csm/CSMShader.js +4 -4
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/environments/RoomEnvironment.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +13 -4
- package/examples/jsm/exporters/USDZExporter.js +29 -8
- package/examples/jsm/geometries/TeapotGeometry.js +1 -1
- package/examples/jsm/helpers/LightProbeHelper.js +42 -43
- package/examples/jsm/helpers/ViewHelper.js +51 -2
- package/examples/jsm/libs/tween.module.js +64 -75
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
- package/examples/jsm/lines/webgpu/Line2.js +20 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
- package/examples/jsm/loaders/FBXLoader.js +23 -45
- package/examples/jsm/loaders/GLTFLoader.js +10 -4
- package/examples/jsm/loaders/KTX2Loader.js +19 -7
- package/examples/jsm/loaders/MaterialXLoader.js +10 -10
- package/examples/jsm/loaders/PCDLoader.js +9 -9
- package/examples/jsm/loaders/USDZLoader.js +124 -76
- package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
- package/examples/jsm/loaders/VTKLoader.js +76 -3
- package/examples/jsm/misc/GPUComputationRenderer.js +9 -19
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
- package/examples/jsm/objects/InstancedPoints.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +188 -0
- package/examples/jsm/objects/Water2Mesh.js +159 -0
- package/examples/jsm/objects/WaterMesh.js +102 -0
- package/examples/jsm/physics/RapierPhysics.js +20 -0
- package/examples/jsm/postprocessing/OutlinePass.js +31 -46
- package/examples/jsm/postprocessing/RenderTransitionPass.js +13 -38
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +6 -9
- package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
- package/examples/jsm/shaders/BleachBypassShader.js +1 -2
- package/examples/jsm/shaders/ColorifyShader.js +1 -2
- package/examples/jsm/shaders/FXAAShader.js +0 -2
- package/examples/jsm/shaders/GTAOShader.js +1 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
- package/examples/jsm/shaders/OutputShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +46 -4
- package/examples/jsm/transpiler/TSLEncoder.js +24 -22
- package/examples/jsm/utils/TextureUtils.js +1 -1
- package/package.json +8 -6
- package/src/Three.WebGPU.js +200 -0
- package/src/Three.js +3 -0
- package/src/constants.js +4 -1
- package/src/core/Object3D.js +22 -22
- package/src/extras/Controls.js +32 -0
- package/src/extras/TextureUtils.js +210 -0
- package/src/lights/Light.js +1 -0
- package/src/lights/LightShadow.js +5 -0
- package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
- package/src/loaders/ObjectLoader.js +33 -2
- package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeLoader.js +6 -4
- package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeMaterialLoader.js +2 -2
- package/{examples/jsm/nodes/loaders → src/loaders/nodes}/NodeObjectLoader.js +2 -1
- package/src/materials/Material.js +7 -1
- package/{examples/jsm/nodes/materials → src/materials/nodes}/InstancedPointsNodeMaterial.js +36 -27
- package/{examples/jsm/nodes/materials → src/materials/nodes}/Line2NodeMaterial.js +37 -40
- package/src/materials/nodes/LineBasicNodeMaterial.js +27 -0
- package/{examples/jsm/nodes/materials → src/materials/nodes}/LineDashedNodeMaterial.js +10 -11
- package/src/materials/nodes/MeshBasicNodeMaterial.js +73 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +43 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +53 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +40 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +74 -0
- package/{examples/jsm/nodes/materials → src/materials/nodes}/MeshPhysicalNodeMaterial.js +22 -20
- package/{examples/jsm/nodes/materials → src/materials/nodes}/MeshSSSNodeMaterial.js +6 -6
- package/{examples/jsm/nodes/materials → src/materials/nodes}/MeshStandardNodeMaterial.js +28 -11
- package/src/materials/nodes/MeshToonNodeMaterial.js +34 -0
- package/{examples/jsm/nodes/materials → src/materials/nodes}/NodeMaterial.js +142 -96
- package/{examples/jsm/nodes/materials/Materials.js → src/materials/nodes/NodeMaterials.js} +1 -1
- package/{examples/jsm/nodes/materials → src/materials/nodes}/PointsNodeMaterial.js +5 -6
- package/src/materials/nodes/ShadowNodeMaterial.js +34 -0
- package/{examples/jsm/nodes/materials → src/materials/nodes}/SpriteNodeMaterial.js +13 -13
- package/{examples/jsm/nodes/materials → src/materials/nodes}/VolumeNodeMaterial.js +14 -16
- package/src/math/Box2.js +4 -4
- package/src/math/Box3.js +6 -6
- package/src/math/ColorManagement.js +10 -0
- package/src/math/Matrix2.js +54 -0
- package/src/math/Vector4.js +13 -0
- package/src/nodes/Nodes.js +164 -0
- package/src/nodes/TSL.js +176 -0
- package/{examples/jsm → src}/nodes/accessors/AccessorsUtils.js +8 -8
- package/src/nodes/accessors/BatchNode.js +124 -0
- package/{examples/jsm/nodes/accessors/BitangentNode.js → src/nodes/accessors/Bitangent.js} +9 -9
- package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +41 -6
- package/{examples/jsm → src}/nodes/accessors/BufferNode.js +4 -4
- package/src/nodes/accessors/Camera.js +19 -0
- package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +16 -14
- package/src/nodes/accessors/CubeTextureNode.js +76 -0
- package/src/nodes/accessors/InstanceNode.js +144 -0
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
- package/{examples/jsm → src}/nodes/accessors/MaterialNode.js +66 -49
- package/src/nodes/accessors/MaterialProperties.js +3 -0
- package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +6 -4
- package/src/nodes/accessors/ModelNode.js +37 -0
- package/{examples/jsm → src}/nodes/accessors/ModelViewProjectionNode.js +6 -7
- package/{examples/jsm → src}/nodes/accessors/MorphNode.js +35 -31
- package/src/nodes/accessors/Normal.js +62 -0
- package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +11 -11
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +10 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +143 -0
- package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +14 -8
- package/src/nodes/accessors/ReflectVector.js +10 -0
- package/{examples/jsm → src}/nodes/accessors/RendererReferenceNode.js +6 -6
- package/{examples/jsm → src}/nodes/accessors/SceneNode.js +5 -6
- package/src/nodes/accessors/SkinningNode.js +187 -0
- package/{examples/jsm → src}/nodes/accessors/StorageBufferNode.js +54 -6
- package/{examples/jsm → src}/nodes/accessors/StorageTextureNode.js +16 -7
- package/src/nodes/accessors/Tangent.js +22 -0
- package/{examples/jsm → src}/nodes/accessors/Texture3DNode.js +11 -11
- package/{examples/jsm/nodes/accessors/TextureBicubicNode.js → src/nodes/accessors/TextureBicubic.js} +3 -32
- package/{examples/jsm → src}/nodes/accessors/TextureNode.js +69 -37
- package/{examples/jsm → src}/nodes/accessors/TextureSizeNode.js +4 -6
- package/{examples/jsm/nodes/accessors/UniformsNode.js → src/nodes/accessors/UniformArrayNode.js} +24 -9
- package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +4 -4
- package/src/nodes/accessors/VelocityNode.js +83 -0
- package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +6 -5
- package/{examples/jsm → src}/nodes/code/CodeNode.js +5 -5
- package/{examples/jsm → src}/nodes/code/ExpressionNode.js +4 -4
- package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +5 -5
- package/{examples/jsm → src}/nodes/code/FunctionNode.js +5 -23
- package/{examples/jsm → src}/nodes/code/ScriptableNode.js +18 -6
- package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +6 -7
- package/{examples/jsm → src}/nodes/core/AssignNode.js +5 -5
- package/{examples/jsm → src}/nodes/core/AttributeNode.js +22 -21
- package/{examples/jsm → src}/nodes/core/BypassNode.js +5 -5
- package/src/nodes/core/CacheNode.js +46 -0
- package/{examples/jsm → src}/nodes/core/ConstNode.js +2 -2
- package/{examples/jsm → src}/nodes/core/ContextNode.js +17 -11
- package/{examples/jsm → src}/nodes/core/IndexNode.js +17 -6
- package/{examples/jsm → src}/nodes/core/InputNode.js +2 -2
- package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
- package/src/nodes/core/MRTNode.js +82 -0
- package/{examples/jsm → src}/nodes/core/Node.js +57 -31
- package/{examples/jsm → src}/nodes/core/NodeBuilder.js +216 -65
- package/src/nodes/core/NodeCache.js +36 -0
- package/{examples/jsm → src}/nodes/core/NodeFrame.js +42 -0
- package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
- package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
- package/{examples/jsm → src}/nodes/core/NodeUtils.js +7 -1
- package/{examples/jsm → src}/nodes/core/OutputStructNode.js +4 -4
- package/{examples/jsm → src}/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +84 -0
- package/{examples/jsm → src}/nodes/core/StackNode.js +26 -10
- package/{examples/jsm → src}/nodes/core/StructTypeNode.js +2 -2
- package/{examples/jsm → src}/nodes/core/TempNode.js +4 -4
- package/src/nodes/core/UniformGroupNode.js +55 -0
- package/{examples/jsm → src}/nodes/core/UniformNode.js +14 -5
- package/{examples/jsm → src}/nodes/core/VarNode.js +8 -12
- package/{examples/jsm → src}/nodes/core/VaryingNode.js +13 -5
- package/{examples/jsm → src}/nodes/display/AfterImageNode.js +27 -35
- package/src/nodes/display/AnaglyphPassNode.js +61 -0
- package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +27 -30
- package/src/nodes/display/BleachBypass.js +26 -0
- package/src/nodes/display/BlendMode.js +54 -0
- package/src/nodes/display/BloomNode.js +335 -0
- package/{examples/jsm → src}/nodes/display/BumpMapNode.js +7 -12
- package/src/nodes/display/ColorAdjustment.js +46 -0
- package/src/nodes/display/ColorSpaceFunctions.js +38 -0
- package/src/nodes/display/ColorSpaceNode.js +85 -0
- package/src/nodes/display/DenoiseNode.js +201 -0
- package/src/nodes/display/DepthOfFieldNode.js +121 -0
- package/src/nodes/display/DotScreenNode.js +63 -0
- package/src/nodes/display/FXAANode.js +329 -0
- package/src/nodes/display/FilmNode.js +53 -0
- package/src/nodes/display/FrontFacingNode.js +41 -0
- package/src/nodes/display/GTAONode.js +328 -0
- package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +44 -24
- package/src/nodes/display/Lut3DNode.js +54 -0
- package/src/nodes/display/MotionBlur.js +25 -0
- package/{examples/jsm → src}/nodes/display/NormalMapNode.js +9 -11
- package/src/nodes/display/ParallaxBarrierPassNode.js +55 -0
- package/src/nodes/display/PassNode.js +367 -0
- package/src/nodes/display/PixelationPassNode.js +206 -0
- package/{examples/jsm → src}/nodes/display/PosterizeNode.js +4 -6
- package/src/nodes/display/RGBShiftNode.js +50 -0
- package/src/nodes/display/RenderOutputNode.js +56 -0
- package/src/nodes/display/SSAAPassNode.js +284 -0
- package/src/nodes/display/Sepia.js +17 -0
- package/src/nodes/display/SobelOperatorNode.js +123 -0
- package/src/nodes/display/StereoCompositePassNode.js +107 -0
- package/src/nodes/display/StereoPassNode.js +80 -0
- package/src/nodes/display/ToneMappingFunctions.js +190 -0
- package/src/nodes/display/ToneMappingNode.js +66 -0
- package/src/nodes/display/TransitionNode.js +77 -0
- package/src/nodes/display/ViewportDepthNode.js +121 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +30 -0
- package/{examples/jsm → src}/nodes/display/ViewportNode.js +28 -26
- package/src/nodes/display/ViewportSharedTextureNode.js +36 -0
- package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +12 -12
- package/{examples/jsm → src}/nodes/fog/FogExp2Node.js +4 -6
- package/{examples/jsm → src}/nodes/fog/FogNode.js +5 -7
- package/{examples/jsm → src}/nodes/fog/FogRangeNode.js +4 -6
- package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +2 -2
- package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +131 -0
- package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +78 -0
- package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +10 -8
- package/{examples/jsm → src}/nodes/functions/PhysicalLightingModel.js +73 -31
- package/{examples/jsm → src}/nodes/functions/ShadowMaskModel.js +1 -1
- package/{examples/jsm → src}/nodes/functions/ToonLightingModel.js +6 -4
- package/src/nodes/functions/material/getGeometryRoughness.js +13 -0
- package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +2 -2
- package/{examples/jsm → src}/nodes/geometry/RangeNode.js +23 -10
- package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +5 -5
- package/src/nodes/lighting/AONode.js +24 -0
- package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +2 -7
- package/src/nodes/lighting/AnalyticLightNode.js +354 -0
- package/src/nodes/lighting/BasicEnvironmentNode.js +27 -0
- package/src/nodes/lighting/BasicLightMapNode.js +29 -0
- package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +3 -9
- package/{examples/jsm → src}/nodes/lighting/EnvironmentNode.js +23 -21
- package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +4 -7
- package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +3 -8
- package/{examples/jsm → src}/nodes/lighting/IrradianceNode.js +2 -2
- package/{examples/jsm → src}/nodes/lighting/LightNode.js +5 -5
- package/src/nodes/lighting/LightProbeNode.js +76 -0
- package/{examples/jsm → src}/nodes/lighting/LightUtils.js +3 -3
- package/src/nodes/lighting/LightingContextNode.js +64 -0
- package/{examples/jsm → src}/nodes/lighting/LightingNode.js +4 -2
- package/src/nodes/lighting/LightsNode.js +231 -0
- package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +4 -10
- package/src/nodes/lighting/RectAreaLightNode.js +93 -0
- package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +4 -10
- package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +2 -2
- package/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +43 -46
- package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +500 -603
- package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +3 -9
- package/{examples/jsm/nodes/math/CondNode.js → src/nodes/math/ConditionalNode.js} +31 -13
- package/src/nodes/math/Hash.js +13 -0
- package/src/nodes/math/MathNode.js +404 -0
- package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -7
- package/{examples/jsm → src}/nodes/math/OperatorNode.js +100 -58
- package/{examples/jsm → src}/nodes/math/TriNoise3D.js +19 -29
- package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
- package/{examples/jsm → src}/nodes/pmrem/PMREMNode.js +60 -16
- package/{examples/jsm → src}/nodes/pmrem/PMREMUtils.js +46 -46
- package/src/nodes/procedural/Checker.js +14 -0
- package/src/nodes/tsl/TSLBase.js +30 -0
- package/{examples/jsm/nodes/shadernode/ShaderNode.js → src/nodes/tsl/TSLCore.js} +106 -96
- package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +2 -2
- package/{examples/jsm → src}/nodes/utils/ConvertNode.js +2 -2
- package/src/nodes/utils/CubeMapNode.js +157 -0
- package/src/nodes/utils/Discard.js +8 -0
- package/{examples/jsm → src}/nodes/utils/EquirectUVNode.js +5 -5
- package/src/nodes/utils/FlipNode.js +65 -0
- package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +7 -5
- package/{examples/jsm → src}/nodes/utils/JoinNode.js +2 -2
- package/{examples/jsm → src}/nodes/utils/LoopNode.js +19 -12
- package/{examples/jsm → src}/nodes/utils/MatcapUVNode.js +6 -6
- package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +12 -6
- package/{examples/jsm → src}/nodes/utils/OscNode.js +7 -7
- package/src/nodes/utils/Packing.js +4 -0
- package/src/nodes/utils/RTTNode.js +130 -0
- package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +17 -4
- package/{examples/jsm → src}/nodes/utils/RemapNode.js +7 -7
- package/{examples/jsm → src}/nodes/utils/RotateNode.js +4 -12
- package/{examples/jsm → src}/nodes/utils/SetNode.js +2 -2
- package/{examples/jsm → src}/nodes/utils/SplitNode.js +2 -2
- package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +5 -5
- package/src/nodes/utils/SpriteUtils.js +47 -0
- package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +4 -6
- package/{examples/jsm → src}/nodes/utils/TimerNode.js +5 -5
- package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +7 -9
- package/src/nodes/utils/UVUtils.js +19 -0
- package/src/nodes/utils/ViewportUtils.js +14 -0
- package/src/objects/BatchedMesh.js +169 -190
- package/src/objects/InstancedMesh.js +1 -1
- package/src/renderers/WebGLRenderer.js +60 -23
- package/{examples/jsm → src}/renderers/common/Attributes.js +2 -1
- package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
- package/{examples/jsm → src}/renderers/common/Background.js +12 -4
- package/src/renderers/common/BindGroup.js +18 -0
- package/{examples/jsm → src}/renderers/common/Bindings.js +45 -32
- package/{examples/jsm → src}/renderers/common/ClippingContext.js +18 -7
- package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
- package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +16 -4
- package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
- package/{examples/jsm → src}/renderers/common/Info.js +34 -6
- package/src/renderers/common/PostProcessing.js +90 -0
- package/{examples/jsm/objects → src/renderers/common}/QuadMesh.js +8 -3
- package/{examples/jsm → src}/renderers/common/RenderContext.js +25 -1
- package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
- package/{examples/jsm → src}/renderers/common/RenderList.js +1 -1
- package/{examples/jsm → src}/renderers/common/RenderObject.js +45 -12
- package/{examples/jsm → src}/renderers/common/Renderer.js +151 -73
- package/{examples/jsm → src}/renderers/common/SampledTexture.js +14 -5
- package/src/renderers/common/StandardRenderer.js +18 -0
- package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
- package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
- package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
- package/{examples/jsm → src}/renderers/common/Textures.js +14 -14
- package/{examples/jsm → src}/renderers/common/Uniform.js +9 -4
- package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
- package/{examples/jsm → src}/renderers/common/extras/PMREMGenerator.js +25 -25
- package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
- package/src/renderers/common/nodes/NodeLibrary.js +118 -0
- package/{examples/jsm → src}/renderers/common/nodes/NodeSampledTexture.js +8 -7
- package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +2 -1
- package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
- package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
- package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
- package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
- package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +69 -21
- package/src/renderers/common/nodes/StandardNodeLibrary.js +105 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +16 -1
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -4
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
- package/src/renderers/shaders/UniformsLib.js +3 -0
- package/src/renderers/webgl/WebGLAttributes.js +2 -2
- package/src/renderers/webgl/WebGLBufferRenderer.js +6 -19
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +6 -18
- package/src/renderers/webgl/WebGLLights.js +6 -0
- package/src/renderers/webgl/WebGLProgram.js +27 -1
- package/src/renderers/webgl/WebGLPrograms.js +1 -1
- package/src/renderers/webgl/WebGLProperties.js +7 -0
- package/src/renderers/webgl/WebGLTextures.js +75 -57
- package/src/renderers/webgl/WebGLUniforms.js +12 -2
- package/src/renderers/webgl/WebGLUniformsGroups.js +7 -7
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +242 -120
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +227 -44
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +2 -2
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +1 -0
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +22 -1
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +62 -23
- package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +1 -1
- package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +242 -136
- package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +9 -9
- package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +281 -107
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +64 -33
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +4 -1
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +34 -36
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +76 -44
- package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +42 -4
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -0
- package/src/renderers/webxr/WebXRManager.js +37 -24
- package/src/textures/CompressedArrayTexture.js +1 -1
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/nodes/Nodes.js +0 -202
- package/examples/jsm/nodes/accessors/BatchNode.js +0 -78
- package/examples/jsm/nodes/accessors/CameraNode.js +0 -12
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +0 -61
- package/examples/jsm/nodes/accessors/InstanceNode.js +0 -94
- package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/examples/jsm/nodes/accessors/ModelNode.js +0 -36
- package/examples/jsm/nodes/accessors/NormalNode.js +0 -14
- package/examples/jsm/nodes/accessors/PointUVNode.js +0 -26
- package/examples/jsm/nodes/accessors/PositionNode.js +0 -10
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -6
- package/examples/jsm/nodes/accessors/SkinningNode.js +0 -124
- package/examples/jsm/nodes/accessors/TangentNode.js +0 -23
- package/examples/jsm/nodes/core/CacheNode.js +0 -49
- package/examples/jsm/nodes/core/NodeCache.js +0 -26
- package/examples/jsm/nodes/core/NodeKeywords.js +0 -80
- package/examples/jsm/nodes/core/PropertyNode.js +0 -83
- package/examples/jsm/nodes/core/UniformGroupNode.js +0 -36
- package/examples/jsm/nodes/display/BlendModeNode.js +0 -128
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +0 -99
- package/examples/jsm/nodes/display/ColorSpaceNode.js +0 -108
- package/examples/jsm/nodes/display/FrontFacingNode.js +0 -40
- package/examples/jsm/nodes/display/PassNode.js +0 -201
- package/examples/jsm/nodes/display/ToneMappingNode.js +0 -188
- package/examples/jsm/nodes/display/ViewportDepthNode.js +0 -97
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +0 -31
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +0 -37
- package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +0 -13
- package/examples/jsm/nodes/lighting/AONode.js +0 -27
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -256
- package/examples/jsm/nodes/lighting/LightingContextNode.js +0 -66
- package/examples/jsm/nodes/lighting/LightsNode.js +0 -215
- package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
- package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +0 -34
- package/examples/jsm/nodes/materials/MeshMatcapNodeMaterial.js +0 -52
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -38
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -65
- package/examples/jsm/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/examples/jsm/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/examples/jsm/nodes/math/HashNode.js +0 -34
- package/examples/jsm/nodes/math/MathNode.js +0 -391
- package/examples/jsm/nodes/procedural/CheckerNode.js +0 -42
- package/examples/jsm/nodes/utils/DiscardNode.js +0 -27
- package/examples/jsm/nodes/utils/PackingNode.js +0 -55
- package/examples/jsm/nodes/utils/RotateUVNode.js +0 -35
- package/examples/jsm/renderers/common/PostProcessing.js +0 -33
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
- /package/{examples/jsm/nodes/accessors/UVNode.js → src/nodes/accessors/UV.js} +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
- /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
- /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
- /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
- /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
- /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Animation.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
- /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
- /package/{examples/jsm → src}/renderers/common/ChainMap.js +0 -0
- /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
- /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Pipelines.js +0 -0
- /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderBundle.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderBundles.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderObjects.js +0 -0
- /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
- /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
- /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
- /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
- /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBufferRenderer.js +0 -0
- /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
- /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { WebGLCoordinateSystem } from 'three';
|
|
2
|
-
|
|
3
1
|
import GLSLNodeBuilder from './nodes/GLSLNodeBuilder.js';
|
|
4
2
|
import Backend from '../common/Backend.js';
|
|
3
|
+
import { getCacheKey } from '../common/RenderContext.js';
|
|
5
4
|
|
|
6
5
|
import WebGLAttributeUtils from './utils/WebGLAttributeUtils.js';
|
|
7
6
|
import WebGLState from './utils/WebGLState.js';
|
|
@@ -12,6 +11,9 @@ import WebGLCapabilities from './utils/WebGLCapabilities.js';
|
|
|
12
11
|
import { GLFeatureName } from './utils/WebGLConstants.js';
|
|
13
12
|
import { WebGLBufferRenderer } from './WebGLBufferRenderer.js';
|
|
14
13
|
|
|
14
|
+
import { warnOnce } from '../../utils.js';
|
|
15
|
+
import { WebGLCoordinateSystem } from '../../constants.js';
|
|
16
|
+
|
|
15
17
|
//
|
|
16
18
|
|
|
17
19
|
class WebGLBackend extends Backend {
|
|
@@ -51,6 +53,13 @@ class WebGLBackend extends Backend {
|
|
|
51
53
|
this.trackTimestamp = ( parameters.trackTimestamp === true );
|
|
52
54
|
|
|
53
55
|
this.extensions.get( 'EXT_color_buffer_float' );
|
|
56
|
+
this.extensions.get( 'WEBGL_clip_cull_distance' );
|
|
57
|
+
this.extensions.get( 'OES_texture_float_linear' );
|
|
58
|
+
this.extensions.get( 'EXT_color_buffer_half_float' );
|
|
59
|
+
this.extensions.get( 'WEBGL_multisampled_render_to_texture' );
|
|
60
|
+
this.extensions.get( 'WEBGL_render_shared_exponent' );
|
|
61
|
+
this.extensions.get( 'WEBGL_multi_draw' );
|
|
62
|
+
|
|
54
63
|
this.disjoint = this.extensions.get( 'EXT_disjoint_timer_query_webgl2' );
|
|
55
64
|
this.parallel = this.extensions.get( 'KHR_parallel_shader_compile' );
|
|
56
65
|
this._currentContext = null;
|
|
@@ -104,7 +113,7 @@ class WebGLBackend extends Backend {
|
|
|
104
113
|
|
|
105
114
|
// timestamp utils
|
|
106
115
|
|
|
107
|
-
|
|
116
|
+
prepareTimestampBuffer( renderContext ) {
|
|
108
117
|
|
|
109
118
|
if ( ! this.disjoint || ! this.trackTimestamp ) return;
|
|
110
119
|
|
|
@@ -198,7 +207,7 @@ class WebGLBackend extends Backend {
|
|
|
198
207
|
|
|
199
208
|
const { x, y, width, height } = renderContext.scissorValue;
|
|
200
209
|
|
|
201
|
-
gl.scissor( x, y, width, height );
|
|
210
|
+
gl.scissor( x, renderContext.height - height - y, width, height );
|
|
202
211
|
|
|
203
212
|
}
|
|
204
213
|
|
|
@@ -226,6 +235,20 @@ class WebGLBackend extends Backend {
|
|
|
226
235
|
const renderContextData = this.get( renderContext );
|
|
227
236
|
const previousContext = renderContextData.previousContext;
|
|
228
237
|
|
|
238
|
+
const occlusionQueryCount = renderContext.occlusionQueryCount;
|
|
239
|
+
|
|
240
|
+
if ( occlusionQueryCount > 0 ) {
|
|
241
|
+
|
|
242
|
+
if ( occlusionQueryCount > renderContextData.occlusionQueryIndex ) {
|
|
243
|
+
|
|
244
|
+
gl.endQuery( gl.ANY_SAMPLES_PASSED );
|
|
245
|
+
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
this.resolveOccludedAsync( renderContext );
|
|
249
|
+
|
|
250
|
+
}
|
|
251
|
+
|
|
229
252
|
const textures = renderContext.textures;
|
|
230
253
|
|
|
231
254
|
if ( textures !== null ) {
|
|
@@ -246,18 +269,18 @@ class WebGLBackend extends Backend {
|
|
|
246
269
|
|
|
247
270
|
this._currentContext = previousContext;
|
|
248
271
|
|
|
249
|
-
|
|
250
272
|
if ( renderContext.textures !== null && renderContext.renderTarget ) {
|
|
251
273
|
|
|
252
274
|
const renderTargetContextData = this.get( renderContext.renderTarget );
|
|
253
275
|
|
|
254
276
|
const { samples } = renderContext.renderTarget;
|
|
255
|
-
const fb = renderTargetContextData.framebuffer;
|
|
256
|
-
|
|
257
|
-
const mask = gl.COLOR_BUFFER_BIT;
|
|
258
277
|
|
|
259
278
|
if ( samples > 0 ) {
|
|
260
279
|
|
|
280
|
+
const fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ];
|
|
281
|
+
|
|
282
|
+
const mask = gl.COLOR_BUFFER_BIT;
|
|
283
|
+
|
|
261
284
|
const msaaFrameBuffer = renderTargetContextData.msaaFrameBuffer;
|
|
262
285
|
|
|
263
286
|
const textures = renderContext.textures;
|
|
@@ -269,9 +292,21 @@ class WebGLBackend extends Backend {
|
|
|
269
292
|
|
|
270
293
|
// TODO Add support for MRT
|
|
271
294
|
|
|
272
|
-
|
|
295
|
+
if ( renderContext.scissor ) {
|
|
296
|
+
|
|
297
|
+
const { x, y, width, height } = renderContext.scissorValue;
|
|
298
|
+
|
|
299
|
+
const viewY = renderContext.height - height - y;
|
|
300
|
+
|
|
301
|
+
gl.blitFramebuffer( x, viewY, x + width, viewY + height, x, viewY, x + width, viewY + height, mask, gl.NEAREST );
|
|
302
|
+
gl.invalidateSubFramebuffer( gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray, x, viewY, width, height );
|
|
303
|
+
|
|
304
|
+
} else {
|
|
273
305
|
|
|
274
|
-
|
|
306
|
+
gl.blitFramebuffer( 0, 0, renderContext.width, renderContext.height, 0, 0, renderContext.width, renderContext.height, mask, gl.NEAREST );
|
|
307
|
+
gl.invalidateFramebuffer( gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray );
|
|
308
|
+
|
|
309
|
+
}
|
|
275
310
|
|
|
276
311
|
}
|
|
277
312
|
|
|
@@ -290,32 +325,12 @@ class WebGLBackend extends Backend {
|
|
|
290
325
|
|
|
291
326
|
} else {
|
|
292
327
|
|
|
293
|
-
const gl = this.gl;
|
|
294
|
-
|
|
295
328
|
gl.viewport( 0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight );
|
|
296
329
|
|
|
297
330
|
}
|
|
298
331
|
|
|
299
332
|
}
|
|
300
333
|
|
|
301
|
-
const occlusionQueryCount = renderContext.occlusionQueryCount;
|
|
302
|
-
|
|
303
|
-
if ( occlusionQueryCount > 0 ) {
|
|
304
|
-
|
|
305
|
-
const renderContextData = this.get( renderContext );
|
|
306
|
-
|
|
307
|
-
if ( occlusionQueryCount > renderContextData.occlusionQueryIndex ) {
|
|
308
|
-
|
|
309
|
-
const { gl } = this;
|
|
310
|
-
|
|
311
|
-
gl.endQuery( gl.ANY_SAMPLES_PASSED );
|
|
312
|
-
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
this.resolveOccludedAsync( renderContext );
|
|
316
|
-
|
|
317
|
-
}
|
|
318
|
-
|
|
319
334
|
this.prepareTimestampBuffer( renderContext );
|
|
320
335
|
|
|
321
336
|
}
|
|
@@ -391,7 +406,7 @@ class WebGLBackend extends Backend {
|
|
|
391
406
|
const gl = this.gl;
|
|
392
407
|
const { x, y, width, height } = renderContext.viewportValue;
|
|
393
408
|
|
|
394
|
-
gl.viewport( x, y, width, height );
|
|
409
|
+
gl.viewport( x, renderContext.height - height - y, width, height );
|
|
395
410
|
|
|
396
411
|
}
|
|
397
412
|
|
|
@@ -436,6 +451,12 @@ class WebGLBackend extends Backend {
|
|
|
436
451
|
|
|
437
452
|
const clearColor = descriptor.clearColorValue || this.getClearColor();
|
|
438
453
|
|
|
454
|
+
// premultiply alpha
|
|
455
|
+
|
|
456
|
+
clearColor.r *= clearColor.a;
|
|
457
|
+
clearColor.g *= clearColor.a;
|
|
458
|
+
clearColor.b *= clearColor.a;
|
|
459
|
+
|
|
439
460
|
if ( depth ) this.state.setDepthMask( true );
|
|
440
461
|
|
|
441
462
|
if ( descriptor.textures === null ) {
|
|
@@ -479,16 +500,16 @@ class WebGLBackend extends Backend {
|
|
|
479
500
|
|
|
480
501
|
beginCompute( computeGroup ) {
|
|
481
502
|
|
|
482
|
-
const gl = this
|
|
503
|
+
const { state, gl } = this;
|
|
483
504
|
|
|
484
|
-
|
|
505
|
+
state.bindFramebuffer( gl.FRAMEBUFFER, null );
|
|
485
506
|
this.initTimestampQuery( computeGroup );
|
|
486
507
|
|
|
487
508
|
}
|
|
488
509
|
|
|
489
510
|
compute( computeGroup, computeNode, bindings, pipeline ) {
|
|
490
511
|
|
|
491
|
-
const gl = this
|
|
512
|
+
const { state, gl } = this;
|
|
492
513
|
|
|
493
514
|
if ( ! this.discard ) {
|
|
494
515
|
|
|
@@ -514,7 +535,7 @@ class WebGLBackend extends Backend {
|
|
|
514
535
|
|
|
515
536
|
}
|
|
516
537
|
|
|
517
|
-
|
|
538
|
+
state.useProgram( programGPU );
|
|
518
539
|
|
|
519
540
|
this._bindUniforms( bindings );
|
|
520
541
|
|
|
@@ -567,7 +588,7 @@ class WebGLBackend extends Backend {
|
|
|
567
588
|
|
|
568
589
|
}
|
|
569
590
|
|
|
570
|
-
draw( renderObject
|
|
591
|
+
draw( renderObject/*, info*/ ) {
|
|
571
592
|
|
|
572
593
|
const { object, pipeline, material, context } = renderObject;
|
|
573
594
|
const { programGPU } = this.get( pipeline );
|
|
@@ -584,7 +605,7 @@ class WebGLBackend extends Backend {
|
|
|
584
605
|
|
|
585
606
|
state.setMaterial( material, frontFaceCW );
|
|
586
607
|
|
|
587
|
-
|
|
608
|
+
state.useProgram( programGPU );
|
|
588
609
|
|
|
589
610
|
//
|
|
590
611
|
|
|
@@ -705,6 +726,10 @@ class WebGLBackend extends Backend {
|
|
|
705
726
|
|
|
706
727
|
renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
|
|
707
728
|
|
|
729
|
+
} else if ( ! this.hasFeature( 'WEBGL_multi_draw' ) ) {
|
|
730
|
+
|
|
731
|
+
warnOnce( 'THREE.WebGLRenderer: WEBGL_multi_draw not supported.' );
|
|
732
|
+
|
|
708
733
|
} else {
|
|
709
734
|
|
|
710
735
|
renderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );
|
|
@@ -732,9 +757,9 @@ class WebGLBackend extends Backend {
|
|
|
732
757
|
|
|
733
758
|
}
|
|
734
759
|
|
|
735
|
-
getRenderCacheKey( renderObject ) {
|
|
760
|
+
getRenderCacheKey( /*renderObject*/ ) {
|
|
736
761
|
|
|
737
|
-
return
|
|
762
|
+
return '';
|
|
738
763
|
|
|
739
764
|
}
|
|
740
765
|
|
|
@@ -787,9 +812,9 @@ class WebGLBackend extends Backend {
|
|
|
787
812
|
|
|
788
813
|
// node builder
|
|
789
814
|
|
|
790
|
-
createNodeBuilder( object, renderer
|
|
815
|
+
createNodeBuilder( object, renderer ) {
|
|
791
816
|
|
|
792
|
-
return new GLSLNodeBuilder( object, renderer
|
|
817
|
+
return new GLSLNodeBuilder( object, renderer );
|
|
793
818
|
|
|
794
819
|
}
|
|
795
820
|
|
|
@@ -875,26 +900,107 @@ class WebGLBackend extends Backend {
|
|
|
875
900
|
|
|
876
901
|
}
|
|
877
902
|
|
|
903
|
+
_handleSource( string, errorLine ) {
|
|
904
|
+
|
|
905
|
+
const lines = string.split( '\n' );
|
|
906
|
+
const lines2 = [];
|
|
907
|
+
|
|
908
|
+
const from = Math.max( errorLine - 6, 0 );
|
|
909
|
+
const to = Math.min( errorLine + 6, lines.length );
|
|
910
|
+
|
|
911
|
+
for ( let i = from; i < to; i ++ ) {
|
|
912
|
+
|
|
913
|
+
const line = i + 1;
|
|
914
|
+
lines2.push( `${line === errorLine ? '>' : ' '} ${line}: ${lines[ i ]}` );
|
|
915
|
+
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
return lines2.join( '\n' );
|
|
919
|
+
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
_getShaderErrors( gl, shader, type ) {
|
|
923
|
+
|
|
924
|
+
const status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );
|
|
925
|
+
const errors = gl.getShaderInfoLog( shader ).trim();
|
|
926
|
+
|
|
927
|
+
if ( status && errors === '' ) return '';
|
|
928
|
+
|
|
929
|
+
const errorMatches = /ERROR: 0:(\d+)/.exec( errors );
|
|
930
|
+
if ( errorMatches ) {
|
|
931
|
+
|
|
932
|
+
const errorLine = parseInt( errorMatches[ 1 ] );
|
|
933
|
+
return type.toUpperCase() + '\n\n' + errors + '\n\n' + this._handleSource( gl.getShaderSource( shader ), errorLine );
|
|
934
|
+
|
|
935
|
+
} else {
|
|
936
|
+
|
|
937
|
+
return errors;
|
|
938
|
+
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
_logProgramError( programGPU, glFragmentShader, glVertexShader ) {
|
|
944
|
+
|
|
945
|
+
if ( this.renderer.debug.checkShaderErrors ) {
|
|
946
|
+
|
|
947
|
+
const gl = this.gl;
|
|
948
|
+
|
|
949
|
+
const programLog = gl.getProgramInfoLog( programGPU ).trim();
|
|
950
|
+
|
|
951
|
+
if ( gl.getProgramParameter( programGPU, gl.LINK_STATUS ) === false ) {
|
|
952
|
+
|
|
953
|
+
|
|
954
|
+
if ( typeof this.renderer.debug.onShaderError === 'function' ) {
|
|
955
|
+
|
|
956
|
+
this.renderer.debug.onShaderError( gl, programGPU, glVertexShader, glFragmentShader );
|
|
957
|
+
|
|
958
|
+
} else {
|
|
959
|
+
|
|
960
|
+
// default error reporting
|
|
961
|
+
|
|
962
|
+
const vertexErrors = this._getShaderErrors( gl, glVertexShader, 'vertex' );
|
|
963
|
+
const fragmentErrors = this._getShaderErrors( gl, glFragmentShader, 'fragment' );
|
|
964
|
+
|
|
965
|
+
console.error(
|
|
966
|
+
'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +
|
|
967
|
+
'VALIDATE_STATUS ' + gl.getProgramParameter( programGPU, gl.VALIDATE_STATUS ) + '\n\n' +
|
|
968
|
+
'Program Info Log: ' + programLog + '\n' +
|
|
969
|
+
vertexErrors + '\n' +
|
|
970
|
+
fragmentErrors
|
|
971
|
+
);
|
|
972
|
+
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
} else if ( programLog !== '' ) {
|
|
976
|
+
|
|
977
|
+
console.warn( 'THREE.WebGLProgram: Program Info Log:', programLog );
|
|
978
|
+
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
}
|
|
984
|
+
|
|
878
985
|
_completeCompile( renderObject, pipeline ) {
|
|
879
986
|
|
|
880
|
-
const gl = this
|
|
987
|
+
const { state, gl } = this;
|
|
881
988
|
const pipelineData = this.get( pipeline );
|
|
882
989
|
const { programGPU, fragmentShader, vertexShader } = pipelineData;
|
|
883
990
|
|
|
884
991
|
if ( gl.getProgramParameter( programGPU, gl.LINK_STATUS ) === false ) {
|
|
885
992
|
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
console.error( 'THREE.WebGLBackend:', gl.getShaderInfoLog( fragmentShader ) );
|
|
889
|
-
console.error( 'THREE.WebGLBackend:', gl.getShaderInfoLog( vertexShader ) );
|
|
993
|
+
this._logProgramError( programGPU, fragmentShader, vertexShader );
|
|
890
994
|
|
|
891
995
|
}
|
|
892
996
|
|
|
893
|
-
|
|
997
|
+
state.useProgram( programGPU );
|
|
894
998
|
|
|
895
999
|
// Bindings
|
|
896
1000
|
|
|
897
|
-
|
|
1001
|
+
const bindings = renderObject.getBindings();
|
|
1002
|
+
|
|
1003
|
+
this._setupBindings( bindings, programGPU );
|
|
898
1004
|
|
|
899
1005
|
//
|
|
900
1006
|
|
|
@@ -906,7 +1012,7 @@ class WebGLBackend extends Backend {
|
|
|
906
1012
|
|
|
907
1013
|
createComputePipeline( computePipeline, bindings ) {
|
|
908
1014
|
|
|
909
|
-
const gl = this
|
|
1015
|
+
const { state, gl } = this;
|
|
910
1016
|
|
|
911
1017
|
// Program
|
|
912
1018
|
|
|
@@ -944,25 +1050,23 @@ class WebGLBackend extends Backend {
|
|
|
944
1050
|
gl.transformFeedbackVaryings(
|
|
945
1051
|
programGPU,
|
|
946
1052
|
transformVaryingNames,
|
|
947
|
-
gl.SEPARATE_ATTRIBS
|
|
1053
|
+
gl.SEPARATE_ATTRIBS
|
|
948
1054
|
);
|
|
949
1055
|
|
|
950
1056
|
gl.linkProgram( programGPU );
|
|
951
1057
|
|
|
952
1058
|
if ( gl.getProgramParameter( programGPU, gl.LINK_STATUS ) === false ) {
|
|
953
1059
|
|
|
954
|
-
|
|
1060
|
+
this._logProgramError( programGPU, fragmentShader, vertexShader );
|
|
955
1061
|
|
|
956
|
-
console.error( 'THREE.WebGLBackend:', gl.getShaderInfoLog( fragmentShader ) );
|
|
957
|
-
console.error( 'THREE.WebGLBackend:', gl.getShaderInfoLog( vertexShader ) );
|
|
958
1062
|
|
|
959
1063
|
}
|
|
960
1064
|
|
|
961
|
-
|
|
1065
|
+
state.useProgram( programGPU );
|
|
962
1066
|
|
|
963
1067
|
// Bindings
|
|
964
1068
|
|
|
965
|
-
this.createBindings( bindings );
|
|
1069
|
+
this.createBindings( null, bindings );
|
|
966
1070
|
|
|
967
1071
|
this._setupBindings( bindings, programGPU );
|
|
968
1072
|
|
|
@@ -1002,44 +1106,48 @@ class WebGLBackend extends Backend {
|
|
|
1002
1106
|
|
|
1003
1107
|
}
|
|
1004
1108
|
|
|
1005
|
-
createBindings( bindings ) {
|
|
1109
|
+
createBindings( bindGroup, bindings ) {
|
|
1006
1110
|
|
|
1007
|
-
this.updateBindings( bindings );
|
|
1111
|
+
this.updateBindings( bindGroup, bindings );
|
|
1008
1112
|
|
|
1009
1113
|
}
|
|
1010
1114
|
|
|
1011
|
-
updateBindings( bindings ) {
|
|
1115
|
+
updateBindings( bindGroup, bindings ) {
|
|
1012
1116
|
|
|
1013
|
-
const { gl } = this;
|
|
1117
|
+
const { state, gl } = this;
|
|
1014
1118
|
|
|
1015
1119
|
let groupIndex = 0;
|
|
1016
1120
|
let textureIndex = 0;
|
|
1017
1121
|
|
|
1018
|
-
for ( const
|
|
1122
|
+
for ( const bindGroup of bindings ) {
|
|
1123
|
+
|
|
1124
|
+
for ( const binding of bindGroup.bindings ) {
|
|
1019
1125
|
|
|
1020
|
-
|
|
1126
|
+
if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
|
|
1021
1127
|
|
|
1022
|
-
|
|
1023
|
-
|
|
1128
|
+
const bufferGPU = gl.createBuffer();
|
|
1129
|
+
const data = binding.buffer;
|
|
1024
1130
|
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1131
|
+
gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
|
|
1132
|
+
gl.bufferData( gl.UNIFORM_BUFFER, data, gl.DYNAMIC_DRAW );
|
|
1133
|
+
state.bindBufferBase( gl.UNIFORM_BUFFER, groupIndex, bufferGPU );
|
|
1028
1134
|
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1135
|
+
this.set( binding, {
|
|
1136
|
+
index: groupIndex ++,
|
|
1137
|
+
bufferGPU
|
|
1138
|
+
} );
|
|
1033
1139
|
|
|
1034
|
-
|
|
1140
|
+
} else if ( binding.isSampledTexture ) {
|
|
1035
1141
|
|
|
1036
|
-
|
|
1142
|
+
const { textureGPU, glTextureType } = this.get( binding.texture );
|
|
1037
1143
|
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1144
|
+
this.set( binding, {
|
|
1145
|
+
index: textureIndex ++,
|
|
1146
|
+
textureGPU,
|
|
1147
|
+
glTextureType
|
|
1148
|
+
} );
|
|
1149
|
+
|
|
1150
|
+
}
|
|
1043
1151
|
|
|
1044
1152
|
}
|
|
1045
1153
|
|
|
@@ -1086,7 +1194,11 @@ class WebGLBackend extends Backend {
|
|
|
1086
1194
|
|
|
1087
1195
|
createStorageAttribute( attribute ) {
|
|
1088
1196
|
|
|
1089
|
-
|
|
1197
|
+
if ( this.has( attribute ) ) return;
|
|
1198
|
+
|
|
1199
|
+
const gl = this.gl;
|
|
1200
|
+
|
|
1201
|
+
this.attributeUtils.createAttribute( attribute, gl.ARRAY_BUFFER );
|
|
1090
1202
|
|
|
1091
1203
|
}
|
|
1092
1204
|
|
|
@@ -1124,7 +1236,6 @@ class WebGLBackend extends Backend {
|
|
|
1124
1236
|
|
|
1125
1237
|
}
|
|
1126
1238
|
|
|
1127
|
-
|
|
1128
1239
|
getMaxAnisotropy() {
|
|
1129
1240
|
|
|
1130
1241
|
return this.capabilities.getMaxAnisotropy();
|
|
@@ -1143,38 +1254,38 @@ class WebGLBackend extends Backend {
|
|
|
1143
1254
|
|
|
1144
1255
|
}
|
|
1145
1256
|
|
|
1146
|
-
_setFramebuffer(
|
|
1257
|
+
_setFramebuffer( descriptor ) {
|
|
1147
1258
|
|
|
1148
1259
|
const { gl, state } = this;
|
|
1149
1260
|
|
|
1150
1261
|
let currentFrameBuffer = null;
|
|
1151
1262
|
|
|
1152
|
-
if (
|
|
1263
|
+
if ( descriptor.textures !== null ) {
|
|
1153
1264
|
|
|
1154
|
-
const renderTarget =
|
|
1265
|
+
const renderTarget = descriptor.renderTarget;
|
|
1155
1266
|
const renderTargetContextData = this.get( renderTarget );
|
|
1156
1267
|
const { samples, depthBuffer, stencilBuffer } = renderTarget;
|
|
1157
|
-
|
|
1268
|
+
|
|
1158
1269
|
const isCube = renderTarget.isWebGLCubeRenderTarget === true;
|
|
1159
1270
|
|
|
1160
1271
|
let msaaFb = renderTargetContextData.msaaFrameBuffer;
|
|
1161
1272
|
let depthRenderbuffer = renderTargetContextData.depthRenderbuffer;
|
|
1162
1273
|
|
|
1274
|
+
const cacheKey = getCacheKey( descriptor );
|
|
1275
|
+
|
|
1163
1276
|
let fb;
|
|
1164
1277
|
|
|
1165
1278
|
if ( isCube ) {
|
|
1166
1279
|
|
|
1167
|
-
|
|
1280
|
+
renderTargetContextData.cubeFramebuffers || ( renderTargetContextData.cubeFramebuffers = {} );
|
|
1168
1281
|
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
}
|
|
1172
|
-
|
|
1173
|
-
fb = renderTargetContextData.cubeFramebuffers[ cubeFace ];
|
|
1282
|
+
fb = renderTargetContextData.cubeFramebuffers[ cacheKey ];
|
|
1174
1283
|
|
|
1175
1284
|
} else {
|
|
1176
1285
|
|
|
1177
|
-
|
|
1286
|
+
renderTargetContextData.framebuffers || ( renderTargetContextData.framebuffers = {} );
|
|
1287
|
+
|
|
1288
|
+
fb = renderTargetContextData.framebuffers[ cacheKey ];
|
|
1178
1289
|
|
|
1179
1290
|
}
|
|
1180
1291
|
|
|
@@ -1184,22 +1295,27 @@ class WebGLBackend extends Backend {
|
|
|
1184
1295
|
|
|
1185
1296
|
state.bindFramebuffer( gl.FRAMEBUFFER, fb );
|
|
1186
1297
|
|
|
1187
|
-
const textures =
|
|
1298
|
+
const textures = descriptor.textures;
|
|
1188
1299
|
|
|
1189
1300
|
if ( isCube ) {
|
|
1190
1301
|
|
|
1191
|
-
renderTargetContextData.cubeFramebuffers[
|
|
1302
|
+
renderTargetContextData.cubeFramebuffers[ cacheKey ] = fb;
|
|
1303
|
+
|
|
1192
1304
|
const { textureGPU } = this.get( textures[ 0 ] );
|
|
1193
1305
|
|
|
1306
|
+
const cubeFace = this.renderer._activeCubeFace;
|
|
1307
|
+
|
|
1194
1308
|
gl.framebufferTexture2D( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_CUBE_MAP_POSITIVE_X + cubeFace, textureGPU, 0 );
|
|
1195
1309
|
|
|
1196
1310
|
} else {
|
|
1197
1311
|
|
|
1312
|
+
renderTargetContextData.framebuffers[ cacheKey ] = fb;
|
|
1313
|
+
|
|
1198
1314
|
for ( let i = 0; i < textures.length; i ++ ) {
|
|
1199
1315
|
|
|
1200
1316
|
const texture = textures[ i ];
|
|
1201
1317
|
const textureData = this.get( texture );
|
|
1202
|
-
textureData.renderTarget =
|
|
1318
|
+
textureData.renderTarget = descriptor.renderTarget;
|
|
1203
1319
|
|
|
1204
1320
|
const attachment = gl.COLOR_ATTACHMENT0 + i;
|
|
1205
1321
|
|
|
@@ -1207,15 +1323,13 @@ class WebGLBackend extends Backend {
|
|
|
1207
1323
|
|
|
1208
1324
|
}
|
|
1209
1325
|
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
state.drawBuffers( renderContext, fb );
|
|
1326
|
+
state.drawBuffers( descriptor, fb );
|
|
1213
1327
|
|
|
1214
1328
|
}
|
|
1215
1329
|
|
|
1216
|
-
if (
|
|
1330
|
+
if ( descriptor.depthTexture !== null ) {
|
|
1217
1331
|
|
|
1218
|
-
const textureData = this.get(
|
|
1332
|
+
const textureData = this.get( descriptor.depthTexture );
|
|
1219
1333
|
const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
|
|
1220
1334
|
|
|
1221
1335
|
gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0 );
|
|
@@ -1236,11 +1350,10 @@ class WebGLBackend extends Backend {
|
|
|
1236
1350
|
|
|
1237
1351
|
const msaaRenderbuffers = [];
|
|
1238
1352
|
|
|
1239
|
-
const textures =
|
|
1353
|
+
const textures = descriptor.textures;
|
|
1240
1354
|
|
|
1241
1355
|
for ( let i = 0; i < textures.length; i ++ ) {
|
|
1242
1356
|
|
|
1243
|
-
|
|
1244
1357
|
msaaRenderbuffers[ i ] = gl.createRenderbuffer();
|
|
1245
1358
|
|
|
1246
1359
|
gl.bindRenderbuffer( gl.RENDERBUFFER, msaaRenderbuffers[ i ] );
|
|
@@ -1254,10 +1367,10 @@ class WebGLBackend extends Backend {
|
|
|
1254
1367
|
|
|
1255
1368
|
}
|
|
1256
1369
|
|
|
1257
|
-
const texture =
|
|
1370
|
+
const texture = descriptor.textures[ i ];
|
|
1258
1371
|
const textureData = this.get( texture );
|
|
1259
1372
|
|
|
1260
|
-
gl.renderbufferStorageMultisample( gl.RENDERBUFFER, samples, textureData.glInternalFormat,
|
|
1373
|
+
gl.renderbufferStorageMultisample( gl.RENDERBUFFER, samples, textureData.glInternalFormat, descriptor.width, descriptor.height );
|
|
1261
1374
|
gl.framebufferRenderbuffer( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, msaaRenderbuffers[ i ] );
|
|
1262
1375
|
|
|
1263
1376
|
|
|
@@ -1269,7 +1382,7 @@ class WebGLBackend extends Backend {
|
|
|
1269
1382
|
if ( depthRenderbuffer === undefined ) {
|
|
1270
1383
|
|
|
1271
1384
|
depthRenderbuffer = gl.createRenderbuffer();
|
|
1272
|
-
this.textureUtils.setupRenderBufferStorage( depthRenderbuffer,
|
|
1385
|
+
this.textureUtils.setupRenderBufferStorage( depthRenderbuffer, descriptor );
|
|
1273
1386
|
|
|
1274
1387
|
renderTargetContextData.depthRenderbuffer = depthRenderbuffer;
|
|
1275
1388
|
|
|
@@ -1416,7 +1529,7 @@ class WebGLBackend extends Backend {
|
|
|
1416
1529
|
|
|
1417
1530
|
}
|
|
1418
1531
|
|
|
1419
|
-
const gl = this
|
|
1532
|
+
const { gl } = this;
|
|
1420
1533
|
|
|
1421
1534
|
transformFeedbackGPU = gl.createTransformFeedback();
|
|
1422
1535
|
|
|
@@ -1443,20 +1556,24 @@ class WebGLBackend extends Backend {
|
|
|
1443
1556
|
|
|
1444
1557
|
const gl = this.gl;
|
|
1445
1558
|
|
|
1446
|
-
for ( const
|
|
1559
|
+
for ( const bindGroup of bindings ) {
|
|
1447
1560
|
|
|
1448
|
-
const
|
|
1449
|
-
|
|
1561
|
+
for ( const binding of bindGroup.bindings ) {
|
|
1562
|
+
|
|
1563
|
+
const bindingData = this.get( binding );
|
|
1564
|
+
const index = bindingData.index;
|
|
1450
1565
|
|
|
1451
|
-
|
|
1566
|
+
if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
|
|
1452
1567
|
|
|
1453
|
-
|
|
1454
|
-
|
|
1568
|
+
const location = gl.getUniformBlockIndex( programGPU, binding.name );
|
|
1569
|
+
gl.uniformBlockBinding( programGPU, location, index );
|
|
1455
1570
|
|
|
1456
|
-
|
|
1571
|
+
} else if ( binding.isSampledTexture ) {
|
|
1457
1572
|
|
|
1458
|
-
|
|
1459
|
-
|
|
1573
|
+
const location = gl.getUniformLocation( programGPU, binding.name );
|
|
1574
|
+
gl.uniform1i( location, index );
|
|
1575
|
+
|
|
1576
|
+
}
|
|
1460
1577
|
|
|
1461
1578
|
}
|
|
1462
1579
|
|
|
@@ -1468,18 +1585,23 @@ class WebGLBackend extends Backend {
|
|
|
1468
1585
|
|
|
1469
1586
|
const { gl, state } = this;
|
|
1470
1587
|
|
|
1471
|
-
for ( const
|
|
1588
|
+
for ( const bindGroup of bindings ) {
|
|
1472
1589
|
|
|
1473
|
-
const
|
|
1474
|
-
|
|
1590
|
+
for ( const binding of bindGroup.bindings ) {
|
|
1591
|
+
|
|
1592
|
+
const bindingData = this.get( binding );
|
|
1593
|
+
const index = bindingData.index;
|
|
1475
1594
|
|
|
1476
|
-
|
|
1595
|
+
if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
|
|
1477
1596
|
|
|
1478
|
-
|
|
1597
|
+
// TODO USE bindBufferRange to group multiple uniform buffers
|
|
1598
|
+
state.bindBufferBase( gl.UNIFORM_BUFFER, index, bindingData.bufferGPU );
|
|
1479
1599
|
|
|
1480
|
-
|
|
1600
|
+
} else if ( binding.isSampledTexture ) {
|
|
1481
1601
|
|
|
1482
|
-
|
|
1602
|
+
state.bindTexture( bindingData.glTextureType, bindingData.textureGPU, gl.TEXTURE0 + index );
|
|
1603
|
+
|
|
1604
|
+
}
|
|
1483
1605
|
|
|
1484
1606
|
}
|
|
1485
1607
|
|