@@ -262,15 +262,41 @@ THREE.VREffect = function ( renderer, onError ) {
262
262
263
263
if ( isWebVR1 && vrDisplay !== undefined ) {
264
264
265
- vrDisplay . requestAnimationFrame ( f ) ;
265
+ return vrDisplay . requestAnimationFrame ( f ) ;
266
266
267
267
} else {
268
268
269
- window . requestAnimationFrame ( f ) ;
269
+ return window . requestAnimationFrame ( f ) ;
270
270
271
271
}
272
272
273
273
} ;
274
+
275
+ this . cancelAnimationFrame = function ( h ) {
276
+
277
+ if ( isWebVR1 && vrDisplay !== undefined ) {
278
+
279
+ vrDisplay . cancelAnimationFrame ( h ) ;
280
+
281
+ } else {
282
+
283
+ window . cancelAnimationFrame ( h ) ;
284
+
285
+ }
286
+
287
+ } ;
288
+
289
+ this . submitFrame = function ( ) {
290
+
291
+ if ( isWebVR1 && vrDisplay !== undefined && scope . isPresenting ) {
292
+
293
+ vrDisplay . submitFrame ( ) ;
294
+
295
+ }
296
+
297
+ } ;
298
+
299
+ this . autoSubmitFrame = true ;
274
300
275
301
// render
276
302
@@ -335,9 +361,18 @@ THREE.VREffect = function ( renderer, onError ) {
335
361
height : Math . round ( size . height * rightBounds [ 3 ] )
336
362
} ;
337
363
338
- renderer . setScissorTest ( true ) ;
364
+ if ( renderTarget ) {
365
+
366
+ renderer . setRenderTarget ( renderTarget ) ;
367
+ renderTarget . scissorTest = true ;
368
+
369
+ } else {
370
+
371
+ renderer . setScissorTest ( true ) ;
372
+
373
+ }
339
374
340
- if ( renderer . autoClear ) renderer . clear ( ) ;
375
+ if ( renderer . autoClear || forceClear ) renderer . clear ( ) ;
341
376
342
377
if ( camera . parent === null ) camera . updateMatrixWorld ( ) ;
343
378
@@ -353,26 +388,55 @@ THREE.VREffect = function ( renderer, onError ) {
353
388
354
389
355
390
// render left eye
356
- renderer . setViewport ( renderRectL . x , renderRectL . y , renderRectL . width , renderRectL . height ) ;
357
- renderer . setScissor ( renderRectL . x , renderRectL . y , renderRectL . width , renderRectL . height ) ;
391
+ if ( renderTarget ) {
392
+
393
+ renderTarget . viewport . set ( renderRectL . x , renderRectL . y , renderRectL . width , renderRectL . height ) ;
394
+ renderTarget . scissor . set ( renderRectL . x , renderRectL . y , renderRectL . width , renderRectL . height ) ;
395
+
396
+ } else {
397
+
398
+ renderer . setViewport ( renderRectL . x , renderRectL . y , renderRectL . width , renderRectL . height ) ;
399
+ renderer . setScissor ( renderRectL . x , renderRectL . y , renderRectL . width , renderRectL . height ) ;
400
+
401
+ }
358
402
renderer . render ( scene , cameraL , renderTarget , forceClear ) ;
359
403
360
404
// render right eye
361
- renderer . setViewport ( renderRectR . x , renderRectR . y , renderRectR . width , renderRectR . height ) ;
362
- renderer . setScissor ( renderRectR . x , renderRectR . y , renderRectR . width , renderRectR . height ) ;
405
+ if ( renderTarget ) {
406
+
407
+ renderTarget . viewport . set ( renderRectR . x , renderRectR . y , renderRectR . width , renderRectR . height ) ;
408
+ renderTarget . scissor . set ( renderRectR . x , renderRectR . y , renderRectR . width , renderRectR . height ) ;
409
+
410
+ } else {
411
+
412
+ renderer . setViewport ( renderRectR . x , renderRectR . y , renderRectR . width , renderRectR . height ) ;
413
+ renderer . setScissor ( renderRectR . x , renderRectR . y , renderRectR . width , renderRectR . height ) ;
414
+
415
+ }
363
416
renderer . render ( scene , cameraR , renderTarget , forceClear ) ;
364
417
365
- renderer . setScissorTest ( false ) ;
418
+ if ( renderTarget ) {
419
+
420
+ renderTarget . viewport . set ( 0 , 0 , size . width , size . height ) ;
421
+ renderTarget . scissor . set ( 0 , 0 , size . width , size . height ) ;
422
+ renderTarget . scissorTest = false ;
423
+ renderer . setRenderTarget ( null ) ;
366
424
425
+ } else {
426
+
427
+ renderer . setScissorTest ( false ) ;
428
+
429
+ }
430
+
367
431
if ( autoUpdate ) {
368
432
369
433
scene . autoUpdate = true ;
370
434
371
435
}
372
436
373
- if ( isWebVR1 ) {
437
+ if ( scope . autoSubmitFrame ) {
374
438
375
- vrDisplay . submitFrame ( ) ;
439
+ scope . submitFrame ( ) ;
376
440
377
441
}
378
442
0 commit comments