super-three 0.168.0 → 0.169.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.cjs +369 -131
- package/build/three.module.js +369 -131
- package/build/three.module.min.js +1 -1
- package/build/three.webgpu.js +24644 -22406
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +79941 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +0 -6
- package/examples/jsm/controls/TrackballControls.js +32 -12
- package/examples/jsm/controls/TransformControls.js +97 -62
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/KTX2Exporter.js +21 -13
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +9 -7
- package/examples/jsm/geometries/DecalGeometry.js +4 -1
- package/examples/jsm/geometries/InstancedPointsGeometry.js +1 -1
- package/examples/jsm/helpers/LightProbeHelper.js +1 -1
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lights/LightProbeGenerator.js +24 -10
- package/examples/jsm/loaders/ColladaLoader.js +9 -6
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +30 -20
- package/examples/jsm/loaders/GLTFLoader.js +5 -10
- package/examples/jsm/loaders/KTX2Loader.js +10 -7
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +29 -10
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +5 -4
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +8 -5
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/VRMLLoader.js +10 -10
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/misc/Timer.js +1 -1
- package/examples/jsm/modifiers/CurveModifierGPU.js +233 -0
- package/examples/jsm/objects/LensflareMesh.js +322 -0
- package/examples/jsm/objects/SkyMesh.js +1 -2
- package/examples/jsm/objects/Water2Mesh.js +2 -3
- package/examples/jsm/objects/WaterMesh.js +1 -2
- package/examples/jsm/physics/JoltPhysics.js +1 -1
- package/examples/jsm/physics/RapierPhysics.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -2
- package/examples/jsm/utils/GeometryCompressionUtils.js +37 -122
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/TextureUtils.js +1 -0
- package/examples/jsm/utils/TextureUtilsGPU.js +63 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/package.json +2 -2
- package/src/Three.WebGPU.Nodes.js +200 -0
- package/src/Three.WebGPU.js +2 -1
- package/src/audio/Audio.js +2 -2
- package/src/constants.js +1 -1
- package/src/core/BufferAttribute.js +0 -9
- package/src/core/Clock.js +1 -1
- package/src/core/InterleavedBuffer.js +0 -9
- package/src/extras/Controls.js +1 -1
- package/src/geometries/CylinderGeometry.js +11 -4
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +24 -4
- package/src/loaders/nodes/NodeMaterialLoader.js +21 -17
- package/src/loaders/nodes/NodeObjectLoader.js +19 -0
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +19 -34
- package/src/materials/nodes/Line2NodeMaterial.js +26 -26
- package/src/materials/nodes/LineBasicNodeMaterial.js +7 -3
- package/src/materials/nodes/LineDashedNodeMaterial.js +7 -3
- package/src/materials/nodes/MeshBasicNodeMaterial.js +7 -3
- package/src/materials/nodes/MeshLambertNodeMaterial.js +7 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +7 -3
- package/src/materials/nodes/MeshNormalNodeMaterial.js +7 -3
- package/src/materials/nodes/MeshPhongNodeMaterial.js +7 -3
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +6 -3
- package/src/materials/nodes/MeshSSSNodeMaterial.js +6 -3
- package/src/materials/nodes/MeshStandardNodeMaterial.js +7 -3
- package/src/materials/nodes/MeshToonNodeMaterial.js +7 -3
- package/src/materials/nodes/NodeMaterial.js +20 -45
- package/src/materials/nodes/NodeMaterials.js +2 -0
- package/src/materials/nodes/PointsNodeMaterial.js +7 -3
- package/src/materials/nodes/ShadowNodeMaterial.js +7 -3
- package/src/materials/nodes/SpriteNodeMaterial.js +39 -6
- package/src/materials/nodes/VolumeNodeMaterial.js +13 -9
- package/src/materials/nodes/manager/NodeMaterialObserver.js +302 -0
- package/src/math/Triangle.js +24 -0
- package/src/nodes/Nodes.js +3 -3
- package/src/nodes/TSL.js +96 -93
- package/src/nodes/accessors/BatchNode.js +7 -3
- package/src/nodes/accessors/BufferAttributeNode.js +6 -3
- package/src/nodes/accessors/BufferNode.js +6 -3
- package/src/nodes/accessors/Camera.js +10 -16
- package/src/nodes/accessors/ClippingNode.js +7 -3
- package/src/nodes/accessors/CubeTextureNode.js +6 -3
- package/src/nodes/accessors/InstanceNode.js +11 -11
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +6 -3
- package/src/nodes/accessors/Lights.js +51 -0
- package/src/nodes/accessors/MaterialNode.js +8 -4
- package/src/nodes/accessors/MaterialReferenceNode.js +6 -3
- package/src/nodes/accessors/ModelNode.js +42 -7
- package/src/nodes/accessors/ModelViewProjectionNode.js +9 -5
- package/src/nodes/accessors/MorphNode.js +7 -3
- package/src/nodes/accessors/Normal.js +32 -6
- package/src/nodes/accessors/Object3DNode.js +11 -27
- package/src/nodes/accessors/PointUVNode.js +7 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +32 -4
- package/src/nodes/accessors/ReferenceNode.js +40 -3
- package/src/nodes/accessors/RendererReferenceNode.js +9 -3
- package/src/nodes/accessors/SceneNode.js +7 -3
- package/src/nodes/accessors/SkinningNode.js +7 -3
- package/src/nodes/accessors/StorageBufferNode.js +21 -3
- package/src/nodes/accessors/StorageTextureNode.js +7 -4
- package/src/nodes/accessors/Texture3DNode.js +7 -4
- package/src/nodes/accessors/TextureNode.js +19 -8
- package/src/nodes/accessors/TextureSizeNode.js +8 -5
- package/src/nodes/accessors/UniformArrayNode.js +12 -9
- package/src/nodes/accessors/UserDataNode.js +9 -6
- package/src/nodes/accessors/VelocityNode.js +74 -23
- package/src/nodes/accessors/VertexColorNode.js +6 -3
- package/src/nodes/code/CodeNode.js +7 -3
- package/src/nodes/code/ExpressionNode.js +8 -4
- package/src/nodes/code/FunctionCallNode.js +6 -3
- package/src/nodes/code/FunctionNode.js +6 -3
- package/src/nodes/code/ScriptableNode.js +11 -6
- package/src/nodes/code/ScriptableValueNode.js +7 -3
- package/src/nodes/core/AssignNode.js +9 -6
- package/src/nodes/core/AttributeNode.js +7 -3
- package/src/nodes/core/BypassNode.js +8 -4
- package/src/nodes/core/CacheNode.js +8 -4
- package/src/nodes/core/ConstNode.js +6 -3
- package/src/nodes/core/ContextNode.js +7 -3
- package/src/nodes/core/IndexNode.js +25 -3
- package/src/nodes/core/InputNode.js +7 -3
- package/src/nodes/core/MRTNode.js +6 -3
- package/src/nodes/core/Node.js +10 -51
- package/src/nodes/core/NodeBuilder.js +71 -5
- package/src/nodes/core/NodeUtils.js +48 -6
- package/src/nodes/core/OutputStructNode.js +8 -4
- package/src/nodes/core/ParameterNode.js +6 -3
- package/src/nodes/core/PropertyNode.js +7 -3
- package/src/nodes/core/StackNode.js +7 -3
- package/src/nodes/core/StructTypeNode.js +7 -3
- package/src/nodes/core/TempNode.js +8 -4
- package/src/nodes/core/UniformGroupNode.js +10 -6
- package/src/nodes/core/UniformNode.js +6 -3
- package/src/nodes/core/VarNode.js +8 -4
- package/src/nodes/core/VaryingNode.js +7 -3
- package/src/nodes/display/AfterImageNode.js +6 -0
- package/src/nodes/display/AnaglyphPassNode.js +6 -0
- package/src/nodes/display/AnamorphicNode.js +6 -0
- package/src/nodes/display/BloomNode.js +6 -0
- package/src/nodes/display/BumpMapNode.js +6 -0
- package/src/nodes/display/ColorSpaceFunctions.js +4 -4
- package/src/nodes/display/ColorSpaceNode.js +43 -14
- package/src/nodes/display/DenoiseNode.js +6 -3
- package/src/nodes/display/DepthOfFieldNode.js +6 -3
- package/src/nodes/display/DotScreenNode.js +8 -5
- package/src/nodes/display/FXAANode.js +6 -3
- package/src/nodes/display/FilmNode.js +6 -3
- package/src/nodes/display/FrontFacingNode.js +7 -3
- package/src/nodes/display/GTAONode.js +6 -3
- package/src/nodes/display/GaussianBlurNode.js +6 -3
- package/src/nodes/display/Lut3DNode.js +6 -3
- package/src/nodes/display/NormalMapNode.js +8 -6
- package/src/nodes/display/ParallaxBarrierPassNode.js +8 -5
- package/src/nodes/display/PassNode.js +18 -7
- package/src/nodes/display/PixelationPassNode.js +12 -5
- package/src/nodes/display/PosterizeNode.js +6 -3
- package/src/nodes/display/RGBShiftNode.js +6 -3
- package/src/nodes/display/RenderOutputNode.js +12 -8
- package/src/nodes/display/SSAAPassNode.js +6 -3
- package/src/nodes/display/ScreenNode.js +181 -0
- package/src/nodes/display/SobelOperatorNode.js +6 -3
- package/src/nodes/display/StereoCompositePassNode.js +6 -3
- package/src/nodes/display/StereoPassNode.js +6 -3
- package/src/nodes/display/ToneMappingFunctions.js +12 -12
- package/src/nodes/display/ToneMappingNode.js +8 -7
- package/src/nodes/display/ToonOutlinePassNode.js +111 -0
- package/src/nodes/display/TransitionNode.js +6 -3
- package/src/nodes/display/ViewportDepthNode.js +7 -3
- package/src/nodes/display/ViewportDepthTextureNode.js +8 -5
- package/src/nodes/display/ViewportSharedTextureNode.js +8 -5
- package/src/nodes/display/ViewportTextureNode.js +8 -5
- package/src/nodes/fog/FogExp2Node.js +6 -3
- package/src/nodes/fog/FogNode.js +7 -3
- package/src/nodes/fog/FogRangeNode.js +6 -3
- package/src/nodes/functions/PhysicalLightingModel.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +7 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +99 -0
- package/src/nodes/gpgpu/BarrierNode.js +40 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +98 -0
- package/src/nodes/gpgpu/ComputeNode.js +8 -4
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +100 -0
- package/src/nodes/lighting/AONode.js +6 -3
- package/src/nodes/lighting/AmbientLightNode.js +6 -3
- package/src/nodes/lighting/AnalyticLightNode.js +198 -30
- package/src/nodes/lighting/BasicEnvironmentNode.js +6 -3
- package/src/nodes/lighting/BasicLightMapNode.js +6 -3
- package/src/nodes/lighting/DirectionalLightNode.js +7 -4
- package/src/nodes/lighting/EnvironmentNode.js +6 -3
- package/src/nodes/lighting/HemisphereLightNode.js +10 -6
- package/src/nodes/lighting/IESSpotLightNode.js +6 -3
- package/src/nodes/lighting/IrradianceNode.js +6 -3
- package/src/nodes/lighting/LightProbeNode.js +8 -31
- package/src/nodes/lighting/LightingContextNode.js +6 -3
- package/src/nodes/lighting/LightingNode.js +7 -3
- package/src/nodes/lighting/LightsNode.js +24 -5
- package/src/nodes/lighting/PointLightNode.js +11 -7
- package/src/nodes/lighting/RectAreaLightNode.js +11 -7
- package/src/nodes/lighting/SpotLightNode.js +13 -10
- package/src/nodes/math/ConditionalNode.js +23 -6
- package/src/nodes/math/MathNode.js +6 -3
- package/src/nodes/math/OperatorNode.js +6 -3
- package/src/nodes/pmrem/PMREMNode.js +6 -3
- package/src/nodes/utils/ArrayElementNode.js +8 -4
- package/src/nodes/utils/ConvertNode.js +7 -3
- package/src/nodes/utils/CubeMapNode.js +6 -3
- package/src/nodes/utils/EquirectUVNode.js +6 -3
- package/src/nodes/utils/FlipNode.js +7 -4
- package/src/nodes/utils/FunctionOverloadingNode.js +7 -3
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +7 -3
- package/src/nodes/utils/MatcapUVNode.js +6 -3
- package/src/nodes/utils/MaxMipLevelNode.js +6 -3
- package/src/nodes/utils/OscNode.js +7 -3
- package/src/nodes/utils/RTTNode.js +6 -3
- package/src/nodes/utils/ReflectorNode.js +8 -5
- package/src/nodes/utils/RemapNode.js +7 -3
- package/src/nodes/utils/RotateNode.js +6 -3
- package/src/nodes/utils/SetNode.js +7 -4
- package/src/nodes/utils/SplitNode.js +7 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +7 -3
- package/src/nodes/utils/StorageArrayElementNode.js +9 -8
- package/src/nodes/utils/TimerNode.js +6 -3
- package/src/nodes/utils/TriplanarTexturesNode.js +7 -3
- package/src/nodes/utils/ViewportUtils.js +2 -2
- package/src/objects/BatchedMesh.js +76 -10
- package/src/objects/LOD.js +21 -0
- package/src/objects/Line.js +1 -0
- package/src/objects/Mesh.js +7 -23
- package/src/objects/Points.js +2 -0
- package/src/renderers/WebGLRenderer.js +64 -41
- package/src/renderers/common/BundleGroup.js +26 -0
- package/src/renderers/common/ClippingContext.js +4 -3
- package/src/renderers/common/RenderContext.js +4 -5
- package/src/renderers/common/RenderObject.js +116 -5
- package/src/renderers/common/RenderObjects.js +8 -1
- package/src/renderers/common/Renderer.js +57 -49
- package/src/renderers/common/extras/PMREMGenerator.js +7 -9
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/common/nodes/Nodes.js +33 -14
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLCapabilities.js +9 -0
- package/src/renderers/webgl/WebGLProgram.js +2 -0
- package/src/renderers/webgl/WebGLPrograms.js +21 -17
- package/src/renderers/webgl/WebGLState.js +21 -0
- package/src/renderers/webgl/WebGLTextures.js +22 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +50 -45
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +6 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +1 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +61 -16
- package/src/renderers/webgpu/WebGPUBackend.js +33 -25
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +42 -0
- package/src/renderers/webgpu/WebGPURenderer.js +5 -2
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +59 -0
- package/src/renderers/{common → webgpu}/nodes/StandardNodeLibrary.js +11 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +91 -11
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +6 -16
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +7 -5
- package/src/renderers/webgpu/utils/WebGPUUtils.js +1 -1
- package/src/utils.js +33 -1
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/display/ViewportNode.js +0 -138
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/renderers/common/StandardRenderer.js +0 -18
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Group } from '../../objects/Group.js';
|
|
2
|
+
|
|
3
|
+
class BundleGroup extends Group {
|
|
4
|
+
|
|
5
|
+
constructor() {
|
|
6
|
+
|
|
7
|
+
super();
|
|
8
|
+
|
|
9
|
+
this.isBundleGroup = true;
|
|
10
|
+
|
|
11
|
+
this.type = 'BundleGroup';
|
|
12
|
+
|
|
13
|
+
this.static = true;
|
|
14
|
+
this.version = 0;
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
set needsUpdate( value ) {
|
|
19
|
+
|
|
20
|
+
if ( value === true ) this.version ++;
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export default BundleGroup;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Matrix3 } from '../../math/Matrix3.js';
|
|
2
2
|
import { Plane } from '../../math/Plane.js';
|
|
3
3
|
import { Vector4 } from '../../math/Vector4.js';
|
|
4
|
+
import { hash } from '../../nodes/core/NodeUtils.js';
|
|
4
5
|
|
|
5
6
|
const _plane = /*@__PURE__*/ new Plane();
|
|
6
7
|
|
|
@@ -20,7 +21,7 @@ class ClippingContext {
|
|
|
20
21
|
|
|
21
22
|
this.parentVersion = 0;
|
|
22
23
|
this.viewNormalMatrix = new Matrix3();
|
|
23
|
-
this.cacheKey =
|
|
24
|
+
this.cacheKey = 0;
|
|
24
25
|
|
|
25
26
|
}
|
|
26
27
|
|
|
@@ -95,7 +96,7 @@ class ClippingContext {
|
|
|
95
96
|
if ( update ) {
|
|
96
97
|
|
|
97
98
|
this.version ++;
|
|
98
|
-
this.cacheKey =
|
|
99
|
+
this.cacheKey = hash( this.globalClippingCount, this.localClippingEnabled === true ? 1 : 0 );
|
|
99
100
|
|
|
100
101
|
}
|
|
101
102
|
|
|
@@ -165,7 +166,7 @@ class ClippingContext {
|
|
|
165
166
|
if ( update ) {
|
|
166
167
|
|
|
167
168
|
this.version += parent.version;
|
|
168
|
-
this.cacheKey = parent.cacheKey
|
|
169
|
+
this.cacheKey = hash( parent.cacheKey, this.localClippingCount, this.localClipIntersection === true ? 1 : 0 );
|
|
169
170
|
|
|
170
171
|
}
|
|
171
172
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Vector4 } from '../../math/Vector4.js';
|
|
2
|
+
import { hashArray } from '../../nodes/core/NodeUtils.js';
|
|
2
3
|
|
|
3
4
|
let id = 0;
|
|
4
5
|
|
|
@@ -50,17 +51,15 @@ export function getCacheKey( renderContext ) {
|
|
|
50
51
|
|
|
51
52
|
const { textures, activeCubeFace } = renderContext;
|
|
52
53
|
|
|
53
|
-
|
|
54
|
+
const values = [ activeCubeFace ];
|
|
54
55
|
|
|
55
56
|
for ( const texture of textures ) {
|
|
56
57
|
|
|
57
|
-
|
|
58
|
+
values.push( texture.id );
|
|
58
59
|
|
|
59
60
|
}
|
|
60
61
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return key;
|
|
62
|
+
return hashArray( values );
|
|
64
63
|
|
|
65
64
|
}
|
|
66
65
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { hashString } from '../../nodes/core/NodeUtils.js';
|
|
1
2
|
import ClippingContext from './ClippingContext.js';
|
|
2
3
|
|
|
3
4
|
let _id = 0;
|
|
@@ -61,6 +62,9 @@ export default class RenderObject {
|
|
|
61
62
|
this.attributes = null;
|
|
62
63
|
this.pipeline = null;
|
|
63
64
|
this.vertexBuffers = null;
|
|
65
|
+
this.drawParams = null;
|
|
66
|
+
|
|
67
|
+
this.bundle = null;
|
|
64
68
|
|
|
65
69
|
this.updateClipping( renderContext.clippingContext );
|
|
66
70
|
|
|
@@ -71,6 +75,7 @@ export default class RenderObject {
|
|
|
71
75
|
|
|
72
76
|
this._nodeBuilderState = null;
|
|
73
77
|
this._bindings = null;
|
|
78
|
+
this._monitor = null;
|
|
74
79
|
|
|
75
80
|
this.onDispose = null;
|
|
76
81
|
|
|
@@ -127,6 +132,12 @@ export default class RenderObject {
|
|
|
127
132
|
|
|
128
133
|
}
|
|
129
134
|
|
|
135
|
+
getMonitor() {
|
|
136
|
+
|
|
137
|
+
return this._monitor || ( this._monitor = this.getNodeBuilderState().monitor );
|
|
138
|
+
|
|
139
|
+
}
|
|
140
|
+
|
|
130
141
|
getBindings() {
|
|
131
142
|
|
|
132
143
|
return this._bindings || ( this._bindings = this.getNodeBuilderState().createBindings() );
|
|
@@ -183,6 +194,90 @@ export default class RenderObject {
|
|
|
183
194
|
|
|
184
195
|
}
|
|
185
196
|
|
|
197
|
+
getDrawParameters() {
|
|
198
|
+
|
|
199
|
+
const { object, material, geometry, group, drawRange } = this;
|
|
200
|
+
|
|
201
|
+
const drawParams = this.drawParams || ( this.drawParams = {
|
|
202
|
+
vertexCount: 0,
|
|
203
|
+
firstVertex: 0,
|
|
204
|
+
instanceCount: 0,
|
|
205
|
+
firstInstance: 0
|
|
206
|
+
} );
|
|
207
|
+
|
|
208
|
+
const index = this.getIndex();
|
|
209
|
+
const hasIndex = ( index !== null );
|
|
210
|
+
const instanceCount = geometry.isInstancedBufferGeometry ? geometry.instanceCount : ( object.count > 1 ? object.count : 1 );
|
|
211
|
+
|
|
212
|
+
if ( instanceCount === 0 ) return null;
|
|
213
|
+
|
|
214
|
+
drawParams.instanceCount = instanceCount;
|
|
215
|
+
|
|
216
|
+
if ( object.isBatchedMesh === true ) return drawParams;
|
|
217
|
+
|
|
218
|
+
let rangeFactor = 1;
|
|
219
|
+
|
|
220
|
+
if ( material.wireframe === true && ! object.isPoints && ! object.isLineSegments && ! object.isLine && ! object.isLineLoop ) {
|
|
221
|
+
|
|
222
|
+
rangeFactor = 2;
|
|
223
|
+
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
let firstVertex = drawRange.start * rangeFactor;
|
|
227
|
+
let lastVertex = ( drawRange.start + drawRange.count ) * rangeFactor;
|
|
228
|
+
|
|
229
|
+
if ( group !== null ) {
|
|
230
|
+
|
|
231
|
+
firstVertex = Math.max( firstVertex, group.start * rangeFactor );
|
|
232
|
+
lastVertex = Math.min( lastVertex, ( group.start + group.count ) * rangeFactor );
|
|
233
|
+
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const itemCount = hasIndex === true ? index.count : geometry.attributes.position.count;
|
|
237
|
+
|
|
238
|
+
firstVertex = Math.max( firstVertex, 0 );
|
|
239
|
+
lastVertex = Math.min( lastVertex, itemCount );
|
|
240
|
+
|
|
241
|
+
const count = lastVertex - firstVertex;
|
|
242
|
+
|
|
243
|
+
if ( count < 0 || count === Infinity ) return null;
|
|
244
|
+
|
|
245
|
+
drawParams.vertexCount = count;
|
|
246
|
+
drawParams.firstVertex = firstVertex;
|
|
247
|
+
|
|
248
|
+
return drawParams;
|
|
249
|
+
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
getGeometryCacheKey() {
|
|
253
|
+
|
|
254
|
+
const { geometry } = this;
|
|
255
|
+
|
|
256
|
+
let cacheKey = '';
|
|
257
|
+
|
|
258
|
+
for ( const name of Object.keys( geometry.attributes ).sort() ) {
|
|
259
|
+
|
|
260
|
+
const attribute = geometry.attributes[ name ];
|
|
261
|
+
|
|
262
|
+
cacheKey += name + ',';
|
|
263
|
+
|
|
264
|
+
if ( attribute.data ) cacheKey += attribute.data.stride + ',';
|
|
265
|
+
if ( attribute.offset ) cacheKey += attribute.offset + ',';
|
|
266
|
+
if ( attribute.itemSize ) cacheKey += attribute.itemSize + ',';
|
|
267
|
+
if ( attribute.normalized ) cacheKey += 'n,';
|
|
268
|
+
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
if ( geometry.index ) {
|
|
272
|
+
|
|
273
|
+
cacheKey += 'index,';
|
|
274
|
+
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
return cacheKey;
|
|
278
|
+
|
|
279
|
+
}
|
|
280
|
+
|
|
186
281
|
getMaterialCacheKey() {
|
|
187
282
|
|
|
188
283
|
const { object, material } = this;
|
|
@@ -237,6 +332,12 @@ export default class RenderObject {
|
|
|
237
332
|
|
|
238
333
|
cacheKey += this.clippingContext.cacheKey + ',';
|
|
239
334
|
|
|
335
|
+
if ( object.geometry ) {
|
|
336
|
+
|
|
337
|
+
cacheKey += this.getGeometryCacheKey();
|
|
338
|
+
|
|
339
|
+
}
|
|
340
|
+
|
|
240
341
|
if ( object.skeleton ) {
|
|
241
342
|
|
|
242
343
|
cacheKey += object.skeleton.bones.length + ',';
|
|
@@ -263,17 +364,19 @@ export default class RenderObject {
|
|
|
263
364
|
|
|
264
365
|
if ( object.count > 1 ) {
|
|
265
366
|
|
|
266
|
-
|
|
367
|
+
// TODO: https://github.com/mrdoob/three.js/pull/29066#issuecomment-2269400850
|
|
368
|
+
|
|
369
|
+
cacheKey += object.uuid + ',';
|
|
267
370
|
|
|
268
371
|
}
|
|
269
372
|
|
|
270
|
-
return cacheKey;
|
|
373
|
+
return hashString( cacheKey );
|
|
271
374
|
|
|
272
375
|
}
|
|
273
376
|
|
|
274
377
|
get needsUpdate() {
|
|
275
378
|
|
|
276
|
-
return this.initialNodesCacheKey !== this.getDynamicCacheKey() || this.clippingNeedsUpdate;
|
|
379
|
+
return /*this.object.static !== true &&*/ ( this.initialNodesCacheKey !== this.getDynamicCacheKey() || this.clippingNeedsUpdate );
|
|
277
380
|
|
|
278
381
|
}
|
|
279
382
|
|
|
@@ -281,13 +384,21 @@ export default class RenderObject {
|
|
|
281
384
|
|
|
282
385
|
// Environment Nodes Cache Key
|
|
283
386
|
|
|
284
|
-
|
|
387
|
+
let cacheKey = this._nodes.getCacheKey( this.scene, this.lightsNode );
|
|
388
|
+
|
|
389
|
+
if ( this.object.receiveShadow ) {
|
|
390
|
+
|
|
391
|
+
cacheKey += 1;
|
|
392
|
+
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
return cacheKey;
|
|
285
396
|
|
|
286
397
|
}
|
|
287
398
|
|
|
288
399
|
getCacheKey() {
|
|
289
400
|
|
|
290
|
-
return this.getMaterialCacheKey() +
|
|
401
|
+
return this.getMaterialCacheKey() + this.getDynamicCacheKey();
|
|
291
402
|
|
|
292
403
|
}
|
|
293
404
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import ChainMap from './ChainMap.js';
|
|
2
2
|
import RenderObject from './RenderObject.js';
|
|
3
3
|
|
|
4
|
+
const chainArray = [];
|
|
5
|
+
|
|
4
6
|
class RenderObjects {
|
|
5
7
|
|
|
6
8
|
constructor( renderer, nodes, geometries, pipelines, bindings, info ) {
|
|
@@ -19,7 +21,12 @@ class RenderObjects {
|
|
|
19
21
|
get( object, material, scene, camera, lightsNode, renderContext, passId ) {
|
|
20
22
|
|
|
21
23
|
const chainMap = this.getChainMap( passId );
|
|
22
|
-
|
|
24
|
+
|
|
25
|
+
// reuse chainArray
|
|
26
|
+
chainArray[ 0 ] = object;
|
|
27
|
+
chainArray[ 1 ] = material;
|
|
28
|
+
chainArray[ 2 ] = renderContext;
|
|
29
|
+
chainArray[ 3 ] = lightsNode;
|
|
23
30
|
|
|
24
31
|
let renderObject = chainMap.get( chainArray );
|
|
25
32
|
|
|
@@ -22,7 +22,6 @@ import { Scene } from '../../scenes/Scene.js';
|
|
|
22
22
|
import { Frustum } from '../../math/Frustum.js';
|
|
23
23
|
import { Matrix4 } from '../../math/Matrix4.js';
|
|
24
24
|
import { Vector2 } from '../../math/Vector2.js';
|
|
25
|
-
import { Vector3 } from '../../math/Vector3.js';
|
|
26
25
|
import { Vector4 } from '../../math/Vector4.js';
|
|
27
26
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
28
27
|
import { DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping, LinearFilter, LinearSRGBColorSpace, HalfFloatType, RGBAFormat, PCFShadowMap } from '../../constants.js';
|
|
@@ -32,7 +31,7 @@ const _drawingBufferSize = /*@__PURE__*/ new Vector2();
|
|
|
32
31
|
const _screen = /*@__PURE__*/ new Vector4();
|
|
33
32
|
const _frustum = /*@__PURE__*/ new Frustum();
|
|
34
33
|
const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
|
|
35
|
-
const
|
|
34
|
+
const _vector4 = /*@__PURE__*/ new Vector4();
|
|
36
35
|
|
|
37
36
|
class Renderer {
|
|
38
37
|
|
|
@@ -45,6 +44,8 @@ class Renderer {
|
|
|
45
44
|
const {
|
|
46
45
|
logarithmicDepthBuffer = false,
|
|
47
46
|
alpha = true,
|
|
47
|
+
depth = true,
|
|
48
|
+
stencil = false,
|
|
48
49
|
antialias = false,
|
|
49
50
|
samples = 0,
|
|
50
51
|
getFallback = null
|
|
@@ -73,15 +74,17 @@ class Renderer {
|
|
|
73
74
|
|
|
74
75
|
this.sortObjects = true;
|
|
75
76
|
|
|
76
|
-
this.depth =
|
|
77
|
-
this.stencil =
|
|
77
|
+
this.depth = depth;
|
|
78
|
+
this.stencil = stencil;
|
|
78
79
|
|
|
79
80
|
this.clippingPlanes = [];
|
|
80
81
|
|
|
81
82
|
this.info = new Info();
|
|
82
83
|
|
|
83
84
|
this.nodes = {
|
|
84
|
-
library: new NodeLibrary()
|
|
85
|
+
library: new NodeLibrary(),
|
|
86
|
+
modelViewMatrix: null,
|
|
87
|
+
modelNormalViewMatrix: null
|
|
85
88
|
};
|
|
86
89
|
|
|
87
90
|
// internals
|
|
@@ -408,20 +411,21 @@ class Renderer {
|
|
|
408
411
|
|
|
409
412
|
_renderBundle( bundle, sceneRef, lightsNode ) {
|
|
410
413
|
|
|
411
|
-
const {
|
|
414
|
+
const { bundleGroup, camera, renderList } = bundle;
|
|
412
415
|
|
|
413
416
|
const renderContext = this._currentRenderContext;
|
|
414
417
|
|
|
415
418
|
//
|
|
416
419
|
|
|
417
|
-
const renderBundle = this._bundles.get(
|
|
420
|
+
const renderBundle = this._bundles.get( bundleGroup, camera );
|
|
418
421
|
const renderBundleData = this.backend.get( renderBundle );
|
|
419
422
|
|
|
420
423
|
if ( renderBundleData.renderContexts === undefined ) renderBundleData.renderContexts = new Set();
|
|
421
424
|
|
|
422
425
|
//
|
|
423
426
|
|
|
424
|
-
const
|
|
427
|
+
const needsUpdate = bundleGroup.version !== renderBundleData.version;
|
|
428
|
+
const renderBundleNeedsUpdate = renderBundleData.renderContexts.has( renderContext ) === false || needsUpdate;
|
|
425
429
|
|
|
426
430
|
renderBundleData.renderContexts.add( renderContext );
|
|
427
431
|
|
|
@@ -429,7 +433,7 @@ class Renderer {
|
|
|
429
433
|
|
|
430
434
|
this.backend.beginBundle( renderContext );
|
|
431
435
|
|
|
432
|
-
if ( renderBundleData.renderObjects === undefined ||
|
|
436
|
+
if ( renderBundleData.renderObjects === undefined || needsUpdate ) {
|
|
433
437
|
|
|
434
438
|
renderBundleData.renderObjects = [];
|
|
435
439
|
|
|
@@ -447,27 +451,26 @@ class Renderer {
|
|
|
447
451
|
|
|
448
452
|
this.backend.finishBundle( renderContext, renderBundle );
|
|
449
453
|
|
|
450
|
-
|
|
454
|
+
renderBundleData.version = bundleGroup.version;
|
|
451
455
|
|
|
452
456
|
} else {
|
|
453
457
|
|
|
454
|
-
const renderObjects = renderBundleData
|
|
458
|
+
const { renderObjects } = renderBundleData;
|
|
455
459
|
|
|
456
460
|
for ( let i = 0, l = renderObjects.length; i < l; i ++ ) {
|
|
457
461
|
|
|
458
462
|
const renderObject = renderObjects[ i ];
|
|
459
463
|
|
|
460
|
-
this._nodes.
|
|
464
|
+
if ( this._nodes.needsRefresh( renderObject ) ) {
|
|
461
465
|
|
|
462
|
-
|
|
466
|
+
this._nodes.updateBefore( renderObject );
|
|
463
467
|
|
|
464
|
-
|
|
465
|
-
|
|
468
|
+
this._nodes.updateForRender( renderObject );
|
|
469
|
+
this._bindings.updateForRender( renderObject );
|
|
466
470
|
|
|
467
|
-
|
|
468
|
-
this._bindings.updateForRender( renderObject );
|
|
471
|
+
this._nodes.updateAfter( renderObject );
|
|
469
472
|
|
|
470
|
-
|
|
473
|
+
}
|
|
471
474
|
|
|
472
475
|
}
|
|
473
476
|
|
|
@@ -713,10 +716,12 @@ class Renderer {
|
|
|
713
716
|
|
|
714
717
|
// process render lists
|
|
715
718
|
|
|
716
|
-
const
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
719
|
+
const {
|
|
720
|
+
bundles,
|
|
721
|
+
lightsNode,
|
|
722
|
+
transparent: transparentObjects,
|
|
723
|
+
opaque: opaqueObjects
|
|
724
|
+
} = renderList;
|
|
720
725
|
|
|
721
726
|
if ( bundles.length > 0 ) this._renderBundles( bundles, sceneRef, lightsNode );
|
|
722
727
|
if ( this.opaque === true && opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
|
|
@@ -1243,13 +1248,15 @@ class Renderer {
|
|
|
1243
1248
|
|
|
1244
1249
|
}
|
|
1245
1250
|
|
|
1246
|
-
copyFramebufferToTexture( framebufferTexture ) {
|
|
1251
|
+
copyFramebufferToTexture( framebufferTexture, rectangle = null ) {
|
|
1247
1252
|
|
|
1248
1253
|
const renderContext = this._currentRenderContext;
|
|
1249
1254
|
|
|
1250
1255
|
this._textures.updateTexture( framebufferTexture );
|
|
1251
1256
|
|
|
1252
|
-
|
|
1257
|
+
rectangle = rectangle === null ? _vector4.set( 0, 0, framebufferTexture.image.width, framebufferTexture.image.height ) : rectangle;
|
|
1258
|
+
|
|
1259
|
+
this.backend.copyFramebufferToTexture( framebufferTexture, renderContext, rectangle );
|
|
1253
1260
|
|
|
1254
1261
|
}
|
|
1255
1262
|
|
|
@@ -1263,9 +1270,9 @@ class Renderer {
|
|
|
1263
1270
|
}
|
|
1264
1271
|
|
|
1265
1272
|
|
|
1266
|
-
readRenderTargetPixelsAsync( renderTarget, x, y, width, height, index = 0 ) {
|
|
1273
|
+
readRenderTargetPixelsAsync( renderTarget, x, y, width, height, index = 0, faceIndex = 0 ) {
|
|
1267
1274
|
|
|
1268
|
-
return this.backend.copyTextureToBuffer( renderTarget.textures[ index ], x, y, width, height );
|
|
1275
|
+
return this.backend.copyTextureToBuffer( renderTarget.textures[ index ], x, y, width, height, faceIndex );
|
|
1269
1276
|
|
|
1270
1277
|
}
|
|
1271
1278
|
|
|
@@ -1295,16 +1302,15 @@ class Renderer {
|
|
|
1295
1302
|
|
|
1296
1303
|
if ( this.sortObjects === true ) {
|
|
1297
1304
|
|
|
1298
|
-
|
|
1305
|
+
_vector4.setFromMatrixPosition( object.matrixWorld ).applyMatrix4( _projScreenMatrix );
|
|
1299
1306
|
|
|
1300
1307
|
}
|
|
1301
1308
|
|
|
1302
|
-
const geometry = object
|
|
1303
|
-
const material = object.material;
|
|
1309
|
+
const { geometry, material } = object;
|
|
1304
1310
|
|
|
1305
1311
|
if ( material.visible ) {
|
|
1306
1312
|
|
|
1307
|
-
renderList.push( object, geometry, material, groupOrder,
|
|
1313
|
+
renderList.push( object, geometry, material, groupOrder, _vector4.z, null );
|
|
1308
1314
|
|
|
1309
1315
|
}
|
|
1310
1316
|
|
|
@@ -1318,14 +1324,13 @@ class Renderer {
|
|
|
1318
1324
|
|
|
1319
1325
|
if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {
|
|
1320
1326
|
|
|
1321
|
-
const geometry = object
|
|
1322
|
-
const material = object.material;
|
|
1327
|
+
const { geometry, material } = object;
|
|
1323
1328
|
|
|
1324
1329
|
if ( this.sortObjects === true ) {
|
|
1325
1330
|
|
|
1326
1331
|
if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();
|
|
1327
1332
|
|
|
1328
|
-
|
|
1333
|
+
_vector4
|
|
1329
1334
|
.copy( geometry.boundingSphere.center )
|
|
1330
1335
|
.applyMatrix4( object.matrixWorld )
|
|
1331
1336
|
.applyMatrix4( _projScreenMatrix );
|
|
@@ -1343,7 +1348,7 @@ class Renderer {
|
|
|
1343
1348
|
|
|
1344
1349
|
if ( groupMaterial && groupMaterial.visible ) {
|
|
1345
1350
|
|
|
1346
|
-
renderList.push( object, geometry, groupMaterial, groupOrder,
|
|
1351
|
+
renderList.push( object, geometry, groupMaterial, groupOrder, _vector4.z, group );
|
|
1347
1352
|
|
|
1348
1353
|
}
|
|
1349
1354
|
|
|
@@ -1351,7 +1356,7 @@ class Renderer {
|
|
|
1351
1356
|
|
|
1352
1357
|
} else if ( material.visible ) {
|
|
1353
1358
|
|
|
1354
|
-
renderList.push( object, geometry, material, groupOrder,
|
|
1359
|
+
renderList.push( object, geometry, material, groupOrder, _vector4.z, null );
|
|
1355
1360
|
|
|
1356
1361
|
}
|
|
1357
1362
|
|
|
@@ -1361,7 +1366,7 @@ class Renderer {
|
|
|
1361
1366
|
|
|
1362
1367
|
}
|
|
1363
1368
|
|
|
1364
|
-
if ( object.
|
|
1369
|
+
if ( object.isBundleGroup === true && this.backend.beginBundle !== undefined ) {
|
|
1365
1370
|
|
|
1366
1371
|
const baseRenderList = renderList;
|
|
1367
1372
|
|
|
@@ -1371,7 +1376,7 @@ class Renderer {
|
|
|
1371
1376
|
renderList.begin();
|
|
1372
1377
|
|
|
1373
1378
|
baseRenderList.pushBundle( {
|
|
1374
|
-
object,
|
|
1379
|
+
bundleGroup: object,
|
|
1375
1380
|
camera,
|
|
1376
1381
|
renderList,
|
|
1377
1382
|
} );
|
|
@@ -1571,22 +1576,24 @@ class Renderer {
|
|
|
1571
1576
|
_renderObjectDirect( object, material, scene, camera, lightsNode, group, passId ) {
|
|
1572
1577
|
|
|
1573
1578
|
const renderObject = this._objects.get( object, material, scene, camera, lightsNode, this._currentRenderContext, passId );
|
|
1574
|
-
renderObject.drawRange =
|
|
1579
|
+
renderObject.drawRange = object.geometry.drawRange;
|
|
1580
|
+
renderObject.group = group;
|
|
1575
1581
|
|
|
1576
1582
|
//
|
|
1577
1583
|
|
|
1578
|
-
this._nodes.
|
|
1584
|
+
const needsRefresh = this._nodes.needsRefresh( renderObject );
|
|
1579
1585
|
|
|
1580
|
-
|
|
1586
|
+
if ( needsRefresh ) {
|
|
1581
1587
|
|
|
1582
|
-
|
|
1583
|
-
object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
|
|
1588
|
+
this._nodes.updateBefore( renderObject );
|
|
1584
1589
|
|
|
1585
|
-
|
|
1590
|
+
this._geometries.updateForRender( renderObject );
|
|
1591
|
+
|
|
1592
|
+
this._nodes.updateForRender( renderObject );
|
|
1593
|
+
this._bindings.updateForRender( renderObject );
|
|
1594
|
+
|
|
1595
|
+
}
|
|
1586
1596
|
|
|
1587
|
-
this._nodes.updateForRender( renderObject );
|
|
1588
|
-
this._geometries.updateForRender( renderObject );
|
|
1589
|
-
this._bindings.updateForRender( renderObject );
|
|
1590
1597
|
this._pipelines.updateForRender( renderObject );
|
|
1591
1598
|
|
|
1592
1599
|
//
|
|
@@ -1597,11 +1604,13 @@ class Renderer {
|
|
|
1597
1604
|
|
|
1598
1605
|
renderBundleData.renderObjects.push( renderObject );
|
|
1599
1606
|
|
|
1607
|
+
renderObject.bundle = this._currentRenderBundle.scene;
|
|
1608
|
+
|
|
1600
1609
|
}
|
|
1601
1610
|
|
|
1602
1611
|
this.backend.draw( renderObject, this.info );
|
|
1603
1612
|
|
|
1604
|
-
this._nodes.updateAfter( renderObject );
|
|
1613
|
+
if ( needsRefresh ) this._nodes.updateAfter( renderObject );
|
|
1605
1614
|
|
|
1606
1615
|
}
|
|
1607
1616
|
|
|
@@ -1613,10 +1622,9 @@ class Renderer {
|
|
|
1613
1622
|
|
|
1614
1623
|
this._nodes.updateBefore( renderObject );
|
|
1615
1624
|
|
|
1616
|
-
|
|
1625
|
+
this._geometries.updateForRender( renderObject );
|
|
1617
1626
|
|
|
1618
1627
|
this._nodes.updateForRender( renderObject );
|
|
1619
|
-
this._geometries.updateForRender( renderObject );
|
|
1620
1628
|
this._bindings.updateForRender( renderObject );
|
|
1621
1629
|
|
|
1622
1630
|
this._pipelines.getForRender( renderObject, this._compilationPromises );
|
|
@@ -176,12 +176,12 @@ class PMREMGenerator {
|
|
|
176
176
|
* Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during
|
|
177
177
|
* your texture's network fetch for increased concurrency.
|
|
178
178
|
*/
|
|
179
|
-
compileCubemapShader() {
|
|
179
|
+
async compileCubemapShader() {
|
|
180
180
|
|
|
181
181
|
if ( this._cubemapMaterial === null ) {
|
|
182
182
|
|
|
183
183
|
this._cubemapMaterial = _getCubemapMaterial();
|
|
184
|
-
this._compileMaterial( this._cubemapMaterial );
|
|
184
|
+
await this._compileMaterial( this._cubemapMaterial );
|
|
185
185
|
|
|
186
186
|
}
|
|
187
187
|
|
|
@@ -191,12 +191,12 @@ class PMREMGenerator {
|
|
|
191
191
|
* Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during
|
|
192
192
|
* your texture's network fetch for increased concurrency.
|
|
193
193
|
*/
|
|
194
|
-
compileEquirectangularShader() {
|
|
194
|
+
async compileEquirectangularShader() {
|
|
195
195
|
|
|
196
196
|
if ( this._equirectMaterial === null ) {
|
|
197
197
|
|
|
198
198
|
this._equirectMaterial = _getEquirectMaterial();
|
|
199
|
-
this._compileMaterial( this._equirectMaterial );
|
|
199
|
+
await this._compileMaterial( this._equirectMaterial );
|
|
200
200
|
|
|
201
201
|
}
|
|
202
202
|
|
|
@@ -316,12 +316,10 @@ class PMREMGenerator {
|
|
|
316
316
|
|
|
317
317
|
}
|
|
318
318
|
|
|
319
|
-
_compileMaterial( material ) {
|
|
319
|
+
async _compileMaterial( material ) {
|
|
320
320
|
|
|
321
|
-
const tmpMesh = this.
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
this._renderer.compile( tmpMesh, _flatCamera );
|
|
321
|
+
const tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );
|
|
322
|
+
await this._renderer.compile( tmpMesh, _flatCamera );
|
|
325
323
|
|
|
326
324
|
}
|
|
327
325
|
|
|
@@ -2,7 +2,7 @@ import BindGroup from '../BindGroup.js';
|
|
|
2
2
|
|
|
3
3
|
class NodeBuilderState {
|
|
4
4
|
|
|
5
|
-
constructor( vertexShader, fragmentShader, computeShader, nodeAttributes, bindings, updateNodes, updateBeforeNodes, updateAfterNodes,
|
|
5
|
+
constructor( vertexShader, fragmentShader, computeShader, nodeAttributes, bindings, updateNodes, updateBeforeNodes, updateAfterNodes, monitor, transforms = [] ) {
|
|
6
6
|
|
|
7
7
|
this.vertexShader = vertexShader;
|
|
8
8
|
this.fragmentShader = fragmentShader;
|
|
@@ -16,7 +16,7 @@ class NodeBuilderState {
|
|
|
16
16
|
this.updateBeforeNodes = updateBeforeNodes;
|
|
17
17
|
this.updateAfterNodes = updateAfterNodes;
|
|
18
18
|
|
|
19
|
-
this.
|
|
19
|
+
this.monitor = monitor;
|
|
20
20
|
|
|
21
21
|
this.usedTimes = 0;
|
|
22
22
|
|
|
@@ -28,7 +28,7 @@ class NodeBuilderState {
|
|
|
28
28
|
|
|
29
29
|
for ( const instanceGroup of this.bindings ) {
|
|
30
30
|
|
|
31
|
-
const shared =
|
|
31
|
+
const shared = instanceGroup.bindings[ 0 ].groupNode.shared;
|
|
32
32
|
|
|
33
33
|
if ( shared !== true ) {
|
|
34
34
|
|