@@ -116,23 +116,16 @@ THREE.VREffect = function ( renderer, onError ) {
116
116
var requestFullscreen ;
117
117
var exitFullscreen ;
118
118
var fullscreenElement ;
119
+ var leftBounds = [ 0.0 , 0.0 , 0.5 , 1.0 ] ;
120
+ var rightBounds = [ 0.5 , 0.0 , 0.5 , 1.0 ] ;
119
121
120
122
function onFullscreenChange ( ) {
121
123
122
124
var wasPresenting = scope . isPresenting ;
123
125
scope . isPresenting = vrDisplay !== undefined && ( vrDisplay . isPresenting || ( ! isWebVR1 && document [ fullscreenElement ] instanceof window . HTMLElement ) ) ;
124
126
125
- if ( wasPresenting === scope . isPresenting ) {
126
-
127
- return ;
128
-
129
- }
130
-
131
127
if ( scope . isPresenting ) {
132
128
133
- rendererPixelRatio = renderer . getPixelRatio ( ) ;
134
- rendererSize = renderer . getSize ( ) ;
135
-
136
129
var eyeParamsL = vrDisplay . getEyeParameters ( 'left' ) ;
137
130
var eyeWidth , eyeHeight ;
138
131
@@ -141,17 +134,35 @@ THREE.VREffect = function ( renderer, onError ) {
141
134
eyeWidth = eyeParamsL . renderWidth ;
142
135
eyeHeight = eyeParamsL . renderHeight ;
143
136
137
+ if ( vrDisplay . getLayers ) {
138
+
139
+ var layers = vrDisplay . getLayers ( ) ;
140
+ if ( layers . length ) {
141
+
142
+ leftBounds = layers [ 0 ] . leftBounds || [ 0.0 , 0.0 , 0.5 , 1.0 ] ;
143
+ rightBounds = layers [ 0 ] . rightBounds || [ 0.5 , 0.0 , 0.5 , 1.0 ] ;
144
+
145
+ }
146
+ }
147
+
144
148
} else {
145
149
146
150
eyeWidth = eyeParamsL . renderRect . width ;
147
151
eyeHeight = eyeParamsL . renderRect . height ;
148
152
149
153
}
150
154
151
- renderer . setPixelRatio ( 1 ) ;
152
- renderer . setSize ( eyeWidth * 2 , eyeHeight , false ) ;
155
+ if ( ! wasPresenting ) {
153
156
154
- } else {
157
+ rendererPixelRatio = renderer . getPixelRatio ( ) ;
158
+ rendererSize = renderer . getSize ( ) ;
159
+
160
+ renderer . setPixelRatio ( 1 ) ;
161
+ renderer . setSize ( eyeWidth * 2 , eyeHeight , false ) ;
162
+
163
+ }
164
+
165
+ } else if ( wasPresenting ) {
155
166
156
167
renderer . setPixelRatio ( rendererPixelRatio ) ;
157
168
renderer . setSize ( rendererSize . width , rendererSize . height ) ;
@@ -311,8 +322,18 @@ THREE.VREffect = function ( renderer, onError ) {
311
322
// When rendering we don't care what the recommended size is, only what the actual size
312
323
// of the backbuffer is.
313
324
var size = renderer . getSize ( ) ;
314
- renderRectL = { x : 0 , y : 0 , width : size . width / 2 , height : size . height } ;
315
- renderRectR = { x : size . width / 2 , y : 0 , width : size . width / 2 , height : size . height } ;
325
+ renderRectL = {
326
+ x : Math . round ( size . width * leftBounds [ 0 ] ) ,
327
+ y : Math . round ( size . height * leftBounds [ 1 ] ) ,
328
+ width : Math . round ( size . width * leftBounds [ 2 ] ) ,
329
+ height : Math . round ( size . height * leftBounds [ 3 ] )
330
+ } ;
331
+ renderRectR = {
332
+ x : Math . round ( size . width * rightBounds [ 0 ] ) ,
333
+ y : Math . round ( size . height * rightBounds [ 1 ] ) ,
334
+ width : Math . round ( size . width * rightBounds [ 2 ] ) ,
335
+ height : Math . round ( size . height * rightBounds [ 3 ] )
336
+ } ;
316
337
317
338
renderer . setScissorTest ( true ) ;
318
339
0 commit comments