@@ -48,6 +48,10 @@ var viewMat3 = new Mat3();
48
48
var viewProjMat = new Mat4 ( ) ;
49
49
var projMat ;
50
50
51
+ var flipYMat = new Mat4 ( ) . setScale ( 1 , - 1 , 1 ) ;
52
+ var flippedViewProjMat = new Mat4 ( ) ;
53
+ var flippedSkyboxProjMat = new Mat4 ( ) ;
54
+
51
55
var viewInvL = new Mat4 ( ) ;
52
56
var viewInvR = new Mat4 ( ) ;
53
57
var viewL = new Mat4 ( ) ;
@@ -434,7 +438,17 @@ class ForwardRenderer {
434
438
435
439
// ViewProjection Matrix
436
440
viewProjMat . mul2 ( projMat , viewMat ) ;
437
- this . viewProjId . setValue ( viewProjMat . data ) ;
441
+
442
+ if ( target && target . flipY ) {
443
+ flippedViewProjMat . mul2 ( flipYMat , viewProjMat ) ;
444
+ flippedSkyboxProjMat . mul2 ( flipYMat , camera . getProjectionMatrixSkybox ( ) ) ;
445
+
446
+ this . viewProjId . setValue ( flippedViewProjMat . data ) ;
447
+ this . projSkyboxId . setValue ( flippedSkyboxProjMat . data ) ;
448
+ } else {
449
+ this . viewProjId . setValue ( viewProjMat . data ) ;
450
+ this . projSkyboxId . setValue ( camera . getProjectionMatrixSkybox ( ) . data ) ;
451
+ }
438
452
439
453
// View Position (world space)
440
454
this . dispatchViewPos ( camera . _node . getPosition ( ) ) ;
@@ -1235,7 +1249,7 @@ class ForwardRenderer {
1235
1249
this . viewPosId . setValue ( vp ) ;
1236
1250
}
1237
1251
1238
- renderForward ( camera , drawCalls , drawCallsCount , sortedLights , pass , cullingMask , drawCallback , layer ) {
1252
+ renderForward ( camera , drawCalls , drawCallsCount , sortedLights , pass , cullingMask , drawCallback , layer , flipFaces ) {
1239
1253
var device = this . device ;
1240
1254
var scene = this . scene ;
1241
1255
var vrDisplay = camera . vrDisplay ;
@@ -1363,7 +1377,7 @@ class ForwardRenderer {
1363
1377
}
1364
1378
}
1365
1379
1366
- this . setCullMode ( camera . _cullFaces , camera . _flipFaces , drawCall ) ;
1380
+ this . setCullMode ( camera . _cullFaces , flipFaces , drawCall ) ;
1367
1381
1368
1382
stencilFront = drawCall . stencilFront || material . stencilFront ;
1369
1383
stencilBack = drawCall . stencilBack || material . stencilBack ;
@@ -2283,6 +2297,10 @@ class ForwardRenderer {
2283
2297
renderAction . lightClusters . activate ( ) ;
2284
2298
}
2285
2299
2300
+ // enable flip faces if either the camera has _flipFaces enabled or the render target
2301
+ // has flipY enabled
2302
+ const flipFaces = ! ! ( camera . _flipFaces ^ renderAction ?. renderTarget ?. flipY ) ;
2303
+
2286
2304
const draws = this . _forwardDrawCalls ;
2287
2305
this . renderForward ( camera . camera ,
2288
2306
visible . list ,
@@ -2291,7 +2309,8 @@ class ForwardRenderer {
2291
2309
layer . shaderPass ,
2292
2310
layer . cullingMask ,
2293
2311
layer . onDrawCall ,
2294
- layer ) ;
2312
+ layer ,
2313
+ flipFaces ) ;
2295
2314
layer . _forwardDrawCalls += this . _forwardDrawCalls - draws ;
2296
2315
2297
2316
// Revert temp frame stuff
0 commit comments