super-three 0.133.5 → 0.135.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 +617 -536
- package/build/three.min.js +1 -1
- package/build/three.module.js +760 -613
- 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.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/controls/ArcballControls.js +68 -27
- 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/csm/CSM.js +2 -2
- package/examples/js/csm/CSMFrustum.js +133 -0
- package/examples/js/exporters/GLTFExporter.js +147 -63
- package/examples/js/exporters/USDZExporter.js +45 -26
- 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/ColladaLoader.js +61 -3
- package/examples/js/loaders/FBXLoader.js +1 -1
- package/examples/js/loaders/GLTFLoader.js +94 -31
- package/examples/js/loaders/KTX2Loader.js +12 -0
- package/examples/js/loaders/LWOLoader.js +8 -6
- package/examples/js/loaders/LogLuvLoader.js +766 -0
- package/examples/js/loaders/PLYLoader.js +32 -7
- package/examples/js/loaders/RGBELoader.js +2 -1
- package/examples/js/loaders/SVGLoader.js +7 -3
- package/examples/js/loaders/TDSLoader.js +237 -271
- package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
- package/examples/js/objects/MarchingCubes.js +42 -128
- package/examples/js/renderers/CSS2DRenderer.js +4 -4
- package/examples/js/renderers/CSS3DRenderer.js +4 -4
- package/examples/js/utils/RoughnessMipmapper.js +1 -0
- package/examples/jsm/controls/ArcballControls.js +61 -29
- 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/csm/CSM.js +3 -3
- package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
- package/examples/jsm/exporters/GLTFExporter.js +160 -74
- package/examples/jsm/exporters/USDZExporter.js +47 -26
- package/examples/jsm/libs/flow.module.js +3218 -0
- package/examples/jsm/libs/lil-gui.module.min.js +8 -0
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -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/ColladaLoader.js +61 -3
- package/examples/jsm/loaders/FBXLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +99 -35
- package/examples/jsm/loaders/KTX2Loader.js +19 -0
- package/examples/jsm/loaders/LWOLoader.js +8 -6
- package/examples/jsm/loaders/LogLuvLoader.js +606 -0
- package/examples/jsm/loaders/PLYLoader.js +33 -7
- package/examples/jsm/loaders/SVGLoader.js +7 -4
- package/examples/jsm/loaders/TDSLoader.js +225 -285
- package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
- package/examples/jsm/node-editor/NodeEditor.js +455 -0
- package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
- package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
- package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
- package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
- package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
- package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
- package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
- package/examples/jsm/node-editor/examples/rim.json +1 -0
- package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
- package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
- package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +69 -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/materials/StandardNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/nodes/StandardNode.js +6 -6
- package/examples/jsm/nodes/utils/ColorSpaceNode.js +1 -49
- package/examples/jsm/objects/MarchingCubes.js +46 -152
- 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 +1 -1
- 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 +1 -1
- package/examples/jsm/postprocessing/SMAAPass.js +1 -1
- package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +1 -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 +14 -13
- package/examples/jsm/renderers/nodes/ShaderNode.js +193 -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 +47 -25
- 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/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 +87 -36
- 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/webgl/nodes/SlotNode.js +22 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +191 -94
- 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 +3 -3
- 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 +3 -5
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +11 -27
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +62 -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 +430 -98
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
- package/examples/jsm/utils/RoughnessMipmapper.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
- package/package.json +10 -10
- package/src/Three.Legacy.js +6 -0
- package/src/Three.js +0 -1
- package/src/cameras/StereoCamera.js +8 -7
- package/src/constants.js +1 -2
- package/src/core/Layers.js +7 -1
- package/src/core/Object3D.js +2 -0
- package/src/extras/PMREMGenerator.js +11 -6
- package/src/loaders/FileLoader.js +89 -152
- 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/MathUtils.js +5 -16
- package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
- package/src/renderers/WebGLRenderer.js +83 -117
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -27
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- 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 +13 -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/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLMaterials.js +27 -15
- package/src/renderers/webgl/WebGLProgram.js +10 -6
- package/src/renderers/webgl/WebGLPrograms.js +17 -12
- package/src/renderers/webgl/WebGLShadowMap.js +14 -5
- package/src/renderers/webgl/WebGLState.js +31 -17
- package/src/renderers/webgl/WebGLTextures.js +188 -51
- package/src/renderers/webgl/WebGLUniforms.js +45 -1
- package/src/renderers/webxr/WebXRManager.js +68 -107
- package/src/textures/Texture.js +6 -0
- package/src/utils.js +37 -1
- 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
|
@@ -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,29 @@ class WebXRManager extends EventDispatcher {
|
|
|
263
264
|
|
|
264
265
|
session.updateRenderState( { baseLayer: glBaseLayer } );
|
|
265
266
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
const layerInit = {
|
|
272
|
-
antialias: true,
|
|
273
|
-
alpha: attributes.alpha,
|
|
274
|
-
depth: attributes.depth,
|
|
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
|
+
);
|
|
282
271
|
|
|
283
272
|
} else {
|
|
284
273
|
|
|
285
274
|
isMultisample = attributes.antialias;
|
|
286
275
|
let depthFormat = null;
|
|
287
|
-
|
|
276
|
+
let depthType = null;
|
|
277
|
+
let glDepthFormat = null;
|
|
288
278
|
|
|
289
279
|
if ( attributes.depth ) {
|
|
290
280
|
|
|
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;
|
|
281
|
+
glDepthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT16;
|
|
282
|
+
depthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat;
|
|
283
|
+
depthType = attributes.stencil ? UnsignedInt248Type : UnsignedShortType;
|
|
297
284
|
|
|
298
285
|
}
|
|
299
286
|
|
|
300
287
|
const projectionlayerInit = {
|
|
301
|
-
colorFormat: attributes.alpha ? gl.RGBA8 : gl.RGB8,
|
|
302
|
-
depthFormat:
|
|
288
|
+
colorFormat: ( attributes.alpha || isMultisample ) ? gl.RGBA8 : gl.RGB8,
|
|
289
|
+
depthFormat: glDepthFormat,
|
|
303
290
|
scaleFactor: framebufferScaleFactor
|
|
304
291
|
};
|
|
305
292
|
|
|
@@ -307,41 +294,42 @@ class WebXRManager extends EventDispatcher {
|
|
|
307
294
|
|
|
308
295
|
glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
|
|
309
296
|
|
|
310
|
-
glFramebuffer = gl.createFramebuffer();
|
|
311
|
-
|
|
312
297
|
session.updateRenderState( { layers: [ glProjLayer ] } );
|
|
313
298
|
|
|
314
299
|
if ( isMultisample ) {
|
|
315
300
|
|
|
316
|
-
|
|
317
|
-
glColorRenderbuffer = gl.createRenderbuffer();
|
|
318
|
-
gl.bindRenderbuffer( gl.RENDERBUFFER, glColorRenderbuffer );
|
|
319
|
-
gl.renderbufferStorageMultisample(
|
|
320
|
-
gl.RENDERBUFFER,
|
|
321
|
-
4,
|
|
322
|
-
gl.RGBA8,
|
|
301
|
+
newRenderTarget = new WebGLMultisampleRenderTarget(
|
|
323
302
|
glProjLayer.textureWidth,
|
|
324
|
-
glProjLayer.textureHeight
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
gl.renderbufferStorageMultisample( gl.RENDERBUFFER, 4, depthFormat, glProjLayer.textureWidth, glProjLayer.textureHeight );
|
|
334
|
-
gl.framebufferRenderbuffer( gl.FRAMEBUFFER, depthStyle, gl.RENDERBUFFER, glDepthRenderbuffer );
|
|
335
|
-
gl.bindRenderbuffer( gl.RENDERBUFFER, null );
|
|
303
|
+
glProjLayer.textureHeight,
|
|
304
|
+
{
|
|
305
|
+
format: RGBAFormat,
|
|
306
|
+
type: UnsignedByteType,
|
|
307
|
+
depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),
|
|
308
|
+
stencilBuffer: attributes.stencil,
|
|
309
|
+
ignoreDepth: glProjLayer.ignoreDepthValues,
|
|
310
|
+
useRenderToTexture: hasMultisampledRenderToTexture,
|
|
311
|
+
} );
|
|
336
312
|
|
|
337
|
-
|
|
313
|
+
} else {
|
|
338
314
|
|
|
339
|
-
|
|
315
|
+
newRenderTarget = new WebGLRenderTarget(
|
|
316
|
+
glProjLayer.textureWidth,
|
|
317
|
+
glProjLayer.textureHeight,
|
|
318
|
+
{
|
|
319
|
+
format: attributes.alpha ? RGBAFormat : RGBFormat,
|
|
320
|
+
type: UnsignedByteType,
|
|
321
|
+
depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),
|
|
322
|
+
stencilBuffer: attributes.stencil,
|
|
323
|
+
ignoreDepth: glProjLayer.ignoreDepthValues,
|
|
324
|
+
} );
|
|
340
325
|
|
|
341
326
|
}
|
|
342
327
|
|
|
343
328
|
}
|
|
344
329
|
|
|
330
|
+
// Set foveation to maximum.
|
|
331
|
+
this.setFoveation( 0 );
|
|
332
|
+
|
|
345
333
|
referenceSpace = await session.requestReferenceSpace( referenceSpaceType );
|
|
346
334
|
|
|
347
335
|
animation.setContext( session );
|
|
@@ -627,7 +615,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
627
615
|
|
|
628
616
|
if ( glBaseLayer !== null ) {
|
|
629
617
|
|
|
630
|
-
|
|
618
|
+
renderer.setRenderTargetFramebuffer( newRenderTarget, glBaseLayer.framebuffer );
|
|
619
|
+
renderer.setRenderTarget( newRenderTarget );
|
|
631
620
|
|
|
632
621
|
}
|
|
633
622
|
|
|
@@ -638,7 +627,6 @@ class WebXRManager extends EventDispatcher {
|
|
|
638
627
|
if ( views.length !== cameraVR.cameras.length ) {
|
|
639
628
|
|
|
640
629
|
cameraVR.cameras.length = 0;
|
|
641
|
-
|
|
642
630
|
cameraVRNeedsUpdate = true;
|
|
643
631
|
|
|
644
632
|
}
|
|
@@ -656,19 +644,20 @@ class WebXRManager extends EventDispatcher {
|
|
|
656
644
|
} else {
|
|
657
645
|
|
|
658
646
|
const glSubImage = glBinding.getViewSubImage( glProjLayer, view );
|
|
647
|
+
viewport = glSubImage.viewport;
|
|
659
648
|
|
|
660
|
-
|
|
649
|
+
// For side-by-side projection, we only produce a single texture for both eyes.
|
|
650
|
+
if ( i === 0 ) {
|
|
661
651
|
|
|
662
|
-
|
|
652
|
+
renderer.setRenderTargetTextures(
|
|
653
|
+
newRenderTarget,
|
|
654
|
+
glSubImage.colorTexture,
|
|
655
|
+
glProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture );
|
|
663
656
|
|
|
664
|
-
|
|
657
|
+
renderer.setRenderTarget( newRenderTarget );
|
|
665
658
|
|
|
666
659
|
}
|
|
667
660
|
|
|
668
|
-
gl.framebufferTexture2D( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, glSubImage.colorTexture, 0 );
|
|
669
|
-
|
|
670
|
-
viewport = glSubImage.viewport;
|
|
671
|
-
|
|
672
661
|
}
|
|
673
662
|
|
|
674
663
|
const camera = cameras[ i ];
|
|
@@ -691,14 +680,6 @@ class WebXRManager extends EventDispatcher {
|
|
|
691
680
|
|
|
692
681
|
}
|
|
693
682
|
|
|
694
|
-
if ( isMultisample ) {
|
|
695
|
-
|
|
696
|
-
state.bindXRFramebuffer( glMultisampledFramebuffer );
|
|
697
|
-
|
|
698
|
-
if ( clearStyle !== null ) gl.clear( clearStyle );
|
|
699
|
-
|
|
700
|
-
}
|
|
701
|
-
|
|
702
683
|
}
|
|
703
684
|
|
|
704
685
|
//
|
|
@@ -716,26 +697,6 @@ class WebXRManager extends EventDispatcher {
|
|
|
716
697
|
|
|
717
698
|
if ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );
|
|
718
699
|
|
|
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
700
|
xrFrame = null;
|
|
740
701
|
|
|
741
702
|
}
|
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;
|
package/src/utils.js
CHANGED
|
@@ -54,4 +54,40 @@ function createElementNS( name ) {
|
|
|
54
54
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
/**
|
|
58
|
+
* cyrb53 hash for string from: https://stackoverflow.com/a/52171480
|
|
59
|
+
*
|
|
60
|
+
* Public Domain, @bryc - https://stackoverflow.com/users/815680/bryc
|
|
61
|
+
*
|
|
62
|
+
* It is roughly similar to the well-known MurmurHash/xxHash algorithms. It uses a combination
|
|
63
|
+
* of multiplication and Xorshift to generate the hash, but not as thorough. As a result it's
|
|
64
|
+
* faster than either would be in JavaScript and significantly simpler to implement. Keep in
|
|
65
|
+
* mind this is not a secure algorithm, if privacy/security is a concern, this is not for you.
|
|
66
|
+
*
|
|
67
|
+
* @param {string} str
|
|
68
|
+
* @param {number} seed, default 0
|
|
69
|
+
* @returns number
|
|
70
|
+
*/
|
|
71
|
+
function hashString( str, seed = 0 ) {
|
|
72
|
+
|
|
73
|
+
let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;
|
|
74
|
+
|
|
75
|
+
for ( let i = 0, ch; i < str.length; i ++ ) {
|
|
76
|
+
|
|
77
|
+
ch = str.charCodeAt( i );
|
|
78
|
+
|
|
79
|
+
h1 = Math.imul( h1 ^ ch, 2654435761 );
|
|
80
|
+
|
|
81
|
+
h2 = Math.imul( h2 ^ ch, 1597334677 );
|
|
82
|
+
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
h1 = Math.imul( h1 ^ ( h1 >>> 16 ), 2246822507 ) ^ Math.imul( h2 ^ ( h2 >>> 13 ), 3266489909 );
|
|
86
|
+
|
|
87
|
+
h2 = Math.imul( h2 ^ ( h2 >>> 16 ), 2246822507 ) ^ Math.imul( h1 ^ ( h1 >>> 13 ), 3266489909 );
|
|
88
|
+
|
|
89
|
+
return 4294967296 * ( 2097151 & h2 ) + ( h1 >>> 0 );
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export { arrayMin, arrayMax, getTypedArray, createElementNS, hashString };
|
|
@@ -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
|
-
} )();
|