From d0fdf175fd06fed09b92bc2fa248c6b645449ac4 Mon Sep 17 00:00:00 2001 From: Bradley Austin Davis Date: Thu, 31 Aug 2017 15:21:47 -0700 Subject: [PATCH] Fix access to menu on background thread --- .../display-plugins/hmd/HmdDisplayPlugin.cpp | 30 +++++++++---------- .../display-plugins/hmd/HmdDisplayPlugin.h | 2 -- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp index aef5c73fa3..caeba37839 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp @@ -62,24 +62,9 @@ QRect HmdDisplayPlugin::getRecommendedOverlayRect() const { return CompositorHelper::VIRTUAL_SCREEN_RECOMMENDED_OVERLAY_RECT; } -bool HmdDisplayPlugin::beginFrameRender(uint32_t frameIndex) { - if (!_vsyncEnabled && !_disablePreviewItemAdded) { - _container->addMenuItem(PluginType::DISPLAY_PLUGIN, MENU_PATH(), DISABLE_PREVIEW, - [this](bool clicked) { - _disablePreview = clicked; - _container->setBoolSetting("disableHmdPreview", _disablePreview); - if (_disablePreview) { - _clearPreviewFlag = true; - } - }, true, _disablePreview); - _disablePreviewItemAdded = true; - } - return Parent::beginFrameRender(frameIndex); -} - +#define DISABLE_PREVIEW_MENU_ITEM_DELAY_MS 500 bool HmdDisplayPlugin::internalActivate() { - _disablePreviewItemAdded = false; _monoPreview = _container->getBoolSetting("monoPreview", DEFAULT_MONO_VIEW); _clearPreviewFlag = true; _container->addMenuItem(PluginType::DISPLAY_PLUGIN, MENU_PATH(), MONO_PREVIEW, @@ -94,6 +79,19 @@ bool HmdDisplayPlugin::internalActivate() { _disablePreview = _container->getBoolSetting("disableHmdPreview", DEFAULT_DISABLE_PREVIEW || _vsyncEnabled); #endif + QTimer::singleShot(DISABLE_PREVIEW_MENU_ITEM_DELAY_MS, [this] { + if (isActive() && !_vsyncEnabled) { + _container->addMenuItem(PluginType::DISPLAY_PLUGIN, MENU_PATH(), DISABLE_PREVIEW, + [this](bool clicked) { + _disablePreview = clicked; + _container->setBoolSetting("disableHmdPreview", _disablePreview); + if (_disablePreview) { + _clearPreviewFlag = true; + } + }, true, _disablePreview); + } + }); + _container->removeMenu(FRAMERATE); for_each_eye([&](Eye eye) { _eyeInverseProjections[eye] = glm::inverse(_eyeProjections[eye]); diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h index 0827d04922..683c910b7c 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h @@ -51,7 +51,6 @@ protected: virtual void postPreview() {}; virtual void updatePresentPose(); - bool beginFrameRender(uint32_t frameIndex) override; bool internalActivate() override; void internalDeactivate() override; void compositeOverlay() override; @@ -87,7 +86,6 @@ private: ivec4 getViewportForSourceSize(const uvec2& size) const; float getLeftCenterPixel() const; - bool _disablePreviewItemAdded { false }; bool _monoPreview { true }; bool _clearPreviewFlag { false }; gpu::TexturePointer _previewTexture;