From 21e1e7e707004fee91425cb5aef099a19b3fb4ff Mon Sep 17 00:00:00 2001 From: frank <420@shampoo.ooo> Date: Sat, 6 Aug 2022 18:43:12 -0400 Subject: [PATCH] set GL attributes before creating a window --- lib/sdl2-gfx/SDL2_gfxPrimitives.h | 2 +- src/Game.cpp | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/sdl2-gfx/SDL2_gfxPrimitives.h b/lib/sdl2-gfx/SDL2_gfxPrimitives.h index 8da13ed..f84bde4 100755 --- a/lib/sdl2-gfx/SDL2_gfxPrimitives.h +++ b/lib/sdl2-gfx/SDL2_gfxPrimitives.h @@ -37,7 +37,7 @@ Richard Russell -- richard at rtrussell dot co dot uk #define M_PI 3.1415926535897932384626433832795 #endif -#include "SDL2/SDL.h" +#include "SDL.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus diff --git a/src/Game.cpp b/src/Game.cpp index 09ad2bc..5a6cffa 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -50,6 +50,17 @@ Game::Game() log_message << "GLEW " << glewGetString(GLEW_VERSION); sb::Log::log(log_message.str()); glm::ivec2 window_size = get_configuration()["display"]["dimensions"].get(); + + /* Set these before creating a window (see SDL_GLattr.html) */ + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); + SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 1); + /* Create a window with dimensions set in the config, centered, and flagged to be usable in OpenGL context */ window = SDL_CreateWindow( get_configuration()["display"]["title"].get_ref().c_str(), SDL_WINDOWPOS_CENTERED, @@ -59,6 +70,7 @@ Game::Game() sb::Log::sdl_error("Could not create window"); flag_to_end(); } + /* Create an SDL renderer for clearing the screen to black and for logging renderer properties. Destroy renderer * when finished. */ @@ -170,13 +182,6 @@ void Game::load_gl_context() SDL_DestroyRenderer(renderer); renderer = nullptr; } - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); - SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); - SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); if ((glcontext = SDL_GL_CreateContext(window)) == nullptr) { sb::Log::sdl_error("Could not get GL context");