super-three 0.133.4 → 0.136.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/build/three.js +2285 -1983
- package/build/three.min.js +1 -1
- package/build/three.module.js +5983 -5358
- package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
- package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
- package/examples/fonts/open-sans/open-sans.css +9 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
- package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
- package/examples/js/animation/CCDIKSolver.js +0 -1
- package/examples/js/animation/MMDPhysics.js +2 -4
- package/examples/js/cameras/CinematicCamera.js +2 -7
- package/examples/js/controls/ArcballControls.js +99 -72
- package/examples/js/controls/DragControls.js +7 -0
- package/examples/js/controls/OrbitControls.js +5 -36
- package/examples/js/controls/TrackballControls.js +3 -2
- package/examples/js/controls/TransformControls.js +24 -1
- package/examples/js/csm/CSM.js +2 -2
- package/examples/js/csm/CSMFrustum.js +133 -0
- package/examples/js/curves/CurveExtras.js +0 -2
- package/examples/js/effects/AsciiEffect.js +2 -9
- package/examples/js/exporters/GLTFExporter.js +148 -64
- package/examples/js/exporters/MMDExporter.js +1 -1
- package/examples/js/exporters/USDZExporter.js +45 -26
- package/examples/js/geometries/ConvexGeometry.js +1 -1
- package/examples/js/geometries/TeapotGeometry.js +0 -1
- package/examples/js/interactive/SelectionBox.js +2 -0
- package/examples/js/interactive/SelectionHelper.js +22 -7
- package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
- package/examples/js/lines/LineMaterial.js +58 -20
- package/examples/js/lines/LineSegments2.js +29 -24
- package/examples/js/loaders/3DMLoader.js +24 -11
- package/examples/js/loaders/3MFLoader.js +2 -2
- package/examples/js/loaders/AMFLoader.js +0 -2
- package/examples/js/loaders/BasisTextureLoader.js +1 -0
- package/examples/js/loaders/ColladaLoader.js +61 -4
- package/examples/js/loaders/EXRLoader.js +201 -272
- package/examples/js/loaders/FBXLoader.js +4 -5
- package/examples/js/loaders/GLTFLoader.js +98 -35
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -10
- package/examples/js/loaders/KTX2Loader.js +23 -2
- package/examples/js/loaders/KTXLoader.js +1 -1
- package/examples/js/loaders/LDrawLoader.js +1169 -901
- package/examples/js/loaders/LUT3dlLoader.js +19 -10
- package/examples/js/loaders/LUTCubeLoader.js +5 -4
- package/examples/js/loaders/LWOLoader.js +8 -6
- package/examples/js/loaders/LogLuvLoader.js +766 -0
- package/examples/js/loaders/MMDLoader.js +0 -1
- package/examples/js/loaders/NRRDLoader.js +9 -2
- package/examples/js/loaders/OBJLoader.js +0 -2
- package/examples/js/loaders/PLYLoader.js +33 -8
- package/examples/js/loaders/RGBELoader.js +8 -22
- package/examples/js/loaders/RGBMLoader.js +56 -6
- package/examples/js/loaders/SVGLoader.js +12 -6
- package/examples/js/loaders/TDSLoader.js +237 -271
- package/examples/js/loaders/VOXLoader.js +1 -0
- package/examples/js/loaders/VRMLLoader.js +11 -22
- package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
- package/examples/js/math/ConvexHull.js +7 -13
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/misc/GPUComputationRenderer.js +3 -1
- package/examples/js/misc/Volume.js +2 -2
- package/examples/js/modifiers/CurveModifier.js +8 -7
- package/examples/js/modifiers/EdgeSplitModifier.js +1 -1
- package/examples/js/modifiers/SimplifyModifier.js +1 -1
- package/examples/js/objects/Lensflare.js +2 -10
- package/examples/js/objects/MarchingCubes.js +42 -128
- package/examples/js/objects/Reflector.js +8 -13
- package/examples/js/objects/ReflectorForSSRPass.js +0 -10
- package/examples/js/objects/Refractor.js +8 -13
- package/examples/js/objects/Sky.js +1 -1
- package/examples/js/objects/Water.js +3 -15
- package/examples/js/objects/Water2.js +4 -7
- package/examples/js/postprocessing/GlitchPass.js +6 -5
- package/examples/js/postprocessing/SMAAPass.js +2 -9
- package/examples/js/postprocessing/SSAOPass.js +10 -21
- package/examples/js/postprocessing/SavePass.js +1 -5
- package/examples/js/renderers/CSS2DRenderer.js +4 -4
- package/examples/js/renderers/CSS3DRenderer.js +4 -4
- package/examples/js/shaders/ConvolutionShader.js +0 -1
- package/examples/js/shaders/DigitalGlitch.js +3 -3
- package/examples/js/shaders/FXAAShader.js +1 -1
- package/examples/js/shaders/FilmShader.js +1 -1
- package/examples/js/shaders/GammaCorrectionShader.js +1 -1
- package/examples/js/shaders/HorizontalBlurShader.js +1 -2
- package/examples/js/shaders/MMDToonShader.js +0 -1
- package/examples/js/shaders/SSAOShader.js +1 -1
- package/examples/js/shaders/SSRShader.js +1 -1
- package/examples/js/shaders/SSRrShader.js +1 -1
- package/examples/js/shaders/VerticalBlurShader.js +1 -2
- package/examples/js/utils/GeometryUtils.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +0 -1
- package/examples/jsm/animation/MMDPhysics.js +1 -3
- package/examples/jsm/cameras/CinematicCamera.js +2 -5
- package/examples/jsm/{WebGL.js → capabilities/WebGL.js} +2 -2
- package/examples/jsm/{renderers/webgpu → capabilities}/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +80 -77
- package/examples/jsm/controls/DragControls.js +7 -0
- package/examples/jsm/controls/OrbitControls.js +9 -51
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +24 -1
- package/examples/jsm/csm/CSM.js +3 -3
- package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
- package/examples/jsm/curves/CurveExtras.js +0 -2
- package/examples/jsm/effects/AsciiEffect.js +2 -9
- package/examples/jsm/exporters/GLTFExporter.js +169 -99
- package/examples/jsm/exporters/MMDExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +47 -26
- package/examples/jsm/geometries/ConvexGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +0 -1
- package/examples/jsm/interactive/SelectionBox.js +1 -0
- package/examples/jsm/interactive/SelectionHelper.js +19 -7
- package/examples/jsm/libs/flow.module.js +3338 -0
- package/examples/jsm/libs/lil-gui.module.min.js +8 -0
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
- package/examples/jsm/lines/LineMaterial.js +59 -23
- package/examples/jsm/lines/LineSegments2.js +22 -18
- package/examples/jsm/loaders/3DMLoader.js +18 -12
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +0 -2
- package/examples/jsm/loaders/BasisTextureLoader.js +7 -0
- package/examples/jsm/loaders/ColladaLoader.js +61 -4
- package/examples/jsm/loaders/EXRLoader.js +200 -306
- package/examples/jsm/loaders/FBXLoader.js +4 -5
- package/examples/jsm/loaders/GLTFLoader.js +102 -40
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -17
- package/examples/jsm/loaders/KTX2Loader.js +30 -2
- package/examples/jsm/loaders/KTXLoader.js +1 -1
- package/examples/jsm/loaders/LDrawLoader.js +1159 -898
- package/examples/jsm/loaders/LUT3dlLoader.js +19 -12
- package/examples/jsm/loaders/LUTCubeLoader.js +5 -5
- package/examples/jsm/loaders/LWOLoader.js +8 -6
- package/examples/jsm/loaders/LogLuvLoader.js +606 -0
- package/examples/jsm/loaders/MMDLoader.js +0 -1
- package/examples/jsm/loaders/NRRDLoader.js +10 -2
- package/examples/jsm/loaders/OBJLoader.js +0 -2
- package/examples/jsm/loaders/PLYLoader.js +34 -8
- package/examples/jsm/loaders/RGBELoader.js +7 -28
- package/examples/jsm/loaders/RGBMLoader.js +62 -8
- package/examples/jsm/loaders/SVGLoader.js +15 -7
- package/examples/jsm/loaders/TDSLoader.js +236 -275
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +11 -23
- package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
- package/examples/jsm/math/ConvexHull.js +7 -13
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
- package/examples/jsm/misc/Volume.js +2 -2
- package/examples/jsm/modifiers/CurveModifier.js +9 -8
- package/examples/jsm/modifiers/EdgeSplitModifier.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/node-editor/NodeEditor.js +455 -0
- package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
- package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
- package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
- package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
- package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
- package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
- package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
- package/examples/jsm/node-editor/examples/rim.json +1 -0
- package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
- package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
- package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
- package/examples/jsm/node-editor/math/DotEditor.js +36 -0
- package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
- package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
- package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
- package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
- package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
- package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
- package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
- package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
- package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
- package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
- package/examples/jsm/nodes/math/MathNode.js +12 -0
- package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
- package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
- package/examples/jsm/nodes/utils/ColorSpaceNode.js +5 -177
- package/examples/jsm/objects/Lensflare.js +5 -16
- package/examples/jsm/objects/MarchingCubes.js +46 -152
- package/examples/jsm/objects/Reflector.js +8 -16
- package/examples/jsm/objects/ReflectorForSSRPass.js +0 -12
- package/examples/jsm/objects/Refractor.js +8 -16
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/Water.js +3 -18
- package/examples/jsm/objects/Water2.js +4 -8
- package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
- package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
- package/examples/jsm/postprocessing/BloomPass.js +1 -1
- package/examples/jsm/postprocessing/BokehPass.js +1 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -1
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
- package/examples/jsm/postprocessing/EffectComposer.js +3 -3
- package/examples/jsm/postprocessing/FilmPass.js +1 -1
- package/examples/jsm/postprocessing/GlitchPass.js +10 -7
- package/examples/jsm/postprocessing/HalftonePass.js +1 -1
- package/examples/jsm/postprocessing/MaskPass.js +1 -1
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -1
- package/examples/jsm/postprocessing/SAOPass.js +2 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -12
- package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +15 -26
- package/examples/jsm/postprocessing/SSRPass.js +1 -1
- package/examples/jsm/postprocessing/SSRrPass.js +1 -1
- package/examples/jsm/postprocessing/SavePass.js +2 -4
- package/examples/jsm/postprocessing/ShaderPass.js +1 -1
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/TexturePass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
- package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
- package/examples/jsm/renderers/nodes/Nodes.js +17 -13
- package/examples/jsm/renderers/nodes/ShaderNode.js +229 -49
- package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
- package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
- package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
- package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
- package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
- package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
- package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
- package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
- package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
- package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
- package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
- package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
- package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
- package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
- package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
- package/examples/jsm/renderers/nodes/core/Node.js +32 -10
- package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
- package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
- package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
- package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
- package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
- package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
- package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
- package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
- package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
- package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
- package/examples/jsm/renderers/nodes/core/constants.js +2 -0
- package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +43 -63
- package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
- package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
- package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
- package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
- package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
- package/examples/jsm/renderers/nodes/inputs/TextureNode.js +13 -10
- package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
- package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
- package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
- package/examples/jsm/renderers/nodes/math/MathNode.js +91 -37
- package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
- package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
- package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
- package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
- package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
- package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
- package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
- package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
- package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
- package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
- package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
- package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
- package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
- package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
- package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
- package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
- package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
- package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +13 -31
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +35 -29
- package/examples/jsm/renderers/webgpu/constants.js +2 -2
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +459 -95
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
- package/examples/jsm/shaders/ConvolutionShader.js +0 -1
- package/examples/jsm/shaders/DigitalGlitch.js +3 -3
- package/examples/jsm/shaders/FXAAShader.js +1 -1
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
- package/examples/jsm/shaders/MMDToonShader.js +0 -1
- package/examples/jsm/shaders/SSAOShader.js +1 -1
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SSRrShader.js +1 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
- package/examples/jsm/utils/GeometryUtils.js +1 -1
- package/examples/jsm/utils/LDrawUtils.js +195 -0
- package/examples/jsm/utils/WorkerPool.js +11 -11
- package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
- package/examples/jsm/webxr/VRButton.js +24 -0
- package/examples/jsm/webxr/XREstimatedLight.js +2 -0
- package/package.json +27 -18
- package/src/Three.Legacy.js +18 -0
- package/src/Three.js +1 -3
- package/src/animation/AnimationMixer.js +1 -0
- package/src/cameras/CubeCamera.js +2 -0
- package/src/cameras/StereoCamera.js +8 -7
- package/src/constants.js +3 -23
- package/src/core/Layers.js +7 -1
- package/src/core/Object3D.js +3 -1
- package/src/extras/ImageUtils.js +63 -0
- package/src/extras/PMREMGenerator.js +49 -185
- package/src/extras/core/Interpolations.js +1 -1
- package/src/geometries/LatheGeometry.js +70 -47
- package/src/helpers/CameraHelper.js +1 -1
- package/src/loaders/FileLoader.js +98 -144
- package/src/loaders/ImageLoader.js +9 -4
- package/src/loaders/LoaderUtils.js +26 -0
- package/src/loaders/MaterialLoader.js +8 -5
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/Material.js +8 -8
- package/src/materials/MeshPhysicalMaterial.js +20 -14
- package/src/math/Color.js +1 -39
- package/src/math/MathUtils.js +5 -16
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -2
- package/src/math/Sphere.js +10 -1
- package/src/objects/Skeleton.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +0 -2
- package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
- package/src/renderers/WebGLRenderer.js +106 -199
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -78
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +10 -3
- package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +9 -8
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -3
- package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -3
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib.js +8 -6
- package/src/renderers/shaders/UniformsLib.js +1 -2
- package/src/renderers/webgl/WebGLCapabilities.js +0 -2
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -4
- package/src/renderers/webgl/WebGLCubeUVMaps.js +29 -16
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLMaterials.js +27 -15
- package/src/renderers/webgl/WebGLMorphtargets.js +13 -0
- package/src/renderers/webgl/WebGLProgram.js +12 -37
- package/src/renderers/webgl/WebGLPrograms.js +192 -70
- package/src/renderers/webgl/WebGLRenderLists.js +4 -14
- package/src/renderers/webgl/WebGLShaderCache.js +120 -0
- package/src/renderers/webgl/WebGLShadowMap.js +14 -5
- package/src/renderers/webgl/WebGLState.js +157 -17
- package/src/renderers/webgl/WebGLTextures.js +442 -83
- package/src/renderers/webgl/WebGLUniforms.js +45 -1
- package/src/renderers/webgl/WebGLUtils.js +86 -28
- package/src/renderers/webxr/WebXRManager.js +77 -109
- package/src/scenes/Scene.js +1 -1
- package/src/textures/DataTexture.js +0 -2
- package/src/textures/DataTexture2DArray.js +0 -2
- package/src/textures/DataTexture3D.js +0 -2
- package/src/textures/FramebufferTexture.js +25 -0
- package/src/textures/Texture.js +8 -1
- package/src/textures/VideoTexture.js +1 -3
- package/examples/js/WebGL.js +0 -90
- package/examples/js/controls/DeviceOrientationControls.js +0 -147
- package/examples/js/libs/dat.gui.min.js +0 -14
- package/examples/js/utils/RoughnessMipmapper.js +0 -278
- package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
- package/examples/jsm/libs/dat.gui.module.js +0 -3575
- package/examples/jsm/libs/glslang.js +0 -78
- package/examples/jsm/libs/glslang.wasm +0 -0
- package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
- package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
- package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
- package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
- package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
- package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
- package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
- package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
- package/examples/jsm/utils/RoughnessMipmapper.js +0 -300
- package/src/extras/objects/ImmediateRenderObject.js +0 -31
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter,
|
|
1
|
+
import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBAFormat, DepthFormat, DepthStencilFormat, UnsignedShortType, UnsignedIntType, UnsignedInt248Type, FloatType, HalfFloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, sRGBEncoding, LinearEncoding, UnsignedByteType, _SRGBAFormat } from '../../constants.js';
|
|
2
2
|
import * as MathUtils from '../../math/MathUtils.js';
|
|
3
|
+
import { ImageUtils } from '../../extras/ImageUtils.js';
|
|
3
4
|
import { createElementNS } from '../../utils.js';
|
|
4
5
|
|
|
5
6
|
function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {
|
|
@@ -9,6 +10,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
9
10
|
const maxCubemapSize = capabilities.maxCubemapSize;
|
|
10
11
|
const maxTextureSize = capabilities.maxTextureSize;
|
|
11
12
|
const maxSamples = capabilities.maxSamples;
|
|
13
|
+
const hasMultisampledRenderToTexture = extensions.has( 'WEBGL_multisampled_render_to_texture' );
|
|
14
|
+
const MultisampledRenderToTextureExtension = hasMultisampledRenderToTexture ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : undefined;
|
|
12
15
|
|
|
13
16
|
const _videoTextures = new WeakMap();
|
|
14
17
|
let _canvas;
|
|
@@ -122,17 +125,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
122
125
|
|
|
123
126
|
}
|
|
124
127
|
|
|
125
|
-
function generateMipmap( target
|
|
128
|
+
function generateMipmap( target ) {
|
|
126
129
|
|
|
127
130
|
_gl.generateMipmap( target );
|
|
128
131
|
|
|
129
|
-
const textureProperties = properties.get( texture );
|
|
130
|
-
|
|
131
|
-
textureProperties.__maxMipLevel = Math.log2( Math.max( width, height, depth ) );
|
|
132
|
-
|
|
133
132
|
}
|
|
134
133
|
|
|
135
|
-
function getInternalFormat( internalFormatName, glFormat, glType, encoding ) {
|
|
134
|
+
function getInternalFormat( internalFormatName, glFormat, glType, encoding, isVideoTexture = false ) {
|
|
136
135
|
|
|
137
136
|
if ( isWebGL2 === false ) return glFormat;
|
|
138
137
|
|
|
@@ -166,7 +165,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
166
165
|
|
|
167
166
|
if ( glType === _gl.FLOAT ) internalFormat = _gl.RGBA32F;
|
|
168
167
|
if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RGBA16F;
|
|
169
|
-
if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = ( encoding === sRGBEncoding ) ? _gl.SRGB8_ALPHA8 : _gl.RGBA8;
|
|
168
|
+
if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = ( encoding === sRGBEncoding && isVideoTexture === false ) ? _gl.SRGB8_ALPHA8 : _gl.RGBA8;
|
|
170
169
|
|
|
171
170
|
}
|
|
172
171
|
|
|
@@ -181,6 +180,32 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
181
180
|
|
|
182
181
|
}
|
|
183
182
|
|
|
183
|
+
function getMipLevels( texture, image, supportsMips ) {
|
|
184
|
+
|
|
185
|
+
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) === true || ( texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) ) {
|
|
186
|
+
|
|
187
|
+
return Math.log2( Math.max( image.width, image.height ) ) + 1;
|
|
188
|
+
|
|
189
|
+
} else if ( texture.mipmaps !== undefined && texture.mipmaps.length > 0 ) {
|
|
190
|
+
|
|
191
|
+
// user-defined mipmaps
|
|
192
|
+
|
|
193
|
+
return texture.mipmaps.length;
|
|
194
|
+
|
|
195
|
+
} else if ( texture.isCompressedTexture && Array.isArray( texture.image ) ) {
|
|
196
|
+
|
|
197
|
+
return image.mipmaps.length;
|
|
198
|
+
|
|
199
|
+
} else {
|
|
200
|
+
|
|
201
|
+
// texture without mipmaps (only base level)
|
|
202
|
+
|
|
203
|
+
return 1;
|
|
204
|
+
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
}
|
|
208
|
+
|
|
184
209
|
// Fallback filters for non-power-of-2 textures
|
|
185
210
|
|
|
186
211
|
function filterFallback( f ) {
|
|
@@ -526,19 +551,24 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
526
551
|
_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, _gl.NONE );
|
|
527
552
|
|
|
528
553
|
const needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( texture.image ) === false;
|
|
529
|
-
|
|
554
|
+
let image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );
|
|
555
|
+
image = verifyColorSpace( texture, image );
|
|
530
556
|
|
|
531
557
|
const supportsMips = isPowerOfTwo( image ) || isWebGL2,
|
|
532
|
-
glFormat = utils.convert( texture.format );
|
|
558
|
+
glFormat = utils.convert( texture.format, texture.encoding );
|
|
533
559
|
|
|
534
560
|
let glType = utils.convert( texture.type ),
|
|
535
|
-
glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
561
|
+
glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding, texture.isVideoTexture );
|
|
536
562
|
|
|
537
563
|
setTextureParameters( textureType, texture, supportsMips );
|
|
538
564
|
|
|
539
565
|
let mipmap;
|
|
540
566
|
const mipmaps = texture.mipmaps;
|
|
541
567
|
|
|
568
|
+
const useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );
|
|
569
|
+
const allocateMemory = ( textureProperties.__version === undefined );
|
|
570
|
+
const levels = getMipLevels( texture, image, supportsMips );
|
|
571
|
+
|
|
542
572
|
if ( texture.isDepthTexture ) {
|
|
543
573
|
|
|
544
574
|
// populate depth texture with dummy data
|
|
@@ -615,7 +645,15 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
615
645
|
|
|
616
646
|
//
|
|
617
647
|
|
|
618
|
-
|
|
648
|
+
if ( useTexStorage && allocateMemory ) {
|
|
649
|
+
|
|
650
|
+
state.texStorage2D( _gl.TEXTURE_2D, 1, glInternalFormat, image.width, image.height );
|
|
651
|
+
|
|
652
|
+
} else {
|
|
653
|
+
|
|
654
|
+
state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );
|
|
655
|
+
|
|
656
|
+
}
|
|
619
657
|
|
|
620
658
|
} else if ( texture.isDataTexture ) {
|
|
621
659
|
|
|
@@ -625,34 +663,75 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
625
663
|
|
|
626
664
|
if ( mipmaps.length > 0 && supportsMips ) {
|
|
627
665
|
|
|
666
|
+
if ( useTexStorage && allocateMemory ) {
|
|
667
|
+
|
|
668
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );
|
|
669
|
+
|
|
670
|
+
}
|
|
671
|
+
|
|
628
672
|
for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
|
|
629
673
|
|
|
630
674
|
mipmap = mipmaps[ i ];
|
|
631
|
-
|
|
675
|
+
|
|
676
|
+
if ( useTexStorage ) {
|
|
677
|
+
|
|
678
|
+
state.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
|
|
679
|
+
|
|
680
|
+
} else {
|
|
681
|
+
|
|
682
|
+
state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
|
|
683
|
+
|
|
684
|
+
}
|
|
632
685
|
|
|
633
686
|
}
|
|
634
687
|
|
|
635
688
|
texture.generateMipmaps = false;
|
|
636
|
-
textureProperties.__maxMipLevel = mipmaps.length - 1;
|
|
637
689
|
|
|
638
690
|
} else {
|
|
639
691
|
|
|
640
|
-
|
|
641
|
-
|
|
692
|
+
if ( useTexStorage ) {
|
|
693
|
+
|
|
694
|
+
if ( allocateMemory ) {
|
|
695
|
+
|
|
696
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );
|
|
697
|
+
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
state.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, glFormat, glType, image.data );
|
|
701
|
+
|
|
702
|
+
} else {
|
|
703
|
+
|
|
704
|
+
state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );
|
|
705
|
+
|
|
706
|
+
}
|
|
642
707
|
|
|
643
708
|
}
|
|
644
709
|
|
|
645
710
|
} else if ( texture.isCompressedTexture ) {
|
|
646
711
|
|
|
712
|
+
if ( useTexStorage && allocateMemory ) {
|
|
713
|
+
|
|
714
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );
|
|
715
|
+
|
|
716
|
+
}
|
|
717
|
+
|
|
647
718
|
for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
|
|
648
719
|
|
|
649
720
|
mipmap = mipmaps[ i ];
|
|
650
721
|
|
|
651
|
-
if ( texture.format !== RGBAFormat
|
|
722
|
+
if ( texture.format !== RGBAFormat ) {
|
|
652
723
|
|
|
653
724
|
if ( glFormat !== null ) {
|
|
654
725
|
|
|
655
|
-
|
|
726
|
+
if ( useTexStorage ) {
|
|
727
|
+
|
|
728
|
+
state.compressedTexSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );
|
|
729
|
+
|
|
730
|
+
} else {
|
|
731
|
+
|
|
732
|
+
state.compressedTexImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );
|
|
733
|
+
|
|
734
|
+
}
|
|
656
735
|
|
|
657
736
|
} else {
|
|
658
737
|
|
|
@@ -662,23 +741,67 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
662
741
|
|
|
663
742
|
} else {
|
|
664
743
|
|
|
665
|
-
|
|
744
|
+
if ( useTexStorage ) {
|
|
745
|
+
|
|
746
|
+
state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
|
|
747
|
+
|
|
748
|
+
} else {
|
|
749
|
+
|
|
750
|
+
state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
|
|
751
|
+
|
|
752
|
+
}
|
|
666
753
|
|
|
667
754
|
}
|
|
668
755
|
|
|
669
756
|
}
|
|
670
757
|
|
|
671
|
-
textureProperties.__maxMipLevel = mipmaps.length - 1;
|
|
672
|
-
|
|
673
758
|
} else if ( texture.isDataTexture2DArray ) {
|
|
674
759
|
|
|
675
|
-
|
|
676
|
-
|
|
760
|
+
if ( useTexStorage ) {
|
|
761
|
+
|
|
762
|
+
if ( allocateMemory ) {
|
|
763
|
+
|
|
764
|
+
state.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth );
|
|
765
|
+
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
state.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
|
|
769
|
+
|
|
770
|
+
} else {
|
|
771
|
+
|
|
772
|
+
state.texImage3D( _gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );
|
|
773
|
+
|
|
774
|
+
}
|
|
677
775
|
|
|
678
776
|
} else if ( texture.isDataTexture3D ) {
|
|
679
777
|
|
|
680
|
-
|
|
681
|
-
|
|
778
|
+
if ( useTexStorage ) {
|
|
779
|
+
|
|
780
|
+
if ( allocateMemory ) {
|
|
781
|
+
|
|
782
|
+
state.texStorage3D( _gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth );
|
|
783
|
+
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
state.texSubImage3D( _gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
|
|
787
|
+
|
|
788
|
+
} else {
|
|
789
|
+
|
|
790
|
+
state.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );
|
|
791
|
+
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
} else if ( texture.isFramebufferTexture ) {
|
|
795
|
+
|
|
796
|
+
if ( useTexStorage && allocateMemory ) {
|
|
797
|
+
|
|
798
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );
|
|
799
|
+
|
|
800
|
+
} else {
|
|
801
|
+
|
|
802
|
+
state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );
|
|
803
|
+
|
|
804
|
+
}
|
|
682
805
|
|
|
683
806
|
} else {
|
|
684
807
|
|
|
@@ -690,20 +813,47 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
690
813
|
|
|
691
814
|
if ( mipmaps.length > 0 && supportsMips ) {
|
|
692
815
|
|
|
816
|
+
if ( useTexStorage && allocateMemory ) {
|
|
817
|
+
|
|
818
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );
|
|
819
|
+
|
|
820
|
+
}
|
|
821
|
+
|
|
693
822
|
for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
|
|
694
823
|
|
|
695
824
|
mipmap = mipmaps[ i ];
|
|
696
|
-
|
|
825
|
+
|
|
826
|
+
if ( useTexStorage ) {
|
|
827
|
+
|
|
828
|
+
state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap );
|
|
829
|
+
|
|
830
|
+
} else {
|
|
831
|
+
|
|
832
|
+
state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap );
|
|
833
|
+
|
|
834
|
+
}
|
|
697
835
|
|
|
698
836
|
}
|
|
699
837
|
|
|
700
838
|
texture.generateMipmaps = false;
|
|
701
|
-
textureProperties.__maxMipLevel = mipmaps.length - 1;
|
|
702
839
|
|
|
703
840
|
} else {
|
|
704
841
|
|
|
705
|
-
|
|
706
|
-
|
|
842
|
+
if ( useTexStorage ) {
|
|
843
|
+
|
|
844
|
+
if ( allocateMemory ) {
|
|
845
|
+
|
|
846
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );
|
|
847
|
+
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
state.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, glFormat, glType, image );
|
|
851
|
+
|
|
852
|
+
} else {
|
|
853
|
+
|
|
854
|
+
state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image );
|
|
855
|
+
|
|
856
|
+
}
|
|
707
857
|
|
|
708
858
|
}
|
|
709
859
|
|
|
@@ -711,7 +861,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
711
861
|
|
|
712
862
|
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
713
863
|
|
|
714
|
-
generateMipmap( textureType
|
|
864
|
+
generateMipmap( textureType );
|
|
715
865
|
|
|
716
866
|
}
|
|
717
867
|
|
|
@@ -752,20 +902,32 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
752
902
|
|
|
753
903
|
}
|
|
754
904
|
|
|
905
|
+
cubeImage[ i ] = verifyColorSpace( texture, cubeImage[ i ] );
|
|
906
|
+
|
|
755
907
|
}
|
|
756
908
|
|
|
757
909
|
const image = cubeImage[ 0 ],
|
|
758
910
|
supportsMips = isPowerOfTwo( image ) || isWebGL2,
|
|
759
|
-
glFormat = utils.convert( texture.format ),
|
|
911
|
+
glFormat = utils.convert( texture.format, texture.encoding ),
|
|
760
912
|
glType = utils.convert( texture.type ),
|
|
761
913
|
glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
762
914
|
|
|
915
|
+
const useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );
|
|
916
|
+
const allocateMemory = ( textureProperties.__version === undefined );
|
|
917
|
+
let levels = getMipLevels( texture, image, supportsMips );
|
|
918
|
+
|
|
763
919
|
setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, supportsMips );
|
|
764
920
|
|
|
765
921
|
let mipmaps;
|
|
766
922
|
|
|
767
923
|
if ( isCompressed ) {
|
|
768
924
|
|
|
925
|
+
if ( useTexStorage && allocateMemory ) {
|
|
926
|
+
|
|
927
|
+
state.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height );
|
|
928
|
+
|
|
929
|
+
}
|
|
930
|
+
|
|
769
931
|
for ( let i = 0; i < 6; i ++ ) {
|
|
770
932
|
|
|
771
933
|
mipmaps = cubeImage[ i ].mipmaps;
|
|
@@ -774,11 +936,19 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
774
936
|
|
|
775
937
|
const mipmap = mipmaps[ j ];
|
|
776
938
|
|
|
777
|
-
if ( texture.format !== RGBAFormat
|
|
939
|
+
if ( texture.format !== RGBAFormat ) {
|
|
778
940
|
|
|
779
941
|
if ( glFormat !== null ) {
|
|
780
942
|
|
|
781
|
-
|
|
943
|
+
if ( useTexStorage ) {
|
|
944
|
+
|
|
945
|
+
state.compressedTexSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );
|
|
946
|
+
|
|
947
|
+
} else {
|
|
948
|
+
|
|
949
|
+
state.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );
|
|
950
|
+
|
|
951
|
+
}
|
|
782
952
|
|
|
783
953
|
} else {
|
|
784
954
|
|
|
@@ -788,7 +958,15 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
788
958
|
|
|
789
959
|
} else {
|
|
790
960
|
|
|
791
|
-
|
|
961
|
+
if ( useTexStorage ) {
|
|
962
|
+
|
|
963
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
|
|
964
|
+
|
|
965
|
+
} else {
|
|
966
|
+
|
|
967
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
|
|
968
|
+
|
|
969
|
+
}
|
|
792
970
|
|
|
793
971
|
}
|
|
794
972
|
|
|
@@ -796,36 +974,78 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
796
974
|
|
|
797
975
|
}
|
|
798
976
|
|
|
799
|
-
textureProperties.__maxMipLevel = mipmaps.length - 1;
|
|
800
|
-
|
|
801
977
|
} else {
|
|
802
978
|
|
|
803
979
|
mipmaps = texture.mipmaps;
|
|
804
980
|
|
|
981
|
+
if ( useTexStorage && allocateMemory ) {
|
|
982
|
+
|
|
983
|
+
// TODO: Uniformly handle mipmap definitions
|
|
984
|
+
// Normal textures and compressed cube textures define base level + mips with their mipmap array
|
|
985
|
+
// Uncompressed cube textures use their mipmap array only for mips (no base level)
|
|
986
|
+
|
|
987
|
+
if ( mipmaps.length > 0 ) levels ++;
|
|
988
|
+
|
|
989
|
+
state.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, cubeImage[ 0 ].width, cubeImage[ 0 ].height );
|
|
990
|
+
|
|
991
|
+
}
|
|
992
|
+
|
|
805
993
|
for ( let i = 0; i < 6; i ++ ) {
|
|
806
994
|
|
|
807
995
|
if ( isDataTexture ) {
|
|
808
996
|
|
|
809
|
-
|
|
997
|
+
if ( useTexStorage ) {
|
|
998
|
+
|
|
999
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[ i ].width, cubeImage[ i ].height, glFormat, glType, cubeImage[ i ].data );
|
|
1000
|
+
|
|
1001
|
+
} else {
|
|
1002
|
+
|
|
1003
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );
|
|
1004
|
+
|
|
1005
|
+
}
|
|
810
1006
|
|
|
811
1007
|
for ( let j = 0; j < mipmaps.length; j ++ ) {
|
|
812
1008
|
|
|
813
1009
|
const mipmap = mipmaps[ j ];
|
|
814
1010
|
const mipmapImage = mipmap.image[ i ].image;
|
|
815
1011
|
|
|
816
|
-
|
|
1012
|
+
if ( useTexStorage ) {
|
|
1013
|
+
|
|
1014
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data );
|
|
1015
|
+
|
|
1016
|
+
} else {
|
|
1017
|
+
|
|
1018
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );
|
|
1019
|
+
|
|
1020
|
+
}
|
|
817
1021
|
|
|
818
1022
|
}
|
|
819
1023
|
|
|
820
1024
|
} else {
|
|
821
1025
|
|
|
822
|
-
|
|
1026
|
+
if ( useTexStorage ) {
|
|
1027
|
+
|
|
1028
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[ i ] );
|
|
1029
|
+
|
|
1030
|
+
} else {
|
|
1031
|
+
|
|
1032
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );
|
|
1033
|
+
|
|
1034
|
+
}
|
|
823
1035
|
|
|
824
1036
|
for ( let j = 0; j < mipmaps.length; j ++ ) {
|
|
825
1037
|
|
|
826
1038
|
const mipmap = mipmaps[ j ];
|
|
827
1039
|
|
|
828
|
-
|
|
1040
|
+
if ( useTexStorage ) {
|
|
1041
|
+
|
|
1042
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[ i ] );
|
|
1043
|
+
|
|
1044
|
+
} else {
|
|
1045
|
+
|
|
1046
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );
|
|
1047
|
+
|
|
1048
|
+
}
|
|
829
1049
|
|
|
830
1050
|
}
|
|
831
1051
|
|
|
@@ -833,14 +1053,12 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
833
1053
|
|
|
834
1054
|
}
|
|
835
1055
|
|
|
836
|
-
textureProperties.__maxMipLevel = mipmaps.length;
|
|
837
|
-
|
|
838
1056
|
}
|
|
839
1057
|
|
|
840
1058
|
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
841
1059
|
|
|
842
1060
|
// We assume images for cube map have the same size.
|
|
843
|
-
generateMipmap( _gl.TEXTURE_CUBE_MAP
|
|
1061
|
+
generateMipmap( _gl.TEXTURE_CUBE_MAP );
|
|
844
1062
|
|
|
845
1063
|
}
|
|
846
1064
|
|
|
@@ -855,26 +1073,41 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
855
1073
|
// Setup storage for target texture and bind it to correct framebuffer
|
|
856
1074
|
function setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget ) {
|
|
857
1075
|
|
|
858
|
-
const glFormat = utils.convert( texture.format );
|
|
1076
|
+
const glFormat = utils.convert( texture.format, texture.encoding );
|
|
859
1077
|
const glType = utils.convert( texture.type );
|
|
860
1078
|
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
1079
|
+
const renderTargetProperties = properties.get( renderTarget );
|
|
861
1080
|
|
|
862
|
-
if (
|
|
1081
|
+
if ( ! renderTargetProperties.__hasExternalTextures ) {
|
|
863
1082
|
|
|
864
|
-
|
|
1083
|
+
if ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {
|
|
865
1084
|
|
|
866
|
-
|
|
1085
|
+
state.texImage3D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null );
|
|
1086
|
+
|
|
1087
|
+
} else {
|
|
867
1088
|
|
|
868
|
-
|
|
1089
|
+
state.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );
|
|
1090
|
+
|
|
1091
|
+
}
|
|
869
1092
|
|
|
870
1093
|
}
|
|
871
1094
|
|
|
872
1095
|
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
873
|
-
|
|
1096
|
+
if ( renderTarget.useRenderToTexture ) {
|
|
1097
|
+
|
|
1098
|
+
MultisampledRenderToTextureExtension.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0, getRenderTargetSamples( renderTarget ) );
|
|
1099
|
+
|
|
1100
|
+
} else {
|
|
1101
|
+
|
|
1102
|
+
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0 );
|
|
1103
|
+
|
|
1104
|
+
}
|
|
1105
|
+
|
|
874
1106
|
state.bindFramebuffer( _gl.FRAMEBUFFER, null );
|
|
875
1107
|
|
|
876
1108
|
}
|
|
877
1109
|
|
|
1110
|
+
|
|
878
1111
|
// Setup storage for internal depth/stencil buffers and bind to correct framebuffer
|
|
879
1112
|
function setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {
|
|
880
1113
|
|
|
@@ -884,7 +1117,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
884
1117
|
|
|
885
1118
|
let glInternalFormat = _gl.DEPTH_COMPONENT16;
|
|
886
1119
|
|
|
887
|
-
if ( isMultisample ) {
|
|
1120
|
+
if ( isMultisample || renderTarget.useRenderToTexture ) {
|
|
888
1121
|
|
|
889
1122
|
const depthTexture = renderTarget.depthTexture;
|
|
890
1123
|
|
|
@@ -904,7 +1137,15 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
904
1137
|
|
|
905
1138
|
const samples = getRenderTargetSamples( renderTarget );
|
|
906
1139
|
|
|
907
|
-
|
|
1140
|
+
if ( renderTarget.useRenderToTexture ) {
|
|
1141
|
+
|
|
1142
|
+
MultisampledRenderToTextureExtension.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1143
|
+
|
|
1144
|
+
} else {
|
|
1145
|
+
|
|
1146
|
+
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1147
|
+
|
|
1148
|
+
}
|
|
908
1149
|
|
|
909
1150
|
} else {
|
|
910
1151
|
|
|
@@ -916,12 +1157,16 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
916
1157
|
|
|
917
1158
|
} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {
|
|
918
1159
|
|
|
919
|
-
|
|
1160
|
+
const samples = getRenderTargetSamples( renderTarget );
|
|
920
1161
|
|
|
921
|
-
|
|
1162
|
+
if ( isMultisample && renderTarget.useRenderbuffer ) {
|
|
922
1163
|
|
|
923
1164
|
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );
|
|
924
1165
|
|
|
1166
|
+
} else if ( renderTarget.useRenderToTexture ) {
|
|
1167
|
+
|
|
1168
|
+
MultisampledRenderToTextureExtension.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );
|
|
1169
|
+
|
|
925
1170
|
} else {
|
|
926
1171
|
|
|
927
1172
|
_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height );
|
|
@@ -936,16 +1181,19 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
936
1181
|
// Use the first texture for MRT so far
|
|
937
1182
|
const texture = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture[ 0 ] : renderTarget.texture;
|
|
938
1183
|
|
|
939
|
-
const glFormat = utils.convert( texture.format );
|
|
1184
|
+
const glFormat = utils.convert( texture.format, texture.encoding );
|
|
940
1185
|
const glType = utils.convert( texture.type );
|
|
941
1186
|
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
1187
|
+
const samples = getRenderTargetSamples( renderTarget );
|
|
942
1188
|
|
|
943
|
-
if ( isMultisample ) {
|
|
944
|
-
|
|
945
|
-
const samples = getRenderTargetSamples( renderTarget );
|
|
1189
|
+
if ( isMultisample && renderTarget.useRenderbuffer ) {
|
|
946
1190
|
|
|
947
1191
|
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
948
1192
|
|
|
1193
|
+
} else if ( renderTarget.useRenderToTexture ) {
|
|
1194
|
+
|
|
1195
|
+
MultisampledRenderToTextureExtension.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1196
|
+
|
|
949
1197
|
} else {
|
|
950
1198
|
|
|
951
1199
|
_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
@@ -986,14 +1234,31 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
986
1234
|
setTexture2D( renderTarget.depthTexture, 0 );
|
|
987
1235
|
|
|
988
1236
|
const webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;
|
|
1237
|
+
const samples = getRenderTargetSamples( renderTarget );
|
|
989
1238
|
|
|
990
1239
|
if ( renderTarget.depthTexture.format === DepthFormat ) {
|
|
991
1240
|
|
|
992
|
-
|
|
1241
|
+
if ( renderTarget.useRenderToTexture ) {
|
|
1242
|
+
|
|
1243
|
+
MultisampledRenderToTextureExtension.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
|
|
1244
|
+
|
|
1245
|
+
} else {
|
|
1246
|
+
|
|
1247
|
+
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );
|
|
1248
|
+
|
|
1249
|
+
}
|
|
993
1250
|
|
|
994
1251
|
} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {
|
|
995
1252
|
|
|
996
|
-
|
|
1253
|
+
if ( renderTarget.useRenderToTexture ) {
|
|
1254
|
+
|
|
1255
|
+
MultisampledRenderToTextureExtension.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
|
|
1256
|
+
|
|
1257
|
+
} else {
|
|
1258
|
+
|
|
1259
|
+
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );
|
|
1260
|
+
|
|
1261
|
+
}
|
|
997
1262
|
|
|
998
1263
|
} else {
|
|
999
1264
|
|
|
@@ -1007,10 +1272,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1007
1272
|
function setupDepthRenderbuffer( renderTarget ) {
|
|
1008
1273
|
|
|
1009
1274
|
const renderTargetProperties = properties.get( renderTarget );
|
|
1010
|
-
|
|
1011
1275
|
const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
|
|
1012
1276
|
|
|
1013
|
-
if ( renderTarget.depthTexture ) {
|
|
1277
|
+
if ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) {
|
|
1014
1278
|
|
|
1015
1279
|
if ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );
|
|
1016
1280
|
|
|
@@ -1044,6 +1308,25 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1044
1308
|
|
|
1045
1309
|
}
|
|
1046
1310
|
|
|
1311
|
+
// rebind framebuffer with external textures
|
|
1312
|
+
function rebindTextures( renderTarget, colorTexture, depthTexture ) {
|
|
1313
|
+
|
|
1314
|
+
const renderTargetProperties = properties.get( renderTarget );
|
|
1315
|
+
|
|
1316
|
+
if ( colorTexture !== undefined ) {
|
|
1317
|
+
|
|
1318
|
+
setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );
|
|
1319
|
+
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
if ( depthTexture !== undefined ) {
|
|
1323
|
+
|
|
1324
|
+
setupDepthRenderbuffer( renderTarget );
|
|
1325
|
+
|
|
1326
|
+
}
|
|
1327
|
+
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1047
1330
|
// Set up GL resources for the render target
|
|
1048
1331
|
function setupRenderTarget( renderTarget ) {
|
|
1049
1332
|
|
|
@@ -1056,7 +1339,12 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1056
1339
|
|
|
1057
1340
|
if ( renderTarget.isWebGLMultipleRenderTargets !== true ) {
|
|
1058
1341
|
|
|
1059
|
-
textureProperties.__webglTexture
|
|
1342
|
+
if ( textureProperties.__webglTexture === undefined ) {
|
|
1343
|
+
|
|
1344
|
+
textureProperties.__webglTexture = _gl.createTexture();
|
|
1345
|
+
|
|
1346
|
+
}
|
|
1347
|
+
|
|
1060
1348
|
textureProperties.__version = texture.version;
|
|
1061
1349
|
info.memory.textures ++;
|
|
1062
1350
|
|
|
@@ -1064,20 +1352,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1064
1352
|
|
|
1065
1353
|
const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
|
|
1066
1354
|
const isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );
|
|
1067
|
-
const isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true );
|
|
1068
1355
|
const isRenderTarget3D = texture.isDataTexture3D || texture.isDataTexture2DArray;
|
|
1069
1356
|
const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;
|
|
1070
1357
|
|
|
1071
|
-
// Handles WebGL2 RGBFormat fallback - #18858
|
|
1072
|
-
|
|
1073
|
-
if ( isWebGL2 && texture.format === RGBFormat && ( texture.type === FloatType || texture.type === HalfFloatType ) ) {
|
|
1074
|
-
|
|
1075
|
-
texture.format = RGBAFormat;
|
|
1076
|
-
|
|
1077
|
-
console.warn( 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' );
|
|
1078
|
-
|
|
1079
|
-
}
|
|
1080
|
-
|
|
1081
1358
|
// Setup framebuffer
|
|
1082
1359
|
|
|
1083
1360
|
if ( isCube ) {
|
|
@@ -1120,7 +1397,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1120
1397
|
|
|
1121
1398
|
}
|
|
1122
1399
|
|
|
1123
|
-
} else if (
|
|
1400
|
+
} else if ( renderTarget.useRenderbuffer ) {
|
|
1124
1401
|
|
|
1125
1402
|
if ( isWebGL2 ) {
|
|
1126
1403
|
|
|
@@ -1129,7 +1406,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1129
1406
|
|
|
1130
1407
|
_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer );
|
|
1131
1408
|
|
|
1132
|
-
const glFormat = utils.convert( texture.format );
|
|
1409
|
+
const glFormat = utils.convert( texture.format, texture.encoding );
|
|
1133
1410
|
const glType = utils.convert( texture.type );
|
|
1134
1411
|
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
1135
1412
|
const samples = getRenderTargetSamples( renderTarget );
|
|
@@ -1174,7 +1451,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1174
1451
|
|
|
1175
1452
|
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
1176
1453
|
|
|
1177
|
-
generateMipmap( _gl.TEXTURE_CUBE_MAP
|
|
1454
|
+
generateMipmap( _gl.TEXTURE_CUBE_MAP );
|
|
1178
1455
|
|
|
1179
1456
|
}
|
|
1180
1457
|
|
|
@@ -1195,7 +1472,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1195
1472
|
|
|
1196
1473
|
if ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {
|
|
1197
1474
|
|
|
1198
|
-
generateMipmap( _gl.TEXTURE_2D
|
|
1475
|
+
generateMipmap( _gl.TEXTURE_2D );
|
|
1199
1476
|
|
|
1200
1477
|
}
|
|
1201
1478
|
|
|
@@ -1230,7 +1507,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1230
1507
|
|
|
1231
1508
|
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
1232
1509
|
|
|
1233
|
-
generateMipmap( glTextureType
|
|
1510
|
+
generateMipmap( glTextureType );
|
|
1234
1511
|
|
|
1235
1512
|
}
|
|
1236
1513
|
|
|
@@ -1264,7 +1541,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1264
1541
|
const webglTexture = properties.get( texture ).__webglTexture;
|
|
1265
1542
|
|
|
1266
1543
|
state.bindTexture( target, webglTexture );
|
|
1267
|
-
generateMipmap( target
|
|
1544
|
+
generateMipmap( target );
|
|
1268
1545
|
state.unbindTexture();
|
|
1269
1546
|
|
|
1270
1547
|
}
|
|
@@ -1275,23 +1552,43 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1275
1552
|
|
|
1276
1553
|
function updateMultisampleRenderTarget( renderTarget ) {
|
|
1277
1554
|
|
|
1278
|
-
if ( renderTarget.
|
|
1555
|
+
if ( renderTarget.useRenderbuffer ) {
|
|
1279
1556
|
|
|
1280
1557
|
if ( isWebGL2 ) {
|
|
1281
1558
|
|
|
1282
1559
|
const width = renderTarget.width;
|
|
1283
1560
|
const height = renderTarget.height;
|
|
1284
1561
|
let mask = _gl.COLOR_BUFFER_BIT;
|
|
1562
|
+
const invalidationArray = [ _gl.COLOR_ATTACHMENT0 ];
|
|
1563
|
+
const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
1564
|
+
|
|
1565
|
+
if ( renderTarget.depthBuffer ) {
|
|
1285
1566
|
|
|
1286
|
-
|
|
1287
|
-
|
|
1567
|
+
invalidationArray.push( depthStyle );
|
|
1568
|
+
|
|
1569
|
+
}
|
|
1570
|
+
|
|
1571
|
+
if ( ! renderTarget.ignoreDepthForMultisampleCopy ) {
|
|
1572
|
+
|
|
1573
|
+
if ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;
|
|
1574
|
+
if ( renderTarget.stencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;
|
|
1575
|
+
|
|
1576
|
+
}
|
|
1288
1577
|
|
|
1289
1578
|
const renderTargetProperties = properties.get( renderTarget );
|
|
1290
1579
|
|
|
1291
1580
|
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1292
1581
|
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
1293
1582
|
|
|
1583
|
+
if ( renderTarget.ignoreDepthForMultisampleCopy ) {
|
|
1584
|
+
|
|
1585
|
+
_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, [ depthStyle ] );
|
|
1586
|
+
_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );
|
|
1587
|
+
|
|
1588
|
+
}
|
|
1589
|
+
|
|
1294
1590
|
_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );
|
|
1591
|
+
_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArray );
|
|
1295
1592
|
|
|
1296
1593
|
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );
|
|
1297
1594
|
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
@@ -1308,7 +1605,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1308
1605
|
|
|
1309
1606
|
function getRenderTargetSamples( renderTarget ) {
|
|
1310
1607
|
|
|
1311
|
-
return ( isWebGL2 && renderTarget.
|
|
1608
|
+
return ( isWebGL2 && ( renderTarget.useRenderbuffer || renderTarget.useRenderToTexture ) ) ?
|
|
1312
1609
|
Math.min( maxSamples, renderTarget.samples ) : 0;
|
|
1313
1610
|
|
|
1314
1611
|
}
|
|
@@ -1328,6 +1625,65 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1328
1625
|
|
|
1329
1626
|
}
|
|
1330
1627
|
|
|
1628
|
+
function verifyColorSpace( texture, image ) {
|
|
1629
|
+
|
|
1630
|
+
const encoding = texture.encoding;
|
|
1631
|
+
const format = texture.format;
|
|
1632
|
+
const type = texture.type;
|
|
1633
|
+
|
|
1634
|
+
if ( texture.isCompressedTexture === true || texture.format === _SRGBAFormat ) return image;
|
|
1635
|
+
|
|
1636
|
+
if ( encoding !== LinearEncoding ) {
|
|
1637
|
+
|
|
1638
|
+
// sRGB
|
|
1639
|
+
|
|
1640
|
+
if ( encoding === sRGBEncoding && texture.isVideoTexture !== true ) {
|
|
1641
|
+
|
|
1642
|
+
if ( isWebGL2 === false ) {
|
|
1643
|
+
|
|
1644
|
+
// in WebGL 1, try to use EXT_sRGB extension and unsized formats
|
|
1645
|
+
|
|
1646
|
+
if ( extensions.has( 'EXT_sRGB' ) === true && format === RGBAFormat ) {
|
|
1647
|
+
|
|
1648
|
+
texture.format = _SRGBAFormat;
|
|
1649
|
+
|
|
1650
|
+
// it's not possible to generate mips in WebGL 1 with this extension
|
|
1651
|
+
|
|
1652
|
+
texture.minFilter = LinearFilter;
|
|
1653
|
+
texture.generateMipmaps = false;
|
|
1654
|
+
|
|
1655
|
+
} else {
|
|
1656
|
+
|
|
1657
|
+
// slow fallback (CPU decode)
|
|
1658
|
+
|
|
1659
|
+
image = ImageUtils.sRGBToLinear( image );
|
|
1660
|
+
|
|
1661
|
+
}
|
|
1662
|
+
|
|
1663
|
+
} else {
|
|
1664
|
+
|
|
1665
|
+
// in WebGL 2 uncompressed textures can only be sRGB encoded if they have the RGBA8 format
|
|
1666
|
+
|
|
1667
|
+
if ( format !== RGBAFormat || type !== UnsignedByteType ) {
|
|
1668
|
+
|
|
1669
|
+
console.warn( 'THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.' );
|
|
1670
|
+
|
|
1671
|
+
}
|
|
1672
|
+
|
|
1673
|
+
}
|
|
1674
|
+
|
|
1675
|
+
} else {
|
|
1676
|
+
|
|
1677
|
+
console.error( 'THREE.WebGLTextures: Unsupported texture encoding:', encoding );
|
|
1678
|
+
|
|
1679
|
+
}
|
|
1680
|
+
|
|
1681
|
+
}
|
|
1682
|
+
|
|
1683
|
+
return image;
|
|
1684
|
+
|
|
1685
|
+
}
|
|
1686
|
+
|
|
1331
1687
|
// backwards compatibility
|
|
1332
1688
|
|
|
1333
1689
|
let warnedTexture2D = false;
|
|
@@ -1381,9 +1737,12 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1381
1737
|
this.setTexture2DArray = setTexture2DArray;
|
|
1382
1738
|
this.setTexture3D = setTexture3D;
|
|
1383
1739
|
this.setTextureCube = setTextureCube;
|
|
1740
|
+
this.rebindTextures = rebindTextures;
|
|
1384
1741
|
this.setupRenderTarget = setupRenderTarget;
|
|
1385
1742
|
this.updateRenderTargetMipmap = updateRenderTargetMipmap;
|
|
1386
1743
|
this.updateMultisampleRenderTarget = updateMultisampleRenderTarget;
|
|
1744
|
+
this.setupDepthRenderbuffer = setupDepthRenderbuffer;
|
|
1745
|
+
this.setupFrameBufferTexture = setupFrameBufferTexture;
|
|
1387
1746
|
|
|
1388
1747
|
this.safeSetTexture2D = safeSetTexture2D;
|
|
1389
1748
|
this.safeSetTextureCube = safeSetTextureCube;
|