87 lines · 2.9 KB · C++
RawDownload
////  Created by Bradley Austin Davis on 2015/05/30//  Copyright 2015 High Fidelity, Inc.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// #include "DisplayPlugins.h" #include "Application.h" #include <display-plugins/DisplayPlugin.h>#include <display-plugins/NullDisplayPlugin.h>#include <display-plugins/stereo/SideBySideStereoDisplayPlugin.h>#include <display-plugins/stereo/InterleavedStereoDisplayPlugin.h>#include <display-plugins/Basic2DWindowOpenGLDisplayPlugin.h> #include <display-plugins/oculus/Oculus_0_6_DisplayPlugin.h>#include <display-plugins/oculus/Oculus_0_5_DisplayPlugin.h>   #include <display-plugins/openvr/OpenVrDisplayPlugin.h>  static void addDisplayPluginToMenu(DisplayPluginPointer displayPlugin, bool active = false) {    auto menu = Menu::getInstance();    QString name = displayPlugin->getName();    Q_ASSERT(!menu->menuItemExists(MenuOption::OutputMenu, name));     static QActionGroup* displayPluginGroup = nullptr;    if (!displayPluginGroup) {        displayPluginGroup = new QActionGroup(menu);        displayPluginGroup->setExclusive(true);    }    auto parent = menu->getMenu(MenuOption::OutputMenu);    auto action = menu->addActionToQMenuAndActionHash(parent,        name, 0, qApp,        SLOT(updateDisplayMode()));    action->setCheckable(true);    action->setChecked(active);    displayPluginGroup->addAction(action);    Q_ASSERT(menu->menuItemExists(MenuOption::OutputMenu, name));} // FIXME move to a plugin manager classconst DisplayPluginList& getDisplayPlugins() {    static DisplayPluginList RENDER_PLUGINS;    static bool init = false;    if (!init) {        init = true;         DisplayPlugin* PLUGIN_POOL[] = {            new Basic2DWindowOpenGLDisplayPlugin(),            new NullDisplayPlugin(),            new SideBySideStereoDisplayPlugin(),//            new InterleavedStereoDisplayPlugin(),#if (OVR_MAJOR_VERSION == 5)            new Oculus_0_5_DisplayPlugin(),#else            new Oculus_0_6_DisplayPlugin(),#endif #ifndef Q_OS_MAC            new OpenVrDisplayPlugin(),#endif            nullptr        };        for (int i = 0; PLUGIN_POOL[i]; ++i) {            DisplayPlugin * plugin = PLUGIN_POOL[i];            if (plugin->isSupported()) {                plugin->init();                QObject::connect(plugin, &DisplayPlugin::requestRender, [] {                    qApp->paintGL();                });                QObject::connect(plugin, &DisplayPlugin::recommendedFramebufferSizeChanged, [](const QSize & size) {                    qApp->resizeGL();                });                DisplayPluginPointer pluginPointer(plugin);                addDisplayPluginToMenu(pluginPointer, plugin == *PLUGIN_POOL);                RENDER_PLUGINS.push_back(pluginPointer);            }        }    }    return RENDER_PLUGINS;}