mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-07-19 13:28:25 +02:00
87 lines
2.9 KiB
C++
87 lines
2.9 KiB
C++
//
|
|
// 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 class
|
|
const 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;
|
|
}
|