super-three 0.136.0 → 0.141.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +24 -26
- package/build/three.cjs +35889 -0
- package/build/three.js +4837 -6036
- package/build/three.min.js +2 -2
- package/build/three.module.js +16548 -17930
- package/examples/js/animation/CCDIKSolver.js +3 -2
- package/examples/js/animation/MMDAnimationHelper.js +3 -1
- package/examples/js/animation/MMDPhysics.js +3 -3
- package/examples/js/cameras/CinematicCamera.js +2 -7
- package/examples/js/controls/ArcballControls.js +3 -1
- package/examples/js/controls/PointerLockControls.js +3 -2
- package/examples/js/controls/TrackballControls.js +1 -4
- package/examples/js/controls/TransformControls.js +5 -6
- package/examples/js/controls/experimental/CameraControls.js +8 -4
- 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 +7 -4
- package/examples/js/effects/AsciiEffect.js +10 -29
- package/examples/js/exporters/ColladaExporter.js +29 -7
- package/examples/js/exporters/EXRExporter.js +458 -0
- package/examples/js/exporters/GLTFExporter.js +233 -105
- package/examples/js/exporters/MMDExporter.js +1 -1
- package/examples/js/exporters/OBJExporter.js +12 -18
- package/examples/js/exporters/PLYExporter.js +15 -20
- package/examples/js/exporters/USDZExporter.js +13 -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/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 +1 -1
- 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/BasisTextureLoader.js +1 -0
- package/examples/js/loaders/ColladaLoader.js +33 -12
- package/examples/js/loaders/DDSLoader.js +23 -30
- package/examples/js/loaders/EXRLoader.js +314 -294
- package/examples/js/loaders/FBXLoader.js +11 -0
- package/examples/js/loaders/FontLoader.js +1 -2
- package/examples/js/loaders/GCodeLoader.js +0 -1
- package/examples/js/loaders/GLTFLoader.js +250 -61
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -2
- package/examples/js/loaders/KMZLoader.js +1 -1
- package/examples/js/loaders/KTX2Loader.js +1 -9
- package/examples/js/loaders/LDrawLoader.js +1342 -962
- package/examples/js/loaders/LUT3dlLoader.js +18 -11
- package/examples/js/loaders/LUTCubeLoader.js +4 -5
- 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 +9 -5
- package/examples/js/loaders/PCDLoader.js +24 -15
- package/examples/js/loaders/PDBLoader.js +11 -11
- package/examples/js/loaders/PLYLoader.js +5 -1
- package/examples/js/loaders/RGBELoader.js +9 -17
- package/examples/js/loaders/RGBMLoader.js +13 -16
- package/examples/js/loaders/STLLoader.js +1 -1
- package/examples/js/loaders/SVGLoader.js +21 -11
- package/examples/js/loaders/VOXLoader.js +3 -4
- package/examples/js/loaders/VRMLLoader.js +9 -21
- package/examples/js/loaders/VTKLoader.js +260 -295
- package/examples/js/loaders/lwo/LWO2Parser.js +4 -4
- package/examples/js/loaders/lwo/LWO3Parser.js +4 -4
- package/examples/js/math/ConvexHull.js +13 -28
- package/examples/js/math/Lut.js +27 -26
- package/examples/js/misc/MorphAnimMesh.js +2 -2
- package/examples/js/misc/ProgressiveLightMap.js +1 -1
- package/examples/js/misc/Volume.js +39 -48
- package/examples/js/misc/VolumeSlice.js +21 -21
- package/examples/js/modifiers/CurveModifier.js +8 -7
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -13
- package/examples/js/modifiers/SimplifyModifier.js +1 -18
- package/examples/js/modifiers/TessellateModifier.js +0 -7
- 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 +10 -16
- package/examples/js/objects/ReflectorForSSRPass.js +1 -11
- package/examples/js/objects/Refractor.js +10 -16
- package/examples/js/objects/ShadowMesh.js +1 -2
- package/examples/js/objects/Sky.js +1 -1
- package/examples/js/objects/Water.js +2 -15
- 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/GlitchPass.js +4 -5
- package/examples/js/postprocessing/LUTPass.js +2 -2
- package/examples/js/postprocessing/OutlinePass.js +8 -17
- package/examples/js/postprocessing/SAOPass.js +2 -7
- package/examples/js/postprocessing/SMAAPass.js +2 -9
- package/examples/js/postprocessing/SSAARenderPass.js +1 -6
- package/examples/js/postprocessing/SSAOPass.js +9 -21
- package/examples/js/postprocessing/SSRPass.js +3 -8
- package/examples/js/postprocessing/SavePass.js +1 -5
- package/examples/js/postprocessing/TAARenderPass.js +4 -4
- package/examples/js/postprocessing/UnrealBloomPass.js +3 -12
- package/examples/js/renderers/CSS2DRenderer.js +20 -19
- package/examples/js/renderers/CSS3DRenderer.js +40 -36
- package/examples/js/renderers/Projector.js +97 -124
- 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/DigitalGlitch.js +3 -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/MMDToonShader.js +0 -1
- package/examples/js/shaders/SSAOShader.js +1 -1
- package/examples/js/shaders/SSRShader.js +3 -3
- package/examples/js/shaders/ToneMapShader.js +1 -1
- package/examples/js/utils/BufferGeometryUtils.js +282 -22
- package/examples/js/utils/GPUStatsPanel.js +1 -1
- package/examples/js/utils/LDrawUtils.js +182 -0
- package/examples/js/utils/SceneUtils.js +59 -0
- 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 +2 -2
- package/examples/jsm/cameras/CinematicCamera.js +2 -5
- package/examples/jsm/{WebGL.js → capabilities/WebGL.js} +2 -2
- package/examples/jsm/{renderers/webgpu → capabilities}/WebGPU.js +7 -1
- package/examples/jsm/controls/ArcballControls.js +3 -1
- package/examples/jsm/controls/PointerLockControls.js +4 -2
- package/examples/jsm/controls/TrackballControls.js +1 -4
- package/examples/jsm/controls/TransformControls.js +6 -6
- package/examples/jsm/controls/experimental/CameraControls.js +2 -2
- 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 +4 -4
- package/examples/jsm/effects/AsciiEffect.js +9 -22
- package/examples/jsm/exporters/ColladaExporter.js +31 -6
- package/examples/jsm/exporters/EXRExporter.js +507 -0
- package/examples/jsm/exporters/GLTFExporter.js +261 -103
- package/examples/jsm/exporters/KTX2Exporter.js +281 -0
- package/examples/jsm/exporters/MMDExporter.js +1 -1
- package/examples/jsm/exporters/OBJExporter.js +11 -18
- package/examples/jsm/exporters/PLYExporter.js +23 -21
- package/examples/jsm/exporters/USDZExporter.js +12 -0
- 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/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 +1 -1
- package/examples/jsm/libs/flow.module.js +947 -183
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/lil-gui.module.min.js +2 -2
- package/examples/jsm/libs/mikktspace.module.js +128 -0
- package/examples/jsm/libs/opentype.module.js +14568 -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/BasisTextureLoader.js +7 -0
- package/examples/jsm/loaders/ColladaLoader.js +40 -12
- package/examples/jsm/loaders/DDSLoader.js +21 -28
- package/examples/jsm/loaders/EXRLoader.js +309 -293
- package/examples/jsm/loaders/FBXLoader.js +11 -0
- package/examples/jsm/loaders/FontLoader.js +2 -2
- package/examples/jsm/loaders/GCodeLoader.js +0 -1
- package/examples/jsm/loaders/GLTFLoader.js +263 -68
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -4
- package/examples/jsm/loaders/KMZLoader.js +1 -1
- package/examples/jsm/loaders/KTX2Loader.js +1 -10
- package/examples/jsm/loaders/LDrawLoader.js +1335 -988
- package/examples/jsm/loaders/LUT3dlLoader.js +19 -14
- package/examples/jsm/loaders/LUTCubeLoader.js +5 -7
- 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 +11 -7
- package/examples/jsm/loaders/PCDLoader.js +25 -17
- package/examples/jsm/loaders/PDBLoader.js +11 -11
- package/examples/jsm/loaders/PLYLoader.js +10 -2
- package/examples/jsm/loaders/RGBELoader.js +11 -20
- package/examples/jsm/loaders/RGBMLoader.js +15 -12
- package/examples/jsm/loaders/STLLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +26 -11
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/VOXLoader.js +5 -5
- package/examples/jsm/loaders/VRMLLoader.js +9 -23
- package/examples/jsm/loaders/VTKLoader.js +256 -284
- package/examples/jsm/loaders/ifc/web-ifc-api.js +9 -8
- package/examples/jsm/loaders/lwo/LWO2Parser.js +4 -4
- package/examples/jsm/loaders/lwo/LWO3Parser.js +4 -4
- package/examples/jsm/math/ConvexHull.js +13 -28
- package/examples/jsm/math/Lut.js +35 -25
- package/examples/jsm/misc/MorphAnimMesh.js +2 -2
- package/examples/jsm/misc/ProgressiveLightMap.js +1 -1
- package/examples/jsm/misc/Volume.js +39 -46
- package/examples/jsm/misc/VolumeSlice.js +21 -21
- package/examples/jsm/modifiers/CurveModifier.js +9 -8
- package/examples/jsm/modifiers/EdgeSplitModifier.js +0 -13
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -18
- package/examples/jsm/modifiers/TessellateModifier.js +0 -7
- package/examples/jsm/node-editor/NodeEditor.js +485 -163
- 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 +283 -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 +103 -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/ReflectNode.js +34 -121
- 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/{renderers/nodes → nodes}/core/CodeNode.js +2 -30
- 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 +26 -67
- 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 +228 -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 +69 -37
- package/examples/jsm/{renderers/nodes → nodes}/core/NodeVar.js +2 -2
- package/examples/jsm/{renderers/nodes → nodes}/core/NodeVary.js +2 -2
- 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 → nodes}/core/VaryNode.js +0 -0
- package/examples/jsm/{renderers/nodes → nodes}/core/constants.js +0 -0
- package/examples/jsm/nodes/display/ColorSpaceNode.js +95 -0
- 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/gpgpu/ComputeNode.js +63 -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 +65 -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 +42 -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 +65 -0
- package/examples/jsm/{renderers/nodes → nodes}/materials/MeshBasicNodeMaterial.js +13 -4
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +162 -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 +84 -16
- package/examples/jsm/nodes/math/CondNode.js +26 -95
- package/examples/jsm/nodes/math/MathNode.js +164 -187
- package/examples/jsm/nodes/math/OperatorNode.js +161 -41
- package/examples/jsm/{renderers/nodes → nodes}/parsers/GLSLNodeFunction.js +2 -2
- 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 +274 -0
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +106 -0
- package/examples/jsm/{renderers/nodes → nodes}/utils/ArrayElementNode.js +3 -3
- package/examples/jsm/{renderers/nodes → nodes}/utils/ConvertNode.js +11 -3
- package/examples/jsm/nodes/utils/JoinNode.js +17 -89
- package/examples/jsm/nodes/utils/MatcapUVNode.js +25 -0
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +32 -0
- package/examples/jsm/{renderers/nodes → nodes}/utils/OscNode.js +18 -2
- package/examples/jsm/{renderers/nodes → nodes}/utils/SplitNode.js +35 -4
- package/examples/jsm/{renderers/nodes → nodes}/utils/SpriteSheetUVNode.js +3 -3
- package/examples/jsm/nodes/utils/TimerNode.js +30 -65
- package/examples/jsm/objects/Lensflare.js +6 -6
- package/examples/jsm/objects/LightningStorm.js +4 -4
- package/examples/jsm/objects/MarchingCubes.js +5 -9
- package/examples/jsm/objects/Reflector.js +8 -19
- package/examples/jsm/objects/ReflectorForSSRPass.js +2 -14
- package/examples/jsm/objects/Refractor.js +8 -19
- package/examples/jsm/objects/ShadowMesh.js +2 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/Water.js +3 -18
- 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/GlitchPass.js +7 -6
- package/examples/jsm/postprocessing/LUTPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +8 -15
- package/examples/jsm/postprocessing/SAOPass.js +2 -9
- package/examples/jsm/postprocessing/SMAAPass.js +2 -11
- package/examples/jsm/postprocessing/SSAARenderPass.js +1 -4
- package/examples/jsm/postprocessing/SSAOPass.js +13 -25
- package/examples/jsm/postprocessing/SSRPass.js +3 -9
- package/examples/jsm/postprocessing/SavePass.js +1 -3
- package/examples/jsm/postprocessing/TAARenderPass.js +4 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +3 -8
- package/examples/jsm/renderers/CSS2DRenderer.js +21 -19
- package/examples/jsm/renderers/CSS3DRenderer.js +39 -34
- package/examples/jsm/renderers/Projector.js +101 -128
- package/examples/jsm/renderers/SVGRenderer.js +4 -4
- package/examples/jsm/renderers/webgl/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +127 -23
- package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +14 -3
- package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +5 -5
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +4 -4
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +16 -10
- 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 +14 -7
- package/examples/jsm/renderers/webgpu/WebGPUInfo.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPUObjects.js +0 -6
- package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +20 -20
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +2 -1
- package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +66 -0
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +49 -28
- 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 +23 -20
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +38 -20
- 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/constants.js +3 -2
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +276 -278
- 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/DigitalGlitch.js +3 -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/MMDToonShader.js +0 -1
- package/examples/jsm/shaders/SSAOShader.js +1 -1
- package/examples/jsm/shaders/SSRShader.js +3 -3
- package/examples/jsm/shaders/ToneMapShader.js +1 -1
- package/examples/jsm/utils/BufferGeometryUtils.js +292 -22
- package/examples/jsm/utils/GPUStatsPanel.js +1 -1
- package/examples/jsm/utils/LDrawUtils.js +202 -0
- package/examples/jsm/utils/SceneUtils.js +76 -2
- 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 +3 -3
- package/examples/jsm/webxr/Text2D.js +1 -1
- package/examples/jsm/webxr/VRButton.js +39 -1
- package/examples/jsm/webxr/XREstimatedLight.js +2 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +3 -7
- package/examples/jsm/webxr/XRHandModelFactory.js +3 -0
- package/package.json +53 -25
- package/src/Three.Legacy.js +41 -1912
- package/src/Three.js +6 -3
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -3
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/PropertyBinding.js +8 -18
- 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 +8 -1
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/constants.js +8 -18
- package/src/core/BufferAttribute.js +7 -12
- package/src/core/BufferGeometry.js +6 -6
- package/src/core/GLBufferAttribute.js +2 -2
- package/src/core/InstancedBufferAttribute.js +2 -2
- package/src/core/InstancedBufferGeometry.js +2 -2
- package/src/core/InstancedInterleavedBuffer.js +2 -2
- package/src/core/InterleavedBuffer.js +2 -2
- package/src/core/InterleavedBufferAttribute.js +5 -11
- package/src/core/Object3D.js +6 -3
- package/src/core/Raycaster.js +2 -2
- package/src/extras/DataUtils.js +127 -40
- package/src/extras/Earcut.js +2 -2
- package/src/extras/ImageUtils.js +63 -0
- package/src/extras/PMREMGenerator.js +152 -174
- package/src/extras/core/CurvePath.js +3 -3
- package/src/extras/core/ShapePath.js +5 -6
- package/src/extras/curves/ArcCurve.js +2 -2
- package/src/extras/curves/CatmullRomCurve3.js +2 -2
- 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/CapsuleGeometry.js +33 -0
- package/src/geometries/ExtrudeGeometry.js +2 -0
- package/src/geometries/Geometries.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/geometries/TorusKnotGeometry.js +2 -2
- package/src/geometries/WireframeGeometry.js +3 -2
- package/src/helpers/BoxHelper.js +2 -2
- package/src/helpers/PointLightHelper.js +1 -1
- package/src/helpers/SkeletonHelper.js +3 -2
- 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 +4 -4
- package/src/lights/SpotLightShadow.js +2 -2
- package/src/loaders/FileLoader.js +23 -4
- package/src/loaders/ImageBitmapLoader.js +2 -2
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/LoaderUtils.js +1 -1
- package/src/loaders/MaterialLoader.js +8 -3
- package/src/loaders/ObjectLoader.js +23 -25
- package/src/materials/LineBasicMaterial.js +6 -13
- package/src/materials/LineDashedMaterial.js +2 -15
- package/src/materials/Material.js +49 -15
- package/src/materials/Materials.js +66 -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 +6 -34
- 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 +3 -17
- 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 +85 -36
- 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 +76 -7
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +2 -3
- package/src/math/Plane.js +2 -2
- package/src/math/Quaternion.js +12 -3
- package/src/math/Spherical.js +1 -1
- package/src/math/SphericalHarmonics3.js +2 -2
- package/src/math/Vector2.js +2 -2
- package/src/math/Vector3.js +12 -3
- package/src/math/Vector4.js +2 -2
- 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 -16
- package/src/renderers/WebGLMultipleRenderTargets.js +8 -5
- package/src/renderers/WebGLRenderTarget.js +19 -18
- package/src/renderers/WebGLRenderer.js +112 -133
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +46 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +1 -0
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +12 -13
- package/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -4
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +3 -19
- package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +107 -0
- package/src/renderers/shaders/ShaderChunk/iridescence_pars_fragment.glsl.js +14 -0
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -7
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +25 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -7
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +25 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +43 -5
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +10 -3
- package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +1 -2
- 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/skinning_pars_vertex.glsl.js +16 -31
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +9 -8
- package/src/renderers/shaders/ShaderChunk.js +6 -0
- package/src/renderers/shaders/ShaderLib/background.glsl.js +8 -2
- package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -3
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +3 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +2 -2
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +6 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +1 -0
- 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 +8 -2
- package/src/renderers/shaders/UniformsLib.js +2 -2
- package/src/renderers/webgl/WebGLAttributes.js +6 -6
- package/src/renderers/webgl/WebGLBackground.js +5 -2
- package/src/renderers/webgl/WebGLBindingStates.js +57 -29
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -4
- package/src/renderers/webgl/WebGLCubeUVMaps.js +29 -16
- package/src/renderers/webgl/WebGLGeometries.js +2 -2
- package/src/renderers/webgl/WebGLLights.js +0 -1
- package/src/renderers/webgl/WebGLMaterials.js +72 -187
- package/src/renderers/webgl/WebGLMorphtargets.js +59 -23
- package/src/renderers/webgl/WebGLProgram.js +56 -30
- package/src/renderers/webgl/WebGLPrograms.js +80 -130
- package/src/renderers/webgl/WebGLShaderCache.js +4 -3
- package/src/renderers/webgl/WebGLShadowMap.js +6 -8
- package/src/renderers/webgl/WebGLState.js +83 -2
- package/src/renderers/webgl/WebGLTextures.js +618 -375
- package/src/renderers/webgl/WebGLUniforms.js +79 -80
- package/src/renderers/webgl/WebGLUtils.js +97 -30
- package/src/renderers/webxr/WebXRManager.js +64 -47
- package/src/scenes/Fog.js +2 -2
- package/src/scenes/FogExp2.js +2 -2
- package/src/scenes/Scene.js +2 -2
- 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 +29 -98
- package/src/textures/VideoTexture.js +2 -4
- package/src/utils.js +15 -1
- package/examples/js/WebGL.js +0 -90
- package/examples/js/csm/Frustum.js +0 -133
- package/examples/js/deprecated/Geometry.js +0 -1656
- 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/js/utils/RoughnessMipmapper.js +0 -268
- 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/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 -154
- 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/postprocessing/SSRrPass.js +0 -579
- package/examples/jsm/renderers/nodes/Nodes.js +0 -164
- package/examples/jsm/renderers/nodes/ShaderNode.js +0 -346
- 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/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/ColorSpaceNode.js +0 -133
- 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 -79
- 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 -241
- 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/JoinNode.js +0 -42
- package/examples/jsm/renderers/nodes/utils/TimerNode.js +0 -47
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +0 -20
- package/examples/jsm/shaders/SSRrShader.js +0 -307
- package/examples/jsm/utils/RoughnessMipmapper.js +0 -288
- package/src/renderers/WebGLMultisampleRenderTarget.js +0 -33
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter,
|
|
1
|
+
import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBAFormat, DepthFormat, DepthStencilFormat, UnsignedShortType, UnsignedIntType, UnsignedInt248Type, FloatType, HalfFloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, sRGBEncoding, LinearEncoding, UnsignedByteType, _SRGBAFormat } from '../../constants.js';
|
|
2
2
|
import * as MathUtils from '../../math/MathUtils.js';
|
|
3
|
+
import { ImageUtils } from '../../extras/ImageUtils.js';
|
|
3
4
|
import { createElementNS } from '../../utils.js';
|
|
4
5
|
|
|
5
6
|
function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {
|
|
@@ -9,12 +10,14 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
9
10
|
const maxCubemapSize = capabilities.maxCubemapSize;
|
|
10
11
|
const maxTextureSize = capabilities.maxTextureSize;
|
|
11
12
|
const maxSamples = capabilities.maxSamples;
|
|
12
|
-
const
|
|
13
|
-
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 );
|
|
14
15
|
|
|
15
16
|
const _videoTextures = new WeakMap();
|
|
16
17
|
let _canvas;
|
|
17
18
|
|
|
19
|
+
const _sources = new WeakMap(); // maps WebglTexture objects to instances of Source
|
|
20
|
+
|
|
18
21
|
// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,
|
|
19
22
|
// also OffscreenCanvas.getContext("webgl"), but not OffscreenCanvas.getContext("2d")!
|
|
20
23
|
// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).
|
|
@@ -24,6 +27,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
24
27
|
try {
|
|
25
28
|
|
|
26
29
|
useOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'
|
|
30
|
+
// eslint-disable-next-line compat/compat
|
|
27
31
|
&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;
|
|
28
32
|
|
|
29
33
|
} catch ( err ) {
|
|
@@ -37,6 +41,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
37
41
|
// Use OffscreenCanvas when available. Specially needed in web workers
|
|
38
42
|
|
|
39
43
|
return useOffscreenCanvas ?
|
|
44
|
+
// eslint-disable-next-line compat/compat
|
|
40
45
|
new OffscreenCanvas( width, height ) : createElementNS( 'canvas' );
|
|
41
46
|
|
|
42
47
|
}
|
|
@@ -130,7 +135,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
130
135
|
|
|
131
136
|
}
|
|
132
137
|
|
|
133
|
-
function getInternalFormat( internalFormatName, glFormat, glType, encoding ) {
|
|
138
|
+
function getInternalFormat( internalFormatName, glFormat, glType, encoding, isVideoTexture = false ) {
|
|
134
139
|
|
|
135
140
|
if ( isWebGL2 === false ) return glFormat;
|
|
136
141
|
|
|
@@ -152,11 +157,11 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
152
157
|
|
|
153
158
|
}
|
|
154
159
|
|
|
155
|
-
if ( glFormat === _gl.
|
|
160
|
+
if ( glFormat === _gl.RG ) {
|
|
156
161
|
|
|
157
|
-
if ( glType === _gl.FLOAT ) internalFormat = _gl.
|
|
158
|
-
if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.
|
|
159
|
-
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;
|
|
160
165
|
|
|
161
166
|
}
|
|
162
167
|
|
|
@@ -164,11 +169,14 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
164
169
|
|
|
165
170
|
if ( glType === _gl.FLOAT ) internalFormat = _gl.RGBA32F;
|
|
166
171
|
if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RGBA16F;
|
|
167
|
-
if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = ( encoding === sRGBEncoding ) ? _gl.SRGB8_ALPHA8 : _gl.RGBA8;
|
|
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;
|
|
168
175
|
|
|
169
176
|
}
|
|
170
177
|
|
|
171
178
|
if ( internalFormat === _gl.R16F || internalFormat === _gl.R32F ||
|
|
179
|
+
internalFormat === _gl.RG16F || internalFormat === _gl.RG32F ||
|
|
172
180
|
internalFormat === _gl.RGBA16F || internalFormat === _gl.RGBA32F ) {
|
|
173
181
|
|
|
174
182
|
extensions.get( 'EXT_color_buffer_float' );
|
|
@@ -235,8 +243,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
235
243
|
|
|
236
244
|
}
|
|
237
245
|
|
|
238
|
-
info.memory.textures --;
|
|
239
|
-
|
|
240
246
|
}
|
|
241
247
|
|
|
242
248
|
function onRenderTargetDispose( event ) {
|
|
@@ -257,12 +263,51 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
257
263
|
|
|
258
264
|
if ( textureProperties.__webglInit === undefined ) return;
|
|
259
265
|
|
|
260
|
-
|
|
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
|
+
}
|
|
261
293
|
|
|
262
294
|
properties.remove( texture );
|
|
263
295
|
|
|
264
296
|
}
|
|
265
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
|
+
|
|
266
311
|
function deallocateRenderTarget( renderTarget ) {
|
|
267
312
|
|
|
268
313
|
const texture = renderTarget.texture;
|
|
@@ -270,8 +315,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
270
315
|
const renderTargetProperties = properties.get( renderTarget );
|
|
271
316
|
const textureProperties = properties.get( texture );
|
|
272
317
|
|
|
273
|
-
if ( ! renderTarget ) return;
|
|
274
|
-
|
|
275
318
|
if ( textureProperties.__webglTexture !== undefined ) {
|
|
276
319
|
|
|
277
320
|
_gl.deleteTexture( textureProperties.__webglTexture );
|
|
@@ -300,7 +343,17 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
300
343
|
_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );
|
|
301
344
|
if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );
|
|
302
345
|
if ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );
|
|
303
|
-
|
|
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
|
+
|
|
304
357
|
if ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );
|
|
305
358
|
|
|
306
359
|
}
|
|
@@ -356,6 +409,28 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
356
409
|
|
|
357
410
|
}
|
|
358
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
|
+
|
|
359
434
|
//
|
|
360
435
|
|
|
361
436
|
function setTexture2D( texture, slot ) {
|
|
@@ -364,13 +439,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
364
439
|
|
|
365
440
|
if ( texture.isVideoTexture ) updateVideoTexture( texture );
|
|
366
441
|
|
|
367
|
-
if ( texture.version > 0 && textureProperties.__version !== texture.version ) {
|
|
442
|
+
if ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {
|
|
368
443
|
|
|
369
444
|
const image = texture.image;
|
|
370
445
|
|
|
371
|
-
if ( image ===
|
|
446
|
+
if ( image === null ) {
|
|
372
447
|
|
|
373
|
-
console.warn( 'THREE.WebGLRenderer: Texture marked for update but image
|
|
448
|
+
console.warn( 'THREE.WebGLRenderer: Texture marked for update but no image data found.' );
|
|
374
449
|
|
|
375
450
|
} else if ( image.complete === false ) {
|
|
376
451
|
|
|
@@ -518,449 +593,545 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
518
593
|
|
|
519
594
|
function initTexture( textureProperties, texture ) {
|
|
520
595
|
|
|
596
|
+
let forceUpload = false;
|
|
597
|
+
|
|
521
598
|
if ( textureProperties.__webglInit === undefined ) {
|
|
522
599
|
|
|
523
600
|
textureProperties.__webglInit = true;
|
|
524
601
|
|
|
525
602
|
texture.addEventListener( 'dispose', onTextureDispose );
|
|
526
603
|
|
|
527
|
-
|
|
604
|
+
}
|
|
528
605
|
|
|
529
|
-
|
|
606
|
+
// create Source <-> WebGLTextures mapping if necessary
|
|
530
607
|
|
|
531
|
-
|
|
608
|
+
const source = texture.source;
|
|
609
|
+
let webglTextures = _sources.get( source );
|
|
532
610
|
|
|
533
|
-
|
|
611
|
+
if ( webglTextures === undefined ) {
|
|
534
612
|
|
|
535
|
-
|
|
613
|
+
webglTextures = {};
|
|
614
|
+
_sources.set( source, webglTextures );
|
|
536
615
|
|
|
537
|
-
|
|
616
|
+
}
|
|
538
617
|
|
|
539
|
-
if
|
|
540
|
-
if ( texture.isDataTexture3D ) textureType = _gl.TEXTURE_3D;
|
|
618
|
+
// check if there is already a WebGLTexture object for the given texture parameters
|
|
541
619
|
|
|
542
|
-
|
|
620
|
+
const textureCacheKey = getTextureCacheKey( texture );
|
|
543
621
|
|
|
544
|
-
|
|
545
|
-
state.bindTexture( textureType, textureProperties.__webglTexture );
|
|
622
|
+
if ( textureCacheKey !== textureProperties.__cacheKey ) {
|
|
546
623
|
|
|
547
|
-
|
|
548
|
-
_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
|
|
549
|
-
_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
|
|
550
|
-
_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, _gl.NONE );
|
|
624
|
+
// if not, create a new instance of WebGLTexture
|
|
551
625
|
|
|
552
|
-
|
|
553
|
-
const image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );
|
|
626
|
+
if ( webglTextures[ textureCacheKey ] === undefined ) {
|
|
554
627
|
|
|
555
|
-
|
|
556
|
-
glFormat = utils.convert( texture.format );
|
|
628
|
+
// create new entry
|
|
557
629
|
|
|
558
|
-
|
|
559
|
-
|
|
630
|
+
webglTextures[ textureCacheKey ] = {
|
|
631
|
+
texture: _gl.createTexture(),
|
|
632
|
+
usedTimes: 0
|
|
633
|
+
};
|
|
560
634
|
|
|
561
|
-
|
|
635
|
+
info.memory.textures ++;
|
|
562
636
|
|
|
563
|
-
|
|
564
|
-
|
|
637
|
+
// when a new instance of WebGLTexture was created, a texture upload is required
|
|
638
|
+
// even if the image contents are identical
|
|
565
639
|
|
|
566
|
-
|
|
567
|
-
const allocateMemory = ( textureProperties.__version === undefined );
|
|
568
|
-
const levels = getMipLevels( texture, image, supportsMips );
|
|
640
|
+
forceUpload = true;
|
|
569
641
|
|
|
570
|
-
|
|
642
|
+
}
|
|
571
643
|
|
|
572
|
-
|
|
644
|
+
webglTextures[ textureCacheKey ].usedTimes ++;
|
|
573
645
|
|
|
574
|
-
|
|
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.
|
|
575
648
|
|
|
576
|
-
|
|
649
|
+
const webglTexture = webglTextures[ textureProperties.__cacheKey ];
|
|
577
650
|
|
|
578
|
-
|
|
651
|
+
if ( webglTexture !== undefined ) {
|
|
579
652
|
|
|
580
|
-
|
|
653
|
+
webglTextures[ textureProperties.__cacheKey ].usedTimes --;
|
|
581
654
|
|
|
582
|
-
|
|
655
|
+
if ( webglTexture.usedTimes === 0 ) {
|
|
583
656
|
|
|
584
|
-
|
|
657
|
+
deleteTexture( texture );
|
|
585
658
|
|
|
586
|
-
}
|
|
659
|
+
}
|
|
587
660
|
|
|
588
|
-
|
|
661
|
+
}
|
|
589
662
|
|
|
590
|
-
|
|
663
|
+
// store references to cache key and WebGLTexture object
|
|
591
664
|
|
|
592
|
-
|
|
665
|
+
textureProperties.__cacheKey = textureCacheKey;
|
|
666
|
+
textureProperties.__webglTexture = webglTextures[ textureCacheKey ].texture;
|
|
593
667
|
|
|
594
|
-
|
|
668
|
+
}
|
|
595
669
|
|
|
596
|
-
|
|
670
|
+
return forceUpload;
|
|
597
671
|
|
|
598
|
-
|
|
672
|
+
}
|
|
599
673
|
|
|
600
|
-
|
|
674
|
+
function uploadTexture( textureProperties, texture, slot ) {
|
|
601
675
|
|
|
602
|
-
|
|
676
|
+
let textureType = _gl.TEXTURE_2D;
|
|
603
677
|
|
|
604
|
-
|
|
678
|
+
if ( texture.isDataArrayTexture ) textureType = _gl.TEXTURE_2D_ARRAY;
|
|
679
|
+
if ( texture.isData3DTexture ) textureType = _gl.TEXTURE_3D;
|
|
605
680
|
|
|
606
|
-
|
|
681
|
+
const forceUpload = initTexture( textureProperties, texture );
|
|
682
|
+
const source = texture.source;
|
|
607
683
|
|
|
608
|
-
|
|
684
|
+
state.activeTexture( _gl.TEXTURE0 + slot );
|
|
685
|
+
state.bindTexture( textureType, textureProperties.__webglTexture );
|
|
609
686
|
|
|
610
|
-
|
|
611
|
-
// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT
|
|
612
|
-
// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)
|
|
613
|
-
if ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {
|
|
687
|
+
if ( source.version !== source.__currentVersion || forceUpload === true ) {
|
|
614
688
|
|
|
615
|
-
|
|
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 );
|
|
616
693
|
|
|
617
|
-
|
|
618
|
-
|
|
694
|
+
const needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( texture.image ) === false;
|
|
695
|
+
let image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );
|
|
696
|
+
image = verifyColorSpace( texture, image );
|
|
619
697
|
|
|
620
|
-
|
|
698
|
+
const supportsMips = isPowerOfTwo( image ) || isWebGL2,
|
|
699
|
+
glFormat = utils.convert( texture.format, texture.encoding );
|
|
621
700
|
|
|
622
|
-
|
|
701
|
+
let glType = utils.convert( texture.type ),
|
|
702
|
+
glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding, texture.isVideoTexture );
|
|
623
703
|
|
|
624
|
-
|
|
704
|
+
setTextureParameters( textureType, texture, supportsMips );
|
|
625
705
|
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
glInternalFormat = _gl.DEPTH_STENCIL;
|
|
706
|
+
let mipmap;
|
|
707
|
+
const mipmaps = texture.mipmaps;
|
|
629
708
|
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
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 );
|
|
634
712
|
|
|
635
|
-
|
|
713
|
+
if ( texture.isDepthTexture ) {
|
|
636
714
|
|
|
637
|
-
|
|
638
|
-
glType = utils.convert( texture.type );
|
|
715
|
+
// populate depth texture with dummy data
|
|
639
716
|
|
|
640
|
-
|
|
717
|
+
glInternalFormat = _gl.DEPTH_COMPONENT;
|
|
641
718
|
|
|
642
|
-
|
|
719
|
+
if ( isWebGL2 ) {
|
|
643
720
|
|
|
644
|
-
|
|
721
|
+
if ( texture.type === FloatType ) {
|
|
645
722
|
|
|
646
|
-
|
|
723
|
+
glInternalFormat = _gl.DEPTH_COMPONENT32F;
|
|
647
724
|
|
|
648
|
-
|
|
725
|
+
} else if ( texture.type === UnsignedIntType ) {
|
|
649
726
|
|
|
650
|
-
|
|
727
|
+
glInternalFormat = _gl.DEPTH_COMPONENT24;
|
|
651
728
|
|
|
652
|
-
|
|
729
|
+
} else if ( texture.type === UnsignedInt248Type ) {
|
|
653
730
|
|
|
654
|
-
|
|
731
|
+
glInternalFormat = _gl.DEPTH24_STENCIL8;
|
|
655
732
|
|
|
656
|
-
|
|
733
|
+
} else {
|
|
657
734
|
|
|
658
|
-
|
|
659
|
-
// if there are no manual mipmaps
|
|
660
|
-
// set 0 level mipmap and then use GL to generate other mipmap levels
|
|
735
|
+
glInternalFormat = _gl.DEPTH_COMPONENT16; // WebGL2 requires sized internalformat for glTexImage2D
|
|
661
736
|
|
|
662
|
-
|
|
737
|
+
}
|
|
663
738
|
|
|
664
|
-
|
|
739
|
+
} else {
|
|
665
740
|
|
|
666
|
-
|
|
741
|
+
if ( texture.type === FloatType ) {
|
|
667
742
|
|
|
668
|
-
|
|
743
|
+
console.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );
|
|
669
744
|
|
|
670
|
-
|
|
745
|
+
}
|
|
671
746
|
|
|
672
|
-
|
|
747
|
+
}
|
|
673
748
|
|
|
674
|
-
|
|
749
|
+
// validation checks for WebGL 1
|
|
675
750
|
|
|
676
|
-
|
|
751
|
+
if ( texture.format === DepthFormat && glInternalFormat === _gl.DEPTH_COMPONENT ) {
|
|
677
752
|
|
|
678
|
-
|
|
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.' );
|
|
679
759
|
|
|
680
|
-
|
|
760
|
+
texture.type = UnsignedIntType;
|
|
761
|
+
glType = utils.convert( texture.type );
|
|
681
762
|
|
|
682
763
|
}
|
|
683
764
|
|
|
684
765
|
}
|
|
685
766
|
|
|
686
|
-
texture.
|
|
767
|
+
if ( texture.format === DepthStencilFormat && glInternalFormat === _gl.DEPTH_COMPONENT ) {
|
|
687
768
|
|
|
688
|
-
|
|
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;
|
|
689
772
|
|
|
690
|
-
|
|
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 ) {
|
|
691
777
|
|
|
692
|
-
|
|
778
|
+
console.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );
|
|
693
779
|
|
|
694
|
-
|
|
780
|
+
texture.type = UnsignedInt248Type;
|
|
781
|
+
glType = utils.convert( texture.type );
|
|
695
782
|
|
|
696
783
|
}
|
|
697
784
|
|
|
698
|
-
|
|
785
|
+
}
|
|
699
786
|
|
|
700
|
-
|
|
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 );
|
|
794
|
+
|
|
795
|
+
} else {
|
|
796
|
+
|
|
797
|
+
state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );
|
|
798
|
+
|
|
799
|
+
}
|
|
707
800
|
|
|
708
|
-
|
|
801
|
+
}
|
|
709
802
|
|
|
710
|
-
if (
|
|
803
|
+
} else if ( texture.isDataTexture ) {
|
|
711
804
|
|
|
712
|
-
|
|
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
|
|
713
808
|
|
|
714
|
-
|
|
809
|
+
if ( mipmaps.length > 0 && supportsMips ) {
|
|
715
810
|
|
|
716
|
-
|
|
811
|
+
if ( useTexStorage && allocateMemory ) {
|
|
717
812
|
|
|
718
|
-
|
|
813
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );
|
|
719
814
|
|
|
720
|
-
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
|
|
721
818
|
|
|
722
|
-
|
|
819
|
+
mipmap = mipmaps[ i ];
|
|
723
820
|
|
|
724
821
|
if ( useTexStorage ) {
|
|
725
822
|
|
|
726
|
-
state.
|
|
823
|
+
state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
|
|
727
824
|
|
|
728
825
|
} else {
|
|
729
826
|
|
|
730
|
-
state.
|
|
827
|
+
state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
|
|
731
828
|
|
|
732
829
|
}
|
|
733
830
|
|
|
734
|
-
} else {
|
|
735
|
-
|
|
736
|
-
console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );
|
|
737
|
-
|
|
738
831
|
}
|
|
739
832
|
|
|
833
|
+
texture.generateMipmaps = false;
|
|
834
|
+
|
|
740
835
|
} else {
|
|
741
836
|
|
|
742
837
|
if ( useTexStorage ) {
|
|
743
838
|
|
|
744
|
-
|
|
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 );
|
|
745
846
|
|
|
746
847
|
} else {
|
|
747
848
|
|
|
748
|
-
state.texImage2D( _gl.TEXTURE_2D,
|
|
849
|
+
state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );
|
|
749
850
|
|
|
750
851
|
}
|
|
751
852
|
|
|
752
853
|
}
|
|
753
854
|
|
|
754
|
-
}
|
|
855
|
+
} else if ( texture.isCompressedTexture ) {
|
|
755
856
|
|
|
756
|
-
|
|
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
|
+
}
|
|
880
|
+
|
|
881
|
+
} else {
|
|
882
|
+
|
|
883
|
+
console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );
|
|
884
|
+
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
} else {
|
|
888
|
+
|
|
889
|
+
if ( useTexStorage ) {
|
|
890
|
+
|
|
891
|
+
state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
|
|
779
892
|
|
|
780
|
-
|
|
893
|
+
} else {
|
|
894
|
+
|
|
895
|
+
state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
|
|
896
|
+
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
}
|
|
781
900
|
|
|
782
901
|
}
|
|
783
902
|
|
|
784
|
-
|
|
903
|
+
} else if ( texture.isDataArrayTexture ) {
|
|
785
904
|
|
|
786
|
-
|
|
905
|
+
if ( useTexStorage ) {
|
|
906
|
+
|
|
907
|
+
if ( allocateMemory ) {
|
|
787
908
|
|
|
788
|
-
|
|
909
|
+
state.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth );
|
|
789
910
|
|
|
790
|
-
|
|
911
|
+
}
|
|
791
912
|
|
|
792
|
-
|
|
913
|
+
state.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
|
|
793
914
|
|
|
794
|
-
|
|
915
|
+
} else {
|
|
795
916
|
|
|
796
|
-
|
|
917
|
+
state.texImage3D( _gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );
|
|
797
918
|
|
|
798
|
-
|
|
919
|
+
}
|
|
799
920
|
|
|
800
|
-
|
|
921
|
+
} else if ( texture.isData3DTexture ) {
|
|
801
922
|
|
|
802
|
-
|
|
923
|
+
if ( useTexStorage ) {
|
|
803
924
|
|
|
804
|
-
|
|
925
|
+
if ( allocateMemory ) {
|
|
805
926
|
|
|
806
|
-
|
|
927
|
+
state.texStorage3D( _gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth );
|
|
807
928
|
|
|
808
|
-
|
|
809
|
-
// if there are no manual mipmaps
|
|
810
|
-
// set 0 level mipmap and then use GL to generate other mipmap levels
|
|
929
|
+
}
|
|
811
930
|
|
|
812
|
-
|
|
931
|
+
state.texSubImage3D( _gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
|
|
813
932
|
|
|
814
|
-
|
|
933
|
+
} else {
|
|
815
934
|
|
|
816
|
-
state.
|
|
935
|
+
state.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );
|
|
817
936
|
|
|
818
937
|
}
|
|
819
938
|
|
|
820
|
-
|
|
939
|
+
} else if ( texture.isFramebufferTexture ) {
|
|
821
940
|
|
|
822
|
-
|
|
941
|
+
if ( allocateMemory ) {
|
|
823
942
|
|
|
824
943
|
if ( useTexStorage ) {
|
|
825
944
|
|
|
826
|
-
state.
|
|
945
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );
|
|
827
946
|
|
|
828
947
|
} else {
|
|
829
948
|
|
|
830
|
-
|
|
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
|
+
}
|
|
831
959
|
|
|
832
960
|
}
|
|
833
961
|
|
|
834
962
|
}
|
|
835
963
|
|
|
836
|
-
texture.generateMipmaps = false;
|
|
837
|
-
|
|
838
964
|
} else {
|
|
839
965
|
|
|
840
|
-
|
|
966
|
+
// regular Texture (image, video, canvas)
|
|
841
967
|
|
|
842
|
-
|
|
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
|
|
843
971
|
|
|
844
|
-
|
|
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 );
|
|
977
|
+
|
|
978
|
+
}
|
|
979
|
+
|
|
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
|
+
}
|
|
845
993
|
|
|
846
994
|
}
|
|
847
995
|
|
|
848
|
-
|
|
996
|
+
texture.generateMipmaps = false;
|
|
849
997
|
|
|
850
998
|
} else {
|
|
851
999
|
|
|
852
|
-
|
|
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
|
+
}
|
|
853
1015
|
|
|
854
1016
|
}
|
|
855
1017
|
|
|
856
1018
|
}
|
|
857
1019
|
|
|
858
|
-
|
|
1020
|
+
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
1021
|
+
|
|
1022
|
+
generateMipmap( textureType );
|
|
1023
|
+
|
|
1024
|
+
}
|
|
859
1025
|
|
|
860
|
-
|
|
1026
|
+
source.__currentVersion = source.version;
|
|
861
1027
|
|
|
862
|
-
|
|
1028
|
+
if ( texture.onUpdate ) texture.onUpdate( texture );
|
|
863
1029
|
|
|
864
1030
|
}
|
|
865
1031
|
|
|
866
1032
|
textureProperties.__version = texture.version;
|
|
867
1033
|
|
|
868
|
-
if ( texture.onUpdate ) texture.onUpdate( texture );
|
|
869
|
-
|
|
870
1034
|
}
|
|
871
1035
|
|
|
872
1036
|
function uploadCubeTexture( textureProperties, texture, slot ) {
|
|
873
1037
|
|
|
874
1038
|
if ( texture.image.length !== 6 ) return;
|
|
875
1039
|
|
|
876
|
-
initTexture( textureProperties, texture );
|
|
1040
|
+
const forceUpload = initTexture( textureProperties, texture );
|
|
1041
|
+
const source = texture.source;
|
|
877
1042
|
|
|
878
1043
|
state.activeTexture( _gl.TEXTURE0 + slot );
|
|
879
1044
|
state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );
|
|
880
1045
|
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
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 );
|
|
885
1052
|
|
|
886
|
-
|
|
887
|
-
|
|
1053
|
+
const isCompressed = ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture );
|
|
1054
|
+
const isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );
|
|
888
1055
|
|
|
889
|
-
|
|
1056
|
+
const cubeImage = [];
|
|
890
1057
|
|
|
891
|
-
|
|
1058
|
+
for ( let i = 0; i < 6; i ++ ) {
|
|
892
1059
|
|
|
893
|
-
|
|
1060
|
+
if ( ! isCompressed && ! isDataTexture ) {
|
|
894
1061
|
|
|
895
|
-
|
|
1062
|
+
cubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );
|
|
896
1063
|
|
|
897
|
-
|
|
1064
|
+
} else {
|
|
898
1065
|
|
|
899
|
-
|
|
1066
|
+
cubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];
|
|
1067
|
+
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
cubeImage[ i ] = verifyColorSpace( texture, cubeImage[ i ] );
|
|
900
1071
|
|
|
901
1072
|
}
|
|
902
1073
|
|
|
903
|
-
|
|
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 );
|
|
1079
|
+
|
|
1080
|
+
const useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );
|
|
1081
|
+
const allocateMemory = ( source.__currentVersion === undefined ) || ( forceUpload === true );
|
|
1082
|
+
let levels = getMipLevels( texture, image, supportsMips );
|
|
904
1083
|
|
|
905
|
-
|
|
906
|
-
supportsMips = isPowerOfTwo( image ) || isWebGL2,
|
|
907
|
-
glFormat = utils.convert( texture.format ),
|
|
908
|
-
glType = utils.convert( texture.type ),
|
|
909
|
-
glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
1084
|
+
setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, supportsMips );
|
|
910
1085
|
|
|
911
|
-
|
|
912
|
-
const allocateMemory = ( textureProperties.__version === undefined );
|
|
913
|
-
let levels = getMipLevels( texture, image, supportsMips );
|
|
1086
|
+
let mipmaps;
|
|
914
1087
|
|
|
915
|
-
|
|
1088
|
+
if ( isCompressed ) {
|
|
916
1089
|
|
|
917
|
-
|
|
1090
|
+
if ( useTexStorage && allocateMemory ) {
|
|
918
1091
|
|
|
919
|
-
|
|
1092
|
+
state.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height );
|
|
920
1093
|
|
|
921
|
-
|
|
1094
|
+
}
|
|
922
1095
|
|
|
923
|
-
|
|
1096
|
+
for ( let i = 0; i < 6; i ++ ) {
|
|
924
1097
|
|
|
925
|
-
|
|
1098
|
+
mipmaps = cubeImage[ i ].mipmaps;
|
|
926
1099
|
|
|
927
|
-
|
|
1100
|
+
for ( let j = 0; j < mipmaps.length; j ++ ) {
|
|
928
1101
|
|
|
929
|
-
|
|
1102
|
+
const mipmap = mipmaps[ j ];
|
|
930
1103
|
|
|
931
|
-
|
|
1104
|
+
if ( texture.format !== RGBAFormat ) {
|
|
932
1105
|
|
|
933
|
-
|
|
1106
|
+
if ( glFormat !== null ) {
|
|
934
1107
|
|
|
935
|
-
|
|
1108
|
+
if ( useTexStorage ) {
|
|
936
1109
|
|
|
937
|
-
|
|
1110
|
+
state.compressedTexSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );
|
|
938
1111
|
|
|
939
|
-
|
|
1112
|
+
} else {
|
|
940
1113
|
|
|
941
|
-
|
|
1114
|
+
state.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );
|
|
1115
|
+
|
|
1116
|
+
}
|
|
942
1117
|
|
|
943
1118
|
} else {
|
|
944
1119
|
|
|
945
|
-
|
|
1120
|
+
console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );
|
|
946
1121
|
|
|
947
1122
|
}
|
|
948
1123
|
|
|
949
1124
|
} else {
|
|
950
1125
|
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
}
|
|
954
|
-
|
|
955
|
-
} else {
|
|
1126
|
+
if ( useTexStorage ) {
|
|
956
1127
|
|
|
957
|
-
|
|
1128
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
|
|
958
1129
|
|
|
959
|
-
|
|
1130
|
+
} else {
|
|
960
1131
|
|
|
961
|
-
|
|
1132
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
|
|
962
1133
|
|
|
963
|
-
|
|
1134
|
+
}
|
|
964
1135
|
|
|
965
1136
|
}
|
|
966
1137
|
|
|
@@ -968,78 +1139,78 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
968
1139
|
|
|
969
1140
|
}
|
|
970
1141
|
|
|
971
|
-
}
|
|
1142
|
+
} else {
|
|
972
1143
|
|
|
973
|
-
|
|
1144
|
+
mipmaps = texture.mipmaps;
|
|
974
1145
|
|
|
975
|
-
|
|
1146
|
+
if ( useTexStorage && allocateMemory ) {
|
|
976
1147
|
|
|
977
|
-
|
|
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)
|
|
978
1151
|
|
|
979
|
-
|
|
980
|
-
// Normal textures and compressed cube textures define base level + mips with their mipmap array
|
|
981
|
-
// Uncompressed cube textures use their mipmap array only for mips (no base level)
|
|
1152
|
+
if ( mipmaps.length > 0 ) levels ++;
|
|
982
1153
|
|
|
983
|
-
|
|
1154
|
+
state.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, cubeImage[ 0 ].width, cubeImage[ 0 ].height );
|
|
984
1155
|
|
|
985
|
-
|
|
1156
|
+
}
|
|
986
1157
|
|
|
987
|
-
|
|
1158
|
+
for ( let i = 0; i < 6; i ++ ) {
|
|
988
1159
|
|
|
989
|
-
|
|
1160
|
+
if ( isDataTexture ) {
|
|
990
1161
|
|
|
991
|
-
|
|
1162
|
+
if ( useTexStorage ) {
|
|
992
1163
|
|
|
993
|
-
|
|
1164
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[ i ].width, cubeImage[ i ].height, glFormat, glType, cubeImage[ i ].data );
|
|
994
1165
|
|
|
995
|
-
|
|
1166
|
+
} else {
|
|
996
1167
|
|
|
997
|
-
|
|
1168
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );
|
|
998
1169
|
|
|
999
|
-
|
|
1170
|
+
}
|
|
1000
1171
|
|
|
1001
|
-
|
|
1172
|
+
for ( let j = 0; j < mipmaps.length; j ++ ) {
|
|
1002
1173
|
|
|
1003
|
-
|
|
1174
|
+
const mipmap = mipmaps[ j ];
|
|
1175
|
+
const mipmapImage = mipmap.image[ i ].image;
|
|
1004
1176
|
|
|
1005
|
-
|
|
1006
|
-
const mipmapImage = mipmap.image[ i ].image;
|
|
1177
|
+
if ( useTexStorage ) {
|
|
1007
1178
|
|
|
1008
|
-
|
|
1179
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data );
|
|
1009
1180
|
|
|
1010
|
-
|
|
1181
|
+
} else {
|
|
1011
1182
|
|
|
1012
|
-
|
|
1183
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );
|
|
1013
1184
|
|
|
1014
|
-
|
|
1185
|
+
}
|
|
1015
1186
|
|
|
1016
1187
|
}
|
|
1017
1188
|
|
|
1018
|
-
}
|
|
1189
|
+
} else {
|
|
1019
1190
|
|
|
1020
|
-
|
|
1191
|
+
if ( useTexStorage ) {
|
|
1021
1192
|
|
|
1022
|
-
|
|
1193
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[ i ] );
|
|
1023
1194
|
|
|
1024
|
-
|
|
1195
|
+
} else {
|
|
1025
1196
|
|
|
1026
|
-
|
|
1197
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );
|
|
1027
1198
|
|
|
1028
|
-
|
|
1199
|
+
}
|
|
1029
1200
|
|
|
1030
|
-
|
|
1201
|
+
for ( let j = 0; j < mipmaps.length; j ++ ) {
|
|
1031
1202
|
|
|
1032
|
-
|
|
1203
|
+
const mipmap = mipmaps[ j ];
|
|
1033
1204
|
|
|
1034
|
-
|
|
1205
|
+
if ( useTexStorage ) {
|
|
1035
1206
|
|
|
1036
|
-
|
|
1207
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[ i ] );
|
|
1037
1208
|
|
|
1038
|
-
|
|
1209
|
+
} else {
|
|
1039
1210
|
|
|
1040
|
-
|
|
1211
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );
|
|
1041
1212
|
|
|
1042
|
-
|
|
1213
|
+
}
|
|
1043
1214
|
|
|
1044
1215
|
}
|
|
1045
1216
|
|
|
@@ -1049,19 +1220,21 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1049
1220
|
|
|
1050
1221
|
}
|
|
1051
1222
|
|
|
1052
|
-
|
|
1223
|
+
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
1053
1224
|
|
|
1054
|
-
|
|
1225
|
+
// We assume images for cube map have the same size.
|
|
1226
|
+
generateMipmap( _gl.TEXTURE_CUBE_MAP );
|
|
1055
1227
|
|
|
1056
|
-
|
|
1057
|
-
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
source.__currentVersion = source.version;
|
|
1231
|
+
|
|
1232
|
+
if ( texture.onUpdate ) texture.onUpdate( texture );
|
|
1058
1233
|
|
|
1059
1234
|
}
|
|
1060
1235
|
|
|
1061
1236
|
textureProperties.__version = texture.version;
|
|
1062
1237
|
|
|
1063
|
-
if ( texture.onUpdate ) texture.onUpdate( texture );
|
|
1064
|
-
|
|
1065
1238
|
}
|
|
1066
1239
|
|
|
1067
1240
|
// Render targets
|
|
@@ -1069,7 +1242,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1069
1242
|
// Setup storage for target texture and bind it to correct framebuffer
|
|
1070
1243
|
function setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget ) {
|
|
1071
1244
|
|
|
1072
|
-
const glFormat = utils.convert( texture.format );
|
|
1245
|
+
const glFormat = utils.convert( texture.format, texture.encoding );
|
|
1073
1246
|
const glType = utils.convert( texture.type );
|
|
1074
1247
|
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
1075
1248
|
const renderTargetProperties = properties.get( renderTarget );
|
|
@@ -1089,9 +1262,10 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1089
1262
|
}
|
|
1090
1263
|
|
|
1091
1264
|
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
1092
|
-
if ( renderTarget.useRenderToTexture ) {
|
|
1093
1265
|
|
|
1094
|
-
|
|
1266
|
+
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1267
|
+
|
|
1268
|
+
multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0, getRenderTargetSamples( renderTarget ) );
|
|
1095
1269
|
|
|
1096
1270
|
} else {
|
|
1097
1271
|
|
|
@@ -1113,7 +1287,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1113
1287
|
|
|
1114
1288
|
let glInternalFormat = _gl.DEPTH_COMPONENT16;
|
|
1115
1289
|
|
|
1116
|
-
if ( isMultisample || renderTarget
|
|
1290
|
+
if ( isMultisample || useMultisampledRTT( renderTarget ) ) {
|
|
1117
1291
|
|
|
1118
1292
|
const depthTexture = renderTarget.depthTexture;
|
|
1119
1293
|
|
|
@@ -1133,9 +1307,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1133
1307
|
|
|
1134
1308
|
const samples = getRenderTargetSamples( renderTarget );
|
|
1135
1309
|
|
|
1136
|
-
if ( renderTarget
|
|
1310
|
+
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1137
1311
|
|
|
1138
|
-
|
|
1312
|
+
multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1139
1313
|
|
|
1140
1314
|
} else {
|
|
1141
1315
|
|
|
@@ -1155,13 +1329,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1155
1329
|
|
|
1156
1330
|
const samples = getRenderTargetSamples( renderTarget );
|
|
1157
1331
|
|
|
1158
|
-
if ( isMultisample && renderTarget
|
|
1332
|
+
if ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {
|
|
1159
1333
|
|
|
1160
1334
|
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );
|
|
1161
1335
|
|
|
1162
|
-
} else if ( renderTarget
|
|
1336
|
+
} else if ( useMultisampledRTT( renderTarget ) ) {
|
|
1163
1337
|
|
|
1164
|
-
|
|
1338
|
+
multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );
|
|
1165
1339
|
|
|
1166
1340
|
} else {
|
|
1167
1341
|
|
|
@@ -1174,25 +1348,30 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1174
1348
|
|
|
1175
1349
|
} else {
|
|
1176
1350
|
|
|
1177
|
-
|
|
1178
|
-
const texture = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture[ 0 ] : renderTarget.texture;
|
|
1351
|
+
const textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ];
|
|
1179
1352
|
|
|
1180
|
-
|
|
1181
|
-
const glType = utils.convert( texture.type );
|
|
1182
|
-
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
1183
|
-
const samples = getRenderTargetSamples( renderTarget );
|
|
1353
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
1184
1354
|
|
|
1185
|
-
|
|
1355
|
+
const texture = textures[ i ];
|
|
1186
1356
|
|
|
1187
|
-
|
|
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 );
|
|
1188
1361
|
|
|
1189
|
-
|
|
1362
|
+
if ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {
|
|
1190
1363
|
|
|
1191
|
-
|
|
1364
|
+
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1192
1365
|
|
|
1193
|
-
|
|
1366
|
+
} else if ( useMultisampledRTT( renderTarget ) ) {
|
|
1194
1367
|
|
|
1195
|
-
|
|
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
|
+
}
|
|
1196
1375
|
|
|
1197
1376
|
}
|
|
1198
1377
|
|
|
@@ -1234,9 +1413,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1234
1413
|
|
|
1235
1414
|
if ( renderTarget.depthTexture.format === DepthFormat ) {
|
|
1236
1415
|
|
|
1237
|
-
if ( renderTarget
|
|
1416
|
+
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1238
1417
|
|
|
1239
|
-
|
|
1418
|
+
multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
|
|
1240
1419
|
|
|
1241
1420
|
} else {
|
|
1242
1421
|
|
|
@@ -1246,9 +1425,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1246
1425
|
|
|
1247
1426
|
} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {
|
|
1248
1427
|
|
|
1249
|
-
if ( renderTarget
|
|
1428
|
+
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1250
1429
|
|
|
1251
|
-
|
|
1430
|
+
multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
|
|
1252
1431
|
|
|
1253
1432
|
} else {
|
|
1254
1433
|
|
|
@@ -1348,19 +1527,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1348
1527
|
|
|
1349
1528
|
const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
|
|
1350
1529
|
const isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );
|
|
1351
|
-
const isRenderTarget3D = texture.isDataTexture3D || texture.isDataTexture2DArray;
|
|
1352
1530
|
const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;
|
|
1353
1531
|
|
|
1354
|
-
// Handles WebGL2 RGBFormat fallback - #18858
|
|
1355
|
-
|
|
1356
|
-
if ( isWebGL2 && texture.format === RGBFormat && ( texture.type === FloatType || texture.type === HalfFloatType ) ) {
|
|
1357
|
-
|
|
1358
|
-
texture.format = RGBAFormat;
|
|
1359
|
-
|
|
1360
|
-
console.warn( 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' );
|
|
1361
|
-
|
|
1362
|
-
}
|
|
1363
|
-
|
|
1364
1532
|
// Setup framebuffer
|
|
1365
1533
|
|
|
1366
1534
|
if ( isCube ) {
|
|
@@ -1403,41 +1571,45 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1403
1571
|
|
|
1404
1572
|
}
|
|
1405
1573
|
|
|
1406
|
-
}
|
|
1574
|
+
}
|
|
1407
1575
|
|
|
1408
|
-
|
|
1576
|
+
if ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {
|
|
1577
|
+
|
|
1578
|
+
const textures = isMultipleRenderTargets ? texture : [ texture ];
|
|
1409
1579
|
|
|
1410
|
-
|
|
1411
|
-
|
|
1580
|
+
renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();
|
|
1581
|
+
renderTargetProperties.__webglColorRenderbuffer = [];
|
|
1412
1582
|
|
|
1413
|
-
|
|
1583
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1414
1584
|
|
|
1415
|
-
|
|
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 ] );
|
|
1591
|
+
|
|
1592
|
+
const glFormat = utils.convert( texture.format, texture.encoding );
|
|
1416
1593
|
const glType = utils.convert( texture.type );
|
|
1417
1594
|
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
1418
1595
|
const samples = getRenderTargetSamples( renderTarget );
|
|
1419
1596
|
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1420
1597
|
|
|
1421
|
-
|
|
1422
|
-
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer );
|
|
1423
|
-
_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );
|
|
1424
|
-
|
|
1425
|
-
if ( renderTarget.depthBuffer ) {
|
|
1426
|
-
|
|
1427
|
-
renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();
|
|
1428
|
-
setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );
|
|
1598
|
+
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
|
|
1429
1599
|
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
state.bindFramebuffer( _gl.FRAMEBUFFER, null );
|
|
1600
|
+
}
|
|
1433
1601
|
|
|
1602
|
+
_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );
|
|
1434
1603
|
|
|
1435
|
-
|
|
1604
|
+
if ( renderTarget.depthBuffer ) {
|
|
1436
1605
|
|
|
1437
|
-
|
|
1606
|
+
renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();
|
|
1607
|
+
setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );
|
|
1438
1608
|
|
|
1439
1609
|
}
|
|
1440
1610
|
|
|
1611
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, null );
|
|
1612
|
+
|
|
1441
1613
|
}
|
|
1442
1614
|
|
|
1443
1615
|
}
|
|
@@ -1490,18 +1662,15 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1490
1662
|
|
|
1491
1663
|
let glTextureType = _gl.TEXTURE_2D;
|
|
1492
1664
|
|
|
1493
|
-
if (
|
|
1494
|
-
|
|
1495
|
-
// Render targets containing layers, i.e: Texture 3D and 2d arrays
|
|
1665
|
+
if ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {
|
|
1496
1666
|
|
|
1497
1667
|
if ( isWebGL2 ) {
|
|
1498
1668
|
|
|
1499
|
-
|
|
1500
|
-
glTextureType = isTexture3D ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;
|
|
1669
|
+
glTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;
|
|
1501
1670
|
|
|
1502
1671
|
} else {
|
|
1503
1672
|
|
|
1504
|
-
console.
|
|
1673
|
+
console.error( 'THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.' );
|
|
1505
1674
|
|
|
1506
1675
|
}
|
|
1507
1676
|
|
|
@@ -1558,15 +1727,38 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1558
1727
|
|
|
1559
1728
|
function updateMultisampleRenderTarget( renderTarget ) {
|
|
1560
1729
|
|
|
1561
|
-
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 ++ ) {
|
|
1562
1745
|
|
|
1563
|
-
|
|
1746
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1747
|
+
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null );
|
|
1564
1748
|
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
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
|
+
}
|
|
1755
|
+
|
|
1756
|
+
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1757
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
1758
|
+
|
|
1759
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
1760
|
+
|
|
1761
|
+
invalidationArray.push( _gl.COLOR_ATTACHMENT0 + i );
|
|
1570
1762
|
|
|
1571
1763
|
if ( renderTarget.depthBuffer ) {
|
|
1572
1764
|
|
|
@@ -1574,45 +1766,83 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1574
1766
|
|
|
1575
1767
|
}
|
|
1576
1768
|
|
|
1577
|
-
|
|
1769
|
+
const ignoreDepthValues = ( renderTargetProperties.__ignoreDepthValues !== undefined ) ? renderTargetProperties.__ignoreDepthValues : false;
|
|
1770
|
+
|
|
1771
|
+
if ( ignoreDepthValues === false ) {
|
|
1578
1772
|
|
|
1579
1773
|
if ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;
|
|
1580
1774
|
if ( renderTarget.stencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;
|
|
1581
1775
|
|
|
1582
1776
|
}
|
|
1583
1777
|
|
|
1584
|
-
|
|
1778
|
+
if ( isMultipleRenderTargets ) {
|
|
1585
1779
|
|
|
1586
|
-
|
|
1587
|
-
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
1780
|
+
_gl.framebufferRenderbuffer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
|
|
1588
1781
|
|
|
1589
|
-
|
|
1782
|
+
}
|
|
1783
|
+
|
|
1784
|
+
if ( ignoreDepthValues === true ) {
|
|
1590
1785
|
|
|
1591
1786
|
_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, [ depthStyle ] );
|
|
1592
1787
|
_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );
|
|
1593
1788
|
|
|
1594
1789
|
}
|
|
1595
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
|
+
|
|
1596
1798
|
_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );
|
|
1597
|
-
_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArray );
|
|
1598
1799
|
|
|
1599
|
-
|
|
1600
|
-
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1800
|
+
if ( supportsInvalidateFramebuffer ) {
|
|
1601
1801
|
|
|
1602
|
-
|
|
1802
|
+
_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArray );
|
|
1803
|
+
|
|
1804
|
+
}
|
|
1805
|
+
|
|
1806
|
+
|
|
1807
|
+
}
|
|
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 ) {
|
|
1603
1814
|
|
|
1604
|
-
|
|
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
|
+
}
|
|
1605
1826
|
|
|
1606
1827
|
}
|
|
1607
1828
|
|
|
1829
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1830
|
+
|
|
1608
1831
|
}
|
|
1609
1832
|
|
|
1610
1833
|
}
|
|
1611
1834
|
|
|
1612
1835
|
function getRenderTargetSamples( renderTarget ) {
|
|
1613
1836
|
|
|
1614
|
-
return (
|
|
1615
|
-
|
|
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;
|
|
1616
1846
|
|
|
1617
1847
|
}
|
|
1618
1848
|
|
|
@@ -1631,47 +1861,62 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1631
1861
|
|
|
1632
1862
|
}
|
|
1633
1863
|
|
|
1634
|
-
|
|
1864
|
+
function verifyColorSpace( texture, image ) {
|
|
1635
1865
|
|
|
1636
|
-
|
|
1637
|
-
|
|
1866
|
+
const encoding = texture.encoding;
|
|
1867
|
+
const format = texture.format;
|
|
1868
|
+
const type = texture.type;
|
|
1638
1869
|
|
|
1639
|
-
|
|
1870
|
+
if ( texture.isCompressedTexture === true || texture.isVideoTexture === true || texture.format === _SRGBAFormat ) return image;
|
|
1640
1871
|
|
|
1641
|
-
if (
|
|
1872
|
+
if ( encoding !== LinearEncoding ) {
|
|
1642
1873
|
|
|
1643
|
-
|
|
1874
|
+
// sRGB
|
|
1644
1875
|
|
|
1645
|
-
|
|
1646
|
-
warnedTexture2D = true;
|
|
1876
|
+
if ( encoding === sRGBEncoding ) {
|
|
1647
1877
|
|
|
1648
|
-
|
|
1878
|
+
if ( isWebGL2 === false ) {
|
|
1649
1879
|
|
|
1650
|
-
|
|
1880
|
+
// in WebGL 1, try to use EXT_sRGB extension and unsized formats
|
|
1651
1881
|
|
|
1652
|
-
|
|
1882
|
+
if ( extensions.has( 'EXT_sRGB' ) === true && format === RGBAFormat ) {
|
|
1653
1883
|
|
|
1654
|
-
|
|
1884
|
+
texture.format = _SRGBAFormat;
|
|
1655
1885
|
|
|
1656
|
-
|
|
1886
|
+
// it's not possible to generate mips in WebGL 1 with this extension
|
|
1657
1887
|
|
|
1658
|
-
|
|
1888
|
+
texture.minFilter = LinearFilter;
|
|
1889
|
+
texture.generateMipmaps = false;
|
|
1659
1890
|
|
|
1660
|
-
|
|
1891
|
+
} else {
|
|
1661
1892
|
|
|
1662
|
-
|
|
1893
|
+
// slow fallback (CPU decode)
|
|
1663
1894
|
|
|
1664
|
-
|
|
1665
|
-
warnedTextureCube = true;
|
|
1895
|
+
image = ImageUtils.sRGBToLinear( image );
|
|
1666
1896
|
|
|
1667
|
-
|
|
1897
|
+
}
|
|
1668
1898
|
|
|
1669
|
-
|
|
1899
|
+
} else {
|
|
1670
1900
|
|
|
1671
|
-
|
|
1901
|
+
// in WebGL 2 uncompressed textures can only be sRGB encoded if they have the RGBA8 format
|
|
1672
1902
|
|
|
1903
|
+
if ( format !== RGBAFormat || type !== UnsignedByteType ) {
|
|
1673
1904
|
|
|
1674
|
-
|
|
1905
|
+
console.warn( 'THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.' );
|
|
1906
|
+
|
|
1907
|
+
}
|
|
1908
|
+
|
|
1909
|
+
}
|
|
1910
|
+
|
|
1911
|
+
} else {
|
|
1912
|
+
|
|
1913
|
+
console.error( 'THREE.WebGLTextures: Unsupported texture encoding:', encoding );
|
|
1914
|
+
|
|
1915
|
+
}
|
|
1916
|
+
|
|
1917
|
+
}
|
|
1918
|
+
|
|
1919
|
+
return image;
|
|
1675
1920
|
|
|
1676
1921
|
}
|
|
1677
1922
|
|
|
@@ -1690,9 +1935,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1690
1935
|
this.updateMultisampleRenderTarget = updateMultisampleRenderTarget;
|
|
1691
1936
|
this.setupDepthRenderbuffer = setupDepthRenderbuffer;
|
|
1692
1937
|
this.setupFrameBufferTexture = setupFrameBufferTexture;
|
|
1693
|
-
|
|
1694
|
-
this.safeSetTexture2D = safeSetTexture2D;
|
|
1695
|
-
this.safeSetTextureCube = safeSetTextureCube;
|
|
1938
|
+
this.useMultisampledRTT = useMultisampledRTT;
|
|
1696
1939
|
|
|
1697
1940
|
}
|
|
1698
1941
|
|