Merge pull request #7759 from jherico/app_plugin_type

Don't expose raw pointer to the display plugin
This commit is contained in:
Brad Hefta-Gaub 2016-05-11 14:49:22 -07:00
commit d656f61c64
7 changed files with 20 additions and 22 deletions

View file

@ -4949,24 +4949,19 @@ qreal Application::getDevicePixelRatio() {
return (_window && _window->windowHandle()) ? _window->windowHandle()->devicePixelRatio() : 1.0; return (_window && _window->windowHandle()) ? _window->windowHandle()->devicePixelRatio() : 1.0;
} }
DisplayPlugin* Application::getActiveDisplayPlugin() { DisplayPluginPointer Application::getActiveDisplayPlugin() const {
DisplayPlugin* result = nullptr; if (QThread::currentThread() != thread()) {
if (QThread::currentThread() == thread()) {
if (nullptr == _displayPlugin) {
updateDisplayMode();
Q_ASSERT(_displayPlugin);
}
result = _displayPlugin.get();
} else {
std::unique_lock<std::mutex> lock(_displayPluginLock); std::unique_lock<std::mutex> lock(_displayPluginLock);
result = _displayPlugin.get(); return _displayPlugin;
} }
return result;
if (!_displayPlugin) {
const_cast<Application*>(this)->updateDisplayMode();
Q_ASSERT(_displayPlugin);
}
return _displayPlugin;
} }
const DisplayPlugin* Application::getActiveDisplayPlugin() const {
return const_cast<Application*>(this)->getActiveDisplayPlugin();
}
static void addDisplayPluginToMenu(DisplayPluginPointer displayPlugin, bool active = false) { static void addDisplayPluginToMenu(DisplayPluginPointer displayPlugin, bool active = false) {
auto menu = Menu::getInstance(); auto menu = Menu::getInstance();

View file

@ -175,8 +175,7 @@ public:
void setActiveDisplayPlugin(const QString& pluginName); void setActiveDisplayPlugin(const QString& pluginName);
DisplayPlugin* getActiveDisplayPlugin(); DisplayPluginPointer getActiveDisplayPlugin() const;
const DisplayPlugin* getActiveDisplayPlugin() const;
FileLogger* getLogger() const { return _logger; } FileLogger* getLogger() const { return _logger; }
@ -383,7 +382,7 @@ private:
OffscreenGLCanvas* _offscreenContext { nullptr }; OffscreenGLCanvas* _offscreenContext { nullptr };
DisplayPluginPointer _displayPlugin; DisplayPluginPointer _displayPlugin;
std::mutex _displayPluginLock; mutable std::mutex _displayPluginLock;
InputPluginList _activeInputPlugins; InputPluginList _activeInputPlugins;
bool _activatingDisplayPlugin { false }; bool _activatingDisplayPlugin { false };

View file

@ -54,7 +54,7 @@ QOpenGLContext* PluginContainerProxy::getPrimaryContext() {
return qApp->_glWidget->context()->contextHandle(); return qApp->_glWidget->context()->contextHandle();
} }
const DisplayPlugin* PluginContainerProxy::getActiveDisplayPlugin() const { const DisplayPluginPointer PluginContainerProxy::getActiveDisplayPlugin() const {
return qApp->getActiveDisplayPlugin(); return qApp->getActiveDisplayPlugin();
} }

View file

@ -24,7 +24,7 @@ class PluginContainerProxy : public QObject, PluginContainer {
virtual ui::Menu* getPrimaryMenu() override; virtual ui::Menu* getPrimaryMenu() override;
virtual QOpenGLContext* getPrimaryContext() override; virtual QOpenGLContext* getPrimaryContext() override;
virtual bool isForeground() override; virtual bool isForeground() override;
virtual const DisplayPlugin* getActiveDisplayPlugin() const override; virtual const DisplayPluginPointer getActiveDisplayPlugin() const override;
friend class Application; friend class Application;

View file

@ -64,7 +64,7 @@ public:
virtual MainWindow* getPrimaryWindow() = 0; virtual MainWindow* getPrimaryWindow() = 0;
virtual QOpenGLContext* getPrimaryContext() = 0; virtual QOpenGLContext* getPrimaryContext() = 0;
virtual bool isForeground() = 0; virtual bool isForeground() = 0;
virtual const DisplayPlugin* getActiveDisplayPlugin() const = 0; virtual const DisplayPluginPointer getActiveDisplayPlugin() const = 0;
/// settings interface /// settings interface
bool getBoolSetting(const QString& settingName, bool defaultValue); bool getBoolSetting(const QString& settingName, bool defaultValue);

View file

@ -11,6 +11,8 @@
#include "ViveControllerManager.h" #include "ViveControllerManager.h"
#include <QtCore/QProcessEnvironment>
#include <PerfStat.h> #include <PerfStat.h>
#include <PathUtils.h> #include <PathUtils.h>
#include <GeometryCache.h> #include <GeometryCache.h>
@ -48,9 +50,11 @@ static const QString MENU_PATH = MENU_PARENT + ">" + MENU_NAME;
static const QString RENDER_CONTROLLERS = "Render Hand Controllers"; static const QString RENDER_CONTROLLERS = "Render Hand Controllers";
const QString ViveControllerManager::NAME = "OpenVR"; const QString ViveControllerManager::NAME = "OpenVR";
static const QString DEBUG_FLAG("HIFI_DEBUG_OPENVR");
static bool enableDebugOpenVR = QProcessEnvironment::systemEnvironment().contains(DEBUG_FLAG);
bool ViveControllerManager::isSupported() const { bool ViveControllerManager::isSupported() const {
return !isOculusPresent() && vr::VR_IsHmdPresent(); return (enableDebugOpenVR || !isOculusPresent()) && vr::VR_IsHmdPresent();
} }
bool ViveControllerManager::activate() { bool ViveControllerManager::activate() {

View file

@ -91,7 +91,7 @@ public:
virtual QOpenGLContext* getPrimaryContext() override { return nullptr; } virtual QOpenGLContext* getPrimaryContext() override { return nullptr; }
virtual ui::Menu* getPrimaryMenu() { return nullptr; } virtual ui::Menu* getPrimaryMenu() { return nullptr; }
virtual bool isForeground() override { return true; } virtual bool isForeground() override { return true; }
virtual const DisplayPlugin* getActiveDisplayPlugin() const override { return nullptr; } virtual const DisplayPluginPointer getActiveDisplayPlugin() const override { return DisplayPluginPointer(); }
}; };
class MyControllerScriptingInterface : public controller::ScriptingInterface { class MyControllerScriptingInterface : public controller::ScriptingInterface {