1 // Copyright 2019 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 #ifndef DEVICE_VR_WINDOWS_MIXED_REALITY_WRAPPERS_WMR_HOLOGRAPHIC_SPACE_H_ 5 #define DEVICE_VR_WINDOWS_MIXED_REALITY_WRAPPERS_WMR_HOLOGRAPHIC_SPACE_H_ 6 7 #include <windows.graphics.holographic.h> 8 #include <wrl.h> 9 10 #include <memory> 11 12 #include "base/callback_list.h" 13 #include "base/macros.h" 14 15 namespace device { 16 class WMRHolographicFrame; 17 class WMRHolographicSpace { 18 public: 19 virtual ~WMRHolographicSpace() = default; 20 21 virtual ABI::Windows::Graphics::Holographic::HolographicAdapterId 22 PrimaryAdapterId() = 0; 23 virtual std::unique_ptr<WMRHolographicFrame> TryCreateNextFrame() = 0; 24 virtual bool TrySetDirect3D11Device( 25 const Microsoft::WRL::ComPtr< 26 ABI::Windows::Graphics::DirectX::Direct3D11::IDirect3DDevice>& 27 device) = 0; 28 virtual ABI::Windows::Graphics::Holographic::HolographicSpaceUserPresence 29 UserPresence() = 0; 30 virtual std::unique_ptr<base::CallbackList<void()>::Subscription> 31 AddUserPresenceChangedCallback(const base::RepeatingCallback<void()>& cb) = 0; 32 }; 33 34 class WMRHolographicSpaceImpl : public WMRHolographicSpace { 35 public: 36 explicit WMRHolographicSpaceImpl( 37 Microsoft::WRL::ComPtr< 38 ABI::Windows::Graphics::Holographic::IHolographicSpace> space); 39 ~WMRHolographicSpaceImpl() override; 40 41 ABI::Windows::Graphics::Holographic::HolographicAdapterId PrimaryAdapterId() 42 override; 43 std::unique_ptr<WMRHolographicFrame> TryCreateNextFrame() override; 44 bool TrySetDirect3D11Device( 45 const Microsoft::WRL::ComPtr< 46 ABI::Windows::Graphics::DirectX::Direct3D11::IDirect3DDevice>& device) 47 override; 48 ABI::Windows::Graphics::Holographic::HolographicSpaceUserPresence 49 UserPresence() override; 50 std::unique_ptr<base::CallbackList<void()>::Subscription> 51 AddUserPresenceChangedCallback( 52 const base::RepeatingCallback<void()>& cb) override; 53 54 private: 55 void SubscribeEvents(); 56 void UnsubscribeEvents(); 57 58 HRESULT OnUserPresenceChanged( 59 ABI::Windows::Graphics::Holographic::IHolographicSpace*, 60 IInspectable*); 61 62 Microsoft::WRL::ComPtr<ABI::Windows::Graphics::Holographic::IHolographicSpace> 63 space_; 64 Microsoft::WRL::ComPtr< 65 ABI::Windows::Graphics::Holographic::IHolographicSpace2> 66 space2_; 67 68 EventRegistrationToken user_presence_changed_token_; 69 base::CallbackList<void()> user_presence_changed_callback_list_; 70 71 DISALLOW_COPY_AND_ASSIGN(WMRHolographicSpaceImpl); 72 }; 73 74 } // namespace device 75 76 #endif // DEVICE_VR_WINDOWS_MIXED_REALITY_WRAPPERS_WMR_HOLOGRAPHIC_SPACE_H_ 77