Merge pull request #43 from digarok/sdl2_performance_improvement

add vsync flag for great success
This commit is contained in:
Dagen Brock 2018-08-24 13:13:06 -05:00 committed by GitHub
commit 632d824a8c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 52 additions and 3 deletions

View File

@ -54,6 +54,8 @@ extern int g_fullscreen;
extern int g_highdpi;
extern int g_borderless;
extern int g_resizeable;
extern int g_novsync;
extern int g_nohwaccel;
extern int g_screen_redraw_skip_amt;
extern int g_use_dhr140;
extern int g_use_bw_hires;
@ -206,6 +208,8 @@ Cfg_menu g_cfg_uiless_menu[] = {
{ "", KNMP(g_highdpi), CFGTYPE_INT },
{ "", KNMP(g_borderless), CFGTYPE_INT },
{ "", KNMP(g_resizeable), CFGTYPE_INT },
{ "", KNMP(g_novsync), CFGTYPE_INT },
{ "", KNMP(g_nohwaccel), CFGTYPE_INT },
{ "", KNMP(g_screen_redraw_skip_amt), CFGTYPE_INT },
{ "", KNMP(g_use_dhr140), CFGTYPE_INT },
{ "", KNMP(g_use_bw_hires), CFGTYPE_INT },

View File

@ -4,7 +4,7 @@
See COPYRIGHT.txt for Copyright information
See LICENSE.txt for license (GPL v2)
*/
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
@ -39,6 +39,10 @@ extern int g_highdpi; // defined in video.c
extern int g_borderless; // defined in video.c
// Allow window resizing, dragging to scale - SDL2
extern int g_resizeable; // defined in video.c
// Don't explicitly set vsync present flag on renderer - SDL2
extern int g_novsync; // defined in video.c
// Don't explicitly set HW accelerator flag on renderer - SDL2
extern int g_nohwaccel; // defined in video.c
// Enable Dagen's scanline simulator (SDL2)
extern int g_scanline_simulator; // defined in sim65816.c
// Ethernet (interface?)
@ -133,6 +137,12 @@ int parse_cli_options(int argc, char **argv) {
} else if(!strcmp("-resizeable", argv[i])) {
glogf("%s Window will be resizeable", parse_log_prefix);
g_resizeable = 1;
} else if(!strcmp("-novsync", argv[i])) {
glogf("%s Renderer skipping vsync flag", parse_log_prefix);
g_novsync = 1;
} else if(!strcmp("-nohwaccel", argv[i])) {
glogf("%s Renderer skipping HW accel flag", parse_log_prefix);
g_nohwaccel = 1;
} else if(!strcmp("-noignbadacc", argv[i])) {
glogf("%s Not ignoring bad memory accesses", parse_log_prefix);
g_ignore_bad_acc = 0;

View File

@ -40,7 +40,7 @@ int g_win_status_debug_request = 0; // Desired visibility of status lines.
int g_screen_mdepth = 0;
int kb_shift_control_state = 0;
void debuginfo_renderer(SDL_Renderer *r);
void x_take_screenshot(); // screenshot stuff
int g_screenshot_requested = 0; // DB to know if we want to save a screenshot
extern char g_config_gsplus_name[];
@ -52,6 +52,8 @@ extern int g_fullscreen; // only checked at start if set via CLI, otherwise it'
extern int g_highdpi;
extern int g_borderless;
extern int g_resizeable;
extern int g_novsync;
extern int g_nohwaccel;
extern int g_scanline_simulator;
extern int g_startx;
extern int g_starty;
@ -333,7 +335,15 @@ void dev_video_init_sdl() {
// SET WINDOW ICON
do_icon();
renderer = SDL_CreateRenderer(window, -1, 0);
int renderer_hints = 0;
if (!g_novsync) {
renderer_hints |= SDL_RENDERER_PRESENTVSYNC;
}
if (!g_nohwaccel) {
renderer_hints |= SDL_RENDERER_ACCELERATED;
}
renderer = SDL_CreateRenderer(window, -1, renderer_hints);
debuginfo_renderer(renderer);
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); // make the scaled rendering look smoother.
// SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "best"); // make the scaled rendering look smoother.
@ -763,6 +773,29 @@ int x_show_alert(int is_fatal, const char *str) {
return 0;
}
// This will help us determine how well and which drivers are supported on
// different SDL platforms
void debuginfo_renderer(SDL_Renderer *r) {
int n = SDL_GetNumRenderDrivers();
glogf("**--- SDL DEBUG ------ (%i) drivers", n);
for(int i = 0; i < n; i++) {
SDL_RendererInfo info;
SDL_GetRenderDriverInfo(i, &info);
glogf("* '%s'", info.name);
}
SDL_RendererInfo info = {0};
if (SDL_GetRendererInfo(r,&info) == 0) {
glogf("* SDL_RENDERER_SOFTWARE: %d", (info.flags & SDL_RENDERER_SOFTWARE) > 0 );
glogf("* SDL_RENDERER_ACCELERATED: %d", (info.flags & SDL_RENDERER_ACCELERATED) > 0 );
glogf("* SDL_RENDERER_PRESENTVSYNC: %d", (info.flags & SDL_RENDERER_PRESENTVSYNC) > 0 );
glogf("* SDL_RENDERER_TARGETTEXTURE: %d", (info.flags & SDL_RENDERER_TARGETTEXTURE) > 0 );
glogf("* active renderer -> '%s'", info.name);
} else {
glog("NO Renderinfo");
}
}
// BELOW ARE FUNCTIONS THAT ARE EITHER UNIMPLEMENTED, OR AR NOT RELEVANT TO

View File

@ -94,6 +94,8 @@ int g_starty = WINDOWPOS_UNDEFINED;
int g_highdpi = 0;
int g_borderless = 0;
int g_resizeable = 0;
int g_novsync = 0;
int g_nohwaccel = 0;
int g_a2_new_all_stat[200];
int g_a2_cur_all_stat[200];