super-three 0.136.1 → 0.144.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/README.md +31 -33
- package/build/three.cjs +36413 -0
- package/build/three.js +5108 -5809
- package/build/three.min.js +2 -2
- package/build/three.module.js +7877 -8586
- package/examples/js/animation/CCDIKSolver.js +3 -2
- package/examples/js/animation/MMDAnimationHelper.js +3 -1
- package/examples/js/animation/MMDPhysics.js +3 -18
- package/examples/js/controls/ArcballControls.js +19 -4
- package/examples/js/controls/FirstPersonControls.js +0 -7
- package/examples/js/controls/FlyControls.js +0 -8
- package/examples/js/controls/OrbitControls.js +0 -4
- package/examples/js/controls/PointerLockControls.js +3 -10
- package/examples/js/controls/TrackballControls.js +1 -6
- package/examples/js/controls/TransformControls.js +25 -22
- package/examples/js/csm/CSMFrustum.js +1 -1
- package/examples/js/csm/CSMShader.js +51 -35
- package/examples/js/curves/CurveExtras.js +14 -18
- package/examples/js/effects/AnaglyphEffect.js +9 -6
- package/examples/js/effects/AsciiEffect.js +10 -29
- package/examples/js/effects/OutlineEffect.js +4 -24
- package/examples/js/effects/ParallaxBarrierEffect.js +2 -2
- package/examples/js/effects/PeppersGhostEffect.js +2 -2
- package/examples/js/effects/StereoEffect.js +2 -2
- package/examples/js/environments/RoomEnvironment.js +22 -0
- package/examples/js/exporters/ColladaExporter.js +33 -20
- package/examples/js/exporters/DRACOExporter.js +0 -12
- package/examples/js/exporters/EXRExporter.js +458 -0
- package/examples/js/exporters/GLTFExporter.js +246 -119
- package/examples/js/exporters/OBJExporter.js +14 -41
- package/examples/js/exporters/PLYExporter.js +27 -44
- package/examples/js/exporters/STLExporter.js +0 -7
- package/examples/js/exporters/USDZExporter.js +19 -0
- package/examples/js/geometries/ConvexGeometry.js +1 -1
- package/examples/js/geometries/DecalGeometry.js +0 -7
- package/examples/js/geometries/LightningStrike.js +2 -2
- package/examples/js/geometries/ParametricGeometries.js +3 -3
- package/examples/js/geometries/ParametricGeometry.js +1 -8
- package/examples/js/geometries/TextGeometry.js +12 -10
- package/examples/js/helpers/OctreeHelper.js +74 -0
- package/examples/js/helpers/VertexNormalsHelper.js +4 -23
- package/examples/js/helpers/VertexTangentsHelper.js +3 -13
- package/examples/js/helpers/ViewHelper.js +266 -0
- package/examples/js/interactive/HTMLMesh.js +249 -42
- package/examples/js/interactive/SelectionHelper.js +3 -1
- package/examples/js/libs/ktx-parse.umd.js +1 -0
- package/examples/js/libs/meshopt_decoder.js +98 -32
- package/examples/js/libs/opentype.min.js +1 -118
- package/examples/js/lines/Line2.js +1 -2
- package/examples/js/lines/LineGeometry.js +10 -21
- package/examples/js/lines/LineMaterial.js +2 -3
- package/examples/js/lines/LineSegments2.js +214 -140
- package/examples/js/lines/LineSegmentsGeometry.js +3 -14
- package/examples/js/lines/Wireframe.js +2 -3
- package/examples/js/lines/WireframeGeometry2.js +1 -2
- package/examples/js/loaders/3MFLoader.js +21 -17
- package/examples/js/loaders/AMFLoader.js +1 -1
- package/examples/js/loaders/ColladaLoader.js +34 -12
- package/examples/js/loaders/DDSLoader.js +23 -30
- package/examples/js/loaders/DRACOLoader.js +2 -25
- package/examples/js/loaders/EXRLoader.js +279 -276
- package/examples/js/loaders/FBXLoader.js +21 -3
- package/examples/js/loaders/FontLoader.js +4 -18
- package/examples/js/loaders/GCodeLoader.js +0 -1
- package/examples/js/loaders/GLTFLoader.js +300 -95
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -11
- package/examples/js/loaders/KMZLoader.js +1 -1
- package/examples/js/loaders/LDrawLoader.js +653 -480
- package/examples/js/loaders/LUT3dlLoader.js +1 -1
- package/examples/js/loaders/LUTCubeLoader.js +1 -1
- package/examples/js/loaders/LWOLoader.js +4 -2
- package/examples/js/loaders/LogLuvLoader.js +1 -2
- package/examples/js/loaders/MD2Loader.js +5 -5
- package/examples/js/loaders/MMDLoader.js +18 -4
- package/examples/js/loaders/MTLLoader.js +10 -3
- package/examples/js/loaders/NRRDLoader.js +1 -1
- package/examples/js/loaders/OBJLoader.js +16 -18
- package/examples/js/loaders/PCDLoader.js +81 -27
- package/examples/js/loaders/PDBLoader.js +11 -11
- package/examples/js/loaders/PLYLoader.js +8 -4
- package/examples/js/loaders/RGBELoader.js +3 -11
- package/examples/js/loaders/RGBMLoader.js +12 -15
- package/examples/js/loaders/STLLoader.js +1 -1
- package/examples/js/loaders/SVGLoader.js +23 -14
- package/examples/js/loaders/TIFFLoader.js +31 -0
- package/examples/js/loaders/VOXLoader.js +3 -4
- package/examples/js/loaders/VRMLLoader.js +33 -24
- package/examples/js/loaders/VTKLoader.js +261 -296
- package/examples/js/loaders/lwo/LWO2Parser.js +12 -11
- package/examples/js/loaders/lwo/LWO3Parser.js +12 -11
- package/examples/js/materials/MeshGouraudMaterial.js +385 -0
- package/examples/js/math/ColorConverter.js +0 -50
- package/examples/js/math/ConvexHull.js +6 -15
- package/examples/js/math/Lut.js +27 -26
- package/examples/js/misc/GPUComputationRenderer.js +23 -0
- package/examples/js/misc/MorphAnimMesh.js +2 -2
- package/examples/js/misc/ProgressiveLightMap.js +1 -1
- package/examples/js/misc/Volume.js +233 -234
- package/examples/js/misc/VolumeSlice.js +108 -106
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -13
- package/examples/js/modifiers/SimplifyModifier.js +2 -19
- package/examples/js/modifiers/TessellateModifier.js +0 -7
- package/examples/js/objects/GroundProjectedEnv.js +193 -0
- package/examples/js/objects/Lensflare.js +4 -4
- package/examples/js/objects/LightningStorm.js +4 -5
- package/examples/js/objects/MarchingCubes.js +6 -11
- package/examples/js/objects/Reflector.js +18 -5
- package/examples/js/objects/ReflectorForSSRPass.js +4 -5
- package/examples/js/objects/Refractor.js +19 -7
- package/examples/js/objects/ShadowMesh.js +6 -3
- package/examples/js/objects/Sky.js +1 -1
- package/examples/js/objects/Water.js +1 -2
- package/examples/js/objects/Water2.js +1 -1
- package/examples/js/postprocessing/AdaptiveToneMappingPass.js +6 -10
- package/examples/js/postprocessing/AfterimagePass.js +2 -6
- package/examples/js/postprocessing/BloomPass.js +50 -19
- package/examples/js/postprocessing/DotScreenPass.js +1 -1
- package/examples/js/postprocessing/EffectComposer.js +1 -6
- package/examples/js/postprocessing/LUTPass.js +2 -2
- package/examples/js/postprocessing/OutlinePass.js +13 -20
- package/examples/js/postprocessing/SAOPass.js +2 -7
- package/examples/js/postprocessing/SSAARenderPass.js +1 -6
- package/examples/js/postprocessing/SSRPass.js +3 -8
- package/examples/js/postprocessing/TAARenderPass.js +4 -4
- package/examples/js/postprocessing/UnrealBloomPass.js +3 -12
- package/examples/js/renderers/CSS2DRenderer.js +22 -21
- package/examples/js/renderers/CSS3DRenderer.js +42 -38
- package/examples/js/renderers/Projector.js +99 -147
- package/examples/js/renderers/SVGRenderer.js +3 -4
- package/examples/js/shaders/BlendShader.js +2 -1
- package/examples/js/shaders/CopyShader.js +4 -3
- package/examples/js/shaders/FXAAShader.js +239 -1069
- package/examples/js/shaders/FreiChenShader.js +1 -1
- package/examples/js/shaders/HorizontalBlurShader.js +1 -1
- package/examples/js/shaders/HorizontalTiltShiftShader.js +1 -1
- package/examples/js/shaders/LuminosityShader.js +1 -1
- package/examples/js/shaders/MMDToonShader.js +6 -2
- package/examples/js/shaders/SSRShader.js +3 -3
- package/examples/js/shaders/ToneMapShader.js +2 -2
- package/examples/js/utils/BufferGeometryUtils.js +282 -22
- package/examples/js/utils/GPUStatsPanel.js +1 -1
- package/examples/js/utils/GeometryUtils.js +2 -18
- package/examples/js/utils/LDrawUtils.js +182 -0
- package/examples/js/utils/PackedPhongMaterial.js +1 -1
- package/examples/js/utils/SceneUtils.js +57 -14
- package/examples/js/utils/SkeletonUtils.js +1 -1
- package/examples/js/utils/UVsDebug.js +23 -33
- package/examples/jsm/animation/CCDIKSolver.js +3 -9
- package/examples/jsm/animation/MMDPhysics.js +4 -23
- package/examples/jsm/capabilities/WebGPU.js +6 -0
- package/examples/jsm/controls/ArcballControls.js +19 -2
- package/examples/jsm/controls/FirstPersonControls.js +0 -7
- package/examples/jsm/controls/FlyControls.js +0 -7
- package/examples/jsm/controls/OrbitControls.js +0 -5
- package/examples/jsm/controls/PointerLockControls.js +4 -9
- package/examples/jsm/controls/TrackballControls.js +1 -7
- package/examples/jsm/controls/TransformControls.js +24 -22
- package/examples/jsm/csm/CSMFrustum.js +1 -1
- package/examples/jsm/csm/CSMShader.js +51 -35
- package/examples/jsm/curves/CurveExtras.js +15 -17
- package/examples/jsm/effects/AnaglyphEffect.js +6 -6
- package/examples/jsm/effects/AsciiEffect.js +9 -22
- package/examples/jsm/effects/OutlineEffect.js +4 -25
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
- package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
- package/examples/jsm/effects/StereoEffect.js +2 -2
- package/examples/jsm/environments/RoomEnvironment.js +23 -0
- package/examples/jsm/exporters/ColladaExporter.js +35 -19
- package/examples/jsm/exporters/DRACOExporter.js +0 -13
- package/examples/jsm/exporters/EXRExporter.js +507 -0
- package/examples/jsm/exporters/GLTFExporter.js +276 -104
- package/examples/jsm/exporters/KTX2Exporter.js +281 -0
- package/examples/jsm/exporters/OBJExporter.js +11 -36
- package/examples/jsm/exporters/PLYExporter.js +37 -43
- package/examples/jsm/exporters/STLExporter.js +1 -9
- package/examples/jsm/exporters/USDZExporter.js +26 -3
- package/examples/jsm/geometries/ConvexGeometry.js +1 -1
- package/examples/jsm/geometries/DecalGeometry.js +0 -7
- package/examples/jsm/geometries/LightningStrike.js +2 -2
- package/examples/jsm/geometries/ParametricGeometries.js +3 -3
- package/examples/jsm/geometries/ParametricGeometry.js +0 -6
- package/examples/jsm/geometries/TextGeometry.js +13 -13
- package/examples/jsm/helpers/OctreeHelper.js +58 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +4 -25
- package/examples/jsm/helpers/VertexTangentsHelper.js +3 -15
- package/examples/jsm/helpers/ViewHelper.js +295 -0
- package/examples/jsm/interactive/HTMLMesh.js +268 -36
- package/examples/jsm/interactive/SelectionHelper.js +6 -4
- package/examples/jsm/libs/flow.module.js +947 -183
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
- package/examples/jsm/libs/mikktspace.module.js +128 -0
- package/examples/jsm/libs/opentype.module.js +14568 -0
- package/examples/jsm/libs/utif.module.js +1579 -0
- package/examples/jsm/libs/zstddec.module.js +1 -0
- package/examples/jsm/lines/Line2.js +2 -2
- package/examples/jsm/lines/LineGeometry.js +11 -19
- package/examples/jsm/lines/LineMaterial.js +3 -3
- package/examples/jsm/lines/LineSegments2.js +210 -145
- package/examples/jsm/lines/LineSegmentsGeometry.js +3 -12
- package/examples/jsm/lines/Wireframe.js +3 -3
- package/examples/jsm/lines/WireframeGeometry2.js +2 -2
- package/examples/jsm/loaders/3DMLoader.js +3 -2
- package/examples/jsm/loaders/3MFLoader.js +21 -17
- package/examples/jsm/loaders/AMFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +41 -12
- package/examples/jsm/loaders/DDSLoader.js +21 -28
- package/examples/jsm/loaders/DRACOLoader.js +2 -28
- package/examples/jsm/loaders/EXRLoader.js +278 -275
- package/examples/jsm/loaders/FBXLoader.js +21 -3
- package/examples/jsm/loaders/FontLoader.js +5 -18
- package/examples/jsm/loaders/GCodeLoader.js +0 -1
- package/examples/jsm/loaders/GLTFLoader.js +314 -101
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
- package/examples/jsm/loaders/KMZLoader.js +1 -1
- package/examples/jsm/loaders/KTX2Loader.js +193 -40
- package/examples/jsm/loaders/LDrawLoader.js +641 -495
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +5 -3
- package/examples/jsm/loaders/LogLuvLoader.js +2 -2
- package/examples/jsm/loaders/MD2Loader.js +5 -5
- package/examples/jsm/loaders/MMDLoader.js +21 -3
- package/examples/jsm/loaders/MTLLoader.js +11 -4
- package/examples/jsm/loaders/NRRDLoader.js +1 -2
- package/examples/jsm/loaders/OBJLoader.js +17 -21
- package/examples/jsm/loaders/PCDLoader.js +82 -28
- package/examples/jsm/loaders/PDBLoader.js +11 -11
- package/examples/jsm/loaders/PLYLoader.js +13 -5
- package/examples/jsm/loaders/RGBELoader.js +4 -12
- package/examples/jsm/loaders/RGBMLoader.js +14 -11
- package/examples/jsm/loaders/STLLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +24 -13
- package/examples/jsm/loaders/TIFFLoader.js +36 -0
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDZLoader.js +393 -0
- package/examples/jsm/loaders/VOXLoader.js +5 -5
- package/examples/jsm/loaders/VRMLLoader.js +23 -26
- package/examples/jsm/loaders/VTKLoader.js +257 -285
- package/examples/jsm/loaders/ifc/web-ifc-api.js +9 -8
- package/examples/jsm/loaders/lwo/LWO2Parser.js +10 -12
- package/examples/jsm/loaders/lwo/LWO3Parser.js +10 -12
- package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
- package/examples/jsm/math/ColorConverter.js +1 -49
- package/examples/jsm/math/ConvexHull.js +6 -15
- package/examples/jsm/math/Lut.js +35 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
- package/examples/jsm/misc/MorphAnimMesh.js +2 -2
- package/examples/jsm/misc/ProgressiveLightMap.js +1 -1
- package/examples/jsm/misc/Volume.js +204 -213
- package/examples/jsm/misc/VolumeSlice.js +96 -98
- package/examples/jsm/modifiers/EdgeSplitModifier.js +0 -13
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -19
- package/examples/jsm/modifiers/TessellateModifier.js +0 -7
- package/examples/jsm/node-editor/NodeEditor.js +505 -182
- package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +14 -0
- package/examples/jsm/node-editor/accessors/NormalEditor.js +9 -9
- package/examples/jsm/node-editor/accessors/PositionEditor.js +9 -9
- package/examples/jsm/node-editor/accessors/UVEditor.js +7 -8
- package/examples/jsm/node-editor/core/BaseNode.js +89 -0
- package/examples/jsm/node-editor/core/DataFile.js +59 -0
- package/examples/jsm/node-editor/core/FileEditor.js +20 -0
- package/examples/jsm/node-editor/core/FileURLEditor.js +29 -0
- package/examples/jsm/node-editor/display/BlendEditor.js +10 -9
- package/examples/jsm/node-editor/display/NormalMapEditor.js +49 -0
- package/examples/jsm/node-editor/examples/animate-uv.json +1 -1
- package/examples/jsm/node-editor/examples/fake-top-light.json +1 -1
- package/examples/jsm/node-editor/examples/matcap.json +1 -0
- package/examples/jsm/node-editor/examples/oscillator-color.json +1 -1
- package/examples/jsm/node-editor/examples/rim.json +1 -1
- package/examples/jsm/node-editor/inputs/ColorEditor.js +18 -13
- package/examples/jsm/node-editor/inputs/FloatEditor.js +8 -9
- package/examples/jsm/node-editor/inputs/SliderEditor.js +6 -7
- package/examples/jsm/node-editor/inputs/TextureEditor.js +155 -0
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +9 -9
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +11 -11
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +12 -12
- package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +87 -0
- package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +102 -0
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +31 -18
- package/examples/jsm/node-editor/math/AngleEditor.js +40 -0
- package/examples/jsm/node-editor/math/DotEditor.js +8 -9
- package/examples/jsm/node-editor/math/InvertEditor.js +8 -7
- package/examples/jsm/node-editor/math/LimiterEditor.js +28 -14
- package/examples/jsm/node-editor/math/NormalizeEditor.js +9 -7
- package/examples/jsm/node-editor/math/OperatorEditor.js +29 -16
- package/examples/jsm/node-editor/math/PowerEditor.js +20 -10
- package/examples/jsm/node-editor/math/TrigonometryEditor.js +15 -9
- package/examples/jsm/node-editor/procedural/CheckerEditor.js +7 -6
- package/examples/jsm/node-editor/scene/MeshEditor.js +99 -0
- package/examples/jsm/node-editor/scene/Object3DEditor.js +160 -0
- package/examples/jsm/node-editor/scene/PointsEditor.js +99 -0
- package/examples/jsm/node-editor/utils/JoinEditor.js +58 -0
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +9 -8
- package/examples/jsm/node-editor/utils/PreviewEditor.js +166 -0
- package/examples/jsm/node-editor/utils/SplitEditor.js +39 -0
- package/examples/jsm/node-editor/utils/TimerEditor.js +7 -6
- package/examples/jsm/nodes/Nodes.js +313 -94
- package/examples/jsm/nodes/accessors/BufferNode.js +24 -0
- package/examples/jsm/nodes/accessors/CameraNode.js +27 -196
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +107 -0
- package/examples/jsm/nodes/accessors/InstanceNode.js +58 -0
- package/examples/jsm/{renderers/nodes → nodes}/accessors/MaterialNode.js +49 -11
- package/examples/jsm/{renderers/nodes → nodes}/accessors/MaterialReferenceNode.js +0 -0
- package/examples/jsm/{renderers/nodes → nodes}/accessors/ModelNode.js +8 -0
- package/examples/jsm/{renderers/nodes → nodes}/accessors/ModelViewProjectionNode.js +0 -0
- package/examples/jsm/nodes/accessors/NormalNode.js +39 -99
- package/examples/jsm/{renderers/nodes → nodes}/accessors/Object3DNode.js +34 -17
- package/examples/jsm/{renderers/nodes → nodes}/accessors/PointUVNode.js +2 -2
- package/examples/jsm/nodes/accessors/PositionNode.js +41 -110
- package/examples/jsm/nodes/accessors/ReferenceNode.js +65 -0
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
- package/examples/jsm/nodes/accessors/SkinningNode.js +102 -0
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +21 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +100 -0
- package/examples/jsm/nodes/accessors/UVNode.js +17 -43
- package/examples/jsm/nodes/accessors/UserDataNode.js +23 -0
- package/examples/jsm/nodes/core/ArrayUniformNode.js +23 -0
- package/examples/jsm/nodes/core/AttributeNode.js +33 -30
- package/examples/jsm/{renderers/nodes → nodes}/core/BypassNode.js +2 -2
- package/examples/jsm/nodes/core/CodeNode.js +50 -0
- package/examples/jsm/nodes/core/ConstNode.js +10 -106
- package/examples/jsm/{renderers/nodes → nodes}/core/ContextNode.js +17 -3
- package/examples/jsm/nodes/core/ExpressionNode.js +24 -7
- package/examples/jsm/nodes/core/FunctionCallNode.js +33 -59
- package/examples/jsm/nodes/core/FunctionNode.js +43 -216
- package/examples/jsm/nodes/core/InputNode.js +28 -60
- package/examples/jsm/nodes/core/InstanceIndexNode.js +21 -0
- package/examples/jsm/nodes/core/Node.js +230 -94
- package/examples/jsm/{renderers/nodes → nodes}/core/NodeAttribute.js +2 -2
- package/examples/jsm/nodes/core/NodeBuilder.js +388 -560
- package/examples/jsm/{renderers/nodes → nodes}/core/NodeCode.js +0 -0
- package/examples/jsm/nodes/core/NodeFrame.js +30 -23
- package/examples/jsm/{renderers/nodes → nodes}/core/NodeFunction.js +0 -0
- package/examples/jsm/{renderers/nodes → nodes}/core/NodeFunctionInput.js +0 -0
- package/examples/jsm/{renderers/nodes → nodes}/core/NodeKeywords.js +0 -0
- package/examples/jsm/{renderers/nodes → nodes}/core/NodeParser.js +0 -0
- package/examples/jsm/nodes/core/NodeUniform.js +8 -6
- package/examples/jsm/nodes/core/NodeUtils.js +90 -36
- package/examples/jsm/{renderers/nodes → nodes}/core/NodeVar.js +2 -2
- package/examples/jsm/{renderers/nodes/core/NodeVary.js → nodes/core/NodeVarying.js} +4 -4
- package/examples/jsm/{renderers/nodes → nodes}/core/PropertyNode.js +0 -0
- package/examples/jsm/nodes/core/TempNode.js +20 -112
- package/examples/jsm/nodes/core/UniformNode.js +46 -0
- package/examples/jsm/nodes/core/VarNode.js +58 -27
- package/examples/jsm/{renderers/nodes/core/VaryNode.js → nodes/core/VaryingNode.js} +7 -7
- package/examples/jsm/{renderers/nodes → nodes}/core/constants.js +0 -0
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +94 -0
- package/examples/jsm/{renderers/nodes → nodes}/display/ColorSpaceNode.js +10 -11
- package/examples/jsm/nodes/display/FrontFacingNode.js +21 -0
- package/examples/jsm/nodes/display/NormalMapNode.js +86 -0
- package/examples/jsm/nodes/display/ToneMappingNode.js +51 -0
- package/examples/jsm/nodes/fog/FogNode.js +31 -0
- package/examples/jsm/nodes/fog/FogRangeNode.js +27 -0
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +33 -0
- package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +9 -0
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +27 -0
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +18 -0
- package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +18 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +18 -0
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +94 -0
- package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +22 -0
- package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +12 -0
- package/examples/jsm/nodes/functions/material/getRoughness.js +18 -0
- package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +65 -0
- package/examples/jsm/nodes/lighting/AONode.js +25 -0
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +37 -0
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +66 -0
- package/examples/jsm/nodes/lighting/HemisphereLightNode.js +50 -0
- package/examples/jsm/nodes/lighting/LightingContextNode.js +75 -0
- package/examples/jsm/nodes/lighting/LightingNode.js +19 -0
- package/examples/jsm/nodes/lighting/LightsNode.js +120 -0
- package/examples/jsm/nodes/lighting/PunctualLightNode.js +68 -0
- package/examples/jsm/nodes/loaders/NodeLoader.js +107 -0
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +73 -0
- package/examples/jsm/nodes/loaders/NodeObjectLoader.js +70 -0
- package/examples/jsm/{renderers/nodes → nodes}/materials/LineBasicNodeMaterial.js +11 -4
- package/examples/jsm/nodes/materials/Materials.js +53 -0
- package/examples/jsm/{renderers/nodes → nodes}/materials/MeshBasicNodeMaterial.js +13 -4
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +159 -22
- package/examples/jsm/nodes/materials/NodeMaterial.js +128 -113
- package/examples/jsm/{renderers/nodes → nodes}/materials/PointsNodeMaterial.js +13 -4
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +95 -16
- package/examples/jsm/nodes/materialx/Disclaimer.md +199 -0
- package/examples/jsm/nodes/materialx/functions/lib/mx_hsv.js +56 -0
- package/examples/jsm/nodes/materialx/functions/lib/mx_noise.js +607 -0
- package/examples/jsm/nodes/math/CondNode.js +26 -95
- package/examples/jsm/nodes/math/MathNode.js +156 -189
- package/examples/jsm/nodes/math/OperatorNode.js +161 -41
- package/examples/jsm/{renderers/nodes → nodes}/parsers/GLSLNodeFunction.js +23 -8
- package/examples/jsm/{renderers/nodes → nodes}/parsers/GLSLNodeParser.js +0 -0
- package/examples/jsm/{renderers/nodes → nodes}/parsers/WGSLNodeFunction.js +20 -5
- package/examples/jsm/{renderers/nodes → nodes}/parsers/WGSLNodeParser.js +0 -0
- package/examples/jsm/nodes/procedural/CheckerNode.js +16 -57
- package/examples/jsm/nodes/shadernode/ShaderNode.js +262 -0
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +277 -0
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +120 -0
- package/examples/jsm/{renderers/nodes → nodes}/utils/ArrayElementNode.js +3 -3
- package/examples/jsm/nodes/utils/ConvertNode.js +46 -0
- package/examples/jsm/nodes/utils/JoinNode.js +15 -87
- package/examples/jsm/nodes/utils/MatcapUVNode.js +25 -0
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +33 -0
- package/examples/jsm/{renderers/nodes → nodes}/utils/OscNode.js +18 -2
- package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
- package/examples/jsm/nodes/utils/SplitNode.js +102 -0
- package/examples/jsm/{renderers/nodes → nodes}/utils/SpriteSheetUVNode.js +3 -3
- package/examples/jsm/nodes/utils/TimerNode.js +30 -65
- package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
- package/examples/jsm/objects/Lensflare.js +2 -2
- package/examples/jsm/objects/LightningStorm.js +4 -4
- package/examples/jsm/objects/MarchingCubes.js +5 -9
- package/examples/jsm/objects/Reflector.js +19 -8
- package/examples/jsm/objects/ReflectorForSSRPass.js +5 -7
- package/examples/jsm/objects/Refractor.js +19 -9
- package/examples/jsm/objects/ShadowMesh.js +10 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/Water.js +2 -2
- package/examples/jsm/objects/Water2.js +2 -2
- package/examples/jsm/offscreen/jank.js +5 -5
- package/examples/jsm/offscreen/offscreen.js +1 -1
- package/examples/jsm/offscreen/scene.js +11 -11
- package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +5 -7
- package/examples/jsm/postprocessing/AfterimagePass.js +0 -10
- package/examples/jsm/postprocessing/BloomPass.js +48 -20
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
- package/examples/jsm/postprocessing/EffectComposer.js +1 -9
- package/examples/jsm/postprocessing/LUTPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +13 -18
- package/examples/jsm/postprocessing/SAOPass.js +2 -9
- package/examples/jsm/postprocessing/SSAARenderPass.js +1 -4
- package/examples/jsm/postprocessing/SSRPass.js +3 -9
- package/examples/jsm/postprocessing/TAARenderPass.js +4 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +3 -8
- package/examples/jsm/renderers/CSS2DRenderer.js +23 -21
- package/examples/jsm/renderers/CSS3DRenderer.js +41 -36
- package/examples/jsm/renderers/Projector.js +103 -152
- package/examples/jsm/renderers/SVGRenderer.js +4 -4
- package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +398 -183
- package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +19 -4
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +4 -4
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +55 -13
- package/examples/jsm/renderers/webgpu/WebGPUBindings.js +8 -7
- package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +43 -0
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +20 -7
- package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
- package/examples/jsm/renderers/webgpu/WebGPUInfo.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -7
- package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +37 -39
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +18 -15
- package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +66 -0
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +103 -95
- package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +14 -14
- package/examples/jsm/renderers/webgpu/WebGPUSampler.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +5 -8
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +25 -20
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +37 -18
- package/examples/jsm/renderers/webgpu/WebGPUUniform.js +14 -14
- package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +5 -32
- package/examples/jsm/renderers/webgpu/WebGPUUniformsGroup.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
- package/examples/jsm/renderers/webgpu/constants.js +3 -2
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +287 -300
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeSampledTexture.js +20 -2
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +24 -14
- package/examples/jsm/shaders/BlendShader.js +2 -1
- package/examples/jsm/shaders/CopyShader.js +4 -3
- package/examples/jsm/shaders/FXAAShader.js +219 -1051
- package/examples/jsm/shaders/FreiChenShader.js +1 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +1 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +1 -1
- package/examples/jsm/shaders/LuminosityShader.js +1 -1
- package/examples/jsm/shaders/MMDToonShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +3 -3
- package/examples/jsm/shaders/ToneMapShader.js +2 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +293 -22
- package/examples/jsm/utils/GPUStatsPanel.js +1 -1
- package/examples/jsm/utils/GeometryUtils.js +17 -25
- package/examples/jsm/utils/LDrawUtils.js +24 -17
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
- package/examples/jsm/utils/SceneUtils.js +73 -19
- package/examples/jsm/utils/SkeletonUtils.js +1 -1
- package/examples/jsm/utils/UVsDebug.js +23 -32
- package/examples/jsm/webxr/ARButton.js +14 -4
- package/examples/jsm/webxr/OculusHandPointerModel.js +9 -4
- package/examples/jsm/webxr/Text2D.js +1 -1
- package/examples/jsm/webxr/VRButton.js +16 -8
- package/examples/jsm/webxr/XRHandMeshModel.js +3 -7
- package/examples/jsm/webxr/XRHandModelFactory.js +3 -0
- package/package.json +57 -28
- package/src/Three.Legacy.js +164 -1809
- package/src/Three.js +9 -5
- package/src/animation/AnimationAction.js +6 -5
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationMixer.js +5 -3
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +204 -199
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/PropertyBinding.js +32 -23
- package/src/audio/PositionalAudio.js +8 -0
- package/src/cameras/ArrayCamera.js +2 -3
- package/src/cameras/Camera.js +2 -2
- package/src/cameras/CubeCamera.js +6 -8
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/constants.js +7 -6
- package/src/core/BufferAttribute.js +88 -123
- package/src/core/BufferGeometry.js +9 -47
- package/src/core/GLBufferAttribute.js +2 -2
- package/src/core/InstancedBufferAttribute.js +2 -12
- package/src/core/InstancedBufferGeometry.js +2 -2
- package/src/core/InstancedInterleavedBuffer.js +2 -2
- package/src/core/InterleavedBuffer.js +3 -3
- package/src/core/InterleavedBufferAttribute.js +61 -18
- package/src/core/Object3D.js +28 -8
- package/src/core/Raycaster.js +2 -2
- package/src/core/Uniform.js +0 -7
- package/src/core/UniformsGroup.js +92 -0
- package/src/extras/DataUtils.js +144 -41
- package/src/extras/Earcut.js +2 -2
- package/src/extras/PMREMGenerator.js +132 -104
- package/src/extras/core/CurvePath.js +3 -3
- package/src/extras/core/Path.js +1 -0
- package/src/extras/core/ShapePath.js +6 -10
- package/src/extras/curves/ArcCurve.js +2 -2
- package/src/extras/curves/CatmullRomCurve3.js +6 -4
- package/src/extras/curves/CubicBezierCurve.js +2 -2
- package/src/extras/curves/CubicBezierCurve3.js +2 -2
- package/src/extras/curves/EllipseCurve.js +2 -2
- package/src/extras/curves/LineCurve.js +2 -2
- package/src/extras/curves/LineCurve3.js +2 -1
- package/src/extras/curves/QuadraticBezierCurve.js +2 -2
- package/src/extras/curves/QuadraticBezierCurve3.js +2 -2
- package/src/extras/curves/SplineCurve.js +2 -2
- package/src/geometries/BoxGeometry.js +1 -1
- package/src/geometries/CapsuleGeometry.js +33 -0
- package/src/geometries/CircleGeometry.js +1 -1
- package/src/geometries/ConeGeometry.js +1 -1
- package/src/geometries/CylinderGeometry.js +2 -1
- package/src/geometries/DodecahedronGeometry.js +1 -1
- package/src/geometries/EdgesGeometry.js +5 -4
- package/src/geometries/ExtrudeGeometry.js +4 -11
- package/src/geometries/Geometries.js +1 -0
- package/src/geometries/IcosahedronGeometry.js +1 -1
- package/src/geometries/LatheGeometry.js +3 -3
- package/src/geometries/OctahedronGeometry.js +1 -1
- package/src/geometries/PlaneGeometry.js +2 -1
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/RingGeometry.js +1 -1
- package/src/geometries/ShapeGeometry.js +2 -1
- package/src/geometries/SphereGeometry.js +2 -1
- package/src/geometries/TetrahedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +2 -1
- package/src/geometries/TorusKnotGeometry.js +4 -3
- package/src/geometries/TubeGeometry.js +2 -1
- package/src/geometries/WireframeGeometry.js +4 -2
- package/src/helpers/BoxHelper.js +2 -2
- package/src/helpers/CameraHelper.js +97 -38
- package/src/helpers/DirectionalLightHelper.js +1 -0
- package/src/helpers/HemisphereLightHelper.js +1 -0
- package/src/helpers/PlaneHelper.js +6 -9
- package/src/helpers/PointLightHelper.js +1 -1
- package/src/helpers/PolarGridHelper.js +18 -14
- package/src/helpers/SkeletonHelper.js +3 -2
- package/src/helpers/SpotLightHelper.js +1 -0
- package/src/lights/AmbientLight.js +2 -2
- package/src/lights/AmbientLightProbe.js +2 -2
- package/src/lights/DirectionalLight.js +2 -2
- package/src/lights/DirectionalLightShadow.js +2 -2
- package/src/lights/HemisphereLight.js +4 -4
- package/src/lights/HemisphereLightProbe.js +2 -2
- package/src/lights/Light.js +4 -4
- package/src/lights/LightProbe.js +2 -2
- package/src/lights/PointLight.js +4 -4
- package/src/lights/PointLightShadow.js +2 -2
- package/src/lights/RectAreaLight.js +2 -2
- package/src/lights/SpotLight.js +6 -4
- package/src/lights/SpotLightShadow.js +2 -2
- package/src/loaders/FileLoader.js +35 -5
- package/src/loaders/ImageBitmapLoader.js +2 -2
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/LoaderUtils.js +1 -1
- package/src/loaders/LoadingManager.js +1 -1
- package/src/loaders/MaterialLoader.js +55 -8
- package/src/loaders/ObjectLoader.js +27 -66
- package/src/materials/LineBasicMaterial.js +6 -13
- package/src/materials/LineDashedMaterial.js +2 -15
- package/src/materials/Material.js +26 -24
- package/src/materials/Materials.js +39 -18
- package/src/materials/MeshBasicMaterial.js +6 -31
- package/src/materials/MeshDepthMaterial.js +2 -22
- package/src/materials/MeshDistanceMaterial.js +2 -22
- package/src/materials/MeshLambertMaterial.js +34 -35
- package/src/materials/MeshMatcapMaterial.js +6 -28
- package/src/materials/MeshNormalMaterial.js +2 -26
- package/src/materials/MeshPhongMaterial.js +6 -48
- package/src/materials/MeshPhysicalMaterial.js +32 -35
- package/src/materials/MeshStandardMaterial.js +6 -54
- package/src/materials/MeshToonMaterial.js +6 -38
- package/src/materials/PointsMaterial.js +6 -15
- package/src/materials/RawShaderMaterial.js +2 -2
- package/src/materials/ShaderMaterial.js +6 -24
- package/src/materials/ShadowMaterial.js +6 -8
- package/src/materials/SpriteMaterial.js +6 -12
- package/src/math/Box2.js +2 -2
- package/src/math/Box3.js +29 -15
- package/src/math/Color.js +87 -48
- package/src/math/ColorManagement.js +74 -0
- package/src/math/Euler.js +16 -14
- package/src/math/Interpolant.js +4 -9
- package/src/math/MathUtils.js +77 -14
- package/src/math/Matrix3.js +2 -8
- package/src/math/Matrix4.js +3 -28
- package/src/math/Plane.js +2 -2
- package/src/math/Quaternion.js +12 -23
- package/src/math/Spherical.js +1 -1
- package/src/math/SphericalHarmonics3.js +2 -2
- package/src/math/Vector2.js +5 -25
- package/src/math/Vector3.js +17 -47
- package/src/math/Vector4.js +5 -25
- package/src/math/interpolants/DiscreteInterpolant.js +1 -1
- package/src/objects/Bone.js +2 -2
- package/src/objects/Group.js +2 -2
- package/src/objects/InstancedMesh.js +4 -4
- package/src/objects/Line.js +76 -107
- package/src/objects/LineLoop.js +2 -2
- package/src/objects/LineSegments.js +15 -23
- package/src/objects/Mesh.js +82 -104
- package/src/objects/Points.js +32 -54
- package/src/objects/SkinnedMesh.js +5 -8
- package/src/objects/Sprite.js +4 -4
- package/src/renderers/WebGL3DRenderTarget.js +22 -0
- package/src/renderers/WebGLArrayRenderTarget.js +22 -0
- package/src/renderers/WebGLCubeRenderTarget.js +7 -14
- package/src/renderers/WebGLMultipleRenderTargets.js +8 -5
- package/src/renderers/WebGLRenderTarget.js +19 -18
- package/src/renderers/WebGLRenderer.js +195 -74
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +46 -0
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +7 -5
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +35 -36
- package/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +3 -19
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
- package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +121 -0
- package/src/renderers/shaders/ShaderChunk/iridescence_pars_fragment.glsl.js +14 -0
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +48 -1
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +30 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +26 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +56 -6
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +24 -0
- package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +1 -9
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
- package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +16 -31
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +10 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +8 -0
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +3 -3
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +23 -50
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +6 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +10 -0
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/points.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib.js +37 -31
- package/src/renderers/shaders/UniformsLib.js +14 -13
- package/src/renderers/shaders/UniformsUtils.js +14 -0
- package/src/renderers/webgl/WebGLAttributes.js +6 -6
- package/src/renderers/webgl/WebGLBackground.js +7 -4
- package/src/renderers/webgl/WebGLBindingStates.js +57 -29
- package/src/renderers/webgl/WebGLGeometries.js +2 -2
- package/src/renderers/webgl/WebGLLights.js +37 -14
- package/src/renderers/webgl/WebGLMaterials.js +72 -187
- package/src/renderers/webgl/WebGLMorphtargets.js +43 -39
- package/src/renderers/webgl/WebGLProgram.js +63 -30
- package/src/renderers/webgl/WebGLPrograms.js +97 -104
- package/src/renderers/webgl/WebGLRenderLists.js +5 -4
- package/src/renderers/webgl/WebGLRenderStates.js +5 -4
- package/src/renderers/webgl/WebGLShaderCache.js +12 -8
- package/src/renderers/webgl/WebGLShadowMap.js +13 -20
- package/src/renderers/webgl/WebGLState.js +49 -2
- package/src/renderers/webgl/WebGLTextures.js +576 -386
- package/src/renderers/webgl/WebGLUniforms.js +81 -82
- package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
- package/src/renderers/webgl/WebGLUtils.js +14 -3
- package/src/renderers/webvr/WebVRManager.js +42 -9
- package/src/renderers/webvr/WebVRUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +45 -37
- package/src/renderers/webxr/WebXRManager.js +110 -68
- package/src/scenes/Fog.js +2 -2
- package/src/scenes/FogExp2.js +2 -2
- package/src/scenes/Scene.js +18 -5
- package/src/textures/CanvasTexture.js +2 -2
- package/src/textures/CompressedTexture.js +2 -2
- package/src/textures/CubeTexture.js +2 -2
- package/src/textures/{DataTexture3D.js → Data3DTexture.js} +4 -4
- package/src/textures/{DataTexture2DArray.js → DataArrayTexture.js} +4 -4
- package/src/textures/DataTexture.js +2 -5
- package/src/textures/DepthTexture.js +5 -5
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +123 -0
- package/src/textures/Texture.js +27 -97
- package/src/textures/VideoTexture.js +2 -2
- package/src/utils.js +15 -1
- package/examples/js/controls/experimental/CameraControls.js +0 -1044
- package/examples/js/csm/Frustum.js +0 -133
- package/examples/js/deprecated/Geometry.js +0 -1656
- package/examples/js/loaders/KTX2Loader.js +0 -566
- package/examples/js/loaders/VRMLoader.js +0 -72
- package/examples/js/objects/ReflectorRTT.js +0 -16
- package/examples/js/postprocessing/SSRrPass.js +0 -494
- package/examples/js/shaders/SSRrShader.js +0 -336
- package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
- package/examples/jsm/deprecated/Geometry.js +0 -1869
- package/examples/jsm/libs/opentype.module.min.js +0 -119
- package/examples/jsm/loaders/NodeMaterialLoader.js +0 -263
- package/examples/jsm/loaders/VRMLoader.js +0 -78
- package/examples/jsm/nodes/accessors/ColorsNode.js +0 -56
- package/examples/jsm/nodes/accessors/LightNode.js +0 -60
- package/examples/jsm/nodes/accessors/ReflectNode.js +0 -157
- package/examples/jsm/nodes/accessors/ResolutionNode.js +0 -64
- package/examples/jsm/nodes/accessors/ScreenUVNode.js +0 -64
- package/examples/jsm/nodes/core/NodeLib.js +0 -64
- package/examples/jsm/nodes/core/StructNode.js +0 -106
- package/examples/jsm/nodes/effects/BlurNode.js +0 -171
- package/examples/jsm/nodes/effects/ColorAdjustmentNode.js +0 -140
- package/examples/jsm/nodes/effects/LuminanceNode.js +0 -75
- package/examples/jsm/nodes/inputs/BoolNode.js +0 -51
- package/examples/jsm/nodes/inputs/ColorNode.js +0 -58
- package/examples/jsm/nodes/inputs/CubeTextureNode.js +0 -108
- package/examples/jsm/nodes/inputs/FloatNode.js +0 -51
- package/examples/jsm/nodes/inputs/IntNode.js +0 -51
- package/examples/jsm/nodes/inputs/Matrix3Node.js +0 -63
- package/examples/jsm/nodes/inputs/Matrix4Node.js +0 -63
- package/examples/jsm/nodes/inputs/PropertyNode.js +0 -47
- package/examples/jsm/nodes/inputs/RTTNode.js +0 -157
- package/examples/jsm/nodes/inputs/ReflectorNode.js +0 -90
- package/examples/jsm/nodes/inputs/ScreenNode.js +0 -28
- package/examples/jsm/nodes/inputs/TextureNode.js +0 -116
- package/examples/jsm/nodes/inputs/Vector2Node.js +0 -57
- package/examples/jsm/nodes/inputs/Vector3Node.js +0 -58
- package/examples/jsm/nodes/inputs/Vector4Node.js +0 -59
- package/examples/jsm/nodes/materials/BasicNodeMaterial.js +0 -26
- package/examples/jsm/nodes/materials/PhongNodeMaterial.js +0 -36
- package/examples/jsm/nodes/materials/StandardNodeMaterial.js +0 -40
- package/examples/jsm/nodes/materials/nodes/BasicNode.js +0 -154
- package/examples/jsm/nodes/materials/nodes/MeshStandardNode.js +0 -116
- package/examples/jsm/nodes/materials/nodes/PhongNode.js +0 -409
- package/examples/jsm/nodes/materials/nodes/RawNode.js +0 -62
- package/examples/jsm/nodes/materials/nodes/SpriteNode.js +0 -236
- package/examples/jsm/nodes/materials/nodes/StandardNode.js +0 -609
- package/examples/jsm/nodes/misc/BumpMapNode.js +0 -163
- package/examples/jsm/nodes/misc/NormalMapNode.js +0 -138
- package/examples/jsm/nodes/misc/TextureCubeNode.js +0 -86
- package/examples/jsm/nodes/misc/TextureCubeUVNode.js +0 -280
- package/examples/jsm/nodes/postprocessing/NodePass.js +0 -93
- package/examples/jsm/nodes/postprocessing/NodePostProcessing.js +0 -148
- package/examples/jsm/nodes/procedural/Fractal3DNode.js +0 -104
- package/examples/jsm/nodes/procedural/Noise2DNode.js +0 -149
- package/examples/jsm/nodes/procedural/Noise3DNode.js +0 -141
- package/examples/jsm/nodes/utils/BypassNode.js +0 -85
- package/examples/jsm/nodes/utils/ColorSpaceNode.js +0 -145
- package/examples/jsm/nodes/utils/MaxMIPLevelNode.js +0 -56
- package/examples/jsm/nodes/utils/RemapNode.js +0 -155
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -101
- package/examples/jsm/nodes/utils/SubSlotNode.js +0 -77
- package/examples/jsm/nodes/utils/SwitchNode.js +0 -103
- package/examples/jsm/nodes/utils/UVTransformNode.js +0 -66
- package/examples/jsm/nodes/utils/VelocityNode.js +0 -170
- package/examples/jsm/objects/ReflectorRTT.js +0 -15
- package/examples/jsm/package.json +0 -3
- package/examples/jsm/postprocessing/SSRrPass.js +0 -579
- package/examples/jsm/renderers/nodes/Nodes.js +0 -166
- package/examples/jsm/renderers/nodes/ShaderNode.js +0 -373
- package/examples/jsm/renderers/nodes/accessors/CameraNode.js +0 -68
- package/examples/jsm/renderers/nodes/accessors/NormalNode.js +0 -63
- package/examples/jsm/renderers/nodes/accessors/PositionNode.js +0 -67
- package/examples/jsm/renderers/nodes/accessors/ReferenceNode.js +0 -91
- package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +0 -107
- package/examples/jsm/renderers/nodes/accessors/UVNode.js +0 -25
- package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +0 -23
- package/examples/jsm/renderers/nodes/core/AttributeNode.js +0 -54
- package/examples/jsm/renderers/nodes/core/CodeNode.js +0 -78
- package/examples/jsm/renderers/nodes/core/ExpressionNode.js +0 -32
- package/examples/jsm/renderers/nodes/core/FunctionCallNode.js +0 -67
- package/examples/jsm/renderers/nodes/core/FunctionNode.js +0 -87
- package/examples/jsm/renderers/nodes/core/InputNode.js +0 -66
- package/examples/jsm/renderers/nodes/core/Node.js +0 -104
- package/examples/jsm/renderers/nodes/core/NodeBuilder.js +0 -633
- package/examples/jsm/renderers/nodes/core/NodeFrame.js +0 -59
- package/examples/jsm/renderers/nodes/core/NodeUniform.js +0 -28
- package/examples/jsm/renderers/nodes/core/TempNode.js +0 -43
- package/examples/jsm/renderers/nodes/core/VarNode.js +0 -51
- package/examples/jsm/renderers/nodes/display/NormalMapNode.js +0 -87
- package/examples/jsm/renderers/nodes/functions/BSDFs.js +0 -122
- package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +0 -27
- package/examples/jsm/renderers/nodes/inputs/BufferNode.js +0 -25
- package/examples/jsm/renderers/nodes/inputs/ColorNode.js +0 -18
- package/examples/jsm/renderers/nodes/inputs/FloatNode.js +0 -17
- package/examples/jsm/renderers/nodes/inputs/IntNode.js +0 -17
- package/examples/jsm/renderers/nodes/inputs/Matrix3Node.js +0 -18
- package/examples/jsm/renderers/nodes/inputs/Matrix4Node.js +0 -18
- package/examples/jsm/renderers/nodes/inputs/TextureNode.js +0 -74
- package/examples/jsm/renderers/nodes/inputs/Vector2Node.js +0 -18
- package/examples/jsm/renderers/nodes/inputs/Vector3Node.js +0 -18
- package/examples/jsm/renderers/nodes/inputs/Vector4Node.js +0 -18
- package/examples/jsm/renderers/nodes/lights/LightContextNode.js +0 -59
- package/examples/jsm/renderers/nodes/lights/LightNode.js +0 -79
- package/examples/jsm/renderers/nodes/lights/LightsNode.js +0 -44
- package/examples/jsm/renderers/nodes/materials/Materials.js +0 -11
- package/examples/jsm/renderers/nodes/materials/MeshStandardNodeMaterial.js +0 -63
- package/examples/jsm/renderers/nodes/math/CondNode.js +0 -60
- package/examples/jsm/renderers/nodes/math/MathNode.js +0 -242
- package/examples/jsm/renderers/nodes/math/OperatorNode.js +0 -174
- package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +0 -36
- package/examples/jsm/renderers/nodes/utils/ConvertNode.js +0 -33
- package/examples/jsm/renderers/nodes/utils/JoinNode.js +0 -42
- package/examples/jsm/renderers/nodes/utils/SplitNode.js +0 -55
- package/examples/jsm/renderers/nodes/utils/TimerNode.js +0 -47
- package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +0 -20
- package/examples/jsm/shaders/SSRrShader.js +0 -307
- package/src/renderers/WebGLMultisampleRenderTarget.js +0 -33
- package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
|
@@ -10,12 +10,14 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
10
10
|
const maxCubemapSize = capabilities.maxCubemapSize;
|
|
11
11
|
const maxTextureSize = capabilities.maxTextureSize;
|
|
12
12
|
const maxSamples = capabilities.maxSamples;
|
|
13
|
-
const
|
|
14
|
-
const
|
|
13
|
+
const multisampledRTTExt = extensions.has( 'WEBGL_multisampled_render_to_texture' ) ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : null;
|
|
14
|
+
const supportsInvalidateFramebuffer = /OculusBrowser/g.test( navigator.userAgent );
|
|
15
15
|
|
|
16
16
|
const _videoTextures = new WeakMap();
|
|
17
17
|
let _canvas;
|
|
18
18
|
|
|
19
|
+
const _sources = new WeakMap(); // maps WebglTexture objects to instances of Source
|
|
20
|
+
|
|
19
21
|
// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,
|
|
20
22
|
// also OffscreenCanvas.getContext("webgl"), but not OffscreenCanvas.getContext("2d")!
|
|
21
23
|
// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).
|
|
@@ -25,6 +27,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
25
27
|
try {
|
|
26
28
|
|
|
27
29
|
useOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'
|
|
30
|
+
// eslint-disable-next-line compat/compat
|
|
28
31
|
&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;
|
|
29
32
|
|
|
30
33
|
} catch ( err ) {
|
|
@@ -38,6 +41,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
38
41
|
// Use OffscreenCanvas when available. Specially needed in web workers
|
|
39
42
|
|
|
40
43
|
return useOffscreenCanvas ?
|
|
44
|
+
// eslint-disable-next-line compat/compat
|
|
41
45
|
new OffscreenCanvas( width, height ) : createElementNS( 'canvas' );
|
|
42
46
|
|
|
43
47
|
}
|
|
@@ -153,11 +157,11 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
153
157
|
|
|
154
158
|
}
|
|
155
159
|
|
|
156
|
-
if ( glFormat === _gl.
|
|
160
|
+
if ( glFormat === _gl.RG ) {
|
|
157
161
|
|
|
158
|
-
if ( glType === _gl.FLOAT ) internalFormat = _gl.
|
|
159
|
-
if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.
|
|
160
|
-
if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.
|
|
162
|
+
if ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;
|
|
163
|
+
if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RG16F;
|
|
164
|
+
if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8;
|
|
161
165
|
|
|
162
166
|
}
|
|
163
167
|
|
|
@@ -166,10 +170,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
166
170
|
if ( glType === _gl.FLOAT ) internalFormat = _gl.RGBA32F;
|
|
167
171
|
if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RGBA16F;
|
|
168
172
|
if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = ( encoding === sRGBEncoding && isVideoTexture === false ) ? _gl.SRGB8_ALPHA8 : _gl.RGBA8;
|
|
173
|
+
if ( glType === _gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = _gl.RGBA4;
|
|
174
|
+
if ( glType === _gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = _gl.RGB5_A1;
|
|
169
175
|
|
|
170
176
|
}
|
|
171
177
|
|
|
172
178
|
if ( internalFormat === _gl.R16F || internalFormat === _gl.R32F ||
|
|
179
|
+
internalFormat === _gl.RG16F || internalFormat === _gl.RG32F ||
|
|
173
180
|
internalFormat === _gl.RGBA16F || internalFormat === _gl.RGBA32F ) {
|
|
174
181
|
|
|
175
182
|
extensions.get( 'EXT_color_buffer_float' );
|
|
@@ -236,8 +243,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
236
243
|
|
|
237
244
|
}
|
|
238
245
|
|
|
239
|
-
info.memory.textures --;
|
|
240
|
-
|
|
241
246
|
}
|
|
242
247
|
|
|
243
248
|
function onRenderTargetDispose( event ) {
|
|
@@ -258,12 +263,51 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
258
263
|
|
|
259
264
|
if ( textureProperties.__webglInit === undefined ) return;
|
|
260
265
|
|
|
261
|
-
|
|
266
|
+
// check if it's necessary to remove the WebGLTexture object
|
|
267
|
+
|
|
268
|
+
const source = texture.source;
|
|
269
|
+
const webglTextures = _sources.get( source );
|
|
270
|
+
|
|
271
|
+
if ( webglTextures ) {
|
|
272
|
+
|
|
273
|
+
const webglTexture = webglTextures[ textureProperties.__cacheKey ];
|
|
274
|
+
webglTexture.usedTimes --;
|
|
275
|
+
|
|
276
|
+
// the WebGLTexture object is not used anymore, remove it
|
|
277
|
+
|
|
278
|
+
if ( webglTexture.usedTimes === 0 ) {
|
|
279
|
+
|
|
280
|
+
deleteTexture( texture );
|
|
281
|
+
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// remove the weak map entry if no WebGLTexture uses the source anymore
|
|
285
|
+
|
|
286
|
+
if ( Object.keys( webglTextures ).length === 0 ) {
|
|
287
|
+
|
|
288
|
+
_sources.delete( source );
|
|
289
|
+
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
}
|
|
262
293
|
|
|
263
294
|
properties.remove( texture );
|
|
264
295
|
|
|
265
296
|
}
|
|
266
297
|
|
|
298
|
+
function deleteTexture( texture ) {
|
|
299
|
+
|
|
300
|
+
const textureProperties = properties.get( texture );
|
|
301
|
+
_gl.deleteTexture( textureProperties.__webglTexture );
|
|
302
|
+
|
|
303
|
+
const source = texture.source;
|
|
304
|
+
const webglTextures = _sources.get( source );
|
|
305
|
+
delete webglTextures[ textureProperties.__cacheKey ];
|
|
306
|
+
|
|
307
|
+
info.memory.textures --;
|
|
308
|
+
|
|
309
|
+
}
|
|
310
|
+
|
|
267
311
|
function deallocateRenderTarget( renderTarget ) {
|
|
268
312
|
|
|
269
313
|
const texture = renderTarget.texture;
|
|
@@ -271,8 +315,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
271
315
|
const renderTargetProperties = properties.get( renderTarget );
|
|
272
316
|
const textureProperties = properties.get( texture );
|
|
273
317
|
|
|
274
|
-
if ( ! renderTarget ) return;
|
|
275
|
-
|
|
276
318
|
if ( textureProperties.__webglTexture !== undefined ) {
|
|
277
319
|
|
|
278
320
|
_gl.deleteTexture( textureProperties.__webglTexture );
|
|
@@ -301,7 +343,17 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
301
343
|
_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );
|
|
302
344
|
if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );
|
|
303
345
|
if ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );
|
|
304
|
-
|
|
346
|
+
|
|
347
|
+
if ( renderTargetProperties.__webglColorRenderbuffer ) {
|
|
348
|
+
|
|
349
|
+
for ( let i = 0; i < renderTargetProperties.__webglColorRenderbuffer.length; i ++ ) {
|
|
350
|
+
|
|
351
|
+
if ( renderTargetProperties.__webglColorRenderbuffer[ i ] ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer[ i ] );
|
|
352
|
+
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
}
|
|
356
|
+
|
|
305
357
|
if ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );
|
|
306
358
|
|
|
307
359
|
}
|
|
@@ -357,6 +409,28 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
357
409
|
|
|
358
410
|
}
|
|
359
411
|
|
|
412
|
+
function getTextureCacheKey( texture ) {
|
|
413
|
+
|
|
414
|
+
const array = [];
|
|
415
|
+
|
|
416
|
+
array.push( texture.wrapS );
|
|
417
|
+
array.push( texture.wrapT );
|
|
418
|
+
array.push( texture.magFilter );
|
|
419
|
+
array.push( texture.minFilter );
|
|
420
|
+
array.push( texture.anisotropy );
|
|
421
|
+
array.push( texture.internalFormat );
|
|
422
|
+
array.push( texture.format );
|
|
423
|
+
array.push( texture.type );
|
|
424
|
+
array.push( texture.generateMipmaps );
|
|
425
|
+
array.push( texture.premultiplyAlpha );
|
|
426
|
+
array.push( texture.flipY );
|
|
427
|
+
array.push( texture.unpackAlignment );
|
|
428
|
+
array.push( texture.encoding );
|
|
429
|
+
|
|
430
|
+
return array.join();
|
|
431
|
+
|
|
432
|
+
}
|
|
433
|
+
|
|
360
434
|
//
|
|
361
435
|
|
|
362
436
|
function setTexture2D( texture, slot ) {
|
|
@@ -365,13 +439,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
365
439
|
|
|
366
440
|
if ( texture.isVideoTexture ) updateVideoTexture( texture );
|
|
367
441
|
|
|
368
|
-
if ( texture.version > 0 && textureProperties.__version !== texture.version ) {
|
|
442
|
+
if ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {
|
|
369
443
|
|
|
370
444
|
const image = texture.image;
|
|
371
445
|
|
|
372
|
-
if ( image ===
|
|
446
|
+
if ( image === null ) {
|
|
373
447
|
|
|
374
|
-
console.warn( 'THREE.WebGLRenderer: Texture marked for update but image
|
|
448
|
+
console.warn( 'THREE.WebGLRenderer: Texture marked for update but no image data found.' );
|
|
375
449
|
|
|
376
450
|
} else if ( image.complete === false ) {
|
|
377
451
|
|
|
@@ -519,452 +593,545 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
519
593
|
|
|
520
594
|
function initTexture( textureProperties, texture ) {
|
|
521
595
|
|
|
596
|
+
let forceUpload = false;
|
|
597
|
+
|
|
522
598
|
if ( textureProperties.__webglInit === undefined ) {
|
|
523
599
|
|
|
524
600
|
textureProperties.__webglInit = true;
|
|
525
601
|
|
|
526
602
|
texture.addEventListener( 'dispose', onTextureDispose );
|
|
527
603
|
|
|
528
|
-
|
|
604
|
+
}
|
|
529
605
|
|
|
530
|
-
|
|
606
|
+
// create Source <-> WebGLTextures mapping if necessary
|
|
531
607
|
|
|
532
|
-
|
|
608
|
+
const source = texture.source;
|
|
609
|
+
let webglTextures = _sources.get( source );
|
|
533
610
|
|
|
534
|
-
|
|
611
|
+
if ( webglTextures === undefined ) {
|
|
535
612
|
|
|
536
|
-
|
|
613
|
+
webglTextures = {};
|
|
614
|
+
_sources.set( source, webglTextures );
|
|
537
615
|
|
|
538
|
-
|
|
616
|
+
}
|
|
539
617
|
|
|
540
|
-
if
|
|
541
|
-
if ( texture.isDataTexture3D ) textureType = _gl.TEXTURE_3D;
|
|
618
|
+
// check if there is already a WebGLTexture object for the given texture parameters
|
|
542
619
|
|
|
543
|
-
|
|
620
|
+
const textureCacheKey = getTextureCacheKey( texture );
|
|
544
621
|
|
|
545
|
-
|
|
546
|
-
state.bindTexture( textureType, textureProperties.__webglTexture );
|
|
622
|
+
if ( textureCacheKey !== textureProperties.__cacheKey ) {
|
|
547
623
|
|
|
548
|
-
|
|
549
|
-
_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
|
|
550
|
-
_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
|
|
551
|
-
_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, _gl.NONE );
|
|
624
|
+
// if not, create a new instance of WebGLTexture
|
|
552
625
|
|
|
553
|
-
|
|
554
|
-
let image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );
|
|
555
|
-
image = verifyColorSpace( texture, image );
|
|
626
|
+
if ( webglTextures[ textureCacheKey ] === undefined ) {
|
|
556
627
|
|
|
557
|
-
|
|
558
|
-
glFormat = utils.convert( texture.format, texture.encoding );
|
|
628
|
+
// create new entry
|
|
559
629
|
|
|
560
|
-
|
|
561
|
-
|
|
630
|
+
webglTextures[ textureCacheKey ] = {
|
|
631
|
+
texture: _gl.createTexture(),
|
|
632
|
+
usedTimes: 0
|
|
633
|
+
};
|
|
562
634
|
|
|
563
|
-
|
|
635
|
+
info.memory.textures ++;
|
|
564
636
|
|
|
565
|
-
|
|
566
|
-
|
|
637
|
+
// when a new instance of WebGLTexture was created, a texture upload is required
|
|
638
|
+
// even if the image contents are identical
|
|
567
639
|
|
|
568
|
-
|
|
569
|
-
const allocateMemory = ( textureProperties.__version === undefined );
|
|
570
|
-
const levels = getMipLevels( texture, image, supportsMips );
|
|
640
|
+
forceUpload = true;
|
|
571
641
|
|
|
572
|
-
|
|
642
|
+
}
|
|
573
643
|
|
|
574
|
-
|
|
644
|
+
webglTextures[ textureCacheKey ].usedTimes ++;
|
|
575
645
|
|
|
576
|
-
|
|
646
|
+
// every time the texture cache key changes, it's necessary to check if an instance of
|
|
647
|
+
// WebGLTexture can be deleted in order to avoid a memory leak.
|
|
577
648
|
|
|
578
|
-
|
|
649
|
+
const webglTexture = webglTextures[ textureProperties.__cacheKey ];
|
|
579
650
|
|
|
580
|
-
|
|
651
|
+
if ( webglTexture !== undefined ) {
|
|
581
652
|
|
|
582
|
-
|
|
653
|
+
webglTextures[ textureProperties.__cacheKey ].usedTimes --;
|
|
583
654
|
|
|
584
|
-
|
|
655
|
+
if ( webglTexture.usedTimes === 0 ) {
|
|
585
656
|
|
|
586
|
-
|
|
657
|
+
deleteTexture( texture );
|
|
587
658
|
|
|
588
|
-
}
|
|
659
|
+
}
|
|
589
660
|
|
|
590
|
-
|
|
661
|
+
}
|
|
591
662
|
|
|
592
|
-
|
|
663
|
+
// store references to cache key and WebGLTexture object
|
|
593
664
|
|
|
594
|
-
|
|
665
|
+
textureProperties.__cacheKey = textureCacheKey;
|
|
666
|
+
textureProperties.__webglTexture = webglTextures[ textureCacheKey ].texture;
|
|
595
667
|
|
|
596
|
-
|
|
668
|
+
}
|
|
597
669
|
|
|
598
|
-
|
|
670
|
+
return forceUpload;
|
|
599
671
|
|
|
600
|
-
|
|
672
|
+
}
|
|
601
673
|
|
|
602
|
-
|
|
674
|
+
function uploadTexture( textureProperties, texture, slot ) {
|
|
603
675
|
|
|
604
|
-
|
|
676
|
+
let textureType = _gl.TEXTURE_2D;
|
|
605
677
|
|
|
606
|
-
|
|
678
|
+
if ( texture.isDataArrayTexture ) textureType = _gl.TEXTURE_2D_ARRAY;
|
|
679
|
+
if ( texture.isData3DTexture ) textureType = _gl.TEXTURE_3D;
|
|
607
680
|
|
|
608
|
-
|
|
681
|
+
const forceUpload = initTexture( textureProperties, texture );
|
|
682
|
+
const source = texture.source;
|
|
609
683
|
|
|
610
|
-
|
|
684
|
+
state.activeTexture( _gl.TEXTURE0 + slot );
|
|
685
|
+
state.bindTexture( textureType, textureProperties.__webglTexture );
|
|
611
686
|
|
|
612
|
-
|
|
613
|
-
// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT
|
|
614
|
-
// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)
|
|
615
|
-
if ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {
|
|
687
|
+
if ( source.version !== source.__currentVersion || forceUpload === true ) {
|
|
616
688
|
|
|
617
|
-
|
|
689
|
+
_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );
|
|
690
|
+
_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
|
|
691
|
+
_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
|
|
692
|
+
_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, _gl.NONE );
|
|
618
693
|
|
|
619
|
-
|
|
620
|
-
|
|
694
|
+
const needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( texture.image ) === false;
|
|
695
|
+
let image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );
|
|
696
|
+
image = verifyColorSpace( texture, image );
|
|
621
697
|
|
|
622
|
-
|
|
698
|
+
const supportsMips = isPowerOfTwo( image ) || isWebGL2,
|
|
699
|
+
glFormat = utils.convert( texture.format, texture.encoding );
|
|
623
700
|
|
|
624
|
-
|
|
701
|
+
let glType = utils.convert( texture.type ),
|
|
702
|
+
glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding, texture.isVideoTexture );
|
|
625
703
|
|
|
626
|
-
|
|
704
|
+
setTextureParameters( textureType, texture, supportsMips );
|
|
627
705
|
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
glInternalFormat = _gl.DEPTH_STENCIL;
|
|
706
|
+
let mipmap;
|
|
707
|
+
const mipmaps = texture.mipmaps;
|
|
631
708
|
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
if ( texture.type !== UnsignedInt248Type ) {
|
|
709
|
+
const useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );
|
|
710
|
+
const allocateMemory = ( source.__currentVersion === undefined ) || ( forceUpload === true );
|
|
711
|
+
const levels = getMipLevels( texture, image, supportsMips );
|
|
636
712
|
|
|
637
|
-
|
|
713
|
+
if ( texture.isDepthTexture ) {
|
|
638
714
|
|
|
639
|
-
|
|
640
|
-
glType = utils.convert( texture.type );
|
|
715
|
+
// populate depth texture with dummy data
|
|
641
716
|
|
|
642
|
-
|
|
717
|
+
glInternalFormat = _gl.DEPTH_COMPONENT;
|
|
643
718
|
|
|
644
|
-
|
|
719
|
+
if ( isWebGL2 ) {
|
|
645
720
|
|
|
646
|
-
|
|
721
|
+
if ( texture.type === FloatType ) {
|
|
647
722
|
|
|
648
|
-
|
|
723
|
+
glInternalFormat = _gl.DEPTH_COMPONENT32F;
|
|
649
724
|
|
|
650
|
-
|
|
725
|
+
} else if ( texture.type === UnsignedIntType ) {
|
|
651
726
|
|
|
652
|
-
|
|
727
|
+
glInternalFormat = _gl.DEPTH_COMPONENT24;
|
|
653
728
|
|
|
654
|
-
|
|
729
|
+
} else if ( texture.type === UnsignedInt248Type ) {
|
|
655
730
|
|
|
656
|
-
|
|
731
|
+
glInternalFormat = _gl.DEPTH24_STENCIL8;
|
|
657
732
|
|
|
658
|
-
|
|
733
|
+
} else {
|
|
659
734
|
|
|
660
|
-
|
|
661
|
-
// if there are no manual mipmaps
|
|
662
|
-
// set 0 level mipmap and then use GL to generate other mipmap levels
|
|
735
|
+
glInternalFormat = _gl.DEPTH_COMPONENT16; // WebGL2 requires sized internalformat for glTexImage2D
|
|
663
736
|
|
|
664
|
-
|
|
737
|
+
}
|
|
665
738
|
|
|
666
|
-
|
|
739
|
+
} else {
|
|
667
740
|
|
|
668
|
-
|
|
741
|
+
if ( texture.type === FloatType ) {
|
|
669
742
|
|
|
670
|
-
|
|
743
|
+
console.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );
|
|
671
744
|
|
|
672
|
-
|
|
745
|
+
}
|
|
673
746
|
|
|
674
|
-
|
|
747
|
+
}
|
|
675
748
|
|
|
676
|
-
|
|
749
|
+
// validation checks for WebGL 1
|
|
677
750
|
|
|
678
|
-
|
|
751
|
+
if ( texture.format === DepthFormat && glInternalFormat === _gl.DEPTH_COMPONENT ) {
|
|
679
752
|
|
|
680
|
-
|
|
753
|
+
// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are
|
|
754
|
+
// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT
|
|
755
|
+
// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)
|
|
756
|
+
if ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {
|
|
757
|
+
|
|
758
|
+
console.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );
|
|
681
759
|
|
|
682
|
-
|
|
760
|
+
texture.type = UnsignedIntType;
|
|
761
|
+
glType = utils.convert( texture.type );
|
|
683
762
|
|
|
684
763
|
}
|
|
685
764
|
|
|
686
765
|
}
|
|
687
766
|
|
|
688
|
-
texture.
|
|
767
|
+
if ( texture.format === DepthStencilFormat && glInternalFormat === _gl.DEPTH_COMPONENT ) {
|
|
689
768
|
|
|
690
|
-
|
|
769
|
+
// Depth stencil textures need the DEPTH_STENCIL internal format
|
|
770
|
+
// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)
|
|
771
|
+
glInternalFormat = _gl.DEPTH_STENCIL;
|
|
691
772
|
|
|
692
|
-
|
|
773
|
+
// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are
|
|
774
|
+
// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.
|
|
775
|
+
// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)
|
|
776
|
+
if ( texture.type !== UnsignedInt248Type ) {
|
|
693
777
|
|
|
694
|
-
|
|
778
|
+
console.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );
|
|
695
779
|
|
|
696
|
-
|
|
780
|
+
texture.type = UnsignedInt248Type;
|
|
781
|
+
glType = utils.convert( texture.type );
|
|
697
782
|
|
|
698
783
|
}
|
|
699
784
|
|
|
700
|
-
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
//
|
|
701
788
|
|
|
702
|
-
|
|
789
|
+
if ( allocateMemory ) {
|
|
703
790
|
|
|
704
|
-
|
|
791
|
+
if ( useTexStorage ) {
|
|
705
792
|
|
|
706
|
-
|
|
793
|
+
state.texStorage2D( _gl.TEXTURE_2D, 1, glInternalFormat, image.width, image.height );
|
|
707
794
|
|
|
708
|
-
|
|
795
|
+
} else {
|
|
796
|
+
|
|
797
|
+
state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );
|
|
798
|
+
|
|
799
|
+
}
|
|
709
800
|
|
|
710
|
-
|
|
801
|
+
}
|
|
711
802
|
|
|
712
|
-
if (
|
|
803
|
+
} else if ( texture.isDataTexture ) {
|
|
713
804
|
|
|
714
|
-
|
|
805
|
+
// use manually created mipmaps if available
|
|
806
|
+
// if there are no manual mipmaps
|
|
807
|
+
// set 0 level mipmap and then use GL to generate other mipmap levels
|
|
715
808
|
|
|
716
|
-
|
|
809
|
+
if ( mipmaps.length > 0 && supportsMips ) {
|
|
717
810
|
|
|
718
|
-
|
|
811
|
+
if ( useTexStorage && allocateMemory ) {
|
|
719
812
|
|
|
720
|
-
|
|
813
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );
|
|
721
814
|
|
|
722
|
-
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
|
|
723
818
|
|
|
724
|
-
|
|
819
|
+
mipmap = mipmaps[ i ];
|
|
725
820
|
|
|
726
821
|
if ( useTexStorage ) {
|
|
727
822
|
|
|
728
|
-
state.
|
|
823
|
+
state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
|
|
729
824
|
|
|
730
825
|
} else {
|
|
731
826
|
|
|
732
|
-
state.
|
|
827
|
+
state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
|
|
733
828
|
|
|
734
829
|
}
|
|
735
830
|
|
|
736
|
-
} else {
|
|
737
|
-
|
|
738
|
-
console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );
|
|
739
|
-
|
|
740
831
|
}
|
|
741
832
|
|
|
833
|
+
texture.generateMipmaps = false;
|
|
834
|
+
|
|
742
835
|
} else {
|
|
743
836
|
|
|
744
837
|
if ( useTexStorage ) {
|
|
745
838
|
|
|
746
|
-
|
|
839
|
+
if ( allocateMemory ) {
|
|
840
|
+
|
|
841
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );
|
|
842
|
+
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
state.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, glFormat, glType, image.data );
|
|
747
846
|
|
|
748
847
|
} else {
|
|
749
848
|
|
|
750
|
-
state.texImage2D( _gl.TEXTURE_2D,
|
|
849
|
+
state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );
|
|
751
850
|
|
|
752
851
|
}
|
|
753
852
|
|
|
754
853
|
}
|
|
755
854
|
|
|
756
|
-
}
|
|
855
|
+
} else if ( texture.isCompressedTexture ) {
|
|
856
|
+
|
|
857
|
+
if ( useTexStorage && allocateMemory ) {
|
|
757
858
|
|
|
758
|
-
|
|
859
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );
|
|
759
860
|
|
|
760
|
-
|
|
861
|
+
}
|
|
761
862
|
|
|
762
|
-
|
|
863
|
+
for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
|
|
763
864
|
|
|
764
|
-
|
|
865
|
+
mipmap = mipmaps[ i ];
|
|
765
866
|
|
|
766
|
-
|
|
867
|
+
if ( texture.format !== RGBAFormat ) {
|
|
767
868
|
|
|
768
|
-
|
|
869
|
+
if ( glFormat !== null ) {
|
|
769
870
|
|
|
770
|
-
|
|
871
|
+
if ( useTexStorage ) {
|
|
771
872
|
|
|
772
|
-
|
|
873
|
+
state.compressedTexSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );
|
|
773
874
|
|
|
774
|
-
|
|
875
|
+
} else {
|
|
775
876
|
|
|
776
|
-
|
|
877
|
+
state.compressedTexImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );
|
|
777
878
|
|
|
778
|
-
|
|
879
|
+
}
|
|
779
880
|
|
|
780
|
-
|
|
881
|
+
} else {
|
|
882
|
+
|
|
883
|
+
console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );
|
|
884
|
+
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
} else {
|
|
781
888
|
|
|
782
|
-
|
|
889
|
+
if ( useTexStorage ) {
|
|
890
|
+
|
|
891
|
+
state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
|
|
892
|
+
|
|
893
|
+
} else {
|
|
894
|
+
|
|
895
|
+
state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
|
|
896
|
+
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
}
|
|
783
900
|
|
|
784
901
|
}
|
|
785
902
|
|
|
786
|
-
|
|
903
|
+
} else if ( texture.isDataArrayTexture ) {
|
|
787
904
|
|
|
788
|
-
|
|
905
|
+
if ( useTexStorage ) {
|
|
906
|
+
|
|
907
|
+
if ( allocateMemory ) {
|
|
789
908
|
|
|
790
|
-
|
|
909
|
+
state.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth );
|
|
791
910
|
|
|
792
|
-
|
|
911
|
+
}
|
|
793
912
|
|
|
794
|
-
|
|
913
|
+
state.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
|
|
795
914
|
|
|
796
|
-
|
|
915
|
+
} else {
|
|
797
916
|
|
|
798
|
-
|
|
917
|
+
state.texImage3D( _gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );
|
|
799
918
|
|
|
800
|
-
|
|
919
|
+
}
|
|
801
920
|
|
|
802
|
-
|
|
921
|
+
} else if ( texture.isData3DTexture ) {
|
|
803
922
|
|
|
804
|
-
|
|
923
|
+
if ( useTexStorage ) {
|
|
805
924
|
|
|
806
|
-
|
|
925
|
+
if ( allocateMemory ) {
|
|
807
926
|
|
|
808
|
-
|
|
927
|
+
state.texStorage3D( _gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth );
|
|
809
928
|
|
|
810
|
-
|
|
811
|
-
// if there are no manual mipmaps
|
|
812
|
-
// set 0 level mipmap and then use GL to generate other mipmap levels
|
|
929
|
+
}
|
|
813
930
|
|
|
814
|
-
|
|
931
|
+
state.texSubImage3D( _gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
|
|
815
932
|
|
|
816
|
-
|
|
933
|
+
} else {
|
|
817
934
|
|
|
818
|
-
state.
|
|
935
|
+
state.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );
|
|
819
936
|
|
|
820
937
|
}
|
|
821
938
|
|
|
822
|
-
|
|
939
|
+
} else if ( texture.isFramebufferTexture ) {
|
|
823
940
|
|
|
824
|
-
|
|
941
|
+
if ( allocateMemory ) {
|
|
825
942
|
|
|
826
943
|
if ( useTexStorage ) {
|
|
827
944
|
|
|
828
|
-
state.
|
|
945
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );
|
|
829
946
|
|
|
830
947
|
} else {
|
|
831
948
|
|
|
832
|
-
|
|
949
|
+
let width = image.width, height = image.height;
|
|
950
|
+
|
|
951
|
+
for ( let i = 0; i < levels; i ++ ) {
|
|
952
|
+
|
|
953
|
+
state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, width, height, 0, glFormat, glType, null );
|
|
954
|
+
|
|
955
|
+
width >>= 1;
|
|
956
|
+
height >>= 1;
|
|
957
|
+
|
|
958
|
+
}
|
|
833
959
|
|
|
834
960
|
}
|
|
835
961
|
|
|
836
962
|
}
|
|
837
963
|
|
|
838
|
-
texture.generateMipmaps = false;
|
|
839
|
-
|
|
840
964
|
} else {
|
|
841
965
|
|
|
842
|
-
|
|
966
|
+
// regular Texture (image, video, canvas)
|
|
843
967
|
|
|
844
|
-
|
|
968
|
+
// use manually created mipmaps if available
|
|
969
|
+
// if there are no manual mipmaps
|
|
970
|
+
// set 0 level mipmap and then use GL to generate other mipmap levels
|
|
845
971
|
|
|
846
|
-
|
|
972
|
+
if ( mipmaps.length > 0 && supportsMips ) {
|
|
973
|
+
|
|
974
|
+
if ( useTexStorage && allocateMemory ) {
|
|
975
|
+
|
|
976
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );
|
|
847
977
|
|
|
848
978
|
}
|
|
849
979
|
|
|
850
|
-
|
|
980
|
+
for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
|
|
981
|
+
|
|
982
|
+
mipmap = mipmaps[ i ];
|
|
983
|
+
|
|
984
|
+
if ( useTexStorage ) {
|
|
985
|
+
|
|
986
|
+
state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap );
|
|
987
|
+
|
|
988
|
+
} else {
|
|
989
|
+
|
|
990
|
+
state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap );
|
|
991
|
+
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
texture.generateMipmaps = false;
|
|
851
997
|
|
|
852
998
|
} else {
|
|
853
999
|
|
|
854
|
-
|
|
1000
|
+
if ( useTexStorage ) {
|
|
1001
|
+
|
|
1002
|
+
if ( allocateMemory ) {
|
|
1003
|
+
|
|
1004
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );
|
|
1005
|
+
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
state.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, glFormat, glType, image );
|
|
1009
|
+
|
|
1010
|
+
} else {
|
|
1011
|
+
|
|
1012
|
+
state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image );
|
|
1013
|
+
|
|
1014
|
+
}
|
|
855
1015
|
|
|
856
1016
|
}
|
|
857
1017
|
|
|
858
1018
|
}
|
|
859
1019
|
|
|
860
|
-
|
|
1020
|
+
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
1021
|
+
|
|
1022
|
+
generateMipmap( textureType );
|
|
1023
|
+
|
|
1024
|
+
}
|
|
861
1025
|
|
|
862
|
-
|
|
1026
|
+
source.__currentVersion = source.version;
|
|
863
1027
|
|
|
864
|
-
|
|
1028
|
+
if ( texture.onUpdate ) texture.onUpdate( texture );
|
|
865
1029
|
|
|
866
1030
|
}
|
|
867
1031
|
|
|
868
1032
|
textureProperties.__version = texture.version;
|
|
869
1033
|
|
|
870
|
-
if ( texture.onUpdate ) texture.onUpdate( texture );
|
|
871
|
-
|
|
872
1034
|
}
|
|
873
1035
|
|
|
874
1036
|
function uploadCubeTexture( textureProperties, texture, slot ) {
|
|
875
1037
|
|
|
876
1038
|
if ( texture.image.length !== 6 ) return;
|
|
877
1039
|
|
|
878
|
-
initTexture( textureProperties, texture );
|
|
1040
|
+
const forceUpload = initTexture( textureProperties, texture );
|
|
1041
|
+
const source = texture.source;
|
|
879
1042
|
|
|
880
1043
|
state.activeTexture( _gl.TEXTURE0 + slot );
|
|
881
1044
|
state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );
|
|
882
1045
|
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
1046
|
+
if ( source.version !== source.__currentVersion || forceUpload === true ) {
|
|
1047
|
+
|
|
1048
|
+
_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );
|
|
1049
|
+
_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
|
|
1050
|
+
_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
|
|
1051
|
+
_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, _gl.NONE );
|
|
887
1052
|
|
|
888
|
-
|
|
889
|
-
|
|
1053
|
+
const isCompressed = ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture );
|
|
1054
|
+
const isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );
|
|
890
1055
|
|
|
891
|
-
|
|
1056
|
+
const cubeImage = [];
|
|
892
1057
|
|
|
893
|
-
|
|
1058
|
+
for ( let i = 0; i < 6; i ++ ) {
|
|
894
1059
|
|
|
895
|
-
|
|
1060
|
+
if ( ! isCompressed && ! isDataTexture ) {
|
|
896
1061
|
|
|
897
|
-
|
|
1062
|
+
cubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );
|
|
898
1063
|
|
|
899
|
-
|
|
1064
|
+
} else {
|
|
900
1065
|
|
|
901
|
-
|
|
1066
|
+
cubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];
|
|
1067
|
+
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
cubeImage[ i ] = verifyColorSpace( texture, cubeImage[ i ] );
|
|
902
1071
|
|
|
903
1072
|
}
|
|
904
1073
|
|
|
905
|
-
|
|
1074
|
+
const image = cubeImage[ 0 ],
|
|
1075
|
+
supportsMips = isPowerOfTwo( image ) || isWebGL2,
|
|
1076
|
+
glFormat = utils.convert( texture.format, texture.encoding ),
|
|
1077
|
+
glType = utils.convert( texture.type ),
|
|
1078
|
+
glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
906
1079
|
|
|
907
|
-
|
|
1080
|
+
const useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );
|
|
1081
|
+
const allocateMemory = ( source.__currentVersion === undefined ) || ( forceUpload === true );
|
|
1082
|
+
let levels = getMipLevels( texture, image, supportsMips );
|
|
1083
|
+
|
|
1084
|
+
setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, supportsMips );
|
|
908
1085
|
|
|
909
|
-
|
|
910
|
-
supportsMips = isPowerOfTwo( image ) || isWebGL2,
|
|
911
|
-
glFormat = utils.convert( texture.format, texture.encoding ),
|
|
912
|
-
glType = utils.convert( texture.type ),
|
|
913
|
-
glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
1086
|
+
let mipmaps;
|
|
914
1087
|
|
|
915
|
-
|
|
916
|
-
const allocateMemory = ( textureProperties.__version === undefined );
|
|
917
|
-
let levels = getMipLevels( texture, image, supportsMips );
|
|
1088
|
+
if ( isCompressed ) {
|
|
918
1089
|
|
|
919
|
-
|
|
1090
|
+
if ( useTexStorage && allocateMemory ) {
|
|
920
1091
|
|
|
921
|
-
|
|
1092
|
+
state.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height );
|
|
922
1093
|
|
|
923
|
-
|
|
1094
|
+
}
|
|
924
1095
|
|
|
925
|
-
|
|
1096
|
+
for ( let i = 0; i < 6; i ++ ) {
|
|
926
1097
|
|
|
927
|
-
|
|
1098
|
+
mipmaps = cubeImage[ i ].mipmaps;
|
|
928
1099
|
|
|
929
|
-
|
|
1100
|
+
for ( let j = 0; j < mipmaps.length; j ++ ) {
|
|
930
1101
|
|
|
931
|
-
|
|
1102
|
+
const mipmap = mipmaps[ j ];
|
|
932
1103
|
|
|
933
|
-
|
|
1104
|
+
if ( texture.format !== RGBAFormat ) {
|
|
934
1105
|
|
|
935
|
-
|
|
1106
|
+
if ( glFormat !== null ) {
|
|
936
1107
|
|
|
937
|
-
|
|
1108
|
+
if ( useTexStorage ) {
|
|
938
1109
|
|
|
939
|
-
|
|
1110
|
+
state.compressedTexSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );
|
|
940
1111
|
|
|
941
|
-
|
|
1112
|
+
} else {
|
|
942
1113
|
|
|
943
|
-
|
|
1114
|
+
state.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );
|
|
944
1115
|
|
|
945
|
-
|
|
1116
|
+
}
|
|
946
1117
|
|
|
947
1118
|
} else {
|
|
948
1119
|
|
|
949
|
-
|
|
1120
|
+
console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );
|
|
950
1121
|
|
|
951
1122
|
}
|
|
952
1123
|
|
|
953
1124
|
} else {
|
|
954
1125
|
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
}
|
|
958
|
-
|
|
959
|
-
} else {
|
|
1126
|
+
if ( useTexStorage ) {
|
|
960
1127
|
|
|
961
|
-
|
|
1128
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
|
|
962
1129
|
|
|
963
|
-
|
|
1130
|
+
} else {
|
|
964
1131
|
|
|
965
|
-
|
|
1132
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
|
|
966
1133
|
|
|
967
|
-
|
|
1134
|
+
}
|
|
968
1135
|
|
|
969
1136
|
}
|
|
970
1137
|
|
|
@@ -972,78 +1139,78 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
972
1139
|
|
|
973
1140
|
}
|
|
974
1141
|
|
|
975
|
-
}
|
|
1142
|
+
} else {
|
|
976
1143
|
|
|
977
|
-
|
|
1144
|
+
mipmaps = texture.mipmaps;
|
|
978
1145
|
|
|
979
|
-
|
|
1146
|
+
if ( useTexStorage && allocateMemory ) {
|
|
980
1147
|
|
|
981
|
-
|
|
1148
|
+
// TODO: Uniformly handle mipmap definitions
|
|
1149
|
+
// Normal textures and compressed cube textures define base level + mips with their mipmap array
|
|
1150
|
+
// Uncompressed cube textures use their mipmap array only for mips (no base level)
|
|
982
1151
|
|
|
983
|
-
|
|
984
|
-
// Normal textures and compressed cube textures define base level + mips with their mipmap array
|
|
985
|
-
// Uncompressed cube textures use their mipmap array only for mips (no base level)
|
|
1152
|
+
if ( mipmaps.length > 0 ) levels ++;
|
|
986
1153
|
|
|
987
|
-
|
|
1154
|
+
state.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, cubeImage[ 0 ].width, cubeImage[ 0 ].height );
|
|
988
1155
|
|
|
989
|
-
|
|
1156
|
+
}
|
|
990
1157
|
|
|
991
|
-
|
|
1158
|
+
for ( let i = 0; i < 6; i ++ ) {
|
|
992
1159
|
|
|
993
|
-
|
|
1160
|
+
if ( isDataTexture ) {
|
|
994
1161
|
|
|
995
|
-
|
|
1162
|
+
if ( useTexStorage ) {
|
|
996
1163
|
|
|
997
|
-
|
|
1164
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[ i ].width, cubeImage[ i ].height, glFormat, glType, cubeImage[ i ].data );
|
|
998
1165
|
|
|
999
|
-
|
|
1166
|
+
} else {
|
|
1000
1167
|
|
|
1001
|
-
|
|
1168
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );
|
|
1002
1169
|
|
|
1003
|
-
|
|
1170
|
+
}
|
|
1004
1171
|
|
|
1005
|
-
|
|
1172
|
+
for ( let j = 0; j < mipmaps.length; j ++ ) {
|
|
1006
1173
|
|
|
1007
|
-
|
|
1174
|
+
const mipmap = mipmaps[ j ];
|
|
1175
|
+
const mipmapImage = mipmap.image[ i ].image;
|
|
1008
1176
|
|
|
1009
|
-
|
|
1010
|
-
const mipmapImage = mipmap.image[ i ].image;
|
|
1177
|
+
if ( useTexStorage ) {
|
|
1011
1178
|
|
|
1012
|
-
|
|
1179
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data );
|
|
1013
1180
|
|
|
1014
|
-
|
|
1181
|
+
} else {
|
|
1015
1182
|
|
|
1016
|
-
|
|
1183
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );
|
|
1017
1184
|
|
|
1018
|
-
|
|
1185
|
+
}
|
|
1019
1186
|
|
|
1020
1187
|
}
|
|
1021
1188
|
|
|
1022
|
-
}
|
|
1189
|
+
} else {
|
|
1023
1190
|
|
|
1024
|
-
|
|
1191
|
+
if ( useTexStorage ) {
|
|
1025
1192
|
|
|
1026
|
-
|
|
1193
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[ i ] );
|
|
1027
1194
|
|
|
1028
|
-
|
|
1195
|
+
} else {
|
|
1029
1196
|
|
|
1030
|
-
|
|
1197
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );
|
|
1031
1198
|
|
|
1032
|
-
|
|
1199
|
+
}
|
|
1033
1200
|
|
|
1034
|
-
|
|
1201
|
+
for ( let j = 0; j < mipmaps.length; j ++ ) {
|
|
1035
1202
|
|
|
1036
|
-
|
|
1203
|
+
const mipmap = mipmaps[ j ];
|
|
1037
1204
|
|
|
1038
|
-
|
|
1205
|
+
if ( useTexStorage ) {
|
|
1039
1206
|
|
|
1040
|
-
|
|
1207
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[ i ] );
|
|
1041
1208
|
|
|
1042
|
-
|
|
1209
|
+
} else {
|
|
1043
1210
|
|
|
1044
|
-
|
|
1211
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );
|
|
1045
1212
|
|
|
1046
|
-
|
|
1213
|
+
}
|
|
1047
1214
|
|
|
1048
1215
|
}
|
|
1049
1216
|
|
|
@@ -1053,19 +1220,21 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1053
1220
|
|
|
1054
1221
|
}
|
|
1055
1222
|
|
|
1056
|
-
|
|
1223
|
+
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
1057
1224
|
|
|
1058
|
-
|
|
1225
|
+
// We assume images for cube map have the same size.
|
|
1226
|
+
generateMipmap( _gl.TEXTURE_CUBE_MAP );
|
|
1059
1227
|
|
|
1060
|
-
|
|
1061
|
-
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
source.__currentVersion = source.version;
|
|
1231
|
+
|
|
1232
|
+
if ( texture.onUpdate ) texture.onUpdate( texture );
|
|
1062
1233
|
|
|
1063
1234
|
}
|
|
1064
1235
|
|
|
1065
1236
|
textureProperties.__version = texture.version;
|
|
1066
1237
|
|
|
1067
|
-
if ( texture.onUpdate ) texture.onUpdate( texture );
|
|
1068
|
-
|
|
1069
1238
|
}
|
|
1070
1239
|
|
|
1071
1240
|
// Render targets
|
|
@@ -1093,9 +1262,10 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1093
1262
|
}
|
|
1094
1263
|
|
|
1095
1264
|
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
1096
|
-
if ( renderTarget.useRenderToTexture ) {
|
|
1097
1265
|
|
|
1098
|
-
|
|
1266
|
+
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1267
|
+
|
|
1268
|
+
multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0, getRenderTargetSamples( renderTarget ) );
|
|
1099
1269
|
|
|
1100
1270
|
} else {
|
|
1101
1271
|
|
|
@@ -1117,7 +1287,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1117
1287
|
|
|
1118
1288
|
let glInternalFormat = _gl.DEPTH_COMPONENT16;
|
|
1119
1289
|
|
|
1120
|
-
if ( isMultisample || renderTarget
|
|
1290
|
+
if ( isMultisample || useMultisampledRTT( renderTarget ) ) {
|
|
1121
1291
|
|
|
1122
1292
|
const depthTexture = renderTarget.depthTexture;
|
|
1123
1293
|
|
|
@@ -1137,9 +1307,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1137
1307
|
|
|
1138
1308
|
const samples = getRenderTargetSamples( renderTarget );
|
|
1139
1309
|
|
|
1140
|
-
if ( renderTarget
|
|
1310
|
+
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1141
1311
|
|
|
1142
|
-
|
|
1312
|
+
multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1143
1313
|
|
|
1144
1314
|
} else {
|
|
1145
1315
|
|
|
@@ -1159,13 +1329,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1159
1329
|
|
|
1160
1330
|
const samples = getRenderTargetSamples( renderTarget );
|
|
1161
1331
|
|
|
1162
|
-
if ( isMultisample && renderTarget
|
|
1332
|
+
if ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {
|
|
1163
1333
|
|
|
1164
1334
|
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );
|
|
1165
1335
|
|
|
1166
|
-
} else if ( renderTarget
|
|
1336
|
+
} else if ( useMultisampledRTT( renderTarget ) ) {
|
|
1167
1337
|
|
|
1168
|
-
|
|
1338
|
+
multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );
|
|
1169
1339
|
|
|
1170
1340
|
} else {
|
|
1171
1341
|
|
|
@@ -1178,25 +1348,30 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1178
1348
|
|
|
1179
1349
|
} else {
|
|
1180
1350
|
|
|
1181
|
-
|
|
1182
|
-
const texture = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture[ 0 ] : renderTarget.texture;
|
|
1351
|
+
const textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ];
|
|
1183
1352
|
|
|
1184
|
-
|
|
1185
|
-
const glType = utils.convert( texture.type );
|
|
1186
|
-
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
1187
|
-
const samples = getRenderTargetSamples( renderTarget );
|
|
1353
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
1188
1354
|
|
|
1189
|
-
|
|
1355
|
+
const texture = textures[ i ];
|
|
1190
1356
|
|
|
1191
|
-
|
|
1357
|
+
const glFormat = utils.convert( texture.format, texture.encoding );
|
|
1358
|
+
const glType = utils.convert( texture.type );
|
|
1359
|
+
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
1360
|
+
const samples = getRenderTargetSamples( renderTarget );
|
|
1192
1361
|
|
|
1193
|
-
|
|
1362
|
+
if ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {
|
|
1194
1363
|
|
|
1195
|
-
|
|
1364
|
+
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1196
1365
|
|
|
1197
|
-
|
|
1366
|
+
} else if ( useMultisampledRTT( renderTarget ) ) {
|
|
1198
1367
|
|
|
1199
|
-
|
|
1368
|
+
multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1369
|
+
|
|
1370
|
+
} else {
|
|
1371
|
+
|
|
1372
|
+
_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1373
|
+
|
|
1374
|
+
}
|
|
1200
1375
|
|
|
1201
1376
|
}
|
|
1202
1377
|
|
|
@@ -1238,9 +1413,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1238
1413
|
|
|
1239
1414
|
if ( renderTarget.depthTexture.format === DepthFormat ) {
|
|
1240
1415
|
|
|
1241
|
-
if ( renderTarget
|
|
1416
|
+
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1242
1417
|
|
|
1243
|
-
|
|
1418
|
+
multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
|
|
1244
1419
|
|
|
1245
1420
|
} else {
|
|
1246
1421
|
|
|
@@ -1250,9 +1425,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1250
1425
|
|
|
1251
1426
|
} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {
|
|
1252
1427
|
|
|
1253
|
-
if ( renderTarget
|
|
1428
|
+
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1254
1429
|
|
|
1255
|
-
|
|
1430
|
+
multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
|
|
1256
1431
|
|
|
1257
1432
|
} else {
|
|
1258
1433
|
|
|
@@ -1352,7 +1527,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1352
1527
|
|
|
1353
1528
|
const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
|
|
1354
1529
|
const isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );
|
|
1355
|
-
const isRenderTarget3D = texture.isDataTexture3D || texture.isDataTexture2DArray;
|
|
1356
1530
|
const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;
|
|
1357
1531
|
|
|
1358
1532
|
// Setup framebuffer
|
|
@@ -1397,14 +1571,23 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1397
1571
|
|
|
1398
1572
|
}
|
|
1399
1573
|
|
|
1400
|
-
}
|
|
1574
|
+
}
|
|
1401
1575
|
|
|
1402
|
-
|
|
1576
|
+
if ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {
|
|
1577
|
+
|
|
1578
|
+
const textures = isMultipleRenderTargets ? texture : [ texture ];
|
|
1403
1579
|
|
|
1404
|
-
|
|
1405
|
-
|
|
1580
|
+
renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();
|
|
1581
|
+
renderTargetProperties.__webglColorRenderbuffer = [];
|
|
1406
1582
|
|
|
1407
|
-
|
|
1583
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1584
|
+
|
|
1585
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
1586
|
+
|
|
1587
|
+
const texture = textures[ i ];
|
|
1588
|
+
renderTargetProperties.__webglColorRenderbuffer[ i ] = _gl.createRenderbuffer();
|
|
1589
|
+
|
|
1590
|
+
_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
|
|
1408
1591
|
|
|
1409
1592
|
const glFormat = utils.convert( texture.format, texture.encoding );
|
|
1410
1593
|
const glType = utils.convert( texture.type );
|
|
@@ -1412,26 +1595,21 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1412
1595
|
const samples = getRenderTargetSamples( renderTarget );
|
|
1413
1596
|
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1414
1597
|
|
|
1415
|
-
|
|
1416
|
-
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer );
|
|
1417
|
-
_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );
|
|
1418
|
-
|
|
1419
|
-
if ( renderTarget.depthBuffer ) {
|
|
1420
|
-
|
|
1421
|
-
renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();
|
|
1422
|
-
setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );
|
|
1598
|
+
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
|
|
1423
1599
|
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
state.bindFramebuffer( _gl.FRAMEBUFFER, null );
|
|
1600
|
+
}
|
|
1427
1601
|
|
|
1602
|
+
_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );
|
|
1428
1603
|
|
|
1429
|
-
|
|
1604
|
+
if ( renderTarget.depthBuffer ) {
|
|
1430
1605
|
|
|
1431
|
-
|
|
1606
|
+
renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();
|
|
1607
|
+
setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );
|
|
1432
1608
|
|
|
1433
1609
|
}
|
|
1434
1610
|
|
|
1611
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, null );
|
|
1612
|
+
|
|
1435
1613
|
}
|
|
1436
1614
|
|
|
1437
1615
|
}
|
|
@@ -1484,18 +1662,15 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1484
1662
|
|
|
1485
1663
|
let glTextureType = _gl.TEXTURE_2D;
|
|
1486
1664
|
|
|
1487
|
-
if (
|
|
1488
|
-
|
|
1489
|
-
// Render targets containing layers, i.e: Texture 3D and 2d arrays
|
|
1665
|
+
if ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {
|
|
1490
1666
|
|
|
1491
1667
|
if ( isWebGL2 ) {
|
|
1492
1668
|
|
|
1493
|
-
|
|
1494
|
-
glTextureType = isTexture3D ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;
|
|
1669
|
+
glTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;
|
|
1495
1670
|
|
|
1496
1671
|
} else {
|
|
1497
1672
|
|
|
1498
|
-
console.
|
|
1673
|
+
console.error( 'THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.' );
|
|
1499
1674
|
|
|
1500
1675
|
}
|
|
1501
1676
|
|
|
@@ -1552,15 +1727,38 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1552
1727
|
|
|
1553
1728
|
function updateMultisampleRenderTarget( renderTarget ) {
|
|
1554
1729
|
|
|
1555
|
-
if ( renderTarget.
|
|
1730
|
+
if ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {
|
|
1731
|
+
|
|
1732
|
+
const textures = renderTarget.isWebGLMultipleRenderTargets ? renderTarget.texture : [ renderTarget.texture ];
|
|
1733
|
+
const width = renderTarget.width;
|
|
1734
|
+
const height = renderTarget.height;
|
|
1735
|
+
let mask = _gl.COLOR_BUFFER_BIT;
|
|
1736
|
+
const invalidationArray = [];
|
|
1737
|
+
const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
1738
|
+
const renderTargetProperties = properties.get( renderTarget );
|
|
1739
|
+
const isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );
|
|
1740
|
+
|
|
1741
|
+
// If MRT we need to remove FBO attachments
|
|
1742
|
+
if ( isMultipleRenderTargets ) {
|
|
1743
|
+
|
|
1744
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
1745
|
+
|
|
1746
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1747
|
+
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null );
|
|
1748
|
+
|
|
1749
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
1750
|
+
_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0 );
|
|
1751
|
+
|
|
1752
|
+
}
|
|
1753
|
+
|
|
1754
|
+
}
|
|
1556
1755
|
|
|
1557
|
-
|
|
1756
|
+
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1757
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
1558
1758
|
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
const invalidationArray = [ _gl.COLOR_ATTACHMENT0 ];
|
|
1563
|
-
const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
1759
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
1760
|
+
|
|
1761
|
+
invalidationArray.push( _gl.COLOR_ATTACHMENT0 + i );
|
|
1564
1762
|
|
|
1565
1763
|
if ( renderTarget.depthBuffer ) {
|
|
1566
1764
|
|
|
@@ -1568,45 +1766,83 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1568
1766
|
|
|
1569
1767
|
}
|
|
1570
1768
|
|
|
1571
|
-
|
|
1769
|
+
const ignoreDepthValues = ( renderTargetProperties.__ignoreDepthValues !== undefined ) ? renderTargetProperties.__ignoreDepthValues : false;
|
|
1770
|
+
|
|
1771
|
+
if ( ignoreDepthValues === false ) {
|
|
1572
1772
|
|
|
1573
1773
|
if ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;
|
|
1574
1774
|
if ( renderTarget.stencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;
|
|
1575
1775
|
|
|
1576
1776
|
}
|
|
1577
1777
|
|
|
1578
|
-
|
|
1778
|
+
if ( isMultipleRenderTargets ) {
|
|
1779
|
+
|
|
1780
|
+
_gl.framebufferRenderbuffer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
|
|
1579
1781
|
|
|
1580
|
-
|
|
1581
|
-
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
1782
|
+
}
|
|
1582
1783
|
|
|
1583
|
-
if (
|
|
1784
|
+
if ( ignoreDepthValues === true ) {
|
|
1584
1785
|
|
|
1585
1786
|
_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, [ depthStyle ] );
|
|
1586
1787
|
_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );
|
|
1587
1788
|
|
|
1588
1789
|
}
|
|
1589
1790
|
|
|
1791
|
+
if ( isMultipleRenderTargets ) {
|
|
1792
|
+
|
|
1793
|
+
const webglTexture = properties.get( textures[ i ] ).__webglTexture;
|
|
1794
|
+
_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0 );
|
|
1795
|
+
|
|
1796
|
+
}
|
|
1797
|
+
|
|
1590
1798
|
_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );
|
|
1591
|
-
_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArray );
|
|
1592
1799
|
|
|
1593
|
-
|
|
1594
|
-
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1800
|
+
if ( supportsInvalidateFramebuffer ) {
|
|
1595
1801
|
|
|
1596
|
-
|
|
1802
|
+
_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArray );
|
|
1803
|
+
|
|
1804
|
+
}
|
|
1597
1805
|
|
|
1598
|
-
console.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );
|
|
1599
1806
|
|
|
1600
1807
|
}
|
|
1601
1808
|
|
|
1809
|
+
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );
|
|
1810
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );
|
|
1811
|
+
|
|
1812
|
+
// If MRT since pre-blit we removed the FBO we need to reconstruct the attachments
|
|
1813
|
+
if ( isMultipleRenderTargets ) {
|
|
1814
|
+
|
|
1815
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
1816
|
+
|
|
1817
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1818
|
+
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
|
|
1819
|
+
|
|
1820
|
+
const webglTexture = properties.get( textures[ i ] ).__webglTexture;
|
|
1821
|
+
|
|
1822
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
1823
|
+
_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0 );
|
|
1824
|
+
|
|
1825
|
+
}
|
|
1826
|
+
|
|
1827
|
+
}
|
|
1828
|
+
|
|
1829
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1830
|
+
|
|
1602
1831
|
}
|
|
1603
1832
|
|
|
1604
1833
|
}
|
|
1605
1834
|
|
|
1606
1835
|
function getRenderTargetSamples( renderTarget ) {
|
|
1607
1836
|
|
|
1608
|
-
return (
|
|
1609
|
-
|
|
1837
|
+
return Math.min( maxSamples, renderTarget.samples );
|
|
1838
|
+
|
|
1839
|
+
}
|
|
1840
|
+
|
|
1841
|
+
function useMultisampledRTT( renderTarget ) {
|
|
1842
|
+
|
|
1843
|
+
const renderTargetProperties = properties.get( renderTarget );
|
|
1844
|
+
|
|
1845
|
+
return isWebGL2 && renderTarget.samples > 0 && extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTargetProperties.__useRenderToTexture !== false;
|
|
1610
1846
|
|
|
1611
1847
|
}
|
|
1612
1848
|
|
|
@@ -1631,13 +1867,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1631
1867
|
const format = texture.format;
|
|
1632
1868
|
const type = texture.type;
|
|
1633
1869
|
|
|
1634
|
-
if ( texture.isCompressedTexture === true || texture.format === _SRGBAFormat ) return image;
|
|
1870
|
+
if ( texture.isCompressedTexture === true || texture.isVideoTexture === true || texture.format === _SRGBAFormat ) return image;
|
|
1635
1871
|
|
|
1636
1872
|
if ( encoding !== LinearEncoding ) {
|
|
1637
1873
|
|
|
1638
1874
|
// sRGB
|
|
1639
1875
|
|
|
1640
|
-
if ( encoding === sRGBEncoding
|
|
1876
|
+
if ( encoding === sRGBEncoding ) {
|
|
1641
1877
|
|
|
1642
1878
|
if ( isWebGL2 === false ) {
|
|
1643
1879
|
|
|
@@ -1684,50 +1920,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1684
1920
|
|
|
1685
1921
|
}
|
|
1686
1922
|
|
|
1687
|
-
// backwards compatibility
|
|
1688
|
-
|
|
1689
|
-
let warnedTexture2D = false;
|
|
1690
|
-
let warnedTextureCube = false;
|
|
1691
|
-
|
|
1692
|
-
function safeSetTexture2D( texture, slot ) {
|
|
1693
|
-
|
|
1694
|
-
if ( texture && texture.isWebGLRenderTarget ) {
|
|
1695
|
-
|
|
1696
|
-
if ( warnedTexture2D === false ) {
|
|
1697
|
-
|
|
1698
|
-
console.warn( 'THREE.WebGLTextures.safeSetTexture2D: don\'t use render targets as textures. Use their .texture property instead.' );
|
|
1699
|
-
warnedTexture2D = true;
|
|
1700
|
-
|
|
1701
|
-
}
|
|
1702
|
-
|
|
1703
|
-
texture = texture.texture;
|
|
1704
|
-
|
|
1705
|
-
}
|
|
1706
|
-
|
|
1707
|
-
setTexture2D( texture, slot );
|
|
1708
|
-
|
|
1709
|
-
}
|
|
1710
|
-
|
|
1711
|
-
function safeSetTextureCube( texture, slot ) {
|
|
1712
|
-
|
|
1713
|
-
if ( texture && texture.isWebGLCubeRenderTarget ) {
|
|
1714
|
-
|
|
1715
|
-
if ( warnedTextureCube === false ) {
|
|
1716
|
-
|
|
1717
|
-
console.warn( 'THREE.WebGLTextures.safeSetTextureCube: don\'t use cube render targets as textures. Use their .texture property instead.' );
|
|
1718
|
-
warnedTextureCube = true;
|
|
1719
|
-
|
|
1720
|
-
}
|
|
1721
|
-
|
|
1722
|
-
texture = texture.texture;
|
|
1723
|
-
|
|
1724
|
-
}
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
setTextureCube( texture, slot );
|
|
1728
|
-
|
|
1729
|
-
}
|
|
1730
|
-
|
|
1731
1923
|
//
|
|
1732
1924
|
|
|
1733
1925
|
this.allocateTextureUnit = allocateTextureUnit;
|
|
@@ -1743,9 +1935,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1743
1935
|
this.updateMultisampleRenderTarget = updateMultisampleRenderTarget;
|
|
1744
1936
|
this.setupDepthRenderbuffer = setupDepthRenderbuffer;
|
|
1745
1937
|
this.setupFrameBufferTexture = setupFrameBufferTexture;
|
|
1746
|
-
|
|
1747
|
-
this.safeSetTexture2D = safeSetTexture2D;
|
|
1748
|
-
this.safeSetTextureCube = safeSetTextureCube;
|
|
1938
|
+
this.useMultisampledRTT = useMultisampledRTT;
|
|
1749
1939
|
|
|
1750
1940
|
}
|
|
1751
1941
|
|