public Game() { Settings settings = SettingsManager.instance; Log.Info("Initializing FFmpeg..."); FFmpegHelper.Init(); Log.Info("Initializing Audio..."); audio = new AudioEngine(null, settings.audio.driver, (int)settings.audio.sampleRate, (int)settings.audio.bufferLength, settings.audio.resampleQuality); audio.SetVolume(Math.Min(settings.audio.volume, 100) / 100.0f); Log.Info("Audio driver: " + audio.audioDriver.ToString()); if (settings.outputMode != OutputMode.Render) { //SDL.SDL_version sdlVersion; //SDL.SDL_VERSION(out sdlVersion); Log.Info("Initializing SDL video subsystem..."); if (SDL.SDL_InitSubSystem(SDL.SDL_INIT_VIDEO) != 0) { throw new ApplicationException("Failed to initialize video subsystem: " + SDL.SDL_GetError()); } int display = 0; SDL.SDL_DisplayMode displayMode; if (SDL.SDL_GetCurrentDisplayMode(display, out displayMode) != 0) { throw new ApplicationException("SDL_GetCurrentDisplayMode failed: " + SDL.SDL_GetError()); } RendererFlags rendererFlags = RendererFlags.None; int width = (int)settings.video.width; int height = (int)settings.video.height; if (settings.video.vsync) { rendererFlags |= RendererFlags.Vsync; } if (settings.video.mode == VideoMode.Fullscreen) { rendererFlags |= RendererFlags.Fullscreen; } if (width * height == 0 || width > displayMode.w || height > displayMode.h) { width = displayMode.w; height = displayMode.h; } Log.Info("Initializing Game window..."); string windowTitle = string.Format("{0} {1} ({2}-bit)", Program.name, Program.versionDisplay, (IntPtr.Size * 8).ToString()); window = new GameWindow(windowTitle, width, height, settings.video.mode); Log.Info("Initializing Renderer..."); renderer = new Renderer(window, width, height, rendererFlags, settings.video.renderer); Log.Info("Renderer backend: " + renderer.rendererType.ToString()); Log.Info("Initializing Input..."); inputManager = new InputManager(); Log.Info("Loading debug font..."); debugFont = new Font(debugFontPath, 24, FontStyle.Normal, true); if (settings.engine.tickrate != 0) { updateInterval = Math.Max(0.0, 1.0 / settings.engine.tickrate); } if (settings.video.fpsLimit == 0) { renderInterval = 0.0; } else if (settings.video.fpsLimit == -1) { renderInterval = 1.0 / displayMode.refresh_rate; } else { renderInterval = Math.Max(0.0, 1.0 / settings.video.fpsLimit); } } Log.Clear(); if (settings.outputMode == OutputMode.Render) { sceneManager.Push(new RenderAudioScene(this, settings.playPath, settings.outputPath)); } else if (settings.outputMode == OutputMode.DumpTimestamps) { sceneManager.Push(new DumpTimestampsScene(this, settings.playPath, settings.outputPath)); } else if (settings.playPath != null) { sceneManager.Push(new GameplayScene(this, settings.playPath)); } else { sceneManager.Push(new FileSelectScene(this)); } }