|
@@ -486,54 +486,31 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
var attributes = geometry.attributes;
|
|
|
|
|
|
- var index = attributes[ "index" ];
|
|
|
- var position = attributes[ "position" ];
|
|
|
- var normal = attributes[ "normal" ];
|
|
|
- var uv = attributes[ "uv" ];
|
|
|
- var color = attributes[ "color" ];
|
|
|
- var tangent = attributes[ "tangent" ];
|
|
|
+ var attributeName, attributeItem;
|
|
|
|
|
|
- if ( geometry.elementsNeedUpdate && index !== undefined ) {
|
|
|
+ for ( attributeName in attributes ) {
|
|
|
|
|
|
- renderer.setDynamicIndexBuffer( index.buffer, index.array);
|
|
|
+ attributeItem = attributes[ attributeName ];
|
|
|
|
|
|
- }
|
|
|
-
|
|
|
- if ( geometry.verticesNeedUpdate && position !== undefined ) {
|
|
|
-
|
|
|
- renderer.setDynamicArrayBuffer( position.buffer, position.array);
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- if ( geometry.normalsNeedUpdate && normal !== undefined ) {
|
|
|
-
|
|
|
- renderer.setDynamicArrayBuffer( normal.buffer, normal.array);
|
|
|
-
|
|
|
- }
|
|
|
+ if ( attributeItem.needsUpdate ) {
|
|
|
|
|
|
- if ( geometry.uvsNeedUpdate && uv !== undefined ) {
|
|
|
+ if ( attributeName === 'index' ) {
|
|
|
|
|
|
- renderer.setDynamicArrayBuffer( uv.buffer, uv.array);
|
|
|
+ renderer.setDynamicIndexBuffer( attributeItem.buffer, attributeItem.array );
|
|
|
|
|
|
- }
|
|
|
-
|
|
|
- if ( geometry.colorsNeedUpdate && color !== undefined ) {
|
|
|
-
|
|
|
- renderer.setDynamicArrayBuffer( color.buffer, color.array);
|
|
|
-
|
|
|
- }
|
|
|
+ } else {
|
|
|
|
|
|
- if ( geometry.tangentsNeedUpdate && tangent !== undefined ) {
|
|
|
+ renderer.setDynamicArrayBuffer( attributeItem.buffer, attributeItem.array );
|
|
|
|
|
|
- renderer.setDynamicArrayBuffer( tangent.buffer, tangent.array);
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
+ attributeItem.needsUpdate = false;
|
|
|
|
|
|
- if ( dispose ) {
|
|
|
+ }
|
|
|
|
|
|
- for ( var i in geometry.attributes ) {
|
|
|
+ if ( dispose && ! attributeItem.dynamic ) {
|
|
|
|
|
|
- delete geometry.attributes[ i ].array;
|
|
|
+ delete attributeItem.array;
|
|
|
|
|
|
}
|
|
|
|