public void Start() { var startTime = DateTime.Now; var deltaTime = 0f; var lastFrameTime = startTime; Input.Start(); while (true) { var sdlEvent = SdlWrapper.PollEvent(); var eventResult = HandleSdlEvent(sdlEvent); if (eventResult == LoopDo.Continue) { continue; } if (eventResult == LoopDo.Break) { break; } deltaTime = (float)(DateTime.Now - lastFrameTime).TotalSeconds; lastFrameTime = DateTime.Now; Input.Update(); JustBeforeDraw?.Invoke(deltaTime); Input.Clear(); _vulkan.DrawFrame(); } Dispose(); }
/// <summary> /// Returns false if user quit the application during initializtion /// </summary> public bool Initialize(List <GameObject> gameObjects, Camera mainCamera, string windowTitle, int windowPositionX, int windowPositionY, int windowWidth, int windowHeight) { _gameObjects = gameObjects; _window = new Window(windowTitle + " - Initializing...", windowPositionX, windowPositionY, windowWidth, windowHeight, SDL_WindowFlags.SDL_WINDOW_RESIZABLE); _vulkan = new VulkanRenderer(_window, gameObjects, mainCamera); var tokenSrc = new CancellationTokenSource(); var initTask = _vulkan.InitializeAsync(tokenSrc.Token); while (initTask.IsCompleted == false) { var sdlEvent = SdlWrapper.PollEvent(); if (sdlEvent.type == SDL_EventType.SDL_QUIT) { _logger.LogInfo("Cancelling initialization..."); tokenSrc.Cancel(); initTask.Wait(); _logger.LogInfo("Initialization cancelled"); return(false); } } _window.Title = windowTitle; return(true); }