|
2 | 2 | * @author dmarcos / https://github.com/dmarcos
|
3 | 3 | *
|
4 | 4 | * It handles stereo rendering
|
5 |
| - * If mozGetVRDevices API is not available it gracefuly falls back to a |
| 5 | + * If mozGetVRDevices and getVRDevices APIs are not available it gracefuly falls back to a |
6 | 6 | * regular renderer
|
7 | 7 | *
|
8 | 8 | * The HMD supported is the Oculus DK1 and The Web API doesn't currently allow
|
9 |
| - * to query for the display resolution. The dimensions of the screen are temporarly |
10 |
| - * hardcoded (1280 x 800). |
| 9 | + * to query for the display resolution (only the chrome API allows it). |
| 10 | + * The dimensions of the screen are temporarly hardcoded (1280 x 800). |
11 | 11 | *
|
12 |
| - * For VR mode to work it has to be used with the Oculus enabled builds of Firefox: |
| 12 | + * For VR mode to work it has to be used with the Oculus enabled builds of Firefox or Chrome: |
| 13 | + * |
| 14 | + * Firefox: |
13 | 15 | *
|
14 | 16 | * OSX: http://people.mozilla.com/~vladimir/vr/firefox-33.0a1.en-US.mac.dmg
|
15 | 17 | * WIN: http://people.mozilla.com/~vladimir/vr/firefox-33.0a1.en-US.win64-x86_64.zip
|
16 | 18 | *
|
| 19 | + * Chrome builds: |
| 20 | + * |
| 21 | + * https://drive.google.com/folderview?id=0BzudLt22BqGRbW9WTHMtOWMzNjQ&usp=sharing#list |
| 22 | + * |
17 | 23 | */
|
18 | 24 | THREE.VREffect = function ( renderer, done ) {
|
19 |
| - |
20 | 25 | this._renderer = renderer;
|
21 | 26 |
|
22 | 27 | this._init = function() {
|
23 | 28 | var self = this;
|
24 |
| - if ( !navigator.mozGetVRDevices ) { |
| 29 | + if ( !navigator.mozGetVRDevices && !navigator.getVRDevices ) { |
25 | 30 | if ( done ) {
|
26 | 31 | done("Your browser is not VR Ready");
|
27 | 32 | }
|
28 | 33 | return;
|
29 | 34 | }
|
30 |
| - navigator.mozGetVRDevices( gotVRDevices ); |
| 35 | + if ( navigator.getVRDevices ) { |
| 36 | + navigator.getVRDevices().then( gotVRDevices ); |
| 37 | + } else { |
| 38 | + navigator.mozGetVRDevices( gotVRDevices ); |
| 39 | + } |
31 | 40 | function gotVRDevices( devices ) {
|
32 | 41 | var vrHMD;
|
33 | 42 | var error;
|
@@ -130,22 +139,30 @@ THREE.VREffect = function ( renderer, done ) {
|
130 | 139 | width: renderer.domElement.width,
|
131 | 140 | height: renderer.domElement.height
|
132 | 141 | };
|
133 |
| - fullScreen = true; |
134 | 142 | // Hardcoded Rift display size
|
135 |
| - renderer.setSize( 1280, 800 ); |
136 |
| - vrHMD.xxxToggleElementVR( renderer.domElement ); |
137 |
| - this.startFullscreen( vrHMD ); |
| 143 | + renderer.setSize( 1280, 800, false ); |
| 144 | + this.startFullscreen(); |
138 | 145 | };
|
139 | 146 |
|
140 |
| - this.startFullscreen = function( vrHMD ) { |
| 147 | + this.startFullscreen = function() { |
141 | 148 | var self = this;
|
142 | 149 | var renderer = this._renderer;
|
143 |
| - document.addEventListener( "mozfullscreenchange", function() { |
144 |
| - if ( !document.mozFullScreenElement ) { |
| 150 | + var vrHMD = this._vrHMD; |
| 151 | + var canvas = renderer.domElement; |
| 152 | + var fullScreenChange = |
| 153 | + canvas.mozRequestFullScreen? 'mozfullscreenchange' : 'webkitfullscreenchange'; |
| 154 | + |
| 155 | + document.addEventListener( fullScreenChange, onFullScreenChanged, false ); |
| 156 | + function onFullScreenChanged() { |
| 157 | + if ( !document.mozFullScreenElement && !document.webkitFullScreenElement ) { |
145 | 158 | self.setFullScreen( false );
|
146 | 159 | }
|
147 |
| - },false ); |
148 |
| - renderer.domElement.mozRequestFullScreen( { vrDisplay: vrHMD } ); |
| 160 | + } |
| 161 | + if ( canvas.mozRequestFullScreen ) { |
| 162 | + canvas.mozRequestFullScreen( { vrDisplay: vrHMD } ); |
| 163 | + } else { |
| 164 | + canvas.webkitRequestFullscreen( { vrDisplay: vrHMD } ); |
| 165 | + } |
149 | 166 | };
|
150 | 167 |
|
151 | 168 | this.FovToNDCScaleOffset = function( fov ) {
|
|
0 commit comments