feat(launcher): Add cvar for selecting an output monitor
Some checks failed
Ubuntu Cross to Win64 / Cross Compile with ming64 (1.4.0, ubuntu-latest) (push) Failing after 1m17s
Some checks failed
Ubuntu Cross to Win64 / Cross Compile with ming64 (1.4.0, ubuntu-latest) (push) Failing after 1m17s
This commit is contained in:
parent
f232a94f92
commit
1a389c3759
@ -27,6 +27,7 @@ RT_CVAR_I(rt_WindowWidth, "The window width. (Default: 1024)", 1024);
|
||||
RT_CVAR_I(rt_WindowHeight, "The window height. (Default: 768)", 768);
|
||||
RT_CVAR_I(rt_WindowMode, "The window mode. Available options: 0 (=Windowed), 1 (=Borderless Fullscreen), 2 (=Exclusive Fullscreen) (Default: 0)", 0);
|
||||
RT_CVAR_I(rt_FullscreenRefreshRate, "Requested refresh rate for exclusive fullscreen. Set to 0 to use the monitors current setting. (Default: 0)", 0);
|
||||
RT_CVAR_S(rt_Monitor, "Name of the monitor on which the window should be created. Leave empty to use the primary monitor. (Default: "")", "");
|
||||
|
||||
RT_CVAR_S(rt_GameLib, "Path to the game library. Only usable in internal builds. (Default: "")", "");
|
||||
|
||||
@ -54,6 +55,7 @@ static void SetupConfig(void) {
|
||||
rtRegisterCVAR(&rt_WindowWidth);
|
||||
rtRegisterCVAR(&rt_WindowHeight);
|
||||
rtRegisterCVAR(&rt_WindowMode);
|
||||
rtRegisterCVAR(&rt_Monitor);
|
||||
|
||||
rtRegisterCVAR(&rt_GameLib);
|
||||
|
||||
@ -112,6 +114,35 @@ out:
|
||||
};
|
||||
}
|
||||
|
||||
static void DisplayMonitors(void) {
|
||||
int count = 0;
|
||||
GLFWmonitor **monitors = glfwGetMonitors(&count);
|
||||
rtLog("LAUNCHER", "Available monitors:");
|
||||
for (int i = 0; i < count; ++i) {
|
||||
const char *name =glfwGetMonitorName(monitors[i]);
|
||||
if (monitors[i] != glfwGetPrimaryMonitor())
|
||||
rtLog("LAUNCHER", " - %s", name);
|
||||
else
|
||||
rtLog("LAUNCHER", " - %s (Primary)", name);
|
||||
}
|
||||
}
|
||||
|
||||
static GLFWmonitor *ChooseMonitor(void) {
|
||||
GLFWmonitor *monitor = glfwGetPrimaryMonitor();
|
||||
int count = 0;
|
||||
|
||||
if (strcmp(rt_Monitor.s, "") == 0) {
|
||||
return monitor;
|
||||
}
|
||||
GLFWmonitor **monitors = glfwGetMonitors(&count);
|
||||
for (int i = 0; i < count; ++i) {
|
||||
const char *name = glfwGetMonitorName(monitors[i]);
|
||||
if (strcmp(name, rt_Monitor.s) == 0)
|
||||
return monitors[i];
|
||||
}
|
||||
return monitor;
|
||||
}
|
||||
|
||||
static void GlfwErrorCB(int err, const char *desc) {
|
||||
rtReportError("GLFW", "GLFW Error %d: %s", err, desc);
|
||||
}
|
||||
@ -126,6 +157,7 @@ static int Entry(int argc, char **argv) {
|
||||
rtShutdownRuntime();
|
||||
return -1;
|
||||
}
|
||||
DisplayMonitors();
|
||||
|
||||
/* Load the renderer library.
|
||||
* We need it before window creation, to give it an opportunity to register its cvars */
|
||||
@ -152,6 +184,8 @@ static int Entry(int argc, char **argv) {
|
||||
LoadGameAndRendererConfig();
|
||||
|
||||
/* Create the window */
|
||||
GLFWmonitor *monitor = ChooseMonitor();
|
||||
|
||||
GLFWwindow *window = NULL;
|
||||
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
|
||||
glfwWindowHint(GLFW_FOCUSED, GLFW_TRUE);
|
||||
@ -164,7 +198,7 @@ static int Entry(int argc, char **argv) {
|
||||
glfwWindowHint(GLFW_GREEN_BITS, mode->greenBits);
|
||||
glfwWindowHint(GLFW_BLUE_BITS, mode->blueBits);
|
||||
glfwWindowHint(GLFW_REFRESH_RATE, mode->refreshRate);
|
||||
window = glfwCreateWindow(mode->width, mode->height, rt_WindowTitle.s, glfwGetPrimaryMonitor(), NULL);
|
||||
window = glfwCreateWindow(mode->width, mode->height, rt_WindowTitle.s, monitor, NULL);
|
||||
}
|
||||
else if (rt_WindowMode.i == WINDOW_MODE_FULLSCREEN) {
|
||||
int refresh_rate = rt_FullscreenRefreshRate.i;
|
||||
@ -190,7 +224,7 @@ static int Entry(int argc, char **argv) {
|
||||
}
|
||||
}
|
||||
glfwWindowHint(GLFW_REFRESH_RATE, refresh_rate);
|
||||
window = glfwCreateWindow(rt_WindowWidth.i, rt_WindowHeight.i, rt_WindowTitle.s, glfwGetPrimaryMonitor(), NULL);
|
||||
window = glfwCreateWindow(rt_WindowWidth.i, rt_WindowHeight.i, rt_WindowTitle.s, monitor, NULL);
|
||||
}
|
||||
else {
|
||||
window = glfwCreateWindow(rt_WindowWidth.i, rt_WindowHeight.i, rt_WindowTitle.s, NULL, NULL);
|
||||
@ -217,11 +251,21 @@ static int Entry(int argc, char **argv) {
|
||||
renderer_init_info.is_fullscreen = rt_WindowMode.i != WINDOW_MODE_WINDOWED;
|
||||
glfwGetFramebufferSize(window, (int*)&renderer_init_info.width, (int*)&renderer_init_info.height);
|
||||
if (g_renderer.Init(&renderer_init_info) != RT_SUCCESS) {
|
||||
|
||||
rtReportError("LAUNCHER", "Failed to initialize the renderer.");
|
||||
if (_game_lib)
|
||||
rtCloseLib(_game_lib);
|
||||
glfwTerminate();
|
||||
rtShutdownRuntime();
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (game.Init() != RT_SUCCESS) {
|
||||
|
||||
rtReportError("LAUNCHER", "Failed to initialize the renderer.");
|
||||
if (_game_lib)
|
||||
rtCloseLib(_game_lib);
|
||||
glfwTerminate();
|
||||
rtShutdownRuntime();
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (!glfwWindowShouldClose(window)) {
|
||||
|
Loading…
Reference in New Issue
Block a user