super-three 0.158.0 → 0.160.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +1720 -380
- package/build/three.js +1720 -380
- package/build/three.min.js +1 -1
- package/build/three.module.js +1719 -381
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +2 -1
- package/examples/jsm/controls/OrbitControls.js +50 -40
- package/examples/jsm/csm/CSMShader.js +52 -47
- package/examples/jsm/exporters/GLTFExporter.js +79 -1
- package/examples/jsm/exporters/USDZExporter.js +27 -19
- package/examples/jsm/helpers/TextureHelper.js +237 -0
- package/examples/jsm/interactive/HTMLMesh.js +9 -2
- 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 +71 -3
- 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/math/Octree.js +15 -4
- 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/nodes/Nodes.js +11 -7
- package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
- package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
- package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
- package/examples/jsm/nodes/accessors/TextureNode.js +122 -36
- package/examples/jsm/nodes/code/CodeNode.js +3 -3
- 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/Node.js +6 -3
- package/examples/jsm/nodes/core/NodeBuilder.js +84 -27
- 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 +3 -7
- package/examples/jsm/nodes/core/OutputStructNode.js +3 -3
- package/examples/jsm/nodes/core/PropertyNode.js +17 -2
- package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
- 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 +2 -0
- package/examples/jsm/nodes/core/VaryingNode.js +1 -7
- package/examples/jsm/nodes/display/BumpMapNode.js +1 -1
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
- package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
- 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 +5 -8
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +52 -17
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -12
- package/examples/jsm/nodes/lighting/LightsNode.js +34 -32
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +12 -12
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/NodeMaterial.js +66 -41
- 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 +19 -6
- package/examples/jsm/nodes/shadernode/ShaderNode.js +32 -3
- package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +8 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/examples/jsm/objects/QuadMesh.js +60 -0
- package/examples/jsm/postprocessing/GTAOPass.js +572 -0
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- 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 +30 -21
- 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 +13 -1
- package/examples/jsm/renderers/common/RenderObjects.js +4 -2
- 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 +4 -1
- 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 +74 -7
- package/examples/jsm/renderers/webgl/WebGLBackend.js +91 -33
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +100 -31
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +57 -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/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 +186 -137
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +209 -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/FXAAShader.js +133 -133
- package/examples/jsm/shaders/GTAOShader.js +424 -0
- package/examples/jsm/shaders/OutputShader.js +4 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
- package/examples/jsm/shaders/SAOShader.js +2 -3
- package/examples/jsm/shaders/SSAOShader.js +2 -3
- package/examples/jsm/transpiler/AST.js +40 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +50 -8
- package/examples/jsm/transpiler/ShaderToyDecoder.js +4 -4
- package/examples/jsm/transpiler/TSLEncoder.js +124 -20
- 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 +23 -8
- package/examples/jsm/webxr/XRButton.js +25 -11
- package/package.json +5 -6
- package/src/Three.js +1 -0
- package/src/constants.js +2 -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/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/ObjectLoader.js +49 -0
- package/src/materials/ShaderMaterial.js +2 -1
- 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/objects/BatchedMesh.js +1020 -0
- package/src/objects/Skeleton.js +1 -3
- package/src/renderers/WebGL3DRenderTarget.js +2 -2
- package/src/renderers/WebGLArrayRenderTarget.js +2 -2
- package/src/renderers/WebGLRenderer.js +24 -19
- 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/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_physical_fragment.glsl.js +9 -4
- 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 +2 -0
- 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 +20 -1
- package/src/renderers/webgl/WebGLPrograms.js +5 -0
- package/src/renderers/webgl/WebGLShadowMap.js +35 -0
- 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/objects/BatchedMesh.js +0 -586
|
@@ -8,6 +8,7 @@ function WebGLAttributes( gl, capabilities ) {
|
|
|
8
8
|
|
|
9
9
|
const array = attribute.array;
|
|
10
10
|
const usage = attribute.usage;
|
|
11
|
+
const size = array.byteLength;
|
|
11
12
|
|
|
12
13
|
const buffer = gl.createBuffer();
|
|
13
14
|
|
|
@@ -76,7 +77,8 @@ function WebGLAttributes( gl, capabilities ) {
|
|
|
76
77
|
buffer: buffer,
|
|
77
78
|
type: type,
|
|
78
79
|
bytesPerElement: array.BYTES_PER_ELEMENT,
|
|
79
|
-
version: attribute.version
|
|
80
|
+
version: attribute.version,
|
|
81
|
+
size: size
|
|
80
82
|
};
|
|
81
83
|
|
|
82
84
|
}
|
|
@@ -84,17 +86,43 @@ function WebGLAttributes( gl, capabilities ) {
|
|
|
84
86
|
function updateBuffer( buffer, attribute, bufferType ) {
|
|
85
87
|
|
|
86
88
|
const array = attribute.array;
|
|
87
|
-
const updateRange = attribute.
|
|
89
|
+
const updateRange = attribute._updateRange; // deprecated
|
|
90
|
+
const updateRanges = attribute.updateRanges;
|
|
88
91
|
|
|
89
92
|
gl.bindBuffer( bufferType, buffer );
|
|
90
93
|
|
|
91
|
-
if ( updateRange.count === - 1 ) {
|
|
94
|
+
if ( updateRange.count === - 1 && updateRanges.length === 0 ) {
|
|
92
95
|
|
|
93
96
|
// Not using update ranges
|
|
94
|
-
|
|
95
97
|
gl.bufferSubData( bufferType, 0, array );
|
|
96
98
|
|
|
97
|
-
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if ( updateRanges.length !== 0 ) {
|
|
102
|
+
|
|
103
|
+
for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
|
|
104
|
+
|
|
105
|
+
const range = updateRanges[ i ];
|
|
106
|
+
if ( isWebGL2 ) {
|
|
107
|
+
|
|
108
|
+
gl.bufferSubData( bufferType, range.start * array.BYTES_PER_ELEMENT,
|
|
109
|
+
array, range.start, range.count );
|
|
110
|
+
|
|
111
|
+
} else {
|
|
112
|
+
|
|
113
|
+
gl.bufferSubData( bufferType, range.start * array.BYTES_PER_ELEMENT,
|
|
114
|
+
array.subarray( range.start, range.start + range.count ) );
|
|
115
|
+
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
attribute.clearUpdateRanges();
|
|
121
|
+
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// deprecated
|
|
125
|
+
if ( updateRange.count !== - 1 ) {
|
|
98
126
|
|
|
99
127
|
if ( isWebGL2 ) {
|
|
100
128
|
|
|
@@ -173,6 +201,12 @@ function WebGLAttributes( gl, capabilities ) {
|
|
|
173
201
|
|
|
174
202
|
} else if ( data.version < attribute.version ) {
|
|
175
203
|
|
|
204
|
+
if ( data.size !== attribute.array.byteLength ) {
|
|
205
|
+
|
|
206
|
+
throw new Error( 'THREE.WebGLAttributes: The size of the buffer attribute\'s array buffer does not match the original size. Resizing buffer attributes is not supported.' );
|
|
207
|
+
|
|
208
|
+
}
|
|
209
|
+
|
|
176
210
|
updateBuffer( data.buffer, attribute, bufferType );
|
|
177
211
|
|
|
178
212
|
data.version = attribute.version;
|
|
@@ -49,11 +49,42 @@ function WebGLBufferRenderer( gl, extensions, info, capabilities ) {
|
|
|
49
49
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
function renderMultiDraw( starts, counts, drawCount ) {
|
|
53
|
+
|
|
54
|
+
if ( drawCount === 0 ) return;
|
|
55
|
+
|
|
56
|
+
const extension = extensions.get( 'WEBGL_multi_draw' );
|
|
57
|
+
if ( extension === null ) {
|
|
58
|
+
|
|
59
|
+
for ( let i = 0; i < drawCount; i ++ ) {
|
|
60
|
+
|
|
61
|
+
this.render( starts[ i ], counts[ i ] );
|
|
62
|
+
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
} else {
|
|
66
|
+
|
|
67
|
+
extension.multiDrawArraysWEBGL( mode, starts, 0, counts, 0, drawCount );
|
|
68
|
+
|
|
69
|
+
let elementCount = 0;
|
|
70
|
+
for ( let i = 0; i < drawCount; i ++ ) {
|
|
71
|
+
|
|
72
|
+
elementCount += counts[ i ];
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
info.update( elementCount, mode, 1 );
|
|
77
|
+
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
}
|
|
81
|
+
|
|
52
82
|
//
|
|
53
83
|
|
|
54
84
|
this.setMode = setMode;
|
|
55
85
|
this.render = render;
|
|
56
86
|
this.renderInstances = renderInstances;
|
|
87
|
+
this.renderMultiDraw = renderMultiDraw;
|
|
57
88
|
|
|
58
89
|
}
|
|
59
90
|
|
|
@@ -58,12 +58,43 @@ function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {
|
|
|
58
58
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
function renderMultiDraw( starts, counts, drawCount ) {
|
|
62
|
+
|
|
63
|
+
if ( drawCount === 0 ) return;
|
|
64
|
+
|
|
65
|
+
const extension = extensions.get( 'WEBGL_multi_draw' );
|
|
66
|
+
if ( extension === null ) {
|
|
67
|
+
|
|
68
|
+
for ( let i = 0; i < drawCount; i ++ ) {
|
|
69
|
+
|
|
70
|
+
this.render( starts[ i ] / bytesPerElement, counts[ i ] );
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
} else {
|
|
75
|
+
|
|
76
|
+
extension.multiDrawElementsWEBGL( mode, counts, 0, type, starts, 0, drawCount );
|
|
77
|
+
|
|
78
|
+
let elementCount = 0;
|
|
79
|
+
for ( let i = 0; i < drawCount; i ++ ) {
|
|
80
|
+
|
|
81
|
+
elementCount += counts[ i ];
|
|
82
|
+
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
info.update( elementCount, mode, 1 );
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
}
|
|
90
|
+
|
|
61
91
|
//
|
|
62
92
|
|
|
63
93
|
this.setMode = setMode;
|
|
64
94
|
this.setIndex = setIndex;
|
|
65
95
|
this.render = render;
|
|
66
96
|
this.renderInstances = renderInstances;
|
|
97
|
+
this.renderMultiDraw = renderMultiDraw;
|
|
67
98
|
|
|
68
99
|
}
|
|
69
100
|
|
|
@@ -403,8 +403,17 @@ function WebGLLights( extensions, capabilities ) {
|
|
|
403
403
|
|
|
404
404
|
// WebGL 2
|
|
405
405
|
|
|
406
|
-
|
|
407
|
-
|
|
406
|
+
if ( extensions.has( 'OES_texture_float_linear' ) === true ) {
|
|
407
|
+
|
|
408
|
+
state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;
|
|
409
|
+
state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;
|
|
410
|
+
|
|
411
|
+
} else {
|
|
412
|
+
|
|
413
|
+
state.rectAreaLTC1 = UniformsLib.LTC_HALF_1;
|
|
414
|
+
state.rectAreaLTC2 = UniformsLib.LTC_HALF_2;
|
|
415
|
+
|
|
416
|
+
}
|
|
408
417
|
|
|
409
418
|
} else {
|
|
410
419
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { WebGLUniforms } from './WebGLUniforms.js';
|
|
2
2
|
import { WebGLShader } from './WebGLShader.js';
|
|
3
3
|
import { ShaderChunk } from '../shaders/ShaderChunk.js';
|
|
4
|
-
import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, ACESFilmicToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearSRGBColorSpace, SRGBColorSpace, LinearDisplayP3ColorSpace, DisplayP3ColorSpace, P3Primaries, Rec709Primaries } from '../../constants.js';
|
|
4
|
+
import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, AgXToneMapping, ACESFilmicToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearSRGBColorSpace, SRGBColorSpace, LinearDisplayP3ColorSpace, DisplayP3ColorSpace, P3Primaries, Rec709Primaries } from '../../constants.js';
|
|
5
5
|
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
6
6
|
|
|
7
7
|
// From https://www.khronos.org/registry/webgl/extensions/KHR_parallel_shader_compile/
|
|
@@ -120,6 +120,10 @@ function getToneMappingFunction( functionName, toneMapping ) {
|
|
|
120
120
|
toneMappingName = 'ACESFilmic';
|
|
121
121
|
break;
|
|
122
122
|
|
|
123
|
+
case AgXToneMapping:
|
|
124
|
+
toneMappingName = 'AgX';
|
|
125
|
+
break;
|
|
126
|
+
|
|
123
127
|
case CustomToneMapping:
|
|
124
128
|
toneMappingName = 'Custom';
|
|
125
129
|
break;
|
|
@@ -147,6 +151,16 @@ function generateExtensions( parameters ) {
|
|
|
147
151
|
|
|
148
152
|
}
|
|
149
153
|
|
|
154
|
+
function generateVertexExtensions( parameters ) {
|
|
155
|
+
|
|
156
|
+
const chunks = [
|
|
157
|
+
parameters.extensionClipCullDistance ? '#extension GL_ANGLE_clip_cull_distance : require' : ''
|
|
158
|
+
];
|
|
159
|
+
|
|
160
|
+
return chunks.filter( filterEmptyLine ).join( '\n' );
|
|
161
|
+
|
|
162
|
+
}
|
|
163
|
+
|
|
150
164
|
function generateDefines( defines ) {
|
|
151
165
|
|
|
152
166
|
const chunks = [];
|
|
@@ -451,6 +465,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
451
465
|
|
|
452
466
|
const customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );
|
|
453
467
|
|
|
468
|
+
const customVertexExtensions = generateVertexExtensions( parameters );
|
|
469
|
+
|
|
454
470
|
const customDefines = generateDefines( defines );
|
|
455
471
|
|
|
456
472
|
const program = gl.createProgram();
|
|
@@ -505,6 +521,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
505
521
|
|
|
506
522
|
customDefines,
|
|
507
523
|
|
|
524
|
+
parameters.extensionClipCullDistance ? '#define USE_CLIP_DISTANCE' : '',
|
|
525
|
+
parameters.batching ? '#define USE_BATCHING' : '',
|
|
508
526
|
parameters.instancing ? '#define USE_INSTANCING' : '',
|
|
509
527
|
parameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',
|
|
510
528
|
|
|
@@ -844,6 +862,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
844
862
|
versionString = '#version 300 es\n';
|
|
845
863
|
|
|
846
864
|
prefixVertex = [
|
|
865
|
+
customVertexExtensions,
|
|
847
866
|
'precision mediump sampler2DArray;',
|
|
848
867
|
'#define attribute in',
|
|
849
868
|
'#define varying out',
|
|
@@ -110,6 +110,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
110
110
|
const numMultiviewViews = currentRenderTarget && currentRenderTarget.isWebGLMultiviewRenderTarget ? currentRenderTarget.numViews : 0;
|
|
111
111
|
|
|
112
112
|
const IS_INSTANCEDMESH = object.isInstancedMesh === true;
|
|
113
|
+
const IS_BATCHEDMESH = object.isBatchedMesh === true;
|
|
113
114
|
|
|
114
115
|
const HAS_MAP = !! material.map;
|
|
115
116
|
const HAS_MATCAP = !! material.matcap;
|
|
@@ -195,6 +196,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
195
196
|
|
|
196
197
|
precision: precision,
|
|
197
198
|
|
|
199
|
+
batching: IS_BATCHEDMESH,
|
|
198
200
|
instancing: IS_INSTANCEDMESH,
|
|
199
201
|
instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,
|
|
200
202
|
|
|
@@ -357,6 +359,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
357
359
|
extensionFragDepth: HAS_EXTENSIONS && material.extensions.fragDepth === true,
|
|
358
360
|
extensionDrawBuffers: HAS_EXTENSIONS && material.extensions.drawBuffers === true,
|
|
359
361
|
extensionShaderTextureLOD: HAS_EXTENSIONS && material.extensions.shaderTextureLOD === true,
|
|
362
|
+
extensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance && extensions.has( 'WEBGL_clip_cull_distance' ),
|
|
360
363
|
|
|
361
364
|
rendererExtensionFragDepth: IS_WEBGL2 || extensions.has( 'EXT_frag_depth' ),
|
|
362
365
|
rendererExtensionDrawBuffers: IS_WEBGL2 || extensions.has( 'WEBGL_draw_buffers' ),
|
|
@@ -506,6 +509,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
506
509
|
_programLayers.enable( 17 );
|
|
507
510
|
if ( parameters.alphaHash )
|
|
508
511
|
_programLayers.enable( 18 );
|
|
512
|
+
if ( parameters.batching )
|
|
513
|
+
_programLayers.enable( 19 );
|
|
509
514
|
|
|
510
515
|
array.push( _programLayers.mask );
|
|
511
516
|
_programLayers.disableAll();
|
|
@@ -279,6 +279,7 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
279
279
|
|
|
280
280
|
cachedMaterial = result.clone();
|
|
281
281
|
materialsForVariant[ keyB ] = cachedMaterial;
|
|
282
|
+
material.addEventListener( 'dispose', onMaterialDispose );
|
|
282
283
|
|
|
283
284
|
}
|
|
284
285
|
|
|
@@ -355,8 +356,12 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
355
356
|
|
|
356
357
|
const depthMaterial = getDepthMaterial( object, groupMaterial, light, type );
|
|
357
358
|
|
|
359
|
+
object.onBeforeShadow( _renderer, object, camera, shadowCamera, geometry, depthMaterial, group );
|
|
360
|
+
|
|
358
361
|
_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );
|
|
359
362
|
|
|
363
|
+
object.onAfterShadow( _renderer, object, camera, shadowCamera, geometry, depthMaterial, group );
|
|
364
|
+
|
|
360
365
|
}
|
|
361
366
|
|
|
362
367
|
}
|
|
@@ -365,8 +370,12 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
365
370
|
|
|
366
371
|
const depthMaterial = getDepthMaterial( object, material, light, type );
|
|
367
372
|
|
|
373
|
+
object.onBeforeShadow( _renderer, object, camera, shadowCamera, geometry, depthMaterial, null );
|
|
374
|
+
|
|
368
375
|
_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );
|
|
369
376
|
|
|
377
|
+
object.onAfterShadow( _renderer, object, camera, shadowCamera, geometry, depthMaterial, null );
|
|
378
|
+
|
|
370
379
|
}
|
|
371
380
|
|
|
372
381
|
}
|
|
@@ -383,6 +392,32 @@ function WebGLShadowMap( _renderer, _objects, _capabilities ) {
|
|
|
383
392
|
|
|
384
393
|
}
|
|
385
394
|
|
|
395
|
+
function onMaterialDispose( event ) {
|
|
396
|
+
|
|
397
|
+
const material = event.target;
|
|
398
|
+
|
|
399
|
+
material.removeEventListener( 'dispose', onMaterialDispose );
|
|
400
|
+
|
|
401
|
+
// make sure to remove the unique distance/depth materials used for shadow map rendering
|
|
402
|
+
|
|
403
|
+
for ( const id in _materialCache ) {
|
|
404
|
+
|
|
405
|
+
const cache = _materialCache[ id ];
|
|
406
|
+
|
|
407
|
+
const uuid = event.target.uuid;
|
|
408
|
+
|
|
409
|
+
if ( uuid in cache ) {
|
|
410
|
+
|
|
411
|
+
const shadowMaterial = cache[ uuid ];
|
|
412
|
+
shadowMaterial.dispose();
|
|
413
|
+
delete cache[ uuid ];
|
|
414
|
+
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
}
|
|
420
|
+
|
|
386
421
|
}
|
|
387
422
|
|
|
388
423
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBAFormat, DepthFormat, DepthStencilFormat, UnsignedShortType, UnsignedIntType, UnsignedInt248Type, FloatType, HalfFloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, UnsignedByteType, _SRGBAFormat, NoColorSpace, LinearSRGBColorSpace, NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, SRGBTransfer, LinearTransfer } from '../../constants.js';
|
|
1
|
+
import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBAFormat, RGB_ETC1_Format, DepthFormat, DepthStencilFormat, UnsignedShortType, UnsignedIntType, UnsignedInt248Type, FloatType, HalfFloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, UnsignedByteType, _SRGBAFormat, NoColorSpace, LinearSRGBColorSpace, NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, SRGBTransfer, LinearTransfer } from '../../constants.js';
|
|
2
2
|
import * as MathUtils from '../../math/MathUtils.js';
|
|
3
3
|
import { ImageUtils } from '../../extras/ImageUtils.js';
|
|
4
4
|
import { createElementNS } from '../../utils.js';
|
|
@@ -7,10 +7,6 @@ import { ColorManagement } from '../../math/ColorManagement.js';
|
|
|
7
7
|
function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {
|
|
8
8
|
|
|
9
9
|
const isWebGL2 = capabilities.isWebGL2;
|
|
10
|
-
const maxTextures = capabilities.maxTextures;
|
|
11
|
-
const maxCubemapSize = capabilities.maxCubemapSize;
|
|
12
|
-
const maxTextureSize = capabilities.maxTextureSize;
|
|
13
|
-
const maxSamples = capabilities.maxSamples;
|
|
14
10
|
const multisampledRTTExt = extensions.has( 'WEBGL_multisampled_render_to_texture' ) ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : null;
|
|
15
11
|
const supportsInvalidateFramebuffer = typeof navigator === 'undefined' ? false : /OculusBrowser/g.test( navigator.userAgent );
|
|
16
12
|
const multiviewExt = extensions.has( 'OCULUS_multiview' ) ? extensions.get( 'OCULUS_multiview' ) : null;
|
|
@@ -433,9 +429,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
433
429
|
|
|
434
430
|
const textureUnit = textureUnits;
|
|
435
431
|
|
|
436
|
-
if ( textureUnit >= maxTextures ) {
|
|
432
|
+
if ( textureUnit >= capabilities.maxTextures ) {
|
|
437
433
|
|
|
438
|
-
console.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures );
|
|
434
|
+
console.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures );
|
|
439
435
|
|
|
440
436
|
}
|
|
441
437
|
|
|
@@ -792,7 +788,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
792
788
|
_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );
|
|
793
789
|
|
|
794
790
|
const needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( texture.image ) === false;
|
|
795
|
-
let image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );
|
|
791
|
+
let image = resizeImage( texture.image, needsPowerOfTwo, false, capabilities.maxTextureSize );
|
|
796
792
|
image = verifyColorSpace( texture, image );
|
|
797
793
|
|
|
798
794
|
const supportsMips = isPowerOfTwo( image ) || isWebGL2,
|
|
@@ -806,7 +802,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
806
802
|
let mipmap;
|
|
807
803
|
const mipmaps = texture.mipmaps;
|
|
808
804
|
|
|
809
|
-
const useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );
|
|
805
|
+
const useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true && glInternalFormat !== RGB_ETC1_Format );
|
|
810
806
|
const allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );
|
|
811
807
|
const levels = getMipLevels( texture, image, supportsMips );
|
|
812
808
|
|
|
@@ -1219,7 +1215,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1219
1215
|
|
|
1220
1216
|
if ( ! isCompressed && ! isDataTexture ) {
|
|
1221
1217
|
|
|
1222
|
-
cubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );
|
|
1218
|
+
cubeImage[ i ] = resizeImage( texture.image[ i ], false, true, capabilities.maxCubemapSize );
|
|
1223
1219
|
|
|
1224
1220
|
} else {
|
|
1225
1221
|
|
|
@@ -2178,7 +2174,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
2178
2174
|
|
|
2179
2175
|
function getRenderTargetSamples( renderTarget ) {
|
|
2180
2176
|
|
|
2181
|
-
return Math.min( maxSamples, renderTarget.samples );
|
|
2177
|
+
return Math.min( capabilities.maxSamples, renderTarget.samples );
|
|
2182
2178
|
|
|
2183
2179
|
}
|
|
2184
2180
|
|
|
@@ -45,8 +45,14 @@ import { CubeTexture } from '../../textures/CubeTexture.js';
|
|
|
45
45
|
import { Texture } from '../../textures/Texture.js';
|
|
46
46
|
import { DataArrayTexture } from '../../textures/DataArrayTexture.js';
|
|
47
47
|
import { Data3DTexture } from '../../textures/Data3DTexture.js';
|
|
48
|
+
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
49
|
+
import { LessEqualCompare } from '../../constants.js';
|
|
48
50
|
|
|
49
51
|
const emptyTexture = /*@__PURE__*/ new Texture();
|
|
52
|
+
|
|
53
|
+
const emptyShadowTexture = /*@__PURE__*/ new DepthTexture( 1, 1 );
|
|
54
|
+
emptyShadowTexture.compareFunction = LessEqualCompare;
|
|
55
|
+
|
|
50
56
|
const emptyArrayTexture = /*@__PURE__*/ new DataArrayTexture();
|
|
51
57
|
const empty3dTexture = /*@__PURE__*/ new Data3DTexture();
|
|
52
58
|
const emptyCubeTexture = /*@__PURE__*/ new CubeTexture();
|
|
@@ -563,7 +569,9 @@ function setValueT1( gl, v, textures ) {
|
|
|
563
569
|
|
|
564
570
|
}
|
|
565
571
|
|
|
566
|
-
|
|
572
|
+
const emptyTexture2D = ( this.type === gl.SAMPLER_2D_SHADOW ) ? emptyShadowTexture : emptyTexture;
|
|
573
|
+
|
|
574
|
+
textures.setTexture2D( v || emptyTexture2D, unit );
|
|
567
575
|
|
|
568
576
|
}
|
|
569
577
|
|
|
@@ -947,6 +955,7 @@ class SingleUniform {
|
|
|
947
955
|
this.id = id;
|
|
948
956
|
this.addr = addr;
|
|
949
957
|
this.cache = [];
|
|
958
|
+
this.type = activeInfo.type;
|
|
950
959
|
this.setValue = getSingularSetter( activeInfo.type );
|
|
951
960
|
|
|
952
961
|
// this.path = activeInfo.name; // DEBUG
|
|
@@ -962,6 +971,7 @@ class PureArrayUniform {
|
|
|
962
971
|
this.id = id;
|
|
963
972
|
this.addr = addr;
|
|
964
973
|
this.cache = [];
|
|
974
|
+
this.type = activeInfo.type;
|
|
965
975
|
this.size = activeInfo.size;
|
|
966
976
|
this.setValue = getPureArraySetter( activeInfo.type );
|
|
967
977
|
|