|
@@ -36,11 +36,6 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
var transparentObjects = [];
|
|
|
var transparentObjectsLastIndex = -1;
|
|
|
|
|
|
- var opaqueImmediateObjects = [];
|
|
|
- var opaqueImmediateObjectsLastIndex = -1;
|
|
|
- var transparentImmediateObjects = [];
|
|
|
- var transparentImmediateObjectsLastIndex = -1;
|
|
|
-
|
|
|
var morphInfluences = new Float32Array( 8 );
|
|
|
|
|
|
|
|
@@ -1101,9 +1096,6 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
opaqueObjectsLastIndex = -1;
|
|
|
transparentObjectsLastIndex = -1;
|
|
|
|
|
|
- opaqueImmediateObjectsLastIndex = -1;
|
|
|
- transparentImmediateObjectsLastIndex = -1;
|
|
|
-
|
|
|
sprites.length = 0;
|
|
|
lensFlares.length = 0;
|
|
|
|
|
@@ -1112,9 +1104,6 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
opaqueObjects.length = opaqueObjectsLastIndex + 1;
|
|
|
transparentObjects.length = transparentObjectsLastIndex + 1;
|
|
|
|
|
|
- opaqueImmediateObjects.length = opaqueImmediateObjectsLastIndex + 1;
|
|
|
- transparentImmediateObjects.length = transparentImmediateObjectsLastIndex + 1;
|
|
|
-
|
|
|
if ( _this.sortObjects === true ) {
|
|
|
|
|
|
opaqueObjects.sort( painterSortStable );
|
|
@@ -1150,22 +1139,16 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
renderObjects( opaqueObjects, camera, lights, fog, overrideMaterial );
|
|
|
renderObjects( transparentObjects, camera, lights, fog, overrideMaterial );
|
|
|
|
|
|
- renderObjectsImmediate( opaqueImmediateObjects, camera, lights, fog, overrideMaterial );
|
|
|
- renderObjectsImmediate( transparentImmediateObjects, camera, lights, fog, overrideMaterial );
|
|
|
-
|
|
|
} else {
|
|
|
|
|
|
// opaque pass (front-to-back order)
|
|
|
|
|
|
state.setBlending( THREE.NoBlending );
|
|
|
-
|
|
|
renderObjects( opaqueObjects, camera, lights, fog );
|
|
|
- renderObjectsImmediate( opaqueImmediateObjects, camera, lights, fog );
|
|
|
|
|
|
// transparent pass (back-to-front order)
|
|
|
|
|
|
renderObjects( transparentObjects, camera, lights, fog );
|
|
|
- renderObjectsImmediate( transparentImmediateObjects, camera, lights, fog );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -1192,40 +1175,6 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
};
|
|
|
|
|
|
- function pushImmediateRenderItem( object ) {
|
|
|
-
|
|
|
- var array, index;
|
|
|
-
|
|
|
- // allocate the next position in the appropriate array
|
|
|
-
|
|
|
- if ( object.material.transparent ) {
|
|
|
-
|
|
|
- array = transparentImmediateObjects;
|
|
|
- index = ++ transparentImmediateObjectsLastIndex;
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- array = opaqueImmediateObjects;
|
|
|
- index = ++ opaqueImmediateObjectsLastIndex;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- // recycle existing position or grow the array
|
|
|
-
|
|
|
- if ( index < array.length ) {
|
|
|
-
|
|
|
- array[ index ] = object;
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- // assert( index === array.length );
|
|
|
- array.push( object );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
function pushRenderItem( object, geometry, material, z, group ) {
|
|
|
|
|
|
var array, index;
|
|
@@ -1293,7 +1242,14 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
} else if ( object instanceof THREE.ImmediateRenderObject ) {
|
|
|
|
|
|
- pushImmediateRenderItem( object );
|
|
|
+ if ( _this.sortObjects === true ) {
|
|
|
+
|
|
|
+ _vector3.setFromMatrixPosition( object.matrixWorld );
|
|
|
+ _vector3.applyProjection( _projScreenMatrix );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ pushRenderItem( object, null, object.material, _vector3.z, null );
|
|
|
|
|
|
} else if ( object instanceof THREE.Mesh || object instanceof THREE.Line || object instanceof THREE.Points ) {
|
|
|
|
|
@@ -1372,36 +1328,25 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
|
|
|
object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
|
|
|
|
|
|
- _this.renderBufferDirect( camera, lights, fog, geometry, material, object, group );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
+ if ( object instanceof THREE.ImmediateRenderObject ) {
|
|
|
|
|
|
- function renderObjectsImmediate( renderList, camera, lights, fog, overrideMaterial ) {
|
|
|
+ setMaterial( material );
|
|
|
|
|
|
- var material = overrideMaterial;
|
|
|
+ var program = setProgram( camera, lights, fog, material, object );
|
|
|
|
|
|
- for ( var i = 0, l = renderList.length; i < l; i ++ ) {
|
|
|
+ _currentGeometryProgram = '';
|
|
|
|
|
|
- var object = renderList[ i ];
|
|
|
+ object.render( function ( object ) {
|
|
|
|
|
|
- object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
|
|
|
- object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
|
|
|
+ _this.renderBufferImmediate( object, program, material );
|
|
|
|
|
|
- if ( overrideMaterial === undefined ) material = object.material;
|
|
|
+ } );
|
|
|
|
|
|
- setMaterial( material );
|
|
|
-
|
|
|
- var program = setProgram( camera, lights, fog, material, object );
|
|
|
-
|
|
|
- _currentGeometryProgram = '';
|
|
|
-
|
|
|
- object.render( function ( object ) {
|
|
|
+ } else {
|
|
|
|
|
|
- _this.renderBufferImmediate( object, program, material );
|
|
|
+ _this.renderBufferDirect( camera, lights, fog, geometry, material, object, group );
|
|
|
|
|
|
- } );
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|