blob: 4d168c5da45aa2d69f13c35b9c80319fd4ee1c7b [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
var webglCanvas = document.getElementById("webgl-canvas");
var glAttribs = {
alpha: false,
};
var gl = webglCanvas.getContext("webgl", glAttribs);
var vrDisplay = null;
var frameData = null;
var onAnimationFrameCallback = null;
function onResize() {
if (vrDisplay && vrDisplay.isPresenting) {
var leftEye = vrDisplay.getEyeParameters("left");
var rightEye = vrDisplay.getEyeParameters("right");
webglCanvas.width = Math.max(leftEye.renderWidth, rightEye.renderWidth) * 2;
webglCanvas.height = Math.max(leftEye.renderHeight, rightEye.renderHeight);
} else {
webglCanvas.width = webglCanvas.offsetWidth * window.devicePixelRatio;
webglCanvas.height = webglCanvas.offsetHeight * window.devicePixelRatio;
}
}
function onVrPresentChange() {
onResize();
}
function onVrRequestPresent() {
vrDisplay.requestPresent([{source: webglCanvas}]);
}
function onAnimationFrame(t) {
if (vrDisplay == null) {
window.requestAnimationFrame(onAnimationFrame);
gl.viewport(0, 0, webglCanvas.width, webglCanvas.height);
return;
}
vrDisplay.requestAnimationFrame(onAnimationFrame);
// If presenting, set canvas to blue. Otherwise, red.
if (vrDisplay.isPresenting) {
if (onAnimationFrameCallback) onAnimationFrameCallback();
vrDisplay.getFrameData(frameData);
gl.clearColor(0.0, 0.0, 1.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
gl.viewport(0, 0, webglCanvas.width * 0.5, webglCanvas.height);
gl.viewport(webglCanvas.width * 0.5, 0, webglCanvas.width * 0.5,
webglCanvas.height);
vrDisplay.submitFrame();
} else {
gl.clearColor(1.0, 0.0, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
gl.viewport(0, 0, webglCanvas.width, webglCanvas.height);
}
}
if (navigator.getVRDisplays) {
frameData = new VRFrameData();
navigator.getVRDisplays().then( (displays) => {
if (displays.length > 0) {
vrDisplay = displays[0];
}
}).then( () => {
vrDisplayPromiseDone = true;
});
} else {
vrDisplayPromiseDone = true;
}
gl.clearColor(1.0, 0.0, 0.0, 1.0);
gl.enable(gl.DEPTH_TEST);
gl.enable(gl.CULL_FACE);
window.addEventListener("resize", onResize, false);
window.addEventListener("vrdisplaypresentchange", onVrPresentChange, false);
window.addEventListener('vrdisplayactivate', onVrRequestPresent, false);
window.requestAnimationFrame(onAnimationFrame);
webglCanvas.onclick = onVrRequestPresent;
onResize();