|
@@ -1060,6 +1060,8 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
// update camera matrices and frustum
|
|
|
|
|
|
+ camera.onBeforeRender( _this );
|
|
|
+
|
|
|
if ( camera.parent === null ) camera.updateMatrixWorld();
|
|
|
|
|
|
camera.matrixWorldInverse.getInverse( camera.matrixWorld );
|
|
@@ -1236,6 +1238,14 @@ function WebGLRenderer( parameters ) {
|
|
|
state.buffers.depth.setMask( true );
|
|
|
state.buffers.color.setMask( true );
|
|
|
|
|
|
+ if ( camera.isArrayCamera && camera.enabled ) {
|
|
|
+
|
|
|
+ _this.setScissorTest( false );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ camera.onAfterRender( _this );
|
|
|
+
|
|
|
// _gl.finish();
|
|
|
|
|
|
};
|
|
@@ -1402,22 +1412,30 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
object.onBeforeRender( _this, scene, camera, geometry, material, group );
|
|
|
|
|
|
- object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
|
|
|
- object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
|
|
|
+ if ( camera.isArrayCamera && camera.enabled ) {
|
|
|
|
|
|
- if ( object.isImmediateRenderObject ) {
|
|
|
+ var cameras = camera.cameras;
|
|
|
|
|
|
- state.setMaterial( material );
|
|
|
+ for ( var j = 0, jl = cameras.length; j < jl; j ++ ) {
|
|
|
|
|
|
- var program = setProgram( camera, scene.fog, material, object );
|
|
|
+ var camera2 = cameras[ j ];
|
|
|
+ var bounds = camera2.bounds;
|
|
|
+ _this.setViewport(
|
|
|
+ bounds.x * _width * _pixelRatio, bounds.y * _height * _pixelRatio,
|
|
|
+ bounds.z * _width * _pixelRatio, bounds.w * _height * _pixelRatio
|
|
|
+ );
|
|
|
+ _this.setScissor(
|
|
|
+ bounds.x * _width * _pixelRatio, bounds.y * _height * _pixelRatio,
|
|
|
+ bounds.z * _width * _pixelRatio, bounds.w * _height * _pixelRatio
|
|
|
+ );
|
|
|
+ _this.setScissorTest( true );
|
|
|
+ renderObject( object, scene, camera2, geometry, material, group );
|
|
|
|
|
|
- _currentGeometryProgram = '';
|
|
|
-
|
|
|
- renderObjectImmediate( object, program, material );
|
|
|
+ }
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- _this.renderBufferDirect( camera, scene.fog, geometry, material, object, group );
|
|
|
+ renderObject( object, scene, camera, geometry, material, group );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -1427,6 +1445,29 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ function renderObject( object, scene, camera, geometry, material, group ) {
|
|
|
+
|
|
|
+ object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
|
|
|
+ object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
|
|
|
+
|
|
|
+ if ( object.isImmediateRenderObject ) {
|
|
|
+
|
|
|
+ state.setMaterial( material );
|
|
|
+
|
|
|
+ var program = setProgram( camera, scene.fog, material, object );
|
|
|
+
|
|
|
+ _currentGeometryProgram = '';
|
|
|
+
|
|
|
+ renderObjectImmediate( object, program, material );
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ _this.renderBufferDirect( camera, scene.fog, geometry, material, object, group );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
function initMaterial( material, fog, object ) {
|
|
|
|
|
|
var materialProperties = properties.get( material );
|