Browse Source

Applying Buffer Geometry Custom Attributes to WebGLRenderer2

zz85 12 years ago
parent
commit
4c2286cafc
1 changed files with 13 additions and 36 deletions
  1. 13 36
      src/renderers/WebGLRenderer2.js

+ 13 - 36
src/renderers/WebGLRenderer2.js

@@ -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;
 
 			}