mirror of
				https://github.com/Ryujinx/SDL.git
				synced 2025-11-04 15:44:58 +00:00 
			
		
		
		
	kmsdrm: fix scaling for SDL_WINDOW_FULLSCREEN windows.
This commit is contained in:
		
							parent
							
								
									daa752b10e
								
							
						
					
					
						commit
						9501b1c698
					
				| 
						 | 
					@ -876,7 +876,7 @@ KMSDRM_CreateSurfaces(_THIS, SDL_Window * window)
 | 
				
			||||||
    /* Destroy the surfaces and buffers before creating the new ones. */
 | 
					    /* Destroy the surfaces and buffers before creating the new ones. */
 | 
				
			||||||
    KMSDRM_DestroySurfaces(_this, window);
 | 
					    KMSDRM_DestroySurfaces(_this, window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (window->flags & SDL_WINDOW_FULLSCREEN) {
 | 
					    if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) {
 | 
				
			||||||
        width = dispdata->mode.hdisplay;
 | 
					        width = dispdata->mode.hdisplay;
 | 
				
			||||||
        height = dispdata->mode.vdisplay;
 | 
					        height = dispdata->mode.vdisplay;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -962,7 +962,7 @@ KMSDRM_ReconfigureWindow( _THIS, SDL_Window * window) {
 | 
				
			||||||
    SDL_DisplayData *dispdata = (SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata;
 | 
					    SDL_DisplayData *dispdata = (SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata;
 | 
				
			||||||
    float ratio;  
 | 
					    float ratio;  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (window->flags & SDL_WINDOW_FULLSCREEN) {
 | 
					    if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) {
 | 
				
			||||||
        windata->src_w = dispdata->mode.hdisplay;
 | 
					        windata->src_w = dispdata->mode.hdisplay;
 | 
				
			||||||
        windata->src_h = dispdata->mode.vdisplay;
 | 
					        windata->src_h = dispdata->mode.vdisplay;
 | 
				
			||||||
        windata->output_w = dispdata->mode.hdisplay;
 | 
					        windata->output_w = dispdata->mode.hdisplay;
 | 
				
			||||||
| 
						 | 
					@ -1329,12 +1329,37 @@ KMSDRM_VideoQuit(_THIS)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if 0
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
KMSDRM_GetDisplayModes(_THIS, SDL_VideoDisplay * display)
 | 
					KMSDRM_GetDisplayModes(_THIS, SDL_VideoDisplay * display)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /* Only one display mode available: the current one */
 | 
					    /* Only one display mode available: the current one */
 | 
				
			||||||
    SDL_AddDisplayMode(display, &display->current_mode);
 | 
					    SDL_AddDisplayMode(display, &display->current_mode);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 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
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					the in-use video mode as available, and sets every window to that size
 | 
				
			||||||
 | 
					before we get to CreateWindow or ReconfigureWindow. */   
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					KMSDRM_GetDisplayModes(_THIS, SDL_VideoDisplay * display)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    SDL_DisplayData *dispdata = display->driverdata;
 | 
				
			||||||
 | 
					    drmModeConnector *conn = dispdata->connector->connector;
 | 
				
			||||||
 | 
					    SDL_DisplayMode mode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (int i = 0; i < conn->count_modes; i++) {
 | 
				
			||||||
 | 
					        mode.w = conn->modes[i].hdisplay;
 | 
				
			||||||
 | 
					        mode.h = conn->modes[i].vdisplay;
 | 
				
			||||||
 | 
					        mode.refresh_rate = conn->modes[i].vrefresh;
 | 
				
			||||||
 | 
					        mode.format = SDL_PIXELFORMAT_ARGB8888;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        SDL_AddDisplayMode(display, &mode);
 | 
				
			||||||
 | 
					    }   
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
KMSDRM_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)
 | 
					KMSDRM_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)
 | 
				
			||||||
| 
						 | 
					@ -1372,7 +1397,7 @@ KMSDRM_CreateWindow(_THIS, SDL_Window * window)
 | 
				
			||||||
    display = SDL_GetDisplayForWindow(window);
 | 
					    display = SDL_GetDisplayForWindow(window);
 | 
				
			||||||
    dispdata = display->driverdata;
 | 
					    dispdata = display->driverdata;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (window->flags & SDL_WINDOW_FULLSCREEN) {
 | 
					    if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) {
 | 
				
			||||||
        windata->src_w = dispdata->mode.hdisplay;
 | 
					        windata->src_w = dispdata->mode.hdisplay;
 | 
				
			||||||
        windata->src_h = dispdata->mode.vdisplay;
 | 
					        windata->src_h = dispdata->mode.vdisplay;
 | 
				
			||||||
        windata->output_w = dispdata->mode.hdisplay;
 | 
					        windata->output_w = dispdata->mode.hdisplay;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue