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
|
@@ -690,7 +690,7 @@ function setValueV4uiArray( gl, v ) {
|
|
|
690
690
|
}
|
|
691
691
|
|
|
692
692
|
|
|
693
|
-
// Array of textures (2D / Cube)
|
|
693
|
+
// Array of textures (2D / 3D / Cube / 2DArray)
|
|
694
694
|
|
|
695
695
|
function setValueT1Array( gl, v, textures ) {
|
|
696
696
|
|
|
@@ -708,6 +708,22 @@ function setValueT1Array( gl, v, textures ) {
|
|
|
708
708
|
|
|
709
709
|
}
|
|
710
710
|
|
|
711
|
+
function setValueT3DArray( gl, v, textures ) {
|
|
712
|
+
|
|
713
|
+
const n = v.length;
|
|
714
|
+
|
|
715
|
+
const units = allocTexUnits( textures, n );
|
|
716
|
+
|
|
717
|
+
gl.uniform1iv( this.addr, units );
|
|
718
|
+
|
|
719
|
+
for ( let i = 0; i !== n; ++ i ) {
|
|
720
|
+
|
|
721
|
+
textures.setTexture3D( v[ i ] || emptyTexture3d, units[ i ] );
|
|
722
|
+
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
}
|
|
726
|
+
|
|
711
727
|
function setValueT6Array( gl, v, textures ) {
|
|
712
728
|
|
|
713
729
|
const n = v.length;
|
|
@@ -724,6 +740,23 @@ function setValueT6Array( gl, v, textures ) {
|
|
|
724
740
|
|
|
725
741
|
}
|
|
726
742
|
|
|
743
|
+
function setValueT2DArrayArray( gl, v, textures ) {
|
|
744
|
+
|
|
745
|
+
const n = v.length;
|
|
746
|
+
|
|
747
|
+
const units = allocTexUnits( textures, n );
|
|
748
|
+
|
|
749
|
+
gl.uniform1iv( this.addr, units );
|
|
750
|
+
|
|
751
|
+
for ( let i = 0; i !== n; ++ i ) {
|
|
752
|
+
|
|
753
|
+
textures.setTexture2DArray( v[ i ] || emptyTexture2dArray, units[ i ] );
|
|
754
|
+
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
|
|
727
760
|
// Helper to pick the right setter for a pure (bottom-level) array
|
|
728
761
|
|
|
729
762
|
function getPureArraySetter( type ) {
|
|
@@ -756,12 +789,23 @@ function getPureArraySetter( type ) {
|
|
|
756
789
|
case 0x8b62: // SAMPLER_2D_SHADOW
|
|
757
790
|
return setValueT1Array;
|
|
758
791
|
|
|
792
|
+
case 0x8b5f: // SAMPLER_3D
|
|
793
|
+
case 0x8dcb: // INT_SAMPLER_3D
|
|
794
|
+
case 0x8dd3: // UNSIGNED_INT_SAMPLER_3D
|
|
795
|
+
return setValueT3DArray;
|
|
796
|
+
|
|
759
797
|
case 0x8b60: // SAMPLER_CUBE
|
|
760
798
|
case 0x8dcc: // INT_SAMPLER_CUBE
|
|
761
799
|
case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE
|
|
762
800
|
case 0x8dc5: // SAMPLER_CUBE_SHADOW
|
|
763
801
|
return setValueT6Array;
|
|
764
802
|
|
|
803
|
+
case 0x8dc1: // SAMPLER_2D_ARRAY
|
|
804
|
+
case 0x8dcf: // INT_SAMPLER_2D_ARRAY
|
|
805
|
+
case 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY
|
|
806
|
+
case 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW
|
|
807
|
+
return setValueT2DArrayArray;
|
|
808
|
+
|
|
765
809
|
}
|
|
766
810
|
|
|
767
811
|
}
|
|
@@ -4,7 +4,19 @@ import { PerspectiveCamera } from '../../cameras/PerspectiveCamera.js';
|
|
|
4
4
|
import { Vector3 } from '../../math/Vector3.js';
|
|
5
5
|
import { Vector4 } from '../../math/Vector4.js';
|
|
6
6
|
import { WebGLAnimation } from '../webgl/WebGLAnimation.js';
|
|
7
|
+
import { WebGLRenderTarget } from '../WebGLRenderTarget.js';
|
|
7
8
|
import { WebXRController } from './WebXRController.js';
|
|
9
|
+
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
10
|
+
import { WebGLMultisampleRenderTarget } from '../WebGLMultisampleRenderTarget.js';
|
|
11
|
+
import {
|
|
12
|
+
DepthFormat,
|
|
13
|
+
DepthStencilFormat,
|
|
14
|
+
RGBAFormat,
|
|
15
|
+
RGBFormat,
|
|
16
|
+
UnsignedByteType,
|
|
17
|
+
UnsignedShortType,
|
|
18
|
+
UnsignedInt248Type,
|
|
19
|
+
} from '../../constants.js';
|
|
8
20
|
|
|
9
21
|
class WebXRManager extends EventDispatcher {
|
|
10
22
|
|
|
@@ -13,7 +25,6 @@ class WebXRManager extends EventDispatcher {
|
|
|
13
25
|
super();
|
|
14
26
|
|
|
15
27
|
const scope = this;
|
|
16
|
-
const state = renderer.state;
|
|
17
28
|
|
|
18
29
|
let session = null;
|
|
19
30
|
let framebufferScaleFactor = 1.0;
|
|
@@ -21,21 +32,19 @@ class WebXRManager extends EventDispatcher {
|
|
|
21
32
|
|
|
22
33
|
let referenceSpace = null;
|
|
23
34
|
let referenceSpaceType = 'local-floor';
|
|
35
|
+
const hasMultisampledRenderToTexture = renderer.extensions.has( 'WEBGL_multisampled_render_to_texture' );
|
|
24
36
|
|
|
25
37
|
let pose = null;
|
|
26
38
|
var layers = [];
|
|
27
39
|
|
|
28
40
|
let glBinding = null;
|
|
29
|
-
let glFramebuffer = null;
|
|
30
41
|
let glProjLayer = null;
|
|
31
42
|
let glBaseLayer = null;
|
|
32
43
|
let isMultisample = false;
|
|
33
|
-
let glMultisampledFramebuffer = null;
|
|
34
|
-
let glColorRenderbuffer = null;
|
|
35
|
-
let glDepthRenderbuffer = null;
|
|
36
44
|
let xrFrame = null;
|
|
37
|
-
|
|
38
|
-
let
|
|
45
|
+
const attributes = gl.getContextAttributes();
|
|
46
|
+
let initialRenderTarget = null;
|
|
47
|
+
let newRenderTarget = null;
|
|
39
48
|
|
|
40
49
|
const controllers = [];
|
|
41
50
|
const inputSourcesMap = new Map();
|
|
@@ -146,21 +155,13 @@ class WebXRManager extends EventDispatcher {
|
|
|
146
155
|
|
|
147
156
|
// restore framebuffer/rendering state
|
|
148
157
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
if ( glFramebuffer ) gl.deleteFramebuffer( glFramebuffer );
|
|
153
|
-
if ( glMultisampledFramebuffer ) gl.deleteFramebuffer( glMultisampledFramebuffer );
|
|
154
|
-
if ( glColorRenderbuffer ) gl.deleteRenderbuffer( glColorRenderbuffer );
|
|
155
|
-
if ( glDepthRenderbuffer ) gl.deleteRenderbuffer( glDepthRenderbuffer );
|
|
156
|
-
glFramebuffer = null;
|
|
157
|
-
glMultisampledFramebuffer = null;
|
|
158
|
-
glColorRenderbuffer = null;
|
|
159
|
-
glDepthRenderbuffer = null;
|
|
158
|
+
renderer.setRenderTarget( initialRenderTarget );
|
|
159
|
+
|
|
160
160
|
glBaseLayer = null;
|
|
161
161
|
glProjLayer = null;
|
|
162
162
|
glBinding = null;
|
|
163
163
|
session = null;
|
|
164
|
+
newRenderTarget = null;
|
|
164
165
|
|
|
165
166
|
//
|
|
166
167
|
|
|
@@ -232,6 +233,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
232
233
|
|
|
233
234
|
if ( session !== null ) {
|
|
234
235
|
|
|
236
|
+
initialRenderTarget = renderer.getRenderTarget();
|
|
237
|
+
|
|
235
238
|
session.addEventListener( 'select', onSessionEvent );
|
|
236
239
|
session.addEventListener( 'selectstart', onSessionEvent );
|
|
237
240
|
session.addEventListener( 'selectend', onSessionEvent );
|
|
@@ -241,18 +244,16 @@ class WebXRManager extends EventDispatcher {
|
|
|
241
244
|
session.addEventListener( 'end', onSessionEnd );
|
|
242
245
|
session.addEventListener( 'inputsourceschange', onInputSourcesChange );
|
|
243
246
|
|
|
244
|
-
const attributes = gl.getContextAttributes();
|
|
245
|
-
|
|
246
247
|
if ( attributes.xrCompatible !== true ) {
|
|
247
248
|
|
|
248
249
|
await gl.makeXRCompatible();
|
|
249
250
|
|
|
250
251
|
}
|
|
251
252
|
|
|
252
|
-
if ( session.renderState.layers === undefined) {
|
|
253
|
+
if ( ( session.renderState.layers === undefined ) || ( renderer.capabilities.isWebGL2 === false ) ) {
|
|
253
254
|
|
|
254
255
|
const layerInit = {
|
|
255
|
-
antialias: attributes.antialias,
|
|
256
|
+
antialias: ( session.renderState.layers === undefined ) ? attributes.antialias : true,
|
|
256
257
|
alpha: attributes.alpha,
|
|
257
258
|
depth: attributes.depth,
|
|
258
259
|
stencil: attributes.stencil,
|
|
@@ -263,43 +264,34 @@ class WebXRManager extends EventDispatcher {
|
|
|
263
264
|
|
|
264
265
|
session.updateRenderState( { baseLayer: glBaseLayer } );
|
|
265
266
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
stencil: attributes.stencil,
|
|
276
|
-
framebufferScaleFactor: framebufferScaleFactor
|
|
277
|
-
};
|
|
278
|
-
|
|
279
|
-
glBaseLayer = new XRWebGLLayer( session, gl, layerInit );
|
|
280
|
-
|
|
281
|
-
session.updateRenderState( { layers: [ glBaseLayer ] } );
|
|
267
|
+
newRenderTarget = new WebGLRenderTarget(
|
|
268
|
+
glBaseLayer.framebufferWidth,
|
|
269
|
+
glBaseLayer.framebufferHeight,
|
|
270
|
+
{
|
|
271
|
+
format: RGBAFormat,
|
|
272
|
+
type: UnsignedByteType,
|
|
273
|
+
encoding: renderer.outputEncoding
|
|
274
|
+
}
|
|
275
|
+
);
|
|
282
276
|
|
|
283
277
|
} else {
|
|
284
278
|
|
|
285
279
|
isMultisample = attributes.antialias;
|
|
286
280
|
let depthFormat = null;
|
|
287
|
-
|
|
281
|
+
let depthType = null;
|
|
282
|
+
let glDepthFormat = null;
|
|
288
283
|
|
|
289
284
|
if ( attributes.depth ) {
|
|
290
285
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
depthStyle = attributes.stencil ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
|
|
296
|
-
depthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24;
|
|
286
|
+
glDepthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24;
|
|
287
|
+
depthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat;
|
|
288
|
+
depthType = attributes.stencil ? UnsignedInt248Type : UnsignedShortType;
|
|
297
289
|
|
|
298
290
|
}
|
|
299
291
|
|
|
300
292
|
const projectionlayerInit = {
|
|
301
|
-
colorFormat: attributes.alpha ? gl.RGBA8 : gl.RGB8,
|
|
302
|
-
depthFormat:
|
|
293
|
+
colorFormat: ( attributes.alpha || isMultisample ) ? gl.RGBA8 : gl.RGB8,
|
|
294
|
+
depthFormat: glDepthFormat,
|
|
303
295
|
scaleFactor: framebufferScaleFactor
|
|
304
296
|
};
|
|
305
297
|
|
|
@@ -307,41 +299,44 @@ class WebXRManager extends EventDispatcher {
|
|
|
307
299
|
|
|
308
300
|
glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
|
|
309
301
|
|
|
310
|
-
glFramebuffer = gl.createFramebuffer();
|
|
311
|
-
|
|
312
302
|
session.updateRenderState( { layers: [ glProjLayer ] } );
|
|
313
303
|
|
|
314
304
|
if ( isMultisample ) {
|
|
315
305
|
|
|
316
|
-
|
|
317
|
-
glColorRenderbuffer = gl.createRenderbuffer();
|
|
318
|
-
gl.bindRenderbuffer( gl.RENDERBUFFER, glColorRenderbuffer );
|
|
319
|
-
gl.renderbufferStorageMultisample(
|
|
320
|
-
gl.RENDERBUFFER,
|
|
321
|
-
4,
|
|
322
|
-
gl.RGBA8,
|
|
306
|
+
newRenderTarget = new WebGLMultisampleRenderTarget(
|
|
323
307
|
glProjLayer.textureWidth,
|
|
324
|
-
glProjLayer.textureHeight
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
gl.framebufferRenderbuffer( gl.FRAMEBUFFER, depthStyle, gl.RENDERBUFFER, glDepthRenderbuffer );
|
|
335
|
-
gl.bindRenderbuffer( gl.RENDERBUFFER, null );
|
|
308
|
+
glProjLayer.textureHeight,
|
|
309
|
+
{
|
|
310
|
+
format: RGBAFormat,
|
|
311
|
+
type: UnsignedByteType,
|
|
312
|
+
depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),
|
|
313
|
+
stencilBuffer: attributes.stencil,
|
|
314
|
+
ignoreDepth: glProjLayer.ignoreDepthValues,
|
|
315
|
+
useRenderToTexture: hasMultisampledRenderToTexture,
|
|
316
|
+
encoding: renderer.outputEncoding
|
|
317
|
+
} );
|
|
336
318
|
|
|
337
|
-
|
|
319
|
+
} else {
|
|
338
320
|
|
|
339
|
-
|
|
321
|
+
newRenderTarget = new WebGLRenderTarget(
|
|
322
|
+
glProjLayer.textureWidth,
|
|
323
|
+
glProjLayer.textureHeight,
|
|
324
|
+
{
|
|
325
|
+
format: attributes.alpha ? RGBAFormat : RGBFormat,
|
|
326
|
+
type: UnsignedByteType,
|
|
327
|
+
depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),
|
|
328
|
+
stencilBuffer: attributes.stencil,
|
|
329
|
+
ignoreDepth: glProjLayer.ignoreDepthValues,
|
|
330
|
+
encoding: renderer.outputEncoding
|
|
331
|
+
} );
|
|
340
332
|
|
|
341
333
|
}
|
|
342
334
|
|
|
343
335
|
}
|
|
344
336
|
|
|
337
|
+
// Set foveation to maximum.
|
|
338
|
+
this.setFoveation( 1.0 );
|
|
339
|
+
|
|
345
340
|
referenceSpace = await session.requestReferenceSpace( referenceSpaceType );
|
|
346
341
|
|
|
347
342
|
animation.setContext( session );
|
|
@@ -372,8 +367,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
372
367
|
|
|
373
368
|
this.updateLayers = function() {
|
|
374
369
|
var layersCopy = layers.map(function (x) { return x; });
|
|
375
|
-
|
|
376
|
-
|
|
370
|
+
|
|
371
|
+
layersCopy.unshift( session.renderState.layers[0] );
|
|
377
372
|
session.updateRenderState( { layers: layersCopy } );
|
|
378
373
|
};
|
|
379
374
|
|
|
@@ -627,7 +622,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
627
622
|
|
|
628
623
|
if ( glBaseLayer !== null ) {
|
|
629
624
|
|
|
630
|
-
|
|
625
|
+
renderer.setRenderTargetFramebuffer( newRenderTarget, glBaseLayer.framebuffer );
|
|
626
|
+
renderer.setRenderTarget( newRenderTarget );
|
|
631
627
|
|
|
632
628
|
}
|
|
633
629
|
|
|
@@ -638,7 +634,6 @@ class WebXRManager extends EventDispatcher {
|
|
|
638
634
|
if ( views.length !== cameraVR.cameras.length ) {
|
|
639
635
|
|
|
640
636
|
cameraVR.cameras.length = 0;
|
|
641
|
-
|
|
642
637
|
cameraVRNeedsUpdate = true;
|
|
643
638
|
|
|
644
639
|
}
|
|
@@ -656,19 +651,20 @@ class WebXRManager extends EventDispatcher {
|
|
|
656
651
|
} else {
|
|
657
652
|
|
|
658
653
|
const glSubImage = glBinding.getViewSubImage( glProjLayer, view );
|
|
654
|
+
viewport = glSubImage.viewport;
|
|
659
655
|
|
|
660
|
-
|
|
656
|
+
// For side-by-side projection, we only produce a single texture for both eyes.
|
|
657
|
+
if ( i === 0 ) {
|
|
661
658
|
|
|
662
|
-
|
|
659
|
+
renderer.setRenderTargetTextures(
|
|
660
|
+
newRenderTarget,
|
|
661
|
+
glSubImage.colorTexture,
|
|
662
|
+
glProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture );
|
|
663
663
|
|
|
664
|
-
|
|
664
|
+
renderer.setRenderTarget( newRenderTarget );
|
|
665
665
|
|
|
666
666
|
}
|
|
667
667
|
|
|
668
|
-
gl.framebufferTexture2D( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, glSubImage.colorTexture, 0 );
|
|
669
|
-
|
|
670
|
-
viewport = glSubImage.viewport;
|
|
671
|
-
|
|
672
668
|
}
|
|
673
669
|
|
|
674
670
|
const camera = cameras[ i ];
|
|
@@ -691,14 +687,6 @@ class WebXRManager extends EventDispatcher {
|
|
|
691
687
|
|
|
692
688
|
}
|
|
693
689
|
|
|
694
|
-
if ( isMultisample ) {
|
|
695
|
-
|
|
696
|
-
state.bindXRFramebuffer( glMultisampledFramebuffer );
|
|
697
|
-
|
|
698
|
-
if ( clearStyle !== null ) gl.clear( clearStyle );
|
|
699
|
-
|
|
700
|
-
}
|
|
701
|
-
|
|
702
690
|
}
|
|
703
691
|
|
|
704
692
|
//
|
|
@@ -716,26 +704,6 @@ class WebXRManager extends EventDispatcher {
|
|
|
716
704
|
|
|
717
705
|
if ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );
|
|
718
706
|
|
|
719
|
-
if ( isMultisample ) {
|
|
720
|
-
|
|
721
|
-
const width = glProjLayer.textureWidth;
|
|
722
|
-
const height = glProjLayer.textureHeight;
|
|
723
|
-
|
|
724
|
-
state.bindFramebuffer( gl.READ_FRAMEBUFFER, glMultisampledFramebuffer );
|
|
725
|
-
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, glFramebuffer );
|
|
726
|
-
// Invalidate the depth here to avoid flush of the depth data to main memory.
|
|
727
|
-
gl.invalidateFramebuffer( gl.READ_FRAMEBUFFER, [ depthStyle ] );
|
|
728
|
-
gl.invalidateFramebuffer( gl.DRAW_FRAMEBUFFER, [ depthStyle ] );
|
|
729
|
-
gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, gl.COLOR_BUFFER_BIT, gl.NEAREST );
|
|
730
|
-
// Invalidate the MSAA buffer because it's not needed anymore.
|
|
731
|
-
gl.invalidateFramebuffer( gl.READ_FRAMEBUFFER, [ gl.COLOR_ATTACHMENT0 ] );
|
|
732
|
-
state.bindFramebuffer( gl.READ_FRAMEBUFFER, null );
|
|
733
|
-
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );
|
|
734
|
-
|
|
735
|
-
state.bindFramebuffer( gl.FRAMEBUFFER, glMultisampledFramebuffer );
|
|
736
|
-
|
|
737
|
-
}
|
|
738
|
-
|
|
739
707
|
xrFrame = null;
|
|
740
708
|
|
|
741
709
|
}
|
package/src/scenes/Scene.js
CHANGED
|
@@ -18,7 +18,7 @@ class Scene extends Object3D {
|
|
|
18
18
|
|
|
19
19
|
if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {
|
|
20
20
|
|
|
21
|
-
__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );
|
|
21
|
+
__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );
|
|
22
22
|
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Texture } from './Texture.js';
|
|
2
|
+
import { NearestFilter } from '../constants.js';
|
|
3
|
+
|
|
4
|
+
class FramebufferTexture extends Texture {
|
|
5
|
+
|
|
6
|
+
constructor( width, height, format ) {
|
|
7
|
+
|
|
8
|
+
super( { width, height } );
|
|
9
|
+
|
|
10
|
+
this.format = format;
|
|
11
|
+
|
|
12
|
+
this.magFilter = NearestFilter;
|
|
13
|
+
this.minFilter = NearestFilter;
|
|
14
|
+
|
|
15
|
+
this.generateMipmaps = false;
|
|
16
|
+
|
|
17
|
+
this.needsUpdate = true;
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
FramebufferTexture.prototype.isFramebufferTexture = true;
|
|
24
|
+
|
|
25
|
+
export { FramebufferTexture };
|
package/src/textures/Texture.js
CHANGED
|
@@ -65,6 +65,8 @@ class Texture extends EventDispatcher {
|
|
|
65
65
|
// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.
|
|
66
66
|
this.encoding = encoding;
|
|
67
67
|
|
|
68
|
+
this.userData = {};
|
|
69
|
+
|
|
68
70
|
this.version = 0;
|
|
69
71
|
this.onUpdate = null;
|
|
70
72
|
|
|
@@ -119,6 +121,8 @@ class Texture extends EventDispatcher {
|
|
|
119
121
|
this.unpackAlignment = source.unpackAlignment;
|
|
120
122
|
this.encoding = source.encoding;
|
|
121
123
|
|
|
124
|
+
this.userData = JSON.parse( JSON.stringify( source.userData ) );
|
|
125
|
+
|
|
122
126
|
return this;
|
|
123
127
|
|
|
124
128
|
}
|
|
@@ -225,6 +229,8 @@ class Texture extends EventDispatcher {
|
|
|
225
229
|
|
|
226
230
|
}
|
|
227
231
|
|
|
232
|
+
if ( JSON.stringify( this.userData ) !== '{}' ) output.userData = this.userData;
|
|
233
|
+
|
|
228
234
|
if ( ! isRootObject ) {
|
|
229
235
|
|
|
230
236
|
meta.textures[ this.uuid ] = output;
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
( function () {
|
|
2
|
-
|
|
3
|
-
const _zee = new THREE.Vector3( 0, 0, 1 );
|
|
4
|
-
|
|
5
|
-
const _euler = new THREE.Euler();
|
|
6
|
-
|
|
7
|
-
const _q0 = new THREE.Quaternion();
|
|
8
|
-
|
|
9
|
-
const _q1 = new THREE.Quaternion( - Math.sqrt( 0.5 ), 0, 0, Math.sqrt( 0.5 ) ); // - PI/2 around the x-axis
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const _changeEvent = {
|
|
13
|
-
type: 'change'
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
class DeviceOrientationControls extends THREE.EventDispatcher {
|
|
17
|
-
|
|
18
|
-
constructor( object ) {
|
|
19
|
-
|
|
20
|
-
super();
|
|
21
|
-
|
|
22
|
-
if ( window.isSecureContext === false ) {
|
|
23
|
-
|
|
24
|
-
console.error( 'THREE.DeviceOrientationControls: DeviceOrientationEvent is only available in secure contexts (https)' );
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const scope = this;
|
|
29
|
-
const EPS = 0.000001;
|
|
30
|
-
const lastQuaternion = new THREE.Quaternion();
|
|
31
|
-
this.object = object;
|
|
32
|
-
this.object.rotation.reorder( 'YXZ' );
|
|
33
|
-
this.enabled = true;
|
|
34
|
-
this.deviceOrientation = {};
|
|
35
|
-
this.screenOrientation = 0;
|
|
36
|
-
this.alphaOffset = 0; // radians
|
|
37
|
-
|
|
38
|
-
const onDeviceOrientationChangeEvent = function ( event ) {
|
|
39
|
-
|
|
40
|
-
scope.deviceOrientation = event;
|
|
41
|
-
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
const onScreenOrientationChangeEvent = function () {
|
|
45
|
-
|
|
46
|
-
scope.screenOrientation = window.orientation || 0;
|
|
47
|
-
|
|
48
|
-
}; // The angles alpha, beta and gamma form a set of intrinsic Tait-Bryan angles of type Z-X'-Y''
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const setObjectQuaternion = function ( quaternion, alpha, beta, gamma, orient ) {
|
|
52
|
-
|
|
53
|
-
_euler.set( beta, alpha, - gamma, 'YXZ' ); // 'ZXY' for the device, but 'YXZ' for us
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
quaternion.setFromEuler( _euler ); // orient the device
|
|
57
|
-
|
|
58
|
-
quaternion.multiply( _q1 ); // camera looks out the back of the device, not the top
|
|
59
|
-
|
|
60
|
-
quaternion.multiply( _q0.setFromAxisAngle( _zee, - orient ) ); // adjust for screen orientation
|
|
61
|
-
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
this.connect = function () {
|
|
65
|
-
|
|
66
|
-
onScreenOrientationChangeEvent(); // run once on load
|
|
67
|
-
// iOS 13+
|
|
68
|
-
|
|
69
|
-
if ( window.DeviceOrientationEvent !== undefined && typeof window.DeviceOrientationEvent.requestPermission === 'function' ) {
|
|
70
|
-
|
|
71
|
-
window.DeviceOrientationEvent.requestPermission().then( function ( response ) {
|
|
72
|
-
|
|
73
|
-
if ( response == 'granted' ) {
|
|
74
|
-
|
|
75
|
-
window.addEventListener( 'orientationchange', onScreenOrientationChangeEvent );
|
|
76
|
-
window.addEventListener( 'deviceorientation', onDeviceOrientationChangeEvent );
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
} ).catch( function ( error ) {
|
|
81
|
-
|
|
82
|
-
console.error( 'THREE.DeviceOrientationControls: Unable to use DeviceOrientation API:', error );
|
|
83
|
-
|
|
84
|
-
} );
|
|
85
|
-
|
|
86
|
-
} else {
|
|
87
|
-
|
|
88
|
-
window.addEventListener( 'orientationchange', onScreenOrientationChangeEvent );
|
|
89
|
-
window.addEventListener( 'deviceorientation', onDeviceOrientationChangeEvent );
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
scope.enabled = true;
|
|
94
|
-
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
this.disconnect = function () {
|
|
98
|
-
|
|
99
|
-
window.removeEventListener( 'orientationchange', onScreenOrientationChangeEvent );
|
|
100
|
-
window.removeEventListener( 'deviceorientation', onDeviceOrientationChangeEvent );
|
|
101
|
-
scope.enabled = false;
|
|
102
|
-
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
this.update = function () {
|
|
106
|
-
|
|
107
|
-
if ( scope.enabled === false ) return;
|
|
108
|
-
const device = scope.deviceOrientation;
|
|
109
|
-
|
|
110
|
-
if ( device ) {
|
|
111
|
-
|
|
112
|
-
const alpha = device.alpha ? THREE.MathUtils.degToRad( device.alpha ) + scope.alphaOffset : 0; // Z
|
|
113
|
-
|
|
114
|
-
const beta = device.beta ? THREE.MathUtils.degToRad( device.beta ) : 0; // X'
|
|
115
|
-
|
|
116
|
-
const gamma = device.gamma ? THREE.MathUtils.degToRad( device.gamma ) : 0; // Y''
|
|
117
|
-
|
|
118
|
-
const orient = scope.screenOrientation ? THREE.MathUtils.degToRad( scope.screenOrientation ) : 0; // O
|
|
119
|
-
|
|
120
|
-
setObjectQuaternion( scope.object.quaternion, alpha, beta, gamma, orient );
|
|
121
|
-
|
|
122
|
-
if ( 8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {
|
|
123
|
-
|
|
124
|
-
lastQuaternion.copy( scope.object.quaternion );
|
|
125
|
-
scope.dispatchEvent( _changeEvent );
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
this.dispose = function () {
|
|
134
|
-
|
|
135
|
-
scope.disconnect();
|
|
136
|
-
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
this.connect();
|
|
140
|
-
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
THREE.DeviceOrientationControls = DeviceOrientationControls;
|
|
146
|
-
|
|
147
|
-
} )();
|