super-three 0.181.0 → 0.184.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +2 -3
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +29 -14
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -12,6 +12,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
12
12
|
|
|
13
13
|
const _imageDimensions = new Vector2();
|
|
14
14
|
const _videoTextures = new WeakMap();
|
|
15
|
+
const _htmlTextures = new Set();
|
|
15
16
|
let _canvas;
|
|
16
17
|
|
|
17
18
|
const _sources = new WeakMap(); // maps WebglTexture objects to instances of Source
|
|
@@ -28,9 +29,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
28
29
|
try {
|
|
29
30
|
|
|
30
31
|
useOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'
|
|
31
|
-
// eslint-disable-next-line compat/compat
|
|
32
32
|
&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;
|
|
33
33
|
|
|
34
|
+
|
|
34
35
|
} catch ( err ) {
|
|
35
36
|
|
|
36
37
|
// Ignore any errors
|
|
@@ -42,7 +43,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
42
43
|
// Use OffscreenCanvas when available. Specially needed in web workers
|
|
43
44
|
|
|
44
45
|
return useOffscreenCanvas ?
|
|
45
|
-
// eslint-disable-next-line compat/compat
|
|
46
46
|
new OffscreenCanvas( width, height ) : createElementNS( 'canvas' );
|
|
47
47
|
|
|
48
48
|
}
|
|
@@ -130,7 +130,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
130
130
|
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
function getInternalFormat( internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false ) {
|
|
133
|
+
function getInternalFormat( internalFormatName, glFormat, glType, normalized, colorSpace, forceLinearTransfer = false ) {
|
|
134
134
|
|
|
135
135
|
if ( internalFormatName !== null ) {
|
|
136
136
|
|
|
@@ -140,6 +140,20 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
140
140
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
+
let ext_texture_norm16;
|
|
144
|
+
|
|
145
|
+
if ( normalized ) {
|
|
146
|
+
|
|
147
|
+
ext_texture_norm16 = extensions.get( 'EXT_texture_norm16' );
|
|
148
|
+
|
|
149
|
+
if ( ! ext_texture_norm16 ) {
|
|
150
|
+
|
|
151
|
+
warn( 'WebGLRenderer: Unable to use normalized textures without EXT_texture_norm16 extension' );
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
|
|
143
157
|
let internalFormat = glFormat;
|
|
144
158
|
|
|
145
159
|
if ( glFormat === _gl.RED ) {
|
|
@@ -147,6 +161,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
147
161
|
if ( glType === _gl.FLOAT ) internalFormat = _gl.R32F;
|
|
148
162
|
if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.R16F;
|
|
149
163
|
if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8;
|
|
164
|
+
if ( glType === _gl.UNSIGNED_SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.R16_EXT;
|
|
165
|
+
if ( glType === _gl.SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.R16_SNORM_EXT;
|
|
150
166
|
|
|
151
167
|
}
|
|
152
168
|
|
|
@@ -166,6 +182,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
166
182
|
if ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;
|
|
167
183
|
if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RG16F;
|
|
168
184
|
if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8;
|
|
185
|
+
if ( glType === _gl.UNSIGNED_SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RG16_EXT;
|
|
186
|
+
if ( glType === _gl.SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RG16_SNORM_EXT;
|
|
169
187
|
|
|
170
188
|
}
|
|
171
189
|
|
|
@@ -204,6 +222,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
204
222
|
|
|
205
223
|
if ( glFormat === _gl.RGB ) {
|
|
206
224
|
|
|
225
|
+
if ( glType === _gl.UNSIGNED_SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RGB16_EXT;
|
|
226
|
+
if ( glType === _gl.SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RGB16_SNORM_EXT;
|
|
207
227
|
if ( glType === _gl.UNSIGNED_INT_5_9_9_9_REV ) internalFormat = _gl.RGB9_E5;
|
|
208
228
|
if ( glType === _gl.UNSIGNED_INT_10F_11F_11F_REV ) internalFormat = _gl.R11F_G11F_B10F;
|
|
209
229
|
|
|
@@ -216,6 +236,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
216
236
|
if ( glType === _gl.FLOAT ) internalFormat = _gl.RGBA32F;
|
|
217
237
|
if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RGBA16F;
|
|
218
238
|
if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = ( transfer === SRGBTransfer ) ? _gl.SRGB8_ALPHA8 : _gl.RGBA8;
|
|
239
|
+
if ( glType === _gl.UNSIGNED_SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RGBA16_EXT;
|
|
240
|
+
if ( glType === _gl.SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RGBA16_SNORM_EXT;
|
|
219
241
|
if ( glType === _gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = _gl.RGBA4;
|
|
220
242
|
if ( glType === _gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = _gl.RGB5_A1;
|
|
221
243
|
|
|
@@ -317,6 +339,12 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
317
339
|
|
|
318
340
|
}
|
|
319
341
|
|
|
342
|
+
if ( texture.isHTMLTexture ) {
|
|
343
|
+
|
|
344
|
+
_htmlTextures.delete( texture );
|
|
345
|
+
|
|
346
|
+
}
|
|
347
|
+
|
|
320
348
|
}
|
|
321
349
|
|
|
322
350
|
function onRenderTargetDispose( event ) {
|
|
@@ -473,6 +501,18 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
473
501
|
|
|
474
502
|
}
|
|
475
503
|
|
|
504
|
+
function getTextureUnits() {
|
|
505
|
+
|
|
506
|
+
return textureUnits;
|
|
507
|
+
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
function setTextureUnits( value ) {
|
|
511
|
+
|
|
512
|
+
textureUnits = value;
|
|
513
|
+
|
|
514
|
+
}
|
|
515
|
+
|
|
476
516
|
function allocateTextureUnit() {
|
|
477
517
|
|
|
478
518
|
const textureUnit = textureUnits;
|
|
@@ -590,7 +630,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
590
630
|
|
|
591
631
|
const textureProperties = properties.get( texture );
|
|
592
632
|
|
|
593
|
-
if ( texture.version > 0 && textureProperties.__version !== texture.version ) {
|
|
633
|
+
if ( texture.isCubeDepthTexture !== true && texture.version > 0 && textureProperties.__version !== texture.version ) {
|
|
594
634
|
|
|
595
635
|
uploadCubeTexture( textureProperties, texture, slot );
|
|
596
636
|
return;
|
|
@@ -827,11 +867,11 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
827
867
|
// Trim the array to only contain the merged ranges.
|
|
828
868
|
updateRanges.length = mergeIndex + 1;
|
|
829
869
|
|
|
830
|
-
const currentUnpackRowLen =
|
|
831
|
-
const currentUnpackSkipPixels =
|
|
832
|
-
const currentUnpackSkipRows =
|
|
870
|
+
const currentUnpackRowLen = state.getParameter( _gl.UNPACK_ROW_LENGTH );
|
|
871
|
+
const currentUnpackSkipPixels = state.getParameter( _gl.UNPACK_SKIP_PIXELS );
|
|
872
|
+
const currentUnpackSkipRows = state.getParameter( _gl.UNPACK_SKIP_ROWS );
|
|
833
873
|
|
|
834
|
-
|
|
874
|
+
state.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );
|
|
835
875
|
|
|
836
876
|
for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
|
|
837
877
|
|
|
@@ -847,8 +887,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
847
887
|
const width = pixelCount;
|
|
848
888
|
const height = 1;
|
|
849
889
|
|
|
850
|
-
|
|
851
|
-
|
|
890
|
+
state.pixelStorei( _gl.UNPACK_SKIP_PIXELS, x );
|
|
891
|
+
state.pixelStorei( _gl.UNPACK_SKIP_ROWS, y );
|
|
852
892
|
|
|
853
893
|
state.texSubImage2D( _gl.TEXTURE_2D, 0, x, y, width, height, glFormat, glType, image.data );
|
|
854
894
|
|
|
@@ -856,11 +896,12 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
856
896
|
|
|
857
897
|
texture.clearUpdateRanges();
|
|
858
898
|
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
899
|
+
state.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );
|
|
900
|
+
state.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );
|
|
901
|
+
state.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );
|
|
862
902
|
|
|
863
903
|
}
|
|
904
|
+
|
|
864
905
|
}
|
|
865
906
|
|
|
866
907
|
function setDeferTextureUploads( deferFlag ) {
|
|
@@ -918,14 +959,21 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
918
959
|
|
|
919
960
|
state.activeTexture( _gl.TEXTURE0 + slot );
|
|
920
961
|
|
|
921
|
-
const
|
|
922
|
-
const texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );
|
|
923
|
-
const unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;
|
|
962
|
+
const isImageBitmap = ( typeof ImageBitmap !== 'undefined' && texture.image instanceof ImageBitmap );
|
|
924
963
|
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
964
|
+
if ( isImageBitmap === false ) {
|
|
965
|
+
|
|
966
|
+
const workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );
|
|
967
|
+
const texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );
|
|
968
|
+
const unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;
|
|
969
|
+
|
|
970
|
+
state.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );
|
|
971
|
+
state.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
|
|
972
|
+
state.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );
|
|
973
|
+
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
state.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
|
|
929
977
|
|
|
930
978
|
let image = resizeImage( texture.image, false, capabilities.maxTextureSize );
|
|
931
979
|
image = verifyColorSpace( texture, image );
|
|
@@ -933,7 +981,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
933
981
|
const glFormat = utils.convert( texture.format, texture.colorSpace );
|
|
934
982
|
|
|
935
983
|
const glType = utils.convert( texture.type );
|
|
936
|
-
let glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, texture.isVideoTexture );
|
|
984
|
+
let glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace, texture.isVideoTexture );
|
|
937
985
|
|
|
938
986
|
setTextureParameters( textureType, texture );
|
|
939
987
|
|
|
@@ -1250,6 +1298,59 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1250
1298
|
|
|
1251
1299
|
}
|
|
1252
1300
|
|
|
1301
|
+
} else if ( texture.isHTMLTexture ) {
|
|
1302
|
+
|
|
1303
|
+
if ( 'texElementImage2D' in _gl ) {
|
|
1304
|
+
|
|
1305
|
+
const canvas = _gl.canvas;
|
|
1306
|
+
|
|
1307
|
+
// Ensure the canvas supports HTML-in-Canvas and the element is a child.
|
|
1308
|
+
if ( ! canvas.hasAttribute( 'layoutsubtree' ) ) {
|
|
1309
|
+
|
|
1310
|
+
canvas.setAttribute( 'layoutsubtree', 'true' );
|
|
1311
|
+
|
|
1312
|
+
}
|
|
1313
|
+
|
|
1314
|
+
if ( image.parentNode !== canvas ) {
|
|
1315
|
+
|
|
1316
|
+
canvas.appendChild( image );
|
|
1317
|
+
|
|
1318
|
+
// Register and set up a shared paint callback for all HTMLTextures.
|
|
1319
|
+
_htmlTextures.add( texture );
|
|
1320
|
+
|
|
1321
|
+
canvas.onpaint = ( event ) => {
|
|
1322
|
+
|
|
1323
|
+
const changed = event.changedElements;
|
|
1324
|
+
|
|
1325
|
+
for ( const t of _htmlTextures ) {
|
|
1326
|
+
|
|
1327
|
+
if ( changed.includes( t.image ) ) {
|
|
1328
|
+
|
|
1329
|
+
t.needsUpdate = true;
|
|
1330
|
+
|
|
1331
|
+
}
|
|
1332
|
+
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1335
|
+
};
|
|
1336
|
+
|
|
1337
|
+
canvas.requestPaint();
|
|
1338
|
+
return;
|
|
1339
|
+
|
|
1340
|
+
}
|
|
1341
|
+
|
|
1342
|
+
const level = 0;
|
|
1343
|
+
const internalFormat = _gl.RGBA;
|
|
1344
|
+
const srcFormat = _gl.RGBA;
|
|
1345
|
+
const srcType = _gl.UNSIGNED_BYTE;
|
|
1346
|
+
|
|
1347
|
+
_gl.texElementImage2D( _gl.TEXTURE_2D, level, internalFormat, srcFormat, srcType, image );
|
|
1348
|
+
_gl.texParameteri( _gl.TEXTURE_2D, _gl.TEXTURE_MIN_FILTER, _gl.LINEAR );
|
|
1349
|
+
_gl.texParameteri( _gl.TEXTURE_2D, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE );
|
|
1350
|
+
_gl.texParameteri( _gl.TEXTURE_2D, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE );
|
|
1351
|
+
|
|
1352
|
+
}
|
|
1353
|
+
|
|
1253
1354
|
} else {
|
|
1254
1355
|
|
|
1255
1356
|
// regular Texture (image, video, canvas)
|
|
@@ -1354,10 +1455,10 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1354
1455
|
const texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );
|
|
1355
1456
|
const unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;
|
|
1356
1457
|
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1458
|
+
state.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );
|
|
1459
|
+
state.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
|
|
1460
|
+
state.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
|
|
1461
|
+
state.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );
|
|
1361
1462
|
|
|
1362
1463
|
const isCompressed = ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture );
|
|
1363
1464
|
const isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );
|
|
@@ -1383,7 +1484,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1383
1484
|
const image = cubeImage[ 0 ],
|
|
1384
1485
|
glFormat = utils.convert( texture.format, texture.colorSpace ),
|
|
1385
1486
|
glType = utils.convert( texture.type ),
|
|
1386
|
-
glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );
|
|
1487
|
+
glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace );
|
|
1387
1488
|
|
|
1388
1489
|
const useTexStorage = ( texture.isVideoTexture !== true );
|
|
1389
1490
|
const allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );
|
|
@@ -1579,7 +1680,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1579
1680
|
|
|
1580
1681
|
const glFormat = utils.convert( texture.format, texture.colorSpace );
|
|
1581
1682
|
const glType = utils.convert( texture.type );
|
|
1582
|
-
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );
|
|
1683
|
+
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace );
|
|
1583
1684
|
const renderTargetProperties = properties.get( renderTarget );
|
|
1584
1685
|
const textureProperties = properties.get( texture );
|
|
1585
1686
|
|
|
@@ -1641,7 +1742,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1641
1742
|
}
|
|
1642
1743
|
|
|
1643
1744
|
// Setup storage for internal depth/stencil buffers and bind to correct framebuffer
|
|
1644
|
-
function setupRenderBufferStorage( renderbuffer, renderTarget,
|
|
1745
|
+
function setupRenderBufferStorage( renderbuffer, renderTarget, useMultisample ) {
|
|
1645
1746
|
|
|
1646
1747
|
_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );
|
|
1647
1748
|
|
|
@@ -1706,15 +1807,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1706
1807
|
const glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
1707
1808
|
|
|
1708
1809
|
// set up the attachment
|
|
1709
|
-
|
|
1710
|
-
const isUseMultisampledRTT = useMultisampledRTT( renderTarget );
|
|
1711
|
-
if ( isUseMultisampledRTT ) {
|
|
1810
|
+
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1712
1811
|
|
|
1713
|
-
multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER,
|
|
1812
|
+
multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1714
1813
|
|
|
1715
|
-
} else if (
|
|
1814
|
+
} else if ( useMultisample ) {
|
|
1716
1815
|
|
|
1717
|
-
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER,
|
|
1816
|
+
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1718
1817
|
|
|
1719
1818
|
} else {
|
|
1720
1819
|
|
|
@@ -1734,16 +1833,15 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1734
1833
|
|
|
1735
1834
|
const glFormat = utils.convert( texture.format, texture.colorSpace );
|
|
1736
1835
|
const glType = utils.convert( texture.type );
|
|
1737
|
-
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );
|
|
1738
|
-
const samples = getRenderTargetSamples( renderTarget );
|
|
1836
|
+
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace );
|
|
1739
1837
|
|
|
1740
|
-
if (
|
|
1838
|
+
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1741
1839
|
|
|
1742
|
-
|
|
1840
|
+
multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1743
1841
|
|
|
1744
|
-
} else if (
|
|
1842
|
+
} else if ( useMultisample ) {
|
|
1745
1843
|
|
|
1746
|
-
|
|
1844
|
+
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1747
1845
|
|
|
1748
1846
|
} else {
|
|
1749
1847
|
|
|
@@ -1760,10 +1858,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1760
1858
|
}
|
|
1761
1859
|
|
|
1762
1860
|
// Setup resources for a Depth Texture for a FBO (needs an extension)
|
|
1763
|
-
function setupDepthTexture( framebuffer, renderTarget ) {
|
|
1861
|
+
function setupDepthTexture( framebuffer, renderTarget, cubeFace ) {
|
|
1764
1862
|
|
|
1765
|
-
const isCube = ( renderTarget
|
|
1766
|
-
if ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );
|
|
1863
|
+
const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
|
|
1767
1864
|
|
|
1768
1865
|
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
1769
1866
|
|
|
@@ -1787,7 +1884,49 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1787
1884
|
|
|
1788
1885
|
}
|
|
1789
1886
|
|
|
1790
|
-
if (
|
|
1887
|
+
if ( isCube ) {
|
|
1888
|
+
|
|
1889
|
+
// For cube depth textures, initialize and bind without uploading image data
|
|
1890
|
+
if ( textureProperties.__webglInit === undefined ) {
|
|
1891
|
+
|
|
1892
|
+
textureProperties.__webglInit = true;
|
|
1893
|
+
renderTarget.depthTexture.addEventListener( 'dispose', onTextureDispose );
|
|
1894
|
+
|
|
1895
|
+
}
|
|
1896
|
+
|
|
1897
|
+
// Only create and allocate storage once
|
|
1898
|
+
if ( textureProperties.__webglTexture === undefined ) {
|
|
1899
|
+
|
|
1900
|
+
textureProperties.__webglTexture = _gl.createTexture();
|
|
1901
|
+
|
|
1902
|
+
state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );
|
|
1903
|
+
setTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.depthTexture );
|
|
1904
|
+
|
|
1905
|
+
// Allocate storage for all 6 faces with correct depth texture format
|
|
1906
|
+
const glFormat = utils.convert( renderTarget.depthTexture.format );
|
|
1907
|
+
const glType = utils.convert( renderTarget.depthTexture.type );
|
|
1908
|
+
|
|
1909
|
+
// Use proper internal format for depth textures
|
|
1910
|
+
let glInternalFormat;
|
|
1911
|
+
if ( renderTarget.depthTexture.format === DepthFormat ) {
|
|
1912
|
+
|
|
1913
|
+
glInternalFormat = _gl.DEPTH_COMPONENT24;
|
|
1914
|
+
|
|
1915
|
+
} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {
|
|
1916
|
+
|
|
1917
|
+
glInternalFormat = _gl.DEPTH24_STENCIL8;
|
|
1918
|
+
|
|
1919
|
+
}
|
|
1920
|
+
|
|
1921
|
+
for ( let i = 0; i < 6; i ++ ) {
|
|
1922
|
+
|
|
1923
|
+
_gl.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );
|
|
1924
|
+
|
|
1925
|
+
}
|
|
1926
|
+
|
|
1927
|
+
}
|
|
1928
|
+
|
|
1929
|
+
} else if ( renderTarget.depthTexture.image.depth != 1 ) {
|
|
1791
1930
|
|
|
1792
1931
|
setTexture2DArray( renderTarget.depthTexture, 0 );
|
|
1793
1932
|
|
|
@@ -1837,15 +1976,18 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1837
1976
|
|
|
1838
1977
|
} else {
|
|
1839
1978
|
|
|
1979
|
+
const glTextureType = isCube ? _gl.TEXTURE_CUBE_MAP_POSITIVE_X + cubeFace : _gl.TEXTURE_2D;
|
|
1980
|
+
const glAttachmentType = renderTarget.depthTexture.format === DepthStencilFormat ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
1981
|
+
|
|
1840
1982
|
if ( renderTarget.depthTexture.format === DepthFormat ) {
|
|
1841
1983
|
|
|
1842
1984
|
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1843
1985
|
|
|
1844
|
-
multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER,
|
|
1986
|
+
multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, glAttachmentType, glTextureType, webglDepthTexture, 0, samples );
|
|
1845
1987
|
|
|
1846
1988
|
} else {
|
|
1847
1989
|
|
|
1848
|
-
_gl.framebufferTexture2D( _gl.FRAMEBUFFER,
|
|
1990
|
+
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, glAttachmentType, glTextureType, webglDepthTexture, 0 );
|
|
1849
1991
|
|
|
1850
1992
|
}
|
|
1851
1993
|
|
|
@@ -1853,11 +1995,11 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1853
1995
|
|
|
1854
1996
|
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1855
1997
|
|
|
1856
|
-
multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER,
|
|
1998
|
+
multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, glAttachmentType, glTextureType, webglDepthTexture, 0, samples );
|
|
1857
1999
|
|
|
1858
2000
|
} else {
|
|
1859
2001
|
|
|
1860
|
-
_gl.framebufferTexture2D( _gl.FRAMEBUFFER,
|
|
2002
|
+
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, glAttachmentType, glTextureType, webglDepthTexture, 0 );
|
|
1861
2003
|
|
|
1862
2004
|
}
|
|
1863
2005
|
|
|
@@ -1910,17 +2052,28 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1910
2052
|
|
|
1911
2053
|
if ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) {
|
|
1912
2054
|
|
|
1913
|
-
if ( isCube )
|
|
2055
|
+
if ( isCube ) {
|
|
1914
2056
|
|
|
1915
|
-
|
|
2057
|
+
// For cube render targets with depth texture, setup each face
|
|
2058
|
+
for ( let i = 0; i < 6; i ++ ) {
|
|
1916
2059
|
|
|
1917
|
-
|
|
2060
|
+
setupDepthTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, i );
|
|
1918
2061
|
|
|
1919
|
-
|
|
2062
|
+
}
|
|
1920
2063
|
|
|
1921
2064
|
} else {
|
|
1922
2065
|
|
|
1923
|
-
|
|
2066
|
+
const mipmaps = renderTarget.texture.mipmaps;
|
|
2067
|
+
|
|
2068
|
+
if ( mipmaps && mipmaps.length > 0 ) {
|
|
2069
|
+
|
|
2070
|
+
setupDepthTexture( renderTargetProperties.__webglFramebuffer[ 0 ], renderTarget, 0 );
|
|
2071
|
+
|
|
2072
|
+
} else {
|
|
2073
|
+
|
|
2074
|
+
setupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget, 0 );
|
|
2075
|
+
|
|
2076
|
+
}
|
|
1924
2077
|
|
|
1925
2078
|
}
|
|
1926
2079
|
|
|
@@ -2113,7 +2266,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
2113
2266
|
|
|
2114
2267
|
const glFormat = utils.convert( texture.format, texture.colorSpace );
|
|
2115
2268
|
const glType = utils.convert( texture.type );
|
|
2116
|
-
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, renderTarget.isXRRenderTarget === true );
|
|
2269
|
+
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace, renderTarget.isXRRenderTarget === true );
|
|
2117
2270
|
const samples = getRenderTargetSamples( renderTarget );
|
|
2118
2271
|
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
2119
2272
|
|
|
@@ -2495,6 +2648,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
2495
2648
|
|
|
2496
2649
|
this.allocateTextureUnit = allocateTextureUnit;
|
|
2497
2650
|
this.resetTextureUnits = resetTextureUnits;
|
|
2651
|
+
this.getTextureUnits = getTextureUnits;
|
|
2652
|
+
this.setTextureUnits = setTextureUnits;
|
|
2498
2653
|
|
|
2499
2654
|
this.setTexture2D = setTexture2D;
|
|
2500
2655
|
this.setTexture2DArray = setTexture2DArray;
|
|
@@ -2512,6 +2667,12 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
2512
2667
|
this.runDeferredUploads = runDeferredUploads;
|
|
2513
2668
|
this.setDeferTextureUploads = setDeferTextureUploads;
|
|
2514
2669
|
|
|
2670
|
+
this.isReversedDepthBuffer = function () {
|
|
2671
|
+
|
|
2672
|
+
return state.buffers.depth.getReversed();
|
|
2673
|
+
|
|
2674
|
+
};
|
|
2675
|
+
|
|
2515
2676
|
}
|
|
2516
2677
|
|
|
2517
2678
|
export { WebGLTextures };
|
|
@@ -46,7 +46,7 @@ import { Texture } from '../../textures/Texture.js';
|
|
|
46
46
|
import { DataArrayTexture } from '../../textures/DataArrayTexture.js';
|
|
47
47
|
import { Data3DTexture } from '../../textures/Data3DTexture.js';
|
|
48
48
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
49
|
-
import { LessEqualCompare } from '../../constants.js';
|
|
49
|
+
import { LessEqualCompare, GreaterEqualCompare } from '../../constants.js';
|
|
50
50
|
|
|
51
51
|
const emptyTexture = /*@__PURE__*/ new Texture();
|
|
52
52
|
|
|
@@ -572,7 +572,7 @@ function setValueT1( gl, v, textures ) {
|
|
|
572
572
|
|
|
573
573
|
if ( this.type === gl.SAMPLER_2D_SHADOW ) {
|
|
574
574
|
|
|
575
|
-
emptyShadowTexture.compareFunction = LessEqualCompare;
|
|
575
|
+
emptyShadowTexture.compareFunction = textures.isReversedDepthBuffer() ? GreaterEqualCompare : LessEqualCompare;
|
|
576
576
|
emptyTexture2D = emptyShadowTexture;
|
|
577
577
|
|
|
578
578
|
} else {
|
|
@@ -822,9 +822,21 @@ function setValueT1Array( gl, v, textures ) {
|
|
|
822
822
|
|
|
823
823
|
}
|
|
824
824
|
|
|
825
|
+
let emptyTexture2D;
|
|
826
|
+
|
|
827
|
+
if ( this.type === gl.SAMPLER_2D_SHADOW ) {
|
|
828
|
+
|
|
829
|
+
emptyTexture2D = emptyShadowTexture;
|
|
830
|
+
|
|
831
|
+
} else {
|
|
832
|
+
|
|
833
|
+
emptyTexture2D = emptyTexture;
|
|
834
|
+
|
|
835
|
+
}
|
|
836
|
+
|
|
825
837
|
for ( let i = 0; i !== n; ++ i ) {
|
|
826
838
|
|
|
827
|
-
textures.setTexture2D( v[ i ] ||
|
|
839
|
+
textures.setTexture2D( v[ i ] || emptyTexture2D, units[ i ] );
|
|
828
840
|
|
|
829
841
|
}
|
|
830
842
|
|
|
@@ -1110,6 +1122,31 @@ class WebGLUniforms {
|
|
|
1110
1122
|
|
|
1111
1123
|
}
|
|
1112
1124
|
|
|
1125
|
+
// Sort uniforms to prioritize shadow samplers first (for optimal texture unit allocation)
|
|
1126
|
+
|
|
1127
|
+
const shadowSamplers = [];
|
|
1128
|
+
const otherUniforms = [];
|
|
1129
|
+
|
|
1130
|
+
for ( const u of this.seq ) {
|
|
1131
|
+
|
|
1132
|
+
if ( u.type === gl.SAMPLER_2D_SHADOW || u.type === gl.SAMPLER_CUBE_SHADOW || u.type === gl.SAMPLER_2D_ARRAY_SHADOW ) {
|
|
1133
|
+
|
|
1134
|
+
shadowSamplers.push( u );
|
|
1135
|
+
|
|
1136
|
+
} else {
|
|
1137
|
+
|
|
1138
|
+
otherUniforms.push( u );
|
|
1139
|
+
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
if ( shadowSamplers.length > 0 ) {
|
|
1145
|
+
|
|
1146
|
+
this.seq = shadowSamplers.concat( otherUniforms );
|
|
1147
|
+
|
|
1148
|
+
}
|
|
1149
|
+
|
|
1113
1150
|
}
|
|
1114
1151
|
|
|
1115
1152
|
setValue( gl, name, value, textures ) {
|
|
@@ -141,6 +141,11 @@ function WebGLUniformsGroups( gl, info, capabilities, state ) {
|
|
|
141
141
|
uniform.__data[ 10 ] = value.elements[ 8 ];
|
|
142
142
|
uniform.__data[ 11 ] = 0;
|
|
143
143
|
|
|
144
|
+
} else if ( ArrayBuffer.isView( value ) ) {
|
|
145
|
+
|
|
146
|
+
// copy the buffer data using "set"
|
|
147
|
+
uniform.__data.set( new value.constructor( value.buffer, value.byteOffset, uniform.__data.length ) );
|
|
148
|
+
|
|
144
149
|
} else {
|
|
145
150
|
|
|
146
151
|
value.toArray( uniform.__data, arrayOffset );
|
|
@@ -176,6 +181,10 @@ function WebGLUniformsGroups( gl, info, capabilities, state ) {
|
|
|
176
181
|
|
|
177
182
|
cache[ indexString ] = value;
|
|
178
183
|
|
|
184
|
+
} else if ( ArrayBuffer.isView( value ) ) {
|
|
185
|
+
|
|
186
|
+
cache[ indexString ] = value.slice();
|
|
187
|
+
|
|
179
188
|
} else {
|
|
180
189
|
|
|
181
190
|
cache[ indexString ] = value.clone();
|
|
@@ -199,6 +208,11 @@ function WebGLUniformsGroups( gl, info, capabilities, state ) {
|
|
|
199
208
|
|
|
200
209
|
}
|
|
201
210
|
|
|
211
|
+
} else if ( ArrayBuffer.isView( value ) ) {
|
|
212
|
+
|
|
213
|
+
// always update the array buffers
|
|
214
|
+
return true;
|
|
215
|
+
|
|
202
216
|
} else {
|
|
203
217
|
|
|
204
218
|
if ( cachedObject.equals( value ) === false ) {
|
|
@@ -339,6 +353,11 @@ function WebGLUniformsGroups( gl, info, capabilities, state ) {
|
|
|
339
353
|
|
|
340
354
|
warn( 'WebGLRenderer: Texture samplers can not be part of an uniforms group.' );
|
|
341
355
|
|
|
356
|
+
} else if ( ArrayBuffer.isView( value ) ) {
|
|
357
|
+
|
|
358
|
+
info.boundary = 16;
|
|
359
|
+
info.storage = value.byteLength;
|
|
360
|
+
|
|
342
361
|
} else {
|
|
343
362
|
|
|
344
363
|
warn( 'WebGLRenderer: Unsupported uniform value type.', value );
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, RGB_S3TC_DXT1_Format, DepthFormat, DepthStencilFormat, RedFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, NoColorSpace, SRGBTransfer, UnsignedInt5999Type, RGBFormat, UnsignedInt101111Type } from '../../constants.js';
|
|
1
|
+
import { RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, R11_EAC_Format, SIGNED_R11_EAC_Format, RG11_EAC_Format, SIGNED_RG11_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, RGB_S3TC_DXT1_Format, DepthFormat, DepthStencilFormat, RedFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, NoColorSpace, SRGBTransfer, UnsignedInt5999Type, RGBFormat, UnsignedInt101111Type } from '../../constants.js';
|
|
2
2
|
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
3
3
|
|
|
4
4
|
function WebGLUtils( gl, extensions ) {
|
|
@@ -102,7 +102,7 @@ function WebGLUtils( gl, extensions ) {
|
|
|
102
102
|
|
|
103
103
|
// ETC
|
|
104
104
|
|
|
105
|
-
if ( p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {
|
|
105
|
+
if ( p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format || p === R11_EAC_Format || p === SIGNED_R11_EAC_Format || p === RG11_EAC_Format || p === SIGNED_RG11_EAC_Format ) {
|
|
106
106
|
|
|
107
107
|
extension = extensions.get( 'WEBGL_compressed_texture_etc' );
|
|
108
108
|
|
|
@@ -110,6 +110,10 @@ function WebGLUtils( gl, extensions ) {
|
|
|
110
110
|
|
|
111
111
|
if ( p === RGB_ETC1_Format || p === RGB_ETC2_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;
|
|
112
112
|
if ( p === RGBA_ETC2_EAC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;
|
|
113
|
+
if ( p === R11_EAC_Format ) return extension.COMPRESSED_R11_EAC;
|
|
114
|
+
if ( p === SIGNED_R11_EAC_Format ) return extension.COMPRESSED_SIGNED_R11_EAC;
|
|
115
|
+
if ( p === RG11_EAC_Format ) return extension.COMPRESSED_RG11_EAC;
|
|
116
|
+
if ( p === SIGNED_RG11_EAC_Format ) return extension.COMPRESSED_SIGNED_RG11_EAC;
|
|
113
117
|
|
|
114
118
|
} else {
|
|
115
119
|
|