super-three 0.162.0 → 0.163.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 +407 -1014
- package/build/three.module.js +406 -1013
- package/build/three.module.min.js +1 -1
- package/examples/jsm/controls/TransformControls.js +3 -3
- package/examples/jsm/exporters/GLTFExporter.js +21 -4
- package/examples/jsm/exporters/USDZExporter.js +15 -0
- package/examples/jsm/geometries/TextGeometry.js +10 -2
- package/examples/jsm/interactive/HTMLMesh.js +7 -9
- 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 +89 -19
- package/examples/jsm/loaders/FBXLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +6 -0
- package/examples/jsm/loaders/KTX2Loader.js +2 -6
- 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/misc/GPUComputationRenderer.js +0 -6
- package/examples/jsm/nodes/Nodes.js +6 -1
- package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
- package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
- 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/TextureNode.js +30 -7
- package/examples/jsm/nodes/core/Node.js +55 -4
- package/examples/jsm/nodes/core/NodeBuilder.js +21 -16
- package/examples/jsm/nodes/core/NodeFrame.js +10 -10
- package/examples/jsm/nodes/core/NodeUtils.js +2 -2
- package/examples/jsm/nodes/core/UniformNode.js +20 -0
- package/examples/jsm/nodes/display/PassNode.js +17 -1
- package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
- 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/lighting/AnalyticLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +12 -69
- package/examples/jsm/nodes/materials/NodeMaterial.js +33 -11
- 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 +1 -1
- package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
- package/examples/jsm/objects/QuadMesh.js +7 -23
- 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/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 +5 -5
- 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/RenderObject.js +4 -4
- package/examples/jsm/renderers/common/RenderObjects.js +1 -1
- package/examples/jsm/renderers/common/Renderer.js +25 -8
- package/examples/jsm/renderers/common/extras/PMREMGenerator.js +777 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +5 -18
- package/examples/jsm/renderers/webgl/WebGLBackend.js +148 -24
- package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +141 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +3 -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 +43 -0
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +3 -2
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -2
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +54 -25
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +5 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +25 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +92 -18
- package/examples/jsm/utils/GPUStatsPanel.js +10 -45
- package/examples/jsm/utils/TextureUtils.js +1 -1
- 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/extras/PMREMGenerator.js +9 -0
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/ShaderMaterial.js +0 -4
- package/src/math/Spherical.js +4 -5
- package/src/objects/BatchedMesh.js +4 -3
- package/src/objects/InstancedMesh.js +10 -0
- package/src/renderers/WebGLRenderer.js +55 -114
- 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 +1 -1
- package/src/renderers/shaders/ShaderLib.js +1 -1
- package/src/renderers/shaders/UniformsUtils.js +10 -1
- package/src/renderers/webgl/WebGLAttributes.js +6 -33
- package/src/renderers/webgl/WebGLBindingStates.js +14 -51
- package/src/renderers/webgl/WebGLBufferRenderer.js +3 -25
- package/src/renderers/webgl/WebGLCapabilities.js +2 -12
- package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
- package/src/renderers/webgl/WebGLExtensions.js +4 -19
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +3 -25
- package/src/renderers/webgl/WebGLLights.js +6 -32
- package/src/renderers/webgl/WebGLMaterials.js +2 -3
- package/src/renderers/webgl/WebGLMorphtargets.js +79 -217
- package/src/renderers/webgl/WebGLProgram.js +18 -47
- package/src/renderers/webgl/WebGLPrograms.js +20 -32
- package/src/renderers/webgl/WebGLRenderStates.js +8 -6
- package/src/renderers/webgl/WebGLState.js +15 -59
- package/src/renderers/webgl/WebGLTextures.js +75 -237
- package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
- package/src/renderers/webgl/WebGLUtils.js +6 -57
- package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/scenes/Scene.js +7 -1
- package/src/textures/Texture.js +11 -1
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
- package/src/renderers/WebGL1Renderer.js +0 -7
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { IntType } from '../../constants.js';
|
|
2
2
|
|
|
3
|
-
function WebGLBindingStates( gl,
|
|
3
|
+
function WebGLBindingStates( gl, attributes ) {
|
|
4
4
|
|
|
5
5
|
const maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );
|
|
6
6
|
|
|
7
|
-
const extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' );
|
|
8
|
-
const vaoAvailable = capabilities.isWebGL2 || extension !== null;
|
|
9
|
-
|
|
10
7
|
const bindingStates = {};
|
|
11
8
|
|
|
12
9
|
const defaultState = createBindingState( null );
|
|
@@ -17,38 +14,18 @@ function WebGLBindingStates( gl, extensions, attributes, capabilities ) {
|
|
|
17
14
|
|
|
18
15
|
let updateBuffers = false;
|
|
19
16
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const state = getBindingState( geometry, program, material );
|
|
23
|
-
|
|
24
|
-
if ( currentState !== state ) {
|
|
25
|
-
|
|
26
|
-
currentState = state;
|
|
27
|
-
bindVertexArrayObject( currentState.object );
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
updateBuffers = needsUpdate( object, geometry, program, index );
|
|
32
|
-
|
|
33
|
-
if ( updateBuffers ) saveCache( object, geometry, program, index );
|
|
34
|
-
|
|
35
|
-
} else {
|
|
36
|
-
|
|
37
|
-
const wireframe = ( material.wireframe === true );
|
|
17
|
+
const state = getBindingState( geometry, program, material );
|
|
38
18
|
|
|
39
|
-
|
|
40
|
-
currentState.program !== program.id ||
|
|
41
|
-
currentState.wireframe !== wireframe ) {
|
|
19
|
+
if ( currentState !== state ) {
|
|
42
20
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
currentState.wireframe = wireframe;
|
|
21
|
+
currentState = state;
|
|
22
|
+
bindVertexArrayObject( currentState.object );
|
|
46
23
|
|
|
47
|
-
|
|
24
|
+
}
|
|
48
25
|
|
|
49
|
-
|
|
26
|
+
updateBuffers = needsUpdate( object, geometry, program, index );
|
|
50
27
|
|
|
51
|
-
|
|
28
|
+
if ( updateBuffers ) saveCache( object, geometry, program, index );
|
|
52
29
|
|
|
53
30
|
if ( index !== null ) {
|
|
54
31
|
|
|
@@ -74,25 +51,19 @@ function WebGLBindingStates( gl, extensions, attributes, capabilities ) {
|
|
|
74
51
|
|
|
75
52
|
function createVertexArrayObject() {
|
|
76
53
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
return extension.createVertexArrayOES();
|
|
54
|
+
return gl.createVertexArray();
|
|
80
55
|
|
|
81
56
|
}
|
|
82
57
|
|
|
83
58
|
function bindVertexArrayObject( vao ) {
|
|
84
59
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return extension.bindVertexArrayOES( vao );
|
|
60
|
+
return gl.bindVertexArray( vao );
|
|
88
61
|
|
|
89
62
|
}
|
|
90
63
|
|
|
91
64
|
function deleteVertexArrayObject( vao ) {
|
|
92
65
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
return extension.deleteVertexArrayOES( vao );
|
|
66
|
+
return gl.deleteVertexArray( vao );
|
|
96
67
|
|
|
97
68
|
}
|
|
98
69
|
|
|
@@ -290,9 +261,7 @@ function WebGLBindingStates( gl, extensions, attributes, capabilities ) {
|
|
|
290
261
|
|
|
291
262
|
if ( attributeDivisors[ attribute ] !== meshPerAttribute ) {
|
|
292
263
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
extension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );
|
|
264
|
+
gl.vertexAttribDivisor( attribute, meshPerAttribute );
|
|
296
265
|
attributeDivisors[ attribute ] = meshPerAttribute;
|
|
297
266
|
|
|
298
267
|
}
|
|
@@ -333,12 +302,6 @@ function WebGLBindingStates( gl, extensions, attributes, capabilities ) {
|
|
|
333
302
|
|
|
334
303
|
function setupVertexAttributes( object, material, program, geometry ) {
|
|
335
304
|
|
|
336
|
-
if ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) {
|
|
337
|
-
|
|
338
|
-
if ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return;
|
|
339
|
-
|
|
340
|
-
}
|
|
341
|
-
|
|
342
305
|
initAttributes();
|
|
343
306
|
|
|
344
307
|
const geometryAttributes = geometry.attributes;
|
|
@@ -377,9 +340,9 @@ function WebGLBindingStates( gl, extensions, attributes, capabilities ) {
|
|
|
377
340
|
const type = attribute.type;
|
|
378
341
|
const bytesPerElement = attribute.bytesPerElement;
|
|
379
342
|
|
|
380
|
-
// check for integer attributes
|
|
343
|
+
// check for integer attributes
|
|
381
344
|
|
|
382
|
-
const integer = (
|
|
345
|
+
const integer = ( type === gl.INT || type === gl.UNSIGNED_INT || geometryAttribute.gpuType === IntType );
|
|
383
346
|
|
|
384
347
|
if ( geometryAttribute.isInterleavedBufferAttribute ) {
|
|
385
348
|
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
function WebGLBufferRenderer( gl, extensions, info
|
|
2
|
-
|
|
3
|
-
const isWebGL2 = capabilities.isWebGL2;
|
|
1
|
+
function WebGLBufferRenderer( gl, extensions, info ) {
|
|
4
2
|
|
|
5
3
|
let mode;
|
|
6
4
|
|
|
@@ -22,28 +20,7 @@ function WebGLBufferRenderer( gl, extensions, info, capabilities ) {
|
|
|
22
20
|
|
|
23
21
|
if ( primcount === 0 ) return;
|
|
24
22
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if ( isWebGL2 ) {
|
|
28
|
-
|
|
29
|
-
extension = gl;
|
|
30
|
-
methodName = 'drawArraysInstanced';
|
|
31
|
-
|
|
32
|
-
} else {
|
|
33
|
-
|
|
34
|
-
extension = extensions.get( 'ANGLE_instanced_arrays' );
|
|
35
|
-
methodName = 'drawArraysInstancedANGLE';
|
|
36
|
-
|
|
37
|
-
if ( extension === null ) {
|
|
38
|
-
|
|
39
|
-
console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );
|
|
40
|
-
return;
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
extension[ methodName ]( mode, start, count, primcount );
|
|
23
|
+
gl.drawArraysInstanced( mode, start, count, primcount );
|
|
47
24
|
|
|
48
25
|
info.update( count, mode, primcount );
|
|
49
26
|
|
|
@@ -54,6 +31,7 @@ function WebGLBufferRenderer( gl, extensions, info, capabilities ) {
|
|
|
54
31
|
if ( drawCount === 0 ) return;
|
|
55
32
|
|
|
56
33
|
const extension = extensions.get( 'WEBGL_multi_draw' );
|
|
34
|
+
|
|
57
35
|
if ( extension === null ) {
|
|
58
36
|
|
|
59
37
|
for ( let i = 0; i < drawCount; i ++ ) {
|
|
@@ -52,8 +52,6 @@ function WebGLCapabilities( gl, extensions, parameters ) {
|
|
|
52
52
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
const isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl.constructor.name === 'WebGL2RenderingContext';
|
|
56
|
-
|
|
57
55
|
let precision = parameters.precision !== undefined ? parameters.precision : 'highp';
|
|
58
56
|
const maxPrecision = getMaxPrecision( precision );
|
|
59
57
|
|
|
@@ -64,8 +62,6 @@ function WebGLCapabilities( gl, extensions, parameters ) {
|
|
|
64
62
|
|
|
65
63
|
}
|
|
66
64
|
|
|
67
|
-
const drawBuffers = isWebGL2 || extensions.has( 'WEBGL_draw_buffers' );
|
|
68
|
-
|
|
69
65
|
const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;
|
|
70
66
|
|
|
71
67
|
const maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );
|
|
@@ -79,16 +75,12 @@ function WebGLCapabilities( gl, extensions, parameters ) {
|
|
|
79
75
|
const maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );
|
|
80
76
|
|
|
81
77
|
const vertexTextures = maxVertexTextures > 0;
|
|
82
|
-
const floatFragmentTextures = isWebGL2 || extensions.has( 'OES_texture_float' );
|
|
83
|
-
const floatVertexTextures = vertexTextures && floatFragmentTextures;
|
|
84
78
|
|
|
85
|
-
const maxSamples =
|
|
79
|
+
const maxSamples = gl.getParameter( gl.MAX_SAMPLES );
|
|
86
80
|
|
|
87
81
|
return {
|
|
88
82
|
|
|
89
|
-
isWebGL2:
|
|
90
|
-
|
|
91
|
-
drawBuffers: drawBuffers,
|
|
83
|
+
isWebGL2: true, // keeping this for backwards compatibility
|
|
92
84
|
|
|
93
85
|
getMaxAnisotropy: getMaxAnisotropy,
|
|
94
86
|
getMaxPrecision: getMaxPrecision,
|
|
@@ -107,8 +99,6 @@ function WebGLCapabilities( gl, extensions, parameters ) {
|
|
|
107
99
|
maxFragmentUniforms: maxFragmentUniforms,
|
|
108
100
|
|
|
109
101
|
vertexTextures: vertexTextures,
|
|
110
|
-
floatFragmentTextures: floatFragmentTextures,
|
|
111
|
-
floatVertexTextures: floatVertexTextures,
|
|
112
102
|
|
|
113
103
|
maxSamples: maxSamples
|
|
114
104
|
|
|
@@ -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,28 +29,7 @@ function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {
|
|
|
31
29
|
|
|
32
30
|
if ( primcount === 0 ) return;
|
|
33
31
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if ( isWebGL2 ) {
|
|
37
|
-
|
|
38
|
-
extension = gl;
|
|
39
|
-
methodName = 'drawElementsInstanced';
|
|
40
|
-
|
|
41
|
-
} else {
|
|
42
|
-
|
|
43
|
-
extension = extensions.get( 'ANGLE_instanced_arrays' );
|
|
44
|
-
methodName = 'drawElementsInstancedANGLE';
|
|
45
|
-
|
|
46
|
-
if ( extension === null ) {
|
|
47
|
-
|
|
48
|
-
console.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );
|
|
49
|
-
return;
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
extension[ methodName ]( mode, count, type, start * bytesPerElement, primcount );
|
|
32
|
+
gl.drawElementsInstanced( mode, count, type, start * bytesPerElement, primcount );
|
|
56
33
|
|
|
57
34
|
info.update( count, mode, primcount );
|
|
58
35
|
|
|
@@ -63,6 +40,7 @@ function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {
|
|
|
63
40
|
if ( drawCount === 0 ) return;
|
|
64
41
|
|
|
65
42
|
const extension = extensions.get( 'WEBGL_multi_draw' );
|
|
43
|
+
|
|
66
44
|
if ( extension === null ) {
|
|
67
45
|
|
|
68
46
|
for ( let i = 0; i < drawCount; i ++ ) {
|
|
@@ -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
|
}
|