From 24302ae5e9613dbe0d5de4a206d655870716dcb5 Mon Sep 17 00:00:00 2001 From: Fernando Serrano Date: Tue, 23 Apr 2019 10:08:32 +0200 Subject: [PATCH] Add multiview status on example --- examples/webvr_ballshooter_multiview.html | 38 +++++++++++++++-------- src/renderers/WebGLRenderer.js | 10 +++--- src/renderers/webgl/WebGLMultiview.js | 4 +++ src/renderers/webgl/WebGLProgram.js | 4 +-- 4 files changed, 36 insertions(+), 20 deletions(-) diff --git a/examples/webvr_ballshooter_multiview.html b/examples/webvr_ballshooter_multiview.html index c0c7c8bb7b..aabf3b697f 100644 --- a/examples/webvr_ballshooter_multiview.html +++ b/examples/webvr_ballshooter_multiview.html @@ -44,23 +44,12 @@ animate(); function init() { - const urlParams = new URLSearchParams(window.location.search); - const multiview = urlParams.has('enableMultiview'); container = document.createElement( 'div' ); document.body.appendChild( container ); - var info = document.createElement( 'div' ); - info.style.position = 'absolute'; - info.style.top = '10px'; - info.style.width = '100%'; - info.style.textAlign = 'center'; - // @todo Change enabled for requested and check renderer.vr.multiview - info.innerHTML = 'OVR_multiview2 demo - ' + (multiview ? 'multiview enabled' : 'multiview not enabled') + ` toggle`; - container.appendChild( info ); - ms = document.createElement('div'); - ms.innerHTML = ''; - info.appendChild(ms); + const urlParams = new URLSearchParams(window.location.search); + const multiview = urlParams.has('enableMultiview'); scene = new THREE.Scene(); scene.background = new THREE.Color( 0x505050 ); @@ -111,6 +100,29 @@ // + var info = document.createElement( 'div' ); + info.style.position = 'absolute'; + info.style.top = '10px'; + info.style.width = '100%'; + info.style.textAlign = 'center'; + + function colorize( value ) { + + return value ? 'true' : 'false'; + + } + + // @todo Change enabled for requested and check renderer.vr.multiview + info.innerHTML = 'OVR_multiview2 demo
requested: ' + colorize(multiview) + ` toggle` + + `
available: ${ colorize( renderer.multiview.isAvailable() ) }
enabled: ${ colorize( renderer.multiview.isEnabled() ) }

`; + container.appendChild( info ); + ms = document.createElement('div'); + ms.innerHTML = ''; + info.appendChild(ms); + + //+ (multiview ? 'true' : 'false') + // + document.body.appendChild( WEBVR.createButton( renderer ) ); // controllers diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 03a1933d7e..26e8462b66 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -59,7 +59,7 @@ function WebGLRenderer( parameters ) { var _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ), _context = parameters.context !== undefined ? parameters.context : null, - _multiview = parameters.multiview !== undefined ? parameters.multiview : false, + _multiviewRequested = parameters.multiview !== undefined ? parameters.multiview : false, _alpha = parameters.alpha !== undefined ? parameters.alpha : false, _depth = parameters.depth !== undefined ? parameters.depth : true, @@ -315,8 +315,8 @@ function WebGLRenderer( parameters ) { this.vr = vr; - var multiviewObject = new WebGLMultiview(_multiview, _gl, _canvas, extensions, capabilities ); - var multiviewEnabled = this.multiviewEnabled = multiviewObject.isEnabled(); + var multiview = this.multiview = new WebGLMultiview(_multiviewRequested, _gl, _canvas, extensions, capabilities ); + var multiviewEnabled = this.multiviewEnabled = multiview.isEnabled(); // shadow map @@ -1370,7 +1370,7 @@ function WebGLRenderer( parameters ) { if ( multiviewEnabled ) { - multiviewObject.bindMultiviewFrameBuffer( camera ); + multiview.bindMultiviewFrameBuffer( camera ); _gl.disable( _gl.SCISSOR_TEST ); @@ -1403,7 +1403,7 @@ function WebGLRenderer( parameters ) { } - multiviewObject.unbindMultiviewFrameBuffer( camera ); + multiview.unbindMultiviewFrameBuffer( camera ); } else { diff --git a/src/renderers/webgl/WebGLMultiview.js b/src/renderers/webgl/WebGLMultiview.js index 68c747ffa1..a409b5c036 100644 --- a/src/renderers/webgl/WebGLMultiview.js +++ b/src/renderers/webgl/WebGLMultiview.js @@ -1,3 +1,7 @@ +/** + * @author fernandojsg / http://fernandojsg.com + */ + function WebGLMultiview( requested, gl, canvas, extensions, capabilities ) { this.isAvailable = function () { diff --git a/src/renderers/webgl/WebGLProgram.js b/src/renderers/webgl/WebGLProgram.js index c8425d3763..3ca86a0c24 100644 --- a/src/renderers/webgl/WebGLProgram.js +++ b/src/renderers/webgl/WebGLProgram.js @@ -432,10 +432,10 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters, renderer.multiviewEnabled ? [ 'uniform mat4 modelViewMatrix;', - 'uniform mat4 projectionMatrices[2];', 'uniform mat3 normalMatrix;', - 'uniform mat4 viewMatrices[2];', + 'uniform mat4 projectionMatrices[2];', + '#define viewMatrix viewMatrices[VIEW_ID]', '#define projectionMatrix projectionMatrices[VIEW_ID]' -- GitLab