specify render driver in config; print all renderer options
This commit is contained in:
parent
536a5ec5f5
commit
66f6d6ef81
|
@ -44,7 +44,8 @@ void Configuration::set_defaults()
|
||||||
{"title", "sfw"},
|
{"title", "sfw"},
|
||||||
{"debug", false},
|
{"debug", false},
|
||||||
{"show-cursor", false},
|
{"show-cursor", false},
|
||||||
{"render-test-spacing", 2}
|
{"render-test-spacing", 2},
|
||||||
|
{"render driver", "opengl"}
|
||||||
};
|
};
|
||||||
sys_config["recording"] = {
|
sys_config["recording"] = {
|
||||||
{"enabled", false},
|
{"enabled", false},
|
||||||
|
|
|
@ -4,10 +4,6 @@
|
||||||
#define GLM_ENABLE_EXPERIMENTAL
|
#define GLM_ENABLE_EXPERIMENTAL
|
||||||
#include "glm/vec2.hpp"
|
#include "glm/vec2.hpp"
|
||||||
|
|
||||||
#define GL_GLEXT_PROTOTYPES
|
|
||||||
#define GLEW_STATIC
|
|
||||||
#include "glew/glew.h"
|
|
||||||
|
|
||||||
#include "SDL.h"
|
#include "SDL.h"
|
||||||
|
|
||||||
#include <SDL_image.h>
|
#include <SDL_image.h>
|
||||||
|
|
68
src/Game.cpp
68
src/Game.cpp
|
@ -18,7 +18,7 @@ SDL_Surface* FramerateIndicator::get_surface()
|
||||||
{
|
{
|
||||||
std::string padded = sfw::pad(get_root()->frame_count_this_second, 2);
|
std::string padded = sfw::pad(get_root()->frame_count_this_second, 2);
|
||||||
SDL_Surface* shaded = TTF_RenderText_Shaded(
|
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(
|
// SDL_Surface* converted = SDL_ConvertSurfaceFormat(
|
||||||
// shaded, SDL_PIXELFORMAT_ARGB8888, 0);
|
// shaded, SDL_PIXELFORMAT_ARGB8888, 0);
|
||||||
// SDL_Surface* flipped = zoomSurface(converted, 1, -1, SMOOTHING_OFF);
|
// SDL_Surface* flipped = zoomSurface(converted, 1, -1, SMOOTHING_OFF);
|
||||||
|
@ -46,6 +46,7 @@ void FramerateIndicator::refresh()
|
||||||
|
|
||||||
Game::Game()
|
Game::Game()
|
||||||
{
|
{
|
||||||
|
SDL_SetHint(SDL_HINT_RENDER_DRIVER, get_configuration()["display"]["render driver"].get<std::string>().c_str());
|
||||||
frame_length_history.reserve(5000);
|
frame_length_history.reserve(5000);
|
||||||
set_framerate(get_configuration()["display"]["framerate"]);
|
set_framerate(get_configuration()["display"]["framerate"]);
|
||||||
delegate.subscribe(&Game::handle_quit_event, this, SDL_QUIT);
|
delegate.subscribe(&Game::handle_quit_event, this, SDL_QUIT);
|
||||||
|
@ -58,40 +59,42 @@ Game::Game()
|
||||||
fprintf(stderr, "stderr test message\n");
|
fprintf(stderr, "stderr test message\n");
|
||||||
SDL_SetMainReady();
|
SDL_SetMainReady();
|
||||||
// SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
// 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_MAJOR_VERSION, 3);
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
|
// SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
|
||||||
print_gl_attributes();
|
// print_gl_attributes();
|
||||||
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0)
|
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0)
|
||||||
{
|
{
|
||||||
print_sdl_error("SDL could not initialize");
|
print_sdl_error("SDL could not initialize");
|
||||||
flag_to_end();
|
flag_to_end();
|
||||||
}
|
}
|
||||||
// SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
// 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_MAJOR_VERSION, 2);
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
|
// SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
|
||||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
// SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
|
||||||
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
|
// SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
||||||
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
|
// SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
|
||||||
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
|
// SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
|
||||||
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
|
// SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
|
||||||
|
// SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
|
||||||
print_gl_attributes();
|
print_gl_attributes();
|
||||||
auto window_size = get_configuration()["display"]["dimensions"].get<glm::ivec2>();
|
auto window_size = get_configuration()["display"]["dimensions"].get<glm::ivec2>();
|
||||||
window = SDL_CreateWindow(
|
window = SDL_CreateWindow(
|
||||||
get_configuration()["display"]["title"].get_ref<const std::string&>().c_str(), SDL_WINDOWPOS_CENTERED,
|
get_configuration()["display"]["title"].get_ref<const std::string&>().c_str(), SDL_WINDOWPOS_CENTERED,
|
||||||
SDL_WINDOWPOS_CENTERED, window_size.x, window_size.y, SDL_WINDOW_OPENGL);
|
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");
|
print_sdl_error("Could not create window");
|
||||||
flag_to_end();
|
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");
|
print_sdl_error("Could not create renderer");
|
||||||
flag_to_end();
|
flag_to_end();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SDL_SetRenderTarget(renderer, NULL);
|
SDL_SetRenderTarget(renderer, nullptr);
|
||||||
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
|
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
int step = get_configuration()["display"]["render-test-spacing"];
|
int step = get_configuration()["display"]["render-test-spacing"];
|
||||||
|
@ -193,25 +196,32 @@ void Game::print_frame_length_history()
|
||||||
|
|
||||||
void Game::load_sdl_context()
|
void Game::load_sdl_context()
|
||||||
{
|
{
|
||||||
if (glcontext != NULL)
|
if (glcontext != nullptr)
|
||||||
{
|
{
|
||||||
SDL_GL_DeleteContext(glcontext);
|
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(
|
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");
|
print_sdl_error("Could not create renderer");
|
||||||
flag_to_end();
|
flag_to_end();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SDL_RendererInfo info;
|
SDL_Log("Current renderer:");
|
||||||
SDL_GetRendererInfo(renderer, &info);
|
SDL_GetRendererInfo(renderer, &renderer_info);
|
||||||
SDL_Log("renderer name: %s, flags: %i, texture formats: %i, "
|
log_renderer_info(renderer_info);
|
||||||
"max texture w: %i, max texture h: %i", info.name, info.flags,
|
SDL_Log("Renderer supports the use of render targets? %d", SDL_RenderTargetSupported(renderer));
|
||||||
info.num_texture_formats, info.max_texture_width,
|
|
||||||
info.max_texture_height);
|
|
||||||
}
|
}
|
||||||
is_gl_context = false;
|
is_gl_context = false;
|
||||||
log_display_mode();
|
log_display_mode();
|
||||||
|
@ -219,7 +229,7 @@ void Game::load_sdl_context()
|
||||||
|
|
||||||
void Game::load_gl_context()
|
void Game::load_gl_context()
|
||||||
{
|
{
|
||||||
if (renderer != NULL)
|
if (renderer != nullptr)
|
||||||
{
|
{
|
||||||
SDL_DestroyRenderer(renderer);
|
SDL_DestroyRenderer(renderer);
|
||||||
renderer = NULL;
|
renderer = NULL;
|
||||||
|
@ -247,6 +257,14 @@ void Game::load_gl_context()
|
||||||
log_display_mode();
|
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)
|
bool Game::log_gl_errors(std::string suffix)
|
||||||
{
|
{
|
||||||
GLenum error;
|
GLenum error;
|
||||||
|
@ -546,7 +564,7 @@ void Game::frame(float ticks)
|
||||||
framerate_indicator.update();
|
framerate_indicator.update();
|
||||||
if (!is_gl_context)
|
if (!is_gl_context)
|
||||||
{
|
{
|
||||||
SDL_SetRenderTarget(renderer, NULL);
|
SDL_SetRenderTarget(renderer, nullptr);
|
||||||
SDL_RenderPresent(renderer);
|
SDL_RenderPresent(renderer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,6 +70,7 @@ struct Game : Node
|
||||||
void print_frame_length_history();
|
void print_frame_length_history();
|
||||||
void load_sdl_context();
|
void load_sdl_context();
|
||||||
void load_gl_context();
|
void load_gl_context();
|
||||||
|
void log_renderer_info(SDL_RendererInfo&);
|
||||||
bool log_gl_errors(std::string);
|
bool log_gl_errors(std::string);
|
||||||
void log_display_mode();
|
void log_display_mode();
|
||||||
void log_surface_format(SDL_Surface*, std::string = "surface");
|
void log_surface_format(SDL_Surface*, std::string = "surface");
|
||||||
|
|
Loading…
Reference in New Issue