X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=main.cpp;h=4287b7e56f8d4faf321f28221d432492ac54c1bd;hb=4a0187ffb4075b4d217b8d9e9c96cac548b199d8;hp=dd94d7335cd80065a5290829404fc140fc7ffd69;hpb=e50b38a01429d41b6681db8675dc8b8f64a20c36;p=nageru diff --git a/main.cpp b/main.cpp index dd94d73..4287b7e 100644 --- a/main.cpp +++ b/main.cpp @@ -5,35 +5,67 @@ extern "C" { #include #include #include -#include - +#include // IWYU pragma: keep #include #include #include #include #include +#include + +#ifdef HAVE_CEF +#include +#include +#include +#include +#endif +#include "basic_stats.h" +#ifdef HAVE_CEF +#include "nageru_cef_app.h" +#endif #include "context.h" #include "flags.h" #include "image_input.h" #include "mainwindow.h" #include "mixer.h" +#ifdef HAVE_CEF +CefRefPtr cef_app; +#endif + int main(int argc, char *argv[]) { - parse_flags(argc, argv); +#ifdef HAVE_CEF + // Let CEF have first priority on parsing the command line, because we might be + // launched as a CEF sub-process. + CefMainArgs main_args(argc, argv); + cef_app = CefRefPtr(new NageruCefApp()); + int err = CefExecuteProcess(main_args, cef_app.get(), nullptr); + if (err >= 0) { + return err; + } + + // CEF wants to use GLib for its main loop, which interferes with Qt's use of it. + // The alternative is trying to integrate CEF into Qt's main loop, but that requires + // fairly extensive cross-thread communication and that parts of CEF runs on Qt's UI + // thread. + setenv("QT_NO_GLIB", "1", 0); +#endif + + parse_flags(PROGRAM_NAGERU, argc, argv); if (global_flags.va_display.empty() || global_flags.va_display[0] != '/') { // We normally use EGL for zerocopy, but if we use VA against DRM // instead of against X11, we turn it off, and then don't need EGL. setenv("QT_XCB_GL_INTEGRATION", "xcb_egl", 0); + using_egl = true; } setlinebuf(stdout); av_register_all(); QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true); - QApplication app(argc, argv); QSurfaceFormat fmt; fmt.setDepthBufferSize(0); @@ -50,10 +82,15 @@ int main(int argc, char *argv[]) QGLFormat::setDefaultFormat(QGLFormat::fromSurfaceFormat(fmt)); + QApplication app(argc, argv); global_share_widget = new QGLWidget(); + if (!global_share_widget->isValid()) { + fprintf(stderr, "Failed to initialize OpenGL. Nageru needs at least OpenGL 3.1 to function properly.\n"); + exit(1); + } MainWindow mainWindow; - mainWindow.resize(QSize(1500, 810)); + mainWindow.resize(QSize(1500, 850)); mainWindow.show(); app.installEventFilter(&mainWindow); // For white balance color picking.