super-three 0.167.0 → 0.169.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 +532 -173
- package/build/three.module.js +532 -174
- package/build/three.module.min.js +1 -1
- package/build/three.webgpu.js +18173 -14266
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +79941 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +0 -4
- 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 +469 -448
- package/examples/jsm/controls/TransformControls.js +97 -62
- 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/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +6 -1
- package/examples/jsm/exporters/KTX2Exporter.js +21 -13
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +9 -7
- package/examples/jsm/exporters/USDZExporter.js +29 -8
- package/examples/jsm/geometries/DecalGeometry.js +4 -1
- package/examples/jsm/geometries/InstancedPointsGeometry.js +1 -1
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lights/LightProbeGenerator.js +24 -10
- package/examples/jsm/loaders/ColladaLoader.js +9 -6
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +30 -20
- package/examples/jsm/loaders/GLTFLoader.js +5 -10
- package/examples/jsm/loaders/KTX2Loader.js +27 -12
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +8 -5
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/VRMLLoader.js +10 -10
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/misc/Timer.js +1 -1
- package/examples/jsm/modifiers/CurveModifierGPU.js +233 -0
- package/examples/jsm/objects/LensflareMesh.js +322 -0
- package/examples/jsm/objects/SkyMesh.js +187 -0
- package/examples/jsm/objects/Water2Mesh.js +158 -0
- package/examples/jsm/objects/WaterMesh.js +101 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -1
- package/examples/jsm/physics/RapierPhysics.js +21 -1
- package/examples/jsm/postprocessing/OutlinePass.js +31 -46
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -2
- package/examples/jsm/shaders/OutputShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +8 -8
- package/examples/jsm/utils/GeometryCompressionUtils.js +37 -122
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/TextureUtils.js +2 -1
- package/examples/jsm/utils/TextureUtilsGPU.js +63 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/package.json +3 -2
- package/src/Three.WebGPU.Nodes.js +200 -0
- package/src/Three.WebGPU.js +7 -0
- package/src/Three.js +1 -0
- package/src/audio/Audio.js +2 -2
- package/src/constants.js +1 -1
- package/src/core/BufferAttribute.js +0 -9
- package/src/core/Clock.js +1 -1
- package/src/core/InterleavedBuffer.js +0 -9
- package/src/extras/Controls.js +32 -0
- package/src/geometries/CylinderGeometry.js +11 -4
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/ObjectLoader.js +3 -3
- package/src/{nodes/loaders → loaders/nodes}/NodeLoader.js +25 -5
- package/src/{nodes/loaders → loaders/nodes}/NodeMaterialLoader.js +21 -18
- package/src/{nodes/loaders → loaders/nodes}/NodeObjectLoader.js +19 -0
- package/src/materials/Material.js +4 -7
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +156 -0
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +56 -59
- package/src/{nodes/materials → materials/nodes}/LineBasicNodeMaterial.js +8 -5
- package/src/{nodes/materials → materials/nodes}/LineDashedNodeMaterial.js +12 -10
- package/src/{nodes/materials → materials/nodes}/MeshBasicNodeMaterial.js +16 -12
- package/src/{nodes/materials → materials/nodes}/MeshLambertNodeMaterial.js +10 -6
- package/src/{nodes/materials → materials/nodes}/MeshMatcapNodeMaterial.js +13 -9
- package/src/{nodes/materials → materials/nodes}/MeshNormalNodeMaterial.js +13 -9
- package/src/{nodes/materials → materials/nodes}/MeshPhongNodeMaterial.js +14 -9
- package/src/{nodes/materials → materials/nodes}/MeshPhysicalNodeMaterial.js +22 -18
- package/src/{nodes/materials → materials/nodes}/MeshSSSNodeMaterial.js +10 -7
- package/src/{nodes/materials → materials/nodes}/MeshStandardNodeMaterial.js +22 -12
- package/src/{nodes/materials → materials/nodes}/MeshToonNodeMaterial.js +9 -5
- package/src/{nodes/materials → materials/nodes}/NodeMaterial.js +71 -115
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -1
- package/src/{nodes/materials → materials/nodes}/PointsNodeMaterial.js +8 -5
- package/src/{nodes/materials → materials/nodes}/ShadowNodeMaterial.js +9 -5
- package/src/{nodes/materials → materials/nodes}/SpriteNodeMaterial.js +47 -14
- package/src/{nodes/materials → materials/nodes}/VolumeNodeMaterial.js +24 -22
- package/src/materials/nodes/manager/NodeMaterialObserver.js +302 -0
- package/src/math/Triangle.js +24 -0
- package/src/nodes/Nodes.js +103 -159
- package/src/nodes/TSL.js +179 -0
- package/src/nodes/accessors/AccessorsUtils.js +8 -8
- package/src/nodes/accessors/BatchNode.js +53 -21
- package/src/nodes/accessors/{BitangentNode.js → Bitangent.js} +9 -9
- package/src/nodes/accessors/BufferAttributeNode.js +8 -5
- package/src/nodes/accessors/BufferNode.js +7 -4
- package/src/nodes/accessors/Camera.js +13 -0
- package/src/nodes/accessors/ClippingNode.js +19 -13
- package/src/nodes/accessors/CubeTextureNode.js +9 -8
- package/src/nodes/accessors/InstanceNode.js +19 -15
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +8 -5
- package/src/nodes/accessors/Lights.js +51 -0
- package/src/nodes/accessors/MaterialNode.js +56 -55
- package/src/nodes/accessors/MaterialProperties.js +3 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +9 -4
- package/src/nodes/accessors/ModelNode.js +47 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +12 -9
- package/src/nodes/accessors/MorphNode.js +17 -13
- package/src/nodes/accessors/Normal.js +88 -0
- package/src/nodes/accessors/Object3DNode.js +17 -33
- package/src/nodes/accessors/PointUVNode.js +9 -5
- package/src/nodes/accessors/Position.js +10 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +171 -0
- package/src/nodes/accessors/ReferenceNode.js +50 -7
- package/src/nodes/accessors/ReflectVector.js +10 -0
- package/src/nodes/accessors/RendererReferenceNode.js +12 -6
- package/src/nodes/accessors/SceneNode.js +9 -6
- package/src/nodes/accessors/SkinningNode.js +88 -21
- package/src/nodes/accessors/StorageBufferNode.js +22 -5
- package/src/nodes/accessors/StorageTextureNode.js +9 -6
- package/src/nodes/accessors/Tangent.js +22 -0
- package/src/nodes/accessors/Texture3DNode.js +16 -13
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +3 -32
- package/src/nodes/accessors/TextureNode.js +29 -23
- package/src/nodes/accessors/TextureSizeNode.js +10 -9
- package/src/nodes/accessors/{UniformsNode.js → UniformArrayNode.js} +26 -14
- package/src/nodes/accessors/UserDataNode.js +10 -7
- package/src/nodes/accessors/VelocityNode.js +134 -0
- package/src/nodes/accessors/VertexColorNode.js +7 -4
- package/src/nodes/code/CodeNode.js +9 -5
- package/src/nodes/code/ExpressionNode.js +10 -6
- package/src/nodes/code/FunctionCallNode.js +8 -5
- package/src/nodes/code/FunctionNode.js +8 -23
- package/src/nodes/code/ScriptableNode.js +13 -10
- package/src/nodes/code/ScriptableValueNode.js +9 -7
- package/src/nodes/core/AssignNode.js +12 -9
- package/src/nodes/core/AttributeNode.js +12 -21
- package/src/nodes/core/BypassNode.js +11 -7
- package/src/nodes/core/CacheNode.js +10 -6
- package/src/nodes/core/ConstNode.js +6 -3
- package/src/nodes/core/ContextNode.js +21 -11
- package/src/nodes/core/IndexNode.js +35 -8
- package/src/nodes/core/InputNode.js +7 -3
- package/src/nodes/core/MRTNode.js +16 -7
- package/src/nodes/core/Node.js +19 -40
- package/src/nodes/core/NodeBuilder.js +117 -38
- package/src/nodes/core/NodeUtils.js +49 -6
- package/src/nodes/core/OutputStructNode.js +10 -6
- package/src/nodes/core/ParameterNode.js +7 -4
- package/src/nodes/core/PropertyNode.js +36 -32
- package/src/nodes/core/StackNode.js +31 -11
- package/src/nodes/core/StructTypeNode.js +7 -3
- package/src/nodes/core/TempNode.js +8 -4
- package/src/nodes/core/UniformGroupNode.js +14 -11
- package/src/nodes/core/UniformNode.js +7 -4
- package/src/nodes/core/VarNode.js +12 -8
- package/src/nodes/core/VaryingNode.js +10 -6
- package/src/nodes/display/AfterImageNode.js +15 -9
- package/src/nodes/display/AnaglyphPassNode.js +67 -0
- package/src/nodes/display/AnamorphicNode.js +17 -11
- package/src/nodes/display/BleachBypass.js +26 -0
- package/src/nodes/display/BlendMode.js +54 -0
- package/src/nodes/display/BloomNode.js +27 -19
- package/src/nodes/display/BumpMapNode.js +13 -12
- package/src/nodes/display/ColorAdjustment.js +46 -0
- package/src/nodes/display/ColorSpaceFunctions.js +38 -0
- package/src/nodes/display/ColorSpaceNode.js +67 -61
- package/src/nodes/display/DenoiseNode.js +23 -17
- package/src/nodes/display/DepthOfFieldNode.js +12 -7
- package/src/nodes/display/DotScreenNode.js +13 -22
- package/src/nodes/display/FXAANode.js +21 -16
- package/src/nodes/display/FilmNode.js +11 -7
- package/src/nodes/display/FrontFacingNode.js +10 -6
- package/src/nodes/display/GTAONode.js +22 -15
- package/src/nodes/display/GaussianBlurNode.js +14 -8
- package/src/nodes/display/Lut3DNode.js +10 -6
- package/src/nodes/display/MotionBlur.js +25 -0
- package/src/nodes/display/NormalMapNode.js +13 -13
- package/src/nodes/display/ParallaxBarrierPassNode.js +58 -0
- package/src/nodes/display/PassNode.js +95 -8
- package/src/nodes/display/PixelationPassNode.js +20 -8
- package/src/nodes/display/PosterizeNode.js +8 -7
- package/src/nodes/display/RGBShiftNode.js +11 -7
- package/src/nodes/display/RenderOutputNode.js +15 -11
- package/src/nodes/display/SSAAPassNode.js +287 -0
- package/src/nodes/display/ScreenNode.js +181 -0
- package/src/nodes/display/Sepia.js +17 -0
- package/src/nodes/display/SobelOperatorNode.js +13 -8
- package/src/nodes/display/StereoCompositePassNode.js +110 -0
- package/src/nodes/display/StereoPassNode.js +83 -0
- package/src/nodes/display/ToneMappingFunctions.js +190 -0
- package/src/nodes/display/ToneMappingNode.js +15 -175
- package/src/nodes/display/ToonOutlinePassNode.js +111 -0
- package/src/nodes/display/TransitionNode.js +12 -8
- package/src/nodes/display/ViewportDepthNode.js +34 -29
- package/src/nodes/display/ViewportDepthTextureNode.js +10 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +10 -9
- package/src/nodes/display/ViewportTextureNode.js +11 -11
- package/src/nodes/fog/FogExp2Node.js +8 -7
- package/src/nodes/fog/FogNode.js +10 -8
- package/src/nodes/fog/FogRangeNode.js +8 -7
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +6 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +1 -1
- package/src/nodes/functions/PhongLightingModel.js +5 -5
- package/src/nodes/functions/PhysicalLightingModel.js +34 -33
- package/src/nodes/functions/ShadowMaskModel.js +1 -1
- package/src/nodes/functions/ToonLightingModel.js +3 -3
- package/src/nodes/functions/material/getGeometryRoughness.js +4 -4
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +9 -5
- package/src/nodes/gpgpu/AtomicFunctionNode.js +99 -0
- package/src/nodes/gpgpu/BarrierNode.js +40 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +98 -0
- package/src/nodes/gpgpu/ComputeNode.js +10 -6
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +100 -0
- package/src/nodes/lighting/AONode.js +6 -3
- package/src/nodes/lighting/AmbientLightNode.js +6 -8
- package/src/nodes/lighting/AnalyticLightNode.js +225 -36
- package/src/nodes/lighting/BasicEnvironmentNode.js +8 -4
- package/src/nodes/lighting/BasicLightMapNode.js +7 -4
- package/src/nodes/lighting/DirectionalLightNode.js +7 -9
- package/src/nodes/lighting/EnvironmentNode.js +23 -19
- package/src/nodes/lighting/HemisphereLightNode.js +11 -11
- package/src/nodes/lighting/IESSpotLightNode.js +7 -9
- package/src/nodes/lighting/IrradianceNode.js +6 -3
- package/src/nodes/lighting/LightProbeNode.js +53 -0
- package/src/nodes/lighting/LightUtils.js +3 -3
- package/src/nodes/lighting/LightingContextNode.js +19 -18
- package/src/nodes/lighting/LightingNode.js +7 -3
- package/src/nodes/lighting/LightsNode.js +112 -75
- package/src/nodes/lighting/PointLightNode.js +12 -13
- package/src/nodes/lighting/RectAreaLightNode.js +11 -11
- package/src/nodes/lighting/SpotLightNode.js +14 -16
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +36 -31
- package/src/nodes/materialx/lib/mx_noise.js +96 -96
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/{CondNode.js → ConditionalNode.js} +38 -10
- package/src/nodes/math/Hash.js +13 -0
- package/src/nodes/math/MathNode.js +127 -124
- package/src/nodes/math/MathUtils.js +0 -7
- package/src/nodes/math/OperatorNode.js +97 -52
- package/src/nodes/math/TriNoise3D.js +19 -29
- package/src/nodes/pmrem/PMREMNode.js +61 -15
- package/src/nodes/pmrem/PMREMUtils.js +46 -46
- package/src/nodes/procedural/Checker.js +14 -0
- package/src/nodes/tsl/TSLBase.js +30 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +105 -97
- package/src/nodes/utils/ArrayElementNode.js +8 -4
- package/src/nodes/utils/ConvertNode.js +7 -3
- package/src/nodes/utils/CubeMapNode.js +160 -0
- package/src/nodes/utils/Discard.js +8 -0
- package/src/nodes/utils/EquirectUVNode.js +9 -6
- package/src/nodes/utils/FlipNode.js +68 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +9 -5
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +16 -6
- package/src/nodes/utils/MatcapUVNode.js +10 -7
- package/src/nodes/utils/MaxMipLevelNode.js +8 -5
- package/src/nodes/utils/OscNode.js +12 -8
- package/src/nodes/utils/Packing.js +4 -0
- package/src/nodes/utils/RTTNode.js +11 -8
- package/src/nodes/utils/ReflectorNode.js +12 -4
- package/src/nodes/utils/RemapNode.js +12 -8
- package/src/nodes/utils/RotateNode.js +8 -13
- package/src/nodes/utils/SetNode.js +7 -4
- package/src/nodes/utils/SplitNode.js +7 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +10 -6
- package/src/nodes/utils/SpriteUtils.js +47 -0
- package/src/nodes/utils/StorageArrayElementNode.js +11 -12
- package/src/nodes/utils/TimerNode.js +8 -5
- package/src/nodes/utils/TriplanarTexturesNode.js +11 -9
- package/src/nodes/utils/UVUtils.js +19 -0
- package/src/nodes/utils/ViewportUtils.js +14 -0
- package/src/objects/BatchedMesh.js +78 -13
- package/src/objects/LOD.js +21 -0
- package/src/objects/Line.js +1 -0
- package/src/objects/Mesh.js +7 -23
- package/src/objects/Points.js +2 -0
- package/src/renderers/WebGLRenderer.js +88 -41
- package/src/renderers/common/Backend.js +2 -2
- package/src/renderers/common/Background.js +3 -1
- package/src/renderers/common/BindGroup.js +3 -1
- package/src/renderers/common/Bindings.js +13 -15
- package/src/renderers/common/BundleGroup.js +26 -0
- package/src/renderers/common/ClippingContext.js +15 -5
- package/src/renderers/common/CubeRenderTarget.js +9 -3
- package/src/renderers/common/PostProcessing.js +4 -1
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderContext.js +23 -0
- package/src/renderers/common/RenderList.js +1 -1
- package/src/renderers/common/RenderObject.js +117 -6
- package/src/renderers/common/RenderObjects.js +8 -1
- package/src/renderers/common/Renderer.js +128 -94
- package/src/renderers/common/SampledTexture.js +12 -3
- package/src/renderers/common/Textures.js +8 -12
- package/src/renderers/common/extras/PMREMGenerator.js +19 -22
- package/src/renderers/common/nodes/NodeBuilderState.js +4 -4
- package/src/renderers/common/nodes/NodeLibrary.js +118 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +2 -2
- package/src/renderers/common/nodes/Nodes.js +65 -19
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLCapabilities.js +9 -0
- package/src/renderers/webgl/WebGLProgram.js +3 -1
- package/src/renderers/webgl/WebGLPrograms.js +21 -17
- package/src/renderers/webgl/WebGLProperties.js +7 -0
- package/src/renderers/webgl/WebGLState.js +21 -0
- package/src/renderers/webgl/WebGLTextures.js +83 -4
- package/src/renderers/webgl-fallback/WebGLBackend.js +135 -110
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +60 -12
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +6 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +20 -2
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +89 -37
- package/src/renderers/webgpu/WebGPUBackend.js +112 -86
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +42 -0
- package/src/renderers/webgpu/WebGPURenderer.js +9 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +59 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +105 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +189 -73
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +6 -16
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +45 -21
- package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +7 -16
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +43 -26
- package/src/renderers/webgpu/utils/WebGPUUtils.js +19 -2
- package/src/renderers/webxr/WebXRManager.js +32 -25
- package/src/utils.js +33 -1
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/RotateUVNode.js +0 -35
- /package/src/nodes/accessors/{UVNode.js → UV.js} +0 -0
|
@@ -171,6 +171,28 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
171
171
|
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
+
if ( glFormat === _gl.RGB_INTEGER ) {
|
|
175
|
+
|
|
176
|
+
if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RGB8UI;
|
|
177
|
+
if ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.RGB16UI;
|
|
178
|
+
if ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.RGB32UI;
|
|
179
|
+
if ( glType === _gl.BYTE ) internalFormat = _gl.RGB8I;
|
|
180
|
+
if ( glType === _gl.SHORT ) internalFormat = _gl.RGB16I;
|
|
181
|
+
if ( glType === _gl.INT ) internalFormat = _gl.RGB32I;
|
|
182
|
+
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
if ( glFormat === _gl.RGBA_INTEGER ) {
|
|
186
|
+
|
|
187
|
+
if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RGBA8UI;
|
|
188
|
+
if ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.RGBA16UI;
|
|
189
|
+
if ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.RGBA32UI;
|
|
190
|
+
if ( glType === _gl.BYTE ) internalFormat = _gl.RGBA8I;
|
|
191
|
+
if ( glType === _gl.SHORT ) internalFormat = _gl.RGBA16I;
|
|
192
|
+
if ( glType === _gl.INT ) internalFormat = _gl.RGBA32I;
|
|
193
|
+
|
|
194
|
+
}
|
|
195
|
+
|
|
174
196
|
if ( glFormat === _gl.RGB ) {
|
|
175
197
|
|
|
176
198
|
if ( glType === _gl.UNSIGNED_INT_5_9_9_9_REV ) internalFormat = _gl.RGB9_E5;
|
|
@@ -1722,6 +1744,37 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1722
1744
|
const renderTargetProperties = properties.get( renderTarget );
|
|
1723
1745
|
const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
|
|
1724
1746
|
|
|
1747
|
+
// if the bound depth texture has changed
|
|
1748
|
+
if ( renderTargetProperties.__boundDepthTexture !== renderTarget.depthTexture ) {
|
|
1749
|
+
|
|
1750
|
+
// fire the dispose event to get rid of stored state associated with the previously bound depth buffer
|
|
1751
|
+
const depthTexture = renderTarget.depthTexture;
|
|
1752
|
+
if ( renderTargetProperties.__depthDisposeCallback ) {
|
|
1753
|
+
|
|
1754
|
+
renderTargetProperties.__depthDisposeCallback();
|
|
1755
|
+
|
|
1756
|
+
}
|
|
1757
|
+
|
|
1758
|
+
// set up dispose listeners to track when the currently attached buffer is implicitly unbound
|
|
1759
|
+
if ( depthTexture ) {
|
|
1760
|
+
|
|
1761
|
+
const disposeEvent = () => {
|
|
1762
|
+
|
|
1763
|
+
delete renderTargetProperties.__boundDepthTexture;
|
|
1764
|
+
delete renderTargetProperties.__depthDisposeCallback;
|
|
1765
|
+
depthTexture.removeEventListener( 'dispose', disposeEvent );
|
|
1766
|
+
|
|
1767
|
+
};
|
|
1768
|
+
|
|
1769
|
+
depthTexture.addEventListener( 'dispose', disposeEvent );
|
|
1770
|
+
renderTargetProperties.__depthDisposeCallback = disposeEvent;
|
|
1771
|
+
|
|
1772
|
+
}
|
|
1773
|
+
|
|
1774
|
+
renderTargetProperties.__boundDepthTexture = depthTexture;
|
|
1775
|
+
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1725
1778
|
if ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) {
|
|
1726
1779
|
|
|
1727
1780
|
if ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );
|
|
@@ -1737,16 +1790,42 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1737
1790
|
for ( let i = 0; i < 6; i ++ ) {
|
|
1738
1791
|
|
|
1739
1792
|
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );
|
|
1740
|
-
|
|
1741
|
-
|
|
1793
|
+
|
|
1794
|
+
if ( renderTargetProperties.__webglDepthbuffer[ i ] === undefined ) {
|
|
1795
|
+
|
|
1796
|
+
renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();
|
|
1797
|
+
setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );
|
|
1798
|
+
|
|
1799
|
+
} else {
|
|
1800
|
+
|
|
1801
|
+
// attach buffer if it's been created already
|
|
1802
|
+
const glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
1803
|
+
const renderbuffer = renderTargetProperties.__webglDepthbuffer[ i ];
|
|
1804
|
+
_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );
|
|
1805
|
+
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer );
|
|
1806
|
+
|
|
1807
|
+
}
|
|
1742
1808
|
|
|
1743
1809
|
}
|
|
1744
1810
|
|
|
1745
1811
|
} else {
|
|
1746
1812
|
|
|
1747
1813
|
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
1748
|
-
|
|
1749
|
-
|
|
1814
|
+
|
|
1815
|
+
if ( renderTargetProperties.__webglDepthbuffer === undefined ) {
|
|
1816
|
+
|
|
1817
|
+
renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();
|
|
1818
|
+
setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );
|
|
1819
|
+
|
|
1820
|
+
} else {
|
|
1821
|
+
|
|
1822
|
+
// attach buffer if it's been created already
|
|
1823
|
+
const glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
1824
|
+
const renderbuffer = renderTargetProperties.__webglDepthbuffer;
|
|
1825
|
+
_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );
|
|
1826
|
+
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer );
|
|
1827
|
+
|
|
1828
|
+
}
|
|
1750
1829
|
|
|
1751
1830
|
}
|
|
1752
1831
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import GLSLNodeBuilder from './nodes/GLSLNodeBuilder.js';
|
|
2
2
|
import Backend from '../common/Backend.js';
|
|
3
|
+
import { getCacheKey } from '../common/RenderContext.js';
|
|
3
4
|
|
|
4
5
|
import WebGLAttributeUtils from './utils/WebGLAttributeUtils.js';
|
|
5
6
|
import WebGLState from './utils/WebGLState.js';
|
|
@@ -52,10 +53,16 @@ class WebGLBackend extends Backend {
|
|
|
52
53
|
this.trackTimestamp = ( parameters.trackTimestamp === true );
|
|
53
54
|
|
|
54
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' );
|
|
55
61
|
this.extensions.get( 'WEBGL_multi_draw' );
|
|
56
62
|
|
|
57
63
|
this.disjoint = this.extensions.get( 'EXT_disjoint_timer_query_webgl2' );
|
|
58
64
|
this.parallel = this.extensions.get( 'KHR_parallel_shader_compile' );
|
|
65
|
+
|
|
59
66
|
this._currentContext = null;
|
|
60
67
|
|
|
61
68
|
}
|
|
@@ -201,7 +208,7 @@ class WebGLBackend extends Backend {
|
|
|
201
208
|
|
|
202
209
|
const { x, y, width, height } = renderContext.scissorValue;
|
|
203
210
|
|
|
204
|
-
gl.scissor( x, y, width, height );
|
|
211
|
+
gl.scissor( x, renderContext.height - height - y, width, height );
|
|
205
212
|
|
|
206
213
|
}
|
|
207
214
|
|
|
@@ -229,6 +236,20 @@ class WebGLBackend extends Backend {
|
|
|
229
236
|
const renderContextData = this.get( renderContext );
|
|
230
237
|
const previousContext = renderContextData.previousContext;
|
|
231
238
|
|
|
239
|
+
const occlusionQueryCount = renderContext.occlusionQueryCount;
|
|
240
|
+
|
|
241
|
+
if ( occlusionQueryCount > 0 ) {
|
|
242
|
+
|
|
243
|
+
if ( occlusionQueryCount > renderContextData.occlusionQueryIndex ) {
|
|
244
|
+
|
|
245
|
+
gl.endQuery( gl.ANY_SAMPLES_PASSED );
|
|
246
|
+
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
this.resolveOccludedAsync( renderContext );
|
|
250
|
+
|
|
251
|
+
}
|
|
252
|
+
|
|
232
253
|
const textures = renderContext.textures;
|
|
233
254
|
|
|
234
255
|
if ( textures !== null ) {
|
|
@@ -249,18 +270,18 @@ class WebGLBackend extends Backend {
|
|
|
249
270
|
|
|
250
271
|
this._currentContext = previousContext;
|
|
251
272
|
|
|
252
|
-
|
|
253
273
|
if ( renderContext.textures !== null && renderContext.renderTarget ) {
|
|
254
274
|
|
|
255
275
|
const renderTargetContextData = this.get( renderContext.renderTarget );
|
|
256
276
|
|
|
257
277
|
const { samples } = renderContext.renderTarget;
|
|
258
|
-
const fb = renderTargetContextData.framebuffer;
|
|
259
|
-
|
|
260
|
-
const mask = gl.COLOR_BUFFER_BIT;
|
|
261
278
|
|
|
262
279
|
if ( samples > 0 ) {
|
|
263
280
|
|
|
281
|
+
const fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ];
|
|
282
|
+
|
|
283
|
+
const mask = gl.COLOR_BUFFER_BIT;
|
|
284
|
+
|
|
264
285
|
const msaaFrameBuffer = renderTargetContextData.msaaFrameBuffer;
|
|
265
286
|
|
|
266
287
|
const textures = renderContext.textures;
|
|
@@ -272,9 +293,21 @@ class WebGLBackend extends Backend {
|
|
|
272
293
|
|
|
273
294
|
// TODO Add support for MRT
|
|
274
295
|
|
|
275
|
-
|
|
296
|
+
if ( renderContext.scissor ) {
|
|
297
|
+
|
|
298
|
+
const { x, y, width, height } = renderContext.scissorValue;
|
|
299
|
+
|
|
300
|
+
const viewY = renderContext.height - height - y;
|
|
301
|
+
|
|
302
|
+
gl.blitFramebuffer( x, viewY, x + width, viewY + height, x, viewY, x + width, viewY + height, mask, gl.NEAREST );
|
|
303
|
+
gl.invalidateSubFramebuffer( gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray, x, viewY, width, height );
|
|
276
304
|
|
|
277
|
-
|
|
305
|
+
} else {
|
|
306
|
+
|
|
307
|
+
gl.blitFramebuffer( 0, 0, renderContext.width, renderContext.height, 0, 0, renderContext.width, renderContext.height, mask, gl.NEAREST );
|
|
308
|
+
gl.invalidateFramebuffer( gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray );
|
|
309
|
+
|
|
310
|
+
}
|
|
278
311
|
|
|
279
312
|
}
|
|
280
313
|
|
|
@@ -293,32 +326,12 @@ class WebGLBackend extends Backend {
|
|
|
293
326
|
|
|
294
327
|
} else {
|
|
295
328
|
|
|
296
|
-
const gl = this.gl;
|
|
297
|
-
|
|
298
329
|
gl.viewport( 0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight );
|
|
299
330
|
|
|
300
331
|
}
|
|
301
332
|
|
|
302
333
|
}
|
|
303
334
|
|
|
304
|
-
const occlusionQueryCount = renderContext.occlusionQueryCount;
|
|
305
|
-
|
|
306
|
-
if ( occlusionQueryCount > 0 ) {
|
|
307
|
-
|
|
308
|
-
const renderContextData = this.get( renderContext );
|
|
309
|
-
|
|
310
|
-
if ( occlusionQueryCount > renderContextData.occlusionQueryIndex ) {
|
|
311
|
-
|
|
312
|
-
const { gl } = this;
|
|
313
|
-
|
|
314
|
-
gl.endQuery( gl.ANY_SAMPLES_PASSED );
|
|
315
|
-
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
this.resolveOccludedAsync( renderContext );
|
|
319
|
-
|
|
320
|
-
}
|
|
321
|
-
|
|
322
335
|
this.prepareTimestampBuffer( renderContext );
|
|
323
336
|
|
|
324
337
|
}
|
|
@@ -394,7 +407,7 @@ class WebGLBackend extends Backend {
|
|
|
394
407
|
const gl = this.gl;
|
|
395
408
|
const { x, y, width, height } = renderContext.viewportValue;
|
|
396
409
|
|
|
397
|
-
gl.viewport( x, y, width, height );
|
|
410
|
+
gl.viewport( x, renderContext.height - height - y, width, height );
|
|
398
411
|
|
|
399
412
|
}
|
|
400
413
|
|
|
@@ -439,6 +452,12 @@ class WebGLBackend extends Backend {
|
|
|
439
452
|
|
|
440
453
|
const clearColor = descriptor.clearColorValue || this.getClearColor();
|
|
441
454
|
|
|
455
|
+
// premultiply alpha
|
|
456
|
+
|
|
457
|
+
clearColor.r *= clearColor.a;
|
|
458
|
+
clearColor.g *= clearColor.a;
|
|
459
|
+
clearColor.b *= clearColor.a;
|
|
460
|
+
|
|
442
461
|
if ( depth ) this.state.setDepthMask( true );
|
|
443
462
|
|
|
444
463
|
if ( descriptor.textures === null ) {
|
|
@@ -482,16 +501,16 @@ class WebGLBackend extends Backend {
|
|
|
482
501
|
|
|
483
502
|
beginCompute( computeGroup ) {
|
|
484
503
|
|
|
485
|
-
const gl = this
|
|
504
|
+
const { state, gl } = this;
|
|
486
505
|
|
|
487
|
-
|
|
506
|
+
state.bindFramebuffer( gl.FRAMEBUFFER, null );
|
|
488
507
|
this.initTimestampQuery( computeGroup );
|
|
489
508
|
|
|
490
509
|
}
|
|
491
510
|
|
|
492
511
|
compute( computeGroup, computeNode, bindings, pipeline ) {
|
|
493
512
|
|
|
494
|
-
const gl = this
|
|
513
|
+
const { state, gl } = this;
|
|
495
514
|
|
|
496
515
|
if ( ! this.discard ) {
|
|
497
516
|
|
|
@@ -517,7 +536,7 @@ class WebGLBackend extends Backend {
|
|
|
517
536
|
|
|
518
537
|
}
|
|
519
538
|
|
|
520
|
-
|
|
539
|
+
state.useProgram( programGPU );
|
|
521
540
|
|
|
522
541
|
this._bindUniforms( bindings );
|
|
523
542
|
|
|
@@ -579,6 +598,10 @@ class WebGLBackend extends Backend {
|
|
|
579
598
|
|
|
580
599
|
const contextData = this.get( context );
|
|
581
600
|
|
|
601
|
+
const drawParms = renderObject.getDrawParameters();
|
|
602
|
+
|
|
603
|
+
if ( drawParms === null ) return;
|
|
604
|
+
|
|
582
605
|
//
|
|
583
606
|
|
|
584
607
|
this._bindUniforms( renderObject.getBindings() );
|
|
@@ -587,7 +610,7 @@ class WebGLBackend extends Backend {
|
|
|
587
610
|
|
|
588
611
|
state.setMaterial( material, frontFaceCW );
|
|
589
612
|
|
|
590
|
-
|
|
613
|
+
state.useProgram( programGPU );
|
|
591
614
|
|
|
592
615
|
//
|
|
593
616
|
|
|
@@ -617,10 +640,6 @@ class WebGLBackend extends Backend {
|
|
|
617
640
|
|
|
618
641
|
const index = renderObject.getIndex();
|
|
619
642
|
|
|
620
|
-
const geometry = renderObject.geometry;
|
|
621
|
-
const drawRange = renderObject.drawRange;
|
|
622
|
-
const firstVertex = drawRange.start;
|
|
623
|
-
|
|
624
643
|
//
|
|
625
644
|
|
|
626
645
|
const lastObject = contextData.lastOcclusionObject;
|
|
@@ -651,7 +670,6 @@ class WebGLBackend extends Backend {
|
|
|
651
670
|
}
|
|
652
671
|
|
|
653
672
|
//
|
|
654
|
-
|
|
655
673
|
const renderer = this.bufferRenderer;
|
|
656
674
|
|
|
657
675
|
if ( object.isPoints ) renderer.mode = gl.POINTS;
|
|
@@ -675,33 +693,26 @@ class WebGLBackend extends Backend {
|
|
|
675
693
|
|
|
676
694
|
//
|
|
677
695
|
|
|
678
|
-
|
|
679
|
-
let
|
|
696
|
+
const { vertexCount, instanceCount } = drawParms;
|
|
697
|
+
let { firstVertex } = drawParms;
|
|
680
698
|
|
|
681
699
|
renderer.object = object;
|
|
682
700
|
|
|
683
701
|
if ( index !== null ) {
|
|
684
702
|
|
|
703
|
+
firstVertex *= index.array.BYTES_PER_ELEMENT;
|
|
704
|
+
|
|
685
705
|
const indexData = this.get( index );
|
|
686
|
-
const indexCount = ( drawRange.count !== Infinity ) ? drawRange.count : index.count;
|
|
687
706
|
|
|
688
707
|
renderer.index = index.count;
|
|
689
708
|
renderer.type = indexData.type;
|
|
690
709
|
|
|
691
|
-
count = indexCount;
|
|
692
|
-
|
|
693
710
|
} else {
|
|
694
711
|
|
|
695
712
|
renderer.index = 0;
|
|
696
713
|
|
|
697
|
-
const vertexCount = ( drawRange.count !== Infinity ) ? drawRange.count : geometry.attributes.position.count;
|
|
698
|
-
|
|
699
|
-
count = vertexCount;
|
|
700
|
-
|
|
701
714
|
}
|
|
702
715
|
|
|
703
|
-
const instanceCount = this.getInstanceCount( renderObject );
|
|
704
|
-
|
|
705
716
|
if ( object.isBatchedMesh ) {
|
|
706
717
|
|
|
707
718
|
if ( object._multiDrawInstances !== null ) {
|
|
@@ -720,11 +731,11 @@ class WebGLBackend extends Backend {
|
|
|
720
731
|
|
|
721
732
|
} else if ( instanceCount > 1 ) {
|
|
722
733
|
|
|
723
|
-
renderer.renderInstances( firstVertex,
|
|
734
|
+
renderer.renderInstances( firstVertex, vertexCount, instanceCount );
|
|
724
735
|
|
|
725
736
|
} else {
|
|
726
737
|
|
|
727
|
-
renderer.render( firstVertex,
|
|
738
|
+
renderer.render( firstVertex, vertexCount );
|
|
728
739
|
|
|
729
740
|
}
|
|
730
741
|
//
|
|
@@ -739,9 +750,9 @@ class WebGLBackend extends Backend {
|
|
|
739
750
|
|
|
740
751
|
}
|
|
741
752
|
|
|
742
|
-
getRenderCacheKey( renderObject ) {
|
|
753
|
+
getRenderCacheKey( /*renderObject*/ ) {
|
|
743
754
|
|
|
744
|
-
return
|
|
755
|
+
return '';
|
|
745
756
|
|
|
746
757
|
}
|
|
747
758
|
|
|
@@ -778,9 +789,9 @@ class WebGLBackend extends Backend {
|
|
|
778
789
|
|
|
779
790
|
}
|
|
780
791
|
|
|
781
|
-
copyTextureToBuffer( texture, x, y, width, height ) {
|
|
792
|
+
copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {
|
|
782
793
|
|
|
783
|
-
return this.textureUtils.copyTextureToBuffer( texture, x, y, width, height );
|
|
794
|
+
return this.textureUtils.copyTextureToBuffer( texture, x, y, width, height, faceIndex );
|
|
784
795
|
|
|
785
796
|
}
|
|
786
797
|
|
|
@@ -966,7 +977,7 @@ class WebGLBackend extends Backend {
|
|
|
966
977
|
|
|
967
978
|
_completeCompile( renderObject, pipeline ) {
|
|
968
979
|
|
|
969
|
-
const gl = this
|
|
980
|
+
const { state, gl } = this;
|
|
970
981
|
const pipelineData = this.get( pipeline );
|
|
971
982
|
const { programGPU, fragmentShader, vertexShader } = pipelineData;
|
|
972
983
|
|
|
@@ -976,7 +987,7 @@ class WebGLBackend extends Backend {
|
|
|
976
987
|
|
|
977
988
|
}
|
|
978
989
|
|
|
979
|
-
|
|
990
|
+
state.useProgram( programGPU );
|
|
980
991
|
|
|
981
992
|
// Bindings
|
|
982
993
|
|
|
@@ -994,7 +1005,7 @@ class WebGLBackend extends Backend {
|
|
|
994
1005
|
|
|
995
1006
|
createComputePipeline( computePipeline, bindings ) {
|
|
996
1007
|
|
|
997
|
-
const gl = this
|
|
1008
|
+
const { state, gl } = this;
|
|
998
1009
|
|
|
999
1010
|
// Program
|
|
1000
1011
|
|
|
@@ -1044,7 +1055,7 @@ class WebGLBackend extends Backend {
|
|
|
1044
1055
|
|
|
1045
1056
|
}
|
|
1046
1057
|
|
|
1047
|
-
|
|
1058
|
+
state.useProgram( programGPU );
|
|
1048
1059
|
|
|
1049
1060
|
// Bindings
|
|
1050
1061
|
|
|
@@ -1096,40 +1107,52 @@ class WebGLBackend extends Backend {
|
|
|
1096
1107
|
|
|
1097
1108
|
updateBindings( bindGroup, bindings ) {
|
|
1098
1109
|
|
|
1110
|
+
if ( ! bindGroup ) return;
|
|
1111
|
+
|
|
1099
1112
|
const { gl } = this;
|
|
1100
1113
|
|
|
1101
|
-
|
|
1102
|
-
|
|
1114
|
+
const bindingsData = this.get( bindings );
|
|
1115
|
+
const bindGroupData = this.get( bindGroup );
|
|
1103
1116
|
|
|
1104
|
-
|
|
1117
|
+
if ( bindingsData.textureIndex === undefined ) bindingsData.textureIndex = 0;
|
|
1105
1118
|
|
|
1106
|
-
|
|
1119
|
+
if ( bindGroupData.textureIndex === undefined ) {
|
|
1107
1120
|
|
|
1108
|
-
|
|
1121
|
+
bindGroupData.textureIndex = bindingsData.textureIndex;
|
|
1109
1122
|
|
|
1110
|
-
|
|
1111
|
-
const data = binding.buffer;
|
|
1123
|
+
} else {
|
|
1112
1124
|
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
gl.bindBufferBase( gl.UNIFORM_BUFFER, groupIndex, bufferGPU );
|
|
1125
|
+
// reset textureIndex to match previous mappimgs when rebuilt
|
|
1126
|
+
bindingsData.textureIndex = bindGroupData.textureIndex;
|
|
1116
1127
|
|
|
1117
|
-
|
|
1118
|
-
index: groupIndex ++,
|
|
1119
|
-
bufferGPU
|
|
1120
|
-
} );
|
|
1128
|
+
}
|
|
1121
1129
|
|
|
1122
|
-
|
|
1130
|
+
let i = 0;
|
|
1123
1131
|
|
|
1124
|
-
|
|
1132
|
+
for ( const binding of bindGroup.bindings ) {
|
|
1125
1133
|
|
|
1126
|
-
|
|
1127
|
-
index: textureIndex ++,
|
|
1128
|
-
textureGPU,
|
|
1129
|
-
glTextureType
|
|
1130
|
-
} );
|
|
1134
|
+
if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
|
|
1131
1135
|
|
|
1132
|
-
|
|
1136
|
+
const data = binding.buffer;
|
|
1137
|
+
const bufferGPU = gl.createBuffer();
|
|
1138
|
+
|
|
1139
|
+
gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
|
|
1140
|
+
gl.bufferData( gl.UNIFORM_BUFFER, data, gl.DYNAMIC_DRAW );
|
|
1141
|
+
|
|
1142
|
+
this.set( binding, {
|
|
1143
|
+
index: bindGroup.index * 2 + i ++,
|
|
1144
|
+
bufferGPU
|
|
1145
|
+
} );
|
|
1146
|
+
|
|
1147
|
+
} else if ( binding.isSampledTexture ) {
|
|
1148
|
+
|
|
1149
|
+
const { textureGPU, glTextureType } = this.get( binding.texture );
|
|
1150
|
+
|
|
1151
|
+
this.set( binding, {
|
|
1152
|
+
index: bindingsData.textureIndex ++,
|
|
1153
|
+
textureGPU,
|
|
1154
|
+
glTextureType
|
|
1155
|
+
} );
|
|
1133
1156
|
|
|
1134
1157
|
}
|
|
1135
1158
|
|
|
@@ -1218,7 +1241,6 @@ class WebGLBackend extends Backend {
|
|
|
1218
1241
|
|
|
1219
1242
|
}
|
|
1220
1243
|
|
|
1221
|
-
|
|
1222
1244
|
getMaxAnisotropy() {
|
|
1223
1245
|
|
|
1224
1246
|
return this.capabilities.getMaxAnisotropy();
|
|
@@ -1231,44 +1253,44 @@ class WebGLBackend extends Backend {
|
|
|
1231
1253
|
|
|
1232
1254
|
}
|
|
1233
1255
|
|
|
1234
|
-
copyFramebufferToTexture( texture, renderContext ) {
|
|
1256
|
+
copyFramebufferToTexture( texture, renderContext, rectangle ) {
|
|
1235
1257
|
|
|
1236
|
-
this.textureUtils.copyFramebufferToTexture( texture, renderContext );
|
|
1258
|
+
this.textureUtils.copyFramebufferToTexture( texture, renderContext, rectangle );
|
|
1237
1259
|
|
|
1238
1260
|
}
|
|
1239
1261
|
|
|
1240
|
-
_setFramebuffer(
|
|
1262
|
+
_setFramebuffer( descriptor ) {
|
|
1241
1263
|
|
|
1242
1264
|
const { gl, state } = this;
|
|
1243
1265
|
|
|
1244
1266
|
let currentFrameBuffer = null;
|
|
1245
1267
|
|
|
1246
|
-
if (
|
|
1268
|
+
if ( descriptor.textures !== null ) {
|
|
1247
1269
|
|
|
1248
|
-
const renderTarget =
|
|
1270
|
+
const renderTarget = descriptor.renderTarget;
|
|
1249
1271
|
const renderTargetContextData = this.get( renderTarget );
|
|
1250
1272
|
const { samples, depthBuffer, stencilBuffer } = renderTarget;
|
|
1251
|
-
|
|
1273
|
+
|
|
1252
1274
|
const isCube = renderTarget.isWebGLCubeRenderTarget === true;
|
|
1253
1275
|
|
|
1254
1276
|
let msaaFb = renderTargetContextData.msaaFrameBuffer;
|
|
1255
1277
|
let depthRenderbuffer = renderTargetContextData.depthRenderbuffer;
|
|
1256
1278
|
|
|
1279
|
+
const cacheKey = getCacheKey( descriptor );
|
|
1280
|
+
|
|
1257
1281
|
let fb;
|
|
1258
1282
|
|
|
1259
1283
|
if ( isCube ) {
|
|
1260
1284
|
|
|
1261
|
-
|
|
1285
|
+
renderTargetContextData.cubeFramebuffers || ( renderTargetContextData.cubeFramebuffers = {} );
|
|
1262
1286
|
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
}
|
|
1266
|
-
|
|
1267
|
-
fb = renderTargetContextData.cubeFramebuffers[ cubeFace ];
|
|
1287
|
+
fb = renderTargetContextData.cubeFramebuffers[ cacheKey ];
|
|
1268
1288
|
|
|
1269
1289
|
} else {
|
|
1270
1290
|
|
|
1271
|
-
|
|
1291
|
+
renderTargetContextData.framebuffers || ( renderTargetContextData.framebuffers = {} );
|
|
1292
|
+
|
|
1293
|
+
fb = renderTargetContextData.framebuffers[ cacheKey ];
|
|
1272
1294
|
|
|
1273
1295
|
}
|
|
1274
1296
|
|
|
@@ -1278,22 +1300,27 @@ class WebGLBackend extends Backend {
|
|
|
1278
1300
|
|
|
1279
1301
|
state.bindFramebuffer( gl.FRAMEBUFFER, fb );
|
|
1280
1302
|
|
|
1281
|
-
const textures =
|
|
1303
|
+
const textures = descriptor.textures;
|
|
1282
1304
|
|
|
1283
1305
|
if ( isCube ) {
|
|
1284
1306
|
|
|
1285
|
-
renderTargetContextData.cubeFramebuffers[
|
|
1307
|
+
renderTargetContextData.cubeFramebuffers[ cacheKey ] = fb;
|
|
1308
|
+
|
|
1286
1309
|
const { textureGPU } = this.get( textures[ 0 ] );
|
|
1287
1310
|
|
|
1311
|
+
const cubeFace = this.renderer._activeCubeFace;
|
|
1312
|
+
|
|
1288
1313
|
gl.framebufferTexture2D( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_CUBE_MAP_POSITIVE_X + cubeFace, textureGPU, 0 );
|
|
1289
1314
|
|
|
1290
1315
|
} else {
|
|
1291
1316
|
|
|
1317
|
+
renderTargetContextData.framebuffers[ cacheKey ] = fb;
|
|
1318
|
+
|
|
1292
1319
|
for ( let i = 0; i < textures.length; i ++ ) {
|
|
1293
1320
|
|
|
1294
1321
|
const texture = textures[ i ];
|
|
1295
1322
|
const textureData = this.get( texture );
|
|
1296
|
-
textureData.renderTarget =
|
|
1323
|
+
textureData.renderTarget = descriptor.renderTarget;
|
|
1297
1324
|
|
|
1298
1325
|
const attachment = gl.COLOR_ATTACHMENT0 + i;
|
|
1299
1326
|
|
|
@@ -1301,15 +1328,13 @@ class WebGLBackend extends Backend {
|
|
|
1301
1328
|
|
|
1302
1329
|
}
|
|
1303
1330
|
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
state.drawBuffers( renderContext, fb );
|
|
1331
|
+
state.drawBuffers( descriptor, fb );
|
|
1307
1332
|
|
|
1308
1333
|
}
|
|
1309
1334
|
|
|
1310
|
-
if (
|
|
1335
|
+
if ( descriptor.depthTexture !== null ) {
|
|
1311
1336
|
|
|
1312
|
-
const textureData = this.get(
|
|
1337
|
+
const textureData = this.get( descriptor.depthTexture );
|
|
1313
1338
|
const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
|
|
1314
1339
|
|
|
1315
1340
|
gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0 );
|
|
@@ -1330,11 +1355,10 @@ class WebGLBackend extends Backend {
|
|
|
1330
1355
|
|
|
1331
1356
|
const msaaRenderbuffers = [];
|
|
1332
1357
|
|
|
1333
|
-
const textures =
|
|
1358
|
+
const textures = descriptor.textures;
|
|
1334
1359
|
|
|
1335
1360
|
for ( let i = 0; i < textures.length; i ++ ) {
|
|
1336
1361
|
|
|
1337
|
-
|
|
1338
1362
|
msaaRenderbuffers[ i ] = gl.createRenderbuffer();
|
|
1339
1363
|
|
|
1340
1364
|
gl.bindRenderbuffer( gl.RENDERBUFFER, msaaRenderbuffers[ i ] );
|
|
@@ -1348,10 +1372,10 @@ class WebGLBackend extends Backend {
|
|
|
1348
1372
|
|
|
1349
1373
|
}
|
|
1350
1374
|
|
|
1351
|
-
const texture =
|
|
1375
|
+
const texture = descriptor.textures[ i ];
|
|
1352
1376
|
const textureData = this.get( texture );
|
|
1353
1377
|
|
|
1354
|
-
gl.renderbufferStorageMultisample( gl.RENDERBUFFER, samples, textureData.glInternalFormat,
|
|
1378
|
+
gl.renderbufferStorageMultisample( gl.RENDERBUFFER, samples, textureData.glInternalFormat, descriptor.width, descriptor.height );
|
|
1355
1379
|
gl.framebufferRenderbuffer( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, msaaRenderbuffers[ i ] );
|
|
1356
1380
|
|
|
1357
1381
|
|
|
@@ -1363,7 +1387,7 @@ class WebGLBackend extends Backend {
|
|
|
1363
1387
|
if ( depthRenderbuffer === undefined ) {
|
|
1364
1388
|
|
|
1365
1389
|
depthRenderbuffer = gl.createRenderbuffer();
|
|
1366
|
-
this.textureUtils.setupRenderBufferStorage( depthRenderbuffer,
|
|
1390
|
+
this.textureUtils.setupRenderBufferStorage( depthRenderbuffer, descriptor );
|
|
1367
1391
|
|
|
1368
1392
|
renderTargetContextData.depthRenderbuffer = depthRenderbuffer;
|
|
1369
1393
|
|
|
@@ -1510,7 +1534,7 @@ class WebGLBackend extends Backend {
|
|
|
1510
1534
|
|
|
1511
1535
|
}
|
|
1512
1536
|
|
|
1513
|
-
const gl = this
|
|
1537
|
+
const { gl } = this;
|
|
1514
1538
|
|
|
1515
1539
|
transformFeedbackGPU = gl.createTransformFeedback();
|
|
1516
1540
|
|
|
@@ -1575,7 +1599,8 @@ class WebGLBackend extends Backend {
|
|
|
1575
1599
|
|
|
1576
1600
|
if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
|
|
1577
1601
|
|
|
1578
|
-
|
|
1602
|
+
// TODO USE bindBufferRange to group multiple uniform buffers
|
|
1603
|
+
state.bindBufferBase( gl.UNIFORM_BUFFER, index, bindingData.bufferGPU );
|
|
1579
1604
|
|
|
1580
1605
|
} else if ( binding.isSampledTexture ) {
|
|
1581
1606
|
|