Пример #1
0
        protected override void Destroy()
        {
            if (Device != null)
            {
                if (!(Device is DummyDevice))
                {
                    physicalDeviceInUse = false;
                }

                Device.Dispose();
                Device = null;
            }
        }
Пример #2
0
        private void OnEnabledChanged(object sender, EventArgs eventArgs)
        {
            if (Enabled && Device == null)
            {
                if (PreferredApis == null)
                {
                    return;
                }

                if (physicalDeviceInUse)
                {
                    Device = null;
                    goto postswitch;
                }

                foreach (var hmdApi in PreferredApis)
                {
                    switch (hmdApi)
                    {
                    case VRApi.Dummy:
                    {
                        Device = new DummyDevice();
                    }
                    break;

                    case VRApi.Oculus:
                    {
#if SILICONSTUDIO_XENKO_GRAPHICS_API_DIRECT3D11
                        Device = new OculusOvrHmd();
#endif
                    }
                    break;

                    case VRApi.OpenVR:
                    {
#if SILICONSTUDIO_XENKO_GRAPHICS_API_DIRECT3D11
                        Device = new OpenVRHmd();
#endif
                    }
                    break;

//                        case VRApi.Fove:
//                        {
//#if SILICONSTUDIO_XENKO_GRAPHICS_API_DIRECT3D11
//                            Device = new FoveHmd();
//#endif
//                        }
//                            break;
//                        case VRApi.Google:
//                        {
//#if SILICONSTUDIO_PLATFORM_IOS || SILICONSTUDIO_PLATFORM_ANDROID
//                                VRDevice = new GoogleVrHmd();
//#endif
//                        }
//                            break;
                    default:
                        throw new ArgumentOutOfRangeException();
                    }

                    if (Device != null)
                    {
                        Device.Game = Game;

                        if (Device != null && !Device.CanInitialize)
                        {
                            Device.Dispose();
                            Device = null;
                        }
                        else
                        {
                            break;
                        }
                    }
                }

postswitch:

                var deviceManager = (GraphicsDeviceManager)Services.GetService(typeof(IGraphicsDeviceManager));
                if (Device != null)
                {
                    Device.RenderFrameScaling = PreferredScalings[Device.VRApi];
                    Device.Enable(GraphicsDevice, deviceManager, RequireMirror, MirrorWidth, MirrorHeight);
                    physicalDeviceInUse = true;
                }
                else
                {
                    //fallback to dummy device
                    Device = new DummyDevice
                    {
                        Game = Game,
                        RenderFrameScaling = 1.0f
                    };
                    Device.Enable(GraphicsDevice, deviceManager, RequireMirror, MirrorWidth, MirrorHeight);
                }
            }
        }