From c269ee6b9498e0e3250491c3ad8d7ad7733b2963 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 26 Jan 2015 11:32:24 -0800 Subject: [PATCH] include ovr mobile sdk and test it --- cmake/android/AndroidManifest.xml.in | 12 +++--- gvr-interface/CMakeLists.txt | 17 ++++++--- gvr-interface/src/GVRInterface.cpp | 56 ++++++++++++++++++++++++++++ gvr-interface/src/GVRInterface.h | 5 +++ 4 files changed, 78 insertions(+), 12 deletions(-) diff --git a/cmake/android/AndroidManifest.xml.in b/cmake/android/AndroidManifest.xml.in index 1e944ae623..354da4fbc1 100755 --- a/cmake/android/AndroidManifest.xml.in +++ b/cmake/android/AndroidManifest.xml.in @@ -6,12 +6,12 @@ - + @@ -44,15 +44,15 @@ - + - - + android:configChanges="screenSize|orientation|keyboardHidden|keyboard"> + diff --git a/gvr-interface/CMakeLists.txt b/gvr-interface/CMakeLists.txt index 372ca68308..8b11dc16e6 100644 --- a/gvr-interface/CMakeLists.txt +++ b/gvr-interface/CMakeLists.txt @@ -19,12 +19,17 @@ set(ANDROID_API_LEVEL 19) set(ANDROID_APK_PACKAGE io.highfidelity.gvrinterface) # we need VRLib, so add a project.properties to our apk build folder that says that -# find_path(_OCULUS_VRLIB_DIR NAME VRLib.vcxproj HINTS "/ovr_mobile_sdk/VRLib/") -# if (NOT _OCULUS_VRLIB_DIR) -# message(FATAL_ERROR "Could not find Oculus Mobile SDK VRLib.") -# endif() +find_path(_OCULUS_VRLIB_DIR NAME VRLib.vcxproj HINTS "/ovr_mobile_sdk/VRLib/") +if (NOT _OCULUS_VRLIB_DIR) + message(FATAL_ERROR "Could not find Oculus Mobile SDK VRLib.") +endif() -# file(RELATIVE_PATH RELATIVE_VRLIB_PATH ${ANDROID_APK_OUTPUT_DIR} "${_OCULUS_VRLIB_DIR}") -# file(WRITE "${ANDROID_APK_BUILD_DIR}/project.properties" "android.library.reference.1=${RELATIVE_VRLIB_PATH}") +file(RELATIVE_PATH RELATIVE_VRLIB_PATH ${ANDROID_APK_OUTPUT_DIR} "${_OCULUS_VRLIB_DIR}") + +include_directories(SYSTEM "${_OCULUS_VRLIB_DIR}/jni") +include_directories(SYSTEM "${_OCULUS_VRLIB_DIR}/jni/LibOVR/Include") +include_directories(SYSTEM "${_OCULUS_VRLIB_DIR}/jni/LibOVR/Src") + +file(WRITE "${ANDROID_APK_BUILD_DIR}/project.properties" "android.library.reference.1=${RELATIVE_VRLIB_PATH}") qt_create_apk() \ No newline at end of file diff --git a/gvr-interface/src/GVRInterface.cpp b/gvr-interface/src/GVRInterface.cpp index c3b7a85b01..aeddea0356 100644 --- a/gvr-interface/src/GVRInterface.cpp +++ b/gvr-interface/src/GVRInterface.cpp @@ -11,6 +11,11 @@ #include +#include +#include +#include +#include + #include "GVRMainWindow.h" #include "RenderingClient.h" @@ -20,4 +25,55 @@ GVRInterface::GVRInterface(int argc, char* argv[]) : QApplication(argc, argv) { _client = new RenderingClient(this); + + connect(this, &QGuiApplication::applicationStateChanged, this, &GVRInterface::handleApplicationStateChange); +} + +void GVRInterface::handleApplicationStateChange(Qt::ApplicationState state) { + switch(state) { + case Qt::ApplicationActive: + qDebug() << "The application is active."; + resumeOVR(); + break; + case Qt::ApplicationSuspended: + qDebug() << "The application is being suspended."; + pauseOVR(); + break; + default: + break; + } +} + +void GVRInterface::resumeOVR() { + // Reload local preferences, in case we are coming back from a + // switch to the dashboard that changed them. + ovr_UpdateLocalPreferences(); + + // Default vrModeParms + ovrModeParms vrModeParms; + ovrHmdInfo hmdInfo; + + vrModeParms.AsynchronousTimeWarp = true; + vrModeParms.AllowPowerSave = true; + vrModeParms.DistortionFileName = NULL; + vrModeParms.EnableImageServer = false; + vrModeParms.CpuLevel = 2; + vrModeParms.GpuLevel = 2; + vrModeParms.GameThreadTid = 0; + + const char* cpuLevelStr = ovr_GetLocalPreferenceValueForKey( LOCAL_PREF_DEV_CPU_LEVEL, "-1" ); + const int cpuLevel = atoi( cpuLevelStr ); + if ( cpuLevel >= 0 ) { + vrModeParms.CpuLevel = cpuLevel; + qDebug() << "Local Preferences: Setting cpuLevel" << vrModeParms.CpuLevel; + } + + const char* gpuLevelStr = ovr_GetLocalPreferenceValueForKey( LOCAL_PREF_DEV_GPU_LEVEL, "-1" ); + const int gpuLevel = atoi( gpuLevelStr ); + if ( gpuLevel >= 0 ) { + vrModeParms.GpuLevel = gpuLevel; + qDebug() << "Local Preferences: Setting gpuLevel" << vrModeParms.GpuLevel; + } + + ovr_EnterVrMode(vrModeParms, &hmdInfo); } diff --git a/gvr-interface/src/GVRInterface.h b/gvr-interface/src/GVRInterface.h index 87738a10d8..fc488396a6 100644 --- a/gvr-interface/src/GVRInterface.h +++ b/gvr-interface/src/GVRInterface.h @@ -28,7 +28,12 @@ public: RenderingClient* getClient() { return _client; } +private slots: + void handleApplicationStateChange(Qt::ApplicationState state); private: + void resumeOVR(); + void pauseOVR(); + RenderingClient* _client; };