OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "content/browser/vr/vr_service.h" | |
6 | |
7 #include "base/memory/singleton.h" | |
8 #include "third_party/WebKit/public/platform/WebVR.h" | |
9 | |
10 #if defined(OS_ANDROID) | |
11 #include "content/browser/vr/cardboard/cardboard_vr_device_provider.h" | |
12 #endif | |
13 | |
14 namespace content { | |
15 | |
16 void DeleteVRDeviceProvider(VRDeviceProvider* provider) { | |
no sievers
2015/03/19 01:24:52
nit: anonymous namespace around this
Or better: y
| |
17 delete provider; | |
18 } | |
19 | |
20 VRService::VRService() : | |
21 vr_initialized_(false) { | |
22 #if defined(OS_ANDROID) | |
23 RegisterProvider(new CardboardVRDeviceProvider()); | |
24 #endif | |
25 } | |
26 | |
27 VRService::VRService(VRDeviceProvider* provider) : | |
28 vr_initialized_(false) { | |
29 RegisterProvider(provider); | |
30 } | |
31 | |
32 VRService::~VRService() { | |
33 std::for_each(providers_.begin(), providers_.end(), DeleteVRDeviceProvider); | |
34 } | |
35 | |
36 void VRService::Initialize() { | |
37 if(vr_initialized_ == true) { | |
38 return; | |
39 } | |
40 | |
41 ProviderList::iterator iter; | |
42 for (iter = providers_.begin(); iter != providers_.end(); ++iter) { | |
43 (*iter)->Initialize(); | |
44 } | |
45 | |
46 vr_initialized_ = true; | |
47 } | |
48 | |
49 void VRService::Shutdown() { | |
50 if(vr_initialized_ == false) { | |
51 return; | |
52 } | |
53 | |
54 ProviderList::iterator iter; | |
55 for (iter = providers_.begin(); iter != providers_.end(); ++iter) { | |
56 (*iter)->Shutdown(); | |
57 } | |
58 | |
59 vr_initialized_ = false; | |
60 } | |
61 | |
62 VRService* VRService::GetInstance() { | |
63 return Singleton<VRService, | |
64 LeakySingletonTraits<VRService> >::get(); | |
no sievers
2015/03/19 01:24:51
Ah wait, so why even bother... VRDeviceProviders n
| |
65 } | |
66 | |
67 void VRService::GetVRDevices( | |
68 std::vector<blink::WebVRDevice>* webvr_devices) { | |
69 Initialize(); | |
70 | |
71 if(webvr_devices == NULL) | |
72 return; | |
73 | |
74 webvr_devices->clear(); | |
75 | |
76 ProviderList::iterator iter; | |
77 | |
78 std::vector<VRDevice*> devices; | |
79 | |
80 for (iter = providers_.begin(); iter != providers_.end(); ++iter) { | |
81 (*iter)->GetDevices(devices); | |
82 } | |
83 | |
84 std::vector<VRDevice*>::iterator diter; | |
85 for (diter = devices.begin(); diter != devices.end(); ++diter) { | |
86 VRDevice* device = *diter; | |
87 if (devices_.find(device->id()) == devices_.end()) { | |
88 devices_[device->id()] = device; | |
89 } | |
90 | |
91 blink::WebVRDevice webvr_device; | |
92 device->GetVRDevice(&webvr_device); | |
93 webvr_device.index = device->id(); | |
94 webvr_devices->push_back(webvr_device); | |
95 } | |
96 } | |
97 | |
98 VRDevice* VRService::GetDevice(unsigned int index) { | |
99 DeviceMap::iterator iter = devices_.find(index); | |
100 if (iter == devices_.end()) { | |
101 return NULL; | |
102 } | |
103 return iter->second; | |
104 } | |
105 | |
106 void VRService::RegisterProvider(VRDeviceProvider* provider) { | |
107 providers_.push_back(provider); | |
108 } | |
109 | |
110 } // namespace content | |
OLD | NEW |