super-three 0.157.1 → 0.160.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/README.md +6 -4
- package/build/three.cjs +3100 -1537
- package/build/three.js +3100 -1537
- package/build/three.min.js +1 -1
- package/build/three.module.js +3093 -1538
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +291 -0
- package/examples/jsm/controls/FlyControls.js +26 -0
- package/examples/jsm/controls/OrbitControls.js +62 -41
- package/examples/jsm/controls/TransformControls.js +27 -11
- package/examples/jsm/csm/CSMShader.js +53 -48
- package/examples/jsm/exporters/GLTFExporter.js +151 -3
- package/examples/jsm/exporters/USDZExporter.js +27 -19
- package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -0
- package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -0
- package/examples/jsm/helpers/TextureHelper.js +237 -0
- package/examples/jsm/interactive/HTMLMesh.js +9 -2
- package/examples/jsm/libs/lottie_canvas.module.js +6 -1
- package/examples/jsm/libs/opentype.module.js +13 -75
- package/examples/jsm/libs/surfaceNet.js +201 -0
- package/examples/jsm/lines/LineMaterial.js +16 -33
- package/examples/jsm/loaders/ColladaLoader.js +0 -6
- package/examples/jsm/loaders/DRACOLoader.js +4 -3
- package/examples/jsm/loaders/FBXLoader.js +294 -124
- package/examples/jsm/loaders/GLTFLoader.js +83 -6
- package/examples/jsm/loaders/LUTImageLoader.js +162 -0
- package/examples/jsm/loaders/MaterialXLoader.js +73 -54
- package/examples/jsm/loaders/NRRDLoader.js +0 -13
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/USDZLoader.js +3 -17
- package/examples/jsm/loaders/lwo/IFFParser.js +89 -93
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/Capsule.js +0 -55
- package/examples/jsm/math/Octree.js +85 -7
- package/examples/jsm/misc/Timer.js +119 -0
- package/examples/jsm/misc/TubePainter.js +3 -6
- package/examples/jsm/modifiers/CurveModifier.js +20 -2
- package/examples/jsm/modifiers/SimplifyModifier.js +103 -11
- package/examples/jsm/modifiers/TessellateModifier.js +3 -3
- package/examples/jsm/nodes/Nodes.js +16 -12
- package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
- package/examples/jsm/nodes/accessors/InstanceNode.js +3 -3
- package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
- package/examples/jsm/nodes/accessors/MaterialNode.js +68 -31
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -2
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
- package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
- package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
- package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +13 -3
- package/examples/jsm/nodes/accessors/TextureNode.js +123 -37
- package/examples/jsm/nodes/code/CodeNode.js +3 -3
- package/examples/jsm/nodes/code/FunctionNode.js +1 -1
- package/examples/jsm/nodes/core/AssignNode.js +72 -0
- package/examples/jsm/nodes/core/AttributeNode.js +7 -1
- package/examples/jsm/nodes/core/CacheNode.js +4 -1
- package/examples/jsm/nodes/core/ConstNode.js +1 -1
- package/examples/jsm/nodes/core/LightingModel.js +3 -1
- package/examples/jsm/nodes/core/Node.js +13 -15
- package/examples/jsm/nodes/core/NodeBuilder.js +209 -42
- package/examples/jsm/nodes/core/NodeFrame.js +10 -8
- package/examples/jsm/nodes/core/NodeUniform.js +12 -0
- package/examples/jsm/nodes/core/NodeUtils.js +7 -9
- package/examples/jsm/nodes/core/OutputStructNode.js +4 -4
- package/examples/jsm/nodes/core/ParameterNode.js +33 -0
- package/examples/jsm/nodes/core/PropertyNode.js +15 -6
- package/examples/jsm/nodes/core/StackNode.js +7 -17
- package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/UniformGroup.js +13 -0
- package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
- package/examples/jsm/nodes/core/UniformNode.js +17 -0
- package/examples/jsm/nodes/core/VarNode.js +7 -34
- package/examples/jsm/nodes/core/VaryingNode.js +3 -7
- package/examples/jsm/nodes/display/BumpMapNode.js +35 -13
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
- package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -1
- package/examples/jsm/nodes/display/PassNode.js +182 -0
- package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportNode.js +17 -10
- package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +20 -6
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +8 -3
- package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +8 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -0
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +93 -43
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -2
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +55 -6
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -18
- package/examples/jsm/nodes/lighting/LightingContextNode.js +21 -57
- package/examples/jsm/nodes/lighting/LightsNode.js +80 -20
- package/examples/jsm/nodes/lighting/PointLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/SpotLightNode.js +1 -1
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -0
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +76 -77
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +5 -5
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -20
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +6 -6
- package/examples/jsm/nodes/materials/NodeMaterial.js +82 -60
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
- package/examples/jsm/nodes/math/MathNode.js +2 -0
- package/examples/jsm/nodes/math/OperatorNode.js +24 -27
- package/examples/jsm/nodes/shadernode/ShaderNode.js +158 -10
- package/examples/jsm/nodes/utils/ArrayElementNode.js +2 -0
- package/examples/jsm/nodes/utils/DiscardNode.js +3 -2
- package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
- package/examples/jsm/nodes/utils/JoinNode.js +11 -1
- package/examples/jsm/nodes/utils/LoopNode.js +36 -24
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +10 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/examples/jsm/objects/InstancedPoints.js +21 -0
- package/examples/jsm/objects/Lensflare.js +20 -0
- package/examples/jsm/objects/QuadMesh.js +60 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +3 -0
- package/examples/jsm/objects/Refractor.js +3 -0
- package/examples/jsm/objects/Sky.js +5 -3
- package/examples/jsm/objects/Water.js +5 -2
- package/examples/jsm/objects/Water2.js +3 -0
- package/examples/jsm/physics/AmmoPhysics.js +21 -0
- package/examples/jsm/physics/RapierPhysics.js +21 -0
- package/examples/jsm/postprocessing/BokehPass.js +3 -2
- package/examples/jsm/postprocessing/GTAOPass.js +572 -0
- package/examples/jsm/postprocessing/LUTPass.js +2 -1
- package/examples/jsm/postprocessing/OutputPass.js +3 -0
- package/examples/jsm/postprocessing/Pass.js +14 -3
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SMAAPass.js +0 -2
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -2
- package/examples/jsm/renderers/CSS3DRenderer.js +3 -9
- package/examples/jsm/renderers/SVGRenderer.js +9 -6
- package/examples/jsm/renderers/common/Animation.js +10 -21
- package/examples/jsm/renderers/common/Backend.js +19 -3
- package/examples/jsm/renderers/common/Background.js +20 -22
- package/examples/jsm/renderers/common/Bindings.js +31 -22
- package/examples/jsm/renderers/common/ChainMap.js +3 -3
- package/examples/jsm/renderers/common/Color4.js +37 -0
- package/examples/jsm/renderers/common/Geometries.js +4 -4
- package/examples/jsm/renderers/common/Info.js +12 -2
- package/examples/jsm/renderers/common/Pipelines.js +3 -51
- package/examples/jsm/renderers/common/PostProcessing.js +25 -0
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderContexts.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +21 -2
- package/examples/jsm/renderers/common/RenderObjects.js +5 -3
- package/examples/jsm/renderers/common/Renderer.js +137 -37
- package/examples/jsm/renderers/common/StorageTexture.js +1 -0
- package/examples/jsm/renderers/common/Textures.js +8 -37
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +121 -19
- package/examples/jsm/renderers/webgl/WebGLBackend.js +366 -67
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +183 -38
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +92 -5
- package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
- package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +14 -2
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +188 -137
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +241 -90
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +2 -0
- package/examples/jsm/shaders/AfterimageShader.js +2 -0
- package/examples/jsm/shaders/BasicShader.js +2 -0
- package/examples/jsm/shaders/BlendShader.js +2 -0
- package/examples/jsm/shaders/BokehShader.js +2 -0
- package/examples/jsm/shaders/BokehShader2.js +4 -0
- package/examples/jsm/shaders/BrightnessContrastShader.js +2 -0
- package/examples/jsm/shaders/ColorCorrectionShader.js +2 -0
- package/examples/jsm/shaders/DOFMipMapShader.js +2 -0
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +5 -0
- package/examples/jsm/shaders/FXAAShader.js +135 -133
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +2 -0
- package/examples/jsm/shaders/FreiChenShader.js +2 -0
- package/examples/jsm/shaders/GTAOShader.js +424 -0
- package/examples/jsm/shaders/GodRaysShader.js +8 -0
- package/examples/jsm/shaders/HalftoneShader.js +2 -0
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/HueSaturationShader.js +2 -0
- package/examples/jsm/shaders/KaleidoShader.js +2 -0
- package/examples/jsm/shaders/LuminosityHighPassShader.js +2 -0
- package/examples/jsm/shaders/LuminosityShader.js +2 -0
- package/examples/jsm/shaders/MMDToonShader.js +2 -0
- package/examples/jsm/shaders/MirrorShader.js +2 -0
- package/examples/jsm/shaders/NormalMapShader.js +2 -0
- package/examples/jsm/shaders/OutputShader.js +8 -5
- package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
- package/examples/jsm/shaders/SAOShader.js +7 -3
- package/examples/jsm/shaders/SMAAShader.js +6 -0
- package/examples/jsm/shaders/SSAOShader.js +8 -3
- package/examples/jsm/shaders/SSRShader.js +6 -0
- package/examples/jsm/shaders/SobelOperatorShader.js +2 -0
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +2 -0
- package/examples/jsm/shaders/TechnicolorShader.js +2 -0
- package/examples/jsm/shaders/TriangleBlurShader.js +2 -0
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -0
- package/examples/jsm/shaders/VelocityShader.js +2 -0
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/WaterRefractionShader.js +2 -0
- package/examples/jsm/transpiler/AST.js +270 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +941 -0
- package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
- package/examples/jsm/transpiler/TSLEncoder.js +715 -0
- package/examples/jsm/transpiler/Transpiler.js +18 -0
- package/examples/jsm/utils/SortUtils.js +158 -0
- package/examples/jsm/utils/TextureUtils.js +33 -21
- package/examples/jsm/webxr/ARButton.js +14 -0
- package/examples/jsm/webxr/VRButton.js +24 -9
- package/examples/jsm/webxr/XRButton.js +27 -11
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -6
- package/src/Three.js +1 -0
- package/src/constants.js +8 -1
- package/src/core/BufferAttribute.js +21 -2
- package/src/core/InterleavedBuffer.js +21 -1
- package/src/core/Object3D.js +60 -12
- package/src/core/UniformsGroup.js +7 -1
- package/src/extras/PMREMGenerator.js +7 -1
- package/src/extras/curves/LineCurve3.js +4 -0
- package/src/loaders/AudioLoader.js +1 -1
- package/src/loaders/BufferGeometryLoader.js +0 -7
- package/src/loaders/ImageBitmapLoader.js +25 -1
- package/src/loaders/MaterialLoader.js +10 -2
- package/src/loaders/ObjectLoader.js +49 -0
- package/src/materials/Material.js +27 -13
- package/src/materials/ShaderMaterial.js +2 -1
- package/src/math/Box3.js +35 -18
- package/src/math/ColorManagement.js +0 -16
- package/src/math/Quaternion.js +5 -4
- package/src/math/Sphere.js +2 -0
- package/src/math/Triangle.js +17 -5
- package/src/math/Vector3.js +11 -12
- package/src/objects/BatchedMesh.js +1020 -0
- package/src/objects/Skeleton.js +1 -3
- package/src/objects/SkinnedMesh.js +6 -7
- package/src/renderers/WebGL3DRenderTarget.js +2 -2
- package/src/renderers/WebGLArrayRenderTarget.js +2 -2
- package/src/renderers/WebGLRenderer.js +165 -43
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -2
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +8 -6
- package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk.js +4 -0
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
- package/src/renderers/webgl/WebGLAttributes.js +39 -5
- package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLLights.js +11 -2
- package/src/renderers/webgl/WebGLProgram.js +100 -51
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLShadowMap.js +35 -0
- package/src/renderers/webgl/WebGLState.js +25 -4
- package/src/renderers/webgl/WebGLTextures.js +7 -11
- package/src/renderers/webgl/WebGLUniforms.js +11 -1
- package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
- package/src/renderers/webxr/WebXRManager.js +16 -0
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
|
@@ -24,6 +24,7 @@ export default class RenderObject {
|
|
|
24
24
|
this.pipeline = null;
|
|
25
25
|
this.vertexBuffers = null;
|
|
26
26
|
|
|
27
|
+
this.initialNodesCacheKey = this.getNodesCacheKey();
|
|
27
28
|
this.initialCacheKey = this.getCacheKey();
|
|
28
29
|
|
|
29
30
|
this._nodeBuilderState = null;
|
|
@@ -105,7 +106,7 @@ export default class RenderObject {
|
|
|
105
106
|
|
|
106
107
|
getMaterialCacheKey() {
|
|
107
108
|
|
|
108
|
-
const material = this
|
|
109
|
+
const { object, material } = this;
|
|
109
110
|
|
|
110
111
|
let cacheKey = material.customProgramCacheKey();
|
|
111
112
|
|
|
@@ -128,10 +129,28 @@ export default class RenderObject {
|
|
|
128
129
|
|
|
129
130
|
}
|
|
130
131
|
|
|
132
|
+
if ( object.skeleton ) {
|
|
133
|
+
|
|
134
|
+
cacheKey += object.skeleton.uuid + ',';
|
|
135
|
+
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if ( object.morphTargetInfluences ) {
|
|
139
|
+
|
|
140
|
+
cacheKey += object.morphTargetInfluences.length + ',';
|
|
141
|
+
|
|
142
|
+
}
|
|
143
|
+
|
|
131
144
|
return cacheKey;
|
|
132
145
|
|
|
133
146
|
}
|
|
134
147
|
|
|
148
|
+
get needsUpdate() {
|
|
149
|
+
|
|
150
|
+
return this.initialNodesCacheKey !== this.getNodesCacheKey();
|
|
151
|
+
|
|
152
|
+
}
|
|
153
|
+
|
|
135
154
|
getNodesCacheKey() {
|
|
136
155
|
|
|
137
156
|
// Environment Nodes Cache Key
|
|
@@ -142,7 +161,7 @@ export default class RenderObject {
|
|
|
142
161
|
|
|
143
162
|
getCacheKey() {
|
|
144
163
|
|
|
145
|
-
return
|
|
164
|
+
return this.getMaterialCacheKey() + ',' + this.getNodesCacheKey();
|
|
146
165
|
|
|
147
166
|
}
|
|
148
167
|
|
|
@@ -31,9 +31,7 @@ class RenderObjects {
|
|
|
31
31
|
|
|
32
32
|
} else {
|
|
33
33
|
|
|
34
|
-
if ( renderObject.version !== material.version ) {
|
|
35
|
-
|
|
36
|
-
renderObject.version = material.version;
|
|
34
|
+
if ( renderObject.version !== material.version || renderObject.needsUpdate ) {
|
|
37
35
|
|
|
38
36
|
if ( renderObject.initialCacheKey !== renderObject.getCacheKey() ) {
|
|
39
37
|
|
|
@@ -41,6 +39,10 @@ class RenderObjects {
|
|
|
41
39
|
|
|
42
40
|
renderObject = this.get( object, material, scene, camera, lightsNode, renderContext, passId );
|
|
43
41
|
|
|
42
|
+
} else {
|
|
43
|
+
|
|
44
|
+
renderObject.version = material.version;
|
|
45
|
+
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
}
|
|
@@ -10,7 +10,8 @@ import RenderContexts from './RenderContexts.js';
|
|
|
10
10
|
import Textures from './Textures.js';
|
|
11
11
|
import Background from './Background.js';
|
|
12
12
|
import Nodes from './nodes/Nodes.js';
|
|
13
|
-
import
|
|
13
|
+
import Color4 from './Color4.js';
|
|
14
|
+
import { Scene, Frustum, Matrix4, Vector2, Vector3, Vector4, DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping } from 'three';
|
|
14
15
|
|
|
15
16
|
const _scene = new Scene();
|
|
16
17
|
const _drawingBufferSize = new Vector2();
|
|
@@ -21,10 +22,16 @@ const _vector3 = new Vector3();
|
|
|
21
22
|
|
|
22
23
|
class Renderer {
|
|
23
24
|
|
|
24
|
-
constructor( backend ) {
|
|
25
|
+
constructor( backend, parameters = {} ) {
|
|
25
26
|
|
|
26
27
|
this.isRenderer = true;
|
|
27
28
|
|
|
29
|
+
//
|
|
30
|
+
|
|
31
|
+
const {
|
|
32
|
+
logarithmicDepthBuffer = false,
|
|
33
|
+
} = parameters;
|
|
34
|
+
|
|
28
35
|
// public
|
|
29
36
|
|
|
30
37
|
this.domElement = backend.getDomElement();
|
|
@@ -36,6 +43,8 @@ class Renderer {
|
|
|
36
43
|
this.autoClearDepth = true;
|
|
37
44
|
this.autoClearStencil = true;
|
|
38
45
|
|
|
46
|
+
this.logarithmicDepthBuffer = logarithmicDepthBuffer;
|
|
47
|
+
|
|
39
48
|
this.outputColorSpace = SRGBColorSpace;
|
|
40
49
|
|
|
41
50
|
this.toneMapping = NoToneMapping;
|
|
@@ -62,6 +71,7 @@ class Renderer {
|
|
|
62
71
|
this._attributes = null;
|
|
63
72
|
this._geometries = null;
|
|
64
73
|
this._nodes = null;
|
|
74
|
+
this._animation = null;
|
|
65
75
|
this._bindings = null;
|
|
66
76
|
this._objects = null;
|
|
67
77
|
this._pipelines = null;
|
|
@@ -70,16 +80,12 @@ class Renderer {
|
|
|
70
80
|
this._textures = null;
|
|
71
81
|
this._background = null;
|
|
72
82
|
|
|
73
|
-
this._animation = new Animation();
|
|
74
|
-
|
|
75
83
|
this._currentRenderContext = null;
|
|
76
|
-
this._lastRenderContext = null;
|
|
77
84
|
|
|
78
85
|
this._opaqueSort = null;
|
|
79
86
|
this._transparentSort = null;
|
|
80
87
|
|
|
81
|
-
this.
|
|
82
|
-
this._clearColor = new Color( 0x000000 );
|
|
88
|
+
this._clearColor = new Color4( 0x000000 );
|
|
83
89
|
this._clearDepth = 1;
|
|
84
90
|
this._clearStencil = 0;
|
|
85
91
|
|
|
@@ -87,6 +93,9 @@ class Renderer {
|
|
|
87
93
|
this._activeCubeFace = 0;
|
|
88
94
|
this._activeMipmapLevel = 0;
|
|
89
95
|
|
|
96
|
+
this._renderObjectFunction = null;
|
|
97
|
+
this._currentRenderObjectFunction = null;
|
|
98
|
+
|
|
90
99
|
this._initialized = false;
|
|
91
100
|
this._initPromise = null;
|
|
92
101
|
|
|
@@ -133,6 +142,7 @@ class Renderer {
|
|
|
133
142
|
}
|
|
134
143
|
|
|
135
144
|
this._nodes = new Nodes( this, backend );
|
|
145
|
+
this._animation = new Animation( this._nodes, this.info );
|
|
136
146
|
this._attributes = new Attributes( backend );
|
|
137
147
|
this._background = new Background( this, this._nodes );
|
|
138
148
|
this._geometries = new Geometries( this._attributes, this.info );
|
|
@@ -145,9 +155,6 @@ class Renderer {
|
|
|
145
155
|
|
|
146
156
|
//
|
|
147
157
|
|
|
148
|
-
this._animation.setNodes( this._nodes );
|
|
149
|
-
this._animation.start();
|
|
150
|
-
|
|
151
158
|
this._initialized = true;
|
|
152
159
|
|
|
153
160
|
resolve();
|
|
@@ -179,7 +186,8 @@ class Renderer {
|
|
|
179
186
|
const nodeFrame = this._nodes.nodeFrame;
|
|
180
187
|
|
|
181
188
|
const previousRenderId = nodeFrame.renderId;
|
|
182
|
-
const
|
|
189
|
+
const previousRenderContext = this._currentRenderContext;
|
|
190
|
+
const previousRenderObjectFunction = this._currentRenderObjectFunction;
|
|
183
191
|
|
|
184
192
|
//
|
|
185
193
|
|
|
@@ -191,8 +199,14 @@ class Renderer {
|
|
|
191
199
|
const activeMipmapLevel = this._activeMipmapLevel;
|
|
192
200
|
|
|
193
201
|
this._currentRenderContext = renderContext;
|
|
202
|
+
this._currentRenderObjectFunction = this._renderObjectFunction || this.renderObject;
|
|
203
|
+
|
|
204
|
+
//
|
|
194
205
|
|
|
195
|
-
|
|
206
|
+
this.info.calls ++;
|
|
207
|
+
this.info.render.calls ++;
|
|
208
|
+
|
|
209
|
+
nodeFrame.renderId = this.info.calls;
|
|
196
210
|
|
|
197
211
|
//
|
|
198
212
|
|
|
@@ -208,16 +222,12 @@ class Renderer {
|
|
|
208
222
|
|
|
209
223
|
//
|
|
210
224
|
|
|
211
|
-
if ( this._animation.isAnimating === false ) nodeFrame.update();
|
|
212
|
-
|
|
213
225
|
if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
|
|
214
226
|
|
|
215
227
|
if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
|
|
216
228
|
|
|
217
229
|
if ( this.info.autoReset === true ) this.info.reset();
|
|
218
230
|
|
|
219
|
-
this.info.render.frame ++;
|
|
220
|
-
|
|
221
231
|
//
|
|
222
232
|
|
|
223
233
|
let viewport = this._viewport;
|
|
@@ -288,6 +298,7 @@ class Renderer {
|
|
|
288
298
|
renderContext.depthTexture = renderTargetData.depthTexture;
|
|
289
299
|
renderContext.width = renderTargetData.width;
|
|
290
300
|
renderContext.height = renderTargetData.height;
|
|
301
|
+
renderContext.renderTarget = renderTarget;
|
|
291
302
|
|
|
292
303
|
} else {
|
|
293
304
|
|
|
@@ -332,9 +343,9 @@ class Renderer {
|
|
|
332
343
|
// restore render tree
|
|
333
344
|
|
|
334
345
|
nodeFrame.renderId = previousRenderId;
|
|
335
|
-
this._currentRenderContext = previousRenderState;
|
|
336
346
|
|
|
337
|
-
this.
|
|
347
|
+
this._currentRenderContext = previousRenderContext;
|
|
348
|
+
this._currentRenderObjectFunction = previousRenderObjectFunction;
|
|
338
349
|
|
|
339
350
|
//
|
|
340
351
|
|
|
@@ -342,6 +353,12 @@ class Renderer {
|
|
|
342
353
|
|
|
343
354
|
}
|
|
344
355
|
|
|
356
|
+
getMaxAnisotropy() {
|
|
357
|
+
|
|
358
|
+
return this.backend.getMaxAnisotropy();
|
|
359
|
+
|
|
360
|
+
}
|
|
361
|
+
|
|
345
362
|
getActiveCubeFace() {
|
|
346
363
|
|
|
347
364
|
return this._activeCubeFace;
|
|
@@ -354,15 +371,11 @@ class Renderer {
|
|
|
354
371
|
|
|
355
372
|
}
|
|
356
373
|
|
|
357
|
-
setAnimationLoop( callback ) {
|
|
374
|
+
async setAnimationLoop( callback ) {
|
|
358
375
|
|
|
359
|
-
if ( this._initialized === false ) this.init();
|
|
360
|
-
|
|
361
|
-
const animation = this._animation;
|
|
362
|
-
|
|
363
|
-
animation.setAnimationLoop( callback );
|
|
376
|
+
if ( this._initialized === false ) await this.init();
|
|
364
377
|
|
|
365
|
-
( callback
|
|
378
|
+
this._animation.setAnimationLoop( callback );
|
|
366
379
|
|
|
367
380
|
}
|
|
368
381
|
|
|
@@ -536,19 +549,19 @@ class Renderer {
|
|
|
536
549
|
setClearColor( color, alpha = 1 ) {
|
|
537
550
|
|
|
538
551
|
this._clearColor.set( color );
|
|
539
|
-
this.
|
|
552
|
+
this._clearColor.a = alpha;
|
|
540
553
|
|
|
541
554
|
}
|
|
542
555
|
|
|
543
556
|
getClearAlpha() {
|
|
544
557
|
|
|
545
|
-
return this.
|
|
558
|
+
return this._clearColor.a;
|
|
546
559
|
|
|
547
560
|
}
|
|
548
561
|
|
|
549
562
|
setClearAlpha( alpha ) {
|
|
550
563
|
|
|
551
|
-
this.
|
|
564
|
+
this._clearColor.a = alpha;
|
|
552
565
|
|
|
553
566
|
}
|
|
554
567
|
|
|
@@ -578,7 +591,7 @@ class Renderer {
|
|
|
578
591
|
|
|
579
592
|
isOccluded( object ) {
|
|
580
593
|
|
|
581
|
-
const renderContext = this._currentRenderContext
|
|
594
|
+
const renderContext = this._currentRenderContext;
|
|
582
595
|
|
|
583
596
|
return renderContext && this.backend.isOccluded( renderContext, object );
|
|
584
597
|
|
|
@@ -586,9 +599,18 @@ class Renderer {
|
|
|
586
599
|
|
|
587
600
|
clear( color = true, depth = true, stencil = true ) {
|
|
588
601
|
|
|
589
|
-
|
|
602
|
+
let renderTargetData = null;
|
|
603
|
+
const renderTarget = this._renderTarget;
|
|
590
604
|
|
|
591
|
-
if (
|
|
605
|
+
if ( renderTarget !== null ) {
|
|
606
|
+
|
|
607
|
+
this._textures.updateRenderTarget( renderTarget );
|
|
608
|
+
|
|
609
|
+
renderTargetData = this._textures.get( renderTarget );
|
|
610
|
+
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
this.backend.clear( color, depth, stencil, renderTargetData );
|
|
592
614
|
|
|
593
615
|
}
|
|
594
616
|
|
|
@@ -610,10 +632,27 @@ class Renderer {
|
|
|
610
632
|
|
|
611
633
|
}
|
|
612
634
|
|
|
635
|
+
get currentColorSpace() {
|
|
636
|
+
|
|
637
|
+
const renderTarget = this._renderTarget;
|
|
638
|
+
|
|
639
|
+
if ( renderTarget !== null ) {
|
|
640
|
+
|
|
641
|
+
const texture = renderTarget.texture;
|
|
642
|
+
|
|
643
|
+
return ( Array.isArray( texture ) ? texture[ 0 ] : texture ).colorSpace;
|
|
644
|
+
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
return this.outputColorSpace;
|
|
648
|
+
|
|
649
|
+
}
|
|
650
|
+
|
|
613
651
|
dispose() {
|
|
614
652
|
|
|
615
653
|
this.info.dispose();
|
|
616
654
|
|
|
655
|
+
this._animation.dispose();
|
|
617
656
|
this._objects.dispose();
|
|
618
657
|
this._properties.dispose();
|
|
619
658
|
this._pipelines.dispose();
|
|
@@ -642,16 +681,47 @@ class Renderer {
|
|
|
642
681
|
|
|
643
682
|
}
|
|
644
683
|
|
|
684
|
+
setRenderObjectFunction( renderObjectFunction ) {
|
|
685
|
+
|
|
686
|
+
this._renderObjectFunction = renderObjectFunction;
|
|
687
|
+
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
getRenderObjectFunction() {
|
|
691
|
+
|
|
692
|
+
return this._renderObjectFunction;
|
|
693
|
+
|
|
694
|
+
}
|
|
695
|
+
|
|
645
696
|
async compute( computeNodes ) {
|
|
646
697
|
|
|
647
698
|
if ( this._initialized === false ) await this.init();
|
|
648
699
|
|
|
700
|
+
const nodeFrame = this._nodes.nodeFrame;
|
|
701
|
+
|
|
702
|
+
const previousRenderId = nodeFrame.renderId;
|
|
703
|
+
|
|
704
|
+
//
|
|
705
|
+
|
|
706
|
+
this.info.calls ++;
|
|
707
|
+
this.info.compute.calls ++;
|
|
708
|
+
|
|
709
|
+
nodeFrame.renderId = this.info.calls;
|
|
710
|
+
|
|
711
|
+
//
|
|
712
|
+
|
|
649
713
|
const backend = this.backend;
|
|
650
714
|
const pipelines = this._pipelines;
|
|
651
715
|
const bindings = this._bindings;
|
|
652
716
|
const nodes = this._nodes;
|
|
653
717
|
const computeList = Array.isArray( computeNodes ) ? computeNodes : [ computeNodes ];
|
|
654
718
|
|
|
719
|
+
if ( computeList[ 0 ] === undefined || computeList[ 0 ].isComputeNode !== true ) {
|
|
720
|
+
|
|
721
|
+
throw new Error( 'THREE.Renderer: .compute() expects a ComputeNode.' );
|
|
722
|
+
|
|
723
|
+
}
|
|
724
|
+
|
|
655
725
|
backend.beginCompute( computeNodes );
|
|
656
726
|
|
|
657
727
|
for ( const computeNode of computeList ) {
|
|
@@ -690,6 +760,10 @@ class Renderer {
|
|
|
690
760
|
|
|
691
761
|
backend.finishCompute( computeNodes );
|
|
692
762
|
|
|
763
|
+
//
|
|
764
|
+
|
|
765
|
+
nodeFrame.renderId = previousRenderId;
|
|
766
|
+
|
|
693
767
|
}
|
|
694
768
|
|
|
695
769
|
hasFeature( name ) {
|
|
@@ -700,7 +774,7 @@ class Renderer {
|
|
|
700
774
|
|
|
701
775
|
copyFramebufferToTexture( framebufferTexture ) {
|
|
702
776
|
|
|
703
|
-
const renderContext = this._currentRenderContext
|
|
777
|
+
const renderContext = this._currentRenderContext;
|
|
704
778
|
|
|
705
779
|
this._textures.updateTexture( framebufferTexture );
|
|
706
780
|
|
|
@@ -825,7 +899,7 @@ class Renderer {
|
|
|
825
899
|
const renderItem = renderList[ i ];
|
|
826
900
|
|
|
827
901
|
// @TODO: Add support for multiple materials per object. This will require to extract
|
|
828
|
-
// the material from the renderItem object and pass it with its group data to
|
|
902
|
+
// the material from the renderItem object and pass it with its group data to renderObject().
|
|
829
903
|
|
|
830
904
|
const { object, geometry, material, group } = renderItem;
|
|
831
905
|
|
|
@@ -850,7 +924,7 @@ class Renderer {
|
|
|
850
924
|
|
|
851
925
|
this.backend.updateViewport( this._currentRenderContext );
|
|
852
926
|
|
|
853
|
-
this.
|
|
927
|
+
this._currentRenderObjectFunction( object, scene, camera2, geometry, material, group, lightsNode );
|
|
854
928
|
|
|
855
929
|
}
|
|
856
930
|
|
|
@@ -858,7 +932,7 @@ class Renderer {
|
|
|
858
932
|
|
|
859
933
|
} else {
|
|
860
934
|
|
|
861
|
-
this.
|
|
935
|
+
this._currentRenderObjectFunction( object, scene, camera, geometry, material, group, lightsNode );
|
|
862
936
|
|
|
863
937
|
}
|
|
864
938
|
|
|
@@ -866,9 +940,9 @@ class Renderer {
|
|
|
866
940
|
|
|
867
941
|
}
|
|
868
942
|
|
|
869
|
-
|
|
943
|
+
renderObject( object, scene, camera, geometry, material, group, lightsNode ) {
|
|
870
944
|
|
|
871
|
-
|
|
945
|
+
let overridePositionNode;
|
|
872
946
|
|
|
873
947
|
//
|
|
874
948
|
|
|
@@ -878,6 +952,24 @@ class Renderer {
|
|
|
878
952
|
|
|
879
953
|
//
|
|
880
954
|
|
|
955
|
+
if ( scene.overrideMaterial !== null ) {
|
|
956
|
+
|
|
957
|
+
const overrideMaterial = scene.overrideMaterial;
|
|
958
|
+
|
|
959
|
+
if ( material.positionNode && material.positionNode.isNode ) {
|
|
960
|
+
|
|
961
|
+
overridePositionNode = overrideMaterial.positionNode;
|
|
962
|
+
|
|
963
|
+
overrideMaterial.positionNode = material.positionNode;
|
|
964
|
+
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
material = overrideMaterial;
|
|
968
|
+
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
//
|
|
972
|
+
|
|
881
973
|
if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {
|
|
882
974
|
|
|
883
975
|
material.side = BackSide;
|
|
@@ -896,6 +988,14 @@ class Renderer {
|
|
|
896
988
|
|
|
897
989
|
//
|
|
898
990
|
|
|
991
|
+
if ( overridePositionNode !== undefined ) {
|
|
992
|
+
|
|
993
|
+
scene.overrideMaterial.positionNode = overridePositionNode;
|
|
994
|
+
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
//
|
|
998
|
+
|
|
899
999
|
object.onAfterRender( this, scene, camera, geometry, material, group );
|
|
900
1000
|
|
|
901
1001
|
}
|
|
@@ -70,6 +70,8 @@ class Textures extends DataMap {
|
|
|
70
70
|
renderTargetData.height = size.height;
|
|
71
71
|
renderTargetData.textures = textures;
|
|
72
72
|
renderTargetData.depthTexture = depthTexture;
|
|
73
|
+
renderTargetData.depth = renderTarget.depthBuffer;
|
|
74
|
+
renderTargetData.stencil = renderTarget.stencilBuffer;
|
|
73
75
|
|
|
74
76
|
if ( renderTargetData.sampleCount !== sampleCount ) {
|
|
75
77
|
|
|
@@ -80,8 +82,9 @@ class Textures extends DataMap {
|
|
|
80
82
|
|
|
81
83
|
}
|
|
82
84
|
|
|
83
|
-
|
|
85
|
+
//
|
|
84
86
|
|
|
87
|
+
const options = { sampleCount };
|
|
85
88
|
|
|
86
89
|
for ( let i = 0; i < textures.length; i ++ ) {
|
|
87
90
|
|
|
@@ -191,7 +194,7 @@ class Textures extends DataMap {
|
|
|
191
194
|
|
|
192
195
|
for ( const image of texture.images ) {
|
|
193
196
|
|
|
194
|
-
images.push(
|
|
197
|
+
images.push( image );
|
|
195
198
|
|
|
196
199
|
}
|
|
197
200
|
|
|
@@ -199,7 +202,7 @@ class Textures extends DataMap {
|
|
|
199
202
|
|
|
200
203
|
} else {
|
|
201
204
|
|
|
202
|
-
options.image =
|
|
205
|
+
options.image = image;
|
|
203
206
|
|
|
204
207
|
}
|
|
205
208
|
|
|
@@ -213,7 +216,7 @@ class Textures extends DataMap {
|
|
|
213
216
|
|
|
214
217
|
backend.updateTexture( texture, options );
|
|
215
218
|
|
|
216
|
-
if ( options.needsMipmaps ) backend.generateMipmaps( texture );
|
|
219
|
+
if ( options.needsMipmaps && texture.mipmaps.length === 0 ) backend.generateMipmaps( texture );
|
|
217
220
|
|
|
218
221
|
}
|
|
219
222
|
|
|
@@ -305,7 +308,7 @@ class Textures extends DataMap {
|
|
|
305
308
|
|
|
306
309
|
if ( this.isEnvironmentTexture( texture ) ) return true;
|
|
307
310
|
|
|
308
|
-
return ( texture.isCompressedTexture
|
|
311
|
+
return ( texture.isCompressedTexture === true ) || ( ( texture.minFilter !== NearestFilter ) && ( texture.minFilter !== LinearFilter ) );
|
|
309
312
|
|
|
310
313
|
}
|
|
311
314
|
|
|
@@ -317,38 +320,6 @@ class Textures extends DataMap {
|
|
|
317
320
|
|
|
318
321
|
}
|
|
319
322
|
|
|
320
|
-
_getUploadImage( image ) {
|
|
321
|
-
|
|
322
|
-
if ( this._isHTMLImage( image ) ) {
|
|
323
|
-
|
|
324
|
-
return this._imageToCanvas( image );
|
|
325
|
-
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
return image;
|
|
329
|
-
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
_imageToCanvas( image ) {
|
|
333
|
-
|
|
334
|
-
const { width, height } = image;
|
|
335
|
-
|
|
336
|
-
// eslint-disable-next-line compat/compat
|
|
337
|
-
const canvas = new OffscreenCanvas( width, height );
|
|
338
|
-
|
|
339
|
-
const context = canvas.getContext( '2d' );
|
|
340
|
-
context.drawImage( image, 0, 0, width, height );
|
|
341
|
-
|
|
342
|
-
return canvas;
|
|
343
|
-
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
_isHTMLImage( image ) {
|
|
347
|
-
|
|
348
|
-
return ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) || ( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement );
|
|
349
|
-
|
|
350
|
-
}
|
|
351
|
-
|
|
352
323
|
_destroyTexture( texture ) {
|
|
353
324
|
|
|
354
325
|
this.backend.destroySampler( texture );
|
|
@@ -20,9 +20,17 @@ class NodeBuilderState {
|
|
|
20
20
|
|
|
21
21
|
const bindingsArray = [];
|
|
22
22
|
|
|
23
|
-
for ( const
|
|
23
|
+
for ( const instanceBinding of this.bindings ) {
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
let binding = instanceBinding;
|
|
26
|
+
|
|
27
|
+
if ( instanceBinding.shared !== true ) {
|
|
28
|
+
|
|
29
|
+
binding = instanceBinding.clone();
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
bindingsArray.push( binding );
|
|
26
34
|
|
|
27
35
|
}
|
|
28
36
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import UniformsGroup from '../UniformsGroup.js';
|
|
2
|
+
|
|
3
|
+
let id = 0;
|
|
4
|
+
|
|
5
|
+
class NodeUniformsGroup extends UniformsGroup {
|
|
6
|
+
|
|
7
|
+
constructor( name, groupNode ) {
|
|
8
|
+
|
|
9
|
+
super( name );
|
|
10
|
+
|
|
11
|
+
this.id = id ++;
|
|
12
|
+
this.groupNode = groupNode;
|
|
13
|
+
|
|
14
|
+
this.isNodeUniformsGroup = true;
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
get shared() {
|
|
19
|
+
|
|
20
|
+
return this.groupNode.shared;
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
getNodes() {
|
|
25
|
+
|
|
26
|
+
const nodes = [];
|
|
27
|
+
|
|
28
|
+
for ( const uniform of this.uniforms ) {
|
|
29
|
+
|
|
30
|
+
const node = uniform.nodeUniform.node;
|
|
31
|
+
|
|
32
|
+
if ( ! node ) throw new Error( 'NodeUniformsGroup: Uniform has no node.' );
|
|
33
|
+
|
|
34
|
+
nodes.push( node );
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return nodes;
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export default NodeUniformsGroup;
|