super-three 0.160.1 → 0.162.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 +867 -499
- package/build/three.module.js +867 -496
- 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/DragControls.js +91 -30
- package/examples/jsm/controls/OrbitControls.js +130 -15
- package/examples/jsm/controls/TransformControls.js +6 -6
- package/examples/jsm/curves/NURBSUtils.js +59 -4
- package/examples/jsm/curves/NURBSVolume.js +62 -0
- package/examples/jsm/exporters/GLTFExporter.js +11 -1
- package/examples/jsm/exporters/USDZExporter.js +8 -7
- package/examples/jsm/helpers/TextureHelper.js +3 -3
- package/examples/jsm/interactive/InteractiveGroup.js +15 -25
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +1 -8723
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +1 -8734
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/libs/tween.module.js +32 -14
- package/examples/jsm/loaders/3DMLoader.js +57 -64
- 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/VOXLoader.js +9 -2
- package/examples/jsm/loaders/VRMLLoader.js +7 -3
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +144 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +1 -0
- package/examples/jsm/misc/Timer.js +13 -4
- package/examples/jsm/nodes/Nodes.js +24 -11
- package/examples/jsm/nodes/accessors/AccessorsUtils.js +10 -0
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +5 -3
- package/examples/jsm/nodes/accessors/CameraNode.js +9 -4
- package/examples/jsm/nodes/accessors/ClippingNode.js +144 -0
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +12 -1
- package/examples/jsm/nodes/accessors/MaterialNode.js +2 -2
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +2 -12
- package/examples/jsm/nodes/accessors/MorphNode.js +8 -8
- package/examples/jsm/nodes/accessors/ReferenceNode.js +87 -29
- package/examples/jsm/nodes/accessors/SkinningNode.js +31 -10
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +45 -0
- package/examples/jsm/nodes/accessors/TangentNode.js +8 -2
- package/examples/jsm/nodes/accessors/TextureNode.js +1 -1
- package/examples/jsm/nodes/accessors/TextureStoreNode.js +56 -3
- package/examples/jsm/nodes/accessors/UniformsNode.js +140 -0
- package/examples/jsm/nodes/accessors/VertexColorNode.js +70 -0
- package/examples/jsm/nodes/code/CodeNode.js +6 -0
- package/examples/jsm/nodes/core/AssignNode.js +68 -12
- package/examples/jsm/nodes/core/AttributeNode.js +1 -1
- package/examples/jsm/nodes/core/Node.js +14 -4
- package/examples/jsm/nodes/core/NodeBuilder.js +26 -27
- package/examples/jsm/nodes/core/NodeFrame.js +18 -10
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- 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/BlendModeNode.js +30 -1
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +3 -0
- package/examples/jsm/nodes/display/GaussianBlurNode.js +33 -13
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -5
- 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 +43 -10
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +1 -7
- package/examples/jsm/nodes/math/CondNode.js +42 -7
- package/examples/jsm/nodes/math/MathNode.js +32 -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/JoinNode.js +2 -2
- package/examples/jsm/nodes/utils/LoopNode.js +5 -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/nodes/utils/StorageArrayElementNode.js +91 -0
- 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/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/renderers/common/Backend.js +14 -0
- package/examples/jsm/renderers/common/Background.js +2 -2
- package/examples/jsm/renderers/common/Bindings.js +1 -1
- package/examples/jsm/renderers/common/ClippingContext.js +165 -0
- 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/RenderContext.js +2 -0
- package/examples/jsm/renderers/common/RenderContexts.js +2 -13
- package/examples/jsm/renderers/common/RenderObject.js +46 -1
- package/examples/jsm/renderers/common/RenderObjects.js +3 -1
- package/examples/jsm/renderers/common/Renderer.js +290 -17
- package/examples/jsm/renderers/common/StorageBufferAttribute.js +17 -0
- package/examples/jsm/renderers/common/StorageInstancedBufferAttribute.js +17 -0
- package/examples/jsm/renderers/common/Textures.js +28 -18
- package/examples/jsm/renderers/common/UniformsGroup.js +6 -4
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +2 -1
- package/examples/jsm/renderers/common/nodes/NodeStorageBuffer.js +23 -0
- package/examples/jsm/renderers/common/nodes/NodeUniformBuffer.js +23 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +5 -2
- package/examples/jsm/renderers/webgl/WebGLBackend.js +653 -272
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +171 -39
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +95 -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 +424 -11
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +3 -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 +300 -112
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +7 -2
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +71 -79
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +87 -14
- package/examples/jsm/shaders/OutputShader.js +4 -0
- 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/SkeletonUtils.js +14 -3
- package/examples/jsm/utils/SortUtils.js +2 -0
- package/examples/jsm/webxr/ARButton.js +12 -2
- package/examples/jsm/webxr/VRButton.js +25 -7
- package/examples/jsm/webxr/XRButton.js +12 -3
- package/examples/jsm/webxr/XRControllerModelFactory.js +14 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +3 -1
- package/package.json +5 -4
- package/src/Three.Legacy.js +20 -0
- package/src/Three.js +0 -1
- package/src/audio/Audio.js +1 -3
- package/src/cameras/PerspectiveCamera.js +35 -0
- package/src/constants.js +2 -6
- package/src/core/BufferAttribute.js +2 -12
- package/src/core/BufferGeometry.js +23 -29
- package/src/core/InterleavedBuffer.js +2 -1
- package/src/core/InterleavedBufferAttribute.js +20 -0
- package/src/core/Object3D.js +11 -0
- package/src/core/Raycaster.js +18 -4
- package/src/core/RenderTarget.js +44 -21
- package/src/extras/PMREMGenerator.js +2 -0
- package/src/extras/curves/EllipseCurve.js +2 -2
- package/src/helpers/SpotLightHelper.js +18 -1
- package/src/loaders/DataTextureLoader.js +0 -4
- package/src/loaders/MaterialLoader.js +1 -0
- package/src/loaders/ObjectLoader.js +2 -1
- package/src/materials/Material.js +2 -1
- package/src/materials/MeshBasicMaterial.js +3 -0
- package/src/materials/MeshLambertMaterial.js +3 -0
- package/src/materials/MeshPhongMaterial.js +3 -0
- package/src/materials/MeshStandardMaterial.js +3 -0
- package/src/materials/ShaderMaterial.js +2 -1
- package/src/math/Quaternion.js +13 -12
- package/src/math/Triangle.js +0 -30
- package/src/math/Vector3.js +7 -7
- package/src/objects/BatchedMesh.js +6 -7
- package/src/objects/InstancedMesh.js +53 -0
- package/src/objects/Mesh.js +0 -1
- package/src/objects/SkinnedMesh.js +0 -8
- package/src/renderers/WebGLCubeRenderTarget.js +1 -10
- package/src/renderers/WebGLRenderer.js +20 -23
- 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/envmap_common_pars_fragment.glsl.js +1 -0
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +14 -0
- package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +11 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +38 -7
- package/src/renderers/shaders/ShaderChunk.js +2 -0
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +3 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -2
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +3 -2
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +2 -2
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +4 -1
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/points.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib.js +2 -1
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/webgl/WebGLAttributes.js +2 -2
- package/src/renderers/webgl/WebGLBackground.js +18 -0
- package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -1
- package/src/renderers/webgl/WebGLMorphtargets.js +15 -8
- package/src/renderers/webgl/WebGLProgram.js +42 -4
- package/src/renderers/webgl/WebGLPrograms.js +38 -27
- package/src/renderers/webgl/WebGLState.js +11 -21
- package/src/renderers/webgl/WebGLTextures.js +170 -66
- package/src/renderers/webxr/WebXRDepthSensing.js +105 -0
- package/src/renderers/webxr/WebXRManager.js +46 -0
- package/src/scenes/Scene.js +8 -0
- package/src/textures/Source.js +1 -0
- package/src/textures/Texture.js +1 -29
- package/build/three.js +0 -54519
- package/build/three.min.js +0 -7
- package/examples/jsm/nodes/core/ArrayUniformNode.js +0 -26
- package/examples/jsm/objects/GroundProjectedSkybox.js +0 -172
- package/src/renderers/WebGLMultipleRenderTargets.js +0 -82
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { Matrix3, Plane, Vector4 } from 'three';
|
|
2
|
+
|
|
3
|
+
const _plane = new Plane();
|
|
4
|
+
const _viewNormalMatrix = new Matrix3();
|
|
5
|
+
|
|
6
|
+
let _clippingContextVersion = 0;
|
|
7
|
+
|
|
8
|
+
class ClippingContext {
|
|
9
|
+
|
|
10
|
+
constructor() {
|
|
11
|
+
|
|
12
|
+
this.version = ++ _clippingContextVersion;
|
|
13
|
+
|
|
14
|
+
this.globalClippingCount = 0;
|
|
15
|
+
|
|
16
|
+
this.localClippingCount = 0;
|
|
17
|
+
this.localClippingEnabled = false;
|
|
18
|
+
this.localClipIntersection = false;
|
|
19
|
+
|
|
20
|
+
this.planes = [];
|
|
21
|
+
|
|
22
|
+
this.parentVersion = 0;
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
projectPlanes( source, offset ) {
|
|
27
|
+
|
|
28
|
+
const l = source.length;
|
|
29
|
+
const planes = this.planes;
|
|
30
|
+
|
|
31
|
+
for ( let i = 0; i < l; i ++ ) {
|
|
32
|
+
|
|
33
|
+
_plane.copy( source[ i ] ).applyMatrix4( this.viewMatrix, _viewNormalMatrix );
|
|
34
|
+
|
|
35
|
+
const v = planes[ offset + i ];
|
|
36
|
+
const normal = _plane.normal;
|
|
37
|
+
|
|
38
|
+
v.x = - normal.x;
|
|
39
|
+
v.y = - normal.y;
|
|
40
|
+
v.z = - normal.z;
|
|
41
|
+
v.w = _plane.constant;
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
updateGlobal( renderer, camera ) {
|
|
48
|
+
|
|
49
|
+
const rendererClippingPlanes = renderer.clippingPlanes;
|
|
50
|
+
this.viewMatrix = camera.matrixWorldInverse;
|
|
51
|
+
|
|
52
|
+
_viewNormalMatrix.getNormalMatrix( this.viewMatrix );
|
|
53
|
+
|
|
54
|
+
let update = false;
|
|
55
|
+
|
|
56
|
+
if ( Array.isArray( rendererClippingPlanes ) && rendererClippingPlanes.length !== 0 ) {
|
|
57
|
+
|
|
58
|
+
const l = rendererClippingPlanes.length;
|
|
59
|
+
|
|
60
|
+
if ( l !== this.globalClippingCount ) {
|
|
61
|
+
|
|
62
|
+
const planes = [];
|
|
63
|
+
|
|
64
|
+
for ( let i = 0; i < l; i ++ ) {
|
|
65
|
+
|
|
66
|
+
planes.push( new Vector4() );
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
this.globalClippingCount = l;
|
|
71
|
+
this.planes = planes;
|
|
72
|
+
|
|
73
|
+
update = true;
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
this.projectPlanes( rendererClippingPlanes, 0 );
|
|
78
|
+
|
|
79
|
+
} else if ( this.globalClippingCount !== 0 ) {
|
|
80
|
+
|
|
81
|
+
this.globalClippingCount = 0;
|
|
82
|
+
this.planes = [];
|
|
83
|
+
update = true;
|
|
84
|
+
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if ( renderer.localClippingEnabled !== this.localClippingEnabled ) {
|
|
88
|
+
|
|
89
|
+
this.localClippingEnabled = renderer.localClippingEnabled;
|
|
90
|
+
update = true;
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if ( update ) this.version = _clippingContextVersion ++;
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
update( parent, material ) {
|
|
99
|
+
|
|
100
|
+
let update = false;
|
|
101
|
+
|
|
102
|
+
if ( this !== parent && parent.version !== this.parentVersion ) {
|
|
103
|
+
|
|
104
|
+
this.globalClippingCount = material.isShadowNodeMaterial ? 0 : parent.globalClippingCount;
|
|
105
|
+
this.localClippingEnabled = parent.localClippingEnabled;
|
|
106
|
+
this.planes = Array.from( parent.planes );
|
|
107
|
+
this.parentVersion = parent.version;
|
|
108
|
+
this.viewMatrix = parent.viewMatrix;
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
update = true;
|
|
112
|
+
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if ( this.localClippingEnabled ) {
|
|
116
|
+
|
|
117
|
+
const localClippingPlanes = material.clippingPlanes;
|
|
118
|
+
|
|
119
|
+
if ( ( Array.isArray( localClippingPlanes ) && localClippingPlanes.length !== 0 ) ) {
|
|
120
|
+
|
|
121
|
+
const l = localClippingPlanes.length;
|
|
122
|
+
const planes = this.planes;
|
|
123
|
+
const offset = this.globalClippingCount;
|
|
124
|
+
|
|
125
|
+
if ( update || l !== this.localClippingCount ) {
|
|
126
|
+
|
|
127
|
+
planes.length = offset + l;
|
|
128
|
+
|
|
129
|
+
for ( let i = 0; i < l; i ++ ) {
|
|
130
|
+
|
|
131
|
+
planes[ offset + i ] = new Vector4();
|
|
132
|
+
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
this.localClippingCount = l;
|
|
136
|
+
update = true;
|
|
137
|
+
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
this.projectPlanes( localClippingPlanes, offset );
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
} else if ( this.localClippingCount !== 0 ) {
|
|
144
|
+
|
|
145
|
+
this.localClippingCount = 0;
|
|
146
|
+
update = true;
|
|
147
|
+
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if ( this.localClipIntersection !== material.clipIntersection ) {
|
|
151
|
+
|
|
152
|
+
this.localClipIntersection = material.clipIntersection;
|
|
153
|
+
update = true;
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if ( update ) this.version = _clippingContextVersion ++;
|
|
160
|
+
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export default ClippingContext;
|
|
@@ -16,7 +16,8 @@ class Info {
|
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
this.compute = {
|
|
19
|
-
calls: 0
|
|
19
|
+
calls: 0,
|
|
20
|
+
computeCalls: 0
|
|
20
21
|
};
|
|
21
22
|
|
|
22
23
|
this.memory = {
|
|
@@ -24,6 +25,11 @@ class Info {
|
|
|
24
25
|
textures: 0
|
|
25
26
|
};
|
|
26
27
|
|
|
28
|
+
this.timestamp = {
|
|
29
|
+
compute: 0,
|
|
30
|
+
render: 0
|
|
31
|
+
};
|
|
32
|
+
|
|
27
33
|
}
|
|
28
34
|
|
|
29
35
|
update( object, count, instanceCount ) {
|
|
@@ -54,6 +60,20 @@ class Info {
|
|
|
54
60
|
|
|
55
61
|
}
|
|
56
62
|
|
|
63
|
+
updateTimestamp( type, time ) {
|
|
64
|
+
|
|
65
|
+
this.timestamp[ type ] += time;
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
resetCompute() {
|
|
70
|
+
|
|
71
|
+
this.compute.computeCalls = 0;
|
|
72
|
+
|
|
73
|
+
this.timestamp.compute = 0;
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
57
77
|
reset() {
|
|
58
78
|
|
|
59
79
|
this.render.drawCalls = 0;
|
|
@@ -61,6 +81,8 @@ class Info {
|
|
|
61
81
|
this.render.points = 0;
|
|
62
82
|
this.render.lines = 0;
|
|
63
83
|
|
|
84
|
+
this.timestamp.render = 0;
|
|
85
|
+
|
|
64
86
|
}
|
|
65
87
|
|
|
66
88
|
dispose() {
|
|
@@ -72,6 +94,8 @@ class Info {
|
|
|
72
94
|
this.render.calls = 0;
|
|
73
95
|
this.compute.calls = 0;
|
|
74
96
|
|
|
97
|
+
this.timestamp.compute = 0;
|
|
98
|
+
this.timestamp.render = 0;
|
|
75
99
|
this.memory.geometries = 0;
|
|
76
100
|
this.memory.textures = 0;
|
|
77
101
|
|
|
@@ -42,18 +42,18 @@ class Pipelines extends DataMap {
|
|
|
42
42
|
|
|
43
43
|
// get shader
|
|
44
44
|
|
|
45
|
-
const
|
|
45
|
+
const nodeBuilderState = this.nodes.getForCompute( computeNode );
|
|
46
46
|
|
|
47
47
|
// programmable stage
|
|
48
48
|
|
|
49
|
-
let stageCompute = this.programs.compute.get(
|
|
49
|
+
let stageCompute = this.programs.compute.get( nodeBuilderState.computeShader );
|
|
50
50
|
|
|
51
51
|
if ( stageCompute === undefined ) {
|
|
52
52
|
|
|
53
53
|
if ( previousPipeline && previousPipeline.computeProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.computeProgram );
|
|
54
54
|
|
|
55
|
-
stageCompute = new ProgrammableStage(
|
|
56
|
-
this.programs.compute.set(
|
|
55
|
+
stageCompute = new ProgrammableStage( nodeBuilderState.computeShader, 'compute', nodeBuilderState.transforms, nodeBuilderState.nodeAttributes );
|
|
56
|
+
this.programs.compute.set( nodeBuilderState.computeShader, stageCompute );
|
|
57
57
|
|
|
58
58
|
backend.createProgram( stageCompute );
|
|
59
59
|
|
|
@@ -89,7 +89,7 @@ class Pipelines extends DataMap {
|
|
|
89
89
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
getForRender( renderObject ) {
|
|
92
|
+
getForRender( renderObject, promises = null ) {
|
|
93
93
|
|
|
94
94
|
const { backend } = this;
|
|
95
95
|
|
|
@@ -149,7 +149,7 @@ class Pipelines extends DataMap {
|
|
|
149
149
|
|
|
150
150
|
if ( previousPipeline && previousPipeline.usedTimes === 0 ) this._releasePipeline( previousPipeline );
|
|
151
151
|
|
|
152
|
-
pipeline = this._getRenderPipeline( renderObject, stageVertex, stageFragment, cacheKey );
|
|
152
|
+
pipeline = this._getRenderPipeline( renderObject, stageVertex, stageFragment, cacheKey, promises );
|
|
153
153
|
|
|
154
154
|
} else {
|
|
155
155
|
|
|
@@ -250,7 +250,7 @@ class Pipelines extends DataMap {
|
|
|
250
250
|
|
|
251
251
|
}
|
|
252
252
|
|
|
253
|
-
_getRenderPipeline( renderObject, stageVertex, stageFragment, cacheKey ) {
|
|
253
|
+
_getRenderPipeline( renderObject, stageVertex, stageFragment, cacheKey, promises ) {
|
|
254
254
|
|
|
255
255
|
// check for existing pipeline
|
|
256
256
|
|
|
@@ -266,7 +266,7 @@ class Pipelines extends DataMap {
|
|
|
266
266
|
|
|
267
267
|
renderObject.pipeline = pipeline;
|
|
268
268
|
|
|
269
|
-
this.backend.createRenderPipeline( renderObject );
|
|
269
|
+
this.backend.createRenderPipeline( renderObject, promises );
|
|
270
270
|
|
|
271
271
|
}
|
|
272
272
|
|
|
@@ -2,12 +2,14 @@ let _id = 0;
|
|
|
2
2
|
|
|
3
3
|
class ProgrammableStage {
|
|
4
4
|
|
|
5
|
-
constructor( code, type ) {
|
|
5
|
+
constructor( code, type, transforms = null, attributes = null ) {
|
|
6
6
|
|
|
7
7
|
this.id = _id ++;
|
|
8
8
|
|
|
9
9
|
this.code = code;
|
|
10
10
|
this.stage = type;
|
|
11
|
+
this.transforms = transforms;
|
|
12
|
+
this.attributes = attributes;
|
|
11
13
|
|
|
12
14
|
this.usedTimes = 0;
|
|
13
15
|
|
|
@@ -21,19 +21,8 @@ class RenderContexts {
|
|
|
21
21
|
|
|
22
22
|
} else {
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if ( renderTarget.isWebGLMultipleRenderTargets ) {
|
|
27
|
-
|
|
28
|
-
format = renderTarget.texture[ 0 ].format;
|
|
29
|
-
count = renderTarget.texture.length;
|
|
30
|
-
|
|
31
|
-
} else {
|
|
32
|
-
|
|
33
|
-
format = renderTarget.texture.format;
|
|
34
|
-
count = 1;
|
|
35
|
-
|
|
36
|
-
}
|
|
24
|
+
const format = renderTarget.texture.format;
|
|
25
|
+
const count = renderTarget.count;
|
|
37
26
|
|
|
38
27
|
attachmentState = `${ count }:${ format }:${ renderTarget.samples }:${ renderTarget.depthBuffer }:${ renderTarget.stencilBuffer }`;
|
|
39
28
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import ClippingContext from "./ClippingContext.js";
|
|
2
|
+
|
|
1
3
|
let id = 0;
|
|
2
4
|
|
|
3
5
|
export default class RenderObject {
|
|
@@ -24,6 +26,10 @@ export default class RenderObject {
|
|
|
24
26
|
this.pipeline = null;
|
|
25
27
|
this.vertexBuffers = null;
|
|
26
28
|
|
|
29
|
+
this.updateClipping( renderContext.clippingContext );
|
|
30
|
+
|
|
31
|
+
this.clippingContextVersion = this.clippingContext.version;
|
|
32
|
+
|
|
27
33
|
this.initialNodesCacheKey = this.getNodesCacheKey();
|
|
28
34
|
this.initialCacheKey = this.getCacheKey();
|
|
29
35
|
|
|
@@ -44,6 +50,41 @@ export default class RenderObject {
|
|
|
44
50
|
|
|
45
51
|
}
|
|
46
52
|
|
|
53
|
+
updateClipping( parent ) {
|
|
54
|
+
|
|
55
|
+
const material = this.material;
|
|
56
|
+
|
|
57
|
+
let clippingContext = this.clippingContext;
|
|
58
|
+
|
|
59
|
+
if ( Array.isArray( material.clippingPlanes ) ) {
|
|
60
|
+
|
|
61
|
+
if ( clippingContext === parent || ! clippingContext ) {
|
|
62
|
+
|
|
63
|
+
clippingContext = new ClippingContext();
|
|
64
|
+
this.clippingContext = clippingContext;
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
clippingContext.update( parent, material );
|
|
69
|
+
|
|
70
|
+
} else if ( this.clippingContext !== parent ) {
|
|
71
|
+
|
|
72
|
+
this.clippingContext = parent;
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
clippingNeedsUpdate () {
|
|
79
|
+
|
|
80
|
+
if ( this.clippingContext.version === this.clippingContextVersion ) return false;
|
|
81
|
+
|
|
82
|
+
this.clippingContextVersion = this.clippingContext.version;
|
|
83
|
+
|
|
84
|
+
return true;
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
47
88
|
getNodeBuilderState() {
|
|
48
89
|
|
|
49
90
|
return this._nodeBuilderState || ( this._nodeBuilderState = this._nodes.getForRender( this ) );
|
|
@@ -82,6 +123,8 @@ export default class RenderObject {
|
|
|
82
123
|
|
|
83
124
|
const attribute = nodeAttribute.node && nodeAttribute.node.attribute ? nodeAttribute.node.attribute : geometry.getAttribute( nodeAttribute.name );
|
|
84
125
|
|
|
126
|
+
if ( attribute === undefined ) continue;
|
|
127
|
+
|
|
85
128
|
attributes.push( attribute );
|
|
86
129
|
|
|
87
130
|
const bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute;
|
|
@@ -129,9 +172,11 @@ export default class RenderObject {
|
|
|
129
172
|
|
|
130
173
|
}
|
|
131
174
|
|
|
175
|
+
cacheKey += this.clippingContextVersion + ',';
|
|
176
|
+
|
|
132
177
|
if ( object.skeleton ) {
|
|
133
178
|
|
|
134
|
-
cacheKey += object.skeleton.
|
|
179
|
+
cacheKey += object.skeleton.bones.length + ',';
|
|
135
180
|
|
|
136
181
|
}
|
|
137
182
|
|
|
@@ -31,7 +31,9 @@ class RenderObjects {
|
|
|
31
31
|
|
|
32
32
|
} else {
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
renderObject.updateClipping( renderContext.clippingContext );
|
|
35
|
+
|
|
36
|
+
if ( renderObject.version !== material.version || renderObject.needsUpdate || renderObject.clippingNeedsUpdate() ) {
|
|
35
37
|
|
|
36
38
|
if ( renderObject.initialCacheKey !== renderObject.getCacheKey() ) {
|
|
37
39
|
|