@@ -81,7 +81,11 @@ static boolean sdl_get_desktop_display_mode(SDL_DisplayMode *display_mode)
81
81
const SDL_DisplayMode * mode ;
82
82
int count ;
83
83
84
- mode = SDL_GetDesktopDisplayMode (0 );
84
+ SDL_DisplayID id = SDL_GetPrimaryDisplay ();
85
+ if (id == 0 )
86
+ return false;
87
+
88
+ mode = SDL_GetDesktopDisplayMode (id );
85
89
if (mode )
86
90
{
87
91
* display_mode = * mode ;
@@ -129,8 +133,12 @@ static boolean sdl_get_smallest_usable_display_mode(SDL_DisplayMode *display_mod
129
133
int count ;
130
134
int i ;
131
135
132
- const SDL_DisplayMode * * list =
133
- (const SDL_DisplayMode * * )SDL_GetFullscreenDisplayModes (0 , & count );
136
+ const SDL_DisplayMode * * list ;
137
+ SDL_DisplayID id = SDL_GetPrimaryDisplay ();
138
+ if (id == 0 )
139
+ return false;
140
+
141
+ list = (const SDL_DisplayMode * * )SDL_GetFullscreenDisplayModes (id , & count );
134
142
if (!list )
135
143
return false;
136
144
@@ -402,9 +410,12 @@ void sdl_destruct_window(struct graphics_data *graphics)
402
410
}
403
411
404
412
// Used for 8bpp support for the software renderer.
413
+ // This is attached to the surface in SDL3 and should not be destroyed.
405
414
if (render_data -> palette )
406
415
{
416
+ #if !SDL_VERSION_ATLEAST (3 ,0 ,0 )
407
417
SDL_DestroyPalette (render_data -> palette );
418
+ #endif
408
419
render_data -> palette = NULL ;
409
420
}
410
421
@@ -544,7 +555,7 @@ boolean sdl_set_video_mode(struct graphics_data *graphics, int width,
544
555
struct sdl_render_data * render_data = graphics -> render_data ;
545
556
546
557
#if SDL_VERSION_ATLEAST (2 ,0 ,0 )
547
- SDL_PixelFormatDetails * format ;
558
+ SDL_Surface * target ;
548
559
boolean fullscreen_windowed = graphics -> fullscreen_windowed ;
549
560
boolean matched = false;
550
561
Uint32 fmt ;
@@ -620,35 +631,49 @@ boolean sdl_set_video_mode(struct graphics_data *graphics, int width,
620
631
render_data -> shadow = NULL ;
621
632
}
622
633
623
- format = render_data -> shadow ? render_data -> shadow -> format :
624
- render_data -> screen -> format ;
625
- render_data -> flat_format = format ;
634
+ target = render_data -> shadow ? render_data -> shadow : render_data -> screen ;
635
+ #if SDL_VERSION_ATLEAST (3 ,0 ,0 )
636
+ render_data -> flat_format = SDL_GetPixelFormatDetails (target -> format );
637
+ #else
638
+ render_data -> flat_format = target -> format ;
639
+ #endif
626
640
627
641
if (fmt == SDL_PIXELFORMAT_INDEX8 )
628
642
{
629
- render_data -> palette = SDL_CreatePalette (SMZX_PAL_SIZE );
643
+ #if SDL_VERSION_ATLEAST (3 ,0 ,0 )
644
+ render_data -> palette = SDL_CreateSurfacePalette (target );
630
645
if (!render_data -> palette )
631
646
{
632
647
warn ("Failed to allocate palette: %s\n" , SDL_GetError ());
633
648
goto err_free ;
634
649
}
635
- render_data -> palette_colors =
636
- ( SDL_Color * ) ccalloc (SMZX_PAL_SIZE , sizeof ( SDL_Color ) );
637
- if (!render_data -> palette_colors )
650
+ #else
651
+ render_data -> palette = SDL_CreatePalette (SMZX_PAL_SIZE );
652
+ if (!render_data -> palette )
638
653
{
639
- warn ("Failed to allocate palette colors \n" );
654
+ warn ("Failed to allocate palette: %s \n" , SDL_GetError () );
640
655
goto err_free ;
641
656
}
642
657
643
- if (SDL_SetPixelFormatPalette (format , render_data -> palette ))
658
+ if (SDL_SetPixelFormatPalette (target -> format , render_data -> palette ))
644
659
{
645
660
warn ("Failed to set pixel format palette: %s\n" , SDL_GetError ());
646
661
goto err_free ;
647
662
}
663
+ #endif
664
+
665
+ render_data -> palette_colors =
666
+ (SDL_Color * )ccalloc (SMZX_PAL_SIZE , sizeof (SDL_Color ));
667
+ if (!render_data -> palette_colors )
668
+ {
669
+ warn ("Failed to allocate palette colors\n" );
670
+ goto err_free ;
671
+ }
648
672
}
649
673
else
650
674
{
651
675
render_data -> palette = NULL ;
676
+ render_data -> palette_colors = NULL ;
652
677
}
653
678
654
679
sdl_window_id = SDL_GetWindowID (render_data -> window );
@@ -964,7 +989,8 @@ boolean sdlrender_set_video_mode(struct graphics_data *graphics,
964
989
if (!render_data -> rgb_to_yuv )
965
990
{
966
991
#if SDL_VERSION_ATLEAST (3 ,0 ,0 )
967
- #error wtf
992
+ render_data -> flat_format =
993
+ SDL_GetPixelFormatDetails (render_data -> texture_format );
968
994
#else
969
995
// This is required for SDL_MapRGBA to work, but YUV formats can ignore it.
970
996
render_data -> pixel_format = SDL_AllocFormat (render_data -> texture_format );
0 commit comments