|
@@ -145,6 +145,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
_currentWidth = 0,
|
|
|
_currentHeight = 0,
|
|
|
|
|
|
+ _newAttributes = new Uint8Array( 16 ),
|
|
|
_enabledAttributes = new Uint8Array( 16 ),
|
|
|
|
|
|
// frustum
|
|
@@ -2538,6 +2539,8 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
}
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+ disableUnusedAttributes();
|
|
|
|
|
|
}
|
|
|
|
|
@@ -2566,7 +2569,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( updateBuffers ) {
|
|
|
|
|
|
- disableAttributes();
|
|
|
+ initAttributes();
|
|
|
|
|
|
}
|
|
|
|
|
@@ -2801,7 +2804,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( updateBuffers ) {
|
|
|
|
|
|
- disableAttributes();
|
|
|
+ initAttributes();
|
|
|
|
|
|
}
|
|
|
|
|
@@ -2953,6 +2956,8 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ disableUnusedAttributes();
|
|
|
+
|
|
|
// render mesh
|
|
|
|
|
|
if ( object instanceof THREE.Mesh ) {
|
|
@@ -3005,8 +3010,20 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
};
|
|
|
|
|
|
+ function initAttributes() {
|
|
|
+
|
|
|
+ for ( var i = 0, l = _newAttributes.length; i < l; i ++ ) {
|
|
|
+
|
|
|
+ _newAttributes[ i ] = 0;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
function enableAttribute( attribute ) {
|
|
|
|
|
|
+ _newAttributes[ attribute ] = 1;
|
|
|
+
|
|
|
if ( _enabledAttributes[ attribute ] === 0 ) {
|
|
|
|
|
|
_gl.enableVertexAttribArray( attribute );
|
|
@@ -3014,13 +3031,13 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- };
|
|
|
+ }
|
|
|
|
|
|
- function disableAttributes() {
|
|
|
+ function disableUnusedAttributes() {
|
|
|
|
|
|
for ( var i = 0, l = _enabledAttributes.length; i < l; i ++ ) {
|
|
|
|
|
|
- if ( _enabledAttributes[ i ] === 1 ) {
|
|
|
+ if ( _enabledAttributes[ i ] !== _newAttributes[ i ] ) {
|
|
|
|
|
|
_gl.disableVertexAttribArray( i );
|
|
|
_enabledAttributes[ i ] = 0;
|
|
@@ -3029,7 +3046,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- };
|
|
|
+ }
|
|
|
|
|
|
function setupMorphTargets ( material, geometryGroup, object ) {
|
|
|
|