From 55cd87ab28939b7546c31515e3e86e6c1b742c9c Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Tue, 19 Jan 2021 11:24:23 -0800 Subject: [PATCH] more window init stuff --- src/Game.cs | 34 ++++++++++++++------------- src/ScreenMode.cs | 9 +++++++ src/Window.cs | 52 +++++++++++++++++++++++++++++++++++++++++ src/WindowCreateInfo.cs | 9 +++++++ 4 files changed, 88 insertions(+), 16 deletions(-) create mode 100644 src/ScreenMode.cs create mode 100644 src/Window.cs create mode 100644 src/WindowCreateInfo.cs diff --git a/src/Game.cs b/src/Game.cs index a44e4ae..ca96301 100644 --- a/src/Game.cs +++ b/src/Game.cs @@ -1,5 +1,4 @@ -using System; -using SDL2; +using SDL2; using Campari; using System.Collections.Generic; @@ -11,10 +10,10 @@ namespace MoonWorks private double timestep; ulong currentTime = SDL.SDL_GetPerformanceCounter(); double accumulator = 0; + bool debugMode; - public IntPtr WindowHandle { get; } + public Window Window { get; } public GraphicsDevice GraphicsDevice { get; } - public Input Input { get; } private Dictionary moonWorksToRefreshPresentMode = new Dictionary @@ -25,8 +24,12 @@ namespace MoonWorks { PresentMode.FIFORelaxed, RefreshCS.Refresh.PresentMode.FIFORelaxed } }; - public Game(uint windowWidth, uint windowHeight, PresentMode presentMode, int targetTimestep = 60, bool debugMode = false) - { + public Game( + WindowCreateInfo windowCreateInfo, + PresentMode presentMode, + int targetTimestep = 60, + bool debugMode = false + ) { timestep = 1.0 / targetTimestep; if (SDL.SDL_Init(SDL.SDL_INIT_VIDEO | SDL.SDL_INIT_TIMER | SDL.SDL_INIT_GAMECONTROLLER) < 0) @@ -35,18 +38,17 @@ namespace MoonWorks return; } - WindowHandle = SDL.SDL_CreateWindow( - "CampariTest", - SDL.SDL_WINDOWPOS_UNDEFINED, - SDL.SDL_WINDOWPOS_UNDEFINED, - (int)windowWidth, - (int)windowHeight, - SDL.SDL_WindowFlags.SDL_WINDOW_VULKAN + Input = new Input(); + + Window = new Window(windowCreateInfo); + + GraphicsDevice = new GraphicsDevice( + Window.Handle, + moonWorksToRefreshPresentMode[presentMode], + debugMode ); - GraphicsDevice = new GraphicsDevice(WindowHandle, moonWorksToRefreshPresentMode[presentMode], debugMode); - - Input = new Input(); + this.debugMode = debugMode; } public void Run() diff --git a/src/ScreenMode.cs b/src/ScreenMode.cs new file mode 100644 index 0000000..2ba6f39 --- /dev/null +++ b/src/ScreenMode.cs @@ -0,0 +1,9 @@ +namespace MoonWorks +{ + public enum ScreenMode + { + Fullscreen, + BorderlessWindow, + Windowed + } +} diff --git a/src/Window.cs b/src/Window.cs new file mode 100644 index 0000000..385d207 --- /dev/null +++ b/src/Window.cs @@ -0,0 +1,52 @@ +using System; +using SDL2; + +namespace MoonWorks +{ + public class Window + { + public IntPtr Handle { get; } + public ScreenMode ScreenMode { get; } + + public Window(WindowCreateInfo windowCreateInfo) + { + var windowFlags = SDL.SDL_WindowFlags.SDL_WINDOW_VULKAN; + + if (windowCreateInfo.ScreenMode == ScreenMode.Fullscreen) + { + windowFlags |= SDL.SDL_WindowFlags.SDL_WINDOW_FULLSCREEN; + } + else if (windowCreateInfo.ScreenMode == ScreenMode.BorderlessWindow) + { + windowFlags |= SDL.SDL_WindowFlags.SDL_WINDOW_FULLSCREEN_DESKTOP; + } + + ScreenMode = windowCreateInfo.ScreenMode; + + Handle = SDL.SDL_CreateWindow( + "CampariTest", + SDL.SDL_WINDOWPOS_UNDEFINED, + SDL.SDL_WINDOWPOS_UNDEFINED, + (int)windowCreateInfo.WindowWidth, + (int)windowCreateInfo.WindowHeight, + windowFlags + ); + } + + public void ChangeScreenMode(ScreenMode screenMode) + { + SDL.SDL_WindowFlags windowFlag = 0; + + if (screenMode == ScreenMode.Fullscreen) + { + windowFlag = SDL.SDL_WindowFlags.SDL_WINDOW_FULLSCREEN; + } + else if (screenMode == ScreenMode.BorderlessWindow) + { + windowFlag = SDL.SDL_WindowFlags.SDL_WINDOW_FULLSCREEN_DESKTOP; + } + + SDL.SDL_SetWindowFullscreen(Handle, (uint) windowFlag); + } + } +} diff --git a/src/WindowCreateInfo.cs b/src/WindowCreateInfo.cs new file mode 100644 index 0000000..fa34a66 --- /dev/null +++ b/src/WindowCreateInfo.cs @@ -0,0 +1,9 @@ +namespace MoonWorks +{ + public struct WindowCreateInfo + { + public uint WindowWidth; + public uint WindowHeight; + public ScreenMode ScreenMode; + } +}