mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-07-24 02:54:08 +02:00
Merge pull request #9318 from birarda/ovr-platform-entitlement
handle OVR Platform entitlement checks
This commit is contained in:
commit
1993e358d6
7 changed files with 171 additions and 35 deletions
32
cmake/externals/LibOVRPlatform/CMakeLists.txt
vendored
Normal file
32
cmake/externals/LibOVRPlatform/CMakeLists.txt
vendored
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
include(ExternalProject)
|
||||||
|
include(SelectLibraryConfigurations)
|
||||||
|
|
||||||
|
set(EXTERNAL_NAME LibOVRPlatform)
|
||||||
|
|
||||||
|
string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER)
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
|
||||||
|
ExternalProject_Add(
|
||||||
|
${EXTERNAL_NAME}
|
||||||
|
URL http://hifi-public.s3.amazonaws.com/dependencies/OVRPlatformSDK_v1.10.0.zip
|
||||||
|
URL_MD5 e6c8264af16d904e6506acd5172fa0a9
|
||||||
|
CONFIGURE_COMMAND ""
|
||||||
|
BUILD_COMMAND ""
|
||||||
|
INSTALL_COMMAND ""
|
||||||
|
LOG_DOWNLOAD 1
|
||||||
|
)
|
||||||
|
|
||||||
|
ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR)
|
||||||
|
|
||||||
|
if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
|
||||||
|
set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${SOURCE_DIR}/Windows/LibOVRPlatform64_1.lib CACHE TYPE INTERNAL)
|
||||||
|
else()
|
||||||
|
set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${SOURCE_DIR}/Windows/LibOVRPlatform32_1.lib CACHE TYPE INTERNAL)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${SOURCE_DIR}/Include CACHE TYPE INTERNAL)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# Hide this external target (for ide users)
|
||||||
|
set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals")
|
44
cmake/modules/FindLibOVRPlatform.cmake
Normal file
44
cmake/modules/FindLibOVRPlatform.cmake
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
#
|
||||||
|
# FindLibOVRPlatform.cmake
|
||||||
|
#
|
||||||
|
# Try to find the LibOVRPlatform library to use the Oculus Platform SDK
|
||||||
|
#
|
||||||
|
# You must provide a LIBOVRPLATFORM_ROOT_DIR which contains Windows and Include directories
|
||||||
|
#
|
||||||
|
# Once done this will define
|
||||||
|
#
|
||||||
|
# LIBOVRPLATFORM_FOUND - system found Oculus Platform SDK
|
||||||
|
# LIBOVRPLATFORM_INCLUDE_DIRS - the Oculus Platform include directory
|
||||||
|
# LIBOVRPLATFORM_LIBRARIES - Link this to use Oculus Platform
|
||||||
|
#
|
||||||
|
# Created on December 16, 2016 by Stephen Birarda
|
||||||
|
# Copyright 2016 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
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
# setup hints for LIBOVRPLATFORM search
|
||||||
|
include("${MACRO_DIR}/HifiLibrarySearchHints.cmake")
|
||||||
|
hifi_library_search_hints("LibOVRPlatform")
|
||||||
|
|
||||||
|
find_path(LIBOVRPLATFORM_INCLUDE_DIRS OVR_Platform.h PATH_SUFFIXES Include HINTS ${LIBOVRPLATFORM_SEARCH_DIRS})
|
||||||
|
|
||||||
|
if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
|
||||||
|
set(_LIB_NAME LibOVRPlatform64_1.lib)
|
||||||
|
else()
|
||||||
|
set(_LIB_NAME LibOVRPlatform32_1.lib)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_library(LIBOVRPLATFORM_LIBRARY_RELEASE NAMES ${_LIB_NAME} PATH_SUFFIXES Windows HINTS ${LIBOVRPLATFORM_SEARCH_DIRS})
|
||||||
|
|
||||||
|
include(SelectLibraryConfigurations)
|
||||||
|
select_library_configurations(LIBOVRPLATFORM)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(LIBOVRPLATFORM DEFAULT_MSG LIBOVRPLATFORM_INCLUDE_DIRS LIBOVRPLATFORM_LIBRARIES)
|
||||||
|
|
||||||
|
mark_as_advanced(LIBOVRPLATFORM_INCLUDE_DIRS LIBOVRPLATFORM_LIBRARIES LIBOVRPLATFORM_SEARCH_DIRS)
|
||||||
|
endif ()
|
|
@ -637,6 +637,9 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
|
||||||
qCDebug(interfaceapp) << "[VERSION] We will use DEVELOPMENT global services.";
|
qCDebug(interfaceapp) << "[VERSION] We will use DEVELOPMENT global services.";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// set the OCULUS_STORE property so the oculus plugin can know if we ran from the Oculus Store
|
||||||
|
static const QString OCULUS_STORE_ARG = "--oculus-store";
|
||||||
|
setProperty(hifi::properties::OCULUS_STORE, arguments().indexOf(OCULUS_STORE_ARG) != -1);
|
||||||
|
|
||||||
static const QString NO_UPDATER_ARG = "--no-updater";
|
static const QString NO_UPDATER_ARG = "--no-updater";
|
||||||
static const bool noUpdater = arguments().indexOf(NO_UPDATER_ARG) != -1;
|
static const bool noUpdater = arguments().indexOf(NO_UPDATER_ARG) != -1;
|
||||||
|
|
|
@ -13,6 +13,7 @@ namespace hifi { namespace properties {
|
||||||
const char* CRASHED = "com.highfidelity.crashed";
|
const char* CRASHED = "com.highfidelity.crashed";
|
||||||
const char* STEAM = "com.highfidelity.launchedFromSteam";
|
const char* STEAM = "com.highfidelity.launchedFromSteam";
|
||||||
const char* LOGGER = "com.highfidelity.logger";
|
const char* LOGGER = "com.highfidelity.logger";
|
||||||
|
const char* OCULUS_STORE = "com.highfidelity.oculusStore";
|
||||||
const char* TEST = "com.highfidelity.test";
|
const char* TEST = "com.highfidelity.test";
|
||||||
const char* TRACING = "com.highfidelity.tracing";
|
const char* TRACING = "com.highfidelity.tracing";
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ namespace hifi { namespace properties {
|
||||||
extern const char* CRASHED;
|
extern const char* CRASHED;
|
||||||
extern const char* STEAM;
|
extern const char* STEAM;
|
||||||
extern const char* LOGGER;
|
extern const char* LOGGER;
|
||||||
|
extern const char* OCULUS_STORE;
|
||||||
extern const char* TEST;
|
extern const char* TEST;
|
||||||
extern const char* TRACING;
|
extern const char* TRACING;
|
||||||
|
|
||||||
|
|
|
@ -11,12 +11,18 @@ if (WIN32)
|
||||||
# we're using static GLEW, so define GLEW_STATIC
|
# we're using static GLEW, so define GLEW_STATIC
|
||||||
add_definitions(-DGLEW_STATIC)
|
add_definitions(-DGLEW_STATIC)
|
||||||
|
|
||||||
|
# if we were passed an Oculus App ID for entitlement checks, send that along
|
||||||
|
if (DEFINED ENV{OCULUS_APP_ID})
|
||||||
|
add_definitions(-DOCULUS_APP_ID="$ENV{OCULUS_APP_ID}")
|
||||||
|
endif ()
|
||||||
|
|
||||||
set(TARGET_NAME oculus)
|
set(TARGET_NAME oculus)
|
||||||
setup_hifi_plugin(Multimedia)
|
setup_hifi_plugin(Multimedia)
|
||||||
link_hifi_libraries(shared gl gpu gpu-gl controllers ui
|
link_hifi_libraries(
|
||||||
|
shared gl gpu gpu-gl controllers ui
|
||||||
plugins ui-plugins display-plugins input-plugins
|
plugins ui-plugins display-plugins input-plugins
|
||||||
audio-client networking render-utils)
|
audio-client networking render-utils
|
||||||
|
)
|
||||||
include_hifi_library_headers(octree)
|
include_hifi_library_headers(octree)
|
||||||
|
|
||||||
add_dependency_external_projects(LibOVR)
|
add_dependency_external_projects(LibOVR)
|
||||||
|
@ -25,4 +31,8 @@ if (WIN32)
|
||||||
target_link_libraries(${TARGET_NAME} ${LIBOVR_LIBRARIES})
|
target_link_libraries(${TARGET_NAME} ${LIBOVR_LIBRARIES})
|
||||||
target_link_libraries(${TARGET_NAME} Winmm.lib)
|
target_link_libraries(${TARGET_NAME} Winmm.lib)
|
||||||
|
|
||||||
|
add_dependency_external_projects(LibOVRPlatform)
|
||||||
|
find_package(LibOVRPlatform REQUIRED)
|
||||||
|
target_include_directories(${TARGET_NAME} PRIVATE ${LIBOVRPLATFORM_INCLUDE_DIRS})
|
||||||
|
target_link_libraries(${TARGET_NAME} ${LIBOVRPLATFORM_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -15,8 +15,12 @@
|
||||||
#include <QtCore/QDir>
|
#include <QtCore/QDir>
|
||||||
#include <QtCore/QProcessEnvironment>
|
#include <QtCore/QProcessEnvironment>
|
||||||
|
|
||||||
|
#define OVRPL_DISABLED
|
||||||
|
#include <OVR_Platform.h>
|
||||||
|
|
||||||
#include <controllers/Input.h>
|
#include <controllers/Input.h>
|
||||||
#include <controllers/Pose.h>
|
#include <controllers/Pose.h>
|
||||||
|
#include <shared/GlobalAppProperties.h>
|
||||||
#include <NumericalConstants.h>
|
#include <NumericalConstants.h>
|
||||||
|
|
||||||
Q_LOGGING_CATEGORY(displayplugins, "hifi.plugins.display")
|
Q_LOGGING_CATEGORY(displayplugins, "hifi.plugins.display")
|
||||||
|
@ -89,6 +93,18 @@ ovrSession acquireOculusSession() {
|
||||||
return session;
|
return session;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef OCULUS_APP_ID
|
||||||
|
if (qApp->property(hifi::properties::OCULUS_STORE).toBool()) {
|
||||||
|
if (ovr_PlatformInitializeWindows(OCULUS_APP_ID) != ovrPlatformInitialize_Success) {
|
||||||
|
// we were unable to initialize the platform for entitlement check - fail the check
|
||||||
|
_quitRequested = true;
|
||||||
|
} else {
|
||||||
|
qCDebug(oculus) << "Performing Oculus Platform entitlement check";
|
||||||
|
ovr_Entitlement_GetIsViewerEntitled();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
Q_ASSERT(0 == refCount);
|
Q_ASSERT(0 == refCount);
|
||||||
ovrGraphicsLuid luid;
|
ovrGraphicsLuid luid;
|
||||||
if (!OVR_SUCCESS(ovr_Create(&session, &luid))) {
|
if (!OVR_SUCCESS(ovr_Create(&session, &luid))) {
|
||||||
|
@ -127,6 +143,35 @@ void handleOVREvents() {
|
||||||
|
|
||||||
_quitRequested = status.ShouldQuit;
|
_quitRequested = status.ShouldQuit;
|
||||||
_reorientRequested = status.ShouldRecenter;
|
_reorientRequested = status.ShouldRecenter;
|
||||||
|
|
||||||
|
#ifdef OCULUS_APP_ID
|
||||||
|
|
||||||
|
if (qApp->property(hifi::properties::OCULUS_STORE).toBool()) {
|
||||||
|
// pop messages to see if we got a return for an entitlement check
|
||||||
|
ovrMessageHandle message = ovr_PopMessage();
|
||||||
|
|
||||||
|
while (message) {
|
||||||
|
switch (ovr_Message_GetType(message)) {
|
||||||
|
case ovrMessage_Entitlement_GetIsViewerEntitled: {
|
||||||
|
if (!ovr_Message_IsError(message)) {
|
||||||
|
// this viewer is entitled, no need to flag anything
|
||||||
|
qCDebug(oculus) << "Oculus Platform entitlement check succeeded, proceeding normally";
|
||||||
|
} else {
|
||||||
|
// we failed the entitlement check, set our flag so the app can stop
|
||||||
|
qCDebug(oculus) << "Oculus Platform entitlement check failed, app will now quit" << OCULUS_APP_ID;
|
||||||
|
_quitRequested = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// free the message handle to cleanup and not leak
|
||||||
|
ovr_FreeMessage(message);
|
||||||
|
|
||||||
|
// pop the next message to check, if there is one
|
||||||
|
message = ovr_PopMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool quitRequested() {
|
bool quitRequested() {
|
||||||
|
|
Loading…
Reference in a new issue