Skip to content

Commit 98fa190

Browse files
tschwmrdoob
authored andcommitted
Tightened flattening of uniform array data.
* Tightened flattening of uniform array data. * Updated builds.
1 parent 5e9d77b commit 98fa190

File tree

3 files changed

+188
-193
lines changed

3 files changed

+188
-193
lines changed

build/three.js

Lines changed: 65 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -3000,18 +3000,18 @@ THREE.Vector4.prototype = {
30003000
m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],
30013001
m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];
30023002

3003-
if ( ( Math.abs( m12 - m21 ) < epsilon )
3004-
&& ( Math.abs( m13 - m31 ) < epsilon )
3005-
&& ( Math.abs( m23 - m32 ) < epsilon ) ) {
3003+
if ( ( Math.abs( m12 - m21 ) < epsilon ) &&
3004+
( Math.abs( m13 - m31 ) < epsilon ) &&
3005+
( Math.abs( m23 - m32 ) < epsilon ) ) {
30063006

30073007
// singularity found
30083008
// first check for identity matrix which must have +1 for all terms
30093009
// in leading diagonal and zero in other terms
30103010

3011-
if ( ( Math.abs( m12 + m21 ) < epsilon2 )
3012-
&& ( Math.abs( m13 + m31 ) < epsilon2 )
3013-
&& ( Math.abs( m23 + m32 ) < epsilon2 )
3014-
&& ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {
3011+
if ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&
3012+
( Math.abs( m13 + m31 ) < epsilon2 ) &&
3013+
( Math.abs( m23 + m32 ) < epsilon2 ) &&
3014+
( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {
30153015

30163016
// this singularity is identity matrix so angle = 0
30173017

@@ -3096,9 +3096,9 @@ THREE.Vector4.prototype = {
30963096

30973097
// as we have reached here there are no singularities so we can handle normally
30983098

3099-
var s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 )
3100-
+ ( m13 - m31 ) * ( m13 - m31 )
3101-
+ ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize
3099+
var s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +
3100+
( m13 - m31 ) * ( m13 - m31 ) +
3101+
( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize
31023102

31033103
if ( Math.abs( s ) < 0.001 ) s = 1;
31043104

@@ -6026,7 +6026,7 @@ THREE.Ray.prototype = {
60266026
// else t0 is in front of the ray, so return the first collision point scaled by t0
60276027
return this.at( t0, optionalTarget );
60286028

6029-
}
6029+
};
60306030

60316031
}(),
60326032

@@ -23319,7 +23319,8 @@ THREE.SkinnedMesh = function ( geometry, material, useVertexTexture ) {
2331923319

2332023320
gbone = this.geometry.bones[ b ];
2332123321

23322-
if ( gbone.parent !== - 1 && gbone.parent !== null ) {
23322+
if ( gbone.parent !== - 1 && gbone.parent !== null &&
23323+
bones[ gbone.parent ] !== undefined ) {
2332323324

2332423325
bones[ gbone.parent ].add( bones[ b ] );
2332523326

@@ -23468,14 +23469,6 @@ THREE.LOD = function () {
2346823469
levels: {
2346923470
enumerable: true,
2347023471
value: []
23471-
},
23472-
objects: {
23473-
get: function () {
23474-
23475-
console.warn( 'THREE.LOD: .objects has been renamed to .levels.' );
23476-
return this.levels;
23477-
23478-
}
2347923472
}
2348023473
} );
2348123474

@@ -31339,54 +31332,48 @@ THREE.WebGLUniforms = ( function() { // scope
3133931332

3134031333
// --- Utilities ---
3134131334

31342-
// Array Cache (provides arrays for temporary use by type and size)
31343-
31344-
arrayCaches = [],
31345-
arrayCacheTypes = [],
31346-
31347-
allocTemporaryArray = function( type, size ) {
31335+
// Array Caches (provide typed arrays for temporary by size)
3134831336

31349-
var typeIndex = arrayCacheTypes.indexOf( type );
31337+
arrayCacheF32 = [],
31338+
arrayCacheI32 = [],
3135031339

31351-
if ( typeIndex === - 1 ) {
31352-
31353-
typeIndex = arrayCacheTypes.length;
31354-
arrayCacheTypes.push( type );
31355-
arrayCaches.push( [] );
31340+
uncacheTemporaryArrays = function() {
3135631341

31357-
}
31342+
arrayCacheF32.length = 0;
31343+
arrayCacheI32.length = 0;
3135831344

31359-
var arrayCache = arrayCaches[ typeIndex ],
31360-
cachedArray = arrayCache[ size ];
31345+
},
3136131346

31362-
if ( cachedArray === undefined ) {
31347+
// Flattening for arrays of vectors and matrices
3136331348

31364-
cachedArray = new type( size );
31365-
arrayCache[ size ] = cachedArray;
31349+
flatten = function( array, nBlocks, blockSize ) {
3136631350

31367-
}
31351+
var firstElem = array[ 0 ];
3136831352

31369-
return cachedArray;
31353+
if ( firstElem <= 0 || firstElem > 0 ) return array;
31354+
// unoptimized: ! isNaN( firstElem )
31355+
// see http://jacksondunstan.com/articles/983
3137031356

31371-
},
31357+
var n = nBlocks * blockSize,
31358+
r = arrayCacheF32[ n ];
3137231359

31373-
uncacheTemporaryArrays = function() {
31360+
if ( r === undefined ) {
3137431361

31375-
arrayCaches.length = 0;
31376-
arrayCacheTypes.length = 0;
31362+
r = new Float32Array( n );
31363+
arrayCacheF32[ n ] = r;
3137731364

31378-
},
31365+
}
3137931366

31380-
// Flattening for arrays of vectors and matrices
31367+
if ( nBlocks !== 0 ) {
3138131368

31382-
flatten = function( array, stride ) {
31369+
firstElem.toArray( r, 0 );
3138331370

31384-
var n = array.length,
31385-
r = allocTemporaryArray( Float32Array, n * stride );
31371+
for ( var i = 1, offset = 0; i !== nBlocks; ++ i ) {
3138631372

31387-
for ( var i = 0, offset = 0; i !== n; ++ i, offset += stride ) {
31373+
offset += blockSize;
31374+
array[ i ].toArray( r, offset );
3138831375

31389-
array[ i ].toArray( r, offset );
31376+
}
3139031377

3139131378
}
3139231379

@@ -31398,7 +31385,14 @@ THREE.WebGLUniforms = ( function() { // scope
3139831385

3139931386
allocTexUnits = function( renderer, n ) {
3140031387

31401-
var r = allocTemporaryArray( Int32Array, n );
31388+
var r = arrayCacheI32[ n ];
31389+
31390+
if ( r === undefined ) {
31391+
31392+
r = new Int32Array( n );
31393+
arrayCacheI32[ n ] = r;
31394+
31395+
}
3140231396

3140331397
for ( var i = 0; i !== n; ++ i )
3140431398
r[ i ] = renderer.allocTextureUnit();
@@ -31524,45 +31518,39 @@ THREE.WebGLUniforms = ( function() { // scope
3152431518

3152531519
setValueV2a = function( gl, v ) {
3152631520

31527-
if ( v.length === this.size ) v = flatten( v, 2 );
31528-
gl.uniform2fv( this.addr, v );
31521+
gl.uniform2fv( this.addr, flatten( v, this.size, 2 ) );
3152931522

3153031523
},
3153131524

3153231525
setValueV3a = function( gl, v ) {
3153331526

31534-
if ( v.length === this.size ) v = flatten( v, 3 );
31535-
gl.uniform3fv( this.addr, v );
31527+
gl.uniform3fv( this.addr, flatten( v, this.size, 3 ) );
3153631528

3153731529
},
3153831530

3153931531
setValueV4a = function( gl, v ) {
3154031532

31541-
if ( v.length === this.size ) v = flatten( v, 4 );
31542-
gl.uniform4fv( this.addr, v );
31533+
gl.uniform4fv( this.addr, flatten( v, this.size, 4 ) );
3154331534

3154431535
},
3154531536

3154631537
// Array of matrices (flat or from THREE clases)
3154731538

3154831539
setValueM2a = function( gl, v ) {
3154931540

31550-
if ( v.length === this.size ) v = flatten( v, 4 );
31551-
gl.uniformMatrix2fv( this.addr, false, v );
31541+
gl.uniformMatrix2fv( this.addr, false, flatten( v, this.size, 4 ) );
3155231542

3155331543
},
3155431544

3155531545
setValueM3a = function( gl, v ) {
3155631546

31557-
if ( v.length === this.size ) v = flatten( v, 9 );
31558-
gl.uniformMatrix3fv( this.addr, false, v );
31547+
gl.uniformMatrix3fv( this.addr, false, flatten( v, this.size, 9 ) );
3155931548

3156031549
},
3156131550

3156231551
setValueM4a = function( gl, v ) {
3156331552

31564-
if ( v.length === this.size ) v = flatten( v, 16 );
31565-
gl.uniformMatrix4fv( this.addr, false, v );
31553+
gl.uniformMatrix4fv( this.addr, false, flatten( v, this.size, 16 ) );
3156631554

3156731555
},
3156831556

@@ -33470,6 +33458,19 @@ THREE.CanvasRenderer = function () {
3347033458

3347133459
THREE.MeshFaceMaterial = THREE.MultiMaterial;
3347233460

33461+
//
33462+
33463+
Object.defineProperties( THREE.LOD.prototype, {
33464+
objects: {
33465+
get: function () {
33466+
33467+
console.warn( 'THREE.LOD: .objects has been renamed to .levels.' );
33468+
return this.levels;
33469+
33470+
}
33471+
}
33472+
} );
33473+
3347333474
// File:src/extras/CurveUtils.js
3347433475

3347533476
/**

0 commit comments

Comments
 (0)