diff --git a/src/Configuration.cpp b/src/Configuration.cpp index bdc79fa..66902bb 100644 --- a/src/Configuration.cpp +++ b/src/Configuration.cpp @@ -44,7 +44,8 @@ void Configuration::set_defaults() {"title", "sfw"}, {"debug", false}, {"show-cursor", false}, - {"render-test-spacing", 2} + {"render-test-spacing", 2}, + {"render driver", "opengl"} }; sys_config["recording"] = { {"enabled", false}, diff --git a/src/Display.hpp b/src/Display.hpp index db30543..561c21c 100644 --- a/src/Display.hpp +++ b/src/Display.hpp @@ -4,10 +4,6 @@ #define GLM_ENABLE_EXPERIMENTAL #include "glm/vec2.hpp" -#define GL_GLEXT_PROTOTYPES -#define GLEW_STATIC -#include "glew/glew.h" - #include "SDL.h" #include diff --git a/src/Game.cpp b/src/Game.cpp index a5f5505..b814b58 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -18,7 +18,7 @@ SDL_Surface* FramerateIndicator::get_surface() { std::string padded = sfw::pad(get_root()->frame_count_this_second, 2); SDL_Surface* shaded = TTF_RenderText_Shaded( - get_root()->bp_mono_font, padded.c_str(), {0, 0, 0}, {255, 255, 255}); + get_root()->bp_mono_font, padded.c_str(), {0, 0, 0, 255}, {255, 255, 255, 255}); // SDL_Surface* converted = SDL_ConvertSurfaceFormat( // shaded, SDL_PIXELFORMAT_ARGB8888, 0); // SDL_Surface* flipped = zoomSurface(converted, 1, -1, SMOOTHING_OFF); @@ -46,6 +46,7 @@ void FramerateIndicator::refresh() Game::Game() { + SDL_SetHint(SDL_HINT_RENDER_DRIVER, get_configuration()["display"]["render driver"].get().c_str()); frame_length_history.reserve(5000); set_framerate(get_configuration()["display"]["framerate"]); delegate.subscribe(&Game::handle_quit_event, this, SDL_QUIT); @@ -58,40 +59,42 @@ Game::Game() fprintf(stderr, "stderr test message\n"); SDL_SetMainReady(); // SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); - print_gl_attributes(); + // SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); + // SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); + // print_gl_attributes(); if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) { print_sdl_error("SDL could not initialize"); flag_to_end(); } // SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - 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_ALPHA_SIZE, 8); + // SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); + // SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); + // SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); + // SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + // 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_ALPHA_SIZE, 8); print_gl_attributes(); auto window_size = get_configuration()["display"]["dimensions"].get(); window = SDL_CreateWindow( get_configuration()["display"]["title"].get_ref().c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, window_size.x, window_size.y, SDL_WINDOW_OPENGL); - if (window == NULL) + if (window == nullptr) { print_sdl_error("Could not create window"); flag_to_end(); } - if ((renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_TARGETTEXTURE)) == NULL) + if ((renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_TARGETTEXTURE | SDL_RENDERER_ACCELERATED)) == NULL) + // if ((renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_TARGETTEXTURE | SDL_RENDERER_SOFTWARE)) == NULL) { print_sdl_error("Could not create renderer"); flag_to_end(); } else { - SDL_SetRenderTarget(renderer, NULL); + SDL_SetRenderTarget(renderer, nullptr); SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_RenderClear(renderer); int step = get_configuration()["display"]["render-test-spacing"]; @@ -193,25 +196,32 @@ void Game::print_frame_length_history() void Game::load_sdl_context() { - if (glcontext != NULL) + if (glcontext != nullptr) { SDL_GL_DeleteContext(glcontext); - glcontext = NULL; + glcontext = nullptr; + } + SDL_RendererInfo renderer_info; + int render_driver_count = SDL_GetNumRenderDrivers(); + SDL_Log("Render drivers:"); + for (int ii = 0; ii < render_driver_count; ii++) + { + SDL_GetRenderDriverInfo(ii, &renderer_info); + log_renderer_info(renderer_info); } if ((renderer = SDL_CreateRenderer( - window, -1, SDL_RENDERER_TARGETTEXTURE)) == NULL) + window, -1, SDL_RENDERER_TARGETTEXTURE | SDL_RENDERER_ACCELERATED)) == nullptr) + // if ((renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_TARGETTEXTURE | SDL_RENDERER_SOFTWARE)) == NULL) { print_sdl_error("Could not create renderer"); flag_to_end(); } else { - SDL_RendererInfo info; - SDL_GetRendererInfo(renderer, &info); - SDL_Log("renderer name: %s, flags: %i, texture formats: %i, " - "max texture w: %i, max texture h: %i", info.name, info.flags, - info.num_texture_formats, info.max_texture_width, - info.max_texture_height); + SDL_Log("Current renderer:"); + SDL_GetRendererInfo(renderer, &renderer_info); + log_renderer_info(renderer_info); + SDL_Log("Renderer supports the use of render targets? %d", SDL_RenderTargetSupported(renderer)); } is_gl_context = false; log_display_mode(); @@ -219,7 +229,7 @@ void Game::load_sdl_context() void Game::load_gl_context() { - if (renderer != NULL) + if (renderer != nullptr) { SDL_DestroyRenderer(renderer); renderer = NULL; @@ -247,6 +257,14 @@ void Game::load_gl_context() log_display_mode(); } +void Game::log_renderer_info(SDL_RendererInfo& info) +{ + SDL_Log("renderer name: %s, flags: %i, texture formats: %i, " + "max texture w: %i, max texture h: %i", info.name, info.flags, + info.num_texture_formats, info.max_texture_width, + info.max_texture_height); +} + bool Game::log_gl_errors(std::string suffix) { GLenum error; @@ -546,7 +564,7 @@ void Game::frame(float ticks) framerate_indicator.update(); if (!is_gl_context) { - SDL_SetRenderTarget(renderer, NULL); + SDL_SetRenderTarget(renderer, nullptr); SDL_RenderPresent(renderer); } } diff --git a/src/Game.hpp b/src/Game.hpp index bd65e09..d4fa085 100644 --- a/src/Game.hpp +++ b/src/Game.hpp @@ -70,6 +70,7 @@ struct Game : Node void print_frame_length_history(); void load_sdl_context(); void load_gl_context(); + void log_renderer_info(SDL_RendererInfo&); bool log_gl_errors(std::string); void log_display_mode(); void log_surface_format(SDL_Surface*, std::string = "surface");