mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-02 18:08:58 +00:00
d6b280c1fb
This is a dependency of the WebXR implementation. In order to support WebXR's navigator.xr.IsSessionSupported call without displaying any permission dialogue, it is necessary to have a safe way to detect the capability of running a VR or AR session without activating XR runtimes or powering on hardware. API's such as OpenVR make no guarantee that hardware and software won't be left activated after enumerating devices, so each backend in gfx/vr/service must allow for more granular detection of capabilities. By passing true to bDetectRuntimesOnly, the initialization exits early after reporting the presence of XR runtime software. The Initialize method will only enumerate hardware and possibly return true when aDetectRuntimesOnly is false. Differential Revision: https://phabricator.services.mozilla.com/D54234 --HG-- extra : moz-landing-system : lando
59 lines
1.7 KiB
C++
59 lines
1.7 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef GFX_VR_SERVICE_PUPPETSESSION_H
|
|
#define GFX_VR_SERVICE_PUPPETSESSION_H
|
|
|
|
#include "VRSession.h"
|
|
|
|
#include "mozilla/TimeStamp.h"
|
|
#include "moz_external_vr.h"
|
|
|
|
#if defined(XP_WIN)
|
|
# include <d3d11_1.h>
|
|
#endif
|
|
class nsITimer;
|
|
|
|
namespace mozilla {
|
|
namespace gfx {
|
|
|
|
class PuppetSession : public VRSession {
|
|
public:
|
|
PuppetSession();
|
|
virtual ~PuppetSession();
|
|
|
|
bool Initialize(mozilla::gfx::VRSystemState& aSystemState,
|
|
bool aDetectRuntimesOnly) override;
|
|
void Shutdown() override;
|
|
void ProcessEvents(mozilla::gfx::VRSystemState& aSystemState) override;
|
|
void StartFrame(mozilla::gfx::VRSystemState& aSystemState) override;
|
|
bool StartPresentation() override;
|
|
void StopPresentation() override;
|
|
void VibrateHaptic(uint32_t aControllerIdx, uint32_t aHapticIndex,
|
|
float aIntensity, float aDuration) override;
|
|
void StopVibrateHaptic(uint32_t aControllerIdx) override;
|
|
void StopAllHaptics() override;
|
|
|
|
protected:
|
|
#if defined(XP_WIN)
|
|
bool SubmitFrame(const mozilla::gfx::VRLayer_Stereo_Immersive& aLayer,
|
|
ID3D11Texture2D* aTexture) override;
|
|
#elif defined(XP_MACOSX)
|
|
bool SubmitFrame(const mozilla::gfx::VRLayer_Stereo_Immersive& aLayer,
|
|
const VRLayerTextureHandle& aTexture) override;
|
|
#endif
|
|
|
|
private:
|
|
#if defined(XP_WIN)
|
|
bool CreateD3DObjects();
|
|
#endif
|
|
};
|
|
|
|
} // namespace gfx
|
|
} // namespace mozilla
|
|
|
|
#endif // GFX_VR_SERVICE_PUPPETSESSION_H
|