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
|
@@ -11,6 +11,7 @@ import Textures from './Textures.js';
|
|
|
11
11
|
import Background from './Background.js';
|
|
12
12
|
import Nodes from './nodes/Nodes.js';
|
|
13
13
|
import Color4 from './Color4.js';
|
|
14
|
+
import ClippingContext from './ClippingContext.js';
|
|
14
15
|
import { Scene, Frustum, Matrix4, Vector2, Vector3, Vector4, DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping } from 'three';
|
|
15
16
|
|
|
16
17
|
const _scene = new Scene();
|
|
@@ -30,6 +31,7 @@ class Renderer {
|
|
|
30
31
|
|
|
31
32
|
const {
|
|
32
33
|
logarithmicDepthBuffer = false,
|
|
34
|
+
alpha = true
|
|
33
35
|
} = parameters;
|
|
34
36
|
|
|
35
37
|
// public
|
|
@@ -43,6 +45,8 @@ class Renderer {
|
|
|
43
45
|
this.autoClearDepth = true;
|
|
44
46
|
this.autoClearStencil = true;
|
|
45
47
|
|
|
48
|
+
this.alpha = alpha;
|
|
49
|
+
|
|
46
50
|
this.logarithmicDepthBuffer = logarithmicDepthBuffer;
|
|
47
51
|
|
|
48
52
|
this.outputColorSpace = SRGBColorSpace;
|
|
@@ -55,6 +59,8 @@ class Renderer {
|
|
|
55
59
|
this.depth = true;
|
|
56
60
|
this.stencil = true;
|
|
57
61
|
|
|
62
|
+
this.clippingPlanes = [];
|
|
63
|
+
|
|
58
64
|
this.info = new Info();
|
|
59
65
|
|
|
60
66
|
// internals
|
|
@@ -67,7 +73,6 @@ class Renderer {
|
|
|
67
73
|
this._scissor = new Vector4( 0, 0, this._width, this._height );
|
|
68
74
|
this._scissorTest = false;
|
|
69
75
|
|
|
70
|
-
this._properties = null;
|
|
71
76
|
this._attributes = null;
|
|
72
77
|
this._geometries = null;
|
|
73
78
|
this._nodes = null;
|
|
@@ -85,7 +90,10 @@ class Renderer {
|
|
|
85
90
|
this._opaqueSort = null;
|
|
86
91
|
this._transparentSort = null;
|
|
87
92
|
|
|
88
|
-
|
|
93
|
+
|
|
94
|
+
const alphaClear = this.alpha === true ? 0 : 1;
|
|
95
|
+
|
|
96
|
+
this._clearColor = new Color4( 0, 0, 0, alphaClear );
|
|
89
97
|
this._clearDepth = 1;
|
|
90
98
|
this._clearStencil = 0;
|
|
91
99
|
|
|
@@ -96,9 +104,13 @@ class Renderer {
|
|
|
96
104
|
this._renderObjectFunction = null;
|
|
97
105
|
this._currentRenderObjectFunction = null;
|
|
98
106
|
|
|
107
|
+
this._handleObjectFunction = this._renderObjectDirect;
|
|
108
|
+
|
|
99
109
|
this._initialized = false;
|
|
100
110
|
this._initPromise = null;
|
|
101
111
|
|
|
112
|
+
this._compilationPromises = null;
|
|
113
|
+
|
|
102
114
|
// backwards compatibility
|
|
103
115
|
|
|
104
116
|
this.shadowMap = {
|
|
@@ -146,7 +158,7 @@ class Renderer {
|
|
|
146
158
|
this._attributes = new Attributes( backend );
|
|
147
159
|
this._background = new Background( this, this._nodes );
|
|
148
160
|
this._geometries = new Geometries( this._attributes, this.info );
|
|
149
|
-
this._textures = new Textures( backend, this.info );
|
|
161
|
+
this._textures = new Textures( this, backend, this.info );
|
|
150
162
|
this._pipelines = new Pipelines( backend, this._nodes );
|
|
151
163
|
this._bindings = new Bindings( backend, this._nodes, this._textures, this._attributes, this._pipelines, this.info );
|
|
152
164
|
this._objects = new RenderObjects( this, this._nodes, this._geometries, this._pipelines, this._bindings, this.info );
|
|
@@ -171,16 +183,156 @@ class Renderer {
|
|
|
171
183
|
|
|
172
184
|
}
|
|
173
185
|
|
|
174
|
-
async
|
|
186
|
+
async compileAsync( scene, camera, targetScene = null ) {
|
|
187
|
+
|
|
188
|
+
if ( this._initialized === false ) await this.init();
|
|
189
|
+
|
|
190
|
+
// preserve render tree
|
|
191
|
+
|
|
192
|
+
const nodeFrame = this._nodes.nodeFrame;
|
|
193
|
+
|
|
194
|
+
const previousRenderId = nodeFrame.renderId;
|
|
195
|
+
const previousRenderContext = this._currentRenderContext;
|
|
196
|
+
const previousRenderObjectFunction = this._currentRenderObjectFunction;
|
|
197
|
+
const previousCompilationPromises = this._compilationPromises;
|
|
198
|
+
|
|
199
|
+
//
|
|
200
|
+
|
|
201
|
+
const sceneRef = ( scene.isScene === true ) ? scene : _scene;
|
|
202
|
+
|
|
203
|
+
if ( targetScene === null ) targetScene = scene;
|
|
204
|
+
|
|
205
|
+
const renderTarget = this._renderTarget;
|
|
206
|
+
const renderContext = this._renderContexts.get( targetScene, camera, renderTarget );
|
|
207
|
+
const activeMipmapLevel = this._activeMipmapLevel;
|
|
208
|
+
|
|
209
|
+
const compilationPromises = [];
|
|
210
|
+
|
|
211
|
+
this._currentRenderContext = renderContext;
|
|
212
|
+
this._currentRenderObjectFunction = this.renderObject;
|
|
213
|
+
|
|
214
|
+
this._handleObjectFunction = this._createObjectPipeline;
|
|
215
|
+
|
|
216
|
+
this._compilationPromises = compilationPromises;
|
|
217
|
+
|
|
218
|
+
nodeFrame.renderId ++;
|
|
219
|
+
|
|
220
|
+
//
|
|
221
|
+
|
|
222
|
+
nodeFrame.update();
|
|
223
|
+
|
|
224
|
+
//
|
|
225
|
+
|
|
226
|
+
renderContext.depth = this.depth;
|
|
227
|
+
renderContext.stencil = this.stencil;
|
|
228
|
+
|
|
229
|
+
if ( ! renderContext.clippingContext ) renderContext.clippingContext = new ClippingContext();
|
|
230
|
+
renderContext.clippingContext.updateGlobal( this, camera );
|
|
231
|
+
|
|
232
|
+
//
|
|
233
|
+
|
|
234
|
+
sceneRef.onBeforeRender( this, scene, camera, renderTarget );
|
|
235
|
+
|
|
236
|
+
//
|
|
237
|
+
|
|
238
|
+
const renderList = this._renderLists.get( scene, camera );
|
|
239
|
+
renderList.begin();
|
|
240
|
+
|
|
241
|
+
this._projectObject( scene, camera, 0, renderList );
|
|
242
|
+
|
|
243
|
+
// include lights from target scene
|
|
244
|
+
if ( targetScene !== scene ) {
|
|
245
|
+
|
|
246
|
+
targetScene.traverseVisible( function ( object ) {
|
|
247
|
+
|
|
248
|
+
if ( object.isLight && object.layers.test( camera.layers ) ) {
|
|
249
|
+
|
|
250
|
+
renderList.pushLight( object );
|
|
251
|
+
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
} );
|
|
255
|
+
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
renderList.finish();
|
|
259
|
+
|
|
260
|
+
//
|
|
261
|
+
|
|
262
|
+
if ( renderTarget !== null ) {
|
|
263
|
+
|
|
264
|
+
this._textures.updateRenderTarget( renderTarget, activeMipmapLevel );
|
|
265
|
+
|
|
266
|
+
const renderTargetData = this._textures.get( renderTarget );
|
|
267
|
+
|
|
268
|
+
renderContext.textures = renderTargetData.textures;
|
|
269
|
+
renderContext.depthTexture = renderTargetData.depthTexture;
|
|
270
|
+
|
|
271
|
+
} else {
|
|
272
|
+
|
|
273
|
+
renderContext.textures = null;
|
|
274
|
+
renderContext.depthTexture = null;
|
|
275
|
+
|
|
276
|
+
}
|
|
175
277
|
|
|
176
|
-
|
|
278
|
+
//
|
|
279
|
+
|
|
280
|
+
this._nodes.updateScene( sceneRef );
|
|
281
|
+
|
|
282
|
+
//
|
|
283
|
+
|
|
284
|
+
this._background.update( sceneRef, renderList, renderContext );
|
|
285
|
+
|
|
286
|
+
// process render lists
|
|
287
|
+
|
|
288
|
+
const opaqueObjects = renderList.opaque;
|
|
289
|
+
const transparentObjects = renderList.transparent;
|
|
290
|
+
const lightsNode = renderList.lightsNode;
|
|
291
|
+
|
|
292
|
+
if ( opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
|
|
293
|
+
if ( transparentObjects.length > 0 ) this._renderObjects( transparentObjects, camera, sceneRef, lightsNode );
|
|
294
|
+
|
|
295
|
+
// restore render tree
|
|
296
|
+
|
|
297
|
+
nodeFrame.renderId = previousRenderId;
|
|
298
|
+
|
|
299
|
+
this._currentRenderContext = previousRenderContext;
|
|
300
|
+
this._currentRenderObjectFunction = previousRenderObjectFunction;
|
|
301
|
+
this._compilationPromises = previousCompilationPromises;
|
|
302
|
+
|
|
303
|
+
this._handleObjectFunction = this._renderObjectDirect;
|
|
304
|
+
|
|
305
|
+
// wait for all promises setup by backends awaiting compilation/linking/pipeline creation to complete
|
|
306
|
+
|
|
307
|
+
await Promise.all( compilationPromises );
|
|
177
308
|
|
|
178
309
|
}
|
|
179
310
|
|
|
180
|
-
async
|
|
311
|
+
async renderAsync( scene, camera ) {
|
|
181
312
|
|
|
182
313
|
if ( this._initialized === false ) await this.init();
|
|
183
314
|
|
|
315
|
+
const renderContext = this._renderContext( scene, camera );
|
|
316
|
+
|
|
317
|
+
await this.backend.resolveTimestampAsync( renderContext, 'render' );
|
|
318
|
+
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
render( scene, camera ) {
|
|
322
|
+
|
|
323
|
+
if ( this._initialized === false ) {
|
|
324
|
+
|
|
325
|
+
console.error( 'THREE.Renderer: .render() called before the backend is initialized. Try using .renderAsync() instead.' );
|
|
326
|
+
return;
|
|
327
|
+
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
this._renderContext( scene, camera );
|
|
331
|
+
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
_renderContext( scene, camera ) {
|
|
335
|
+
|
|
184
336
|
// preserve render tree
|
|
185
337
|
|
|
186
338
|
const nodeFrame = this._nodes.nodeFrame;
|
|
@@ -261,8 +413,8 @@ class Renderer {
|
|
|
261
413
|
renderContext.scissorValue.width >>= activeMipmapLevel;
|
|
262
414
|
renderContext.scissorValue.height >>= activeMipmapLevel;
|
|
263
415
|
|
|
264
|
-
renderContext.
|
|
265
|
-
renderContext.
|
|
416
|
+
if ( ! renderContext.clippingContext ) renderContext.clippingContext = new ClippingContext();
|
|
417
|
+
renderContext.clippingContext.updateGlobal( this, camera );
|
|
266
418
|
|
|
267
419
|
//
|
|
268
420
|
|
|
@@ -299,6 +451,8 @@ class Renderer {
|
|
|
299
451
|
renderContext.width = renderTargetData.width;
|
|
300
452
|
renderContext.height = renderTargetData.height;
|
|
301
453
|
renderContext.renderTarget = renderTarget;
|
|
454
|
+
renderContext.depth = renderTarget.depthBuffer;
|
|
455
|
+
renderContext.stencil = renderTarget.stencilBuffer;
|
|
302
456
|
|
|
303
457
|
} else {
|
|
304
458
|
|
|
@@ -306,6 +460,8 @@ class Renderer {
|
|
|
306
460
|
renderContext.depthTexture = null;
|
|
307
461
|
renderContext.width = this.domElement.width;
|
|
308
462
|
renderContext.height = this.domElement.height;
|
|
463
|
+
renderContext.depth = this.depth;
|
|
464
|
+
renderContext.stencil = this.stencil;
|
|
309
465
|
|
|
310
466
|
}
|
|
311
467
|
|
|
@@ -351,6 +507,10 @@ class Renderer {
|
|
|
351
507
|
|
|
352
508
|
sceneRef.onAfterRender( this, scene, camera, renderTarget );
|
|
353
509
|
|
|
510
|
+
//
|
|
511
|
+
|
|
512
|
+
return renderContext;
|
|
513
|
+
|
|
354
514
|
}
|
|
355
515
|
|
|
356
516
|
getMaxAnisotropy() {
|
|
@@ -395,7 +555,7 @@ class Renderer {
|
|
|
395
555
|
|
|
396
556
|
getContext() {
|
|
397
557
|
|
|
398
|
-
return this.
|
|
558
|
+
return this.backend.getContext();
|
|
399
559
|
|
|
400
560
|
}
|
|
401
561
|
|
|
@@ -513,6 +673,8 @@ class Renderer {
|
|
|
513
673
|
|
|
514
674
|
this._scissorTest = boolean;
|
|
515
675
|
|
|
676
|
+
this.backend.setScissorTest( boolean );
|
|
677
|
+
|
|
516
678
|
}
|
|
517
679
|
|
|
518
680
|
getViewport( target ) {
|
|
@@ -616,19 +778,45 @@ class Renderer {
|
|
|
616
778
|
|
|
617
779
|
clearColor() {
|
|
618
780
|
|
|
619
|
-
this.clear( true, false, false );
|
|
781
|
+
return this.clear( true, false, false );
|
|
620
782
|
|
|
621
783
|
}
|
|
622
784
|
|
|
623
785
|
clearDepth() {
|
|
624
786
|
|
|
625
|
-
this.clear( false, true, false );
|
|
787
|
+
return this.clear( false, true, false );
|
|
626
788
|
|
|
627
789
|
}
|
|
628
790
|
|
|
629
791
|
clearStencil() {
|
|
630
792
|
|
|
631
|
-
this.clear( false, false, true );
|
|
793
|
+
return this.clear( false, false, true );
|
|
794
|
+
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
async clearAsync( color = true, depth = true, stencil = true ) {
|
|
798
|
+
|
|
799
|
+
if ( this._initialized === false ) await this.init();
|
|
800
|
+
|
|
801
|
+
this.clear( color, depth, stencil );
|
|
802
|
+
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
clearColorAsync() {
|
|
806
|
+
|
|
807
|
+
return this.clearAsync( true, false, false );
|
|
808
|
+
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
clearDepthAsync() {
|
|
812
|
+
|
|
813
|
+
return this.clearAsync( false, true, false );
|
|
814
|
+
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
clearStencilAsync() {
|
|
818
|
+
|
|
819
|
+
return this.clearAsync( false, false, true );
|
|
632
820
|
|
|
633
821
|
}
|
|
634
822
|
|
|
@@ -654,7 +842,6 @@ class Renderer {
|
|
|
654
842
|
|
|
655
843
|
this._animation.dispose();
|
|
656
844
|
this._objects.dispose();
|
|
657
|
-
this._properties.dispose();
|
|
658
845
|
this._pipelines.dispose();
|
|
659
846
|
this._nodes.dispose();
|
|
660
847
|
this._bindings.dispose();
|
|
@@ -693,7 +880,7 @@ class Renderer {
|
|
|
693
880
|
|
|
694
881
|
}
|
|
695
882
|
|
|
696
|
-
async
|
|
883
|
+
async computeAsync( computeNodes ) {
|
|
697
884
|
|
|
698
885
|
if ( this._initialized === false ) await this.init();
|
|
699
886
|
|
|
@@ -705,10 +892,12 @@ class Renderer {
|
|
|
705
892
|
|
|
706
893
|
this.info.calls ++;
|
|
707
894
|
this.info.compute.calls ++;
|
|
895
|
+
this.info.compute.computeCalls ++;
|
|
708
896
|
|
|
709
897
|
nodeFrame.renderId = this.info.calls;
|
|
710
898
|
|
|
711
899
|
//
|
|
900
|
+
if ( this.info.autoReset === true ) this.info.resetCompute();
|
|
712
901
|
|
|
713
902
|
const backend = this.backend;
|
|
714
903
|
const pipelines = this._pipelines;
|
|
@@ -760,12 +949,20 @@ class Renderer {
|
|
|
760
949
|
|
|
761
950
|
backend.finishCompute( computeNodes );
|
|
762
951
|
|
|
952
|
+
await this.backend.resolveTimestampAsync( computeNodes, 'compute' );
|
|
953
|
+
|
|
763
954
|
//
|
|
764
955
|
|
|
765
956
|
nodeFrame.renderId = previousRenderId;
|
|
766
957
|
|
|
767
958
|
}
|
|
768
959
|
|
|
960
|
+
hasFeatureAsync( name ) {
|
|
961
|
+
|
|
962
|
+
return this.backend.hasFeatureAsync( name );
|
|
963
|
+
|
|
964
|
+
}
|
|
965
|
+
|
|
769
966
|
hasFeature( name ) {
|
|
770
967
|
|
|
771
968
|
return this.backend.hasFeature( name );
|
|
@@ -943,6 +1140,7 @@ class Renderer {
|
|
|
943
1140
|
renderObject( object, scene, camera, geometry, material, group, lightsNode ) {
|
|
944
1141
|
|
|
945
1142
|
let overridePositionNode;
|
|
1143
|
+
let overrideFragmentNode;
|
|
946
1144
|
|
|
947
1145
|
//
|
|
948
1146
|
|
|
@@ -964,6 +1162,45 @@ class Renderer {
|
|
|
964
1162
|
|
|
965
1163
|
}
|
|
966
1164
|
|
|
1165
|
+
if ( overrideMaterial.isShadowNodeMaterial ) {
|
|
1166
|
+
|
|
1167
|
+
overrideMaterial.side = material.shadowSide === null ? material.side : material.shadowSide;
|
|
1168
|
+
|
|
1169
|
+
if ( material.shadowNode && material.shadowNode.isNode ) {
|
|
1170
|
+
|
|
1171
|
+
overrideFragmentNode = overrideMaterial.fragmentNode;
|
|
1172
|
+
overrideMaterial.fragmentNode = material.shadowNode;
|
|
1173
|
+
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
if ( this.localClippingEnabled ) {
|
|
1177
|
+
|
|
1178
|
+
if ( material.clipShadows ) {
|
|
1179
|
+
|
|
1180
|
+
if ( overrideMaterial.clippingPlanes !== material.clippingPlanes ) {
|
|
1181
|
+
|
|
1182
|
+
overrideMaterial.clippingPlanes = material.clippingPlanes;
|
|
1183
|
+
overrideMaterial.needsUpdate = true;
|
|
1184
|
+
|
|
1185
|
+
}
|
|
1186
|
+
|
|
1187
|
+
if ( overrideMaterial.clipIntersection !== material.clipIntersection ) {
|
|
1188
|
+
|
|
1189
|
+
overrideMaterial.clipIntersection = material.clipIntersection;
|
|
1190
|
+
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
} else if ( Array.isArray( overrideMaterial.clippingPlanes ) ) {
|
|
1194
|
+
|
|
1195
|
+
overrideMaterial.clippingPlanes = null;
|
|
1196
|
+
overrideMaterial.needsUpdate = true;
|
|
1197
|
+
|
|
1198
|
+
}
|
|
1199
|
+
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
}
|
|
1203
|
+
|
|
967
1204
|
material = overrideMaterial;
|
|
968
1205
|
|
|
969
1206
|
}
|
|
@@ -973,16 +1210,16 @@ class Renderer {
|
|
|
973
1210
|
if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {
|
|
974
1211
|
|
|
975
1212
|
material.side = BackSide;
|
|
976
|
-
this.
|
|
1213
|
+
this._handleObjectFunction( object, material, scene, camera, lightsNode, 'backSide' ); // create backSide pass id
|
|
977
1214
|
|
|
978
1215
|
material.side = FrontSide;
|
|
979
|
-
this.
|
|
1216
|
+
this._handleObjectFunction( object, material, scene, camera, lightsNode ); // use default pass id
|
|
980
1217
|
|
|
981
1218
|
material.side = DoubleSide;
|
|
982
1219
|
|
|
983
1220
|
} else {
|
|
984
1221
|
|
|
985
|
-
this.
|
|
1222
|
+
this._handleObjectFunction( object, material, scene, camera, lightsNode );
|
|
986
1223
|
|
|
987
1224
|
}
|
|
988
1225
|
|
|
@@ -994,6 +1231,12 @@ class Renderer {
|
|
|
994
1231
|
|
|
995
1232
|
}
|
|
996
1233
|
|
|
1234
|
+
if ( overrideFragmentNode !== undefined ) {
|
|
1235
|
+
|
|
1236
|
+
scene.overrideMaterial.fragmentNode = overrideFragmentNode;
|
|
1237
|
+
|
|
1238
|
+
}
|
|
1239
|
+
|
|
997
1240
|
//
|
|
998
1241
|
|
|
999
1242
|
object.onAfterRender( this, scene, camera, geometry, material, group );
|
|
@@ -1026,6 +1269,36 @@ class Renderer {
|
|
|
1026
1269
|
|
|
1027
1270
|
}
|
|
1028
1271
|
|
|
1272
|
+
_createObjectPipeline( object, material, scene, camera, lightsNode, passId ) {
|
|
1273
|
+
|
|
1274
|
+
const renderObject = this._objects.get( object, material, scene, camera, lightsNode, this._currentRenderContext, passId );
|
|
1275
|
+
|
|
1276
|
+
//
|
|
1277
|
+
|
|
1278
|
+
this._nodes.updateBefore( renderObject );
|
|
1279
|
+
|
|
1280
|
+
//
|
|
1281
|
+
|
|
1282
|
+
this._nodes.updateForRender( renderObject );
|
|
1283
|
+
this._geometries.updateForRender( renderObject );
|
|
1284
|
+
this._bindings.updateForRender( renderObject );
|
|
1285
|
+
|
|
1286
|
+
this._pipelines.getForRender( renderObject, this._compilationPromises );
|
|
1287
|
+
|
|
1288
|
+
}
|
|
1289
|
+
|
|
1290
|
+
get compute() {
|
|
1291
|
+
|
|
1292
|
+
return this.computeAsync;
|
|
1293
|
+
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
get compile() {
|
|
1297
|
+
|
|
1298
|
+
return this.compileAsync;
|
|
1299
|
+
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1029
1302
|
}
|
|
1030
1303
|
|
|
1031
1304
|
export default Renderer;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BufferAttribute } from 'three';
|
|
2
|
+
|
|
3
|
+
class StorageBufferAttribute extends BufferAttribute {
|
|
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;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { InstancedBufferAttribute } from 'three';
|
|
2
|
+
|
|
3
|
+
class StorageInstancedBufferAttribute 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.isStorageInstancedBufferAttribute = true;
|
|
12
|
+
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export default StorageInstancedBufferAttribute;
|
|
@@ -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
|
|
|
@@ -22,19 +23,8 @@ class Textures extends DataMap {
|
|
|
22
23
|
const sampleCount = renderTarget.samples === 0 ? 1 : renderTarget.samples;
|
|
23
24
|
const depthTextureMips = renderTargetData.depthTextureMips || ( renderTargetData.depthTextureMips = {} );
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if ( renderTarget.isWebGLMultipleRenderTargets ) {
|
|
28
|
-
|
|
29
|
-
textures = renderTarget.texture;
|
|
30
|
-
texture = renderTarget.texture[ 0 ];
|
|
31
|
-
|
|
32
|
-
} else {
|
|
33
|
-
|
|
34
|
-
textures = [ renderTarget.texture ];
|
|
35
|
-
texture = renderTarget.texture;
|
|
36
|
-
|
|
37
|
-
}
|
|
26
|
+
const texture = renderTarget.texture;
|
|
27
|
+
const textures = renderTarget.textures;
|
|
38
28
|
|
|
39
29
|
const size = this.getSize( texture );
|
|
40
30
|
|
|
@@ -47,8 +37,8 @@ class Textures extends DataMap {
|
|
|
47
37
|
if ( depthTexture === undefined ) {
|
|
48
38
|
|
|
49
39
|
depthTexture = new DepthTexture();
|
|
50
|
-
depthTexture.format = DepthStencilFormat;
|
|
51
|
-
depthTexture.type = UnsignedInt248Type;
|
|
40
|
+
depthTexture.format = renderTarget.stencilBuffer ? DepthStencilFormat : DepthFormat;
|
|
41
|
+
depthTexture.type = renderTarget.stencilBuffer ? UnsignedInt248Type : UnsignedIntType;
|
|
52
42
|
depthTexture.image.width = mipWidth;
|
|
53
43
|
depthTexture.image.height = mipHeight;
|
|
54
44
|
|
|
@@ -72,6 +62,7 @@ class Textures extends DataMap {
|
|
|
72
62
|
renderTargetData.depthTexture = depthTexture;
|
|
73
63
|
renderTargetData.depth = renderTarget.depthBuffer;
|
|
74
64
|
renderTargetData.stencil = renderTarget.stencilBuffer;
|
|
65
|
+
renderTargetData.renderTarget = renderTarget;
|
|
75
66
|
|
|
76
67
|
if ( renderTargetData.sampleCount !== sampleCount ) {
|
|
77
68
|
|
|
@@ -153,6 +144,25 @@ class Textures extends DataMap {
|
|
|
153
144
|
|
|
154
145
|
//
|
|
155
146
|
|
|
147
|
+
if ( texture.isFramebufferTexture ) {
|
|
148
|
+
|
|
149
|
+
const renderer = this.renderer;
|
|
150
|
+
const renderTarget = renderer.getRenderTarget();
|
|
151
|
+
|
|
152
|
+
if ( renderTarget ) {
|
|
153
|
+
|
|
154
|
+
texture.type = renderTarget.texture.type;
|
|
155
|
+
|
|
156
|
+
} else {
|
|
157
|
+
|
|
158
|
+
texture.type = UnsignedByteType;
|
|
159
|
+
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
//
|
|
165
|
+
|
|
156
166
|
const { width, height, depth } = this.getSize( texture );
|
|
157
167
|
|
|
158
168
|
options.width = width;
|
|
@@ -214,7 +224,7 @@ class Textures extends DataMap {
|
|
|
214
224
|
|
|
215
225
|
}
|
|
216
226
|
|
|
217
|
-
backend.updateTexture( texture, options );
|
|
227
|
+
if ( texture.source.dataReady === true ) backend.updateTexture( texture, options );
|
|
218
228
|
|
|
219
229
|
if ( options.needsMipmaps && texture.mipmaps.length === 0 ) backend.generateMipmaps( texture );
|
|
220
230
|
|
|
@@ -63,6 +63,8 @@ class UniformsGroup extends UniformBuffer {
|
|
|
63
63
|
|
|
64
64
|
const uniform = this.uniforms[ i ];
|
|
65
65
|
|
|
66
|
+
const { boundary, itemSize } = uniform;
|
|
67
|
+
|
|
66
68
|
// offset within a single chunk in bytes
|
|
67
69
|
|
|
68
70
|
const chunkOffset = offset % GPU_CHUNK_BYTES;
|
|
@@ -70,23 +72,23 @@ class UniformsGroup extends UniformBuffer {
|
|
|
70
72
|
|
|
71
73
|
// conformance tests
|
|
72
74
|
|
|
73
|
-
if ( chunkOffset !== 0 && ( remainingSizeInChunk -
|
|
75
|
+
if ( chunkOffset !== 0 && ( remainingSizeInChunk - boundary ) < 0 ) {
|
|
74
76
|
|
|
75
77
|
// check for chunk overflow
|
|
76
78
|
|
|
77
79
|
offset += ( GPU_CHUNK_BYTES - chunkOffset );
|
|
78
80
|
|
|
79
|
-
} else if ( chunkOffset %
|
|
81
|
+
} else if ( chunkOffset % boundary !== 0 ) {
|
|
80
82
|
|
|
81
83
|
// check for correct alignment
|
|
82
84
|
|
|
83
|
-
offset += ( chunkOffset %
|
|
85
|
+
offset += ( chunkOffset % boundary );
|
|
84
86
|
|
|
85
87
|
}
|
|
86
88
|
|
|
87
89
|
uniform.offset = ( offset / this.bytesPerElement );
|
|
88
90
|
|
|
89
|
-
offset += (
|
|
91
|
+
offset += ( itemSize * this.bytesPerElement );
|
|
90
92
|
|
|
91
93
|
}
|
|
92
94
|
|
|
@@ -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;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import StorageBuffer from '../StorageBuffer.js';
|
|
2
|
+
|
|
3
|
+
let _id = 0;
|
|
4
|
+
|
|
5
|
+
class NodeStorageBuffer extends StorageBuffer {
|
|
6
|
+
|
|
7
|
+
constructor( nodeUniform ) {
|
|
8
|
+
|
|
9
|
+
super( 'StorageBuffer_' + _id ++, nodeUniform ? nodeUniform.value : null );
|
|
10
|
+
|
|
11
|
+
this.nodeUniform = nodeUniform;
|
|
12
|
+
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
get buffer() {
|
|
16
|
+
|
|
17
|
+
return this.nodeUniform.value;
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export default NodeStorageBuffer;
|