super-three 0.137.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/README.md +23 -25
- package/build/three.cjs +3721 -4964
- package/build/three.js +3723 -4966
- package/build/three.min.js +1 -1
- package/build/three.module.js +5705 -7216
- package/examples/js/animation/CCDIKSolver.js +3 -2
- package/examples/js/animation/MMDPhysics.js +2 -2
- 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 +2 -2
- 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 +213 -128
- 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/DecalGeometry.js +0 -7
- package/examples/js/geometries/LightningStrike.js +2 -2
- package/examples/js/geometries/ParametricGeometries.js +3 -3
- 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 +235 -40
- 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/ColladaLoader.js +33 -12
- package/examples/js/loaders/DDSLoader.js +23 -30
- package/examples/js/loaders/EXRLoader.js +269 -266
- 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 +249 -60
- package/examples/js/loaders/KMZLoader.js +1 -1
- package/examples/js/loaders/KTX2Loader.js +1 -9
- package/examples/js/loaders/LDrawLoader.js +3 -11
- package/examples/js/loaders/LUT3dlLoader.js +1 -1
- package/examples/js/loaders/LUTCubeLoader.js +1 -1
- package/examples/js/loaders/LWOLoader.js +4 -2
- package/examples/js/loaders/LogLuvLoader.js +1 -2
- package/examples/js/loaders/MMDLoader.js +18 -4
- package/examples/js/loaders/NRRDLoader.js +1 -1
- package/examples/js/loaders/OBJLoader.js +9 -5
- package/examples/js/loaders/PCDLoader.js +22 -13
- package/examples/js/loaders/PDBLoader.js +11 -11
- package/examples/js/loaders/PLYLoader.js +5 -1
- package/examples/js/loaders/RGBELoader.js +3 -11
- package/examples/js/loaders/RGBMLoader.js +12 -15
- package/examples/js/loaders/SVGLoader.js +16 -9
- package/examples/js/loaders/VOXLoader.js +3 -4
- 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 +6 -15
- 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 +37 -46
- package/examples/js/misc/VolumeSlice.js +21 -21
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -7
- package/examples/js/modifiers/SimplifyModifier.js +1 -8
- package/examples/js/modifiers/TessellateModifier.js +0 -7
- package/examples/js/objects/Lensflare.js +2 -2
- package/examples/js/objects/LightningStorm.js +4 -5
- package/examples/js/objects/MarchingCubes.js +6 -11
- package/examples/js/objects/Reflector.js +10 -4
- package/examples/js/objects/ReflectorForSSRPass.js +1 -1
- package/examples/js/objects/Refractor.js +10 -4
- package/examples/js/objects/ShadowMesh.js +1 -2
- package/examples/js/objects/Sky.js +1 -1
- package/examples/js/objects/Water.js +1 -2
- package/examples/js/objects/Water2.js +1 -1
- package/examples/js/postprocessing/AdaptiveToneMappingPass.js +6 -10
- package/examples/js/postprocessing/AfterimagePass.js +2 -6
- package/examples/js/postprocessing/BloomPass.js +50 -19
- package/examples/js/postprocessing/DotScreenPass.js +1 -1
- package/examples/js/postprocessing/EffectComposer.js +1 -6
- package/examples/js/postprocessing/LUTPass.js +2 -2
- package/examples/js/postprocessing/OutlinePass.js +7 -12
- package/examples/js/postprocessing/SAOPass.js +2 -7
- package/examples/js/postprocessing/SSAARenderPass.js +1 -6
- package/examples/js/postprocessing/SSRPass.js +3 -8
- package/examples/js/postprocessing/TAARenderPass.js +4 -4
- package/examples/js/postprocessing/UnrealBloomPass.js +3 -12
- package/examples/js/renderers/CSS2DRenderer.js +20 -25
- package/examples/js/renderers/CSS3DRenderer.js +6 -7
- 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/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/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 +6 -6
- 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 +1 -1
- package/examples/jsm/capabilities/WebGPU.js +6 -0
- 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 +231 -125
- package/examples/jsm/exporters/KTX2Exporter.js +281 -0
- 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/DecalGeometry.js +0 -7
- package/examples/jsm/geometries/LightningStrike.js +2 -2
- package/examples/jsm/geometries/ParametricGeometries.js +3 -3
- 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 +252 -34
- package/examples/jsm/interactive/SelectionHelper.js +1 -1
- package/examples/jsm/libs/flow.module.js +30 -27
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- 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/ColladaLoader.js +40 -12
- package/examples/jsm/loaders/DDSLoader.js +21 -28
- package/examples/jsm/loaders/EXRLoader.js +268 -265
- 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 -66
- package/examples/jsm/loaders/KMZLoader.js +1 -1
- package/examples/jsm/loaders/KTX2Loader.js +1 -10
- package/examples/jsm/loaders/LDrawLoader.js +4 -11
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +5 -3
- package/examples/jsm/loaders/LogLuvLoader.js +2 -2
- package/examples/jsm/loaders/MMDLoader.js +21 -3
- package/examples/jsm/loaders/NRRDLoader.js +1 -2
- package/examples/jsm/loaders/OBJLoader.js +11 -7
- package/examples/jsm/loaders/PCDLoader.js +23 -15
- package/examples/jsm/loaders/PDBLoader.js +11 -11
- package/examples/jsm/loaders/PLYLoader.js +10 -2
- package/examples/jsm/loaders/RGBELoader.js +4 -12
- package/examples/jsm/loaders/RGBMLoader.js +14 -11
- package/examples/jsm/loaders/SVGLoader.js +17 -9
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/VOXLoader.js +5 -5
- 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 +6 -15
- 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 +37 -44
- package/examples/jsm/misc/VolumeSlice.js +21 -21
- package/examples/jsm/modifiers/EdgeSplitModifier.js +0 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -8
- package/examples/jsm/modifiers/TessellateModifier.js +0 -7
- package/examples/jsm/node-editor/NodeEditor.js +78 -9
- package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +14 -0
- package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
- package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
- package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
- package/examples/jsm/node-editor/core/BaseNode.js +17 -11
- 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 +3 -3
- package/examples/jsm/node-editor/display/NormalMapEditor.js +49 -0
- package/examples/jsm/node-editor/examples/matcap.json +1 -0
- package/examples/jsm/node-editor/inputs/ColorEditor.js +7 -6
- package/examples/jsm/node-editor/inputs/FloatEditor.js +2 -2
- package/examples/jsm/node-editor/inputs/SliderEditor.js +2 -2
- package/examples/jsm/node-editor/inputs/TextureEditor.js +155 -0
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +3 -2
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +3 -2
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +4 -3
- package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +3 -3
- package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +16 -11
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +15 -5
- package/examples/jsm/node-editor/math/AngleEditor.js +3 -2
- package/examples/jsm/node-editor/math/DotEditor.js +2 -2
- package/examples/jsm/node-editor/math/InvertEditor.js +4 -4
- package/examples/jsm/node-editor/math/LimiterEditor.js +22 -9
- package/examples/jsm/node-editor/math/NormalizeEditor.js +3 -2
- package/examples/jsm/node-editor/math/OperatorEditor.js +20 -8
- package/examples/jsm/node-editor/math/PowerEditor.js +17 -8
- package/examples/jsm/node-editor/math/TrigonometryEditor.js +3 -2
- package/examples/jsm/node-editor/procedural/CheckerEditor.js +4 -4
- package/examples/jsm/node-editor/utils/JoinEditor.js +2 -2
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +2 -2
- package/examples/jsm/node-editor/utils/PreviewEditor.js +166 -0
- package/examples/jsm/node-editor/utils/SplitEditor.js +2 -2
- package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
- 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/{renderers/nodes → nodes}/display/ColorSpaceNode.js +10 -11
- package/examples/jsm/nodes/display/FrontFacingNode.js +21 -0
- package/examples/jsm/nodes/display/NormalMapNode.js +86 -0
- package/examples/jsm/nodes/display/ToneMappingNode.js +51 -0
- package/examples/jsm/nodes/fog/FogNode.js +31 -0
- package/examples/jsm/nodes/fog/FogRangeNode.js +27 -0
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +33 -0
- package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +9 -0
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +27 -0
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +18 -0
- package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +18 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +18 -0
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +94 -0
- package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +22 -0
- package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +12 -0
- package/examples/jsm/nodes/functions/material/getRoughness.js +18 -0
- package/examples/jsm/nodes/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 +16 -0
- package/examples/jsm/{renderers/nodes → nodes}/utils/SpriteSheetUVNode.js +3 -3
- package/examples/jsm/nodes/utils/TimerNode.js +30 -65
- package/examples/jsm/objects/Lensflare.js +2 -2
- package/examples/jsm/objects/LightningStorm.js +4 -4
- package/examples/jsm/objects/MarchingCubes.js +5 -9
- package/examples/jsm/objects/Reflector.js +8 -4
- package/examples/jsm/objects/ReflectorForSSRPass.js +2 -2
- package/examples/jsm/objects/Refractor.js +8 -4
- package/examples/jsm/objects/ShadowMesh.js +2 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/Water.js +2 -2
- package/examples/jsm/objects/Water2.js +2 -2
- package/examples/jsm/offscreen/jank.js +5 -5
- package/examples/jsm/offscreen/offscreen.js +1 -1
- package/examples/jsm/offscreen/scene.js +11 -11
- package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +5 -7
- package/examples/jsm/postprocessing/AfterimagePass.js +0 -10
- package/examples/jsm/postprocessing/BloomPass.js +48 -20
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
- package/examples/jsm/postprocessing/EffectComposer.js +1 -9
- package/examples/jsm/postprocessing/LUTPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +7 -11
- package/examples/jsm/postprocessing/SAOPass.js +2 -9
- package/examples/jsm/postprocessing/SSAARenderPass.js +1 -4
- package/examples/jsm/postprocessing/SSRPass.js +3 -9
- package/examples/jsm/postprocessing/TAARenderPass.js +4 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +3 -8
- package/examples/jsm/renderers/CSS2DRenderer.js +21 -24
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -8
- 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 +47 -24
- 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 +37 -18
- package/examples/jsm/renderers/webgpu/WebGPUUniform.js +14 -14
- package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +5 -32
- package/examples/jsm/renderers/webgpu/WebGPUUniformsGroup.js +2 -2
- package/examples/jsm/renderers/webgpu/constants.js +3 -2
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +276 -284
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeSampledTexture.js +20 -2
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +24 -14
- package/examples/jsm/shaders/BlendShader.js +2 -1
- package/examples/jsm/shaders/CopyShader.js +4 -3
- package/examples/jsm/shaders/FXAAShader.js +219 -1051
- package/examples/jsm/shaders/FreiChenShader.js +1 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +1 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +1 -1
- package/examples/jsm/shaders/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 +6 -6
- 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 +15 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +3 -7
- package/examples/jsm/webxr/XRHandModelFactory.js +3 -0
- package/package.json +37 -19
- 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 +5 -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 +6 -1
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/constants.js +7 -2
- package/src/core/BufferAttribute.js +7 -12
- package/src/core/BufferGeometry.js +4 -4
- 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/PMREMGenerator.js +132 -104
- 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/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 +3 -1
- 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 +48 -14
- 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 +5 -5
- package/src/math/Color.js +84 -35
- 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 +11 -2
- 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 -14
- package/src/renderers/WebGLMultipleRenderTargets.js +8 -5
- package/src/renderers/WebGLRenderTarget.js +16 -18
- package/src/renderers/WebGLRenderer.js +108 -63
- 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/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 +0 -6
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +25 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +23 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +43 -5
- 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 +1 -1
- package/src/renderers/shaders/ShaderChunk.js +6 -0
- package/src/renderers/shaders/ShaderLib/background.glsl.js +8 -0
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +3 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +6 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +1 -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 +6 -0
- package/src/renderers/shaders/UniformsLib.js +2 -2
- package/src/renderers/webgl/WebGLAttributes.js +6 -6
- package/src/renderers/webgl/WebGLBackground.js +3 -0
- package/src/renderers/webgl/WebGLBindingStates.js +57 -29
- package/src/renderers/webgl/WebGLLights.js +0 -1
- package/src/renderers/webgl/WebGLMaterials.js +72 -187
- package/src/renderers/webgl/WebGLMorphtargets.js +47 -23
- package/src/renderers/webgl/WebGLProgram.js +57 -19
- package/src/renderers/webgl/WebGLPrograms.js +75 -86
- package/src/renderers/webgl/WebGLShaderCache.js +4 -3
- package/src/renderers/webgl/WebGLShadowMap.js +6 -8
- package/src/renderers/webgl/WebGLTextures.js +567 -380
- package/src/renderers/webgl/WebGLUniforms.js +79 -80
- package/src/renderers/webgl/WebGLUtils.js +12 -1
- package/src/renderers/webxr/WebXRManager.js +60 -45
- 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 +27 -97
- package/src/textures/VideoTexture.js +2 -2
- 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/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 -145
- package/examples/jsm/nodes/utils/MaxMIPLevelNode.js +0 -56
- package/examples/jsm/nodes/utils/RemapNode.js +0 -155
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -101
- package/examples/jsm/nodes/utils/SubSlotNode.js +0 -77
- package/examples/jsm/nodes/utils/SwitchNode.js +0 -103
- package/examples/jsm/nodes/utils/UVTransformNode.js +0 -66
- package/examples/jsm/nodes/utils/VelocityNode.js +0 -170
- package/examples/jsm/objects/ReflectorRTT.js +0 -15
- package/examples/jsm/postprocessing/SSRrPass.js +0 -579
- package/examples/jsm/renderers/nodes/Nodes.js +0 -166
- package/examples/jsm/renderers/nodes/ShaderNode.js +0 -373
- package/examples/jsm/renderers/nodes/accessors/CameraNode.js +0 -68
- package/examples/jsm/renderers/nodes/accessors/NormalNode.js +0 -63
- package/examples/jsm/renderers/nodes/accessors/PositionNode.js +0 -67
- package/examples/jsm/renderers/nodes/accessors/ReferenceNode.js +0 -91
- package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +0 -107
- package/examples/jsm/renderers/nodes/accessors/UVNode.js +0 -25
- package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +0 -23
- package/examples/jsm/renderers/nodes/core/AttributeNode.js +0 -54
- package/examples/jsm/renderers/nodes/core/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 -634
- package/examples/jsm/renderers/nodes/core/NodeFrame.js +0 -59
- package/examples/jsm/renderers/nodes/core/NodeUniform.js +0 -28
- package/examples/jsm/renderers/nodes/core/TempNode.js +0 -43
- package/examples/jsm/renderers/nodes/core/VarNode.js +0 -51
- package/examples/jsm/renderers/nodes/display/NormalMapNode.js +0 -87
- package/examples/jsm/renderers/nodes/functions/BSDFs.js +0 -122
- package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +0 -27
- package/examples/jsm/renderers/nodes/inputs/BufferNode.js +0 -25
- package/examples/jsm/renderers/nodes/inputs/ColorNode.js +0 -18
- package/examples/jsm/renderers/nodes/inputs/FloatNode.js +0 -17
- package/examples/jsm/renderers/nodes/inputs/IntNode.js +0 -17
- package/examples/jsm/renderers/nodes/inputs/Matrix3Node.js +0 -18
- package/examples/jsm/renderers/nodes/inputs/Matrix4Node.js +0 -18
- package/examples/jsm/renderers/nodes/inputs/TextureNode.js +0 -74
- package/examples/jsm/renderers/nodes/inputs/Vector2Node.js +0 -18
- package/examples/jsm/renderers/nodes/inputs/Vector3Node.js +0 -18
- package/examples/jsm/renderers/nodes/inputs/Vector4Node.js +0 -18
- package/examples/jsm/renderers/nodes/lights/LightContextNode.js +0 -59
- package/examples/jsm/renderers/nodes/lights/LightNode.js +0 -79
- package/examples/jsm/renderers/nodes/lights/LightsNode.js +0 -44
- package/examples/jsm/renderers/nodes/materials/Materials.js +0 -11
- package/examples/jsm/renderers/nodes/materials/MeshStandardNodeMaterial.js +0 -63
- package/examples/jsm/renderers/nodes/math/CondNode.js +0 -60
- package/examples/jsm/renderers/nodes/math/MathNode.js +0 -242
- package/examples/jsm/renderers/nodes/math/OperatorNode.js +0 -174
- package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +0 -36
- package/examples/jsm/renderers/nodes/utils/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/src/renderers/WebGLMultisampleRenderTarget.js +0 -33
|
@@ -10,12 +10,14 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
10
10
|
const maxCubemapSize = capabilities.maxCubemapSize;
|
|
11
11
|
const maxTextureSize = capabilities.maxTextureSize;
|
|
12
12
|
const maxSamples = capabilities.maxSamples;
|
|
13
|
-
const
|
|
14
|
-
const
|
|
13
|
+
const multisampledRTTExt = extensions.has( 'WEBGL_multisampled_render_to_texture' ) ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : null;
|
|
14
|
+
const supportsInvalidateFramebuffer = /OculusBrowser/g.test( navigator.userAgent );
|
|
15
15
|
|
|
16
16
|
const _videoTextures = new WeakMap();
|
|
17
17
|
let _canvas;
|
|
18
18
|
|
|
19
|
+
const _sources = new WeakMap(); // maps WebglTexture objects to instances of Source
|
|
20
|
+
|
|
19
21
|
// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,
|
|
20
22
|
// also OffscreenCanvas.getContext("webgl"), but not OffscreenCanvas.getContext("2d")!
|
|
21
23
|
// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).
|
|
@@ -25,6 +27,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
25
27
|
try {
|
|
26
28
|
|
|
27
29
|
useOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'
|
|
30
|
+
// eslint-disable-next-line compat/compat
|
|
28
31
|
&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;
|
|
29
32
|
|
|
30
33
|
} catch ( err ) {
|
|
@@ -38,6 +41,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
38
41
|
// Use OffscreenCanvas when available. Specially needed in web workers
|
|
39
42
|
|
|
40
43
|
return useOffscreenCanvas ?
|
|
44
|
+
// eslint-disable-next-line compat/compat
|
|
41
45
|
new OffscreenCanvas( width, height ) : createElementNS( 'canvas' );
|
|
42
46
|
|
|
43
47
|
}
|
|
@@ -239,8 +243,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
239
243
|
|
|
240
244
|
}
|
|
241
245
|
|
|
242
|
-
info.memory.textures --;
|
|
243
|
-
|
|
244
246
|
}
|
|
245
247
|
|
|
246
248
|
function onRenderTargetDispose( event ) {
|
|
@@ -261,12 +263,51 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
261
263
|
|
|
262
264
|
if ( textureProperties.__webglInit === undefined ) return;
|
|
263
265
|
|
|
264
|
-
|
|
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
|
+
}
|
|
265
293
|
|
|
266
294
|
properties.remove( texture );
|
|
267
295
|
|
|
268
296
|
}
|
|
269
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
|
+
|
|
270
311
|
function deallocateRenderTarget( renderTarget ) {
|
|
271
312
|
|
|
272
313
|
const texture = renderTarget.texture;
|
|
@@ -274,8 +315,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
274
315
|
const renderTargetProperties = properties.get( renderTarget );
|
|
275
316
|
const textureProperties = properties.get( texture );
|
|
276
317
|
|
|
277
|
-
if ( ! renderTarget ) return;
|
|
278
|
-
|
|
279
318
|
if ( textureProperties.__webglTexture !== undefined ) {
|
|
280
319
|
|
|
281
320
|
_gl.deleteTexture( textureProperties.__webglTexture );
|
|
@@ -304,7 +343,17 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
304
343
|
_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );
|
|
305
344
|
if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );
|
|
306
345
|
if ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );
|
|
307
|
-
|
|
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
|
+
|
|
308
357
|
if ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );
|
|
309
358
|
|
|
310
359
|
}
|
|
@@ -360,6 +409,28 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
360
409
|
|
|
361
410
|
}
|
|
362
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
|
+
|
|
363
434
|
//
|
|
364
435
|
|
|
365
436
|
function setTexture2D( texture, slot ) {
|
|
@@ -368,13 +439,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
368
439
|
|
|
369
440
|
if ( texture.isVideoTexture ) updateVideoTexture( texture );
|
|
370
441
|
|
|
371
|
-
if ( texture.version > 0 && textureProperties.__version !== texture.version ) {
|
|
442
|
+
if ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {
|
|
372
443
|
|
|
373
444
|
const image = texture.image;
|
|
374
445
|
|
|
375
|
-
if ( image ===
|
|
446
|
+
if ( image === null ) {
|
|
376
447
|
|
|
377
|
-
console.warn( 'THREE.WebGLRenderer: Texture marked for update but image
|
|
448
|
+
console.warn( 'THREE.WebGLRenderer: Texture marked for update but no image data found.' );
|
|
378
449
|
|
|
379
450
|
} else if ( image.complete === false ) {
|
|
380
451
|
|
|
@@ -522,452 +593,545 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
522
593
|
|
|
523
594
|
function initTexture( textureProperties, texture ) {
|
|
524
595
|
|
|
596
|
+
let forceUpload = false;
|
|
597
|
+
|
|
525
598
|
if ( textureProperties.__webglInit === undefined ) {
|
|
526
599
|
|
|
527
600
|
textureProperties.__webglInit = true;
|
|
528
601
|
|
|
529
602
|
texture.addEventListener( 'dispose', onTextureDispose );
|
|
530
603
|
|
|
531
|
-
|
|
604
|
+
}
|
|
532
605
|
|
|
533
|
-
|
|
606
|
+
// create Source <-> WebGLTextures mapping if necessary
|
|
534
607
|
|
|
535
|
-
|
|
608
|
+
const source = texture.source;
|
|
609
|
+
let webglTextures = _sources.get( source );
|
|
536
610
|
|
|
537
|
-
|
|
611
|
+
if ( webglTextures === undefined ) {
|
|
538
612
|
|
|
539
|
-
|
|
613
|
+
webglTextures = {};
|
|
614
|
+
_sources.set( source, webglTextures );
|
|
540
615
|
|
|
541
|
-
|
|
616
|
+
}
|
|
542
617
|
|
|
543
|
-
if
|
|
544
|
-
if ( texture.isDataTexture3D ) textureType = _gl.TEXTURE_3D;
|
|
618
|
+
// check if there is already a WebGLTexture object for the given texture parameters
|
|
545
619
|
|
|
546
|
-
|
|
620
|
+
const textureCacheKey = getTextureCacheKey( texture );
|
|
547
621
|
|
|
548
|
-
|
|
549
|
-
state.bindTexture( textureType, textureProperties.__webglTexture );
|
|
622
|
+
if ( textureCacheKey !== textureProperties.__cacheKey ) {
|
|
550
623
|
|
|
551
|
-
|
|
552
|
-
_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
|
|
553
|
-
_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
|
|
554
|
-
_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, _gl.NONE );
|
|
624
|
+
// if not, create a new instance of WebGLTexture
|
|
555
625
|
|
|
556
|
-
|
|
557
|
-
let image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );
|
|
558
|
-
image = verifyColorSpace( texture, image );
|
|
626
|
+
if ( webglTextures[ textureCacheKey ] === undefined ) {
|
|
559
627
|
|
|
560
|
-
|
|
561
|
-
glFormat = utils.convert( texture.format, texture.encoding );
|
|
628
|
+
// create new entry
|
|
562
629
|
|
|
563
|
-
|
|
564
|
-
|
|
630
|
+
webglTextures[ textureCacheKey ] = {
|
|
631
|
+
texture: _gl.createTexture(),
|
|
632
|
+
usedTimes: 0
|
|
633
|
+
};
|
|
565
634
|
|
|
566
|
-
|
|
635
|
+
info.memory.textures ++;
|
|
567
636
|
|
|
568
|
-
|
|
569
|
-
|
|
637
|
+
// when a new instance of WebGLTexture was created, a texture upload is required
|
|
638
|
+
// even if the image contents are identical
|
|
570
639
|
|
|
571
|
-
|
|
572
|
-
const allocateMemory = ( textureProperties.__version === undefined );
|
|
573
|
-
const levels = getMipLevels( texture, image, supportsMips );
|
|
640
|
+
forceUpload = true;
|
|
574
641
|
|
|
575
|
-
|
|
642
|
+
}
|
|
576
643
|
|
|
577
|
-
|
|
644
|
+
webglTextures[ textureCacheKey ].usedTimes ++;
|
|
578
645
|
|
|
579
|
-
|
|
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.
|
|
580
648
|
|
|
581
|
-
|
|
649
|
+
const webglTexture = webglTextures[ textureProperties.__cacheKey ];
|
|
582
650
|
|
|
583
|
-
|
|
651
|
+
if ( webglTexture !== undefined ) {
|
|
584
652
|
|
|
585
|
-
|
|
653
|
+
webglTextures[ textureProperties.__cacheKey ].usedTimes --;
|
|
586
654
|
|
|
587
|
-
|
|
655
|
+
if ( webglTexture.usedTimes === 0 ) {
|
|
588
656
|
|
|
589
|
-
|
|
657
|
+
deleteTexture( texture );
|
|
590
658
|
|
|
591
|
-
}
|
|
659
|
+
}
|
|
592
660
|
|
|
593
|
-
|
|
661
|
+
}
|
|
594
662
|
|
|
595
|
-
|
|
663
|
+
// store references to cache key and WebGLTexture object
|
|
596
664
|
|
|
597
|
-
|
|
665
|
+
textureProperties.__cacheKey = textureCacheKey;
|
|
666
|
+
textureProperties.__webglTexture = webglTextures[ textureCacheKey ].texture;
|
|
598
667
|
|
|
599
|
-
|
|
668
|
+
}
|
|
600
669
|
|
|
601
|
-
|
|
670
|
+
return forceUpload;
|
|
602
671
|
|
|
603
|
-
|
|
672
|
+
}
|
|
604
673
|
|
|
605
|
-
|
|
674
|
+
function uploadTexture( textureProperties, texture, slot ) {
|
|
606
675
|
|
|
607
|
-
|
|
676
|
+
let textureType = _gl.TEXTURE_2D;
|
|
608
677
|
|
|
609
|
-
|
|
678
|
+
if ( texture.isDataArrayTexture ) textureType = _gl.TEXTURE_2D_ARRAY;
|
|
679
|
+
if ( texture.isData3DTexture ) textureType = _gl.TEXTURE_3D;
|
|
610
680
|
|
|
611
|
-
|
|
681
|
+
const forceUpload = initTexture( textureProperties, texture );
|
|
682
|
+
const source = texture.source;
|
|
612
683
|
|
|
613
|
-
|
|
684
|
+
state.activeTexture( _gl.TEXTURE0 + slot );
|
|
685
|
+
state.bindTexture( textureType, textureProperties.__webglTexture );
|
|
614
686
|
|
|
615
|
-
|
|
616
|
-
// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT
|
|
617
|
-
// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)
|
|
618
|
-
if ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {
|
|
687
|
+
if ( source.version !== source.__currentVersion || forceUpload === true ) {
|
|
619
688
|
|
|
620
|
-
|
|
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 );
|
|
621
693
|
|
|
622
|
-
|
|
623
|
-
|
|
694
|
+
const needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( texture.image ) === false;
|
|
695
|
+
let image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );
|
|
696
|
+
image = verifyColorSpace( texture, image );
|
|
624
697
|
|
|
625
|
-
|
|
698
|
+
const supportsMips = isPowerOfTwo( image ) || isWebGL2,
|
|
699
|
+
glFormat = utils.convert( texture.format, texture.encoding );
|
|
626
700
|
|
|
627
|
-
|
|
701
|
+
let glType = utils.convert( texture.type ),
|
|
702
|
+
glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding, texture.isVideoTexture );
|
|
628
703
|
|
|
629
|
-
|
|
704
|
+
setTextureParameters( textureType, texture, supportsMips );
|
|
630
705
|
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
glInternalFormat = _gl.DEPTH_STENCIL;
|
|
706
|
+
let mipmap;
|
|
707
|
+
const mipmaps = texture.mipmaps;
|
|
634
708
|
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
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 );
|
|
639
712
|
|
|
640
|
-
|
|
713
|
+
if ( texture.isDepthTexture ) {
|
|
641
714
|
|
|
642
|
-
|
|
643
|
-
glType = utils.convert( texture.type );
|
|
715
|
+
// populate depth texture with dummy data
|
|
644
716
|
|
|
645
|
-
|
|
717
|
+
glInternalFormat = _gl.DEPTH_COMPONENT;
|
|
646
718
|
|
|
647
|
-
|
|
719
|
+
if ( isWebGL2 ) {
|
|
648
720
|
|
|
649
|
-
|
|
721
|
+
if ( texture.type === FloatType ) {
|
|
650
722
|
|
|
651
|
-
|
|
723
|
+
glInternalFormat = _gl.DEPTH_COMPONENT32F;
|
|
652
724
|
|
|
653
|
-
|
|
725
|
+
} else if ( texture.type === UnsignedIntType ) {
|
|
654
726
|
|
|
655
|
-
|
|
727
|
+
glInternalFormat = _gl.DEPTH_COMPONENT24;
|
|
656
728
|
|
|
657
|
-
|
|
729
|
+
} else if ( texture.type === UnsignedInt248Type ) {
|
|
658
730
|
|
|
659
|
-
|
|
731
|
+
glInternalFormat = _gl.DEPTH24_STENCIL8;
|
|
660
732
|
|
|
661
|
-
|
|
733
|
+
} else {
|
|
662
734
|
|
|
663
|
-
|
|
664
|
-
// if there are no manual mipmaps
|
|
665
|
-
// set 0 level mipmap and then use GL to generate other mipmap levels
|
|
735
|
+
glInternalFormat = _gl.DEPTH_COMPONENT16; // WebGL2 requires sized internalformat for glTexImage2D
|
|
666
736
|
|
|
667
|
-
|
|
737
|
+
}
|
|
668
738
|
|
|
669
|
-
|
|
739
|
+
} else {
|
|
670
740
|
|
|
671
|
-
|
|
741
|
+
if ( texture.type === FloatType ) {
|
|
672
742
|
|
|
673
|
-
|
|
743
|
+
console.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );
|
|
674
744
|
|
|
675
|
-
|
|
745
|
+
}
|
|
676
746
|
|
|
677
|
-
|
|
747
|
+
}
|
|
678
748
|
|
|
679
|
-
|
|
749
|
+
// validation checks for WebGL 1
|
|
680
750
|
|
|
681
|
-
|
|
751
|
+
if ( texture.format === DepthFormat && glInternalFormat === _gl.DEPTH_COMPONENT ) {
|
|
682
752
|
|
|
683
|
-
|
|
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.' );
|
|
684
759
|
|
|
685
|
-
|
|
760
|
+
texture.type = UnsignedIntType;
|
|
761
|
+
glType = utils.convert( texture.type );
|
|
686
762
|
|
|
687
763
|
}
|
|
688
764
|
|
|
689
765
|
}
|
|
690
766
|
|
|
691
|
-
texture.
|
|
767
|
+
if ( texture.format === DepthStencilFormat && glInternalFormat === _gl.DEPTH_COMPONENT ) {
|
|
692
768
|
|
|
693
|
-
|
|
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;
|
|
694
772
|
|
|
695
|
-
|
|
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 ) {
|
|
696
777
|
|
|
697
|
-
|
|
778
|
+
console.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );
|
|
698
779
|
|
|
699
|
-
|
|
780
|
+
texture.type = UnsignedInt248Type;
|
|
781
|
+
glType = utils.convert( texture.type );
|
|
700
782
|
|
|
701
783
|
}
|
|
702
784
|
|
|
703
|
-
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
//
|
|
704
788
|
|
|
705
|
-
|
|
789
|
+
if ( allocateMemory ) {
|
|
706
790
|
|
|
707
|
-
|
|
791
|
+
if ( useTexStorage ) {
|
|
708
792
|
|
|
709
|
-
|
|
793
|
+
state.texStorage2D( _gl.TEXTURE_2D, 1, glInternalFormat, image.width, image.height );
|
|
710
794
|
|
|
711
|
-
|
|
795
|
+
} else {
|
|
796
|
+
|
|
797
|
+
state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );
|
|
798
|
+
|
|
799
|
+
}
|
|
712
800
|
|
|
713
|
-
|
|
801
|
+
}
|
|
714
802
|
|
|
715
|
-
if (
|
|
803
|
+
} else if ( texture.isDataTexture ) {
|
|
716
804
|
|
|
717
|
-
|
|
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
|
|
718
808
|
|
|
719
|
-
|
|
809
|
+
if ( mipmaps.length > 0 && supportsMips ) {
|
|
720
810
|
|
|
721
|
-
|
|
811
|
+
if ( useTexStorage && allocateMemory ) {
|
|
722
812
|
|
|
723
|
-
|
|
813
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );
|
|
724
814
|
|
|
725
|
-
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
|
|
726
818
|
|
|
727
|
-
|
|
819
|
+
mipmap = mipmaps[ i ];
|
|
728
820
|
|
|
729
821
|
if ( useTexStorage ) {
|
|
730
822
|
|
|
731
|
-
state.
|
|
823
|
+
state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
|
|
732
824
|
|
|
733
825
|
} else {
|
|
734
826
|
|
|
735
|
-
state.
|
|
827
|
+
state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
|
|
736
828
|
|
|
737
829
|
}
|
|
738
830
|
|
|
739
|
-
} else {
|
|
740
|
-
|
|
741
|
-
console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );
|
|
742
|
-
|
|
743
831
|
}
|
|
744
832
|
|
|
833
|
+
texture.generateMipmaps = false;
|
|
834
|
+
|
|
745
835
|
} else {
|
|
746
836
|
|
|
747
837
|
if ( useTexStorage ) {
|
|
748
838
|
|
|
749
|
-
|
|
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 );
|
|
750
846
|
|
|
751
847
|
} else {
|
|
752
848
|
|
|
753
|
-
state.texImage2D( _gl.TEXTURE_2D,
|
|
849
|
+
state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );
|
|
754
850
|
|
|
755
851
|
}
|
|
756
852
|
|
|
757
853
|
}
|
|
758
854
|
|
|
759
|
-
}
|
|
855
|
+
} else if ( texture.isCompressedTexture ) {
|
|
856
|
+
|
|
857
|
+
if ( useTexStorage && allocateMemory ) {
|
|
760
858
|
|
|
761
|
-
|
|
859
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );
|
|
762
860
|
|
|
763
|
-
|
|
861
|
+
}
|
|
764
862
|
|
|
765
|
-
|
|
863
|
+
for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
|
|
766
864
|
|
|
767
|
-
|
|
865
|
+
mipmap = mipmaps[ i ];
|
|
768
866
|
|
|
769
|
-
|
|
867
|
+
if ( texture.format !== RGBAFormat ) {
|
|
770
868
|
|
|
771
|
-
|
|
869
|
+
if ( glFormat !== null ) {
|
|
772
870
|
|
|
773
|
-
|
|
871
|
+
if ( useTexStorage ) {
|
|
774
872
|
|
|
775
|
-
|
|
873
|
+
state.compressedTexSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );
|
|
776
874
|
|
|
777
|
-
|
|
875
|
+
} else {
|
|
778
876
|
|
|
779
|
-
|
|
877
|
+
state.compressedTexImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );
|
|
780
878
|
|
|
781
|
-
|
|
879
|
+
}
|
|
782
880
|
|
|
783
|
-
|
|
881
|
+
} else {
|
|
882
|
+
|
|
883
|
+
console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );
|
|
884
|
+
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
} else {
|
|
784
888
|
|
|
785
|
-
|
|
889
|
+
if ( useTexStorage ) {
|
|
890
|
+
|
|
891
|
+
state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
|
|
892
|
+
|
|
893
|
+
} else {
|
|
894
|
+
|
|
895
|
+
state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
|
|
896
|
+
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
}
|
|
786
900
|
|
|
787
901
|
}
|
|
788
902
|
|
|
789
|
-
|
|
903
|
+
} else if ( texture.isDataArrayTexture ) {
|
|
790
904
|
|
|
791
|
-
|
|
905
|
+
if ( useTexStorage ) {
|
|
906
|
+
|
|
907
|
+
if ( allocateMemory ) {
|
|
792
908
|
|
|
793
|
-
|
|
909
|
+
state.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth );
|
|
794
910
|
|
|
795
|
-
|
|
911
|
+
}
|
|
796
912
|
|
|
797
|
-
|
|
913
|
+
state.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
|
|
798
914
|
|
|
799
|
-
|
|
915
|
+
} else {
|
|
800
916
|
|
|
801
|
-
|
|
917
|
+
state.texImage3D( _gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );
|
|
802
918
|
|
|
803
|
-
|
|
919
|
+
}
|
|
804
920
|
|
|
805
|
-
|
|
921
|
+
} else if ( texture.isData3DTexture ) {
|
|
806
922
|
|
|
807
|
-
|
|
923
|
+
if ( useTexStorage ) {
|
|
808
924
|
|
|
809
|
-
|
|
925
|
+
if ( allocateMemory ) {
|
|
810
926
|
|
|
811
|
-
|
|
927
|
+
state.texStorage3D( _gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth );
|
|
812
928
|
|
|
813
|
-
|
|
814
|
-
// if there are no manual mipmaps
|
|
815
|
-
// set 0 level mipmap and then use GL to generate other mipmap levels
|
|
929
|
+
}
|
|
816
930
|
|
|
817
|
-
|
|
931
|
+
state.texSubImage3D( _gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
|
|
818
932
|
|
|
819
|
-
|
|
933
|
+
} else {
|
|
820
934
|
|
|
821
|
-
state.
|
|
935
|
+
state.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );
|
|
822
936
|
|
|
823
937
|
}
|
|
824
938
|
|
|
825
|
-
|
|
939
|
+
} else if ( texture.isFramebufferTexture ) {
|
|
826
940
|
|
|
827
|
-
|
|
941
|
+
if ( allocateMemory ) {
|
|
828
942
|
|
|
829
943
|
if ( useTexStorage ) {
|
|
830
944
|
|
|
831
|
-
state.
|
|
945
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );
|
|
832
946
|
|
|
833
947
|
} else {
|
|
834
948
|
|
|
835
|
-
|
|
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
|
+
}
|
|
836
959
|
|
|
837
960
|
}
|
|
838
961
|
|
|
839
962
|
}
|
|
840
963
|
|
|
841
|
-
texture.generateMipmaps = false;
|
|
842
|
-
|
|
843
964
|
} else {
|
|
844
965
|
|
|
845
|
-
|
|
966
|
+
// regular Texture (image, video, canvas)
|
|
846
967
|
|
|
847
|
-
|
|
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
|
|
848
971
|
|
|
849
|
-
|
|
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 );
|
|
850
977
|
|
|
851
978
|
}
|
|
852
979
|
|
|
853
|
-
|
|
980
|
+
for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
|
|
981
|
+
|
|
982
|
+
mipmap = mipmaps[ i ];
|
|
983
|
+
|
|
984
|
+
if ( useTexStorage ) {
|
|
985
|
+
|
|
986
|
+
state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap );
|
|
987
|
+
|
|
988
|
+
} else {
|
|
989
|
+
|
|
990
|
+
state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap );
|
|
991
|
+
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
texture.generateMipmaps = false;
|
|
854
997
|
|
|
855
998
|
} else {
|
|
856
999
|
|
|
857
|
-
|
|
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
|
+
}
|
|
858
1015
|
|
|
859
1016
|
}
|
|
860
1017
|
|
|
861
1018
|
}
|
|
862
1019
|
|
|
863
|
-
|
|
1020
|
+
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
1021
|
+
|
|
1022
|
+
generateMipmap( textureType );
|
|
1023
|
+
|
|
1024
|
+
}
|
|
864
1025
|
|
|
865
|
-
|
|
1026
|
+
source.__currentVersion = source.version;
|
|
866
1027
|
|
|
867
|
-
|
|
1028
|
+
if ( texture.onUpdate ) texture.onUpdate( texture );
|
|
868
1029
|
|
|
869
1030
|
}
|
|
870
1031
|
|
|
871
1032
|
textureProperties.__version = texture.version;
|
|
872
1033
|
|
|
873
|
-
if ( texture.onUpdate ) texture.onUpdate( texture );
|
|
874
|
-
|
|
875
1034
|
}
|
|
876
1035
|
|
|
877
1036
|
function uploadCubeTexture( textureProperties, texture, slot ) {
|
|
878
1037
|
|
|
879
1038
|
if ( texture.image.length !== 6 ) return;
|
|
880
1039
|
|
|
881
|
-
initTexture( textureProperties, texture );
|
|
1040
|
+
const forceUpload = initTexture( textureProperties, texture );
|
|
1041
|
+
const source = texture.source;
|
|
882
1042
|
|
|
883
1043
|
state.activeTexture( _gl.TEXTURE0 + slot );
|
|
884
1044
|
state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );
|
|
885
1045
|
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
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 );
|
|
890
1052
|
|
|
891
|
-
|
|
892
|
-
|
|
1053
|
+
const isCompressed = ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture );
|
|
1054
|
+
const isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );
|
|
893
1055
|
|
|
894
|
-
|
|
1056
|
+
const cubeImage = [];
|
|
895
1057
|
|
|
896
|
-
|
|
1058
|
+
for ( let i = 0; i < 6; i ++ ) {
|
|
897
1059
|
|
|
898
|
-
|
|
1060
|
+
if ( ! isCompressed && ! isDataTexture ) {
|
|
899
1061
|
|
|
900
|
-
|
|
1062
|
+
cubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );
|
|
901
1063
|
|
|
902
|
-
|
|
1064
|
+
} else {
|
|
903
1065
|
|
|
904
|
-
|
|
1066
|
+
cubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];
|
|
1067
|
+
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
cubeImage[ i ] = verifyColorSpace( texture, cubeImage[ i ] );
|
|
905
1071
|
|
|
906
1072
|
}
|
|
907
1073
|
|
|
908
|
-
|
|
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 );
|
|
909
1079
|
|
|
910
|
-
|
|
1080
|
+
const useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );
|
|
1081
|
+
const allocateMemory = ( source.__currentVersion === undefined ) || ( forceUpload === true );
|
|
1082
|
+
let levels = getMipLevels( texture, image, supportsMips );
|
|
1083
|
+
|
|
1084
|
+
setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, supportsMips );
|
|
911
1085
|
|
|
912
|
-
|
|
913
|
-
supportsMips = isPowerOfTwo( image ) || isWebGL2,
|
|
914
|
-
glFormat = utils.convert( texture.format, texture.encoding ),
|
|
915
|
-
glType = utils.convert( texture.type ),
|
|
916
|
-
glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
1086
|
+
let mipmaps;
|
|
917
1087
|
|
|
918
|
-
|
|
919
|
-
const allocateMemory = ( textureProperties.__version === undefined );
|
|
920
|
-
let levels = getMipLevels( texture, image, supportsMips );
|
|
1088
|
+
if ( isCompressed ) {
|
|
921
1089
|
|
|
922
|
-
|
|
1090
|
+
if ( useTexStorage && allocateMemory ) {
|
|
923
1091
|
|
|
924
|
-
|
|
1092
|
+
state.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height );
|
|
925
1093
|
|
|
926
|
-
|
|
1094
|
+
}
|
|
927
1095
|
|
|
928
|
-
|
|
1096
|
+
for ( let i = 0; i < 6; i ++ ) {
|
|
929
1097
|
|
|
930
|
-
|
|
1098
|
+
mipmaps = cubeImage[ i ].mipmaps;
|
|
931
1099
|
|
|
932
|
-
|
|
1100
|
+
for ( let j = 0; j < mipmaps.length; j ++ ) {
|
|
933
1101
|
|
|
934
|
-
|
|
1102
|
+
const mipmap = mipmaps[ j ];
|
|
935
1103
|
|
|
936
|
-
|
|
1104
|
+
if ( texture.format !== RGBAFormat ) {
|
|
937
1105
|
|
|
938
|
-
|
|
1106
|
+
if ( glFormat !== null ) {
|
|
939
1107
|
|
|
940
|
-
|
|
1108
|
+
if ( useTexStorage ) {
|
|
941
1109
|
|
|
942
|
-
|
|
1110
|
+
state.compressedTexSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );
|
|
943
1111
|
|
|
944
|
-
|
|
1112
|
+
} else {
|
|
945
1113
|
|
|
946
|
-
|
|
1114
|
+
state.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );
|
|
947
1115
|
|
|
948
|
-
|
|
1116
|
+
}
|
|
949
1117
|
|
|
950
1118
|
} else {
|
|
951
1119
|
|
|
952
|
-
|
|
1120
|
+
console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );
|
|
953
1121
|
|
|
954
1122
|
}
|
|
955
1123
|
|
|
956
1124
|
} else {
|
|
957
1125
|
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
}
|
|
961
|
-
|
|
962
|
-
} else {
|
|
1126
|
+
if ( useTexStorage ) {
|
|
963
1127
|
|
|
964
|
-
|
|
1128
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
|
|
965
1129
|
|
|
966
|
-
|
|
1130
|
+
} else {
|
|
967
1131
|
|
|
968
|
-
|
|
1132
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
|
|
969
1133
|
|
|
970
|
-
|
|
1134
|
+
}
|
|
971
1135
|
|
|
972
1136
|
}
|
|
973
1137
|
|
|
@@ -975,78 +1139,78 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
975
1139
|
|
|
976
1140
|
}
|
|
977
1141
|
|
|
978
|
-
}
|
|
1142
|
+
} else {
|
|
979
1143
|
|
|
980
|
-
|
|
1144
|
+
mipmaps = texture.mipmaps;
|
|
981
1145
|
|
|
982
|
-
|
|
1146
|
+
if ( useTexStorage && allocateMemory ) {
|
|
983
1147
|
|
|
984
|
-
|
|
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)
|
|
985
1151
|
|
|
986
|
-
|
|
987
|
-
// Normal textures and compressed cube textures define base level + mips with their mipmap array
|
|
988
|
-
// Uncompressed cube textures use their mipmap array only for mips (no base level)
|
|
1152
|
+
if ( mipmaps.length > 0 ) levels ++;
|
|
989
1153
|
|
|
990
|
-
|
|
1154
|
+
state.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, cubeImage[ 0 ].width, cubeImage[ 0 ].height );
|
|
991
1155
|
|
|
992
|
-
|
|
1156
|
+
}
|
|
993
1157
|
|
|
994
|
-
|
|
1158
|
+
for ( let i = 0; i < 6; i ++ ) {
|
|
995
1159
|
|
|
996
|
-
|
|
1160
|
+
if ( isDataTexture ) {
|
|
997
1161
|
|
|
998
|
-
|
|
1162
|
+
if ( useTexStorage ) {
|
|
999
1163
|
|
|
1000
|
-
|
|
1164
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[ i ].width, cubeImage[ i ].height, glFormat, glType, cubeImage[ i ].data );
|
|
1001
1165
|
|
|
1002
|
-
|
|
1166
|
+
} else {
|
|
1003
1167
|
|
|
1004
|
-
|
|
1168
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );
|
|
1005
1169
|
|
|
1006
|
-
|
|
1170
|
+
}
|
|
1007
1171
|
|
|
1008
|
-
|
|
1172
|
+
for ( let j = 0; j < mipmaps.length; j ++ ) {
|
|
1009
1173
|
|
|
1010
|
-
|
|
1174
|
+
const mipmap = mipmaps[ j ];
|
|
1175
|
+
const mipmapImage = mipmap.image[ i ].image;
|
|
1011
1176
|
|
|
1012
|
-
|
|
1013
|
-
const mipmapImage = mipmap.image[ i ].image;
|
|
1177
|
+
if ( useTexStorage ) {
|
|
1014
1178
|
|
|
1015
|
-
|
|
1179
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data );
|
|
1016
1180
|
|
|
1017
|
-
|
|
1181
|
+
} else {
|
|
1018
1182
|
|
|
1019
|
-
|
|
1183
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );
|
|
1020
1184
|
|
|
1021
|
-
|
|
1185
|
+
}
|
|
1022
1186
|
|
|
1023
1187
|
}
|
|
1024
1188
|
|
|
1025
|
-
}
|
|
1189
|
+
} else {
|
|
1026
1190
|
|
|
1027
|
-
|
|
1191
|
+
if ( useTexStorage ) {
|
|
1028
1192
|
|
|
1029
|
-
|
|
1193
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[ i ] );
|
|
1030
1194
|
|
|
1031
|
-
|
|
1195
|
+
} else {
|
|
1032
1196
|
|
|
1033
|
-
|
|
1197
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );
|
|
1034
1198
|
|
|
1035
|
-
|
|
1199
|
+
}
|
|
1036
1200
|
|
|
1037
|
-
|
|
1201
|
+
for ( let j = 0; j < mipmaps.length; j ++ ) {
|
|
1038
1202
|
|
|
1039
|
-
|
|
1203
|
+
const mipmap = mipmaps[ j ];
|
|
1040
1204
|
|
|
1041
|
-
|
|
1205
|
+
if ( useTexStorage ) {
|
|
1042
1206
|
|
|
1043
|
-
|
|
1207
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[ i ] );
|
|
1044
1208
|
|
|
1045
|
-
|
|
1209
|
+
} else {
|
|
1046
1210
|
|
|
1047
|
-
|
|
1211
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );
|
|
1048
1212
|
|
|
1049
|
-
|
|
1213
|
+
}
|
|
1050
1214
|
|
|
1051
1215
|
}
|
|
1052
1216
|
|
|
@@ -1056,19 +1220,21 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1056
1220
|
|
|
1057
1221
|
}
|
|
1058
1222
|
|
|
1059
|
-
|
|
1223
|
+
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
1060
1224
|
|
|
1061
|
-
|
|
1225
|
+
// We assume images for cube map have the same size.
|
|
1226
|
+
generateMipmap( _gl.TEXTURE_CUBE_MAP );
|
|
1062
1227
|
|
|
1063
|
-
|
|
1064
|
-
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
source.__currentVersion = source.version;
|
|
1231
|
+
|
|
1232
|
+
if ( texture.onUpdate ) texture.onUpdate( texture );
|
|
1065
1233
|
|
|
1066
1234
|
}
|
|
1067
1235
|
|
|
1068
1236
|
textureProperties.__version = texture.version;
|
|
1069
1237
|
|
|
1070
|
-
if ( texture.onUpdate ) texture.onUpdate( texture );
|
|
1071
|
-
|
|
1072
1238
|
}
|
|
1073
1239
|
|
|
1074
1240
|
// Render targets
|
|
@@ -1096,9 +1262,10 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1096
1262
|
}
|
|
1097
1263
|
|
|
1098
1264
|
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
1099
|
-
if ( renderTarget.useRenderToTexture ) {
|
|
1100
1265
|
|
|
1101
|
-
|
|
1266
|
+
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1267
|
+
|
|
1268
|
+
multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0, getRenderTargetSamples( renderTarget ) );
|
|
1102
1269
|
|
|
1103
1270
|
} else {
|
|
1104
1271
|
|
|
@@ -1120,7 +1287,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1120
1287
|
|
|
1121
1288
|
let glInternalFormat = _gl.DEPTH_COMPONENT16;
|
|
1122
1289
|
|
|
1123
|
-
if ( isMultisample || renderTarget
|
|
1290
|
+
if ( isMultisample || useMultisampledRTT( renderTarget ) ) {
|
|
1124
1291
|
|
|
1125
1292
|
const depthTexture = renderTarget.depthTexture;
|
|
1126
1293
|
|
|
@@ -1140,9 +1307,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1140
1307
|
|
|
1141
1308
|
const samples = getRenderTargetSamples( renderTarget );
|
|
1142
1309
|
|
|
1143
|
-
if ( renderTarget
|
|
1310
|
+
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1144
1311
|
|
|
1145
|
-
|
|
1312
|
+
multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1146
1313
|
|
|
1147
1314
|
} else {
|
|
1148
1315
|
|
|
@@ -1162,13 +1329,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1162
1329
|
|
|
1163
1330
|
const samples = getRenderTargetSamples( renderTarget );
|
|
1164
1331
|
|
|
1165
|
-
if ( isMultisample && renderTarget
|
|
1332
|
+
if ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {
|
|
1166
1333
|
|
|
1167
1334
|
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );
|
|
1168
1335
|
|
|
1169
|
-
} else if ( renderTarget
|
|
1336
|
+
} else if ( useMultisampledRTT( renderTarget ) ) {
|
|
1170
1337
|
|
|
1171
|
-
|
|
1338
|
+
multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );
|
|
1172
1339
|
|
|
1173
1340
|
} else {
|
|
1174
1341
|
|
|
@@ -1181,25 +1348,30 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1181
1348
|
|
|
1182
1349
|
} else {
|
|
1183
1350
|
|
|
1184
|
-
|
|
1185
|
-
const texture = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture[ 0 ] : renderTarget.texture;
|
|
1351
|
+
const textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ];
|
|
1186
1352
|
|
|
1187
|
-
|
|
1188
|
-
const glType = utils.convert( texture.type );
|
|
1189
|
-
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
1190
|
-
const samples = getRenderTargetSamples( renderTarget );
|
|
1353
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
1191
1354
|
|
|
1192
|
-
|
|
1355
|
+
const texture = textures[ i ];
|
|
1193
1356
|
|
|
1194
|
-
|
|
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 );
|
|
1195
1361
|
|
|
1196
|
-
|
|
1362
|
+
if ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {
|
|
1197
1363
|
|
|
1198
|
-
|
|
1364
|
+
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1199
1365
|
|
|
1200
|
-
|
|
1366
|
+
} else if ( useMultisampledRTT( renderTarget ) ) {
|
|
1201
1367
|
|
|
1202
|
-
|
|
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
|
+
}
|
|
1203
1375
|
|
|
1204
1376
|
}
|
|
1205
1377
|
|
|
@@ -1241,9 +1413,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1241
1413
|
|
|
1242
1414
|
if ( renderTarget.depthTexture.format === DepthFormat ) {
|
|
1243
1415
|
|
|
1244
|
-
if ( renderTarget
|
|
1416
|
+
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1245
1417
|
|
|
1246
|
-
|
|
1418
|
+
multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
|
|
1247
1419
|
|
|
1248
1420
|
} else {
|
|
1249
1421
|
|
|
@@ -1253,9 +1425,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1253
1425
|
|
|
1254
1426
|
} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {
|
|
1255
1427
|
|
|
1256
|
-
if ( renderTarget
|
|
1428
|
+
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1257
1429
|
|
|
1258
|
-
|
|
1430
|
+
multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
|
|
1259
1431
|
|
|
1260
1432
|
} else {
|
|
1261
1433
|
|
|
@@ -1355,7 +1527,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1355
1527
|
|
|
1356
1528
|
const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
|
|
1357
1529
|
const isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );
|
|
1358
|
-
const isRenderTarget3D = texture.isDataTexture3D || texture.isDataTexture2DArray;
|
|
1359
1530
|
const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;
|
|
1360
1531
|
|
|
1361
1532
|
// Setup framebuffer
|
|
@@ -1400,14 +1571,23 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1400
1571
|
|
|
1401
1572
|
}
|
|
1402
1573
|
|
|
1403
|
-
}
|
|
1574
|
+
}
|
|
1404
1575
|
|
|
1405
|
-
|
|
1576
|
+
if ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {
|
|
1577
|
+
|
|
1578
|
+
const textures = isMultipleRenderTargets ? texture : [ texture ];
|
|
1406
1579
|
|
|
1407
|
-
|
|
1408
|
-
|
|
1580
|
+
renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();
|
|
1581
|
+
renderTargetProperties.__webglColorRenderbuffer = [];
|
|
1409
1582
|
|
|
1410
|
-
|
|
1583
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1584
|
+
|
|
1585
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
1586
|
+
|
|
1587
|
+
const texture = textures[ i ];
|
|
1588
|
+
renderTargetProperties.__webglColorRenderbuffer[ i ] = _gl.createRenderbuffer();
|
|
1589
|
+
|
|
1590
|
+
_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
|
|
1411
1591
|
|
|
1412
1592
|
const glFormat = utils.convert( texture.format, texture.encoding );
|
|
1413
1593
|
const glType = utils.convert( texture.type );
|
|
@@ -1415,26 +1595,21 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1415
1595
|
const samples = getRenderTargetSamples( renderTarget );
|
|
1416
1596
|
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1417
1597
|
|
|
1418
|
-
|
|
1419
|
-
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer );
|
|
1420
|
-
_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );
|
|
1421
|
-
|
|
1422
|
-
if ( renderTarget.depthBuffer ) {
|
|
1423
|
-
|
|
1424
|
-
renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();
|
|
1425
|
-
setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );
|
|
1598
|
+
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
|
|
1426
1599
|
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
state.bindFramebuffer( _gl.FRAMEBUFFER, null );
|
|
1600
|
+
}
|
|
1430
1601
|
|
|
1602
|
+
_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );
|
|
1431
1603
|
|
|
1432
|
-
|
|
1604
|
+
if ( renderTarget.depthBuffer ) {
|
|
1433
1605
|
|
|
1434
|
-
|
|
1606
|
+
renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();
|
|
1607
|
+
setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );
|
|
1435
1608
|
|
|
1436
1609
|
}
|
|
1437
1610
|
|
|
1611
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, null );
|
|
1612
|
+
|
|
1438
1613
|
}
|
|
1439
1614
|
|
|
1440
1615
|
}
|
|
@@ -1487,18 +1662,15 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1487
1662
|
|
|
1488
1663
|
let glTextureType = _gl.TEXTURE_2D;
|
|
1489
1664
|
|
|
1490
|
-
if (
|
|
1491
|
-
|
|
1492
|
-
// Render targets containing layers, i.e: Texture 3D and 2d arrays
|
|
1665
|
+
if ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {
|
|
1493
1666
|
|
|
1494
1667
|
if ( isWebGL2 ) {
|
|
1495
1668
|
|
|
1496
|
-
|
|
1497
|
-
glTextureType = isTexture3D ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;
|
|
1669
|
+
glTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;
|
|
1498
1670
|
|
|
1499
1671
|
} else {
|
|
1500
1672
|
|
|
1501
|
-
console.
|
|
1673
|
+
console.error( 'THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.' );
|
|
1502
1674
|
|
|
1503
1675
|
}
|
|
1504
1676
|
|
|
@@ -1555,15 +1727,38 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1555
1727
|
|
|
1556
1728
|
function updateMultisampleRenderTarget( renderTarget ) {
|
|
1557
1729
|
|
|
1558
|
-
if ( renderTarget.
|
|
1730
|
+
if ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {
|
|
1731
|
+
|
|
1732
|
+
const textures = renderTarget.isWebGLMultipleRenderTargets ? renderTarget.texture : [ renderTarget.texture ];
|
|
1733
|
+
const width = renderTarget.width;
|
|
1734
|
+
const height = renderTarget.height;
|
|
1735
|
+
let mask = _gl.COLOR_BUFFER_BIT;
|
|
1736
|
+
const invalidationArray = [];
|
|
1737
|
+
const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
1738
|
+
const renderTargetProperties = properties.get( renderTarget );
|
|
1739
|
+
const isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );
|
|
1740
|
+
|
|
1741
|
+
// If MRT we need to remove FBO attachments
|
|
1742
|
+
if ( isMultipleRenderTargets ) {
|
|
1743
|
+
|
|
1744
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
1745
|
+
|
|
1746
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1747
|
+
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null );
|
|
1748
|
+
|
|
1749
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
1750
|
+
_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0 );
|
|
1751
|
+
|
|
1752
|
+
}
|
|
1753
|
+
|
|
1754
|
+
}
|
|
1559
1755
|
|
|
1560
|
-
|
|
1756
|
+
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1757
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
1561
1758
|
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
const invalidationArray = [ _gl.COLOR_ATTACHMENT0 ];
|
|
1566
|
-
const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
1759
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
1760
|
+
|
|
1761
|
+
invalidationArray.push( _gl.COLOR_ATTACHMENT0 + i );
|
|
1567
1762
|
|
|
1568
1763
|
if ( renderTarget.depthBuffer ) {
|
|
1569
1764
|
|
|
@@ -1571,45 +1766,83 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1571
1766
|
|
|
1572
1767
|
}
|
|
1573
1768
|
|
|
1574
|
-
|
|
1769
|
+
const ignoreDepthValues = ( renderTargetProperties.__ignoreDepthValues !== undefined ) ? renderTargetProperties.__ignoreDepthValues : false;
|
|
1770
|
+
|
|
1771
|
+
if ( ignoreDepthValues === false ) {
|
|
1575
1772
|
|
|
1576
1773
|
if ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;
|
|
1577
1774
|
if ( renderTarget.stencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;
|
|
1578
1775
|
|
|
1579
1776
|
}
|
|
1580
1777
|
|
|
1581
|
-
|
|
1778
|
+
if ( isMultipleRenderTargets ) {
|
|
1779
|
+
|
|
1780
|
+
_gl.framebufferRenderbuffer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
|
|
1582
1781
|
|
|
1583
|
-
|
|
1584
|
-
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
1782
|
+
}
|
|
1585
1783
|
|
|
1586
|
-
if (
|
|
1784
|
+
if ( ignoreDepthValues === true ) {
|
|
1587
1785
|
|
|
1588
1786
|
_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, [ depthStyle ] );
|
|
1589
1787
|
_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );
|
|
1590
1788
|
|
|
1591
1789
|
}
|
|
1592
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
|
+
|
|
1593
1798
|
_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );
|
|
1594
|
-
_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArray );
|
|
1595
1799
|
|
|
1596
|
-
|
|
1597
|
-
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1800
|
+
if ( supportsInvalidateFramebuffer ) {
|
|
1598
1801
|
|
|
1599
|
-
|
|
1802
|
+
_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArray );
|
|
1803
|
+
|
|
1804
|
+
}
|
|
1600
1805
|
|
|
1601
|
-
console.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );
|
|
1602
1806
|
|
|
1603
1807
|
}
|
|
1604
1808
|
|
|
1809
|
+
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );
|
|
1810
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );
|
|
1811
|
+
|
|
1812
|
+
// If MRT since pre-blit we removed the FBO we need to reconstruct the attachments
|
|
1813
|
+
if ( isMultipleRenderTargets ) {
|
|
1814
|
+
|
|
1815
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
1816
|
+
|
|
1817
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1818
|
+
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
|
|
1819
|
+
|
|
1820
|
+
const webglTexture = properties.get( textures[ i ] ).__webglTexture;
|
|
1821
|
+
|
|
1822
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
1823
|
+
_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0 );
|
|
1824
|
+
|
|
1825
|
+
}
|
|
1826
|
+
|
|
1827
|
+
}
|
|
1828
|
+
|
|
1829
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1830
|
+
|
|
1605
1831
|
}
|
|
1606
1832
|
|
|
1607
1833
|
}
|
|
1608
1834
|
|
|
1609
1835
|
function getRenderTargetSamples( renderTarget ) {
|
|
1610
1836
|
|
|
1611
|
-
return (
|
|
1612
|
-
|
|
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;
|
|
1613
1846
|
|
|
1614
1847
|
}
|
|
1615
1848
|
|
|
@@ -1687,50 +1920,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1687
1920
|
|
|
1688
1921
|
}
|
|
1689
1922
|
|
|
1690
|
-
// backwards compatibility
|
|
1691
|
-
|
|
1692
|
-
let warnedTexture2D = false;
|
|
1693
|
-
let warnedTextureCube = false;
|
|
1694
|
-
|
|
1695
|
-
function safeSetTexture2D( texture, slot ) {
|
|
1696
|
-
|
|
1697
|
-
if ( texture && texture.isWebGLRenderTarget ) {
|
|
1698
|
-
|
|
1699
|
-
if ( warnedTexture2D === false ) {
|
|
1700
|
-
|
|
1701
|
-
console.warn( 'THREE.WebGLTextures.safeSetTexture2D: don\'t use render targets as textures. Use their .texture property instead.' );
|
|
1702
|
-
warnedTexture2D = true;
|
|
1703
|
-
|
|
1704
|
-
}
|
|
1705
|
-
|
|
1706
|
-
texture = texture.texture;
|
|
1707
|
-
|
|
1708
|
-
}
|
|
1709
|
-
|
|
1710
|
-
setTexture2D( texture, slot );
|
|
1711
|
-
|
|
1712
|
-
}
|
|
1713
|
-
|
|
1714
|
-
function safeSetTextureCube( texture, slot ) {
|
|
1715
|
-
|
|
1716
|
-
if ( texture && texture.isWebGLCubeRenderTarget ) {
|
|
1717
|
-
|
|
1718
|
-
if ( warnedTextureCube === false ) {
|
|
1719
|
-
|
|
1720
|
-
console.warn( 'THREE.WebGLTextures.safeSetTextureCube: don\'t use cube render targets as textures. Use their .texture property instead.' );
|
|
1721
|
-
warnedTextureCube = true;
|
|
1722
|
-
|
|
1723
|
-
}
|
|
1724
|
-
|
|
1725
|
-
texture = texture.texture;
|
|
1726
|
-
|
|
1727
|
-
}
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
setTextureCube( texture, slot );
|
|
1731
|
-
|
|
1732
|
-
}
|
|
1733
|
-
|
|
1734
1923
|
//
|
|
1735
1924
|
|
|
1736
1925
|
this.allocateTextureUnit = allocateTextureUnit;
|
|
@@ -1746,9 +1935,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1746
1935
|
this.updateMultisampleRenderTarget = updateMultisampleRenderTarget;
|
|
1747
1936
|
this.setupDepthRenderbuffer = setupDepthRenderbuffer;
|
|
1748
1937
|
this.setupFrameBufferTexture = setupFrameBufferTexture;
|
|
1749
|
-
|
|
1750
|
-
this.safeSetTexture2D = safeSetTexture2D;
|
|
1751
|
-
this.safeSetTextureCube = safeSetTextureCube;
|
|
1938
|
+
this.useMultisampledRTT = useMultisampledRTT;
|
|
1752
1939
|
|
|
1753
1940
|
}
|
|
1754
1941
|
|