Skip to content

Commit 0c3ede3

Browse files
wizgravmrdoob
authored andcommitted
VREffect: Added cancelAnimationFrame(), submitFrame() and renderTarget (mrdoob#9198)
fixes
1 parent 5ddf821 commit 0c3ede3

File tree

1 file changed

+75
-11
lines changed

1 file changed

+75
-11
lines changed

examples/js/effects/VREffect.js

Lines changed: 75 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -262,15 +262,41 @@ THREE.VREffect = function ( renderer, onError ) {
262262

263263
if ( isWebVR1 && vrDisplay !== undefined ) {
264264

265-
vrDisplay.requestAnimationFrame( f );
265+
return vrDisplay.requestAnimationFrame( f );
266266

267267
} else {
268268

269-
window.requestAnimationFrame( f );
269+
return window.requestAnimationFrame( f );
270270

271271
}
272272

273273
};
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;
274300

275301
// render
276302

@@ -335,9 +361,18 @@ THREE.VREffect = function ( renderer, onError ) {
335361
height: Math.round(size.height * rightBounds[ 3 ] )
336362
};
337363

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+
}
339374

340-
if ( renderer.autoClear ) renderer.clear();
375+
if ( renderer.autoClear || forceClear ) renderer.clear();
341376

342377
if ( camera.parent === null ) camera.updateMatrixWorld();
343378

@@ -353,26 +388,55 @@ THREE.VREffect = function ( renderer, onError ) {
353388

354389

355390
// 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+
}
358402
renderer.render( scene, cameraL, renderTarget, forceClear );
359403

360404
// 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+
}
363416
renderer.render( scene, cameraR, renderTarget, forceClear );
364417

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 );
366424

425+
} else {
426+
427+
renderer.setScissorTest( false );
428+
429+
}
430+
367431
if ( autoUpdate ) {
368432

369433
scene.autoUpdate = true;
370434

371435
}
372436

373-
if ( isWebVR1 ) {
437+
if ( scope.autoSubmitFrame ) {
374438

375-
vrDisplay.submitFrame();
439+
scope.submitFrame();
376440

377441
}
378442

0 commit comments

Comments
 (0)