New Headless execution mode (DRAFT)

This commit is contained in:
Bruno Herbelin
2024-02-23 23:29:20 +01:00
parent c1aa3c9d4d
commit e3b8ccff9e
4 changed files with 51 additions and 17 deletions

View File

@@ -1398,7 +1398,8 @@ void Control::keyboardCalback(GLFWwindow* w, int key, int, int action, int mods)
{ {
if (UserInterface::manager().keyboardAvailable()) if (UserInterface::manager().keyboardAvailable())
{ {
if ( !mods ) { // keys without modifiers in any windows
if (!mods) {
int _key = layoutKey(key); int _key = layoutKey(key);
Control::manager().input_access_.lock(); Control::manager().input_access_.lock();
if (_key >= GLFW_KEY_A && _key <= GLFW_KEY_Z) { if (_key >= GLFW_KEY_A && _key <= GLFW_KEY_Z) {
@@ -1411,14 +1412,31 @@ void Control::keyboardCalback(GLFWwindow* w, int key, int, int action, int mods)
} }
Control::manager().input_access_.unlock(); Control::manager().input_access_.unlock();
} }
#if defined(APPLE) // keys with modifiers in non-main window
else if ( w != Rendering::manager().mainWindow().window() && else if ( w != Rendering::manager().mainWindow().window() )
key == GLFW_KEY_F && action == GLFW_PRESS && mods == GLFW_MOD_SUPER )
#else
else if ( key == GLFW_KEY_F && action == GLFW_PRESS && mods == GLFW_MOD_CONTROL )
#endif
{ {
Rendering::manager().window(w)->toggleFullscreen(); #if defined(APPLE)
if ( key == GLFW_KEY_F && action == GLFW_PRESS && mods == GLFW_MOD_SUPER )
#else
if ( key == GLFW_KEY_F && action == GLFW_PRESS && mods == GLFW_MOD_CONTROL )
#endif
{
// toggle fullscreen on CTRL+F
Rendering::manager().window(w)->toggleFullscreen();
}
#if defined(APPLE)
else if ( key == GLFW_KEY_Q && action == GLFW_PRESS && mods == GLFW_MOD_SUPER )
#else
else if ( key == GLFW_KEY_Q && action == GLFW_PRESS && mods == GLFW_MOD_CONTROL )
#endif
{
// Quit on CTRL+Q (if no main window)
if (glfwGetWindowAttrib(Rendering::manager().mainWindow().window(), GLFW_VISIBLE)
== GL_FALSE) {
// close rendering manager = quit
Rendering::manager().close();
}
}
} }
} }
} }

View File

@@ -201,13 +201,24 @@ static void OutputWindowEvent( GLFWwindow *w, int button, int action, int)
static void WindowCloseCallback( GLFWwindow* w ) static void WindowCloseCallback( GLFWwindow* w )
{ {
// close main window
if (Rendering::manager().mainWindow().window() == w) { if (Rendering::manager().mainWindow().window() == w) {
if (!UserInterface::manager().TryClose()) if (!UserInterface::manager().TryClose())
glfwSetWindowShouldClose(w, GLFW_FALSE); glfwSetWindowShouldClose(w, GLFW_FALSE);
} }
else if (!glfwWindowShouldClose(w)) { // not main window
Mixer::manager().setView(View::DISPLAYS); else {
Rendering::manager().mainWindow().show(); // if headless (main window not visile)
if (glfwGetWindowAttrib(Rendering::manager().mainWindow().window(), GLFW_VISIBLE)
== GL_FALSE) {
// close rendering manager = quit
Rendering::manager().close();
}
// attempt to close shows display view
else {
Mixer::manager().setView(View::DISPLAYS);
Rendering::manager().mainWindow().show();
}
} }
} }
@@ -397,7 +408,7 @@ bool Rendering::init()
unsigned int err = 0; unsigned int err = 0;
while((err = glGetError()) != GL_NO_ERROR){ while((err = glGetError()) != GL_NO_ERROR){
fprintf(stderr, "394 error %d \n", err ); fprintf(stderr, "GLFW error %d \n", err );
} }
// //
@@ -444,14 +455,15 @@ RenderingWindow* Rendering::window(int index)
} }
void Rendering::show() void Rendering::show(bool show_main_window)
{ {
// show output windows // show output windows
for (auto it = outputs_.begin(); it != outputs_.end(); ++it) for (auto it = outputs_.begin(); it != outputs_.end(); ++it)
it->show(); it->show();
// show main window // show main window
main_.show(); if (show_main_window || Settings::application.num_output_windows < 1 )
main_.show();
// show menu on first show // show menu on first show
UserInterface::manager().showPannel(NAV_MENU); UserInterface::manager().showPannel(NAV_MENU);

View File

@@ -116,7 +116,7 @@ public:
// Initialization OpenGL and GLFW window creation // Initialization OpenGL and GLFW window creation
bool init(); bool init();
// show windows and reset views // show windows and reset views
void show(); void show(bool show_main_window = true);
// true if active rendering window // true if active rendering window
bool isActive(); bool isActive();
// draw one frame // draw one frame

View File

@@ -68,6 +68,7 @@ int main(int argc, char *argv[])
int versionRequested = 0; int versionRequested = 0;
int testRequested = 0; int testRequested = 0;
int cleanRequested = 0; int cleanRequested = 0;
int headlessRequested = 0;
int helpRequested = 0; int helpRequested = 0;
int fontsizeRequested = 0; int fontsizeRequested = 0;
int ret = -1; int ret = -1;
@@ -79,6 +80,8 @@ int main(int argc, char *argv[])
testRequested = 1; testRequested = 1;
} else if (strcmp(argv[i], "--clean") == 0 || strcmp(argv[i], "-C") == 0) { } else if (strcmp(argv[i], "--clean") == 0 || strcmp(argv[i], "-C") == 0) {
cleanRequested = 1; cleanRequested = 1;
} else if (strcmp(argv[i], "--headless") == 0 || strcmp(argv[i], "-L") == 0) {
headlessRequested = 1;
} else if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-H") == 0) { } else if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-H") == 0) {
helpRequested = 1; helpRequested = 1;
} else if (strcmp(argv[i], "--fontsize") == 0 || strcmp(argv[i], "-F") == 0) { } else if (strcmp(argv[i], "--fontsize") == 0 || strcmp(argv[i], "-F") == 0) {
@@ -132,12 +135,13 @@ int main(int argc, char *argv[])
} }
if (helpRequested) { if (helpRequested) {
printf("Usage: %s [-H, --help] [-V, --version] [-F N, --fontsize N] [-T, --test] [-C, --clean] [filename]\n", printf("Usage: %s [-H, --help] [-V, --version] [-F N, --fontsize N] [-L, --headless] [-T, --test] [-C, --clean] [filename]\n",
argv[0]); argv[0]);
printf("Options:\n"); printf("Options:\n");
printf(" --help : Display usage information\n"); printf(" --help : Display usage information\n");
printf(" --version : Display version information\n"); printf(" --version : Display version information\n");
printf(" --fontsize N : Force rendering font size to specified value N\n"); printf(" --fontsize N : Force rendering font size to specified value N\n");
printf(" --headless : Run without GUI\n");
printf(" --test : Run rendering test\n"); printf(" --test : Run rendering test\n");
printf(" --clean : Reset user settings\n"); printf(" --clean : Reset user settings\n");
ret = 0;ret = 0; ret = 0;ret = 0;
@@ -211,7 +215,7 @@ int main(int argc, char *argv[])
// show all windows // show all windows
Rendering::manager().draw(); Rendering::manager().draw();
Rendering::manager().show(); Rendering::manager().show(!headlessRequested);
// try to load file given in argument // try to load file given in argument
Mixer::manager().load(_openfile); Mixer::manager().load(_openfile);