void OnFullscreenStateChangeEnd(FullscreenState state) { FullscreenState = state; fullscreenState11 = FullscreenState == FullscreenState.Fullscreen ? FullscreenState11.Fullscreen : FullscreenState11.Windowed; minimizedWhileFullscreen = false; numOnModeChangeMethodsCurrentlyInside--; }
public void ResetToPseudoFullscreen(ref SwapChainDescription description) { fullscreenState = FullscreenState.PseudoFullscreen; implicitSwapChainDesc = description; primaryWindow.OnPseudoFullscreen(); var coopLevel = d3dDevice.TestCooperativeLevel(); if (coopLevel.Success || coopLevel == ResultCode.DeviceNotReset) ResetProcedure(); }
public WinformsDevice(WinformsEye eye, Direct3D direct3D, CAdapter adapter, ControlWindow primaryWindow, SwapChainDescription implicitSwapChainDesc, DeviceInitializationFlags flags, IFileSystem fileSystem) { this.eye = eye; this.adapter = adapter; this.primaryWindow = primaryWindow; this.implicitSwapChainDesc = implicitSwapChainDesc; this.flags = flags; caps = adapter.Info.GetCaps(DeviceType.Hardware); devicePresentParams = new PresentParameters(); FillDevicePresentParams(); d3dDevice = new Device(direct3D, adapter.Index, DeviceType.Hardware, primaryWindow.Handle, CreateFlags.FpuPreserve | CreateFlags.HardwareVertexProcessing, devicePresentParams); CreateBackBufferAndDepthStencil(); additionalSwapChains = new List<CAdditionalSwapChain>(); creator = new CDeviceChildCreator(this); immediateContext = new CDeviceContext(this); lastSwapChainSize = new IntSize(primaryWindow.SwapChainWidth, primaryWindow.SwapChainHeight); fullscreenState = FullscreenState.Windowed; fullscreenDisplayMode = adapter.GetSupportedDisplayModes().First(); }
public void ResetToFullscreen(ref BDisplayMode displayMode, ref SwapChainDescription description) { fullscreenDisplayMode = displayMode; fullscreenState = FullscreenState.Fullscreen; implicitSwapChainDesc = description; primaryWindow.OnFullscreen(displayMode.Width, displayMode.Height, () => { }, () => { }); //todo: remove unneeded args var coopLevel = d3dDevice.TestCooperativeLevel(); if (coopLevel.Success || coopLevel == ResultCode.DeviceNotReset) ResetProcedure(); }
internal static void LoadFullscreenState() { try { string fullscreenStateData = File.ReadAllText(Path.Combine(projectLibraryPath, FullscreenStateFilename)); fullscreenState = SerializerUtility.Deserialize <FullscreenState>(fullscreenStateData); } catch (FileNotFoundException) { } catch (System.Exception e) { Debug.LogException(e); } if (fullscreenState.window == null) { fullscreenState.window = new List <WindowFullscreenState>(); } var allFullscreenStates = fullscreenState.window.ToArray(); WindowFullscreenState mainWindowFullscreenState = null; //Load types from assembly qualified names foreach (var state in allFullscreenStates) { try { state.ActualType = Type.GetType(state.actualTypeAssemblyQualifiedName); state.WindowType = Type.GetType(state.windowTypeAssemblyQualifiedName); } catch (System.Exception e) { if (LogNonFatalErrors) { Debug.LogException(e); } } } //Re-assign recreated window instances to their fullscreen states var allWins = Resources.FindObjectsOfTypeAll <EditorWindow>(); var unassignedFullscreenWins = new List <EditorWindow>(); foreach (var win in allWins) { if (win.GetShowMode() == EditorWindowExtensions.ShowMode.PopupMenu) { unassignedFullscreenWins.Add(win); } } foreach (var state in allFullscreenStates) { if (state.EditorWin != null) { unassignedFullscreenWins.Remove(state.EditorWin); } else if (state.WindowType == mainWindowType) { mainWindowFullscreenState = state; } else if (state.IsFullscreen) { foreach (var win in unassignedFullscreenWins) { var containerPosition = win.GetContainerPosition(); if (win.GetType() == state.ActualType && containerPosition.x == state.ContainerPosition.x && containerPosition.y == state.ContainerPosition.y) { state.EditorWin = win; unassignedFullscreenWins.Remove(win); break; } } } } loadedInitialState = true; //Find the window which was focused var focusedWindow = fullscreenState.window.Find(state => state.HasFocus == true); //Remake fullscreen windows foreach (var state in allFullscreenStates) { if (state.IsFullscreen) { if (state.EditorWin != null) { state.EditorWin.SetFullscreen(true, state.FullscreenAtPosition); } else if (state.WindowType != mainWindowType) { ToggleFullscreen(state.ActualType, true, state.FullscreenAtPosition, state.ShowTopToolbar, state.CreatedAtGameStart); } } } //Recreate the main window fullscreen state if (mainWindowFullscreenState != null && mainWindowFullscreenState.IsFullscreen) { var atPosition = mainWindowFullscreenState.FullscreenAtPosition; var showTopToolbar = mainWindowFullscreenState.ShowTopToolbar; if (mainWindowFullscreenState.containerWindow == null || mainWindowFullscreenState.originalContainerWindow == null) { fullscreenState.window.Remove(mainWindowFullscreenState); //Remove the old fullscreen state because the originalContainer needs to be reset } EditorMainWindow.SetFullscreen(true, showTopToolbar, atPosition); } //Remove fullscreen popup windows which don't have a fullscreen state foreach (var win in unassignedFullscreenWins) { if (win != null) { if (win.GetContainerWindow() != null) { win.Close(); } else { UnityEngine.Object.DestroyImmediate(win, true); } } } fullscreenState.CleanDeletedWindows(); //Bring any fullscreen window which is on top of the main window to the front. try { var windowOverMain = fullscreenState.window.Find(state => state.IsFullscreen && state.EditorWin != null && EditorDisplay.ClosestToPoint(state.FullscreenAtPosition).Bounds == EditorDisplay.ClosestToPoint(EditorMainWindow.position.center).Bounds); if (windowOverMain != null) { GiveFocusAndBringToFront(windowOverMain.EditorWin); } } catch { } //Refocus the window which was previously focused if (focusedWindow != null && focusedWindow.EditorWin != null) { GiveFocusAndBringToFront(focusedWindow.EditorWin); } //Toggle fullscreen for states which were queued up before load was complete foreach (var state in queuedStatesToToggleOnLoad) { ToggleFullscreen(state.ActualType, state.CloseOnExitFullscreen, state.FullscreenAtPosition, state.ShowTopToolbar, state.CreatedAtGameStart); } queuedStatesToToggleOnLoad.Clear(); if (RunOnNextLoadMethods != null) { RunOnNextLoadMethods.Invoke(); RunOnNextLoadMethods = null; } }
void ISwapChain.Reset(ref SwapChainDescription description) { implicitSwapChainDesc = description; if (fullscreenState == FullscreenState.Fullscreen) DisplayDevice.Default.RestoreResolution(); fullscreenState = FullscreenState.Windowed; WindowState = WindowState.Normal; ResetProcedure(); }
void IPrimarySwapChain.ResetToPseudoFullscreen(ref SwapChainDescription description) { implicitSwapChainDesc = description; var defaultDisplay = DisplayDevice.Default; if (fullscreenState == FullscreenState.Fullscreen) defaultDisplay.RestoreResolution(); fullscreenState = FullscreenState.PseudoFullscreen; WindowState = WindowState.Fullscreen; ResetProcedure(); }
void IPrimarySwapChain.ResetToFullscreen(ref DisplayMode displayMode, ref SwapChainDescription description) { fullscreenDisplayMode = displayMode; implicitSwapChainDesc = description; fullscreenState = FullscreenState.Fullscreen; DisplayDevice.Default.ChangeResolution(displayMode.Width, displayMode.Height, device.Adapter.GetFormatInfo(displayMode.FormatID).TotalBits, displayMode.RefreshRate.ToSingle()); WindowState = WindowState.Fullscreen; ResetProcedure(); }