public override bool PollNextOverlayEvent(ulong ulOverlayHandle,ref VREvent_t pEvent) { CheckIfUsable(); bool result = VRNativeEntrypoints.VR_IVROverlay_PollNextOverlayEvent(m_pVROverlay,ulOverlayHandle,ref pEvent); return result; }
void HandleMouseScrollEvent(VREvent_t ev) { _browser.GetBrowser().GetHost().SendMouseWheelEvent(0, 0, (int)(ev.data.scroll.xdelta * SCROLL_AMOUNT_PER_SWIPE), (int)(ev.data.scroll.ydelta * SCROLL_AMOUNT_PER_SWIPE), CefEventFlags.None); }
void Update() { #if !(UNITY_5_6 || UNITY_5_3 || UNITY_5_2 || UNITY_5_1 || UNITY_5_0) if (poseUpdater == null) { var go = new GameObject("poseUpdater"); go.transform.parent = transform; poseUpdater = go.AddComponent <SteamVR_UpdatePoses>(); } #else if (cameras.Length == 0) { enabled = false; return; } // If our FixedUpdate rate doesn't match our render framerate, then catch the handoff here. SteamVR_Utils.QueueEventOnRenderThread(SteamVR.Unity.k_nRenderEventID_PostPresentHandoff); #endif // Force controller update in case no one else called this frame to ensure prevState gets updated. SteamVR_Controller.Update(); // Dispatch any OpenVR events. var system = OpenVR.System; if (system != null) { var vrEvent = new VREvent_t(); var size = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VREvent_t)); for (int i = 0; i < 64; i++) { if (!system.PollNextEvent(ref vrEvent, size)) { break; } switch ((EVREventType)vrEvent.eventType) { case EVREventType.VREvent_InputFocusCaptured: // another app has taken focus (likely dashboard) if (vrEvent.data.process.oldPid == 0) { SteamVR_Events.InputFocus.Send(false); } break; case EVREventType.VREvent_InputFocusReleased: // that app has released input focus if (vrEvent.data.process.pid == 0) { SteamVR_Events.InputFocus.Send(true); } break; case EVREventType.VREvent_ShowRenderModels: SteamVR_Events.HideRenderModels.Send(false); break; case EVREventType.VREvent_HideRenderModels: SteamVR_Events.HideRenderModels.Send(true); break; default: SteamVR_Events.System((EVREventType)vrEvent.eventType).Send(vrEvent); break; } } } // Ensure various settings to minimize latency. Application.targetFrameRate = -1; Application.runInBackground = true; // don't require companion window focus QualitySettings.maxQueuedFrames = -1; QualitySettings.vSyncCount = 0; // this applies to the companion window if (lockPhysicsUpdateRateToRenderFrequency && Time.timeScale > 0.0f) { var vr = SteamVR.instance; if (vr != null) { var timing = new Compositor_FrameTiming(); timing.m_nSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(Compositor_FrameTiming)); vr.compositor.GetFrameTiming(ref timing, 0); Time.fixedDeltaTime = Time.timeScale / vr.hmd_DisplayFrequency; } } }
private void Update() { // Force controller update in case no one else called this frame to ensure prevState gets updated. SteamVR_Controller.Update(); // Dispatch any OpenVR events. var system = OpenVR.System; if (system != null) { var vrEvent = new VREvent_t(); var size = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VREvent_t)); for (var i = 0; i < 64; i++) { if (!system.PollNextEvent(ref vrEvent, size)) { break; } switch ((EVREventType)vrEvent.eventType) { case EVREventType.VREvent_InputFocusCaptured: // another app has taken focus (likely dashboard) if (vrEvent.data.process.oldPid == 0) { SteamVR_Events.InputFocus.Send(false); } break; case EVREventType.VREvent_InputFocusReleased: // that app has released input focus if (vrEvent.data.process.pid == 0) { SteamVR_Events.InputFocus.Send(true); } break; case EVREventType.VREvent_ShowRenderModels: SteamVR_Events.HideRenderModels.Send(false); break; case EVREventType.VREvent_HideRenderModels: SteamVR_Events.HideRenderModels.Send(true); break; default: SteamVR_Events.System((EVREventType)vrEvent.eventType).Send(vrEvent); break; } } } // Ensure various settings to minimize latency. Application.targetFrameRate = -1; Application.runInBackground = true; // don't require companion window focus QualitySettings.maxQueuedFrames = -1; QualitySettings.vSyncCount = 0; // this applies to the companion window if (lockPhysicsUpdateRateToRenderFrequency && Time.timeScale > 0.0f) { var vr = SteamVR.instance; if (vr != null) { var timing = new Compositor_FrameTiming(); timing.m_nSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(Compositor_FrameTiming)); vr.compositor.GetFrameTiming(ref timing, 0); Time.fixedDeltaTime = Time.timeScale / vr.hmd_DisplayFrequency; } } }
private void ThreadLoop() { var active = false; var e = new VREvent_t(); var nextInit = DateTime.MinValue; var nextDeviceUpdate = DateTime.MinValue; var nextOverlay = DateTime.MinValue; var overlayIndex = OpenVR.k_unTrackedDeviceIndexInvalid; var overlayVisible1 = false; var overlayVisible2 = false; var dashboardHandle = 0UL; var overlayHandle1 = 0UL; var overlayHandle2 = 0UL; // REMOVE THIS // nextOverlay = DateTime.MaxValue; _device = new Device( DriverType.Hardware, DeviceCreationFlags.SingleThreaded | DeviceCreationFlags.BgraSupport ); _texture1 = new Texture2D( _device, new Texture2DDescription() { Width = 512, Height = 512, MipLevels = 1, ArraySize = 1, Format = Format.B8G8R8A8_UNorm, SampleDescription = new SampleDescription(1, 0), Usage = ResourceUsage.Dynamic, BindFlags = BindFlags.ShaderResource, CpuAccessFlags = CpuAccessFlags.Write } ); _texture2 = new Texture2D( _device, new Texture2DDescription() { Width = 1024, Height = 1024, MipLevels = 1, ArraySize = 1, Format = Format.B8G8R8A8_UNorm, SampleDescription = new SampleDescription(1, 0), Usage = ResourceUsage.Dynamic, BindFlags = BindFlags.ShaderResource, CpuAccessFlags = CpuAccessFlags.Write } ); _browser1 = new OffScreenBrowser( Path.Combine(Program.BaseDirectory, "html/vr.html?1"), 512, 512 ); _browser2 = new OffScreenBrowser( Path.Combine(Program.BaseDirectory, "html/vr.html?2"), 1024, 1024 ); while (_thread != null) { if (_wristOverlayActive) { _browser1.RenderToTexture(_texture1); } if (_hmdOverlayActive) { _browser2.RenderToTexture(_texture2); } try { Thread.Sleep(32); } catch { // ThreadInterruptedException } if (_active) { var system = OpenVR.System; if (system == null) { if (DateTime.UtcNow.CompareTo(nextInit) <= 0) { continue; } var _err = EVRInitError.None; system = OpenVR.Init(ref _err, EVRApplicationType.VRApplication_Background); nextInit = DateTime.UtcNow.AddSeconds(5); if (system == null) { continue; } active = true; } while (system.PollNextEvent(ref e, (uint)Marshal.SizeOf(e))) { var type = (EVREventType)e.eventType; if (type == EVREventType.VREvent_Quit) { active = false; OpenVR.Shutdown(); nextInit = DateTime.UtcNow.AddSeconds(10); system = null; break; } } if (system != null) { if (DateTime.UtcNow.CompareTo(nextDeviceUpdate) >= 0) { overlayIndex = OpenVR.k_unTrackedDeviceIndexInvalid; UpdateDevices(system, ref overlayIndex); if (overlayIndex != OpenVR.k_unTrackedDeviceIndexInvalid) { nextOverlay = DateTime.UtcNow.AddSeconds(10); } nextDeviceUpdate = DateTime.UtcNow.AddSeconds(0.1); } var overlay = OpenVR.Overlay; if (overlay != null) { var dashboardVisible = overlay.IsDashboardVisible(); var err = ProcessDashboard(overlay, ref dashboardHandle, dashboardVisible); if (err != EVROverlayError.None && dashboardHandle != 0) { overlay.DestroyOverlay(dashboardHandle); dashboardHandle = 0; } err = ProcessOverlay1(overlay, ref overlayHandle1, ref overlayVisible1, dashboardVisible, overlayIndex, nextOverlay); if (err != EVROverlayError.None && overlayHandle1 != 0) { overlay.DestroyOverlay(overlayHandle1); overlayHandle1 = 0; } err = ProcessOverlay2(overlay, ref overlayHandle2, ref overlayVisible2, dashboardVisible); if (err != EVROverlayError.None && overlayHandle2 != 0) { overlay.DestroyOverlay(overlayHandle2); overlayHandle2 = 0; } } } } else if (active) { active = false; OpenVR.Shutdown(); _deviceListLock.EnterWriteLock(); try { _deviceList.Clear(); } finally { _deviceListLock.ExitWriteLock(); } } } _browser2.Dispose(); _browser1.Dispose(); _texture2.Dispose(); _texture1.Dispose(); _device.Dispose(); }
public bool PollEvent(ref VREvent_t ovrEvent) { return(SteamVR_WebKit.OverlayManager.PollNextOverlayEvent(_handle, ref ovrEvent, eventSize) || SteamVR_WebKit.OverlayManager.PollNextOverlayEvent(_backSideHandle, ref ovrEvent, eventSize)); }
void OnTrackedDeviceEvent(VREvent_t ev) { RescanDevices(); }
/// <inheritdoc /> protected override bool OnConnectRuntime() { if (OnIsRuntimeConnected()) { OnDisconnectRuntime(); } var isSteamVRRunning = Runtime.IsSteamVRRunning(); if (!isSteamVRRunning) { lock (_runtimeConnectingLock) { _isRuntimeConnected = false; } return(OnIsRuntimeConnected()); } lock (_runtimeConnectingLock) { var evrInitError = EVRInitError.None; OpenVR.Init(ref evrInitError, EVRApplicationType.VRApplication_Utility); if (evrInitError != EVRInitError.None) { _isRuntimeConnected = false; _lastEVRInitError = evrInitError; } else { _isRuntimeConnected = true; } } Task.Run(() => { var lastHomeAppEnabled = false; var lastSceneApplicationState = SceneApplicationState.None; var vrEvent = new VREvent_t(); while (OnIsRuntimeConnected()) { var hasEvent = false; lock (_runtimeConnectingLock) { if (OnIsRuntimeConnected()) { hasEvent = OpenVR.System.PollNextEvent(ref vrEvent, (uint)Marshal.SizeOf(vrEvent)); } } if (!hasEvent) { if (!Runtime.IsSteamVRRunning()) { Logger.GetInstance(typeof(DefaultOpenVRManager)).Error("SteamVR has exited"); vrEvent.eventType = (uint)EVREventType.VREvent_Quit; } else { SpinWait.SpinUntil(() => false, TimeSpan.FromMilliseconds(200)); continue; } } var eventType = (EVREventType)vrEvent.eventType; if (eventType == EVREventType.VREvent_Quit) { OpenVR.System.AcknowledgeQuit_Exiting(); Logger.GetInstance(typeof(DefaultOpenVRManager)).Warn($"{eventType} received. Try to disconnect runtime."); OnDisconnectRuntime(); } else if (eventType == EVREventType.VREvent_SceneApplicationStateChanged) { var sceneApplicationState = OnGetSceneApplicationState(); if (lastSceneApplicationState != sceneApplicationState) { lastSceneApplicationState = sceneApplicationState; NotifySceneApplicationStateChanged(sceneApplicationState); } } else if (eventType == EVREventType.VREvent_EnableHomeAppSettingsHaveChanged) { var homeAppEnabled = OnIsHomeAppEnabled(); if (lastHomeAppEnabled != homeAppEnabled) { lastHomeAppEnabled = homeAppEnabled; NotifyEnableHomeAppSettingsHaveChanged(homeAppEnabled); } } else { // Logger.GetInstance(typeof(DefaultOpenVRManager)).Debug($"{eventType} is not handled"); } vrEvent = new VREvent_t(); } }); var isRuntimeConnected = OnIsRuntimeConnected(); if (isRuntimeConnected) { NotifyRuntimeConnected(); } return(isRuntimeConnected); }
void OnButtonPress(VREvent_t ev) { ButtonPress btn; var hand = GetHandForDevice(ev.trackedDeviceIndex); var button = (EVRButtonId)ev.data.controller.button; if (button == triggerButton) { btn = new ButtonPress(hand, Button.Trigger, true); TriggerPress.Send(btn); } if (button == grabButton) { btn = new ButtonPress(hand, Button.Grab, true); GrabPress.Send(btn); } if (button == menuButton) { btn = new ButtonPress(hand, Button.Menu, true); MenuPress.Send(btn); } if (basicBtnActions.ContainsKey(button)) { var btnAction = basicBtnActions[button]; var press = new ButtonActionsPress(hand, btnAction, true); ButtonActionPress.Send(press); } if (button == EVRButtonId.k_EButton_SteamVR_Touchpad) { var vr = OpenVR.System; // For now this only handles the SteamVR Touchpad // In the future Joysticks and small WMR touchpads should be supported // Though it's probably easiest to switch to get the SteamVR Input API working to replace this first var err = ETrackedPropertyError.TrackedProp_Success; var axisTypeInt = vr.GetInt32TrackedDeviceProperty(ev.trackedDeviceIndex, ETrackedDeviceProperty.Prop_Axis0Type_Int32, ref err); if (err == ETrackedPropertyError.TrackedProp_Success) { var axisType = (EVRControllerAxisType)axisTypeInt; if (axisType == EVRControllerAxisType.k_eControllerAxis_TrackPad) { var state = new VRControllerState_t(); var size = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VRControllerState_t)); if (vr.GetControllerState(ev.trackedDeviceIndex, ref state, size)) { var axis = ControllerAxisToVector2(state.rAxis0); float magnitude = 0; Direction dir = GetLargestVectorDirection(axis, ref magnitude); if (magnitude > trackpadCenterButtonRadius) { // Directional button press var dirBtn = new DirectionActionsPress(hand, DirectionAction.D1, dir, true); DirectionActionPress.Send(dirBtn); UnpressTouchpadHandler = () => { var dirBtnUnpress = new DirectionActionsPress(hand, DirectionAction.D1, dir, false); DirectionActionUnpress.Send(dirBtnUnpress); }; } else { // Center button press var press = new ButtonActionsPress(hand, BtnAction.D1, true); ButtonActionPress.Send(press); UnpressTouchpadHandler = () => { var unpress = new ButtonActionsPress(hand, BtnAction.D1, false); ButtonActionUnpress.Send(unpress); }; } } } } } }
protected override void onClickOculusGrip(ref VREvent_t vrEvent) { /* * if (modelcurve == null) * return; * * //testing project to non-planar surface * primaryDeviceIndex = vrEvent.trackedDeviceIndex; * //testing projection * //ray casting to the pre-defind planes * OpenTK.Vector4 controller_p = Util.getControllerTipPosition(ref mScene, primaryDeviceIndex == mScene.leftControllerIdx) * new OpenTK.Vector4(0, 0, 0, 1); * OpenTK.Vector4 controller_pZ = Util.getControllerTipPosition(ref mScene, primaryDeviceIndex == mScene.leftControllerIdx) * new OpenTK.Vector4(0, 0, -1, 1); * Point3d controller_pRhino = Util.openTkToRhinoPoint(Util.vrToPlatformPoint(ref mScene, new OpenTK.Vector3(controller_p.X, controller_p.Y, controller_p.Z))); * Point3d controller_pZRhin = Util.openTkToRhinoPoint(Util.vrToPlatformPoint(ref mScene, new OpenTK.Vector3(controller_pZ.X, controller_pZ.Y, controller_pZ.Z))); * * Rhino.Geometry.Vector3d direction = new Rhino.Geometry.Vector3d(controller_pZRhin.X - controller_pRhino.X, controller_pZRhin.Y - controller_pRhino.Y, controller_pZRhin.Z - controller_pRhino.Z); * Ray3d ray = new Ray3d(controller_pRhino, direction); * * Rhino.DocObjects.ObjectEnumeratorSettings settings = new Rhino.DocObjects.ObjectEnumeratorSettings(); * settings.ObjectTypeFilter = Rhino.DocObjects.ObjectType.Brep; * float mimD = 1000000f; * * Rhino.DocObjects.RhinoObject targetPRhObj = null; * OpenTK.Vector3 projectP; * Rhino.Geometry.Point3d projectPRhino = new Point3d(); * foreach (Rhino.DocObjects.RhinoObject rhObj in mScene.rhinoDoc.Objects.GetObjectList(settings)) * { * List<GeometryBase> geometries = new List<GeometryBase>(); * geometries.Add(rhObj.Geometry); * //must be a brep or surface, not mesh * Point3d[] rayIntersections = Rhino.Geometry.Intersect.Intersection.RayShoot(ray, geometries, 1); * if (rayIntersections != null) * { * //get the nearest one * OpenTK.Vector3 tmpP = Util.platformToVRPoint(ref mScene, new OpenTK.Vector3((float)rayIntersections[0].X, (float)rayIntersections[0].Y, (float)rayIntersections[0].Z)); * float distance = (float)Math.Sqrt(Math.Pow(tmpP.X - controller_p.X, 2) + Math.Pow(tmpP.Y - controller_p.Y, 2) + Math.Pow(tmpP.Z - controller_p.Z, 2)); * * if (distance < mimD) * { * hitPlane = true; * // = mScene.brepToSceneNodeDic[rhObj.Id]; * targetPRhObj = rhObj; * mimD = distance; * projectPRhino = rayIntersections[0]; * projectP = Util.platformToVRPoint(ref mScene, new OpenTK.Vector3((float)rayIntersections[0].X, (float)rayIntersections[0].Y, (float)rayIntersections[0].Z)); * } * * } * } * if (hitPlane) * { * Curve[] proejctCurveList; * proejctCurveList = Curve.ProjectToBrep(modelcurve, (Brep)(targetPRhObj.Geometry), direction, mScene.rhinoDoc.ModelAbsoluteTolerance); * * * * Brep targetBrep = (Brep)(targetPRhObj.Geometry); * //compute the brepFace where the curve is on * int faceIndex = -1; * for (int i = 0; i < targetBrep.Faces.Count; i++) * { * //cast BrepFace to Brep for ClosestPoint(P) menthod * double dist = targetBrep.Faces[i].DuplicateFace(false).ClosestPoint(projectPRhino).DistanceTo(projectPRhino); * //tolerance mScene.rhinoDoc.ModelAbsoluteTolerance too low * if (dist < mScene.rhinoDoc.ModelAbsoluteTolerance) * { * faceIndex = i; * break; * } * } * * Surface s = targetBrep.Faces[faceIndex]; * double u, v; * if (s.ClosestPoint(projectPRhino, out u, out v)) * { * //update modelCurve and Brep * modelcurve = Curve.ProjectToBrep(modelcurve, targetBrep, s.NormalAt(u, v), mScene.rhinoDoc.ModelAbsoluteTolerance)[0].ToNurbsCurve(); * * //render modelCurve * Rhino.Geometry.PolylineCurve polyline = modelcurve.ToPolyline(0, 0, 0, 0, 0, 1, 1, 0, true); * SceneNode stroke; * Geometry.Geometry stroke_g2 = new Geometry.GeometryStroke(ref mScene); * Material.Material stroke_m2 = new Material.SingleColorMaterial(0, 0, 1, 1); * for (int i = 0; i < polyline.PointCount; i++) * { * ((Geometry.GeometryStroke)stroke_g2).addPoint(Util.platformToVRPoint(ref mScene, new OpenTK.Vector3((float)polyline.Point(i).X, (float)polyline.Point(i).Y, (float)polyline.Point(i).Z))); * * } * stroke = new SceneNode("EditCurve", ref stroke_g2, ref stroke_m2); * mScene.tableGeometry.add(ref stroke); * * } * * * } * * //TODO-remove renderObjId sceneNode * * hitPlane = false; * isProjection = true; */ }
protected override void onReleaseOculusTrigger(ref VREvent_t vrEvent) { //mScene.popInteraction(); //mScene.peekInteraction().init(); }
protected override void onClickOculusAX(ref VREvent_t vrEvent) { //TODO-support projection curve Point3d planeCenter = new Point3d(); if (!isProjection) { Brep[] shapes = Brep.CreatePlanarBreps(modelcurve); modelBrep = shapes[0]; //Util.addRhinoObjectSceneNode(ref mScene, ref modelBrep, ref mesh_m, shapeType.ToString(), out renderObjSN); UtilOld.addSceneNode(ref mScene, ref modelBrep, ref mesh_m, shapeType.ToString(), out renderObjSN); if (shapeType == ShapeType.Circle) { Circle circle; if (modelcurve.TryGetCircle(out circle)) { planeCenter = circle.Center; } mScene.iPointList.Add(UtilOld.platformToVRPoint(ref mScene, UtilOld.RhinoToOpenTKPoint(circle.Center))); mScene.iPointList.Add(UtilOld.platformToVRPoint(ref mScene, UtilOld.RhinoToOpenTKPoint(circle.PointAt(0)))); } else if (shapeType == ShapeType.Rect) { Rhino.Geometry.Polyline polyline; if (modelcurve.TryGetPolyline(out polyline)) { Rectangle3d rect = Rectangle3d.CreateFromPolyline(polyline); planeCenter = rect.Center; mScene.iPointList.Add(UtilOld.platformToVRPoint(ref mScene, UtilOld.RhinoToOpenTKPoint(rect.Center))); mScene.iPointList.Add(UtilOld.platformToVRPoint(ref mScene, UtilOld.RhinoToOpenTKPoint(rect.Corner(3)))); } } } //update modelPlane and use tolerance to support unplanar surface Plane curvePlane = new Plane(); Double tolerance = 0; while (tolerance < 400) { if (modelcurve.TryGetPlane(out curvePlane, tolerance)) { modelPlane = curvePlane; break; } tolerance++; } int size = 240; PlaneSurface plane_surface = new PlaneSurface(curvePlane, new Interval(-size, size), new Interval(-size, size)); Brep newPlaneBrep = Brep.CreateFromSurface(plane_surface); Guid newPlaneID = UtilOld.addRhinoObject(ref mScene, ref newPlaneBrep, "3DP"); //might be better to use Replace(), just need to be careful about the referece count pointOnObjRef = null; pointOnObjRef = new ObjRef(newPlaneID); //add icurveList since we don't use EditPoint2 for circle and rect modelcurve.SetUserString(CurveData.CurveOnObj.ToString(), newPlaneID.ToString()); modelcurve.SetUserString(CurveData.PlaneOrigin.ToString(), curvePlane.Origin.ToString()); modelcurve.SetUserString(CurveData.PlaneNormal.ToString(), curvePlane.Normal.ToString()); mScene.iCurveList.Add(modelcurve); //call next interaction in the chain afterCurveCount = mScene.iCurveList.Count; mScene.pushInteractionFromChain(); }
private void Start() { _evt = default; _size = (uint)Marshal.SizeOf <VREvent_t>(); }
// NOTE // 메모리 릭 때문에 미리 생성해놓고 계속 사용함 public static void Init() { m_Device = new Device(DriverType.Hardware, DeviceCreationFlags.SingleThreaded | DeviceCreationFlags.BgraSupport); m_Texture1 = new Texture2D(m_Device, new Texture2DDescription() { Width = 512, Height = 512, MipLevels = 1, ArraySize = 1, Format = Format.B8G8R8A8_UNorm, SampleDescription = new SampleDescription(1, 0), Usage = ResourceUsage.Dynamic, BindFlags = BindFlags.ShaderResource, CpuAccessFlags = CpuAccessFlags.Write }); m_Texture2 = new Texture2D(m_Device, new Texture2DDescription() { Width = 512, Height = 512, MipLevels = 1, ArraySize = 1, Format = Format.B8G8R8A8_UNorm, SampleDescription = new SampleDescription(1, 0), Usage = ResourceUsage.Dynamic, BindFlags = BindFlags.ShaderResource, CpuAccessFlags = CpuAccessFlags.Write }); m_Browser1 = new Browser(m_Texture1, Application.StartupPath + "/html/vr.html?1"); m_Browser2 = new Browser(m_Texture2, Application.StartupPath + "/html/vr.html?2"); m_Thread = new Thread(() => { var active = false; var e = new VREvent_t(); var nextInit = DateTime.MinValue; var nextDeviceUpdate = DateTime.MinValue; var nextOverlay = DateTime.MinValue; var overlayIndex = OpenVR.k_unTrackedDeviceIndexInvalid; var overlayVisible1 = false; var overlayVisible2 = false; var dashboardHandle = 0UL; var overlayHandle1 = 0UL; var overlayHandle2 = 0UL; while (m_Thread != null) { try { Thread.Sleep(10); } catch { // ThreadInterruptedException } if (m_Active) { m_Browser1.Render(); m_Browser2.Render(); var system = OpenVR.System; if (system == null) { if (DateTime.UtcNow.CompareTo(nextInit) <= 0) { continue; } var _err = EVRInitError.None; system = OpenVR.Init(ref _err, EVRApplicationType.VRApplication_Overlay); nextInit = DateTime.UtcNow.AddSeconds(5); if (system == null) { continue; } active = true; } while (system.PollNextEvent(ref e, (uint)Marshal.SizeOf(e))) { var type = (EVREventType)e.eventType; if (type == EVREventType.VREvent_Quit) { active = false; OpenVR.Shutdown(); nextInit = DateTime.UtcNow.AddSeconds(10); system = null; break; } } if (system != null) { if (DateTime.UtcNow.CompareTo(nextDeviceUpdate) >= 0) { overlayIndex = OpenVR.k_unTrackedDeviceIndexInvalid; UpdateDevices(system, ref overlayIndex); if (overlayIndex != OpenVR.k_unTrackedDeviceIndexInvalid) { nextOverlay = DateTime.UtcNow.AddSeconds(10); } nextDeviceUpdate = DateTime.UtcNow.AddSeconds(0.1); } var overlay = OpenVR.Overlay; if (overlay != null) { var dashboardVisible = overlay.IsDashboardVisible(); var err = ProcessDashboard(overlay, ref dashboardHandle, dashboardVisible); if (err != EVROverlayError.None && dashboardHandle != 0) { overlay.DestroyOverlay(dashboardHandle); dashboardHandle = 0; } err = ProcessOverlay1(overlay, ref overlayHandle1, ref overlayVisible1, dashboardVisible, overlayIndex, nextOverlay); if (err != EVROverlayError.None && overlayHandle1 != 0) { overlay.DestroyOverlay(overlayHandle1); overlayHandle1 = 0; } err = ProcessOverlay2(overlay, ref overlayHandle2, ref overlayVisible2, dashboardVisible); if (err != EVROverlayError.None && overlayHandle2 != 0) { overlay.DestroyOverlay(overlayHandle2); overlayHandle2 = 0; } } } } else if (active) { active = false; OpenVR.Shutdown(); m_Lock.EnterWriteLock(); try { m_Devices.Clear(); } finally { m_Lock.ExitWriteLock(); } } } }) { IsBackground = true }; m_Thread.Start(); }
public override bool PollNextEventWithPose(TrackingUniverseOrigin eOrigin,ref VREvent_t pEvent,ref TrackedDevicePose_t pTrackedDevicePose) { CheckIfUsable(); bool result = VRNativeEntrypoints.VR_IVRSystem_PollNextEventWithPose(m_pVRSystem,eOrigin,ref pEvent,ref pTrackedDevicePose); return result; }
private void OnDeviceActivated(VREvent_t arg0) { var activity = Valve.VR.OpenVR.System.GetTrackedDeviceActivityLevel(0); Debug.Log(activity); }
public abstract bool PollNextEvent(ref VREvent_t pEvent);
public void Submit() { VREvent_t evt = new VREvent_t(); while (VR.PollNextEvent(ref evt, (uint)Marshal.SizeOf(typeof(VREvent_t)))) { // No need to do anything here! } TrackedDevicePose_t[] rposes = new TrackedDevicePose_t[OpenVR.k_unMaxTrackedDeviceCount]; TrackedDevicePose_t[] gposes = new TrackedDevicePose_t[OpenVR.k_unMaxTrackedDeviceCount]; EVRCompositorError merr = Compositor.WaitGetPoses(rposes, gposes); if (rposes[OpenVR.k_unTrackedDeviceIndex_Hmd].bPoseIsValid) { HmdMatrix34_t tmat = rposes[OpenVR.k_unTrackedDeviceIndex_Hmd].mDeviceToAbsoluteTracking; headMat = new Matrix4(tmat.m0, tmat.m1, tmat.m2, tmat.m3, tmat.m4, tmat.m5, tmat.m6, tmat.m7, tmat.m8, tmat.m9, tmat.m10, tmat.m11, 0, 0, 0, 1); headMat.Transpose(); HeadMatRot = headMat * Matrix4.CreateRotationX((float)(Math.PI * 0.5)); headMat = headMat * Matrix4.CreateRotationX((float)(Math.PI * 0.5)); headMat = headMat.ClearTranslation() * Matrix4.CreateTranslation(headMat.ExtractTranslation() * (1.5f * TheClient.CVars.r_vrscale.ValueF)); headMat.Invert(); } if (merr != EVRCompositorError.None) { SysConsole.Output(OutputType.WARNING, "Posing error: " + merr); } Left = GetController(true); Right = GetController(false); if (!Compositor.CanRenderScene()) { SysConsole.Output(OutputType.WARNING, "Can't render VR scene!"); } Texture_t left = new Texture_t() { eColorSpace = EColorSpace.Auto, eType = EGraphicsAPIConvention.API_OpenGL, handle = new IntPtr(TheClient.MainWorldView.CurrentFBOTexture) }; VRTextureBounds_t bounds = new VRTextureBounds_t() { uMin = 0f, uMax = 0.5f, vMin = 0f, vMax = 1f }; EVRCompositorError lerr = Compositor.Submit(EVREye.Eye_Left, ref left, ref bounds, EVRSubmitFlags.Submit_Default); if (lerr != EVRCompositorError.None) { SysConsole.Output(OutputType.WARNING, "Left eye error: " + lerr); } Texture_t right = new Texture_t() { eColorSpace = EColorSpace.Auto, eType = EGraphicsAPIConvention.API_OpenGL, handle = new IntPtr(TheClient.MainWorldView.CurrentFBOTexture) }; VRTextureBounds_t rbounds = new VRTextureBounds_t() { uMin = 0.5f, uMax = 1f, vMin = 0f, vMax = 1f }; EVRCompositorError rerr = Compositor.Submit(EVREye.Eye_Right, ref right, ref rbounds, EVRSubmitFlags.Submit_Default); if (rerr != EVRCompositorError.None) { SysConsole.Output(OutputType.WARNING, "Right eye error: " + rerr); } }
protected override void onClickOculusTrigger(ref VREvent_t vrEvent) { registerPositon(vrEvent.trackedDeviceIndex); }
private void OnTrackedDeviceRoleChanged(VREvent_t arg) { InvokeControllerRoleChangedEvent(); m_originDataCache.Clear(); }
public void Run() { var ev = new VREvent_t(); var evSize = (uint)Marshal.SizeOf(typeof(VREvent_t)); var actionSets = new VRActiveActionSet_t[] { new VRActiveActionSet_t { ulActionSet = inputSet, }, }; var actionSetSize = (uint)Marshal.SizeOf(typeof(VRActiveActionSet_t)); var actionData = new InputDigitalActionData_t(); var actionDataSize = (uint)Marshal.SizeOf(typeof(InputDigitalActionData_t)); Console.WriteLine("Brightness panic button is running. Input bindings may be changed through SteamVR's input bindings."); var sleepTime = (int)Math.Round(1000 * DT); while (running) { while (vrSystem.PollNextEvent(ref ev, evSize)) { switch ((EVREventType)ev.eventType) { case EVREventType.VREvent_DriverRequestedQuit: case EVREventType.VREvent_Quit: vrSystem.AcknowledgeQuit_Exiting(); running = false; break; } } var inputError = vrInput.UpdateActionState(actionSets, actionSetSize); if (inputError != EVRInputError.None) { var message = inputError.ToString(); throw new Exception($"Failed to update action state: {message}"); } inputError = vrInput.GetDigitalActionData(inputActivate, ref actionData, actionDataSize, 0); if (inputError != EVRInputError.None) { var message = inputError.ToString(); throw new Exception($"Failed to get Activate action state: {message}"); } var activatePressed = actionData.bChanged && actionData.bState; inputError = vrInput.GetDigitalActionData(inputResetAuto, ref actionData, actionDataSize, 0); if (inputError != EVRInputError.None) { var message = inputError.ToString(); throw new Exception($"Failed to get Reset (Auto) action state: {message}"); } var resetAutoPressed = actionData.bChanged && actionData.bState; inputError = vrInput.GetDigitalActionData(inputResetHold, ref actionData, actionDataSize, 0); if (inputError != EVRInputError.None) { var message = inputError.ToString(); throw new Exception($"Failed to get Reset (Hold) action state: {message}"); } var resetHoldChanged = actionData.bChanged; var resetHoldHeld = actionData.bState; if (activatePressed) { TriggerActivate(); } if (initialBrightness.HasValue && resetAutoPressed) { resetting = !resetting; if (resetting) { Console.WriteLine("Starting automatic reset."); } else { Console.WriteLine("Cancelling automatic reset."); } } if (initialBrightness.HasValue && resetHoldChanged) { resetting = resetHoldHeld; if (resetting) { Console.WriteLine("Starting held reset."); } else { Console.WriteLine("Cancelling held reset."); } } if (resetting) { resetting = TriggerReset(DT * RESET_SPEED); if (resetting && (resetAutoPressed || resetHoldChanged)) { try { resetSound.Play(); } catch (FileNotFoundException) {} } } Thread.Sleep(sleepTime); } }
private void OnKeyboard(VREvent_t evt) { VdmDesktopManager.Instance.SimulateKey((char)evt.data.keyboard.cNewInput0); }
internal EVROverlayError ProcessDashboard(CVROverlay overlay, ref ulong dashboardHandle, bool dashboardVisible) { var err = EVROverlayError.None; if (dashboardHandle == 0) { err = overlay.FindOverlay("VRCX", ref dashboardHandle); if (err != EVROverlayError.None) { if (err != EVROverlayError.UnknownOverlay) { return(err); } ulong handle = 0; err = overlay.CreateDashboardOverlay("VRCX", "VRCX", ref dashboardHandle, ref handle); if (err != EVROverlayError.None) { return(err); } err = overlay.SetOverlayWidthInMeters(dashboardHandle, 1.5f); if (err != EVROverlayError.None) { return(err); } err = overlay.SetOverlayInputMethod(dashboardHandle, VROverlayInputMethod.Mouse); if (err != EVROverlayError.None) { return(err); } } } var e = new VREvent_t(); while (overlay.PollNextOverlayEvent(dashboardHandle, ref e, (uint)Marshal.SizeOf(e))) { var type = (EVREventType)e.eventType; if (type == EVREventType.VREvent_MouseMove) { var m = e.data.mouse; var s = _browser1.Size; _browser1.GetBrowserHost().SendMouseMoveEvent((int)(m.x * s.Width), s.Height - (int)(m.y * s.Height), false, CefEventFlags.None); } else if (type == EVREventType.VREvent_MouseButtonDown) { var m = e.data.mouse; var s = _browser1.Size; _browser1.GetBrowserHost().SendMouseClickEvent((int)(m.x * s.Width), s.Height - (int)(m.y * s.Height), MouseButtonType.Left, false, 1, CefEventFlags.LeftMouseButton); } else if (type == EVREventType.VREvent_MouseButtonUp) { var m = e.data.mouse; var s = _browser1.Size; _browser1.GetBrowserHost().SendMouseClickEvent((int)(m.x * s.Width), s.Height - (int)(m.y * s.Height), MouseButtonType.Left, true, 1, CefEventFlags.None); } } if (dashboardVisible) { var texture = new Texture_t { handle = _texture1.NativePointer }; err = overlay.SetOverlayTexture(dashboardHandle, ref texture); if (err != EVROverlayError.None) { return(err); } } return(err); }
static void Main() { var initError = EVRInitError.None; system = OpenVR.Init(ref initError); if (initError != EVRInitError.None) { return; } compositor = OpenVR.Compositor; compositor.CompositorBringToFront(); compositor.FadeGrid(5.0f, false); count = OpenVR.k_unMaxTrackedDeviceCount; currentPoses = new TrackedDevicePose_t[count]; nextPoses = new TrackedDevicePose_t[count]; controllers = new List <uint>(); controllerModels = new RenderModel_t[count]; controllerTextures = new RenderModel_TextureMap_t[count]; controllerTextureViews = new ShaderResourceView[count]; controllerVertexBuffers = new SharpDX.Direct3D11.Buffer[count]; controllerIndexBuffers = new SharpDX.Direct3D11.Buffer[count]; controllerVertexBufferBindings = new VertexBufferBinding[count]; for (uint device = 0; device < count; device++) { var deviceClass = system.GetTrackedDeviceClass(device); switch (deviceClass) { case ETrackedDeviceClass.HMD: headset = device; break; case ETrackedDeviceClass.Controller: controllers.Add(device); break; } } uint width = 0; uint height = 0; system.GetRecommendedRenderTargetSize(ref width, ref height); headsetSize = new Size((int)width, (int)height); windowSize = new Size(960, 540); var leftEyeProjection = Convert(system.GetProjectionMatrix(EVREye.Eye_Left, 0.01f, 1000.0f)); var rightEyeProjection = Convert(system.GetProjectionMatrix(EVREye.Eye_Right, 0.01f, 1000.0f)); var leftEyeView = Convert(system.GetEyeToHeadTransform(EVREye.Eye_Left)); var rightEyeView = Convert(system.GetEyeToHeadTransform(EVREye.Eye_Right)); foreach (var controller in controllers) { var modelName = new StringBuilder(255, 255); var propertyError = ETrackedPropertyError.TrackedProp_Success; var length = system.GetStringTrackedDeviceProperty(controller, ETrackedDeviceProperty.Prop_RenderModelName_String, modelName, 255, ref propertyError); if (propertyError == ETrackedPropertyError.TrackedProp_Success) { var modelName2 = modelName.ToString(); while (true) { var pointer = IntPtr.Zero; var modelError = EVRRenderModelError.None; modelError = OpenVR.RenderModels.LoadRenderModel_Async(modelName2, ref pointer); if (modelError == EVRRenderModelError.Loading) { continue; } if (modelError == EVRRenderModelError.None) { var renderModel = System.Runtime.InteropServices.Marshal.PtrToStructure <RenderModel_t>(pointer); controllerModels[controller] = renderModel; break; } } while (true) { var pointer = IntPtr.Zero; var textureError = EVRRenderModelError.None; textureError = OpenVR.RenderModels.LoadTexture_Async(controllerModels[controller].diffuseTextureId, ref pointer); if (textureError == EVRRenderModelError.Loading) { continue; } if (textureError == EVRRenderModelError.None) { var texture = System.Runtime.InteropServices.Marshal.PtrToStructure <RenderModel_TextureMap_t>(pointer); controllerTextures[controller] = texture; break; } } } } int adapterIndex = 0; system.GetDXGIOutputInfo(ref adapterIndex); using (var form = new Form()) using (var factory = new Factory4()) { form.ClientSize = windowSize; var adapter = factory.GetAdapter(adapterIndex); var swapChainDescription = new SwapChainDescription { BufferCount = 1, Flags = SwapChainFlags.None, IsWindowed = true, ModeDescription = new ModeDescription { Format = Format.B8G8R8A8_UNorm, Width = form.ClientSize.Width, Height = form.ClientSize.Height, RefreshRate = new Rational(60, 1) }, OutputHandle = form.Handle, SampleDescription = new SampleDescription(1, 0), SwapEffect = SwapEffect.Discard, Usage = Usage.RenderTargetOutput }; SharpDX.Direct3D11.Device.CreateWithSwapChain(adapter, DeviceCreationFlags.None, swapChainDescription, out device, out swapChain); factory.MakeWindowAssociation(form.Handle, WindowAssociationFlags.None); context = device.ImmediateContext; using (var backBuffer = swapChain.GetBackBuffer <Texture2D>(0)) backBufferView = new RenderTargetView(device, backBuffer); var depthBufferDescription = new Texture2DDescription { Format = Format.D16_UNorm, ArraySize = 1, MipLevels = 1, Width = form.ClientSize.Width, Height = form.ClientSize.Height, SampleDescription = new SampleDescription(1, 0), Usage = ResourceUsage.Default, BindFlags = BindFlags.DepthStencil, CpuAccessFlags = CpuAccessFlags.None, OptionFlags = ResourceOptionFlags.None }; using (var depthBuffer = new Texture2D(device, depthBufferDescription)) depthStencilView = new DepthStencilView(device, depthBuffer); // Create Eye Textures var eyeTextureDescription = new Texture2DDescription { ArraySize = 1, BindFlags = BindFlags.RenderTarget, CpuAccessFlags = CpuAccessFlags.None, Format = Format.B8G8R8A8_UNorm, Width = headsetSize.Width, Height = headsetSize.Height, MipLevels = 1, OptionFlags = ResourceOptionFlags.None, SampleDescription = new SampleDescription(1, 0), Usage = ResourceUsage.Default }; var leftEyeTexture = new Texture2D(device, eyeTextureDescription); var rightEyeTexture = new Texture2D(device, eyeTextureDescription); var leftEyeTextureView = new RenderTargetView(device, leftEyeTexture); var rightEyeTextureView = new RenderTargetView(device, rightEyeTexture); // Create Eye Depth Buffer eyeTextureDescription.BindFlags = BindFlags.DepthStencil; eyeTextureDescription.Format = Format.D32_Float; var eyeDepth = new Texture2D(device, eyeTextureDescription); var eyeDepthView = new DepthStencilView(device, eyeDepth); Shapes.Cube.Load(device); Shapes.Sphere.Load(device); Shaders.Position.Load(device); Shaders.Normal.Load(device); Shaders.NormalTexture.Load(device); // Load Controller Models foreach (var controller in controllers) { var model = controllerModels[controller]; controllerVertexBuffers[controller] = new SharpDX.Direct3D11.Buffer(device, model.rVertexData, new BufferDescription { BindFlags = BindFlags.VertexBuffer, SizeInBytes = (int)model.unVertexCount * 32 }); controllerVertexBufferBindings[controller] = new VertexBufferBinding(controllerVertexBuffers[controller], 32, 0); controllerIndexBuffers[controller] = new SharpDX.Direct3D11.Buffer(device, model.rIndexData, new BufferDescription { BindFlags = BindFlags.IndexBuffer, SizeInBytes = (int)model.unTriangleCount * 3 * 2 }); var texture = controllerTextures[controller]; using (var texture2d = new Texture2D(device, new Texture2DDescription { ArraySize = 1, BindFlags = BindFlags.ShaderResource, Format = Format.R8G8B8A8_UNorm, Width = texture.unWidth, Height = texture.unHeight, MipLevels = 1, SampleDescription = new SampleDescription(1, 0) }, new DataRectangle(texture.rubTextureMapData, texture.unWidth * 4))) controllerTextureViews[controller] = new ShaderResourceView(device, texture2d); } worldViewProjectionBuffer = new SharpDX.Direct3D11.Buffer(device, Utilities.SizeOf <Matrix>(), ResourceUsage.Default, BindFlags.ConstantBuffer, CpuAccessFlags.None, ResourceOptionFlags.None, 0); var rasterizerStateDescription = RasterizerStateDescription.Default(); //rasterizerStateDescription.FillMode = FillMode.Wireframe; rasterizerStateDescription.IsFrontCounterClockwise = true; //rasterizerStateDescription.CullMode = CullMode.None; rasterizerState = new RasterizerState(device, rasterizerStateDescription); var blendStateDescription = BlendStateDescription.Default(); blendStateDescription.RenderTarget[0].BlendOperation = BlendOperation.Add; blendStateDescription.RenderTarget[0].SourceBlend = BlendOption.SourceAlpha; blendStateDescription.RenderTarget[0].DestinationBlend = BlendOption.InverseSourceAlpha; blendStateDescription.RenderTarget[0].IsBlendEnabled = false; blendState = new BlendState(device, blendStateDescription); var depthStateDescription = DepthStencilStateDescription.Default(); depthStateDescription.DepthComparison = Comparison.LessEqual; depthStateDescription.IsDepthEnabled = true; depthStateDescription.IsStencilEnabled = false; depthStencilState = new DepthStencilState(device, depthStateDescription); var samplerStateDescription = SamplerStateDescription.Default(); samplerStateDescription.Filter = Filter.MinMagMipLinear; samplerStateDescription.AddressU = TextureAddressMode.Wrap; samplerStateDescription.AddressV = TextureAddressMode.Wrap; samplerState = new SamplerState(device, samplerStateDescription); startTime = DateTime.Now; frame = 0; windowSize = form.ClientSize; backgroundColor = new RawColor4(0.1f, 0.1f, 0.1f, 1); var vrEvent = new VREvent_t(); var eventSize = (uint)Utilities.SizeOf <VREvent_t>(); head = Matrix.Identity; // Initialize Audio var audioSamples = 1024; var audioDevices = DirectSoundCapture.GetDevices(); //var audioCapture = new DirectSoundCapture(devices.OrderByDescending(d => d.Description.Contains("Mic")).First().DriverGuid); var audioCapture = new DirectSoundCapture(audioDevices.OrderByDescending(d => d.Description.Contains("Mix")).First().DriverGuid); var audioFormat = new WaveFormat(); var audioLength = audioFormat.ConvertLatencyToByteSize(24); var audioData = new byte[audioLength]; var audioPosition = 0; var leftWaveForm = new float[1024 * 8]; var rightWaveForm = new float[1024 * 8]; for (var sample = 0; sample < 1024; sample++) { leftWaveForm[(sample * 8) + 0] = -1.0f + ((float)sample / 512.0f); rightWaveForm[(sample * 8) + 0] = -1.0f + ((float)sample / 512.0f); } var audioBuffer = new CaptureBuffer(audioCapture, new CaptureBufferDescription { BufferBytes = audioLength, Format = audioFormat }); audioBuffer.Start(true); var waveFormBufferDescription = new BufferDescription { BindFlags = BindFlags.VertexBuffer, SizeInBytes = leftWaveForm.Length * sizeof(float), CpuAccessFlags = CpuAccessFlags.Write, Usage = ResourceUsage.Dynamic }; var leftWaveFormVertexBuffer = SharpDX.Direct3D11.Buffer.Create(device, leftWaveForm, waveFormBufferDescription); var rightWaveFormVertexBuffer = SharpDX.Direct3D11.Buffer.Create(device, rightWaveForm, waveFormBufferDescription); var leftWaveFormVertexBufferBinding = new VertexBufferBinding(leftWaveFormVertexBuffer, 8 * sizeof(float), 0); var rightWaveFormVertexBufferBinding = new VertexBufferBinding(rightWaveFormVertexBuffer, 8 * sizeof(float), 0); RenderLoop.Run(form, () => { if (audioBuffer.CurrentCapturePosition != audioBuffer.CurrentRealPosition) { audioBuffer.Read(audioData, 0, audioData.Length, 0, LockFlags.None); for (var sample = 0; sample < 1024; sample++) { leftWaveForm[(sample * 8) + 1] = -BitConverter.ToInt16(audioData, sample * 4) / (float)short.MinValue; rightWaveForm[(sample * 8) + 1] = -BitConverter.ToInt16(audioData, (sample * 4) + 2) / (float)short.MinValue; } DataStream stream; context.MapSubresource(leftWaveFormVertexBuffer, 0, MapMode.WriteDiscard, SharpDX.Direct3D11.MapFlags.None, out stream); stream.WriteRange(leftWaveForm); context.UnmapSubresource(leftWaveFormVertexBuffer, 0); stream.Dispose(); context.MapSubresource(rightWaveFormVertexBuffer, 0, MapMode.WriteDiscard, SharpDX.Direct3D11.MapFlags.None, out stream); stream.WriteRange(rightWaveForm); context.UnmapSubresource(rightWaveFormVertexBuffer, 0); stream.Dispose(); } audioPosition += 8; if (audioPosition >= leftWaveForm.Length) { audioPosition = 0; } while (system.PollNextEvent(ref vrEvent, eventSize)) { switch ((EVREventType)vrEvent.eventType) { case EVREventType.VREvent_TrackedDeviceActivated: var controller = vrEvent.trackedDeviceIndex; controllers.Add(controller); var modelName = new StringBuilder(255, 255); var propertyError = ETrackedPropertyError.TrackedProp_Success; var length = system.GetStringTrackedDeviceProperty(controller, ETrackedDeviceProperty.Prop_RenderModelName_String, modelName, 255, ref propertyError); if (propertyError == ETrackedPropertyError.TrackedProp_Success) { var modelName2 = modelName.ToString(); while (true) { var pointer = IntPtr.Zero; var modelError = EVRRenderModelError.None; modelError = OpenVR.RenderModels.LoadRenderModel_Async(modelName2, ref pointer); if (modelError == EVRRenderModelError.Loading) { continue; } if (modelError == EVRRenderModelError.None) { var renderModel = System.Runtime.InteropServices.Marshal.PtrToStructure <RenderModel_t>(pointer); controllerModels[controller] = renderModel; // Load Controller Model var model = controllerModels[controller]; controllerVertexBuffers[controller] = new SharpDX.Direct3D11.Buffer(device, model.rVertexData, new BufferDescription { BindFlags = BindFlags.VertexBuffer, SizeInBytes = (int)model.unVertexCount * 32 }); controllerVertexBufferBindings[controller] = new VertexBufferBinding(controllerVertexBuffers[controller], 32, 0); controllerIndexBuffers[controller] = new SharpDX.Direct3D11.Buffer(device, model.rIndexData, new BufferDescription { BindFlags = BindFlags.IndexBuffer, SizeInBytes = (int)model.unTriangleCount * 3 * 2 }); break; } } while (true) { var pointer = IntPtr.Zero; var textureError = EVRRenderModelError.None; textureError = OpenVR.RenderModels.LoadTexture_Async(controllerModels[controller].diffuseTextureId, ref pointer); if (textureError == EVRRenderModelError.Loading) { continue; } if (textureError == EVRRenderModelError.None) { var textureMap = System.Runtime.InteropServices.Marshal.PtrToStructure <RenderModel_TextureMap_t>(pointer); controllerTextures[controller] = textureMap; using (var texture2d = new Texture2D(device, new Texture2DDescription { ArraySize = 1, BindFlags = BindFlags.ShaderResource, Format = Format.R8G8B8A8_UNorm, Width = textureMap.unWidth, Height = textureMap.unHeight, MipLevels = 1, SampleDescription = new SampleDescription(1, 0) }, new DataRectangle(textureMap.rubTextureMapData, textureMap.unWidth * 4))) controllerTextureViews[controller] = new ShaderResourceView(device, texture2d); break; } } } break; case EVREventType.VREvent_TrackedDeviceDeactivated: controllers.RemoveAll(c => c == vrEvent.trackedDeviceIndex); break; default: System.Diagnostics.Debug.WriteLine((EVREventType)vrEvent.eventType); break; } } if (form.ClientSize != windowSize) { Utilities.Dispose(ref backBufferView); if (form.ClientSize.Width != 0 && form.ClientSize.Height != 0) { swapChain.ResizeBuffers(1, form.ClientSize.Width, form.ClientSize.Height, Format.B8G8R8A8_UNorm, SwapChainFlags.None); using (var backBuffer = swapChain.GetBackBuffer <Texture2D>(0)) backBufferView = new RenderTargetView(device, backBuffer); } windowSize = form.ClientSize; } // Update Device Tracking compositor.WaitGetPoses(currentPoses, nextPoses); if (currentPoses[headset].bPoseIsValid) { Convert(ref currentPoses[headset].mDeviceToAbsoluteTracking, ref head); } foreach (var controller in controllers) { var controllerMatrix = Matrix.Identity; Convert(ref currentPoses[controller].mDeviceToAbsoluteTracking, ref controllerMatrix); } // Render Left Eye context.Rasterizer.SetViewport(0, 0, headsetSize.Width, headsetSize.Height); context.OutputMerger.SetTargets(eyeDepthView, leftEyeTextureView); context.OutputMerger.SetDepthStencilState(depthStencilState); context.ClearRenderTargetView(leftEyeTextureView, backgroundColor); context.ClearDepthStencilView(eyeDepthView, DepthStencilClearFlags.Depth, 1.0f, 0); Shaders.Normal.Apply(context); context.Rasterizer.State = rasterizerState; context.OutputMerger.SetBlendState(blendState); context.OutputMerger.SetDepthStencilState(depthStencilState); context.PixelShader.SetSampler(0, samplerState); var ratio = (float)headsetSize.Width / (float)headsetSize.Height; var projection = leftEyeProjection; var view = Matrix.Invert(leftEyeView * head); var world = Matrix.Scaling(1.0f + (Math.Abs(leftWaveForm[audioPosition + 1]) * 0.1f)) * Matrix.Translation(0, 1.0f, 0); worldViewProjection = world * view * projection; context.UpdateSubresource(ref worldViewProjection, worldViewProjectionBuffer); context.VertexShader.SetConstantBuffer(0, worldViewProjectionBuffer); //Shapes.Cube.Begin(context); //Shapes.Cube.Draw(context); Shapes.Sphere.Begin(context); Shapes.Sphere.Draw(context); // Draw Controllers context.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; Shaders.NormalTexture.Apply(context); context.PixelShader.SetSampler(0, samplerState); foreach (var controller in controllers) { context.InputAssembler.SetVertexBuffers(0, controllerVertexBufferBindings[controller]); context.InputAssembler.SetIndexBuffer(controllerIndexBuffers[controller], Format.R16_UInt, 0); context.PixelShader.SetShaderResource(0, controllerTextureViews[controller]); Convert(ref currentPoses[controller].mDeviceToAbsoluteTracking, ref world); world = Matrix.Scaling(1.0f + (Math.Abs(leftWaveForm[audioPosition + 1]) * 0.5f)) * world; worldViewProjection = world * view * projection; context.UpdateSubresource(ref worldViewProjection, worldViewProjectionBuffer); context.VertexShader.SetConstantBuffer(0, worldViewProjectionBuffer); context.DrawIndexed((int)controllerModels[controller].unTriangleCount * 3 * 4, 0, 0); } // Draw Waveforms Shaders.Position.Apply(context); world = Matrix.Scaling(100, 2.5f, 1) * Matrix.Translation(0, 1, 1); worldViewProjection = world * view * projection; context.UpdateSubresource(ref worldViewProjection, worldViewProjectionBuffer); context.InputAssembler.PrimitiveTopology = PrimitiveTopology.LineStrip; context.InputAssembler.SetVertexBuffers(0, leftWaveFormVertexBufferBinding); context.Draw(1024, 0); world = Matrix.Scaling(100, 2.5f, 1) * Matrix.Translation(0, 1, -1); worldViewProjection = world * view * projection; context.UpdateSubresource(ref worldViewProjection, worldViewProjectionBuffer); context.InputAssembler.SetVertexBuffers(0, rightWaveFormVertexBufferBinding); context.Draw(1024, 0); // Present Left Eye var texture = new Texture_t { eType = ETextureType.DirectX, eColorSpace = EColorSpace.Gamma, handle = leftEyeTextureView.Resource.NativePointer }; var bounds = new VRTextureBounds_t { uMin = 0.0f, uMax = 1.0f, vMin = 0.0f, vMax = 1.0f, }; var submitError = compositor.Submit(EVREye.Eye_Left, ref texture, ref bounds, EVRSubmitFlags.Submit_Default); if (submitError != EVRCompositorError.None) { System.Diagnostics.Debug.WriteLine(submitError); } // Render Right Eye context.Rasterizer.SetViewport(0, 0, headsetSize.Width, headsetSize.Height); context.OutputMerger.SetTargets(eyeDepthView, rightEyeTextureView); context.OutputMerger.SetDepthStencilState(depthStencilState); context.ClearRenderTargetView(rightEyeTextureView, backgroundColor); context.ClearDepthStencilView(eyeDepthView, DepthStencilClearFlags.Depth, 1.0f, 0); Shaders.Normal.Apply(context); context.Rasterizer.State = rasterizerState; context.OutputMerger.SetBlendState(blendState); context.OutputMerger.SetDepthStencilState(depthStencilState); context.PixelShader.SetSampler(0, samplerState); projection = rightEyeProjection; view = Matrix.Invert(rightEyeView * head); world = Matrix.Scaling(1.0f + (Math.Abs(leftWaveForm[audioPosition + 1]) * 0.1f)) * Matrix.Translation(0, 1.0f, 0); worldViewProjection = world * view * projection; context.UpdateSubresource(ref worldViewProjection, worldViewProjectionBuffer); context.VertexShader.SetConstantBuffer(0, worldViewProjectionBuffer); //Shapes.Cube.Begin(context); //Shapes.Cube.Draw(context); Shapes.Sphere.Begin(context); Shapes.Sphere.Draw(context); // Draw Controllers context.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; Shaders.NormalTexture.Apply(context); context.PixelShader.SetSampler(0, samplerState); foreach (var controller in controllers) { context.InputAssembler.SetVertexBuffers(0, controllerVertexBufferBindings[controller]); context.InputAssembler.SetIndexBuffer(controllerIndexBuffers[controller], Format.R16_UInt, 0); context.PixelShader.SetShaderResource(0, controllerTextureViews[controller]); Convert(ref currentPoses[controller].mDeviceToAbsoluteTracking, ref world); world = Matrix.Scaling(1.0f + (Math.Abs(leftWaveForm[audioPosition + 1]) * 0.5f)) * world; worldViewProjection = world * view * projection; context.UpdateSubresource(ref worldViewProjection, worldViewProjectionBuffer); context.VertexShader.SetConstantBuffer(0, worldViewProjectionBuffer); context.DrawIndexed((int)controllerModels[controller].unTriangleCount * 3 * 4, 0, 0); } // Draw Waveforms Shaders.Position.Apply(context); world = Matrix.Scaling(100, 2.5f, 1) * Matrix.Translation(0, 1, 1); worldViewProjection = world * view * projection; context.UpdateSubresource(ref worldViewProjection, worldViewProjectionBuffer); context.InputAssembler.PrimitiveTopology = PrimitiveTopology.LineStrip; context.InputAssembler.SetVertexBuffers(0, leftWaveFormVertexBufferBinding); context.Draw(1024, 0); world = Matrix.Scaling(100, 2.5f, 1) * Matrix.Translation(0, 1, -1); worldViewProjection = world * view * projection; context.UpdateSubresource(ref worldViewProjection, worldViewProjectionBuffer); context.InputAssembler.SetVertexBuffers(0, rightWaveFormVertexBufferBinding); context.Draw(1024, 0); // Present Right Eye texture.handle = rightEyeTextureView.Resource.NativePointer; submitError = compositor.Submit(EVREye.Eye_Right, ref texture, ref bounds, EVRSubmitFlags.Submit_Default); if (submitError != EVRCompositorError.None) { System.Diagnostics.Debug.WriteLine(submitError); } // Render Window context.Rasterizer.SetViewport(0, 0, windowSize.Width, windowSize.Height); context.OutputMerger.SetTargets(depthStencilView, backBufferView); context.OutputMerger.SetDepthStencilState(depthStencilState); context.ClearRenderTargetView(backBufferView, backgroundColor); context.ClearDepthStencilView(depthStencilView, DepthStencilClearFlags.Depth, 1.0f, 0); Shaders.Normal.Apply(context); context.Rasterizer.State = rasterizerState; context.OutputMerger.SetBlendState(blendState); context.OutputMerger.SetDepthStencilState(depthStencilState); context.PixelShader.SetSampler(0, samplerState); ratio = (float)form.ClientSize.Width / (float)form.ClientSize.Height; projection = Matrix.PerspectiveFovRH(3.14f / 3.0f, ratio, 0.01f, 1000); view = Matrix.Invert(head); world = Matrix.Scaling(1.0f + (Math.Abs(leftWaveForm[audioPosition + 1]) * 0.1f)) * Matrix.Translation(0, 1.0f, 0); worldViewProjection = world * view * projection; context.UpdateSubresource(ref worldViewProjection, worldViewProjectionBuffer); context.VertexShader.SetConstantBuffer(0, worldViewProjectionBuffer); //Shapes.Cube.Begin(context); //Shapes.Cube.Draw(context); Shapes.Sphere.Begin(context); Shapes.Sphere.Draw(context); // Draw Controllers context.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; Shaders.NormalTexture.Apply(context); context.PixelShader.SetSampler(0, samplerState); foreach (var controller in controllers) { context.InputAssembler.SetVertexBuffers(0, controllerVertexBufferBindings[controller]); context.InputAssembler.SetIndexBuffer(controllerIndexBuffers[controller], Format.R16_UInt, 0); Convert(ref currentPoses[controller].mDeviceToAbsoluteTracking, ref world); world = Matrix.Scaling(1.0f + (Math.Abs(leftWaveForm[audioPosition + 1]) * 0.5f)) * world; worldViewProjection = world * view * projection; context.UpdateSubresource(ref worldViewProjection, worldViewProjectionBuffer); context.VertexShader.SetConstantBuffer(0, worldViewProjectionBuffer); context.DrawIndexed((int)controllerModels[controller].unTriangleCount * 3 * 4, 0, 0); } // Draw Waveforms Shaders.Position.Apply(context); world = Matrix.Scaling(100, 2.5f, 1) * Matrix.Translation(0, 1, 1); worldViewProjection = world * view * projection; context.UpdateSubresource(ref worldViewProjection, worldViewProjectionBuffer); context.InputAssembler.PrimitiveTopology = PrimitiveTopology.LineStrip; context.InputAssembler.SetVertexBuffers(0, leftWaveFormVertexBufferBinding); context.Draw(1024, 0); world = Matrix.Scaling(100, 2.5f, 1) * Matrix.Translation(0, 1, -1); worldViewProjection = world * view * projection; context.UpdateSubresource(ref worldViewProjection, worldViewProjectionBuffer); context.InputAssembler.SetVertexBuffers(0, rightWaveFormVertexBufferBinding); context.Draw(1024, 0); // Show Backbuffer swapChain.Present(0, PresentFlags.None); }); } }
void HandleMouseMoveEvent(VREvent_t ev) { //_browser.GetBrowser().GetHost().SendMouseMoveEvent((int)(_windowWidth * ev.data.mouse.x), (int)(_windowHeight * (1f - ev.data.mouse.y)), false, CefEventFlags.None); _browser.GetBrowser().GetHost().SendMouseMoveEvent((int)ev.data.mouse.x, _windowHeight - (int)ev.data.mouse.y, false, _isHolding ? CefEventFlags.LeftMouseButton : CefEventFlags.None); }
private void ProcessEvent(EVREventType evtType, VREvent_t evt) { FDeviceIndexOut.Add((int)evt.trackedDeviceIndex); switch (evtType) { case EVREventType.VREvent_None: break; case EVREventType.VREvent_TrackedDeviceActivated: break; case EVREventType.VREvent_TrackedDeviceDeactivated: break; case EVREventType.VREvent_TrackedDeviceUpdated: break; case EVREventType.VREvent_TrackedDeviceUserInteractionStarted: break; case EVREventType.VREvent_TrackedDeviceUserInteractionEnded: break; case EVREventType.VREvent_IpdChanged: break; case EVREventType.VREvent_EnterStandbyMode: break; case EVREventType.VREvent_LeaveStandbyMode: break; case EVREventType.VREvent_TrackedDeviceRoleChanged: break; case EVREventType.VREvent_ButtonPress: break; case EVREventType.VREvent_ButtonUnpress: break; case EVREventType.VREvent_ButtonTouch: break; case EVREventType.VREvent_ButtonUntouch: break; case EVREventType.VREvent_MouseMove: break; case EVREventType.VREvent_MouseButtonDown: break; case EVREventType.VREvent_MouseButtonUp: break; case EVREventType.VREvent_FocusEnter: break; case EVREventType.VREvent_FocusLeave: break; case EVREventType.VREvent_Scroll: break; case EVREventType.VREvent_TouchPadMove: break; case EVREventType.VREvent_InputFocusCaptured: break; case EVREventType.VREvent_InputFocusReleased: break; case EVREventType.VREvent_SceneFocusLost: break; case EVREventType.VREvent_SceneFocusGained: break; case EVREventType.VREvent_SceneApplicationChanged: break; case EVREventType.VREvent_SceneFocusChanged: break; case EVREventType.VREvent_InputFocusChanged: break; case EVREventType.VREvent_HideRenderModels: break; case EVREventType.VREvent_ShowRenderModels: break; case EVREventType.VREvent_OverlayShown: break; case EVREventType.VREvent_OverlayHidden: break; case EVREventType.VREvent_DashboardActivated: break; case EVREventType.VREvent_DashboardDeactivated: break; case EVREventType.VREvent_DashboardThumbSelected: break; case EVREventType.VREvent_DashboardRequested: break; case EVREventType.VREvent_ResetDashboard: break; case EVREventType.VREvent_RenderToast: break; case EVREventType.VREvent_ImageLoaded: break; case EVREventType.VREvent_ShowKeyboard: break; case EVREventType.VREvent_HideKeyboard: break; case EVREventType.VREvent_OverlayGamepadFocusGained: break; case EVREventType.VREvent_OverlayGamepadFocusLost: break; case EVREventType.VREvent_OverlaySharedTextureChanged: break; case EVREventType.VREvent_DashboardGuideButtonDown: break; case EVREventType.VREvent_DashboardGuideButtonUp: break; case EVREventType.VREvent_Notification_Shown: break; case EVREventType.VREvent_Notification_Hidden: break; case EVREventType.VREvent_Notification_BeginInteraction: break; case EVREventType.VREvent_Notification_Destroyed: break; case EVREventType.VREvent_Quit: break; case EVREventType.VREvent_ProcessQuit: break; case EVREventType.VREvent_QuitAborted_UserPrompt: break; case EVREventType.VREvent_QuitAcknowledged: break; case EVREventType.VREvent_DriverRequestedQuit: break; case EVREventType.VREvent_ChaperoneDataHasChanged: break; case EVREventType.VREvent_ChaperoneUniverseHasChanged: break; case EVREventType.VREvent_ChaperoneTempDataHasChanged: break; case EVREventType.VREvent_ChaperoneSettingsHaveChanged: break; case EVREventType.VREvent_SeatedZeroPoseReset: break; case EVREventType.VREvent_AudioSettingsHaveChanged: break; case EVREventType.VREvent_BackgroundSettingHasChanged: break; case EVREventType.VREvent_CameraSettingsHaveChanged: break; case EVREventType.VREvent_ReprojectionSettingHasChanged: break; case EVREventType.VREvent_StatusUpdate: break; case EVREventType.VREvent_MCImageUpdated: break; case EVREventType.VREvent_FirmwareUpdateStarted: break; case EVREventType.VREvent_FirmwareUpdateFinished: break; case EVREventType.VREvent_KeyboardClosed: break; case EVREventType.VREvent_KeyboardCharInput: break; case EVREventType.VREvent_KeyboardDone: break; case EVREventType.VREvent_ApplicationTransitionStarted: break; case EVREventType.VREvent_ApplicationTransitionAborted: break; case EVREventType.VREvent_ApplicationTransitionNewAppStarted: break; case EVREventType.VREvent_Compositor_MirrorWindowShown: break; case EVREventType.VREvent_Compositor_MirrorWindowHidden: break; case EVREventType.VREvent_Compositor_ChaperoneBoundsShown: break; case EVREventType.VREvent_Compositor_ChaperoneBoundsHidden: break; case EVREventType.VREvent_TrackedCamera_StartVideoStream: break; case EVREventType.VREvent_TrackedCamera_StopVideoStream: break; case EVREventType.VREvent_TrackedCamera_PauseVideoStream: break; case EVREventType.VREvent_TrackedCamera_ResumeVideoStream: break; case EVREventType.VREvent_PerformanceTest_EnableCapture: break; case EVREventType.VREvent_PerformanceTest_DisableCapture: break; case EVREventType.VREvent_PerformanceTest_FidelityLevel: break; case EVREventType.VREvent_VendorSpecific_Reserved_Start: break; case EVREventType.VREvent_VendorSpecific_Reserved_End: break; default: break; } }
// Keep track of assigned roles. private void OnTrackedDeviceRoleChanged(VREvent_t vrEvent) { Refresh(); }
protected virtual void DigestEvent(VREvent_t pEvent) { EVREventType eventType = (EVREventType)pEvent.eventType; switch (eventType) { case EVREventType.VREvent_MouseMove: UpdateMouseData(pEvent.data.mouse); break; case EVREventType.VREvent_MouseButtonDown: UpdateMouseData(pEvent.data.mouse, true); break; case EVREventType.VREvent_MouseButtonUp: UpdateMouseData(pEvent.data.mouse, false); break; case EVREventType.VREvent_FocusEnter: onFocusChange(true); _focus = true; break; case EVREventType.VREvent_FocusLeave: onFocusChange(false); _focus = false; break; case EVREventType.VREvent_DashboardActivated: onDashboardChange(true); break; case EVREventType.VREvent_DashboardDeactivated: onDashboardChange(false); break; case EVREventType.VREvent_OverlayShown: onVisibilityChange(true); break; case EVREventType.VREvent_OverlayHidden: onVisibilityChange(false); break; case EVREventType.VREvent_KeyboardCharInput: string txt = ""; var kd = pEvent.data.keyboard; byte[] bytes = new byte[] { kd.cNewInput0, kd.cNewInput1, kd.cNewInput2, kd.cNewInput3, kd.cNewInput4, kd.cNewInput5, kd.cNewInput6, kd.cNewInput7, }; int len = 0; while (bytes[len++] != 0 && len < 7) { ; } string input = System.Text.Encoding.UTF8.GetString(bytes, 0, len); if (_isMinimal) { txt = input; } else { System.Text.StringBuilder txtB = new System.Text.StringBuilder(1024); Overlay.GetKeyboardText(txtB, 1024); txt = txtB.ToString(); } onKeyboardInput(txt); break; case EVREventType.VREvent_KeyboardDone: onKeyboardDone(); break; case EVREventType.VREvent_KeyboardClosed: onKeyboardClosed(); break; // case EVREventType.VREvent_DashboardActivated: // break; default: // Debug.Log("Overlay - " + overlayName + " - : " + eventType); break; } }
private void OnTrackedDeviceRoleChanged(VREvent_t arg) { InvokeControllerRoleChangedEvent(); }
private void OnTrackedDeviceRoleChanged(VREvent_t vrEvent) { this.RefreshAssignedRoles(); }
public override bool PollNextEvent(ref VREvent_t pEvent) { CheckIfUsable(); bool result = VRNativeEntrypoints.VR_IVRSystem_PollNextEvent(m_pVRSystem,ref pEvent); return result; }
private void DefaultEventHandler(VREvent_t e) { }
public abstract bool PollNextOverlayEvent(ulong ulOverlayHandle,ref VREvent_t pEvent);
private void ProcessEvent(EVREventType evtType, VREvent_t evt) { FDeviceIndexOut.Add((int)evt.trackedDeviceIndex); switch (evtType) { case EVREventType.VREvent_None: break; case EVREventType.VREvent_TrackedDeviceActivated: break; case EVREventType.VREvent_TrackedDeviceDeactivated: break; case EVREventType.VREvent_TrackedDeviceUpdated: break; case EVREventType.VREvent_TrackedDeviceUserInteractionStarted: break; case EVREventType.VREvent_TrackedDeviceUserInteractionEnded: break; case EVREventType.VREvent_IpdChanged: break; case EVREventType.VREvent_EnterStandbyMode: break; case EVREventType.VREvent_LeaveStandbyMode: break; case EVREventType.VREvent_TrackedDeviceRoleChanged: break; case EVREventType.VREvent_WatchdogWakeUpRequested: break; case EVREventType.VREvent_LensDistortionChanged: break; case EVREventType.VREvent_PropertyChanged: break; case EVREventType.VREvent_WirelessDisconnect: break; case EVREventType.VREvent_WirelessReconnect: break; case EVREventType.VREvent_ButtonPress: break; case EVREventType.VREvent_ButtonUnpress: break; case EVREventType.VREvent_ButtonTouch: break; case EVREventType.VREvent_ButtonUntouch: break; case EVREventType.VREvent_DualAnalog_Press: break; case EVREventType.VREvent_DualAnalog_Unpress: break; case EVREventType.VREvent_DualAnalog_Touch: break; case EVREventType.VREvent_DualAnalog_Untouch: break; case EVREventType.VREvent_DualAnalog_Move: break; case EVREventType.VREvent_DualAnalog_ModeSwitch1: break; case EVREventType.VREvent_DualAnalog_ModeSwitch2: break; case EVREventType.VREvent_DualAnalog_Cancel: break; case EVREventType.VREvent_MouseMove: break; case EVREventType.VREvent_MouseButtonDown: break; case EVREventType.VREvent_MouseButtonUp: break; case EVREventType.VREvent_FocusEnter: break; case EVREventType.VREvent_FocusLeave: break; case EVREventType.VREvent_Scroll: break; case EVREventType.VREvent_TouchPadMove: break; case EVREventType.VREvent_OverlayFocusChanged: break; case EVREventType.VREvent_InputFocusCaptured: break; case EVREventType.VREvent_InputFocusReleased: break; case EVREventType.VREvent_SceneFocusLost: break; case EVREventType.VREvent_SceneFocusGained: break; case EVREventType.VREvent_SceneApplicationChanged: break; case EVREventType.VREvent_SceneFocusChanged: break; case EVREventType.VREvent_InputFocusChanged: break; case EVREventType.VREvent_SceneApplicationSecondaryRenderingStarted: break; case EVREventType.VREvent_SceneApplicationUsingWrongGraphicsAdapter: break; case EVREventType.VREvent_HideRenderModels: break; case EVREventType.VREvent_ShowRenderModels: break; case EVREventType.VREvent_ConsoleOpened: break; case EVREventType.VREvent_ConsoleClosed: break; case EVREventType.VREvent_OverlayShown: break; case EVREventType.VREvent_OverlayHidden: break; case EVREventType.VREvent_DashboardActivated: break; case EVREventType.VREvent_DashboardDeactivated: break; case EVREventType.VREvent_DashboardThumbSelected: break; case EVREventType.VREvent_DashboardRequested: break; case EVREventType.VREvent_ResetDashboard: break; case EVREventType.VREvent_RenderToast: break; case EVREventType.VREvent_ImageLoaded: break; case EVREventType.VREvent_ShowKeyboard: break; case EVREventType.VREvent_HideKeyboard: break; case EVREventType.VREvent_OverlayGamepadFocusGained: break; case EVREventType.VREvent_OverlayGamepadFocusLost: break; case EVREventType.VREvent_OverlaySharedTextureChanged: break; case EVREventType.VREvent_ScreenshotTriggered: break; case EVREventType.VREvent_ImageFailed: break; case EVREventType.VREvent_DashboardOverlayCreated: break; case EVREventType.VREvent_SwitchGamepadFocus: break; case EVREventType.VREvent_RequestScreenshot: break; case EVREventType.VREvent_ScreenshotTaken: break; case EVREventType.VREvent_ScreenshotFailed: break; case EVREventType.VREvent_SubmitScreenshotToDashboard: break; case EVREventType.VREvent_ScreenshotProgressToDashboard: break; case EVREventType.VREvent_PrimaryDashboardDeviceChanged: break; case EVREventType.VREvent_RoomViewShown: break; case EVREventType.VREvent_RoomViewHidden: break; case EVREventType.VREvent_Notification_Shown: break; case EVREventType.VREvent_Notification_Hidden: break; case EVREventType.VREvent_Notification_BeginInteraction: break; case EVREventType.VREvent_Notification_Destroyed: break; case EVREventType.VREvent_Quit: break; case EVREventType.VREvent_ProcessQuit: break; case EVREventType.VREvent_QuitAborted_UserPrompt: break; case EVREventType.VREvent_QuitAcknowledged: break; case EVREventType.VREvent_DriverRequestedQuit: break; case EVREventType.VREvent_ChaperoneDataHasChanged: break; case EVREventType.VREvent_ChaperoneUniverseHasChanged: break; case EVREventType.VREvent_ChaperoneTempDataHasChanged: break; case EVREventType.VREvent_ChaperoneSettingsHaveChanged: break; case EVREventType.VREvent_SeatedZeroPoseReset: break; case EVREventType.VREvent_AudioSettingsHaveChanged: break; case EVREventType.VREvent_BackgroundSettingHasChanged: break; case EVREventType.VREvent_CameraSettingsHaveChanged: break; case EVREventType.VREvent_ReprojectionSettingHasChanged: break; case EVREventType.VREvent_ModelSkinSettingsHaveChanged: break; case EVREventType.VREvent_EnvironmentSettingsHaveChanged: break; case EVREventType.VREvent_PowerSettingsHaveChanged: break; case EVREventType.VREvent_EnableHomeAppSettingsHaveChanged: break; case EVREventType.VREvent_SteamVRSectionSettingChanged: break; case EVREventType.VREvent_LighthouseSectionSettingChanged: break; case EVREventType.VREvent_NullSectionSettingChanged: break; case EVREventType.VREvent_UserInterfaceSectionSettingChanged: break; case EVREventType.VREvent_NotificationsSectionSettingChanged: break; case EVREventType.VREvent_KeyboardSectionSettingChanged: break; case EVREventType.VREvent_PerfSectionSettingChanged: break; case EVREventType.VREvent_DashboardSectionSettingChanged: break; case EVREventType.VREvent_WebInterfaceSectionSettingChanged: break; case EVREventType.VREvent_StatusUpdate: break; case EVREventType.VREvent_WebInterface_InstallDriverCompleted: break; case EVREventType.VREvent_MCImageUpdated: break; case EVREventType.VREvent_FirmwareUpdateStarted: break; case EVREventType.VREvent_FirmwareUpdateFinished: break; case EVREventType.VREvent_KeyboardClosed: break; case EVREventType.VREvent_KeyboardCharInput: break; case EVREventType.VREvent_KeyboardDone: break; case EVREventType.VREvent_ApplicationTransitionStarted: break; case EVREventType.VREvent_ApplicationTransitionAborted: break; case EVREventType.VREvent_ApplicationTransitionNewAppStarted: break; case EVREventType.VREvent_ApplicationListUpdated: break; case EVREventType.VREvent_ApplicationMimeTypeLoad: break; case EVREventType.VREvent_ApplicationTransitionNewAppLaunchComplete: break; case EVREventType.VREvent_ProcessConnected: break; case EVREventType.VREvent_ProcessDisconnected: break; case EVREventType.VREvent_Compositor_MirrorWindowShown: break; case EVREventType.VREvent_Compositor_MirrorWindowHidden: break; case EVREventType.VREvent_Compositor_ChaperoneBoundsShown: break; case EVREventType.VREvent_Compositor_ChaperoneBoundsHidden: break; case EVREventType.VREvent_TrackedCamera_StartVideoStream: break; case EVREventType.VREvent_TrackedCamera_StopVideoStream: break; case EVREventType.VREvent_TrackedCamera_PauseVideoStream: break; case EVREventType.VREvent_TrackedCamera_ResumeVideoStream: break; case EVREventType.VREvent_TrackedCamera_EditingSurface: break; case EVREventType.VREvent_PerformanceTest_EnableCapture: break; case EVREventType.VREvent_PerformanceTest_DisableCapture: break; case EVREventType.VREvent_PerformanceTest_FidelityLevel: break; case EVREventType.VREvent_MessageOverlay_Closed: break; case EVREventType.VREvent_MessageOverlayCloseRequested: break; case EVREventType.VREvent_Input_HapticVibration: break; case EVREventType.VREvent_VendorSpecific_Reserved_Start: break; case EVREventType.VREvent_VendorSpecific_Reserved_End: break; default: break; } }
public abstract bool PollNextEventWithPose(TrackingUniverseOrigin eOrigin,ref VREvent_t pEvent,ref TrackedDevicePose_t pTrackedDevicePose);
private void OnSeatedZeroPoseReset(VREvent_t ev) { RecalculateOrigin(); }