Resolve the comments of @ZappoMan.

This commit is contained in:
volansystech 2017-05-29 15:53:33 +05:30
parent a2851b5bcb
commit 0920dbc1a8
7 changed files with 92 additions and 94 deletions

View file

@ -244,6 +244,8 @@ static const QString DESKTOP_LOCATION = QStandardPaths::writableLocation(QStanda
Setting::Handle<int> maxOctreePacketsPerSecond("maxOctreePPS", DEFAULT_MAX_OCTREE_PPS); Setting::Handle<int> maxOctreePacketsPerSecond("maxOctreePPS", DEFAULT_MAX_OCTREE_PPS);
static const QString MARKETPLACE_CDN_HOSTNAME = "mpassets.highfidelity.com"; static const QString MARKETPLACE_CDN_HOSTNAME = "mpassets.highfidelity.com";
static const int INTERVAL_TO_CHECK_HMD_MOUNTED_STATUS = 500; // milliseconds
static const QString OCULUS_RIFT_DISPLAY_PLUGIN_NAME = "Oculus Rift";
const QHash<QString, Application::AcceptURLMethod> Application::_acceptedExtensions { const QHash<QString, Application::AcceptURLMethod> Application::_acceptedExtensions {
{ SVO_EXTENSION, &Application::importSVOFromURL }, { SVO_EXTENSION, &Application::importSVOFromURL },
@ -1338,19 +1340,20 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
properties["active_display_plugin"] = getActiveDisplayPlugin()->getName(); properties["active_display_plugin"] = getActiveDisplayPlugin()->getName();
properties["using_hmd"] = isHMDMode(); properties["using_hmd"] = isHMDMode();
if (isOculusRiftPluginAvailable()) { if (isHMDPluginAvailable()) {
// If Oculus Rift Plugin is available and current display plugin is not Oculus Rift // Currently, autoswitch display mode support is only for Oculus Rift.
// then startOculusRiftStandBySession to listen Oculus HMD Mounted status. // If HMD Plugin is available and current display plugin is not HMD plugin
if (getActiveDisplayPlugin()->getName() != "Oculus Rift" && // then startHMDStandBySession to listen HMD Mounted status.
!oculusRiftPlugin->isStandBySessionActive()) { if (getActiveDisplayPlugin()->getName() != _hmdPluginName &&
startOculusRiftStandBySession(); !_hmdPlugin->isStandBySessionActive()) {
} startHMDStandBySession();
// Poll periodically to check whether the user has worn Oculus HMD or not. And switch Display mode accordingly. }
// If the user wear Oculus HMD then switch to VR mode. If the user removes Oculus HMD then switch to Desktop mode. // Poll periodically to check whether the user has worn HMD or not. And switch Display mode accordingly.
QTimer *switchDisplayModeTimer = new QTimer(this); // If the user wear HMD then switch to VR mode. If the user removes HMD then switch to Desktop mode.
connect(switchDisplayModeTimer, SIGNAL(timeout()), this, SLOT(switchDisplayModeForOculus())); QTimer *switchDisplayModeTimer = new QTimer(this);
switchDisplayModeTimer->start(500); connect(switchDisplayModeTimer, SIGNAL(timeout()), this, SLOT(switchDisplayMode()));
} switchDisplayModeTimer->start(INTERVAL_TO_CHECK_HMD_MOUNTED_STATUS);
}
auto glInfo = getGLContextData(); auto glInfo = getGLContextData();
properties["gl_info"] = glInfo; properties["gl_info"] = glInfo;
@ -1581,8 +1584,8 @@ void Application::aboutToQuit() {
} }
getActiveDisplayPlugin()->deactivate(); getActiveDisplayPlugin()->deactivate();
if (oculusRiftPlugin && oculusRiftPlugin->isStandBySessionActive()) { if (_hmdPlugin && _hmdPlugin->isStandBySessionActive()) {
oculusRiftPlugin->endStandBySession(); _hmdPlugin->endStandBySession();
} }
// Hide Running Scripts dialog so that it gets destroyed in an orderly manner; prevents warnings at shutdown. // Hide Running Scripts dialog so that it gets destroyed in an orderly manner; prevents warnings at shutdown.
DependencyManager::get<OffscreenUi>()->hide("RunningScripts"); DependencyManager::get<OffscreenUi>()->hide("RunningScripts");
@ -6846,54 +6849,48 @@ void Application::updateDisplayMode() {
Q_ASSERT_X(_displayPlugin, "Application::updateDisplayMode", "could not find an activated display plugin"); Q_ASSERT_X(_displayPlugin, "Application::updateDisplayMode", "could not find an activated display plugin");
} }
bool Application::isOculusRiftPluginAvailable() { bool Application::isHMDPluginAvailable() {
bool isOculusRiftPluginAvailable = false; bool isHMDEnabledPluginAvailable = false;
auto displayPlugins = PluginManager::getInstance()->getDisplayPlugins(); auto displayPlugins = PluginManager::getInstance()->getDisplayPlugins();
// Default to the first item on the list, in case none of the menu items match // Currently, autoswitch display mode support is only for Oculus Rift.
DisplayPluginPointer defaultplugin = displayPlugins.at(0); foreach(DisplayPluginPointer displayPlugin, PluginManager::getInstance()->getDisplayPlugins()) {
if (defaultplugin->isHmd() && defaultplugin->getName() == "Oculus Rift") { if (displayPlugin->isHmd() && displayPlugin->getName() == OCULUS_RIFT_DISPLAY_PLUGIN_NAME) {
oculusRiftPlugin = defaultplugin; _hmdPlugin = displayPlugin;
return true; _hmdPluginName = displayPlugin->getName();
} _hmdMountedStatus = displayPlugin->isDisplayVisible();
// Iterate to check If Oculus Rift Plugin is available isHMDEnabledPluginAvailable = true;
foreach(DisplayPluginPointer displayPlugin, PluginManager::getInstance()->getDisplayPlugins()) { break;
QString pluginname = displayPlugin->getName(); }
if (displayPlugin->isHmd() && pluginname == "Oculus Rift") { }
oculusRiftPlugin = displayPlugin; return isHMDEnabledPluginAvailable;
_oculusHMDMountedStatus = displayPlugin->isDisplayVisible();
isOculusRiftPluginAvailable = true;
break;
}
}
return isOculusRiftPluginAvailable;
} }
void Application::switchDisplayModeForOculus() { void Application::switchDisplayMode() {
bool currenthmdMountedStatus = oculusRiftPlugin->isDisplayVisible(); bool currentHMDMountedStatus = _hmdPlugin->isDisplayVisible();
if (currenthmdMountedStatus != _oculusHMDMountedStatus) { if (currentHMDMountedStatus != _hmdMountedStatus) {
// Switch to respective mode as soon as currenthmdMountedStatus changes // Switch to respective mode as soon as currenthmdMountedStatus changes
if (currenthmdMountedStatus == false && _oculusHMDMountedStatus == true) { if (currentHMDMountedStatus == false && _hmdMountedStatus == true) {
qCDebug(interfaceapp) << "Switching from HMD to desktop mode"; qCDebug(interfaceapp) << "Switching from HMD to desktop mode";
setActiveDisplayPlugin("Desktop"); setActiveDisplayPlugin("Desktop");
startOculusRiftStandBySession(); startHMDStandBySession();
} }
if (currenthmdMountedStatus == true && _oculusHMDMountedStatus == false) { if (currentHMDMountedStatus == true && _hmdMountedStatus == false) {
qCDebug(interfaceapp) << "Switching from Desktop to HMD mode"; qCDebug(interfaceapp) << "Switching from Desktop to HMD mode";
endOculusRiftStandBySession(); endHMDStandBySession();
setActiveDisplayPlugin("Oculus Rift"); setActiveDisplayPlugin(_hmdPluginName);
} }
} }
_oculusHMDMountedStatus = currenthmdMountedStatus; _hmdMountedStatus = currentHMDMountedStatus;
} }
bool Application::startOculusRiftStandBySession() { bool Application::startHMDStandBySession() {
bool isStandBySessionStarted = oculusRiftPlugin->startStandBySession(); bool isStandBySessionStarted = _hmdPlugin->startStandBySession();
qCDebug(interfaceapp) << "startOculusRiftStandBySession: " << isStandBySessionStarted; qCDebug(interfaceapp) << "startHMDStandBySession: " << isStandBySessionStarted;
return isStandBySessionStarted; return isStandBySessionStarted;
} }
void Application::endOculusRiftStandBySession() { void Application::endHMDStandBySession() {
oculusRiftPlugin->endStandBySession(); _hmdPlugin->endStandBySession();
} }
mat4 Application::getEyeProjection(int eye) const { mat4 Application::getEyeProjection(int eye) const {

View file

@ -442,7 +442,7 @@ private slots:
void addAssetToWorldErrorTimeout(); void addAssetToWorldErrorTimeout();
void handleSandboxStatus(QNetworkReply* reply); void handleSandboxStatus(QNetworkReply* reply);
void switchDisplayModeForOculus(); void switchDisplayMode();
private: private:
static void initDisplay(); static void initDisplay();
void init(); void init();
@ -684,11 +684,12 @@ private:
SharedSoundPointer _snapshotSound; SharedSoundPointer _snapshotSound;
DisplayPluginPointer oculusRiftPlugin; DisplayPluginPointer _hmdPlugin; // HMD Enabled Plugin
bool isOculusRiftPluginAvailable(); QString _hmdPluginName;
bool _oculusHMDMountedStatus; // Keep track of Oculus Rift HMDMounted Flag bool isHMDPluginAvailable();
bool startOculusRiftStandBySession(); bool _hmdMountedStatus; // Check HMD Mounted status
void endOculusRiftStandBySession(); bool startHMDStandBySession();
void endHMDStandBySession();
}; };

View file

@ -339,15 +339,15 @@ void OpenGLDisplayPlugin::deactivate() {
} }
bool OpenGLDisplayPlugin::startStandBySession() { bool OpenGLDisplayPlugin::startStandBySession() {
if (!activateStandBySession()) { if (!activateStandBySession()) {
return false; return false;
} }
return Parent::startStandBySession(); return Parent::startStandBySession();
} }
void OpenGLDisplayPlugin::endStandBySession() { void OpenGLDisplayPlugin::endStandBySession() {
deactivateStandBySession(); deactivateStandBySession();
return Parent::endStandBySession(); return Parent::endStandBySession();
} }
void OpenGLDisplayPlugin::customizeContext() { void OpenGLDisplayPlugin::customizeContext() {

View file

@ -42,8 +42,8 @@ public:
// between the main thread and the presentation thread // between the main thread and the presentation thread
bool activate() override final; bool activate() override final;
void deactivate() override final; void deactivate() override final;
bool startStandBySession() override final; bool startStandBySession() override final;
void endStandBySession() override final; void endStandBySession() override final;
bool eventFilter(QObject* receiver, QEvent* event) override; bool eventFilter(QObject* receiver, QEvent* event) override;
bool isDisplayVisible() const override { return true; } bool isDisplayVisible() const override { return true; }
@ -102,9 +102,9 @@ protected:
virtual bool internalActivate() { return true; } virtual bool internalActivate() { return true; }
virtual void internalDeactivate() {} virtual void internalDeactivate() {}
// Returns true on successful activation of standby session // Returns true on successful activation of standby session
virtual bool activateStandBySession() { return true; } virtual bool activateStandBySession() { return true; }
virtual void deactivateStandBySession() {} virtual void deactivateStandBySession() {}
// Plugin specific functionality to send the composed scene to the output window or device // Plugin specific functionality to send the composed scene to the output window or device
virtual void internalPresent(); virtual void internalPresent();

View file

@ -53,18 +53,18 @@ public:
virtual bool isActive() { virtual bool isActive() {
return _active; return _active;
} }
virtual bool startStandBySession() { virtual bool startStandBySession() {
_standbysessionstatus = true; _standbysessionstatus = true;
return _standbysessionstatus; return _standbysessionstatus;
} }
virtual void endStandBySession() { virtual void endStandBySession() {
_standbysessionstatus = false; _standbysessionstatus = false;
} }
virtual bool isStandBySessionActive() { virtual bool isStandBySessionActive() {
return _standbysessionstatus; return _standbysessionstatus;
} }
/** /**
* Called by the application during it's idle phase. If the plugin needs to do * Called by the application during it's idle phase. If the plugin needs to do
@ -85,7 +85,7 @@ signals:
protected: protected:
bool _active { false }; bool _active { false };
bool _standbysessionstatus { false }; bool _standbysessionstatus { false };
PluginContainer* _container { nullptr }; PluginContainer* _container { nullptr };
static const char* UNKNOWN_PLUGIN_ID; static const char* UNKNOWN_PLUGIN_ID;

View file

@ -128,15 +128,15 @@ void OculusBaseDisplayPlugin::internalDeactivate() {
} }
bool OculusBaseDisplayPlugin::activateStandBySession() { bool OculusBaseDisplayPlugin::activateStandBySession() {
_session = acquireOculusSession(); _session = acquireOculusSession();
if (!_session) { if (!_session) {
return false; return false;
} }
return true; return true;
} }
void OculusBaseDisplayPlugin::deactivateStandBySession() { void OculusBaseDisplayPlugin::deactivateStandBySession() {
releaseOculusSession(); releaseOculusSession();
_session = nullptr; _session = nullptr;
} }
void OculusBaseDisplayPlugin::updatePresentPose() { void OculusBaseDisplayPlugin::updatePresentPose() {
//mat4 sensorResetMat; //mat4 sensorResetMat;

View file

@ -33,8 +33,8 @@ protected:
void uncustomizeContext() override; void uncustomizeContext() override;
bool internalActivate() override; bool internalActivate() override;
void internalDeactivate() override; void internalDeactivate() override;
bool activateStandBySession() override; bool activateStandBySession() override;
void deactivateStandBySession() override; void deactivateStandBySession() override;
void updatePresentPose() override; void updatePresentPose() override;
protected: protected: