Exemplo n.º 1
0
 public override bool PollNextOverlayEvent(ulong ulOverlayHandle,ref VREvent_t pEvent)
 {
     CheckIfUsable();
     bool result = VRNativeEntrypoints.VR_IVROverlay_PollNextOverlayEvent(m_pVROverlay,ulOverlayHandle,ref pEvent);
     return result;
 }
Exemplo n.º 2
0
 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;
            }
        }
    }
Exemplo n.º 4
0
    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;
            }
        }
    }
Exemplo n.º 5
0
        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();
        }
Exemplo n.º 6
0
 public bool PollEvent(ref VREvent_t ovrEvent)
 {
     return(SteamVR_WebKit.OverlayManager.PollNextOverlayEvent(_handle, ref ovrEvent, eventSize) || SteamVR_WebKit.OverlayManager.PollNextOverlayEvent(_backSideHandle, ref ovrEvent, eventSize));
 }
Exemplo n.º 7
0
 void OnTrackedDeviceEvent(VREvent_t ev)
 {
     RescanDevices();
 }
Exemplo n.º 8
0
        /// <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);
                                };
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 10
0
 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;
      */
 }
Exemplo n.º 11
0
 protected override void onReleaseOculusTrigger(ref VREvent_t vrEvent)
 {
     //mScene.popInteraction();
     //mScene.peekInteraction().init();
 }
Exemplo n.º 12
0
        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();
        }
Exemplo n.º 13
0
 private void Start()
 {
     _evt  = default;
     _size = (uint)Marshal.SizeOf <VREvent_t>();
 }
Exemplo n.º 14
0
 // 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();
 }
Exemplo n.º 15
0
 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;
 }
Exemplo n.º 16
0
        private void OnDeviceActivated(VREvent_t arg0)
        {
            var activity = Valve.VR.OpenVR.System.GetTrackedDeviceActivityLevel(0);

            Debug.Log(activity);
        }
Exemplo n.º 17
0
 public abstract bool PollNextEvent(ref VREvent_t pEvent);
Exemplo n.º 18
0
        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);
            }
        }
Exemplo n.º 19
0
 protected override void onClickOculusTrigger(ref VREvent_t vrEvent)
 {
     registerPositon(vrEvent.trackedDeviceIndex);
 }
Exemplo n.º 20
0
 private void OnTrackedDeviceRoleChanged(VREvent_t arg)
 {
     InvokeControllerRoleChangedEvent();
     m_originDataCache.Clear();
 }
Exemplo n.º 21
0
        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);
            }
        }
Exemplo n.º 22
0
 private void OnKeyboard(VREvent_t evt)
 {
     VdmDesktopManager.Instance.SimulateKey((char)evt.data.keyboard.cNewInput0);
 }
Exemplo n.º 23
0
        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);
        }
Exemplo n.º 24
0
        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);
                    });
                }
        }
Exemplo n.º 25
0
 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);
 }
Exemplo n.º 26
0
        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();
	}
Exemplo n.º 28
0
    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;
        }
    }
Exemplo n.º 29
0
 private void OnTrackedDeviceRoleChanged(VREvent_t arg)
 {
     InvokeControllerRoleChangedEvent();
 }
Exemplo n.º 30
0
 private void OnTrackedDeviceRoleChanged(VREvent_t vrEvent)
 {
     this.RefreshAssignedRoles();
 }
Exemplo n.º 31
0
 public override bool PollNextEvent(ref VREvent_t pEvent)
 {
     CheckIfUsable();
     bool result = VRNativeEntrypoints.VR_IVRSystem_PollNextEvent(m_pVRSystem,ref pEvent);
     return result;
 }
Exemplo n.º 32
0
 private void DefaultEventHandler(VREvent_t e)
 {
 }
Exemplo n.º 33
0
 public abstract bool PollNextOverlayEvent(ulong ulOverlayHandle,ref VREvent_t pEvent);
Exemplo n.º 34
0
        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;
            }
        }
Exemplo n.º 35
0
 public abstract bool PollNextEventWithPose(TrackingUniverseOrigin eOrigin,ref VREvent_t pEvent,ref TrackedDevicePose_t pTrackedDevicePose);
 private void OnSeatedZeroPoseReset(VREvent_t ev)
 {
     RecalculateOrigin();
 }