super-three 0.158.0 → 0.160.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/build/three.cjs +1720 -380
  2. package/build/three.js +1720 -380
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +1719 -381
  5. package/build/three.module.min.js +1 -1
  6. package/examples/jsm/Addons.js +2 -1
  7. package/examples/jsm/controls/OrbitControls.js +50 -40
  8. package/examples/jsm/csm/CSMShader.js +52 -47
  9. package/examples/jsm/exporters/GLTFExporter.js +79 -1
  10. package/examples/jsm/exporters/USDZExporter.js +27 -19
  11. package/examples/jsm/helpers/TextureHelper.js +237 -0
  12. package/examples/jsm/interactive/HTMLMesh.js +9 -2
  13. package/examples/jsm/lines/LineMaterial.js +16 -33
  14. package/examples/jsm/loaders/ColladaLoader.js +0 -6
  15. package/examples/jsm/loaders/DRACOLoader.js +4 -3
  16. package/examples/jsm/loaders/FBXLoader.js +294 -124
  17. package/examples/jsm/loaders/GLTFLoader.js +71 -3
  18. package/examples/jsm/loaders/MaterialXLoader.js +73 -54
  19. package/examples/jsm/loaders/NRRDLoader.js +0 -13
  20. package/examples/jsm/loaders/SVGLoader.js +4 -4
  21. package/examples/jsm/loaders/USDZLoader.js +3 -17
  22. package/examples/jsm/math/Octree.js +15 -4
  23. package/examples/jsm/misc/Timer.js +119 -0
  24. package/examples/jsm/misc/TubePainter.js +3 -6
  25. package/examples/jsm/modifiers/CurveModifier.js +20 -2
  26. package/examples/jsm/nodes/Nodes.js +11 -7
  27. package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
  28. package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
  29. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
  30. package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
  31. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
  32. package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
  33. package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
  34. package/examples/jsm/nodes/accessors/TextureNode.js +122 -36
  35. package/examples/jsm/nodes/code/CodeNode.js +3 -3
  36. package/examples/jsm/nodes/core/AttributeNode.js +7 -1
  37. package/examples/jsm/nodes/core/CacheNode.js +4 -1
  38. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  39. package/examples/jsm/nodes/core/Node.js +6 -3
  40. package/examples/jsm/nodes/core/NodeBuilder.js +84 -27
  41. package/examples/jsm/nodes/core/NodeFrame.js +10 -8
  42. package/examples/jsm/nodes/core/NodeUniform.js +12 -0
  43. package/examples/jsm/nodes/core/NodeUtils.js +3 -7
  44. package/examples/jsm/nodes/core/OutputStructNode.js +3 -3
  45. package/examples/jsm/nodes/core/PropertyNode.js +17 -2
  46. package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
  47. package/examples/jsm/nodes/core/UniformGroup.js +13 -0
  48. package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
  49. package/examples/jsm/nodes/core/UniformNode.js +17 -0
  50. package/examples/jsm/nodes/core/VarNode.js +2 -0
  51. package/examples/jsm/nodes/core/VaryingNode.js +1 -7
  52. package/examples/jsm/nodes/display/BumpMapNode.js +1 -1
  53. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
  54. package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
  55. package/examples/jsm/nodes/display/PassNode.js +182 -0
  56. package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
  57. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
  58. package/examples/jsm/nodes/display/ViewportNode.js +5 -8
  59. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +1 -1
  60. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +52 -17
  61. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -12
  62. package/examples/jsm/nodes/lighting/LightsNode.js +34 -32
  63. package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +1 -1
  64. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +12 -12
  65. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
  66. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +1 -1
  67. package/examples/jsm/nodes/materials/NodeMaterial.js +66 -41
  68. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
  69. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  70. package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
  71. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
  72. package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
  73. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
  74. package/examples/jsm/nodes/math/MathNode.js +2 -0
  75. package/examples/jsm/nodes/math/OperatorNode.js +19 -6
  76. package/examples/jsm/nodes/shadernode/ShaderNode.js +32 -3
  77. package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
  78. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  79. package/examples/jsm/nodes/utils/SplitNode.js +8 -2
  80. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
  81. package/examples/jsm/objects/QuadMesh.js +60 -0
  82. package/examples/jsm/postprocessing/GTAOPass.js +572 -0
  83. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  84. package/examples/jsm/renderers/common/Animation.js +10 -21
  85. package/examples/jsm/renderers/common/Backend.js +19 -3
  86. package/examples/jsm/renderers/common/Background.js +20 -22
  87. package/examples/jsm/renderers/common/Bindings.js +30 -21
  88. package/examples/jsm/renderers/common/ChainMap.js +3 -3
  89. package/examples/jsm/renderers/common/Color4.js +37 -0
  90. package/examples/jsm/renderers/common/Geometries.js +4 -4
  91. package/examples/jsm/renderers/common/Info.js +12 -2
  92. package/examples/jsm/renderers/common/Pipelines.js +3 -51
  93. package/examples/jsm/renderers/common/PostProcessing.js +25 -0
  94. package/examples/jsm/renderers/common/RenderContext.js +1 -1
  95. package/examples/jsm/renderers/common/RenderContexts.js +1 -1
  96. package/examples/jsm/renderers/common/RenderObject.js +13 -1
  97. package/examples/jsm/renderers/common/RenderObjects.js +4 -2
  98. package/examples/jsm/renderers/common/Renderer.js +137 -37
  99. package/examples/jsm/renderers/common/StorageTexture.js +1 -0
  100. package/examples/jsm/renderers/common/Textures.js +4 -1
  101. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
  102. package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
  103. package/examples/jsm/renderers/common/nodes/Nodes.js +74 -7
  104. package/examples/jsm/renderers/webgl/WebGLBackend.js +91 -33
  105. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +100 -31
  106. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +57 -5
  107. package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
  108. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
  109. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
  110. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
  111. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  112. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
  113. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
  114. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +186 -137
  115. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
  116. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +209 -90
  117. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
  118. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
  119. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
  120. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
  121. package/examples/jsm/shaders/FXAAShader.js +133 -133
  122. package/examples/jsm/shaders/GTAOShader.js +424 -0
  123. package/examples/jsm/shaders/OutputShader.js +4 -0
  124. package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
  125. package/examples/jsm/shaders/SAOShader.js +2 -3
  126. package/examples/jsm/shaders/SSAOShader.js +2 -3
  127. package/examples/jsm/transpiler/AST.js +40 -1
  128. package/examples/jsm/transpiler/GLSLDecoder.js +50 -8
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +4 -4
  130. package/examples/jsm/transpiler/TSLEncoder.js +124 -20
  131. package/examples/jsm/utils/SortUtils.js +158 -0
  132. package/examples/jsm/utils/TextureUtils.js +33 -21
  133. package/examples/jsm/webxr/ARButton.js +14 -0
  134. package/examples/jsm/webxr/VRButton.js +23 -8
  135. package/examples/jsm/webxr/XRButton.js +25 -11
  136. package/package.json +5 -6
  137. package/src/Three.js +1 -0
  138. package/src/constants.js +2 -1
  139. package/src/core/BufferAttribute.js +21 -2
  140. package/src/core/InterleavedBuffer.js +21 -1
  141. package/src/core/Object3D.js +60 -12
  142. package/src/core/UniformsGroup.js +7 -1
  143. package/src/extras/curves/LineCurve3.js +4 -0
  144. package/src/loaders/AudioLoader.js +1 -1
  145. package/src/loaders/BufferGeometryLoader.js +0 -7
  146. package/src/loaders/ImageBitmapLoader.js +25 -1
  147. package/src/loaders/ObjectLoader.js +49 -0
  148. package/src/materials/ShaderMaterial.js +2 -1
  149. package/src/math/ColorManagement.js +0 -16
  150. package/src/math/Quaternion.js +5 -4
  151. package/src/math/Sphere.js +2 -0
  152. package/src/math/Triangle.js +17 -5
  153. package/src/objects/BatchedMesh.js +1020 -0
  154. package/src/objects/Skeleton.js +1 -3
  155. package/src/renderers/WebGL3DRenderTarget.js +2 -2
  156. package/src/renderers/WebGLArrayRenderTarget.js +2 -2
  157. package/src/renderers/WebGLRenderer.js +24 -19
  158. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
  159. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
  160. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
  161. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
  162. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
  163. package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
  164. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
  165. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
  166. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
  167. package/src/renderers/shaders/ShaderChunk.js +4 -0
  168. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  169. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  170. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
  171. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
  172. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
  173. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
  174. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
  175. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +2 -0
  176. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
  177. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
  178. package/src/renderers/webgl/WebGLAttributes.js +39 -5
  179. package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
  180. package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
  181. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  182. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
  183. package/src/renderers/webgl/WebGLLights.js +11 -2
  184. package/src/renderers/webgl/WebGLProgram.js +20 -1
  185. package/src/renderers/webgl/WebGLPrograms.js +5 -0
  186. package/src/renderers/webgl/WebGLShadowMap.js +35 -0
  187. package/src/renderers/webgl/WebGLTextures.js +7 -11
  188. package/src/renderers/webgl/WebGLUniforms.js +11 -1
  189. package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
  190. package/src/renderers/webxr/WebXRManager.js +16 -0
  191. package/examples/jsm/objects/BatchedMesh.js +0 -586
@@ -96,57 +96,62 @@ function WebGLUniformsGroups( gl, info, capabilities, state ) {
96
96
 
97
97
  for ( let i = 0, il = uniforms.length; i < il; i ++ ) {
98
98
 
99
- const uniform = uniforms[ i ];
99
+ const uniformArray = Array.isArray( uniforms[ i ] ) ? uniforms[ i ] : [ uniforms[ i ] ];
100
100
 
101
- // partly update the buffer if necessary
101
+ for ( let j = 0, jl = uniformArray.length; j < jl; j ++ ) {
102
102
 
103
- if ( hasUniformChanged( uniform, i, cache ) === true ) {
103
+ const uniform = uniformArray[ j ];
104
104
 
105
- const offset = uniform.__offset;
105
+ if ( hasUniformChanged( uniform, i, j, cache ) === true ) {
106
106
 
107
- const values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];
107
+ const offset = uniform.__offset;
108
108
 
109
- let arrayOffset = 0;
109
+ const values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];
110
110
 
111
- for ( let i = 0; i < values.length; i ++ ) {
111
+ let arrayOffset = 0;
112
112
 
113
- const value = values[ i ];
113
+ for ( let k = 0; k < values.length; k ++ ) {
114
114
 
115
- const info = getUniformSize( value );
115
+ const value = values[ k ];
116
+
117
+ const info = getUniformSize( value );
118
+
119
+ // TODO add integer and struct support
120
+ if ( typeof value === 'number' || typeof value === 'boolean' ) {
116
121
 
117
- if ( typeof value === 'number' ) {
122
+ uniform.__data[ 0 ] = value;
123
+ gl.bufferSubData( gl.UNIFORM_BUFFER, offset + arrayOffset, uniform.__data );
118
124
 
119
- uniform.__data[ 0 ] = value;
120
- gl.bufferSubData( gl.UNIFORM_BUFFER, offset + arrayOffset, uniform.__data );
125
+ } else if ( value.isMatrix3 ) {
121
126
 
122
- } else if ( value.isMatrix3 ) {
127
+ // manually converting 3x3 to 3x4
123
128
 
124
- // manually converting 3x3 to 3x4
129
+ uniform.__data[ 0 ] = value.elements[ 0 ];
130
+ uniform.__data[ 1 ] = value.elements[ 1 ];
131
+ uniform.__data[ 2 ] = value.elements[ 2 ];
132
+ uniform.__data[ 3 ] = 0;
133
+ uniform.__data[ 4 ] = value.elements[ 3 ];
134
+ uniform.__data[ 5 ] = value.elements[ 4 ];
135
+ uniform.__data[ 6 ] = value.elements[ 5 ];
136
+ uniform.__data[ 7 ] = 0;
137
+ uniform.__data[ 8 ] = value.elements[ 6 ];
138
+ uniform.__data[ 9 ] = value.elements[ 7 ];
139
+ uniform.__data[ 10 ] = value.elements[ 8 ];
140
+ uniform.__data[ 11 ] = 0;
125
141
 
126
- uniform.__data[ 0 ] = value.elements[ 0 ];
127
- uniform.__data[ 1 ] = value.elements[ 1 ];
128
- uniform.__data[ 2 ] = value.elements[ 2 ];
129
- uniform.__data[ 3 ] = value.elements[ 0 ];
130
- uniform.__data[ 4 ] = value.elements[ 3 ];
131
- uniform.__data[ 5 ] = value.elements[ 4 ];
132
- uniform.__data[ 6 ] = value.elements[ 5 ];
133
- uniform.__data[ 7 ] = value.elements[ 0 ];
134
- uniform.__data[ 8 ] = value.elements[ 6 ];
135
- uniform.__data[ 9 ] = value.elements[ 7 ];
136
- uniform.__data[ 10 ] = value.elements[ 8 ];
137
- uniform.__data[ 11 ] = value.elements[ 0 ];
142
+ } else {
138
143
 
139
- } else {
144
+ value.toArray( uniform.__data, arrayOffset );
140
145
 
141
- value.toArray( uniform.__data, arrayOffset );
146
+ arrayOffset += info.storage / Float32Array.BYTES_PER_ELEMENT;
142
147
 
143
- arrayOffset += info.storage / Float32Array.BYTES_PER_ELEMENT;
148
+ }
144
149
 
145
150
  }
146
151
 
147
- }
152
+ gl.bufferSubData( gl.UNIFORM_BUFFER, offset, uniform.__data );
148
153
 
149
- gl.bufferSubData( gl.UNIFORM_BUFFER, offset, uniform.__data );
154
+ }
150
155
 
151
156
  }
152
157
 
@@ -156,31 +161,22 @@ function WebGLUniformsGroups( gl, info, capabilities, state ) {
156
161
 
157
162
  }
158
163
 
159
- function hasUniformChanged( uniform, index, cache ) {
164
+ function hasUniformChanged( uniform, index, indexArray, cache ) {
160
165
 
161
166
  const value = uniform.value;
167
+ const indexString = index + '_' + indexArray;
162
168
 
163
- if ( cache[ index ] === undefined ) {
169
+ if ( cache[ indexString ] === undefined ) {
164
170
 
165
171
  // cache entry does not exist so far
166
172
 
167
- if ( typeof value === 'number' ) {
173
+ if ( typeof value === 'number' || typeof value === 'boolean' ) {
168
174
 
169
- cache[ index ] = value;
175
+ cache[ indexString ] = value;
170
176
 
171
177
  } else {
172
178
 
173
- const values = Array.isArray( value ) ? value : [ value ];
174
-
175
- const tempValues = [];
176
-
177
- for ( let i = 0; i < values.length; i ++ ) {
178
-
179
- tempValues.push( values[ i ].clone() );
180
-
181
- }
182
-
183
- cache[ index ] = tempValues;
179
+ cache[ indexString ] = value.clone();
184
180
 
185
181
  }
186
182
 
@@ -188,32 +184,25 @@ function WebGLUniformsGroups( gl, info, capabilities, state ) {
188
184
 
189
185
  } else {
190
186
 
187
+ const cachedObject = cache[ indexString ];
188
+
191
189
  // compare current value with cached entry
192
190
 
193
- if ( typeof value === 'number' ) {
191
+ if ( typeof value === 'number' || typeof value === 'boolean' ) {
194
192
 
195
- if ( cache[ index ] !== value ) {
193
+ if ( cachedObject !== value ) {
196
194
 
197
- cache[ index ] = value;
195
+ cache[ indexString ] = value;
198
196
  return true;
199
197
 
200
198
  }
201
199
 
202
200
  } else {
203
201
 
204
- const cachedObjects = Array.isArray( cache[ index ] ) ? cache[ index ] : [ cache[ index ] ];
205
- const values = Array.isArray( value ) ? value : [ value ];
206
-
207
- for ( let i = 0; i < cachedObjects.length; i ++ ) {
202
+ if ( cachedObject.equals( value ) === false ) {
208
203
 
209
- const cachedObject = cachedObjects[ i ];
210
-
211
- if ( cachedObject.equals( values[ i ] ) === false ) {
212
-
213
- cachedObject.copy( values[ i ] );
214
- return true;
215
-
216
- }
204
+ cachedObject.copy( value );
205
+ return true;
217
206
 
218
207
  }
219
208
 
@@ -234,63 +223,53 @@ function WebGLUniformsGroups( gl, info, capabilities, state ) {
234
223
 
235
224
  let offset = 0; // global buffer offset in bytes
236
225
  const chunkSize = 16; // size of a chunk in bytes
237
- let chunkOffset = 0; // offset within a single chunk in bytes
238
226
 
239
227
  for ( let i = 0, l = uniforms.length; i < l; i ++ ) {
240
228
 
241
- const uniform = uniforms[ i ];
242
-
243
- const infos = {
244
- boundary: 0, // bytes
245
- storage: 0 // bytes
246
- };
247
-
248
- const values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];
229
+ const uniformArray = Array.isArray( uniforms[ i ] ) ? uniforms[ i ] : [ uniforms[ i ] ];
249
230
 
250
- for ( let j = 0, jl = values.length; j < jl; j ++ ) {
231
+ for ( let j = 0, jl = uniformArray.length; j < jl; j ++ ) {
251
232
 
252
- const value = values[ j ];
233
+ const uniform = uniformArray[ j ];
253
234
 
254
- const info = getUniformSize( value );
235
+ const values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];
255
236
 
256
- infos.boundary += info.boundary;
257
- infos.storage += info.storage;
237
+ for ( let k = 0, kl = values.length; k < kl; k ++ ) {
258
238
 
259
- }
239
+ const value = values[ k ];
260
240
 
261
- // the following two properties will be used for partial buffer updates
241
+ const info = getUniformSize( value );
262
242
 
263
- uniform.__data = new Float32Array( infos.storage / Float32Array.BYTES_PER_ELEMENT );
264
- uniform.__offset = offset;
243
+ // Calculate the chunk offset
244
+ const chunkOffsetUniform = offset % chunkSize;
265
245
 
266
- //
246
+ // Check for chunk overflow
247
+ if ( chunkOffsetUniform !== 0 && ( chunkSize - chunkOffsetUniform ) < info.boundary ) {
267
248
 
268
- if ( i > 0 ) {
249
+ // Add padding and adjust offset
250
+ offset += ( chunkSize - chunkOffsetUniform );
269
251
 
270
- chunkOffset = offset % chunkSize;
252
+ }
271
253
 
272
- const remainingSizeInChunk = chunkSize - chunkOffset;
254
+ // the following two properties will be used for partial buffer updates
273
255
 
274
- // check for chunk overflow
256
+ uniform.__data = new Float32Array( info.storage / Float32Array.BYTES_PER_ELEMENT );
257
+ uniform.__offset = offset;
275
258
 
276
- if ( chunkOffset !== 0 && ( remainingSizeInChunk - infos.boundary ) < 0 ) {
277
259
 
278
- // add padding and adjust offset
260
+ // Update the global offset
261
+ offset += info.storage;
279
262
 
280
- offset += ( chunkSize - chunkOffset );
281
- uniform.__offset = offset;
282
263
 
283
264
  }
284
265
 
285
266
  }
286
267
 
287
- offset += infos.storage;
288
-
289
268
  }
290
269
 
291
270
  // ensure correct final padding
292
271
 
293
- chunkOffset = offset % chunkSize;
272
+ const chunkOffset = offset % chunkSize;
294
273
 
295
274
  if ( chunkOffset > 0 ) offset += ( chunkSize - chunkOffset );
296
275
 
@@ -312,9 +291,9 @@ function WebGLUniformsGroups( gl, info, capabilities, state ) {
312
291
 
313
292
  // determine sizes according to STD140
314
293
 
315
- if ( typeof value === 'number' ) {
294
+ if ( typeof value === 'number' || typeof value === 'boolean' ) {
316
295
 
317
- // float/int
296
+ // float/int/bool
318
297
 
319
298
  info.boundary = 4;
320
299
  info.storage = 4;
@@ -1,6 +1,7 @@
1
1
  import { ArrayCamera } from '../../cameras/ArrayCamera.js';
2
2
  import { EventDispatcher } from '../../core/EventDispatcher.js';
3
3
  import { PerspectiveCamera } from '../../cameras/PerspectiveCamera.js';
4
+ import { Vector2 } from '../../math/Vector2.js';
4
5
  import { Vector3 } from '../../math/Vector3.js';
5
6
  import { Vector4 } from '../../math/Vector4.js';
6
7
  import { RAD2DEG } from '../../math/MathUtils.js';
@@ -44,6 +45,9 @@ class WebXRManager extends EventDispatcher {
44
45
  const controllers = [];
45
46
  const controllerInputSources = [];
46
47
 
48
+ const currentSize = new Vector2();
49
+ let currentPixelRatio = null;
50
+
47
51
  //
48
52
 
49
53
  const cameraL = new PerspectiveCamera();
@@ -187,6 +191,9 @@ class WebXRManager extends EventDispatcher {
187
191
 
188
192
  scope.isPresenting = false;
189
193
 
194
+ renderer.setPixelRatio( currentPixelRatio );
195
+ renderer.setSize( currentSize.width, currentSize.height, false );
196
+
190
197
  scope.dispatchEvent( { type: 'sessionend' } );
191
198
 
192
199
  }
@@ -274,6 +281,9 @@ class WebXRManager extends EventDispatcher {
274
281
 
275
282
  }
276
283
 
284
+ currentPixelRatio = renderer.getPixelRatio();
285
+ renderer.getSize( currentSize );
286
+
277
287
  if ( ( session.renderState.layers === undefined ) || ( renderer.capabilities.isWebGL2 === false ) ) {
278
288
 
279
289
  const layerInit = {
@@ -288,6 +298,9 @@ class WebXRManager extends EventDispatcher {
288
298
 
289
299
  session.updateRenderState( { baseLayer: glBaseLayer } );
290
300
 
301
+ renderer.setPixelRatio( 1 );
302
+ renderer.setSize( glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight, false );
303
+
291
304
  newRenderTarget = new WebGLRenderTarget(
292
305
  glBaseLayer.framebufferWidth,
293
306
  glBaseLayer.framebufferHeight,
@@ -333,6 +346,9 @@ class WebXRManager extends EventDispatcher {
333
346
 
334
347
  session.updateRenderState( { layers: [ glProjLayer ] } );
335
348
 
349
+ renderer.setPixelRatio( 1 );
350
+ renderer.setSize( glProjLayer.textureWidth, glProjLayer.textureHeight, false );
351
+
336
352
  const renderTargetOptions = {
337
353
  format: RGBAFormat,
338
354
  type: UnsignedByteType,