@@ -601,7 +601,7 @@ struct command_line_arguments {
601601 bool tearing_permitted = false ;
602602 bool validation = false ;
603603
604- int display_idx = 0 ;
604+ int display_idx = - 1 ;
605605 int x = SDL_WINDOWPOS_UNDEFINED;
606606 int y = SDL_WINDOWPOS_UNDEFINED;
607607
@@ -723,6 +723,21 @@ sdl_set_log_level()
723723 : SDL_LOG_PRIORITY_VERBOSE);
724724}
725725
726+ SDL_DisplayID
727+ get_display_id_from_idx (int idx)
728+ {
729+ if (idx == -1 ) {
730+ idx = 0 ;
731+ }
732+ int count = 0 ;
733+ SDL_DisplayID *displays = SDL_GetDisplays (&count);
734+ if (idx < count) {
735+ return displays[idx];
736+ }
737+ MSG (ERROR, " Display index %d out of range!\n " , idx);
738+ return 0 ;
739+ }
740+
726741void * display_vulkan_init (module * parent, const char * fmt, unsigned int flags) {
727742 sdl_set_log_level ();
728743 if (flags & DISPLAY_FLAG_AUDIO_ANY) {
@@ -775,8 +790,9 @@ void* display_vulkan_init(module* parent, const char* fmt, unsigned int flags) {
775790 window_title = get_commandline_param (" window-title" );
776791 }
777792
778- int x = (args.x == SDL_WINDOWPOS_UNDEFINED ? SDL_WINDOWPOS_CENTERED_DISPLAY (args.display_idx ) : args.x );
779- int y = (args.y == SDL_WINDOWPOS_UNDEFINED ? SDL_WINDOWPOS_CENTERED_DISPLAY (args.display_idx ) : args.y );
793+ const SDL_DisplayID display_id = get_display_id_from_idx (args.display_idx );
794+ int x = (args.x == SDL_WINDOWPOS_UNDEFINED ? SDL_WINDOWPOS_CENTERED_DISPLAY (display_id) : args.x );
795+ int y = (args.y == SDL_WINDOWPOS_UNDEFINED ? SDL_WINDOWPOS_CENTERED_DISPLAY (display_id) : args.y );
780796 if (s->width == -1 && s->height == -1 ){
781797 int display_index = 0 ;
782798 const SDL_DisplayMode *mode = SDL_GetDesktopDisplayMode (display_index);
0 commit comments