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"},
|
||||
{"debug", false},
|
||||
{"show-cursor", false},
|
||||
{"render-test-spacing", 2}
|
||||
{"render-test-spacing", 2},
|
||||
{"render driver", "opengl"}
|
||||
};
|
||||
sys_config["recording"] = {
|
||||
{"enabled", false},
|
||||
|
|
|
@ -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 <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);
|
||||
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<std::string>().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<glm::ivec2>();
|
||||
window = SDL_CreateWindow(
|
||||
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);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in New Issue