super-three 0.160.1 → 0.161.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/LICENSE +1 -1
- package/build/three.cjs +379 -108
- package/build/three.module.js +380 -108
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +5 -1
- package/examples/jsm/capabilities/WebGPU.js +13 -9
- package/examples/jsm/controls/OrbitControls.js +102 -13
- package/examples/jsm/curves/NURBSUtils.js +59 -4
- package/examples/jsm/curves/NURBSVolume.js +62 -0
- package/examples/jsm/exporters/USDZExporter.js +8 -7
- package/examples/jsm/helpers/TextureHelper.js +3 -3
- package/examples/jsm/loaders/3DMLoader.js +44 -43
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +20 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +78 -46
- package/examples/jsm/loaders/LUTCubeLoader.js +81 -67
- package/examples/jsm/loaders/LUTImageLoader.js +3 -2
- package/examples/jsm/loaders/MaterialXLoader.js +115 -16
- package/examples/jsm/loaders/SVGLoader.js +4 -3
- package/examples/jsm/loaders/VRMLLoader.js +1 -1
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +144 -0
- package/examples/jsm/misc/Timer.js +13 -4
- package/examples/jsm/nodes/Nodes.js +16 -5
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +5 -3
- package/examples/jsm/nodes/accessors/CameraNode.js +9 -4
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +12 -1
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +27 -0
- package/examples/jsm/nodes/accessors/TextureStoreNode.js +56 -3
- package/examples/jsm/nodes/accessors/VertexColorNode.js +70 -0
- package/examples/jsm/nodes/core/AttributeNode.js +1 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +23 -18
- package/examples/jsm/nodes/core/NodeFrame.js +16 -8
- package/examples/jsm/nodes/core/constants.js +1 -0
- package/examples/jsm/nodes/display/AfterImageNode.js +148 -0
- package/examples/jsm/nodes/display/AnamorphicNode.js +148 -0
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +3 -0
- package/examples/jsm/nodes/display/GaussianBlurNode.js +33 -13
- package/examples/jsm/nodes/display/PassNode.js +3 -2
- package/examples/jsm/nodes/display/ToneMappingNode.js +46 -3
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +1 -4
- package/examples/jsm/nodes/display/ViewportNode.js +0 -2
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +4 -4
- package/examples/jsm/nodes/fog/FogNode.js +2 -1
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +13 -5
- package/examples/jsm/nodes/lighting/LightingContextNode.js +1 -1
- package/examples/jsm/nodes/lighting/LightsNode.js +1 -1
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +18 -30
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshSSSNodeMaterial.js +84 -0
- package/examples/jsm/nodes/materials/NodeMaterial.js +6 -4
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +1 -7
- package/examples/jsm/nodes/math/MathNode.js +12 -2
- package/examples/jsm/nodes/math/MathUtils.js +15 -0
- package/examples/jsm/nodes/math/OperatorNode.js +13 -5
- package/examples/jsm/nodes/math/TriNoise3D.js +71 -0
- package/examples/jsm/nodes/shadernode/ShaderNode.js +10 -1
- package/examples/jsm/nodes/utils/ArrayElementNode.js +6 -0
- package/examples/jsm/nodes/utils/JoinNode.js +2 -2
- package/examples/jsm/nodes/utils/LoopNode.js +3 -3
- package/examples/jsm/nodes/utils/ReflectorNode.js +227 -0
- package/examples/jsm/nodes/utils/RotateNode.js +68 -0
- package/examples/jsm/nodes/utils/RotateUVNode.js +1 -9
- package/examples/jsm/nodes/utils/SplitNode.js +4 -4
- package/examples/jsm/objects/GroundedSkybox.js +50 -0
- package/examples/jsm/objects/QuadMesh.js +8 -2
- package/examples/jsm/objects/Water2.js +8 -8
- package/examples/jsm/postprocessing/GTAOPass.js +11 -1
- package/examples/jsm/renderers/common/Backend.js +14 -0
- package/examples/jsm/renderers/common/Bindings.js +1 -1
- package/examples/jsm/renderers/common/DataMap.js +1 -1
- package/examples/jsm/renderers/common/Info.js +25 -1
- package/examples/jsm/renderers/common/Pipelines.js +8 -8
- package/examples/jsm/renderers/common/PostProcessing.js +2 -2
- package/examples/jsm/renderers/common/ProgrammableStage.js +3 -1
- package/examples/jsm/renderers/common/RenderObject.js +2 -0
- package/examples/jsm/renderers/common/Renderer.js +238 -22
- package/examples/jsm/renderers/common/StorageBufferAttribute.js +17 -0
- package/examples/jsm/renderers/common/Textures.js +25 -5
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +2 -1
- package/examples/jsm/renderers/common/nodes/Nodes.js +4 -2
- package/examples/jsm/renderers/webgl/WebGLBackend.js +631 -270
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +37 -30
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +89 -8
- package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +11 -0
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +197 -0
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +377 -11
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +2 -2
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +1 -21
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +289 -102
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +7 -2
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +56 -39
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +85 -12
- package/examples/jsm/transpiler/AST.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
- package/examples/jsm/transpiler/TSLEncoder.js +1 -1
- package/examples/jsm/utils/BufferGeometryUtils.js +23 -27
- package/examples/jsm/utils/SortUtils.js +2 -0
- package/examples/jsm/webxr/ARButton.js +12 -2
- package/examples/jsm/webxr/VRButton.js +12 -2
- package/examples/jsm/webxr/XRButton.js +12 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +3 -1
- package/package.json +2 -2
- package/src/audio/Audio.js +1 -3
- package/src/cameras/PerspectiveCamera.js +35 -0
- package/src/constants.js +1 -2
- package/src/core/BufferAttribute.js +2 -1
- package/src/core/InterleavedBuffer.js +2 -1
- package/src/core/InterleavedBufferAttribute.js +20 -0
- package/src/materials/ShaderMaterial.js +2 -1
- package/src/math/Triangle.js +0 -30
- package/src/objects/BatchedMesh.js +6 -7
- package/src/objects/SkinnedMesh.js +0 -8
- package/src/renderers/WebGLRenderer.js +5 -1
- package/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl.js +9 -0
- package/src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl.js +56 -11
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +15 -7
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +3 -1
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/points.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +1 -1
- package/src/renderers/webgl/WebGLAttributes.js +2 -2
- package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
- package/src/renderers/webgl/WebGLProgram.js +30 -3
- package/src/renderers/webgl/WebGLPrograms.js +19 -11
- package/src/renderers/webgl/WebGLTextures.js +90 -16
- package/src/renderers/webxr/WebXRDepthSensing.js +105 -0
- package/src/renderers/webxr/WebXRManager.js +46 -0
- package/src/textures/Source.js +1 -0
- package/build/three.js +0 -54519
- package/build/three.min.js +0 -7
- package/examples/jsm/objects/GroundProjectedSkybox.js +0 -172
|
@@ -30,6 +30,7 @@ class Renderer {
|
|
|
30
30
|
|
|
31
31
|
const {
|
|
32
32
|
logarithmicDepthBuffer = false,
|
|
33
|
+
alpha = true
|
|
33
34
|
} = parameters;
|
|
34
35
|
|
|
35
36
|
// public
|
|
@@ -43,6 +44,8 @@ class Renderer {
|
|
|
43
44
|
this.autoClearDepth = true;
|
|
44
45
|
this.autoClearStencil = true;
|
|
45
46
|
|
|
47
|
+
this.alpha = alpha;
|
|
48
|
+
|
|
46
49
|
this.logarithmicDepthBuffer = logarithmicDepthBuffer;
|
|
47
50
|
|
|
48
51
|
this.outputColorSpace = SRGBColorSpace;
|
|
@@ -67,7 +70,6 @@ class Renderer {
|
|
|
67
70
|
this._scissor = new Vector4( 0, 0, this._width, this._height );
|
|
68
71
|
this._scissorTest = false;
|
|
69
72
|
|
|
70
|
-
this._properties = null;
|
|
71
73
|
this._attributes = null;
|
|
72
74
|
this._geometries = null;
|
|
73
75
|
this._nodes = null;
|
|
@@ -85,7 +87,10 @@ class Renderer {
|
|
|
85
87
|
this._opaqueSort = null;
|
|
86
88
|
this._transparentSort = null;
|
|
87
89
|
|
|
88
|
-
|
|
90
|
+
|
|
91
|
+
const alphaClear = this.alpha === true ? 0 : 1;
|
|
92
|
+
|
|
93
|
+
this._clearColor = new Color4( 0, 0, 0, alphaClear );
|
|
89
94
|
this._clearDepth = 1;
|
|
90
95
|
this._clearStencil = 0;
|
|
91
96
|
|
|
@@ -96,9 +101,13 @@ class Renderer {
|
|
|
96
101
|
this._renderObjectFunction = null;
|
|
97
102
|
this._currentRenderObjectFunction = null;
|
|
98
103
|
|
|
104
|
+
this._handleObjectFunction = this._renderObjectDirect;
|
|
105
|
+
|
|
99
106
|
this._initialized = false;
|
|
100
107
|
this._initPromise = null;
|
|
101
108
|
|
|
109
|
+
this._compilationPromises = null;
|
|
110
|
+
|
|
102
111
|
// backwards compatibility
|
|
103
112
|
|
|
104
113
|
this.shadowMap = {
|
|
@@ -146,7 +155,7 @@ class Renderer {
|
|
|
146
155
|
this._attributes = new Attributes( backend );
|
|
147
156
|
this._background = new Background( this, this._nodes );
|
|
148
157
|
this._geometries = new Geometries( this._attributes, this.info );
|
|
149
|
-
this._textures = new Textures( backend, this.info );
|
|
158
|
+
this._textures = new Textures( this, backend, this.info );
|
|
150
159
|
this._pipelines = new Pipelines( backend, this._nodes );
|
|
151
160
|
this._bindings = new Bindings( backend, this._nodes, this._textures, this._attributes, this._pipelines, this.info );
|
|
152
161
|
this._objects = new RenderObjects( this, this._nodes, this._geometries, this._pipelines, this._bindings, this.info );
|
|
@@ -171,13 +180,129 @@ class Renderer {
|
|
|
171
180
|
|
|
172
181
|
}
|
|
173
182
|
|
|
174
|
-
async
|
|
183
|
+
async compileAsync( scene, camera, targetScene = null ) {
|
|
184
|
+
|
|
185
|
+
if ( this._initialized === false ) await this.init();
|
|
186
|
+
|
|
187
|
+
// preserve render tree
|
|
188
|
+
|
|
189
|
+
const nodeFrame = this._nodes.nodeFrame;
|
|
190
|
+
|
|
191
|
+
const previousRenderId = nodeFrame.renderId;
|
|
192
|
+
const previousRenderContext = this._currentRenderContext;
|
|
193
|
+
const previousRenderObjectFunction = this._currentRenderObjectFunction;
|
|
194
|
+
const previousCompilationPromises = this._compilationPromises;
|
|
195
|
+
|
|
196
|
+
//
|
|
197
|
+
|
|
198
|
+
const sceneRef = ( scene.isScene === true ) ? scene : _scene;
|
|
199
|
+
|
|
200
|
+
if ( targetScene === null ) targetScene = scene;
|
|
201
|
+
|
|
202
|
+
const renderTarget = this._renderTarget;
|
|
203
|
+
const renderContext = this._renderContexts.get( targetScene, camera, renderTarget );
|
|
204
|
+
const activeMipmapLevel = this._activeMipmapLevel;
|
|
205
|
+
|
|
206
|
+
const compilationPromises = [];
|
|
207
|
+
|
|
208
|
+
this._currentRenderContext = renderContext;
|
|
209
|
+
this._currentRenderObjectFunction = this.renderObject;
|
|
210
|
+
|
|
211
|
+
this._handleObjectFunction = this._createObjectPipeline;
|
|
212
|
+
|
|
213
|
+
this._compilationPromises = compilationPromises;
|
|
214
|
+
|
|
215
|
+
nodeFrame.renderId ++;
|
|
216
|
+
|
|
217
|
+
//
|
|
218
|
+
|
|
219
|
+
nodeFrame.update();
|
|
220
|
+
|
|
221
|
+
//
|
|
222
|
+
|
|
223
|
+
renderContext.depth = this.depth;
|
|
224
|
+
renderContext.stencil = this.stencil;
|
|
225
|
+
|
|
226
|
+
//
|
|
227
|
+
|
|
228
|
+
sceneRef.onBeforeRender( this, scene, camera, renderTarget );
|
|
229
|
+
|
|
230
|
+
//
|
|
231
|
+
|
|
232
|
+
const renderList = this._renderLists.get( scene, camera );
|
|
233
|
+
renderList.begin();
|
|
234
|
+
|
|
235
|
+
this._projectObject( scene, camera, 0, renderList );
|
|
236
|
+
|
|
237
|
+
// include lights from target scene
|
|
238
|
+
if ( targetScene !== scene ) {
|
|
239
|
+
|
|
240
|
+
targetScene.traverseVisible( function ( object ) {
|
|
241
|
+
|
|
242
|
+
if ( object.isLight && object.layers.test( camera.layers ) ) {
|
|
243
|
+
|
|
244
|
+
renderList.pushLight( object );
|
|
245
|
+
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
} );
|
|
249
|
+
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
renderList.finish();
|
|
253
|
+
|
|
254
|
+
//
|
|
255
|
+
|
|
256
|
+
if ( renderTarget !== null ) {
|
|
257
|
+
|
|
258
|
+
this._textures.updateRenderTarget( renderTarget, activeMipmapLevel );
|
|
259
|
+
|
|
260
|
+
const renderTargetData = this._textures.get( renderTarget );
|
|
261
|
+
|
|
262
|
+
renderContext.textures = renderTargetData.textures;
|
|
263
|
+
renderContext.depthTexture = renderTargetData.depthTexture;
|
|
264
|
+
|
|
265
|
+
} else {
|
|
266
|
+
|
|
267
|
+
renderContext.textures = null;
|
|
268
|
+
renderContext.depthTexture = null;
|
|
269
|
+
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
//
|
|
273
|
+
|
|
274
|
+
this._nodes.updateScene( sceneRef );
|
|
275
|
+
|
|
276
|
+
//
|
|
277
|
+
|
|
278
|
+
this._background.update( sceneRef, renderList, renderContext );
|
|
279
|
+
|
|
280
|
+
// process render lists
|
|
175
281
|
|
|
176
|
-
|
|
282
|
+
const opaqueObjects = renderList.opaque;
|
|
283
|
+
const transparentObjects = renderList.transparent;
|
|
284
|
+
const lightsNode = renderList.lightsNode;
|
|
285
|
+
|
|
286
|
+
if ( opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
|
|
287
|
+
if ( transparentObjects.length > 0 ) this._renderObjects( transparentObjects, camera, sceneRef, lightsNode );
|
|
288
|
+
|
|
289
|
+
// restore render tree
|
|
290
|
+
|
|
291
|
+
nodeFrame.renderId = previousRenderId;
|
|
292
|
+
|
|
293
|
+
this._currentRenderContext = previousRenderContext;
|
|
294
|
+
this._currentRenderObjectFunction = previousRenderObjectFunction;
|
|
295
|
+
this._compilationPromises = previousCompilationPromises;
|
|
296
|
+
|
|
297
|
+
this._handleObjectFunction = this._renderObjectDirect;
|
|
298
|
+
|
|
299
|
+
// wait for all promises setup by backends awaiting compilation/linking/pipeline creation to complete
|
|
300
|
+
|
|
301
|
+
await Promise.all( compilationPromises );
|
|
177
302
|
|
|
178
303
|
}
|
|
179
304
|
|
|
180
|
-
async
|
|
305
|
+
async renderAsync( scene, camera ) {
|
|
181
306
|
|
|
182
307
|
if ( this._initialized === false ) await this.init();
|
|
183
308
|
|
|
@@ -261,9 +386,6 @@ class Renderer {
|
|
|
261
386
|
renderContext.scissorValue.width >>= activeMipmapLevel;
|
|
262
387
|
renderContext.scissorValue.height >>= activeMipmapLevel;
|
|
263
388
|
|
|
264
|
-
renderContext.depth = this.depth;
|
|
265
|
-
renderContext.stencil = this.stencil;
|
|
266
|
-
|
|
267
389
|
//
|
|
268
390
|
|
|
269
391
|
sceneRef.onBeforeRender( this, scene, camera, renderTarget );
|
|
@@ -299,6 +421,8 @@ class Renderer {
|
|
|
299
421
|
renderContext.width = renderTargetData.width;
|
|
300
422
|
renderContext.height = renderTargetData.height;
|
|
301
423
|
renderContext.renderTarget = renderTarget;
|
|
424
|
+
renderContext.depth = renderTarget.depthBuffer;
|
|
425
|
+
renderContext.stencil = renderTarget.stencilBuffer;
|
|
302
426
|
|
|
303
427
|
} else {
|
|
304
428
|
|
|
@@ -306,6 +430,8 @@ class Renderer {
|
|
|
306
430
|
renderContext.depthTexture = null;
|
|
307
431
|
renderContext.width = this.domElement.width;
|
|
308
432
|
renderContext.height = this.domElement.height;
|
|
433
|
+
renderContext.depth = this.depth;
|
|
434
|
+
renderContext.stencil = this.stencil;
|
|
309
435
|
|
|
310
436
|
}
|
|
311
437
|
|
|
@@ -351,6 +477,9 @@ class Renderer {
|
|
|
351
477
|
|
|
352
478
|
sceneRef.onAfterRender( this, scene, camera, renderTarget );
|
|
353
479
|
|
|
480
|
+
|
|
481
|
+
await this.backend.resolveTimestampAsync( renderContext, 'render' );
|
|
482
|
+
|
|
354
483
|
}
|
|
355
484
|
|
|
356
485
|
getMaxAnisotropy() {
|
|
@@ -395,7 +524,7 @@ class Renderer {
|
|
|
395
524
|
|
|
396
525
|
getContext() {
|
|
397
526
|
|
|
398
|
-
return this.
|
|
527
|
+
return this.backend.getContext();
|
|
399
528
|
|
|
400
529
|
}
|
|
401
530
|
|
|
@@ -513,6 +642,8 @@ class Renderer {
|
|
|
513
642
|
|
|
514
643
|
this._scissorTest = boolean;
|
|
515
644
|
|
|
645
|
+
this.backend.setScissorTest( boolean );
|
|
646
|
+
|
|
516
647
|
}
|
|
517
648
|
|
|
518
649
|
getViewport( target ) {
|
|
@@ -597,7 +728,9 @@ class Renderer {
|
|
|
597
728
|
|
|
598
729
|
}
|
|
599
730
|
|
|
600
|
-
|
|
731
|
+
async clearAsync( color = true, depth = true, stencil = true ) {
|
|
732
|
+
|
|
733
|
+
if ( this._initialized === false ) await this.init();
|
|
601
734
|
|
|
602
735
|
let renderTargetData = null;
|
|
603
736
|
const renderTarget = this._renderTarget;
|
|
@@ -614,21 +747,21 @@ class Renderer {
|
|
|
614
747
|
|
|
615
748
|
}
|
|
616
749
|
|
|
617
|
-
|
|
750
|
+
clearColorAsync() {
|
|
618
751
|
|
|
619
|
-
this.
|
|
752
|
+
return this.clearAsync( true, false, false );
|
|
620
753
|
|
|
621
754
|
}
|
|
622
755
|
|
|
623
|
-
|
|
756
|
+
clearDepthAsync() {
|
|
624
757
|
|
|
625
|
-
this.
|
|
758
|
+
return this.clearAsync( false, true, false );
|
|
626
759
|
|
|
627
760
|
}
|
|
628
761
|
|
|
629
|
-
|
|
762
|
+
clearStencilAsync() {
|
|
630
763
|
|
|
631
|
-
this.
|
|
764
|
+
return this.clearAsync( false, false, true );
|
|
632
765
|
|
|
633
766
|
}
|
|
634
767
|
|
|
@@ -654,7 +787,6 @@ class Renderer {
|
|
|
654
787
|
|
|
655
788
|
this._animation.dispose();
|
|
656
789
|
this._objects.dispose();
|
|
657
|
-
this._properties.dispose();
|
|
658
790
|
this._pipelines.dispose();
|
|
659
791
|
this._nodes.dispose();
|
|
660
792
|
this._bindings.dispose();
|
|
@@ -693,7 +825,7 @@ class Renderer {
|
|
|
693
825
|
|
|
694
826
|
}
|
|
695
827
|
|
|
696
|
-
async
|
|
828
|
+
async computeAsync( computeNodes ) {
|
|
697
829
|
|
|
698
830
|
if ( this._initialized === false ) await this.init();
|
|
699
831
|
|
|
@@ -705,10 +837,12 @@ class Renderer {
|
|
|
705
837
|
|
|
706
838
|
this.info.calls ++;
|
|
707
839
|
this.info.compute.calls ++;
|
|
840
|
+
this.info.compute.computeCalls ++;
|
|
708
841
|
|
|
709
842
|
nodeFrame.renderId = this.info.calls;
|
|
710
843
|
|
|
711
844
|
//
|
|
845
|
+
if ( this.info.autoReset === true ) this.info.resetCompute();
|
|
712
846
|
|
|
713
847
|
const backend = this.backend;
|
|
714
848
|
const pipelines = this._pipelines;
|
|
@@ -760,12 +894,20 @@ class Renderer {
|
|
|
760
894
|
|
|
761
895
|
backend.finishCompute( computeNodes );
|
|
762
896
|
|
|
897
|
+
await this.backend.resolveTimestampAsync( computeNodes, 'compute' );
|
|
898
|
+
|
|
763
899
|
//
|
|
764
900
|
|
|
765
901
|
nodeFrame.renderId = previousRenderId;
|
|
766
902
|
|
|
767
903
|
}
|
|
768
904
|
|
|
905
|
+
hasFeatureAsync( name ) {
|
|
906
|
+
|
|
907
|
+
return this.backend.hasFeatureAsync( name );
|
|
908
|
+
|
|
909
|
+
}
|
|
910
|
+
|
|
769
911
|
hasFeature( name ) {
|
|
770
912
|
|
|
771
913
|
return this.backend.hasFeature( name );
|
|
@@ -943,6 +1085,7 @@ class Renderer {
|
|
|
943
1085
|
renderObject( object, scene, camera, geometry, material, group, lightsNode ) {
|
|
944
1086
|
|
|
945
1087
|
let overridePositionNode;
|
|
1088
|
+
let overrideFragmentNode;
|
|
946
1089
|
|
|
947
1090
|
//
|
|
948
1091
|
|
|
@@ -964,6 +1107,13 @@ class Renderer {
|
|
|
964
1107
|
|
|
965
1108
|
}
|
|
966
1109
|
|
|
1110
|
+
if ( overrideMaterial.isShadowNodeMaterial && ( material.shadowNode && material.shadowNode.isNode ) ) {
|
|
1111
|
+
|
|
1112
|
+
overrideFragmentNode = overrideMaterial.fragmentNode;
|
|
1113
|
+
overrideMaterial.fragmentNode = material.shadowNode;
|
|
1114
|
+
|
|
1115
|
+
}
|
|
1116
|
+
|
|
967
1117
|
material = overrideMaterial;
|
|
968
1118
|
|
|
969
1119
|
}
|
|
@@ -973,16 +1123,16 @@ class Renderer {
|
|
|
973
1123
|
if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {
|
|
974
1124
|
|
|
975
1125
|
material.side = BackSide;
|
|
976
|
-
this.
|
|
1126
|
+
this._handleObjectFunction( object, material, scene, camera, lightsNode, 'backSide' ); // create backSide pass id
|
|
977
1127
|
|
|
978
1128
|
material.side = FrontSide;
|
|
979
|
-
this.
|
|
1129
|
+
this._handleObjectFunction( object, material, scene, camera, lightsNode ); // use default pass id
|
|
980
1130
|
|
|
981
1131
|
material.side = DoubleSide;
|
|
982
1132
|
|
|
983
1133
|
} else {
|
|
984
1134
|
|
|
985
|
-
this.
|
|
1135
|
+
this._handleObjectFunction( object, material, scene, camera, lightsNode );
|
|
986
1136
|
|
|
987
1137
|
}
|
|
988
1138
|
|
|
@@ -994,6 +1144,12 @@ class Renderer {
|
|
|
994
1144
|
|
|
995
1145
|
}
|
|
996
1146
|
|
|
1147
|
+
if ( overrideFragmentNode !== undefined ) {
|
|
1148
|
+
|
|
1149
|
+
scene.overrideMaterial.fragmentNode = overrideFragmentNode;
|
|
1150
|
+
|
|
1151
|
+
}
|
|
1152
|
+
|
|
997
1153
|
//
|
|
998
1154
|
|
|
999
1155
|
object.onAfterRender( this, scene, camera, geometry, material, group );
|
|
@@ -1026,6 +1182,66 @@ class Renderer {
|
|
|
1026
1182
|
|
|
1027
1183
|
}
|
|
1028
1184
|
|
|
1185
|
+
_createObjectPipeline( object, material, scene, camera, lightsNode, passId ) {
|
|
1186
|
+
|
|
1187
|
+
const renderObject = this._objects.get( object, material, scene, camera, lightsNode, this._currentRenderContext, passId );
|
|
1188
|
+
|
|
1189
|
+
//
|
|
1190
|
+
|
|
1191
|
+
this._nodes.updateBefore( renderObject );
|
|
1192
|
+
|
|
1193
|
+
//
|
|
1194
|
+
|
|
1195
|
+
this._nodes.updateForRender( renderObject );
|
|
1196
|
+
this._geometries.updateForRender( renderObject );
|
|
1197
|
+
this._bindings.updateForRender( renderObject );
|
|
1198
|
+
|
|
1199
|
+
this._pipelines.getForRender( renderObject, this._compilationPromises );
|
|
1200
|
+
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
get compute() {
|
|
1204
|
+
|
|
1205
|
+
return this.computeAsync;
|
|
1206
|
+
|
|
1207
|
+
}
|
|
1208
|
+
|
|
1209
|
+
get compile() {
|
|
1210
|
+
|
|
1211
|
+
return this.compileAsync;
|
|
1212
|
+
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
get render() {
|
|
1216
|
+
|
|
1217
|
+
return this.renderAsync;
|
|
1218
|
+
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
get clear() {
|
|
1222
|
+
|
|
1223
|
+
return this.clearAsync;
|
|
1224
|
+
|
|
1225
|
+
}
|
|
1226
|
+
|
|
1227
|
+
get clearColor() {
|
|
1228
|
+
|
|
1229
|
+
return this.clearColorAsync;
|
|
1230
|
+
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1233
|
+
get clearDepth() {
|
|
1234
|
+
|
|
1235
|
+
return this.clearDepthAsync;
|
|
1236
|
+
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
get clearStencil() {
|
|
1240
|
+
|
|
1241
|
+
return this.clearStencilAsync;
|
|
1242
|
+
|
|
1243
|
+
}
|
|
1244
|
+
|
|
1029
1245
|
}
|
|
1030
1246
|
|
|
1031
1247
|
export default Renderer;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { InstancedBufferAttribute } from 'three';
|
|
2
|
+
|
|
3
|
+
class StorageBufferAttribute extends InstancedBufferAttribute {
|
|
4
|
+
|
|
5
|
+
constructor( array, itemSize, typeClass = Float32Array ) {
|
|
6
|
+
|
|
7
|
+
if ( ArrayBuffer.isView( array ) === false ) array = new typeClass( array * itemSize );
|
|
8
|
+
|
|
9
|
+
super( array, itemSize );
|
|
10
|
+
|
|
11
|
+
this.isStorageBufferAttribute = true;
|
|
12
|
+
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export default StorageBufferAttribute;
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import DataMap from './DataMap.js';
|
|
2
2
|
|
|
3
|
-
import { Vector3, DepthTexture, DepthStencilFormat, UnsignedInt248Type, LinearFilter, NearestFilter, EquirectangularReflectionMapping, EquirectangularRefractionMapping, CubeReflectionMapping, CubeRefractionMapping } from 'three';
|
|
3
|
+
import { Vector3, DepthTexture, DepthStencilFormat, DepthFormat, UnsignedIntType, UnsignedInt248Type, LinearFilter, NearestFilter, EquirectangularReflectionMapping, EquirectangularRefractionMapping, CubeReflectionMapping, CubeRefractionMapping, UnsignedByteType } from 'three';
|
|
4
4
|
|
|
5
5
|
const _size = new Vector3();
|
|
6
6
|
|
|
7
7
|
class Textures extends DataMap {
|
|
8
8
|
|
|
9
|
-
constructor( backend, info ) {
|
|
9
|
+
constructor( renderer, backend, info ) {
|
|
10
10
|
|
|
11
11
|
super();
|
|
12
12
|
|
|
13
|
+
this.renderer = renderer;
|
|
13
14
|
this.backend = backend;
|
|
14
15
|
this.info = info;
|
|
15
16
|
|
|
@@ -47,8 +48,8 @@ class Textures extends DataMap {
|
|
|
47
48
|
if ( depthTexture === undefined ) {
|
|
48
49
|
|
|
49
50
|
depthTexture = new DepthTexture();
|
|
50
|
-
depthTexture.format = DepthStencilFormat;
|
|
51
|
-
depthTexture.type = UnsignedInt248Type;
|
|
51
|
+
depthTexture.format = renderTarget.stencilBuffer ? DepthStencilFormat : DepthFormat;
|
|
52
|
+
depthTexture.type = renderTarget.stencilBuffer ? UnsignedInt248Type : UnsignedIntType;
|
|
52
53
|
depthTexture.image.width = mipWidth;
|
|
53
54
|
depthTexture.image.height = mipHeight;
|
|
54
55
|
|
|
@@ -153,6 +154,25 @@ class Textures extends DataMap {
|
|
|
153
154
|
|
|
154
155
|
//
|
|
155
156
|
|
|
157
|
+
if ( texture.isFramebufferTexture ) {
|
|
158
|
+
|
|
159
|
+
const renderer = this.renderer;
|
|
160
|
+
const renderTarget = renderer.getRenderTarget();
|
|
161
|
+
|
|
162
|
+
if ( renderTarget ) {
|
|
163
|
+
|
|
164
|
+
texture.type = renderTarget.texture.type;
|
|
165
|
+
|
|
166
|
+
} else {
|
|
167
|
+
|
|
168
|
+
texture.type = UnsignedByteType;
|
|
169
|
+
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
//
|
|
175
|
+
|
|
156
176
|
const { width, height, depth } = this.getSize( texture );
|
|
157
177
|
|
|
158
178
|
options.width = width;
|
|
@@ -214,7 +234,7 @@ class Textures extends DataMap {
|
|
|
214
234
|
|
|
215
235
|
}
|
|
216
236
|
|
|
217
|
-
backend.updateTexture( texture, options );
|
|
237
|
+
if ( texture.source.dataReady === true ) backend.updateTexture( texture, options );
|
|
218
238
|
|
|
219
239
|
if ( options.needsMipmaps && texture.mipmaps.length === 0 ) backend.generateMipmaps( texture );
|
|
220
240
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
class NodeBuilderState {
|
|
2
2
|
|
|
3
|
-
constructor( vertexShader, fragmentShader, computeShader, nodeAttributes, bindings, updateNodes, updateBeforeNodes ) {
|
|
3
|
+
constructor( vertexShader, fragmentShader, computeShader, nodeAttributes, bindings, updateNodes, updateBeforeNodes, transforms = [] ) {
|
|
4
4
|
|
|
5
5
|
this.vertexShader = vertexShader;
|
|
6
6
|
this.fragmentShader = fragmentShader;
|
|
7
7
|
this.computeShader = computeShader;
|
|
8
|
+
this.transforms = transforms;
|
|
8
9
|
|
|
9
10
|
this.nodeAttributes = nodeAttributes;
|
|
10
11
|
this.bindings = bindings;
|
|
@@ -164,7 +164,7 @@ class Nodes extends DataMap {
|
|
|
164
164
|
|
|
165
165
|
nodeBuilderState = this._createNodeBuilderState( nodeBuilder );
|
|
166
166
|
|
|
167
|
-
computeData.nodeBuilderState =
|
|
167
|
+
computeData.nodeBuilderState = nodeBuilderState;
|
|
168
168
|
|
|
169
169
|
}
|
|
170
170
|
|
|
@@ -181,7 +181,8 @@ class Nodes extends DataMap {
|
|
|
181
181
|
nodeBuilder.getAttributesArray(),
|
|
182
182
|
nodeBuilder.getBindings(),
|
|
183
183
|
nodeBuilder.updateNodes,
|
|
184
|
-
nodeBuilder.updateBeforeNodes
|
|
184
|
+
nodeBuilder.updateBeforeNodes,
|
|
185
|
+
nodeBuilder.transforms
|
|
185
186
|
);
|
|
186
187
|
|
|
187
188
|
}
|
|
@@ -314,6 +315,7 @@ class Nodes extends DataMap {
|
|
|
314
315
|
if ( background.mapping === EquirectangularReflectionMapping || background.mapping === EquirectangularRefractionMapping ) {
|
|
315
316
|
|
|
316
317
|
nodeUV = equirectUV();
|
|
318
|
+
background.flipY = false;
|
|
317
319
|
|
|
318
320
|
} else {
|
|
319
321
|
|