|
@@ -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 ) {
|