-
Notifications
You must be signed in to change notification settings - Fork 215
/
ExternalVR.h
79 lines (70 loc) · 2.56 KB
/
ExternalVR.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* 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 VRBROWSER_EXTERNALVR_H
#define VRBROWSER_EXTERNALVR_H
#include "vrb/MacroUtils.h"
#include "Controller.h"
#include "ControllerContainer.h"
#include "DeviceDelegate.h"
#include "Device.h"
#include <memory>
#include <string>
#include <vector>
namespace mozilla { namespace gfx { struct VRExternalShmem; } }
namespace crow {
class ExternalVR;
typedef std::shared_ptr<ExternalVR> ExternalVRPtr;
class ExternalVR : public ImmersiveDisplay {
public:
enum class VRState {
NotPresenting,
Loading,
LinkTraversal,
Rendering
};
enum class VRBrowserType {
Gecko,
Servo
};
static ExternalVRPtr Create();
mozilla::gfx::VRExternalShmem* GetSharedData();
// DeviceDisplay interface
void SetDeviceName(const std::string& aName) override;
void SetCapabilityFlags(const device::CapabilityFlags aFlags) override;
void SetFieldOfView(const device::Eye aEye, const double aLeftDegrees,
const double aRightDegrees,
const double aTopDegrees,
const double aBottomDegrees) override;
void SetEyeOffset(const device::Eye aEye, const float aX, const float aY, const float aZ) override;
void SetEyeResolution(const int32_t aX, const int32_t aY) override;
void SetSittingToStandingTransform(const vrb::Matrix& aTransform) override;
void CompleteEnumeration() override;
// ExternalVR interface
void PushSystemState();
void PullBrowserState();
void SetCompositorEnabled(bool aEnabled);
bool IsPresenting() const;
VRState GetVRState() const;
void PushFramePoses(const vrb::Matrix& aHeadTransform, const std::vector<Controller>& aControllers, const double aTimestamp);
bool WaitFrameResult();
void GetFrameResult(int32_t& aSurfaceHandle,
int32_t& aTextureWidth,
int32_t& aTextureHeight,
device::EyeRect& aLeftEye,
device::EyeRect& aRightEye) const;
void SetHapticState(ControllerContainerPtr aControllerContainer) const;
void StopPresenting();
void SetSourceBrowser(VRBrowserType aBrowser);
ExternalVR();
~ExternalVR() = default;
protected:
struct State;
private:
uint16_t GetControllerCapabilityFlags(device::CapabilityFlags aFlags);
State& m;
VRB_NO_DEFAULTS(ExternalVR)
};
}
#endif //VRBROWSER_EXTERNALVR_H