hmd.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. * Copyright 2011-2018 Branimir Karadzic. All rights reserved.
  3. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
  4. */
  5. #ifndef BGFX_HMD_H_HEADER_GUARD
  6. #define BGFX_HMD_H_HEADER_GUARD
  7. #include "bgfx_p.h"
  8. namespace bgfx
  9. {
  10. struct VRSize
  11. {
  12. uint32_t m_w;
  13. uint32_t m_h;
  14. };
  15. struct VRFovTan
  16. {
  17. float m_up;
  18. float m_down;
  19. float m_left;
  20. float m_right;
  21. };
  22. struct VRDesc
  23. {
  24. uint32_t m_deviceType;
  25. float m_refreshRate;
  26. VRSize m_deviceSize;
  27. VRSize m_eyeSize[2];
  28. VRFovTan m_eyeFov[2];
  29. float m_neckOffset[2];
  30. };
  31. struct BX_NO_VTABLE VRImplI
  32. {
  33. virtual ~VRImplI() = 0;
  34. virtual bool init() = 0;
  35. virtual void shutdown() = 0;
  36. virtual void connect(VRDesc* _desc) = 0;
  37. virtual void disconnect() = 0;
  38. virtual bool isConnected() const = 0;
  39. virtual bool updateTracking(HMD& _hmd) = 0;
  40. virtual void updateInput(HMD& _hmd) = 0;
  41. virtual void recenter() = 0;
  42. virtual bool createSwapChain(const VRDesc& _desc, int _msaaSamples, int _mirrorWidth, int _mirrorHeight) = 0;
  43. virtual void destroySwapChain() = 0;
  44. virtual void destroyMirror() = 0;
  45. virtual void makeRenderTargetActive(const VRDesc& _desc) = 0;
  46. virtual bool submitSwapChain(const VRDesc& _desc) = 0;
  47. };
  48. inline VRImplI::~VRImplI()
  49. {
  50. }
  51. class VR
  52. {
  53. public:
  54. VR();
  55. void init(VRImplI* _impl);
  56. void shutdown();
  57. bool isInitialized() const
  58. {
  59. return NULL != m_impl;
  60. }
  61. bool isEnabled() const
  62. {
  63. return m_enabled;
  64. }
  65. void getViewport(uint8_t _eye, Rect* _viewport) const;
  66. void makeRenderTargetActive();
  67. void recenter();
  68. void preReset();
  69. void postReset(int _msaaSamples, int _mirrorWidth, int _mirrorHeight);
  70. void flip();
  71. void swap(HMD& _hmd);
  72. private:
  73. bool tryReconnect();
  74. void connectFailed();
  75. VRImplI* m_impl;
  76. VRDesc m_desc;
  77. VRSize m_hmdSize;
  78. uint32_t m_framesUntilReconnect;
  79. bool m_enabled;
  80. };
  81. } // namespace bgfx
  82. #endif // BGFX_HMD_H_HEADER_GUARD