------------------------------------------------------------------------------
| 66 | |
| 67 | //------------------------------------------------------------------------------ |
| 68 | void vtkOpenVRRenderWindowInteractor::DoOneEvent(vtkVRRenderWindow* renWin, vtkRenderer* ren) |
| 69 | { |
| 70 | vtkOpenVRRenderWindow* oRenWin = vtkOpenVRRenderWindow::SafeDownCast(renWin); |
| 71 | |
| 72 | if (!oRenWin || !ren) |
| 73 | { |
| 74 | return; |
| 75 | } |
| 76 | vr::IVRSystem* pHMD = oRenWin->GetHMD(); |
| 77 | |
| 78 | if (!pHMD) |
| 79 | { |
| 80 | // try rendering to create the HMD connection |
| 81 | oRenWin->Render(); |
| 82 | return; |
| 83 | } |
| 84 | |
| 85 | vr::VREvent_t event; |
| 86 | vtkOpenVROverlay* ovl = oRenWin->GetDashboardOverlay(); |
| 87 | bool result = false; |
| 88 | |
| 89 | if (vr::VROverlay() && vr::VROverlay()->IsOverlayVisible(ovl->GetOverlayHandle())) |
| 90 | { |
| 91 | result = |
| 92 | vr::VROverlay()->PollNextOverlayEvent(ovl->GetOverlayHandle(), &event, sizeof(vr::VREvent_t)); |
| 93 | |
| 94 | if (result) |
| 95 | { |
| 96 | int height = ovl->GetOverlayTexture()->GetHeight(); |
| 97 | switch (event.eventType) |
| 98 | { |
| 99 | case vr::VREvent_MouseButtonDown: |
| 100 | { |
| 101 | if (event.data.mouse.button == vr::VRMouseButton_Left) |
| 102 | { |
| 103 | ovl->MouseButtonPress(event.data.mouse.x, height - event.data.mouse.y - 1); |
| 104 | } |
| 105 | } |
| 106 | break; |
| 107 | |
| 108 | case vr::VREvent_MouseButtonUp: |
| 109 | { |
| 110 | if (event.data.mouse.button == vr::VRMouseButton_Left) |
| 111 | { |
| 112 | ovl->MouseButtonRelease(event.data.mouse.x, height - event.data.mouse.y - 1); |
| 113 | } |
| 114 | } |
| 115 | break; |
| 116 | |
| 117 | case vr::VREvent_MouseMove: |
| 118 | { |
| 119 | ovl->MouseMoved(event.data.mouse.x, height - event.data.mouse.y - 1); |
| 120 | } |
| 121 | break; |
| 122 | |
| 123 | case vr::VREvent_OverlayShown: |
| 124 | { |
| 125 | oRenWin->RenderOverlay(); |