super-three 0.133.3 → 0.136.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/build/three.js +1059 -783
- package/build/three.min.js +1 -1
- package/build/three.module.js +1424 -895
- 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 +1 -3
- 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/USDZExporter.js +45 -26
- 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/ColladaLoader.js +61 -4
- package/examples/js/loaders/EXRLoader.js +185 -262
- package/examples/js/loaders/FBXLoader.js +4 -5
- package/examples/js/loaders/GLTFLoader.js +96 -33
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -8
- package/examples/js/loaders/KTX2Loader.js +23 -2
- package/examples/js/loaders/KTXLoader.js +1 -1
- package/examples/js/loaders/LDrawLoader.js +26 -30
- package/examples/js/loaders/LUT3dlLoader.js +2 -0
- package/examples/js/loaders/LUTCubeLoader.js +2 -0
- 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 +2 -16
- package/examples/js/loaders/RGBMLoader.js +55 -5
- package/examples/js/loaders/SVGLoader.js +9 -5
- package/examples/js/loaders/TDSLoader.js +237 -271
- package/examples/js/loaders/VOXLoader.js +1 -0
- package/examples/js/loaders/VRMLLoader.js +2 -1
- package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/misc/GPUComputationRenderer.js +3 -1
- package/examples/js/objects/Lensflare.js +2 -10
- package/examples/js/objects/MarchingCubes.js +42 -128
- package/examples/js/objects/Reflector.js +7 -0
- package/examples/js/objects/Refractor.js +7 -0
- package/examples/js/objects/Sky.js +1 -1
- package/examples/js/objects/Water.js +2 -2
- package/examples/js/objects/Water2.js +4 -7
- package/examples/js/postprocessing/GlitchPass.js +3 -1
- package/examples/js/postprocessing/SSAOPass.js +1 -0
- 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/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/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/js/utils/RoughnessMipmapper.js +18 -28
- package/examples/jsm/animation/CCDIKSolver.js +0 -1
- package/examples/jsm/animation/MMDPhysics.js +0 -2
- 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 +161 -75
- package/examples/jsm/exporters/USDZExporter.js +47 -26
- 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/ColladaLoader.js +61 -4
- package/examples/jsm/loaders/EXRLoader.js +184 -293
- package/examples/jsm/loaders/FBXLoader.js +4 -5
- package/examples/jsm/loaders/GLTFLoader.js +101 -37
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -14
- package/examples/jsm/loaders/KTX2Loader.js +30 -2
- package/examples/jsm/loaders/KTXLoader.js +1 -1
- package/examples/jsm/loaders/LDrawLoader.js +23 -24
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -0
- 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 +0 -20
- package/examples/jsm/loaders/RGBMLoader.js +61 -7
- package/examples/jsm/loaders/SVGLoader.js +9 -6
- package/examples/jsm/loaders/TDSLoader.js +236 -275
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +2 -1
- package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
- package/examples/jsm/node-editor/NodeEditor.js +456 -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 +1 -164
- package/examples/jsm/objects/Lensflare.js +3 -14
- package/examples/jsm/objects/MarchingCubes.js +46 -152
- package/examples/jsm/objects/Reflector.js +7 -0
- package/examples/jsm/objects/Refractor.js +7 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/Water.js +2 -2
- 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 +4 -2
- 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 +1 -1
- package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -1
- package/examples/jsm/postprocessing/SSRPass.js +1 -1
- package/examples/jsm/postprocessing/SSRrPass.js +1 -1
- package/examples/jsm/postprocessing/SavePass.js +1 -1
- 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 +15 -13
- package/examples/jsm/renderers/nodes/ShaderNode.js +194 -41
- 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 +60 -43
- 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 +10 -2
- 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 +90 -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/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 +12 -28
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +34 -27
- package/examples/jsm/renderers/webgpu/constants.js +2 -2
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +453 -95
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
- package/examples/jsm/shaders/ConvolutionShader.js +0 -1
- 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/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/RoughnessMipmapper.js +19 -31
- package/examples/jsm/utils/WorkerPool.js +11 -11
- package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
- package/package.json +24 -18
- package/src/Three.Legacy.js +18 -0
- package/src/Three.js +1 -3
- package/src/cameras/StereoCamera.js +8 -7
- package/src/constants.js +1 -8
- package/src/core/Layers.js +7 -1
- package/src/core/Object3D.js +3 -1
- package/src/extras/PMREMGenerator.js +23 -109
- 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 +7 -4
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/Material.js +4 -4
- package/src/materials/MeshPhysicalMaterial.js +20 -14
- package/src/math/Color.js +0 -38
- package/src/math/MathUtils.js +5 -16
- package/src/math/Ray.js +2 -2
- package/src/math/Sphere.js +10 -1
- package/src/objects/Skeleton.js +1 -0
- package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
- package/src/renderers/WebGLRenderer.js +105 -132
- 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/encodings_pars_fragment.glsl.js +0 -74
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.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/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 +1 -1
- 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 +6 -4
- package/src/renderers/shaders/UniformsLib.js +1 -2
- package/src/renderers/webgl/WebGLCapabilities.js +0 -2
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLMaterials.js +27 -15
- package/src/renderers/webgl/WebGLMorphtargets.js +1 -0
- package/src/renderers/webgl/WebGLProgram.js +11 -24
- package/src/renderers/webgl/WebGLPrograms.js +194 -33
- 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 +76 -17
- package/src/renderers/webgl/WebGLTextures.js +367 -61
- package/src/renderers/webgl/WebGLUniforms.js +45 -1
- 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 +6 -0
- package/examples/js/controls/DeviceOrientationControls.js +0 -147
- package/examples/js/libs/dat.gui.min.js +0 -14
- 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/src/extras/objects/ImmediateRenderObject.js +0 -31
|
@@ -9,6 +9,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
9
9
|
const maxCubemapSize = capabilities.maxCubemapSize;
|
|
10
10
|
const maxTextureSize = capabilities.maxTextureSize;
|
|
11
11
|
const maxSamples = capabilities.maxSamples;
|
|
12
|
+
const hasMultisampledRenderToTexture = extensions.has( 'WEBGL_multisampled_render_to_texture' );
|
|
13
|
+
const MultisampledRenderToTextureExtension = hasMultisampledRenderToTexture ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : undefined;
|
|
12
14
|
|
|
13
15
|
const _videoTextures = new WeakMap();
|
|
14
16
|
let _canvas;
|
|
@@ -122,14 +124,10 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
122
124
|
|
|
123
125
|
}
|
|
124
126
|
|
|
125
|
-
function generateMipmap( target
|
|
127
|
+
function generateMipmap( target ) {
|
|
126
128
|
|
|
127
129
|
_gl.generateMipmap( target );
|
|
128
130
|
|
|
129
|
-
const textureProperties = properties.get( texture );
|
|
130
|
-
|
|
131
|
-
textureProperties.__maxMipLevel = Math.log2( Math.max( width, height, depth ) );
|
|
132
|
-
|
|
133
131
|
}
|
|
134
132
|
|
|
135
133
|
function getInternalFormat( internalFormatName, glFormat, glType, encoding ) {
|
|
@@ -181,6 +179,32 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
181
179
|
|
|
182
180
|
}
|
|
183
181
|
|
|
182
|
+
function getMipLevels( texture, image, supportsMips ) {
|
|
183
|
+
|
|
184
|
+
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) === true || ( texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) ) {
|
|
185
|
+
|
|
186
|
+
return Math.log2( Math.max( image.width, image.height ) ) + 1;
|
|
187
|
+
|
|
188
|
+
} else if ( texture.mipmaps !== undefined && texture.mipmaps.length > 0 ) {
|
|
189
|
+
|
|
190
|
+
// user-defined mipmaps
|
|
191
|
+
|
|
192
|
+
return texture.mipmaps.length;
|
|
193
|
+
|
|
194
|
+
} else if ( texture.isCompressedTexture && Array.isArray( texture.image ) ) {
|
|
195
|
+
|
|
196
|
+
return image.mipmaps.length;
|
|
197
|
+
|
|
198
|
+
} else {
|
|
199
|
+
|
|
200
|
+
// texture without mipmaps (only base level)
|
|
201
|
+
|
|
202
|
+
return 1;
|
|
203
|
+
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
}
|
|
207
|
+
|
|
184
208
|
// Fallback filters for non-power-of-2 textures
|
|
185
209
|
|
|
186
210
|
function filterFallback( f ) {
|
|
@@ -539,6 +563,10 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
539
563
|
let mipmap;
|
|
540
564
|
const mipmaps = texture.mipmaps;
|
|
541
565
|
|
|
566
|
+
const useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );
|
|
567
|
+
const allocateMemory = ( textureProperties.__version === undefined );
|
|
568
|
+
const levels = getMipLevels( texture, image, supportsMips );
|
|
569
|
+
|
|
542
570
|
if ( texture.isDepthTexture ) {
|
|
543
571
|
|
|
544
572
|
// populate depth texture with dummy data
|
|
@@ -615,7 +643,15 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
615
643
|
|
|
616
644
|
//
|
|
617
645
|
|
|
618
|
-
|
|
646
|
+
if ( useTexStorage && allocateMemory ) {
|
|
647
|
+
|
|
648
|
+
state.texStorage2D( _gl.TEXTURE_2D, 1, glInternalFormat, image.width, image.height );
|
|
649
|
+
|
|
650
|
+
} else {
|
|
651
|
+
|
|
652
|
+
state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );
|
|
653
|
+
|
|
654
|
+
}
|
|
619
655
|
|
|
620
656
|
} else if ( texture.isDataTexture ) {
|
|
621
657
|
|
|
@@ -625,25 +661,58 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
625
661
|
|
|
626
662
|
if ( mipmaps.length > 0 && supportsMips ) {
|
|
627
663
|
|
|
664
|
+
if ( useTexStorage && allocateMemory ) {
|
|
665
|
+
|
|
666
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );
|
|
667
|
+
|
|
668
|
+
}
|
|
669
|
+
|
|
628
670
|
for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
|
|
629
671
|
|
|
630
672
|
mipmap = mipmaps[ i ];
|
|
631
|
-
|
|
673
|
+
|
|
674
|
+
if ( useTexStorage ) {
|
|
675
|
+
|
|
676
|
+
state.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
|
|
677
|
+
|
|
678
|
+
} else {
|
|
679
|
+
|
|
680
|
+
state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
|
|
681
|
+
|
|
682
|
+
}
|
|
632
683
|
|
|
633
684
|
}
|
|
634
685
|
|
|
635
686
|
texture.generateMipmaps = false;
|
|
636
|
-
textureProperties.__maxMipLevel = mipmaps.length - 1;
|
|
637
687
|
|
|
638
688
|
} else {
|
|
639
689
|
|
|
640
|
-
|
|
641
|
-
|
|
690
|
+
if ( useTexStorage ) {
|
|
691
|
+
|
|
692
|
+
if ( allocateMemory ) {
|
|
693
|
+
|
|
694
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );
|
|
695
|
+
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
state.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, glFormat, glType, image.data );
|
|
699
|
+
|
|
700
|
+
} else {
|
|
701
|
+
|
|
702
|
+
state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );
|
|
703
|
+
|
|
704
|
+
}
|
|
642
705
|
|
|
643
706
|
}
|
|
644
707
|
|
|
645
708
|
} else if ( texture.isCompressedTexture ) {
|
|
646
709
|
|
|
710
|
+
if ( useTexStorage && allocateMemory ) {
|
|
711
|
+
|
|
712
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );
|
|
713
|
+
|
|
714
|
+
}
|
|
715
|
+
|
|
647
716
|
for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
|
|
648
717
|
|
|
649
718
|
mipmap = mipmaps[ i ];
|
|
@@ -652,7 +721,15 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
652
721
|
|
|
653
722
|
if ( glFormat !== null ) {
|
|
654
723
|
|
|
655
|
-
|
|
724
|
+
if ( useTexStorage ) {
|
|
725
|
+
|
|
726
|
+
state.compressedTexSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );
|
|
727
|
+
|
|
728
|
+
} else {
|
|
729
|
+
|
|
730
|
+
state.compressedTexImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );
|
|
731
|
+
|
|
732
|
+
}
|
|
656
733
|
|
|
657
734
|
} else {
|
|
658
735
|
|
|
@@ -662,23 +739,67 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
662
739
|
|
|
663
740
|
} else {
|
|
664
741
|
|
|
665
|
-
|
|
742
|
+
if ( useTexStorage ) {
|
|
743
|
+
|
|
744
|
+
state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
|
|
745
|
+
|
|
746
|
+
} else {
|
|
747
|
+
|
|
748
|
+
state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
|
|
749
|
+
|
|
750
|
+
}
|
|
666
751
|
|
|
667
752
|
}
|
|
668
753
|
|
|
669
754
|
}
|
|
670
755
|
|
|
671
|
-
textureProperties.__maxMipLevel = mipmaps.length - 1;
|
|
672
|
-
|
|
673
756
|
} else if ( texture.isDataTexture2DArray ) {
|
|
674
757
|
|
|
675
|
-
|
|
676
|
-
|
|
758
|
+
if ( useTexStorage ) {
|
|
759
|
+
|
|
760
|
+
if ( allocateMemory ) {
|
|
761
|
+
|
|
762
|
+
state.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth );
|
|
763
|
+
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
state.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
|
|
767
|
+
|
|
768
|
+
} else {
|
|
769
|
+
|
|
770
|
+
state.texImage3D( _gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );
|
|
771
|
+
|
|
772
|
+
}
|
|
677
773
|
|
|
678
774
|
} else if ( texture.isDataTexture3D ) {
|
|
679
775
|
|
|
680
|
-
|
|
681
|
-
|
|
776
|
+
if ( useTexStorage ) {
|
|
777
|
+
|
|
778
|
+
if ( allocateMemory ) {
|
|
779
|
+
|
|
780
|
+
state.texStorage3D( _gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth );
|
|
781
|
+
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
state.texSubImage3D( _gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
|
|
785
|
+
|
|
786
|
+
} else {
|
|
787
|
+
|
|
788
|
+
state.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );
|
|
789
|
+
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
} else if ( texture.isFramebufferTexture ) {
|
|
793
|
+
|
|
794
|
+
if ( useTexStorage && allocateMemory ) {
|
|
795
|
+
|
|
796
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );
|
|
797
|
+
|
|
798
|
+
} else {
|
|
799
|
+
|
|
800
|
+
state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );
|
|
801
|
+
|
|
802
|
+
}
|
|
682
803
|
|
|
683
804
|
} else {
|
|
684
805
|
|
|
@@ -690,20 +811,47 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
690
811
|
|
|
691
812
|
if ( mipmaps.length > 0 && supportsMips ) {
|
|
692
813
|
|
|
814
|
+
if ( useTexStorage && allocateMemory ) {
|
|
815
|
+
|
|
816
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );
|
|
817
|
+
|
|
818
|
+
}
|
|
819
|
+
|
|
693
820
|
for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
|
|
694
821
|
|
|
695
822
|
mipmap = mipmaps[ i ];
|
|
696
|
-
|
|
823
|
+
|
|
824
|
+
if ( useTexStorage ) {
|
|
825
|
+
|
|
826
|
+
state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap );
|
|
827
|
+
|
|
828
|
+
} else {
|
|
829
|
+
|
|
830
|
+
state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap );
|
|
831
|
+
|
|
832
|
+
}
|
|
697
833
|
|
|
698
834
|
}
|
|
699
835
|
|
|
700
836
|
texture.generateMipmaps = false;
|
|
701
|
-
textureProperties.__maxMipLevel = mipmaps.length - 1;
|
|
702
837
|
|
|
703
838
|
} else {
|
|
704
839
|
|
|
705
|
-
|
|
706
|
-
|
|
840
|
+
if ( useTexStorage ) {
|
|
841
|
+
|
|
842
|
+
if ( allocateMemory ) {
|
|
843
|
+
|
|
844
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );
|
|
845
|
+
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
state.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, glFormat, glType, image );
|
|
849
|
+
|
|
850
|
+
} else {
|
|
851
|
+
|
|
852
|
+
state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image );
|
|
853
|
+
|
|
854
|
+
}
|
|
707
855
|
|
|
708
856
|
}
|
|
709
857
|
|
|
@@ -711,7 +859,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
711
859
|
|
|
712
860
|
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
713
861
|
|
|
714
|
-
generateMipmap( textureType
|
|
862
|
+
generateMipmap( textureType );
|
|
715
863
|
|
|
716
864
|
}
|
|
717
865
|
|
|
@@ -760,12 +908,22 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
760
908
|
glType = utils.convert( texture.type ),
|
|
761
909
|
glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
762
910
|
|
|
911
|
+
const useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );
|
|
912
|
+
const allocateMemory = ( textureProperties.__version === undefined );
|
|
913
|
+
let levels = getMipLevels( texture, image, supportsMips );
|
|
914
|
+
|
|
763
915
|
setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, supportsMips );
|
|
764
916
|
|
|
765
917
|
let mipmaps;
|
|
766
918
|
|
|
767
919
|
if ( isCompressed ) {
|
|
768
920
|
|
|
921
|
+
if ( useTexStorage && allocateMemory ) {
|
|
922
|
+
|
|
923
|
+
state.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height );
|
|
924
|
+
|
|
925
|
+
}
|
|
926
|
+
|
|
769
927
|
for ( let i = 0; i < 6; i ++ ) {
|
|
770
928
|
|
|
771
929
|
mipmaps = cubeImage[ i ].mipmaps;
|
|
@@ -778,7 +936,15 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
778
936
|
|
|
779
937
|
if ( glFormat !== null ) {
|
|
780
938
|
|
|
781
|
-
|
|
939
|
+
if ( useTexStorage ) {
|
|
940
|
+
|
|
941
|
+
state.compressedTexSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );
|
|
942
|
+
|
|
943
|
+
} else {
|
|
944
|
+
|
|
945
|
+
state.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );
|
|
946
|
+
|
|
947
|
+
}
|
|
782
948
|
|
|
783
949
|
} else {
|
|
784
950
|
|
|
@@ -788,7 +954,15 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
788
954
|
|
|
789
955
|
} else {
|
|
790
956
|
|
|
791
|
-
|
|
957
|
+
if ( useTexStorage ) {
|
|
958
|
+
|
|
959
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
|
|
960
|
+
|
|
961
|
+
} else {
|
|
962
|
+
|
|
963
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
|
|
964
|
+
|
|
965
|
+
}
|
|
792
966
|
|
|
793
967
|
}
|
|
794
968
|
|
|
@@ -796,36 +970,78 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
796
970
|
|
|
797
971
|
}
|
|
798
972
|
|
|
799
|
-
textureProperties.__maxMipLevel = mipmaps.length - 1;
|
|
800
|
-
|
|
801
973
|
} else {
|
|
802
974
|
|
|
803
975
|
mipmaps = texture.mipmaps;
|
|
804
976
|
|
|
977
|
+
if ( useTexStorage && allocateMemory ) {
|
|
978
|
+
|
|
979
|
+
// TODO: Uniformly handle mipmap definitions
|
|
980
|
+
// Normal textures and compressed cube textures define base level + mips with their mipmap array
|
|
981
|
+
// Uncompressed cube textures use their mipmap array only for mips (no base level)
|
|
982
|
+
|
|
983
|
+
if ( mipmaps.length > 0 ) levels ++;
|
|
984
|
+
|
|
985
|
+
state.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, cubeImage[ 0 ].width, cubeImage[ 0 ].height );
|
|
986
|
+
|
|
987
|
+
}
|
|
988
|
+
|
|
805
989
|
for ( let i = 0; i < 6; i ++ ) {
|
|
806
990
|
|
|
807
991
|
if ( isDataTexture ) {
|
|
808
992
|
|
|
809
|
-
|
|
993
|
+
if ( useTexStorage ) {
|
|
994
|
+
|
|
995
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[ i ].width, cubeImage[ i ].height, glFormat, glType, cubeImage[ i ].data );
|
|
996
|
+
|
|
997
|
+
} else {
|
|
998
|
+
|
|
999
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );
|
|
1000
|
+
|
|
1001
|
+
}
|
|
810
1002
|
|
|
811
1003
|
for ( let j = 0; j < mipmaps.length; j ++ ) {
|
|
812
1004
|
|
|
813
1005
|
const mipmap = mipmaps[ j ];
|
|
814
1006
|
const mipmapImage = mipmap.image[ i ].image;
|
|
815
1007
|
|
|
816
|
-
|
|
1008
|
+
if ( useTexStorage ) {
|
|
1009
|
+
|
|
1010
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data );
|
|
1011
|
+
|
|
1012
|
+
} else {
|
|
1013
|
+
|
|
1014
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );
|
|
1015
|
+
|
|
1016
|
+
}
|
|
817
1017
|
|
|
818
1018
|
}
|
|
819
1019
|
|
|
820
1020
|
} else {
|
|
821
1021
|
|
|
822
|
-
|
|
1022
|
+
if ( useTexStorage ) {
|
|
1023
|
+
|
|
1024
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[ i ] );
|
|
1025
|
+
|
|
1026
|
+
} else {
|
|
1027
|
+
|
|
1028
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );
|
|
1029
|
+
|
|
1030
|
+
}
|
|
823
1031
|
|
|
824
1032
|
for ( let j = 0; j < mipmaps.length; j ++ ) {
|
|
825
1033
|
|
|
826
1034
|
const mipmap = mipmaps[ j ];
|
|
827
1035
|
|
|
828
|
-
|
|
1036
|
+
if ( useTexStorage ) {
|
|
1037
|
+
|
|
1038
|
+
state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[ i ] );
|
|
1039
|
+
|
|
1040
|
+
} else {
|
|
1041
|
+
|
|
1042
|
+
state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );
|
|
1043
|
+
|
|
1044
|
+
}
|
|
829
1045
|
|
|
830
1046
|
}
|
|
831
1047
|
|
|
@@ -833,14 +1049,12 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
833
1049
|
|
|
834
1050
|
}
|
|
835
1051
|
|
|
836
|
-
textureProperties.__maxMipLevel = mipmaps.length;
|
|
837
|
-
|
|
838
1052
|
}
|
|
839
1053
|
|
|
840
1054
|
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
841
1055
|
|
|
842
1056
|
// We assume images for cube map have the same size.
|
|
843
|
-
generateMipmap( _gl.TEXTURE_CUBE_MAP
|
|
1057
|
+
generateMipmap( _gl.TEXTURE_CUBE_MAP );
|
|
844
1058
|
|
|
845
1059
|
}
|
|
846
1060
|
|
|
@@ -858,23 +1072,38 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
858
1072
|
const glFormat = utils.convert( texture.format );
|
|
859
1073
|
const glType = utils.convert( texture.type );
|
|
860
1074
|
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
1075
|
+
const renderTargetProperties = properties.get( renderTarget );
|
|
861
1076
|
|
|
862
|
-
if (
|
|
1077
|
+
if ( ! renderTargetProperties.__hasExternalTextures ) {
|
|
863
1078
|
|
|
864
|
-
|
|
1079
|
+
if ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {
|
|
865
1080
|
|
|
866
|
-
|
|
1081
|
+
state.texImage3D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null );
|
|
1082
|
+
|
|
1083
|
+
} else {
|
|
867
1084
|
|
|
868
|
-
|
|
1085
|
+
state.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );
|
|
1086
|
+
|
|
1087
|
+
}
|
|
869
1088
|
|
|
870
1089
|
}
|
|
871
1090
|
|
|
872
1091
|
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
873
|
-
|
|
1092
|
+
if ( renderTarget.useRenderToTexture ) {
|
|
1093
|
+
|
|
1094
|
+
MultisampledRenderToTextureExtension.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0, getRenderTargetSamples( renderTarget ) );
|
|
1095
|
+
|
|
1096
|
+
} else {
|
|
1097
|
+
|
|
1098
|
+
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0 );
|
|
1099
|
+
|
|
1100
|
+
}
|
|
1101
|
+
|
|
874
1102
|
state.bindFramebuffer( _gl.FRAMEBUFFER, null );
|
|
875
1103
|
|
|
876
1104
|
}
|
|
877
1105
|
|
|
1106
|
+
|
|
878
1107
|
// Setup storage for internal depth/stencil buffers and bind to correct framebuffer
|
|
879
1108
|
function setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {
|
|
880
1109
|
|
|
@@ -884,7 +1113,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
884
1113
|
|
|
885
1114
|
let glInternalFormat = _gl.DEPTH_COMPONENT16;
|
|
886
1115
|
|
|
887
|
-
if ( isMultisample ) {
|
|
1116
|
+
if ( isMultisample || renderTarget.useRenderToTexture ) {
|
|
888
1117
|
|
|
889
1118
|
const depthTexture = renderTarget.depthTexture;
|
|
890
1119
|
|
|
@@ -904,7 +1133,15 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
904
1133
|
|
|
905
1134
|
const samples = getRenderTargetSamples( renderTarget );
|
|
906
1135
|
|
|
907
|
-
|
|
1136
|
+
if ( renderTarget.useRenderToTexture ) {
|
|
1137
|
+
|
|
1138
|
+
MultisampledRenderToTextureExtension.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1139
|
+
|
|
1140
|
+
} else {
|
|
1141
|
+
|
|
1142
|
+
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1143
|
+
|
|
1144
|
+
}
|
|
908
1145
|
|
|
909
1146
|
} else {
|
|
910
1147
|
|
|
@@ -916,12 +1153,16 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
916
1153
|
|
|
917
1154
|
} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {
|
|
918
1155
|
|
|
919
|
-
|
|
1156
|
+
const samples = getRenderTargetSamples( renderTarget );
|
|
920
1157
|
|
|
921
|
-
|
|
1158
|
+
if ( isMultisample && renderTarget.useRenderbuffer ) {
|
|
922
1159
|
|
|
923
1160
|
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );
|
|
924
1161
|
|
|
1162
|
+
} else if ( renderTarget.useRenderToTexture ) {
|
|
1163
|
+
|
|
1164
|
+
MultisampledRenderToTextureExtension.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );
|
|
1165
|
+
|
|
925
1166
|
} else {
|
|
926
1167
|
|
|
927
1168
|
_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height );
|
|
@@ -939,13 +1180,16 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
939
1180
|
const glFormat = utils.convert( texture.format );
|
|
940
1181
|
const glType = utils.convert( texture.type );
|
|
941
1182
|
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
1183
|
+
const samples = getRenderTargetSamples( renderTarget );
|
|
942
1184
|
|
|
943
|
-
if ( isMultisample ) {
|
|
944
|
-
|
|
945
|
-
const samples = getRenderTargetSamples( renderTarget );
|
|
1185
|
+
if ( isMultisample && renderTarget.useRenderbuffer ) {
|
|
946
1186
|
|
|
947
1187
|
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
948
1188
|
|
|
1189
|
+
} else if ( renderTarget.useRenderToTexture ) {
|
|
1190
|
+
|
|
1191
|
+
MultisampledRenderToTextureExtension.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1192
|
+
|
|
949
1193
|
} else {
|
|
950
1194
|
|
|
951
1195
|
_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
@@ -986,14 +1230,31 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
986
1230
|
setTexture2D( renderTarget.depthTexture, 0 );
|
|
987
1231
|
|
|
988
1232
|
const webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;
|
|
1233
|
+
const samples = getRenderTargetSamples( renderTarget );
|
|
989
1234
|
|
|
990
1235
|
if ( renderTarget.depthTexture.format === DepthFormat ) {
|
|
991
1236
|
|
|
992
|
-
|
|
1237
|
+
if ( renderTarget.useRenderToTexture ) {
|
|
1238
|
+
|
|
1239
|
+
MultisampledRenderToTextureExtension.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
|
|
1240
|
+
|
|
1241
|
+
} else {
|
|
1242
|
+
|
|
1243
|
+
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );
|
|
1244
|
+
|
|
1245
|
+
}
|
|
993
1246
|
|
|
994
1247
|
} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {
|
|
995
1248
|
|
|
996
|
-
|
|
1249
|
+
if ( renderTarget.useRenderToTexture ) {
|
|
1250
|
+
|
|
1251
|
+
MultisampledRenderToTextureExtension.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
|
|
1252
|
+
|
|
1253
|
+
} else {
|
|
1254
|
+
|
|
1255
|
+
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );
|
|
1256
|
+
|
|
1257
|
+
}
|
|
997
1258
|
|
|
998
1259
|
} else {
|
|
999
1260
|
|
|
@@ -1007,10 +1268,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1007
1268
|
function setupDepthRenderbuffer( renderTarget ) {
|
|
1008
1269
|
|
|
1009
1270
|
const renderTargetProperties = properties.get( renderTarget );
|
|
1010
|
-
|
|
1011
1271
|
const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
|
|
1012
1272
|
|
|
1013
|
-
if ( renderTarget.depthTexture ) {
|
|
1273
|
+
if ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) {
|
|
1014
1274
|
|
|
1015
1275
|
if ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );
|
|
1016
1276
|
|
|
@@ -1044,6 +1304,25 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1044
1304
|
|
|
1045
1305
|
}
|
|
1046
1306
|
|
|
1307
|
+
// rebind framebuffer with external textures
|
|
1308
|
+
function rebindTextures( renderTarget, colorTexture, depthTexture ) {
|
|
1309
|
+
|
|
1310
|
+
const renderTargetProperties = properties.get( renderTarget );
|
|
1311
|
+
|
|
1312
|
+
if ( colorTexture !== undefined ) {
|
|
1313
|
+
|
|
1314
|
+
setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );
|
|
1315
|
+
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1318
|
+
if ( depthTexture !== undefined ) {
|
|
1319
|
+
|
|
1320
|
+
setupDepthRenderbuffer( renderTarget );
|
|
1321
|
+
|
|
1322
|
+
}
|
|
1323
|
+
|
|
1324
|
+
}
|
|
1325
|
+
|
|
1047
1326
|
// Set up GL resources for the render target
|
|
1048
1327
|
function setupRenderTarget( renderTarget ) {
|
|
1049
1328
|
|
|
@@ -1056,7 +1335,12 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1056
1335
|
|
|
1057
1336
|
if ( renderTarget.isWebGLMultipleRenderTargets !== true ) {
|
|
1058
1337
|
|
|
1059
|
-
textureProperties.__webglTexture
|
|
1338
|
+
if ( textureProperties.__webglTexture === undefined ) {
|
|
1339
|
+
|
|
1340
|
+
textureProperties.__webglTexture = _gl.createTexture();
|
|
1341
|
+
|
|
1342
|
+
}
|
|
1343
|
+
|
|
1060
1344
|
textureProperties.__version = texture.version;
|
|
1061
1345
|
info.memory.textures ++;
|
|
1062
1346
|
|
|
@@ -1064,7 +1348,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1064
1348
|
|
|
1065
1349
|
const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
|
|
1066
1350
|
const isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );
|
|
1067
|
-
const isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true );
|
|
1068
1351
|
const isRenderTarget3D = texture.isDataTexture3D || texture.isDataTexture2DArray;
|
|
1069
1352
|
const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;
|
|
1070
1353
|
|
|
@@ -1120,7 +1403,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1120
1403
|
|
|
1121
1404
|
}
|
|
1122
1405
|
|
|
1123
|
-
} else if (
|
|
1406
|
+
} else if ( renderTarget.useRenderbuffer ) {
|
|
1124
1407
|
|
|
1125
1408
|
if ( isWebGL2 ) {
|
|
1126
1409
|
|
|
@@ -1174,7 +1457,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1174
1457
|
|
|
1175
1458
|
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
1176
1459
|
|
|
1177
|
-
generateMipmap( _gl.TEXTURE_CUBE_MAP
|
|
1460
|
+
generateMipmap( _gl.TEXTURE_CUBE_MAP );
|
|
1178
1461
|
|
|
1179
1462
|
}
|
|
1180
1463
|
|
|
@@ -1195,7 +1478,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1195
1478
|
|
|
1196
1479
|
if ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {
|
|
1197
1480
|
|
|
1198
|
-
generateMipmap( _gl.TEXTURE_2D
|
|
1481
|
+
generateMipmap( _gl.TEXTURE_2D );
|
|
1199
1482
|
|
|
1200
1483
|
}
|
|
1201
1484
|
|
|
@@ -1230,7 +1513,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1230
1513
|
|
|
1231
1514
|
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
1232
1515
|
|
|
1233
|
-
generateMipmap( glTextureType
|
|
1516
|
+
generateMipmap( glTextureType );
|
|
1234
1517
|
|
|
1235
1518
|
}
|
|
1236
1519
|
|
|
@@ -1264,7 +1547,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1264
1547
|
const webglTexture = properties.get( texture ).__webglTexture;
|
|
1265
1548
|
|
|
1266
1549
|
state.bindTexture( target, webglTexture );
|
|
1267
|
-
generateMipmap( target
|
|
1550
|
+
generateMipmap( target );
|
|
1268
1551
|
state.unbindTexture();
|
|
1269
1552
|
|
|
1270
1553
|
}
|
|
@@ -1275,23 +1558,43 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1275
1558
|
|
|
1276
1559
|
function updateMultisampleRenderTarget( renderTarget ) {
|
|
1277
1560
|
|
|
1278
|
-
if ( renderTarget.
|
|
1561
|
+
if ( renderTarget.useRenderbuffer ) {
|
|
1279
1562
|
|
|
1280
1563
|
if ( isWebGL2 ) {
|
|
1281
1564
|
|
|
1282
1565
|
const width = renderTarget.width;
|
|
1283
1566
|
const height = renderTarget.height;
|
|
1284
1567
|
let mask = _gl.COLOR_BUFFER_BIT;
|
|
1568
|
+
const invalidationArray = [ _gl.COLOR_ATTACHMENT0 ];
|
|
1569
|
+
const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
1570
|
+
|
|
1571
|
+
if ( renderTarget.depthBuffer ) {
|
|
1572
|
+
|
|
1573
|
+
invalidationArray.push( depthStyle );
|
|
1574
|
+
|
|
1575
|
+
}
|
|
1285
1576
|
|
|
1286
|
-
if ( renderTarget.
|
|
1287
|
-
|
|
1577
|
+
if ( ! renderTarget.ignoreDepthForMultisampleCopy ) {
|
|
1578
|
+
|
|
1579
|
+
if ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;
|
|
1580
|
+
if ( renderTarget.stencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;
|
|
1581
|
+
|
|
1582
|
+
}
|
|
1288
1583
|
|
|
1289
1584
|
const renderTargetProperties = properties.get( renderTarget );
|
|
1290
1585
|
|
|
1291
1586
|
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1292
1587
|
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
1293
1588
|
|
|
1589
|
+
if ( renderTarget.ignoreDepthForMultisampleCopy ) {
|
|
1590
|
+
|
|
1591
|
+
_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, [ depthStyle ] );
|
|
1592
|
+
_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );
|
|
1593
|
+
|
|
1594
|
+
}
|
|
1595
|
+
|
|
1294
1596
|
_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );
|
|
1597
|
+
_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArray );
|
|
1295
1598
|
|
|
1296
1599
|
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );
|
|
1297
1600
|
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
@@ -1308,7 +1611,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1308
1611
|
|
|
1309
1612
|
function getRenderTargetSamples( renderTarget ) {
|
|
1310
1613
|
|
|
1311
|
-
return ( isWebGL2 && renderTarget.
|
|
1614
|
+
return ( isWebGL2 && ( renderTarget.useRenderbuffer || renderTarget.useRenderToTexture ) ) ?
|
|
1312
1615
|
Math.min( maxSamples, renderTarget.samples ) : 0;
|
|
1313
1616
|
|
|
1314
1617
|
}
|
|
@@ -1381,9 +1684,12 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1381
1684
|
this.setTexture2DArray = setTexture2DArray;
|
|
1382
1685
|
this.setTexture3D = setTexture3D;
|
|
1383
1686
|
this.setTextureCube = setTextureCube;
|
|
1687
|
+
this.rebindTextures = rebindTextures;
|
|
1384
1688
|
this.setupRenderTarget = setupRenderTarget;
|
|
1385
1689
|
this.updateRenderTargetMipmap = updateRenderTargetMipmap;
|
|
1386
1690
|
this.updateMultisampleRenderTarget = updateMultisampleRenderTarget;
|
|
1691
|
+
this.setupDepthRenderbuffer = setupDepthRenderbuffer;
|
|
1692
|
+
this.setupFrameBufferTexture = setupFrameBufferTexture;
|
|
1387
1693
|
|
|
1388
1694
|
this.safeSetTexture2D = safeSetTexture2D;
|
|
1389
1695
|
this.safeSetTextureCube = safeSetTextureCube;
|