VRDisplay.requestPresent()

Experimental

これは実験的な機能です。
本番で使用する前にブラウザー互換性一覧表をチェックしてください。

VRDisplay インターフェイスの requestPresent() メソッドは,VRDisplay へのシーン表示を開始します.

シンタックス

vrDisplayInstance.requestPresent(layers).then(function() {
  // Do something after the presentation has begun
});

パラメータ

layers
表示したいシーンを表す VRLayer オブジェクトの配列.なお現時点では,指定できるのは最小0要素,最大1要素です.

戻り値

表示が開始されたかを解決するpromise.

注記: VRDisplayCapabilities.canPresent が false,あるいは VRLayer 配列数が VRDisplayCapabilities.maxLayers レイヤより多い場合, promiseはリジェクトされます.

注記:   requestPresent() を呼出した時にVRDisplay が表示中の場合,VRDisplay は表示する VRLayer 配列を更新します.VRDisplayが表示中で requestPresent() がリジェクトされたら,VRDisplay は表示を終了します.

if(navigator.getVRDisplays) {
  console.log('WebVR 1.1 supported');
  // Then get the displays attached to the computer
  navigator.getVRDisplays().then(function(displays) {
    // If a display is available, use it to present the scene
    if(displays.length > 0) {
      vrDisplay = displays[0];
      console.log('Display found');
      // Starting the presentation when the button is clicked: It can only be called in response to a user gesture
      btn.addEventListener('click', function() {
        if(btn.textContent === 'Start VR display') {
          vrDisplay.requestPresent([{ source: canvas }]).then(function() {
            console.log('Presenting to WebVR display');

            // Set the canvas size to the size of the vrDisplay viewport

            var leftEye = vrDisplay.getEyeParameters('left');
            var rightEye = vrDisplay.getEyeParameters('right');

            canvas.width = Math.max(leftEye.renderWidth, rightEye.renderWidth) * 2;
            canvas.height = Math.max(leftEye.renderHeight, rightEye.renderHeight);

            // stop the normal presentation, and start the vr presentation
            window.cancelAnimationFrame(normalSceneFrame);
            drawVRScene();

            btn.textContent = 'Exit VR display';
          });
        } else {
          vrDisplay.exitPresent();
          console.log('Stopped presenting to WebVR display');

          btn.textContent = 'Start VR display';

          // Stop the VR presentation, and start the normal presentation
          vrDisplay.cancelAnimationFrame(vrSceneFrame);
          drawScene();
        }
      });
    }
  });
}

Note: You can see this complete code at raw-webgl-example.

仕様

Specification Status Comment
Unknown
requestPresent() の定義
不明 Initial definition

ブラウザの互換性

現在、互換性データを可読形式の JSON フォーマットに置き換えているところです。 この互換性一覧は古い形式を使っており、これに含まれるデータの置き換えが済んでいません。 手助けしていただける場合は、こちらから!

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support (有) (有) 未対応 未対応 未対応
Feature Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile Chrome for Android
Basic support 未対応 (有) 未対応 未対応 未対応 未対応

参照