From 377782093764a7f3f1bbe9c433da19eaeb2dd30b Mon Sep 17 00:00:00 2001 From: "Mr.doob" Date: Thu, 13 Aug 2015 09:46:01 -0700 Subject: [PATCH] WebGLRenderer: ImmediateRenderObject code clean up. --- src/renderers/WebGLRenderer.js | 56 ++++++++++++++-------------------- 1 file changed, 23 insertions(+), 33 deletions(-) diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 17d11b46f9..1523a71df1 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -669,18 +669,18 @@ THREE.WebGLRenderer = function ( parameters ) { state.initAttributes(); - var objectProperties = properties.get( object ); + var buffers = properties.get( object ); - if ( object.hasPositions && ! objectProperties.__webglVertexBuffer ) objectProperties.__webglVertexBuffer = _gl.createBuffer(); - if ( object.hasNormals && ! objectProperties.__webglNormalBuffer ) objectProperties.__webglNormalBuffer = _gl.createBuffer(); - if ( object.hasUvs && ! objectProperties.__webglUvBuffer ) objectProperties.__webglUvBuffer = _gl.createBuffer(); - if ( object.hasColors && ! objectProperties.__webglColorBuffer ) objectProperties.__webglColorBuffer = _gl.createBuffer(); + if ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer(); + if ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer(); + if ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer(); + if ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer(); var attributes = program.getAttributes(); if ( object.hasPositions ) { - _gl.bindBuffer( _gl.ARRAY_BUFFER, objectProperties.__webglVertexBuffer ); + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.position ); _gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW ); state.enableAttribute( attributes.position ); @@ -690,7 +690,7 @@ THREE.WebGLRenderer = function ( parameters ) { if ( object.hasNormals ) { - _gl.bindBuffer( _gl.ARRAY_BUFFER, objectProperties.__webglNormalBuffer ); + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.normal ); if ( material instanceof THREE.MeshPhongMaterial === false && material.shading === THREE.FlatShading ) { @@ -745,7 +745,7 @@ THREE.WebGLRenderer = function ( parameters ) { if ( object.hasUvs && material.map ) { - _gl.bindBuffer( _gl.ARRAY_BUFFER, objectProperties.__webglUvBuffer ); + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.uv ); _gl.bufferData( _gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW ); state.enableAttribute( attributes.uv ); @@ -756,7 +756,7 @@ THREE.WebGLRenderer = function ( parameters ) { if ( object.hasColors && material.vertexColors !== THREE.NoColors ) { - _gl.bindBuffer( _gl.ARRAY_BUFFER, objectProperties.__webglColorBuffer ); + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.color ); _gl.bufferData( _gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW ); state.enableAttribute( attributes.color ); @@ -1597,13 +1597,13 @@ THREE.WebGLRenderer = function ( parameters ) { state.setBlending( THREE.NoBlending ); - renderObjects( opaqueObjects, camera, lights, fog, null ); - renderObjectsImmediate( opaqueImmediateObjects, camera, lights, fog, null ); + renderObjects( opaqueObjects, camera, lights, fog ); + renderObjectsImmediate( opaqueImmediateObjects, camera, lights, fog ); // transparent pass (back-to-front order) - renderObjects( transparentObjects, camera, lights, fog, null ); - renderObjectsImmediate( transparentImmediateObjects, camera, lights, fog, null ); + renderObjects( transparentObjects, camera, lights, fog ); + renderObjectsImmediate( transparentImmediateObjects, camera, lights, fog ); } @@ -1739,7 +1739,7 @@ THREE.WebGLRenderer = function ( parameters ) { setupMatrices( object, camera ); - if ( overrideMaterial === null ) material = object.material; + if ( overrideMaterial === undefined ) material = object.material; _this.renderBufferDirect( camera, lights, fog, material, object ); @@ -1757,33 +1757,23 @@ THREE.WebGLRenderer = function ( parameters ) { setupMatrices( object, camera ); - if ( object.visible === true ) { + if ( overrideMaterial === undefined ) material = object.material; - if ( overrideMaterial === null ) material = object.material; + setMaterial( material ); - _this.renderImmediateObject( camera, lights, fog, material, object ); + var program = setProgram( camera, lights, fog, material, object ); - } - - } - - } - - this.renderImmediateObject = function ( camera, lights, fog, material, object ) { - - setMaterial( material ); - - var program = setProgram( camera, lights, fog, material, object ); + _currentGeometryProgram = ''; - _currentGeometryProgram = ''; + object.render( function ( object ) { - object.render( function ( object ) { + _this.renderBufferImmediate( object, program, material ); - _this.renderBufferImmediate( object, program, material ); + } ); - } ); + } - }; + } // Materials -- GitLab