Add -devvideo option which specifies SDL rendering driver name

This commit is contained in:
kichikuou
2022-02-15 14:55:18 +09:00
parent 1c3dccb349
commit 4c022cf505
5 changed files with 40 additions and 12 deletions
+2 -2
View File
@@ -99,7 +99,7 @@ boolean ags_check_param_xy(int *x, int *y) {
return TRUE;
}
void ags_init() {
void ags_init(const char *videodev) {
nact->ags.mouse_movesw = 2; /* 0:IZを無視, 1: 直接指定場所へ, 2: スムーズに指定場所に */
nact->ags.pal = &pal_256;
nact->ags.world_size.width = SYS35_DEFAULT_WIDTH;
@@ -110,7 +110,7 @@ void ags_init() {
nact->ags.view_area.w = SYS35_DEFAULT_WIDTH;
nact->ags.view_area.h = SYS35_DEFAULT_HEIGHT;
sdl_Initilize();
sdl_Initialize(videodev);
font_init();
initPal(&pal_256);
+1 -1
View File
@@ -126,7 +126,7 @@ typedef struct _ags ags_t;
/* 初期化関係 */
extern void ags_init();
extern void ags_init(const char *videodev);
extern void ags_remove();
/* ウィンド関係 */
+1 -1
View File
@@ -34,7 +34,7 @@
struct inputstring_param;
/* 初期化関係 */
extern int sdl_Initilize(void);
extern int sdl_Initialize(const char *videodev);
extern void sdl_Remove(void);
/* ウィンド関係 */
+24 -7
View File
@@ -36,7 +36,7 @@
#include "xsystem35.h"
#include "image.h"
static void window_init(void);
static void window_init(const char *driver_name);
static void makeDIB(int width, int height, int depth);
struct sdl_private_data *sdl_videodev;
@@ -73,11 +73,10 @@ static boolean joy_open(void) {
}
/* SDL の初期化 */
int sdl_Initilize(void) {
int sdl_Initialize(const char *videodev) {
sdl_videodev = calloc(1, sizeof(struct sdl_private_data));
/* make topleve window */
window_init();
window_init(videodev);
/* offscreen Pixmap */
makeDIB(SYS35_DEFAULT_WIDTH, SYS35_DEFAULT_HEIGHT, SYS35_DEFAULT_DEPTH);
@@ -127,8 +126,26 @@ void sdl_setWindowTitle(char *name) {
}
#endif
/* Visual に応じて Window を生成する */
static void window_init(void) {
static int rendering_driver_index(const char *driver_name) {
if (!driver_name)
return -1;
SDL_RendererInfo info;
int nr_devs = SDL_GetNumRenderDrivers();
for (int i = 0; i < nr_devs; i++) {
if (!SDL_GetRenderDriverInfo(i, &info) && !strcmp(info.name, driver_name))
return i;
}
fprintf(stderr, "Unknown video driver \"%s\". Valid names are:\n", driver_name);
for (int i = 0; i < nr_devs; i++) {
if (SDL_GetRenderDriverInfo(i, &info) == 0)
fprintf(stderr, " %s\n", info.name);
}
exit(1);
}
static void window_init(const char *driver_name) {
SDL_SetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, "0");
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK);
@@ -151,7 +168,7 @@ static void window_init(void) {
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
SYS35_DEFAULT_WIDTH, SYS35_DEFAULT_HEIGHT,
flags);
sdl_renderer = SDL_CreateRenderer(sdl_window, -1, 0);
sdl_renderer = SDL_CreateRenderer(sdl_window, rendering_driver_index(driver_name), 0);
SDL_SetRenderDrawColor(sdl_renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
SDL_RenderSetIntegerScale(sdl_renderer, integer_scaling);
}
+12 -1
View File
@@ -80,6 +80,8 @@ static void sys35_remove();
static void sys35_ParseOption(int *argc, char **argv);
static void check_profile();
static char *videodev = NULL;
/* for debugging */
static int debuglv = DEBUGLEVEL;
enum {
@@ -112,6 +114,7 @@ static void sys35_usage(boolean verbose) {
puts("Usage: xsystem35 [OPTIONS]\n");
puts("OPTIONS");
puts(" -gamefile file : set game resource file to 'file'");
puts(" -devvideo device : set video device name to 'device'");
puts(" -devcd device : set cdrom device name to 'device'");
puts(" -devmidi device: set midi device name to 'device'");
@@ -209,7 +212,7 @@ static void sys35_init() {
v_initVars();
ags_init();
ags_init(videodev);
for (i = 0; i < FONTTYPEMAX; i++)
font_set_name_and_index(i, fontname_tt[i], fontface[i]);
@@ -275,6 +278,8 @@ static void sys35_ParseOption(int *argc, char **argv) {
debugger_mode = DEBUGGER_CUI;
} else if (0 == strcmp(argv[i], "-debug_dap")) {
debugger_mode = DEBUGGER_DAP;
} else if (0 == strcmp(argv[i], "-devvideo")) {
videodev = argv[i + 1];
} else if (0 == strcmp(argv[i], "-devcd")) {
if (argv[i + 1] != NULL) {
cd_set_devicename(argv[i + 1]);
@@ -356,6 +361,12 @@ static void check_profile() {
audio_buffer_size = atoi(param);
}
/* Video device */
param = get_profile("video_device");
if (param) {
videodev = param;
}
/* CD-ROM device name の設定 */
param = get_profile("cdrom_device");
if (param) {