diff --git a/src/extras/renderers/plugins/SpritePlugin.js b/src/extras/renderers/plugins/SpritePlugin.js index 9c5db1dda5ef53a5df7062771fdc842fb2db9ca9..950e02423e8abc4eff49cb2960c29c204d883f41 100644 --- a/src/extras/renderers/plugins/SpritePlugin.js +++ b/src/extras/renderers/plugins/SpritePlugin.js @@ -7,6 +7,8 @@ THREE.SpritePlugin = function () { var _gl, _renderer, _texture; + var sprites = []; + var vertices, faces, vertexBuffer, elementBuffer; var program, attributes, uniforms; @@ -81,10 +83,19 @@ THREE.SpritePlugin = function () { this.render = function ( scene, camera, viewportWidth, viewportHeight ) { - var sprites = scene.__webglSprites, - nSprites = sprites.length; + sprites.length = 0; + + scene.traverseVisible( function ( child ) { + + if ( child instanceof THREE.Sprite ) { + + sprites.push( child ); + + } + + } ); - if ( ! nSprites ) return; + if ( sprites.length === 0 ) return; // setup gl @@ -145,14 +156,10 @@ THREE.SpritePlugin = function () { // update positions and sort - var i, sprite, material, fogType, scale = []; + for ( var i = 0, l = sprites.length; i < l; i ++ ) { - for( i = 0; i < nSprites; i ++ ) { - - sprite = sprites[ i ]; - material = sprite.material; - - if ( sprite.visible === false ) continue; + var sprite = sprites[ i ]; + var material = sprite.material; sprite._modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, sprite.matrixWorld ); sprite.z = - sprite._modelViewMatrix.elements[ 14 ]; @@ -163,13 +170,12 @@ THREE.SpritePlugin = function () { // render all sprites - for( i = 0; i < nSprites; i ++ ) { + var scale = []; - sprite = sprites[ i ]; + for ( var i = 0, l = sprites.length; i < l; i ++ ) { - if ( sprite.visible === false ) continue; - - material = sprite.material; + var sprite = sprites[ i ]; + var material = sprite.material; _gl.uniform1f( uniforms.alphaTest, material.alphaTest ); _gl.uniformMatrix4fv( uniforms.modelViewMatrix, false, sprite._modelViewMatrix.elements ); @@ -177,14 +183,12 @@ THREE.SpritePlugin = function () { scale[ 0 ] = sprite.scale.x; scale[ 1 ] = sprite.scale.y; + var fogType = 0; + if ( scene.fog && material.fog ) { fogType = sceneFogType; - } else { - - fogType = 0; - } if ( oldFogType !== fogType ) { diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index fc20b1a0d56fca1c5d83fe8a1075879e84feee0a..f6a425cdef762bd58b15685e3e8cd5930bcfe245 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -3647,7 +3647,6 @@ THREE.WebGLRenderer = function ( parameters ) { scene.__webglObjects = {}; scene.__webglObjectsImmediate = []; - scene.__webglSprites = []; scene.__webglFlares = []; } @@ -3767,10 +3766,6 @@ THREE.WebGLRenderer = function ( parameters ) { addBufferImmediate( scene.__webglObjectsImmediate, object ); - } else if ( object instanceof THREE.Sprite ) { - - scene.__webglSprites.push( object ); - } else if ( object instanceof THREE.LensFlare ) { scene.__webglFlares.push( object ); @@ -3999,10 +3994,6 @@ THREE.WebGLRenderer = function ( parameters ) { removeInstancesWebglObjects( scene.__webglObjects, object ); - } else if ( object instanceof THREE.Sprite ) { - - removeInstancesDirect( scene.__webglSprites, object ); - } else if ( object instanceof THREE.LensFlare ) { removeInstancesDirect( scene.__webglFlares, object );