mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2024-12-20 22:16:49 +01:00
kmsdrm: fix errors when trying to free up videomode driverdata pointers on quit.
This commit is contained in:
parent
9501b1c698
commit
cce6c60518
@ -1338,12 +1338,13 @@ KMSDRM_GetDisplayModes(_THIS, SDL_VideoDisplay * display)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if 1
|
||||||
/* We are NOT really changing the physical display mode, but using
|
/* We are NOT really changing the physical display mode, but using
|
||||||
the PRIMARY PLANE and CRTC to scale as we please. But we need that SDL
|
the PRIMARY PLANE and CRTC to scale as we please. But we need that SDL
|
||||||
has knowledge of the video modes we are going to use for fullscreen
|
has knowledge of the video modes we are going to use for fullscreen
|
||||||
window sizes, even if we are faking their use. If not, SDL only considers
|
window sizes, even if we are faking their use. If not, SDL only considers
|
||||||
the in-use video mode as available, and sets every window to that size
|
the in-use video mode as available, and sets every window to that size
|
||||||
before we get to CreateWindow or ReconfigureWindow. */
|
before we get to CreateWindow or ReconfigureWindow. */
|
||||||
void
|
void
|
||||||
KMSDRM_GetDisplayModes(_THIS, SDL_VideoDisplay * display)
|
KMSDRM_GetDisplayModes(_THIS, SDL_VideoDisplay * display)
|
||||||
{
|
{
|
||||||
@ -1352,14 +1353,24 @@ KMSDRM_GetDisplayModes(_THIS, SDL_VideoDisplay * display)
|
|||||||
SDL_DisplayMode mode;
|
SDL_DisplayMode mode;
|
||||||
|
|
||||||
for (int i = 0; i < conn->count_modes; i++) {
|
for (int i = 0; i < conn->count_modes; i++) {
|
||||||
|
SDL_DisplayModeData *modedata = SDL_calloc(1, sizeof(SDL_DisplayModeData));
|
||||||
|
|
||||||
|
if (modedata) {
|
||||||
|
modedata->mode_index = i;
|
||||||
|
}
|
||||||
|
|
||||||
mode.w = conn->modes[i].hdisplay;
|
mode.w = conn->modes[i].hdisplay;
|
||||||
mode.h = conn->modes[i].vdisplay;
|
mode.h = conn->modes[i].vdisplay;
|
||||||
mode.refresh_rate = conn->modes[i].vrefresh;
|
mode.refresh_rate = conn->modes[i].vrefresh;
|
||||||
mode.format = SDL_PIXELFORMAT_ARGB8888;
|
mode.format = SDL_PIXELFORMAT_ARGB8888;
|
||||||
|
mode.driverdata = modedata;
|
||||||
|
|
||||||
SDL_AddDisplayMode(display, &mode);
|
if (!SDL_AddDisplayMode(display, &mode)) {
|
||||||
}
|
SDL_free(modedata);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
KMSDRM_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)
|
KMSDRM_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)
|
||||||
|
@ -132,6 +132,11 @@ typedef struct SDL_WindowData
|
|||||||
|
|
||||||
} SDL_WindowData;
|
} SDL_WindowData;
|
||||||
|
|
||||||
|
typedef struct SDL_DisplayModeData
|
||||||
|
{
|
||||||
|
int mode_index;
|
||||||
|
} SDL_DisplayModeData;
|
||||||
|
|
||||||
typedef struct KMSDRM_FBInfo
|
typedef struct KMSDRM_FBInfo
|
||||||
{
|
{
|
||||||
int drm_fd; /* DRM file desc */
|
int drm_fd; /* DRM file desc */
|
||||||
|
Loading…
Reference in New Issue
Block a user