super-three 0.162.0 → 0.164.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +847 -1226
- package/build/three.module.js +846 -1225
- package/build/three.module.min.js +2 -2
- package/examples/jsm/animation/CCDIKSolver.js +4 -2
- package/examples/jsm/controls/TransformControls.js +3 -3
- package/examples/jsm/exporters/GLTFExporter.js +66 -5
- package/examples/jsm/exporters/USDZExporter.js +22 -1
- package/examples/jsm/geometries/TextGeometry.js +10 -2
- package/examples/jsm/interactive/HTMLMesh.js +7 -9
- package/examples/jsm/libs/draco/README.md +2 -2
- package/examples/jsm/libs/fflate.module.js +694 -496
- package/examples/jsm/lines/LineMaterial.js +0 -2
- package/examples/jsm/loaders/3MFLoader.js +2 -0
- package/examples/jsm/loaders/EXRLoader.js +351 -97
- package/examples/jsm/loaders/FBXLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +59 -0
- package/examples/jsm/loaders/KTX2Loader.js +3 -10
- package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
- package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
- package/examples/jsm/loaders/LUTImageLoader.js +0 -14
- package/examples/jsm/loaders/RGBMLoader.js +16 -0
- package/examples/jsm/loaders/VRMLLoader.js +1 -1
- package/examples/jsm/loaders/lwo/IFFParser.js +8 -5
- package/examples/jsm/materials/MeshGouraudMaterial.js +7 -1
- package/examples/jsm/math/Octree.js +26 -20
- package/examples/jsm/misc/GPUComputationRenderer.js +0 -6
- package/examples/jsm/nodes/Nodes.js +10 -4
- package/examples/jsm/nodes/accessors/AccessorsUtils.js +16 -1
- package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
- package/examples/jsm/nodes/accessors/ClippingNode.js +3 -2
- package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
- package/examples/jsm/nodes/accessors/MaterialNode.js +107 -3
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/MorphNode.js +13 -3
- package/examples/jsm/nodes/accessors/NormalNode.js +12 -2
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/RendererReferenceNode.js +29 -0
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +9 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +51 -10
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +1 -1
- package/examples/jsm/nodes/code/FunctionNode.js +0 -8
- package/examples/jsm/nodes/core/Node.js +63 -4
- package/examples/jsm/nodes/core/NodeBuilder.js +26 -25
- package/examples/jsm/nodes/core/NodeFrame.js +10 -10
- package/examples/jsm/nodes/core/NodeUtils.js +2 -2
- package/examples/jsm/nodes/core/OutputStructNode.js +2 -1
- package/examples/jsm/nodes/core/PropertyNode.js +10 -0
- package/examples/jsm/nodes/core/UniformNode.js +20 -0
- package/examples/jsm/nodes/display/BumpMapNode.js +7 -26
- package/examples/jsm/nodes/display/FrontFacingNode.js +13 -0
- package/examples/jsm/nodes/display/PassNode.js +17 -1
- package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
- package/examples/jsm/nodes/display/ViewportDepthNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportNode.js +4 -2
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
- package/examples/jsm/nodes/display/ViewportTextureNode.js +4 -1
- package/examples/jsm/nodes/fog/FogExp2Node.js +4 -5
- package/examples/jsm/nodes/fog/FogNode.js +13 -3
- package/examples/jsm/nodes/fog/FogRangeNode.js +4 -3
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +26 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -3
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
- package/examples/jsm/nodes/functions/PhongLightingModel.js +1 -1
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +164 -10
- package/examples/jsm/nodes/functions/ShadowMaskModel.js +31 -0
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +19 -5
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +22 -70
- package/examples/jsm/nodes/lighting/IrradianceNode.js +24 -0
- package/examples/jsm/nodes/lighting/LightsNode.js +11 -1
- package/examples/jsm/nodes/lighting/PointLightNode.js +2 -1
- package/examples/jsm/nodes/lighting/SpotLightNode.js +2 -1
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +10 -6
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -2
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +76 -5
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +11 -4
- package/examples/jsm/nodes/materials/NodeMaterial.js +55 -43
- package/examples/jsm/nodes/materials/ShadowNodeMaterial.js +34 -0
- package/examples/jsm/nodes/pmrem/PMREMNode.js +193 -0
- package/examples/jsm/nodes/pmrem/PMREMUtils.js +288 -0
- package/examples/jsm/nodes/shadernode/ShaderNode.js +3 -9
- package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
- package/examples/jsm/objects/QuadMesh.js +7 -23
- package/examples/jsm/physics/JoltPhysics.js +281 -0
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/GlitchPass.js +0 -3
- package/examples/jsm/postprocessing/LUTPass.js +5 -71
- package/examples/jsm/postprocessing/RenderTransitionPass.js +193 -0
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SSAOPass.js +0 -3
- package/examples/jsm/renderers/common/Animation.js +3 -0
- package/examples/jsm/renderers/common/Background.js +8 -8
- package/examples/jsm/renderers/common/ClippingContext.js +1 -1
- package/examples/jsm/renderers/common/Info.js +11 -19
- package/examples/jsm/renderers/common/PostProcessing.js +12 -4
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderList.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +47 -5
- package/examples/jsm/renderers/common/RenderObjects.js +1 -1
- package/examples/jsm/renderers/common/Renderer.js +153 -21
- package/examples/jsm/renderers/common/Textures.js +1 -1
- package/examples/jsm/renderers/common/extras/PMREMGenerator.js +773 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +34 -63
- package/examples/jsm/renderers/webgl/WebGLBackend.js +146 -36
- package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +145 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +9 -3
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +1 -1
- package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +1 -0
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +64 -7
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +6 -23
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +77 -60
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +21 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +29 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +92 -18
- package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
- package/examples/jsm/utils/GPUStatsPanel.js +10 -45
- package/examples/jsm/utils/SceneUtils.js +60 -1
- package/examples/jsm/utils/TextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +3 -2
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
- package/package.json +1 -1
- package/src/Three.js +0 -1
- package/src/animation/AnimationClip.js +1 -1
- package/src/constants.js +3 -3
- package/src/core/Object3D.js +10 -7
- package/src/core/RenderTarget.js +8 -0
- package/src/extras/PMREMGenerator.js +21 -11
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/MaterialLoader.js +1 -0
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshPhysicalMaterial.js +20 -0
- package/src/materials/ShaderMaterial.js +0 -4
- package/src/math/Spherical.js +4 -5
- package/src/objects/BatchedMesh.js +27 -3
- package/src/objects/InstancedMesh.js +10 -0
- package/src/objects/Line.js +66 -43
- package/src/renderers/WebGLRenderer.js +130 -158
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -0
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +32 -22
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +17 -9
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
- package/src/renderers/shaders/ShaderChunk.js +0 -2
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
- package/src/renderers/shaders/ShaderLib.js +2 -1
- package/src/renderers/shaders/UniformsUtils.js +10 -1
- package/src/renderers/webgl/WebGLAttributes.js +6 -33
- package/src/renderers/webgl/WebGLBackground.js +18 -3
- package/src/renderers/webgl/WebGLBindingStates.js +14 -51
- package/src/renderers/webgl/WebGLBufferRenderer.js +35 -21
- package/src/renderers/webgl/WebGLCapabilities.js +35 -13
- package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
- package/src/renderers/webgl/WebGLExtensions.js +4 -19
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +35 -21
- package/src/renderers/webgl/WebGLLights.js +6 -32
- package/src/renderers/webgl/WebGLMaterials.js +8 -3
- package/src/renderers/webgl/WebGLMorphtargets.js +79 -217
- package/src/renderers/webgl/WebGLProgram.js +21 -52
- package/src/renderers/webgl/WebGLPrograms.js +24 -31
- package/src/renderers/webgl/WebGLRenderStates.js +13 -7
- package/src/renderers/webgl/WebGLShadowMap.js +25 -25
- package/src/renderers/webgl/WebGLState.js +15 -59
- package/src/renderers/webgl/WebGLTextures.js +138 -292
- package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
- package/src/renderers/webgl/WebGLUtils.js +9 -78
- package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
- package/src/renderers/webxr/WebXRManager.js +4 -6
- package/src/scenes/Scene.js +7 -1
- package/src/textures/Texture.js +11 -1
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -320
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +0 -26
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -794
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +0 -51
- package/src/renderers/WebGL1Renderer.js +0 -7
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { FloatType, HalfFloatType, RGBAFormat, UnsignedByteType } from '../../constants.js';
|
|
2
|
+
|
|
3
|
+
function WebGLCapabilities( gl, extensions, parameters, utils ) {
|
|
2
4
|
|
|
3
5
|
let maxAnisotropy;
|
|
4
6
|
|
|
@@ -22,6 +24,33 @@ function WebGLCapabilities( gl, extensions, parameters ) {
|
|
|
22
24
|
|
|
23
25
|
}
|
|
24
26
|
|
|
27
|
+
function textureFormatReadable( textureFormat ) {
|
|
28
|
+
|
|
29
|
+
if ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {
|
|
30
|
+
|
|
31
|
+
return false;
|
|
32
|
+
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return true;
|
|
36
|
+
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function textureTypeReadable( textureType ) {
|
|
40
|
+
|
|
41
|
+
const halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) );
|
|
42
|
+
|
|
43
|
+
if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // Edge and Chrome Mac < 52 (#9513)
|
|
44
|
+
textureType !== FloatType && ! halfFloatSupportedByExt ) {
|
|
45
|
+
|
|
46
|
+
return false;
|
|
47
|
+
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return true;
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
25
54
|
function getMaxPrecision( precision ) {
|
|
26
55
|
|
|
27
56
|
if ( precision === 'highp' ) {
|
|
@@ -52,8 +81,6 @@ function WebGLCapabilities( gl, extensions, parameters ) {
|
|
|
52
81
|
|
|
53
82
|
}
|
|
54
83
|
|
|
55
|
-
const isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl.constructor.name === 'WebGL2RenderingContext';
|
|
56
|
-
|
|
57
84
|
let precision = parameters.precision !== undefined ? parameters.precision : 'highp';
|
|
58
85
|
const maxPrecision = getMaxPrecision( precision );
|
|
59
86
|
|
|
@@ -64,8 +91,6 @@ function WebGLCapabilities( gl, extensions, parameters ) {
|
|
|
64
91
|
|
|
65
92
|
}
|
|
66
93
|
|
|
67
|
-
const drawBuffers = isWebGL2 || extensions.has( 'WEBGL_draw_buffers' );
|
|
68
|
-
|
|
69
94
|
const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;
|
|
70
95
|
|
|
71
96
|
const maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );
|
|
@@ -79,20 +104,19 @@ function WebGLCapabilities( gl, extensions, parameters ) {
|
|
|
79
104
|
const maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );
|
|
80
105
|
|
|
81
106
|
const vertexTextures = maxVertexTextures > 0;
|
|
82
|
-
const floatFragmentTextures = isWebGL2 || extensions.has( 'OES_texture_float' );
|
|
83
|
-
const floatVertexTextures = vertexTextures && floatFragmentTextures;
|
|
84
107
|
|
|
85
|
-
const maxSamples =
|
|
108
|
+
const maxSamples = gl.getParameter( gl.MAX_SAMPLES );
|
|
86
109
|
|
|
87
110
|
return {
|
|
88
111
|
|
|
89
|
-
isWebGL2:
|
|
90
|
-
|
|
91
|
-
drawBuffers: drawBuffers,
|
|
112
|
+
isWebGL2: true, // keeping this for backwards compatibility
|
|
92
113
|
|
|
93
114
|
getMaxAnisotropy: getMaxAnisotropy,
|
|
94
115
|
getMaxPrecision: getMaxPrecision,
|
|
95
116
|
|
|
117
|
+
textureFormatReadable: textureFormatReadable,
|
|
118
|
+
textureTypeReadable: textureTypeReadable,
|
|
119
|
+
|
|
96
120
|
precision: precision,
|
|
97
121
|
logarithmicDepthBuffer: logarithmicDepthBuffer,
|
|
98
122
|
|
|
@@ -107,8 +131,6 @@ function WebGLCapabilities( gl, extensions, parameters ) {
|
|
|
107
131
|
maxFragmentUniforms: maxFragmentUniforms,
|
|
108
132
|
|
|
109
133
|
vertexTextures: vertexTextures,
|
|
110
|
-
floatFragmentTextures: floatFragmentTextures,
|
|
111
|
-
floatVertexTextures: floatVertexTextures,
|
|
112
134
|
|
|
113
135
|
maxSamples: maxSamples
|
|
114
136
|
|
|
@@ -20,24 +20,26 @@ function WebGLCubeUVMaps( renderer ) {
|
|
|
20
20
|
|
|
21
21
|
if ( isEquirectMap || isCubeMap ) {
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
let renderTarget = cubeUVmaps.get( texture );
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
const currentPMREMVersion = renderTarget !== undefined ? renderTarget.texture.pmremVersion : 0;
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
if ( texture.isRenderTargetTexture && texture.pmremVersion !== currentPMREMVersion ) {
|
|
28
28
|
|
|
29
29
|
if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
|
|
30
30
|
|
|
31
31
|
renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );
|
|
32
|
+
renderTarget.texture.pmremVersion = texture.pmremVersion;
|
|
33
|
+
|
|
32
34
|
cubeUVmaps.set( texture, renderTarget );
|
|
33
35
|
|
|
34
36
|
return renderTarget.texture;
|
|
35
37
|
|
|
36
38
|
} else {
|
|
37
39
|
|
|
38
|
-
if (
|
|
40
|
+
if ( renderTarget !== undefined ) {
|
|
39
41
|
|
|
40
|
-
return
|
|
42
|
+
return renderTarget.texture;
|
|
41
43
|
|
|
42
44
|
} else {
|
|
43
45
|
|
|
@@ -47,7 +49,9 @@ function WebGLCubeUVMaps( renderer ) {
|
|
|
47
49
|
|
|
48
50
|
if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
|
|
49
51
|
|
|
50
|
-
|
|
52
|
+
renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );
|
|
53
|
+
renderTarget.texture.pmremVersion = texture.pmremVersion;
|
|
54
|
+
|
|
51
55
|
cubeUVmaps.set( texture, renderTarget );
|
|
52
56
|
|
|
53
57
|
texture.addEventListener( 'dispose', onTextureDispose );
|
|
@@ -49,29 +49,14 @@ function WebGLExtensions( gl ) {
|
|
|
49
49
|
|
|
50
50
|
},
|
|
51
51
|
|
|
52
|
-
init: function (
|
|
53
|
-
|
|
54
|
-
if ( capabilities.isWebGL2 ) {
|
|
55
|
-
|
|
56
|
-
getExtension( 'EXT_color_buffer_float' );
|
|
57
|
-
getExtension( 'WEBGL_clip_cull_distance' );
|
|
58
|
-
|
|
59
|
-
} else {
|
|
60
|
-
|
|
61
|
-
getExtension( 'WEBGL_depth_texture' );
|
|
62
|
-
getExtension( 'OES_texture_float' );
|
|
63
|
-
getExtension( 'OES_texture_half_float' );
|
|
64
|
-
getExtension( 'OES_texture_half_float_linear' );
|
|
65
|
-
getExtension( 'OES_standard_derivatives' );
|
|
66
|
-
getExtension( 'OES_element_index_uint' );
|
|
67
|
-
getExtension( 'OES_vertex_array_object' );
|
|
68
|
-
getExtension( 'ANGLE_instanced_arrays' );
|
|
69
|
-
|
|
70
|
-
}
|
|
52
|
+
init: function () {
|
|
71
53
|
|
|
54
|
+
getExtension( 'EXT_color_buffer_float' );
|
|
55
|
+
getExtension( 'WEBGL_clip_cull_distance' );
|
|
72
56
|
getExtension( 'OES_texture_float_linear' );
|
|
73
57
|
getExtension( 'EXT_color_buffer_half_float' );
|
|
74
58
|
getExtension( 'WEBGL_multisampled_render_to_texture' );
|
|
59
|
+
getExtension( 'WEBGL_render_shared_exponent' );
|
|
75
60
|
|
|
76
61
|
},
|
|
77
62
|
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
function WebGLIndexedBufferRenderer( gl, extensions, info
|
|
2
|
-
|
|
3
|
-
const isWebGL2 = capabilities.isWebGL2;
|
|
1
|
+
function WebGLIndexedBufferRenderer( gl, extensions, info ) {
|
|
4
2
|
|
|
5
3
|
let mode;
|
|
6
4
|
|
|
@@ -31,49 +29,60 @@ function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {
|
|
|
31
29
|
|
|
32
30
|
if ( primcount === 0 ) return;
|
|
33
31
|
|
|
34
|
-
|
|
32
|
+
gl.drawElementsInstanced( mode, count, type, start * bytesPerElement, primcount );
|
|
35
33
|
|
|
36
|
-
|
|
34
|
+
info.update( count, mode, primcount );
|
|
37
35
|
|
|
38
|
-
|
|
39
|
-
methodName = 'drawElementsInstanced';
|
|
36
|
+
}
|
|
40
37
|
|
|
41
|
-
|
|
38
|
+
function renderMultiDraw( starts, counts, drawCount ) {
|
|
39
|
+
|
|
40
|
+
if ( drawCount === 0 ) return;
|
|
41
|
+
|
|
42
|
+
const extension = extensions.get( 'WEBGL_multi_draw' );
|
|
42
43
|
|
|
43
|
-
|
|
44
|
-
methodName = 'drawElementsInstancedANGLE';
|
|
44
|
+
if ( extension === null ) {
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
for ( let i = 0; i < drawCount; i ++ ) {
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
return;
|
|
48
|
+
this.render( starts[ i ] / bytesPerElement, counts[ i ] );
|
|
50
49
|
|
|
51
50
|
}
|
|
52
51
|
|
|
53
|
-
}
|
|
52
|
+
} else {
|
|
54
53
|
|
|
55
|
-
|
|
54
|
+
extension.multiDrawElementsWEBGL( mode, counts, 0, type, starts, 0, drawCount );
|
|
56
55
|
|
|
57
|
-
|
|
56
|
+
let elementCount = 0;
|
|
57
|
+
for ( let i = 0; i < drawCount; i ++ ) {
|
|
58
|
+
|
|
59
|
+
elementCount += counts[ i ];
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
info.update( elementCount, mode, 1 );
|
|
64
|
+
|
|
65
|
+
}
|
|
58
66
|
|
|
59
67
|
}
|
|
60
68
|
|
|
61
|
-
function
|
|
69
|
+
function renderMultiDrawInstances( starts, counts, drawCount, primcount ) {
|
|
62
70
|
|
|
63
71
|
if ( drawCount === 0 ) return;
|
|
64
72
|
|
|
65
73
|
const extension = extensions.get( 'WEBGL_multi_draw' );
|
|
74
|
+
|
|
66
75
|
if ( extension === null ) {
|
|
67
76
|
|
|
68
|
-
for ( let i = 0; i <
|
|
77
|
+
for ( let i = 0; i < starts.length; i ++ ) {
|
|
69
78
|
|
|
70
|
-
|
|
79
|
+
renderInstances( starts[ i ] / bytesPerElement, counts[ i ], primcount[ i ] );
|
|
71
80
|
|
|
72
81
|
}
|
|
73
82
|
|
|
74
83
|
} else {
|
|
75
84
|
|
|
76
|
-
extension.
|
|
85
|
+
extension.multiDrawElementsInstancedWEBGL( mode, counts, 0, type, starts, 0, primcount, 0, drawCount );
|
|
77
86
|
|
|
78
87
|
let elementCount = 0;
|
|
79
88
|
for ( let i = 0; i < drawCount; i ++ ) {
|
|
@@ -82,7 +91,11 @@ function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {
|
|
|
82
91
|
|
|
83
92
|
}
|
|
84
93
|
|
|
85
|
-
|
|
94
|
+
for ( let i = 0; i < primcount.length; i ++ ) {
|
|
95
|
+
|
|
96
|
+
info.update( elementCount, mode, primcount[ i ] );
|
|
97
|
+
|
|
98
|
+
}
|
|
86
99
|
|
|
87
100
|
}
|
|
88
101
|
|
|
@@ -95,6 +108,7 @@ function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {
|
|
|
95
108
|
this.render = render;
|
|
96
109
|
this.renderInstances = renderInstances;
|
|
97
110
|
this.renderMultiDraw = renderMultiDraw;
|
|
111
|
+
this.renderMultiDrawInstances = renderMultiDrawInstances;
|
|
98
112
|
|
|
99
113
|
}
|
|
100
114
|
|
|
@@ -150,7 +150,7 @@ function shadowCastingAndTexturingLightsFirst( lightA, lightB ) {
|
|
|
150
150
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
-
function WebGLLights( extensions
|
|
153
|
+
function WebGLLights( extensions ) {
|
|
154
154
|
|
|
155
155
|
const cache = new UniformsCache();
|
|
156
156
|
|
|
@@ -399,41 +399,15 @@ function WebGLLights( extensions, capabilities ) {
|
|
|
399
399
|
|
|
400
400
|
if ( rectAreaLength > 0 ) {
|
|
401
401
|
|
|
402
|
-
if (
|
|
402
|
+
if ( extensions.has( 'OES_texture_float_linear' ) === true ) {
|
|
403
403
|
|
|
404
|
-
|
|
405
|
-
|
|
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
|
-
}
|
|
404
|
+
state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;
|
|
405
|
+
state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;
|
|
417
406
|
|
|
418
407
|
} else {
|
|
419
408
|
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
if ( extensions.has( 'OES_texture_float_linear' ) === true ) {
|
|
423
|
-
|
|
424
|
-
state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;
|
|
425
|
-
state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;
|
|
426
|
-
|
|
427
|
-
} else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) {
|
|
428
|
-
|
|
429
|
-
state.rectAreaLTC1 = UniformsLib.LTC_HALF_1;
|
|
430
|
-
state.rectAreaLTC2 = UniformsLib.LTC_HALF_2;
|
|
431
|
-
|
|
432
|
-
} else {
|
|
433
|
-
|
|
434
|
-
console.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' );
|
|
435
|
-
|
|
436
|
-
}
|
|
409
|
+
state.rectAreaLTC1 = UniformsLib.LTC_HALF_1;
|
|
410
|
+
state.rectAreaLTC2 = UniformsLib.LTC_HALF_2;
|
|
437
411
|
|
|
438
412
|
}
|
|
439
413
|
|
|
@@ -393,11 +393,10 @@ function WebGLMaterials( renderer, properties ) {
|
|
|
393
393
|
|
|
394
394
|
}
|
|
395
395
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
if ( envMap ) {
|
|
396
|
+
if ( material.envMap ) {
|
|
399
397
|
|
|
400
398
|
//uniforms.envMap.value = material.envMap; // part of uniforms common
|
|
399
|
+
|
|
401
400
|
uniforms.envMapIntensity.value = material.envMapIntensity;
|
|
402
401
|
|
|
403
402
|
}
|
|
@@ -471,6 +470,12 @@ function WebGLMaterials( renderer, properties ) {
|
|
|
471
470
|
|
|
472
471
|
}
|
|
473
472
|
|
|
473
|
+
if ( material.dispersion > 0 ) {
|
|
474
|
+
|
|
475
|
+
uniforms.dispersion.value = material.dispersion;
|
|
476
|
+
|
|
477
|
+
}
|
|
478
|
+
|
|
474
479
|
if ( material.iridescence > 0 ) {
|
|
475
480
|
|
|
476
481
|
uniforms.iridescence.value = material.iridescence;
|