X-Git-Url: http://deadsoftware.ru/gitweb?p=flatwaifu.git;a=blobdiff_plain;f=src%2Fsdl2%2Fmain.c;h=1a25886799791e976727ca56a7a36e381f97ef7f;hp=a6b98d6813f6020130572574a6ea010cc6025694;hb=4a0a2f1f4922d5346c4aee584e7d4a13803bffab;hpb=fbbbdcdd6dd7fe274a993b9868d540c6cf8f0eb4 diff --git a/src/sdl2/main.c b/src/sdl2/main.c index a6b98d6..1a25886 100644 --- a/src/sdl2/main.c +++ b/src/sdl2/main.c @@ -31,6 +31,7 @@ static int quit = 0; static SDL_Window *window; static SDL_GLContext context; static SDL_Surface *surf; +static videomode_t vlist; /* --- error.h --- */ @@ -201,6 +202,48 @@ void Y_unset_videomode (void) { } } +static void init_videomode_list (void) { + int i, j, k; + SDL_DisplayMode m; + int n = SDL_GetNumDisplayModes(0); + if (vlist.modes != NULL) { + free(vlist.modes); + vlist.modes = NULL; + vlist.n = 0; + } + if (n > 0) { + vlist.modes = malloc(n * sizeof(videomode_size_t)); + if (vlist.modes != NULL) { + j = 0; + for (i = 0; i < n; i++) { + SDL_GetDisplayMode(0, i, &m); + k = 0; + while (k < j && (m.w != vlist.modes[k].w || m.h != vlist.modes[k].h)) { + k++; + } + if (k >= j) { + vlist.modes[j] = (videomode_size_t) { + .w = m.w, + .h = m.h + }; + j++; + } + } + vlist.n = j; + } + } +} + +const videomode_t *Y_get_videomode_list_opengl (int fullscreen) { + init_videomode_list(); + return &vlist; +} + +const videomode_t *Y_get_videomode_list_software (int fullscreen) { + init_videomode_list(); + return &vlist; +} + void Y_set_fullscreen (int yes) { if (window != NULL) { SDL_SetWindowFullscreen(window, yes ? SDL_WINDOW_FULLSCREEN : 0);