From 6f57c2092c9e198c6f14b1dc888ade470371e9ed Mon Sep 17 00:00:00 2001 From: zz85 Date: Wed, 20 Feb 2013 00:56:41 +0800 Subject: [PATCH] More refactoring with BufferGeometry in WebGLRender to reduce code. Its tempting to go on, but would stop here to make sure there's no regression. Also, will have to port these changes over to WebGLRenderer2 --- src/renderers/WebGLRenderer.js | 132 ++++++++++++--------------------- 1 file changed, 49 insertions(+), 83 deletions(-) diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 77a9addd25..f598d1e926 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -4509,9 +4509,14 @@ THREE.WebGLRenderer = function ( parameters ) { } - if ( object instanceof THREE.Mesh ) { + geometry = object.geometry; + + if ( geometry instanceof THREE.BufferGeometry ) { + + initDirectBuffers( geometry ); + + } else if ( object instanceof THREE.Mesh ) { - geometry = object.geometry; material = object.material; if ( geometry instanceof THREE.Geometry ) { @@ -4547,16 +4552,10 @@ THREE.WebGLRenderer = function ( parameters ) { } - } else if ( geometry instanceof THREE.BufferGeometry ) { - - initDirectBuffers( geometry ); - } } else if ( object instanceof THREE.Ribbon ) { - geometry = object.geometry; - if ( ! geometry.__webglVertexBuffer ) { createRibbonBuffers( geometry ); @@ -4570,8 +4569,6 @@ THREE.WebGLRenderer = function ( parameters ) { } else if ( object instanceof THREE.Line ) { - geometry = object.geometry; - if ( ! geometry.__webglVertexBuffer ) { if ( geometry instanceof THREE.Geometry ) { @@ -4583,18 +4580,12 @@ THREE.WebGLRenderer = function ( parameters ) { geometry.colorsNeedUpdate = true; geometry.lineDistancesNeedUpdate = true; - } else if ( geometry instanceof THREE.BufferGeometry ) { - - initDirectBuffers( geometry ); - } } } else if ( object instanceof THREE.ParticleSystem ) { - geometry = object.geometry; - if ( ! geometry.__webglVertexBuffer ) { if ( geometry instanceof THREE.Geometry ) { @@ -4605,13 +4596,7 @@ THREE.WebGLRenderer = function ( parameters ) { geometry.verticesNeedUpdate = true; geometry.colorsNeedUpdate = true; - } else if ( geometry instanceof THREE.BufferGeometry ) { - - initDirectBuffers( geometry ); - } - - } } @@ -4699,53 +4684,49 @@ THREE.WebGLRenderer = function ( parameters ) { var geometry = object.geometry, geometryGroup, customAttributesDirty, material; - if ( object instanceof THREE.Mesh ) { - - if ( geometry instanceof THREE.BufferGeometry ) { - - setDirectBuffers( geometry, _gl.DYNAMIC_DRAW, !geometry.dynamic ); + if ( geometry instanceof THREE.BufferGeometry ) { - } else { + setDirectBuffers( geometry, _gl.DYNAMIC_DRAW, !geometry.dynamic ); - // check all geometry groups + } else if ( object instanceof THREE.Mesh ) { - for( var i = 0, il = geometry.geometryGroupsList.length; i < il; i ++ ) { + // check all geometry groups - geometryGroup = geometry.geometryGroupsList[ i ]; + for( var i = 0, il = geometry.geometryGroupsList.length; i < il; i ++ ) { - material = getBufferMaterial( object, geometryGroup ); + geometryGroup = geometry.geometryGroupsList[ i ]; - if ( geometry.buffersNeedUpdate ) { + material = getBufferMaterial( object, geometryGroup ); - initMeshBuffers( geometryGroup, object ); + if ( geometry.buffersNeedUpdate ) { - } + initMeshBuffers( geometryGroup, object ); - customAttributesDirty = material.attributes && areCustomAttributesDirty( material ); + } - if ( geometry.verticesNeedUpdate || geometry.morphTargetsNeedUpdate || geometry.elementsNeedUpdate || - geometry.uvsNeedUpdate || geometry.normalsNeedUpdate || - geometry.colorsNeedUpdate || geometry.tangentsNeedUpdate || customAttributesDirty ) { + customAttributesDirty = material.attributes && areCustomAttributesDirty( material ); - setMeshBuffers( geometryGroup, object, _gl.DYNAMIC_DRAW, !geometry.dynamic, material ); + if ( geometry.verticesNeedUpdate || geometry.morphTargetsNeedUpdate || geometry.elementsNeedUpdate || + geometry.uvsNeedUpdate || geometry.normalsNeedUpdate || + geometry.colorsNeedUpdate || geometry.tangentsNeedUpdate || customAttributesDirty ) { - } + setMeshBuffers( geometryGroup, object, _gl.DYNAMIC_DRAW, !geometry.dynamic, material ); } - geometry.verticesNeedUpdate = false; - geometry.morphTargetsNeedUpdate = false; - geometry.elementsNeedUpdate = false; - geometry.uvsNeedUpdate = false; - geometry.normalsNeedUpdate = false; - geometry.colorsNeedUpdate = false; - geometry.tangentsNeedUpdate = false; + } - geometry.buffersNeedUpdate = false; + geometry.verticesNeedUpdate = false; + geometry.morphTargetsNeedUpdate = false; + geometry.elementsNeedUpdate = false; + geometry.uvsNeedUpdate = false; + geometry.normalsNeedUpdate = false; + geometry.colorsNeedUpdate = false; + geometry.tangentsNeedUpdate = false; - material.attributes && clearCustomAttributes( material ); + geometry.buffersNeedUpdate = false; - } + material.attributes && clearCustomAttributes( material ); } else if ( object instanceof THREE.Ribbon ) { @@ -4767,54 +4748,39 @@ THREE.WebGLRenderer = function ( parameters ) { } else if ( object instanceof THREE.Line ) { - if ( geometry instanceof THREE.BufferGeometry ) { - - setDirectBuffers( geometry, _gl.DYNAMIC_DRAW, !geometry.dynamic ); - - } else { - - material = getBufferMaterial( object, geometry ); - - customAttributesDirty = material.attributes && areCustomAttributesDirty( material ); - - if ( geometry.verticesNeedUpdate || geometry.colorsNeedUpdate || geometry.lineDistancesNeedUpdate || customAttributesDirty ) { - - setLineBuffers( geometry, _gl.DYNAMIC_DRAW ); + material = getBufferMaterial( object, geometry ); - } + customAttributesDirty = material.attributes && areCustomAttributesDirty( material ); - geometry.verticesNeedUpdate = false; - geometry.colorsNeedUpdate = false; - geometry.lineDistancesNeedUpdate = false; + if ( geometry.verticesNeedUpdate || geometry.colorsNeedUpdate || geometry.lineDistancesNeedUpdate || customAttributesDirty ) { - material.attributes && clearCustomAttributes( material ); + setLineBuffers( geometry, _gl.DYNAMIC_DRAW ); } - } else if ( object instanceof THREE.ParticleSystem ) { - - if ( geometry instanceof THREE.BufferGeometry ) { + geometry.verticesNeedUpdate = false; + geometry.colorsNeedUpdate = false; + geometry.lineDistancesNeedUpdate = false; - setDirectBuffers( geometry, _gl.DYNAMIC_DRAW, !geometry.dynamic ); + material.attributes && clearCustomAttributes( material ); - } else { - material = getBufferMaterial( object, geometry ); + } else if ( object instanceof THREE.ParticleSystem ) { - customAttributesDirty = material.attributes && areCustomAttributesDirty( material ); + material = getBufferMaterial( object, geometry ); - if ( geometry.verticesNeedUpdate || geometry.colorsNeedUpdate || object.sortParticles || customAttributesDirty ) { + customAttributesDirty = material.attributes && areCustomAttributesDirty( material ); - setParticleBuffers( geometry, _gl.DYNAMIC_DRAW, object ); + if ( geometry.verticesNeedUpdate || geometry.colorsNeedUpdate || object.sortParticles || customAttributesDirty ) { - } + setParticleBuffers( geometry, _gl.DYNAMIC_DRAW, object ); - geometry.verticesNeedUpdate = false; - geometry.colorsNeedUpdate = false; + } - material.attributes && clearCustomAttributes( material ); + geometry.verticesNeedUpdate = false; + geometry.colorsNeedUpdate = false; - } + material.attributes && clearCustomAttributes( material ); } -- GitLab