Skip to content

Commit 151ba8e

Browse files
committed
WebGLRenderer: Combined ImmediateRenderObjects and normal objects. See mrdoob#7160. @tschw also sounds good? :)
1 parent 79693fd commit 151ba8e

1 file changed

Lines changed: 18 additions & 73 deletions

File tree

src/renderers/WebGLRenderer.js

Lines changed: 18 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,6 @@ THREE.WebGLRenderer = function ( parameters ) {
3636
var transparentObjects = [];
3737
var transparentObjectsLastIndex = -1;
3838

39-
var opaqueImmediateObjects = [];
40-
var opaqueImmediateObjectsLastIndex = -1;
41-
var transparentImmediateObjects = [];
42-
var transparentImmediateObjectsLastIndex = -1;
43-
4439
var morphInfluences = new Float32Array( 8 );
4540

4641

@@ -1101,9 +1096,6 @@ THREE.WebGLRenderer = function ( parameters ) {
11011096
opaqueObjectsLastIndex = -1;
11021097
transparentObjectsLastIndex = -1;
11031098

1104-
opaqueImmediateObjectsLastIndex = -1;
1105-
transparentImmediateObjectsLastIndex = -1;
1106-
11071099
sprites.length = 0;
11081100
lensFlares.length = 0;
11091101

@@ -1112,9 +1104,6 @@ THREE.WebGLRenderer = function ( parameters ) {
11121104
opaqueObjects.length = opaqueObjectsLastIndex + 1;
11131105
transparentObjects.length = transparentObjectsLastIndex + 1;
11141106

1115-
opaqueImmediateObjects.length = opaqueImmediateObjectsLastIndex + 1;
1116-
transparentImmediateObjects.length = transparentImmediateObjectsLastIndex + 1;
1117-
11181107
if ( _this.sortObjects === true ) {
11191108

11201109
opaqueObjects.sort( painterSortStable );
@@ -1150,22 +1139,16 @@ THREE.WebGLRenderer = function ( parameters ) {
11501139
renderObjects( opaqueObjects, camera, lights, fog, overrideMaterial );
11511140
renderObjects( transparentObjects, camera, lights, fog, overrideMaterial );
11521141

1153-
renderObjectsImmediate( opaqueImmediateObjects, camera, lights, fog, overrideMaterial );
1154-
renderObjectsImmediate( transparentImmediateObjects, camera, lights, fog, overrideMaterial );
1155-
11561142
} else {
11571143

11581144
// opaque pass (front-to-back order)
11591145

11601146
state.setBlending( THREE.NoBlending );
1161-
11621147
renderObjects( opaqueObjects, camera, lights, fog );
1163-
renderObjectsImmediate( opaqueImmediateObjects, camera, lights, fog );
11641148

11651149
// transparent pass (back-to-front order)
11661150

11671151
renderObjects( transparentObjects, camera, lights, fog );
1168-
renderObjectsImmediate( transparentImmediateObjects, camera, lights, fog );
11691152

11701153
}
11711154

@@ -1192,40 +1175,6 @@ THREE.WebGLRenderer = function ( parameters ) {
11921175

11931176
};
11941177

1195-
function pushImmediateRenderItem( object ) {
1196-
1197-
var array, index;
1198-
1199-
// allocate the next position in the appropriate array
1200-
1201-
if ( object.material.transparent ) {
1202-
1203-
array = transparentImmediateObjects;
1204-
index = ++ transparentImmediateObjectsLastIndex;
1205-
1206-
} else {
1207-
1208-
array = opaqueImmediateObjects;
1209-
index = ++ opaqueImmediateObjectsLastIndex;
1210-
1211-
}
1212-
1213-
// recycle existing position or grow the array
1214-
1215-
if ( index < array.length ) {
1216-
1217-
array[ index ] = object;
1218-
1219-
} else {
1220-
1221-
// assert( index === array.length );
1222-
array.push( object );
1223-
1224-
}
1225-
1226-
1227-
}
1228-
12291178
function pushRenderItem( object, geometry, material, z, group ) {
12301179

12311180
var array, index;
@@ -1293,7 +1242,14 @@ THREE.WebGLRenderer = function ( parameters ) {
12931242

12941243
} else if ( object instanceof THREE.ImmediateRenderObject ) {
12951244

1296-
pushImmediateRenderItem( object );
1245+
if ( _this.sortObjects === true ) {
1246+
1247+
_vector3.setFromMatrixPosition( object.matrixWorld );
1248+
_vector3.applyProjection( _projScreenMatrix );
1249+
1250+
}
1251+
1252+
pushRenderItem( object, null, object.material, _vector3.z, null );
12971253

12981254
} else if ( object instanceof THREE.Mesh || object instanceof THREE.Line || object instanceof THREE.Points ) {
12991255

@@ -1372,36 +1328,25 @@ THREE.WebGLRenderer = function ( parameters ) {
13721328
object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
13731329
object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
13741330

1375-
_this.renderBufferDirect( camera, lights, fog, geometry, material, object, group );
1376-
1377-
}
1378-
1379-
}
1331+
if ( object instanceof THREE.ImmediateRenderObject ) {
13801332

1381-
function renderObjectsImmediate( renderList, camera, lights, fog, overrideMaterial ) {
1333+
setMaterial( material );
13821334

1383-
var material = overrideMaterial;
1335+
var program = setProgram( camera, lights, fog, material, object );
13841336

1385-
for ( var i = 0, l = renderList.length; i < l; i ++ ) {
1337+
_currentGeometryProgram = '';
13861338

1387-
var object = renderList[ i ];
1339+
object.render( function ( object ) {
13881340

1389-
object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
1390-
object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
1341+
_this.renderBufferImmediate( object, program, material );
13911342

1392-
if ( overrideMaterial === undefined ) material = object.material;
1343+
} );
13931344

1394-
setMaterial( material );
1395-
1396-
var program = setProgram( camera, lights, fog, material, object );
1397-
1398-
_currentGeometryProgram = '';
1399-
1400-
object.render( function ( object ) {
1345+
} else {
14011346

1402-
_this.renderBufferImmediate( object, program, material );
1347+
_this.renderBufferDirect( camera, lights, fog, geometry, material, object, group );
14031348

1404-
} );
1349+
}
14051350

14061351
}
14071352

0 commit comments

Comments
 (0)