Bläddra i källkod

WebGLRenderer: Handle geometry changes.

Mr.doob 10 år sedan
förälder
incheckning
8efea7f7f8

+ 1 - 1
examples/webgl_interactive_buffergeometry.html

@@ -47,7 +47,7 @@
 
 			var camera, scene, renderer;
 
-			var raycaster, mouse, points = [];
+			var raycaster, mouse;
 
 			var mesh, line;
 

+ 3 - 1
src/core/BufferGeometry.js

@@ -112,6 +112,8 @@ THREE.BufferGeometry.prototype = {
 
 	setFromObject: function ( object ) {
 
+		console.log( 'THREE.BufferGeometry.setFromObject(). Converting ', object, this );
+
 		var geometry = object.geometry;
 		var material = object.material;
 
@@ -132,7 +134,7 @@ THREE.BufferGeometry.prototype = {
 
 		if ( material.attributes !== undefined ) {
 
-			console.warn( 'THREE.BufferGeometry.fromObject(). TODO: material.attributes', material );
+			console.warn( 'THREE.BufferGeometry.setFromObject(). TODO: material.attributes', material );
 
 		}
 

+ 1 - 4
src/renderers/WebGLRenderer.js

@@ -1813,7 +1813,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 			var webglObject = renderList[ i ];
 
 			var object = webglObject.object;
-			var buffer = webglObject.buffer;
+			var buffer = objects.geometries[ object.geometry.id ];
 
 			setupMatrices( object, camera );
 
@@ -1913,9 +1913,6 @@ THREE.WebGLRenderer = function ( parameters ) {
 	function unrollBufferMaterial ( globject ) {
 
 		var object = globject.object;
-		var buffer = globject.buffer;
-
-		var geometry = object.geometry;
 		var material = object.material;
 
 		if ( material ) {

+ 14 - 7
src/renderers/webgl/WebGLObjects.js

@@ -100,6 +100,8 @@ THREE.WebGLObjects = function ( gl, info ) {
 	this.objects = objects;
 	this.objectsImmediate = objectsImmediate;
 
+	this.geometries = geometries;
+
 	this.init = function ( object ) {
 
 		if ( object.__webglInit === undefined ) {
@@ -129,11 +131,7 @@ THREE.WebGLObjects = function ( gl, info ) {
 
 			} else {
 
-				var bufferGeometry = new THREE.BufferGeometry().setFromObject( object );
-				geometries[ geometry.id ] = bufferGeometry;
-
-				console.log( 'THREE.WebGLObjects: Converting...', object, bufferGeometry );
-
+				geometries[ geometry.id ] = new THREE.BufferGeometry().setFromObject( object );
 				info.memory.geometries ++;
 
 			}
@@ -148,7 +146,6 @@ THREE.WebGLObjects = function ( gl, info ) {
 
 				objects[ object.id ] = {
 					id: object.id,
-					buffer: geometries[ geometry.id ],
 					object: object,
 					material: null,
 					z: 0
@@ -177,7 +174,17 @@ THREE.WebGLObjects = function ( gl, info ) {
 		if ( object.geometry instanceof THREE.Geometry ) {
 
 			geometry = geometries[ geometry.id ];
-			geometry.updateFromObject( object );
+
+			if ( geometry === undefined ) {
+
+				geometry = new THREE.BufferGeometry().setFromObject( object );
+				geometries[ geometry.id ] = geometry;
+
+			} else {
+
+				geometry.updateFromObject( object );
+
+			}
 
 		}