34 if (SDL_ScreenSaverEnabled())
36 SDL_DisableScreenSaver();
39 int driver = sl::GFX_AUTODETECT_WINDOWED;
40 SDL_WindowFlags flags = SDL_WINDOW_OPENGL | SDL_WINDOW_INPUT_FOCUS | SDL_WINDOW_MOUSE_FOCUS | SDL_WINDOW_HIDDEN | SDL_WINDOW_HIGH_PIXEL_DENSITY;
41 if (Settings::fullscreen())
43 flags |= SDL_WINDOW_FULLSCREEN;
44 driver = sl::GFX_AUTODETECT_FULLSCREEN;
48 if (Settings::maximized())
50 flags |= SDL_WINDOW_MAXIMIZED;
54 if (Settings::mouse_grabbed())
56 flags |= SDL_WINDOW_MOUSE_GRABBED;
59 if (Settings::window_resizable())
61 flags |= SDL_WINDOW_RESIZABLE;
64 SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
65 SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
66 SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
67 SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
68 SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
69 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
70 SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
71 SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
72 SDL_GL_SetAttribute(SDL_GL_STEREO, 0);
73 SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0);
74 SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0);
75 SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1);
76 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
77 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 6);
78 SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_DEBUG_FLAG | SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG);
79 SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
80 SDL_GL_SetAttribute(SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 0);
81 SDL_GL_SetAttribute(SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, 1);
82 SDL_GL_SetAttribute(SDL_GL_CONTEXT_RELEASE_BEHAVIOR, SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH);
83 SDL_GL_SetAttribute(SDL_GL_CONTEXT_RESET_NOTIFICATION, SDL_GL_CONTEXT_RESET_NO_NOTIFICATION);
85 sl::set_graphics_backend(sl::GraphicsBackend::opengl);
86 const auto result = sl::set_gfx_mode(
90 Settings::requested_width(),
91 Settings::requested_height(),
92 Settings::virtual_width(),
93 Settings::virtual_height()
102 SDL_SetWindowAlwaysOnTop(
m_window,
false);
103 SDL_SetWindowBordered(
m_window, Settings::window_border());
104 SDL_SetWindowFocusable(
m_window,
true);
105 SDL_SetWindowFullscreenMode(
m_window,
nullptr);
106 SDL_SetWindowKeyboardGrab(
m_window,
false);
107 SDL_SetWindowMinimumSize(
m_window, 640, 360);
108 SDL_SetWindowPosition(
m_window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED);
111 glEnable(GL_DEBUG_OUTPUT);
112 glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
114 glDebugMessageCallback(
115 [](GLenum source, GLenum type, GLuint
id, GLenum severity, GLsizei length,
const GLchar* message,
const void* userParam) {
124 case GL_DEBUG_SEVERITY_HIGH:
127 case GL_DEBUG_SEVERITY_MEDIUM:
130 case GL_DEBUG_SEVERITY_LOW:
141 glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_NOTIFICATION, 0,
nullptr, GL_FALSE);