SDL2: Implement subsystem selection

This commit is contained in:
SR_team 2022-07-07 08:31:37 +03:00
parent 52d6675249
commit 8796b2ece9
2 changed files with 20 additions and 18 deletions

View File

@ -1553,12 +1553,15 @@ startSDL2(void)
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, profiles[i].major); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, profiles[i].major);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, profiles[i].minor); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, profiles[i].minor);
SDL_Rect bounds;
SDL_GetDisplayBounds(glGlobals.currentMonitor, &bounds);
if(mode->flags & VIDEOMODEEXCLUSIVE) { if(mode->flags & VIDEOMODEEXCLUSIVE) {
win = SDL_CreateWindow(glGlobals.winTitle, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, mode->mode.w, mode->mode.h, SDL_WINDOW_RESIZABLE | SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN); win = SDL_CreateWindow(glGlobals.winTitle, bounds.x, bounds.y, mode->mode.w, mode->mode.h, SDL_WINDOW_RESIZABLE | SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN);
if (win) if (win)
SDL_SetWindowDisplayMode(win, &mode->mode); SDL_SetWindowDisplayMode(win, &mode->mode);
} else { } else {
win = SDL_CreateWindow(glGlobals.winTitle, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, glGlobals.winWidth, glGlobals.winHeight, SDL_WINDOW_RESIZABLE | SDL_WINDOW_OPENGL); win = SDL_CreateWindow(glGlobals.winTitle, bounds.x, bounds.y, glGlobals.winWidth, glGlobals.winHeight, SDL_WINDOW_RESIZABLE | SDL_WINDOW_OPENGL);
if (win) if (win)
SDL_SetWindowDisplayMode(win, NULL); SDL_SetWindowDisplayMode(win, NULL);
} }
@ -1940,7 +1943,20 @@ deviceSystemSDL2(DeviceReq req, void *arg, int32 n)
case DEVICEFINALIZE: case DEVICEFINALIZE:
return finalizeOpenGL(); return finalizeOpenGL();
// TODO: implement subsystems case DEVICEGETNUMSUBSYSTEMS:
return SDL_GetNumVideoDisplays();
case DEVICEGETSUBSSYSTEMINFO:
if (n > SDL_GetNumVideoDisplays())
return 0;
strncpy(((SubSystemInfo*)arg)->name, SDL_GetDisplayName(n), sizeof(SubSystemInfo::name));
return 1;
case DEVICEGETCURRENTSUBSYSTEM:
return glGlobals.currentMonitor;
case DEVICESETSUBSYSTEM:
if (n > SDL_GetNumVideoDisplays())
return 0;
glGlobals.currentMonitor = n;
return 1;
case DEVICEGETNUMVIDEOMODES: case DEVICEGETNUMVIDEOMODES:
return glGlobals.numModes; return glGlobals.numModes;
@ -1977,20 +1993,6 @@ deviceSystemSDL2(DeviceReq req, void *arg, int32 n)
case DEVICESETMULTISAMPLINGLEVELS: case DEVICESETMULTISAMPLINGLEVELS:
glGlobals.numSamples = (uint32)n; glGlobals.numSamples = (uint32)n;
return 1; return 1;
case DEVICEGETNUMSUBSYSTEMS:
return SDL_GetNumVideoDisplays();
case DEVICEGETSUBSSYSTEMINFO:
if (n > SDL_GetNumVideoDisplays())
return 0;
strncpy(((SubSystemInfo*)arg)->name, SDL_GetDisplayName(n), sizeof(SubSystemInfo::name));
return 1;
case DEVICEGETCURRENTSUBSYSTEM:
return 0; // FIXME: Returns first monitor index, instead of current
case DEVICESETSUBSYSTEM:
if (n > SDL_GetNumVideoDisplays())
return 0;
// TODO: Set monitor index to be use
return 1;
default: default:
assert(0 && "not implemented"); assert(0 && "not implemented");
return 0; return 0;

View File

@ -45,8 +45,8 @@ struct GlGlobals
GLFWmonitor *monitor; GLFWmonitor *monitor;
int numMonitors; int numMonitors;
int currentMonitor;
#endif #endif
int currentMonitor;
DisplayMode *modes; DisplayMode *modes;
int numModes; int numModes;