mirror of
https://github.com/digarok/gsplus.git
synced 2024-11-24 06:34:02 +00:00
Merge pull request #43 from digarok/sdl2_performance_improvement
add vsync flag for great success
This commit is contained in:
commit
632d824a8c
@ -54,6 +54,8 @@ extern int g_fullscreen;
|
|||||||
extern int g_highdpi;
|
extern int g_highdpi;
|
||||||
extern int g_borderless;
|
extern int g_borderless;
|
||||||
extern int g_resizeable;
|
extern int g_resizeable;
|
||||||
|
extern int g_novsync;
|
||||||
|
extern int g_nohwaccel;
|
||||||
extern int g_screen_redraw_skip_amt;
|
extern int g_screen_redraw_skip_amt;
|
||||||
extern int g_use_dhr140;
|
extern int g_use_dhr140;
|
||||||
extern int g_use_bw_hires;
|
extern int g_use_bw_hires;
|
||||||
@ -206,6 +208,8 @@ Cfg_menu g_cfg_uiless_menu[] = {
|
|||||||
{ "", KNMP(g_highdpi), CFGTYPE_INT },
|
{ "", KNMP(g_highdpi), CFGTYPE_INT },
|
||||||
{ "", KNMP(g_borderless), CFGTYPE_INT },
|
{ "", KNMP(g_borderless), CFGTYPE_INT },
|
||||||
{ "", KNMP(g_resizeable), 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_screen_redraw_skip_amt), CFGTYPE_INT },
|
||||||
{ "", KNMP(g_use_dhr140), CFGTYPE_INT },
|
{ "", KNMP(g_use_dhr140), CFGTYPE_INT },
|
||||||
{ "", KNMP(g_use_bw_hires), CFGTYPE_INT },
|
{ "", KNMP(g_use_bw_hires), CFGTYPE_INT },
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
See COPYRIGHT.txt for Copyright information
|
See COPYRIGHT.txt for Copyright information
|
||||||
See LICENSE.txt for license (GPL v2)
|
See LICENSE.txt for license (GPL v2)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -39,6 +39,10 @@ extern int g_highdpi; // defined in video.c
|
|||||||
extern int g_borderless; // defined in video.c
|
extern int g_borderless; // defined in video.c
|
||||||
// Allow window resizing, dragging to scale - SDL2
|
// Allow window resizing, dragging to scale - SDL2
|
||||||
extern int g_resizeable; // defined in video.c
|
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)
|
// Enable Dagen's scanline simulator (SDL2)
|
||||||
extern int g_scanline_simulator; // defined in sim65816.c
|
extern int g_scanline_simulator; // defined in sim65816.c
|
||||||
// Ethernet (interface?)
|
// Ethernet (interface?)
|
||||||
@ -133,6 +137,12 @@ int parse_cli_options(int argc, char **argv) {
|
|||||||
} else if(!strcmp("-resizeable", argv[i])) {
|
} else if(!strcmp("-resizeable", argv[i])) {
|
||||||
glogf("%s Window will be resizeable", parse_log_prefix);
|
glogf("%s Window will be resizeable", parse_log_prefix);
|
||||||
g_resizeable = 1;
|
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])) {
|
} else if(!strcmp("-noignbadacc", argv[i])) {
|
||||||
glogf("%s Not ignoring bad memory accesses", parse_log_prefix);
|
glogf("%s Not ignoring bad memory accesses", parse_log_prefix);
|
||||||
g_ignore_bad_acc = 0;
|
g_ignore_bad_acc = 0;
|
||||||
|
@ -40,7 +40,7 @@ int g_win_status_debug_request = 0; // Desired visibility of status lines.
|
|||||||
int g_screen_mdepth = 0;
|
int g_screen_mdepth = 0;
|
||||||
int kb_shift_control_state = 0;
|
int kb_shift_control_state = 0;
|
||||||
|
|
||||||
|
void debuginfo_renderer(SDL_Renderer *r);
|
||||||
void x_take_screenshot(); // screenshot stuff
|
void x_take_screenshot(); // screenshot stuff
|
||||||
int g_screenshot_requested = 0; // DB to know if we want to save a screenshot
|
int g_screenshot_requested = 0; // DB to know if we want to save a screenshot
|
||||||
extern char g_config_gsplus_name[];
|
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_highdpi;
|
||||||
extern int g_borderless;
|
extern int g_borderless;
|
||||||
extern int g_resizeable;
|
extern int g_resizeable;
|
||||||
|
extern int g_novsync;
|
||||||
|
extern int g_nohwaccel;
|
||||||
extern int g_scanline_simulator;
|
extern int g_scanline_simulator;
|
||||||
extern int g_startx;
|
extern int g_startx;
|
||||||
extern int g_starty;
|
extern int g_starty;
|
||||||
@ -333,7 +335,15 @@ void dev_video_init_sdl() {
|
|||||||
// SET WINDOW ICON
|
// SET WINDOW ICON
|
||||||
do_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, "linear"); // make the scaled rendering look smoother.
|
||||||
// SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "best"); // 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;
|
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
|
// BELOW ARE FUNCTIONS THAT ARE EITHER UNIMPLEMENTED, OR AR NOT RELEVANT TO
|
||||||
|
@ -94,6 +94,8 @@ int g_starty = WINDOWPOS_UNDEFINED;
|
|||||||
int g_highdpi = 0;
|
int g_highdpi = 0;
|
||||||
int g_borderless = 0;
|
int g_borderless = 0;
|
||||||
int g_resizeable = 0;
|
int g_resizeable = 0;
|
||||||
|
int g_novsync = 0;
|
||||||
|
int g_nohwaccel = 0;
|
||||||
|
|
||||||
int g_a2_new_all_stat[200];
|
int g_a2_new_all_stat[200];
|
||||||
int g_a2_cur_all_stat[200];
|
int g_a2_cur_all_stat[200];
|
||||||
|
Loading…
Reference in New Issue
Block a user