super-three 0.133.2 → 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.
Files changed (246) hide show
  1. package/build/three.js +619 -538
  2. package/build/three.min.js +1 -1
  3. package/build/three.module.js +763 -616
  4. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  5. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  6. package/examples/fonts/open-sans/open-sans.css +9 -0
  7. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  8. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  9. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  11. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  12. package/examples/js/controls/ArcballControls.js +68 -27
  13. package/examples/js/controls/DragControls.js +7 -0
  14. package/examples/js/controls/OrbitControls.js +5 -36
  15. package/examples/js/controls/TrackballControls.js +3 -2
  16. package/examples/js/csm/CSM.js +2 -2
  17. package/examples/js/csm/CSMFrustum.js +133 -0
  18. package/examples/js/exporters/GLTFExporter.js +147 -63
  19. package/examples/js/exporters/USDZExporter.js +45 -26
  20. package/examples/js/lines/LineMaterial.js +58 -20
  21. package/examples/js/lines/LineSegments2.js +29 -24
  22. package/examples/js/loaders/3DMLoader.js +24 -11
  23. package/examples/js/loaders/3MFLoader.js +2 -2
  24. package/examples/js/loaders/ColladaLoader.js +61 -3
  25. package/examples/js/loaders/FBXLoader.js +1 -1
  26. package/examples/js/loaders/GLTFLoader.js +94 -31
  27. package/examples/js/loaders/KTX2Loader.js +12 -0
  28. package/examples/js/loaders/LWOLoader.js +8 -6
  29. package/examples/js/loaders/LogLuvLoader.js +766 -0
  30. package/examples/js/loaders/PLYLoader.js +32 -7
  31. package/examples/js/loaders/RGBELoader.js +2 -1
  32. package/examples/js/loaders/SVGLoader.js +7 -3
  33. package/examples/js/loaders/TDSLoader.js +237 -271
  34. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  35. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  36. package/examples/js/objects/MarchingCubes.js +42 -128
  37. package/examples/js/renderers/CSS2DRenderer.js +4 -4
  38. package/examples/js/renderers/CSS3DRenderer.js +4 -4
  39. package/examples/js/utils/RoughnessMipmapper.js +1 -0
  40. package/examples/jsm/controls/ArcballControls.js +61 -29
  41. package/examples/jsm/controls/DragControls.js +7 -0
  42. package/examples/jsm/controls/OrbitControls.js +9 -51
  43. package/examples/jsm/controls/TrackballControls.js +1 -1
  44. package/examples/jsm/csm/CSM.js +3 -3
  45. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  46. package/examples/jsm/exporters/GLTFExporter.js +160 -74
  47. package/examples/jsm/exporters/USDZExporter.js +47 -26
  48. package/examples/jsm/libs/flow.module.js +3218 -0
  49. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  50. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  51. package/examples/jsm/lines/LineMaterial.js +59 -23
  52. package/examples/jsm/lines/LineSegments2.js +22 -18
  53. package/examples/jsm/loaders/3DMLoader.js +18 -12
  54. package/examples/jsm/loaders/3MFLoader.js +2 -2
  55. package/examples/jsm/loaders/ColladaLoader.js +61 -3
  56. package/examples/jsm/loaders/FBXLoader.js +1 -1
  57. package/examples/jsm/loaders/GLTFLoader.js +99 -35
  58. package/examples/jsm/loaders/KTX2Loader.js +19 -0
  59. package/examples/jsm/loaders/LWOLoader.js +8 -6
  60. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  61. package/examples/jsm/loaders/PLYLoader.js +33 -7
  62. package/examples/jsm/loaders/SVGLoader.js +7 -4
  63. package/examples/jsm/loaders/TDSLoader.js +225 -285
  64. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  65. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  66. package/examples/jsm/node-editor/NodeEditor.js +455 -0
  67. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  68. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  69. package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
  70. package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
  71. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  72. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  73. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  74. package/examples/jsm/node-editor/examples/rim.json +1 -0
  75. package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
  76. package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
  77. package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
  78. package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
  79. package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
  80. package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
  81. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +69 -0
  82. package/examples/jsm/node-editor/math/DotEditor.js +36 -0
  83. package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
  84. package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
  85. package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
  86. package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
  87. package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
  88. package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
  89. package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
  90. package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
  91. package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
  92. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  93. package/examples/jsm/nodes/materials/nodes/StandardNode.js +6 -6
  94. package/examples/jsm/nodes/utils/ColorSpaceNode.js +1 -49
  95. package/examples/jsm/objects/MarchingCubes.js +46 -152
  96. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  97. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  98. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  99. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  100. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  101. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  102. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  103. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  104. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  105. package/examples/jsm/postprocessing/GlitchPass.js +1 -1
  106. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  107. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  108. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  109. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  110. package/examples/jsm/postprocessing/SAOPass.js +1 -1
  111. package/examples/jsm/postprocessing/SMAAPass.js +1 -1
  112. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  113. package/examples/jsm/postprocessing/SSAOPass.js +1 -1
  114. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  115. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  116. package/examples/jsm/postprocessing/SavePass.js +1 -1
  117. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  118. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  119. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  120. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  121. package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
  122. package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
  123. package/examples/jsm/renderers/nodes/Nodes.js +14 -13
  124. package/examples/jsm/renderers/nodes/ShaderNode.js +193 -41
  125. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  126. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  127. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  128. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  129. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  130. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  131. package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
  132. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  133. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  134. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  135. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  136. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  137. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  138. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  139. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  140. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  141. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
  142. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  143. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  144. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  145. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  146. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  147. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  148. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  149. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  150. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  151. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  152. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +47 -25
  153. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  154. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  155. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  156. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  157. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +10 -2
  158. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  159. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  160. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  161. package/examples/jsm/renderers/nodes/math/MathNode.js +87 -36
  162. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  163. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  164. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  165. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  166. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  167. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  168. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  169. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  170. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  171. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  172. package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
  173. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  174. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  175. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +191 -94
  176. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  177. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  178. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  179. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +3 -3
  180. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  181. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  182. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  183. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +3 -5
  184. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +11 -27
  185. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +62 -28
  186. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +34 -27
  187. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  188. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +430 -98
  189. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  190. package/examples/jsm/utils/RoughnessMipmapper.js +1 -0
  191. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  192. package/package.json +10 -10
  193. package/src/Three.Legacy.js +6 -0
  194. package/src/Three.js +0 -1
  195. package/src/cameras/StereoCamera.js +8 -7
  196. package/src/constants.js +1 -2
  197. package/src/core/Layers.js +7 -1
  198. package/src/core/Object3D.js +2 -0
  199. package/src/extras/PMREMGenerator.js +11 -6
  200. package/src/loaders/FileLoader.js +89 -152
  201. package/src/loaders/ImageLoader.js +9 -4
  202. package/src/loaders/LoaderUtils.js +26 -0
  203. package/src/loaders/MaterialLoader.js +7 -4
  204. package/src/loaders/ObjectLoader.js +2 -0
  205. package/src/materials/Material.js +4 -4
  206. package/src/materials/MeshPhysicalMaterial.js +20 -14
  207. package/src/math/MathUtils.js +5 -16
  208. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  209. package/src/renderers/WebGLRenderer.js +83 -117
  210. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  211. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -27
  212. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  213. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  214. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  215. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  216. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +1 -1
  217. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +13 -5
  218. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  219. package/src/renderers/shaders/ShaderLib.js +6 -4
  220. package/src/renderers/shaders/UniformsLib.js +1 -2
  221. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  222. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  223. package/src/renderers/webgl/WebGLProgram.js +10 -6
  224. package/src/renderers/webgl/WebGLPrograms.js +17 -12
  225. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  226. package/src/renderers/webgl/WebGLState.js +31 -17
  227. package/src/renderers/webgl/WebGLTextures.js +188 -51
  228. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  229. package/src/renderers/webxr/WebXRManager.js +71 -110
  230. package/src/textures/Texture.js +6 -0
  231. package/src/utils.js +37 -1
  232. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  233. package/examples/js/libs/dat.gui.min.js +0 -14
  234. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  235. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  236. package/examples/jsm/libs/glslang.js +0 -78
  237. package/examples/jsm/libs/glslang.wasm +0 -0
  238. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  239. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  240. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  241. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  242. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  243. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  244. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  245. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  246. 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
- let depthStyle = null;
38
- let clearStyle = null;
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
- state.bindXRFramebuffer( null );
150
- renderer.setRenderTarget( renderer.getRenderTarget() );
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
- } else if ( gl instanceof WebGLRenderingContext ) {
267
-
268
- // Use old style webgl layer because we can't use MSAA
269
- // WebGL2 support.
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
- clearStyle = gl.DEPTH_BUFFER_BIT;
292
-
293
- if ( attributes.stencil ) clearStyle |= gl.STENCIL_BUFFER_BIT;
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: 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
- glMultisampledFramebuffer = gl.createFramebuffer();
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
- state.bindFramebuffer( gl.FRAMEBUFFER, glMultisampledFramebuffer );
326
- gl.framebufferRenderbuffer( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, glColorRenderbuffer );
327
- gl.bindRenderbuffer( gl.RENDERBUFFER, null );
328
-
329
- if ( depthFormat !== 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
+ } );
330
312
 
331
- glDepthRenderbuffer = gl.createRenderbuffer();
332
- gl.bindRenderbuffer( gl.RENDERBUFFER, glDepthRenderbuffer );
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 );
336
-
337
- }
313
+ } else {
338
314
 
339
- state.bindFramebuffer( gl.FRAMEBUFFER, null );
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 );
@@ -372,8 +360,8 @@ class WebXRManager extends EventDispatcher {
372
360
 
373
361
  this.updateLayers = function() {
374
362
  var layersCopy = layers.map(function (x) { return x; });
375
- layersCopy.push(layersCopy);
376
-
363
+
364
+ layersCopy.unshift( session.renderState.layers[0] );
377
365
  session.updateRenderState( { layers: layersCopy } );
378
366
  };
379
367
 
@@ -543,7 +531,7 @@ class WebXRManager extends EventDispatcher {
543
531
 
544
532
  object.matrixWorld.copy( cameraVR.matrixWorld );
545
533
  object.matrix.copy( cameraVR.matrix );
546
- object.matrix.decompose( cameraVR.position, cameraVR.quaternion, cameraVR.scale );
534
+ object.matrix.decompose( object.position, object.quaternion, object.scale );
547
535
 
548
536
  const children = object.children;
549
537
 
@@ -627,7 +615,8 @@ class WebXRManager extends EventDispatcher {
627
615
 
628
616
  if ( glBaseLayer !== null ) {
629
617
 
630
- state.bindXRFramebuffer( glBaseLayer.framebuffer );
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
- state.bindXRFramebuffer( glFramebuffer );
649
+ // For side-by-side projection, we only produce a single texture for both eyes.
650
+ if ( i === 0 ) {
661
651
 
662
- if ( glSubImage.depthStencilTexture !== undefined ) {
652
+ renderer.setRenderTargetTextures(
653
+ newRenderTarget,
654
+ glSubImage.colorTexture,
655
+ glProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture );
663
656
 
664
- gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, glSubImage.depthStencilTexture, 0 );
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
  }
@@ -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
- export { arrayMin, arrayMax, getTypedArray, createElementNS };
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
- } )();