protected override void Render()
        {
            base.Render();

            if (this.IsConnected && this.HmdDetected)
            {
                if (this.msaaSampleCount > 1)
                {
                    var rtManager = this.adapter.Graphics.RenderTargetManager as RenderTargetManager;
                    var dxRt      = rtManager.TargetFromHandle <DXRenderTarget>(this.msaaRenderTarget.TextureHandle);
                    var dxSwapRt  = rtManager.TargetFromHandle <DXRenderTarget>(this.swapRenderTarget.TextureHandle);

                    this.context.ResolveSubresource(dxRt.Target, 0, dxSwapRt.Target, 0, Format.R8G8B8A8_UNorm);
                }

                EVRCompositorError errorResult;
                errorResult = ValveOpenVR.Compositor.Submit(EVREye.Eye_Left, ref this.swapTexture, ref this.leftEyeTextureBounds, EVRSubmitFlags.Submit_Default);
                OpenVRHelper.ReportCompositeError(errorResult);

                errorResult = ValveOpenVR.Compositor.Submit(EVREye.Eye_Right, ref this.swapTexture, ref this.rightEyeTextureBounds, EVRSubmitFlags.Submit_Default);
                OpenVRHelper.ReportCompositeError(errorResult);

                if (this.ShowHMDMirrorTexture)
                {
                    this.RenderMirrorTexture();
                }
            }
        }
예제 #2
0
        public override void Update(TimeSpan gameTime)
        {
            if (this.IsConnected)
            {
                if (ValveOpenVR.Compositor != null)
                {
                    var errorResult = ValveOpenVR.Compositor.WaitGetPoses(this.renderPoses, this.gamePoses);
                    OpenVRHelper.ReportCompositeError(errorResult);
                }
                else
                {
                    this.ovrApplication.Hmd.GetDeviceToAbsoluteTrackingPose(ETrackingUniverseOrigin.TrackingUniverseStanding, 0, this.renderPoses);
                }

                this.UpdateHMD();
                this.UpdateDevices();
                this.UpdateControllers();

                ////else
                ////{
                ////    var hmd = this.ovrApplication.Hmd;
                ////    hmd.GetDeviceToAbsoluteTrackingPose(ETrackingUniverseOrigin.TrackingUniverseStanding, 0, this.renderPoses);
                ////}
            }
        }
예제 #3
0
        private void AppCoreSceneContext_PostInstall()
        {
            DiContainer       container        = _appCoreSceneContext.Container;
            IVRPlatformHelper vrPlatformHelper = container.Resolve <IVRPlatformHelper>();

            if (vrPlatformHelper is OpenVRHelper openVRHelper)
            {
                _openVRHelper = openVRHelper;
            }
            else
            {
                _logger.Error($"{nameof(IVRPlatformHelper)} isn't an instance of {nameof(OpenVRHelper)}; are you using SteamVR?");
            }
        }
        public static bool Prefix(XRNode node, Transform transform, Vector3 addPosition, Vector3 addRotation, VRPlatformHelper __instance)
        {
            if (__instance.vrPlatformSDK != VRPlatformHelper.VRPlatformSDK.OpenVR)
            {
                return(true);
            }

            OpenVRHelper openVRHelper = Traverse.Create(__instance).Field("_openVRHeper").GetValue <OpenVRHelper>();

            if (openVRHelper.vrControllerManufacturerName != OpenVRHelper.VRControllerManufacturerName.Valve)
            {
                return(true);
            }

            transform.Rotate(new Vector3(15f, 0f, 0f) + addRotation);
            transform.Translate(new Vector3(0f, -0.03f, 0f) + addPosition);

            return(false);
        }
        public static bool Prefix(OpenVRHelper __instance)
        {
            Vector2 vector = Plugin.thumbstick.vector;

            if (vector.sqrMagnitude <= 0.01f)
            {
                if (_scrollingLastFrame)
                {
                    _scrollingLastFrame = false;
                    InvokeEvent(__instance, _joystickWasCenteredThisFrameEvent);
                }
            }
            else
            {
                _scrollingLastFrame = true;
                InvokeEvent(__instance, _joystickWasNotCenteredThisFrameEvent, vector);
            }

            // prevent OpenVRHelper from consuming events
            return(false);
        }
        /// <summary>
        /// Configures the specified windows handler.
        /// </summary>
        /// <param name="windowsHandler">The windows handler.</param>
        public override void Configure(IntPtr windowsHandler)
        {
            base.Configure(windowsHandler);

            this.LoadNativeLibrary();

            var error = EVRInitError.None;

            this.HmdDetected = true;

            this.Hmd = ValveOpenVR.Init(ref error, this.OpenVRApplicationType);
            if (error != EVRInitError.None)
            {
                OpenVRHelper.ReportInitError(error);
                this.Hmd         = null;
                this.HmdDetected = false;
            }

            // Verify common interfaces are valid.
            ValveOpenVR.GetGenericInterface(ValveOpenVR.IVRCompositor_Version, ref error);
            if (error != EVRInitError.None)
            {
                OpenVRHelper.ReportInitError(error);
                this.HmdDetected = false;
            }

            ValveOpenVR.GetGenericInterface(ValveOpenVR.IVROverlay_Version, ref error);
            if (error != EVRInitError.None)
            {
                OpenVRHelper.ReportInitError(error);
                this.HmdDetected = false;
            }

            if (this.Hmd == null)
            {
                ValveOpenVR.Shutdown();
                return;
            }
        }
예제 #7
0
 static void Postfix(
     OpenVRHelper __instance,
     XRNode node, Transform transform,
     Vector3 position, Vector3 rotation
     ) => SaberGrip.AdjustControllerTransform(__instance, node, transform);