@@ -401,24 +401,35 @@ class LayerComposition extends EventHandler {
401
401
addRenderAction ( renderActions , renderActionIndex , layer , layerIndex , cameraIndex , cameraFirstRenderAction , postProcessMarked ) {
402
402
403
403
// try and reuse object, otherwise allocate new
404
- var renderAction = renderActions [ renderActionIndex ] ;
404
+ let renderAction = renderActions [ renderActionIndex ] ;
405
405
if ( ! renderAction ) {
406
406
renderAction = renderActions [ renderActionIndex ] = new RenderAction ( ) ;
407
407
}
408
408
409
409
// render target from the camera takes precedence over the render target from the layer
410
- var rt = layer . renderTarget ;
411
- var camera = layer . cameras [ cameraIndex ] ;
410
+ let rt = layer . renderTarget ;
411
+ const camera = layer . cameras [ cameraIndex ] ;
412
412
if ( camera && camera . renderTarget ) {
413
413
if ( layer . id !== LAYERID_DEPTH ) { // ignore depth layer
414
414
rt = camera . renderTarget ;
415
415
}
416
416
}
417
417
418
- // clear flags - use camera clear flags in the first render action for each camera, other render actions don't clear
419
- let clearColor = cameraFirstRenderAction ? camera . clearColorBuffer : false ;
420
- let clearDepth = cameraFirstRenderAction ? camera . clearDepthBuffer : false ;
421
- let clearStencil = cameraFirstRenderAction ? camera . clearStencilBuffer : false ;
418
+ // was camera and render target combo used already
419
+ let used = false ;
420
+ for ( let i = renderActionIndex - 1 ; i >= 0 ; i -- ) {
421
+ if ( renderActions [ i ] . camera === camera && renderActions [ i ] . renderTarget === rt ) {
422
+ used = true ;
423
+ break ;
424
+ }
425
+ }
426
+
427
+ // clear flags - use camera clear flags in the first render action for each camera,
428
+ // or when render target (from layer) was not yet cleared by this camera
429
+ let needsClear = cameraFirstRenderAction || ! used ;
430
+ let clearColor = needsClear ? camera . clearColorBuffer : false ;
431
+ let clearDepth = needsClear ? camera . clearDepthBuffer : false ;
432
+ let clearStencil = needsClear ? camera . clearStencilBuffer : false ;
422
433
423
434
// clear buffers if requested by the layer
424
435
clearColor |= layer . clearColorBuffer ;
0 commit comments