tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

VRSession.h (3495B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef GFX_VR_SERVICE_VRSESSION_H
      8 #define GFX_VR_SERVICE_VRSESSION_H
      9 
     10 #include "moz_external_vr.h"
     11 
     12 #if defined(XP_WIN)
     13 #  include <d3d11_1.h>
     14 #elif defined(XP_MACOSX)
     15 class MacIOSurface;
     16 #endif
     17 
     18 namespace mozilla {
     19 namespace gfx {
     20 
     21 class VRSession {
     22 public:
     23  VRSession();
     24 
     25  // Since this class doesn't use smartpointers for its refcounted
     26  // members (so that it can compile outside of mozilla-central),
     27  // prevent copying the addresses without increasing the refcount.
     28  VRSession(const VRSession&) = delete;
     29  VRSession& operator=(const VRSession&) = delete;
     30 
     31 #ifdef XP_WIN
     32  virtual ~VRSession();
     33 #else
     34  virtual ~VRSession() = default;
     35 #endif
     36 
     37  static void UpdateTrigger(VRControllerState& aState, uint32_t aButtonIndex,
     38                            float aValue, float aThreshold);
     39  /**
     40   * In order to support WebXR's navigator.xr.IsSessionSupported call without
     41   * displaying any permission dialogue, it is necessary to have a safe way to
     42   * detect the capability of running a VR or AR session without activating XR
     43   * runtimes or powering on hardware.
     44   *
     45   * API's such as OpenVR make no guarantee that hardware and software won't be
     46   * left activated after enumerating devices, so each backend in gfx/vr/service
     47   * must allow for more granular detection of capabilities.
     48   *
     49   * By passing true to bDetectRuntimesOnly, the initialization exits early
     50   * after reporting the presence of XR runtime software. The Initialize method
     51   * will only enumerate hardware and possibly return true when
     52   * aDetectRuntimesOnly is false.
     53   */
     54  virtual bool Initialize(mozilla::gfx::VRSystemState& aSystemState,
     55                          bool aDetectRuntimesOnly) = 0;
     56  virtual void Shutdown() = 0;
     57  virtual void ProcessEvents(mozilla::gfx::VRSystemState& aSystemState) = 0;
     58  virtual void StartFrame(mozilla::gfx::VRSystemState& aSystemState) = 0;
     59  virtual bool StartPresentation() = 0;
     60  virtual void StopPresentation() = 0;
     61  virtual void VibrateHaptic(uint32_t aControllerIdx, uint32_t aHapticIndex,
     62                             float aIntensity, float aDuration) = 0;
     63  virtual void StopVibrateHaptic(uint32_t aControllerIdx) = 0;
     64  virtual void StopAllHaptics() = 0;
     65  bool SubmitFrame(const mozilla::gfx::VRLayer_Stereo_Immersive& aLayer);
     66  bool ShouldQuit() const;
     67 
     68 protected:
     69  bool mShouldQuit;
     70 #if defined(XP_WIN)
     71  virtual bool SubmitFrame(const mozilla::gfx::VRLayer_Stereo_Immersive& aLayer,
     72                           ID3D11Texture2D* aTexture) = 0;
     73  bool CreateD3DContext(ID3D11Device* aDevice);
     74 
     75  ID3D11Device1* GetD3DDevice();
     76  ID3D11DeviceContext1* GetD3DDeviceContext();
     77  ID3DDeviceContextState* GetD3DDeviceContextState();
     78 
     79  ID3D11Device1* mDevice;
     80  ID3D11DeviceContext1* mContext;
     81  ID3DDeviceContextState* mDeviceContextState;
     82 
     83 #elif defined(XP_MACOSX)
     84  virtual bool SubmitFrame(const mozilla::gfx::VRLayer_Stereo_Immersive& aLayer,
     85                           const VRLayerTextureHandle& aTexture) = 0;
     86 #endif
     87  void SetControllerSelectionAndSqueezeFrameId(
     88      VRControllerState& controllerState, uint64_t aFrameId);
     89 };
     90 
     91 }  // namespace gfx
     92 }  // namespace mozilla
     93 
     94 #endif  // GFX_VR_SERVICE_VRSESSION_H