Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        /// <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);
        }