From e9189552101ec5d1f848f11464bc4e7396941b0e Mon Sep 17 00:00:00 2001 From: dsc Date: Fri, 2 Apr 2021 13:07:11 +0200 Subject: [PATCH 01/15] Prepare build system for OpenVR and QtQuick (QML) --- CMakeLists.txt | 30 +++++++++-- Makefile | 6 ++- src/CMakeLists.txt | 125 +++++++++++++++++++++++++++++++++++---------- src/main.cpp | 30 ++++++++++- 4 files changed, 158 insertions(+), 33 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b81ff8f..b3accf6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,8 @@ set(VERSION "beta-1") option(FETCH_DEPS "Download dependencies if they are not found" ON) option(XMRIG "Include XMRig module" ON) +option(OPENVR "Include OpenVR support" OFF) +option(QML "Include QtQuick (QML)" OFF) option(TOR_BIN "Path to Tor binary to embed inside WOWlet" OFF) option(STATIC "Link libraries statically, requires static Qt") option(USE_DEVICE_TREZOR "Trezor support compilation" OFF) @@ -24,16 +26,26 @@ include(FindCcache) include(CheckIncludeFile) include(CheckSymbolExists) -if(DEBUG) - set(CMAKE_VERBOSE_MAKEFILE ON) -endif() - set(WOWNERO_HEAD "f611d5c9e32bc62f1735f6571b0bdb95cc020531") set(BUILD_GUI_DEPS ON) set(ARCH "x86-64") set(BUILD_64 ON) set(INSTALL_VENDORED_LIBUNBOUND ${STATIC}) set(USE_SINGLE_BUILDDIR ON) +if(OPENVR) + set(QML ON) +endif() + +# Are we in debug mode? +set(_CMAKE_BUILD_TYPE "") +string(TOUPPER "${CMAKE_BUILD_TYPE}" _CMAKE_BUILD_TYPE) +if("${_CMAKE_BUILD_TYPE}" STREQUAL "DEBUG") + set(DEBUG ON) + + set(CMAKE_VERBOSE_MAKEFILE ON) + message(STATUS "OPENVR: ${OPENVR}") + message(STATUS "QML: ${QML}") +endif() check_include_file(sys/prctl.h HAVE_SYS_PRCTL_H) check_symbol_exists(prctl "sys/prctl.h" HAVE_PRCTL) @@ -87,7 +99,7 @@ if(GIT_FOUND) if(NOT _WOWNERO_HEAD STREQUAL WOWNERO_HEAD) message(FATAL_ERROR "[submodule] Monero HEAD was at ${_WOWNERO_HEAD} but should be at ${WOWNERO_HEAD}") else() - message(STATUS "[submodule] Monero HEAD @ ${WOWNERO_HEAD}") + message(STATUS "[submodule] Wownero HEAD @ ${WOWNERO_HEAD}") endif() endif() @@ -365,4 +377,12 @@ if(APPLE) add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/contrib/KDMacTouchBar") endif() +if(OPENVR) + # Add contrib/openvr as library + add_definitions(-DVR_API_PUBLIC) + add_definitions(-DOPENVR_BUILD_STATIC) # is this needed? + add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/contrib/openvr") + message(STATUS "yeepp") +endif() + add_subdirectory(src) diff --git a/Makefile b/Makefile index 03e41a4..e97dc97 100644 --- a/Makefile +++ b/Makefile @@ -30,6 +30,8 @@ CMAKEFLAGS = \ -DARCH=x86_64 \ -DBUILD_64=On \ -DBUILD_TESTS=Off \ + -DOPENVR=Off \ + -DQML=Off \ -DXMRIG=Off \ -DTOR_BIN=Off \ -DCMAKE_CXX_STANDARD=11 \ @@ -50,10 +52,11 @@ release-static: depends: mkdir -p build/$(target)/release - cd build/$(target)/release && cmake -D STATIC=ON -DREPRODUCIBLE=$(or ${SOURCE_DATE_EPOCH},OFF) -DTOR_VERSION=$(or ${TOR_VERSION}, OFF) -DTOR_BIN=$(or ${TOR_BIN},OFF) -D DEV_MODE=$(or ${DEV_MODE},OFF) -D BUILD_TAG=$(tag) -D CMAKE_BUILD_TYPE=Release -D CMAKE_TOOLCHAIN_FILE=$(root)/$(target)/share/toolchain.cmake ../../.. && $(MAKE) + cd build/$(target)/release && cmake -D STATIC=ON -DREPRODUCIBLE=$(or ${SOURCE_DATE_EPOCH},OFF) -DTOR_VERSION=$(or ${TOR_VERSION}, OFF) -DOPENVR=ON -DQML=ON -DTOR_BIN=$(or ${TOR_BIN},OFF) -D DEV_MODE=$(or ${DEV_MODE},OFF) -D BUILD_TAG=$(tag) -D CMAKE_BUILD_TYPE=Debug -D CMAKE_TOOLCHAIN_FILE=$(root)/$(target)/share/toolchain.cmake ../../.. && $(MAKE) windows-mxe-release: CMAKEFLAGS += -DBUILD_TAG="win-x64" windows-mxe-release: CMAKEFLAGS += -DTOR_BIN=$(or ${TOR_BIN},OFF) +windows-mxe-debug: CMAKEFLAGS += -DOPENVR=On windows-mxe-release: CMAKEFLAGS += -DCMAKE_BUILD_TYPE=Release windows-mxe-release: cmake -Bbuild $(CMAKEFLAGS) @@ -61,6 +64,7 @@ windows-mxe-release: windows-mxe-debug: CMAKEFLAGS += -DBUILD_TAG="win-x64" windows-mxe-debug: CMAKEFLAGS += -DTOR_BIN=$(or ${TOR_BIN},OFF) +windows-mxe-debug: CMAKEFLAGS += -DOPENVR=On windows-mxe-debug: CMAKEFLAGS += -DCMAKE_BUILD_TYPE=Debug windows-mxe-debug: cmake -Bbuild $(CMAKEFLAGS) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6f882f5..69cb3d9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,16 +5,7 @@ set(CMAKE_AUTOUIC ON) # pthread find_package(Threads REQUIRED) -find_package(Qt5 REQUIRED COMPONENTS Core Widgets Gui Network Svg Xml WebSockets) - -add_subdirectory(libwalletqt) -add_subdirectory(model) -add_subdirectory(utils) -add_subdirectory(openpgp) - -qt5_add_resources(RESOURCES assets.qrc) - -# Compile source files (.h/.cpp) +# Compile these source files (.h/.cpp) file(GLOB SOURCE_FILES "*.h" "*.cpp" @@ -42,6 +33,35 @@ file(GLOB SOURCE_FILES "dialog/*.cpp" ) +if(QML) + find_package(Qt5 REQUIRED COMPONENTS Core Widgets Gui Network Svg Xml WebSockets Quick Qml QuickControls2 QmlImportScanner) +else() + find_package(Qt5 REQUIRED COMPONENTS Core Widgets Gui Network Svg Xml WebSockets) +endif() + +if(OPENVR) + # include some extra files + qt5_add_resources(RESOURCES vr/qml.qrc) + file(GLOB SOURCE_FILES_QML + "vr/*.h" + "vr/*.cpp" + "vr/utils/*.h" + "vr/utils/*.cpp" + ) + list(APPEND SOURCE_FILES ${SOURCE_FILES_QML}) + + if(MINGW) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wno-deprecated-declarations") # @TODO: removeme + endif() +endif() + +add_subdirectory(libwalletqt) +add_subdirectory(model) +add_subdirectory(utils) +add_subdirectory(openpgp) + +qt5_add_resources(RESOURCES assets.qrc) + if(TOR_BIN) if(APPLE) set(ASSETS_TOR "assets_tor_macos.qrc") @@ -118,6 +138,10 @@ target_include_directories(wowlet PUBLIC ${Qt5WebSockets_INCLUDE_DIRS} ) +if(OPENVR) + target_include_directories(wowlet PUBLIC ${CMAKE_SOURCE_DIR}/contrib/) +endif() + if(DONATE_BEG) target_compile_definitions(wowlet PRIVATE DONATE_BEG=1) endif() @@ -130,6 +154,11 @@ if(XMRIG) target_compile_definitions(wowlet PRIVATE HAS_XMRIG=1) endif() +if(OPENVR) + target_compile_definitions(wowlet PRIVATE HAS_OPENVR=1) + target_compile_definitions(wowlet PUBLIC VR_API_PUBLIC) +endif() + if(HAVE_SYS_PRCTL_H) target_compile_definitions(wowlet PRIVATE HAVE_SYS_PRCTL_H=1) endif() @@ -150,6 +179,17 @@ if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug") target_compile_definitions(wowlet PRIVATE QT_NO_DEBUG=1) endif() +add_definitions(${QT_DEFINITIONS}) +if(NOT "${CMAKE_BUILD_TYPE}" EQUAL "Debug") + add_definitions(-DQT_NO_DEBUG) +endif() + +target_compile_definitions(wowlet PUBLIC VR_API_PUBLIC) + +if(QML) + qt5_import_qml_plugins(${PROJECT_NAME}) +endif() + target_compile_definitions(wowlet PUBLIC ${Qt5Core_DEFINITIONS} @@ -166,12 +206,13 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}") if(UNIX AND NOT APPLE) # https://stackoverflow.com/questions/57766620/cmake-add-library-doesnt-initialize-static-global-variable # so that contrib/monero-seed/src/gf_elem.cpp properly initializes. A better solution is welcome. - target_link_libraries(wowlet -Wl,--whole-archive monero-seed::monero-seed -Wl,--no-whole-archive) + target_link_libraries(wowlet PUBLIC -Wl,--whole-archive monero-seed::monero-seed -Wl,--no-whole-archive) else() - target_link_libraries(wowlet monero-seed::monero-seed) + target_link_libraries(wowlet PUBLIC monero-seed::monero-seed) endif() -target_link_libraries(wowlet +# Link Wownero core libraries +target_link_libraries(wowlet PUBLIC wallet_merged ${LMDB_LIBRARY} epee @@ -183,19 +224,51 @@ target_link_libraries(wowlet ${Boost_LIBRARIES} ${OPENSSL_LIBRARIES} ${CMAKE_DL_LIBS} - ${EXTRA_LIBRARIES} - Qt5::Core - Qt5::Widgets - Qt5::Gui - Qt5::Network - Qt5::Svg - Qt5::Xml - Qt5::WebSockets + ${EXTRA_LIBRARIES}) + +# Link Qt libraries +if(QML) + target_link_libraries(wowlet PUBLIC + Qt5::Core + Qt5::Widgets + Qt5::Gui + Qt5::Network + Qt5::Svg + Qt5::QSvgPlugin + Qt5::QSvgIconPlugin + Qt5::Xml + Qt5::WebSockets + Qt5::Quick + Qt5::Qml + Qt5::QuickControls2) +else() + target_link_libraries(wowlet PUBLIC + Qt5::Core + Qt5::Widgets + Qt5::Gui + Qt5::Network + Qt5::Svg + Qt5::Xml + Qt5::WebSockets) +endif() + +# Link random other stuff +target_link_libraries(wowlet PUBLIC ${ICU_LIBRARIES} openpgp Threads::Threads - ${QRENCODE_LIBRARY} - ) + ${QRENCODE_LIBRARY}) + +# Link OpenVR +if(OPENVR) + if(MINGW) + target_link_libraries(wowlet PUBLIC + openvr_api64 + gcc stdc++ winpthread ssp glu32 opengl32 glmf32 -dynamic) + else() + target_link_libraries(wowlet PUBLIC openvr_api) + endif() +endif() if(APPLE) target_link_libraries(wowlet @@ -206,14 +279,14 @@ if(APPLE) endif() if(NOT APPLE) - target_link_libraries(wowlet + target_link_libraries(wowlet PUBLIC Qt5::QSvgIconPlugin Qt5::QSvgPlugin ) endif() if(STATIC) - target_link_libraries(wowlet + target_link_libraries(wowlet PUBLIC Qt5::QSvgIconPlugin Qt5::QSvgPlugin) if(UNIX AND NOT APPLE) @@ -223,7 +296,7 @@ if(STATIC) endif() if(X11_FOUND) - target_link_libraries(wowlet ${X11_LIBRARIES}) + target_link_libraries(wowlet PUBLIC ${X11_LIBRARIES}) endif() if(APPLE) diff --git a/src/main.cpp b/src/main.cpp index 76f3d45..87e3fef 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,6 +10,10 @@ #include "mainwindow.h" #include "cli.h" +#ifdef HAS_OPENVR +#include "vr/main.h" +#endif + #if defined(Q_OS_WIN) #include #endif @@ -84,6 +88,12 @@ if (AttachConsole(ATTACH_PARENT_PROCESS)) { QCommandLineOption backgroundPasswordOption(QStringList() << "daemon-password", "Password for connecting to the wowlet websocket service", "backgroundPassword"); parser.addOption(backgroundPasswordOption); + QCommandLineOption openVROption(QStringList() << "openvr", "Start Wowlet OpenVR"); + parser.addOption(openVROption); + + QCommandLineOption openVRDebugOption(QStringList() << "openvr-debug", "Start the Wowlet VR interface without initializing OpenVR - for debugging purposes."); + parser.addOption(openVRDebugOption); + auto parsed = parser.parse(argv_); if(!parsed) { qCritical() << parser.errorText(); @@ -99,17 +109,35 @@ if (AttachConsole(ATTACH_PARENT_PROCESS)) { bool exportContacts = parser.isSet(exportContactsOption); bool exportTxHistory = parser.isSet(exportTxHistoryOption); bool backgroundAddressEnabled = parser.isSet(backgroundOption); + bool openVREnabled = parser.isSet(openVROption); bool cliMode = exportContacts || exportTxHistory || backgroundAddressEnabled; qRegisterMetaType>(); + if(openVREnabled) { +#ifdef HAS_OPENVR + QApplication vr_app(argc, argv); + auto *ctx = new AppContext(&parser); + auto *vr = new wowletVR::WowletVR(ctx, &parser, &vr_app); + qDebug() << "Context: " << qgetenv("QMLSCENE_DEVICE"); + if(vr->errors.length() > 0) + return 1; + + vr->render(); + return vr_app.exec(); +#else + qCritical() << "Wowlet compiled without OpenVR support."; + exit(1); +#endif + } + if(cliMode) { + auto *ctx = new AppContext(&parser); QCoreApplication cli_app(argc, argv); QCoreApplication::setApplicationName("wowlet"); QCoreApplication::setOrganizationDomain("wownero.org"); QCoreApplication::setOrganizationName("wownero.org"); - auto *ctx = new AppContext(&parser); ctx->applicationPath = QString(argv[0]); ctx->isDebug = debugMode; From 96034902d1ff75baa6f5ab5053efb22dfc3ad580 Mon Sep 17 00:00:00 2001 From: dsc Date: Fri, 2 Apr 2021 14:22:37 +0200 Subject: [PATCH 02/15] Initial code for supporting an alternative QtQuick based UI for OpenVR --- src/CMakeLists.txt | 6 +- src/appcontext.cpp | 19 + src/appcontext.h | 33 +- src/libwalletqt/WalletManager.h | 7 +- src/main.cpp | 7 +- src/mainwindow.cpp | 2 - src/model/TransactionHistoryModel.cpp | 46 ++- src/model/TransactionHistoryModel.h | 8 +- src/utils/keysfiles.cpp | 5 + src/utils/keysfiles.h | 11 + src/utils/wsserver.cpp | 9 +- src/vr/main.cpp | 107 ++++++ src/vr/main.h | 38 ++ src/vr/openvr_init.cpp | 74 ++++ src/vr/openvr_init.h | 16 + src/vr/overlaycontroller.cpp | 484 ++++++++++++++++++++++++++ src/vr/overlaycontroller.h | 134 +++++++ src/vr/utils/paths.cpp | 58 +++ src/vr/utils/paths.h | 16 + 19 files changed, 1034 insertions(+), 46 deletions(-) create mode 100644 src/vr/main.cpp create mode 100644 src/vr/main.h create mode 100755 src/vr/openvr_init.cpp create mode 100755 src/vr/openvr_init.h create mode 100755 src/vr/overlaycontroller.cpp create mode 100755 src/vr/overlaycontroller.h create mode 100755 src/vr/utils/paths.cpp create mode 100755 src/vr/utils/paths.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 69cb3d9..39f148a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -49,12 +49,10 @@ if(OPENVR) "vr/utils/*.cpp" ) list(APPEND SOURCE_FILES ${SOURCE_FILES_QML}) - - if(MINGW) - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wno-deprecated-declarations") # @TODO: removeme - endif() endif() +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wno-deprecated-declarations") # @TODO: removeme + add_subdirectory(libwalletqt) add_subdirectory(model) add_subdirectory(utils) diff --git a/src/appcontext.cpp b/src/appcontext.cpp index 1b0640c..387b2a9 100644 --- a/src/appcontext.cpp +++ b/src/appcontext.cpp @@ -107,6 +107,8 @@ AppContext::AppContext(QCommandLineParser *cmdargs) { // Tor & socks proxy this->ws = new WSClient(this, m_wsUrl); connect(this->ws, &WSClient::WSMessage, this, &AppContext::onWSMessage); + connect(this->ws, &WSClient::connectionEstablished, this, &AppContext::wsConnected); + connect(this->ws, &WSClient::closed, this, &AppContext::wsDisconnected); // Store the wallet every 2 minutes m_storeTimer.start(2 * 60 * 1000); @@ -330,6 +332,8 @@ void AppContext::onWalletOpened(Wallet *wallet) { this->refreshed = false; this->currentWallet = wallet; this->walletPath = this->currentWallet->path() + ".keys"; + QFileInfo fileInfo(this->currentWallet->path()); + this->walletName = fileInfo.fileName(); this->walletViewOnly = this->currentWallet->viewOnly(); config()->set(Config::walletPath, this->walletPath); @@ -536,6 +540,12 @@ void AppContext::createConfigDirectory(const QString &dir) { } } +void AppContext::createWalletWithoutSpecifyingSeed(const QString &name, const QString &password) { + WowletSeed seed = WowletSeed(this->restoreHeights[this->networkType], this->coinName, this->seedLanguage); + auto path = QDir(this->defaultWalletDir).filePath(name); + this->createWallet(seed, path, password); +} + void AppContext::createWallet(WowletSeed seed, const QString &path, const QString &password) { if(Utils::fileExists(path)) { auto err = QString("Failed to write wallet to path: \"%1\"; file already exists.").arg(path); @@ -605,6 +615,9 @@ void AppContext::createWalletFinish(const QString &password) { this->currentWallet->store(); this->walletPassword = password; emit walletCreated(this->currentWallet); + + // emit signal on behalf of walletManager, open wallet + this->walletManager->walletOpened(this->currentWallet); } void AppContext::initRestoreHeights() { @@ -835,7 +848,13 @@ void AppContext::updateBalance() { AppContext::balance = balance_u / globals::cdiv; double spendable = this->currentWallet->unlockedBalance(); + // formatted + QString fmt_str = QString("Balance: %1 WOW").arg(Utils::balanceFormat(spendable)); + if (balance > spendable) + fmt_str += QString(" (+%1 WOW unconfirmed)").arg(Utils::balanceFormat(balance - spendable)); + emit balanceUpdated(balance_u, spendable); + emit balanceUpdatedFormatted(fmt_str); } void AppContext::syncStatusUpdated(quint64 height, quint64 target) { diff --git a/src/appcontext.h b/src/appcontext.h index 4748878..efc3021 100644 --- a/src/appcontext.h +++ b/src/appcontext.h @@ -60,9 +60,12 @@ public: QString walletPath; QString walletPassword = ""; + QString walletName; bool walletViewOnly = false; NetworkType::Type networkType; + Q_PROPERTY(QString walletName MEMBER walletName); + QString applicationPath; static void createConfigDirectory(const QString &dir) ; @@ -89,24 +92,20 @@ public: static QMap txCache; static TxFiatHistory *txFiatHistory; - QList listWallets() { - // return listing of wallet .keys items - m_walletKeysFilesModel->refresh(); - return m_walletKeysFilesModel->listWallets(); - } - // libwalletqt bool refreshed = false; + WalletManager *walletManager; Wallet *currentWallet = nullptr; void createWallet(WowletSeed seed, const QString &path, const QString &password); + Q_INVOKABLE void createWalletWithoutSpecifyingSeed(const QString &name, const QString &password); void createWalletViewOnly(const QString &path, const QString &password, const QString &address, const QString &viewkey, const QString &spendkey, quint64 restoreHeight); void createWalletFinish(const QString &password); void syncStatusUpdated(quint64 height, quint64 target); void updateBalance(); - void initTor(); + Q_INVOKABLE void initTor(); + Q_INVOKABLE void initWS(); void initRestoreHeights(); - void initWS(); void donateBeg(); void refreshModels(); void setWindowTitle(bool mining = false); @@ -115,8 +114,21 @@ public: void closeWallet(bool emitClosedSignal = true, bool storeWallet = false); void storeWallet(); + Q_INVOKABLE QVariantList listWallets() { + m_walletKeysFilesModel->refresh(); + + QVariantList list; + for(const WalletKeysFiles &wallet: m_walletKeysFilesModel->listWallets()) + list << wallet.toVariant(); + return list; + } + + Q_INVOKABLE QString displayAmount(quint64 amount) { + return Utils::balanceFormat(amount); + } + public slots: - void onOpenWallet(const QString& path, const QString &password); + Q_INVOKABLE void onOpenWallet(const QString& path, const QString &password); void onCreateTransaction(QString address, quint64 amount, const QString description, bool all); void onCreateTransactionMultiDest(const QVector &addresses, const QVector &amounts, const QString &description); void onCancelTransaction(PendingTransaction *tx, const QVector &address); @@ -151,6 +163,7 @@ signals: void walletClosed(); void balanceUpdated(quint64 balance, quint64 spendable); + void balanceUpdatedFormatted(QString fmt); void blockchainSync(int height, int target); void refreshSync(int height, int target); void synchronized(); @@ -165,6 +178,8 @@ signals: void createTransactionError(QString message); void createTransactionCancelled(const QVector &address, double amount); void createTransactionSuccess(PendingTransaction *tx, const QVector &address); + void wsConnected(); + void wsDisconnected(); void redditUpdated(QList> &posts); void nodesUpdated(QList> &nodes); void ccsUpdated(QList> &entries); diff --git a/src/libwalletqt/WalletManager.h b/src/libwalletqt/WalletManager.h index 35df670..778bee1 100644 --- a/src/libwalletqt/WalletManager.h +++ b/src/libwalletqt/WalletManager.h @@ -36,8 +36,10 @@ public: LogLevel_Min = Monero::WalletManagerFactory::LogLevel_Min, LogLevel_Max = Monero::WalletManagerFactory::LogLevel_Max, }; - + explicit WalletManager(QObject *parent = nullptr); static WalletManager * instance(); + ~WalletManager(); + // wizard: createWallet path; Q_INVOKABLE Wallet * createWallet(const QString &path, const QString &password, const QString &language, NetworkType::Type nettype = NetworkType::MAINNET, quint64 kdfRounds = 1); @@ -187,9 +189,6 @@ public slots: private: friend class WalletPassphraseListenerImpl; - explicit WalletManager(QObject *parent = 0); - ~WalletManager(); - bool isMining() const; static WalletManager * m_instance; diff --git a/src/main.cpp b/src/main.cpp index 87e3fef..501149b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -114,12 +114,15 @@ if (AttachConsole(ATTACH_PARENT_PROCESS)) { qRegisterMetaType>(); +#ifdef QML + qputenv("QML_DISABLE_DISK_CACHE", "1"); +#endif + if(openVREnabled) { #ifdef HAS_OPENVR QApplication vr_app(argc, argv); auto *ctx = new AppContext(&parser); - auto *vr = new wowletVR::WowletVR(ctx, &parser, &vr_app); - qDebug() << "Context: " << qgetenv("QMLSCENE_DEVICE"); + auto *vr = new wowletvr::WowletVR(ctx, &parser, &vr_app); if(vr->errors.length() > 0) return 1; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 46d027e..389e66d 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -574,8 +574,6 @@ void MainWindow::onWalletOpenedError(const QString &err) { void MainWindow::onWalletCreated(Wallet *wallet) { qDebug() << Q_FUNC_INFO; - // emit signal on behalf of walletManager - m_ctx->walletManager->walletOpened(wallet); } void MainWindow::onWalletOpened(Wallet *wallet) { diff --git a/src/model/TransactionHistoryModel.cpp b/src/model/TransactionHistoryModel.cpp index 0c96526..8158d1f 100644 --- a/src/model/TransactionHistoryModel.cpp +++ b/src/model/TransactionHistoryModel.cpp @@ -51,7 +51,7 @@ int TransactionHistoryModel::columnCount(const QModelIndex &parent) const { return 0; } - return Column::COUNT; + return TransactionInfoRole::COUNT; } QVariant TransactionHistoryModel::data(const QModelIndex &index, int role) const { @@ -70,14 +70,14 @@ QVariant TransactionHistoryModel::data(const QModelIndex &index, int role) const } else if (role == Qt::TextAlignmentRole) { switch (index.column()) { - case Column::Amount: - case Column::FiatAmount: + case TransactionInfoRole::Amount: + case TransactionInfoRole::FiatAmount: result = Qt::AlignRight; } } else if (role == Qt::DecorationRole) { switch (index.column()) { - case Column::Date: + case TransactionInfoRole::Date: { if (tInfo.isFailed()) result = QVariant(m_warning); @@ -100,7 +100,7 @@ QVariant TransactionHistoryModel::data(const QModelIndex &index, int role) const } else if (role == Qt::ToolTipRole) { switch(index.column()) { - case Column::Date: + case TransactionInfoRole::Date: { if (tInfo.isFailed()) result = "Transaction failed"; @@ -113,8 +113,8 @@ QVariant TransactionHistoryModel::data(const QModelIndex &index, int role) const } else if (role == Qt::ForegroundRole) { switch(index.column()) { - case Column::FiatAmount: - case Column::Amount: + case TransactionInfoRole::FiatAmount: + case TransactionInfoRole::Amount: { if (tInfo.direction() == TransactionInfo::Direction_Out) { result = QVariant(QColor("#BC1E1E")); @@ -134,9 +134,19 @@ QVariant TransactionHistoryModel::parseTransactionInfo(const TransactionInfo &tI { switch (column) { - case Column::Date: + case TransactionInfoRole::TransactionFailedRole: + return tInfo.isFailed(); + case TransactionInfoRole::TransactionPendingRole: + return tInfo.isPending(); + case TransactionInfoRole::TransactionConfirmationsRole: + return tInfo.confirmations(); + case TransactionInfoRole::TransactionConfirmationsRequiredRole: + return tInfo.confirmationsRequired(); + case TransactionInfoRole::Date: return tInfo.timestamp().toString("yyyy-MM-dd HH:mm"); - case Column::Description: { + case TransactionInfoRole::TransactionIsOutRole: + return tInfo.direction() == TransactionInfo::Direction_Out; + case TransactionInfoRole::Description: { // if this tx is still in the pool, then we wont get the // description. We've cached it inside `AppContext::txDescriptionCache` // for the time being. @@ -147,15 +157,15 @@ QVariant TransactionHistoryModel::parseTransactionInfo(const TransactionInfo &tI } return tInfo.description(); } - case Column::Amount: + case TransactionInfoRole::Amount: { QString amount = QString::number(tInfo.balanceDelta() / globals::cdiv, 'f', 4); amount = (tInfo.direction() == TransactionInfo::Direction_Out) ? "-" + amount : "+" + amount; return amount; } - case Column::TxID: + case TransactionInfoRole::TxID: return tInfo.hash(); - case Column::FiatAmount: + case TransactionInfoRole::FiatAmount: { double usd_price = AppContext::txFiatHistory->get(tInfo.timestamp().toString("yyyyMMdd")); if (usd_price == 0.0) @@ -183,15 +193,15 @@ QVariant TransactionHistoryModel::headerData(int section, Qt::Orientation orient } if (orientation == Qt::Horizontal) { switch(section) { - case Column::Date: + case TransactionInfoRole::Date: return QString("Date"); - case Column::Description: + case TransactionInfoRole::Description: return QString("Description"); - case Column::Amount: + case TransactionInfoRole::Amount: return QString("Amount"); - case Column::TxID: + case TransactionInfoRole::TxID: return QString("Txid"); - case Column::FiatAmount: + case TransactionInfoRole::FiatAmount: return QString("Fiat"); default: return QVariant(); @@ -205,7 +215,7 @@ bool TransactionHistoryModel::setData(const QModelIndex &index, const QVariant & QString hash; switch (index.column()) { - case Column::Description: + case TransactionInfoRole::Description: { m_transactionHistory->transaction(index.row(), [this, &hash, &value](const TransactionInfo &tInfo){ hash = tInfo.hash(); diff --git a/src/model/TransactionHistoryModel.h b/src/model/TransactionHistoryModel.h index 3225447..bdc0f3d 100644 --- a/src/model/TransactionHistoryModel.h +++ b/src/model/TransactionHistoryModel.h @@ -21,15 +21,21 @@ class TransactionHistoryModel : public QAbstractTableModel Q_PROPERTY(TransactionHistory * transactionHistory READ transactionHistory WRITE setTransactionHistory NOTIFY transactionHistoryChanged) public: - enum Column + enum TransactionInfoRole { Date = 0, Description, Amount, TxID, FiatAmount, + TransactionIsOutRole, + TransactionFailedRole, + TransactionPendingRole, + TransactionConfirmationsRole, + TransactionConfirmationsRequiredRole, COUNT }; + Q_ENUM(TransactionInfoRole) explicit TransactionHistoryModel(QObject * parent = nullptr); void setTransactionHistory(TransactionHistory * th); diff --git a/src/utils/keysfiles.cpp b/src/utils/keysfiles.cpp index d61f417..c61defa 100644 --- a/src/utils/keysfiles.cpp +++ b/src/utils/keysfiles.cpp @@ -13,6 +13,7 @@ using namespace std::chrono; +WalletKeysFiles::WalletKeysFiles() = default; // to please Q_DECLARE_METATYPE WalletKeysFiles::WalletKeysFiles(const QFileInfo &info, int networkType, QString address) : m_fileName(info.fileName()), m_modified(info.lastModified().toSecsSinceEpoch()), @@ -47,6 +48,10 @@ int WalletKeysFiles::networkType() const { return m_networkType; } +QVariant WalletKeysFiles::toVariant() const { + return QVariant::fromValue(*this); +} + QJsonObject WalletKeysFiles::toJsonObject() const { auto item = QJsonObject(); item["fileName"] = m_fileName; diff --git a/src/utils/keysfiles.h b/src/utils/keysfiles.h index 45112b5..5f665b9 100644 --- a/src/utils/keysfiles.h +++ b/src/utils/keysfiles.h @@ -10,7 +10,9 @@ class WalletKeysFiles { + Q_GADGET public: + WalletKeysFiles(); WalletKeysFiles(const QFileInfo &info, int networkType, QString address); QString fileName() const; @@ -20,6 +22,13 @@ public: QString address() const; QJsonObject toJsonObject() const; + QVariant toVariant() const; + + Q_PROPERTY(qint64 modified READ modified) + Q_PROPERTY(QString fileName READ fileName) + Q_PROPERTY(QString path READ path) + Q_PROPERTY(QString address READ address) + Q_PROPERTY(int networkType READ networkType) private: QString m_fileName; @@ -28,6 +37,8 @@ private: int m_networkType; QString m_address; }; +Q_DECLARE_METATYPE(WalletKeysFiles) + class WalletKeysFilesModel : public QAbstractTableModel { diff --git a/src/utils/wsserver.cpp b/src/utils/wsserver.cpp index 32b6d70..077432f 100644 --- a/src/utils/wsserver.cpp +++ b/src/utils/wsserver.cpp @@ -80,8 +80,8 @@ void WSServer::onNewConnection() { // blast wallet listing on connect QJsonArray arr; - for(const WalletKeysFiles &wallet: m_ctx->listWallets()) - arr << wallet.toJsonObject(); + for(const QVariant &wallet: m_ctx->listWallets()) + arr << wallet.value().toJsonObject(); auto welcomeWalletMessage = WSServer::createWSMessage("walletList", arr); pSocket->sendBinaryMessage(welcomeWalletMessage); @@ -336,9 +336,6 @@ void WSServer::onWalletCreatedError(const QString &err) { void WSServer::onWalletCreated(Wallet *wallet) { auto obj = wallet->toJsonObject(); sendAll("walletCreated", obj); - - // emit signal on behalf of walletManager - m_ctx->walletManager->walletOpened(wallet); } void WSServer::onSynchronized() { @@ -350,7 +347,7 @@ void WSServer::onWalletOpenPasswordRequired(bool invalidPassword, const QString QJsonObject obj; obj["invalidPassword"] = invalidPassword; obj["path"] = path; - sendAll("synchronized", obj); + sendAll("walletOpenPasswordRequired", obj); } void WSServer::onConnectionStatusChanged(int status) { diff --git a/src/vr/main.cpp b/src/vr/main.cpp new file mode 100644 index 0000000..cd8cdfe --- /dev/null +++ b/src/vr/main.cpp @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2020-2021, The Monero Project. + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "openvr.h" +#include "vr/openvr_init.h" +#include "vr/main.h" + +#include "libwalletqt/TransactionInfo.h" +#include "libwalletqt/TransactionHistory.h" +#include "model/TransactionHistoryModel.h" +#include "model/TransactionHistoryProxyModel.h" +#include "libwalletqt/WalletManager.h" + +#include "utils/keysfiles.h" + +namespace wowletvr { + + void check_error(int line, vr::EVRInitError error) { if (error != 0) printf("%d: error %s\n", line, VR_GetVRInitErrorAsSymbol(error)); } + + WowletVR::WowletVR(AppContext *ctx, QCommandLineParser *parser, QObject *parent) : + QObject(parent), ctx(ctx), m_parser(parser) { + desktopMode = m_parser->isSet("openvr-debug"); + +#ifdef Q_OS_WIN + if(desktopMode) + qputenv("QMLSCENE_DEVICE", "softwarecontext"); +#endif + + qDebug() << "QMLSCENE_DEVICE: " << qgetenv("QMLSCENE_DEVICE"); + + m_engine.rootContext()->setContextProperty("homePath", QDir::homePath()); + m_engine.rootContext()->setContextProperty("applicationDirectory", QApplication::applicationDirPath()); + m_engine.rootContext()->setContextProperty("idealThreadCount", QThread::idealThreadCount()); + m_engine.rootContext()->setContextProperty("qtRuntimeVersion", qVersion()); + m_engine.rootContext()->setContextProperty("ctx", ctx); + +// qmlRegisterType("moneroComponents.Clipboard", 1, 0, "Clipboard"); + qRegisterMetaType(); + qmlRegisterType("wowlet.NetworkType", 1, 0, "NetworkType"); + + qmlRegisterUncreatableType("wowlet.WalletKeysFiles", 1, 0, "WalletKeysFiles", "lol"); + qmlRegisterUncreatableType("wowlet.Wallet", 1, 0, "Wallet", "Wallet can't be instantiated directly"); + qmlRegisterType("wowlet.WalletManager", 1, 0, "WalletManager"); + + qmlRegisterUncreatableType("wowlet.TransactionHistoryProxyModel", 1, 0, "TransactionHistoryProxyModel", "TransactionHistoryProxyModel can't be instantiated directly"); + qmlRegisterUncreatableType("wowlet.TransactionHistoryModel", 1, 0, "TransactionHistoryModel", "TransactionHistoryModel can't be instantiated directly"); + qmlRegisterUncreatableType("wowlet.TransactionInfo", 1, 0, "TransactionInfo", "TransactionHistory can't be instantiated directly"); + qmlRegisterUncreatableType("wowlet.TransactionHistory", 1, 0, "TransactionHistory", "TransactionHistory can't be instantiated directly"); + + qRegisterMetaType(); + qRegisterMetaType(); + qRegisterMetaType(); + + // @TODO: custom DPI / AA +// QCoreApplication::setAttribute( Qt::AA_UseDesktopOpenGL ); +// QCoreApplication::setAttribute( Qt::AA_Use96Dpi ); + + auto widgetUrl = QUrl(QStringLiteral("qrc:///main")); + m_component = new QQmlComponent(&m_engine, widgetUrl); + + this->errors = m_component->errors(); + for (auto &e : this->errors) + qCritical() << "QML Error: " << e.toString().toStdString().c_str(); + + if(!desktopMode) { + openvr_init::initializeOpenVR(openvr_init::OpenVrInitializationType::Overlay); + m_controller = new wowletvr::OverlayController(desktopMode, m_engine); + } + } + + void WowletVR::render() { + auto quickObj = m_component->create(); + QQuickItem *quickObjItem = qobject_cast(quickObj); + + auto displayName = application_strings::applicationDisplayName; + auto appKey = application_strings::applicationKey; + + if(desktopMode) { + auto m_pWindow = new QQuickWindow(); + qobject_cast(quickObj)->setParentItem(m_pWindow->contentItem()); + m_pWindow->setGeometry(0, 0, + static_cast(qobject_cast(quickObj)->width()), + static_cast(qobject_cast(quickObj)->height())); + m_pWindow->show(); + return; + } + + m_controller->SetWidget(quickObjItem, displayName, appKey); + } + + WowletVR::~WowletVR() { + int weoignwieog = 1; + }; + +} \ No newline at end of file diff --git a/src/vr/main.h b/src/vr/main.h new file mode 100644 index 0000000..4c94492 --- /dev/null +++ b/src/vr/main.h @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2020-2021, The Monero Project. + +#ifndef WOWLET_MAIN_H +#define WOWLET_MAIN_H + +#include +#include +#include +#include + +#include "overlaycontroller.h" +#include "appcontext.h" + +namespace wowletvr { + + class WowletVR : public QObject { + Q_OBJECT + public: + explicit WowletVR(AppContext *ctx, QCommandLineParser *cmdargs, QObject *parent = nullptr); + ~WowletVR() override; + + void render(); + + QList errors; + + private: + AppContext *ctx; + QCommandLineParser *m_parser; + QQmlEngine m_engine; + QQmlComponent *m_component; + bool desktopMode = false; + wowletvr::OverlayController *m_controller; + }; + +} + +#endif //WOWLET_MAIN_H diff --git a/src/vr/openvr_init.cpp b/src/vr/openvr_init.cpp new file mode 100755 index 0000000..2596e04 --- /dev/null +++ b/src/vr/openvr_init.cpp @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2020-2021, The Monero Project. +// Copyright (c) OpenVR Advanced Settings + +#include +#include +#include +#include +#include "openvr_init.h" + +namespace openvr_init +{ +bool initializeProperly(const OpenVrInitializationType initType) { + auto initializationType = vr::EVRApplicationType::VRApplication_Other; + if (initType == OpenVrInitializationType::Overlay) { + initializationType = vr::EVRApplicationType::VRApplication_Overlay; + } else if (initType == OpenVrInitializationType::Utility) { + initializationType = vr::EVRApplicationType::VRApplication_Utility; + } + + auto initError = vr::VRInitError_None; + vr::VR_Init(&initError, initializationType); + if (initError != vr::VRInitError_None) { + if (initError == vr::VRInitError_Init_HmdNotFound || initError == vr::VRInitError_Init_HmdNotFoundPresenceFailed) { + QMessageBox::critical(nullptr, "Wowlet VR", "Could not find HMD!"); + } + qCritical() << "Failed to initialize OpenVR: " << std::string(vr::VR_GetVRInitErrorAsEnglishDescription(initError)).c_str(); + return false; + } + + qInfo() << "OpenVR initialized successfully."; + return true; +} + +bool initializeOpenVR(const OpenVrInitializationType initType) +{ + bool res = initializeProperly(initType); + if(!res) + return false; + + // Check whether OpenVR is too outdated + if (!vr::VR_IsInterfaceVersionValid(vr::IVRSystem_Version)) { + return reportVersionError(vr::IVRSystem_Version); + } else if (!vr::VR_IsInterfaceVersionValid(vr::IVRSettings_Version)) { + return reportVersionError(vr::IVRSettings_Version); + } else if (!vr::VR_IsInterfaceVersionValid(vr::IVROverlay_Version)) { + return reportVersionError(vr::IVROverlay_Version); + } else if (!vr::VR_IsInterfaceVersionValid(vr::IVRApplications_Version)) { + return reportVersionError(vr::IVRApplications_Version); + } else if (!vr::VR_IsInterfaceVersionValid(vr::IVRChaperone_Version)) { + return reportVersionError(vr::IVRChaperone_Version); + } else if (!vr::VR_IsInterfaceVersionValid(vr::IVRChaperoneSetup_Version)) { + return reportVersionError(vr::IVRChaperoneSetup_Version); + } else if (!vr::VR_IsInterfaceVersionValid(vr::IVRCompositor_Version)) { + return reportVersionError(vr::IVRCompositor_Version); + } else if (!vr::VR_IsInterfaceVersionValid(vr::IVRNotifications_Version)) { + return reportVersionError(vr::IVRNotifications_Version); + } else if (!vr::VR_IsInterfaceVersionValid(vr::IVRInput_Version)) { + return reportVersionError(vr::IVRInput_Version); + } + + return true; +} + +bool reportVersionError(const char* const interfaceAndVersion) { + // The function call and error message was the same for all version checks. + // Specific error messages are unlikely to be necessary since both the type + // and version are in the string and will be output. + auto msg = "OpenVR version is too outdated. Please update OpenVR: " + QString(interfaceAndVersion); + QMessageBox::critical(nullptr, "Wowlet VR", msg); + return false; +} + +} // namespace openvr_init diff --git a/src/vr/openvr_init.h b/src/vr/openvr_init.h new file mode 100755 index 0000000..3473be1 --- /dev/null +++ b/src/vr/openvr_init.h @@ -0,0 +1,16 @@ +#pragma once + +namespace openvr_init +{ + + enum class OpenVrInitializationType + { + Overlay, + Utility, + }; + + bool initializeProperly(OpenVrInitializationType initType); + bool initializeOpenVR(OpenVrInitializationType initType ); + bool reportVersionError(const char* interfaceAndVersion); + +} // namespace openvr_init diff --git a/src/vr/overlaycontroller.cpp b/src/vr/overlaycontroller.cpp new file mode 100755 index 0000000..d09ff5b --- /dev/null +++ b/src/vr/overlaycontroller.cpp @@ -0,0 +1,484 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2020-2021, The Monero Project. +// Copyright (c) OpenVR Advanced Settings + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "overlaycontroller.h" +#include + +// application namespace +namespace wowletvr +{ + +OverlayController::OverlayController(bool desktopMode, QQmlEngine& qmlEngine) : + QObject(), + m_desktopMode(desktopMode) +{ + // Arbitrarily chosen Max Length of Directory path, should be sufficient for + // Any set-up + const uint32_t maxLength = 16192; + uint32_t requiredLength; + + char tempRuntimePath[maxLength]; + bool pathIsGood = vr::VR_GetRuntimePath( tempRuntimePath, maxLength, &requiredLength ); + + // Throw Error If over 16k characters in path string + if ( !pathIsGood ) + { + qCritical() << "Error Finding VR Runtime Path, Attempting Recovery: "; + uint32_t maxLengthRe = requiredLength; + qInfo() << "Open VR reporting Required path length of: " + << maxLengthRe; + } + + m_runtimePathUrl = QUrl::fromLocalFile( tempRuntimePath ); + qInfo() << "VR Runtime Path: " << m_runtimePathUrl.toLocalFile(); + + QSurfaceFormat format; + // Qt's QOpenGLPaintDevice is not compatible with OpenGL versions >= 3.0 + // NVIDIA does not care, but unfortunately AMD does + // Are subtle changes to the semantics of OpenGL functions actually covered + // by the compatibility profile, and this is an AMD bug? + format.setVersion( 2, 1 ); + // format.setProfile( QSurfaceFormat::CompatibilityProfile ); + format.setDepthBufferSize( 16 ); + format.setStencilBufferSize( 8 ); + format.setSamples( 16 ); + + m_openGLContext.setFormat( format ); + if ( !m_openGLContext.create() ) { + throw std::runtime_error( "Could not create OpenGL context" ); + } + + // create an offscreen surface to attach the context and FBO to + m_offscreenSurface.setFormat( m_openGLContext.format() ); + m_offscreenSurface.create(); + m_openGLContext.makeCurrent( &m_offscreenSurface ); + + if (!vr::VROverlay()){ + QMessageBox::critical(nullptr, "Wowlet VR Overlay", "Is OpenVR running?"); + throw std::runtime_error( std::string( "No Overlay interface" ) ); + } + + // Set qml context + qmlEngine.rootContext()->setContextProperty("applicationVersion", "1337"); + qmlEngine.rootContext()->setContextProperty("vrRuntimePath", getVRRuntimePathUrl()); + + // Pretty disgusting trick to allow qmlRegisterSingletonType to continue + // working with the lambdas that were already there. The callback function + // in qmlRegisterSingletonType won't work with any lambdas that capture the + // environment. The alternative to making a static pointer to this was + // rewriting all QML to not be singletons, which should probably be done + // whenever possible. + static OverlayController* const objectAddress = this; + constexpr auto qmlSingletonImportName = "ovrwow.wowletvr"; + qmlRegisterSingletonType( + qmlSingletonImportName, + 1, + 0, + "OverlayController", + []( QQmlEngine*, QJSEngine* ) { + QObject* obj = objectAddress; + QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership ); + return obj; + }); + + qInfo() << "OPENSSL VERSION: " << QSslSocket::sslLibraryBuildVersionString(); +} + +OverlayController::~OverlayController() { + Shutdown(); +} + +void OverlayController::exitApp() { + Shutdown(); + QApplication::exit(); + + qInfo() << "All systems exited."; + exit( EXIT_SUCCESS ); + // Does not fallthrough +} + +void OverlayController::Shutdown() { + if (m_pRenderTimer) + { + disconnect( &m_renderControl, + SIGNAL( renderRequested() ), + this, + SLOT( OnRenderRequest() ) ); + disconnect( &m_renderControl, + SIGNAL( sceneChanged() ), + this, + SLOT( OnRenderRequest() ) ); + disconnect( m_pRenderTimer.get(), + SIGNAL( timeout() ), + this, + SLOT( renderOverlay() ) ); + m_pRenderTimer->stop(); + m_pRenderTimer.reset(); + } + m_pFbo.reset(); +} + +void OverlayController::SetWidget( QQuickItem* quickItem, + const std::string& name, + const std::string& key ) +{ + if ( !m_desktopMode ) + { + vr::VROverlayError overlayError + = vr::VROverlay()->CreateDashboardOverlay( + key.c_str(), + name.c_str(), + &m_ulOverlayHandle, + &m_ulOverlayThumbnailHandle ); + if ( overlayError != vr::VROverlayError_None ) + { + if ( overlayError == vr::VROverlayError_KeyInUse ) + { + QMessageBox::critical( nullptr, + "Wowlet VR Overlay", + "Another instance is already running." ); + } + throw std::runtime_error( std::string( + "Failed to create Overlay: " + + std::string( vr::VROverlay()->GetOverlayErrorNameFromEnum( + overlayError ) ) ) ); + } + vr::VROverlay()->SetOverlayWidthInMeters( m_ulOverlayHandle, 2.5f ); + vr::VROverlay()->SetOverlayInputMethod( + m_ulOverlayHandle, vr::VROverlayInputMethod_Mouse ); + vr::VROverlay()->SetOverlayFlag( + m_ulOverlayHandle, + vr::VROverlayFlags_SendVRSmoothScrollEvents, + true ); + + constexpr auto thumbiconFilename = "img/icons/thumbicon.png"; + const auto thumbIconPath = paths::binaryDirectoryFindFile( thumbiconFilename ); + if ( !thumbIconPath.empty() ) { + vr::VROverlay()->SetOverlayFromFile( m_ulOverlayThumbnailHandle, thumbIconPath.c_str() ); + } + else { + qCritical() << "Could not find thumbnail icon \"" << thumbiconFilename << "\""; + } + + // Too many render calls in too short time overwhelm Qt and an + // assertion gets thrown. Therefore we use an timer to delay render + // calls + m_pRenderTimer.reset(new QTimer()); + m_pRenderTimer->setSingleShot( false ); + m_pRenderTimer->setInterval( 5 ); + connect( m_pRenderTimer.get(), + SIGNAL( timeout() ), + this, + SLOT( renderOverlay() ) ); + + QOpenGLFramebufferObjectFormat fboFormat; + fboFormat.setAttachment( + QOpenGLFramebufferObject::CombinedDepthStencil ); + fboFormat.setTextureTarget( GL_TEXTURE_2D ); + m_pFbo.reset( new QOpenGLFramebufferObject( + static_cast( quickItem->width() ), + static_cast( quickItem->height() ), + fboFormat ) ); + + m_window.setRenderTarget( m_pFbo.get() ); + quickItem->setParentItem( m_window.contentItem() ); + m_window.setGeometry( 0, + 0, + static_cast( quickItem->width() ), + static_cast( quickItem->height() ) ); + m_renderControl.initialize( &m_openGLContext ); + + vr::HmdVector2_t vecWindowSize + = { static_cast( quickItem->width() ), + static_cast( quickItem->height() ) }; + vr::VROverlay()->SetOverlayMouseScale( m_ulOverlayHandle, + &vecWindowSize ); + + connect( &m_renderControl, + SIGNAL( renderRequested() ), + this, + SLOT( OnRenderRequest() ) ); + connect( &m_renderControl, + SIGNAL( sceneChanged() ), + this, + SLOT( OnRenderRequest() ) ); + + m_pRenderTimer->start(); + } +} + +void OverlayController::OnRenderRequest() { + if ( m_pRenderTimer && !m_pRenderTimer->isActive() ) + { + m_pRenderTimer->start(); + } +} + +void OverlayController::renderOverlay() { + if ( !m_desktopMode ) + { + // skip rendering if the overlay isn't visible + if ( !vr::VROverlay() + || ( !vr::VROverlay()->IsOverlayVisible( m_ulOverlayHandle ) + && !vr::VROverlay()->IsOverlayVisible( + m_ulOverlayThumbnailHandle ) ) ) + return; + m_renderControl.polishItems(); + m_renderControl.sync(); + m_renderControl.render(); + + GLuint unTexture = m_pFbo->texture(); + if ( unTexture != 0 ) + { +#if defined _WIN64 || defined _LP64 + // To avoid any compiler warning because of cast to a larger + // pointer type (warning C4312 on VC) + vr::Texture_t texture = { reinterpret_cast( + static_cast( unTexture ) ), + vr::TextureType_OpenGL, + vr::ColorSpace_Auto }; +#else + vr::Texture_t texture = { reinterpret_cast( unTexture ), + vr::TextureType_OpenGL, + vr::ColorSpace_Auto }; +#endif + vr::VROverlay()->SetOverlayTexture( m_ulOverlayHandle, &texture ); + } + m_openGLContext.functions()->glFlush(); // We need to flush otherwise + // the texture may be empty.*/ + + if(m_customTickRateCounter % k_nonVsyncTickRate == 0) { + mainEventLoop(); + m_customTickRateCounter = 0; + } else { + m_customTickRateCounter += 1; + } + } +} + +bool OverlayController::pollNextEvent( vr::VROverlayHandle_t ulOverlayHandle, + vr::VREvent_t* pEvent ) { + if ( isDesktopMode() ) + { + return vr::VRSystem()->PollNextEvent( pEvent, sizeof( vr::VREvent_t ) ); + } + else + { + return vr::VROverlay()->PollNextOverlayEvent( + ulOverlayHandle, pEvent, sizeof( vr::VREvent_t ) ); + } +} + +QPoint OverlayController::getMousePositionForEvent( vr::VREvent_Mouse_t mouse ) { + float y = mouse.y; +#ifdef __linux__ + float h = static_cast( m_window.height() ); + y = h - y; +#endif + return QPoint( static_cast( mouse.x ), static_cast( y ) ); +} + +void OverlayController::mainEventLoop() { + if ( !vr::VRSystem() ) + return; + + vr::VREvent_t vrEvent; + + while ( pollNextEvent( m_ulOverlayHandle, &vrEvent ) ) { + switch ( vrEvent.eventType ) + { + case vr::VREvent_MouseMove: + { + QPoint ptNewMouse = getMousePositionForEvent( vrEvent.data.mouse ); + if ( ptNewMouse != m_ptLastMouse ) + { + QMouseEvent mouseEvent( QEvent::MouseMove, + ptNewMouse, + m_window.mapToGlobal( ptNewMouse ), + Qt::NoButton, + m_lastMouseButtons, + nullptr ); + m_ptLastMouse = ptNewMouse; + QCoreApplication::sendEvent( &m_window, &mouseEvent ); + OnRenderRequest(); + } + } + break; + + case vr::VREvent_MouseButtonDown: + { + QPoint ptNewMouse = getMousePositionForEvent( vrEvent.data.mouse ); + Qt::MouseButton button + = vrEvent.data.mouse.button == vr::VRMouseButton_Right + ? Qt::RightButton + : Qt::LeftButton; + m_lastMouseButtons |= button; + QMouseEvent mouseEvent( QEvent::MouseButtonPress, + ptNewMouse, + m_window.mapToGlobal( ptNewMouse ), + button, + m_lastMouseButtons, + nullptr ); + QCoreApplication::sendEvent( &m_window, &mouseEvent ); + } + break; + + case vr::VREvent_MouseButtonUp: + { + QPoint ptNewMouse = getMousePositionForEvent( vrEvent.data.mouse ); + Qt::MouseButton button + = vrEvent.data.mouse.button == vr::VRMouseButton_Right + ? Qt::RightButton + : Qt::LeftButton; + m_lastMouseButtons &= ~button; + QMouseEvent mouseEvent( QEvent::MouseButtonRelease, + ptNewMouse, + m_window.mapToGlobal( ptNewMouse ), + button, + m_lastMouseButtons, + nullptr ); + QCoreApplication::sendEvent( &m_window, &mouseEvent ); + } + break; + + case vr::VREvent_ScrollSmooth: + { + // Wheel speed is defined as 1/8 of a degree + QWheelEvent wheelEvent( + m_ptLastMouse, + m_window.mapToGlobal( m_ptLastMouse ), + QPoint(), + QPoint( static_cast( vrEvent.data.scroll.xdelta + * ( 360.0f * 8.0f ) ), + static_cast( vrEvent.data.scroll.ydelta + * ( 360.0f * 8.0f ) ) ), + 0, + Qt::Vertical, + m_lastMouseButtons, + nullptr ); + QCoreApplication::sendEvent( &m_window, &wheelEvent ); + } + break; + + case vr::VREvent_OverlayShown: + { + m_window.update(); + } + break; + + case vr::VREvent_Quit: + { + qInfo() << "Received quit request."; + vr::VRSystem()->AcknowledgeQuit_Exiting(); // Let us buy some + // time just in case + + exitApp(); + // Won't fallthrough, but also exitApp() wont, but QT won't + // acknowledge + exit( EXIT_SUCCESS ); + } + + case vr::VREvent_DashboardActivated: + { + qDebug() << "Dashboard activated"; + m_dashboardVisible = true; + } + break; + + case vr::VREvent_DashboardDeactivated: + { + qDebug() << "Dashboard deactivated"; + m_dashboardVisible = false; + } + break; + + case vr::VREvent_KeyboardDone: + { + char keyboardBuffer[1024]; + vr::VROverlay()->GetKeyboardText( keyboardBuffer, 1024 ); + emit keyBoardInputSignal( QString( keyboardBuffer ), + static_cast( + vrEvent.data.keyboard.uUserValue ) ); + } + break; + } + } + + if ( m_ulOverlayThumbnailHandle != vr::k_ulOverlayHandleInvalid ) { + while ( vr::VROverlay()->PollNextOverlayEvent( + m_ulOverlayThumbnailHandle, &vrEvent, sizeof( vrEvent ) ) ) + { + switch ( vrEvent.eventType ) + { + case vr::VREvent_OverlayShown: + { + m_window.update(); + } + break; + } + } + } +} + +void OverlayController::showKeyboard(QString existingText, unsigned long userValue) +{ + vr::VROverlay()->ShowKeyboardForOverlay( + m_ulOverlayHandle, + vr::k_EGamepadTextInputModeNormal, + vr::k_EGamepadTextInputLineModeSingleLine, + 0, + "Advanced Settings Overlay", + 1024, + existingText.toStdString().c_str(), + userValue); + setKeyboardPos(); +} + +void OverlayController::setKeyboardPos() +{ + vr::HmdVector2_t emptyvec; + emptyvec.v[0] = 0; + emptyvec.v[1] = 0; + vr::HmdRect2_t empty; + empty.vTopLeft = emptyvec; + empty.vBottomRight = emptyvec; + vr::VROverlay()->SetKeyboardPositionForOverlay( m_ulOverlayHandle, empty ); +} + +QUrl OverlayController::getVRRuntimePathUrl() { + return m_runtimePathUrl; +} + +bool OverlayController::soundDisabled() { + return true; +} + +const vr::VROverlayHandle_t& OverlayController::overlayHandle() { + return m_ulOverlayHandle; +} + +const vr::VROverlayHandle_t& OverlayController::overlayThumbnailHandle() { + return m_ulOverlayThumbnailHandle; +} + +} // namespace wowletvr diff --git a/src/vr/overlaycontroller.h b/src/vr/overlaycontroller.h new file mode 100755 index 0000000..4cb7cde --- /dev/null +++ b/src/vr/overlaycontroller.h @@ -0,0 +1,134 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2020-2021, The Monero Project. +// Copyright (c) OpenVR Advanced Settings + +#pragma once + +#include +#include +// because of incompatibilities with QtOpenGL and GLEW we need to cherry pick includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "openvr_init.h" +#include "vr/utils/paths.h" +#include "appcontext.h" + +namespace application_strings +{ +constexpr auto applicationOrganizationName = "Wownero"; +constexpr auto applicationName = "Wowlet VR"; +constexpr const char* applicationKey = "steam.overlay.1001337"; +constexpr const char* applicationDisplayName = "Wowlet VR"; + +constexpr const char* applicationVersionString = "1337"; + +} // namespace application_strings + +constexpr int k_nonVsyncTickRate = 20; + +// application namespace +namespace wowletvr +{ + +class OverlayController : public QObject +{ + Q_OBJECT + +public: + OverlayController(bool desktopMode, QQmlEngine& qmlEngine); + virtual ~OverlayController(); + + void Shutdown(); + + Q_INVOKABLE void exitApp(); + + bool isDashboardVisible() + { + return m_dashboardVisible; + } + + void SetWidget( QQuickItem* quickItem, + const std::string& name, + const std::string& key = "" ); + + bool isDesktopMode() + { + return m_desktopMode; + } + + Q_INVOKABLE QUrl getVRRuntimePathUrl(); + Q_INVOKABLE bool soundDisabled(); + + const vr::VROverlayHandle_t& overlayHandle(); + const vr::VROverlayHandle_t& overlayThumbnailHandle(); + + bool pollNextEvent(vr::VROverlayHandle_t ulOverlayHandle, vr::VREvent_t* pEvent ); + void mainEventLoop(); + +private: + vr::VROverlayHandle_t m_ulOverlayHandle = vr::k_ulOverlayHandleInvalid; + vr::VROverlayHandle_t m_ulOverlayThumbnailHandle + = vr::k_ulOverlayHandleInvalid; + + QQuickRenderControl m_renderControl; + QQuickWindow m_window{ &m_renderControl }; + std::unique_ptr m_pFbo; + QOpenGLContext m_openGLContext; + QOffscreenSurface m_offscreenSurface; + + std::unique_ptr m_pRenderTimer; + bool m_dashboardVisible = false; + + QPoint m_ptLastMouse; + Qt::MouseButtons m_lastMouseButtons = nullptr; + + bool m_desktopMode; + + QUrl m_runtimePathUrl; + + uint64_t m_customTickRateCounter = 0; + uint64_t m_currentFrame = 0; + uint64_t m_lastFrame = 0; + + QNetworkAccessManager* netManager = new QNetworkAccessManager( this ); + QJsonDocument m_remoteVersionJsonDocument = QJsonDocument(); + QJsonObject m_remoteVersionJsonObject; + +private: + QPoint getMousePositionForEvent( vr::VREvent_Mouse_t mouse ); + + bool m_exclusiveState = false; + bool m_keyPressOneState = false; + bool m_keyPressTwoState = false; + + AppContext *m_ctx; + +public slots: + void renderOverlay(); + void OnRenderRequest(); + + void showKeyboard( QString existingText, unsigned long userValue = 0 ); + void setKeyboardPos(); + +signals: + void keyBoardInputSignal( QString input, unsigned long userValue = 0 ); +}; + +} // namespace wowletvr diff --git a/src/vr/utils/paths.cpp b/src/vr/utils/paths.cpp new file mode 100755 index 0000000..45d3553 --- /dev/null +++ b/src/vr/utils/paths.cpp @@ -0,0 +1,58 @@ +#include "paths.h" +#include +#include +#include +#include +#include + +namespace paths +{ +string binaryDirectory() +{ + const auto path = QCoreApplication::applicationDirPath(); + if ( path == "" ) { + qCritical() << "Could not find binary directory."; + return ""; + } + + return path.toStdString() + "/../"; // @ TODO: removeme +} + +string binaryDirectoryFindFile( const string& fileName ) { + const auto path = binaryDirectory(); + if (path.empty()) { + return ""; + } + + const auto filePath = QDir( QString::fromStdString( path ) + '/' + + QString::fromStdString( fileName ) ); + QFileInfo file( filePath.path() ); + if (!file.exists()) + { + qCritical() << "Could not find file '" << fileName.c_str() + << "' in binary directory."; + return ""; + } + + return QDir::toNativeSeparators( file.filePath() ).toStdString(); +} + +string settingsDirectory() { + const auto path = QStandardPaths::writableLocation( QStandardPaths::AppDataLocation ); + if (path == "") { + qCritical() << "Could not find settings directory."; + return ""; + } + return path.toStdString(); +} + +string verifyIconFilePath( const string& filename ) { + const string notifIconPath = paths::binaryDirectoryFindFile( filename ); + if (notifIconPath.empty()) { + qCritical() << "Could not find icon " << filename.c_str() << "\""; + } + + return notifIconPath; +} + +} // namespace paths diff --git a/src/vr/utils/paths.h b/src/vr/utils/paths.h new file mode 100755 index 0000000..aeb274f --- /dev/null +++ b/src/vr/utils/paths.h @@ -0,0 +1,16 @@ +#pragma once +#include +#include +#include +#include + +namespace paths +{ +using std::string; + +string binaryDirectory(); +string binaryDirectoryFindFile( const string& fileName ); +string settingsDirectory(); +string verifyIconFilePath( const string& filename ); + +} // namespace paths From aad58b1c83e4f08e3953bcc8c790383cc568359d Mon Sep 17 00:00:00 2001 From: dsc Date: Mon, 5 Apr 2021 13:36:39 +0200 Subject: [PATCH 03/15] Vendoring OpenVR --- contrib/openvr/CMakeLists.txt | 96 + contrib/openvr/LICENSE | 27 + contrib/openvr/README.md | 19 + contrib/openvr/Toolchain-clang.cmake | 9 + contrib/openvr/headers/openvr.h | 5624 +++++++++++ contrib/openvr/headers/openvr_api.cs | 8220 +++++++++++++++++ contrib/openvr/headers/openvr_api.json | 5761 ++++++++++++ contrib/openvr/headers/openvr_capi.h | 3125 +++++++ contrib/openvr/headers/openvr_driver.h | 4212 +++++++++ contrib/openvr/src/CMakeLists.txt | 116 + contrib/openvr/src/Info.plist | 18 + contrib/openvr/src/README | 39 + contrib/openvr/src/ivrclientcore.h | 35 + contrib/openvr/src/json/json-forwards.h | 284 + contrib/openvr/src/json/json.h | 2077 +++++ contrib/openvr/src/jsoncpp.cpp | 5266 +++++++++++ contrib/openvr/src/openvr.pc.in | 11 + contrib/openvr/src/openvr_api_public.cpp | 356 + .../openvr/src/vrcommon/dirtools_public.cpp | 101 + contrib/openvr/src/vrcommon/dirtools_public.h | 17 + .../src/vrcommon/envvartools_public.cpp | 88 + .../openvr/src/vrcommon/envvartools_public.h | 8 + .../openvr/src/vrcommon/hmderrors_public.cpp | 338 + .../openvr/src/vrcommon/hmderrors_public.h | 6 + .../openvr/src/vrcommon/pathtools_public.cpp | 988 ++ .../openvr/src/vrcommon/pathtools_public.h | 153 + .../src/vrcommon/sharedlibtools_public.cpp | 63 + .../src/vrcommon/sharedlibtools_public.h | 12 + .../openvr/src/vrcommon/strtools_public.cpp | 606 ++ contrib/openvr/src/vrcommon/strtools_public.h | 154 + .../src/vrcommon/vrpathregistry_public.cpp | 483 + .../src/vrcommon/vrpathregistry_public.h | 52 + 32 files changed, 38364 insertions(+) create mode 100755 contrib/openvr/CMakeLists.txt create mode 100755 contrib/openvr/LICENSE create mode 100755 contrib/openvr/README.md create mode 100755 contrib/openvr/Toolchain-clang.cmake create mode 100755 contrib/openvr/headers/openvr.h create mode 100755 contrib/openvr/headers/openvr_api.cs create mode 100755 contrib/openvr/headers/openvr_api.json create mode 100755 contrib/openvr/headers/openvr_capi.h create mode 100755 contrib/openvr/headers/openvr_driver.h create mode 100755 contrib/openvr/src/CMakeLists.txt create mode 100755 contrib/openvr/src/Info.plist create mode 100755 contrib/openvr/src/README create mode 100755 contrib/openvr/src/ivrclientcore.h create mode 100755 contrib/openvr/src/json/json-forwards.h create mode 100755 contrib/openvr/src/json/json.h create mode 100755 contrib/openvr/src/jsoncpp.cpp create mode 100755 contrib/openvr/src/openvr.pc.in create mode 100755 contrib/openvr/src/openvr_api_public.cpp create mode 100755 contrib/openvr/src/vrcommon/dirtools_public.cpp create mode 100755 contrib/openvr/src/vrcommon/dirtools_public.h create mode 100755 contrib/openvr/src/vrcommon/envvartools_public.cpp create mode 100755 contrib/openvr/src/vrcommon/envvartools_public.h create mode 100755 contrib/openvr/src/vrcommon/hmderrors_public.cpp create mode 100755 contrib/openvr/src/vrcommon/hmderrors_public.h create mode 100755 contrib/openvr/src/vrcommon/pathtools_public.cpp create mode 100755 contrib/openvr/src/vrcommon/pathtools_public.h create mode 100755 contrib/openvr/src/vrcommon/sharedlibtools_public.cpp create mode 100755 contrib/openvr/src/vrcommon/sharedlibtools_public.h create mode 100755 contrib/openvr/src/vrcommon/strtools_public.cpp create mode 100755 contrib/openvr/src/vrcommon/strtools_public.h create mode 100755 contrib/openvr/src/vrcommon/vrpathregistry_public.cpp create mode 100755 contrib/openvr/src/vrcommon/vrpathregistry_public.h diff --git a/contrib/openvr/CMakeLists.txt b/contrib/openvr/CMakeLists.txt new file mode 100755 index 0000000..8956cda --- /dev/null +++ b/contrib/openvr/CMakeLists.txt @@ -0,0 +1,96 @@ +# Set the minimum required version of CMake for this project. +cmake_minimum_required(VERSION 2.8) + +# Set project name. +project(OpenVRSDK) + +# Fetch the version from the headers +set(VERSION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/headers/openvr.h") + +set(VERSION_MAJOR_REGEX "\tstatic const uint32_t k_nSteamVRVersionMajor = (.+);") +set(VERSION_MINOR_REGEX "\tstatic const uint32_t k_nSteamVRVersionMinor = (.+);") +set(VERSION_BUILD_REGEX "\tstatic const uint32_t k_nSteamVRVersionBuild = (.+);") + +file(STRINGS "${VERSION_FILE}" VERSION_MAJOR_STRING REGEX "${VERSION_MAJOR_REGEX}") +file(STRINGS "${VERSION_FILE}" VERSION_MINOR_STRING REGEX "${VERSION_MINOR_REGEX}") +file(STRINGS "${VERSION_FILE}" VERSION_BUILD_STRING REGEX "${VERSION_BUILD_REGEX}") + +string(REGEX REPLACE "${VERSION_MAJOR_REGEX}" "\\1" VERSION_MAJOR ${VERSION_MAJOR_STRING}) +string(REGEX REPLACE "${VERSION_MINOR_REGEX}" "\\1" VERSION_MINOR ${VERSION_MINOR_STRING}) +string(REGEX REPLACE "${VERSION_BUILD_REGEX}" "\\1" VERSION_BUILD ${VERSION_BUILD_STRING}) + +set(OPENVR_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}") + +# Setup some options. +option(BUILD_SHARED "Builds the library as shared library" OFF) +option(BUILD_FRAMEWORK "Builds the library as an apple Framework" OFF) +option(BUILD_UNIVERSAL "Builds the shared or framework as a universal (fat, 32- & 64-bit) binary" ON) +option(BUILD_OSX_I386 "Builds the shared or framework as a 32-bit binary, even on a 64-bit platform" OFF) +option(USE_LIBCXX "Uses libc++ instead of libstdc++" ON) +option(USE_CUSTOM_LIBCXX "Uses a custom libc++" OFF) + +add_definitions( -DVR_API_PUBLIC ) + +# Check if 32 or 64 bit system. +set(SIZEOF_VOIDP ${CMAKE_SIZEOF_VOID_P}) +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(PROCESSOR_ARCH "64") +else() + set(PROCESSOR_ARCH "32") +endif() + +# Get platform. +if(WIN32) + set(PLATFORM_NAME "win") + if(NOT BUILD_SHARED) + add_definitions(-DOPENVR_BUILD_STATIC) + endif() +elseif(UNIX AND NOT APPLE) + if(CMAKE_SYSTEM_NAME MATCHES ".*Linux") + set(PLATFORM_NAME "linux") + add_definitions(-DLINUX -DPOSIX) + if(PROCESSOR_ARCH MATCHES "64") + add_definitions(-DLINUX64) + endif() + endif() +elseif(APPLE) + if(CMAKE_SYSTEM_NAME MATCHES ".*Darwin.*" OR CMAKE_SYSTEM_NAME MATCHES ".*MacOS.*") + set(PLATFORM_NAME "osx") + add_definitions(-DOSX -DPOSIX) + if(BUILD_UNIVERSAL) + set(CMAKE_OSX_ARCHITECTURES "i386;x86_64") + endif() + if(BUILD_OSX_I386) + set(PROCESSOR_ARCH "32") + set(CMAKE_OSX_ARCHITECTURES "i386") + endif() + endif() +endif() + +# Set output folder for static and shared libraries +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin/${PLATFORM_NAME}${PROCESSOR_ARCH}) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin/${PLATFORM_NAME}${PROCESSOR_ARCH}) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin/${PLATFORM_NAME}${PROCESSOR_ARCH}) + +# Enable some properties. +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") + # Enable c++11 and hide symbols which shouldn't be visible + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fPIC -fvisibility=hidden") + + # Set custom libc++ usage here + if(CMAKE_C_COMPILER_ID MATCHES "Clang" AND USE_LIBCXX) + if(USE_CUSTOM_LIBCXX) + if(BUILD_SHARED) + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -stdlib=libc++") + endif() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostdinc++") + include_directories( ${LIBCXX_INCLUDE} ${LIBCXX_ABI_INCLUDE}) + message(STATUS "Using custom libc++") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") + message(STATUS "Using libc++") + endif() + endif() +endif() + +add_subdirectory(src) diff --git a/contrib/openvr/LICENSE b/contrib/openvr/LICENSE new file mode 100755 index 0000000..ee83337 --- /dev/null +++ b/contrib/openvr/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2015, Valve Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/contrib/openvr/README.md b/contrib/openvr/README.md new file mode 100755 index 0000000..a1fbe77 --- /dev/null +++ b/contrib/openvr/README.md @@ -0,0 +1,19 @@ +### Warning + +**Hard forked from commit `4c85abcb7f7f1f02adaf3812018c99fc593bc341` @ openvr**. + +At the time of writing, the above version does not compile. Had to make several changes. In addition, +binary blobs where removed from the repository. + +### OpenVR SDK + +OpenVR is an API and runtime that allows access to VR hardware from multiple +vendors without requiring that applications have specific knowledge of the +hardware they are targeting. This repository is an SDK that contains the API +and samples. The runtime is under SteamVR in Tools on Steam. + +### Documentation + +Documentation for the API is available on the [GitHub Wiki](https://github.com/ValveSoftware/openvr/wiki/API-Documentation) + +More information on OpenVR and SteamVR can be found on http://steamvr.com diff --git a/contrib/openvr/Toolchain-clang.cmake b/contrib/openvr/Toolchain-clang.cmake new file mode 100755 index 0000000..fb6b0ac --- /dev/null +++ b/contrib/openvr/Toolchain-clang.cmake @@ -0,0 +1,9 @@ +set(CMAKE_SYSTEM_NAME Linux) + +set(CMAKE_C_COMPILER clang) +set(CMAKE_CXX_COMPILER clang++) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) diff --git a/contrib/openvr/headers/openvr.h b/contrib/openvr/headers/openvr.h new file mode 100755 index 0000000..ff6d1fe --- /dev/null +++ b/contrib/openvr/headers/openvr.h @@ -0,0 +1,5624 @@ +#pragma once + +// openvr.h +//========= Copyright Valve Corporation ============// +// Dynamically generated file. Do not modify this file directly. + +#ifndef _OPENVR_API +#define _OPENVR_API + +#include + + + +// version.h + +namespace vr +{ + static const uint32_t k_nSteamVRVersionMajor = 1; + static const uint32_t k_nSteamVRVersionMinor = 16; + static const uint32_t k_nSteamVRVersionBuild = 8; +} // namespace vr + +// public_vrtypes.h + +#ifndef _INCLUDE_CORE_VRTYPES_PUBLIC_H +#define _INCLUDE_CORE_VRTYPES_PUBLIC_H + +namespace vr +{ +#pragma pack( push, 8 ) + +// right-handed system +// +y is up +// +x is to the right +// -z is forward +// Distance unit is meters +struct HmdMatrix34_t +{ + float m[3][4]; +}; + +struct HmdMatrix33_t +{ + float m[3][3]; +}; + +struct HmdMatrix44_t +{ + float m[4][4]; +}; + +struct HmdVector3_t +{ + float v[3]; +}; + +struct HmdVector4_t +{ + float v[4]; +}; + +struct HmdVector3d_t +{ + double v[3]; +}; + +struct HmdVector2_t +{ + float v[2]; +}; + +struct HmdQuaternion_t +{ + double w, x, y, z; +}; + +struct HmdQuaternionf_t +{ + float w, x, y, z; +}; + +struct HmdColor_t +{ + float r, g, b, a; +}; + +struct HmdQuad_t +{ + HmdVector3_t vCorners[ 4 ]; +}; + +struct HmdRect2_t +{ + HmdVector2_t vTopLeft; + HmdVector2_t vBottomRight; +}; + +/** Holds the transform for a single bone */ +struct VRBoneTransform_t +{ + HmdVector4_t position; + HmdQuaternionf_t orientation; +}; + +#pragma pack( pop ) + +} // namespace vr + +#endif + +// vrtypes.h + +#ifndef _INCLUDE_VRTYPES_H +#define _INCLUDE_VRTYPES_H + +// Forward declarations to avoid requiring vulkan.h +struct VkDevice_T; +struct VkPhysicalDevice_T; +struct VkInstance_T; +struct VkQueue_T; + +// Forward declarations to avoid requiring d3d12.h +struct ID3D12Resource; +struct ID3D12CommandQueue; + +namespace vr +{ +#pragma pack( push, 8 ) + +/** A handle for a spatial anchor. This handle is only valid during the session it was created in. +* Anchors that live beyond one session should be saved by their string descriptors. */ +typedef uint32_t SpatialAnchorHandle_t; + +typedef void* glSharedTextureHandle_t; +typedef int32_t glInt_t; +typedef uint32_t glUInt_t; + + +/** Used to return the post-distortion UVs for each color channel. +* UVs range from 0 to 1 with 0,0 in the upper left corner of the +* source render target. The 0,0 to 1,1 range covers a single eye. */ +struct DistortionCoordinates_t +{ + float rfRed[2]; + float rfGreen[2]; + float rfBlue[2]; +}; + +enum EVREye +{ + Eye_Left = 0, + Eye_Right = 1 +}; + +enum ETextureType +{ + TextureType_Invalid = -1, // Handle has been invalidated + TextureType_DirectX = 0, // Handle is an ID3D11Texture + TextureType_OpenGL = 1, // Handle is an OpenGL texture name or an OpenGL render buffer name, depending on submit flags + TextureType_Vulkan = 2, // Handle is a pointer to a VRVulkanTextureData_t structure + TextureType_IOSurface = 3, // Handle is a macOS cross-process-sharable IOSurfaceRef, deprecated in favor of TextureType_Metal on supported platforms + TextureType_DirectX12 = 4, // Handle is a pointer to a D3D12TextureData_t structure + TextureType_DXGISharedHandle = 5, // Handle is a HANDLE DXGI share handle, only supported for Overlay render targets. + // this texture is used directly by our renderer, so only perform atomic (copyresource or resolve) on it + TextureType_Metal = 6, // Handle is a MTLTexture conforming to the MTLSharedTexture protocol. Textures submitted to IVRCompositor::Submit which + // are of type MTLTextureType2DArray assume layer 0 is the left eye texture (vr::EVREye::Eye_left), layer 1 is the right + // eye texture (vr::EVREye::Eye_Right) +}; + +enum EColorSpace +{ + ColorSpace_Auto = 0, // Assumes 'gamma' for 8-bit per component formats, otherwise 'linear'. This mirrors the DXGI formats which have _SRGB variants. + ColorSpace_Gamma = 1, // Texture data can be displayed directly on the display without any conversion (a.k.a. display native format). + ColorSpace_Linear = 2, // Same as gamma but has been converted to a linear representation using DXGI's sRGB conversion algorithm. +}; + +struct Texture_t +{ + void* handle; // See ETextureType definition above + ETextureType eType; + EColorSpace eColorSpace; +}; + +// Handle to a shared texture (HANDLE on Windows obtained using OpenSharedResource). +typedef uint64_t SharedTextureHandle_t; +#define INVALID_SHARED_TEXTURE_HANDLE ((vr::SharedTextureHandle_t)0) + +enum ETrackingResult +{ + TrackingResult_Uninitialized = 1, + + TrackingResult_Calibrating_InProgress = 100, + TrackingResult_Calibrating_OutOfRange = 101, + + TrackingResult_Running_OK = 200, + TrackingResult_Running_OutOfRange = 201, + + TrackingResult_Fallback_RotationOnly = 300, +}; + +typedef uint32_t DriverId_t; +static const uint32_t k_nDriverNone = 0xFFFFFFFF; + +static const uint32_t k_unMaxDriverDebugResponseSize = 32768; + +/** Used to pass device IDs to API calls */ +typedef uint32_t TrackedDeviceIndex_t; +static const uint32_t k_unTrackedDeviceIndex_Hmd = 0; +static const uint32_t k_unMaxTrackedDeviceCount = 64; +static const uint32_t k_unTrackedDeviceIndexOther = 0xFFFFFFFE; +static const uint32_t k_unTrackedDeviceIndexInvalid = 0xFFFFFFFF; + +/** Describes what kind of object is being tracked at a given ID */ +enum ETrackedDeviceClass +{ + TrackedDeviceClass_Invalid = 0, // the ID was not valid. + TrackedDeviceClass_HMD = 1, // Head-Mounted Displays + TrackedDeviceClass_Controller = 2, // Tracked controllers + TrackedDeviceClass_GenericTracker = 3, // Generic trackers, similar to controllers + TrackedDeviceClass_TrackingReference = 4, // Camera and base stations that serve as tracking reference points + TrackedDeviceClass_DisplayRedirect = 5, // Accessories that aren't necessarily tracked themselves, but may redirect video output from other tracked devices + + TrackedDeviceClass_Max +}; + + +/** Describes what specific role associated with a tracked device */ +enum ETrackedControllerRole +{ + TrackedControllerRole_Invalid = 0, // Invalid value for controller type + TrackedControllerRole_LeftHand = 1, // Tracked device associated with the left hand + TrackedControllerRole_RightHand = 2, // Tracked device associated with the right hand + TrackedControllerRole_OptOut = 3, // Tracked device is opting out of left/right hand selection + TrackedControllerRole_Treadmill = 4, // Tracked device is a treadmill or other locomotion device + TrackedControllerRole_Stylus = 5, // Tracked device is a stylus + TrackedControllerRole_Max = 5 +}; + + +/** Returns true if the tracked controller role is allowed to be a hand */ +inline bool IsRoleAllowedAsHand( ETrackedControllerRole eRole ) +{ + switch ( eRole ) + { + case TrackedControllerRole_Invalid: + case TrackedControllerRole_LeftHand: + case TrackedControllerRole_RightHand: + return true; + default: + return false; + } +} + + +/** describes a single pose for a tracked object */ +struct TrackedDevicePose_t +{ + HmdMatrix34_t mDeviceToAbsoluteTracking; + HmdVector3_t vVelocity; // velocity in tracker space in m/s + HmdVector3_t vAngularVelocity; // angular velocity in radians/s (?) + ETrackingResult eTrackingResult; + bool bPoseIsValid; + + // This indicates that there is a device connected for this spot in the pose array. + // It could go from true to false if the user unplugs the device. + bool bDeviceIsConnected; +}; + +/** Identifies which style of tracking origin the application wants to use +* for the poses it is requesting */ +enum ETrackingUniverseOrigin +{ + TrackingUniverseSeated = 0, // Poses are provided relative to the seated zero pose + TrackingUniverseStanding = 1, // Poses are provided relative to the safe bounds configured by the user + TrackingUniverseRawAndUncalibrated = 2, // Poses are provided in the coordinate system defined by the driver. It has Y up and is unified for devices of the same driver. You usually don't want this one. +}; + +enum EAdditionalRadioFeatures +{ + AdditionalRadioFeatures_None = 0x00000000, + AdditionalRadioFeatures_HTCLinkBox = 0x00000001, + AdditionalRadioFeatures_InternalDongle = 0x00000002, + AdditionalRadioFeatures_ExternalDongle = 0x00000004, +}; + +typedef uint64_t WebConsoleHandle_t; +#define INVALID_WEB_CONSOLE_HANDLE ((vr::WebConsoleHandle_t)0) + +// Refers to a single container of properties +typedef uint64_t PropertyContainerHandle_t; +typedef uint32_t PropertyTypeTag_t; + +static const PropertyContainerHandle_t k_ulInvalidPropertyContainer = 0; +static const PropertyTypeTag_t k_unInvalidPropertyTag = 0; + +typedef PropertyContainerHandle_t DriverHandle_t; +static const PropertyContainerHandle_t k_ulInvalidDriverHandle = 0; + +// Use these tags to set/get common types as struct properties +static const PropertyTypeTag_t k_unFloatPropertyTag = 1; +static const PropertyTypeTag_t k_unInt32PropertyTag = 2; +static const PropertyTypeTag_t k_unUint64PropertyTag = 3; +static const PropertyTypeTag_t k_unBoolPropertyTag = 4; +static const PropertyTypeTag_t k_unStringPropertyTag = 5; +static const PropertyTypeTag_t k_unErrorPropertyTag = 6; +static const PropertyTypeTag_t k_unDoublePropertyTag = 7; + +static const PropertyTypeTag_t k_unHmdMatrix34PropertyTag = 20; +static const PropertyTypeTag_t k_unHmdMatrix44PropertyTag = 21; +static const PropertyTypeTag_t k_unHmdVector3PropertyTag = 22; +static const PropertyTypeTag_t k_unHmdVector4PropertyTag = 23; +static const PropertyTypeTag_t k_unHmdVector2PropertyTag = 24; +static const PropertyTypeTag_t k_unHmdQuadPropertyTag = 25; + +static const PropertyTypeTag_t k_unHiddenAreaPropertyTag = 30; +static const PropertyTypeTag_t k_unPathHandleInfoTag = 31; +static const PropertyTypeTag_t k_unActionPropertyTag = 32; +static const PropertyTypeTag_t k_unInputValuePropertyTag = 33; +static const PropertyTypeTag_t k_unWildcardPropertyTag = 34; +static const PropertyTypeTag_t k_unHapticVibrationPropertyTag = 35; +static const PropertyTypeTag_t k_unSkeletonPropertyTag = 36; + +static const PropertyTypeTag_t k_unSpatialAnchorPosePropertyTag = 40; +static const PropertyTypeTag_t k_unJsonPropertyTag = 41; +static const PropertyTypeTag_t k_unActiveActionSetPropertyTag = 42; + +static const PropertyTypeTag_t k_unOpenVRInternalReserved_Start = 1000; +static const PropertyTypeTag_t k_unOpenVRInternalReserved_End = 10000; + + +/** Each entry in this enum represents a property that can be retrieved about a +* tracked device. Many fields are only valid for one ETrackedDeviceClass. */ +enum ETrackedDeviceProperty +{ + Prop_Invalid = 0, + + // general properties that apply to all device classes + Prop_TrackingSystemName_String = 1000, + Prop_ModelNumber_String = 1001, + Prop_SerialNumber_String = 1002, + Prop_RenderModelName_String = 1003, + Prop_WillDriftInYaw_Bool = 1004, + Prop_ManufacturerName_String = 1005, + Prop_TrackingFirmwareVersion_String = 1006, + Prop_HardwareRevision_String = 1007, + Prop_AllWirelessDongleDescriptions_String = 1008, + Prop_ConnectedWirelessDongle_String = 1009, + Prop_DeviceIsWireless_Bool = 1010, + Prop_DeviceIsCharging_Bool = 1011, + Prop_DeviceBatteryPercentage_Float = 1012, // 0 is empty, 1 is full + Prop_StatusDisplayTransform_Matrix34 = 1013, + Prop_Firmware_UpdateAvailable_Bool = 1014, + Prop_Firmware_ManualUpdate_Bool = 1015, + Prop_Firmware_ManualUpdateURL_String = 1016, + Prop_HardwareRevision_Uint64 = 1017, + Prop_FirmwareVersion_Uint64 = 1018, + Prop_FPGAVersion_Uint64 = 1019, + Prop_VRCVersion_Uint64 = 1020, + Prop_RadioVersion_Uint64 = 1021, + Prop_DongleVersion_Uint64 = 1022, + Prop_BlockServerShutdown_Bool = 1023, + Prop_CanUnifyCoordinateSystemWithHmd_Bool = 1024, + Prop_ContainsProximitySensor_Bool = 1025, + Prop_DeviceProvidesBatteryStatus_Bool = 1026, + Prop_DeviceCanPowerOff_Bool = 1027, + Prop_Firmware_ProgrammingTarget_String = 1028, + Prop_DeviceClass_Int32 = 1029, + Prop_HasCamera_Bool = 1030, + Prop_DriverVersion_String = 1031, + Prop_Firmware_ForceUpdateRequired_Bool = 1032, + Prop_ViveSystemButtonFixRequired_Bool = 1033, + Prop_ParentDriver_Uint64 = 1034, + Prop_ResourceRoot_String = 1035, + Prop_RegisteredDeviceType_String = 1036, + Prop_InputProfilePath_String = 1037, // input profile to use for this device in the input system. Will default to tracking system name if this isn't provided + Prop_NeverTracked_Bool = 1038, // Used for devices that will never have a valid pose by design + Prop_NumCameras_Int32 = 1039, + Prop_CameraFrameLayout_Int32 = 1040, // EVRTrackedCameraFrameLayout value + Prop_CameraStreamFormat_Int32 = 1041, // ECameraVideoStreamFormat value + Prop_AdditionalDeviceSettingsPath_String = 1042, // driver-relative path to additional device and global configuration settings + Prop_Identifiable_Bool = 1043, // Whether device supports being identified from vrmonitor (e.g. blink LED, vibrate haptics, etc) + Prop_BootloaderVersion_Uint64 = 1044, + Prop_AdditionalSystemReportData_String = 1045, // additional string to include in system reports about a tracked device + Prop_CompositeFirmwareVersion_String = 1046, // additional FW components from a device that gets propagated into reports + Prop_Firmware_RemindUpdate_Bool = 1047, + Prop_PeripheralApplicationVersion_Uint64 = 1048, + Prop_ManufacturerSerialNumber_String = 1049, + Prop_ComputedSerialNumber_String = 1050, + Prop_EstimatedDeviceFirstUseTime_Int32 = 1051, + + // Properties that are unique to TrackedDeviceClass_HMD + Prop_ReportsTimeSinceVSync_Bool = 2000, + Prop_SecondsFromVsyncToPhotons_Float = 2001, + Prop_DisplayFrequency_Float = 2002, + Prop_UserIpdMeters_Float = 2003, + Prop_CurrentUniverseId_Uint64 = 2004, + Prop_PreviousUniverseId_Uint64 = 2005, + Prop_DisplayFirmwareVersion_Uint64 = 2006, + Prop_IsOnDesktop_Bool = 2007, + Prop_DisplayMCType_Int32 = 2008, + Prop_DisplayMCOffset_Float = 2009, + Prop_DisplayMCScale_Float = 2010, + Prop_EdidVendorID_Int32 = 2011, + Prop_DisplayMCImageLeft_String = 2012, + Prop_DisplayMCImageRight_String = 2013, + Prop_DisplayGCBlackClamp_Float = 2014, + Prop_EdidProductID_Int32 = 2015, + Prop_CameraToHeadTransform_Matrix34 = 2016, + Prop_DisplayGCType_Int32 = 2017, + Prop_DisplayGCOffset_Float = 2018, + Prop_DisplayGCScale_Float = 2019, + Prop_DisplayGCPrescale_Float = 2020, + Prop_DisplayGCImage_String = 2021, + Prop_LensCenterLeftU_Float = 2022, + Prop_LensCenterLeftV_Float = 2023, + Prop_LensCenterRightU_Float = 2024, + Prop_LensCenterRightV_Float = 2025, + Prop_UserHeadToEyeDepthMeters_Float = 2026, + Prop_CameraFirmwareVersion_Uint64 = 2027, + Prop_CameraFirmwareDescription_String = 2028, + Prop_DisplayFPGAVersion_Uint64 = 2029, + Prop_DisplayBootloaderVersion_Uint64 = 2030, + Prop_DisplayHardwareVersion_Uint64 = 2031, + Prop_AudioFirmwareVersion_Uint64 = 2032, + Prop_CameraCompatibilityMode_Int32 = 2033, + Prop_ScreenshotHorizontalFieldOfViewDegrees_Float = 2034, + Prop_ScreenshotVerticalFieldOfViewDegrees_Float = 2035, + Prop_DisplaySuppressed_Bool = 2036, + Prop_DisplayAllowNightMode_Bool = 2037, + Prop_DisplayMCImageWidth_Int32 = 2038, + Prop_DisplayMCImageHeight_Int32 = 2039, + Prop_DisplayMCImageNumChannels_Int32 = 2040, + Prop_DisplayMCImageData_Binary = 2041, + Prop_SecondsFromPhotonsToVblank_Float = 2042, + Prop_DriverDirectModeSendsVsyncEvents_Bool = 2043, + Prop_DisplayDebugMode_Bool = 2044, + Prop_GraphicsAdapterLuid_Uint64 = 2045, + Prop_DriverProvidedChaperonePath_String = 2048, + Prop_ExpectedTrackingReferenceCount_Int32 = 2049, // expected number of sensors or basestations to reserve UI space for + Prop_ExpectedControllerCount_Int32 = 2050, // expected number of tracked controllers to reserve UI space for + Prop_NamedIconPathControllerLeftDeviceOff_String = 2051, // placeholder icon for "left" controller if not yet detected/loaded + Prop_NamedIconPathControllerRightDeviceOff_String = 2052, // placeholder icon for "right" controller if not yet detected/loaded + Prop_NamedIconPathTrackingReferenceDeviceOff_String = 2053, // placeholder icon for sensor/base if not yet detected/loaded + Prop_DoNotApplyPrediction_Bool = 2054, // currently no effect. was used to disable HMD pose prediction on MR, which is now done by MR driver setting velocity=0 + Prop_CameraToHeadTransforms_Matrix34_Array = 2055, + Prop_DistortionMeshResolution_Int32 = 2056, // custom resolution of compositor calls to IVRSystem::ComputeDistortion + Prop_DriverIsDrawingControllers_Bool = 2057, + Prop_DriverRequestsApplicationPause_Bool = 2058, + Prop_DriverRequestsReducedRendering_Bool = 2059, + Prop_MinimumIpdStepMeters_Float = 2060, + Prop_AudioBridgeFirmwareVersion_Uint64 = 2061, + Prop_ImageBridgeFirmwareVersion_Uint64 = 2062, + Prop_ImuToHeadTransform_Matrix34 = 2063, + Prop_ImuFactoryGyroBias_Vector3 = 2064, + Prop_ImuFactoryGyroScale_Vector3 = 2065, + Prop_ImuFactoryAccelerometerBias_Vector3 = 2066, + Prop_ImuFactoryAccelerometerScale_Vector3 = 2067, + // reserved 2068 + Prop_ConfigurationIncludesLighthouse20Features_Bool = 2069, + Prop_AdditionalRadioFeatures_Uint64 = 2070, + Prop_CameraWhiteBalance_Vector4_Array = 2071, // Prop_NumCameras_Int32-sized array of float[4] RGBG white balance calibration data (max size is vr::k_unMaxCameras) + Prop_CameraDistortionFunction_Int32_Array = 2072, // Prop_NumCameras_Int32-sized array of vr::EVRDistortionFunctionType values (max size is vr::k_unMaxCameras) + Prop_CameraDistortionCoefficients_Float_Array = 2073, // Prop_NumCameras_Int32-sized array of double[vr::k_unMaxDistortionFunctionParameters] (max size is vr::k_unMaxCameras) + Prop_ExpectedControllerType_String = 2074, + Prop_HmdTrackingStyle_Int32 = 2075, // one of EHmdTrackingStyle + Prop_DriverProvidedChaperoneVisibility_Bool = 2076, + Prop_HmdColumnCorrectionSettingPrefix_String = 2077, + Prop_CameraSupportsCompatibilityModes_Bool = 2078, + Prop_SupportsRoomViewDepthProjection_Bool = 2079, + Prop_DisplayAvailableFrameRates_Float_Array = 2080, // populated by compositor from actual EDID list when available from GPU driver + Prop_DisplaySupportsMultipleFramerates_Bool = 2081, // if this is true but Prop_DisplayAvailableFrameRates_Float_Array is empty, explain to user + Prop_DisplayColorMultLeft_Vector3 = 2082, + Prop_DisplayColorMultRight_Vector3 = 2083, + Prop_DisplaySupportsRuntimeFramerateChange_Bool = 2084, + Prop_DisplaySupportsAnalogGain_Bool = 2085, + Prop_DisplayMinAnalogGain_Float = 2086, + Prop_DisplayMaxAnalogGain_Float = 2087, + Prop_CameraExposureTime_Float = 2088, + Prop_CameraGlobalGain_Float = 2089, + // Prop_DashboardLayoutPathName_String = 2090, // DELETED + Prop_DashboardScale_Float = 2091, + Prop_IpdUIRangeMinMeters_Float = 2100, + Prop_IpdUIRangeMaxMeters_Float = 2101, + Prop_Hmd_SupportsHDCP14LegacyCompat_Bool = 2102, + Prop_Hmd_SupportsMicMonitoring_Bool = 2103, + + // Driver requested mura correction properties + Prop_DriverRequestedMuraCorrectionMode_Int32 = 2200, + Prop_DriverRequestedMuraFeather_InnerLeft_Int32 = 2201, + Prop_DriverRequestedMuraFeather_InnerRight_Int32 = 2202, + Prop_DriverRequestedMuraFeather_InnerTop_Int32 = 2203, + Prop_DriverRequestedMuraFeather_InnerBottom_Int32 = 2204, + Prop_DriverRequestedMuraFeather_OuterLeft_Int32 = 2205, + Prop_DriverRequestedMuraFeather_OuterRight_Int32 = 2206, + Prop_DriverRequestedMuraFeather_OuterTop_Int32 = 2207, + Prop_DriverRequestedMuraFeather_OuterBottom_Int32 = 2208, + + Prop_Audio_DefaultPlaybackDeviceId_String = 2300, + Prop_Audio_DefaultRecordingDeviceId_String = 2301, + Prop_Audio_DefaultPlaybackDeviceVolume_Float = 2302, + Prop_Audio_SupportsDualSpeakerAndJackOutput_Bool = 2303, + + // Properties that are unique to TrackedDeviceClass_Controller + Prop_AttachedDeviceId_String = 3000, + Prop_SupportedButtons_Uint64 = 3001, + Prop_Axis0Type_Int32 = 3002, // Return value is of type EVRControllerAxisType + Prop_Axis1Type_Int32 = 3003, // Return value is of type EVRControllerAxisType + Prop_Axis2Type_Int32 = 3004, // Return value is of type EVRControllerAxisType + Prop_Axis3Type_Int32 = 3005, // Return value is of type EVRControllerAxisType + Prop_Axis4Type_Int32 = 3006, // Return value is of type EVRControllerAxisType + Prop_ControllerRoleHint_Int32 = 3007, // Return value is of type ETrackedControllerRole + + // Properties that are unique to TrackedDeviceClass_TrackingReference + Prop_FieldOfViewLeftDegrees_Float = 4000, + Prop_FieldOfViewRightDegrees_Float = 4001, + Prop_FieldOfViewTopDegrees_Float = 4002, + Prop_FieldOfViewBottomDegrees_Float = 4003, + Prop_TrackingRangeMinimumMeters_Float = 4004, + Prop_TrackingRangeMaximumMeters_Float = 4005, + Prop_ModeLabel_String = 4006, + Prop_CanWirelessIdentify_Bool = 4007, // volatile, based on radio presence and fw discovery + Prop_Nonce_Int32 = 4008, + + // Properties that are used for user interface like icons names + Prop_IconPathName_String = 5000, // DEPRECATED. Value not referenced. Now expected to be part of icon path properties. + Prop_NamedIconPathDeviceOff_String = 5001, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + Prop_NamedIconPathDeviceSearching_String = 5002, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + Prop_NamedIconPathDeviceSearchingAlert_String = 5003, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + Prop_NamedIconPathDeviceReady_String = 5004, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + Prop_NamedIconPathDeviceReadyAlert_String = 5005, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + Prop_NamedIconPathDeviceNotReady_String = 5006, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + Prop_NamedIconPathDeviceStandby_String = 5007, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + Prop_NamedIconPathDeviceAlertLow_String = 5008, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + Prop_NamedIconPathDeviceStandbyAlert_String = 5009, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + + // Properties that are used by helpers, but are opaque to applications + Prop_DisplayHiddenArea_Binary_Start = 5100, + Prop_DisplayHiddenArea_Binary_End = 5150, + Prop_ParentContainer = 5151, + Prop_OverrideContainer_Uint64 = 5152, + + // Properties that are unique to drivers + Prop_UserConfigPath_String = 6000, + Prop_InstallPath_String = 6001, + Prop_HasDisplayComponent_Bool = 6002, + Prop_HasControllerComponent_Bool = 6003, + Prop_HasCameraComponent_Bool = 6004, + Prop_HasDriverDirectModeComponent_Bool = 6005, + Prop_HasVirtualDisplayComponent_Bool = 6006, + Prop_HasSpatialAnchorsSupport_Bool = 6007, + + // Properties that are set internally based on other information provided by drivers + Prop_ControllerType_String = 7000, + //Prop_LegacyInputProfile_String = 7001, // This is no longer used. See "legacy_binding" in the input profile instead. + Prop_ControllerHandSelectionPriority_Int32 = 7002, // Allows hand assignments to prefer some controllers over others. High numbers are selected over low numbers + + // Vendors are free to expose private debug data in this reserved region + Prop_VendorSpecific_Reserved_Start = 10000, + Prop_VendorSpecific_Reserved_End = 10999, + + Prop_TrackedDeviceProperty_Max = 1000000, +}; + +/** No string property will ever be longer than this length */ +static const uint32_t k_unMaxPropertyStringSize = 32 * 1024; + +/** Used to return errors that occur when reading properties. */ +enum ETrackedPropertyError +{ + TrackedProp_Success = 0, + TrackedProp_WrongDataType = 1, + TrackedProp_WrongDeviceClass = 2, + TrackedProp_BufferTooSmall = 3, + TrackedProp_UnknownProperty = 4, // Driver has not set the property (and may not ever). + TrackedProp_InvalidDevice = 5, + TrackedProp_CouldNotContactServer = 6, + TrackedProp_ValueNotProvidedByDevice = 7, + TrackedProp_StringExceedsMaximumLength = 8, + TrackedProp_NotYetAvailable = 9, // The property value isn't known yet, but is expected soon. Call again later. + TrackedProp_PermissionDenied = 10, + TrackedProp_InvalidOperation = 11, + TrackedProp_CannotWriteToWildcards = 12, + TrackedProp_IPCReadFailure = 13, + TrackedProp_OutOfMemory = 14, + TrackedProp_InvalidContainer = 15, +}; + +/** Used to drive certain text in the UI when talking about the tracking system for the HMD */ +enum EHmdTrackingStyle +{ + HmdTrackingStyle_Unknown = 0, + + HmdTrackingStyle_Lighthouse = 1, // base stations and lasers + HmdTrackingStyle_OutsideInCameras = 2, // Cameras and LED, Rift 1 style + HmdTrackingStyle_InsideOutCameras = 3, // Cameras on HMD looking at the world +}; + +typedef uint64_t VRActionHandle_t; +typedef uint64_t VRActionSetHandle_t; +typedef uint64_t VRInputValueHandle_t; + +static const VRActionHandle_t k_ulInvalidActionHandle = 0; +static const VRActionSetHandle_t k_ulInvalidActionSetHandle = 0; +static const VRInputValueHandle_t k_ulInvalidInputValueHandle = 0; + + +/** Allows the application to control what part of the provided texture will be used in the +* frame buffer. */ +struct VRTextureBounds_t +{ + float uMin, vMin; + float uMax, vMax; +}; + +/** Allows specifying pose used to render provided scene texture (if different from value returned by WaitGetPoses). */ +struct VRTextureWithPose_t : public Texture_t +{ + HmdMatrix34_t mDeviceToAbsoluteTracking; // Actual pose used to render scene textures. +}; + +struct VRTextureDepthInfo_t +{ + void* handle; // See ETextureType definition above + HmdMatrix44_t mProjection; + HmdVector2_t vRange; // 0..1 +}; + +struct VRTextureWithDepth_t : public Texture_t +{ + VRTextureDepthInfo_t depth; +}; + +struct VRTextureWithPoseAndDepth_t : public VRTextureWithPose_t +{ + VRTextureDepthInfo_t depth; +}; + +/** Allows the application to control how scene textures are used by the compositor when calling Submit. */ +enum EVRSubmitFlags +{ + // Simple render path. App submits rendered left and right eye images with no lens distortion correction applied. + Submit_Default = 0x00, + + // App submits final left and right eye images with lens distortion already applied (lens distortion makes the images appear + // barrel distorted with chromatic aberration correction applied). The app would have used the data returned by + // vr::IVRSystem::ComputeDistortion() to apply the correct distortion to the rendered images before calling Submit(). + Submit_LensDistortionAlreadyApplied = 0x01, + + // If the texture pointer passed in is actually a renderbuffer (e.g. for MSAA in OpenGL) then set this flag. + Submit_GlRenderBuffer = 0x02, + + // Do not use + Submit_Reserved = 0x04, + + // Set to indicate that pTexture is a pointer to a VRTextureWithPose_t. + // This flag can be combined with Submit_TextureWithDepth to pass a VRTextureWithPoseAndDepth_t. + Submit_TextureWithPose = 0x08, + + // Set to indicate that pTexture is a pointer to a VRTextureWithDepth_t. + // This flag can be combined with Submit_TextureWithPose to pass a VRTextureWithPoseAndDepth_t. + Submit_TextureWithDepth = 0x10, + + // Set to indicate a discontinuity between this and the last frame. + // This will prevent motion smoothing from attempting to extrapolate using the pair. + Submit_FrameDiscontinuty = 0x20, + + // Set to indicate that pTexture->handle is a contains VRVulkanTextureArrayData_t + Submit_VulkanTextureWithArrayData = 0x40, + + // If the texture pointer passed in is an OpenGL Array texture, set this flag + Submit_GlArrayTexture = 0x80, + + // Do not use + Submit_Reserved2 = 0x8000, + + +}; + +/** Data required for passing Vulkan textures to IVRCompositor::Submit. +* Be sure to call OpenVR_Shutdown before destroying these resources. +* Please see https://github.com/ValveSoftware/openvr/wiki/Vulkan for Vulkan-specific documentation */ +struct VRVulkanTextureData_t +{ + uint64_t m_nImage; // VkImage + VkDevice_T *m_pDevice; + VkPhysicalDevice_T *m_pPhysicalDevice; + VkInstance_T *m_pInstance; + VkQueue_T *m_pQueue; + uint32_t m_nQueueFamilyIndex; + uint32_t m_nWidth, m_nHeight, m_nFormat, m_nSampleCount; +}; + +/** Data required for passing Vulkan texture arrays to IVRCompositor::Submit. +* Be sure to call OpenVR_Shutdown before destroying these resources. +* Please see https://github.com/ValveSoftware/openvr/wiki/Vulkan for Vulkan-specific documentation */ +struct VRVulkanTextureArrayData_t : public VRVulkanTextureData_t +{ + uint32_t m_unArrayIndex; + uint32_t m_unArraySize; +}; + +/** Data required for passing D3D12 textures to IVRCompositor::Submit. +* Be sure to call OpenVR_Shutdown before destroying these resources. */ +struct D3D12TextureData_t +{ + ID3D12Resource *m_pResource; + ID3D12CommandQueue *m_pCommandQueue; + uint32_t m_nNodeMask; +}; + +/** Status of the overall system or tracked objects */ +enum EVRState +{ + VRState_Undefined = -1, + VRState_Off = 0, + VRState_Searching = 1, + VRState_Searching_Alert = 2, + VRState_Ready = 3, + VRState_Ready_Alert = 4, + VRState_NotReady = 5, + VRState_Standby = 6, + VRState_Ready_Alert_Low = 7, +}; + +/** The types of events that could be posted (and what the parameters mean for each event type) */ +enum EVREventType +{ + VREvent_None = 0, + + VREvent_TrackedDeviceActivated = 100, + VREvent_TrackedDeviceDeactivated = 101, + VREvent_TrackedDeviceUpdated = 102, + VREvent_TrackedDeviceUserInteractionStarted = 103, + VREvent_TrackedDeviceUserInteractionEnded = 104, + VREvent_IpdChanged = 105, + VREvent_EnterStandbyMode = 106, + VREvent_LeaveStandbyMode = 107, + VREvent_TrackedDeviceRoleChanged = 108, + VREvent_WatchdogWakeUpRequested = 109, + VREvent_LensDistortionChanged = 110, + VREvent_PropertyChanged = 111, + VREvent_WirelessDisconnect = 112, + VREvent_WirelessReconnect = 113, + + VREvent_ButtonPress = 200, // data is controller + VREvent_ButtonUnpress = 201, // data is controller + VREvent_ButtonTouch = 202, // data is controller + VREvent_ButtonUntouch = 203, // data is controller + + // VREvent_DualAnalog_Press = 250, // No longer sent + // VREvent_DualAnalog_Unpress = 251, // No longer sent + // VREvent_DualAnalog_Touch = 252, // No longer sent + // VREvent_DualAnalog_Untouch = 253, // No longer sent + // VREvent_DualAnalog_Move = 254, // No longer sent + // VREvent_DualAnalog_ModeSwitch1 = 255, // No longer sent + // VREvent_DualAnalog_ModeSwitch2 = 256, // No longer sent + VREvent_Modal_Cancel = 257, // Sent to overlays with the + + VREvent_MouseMove = 300, // data is mouse + VREvent_MouseButtonDown = 301, // data is mouse + VREvent_MouseButtonUp = 302, // data is mouse + VREvent_FocusEnter = 303, // data is overlay + VREvent_FocusLeave = 304, // data is overlay + VREvent_ScrollDiscrete = 305, // data is scroll + VREvent_TouchPadMove = 306, // data is mouse + VREvent_OverlayFocusChanged = 307, // data is overlay, global event + VREvent_ReloadOverlays = 308, + VREvent_ScrollSmooth = 309, // data is scroll + VREvent_LockMousePosition = 310, + VREvent_UnlockMousePosition = 311, + + VREvent_InputFocusCaptured = 400, // data is process DEPRECATED + VREvent_InputFocusReleased = 401, // data is process DEPRECATED + // VREvent_SceneFocusLost = 402, // data is process + // VREvent_SceneFocusGained = 403, // data is process + VREvent_SceneApplicationChanged = 404, // data is process - The App actually drawing the scene changed (usually to or from the compositor) + VREvent_SceneFocusChanged = 405, // data is process - New app got access to draw the scene + VREvent_InputFocusChanged = 406, // data is process + // VREvent_SceneApplicationSecondaryRenderingStarted = 407, + VREvent_SceneApplicationUsingWrongGraphicsAdapter = 408, // data is process + VREvent_ActionBindingReloaded = 409, // data is process - The App that action binds reloaded for + + VREvent_HideRenderModels = 410, // Sent to the scene application to request hiding render models temporarily + VREvent_ShowRenderModels = 411, // Sent to the scene application to request restoring render model visibility + + VREvent_SceneApplicationStateChanged = 412, // No data; but query VRApplications()->GetSceneApplicationState(); + + VREvent_ConsoleOpened = 420, + VREvent_ConsoleClosed = 421, + + VREvent_OverlayShown = 500, + VREvent_OverlayHidden = 501, + VREvent_DashboardActivated = 502, + VREvent_DashboardDeactivated = 503, + //VREvent_DashboardThumbSelected = 504, // Sent to the overlay manager - data is overlay - No longer sent + VREvent_DashboardRequested = 505, // Sent to the overlay manager - data is overlay + VREvent_ResetDashboard = 506, // Send to the overlay manager + //VREvent_RenderToast = 507, // Send to the dashboard to render a toast - data is the notification ID -- no longer sent + VREvent_ImageLoaded = 508, // Sent to overlays when a SetOverlayRaw or SetOverlayFromFile call finishes loading + VREvent_ShowKeyboard = 509, // Sent to keyboard renderer in the dashboard to invoke it + VREvent_HideKeyboard = 510, // Sent to keyboard renderer in the dashboard to hide it + VREvent_OverlayGamepadFocusGained = 511, // Sent to an overlay when IVROverlay::SetFocusOverlay is called on it + VREvent_OverlayGamepadFocusLost = 512, // Send to an overlay when it previously had focus and IVROverlay::SetFocusOverlay is called on something else + VREvent_OverlaySharedTextureChanged = 513, + //VREvent_DashboardGuideButtonDown = 514, // These are no longer sent + //VREvent_DashboardGuideButtonUp = 515, + VREvent_ScreenshotTriggered = 516, // Screenshot button combo was pressed, Dashboard should request a screenshot + VREvent_ImageFailed = 517, // Sent to overlays when a SetOverlayRaw or SetOverlayfromFail fails to load + VREvent_DashboardOverlayCreated = 518, + VREvent_SwitchGamepadFocus = 519, + + // Screenshot API + VREvent_RequestScreenshot = 520, // Sent by vrclient application to compositor to take a screenshot + VREvent_ScreenshotTaken = 521, // Sent by compositor to the application that the screenshot has been taken + VREvent_ScreenshotFailed = 522, // Sent by compositor to the application that the screenshot failed to be taken + VREvent_SubmitScreenshotToDashboard = 523, // Sent by compositor to the dashboard that a completed screenshot was submitted + VREvent_ScreenshotProgressToDashboard = 524, // Sent by compositor to the dashboard that a completed screenshot was submitted + + VREvent_PrimaryDashboardDeviceChanged = 525, + VREvent_RoomViewShown = 526, // Sent by compositor whenever room-view is enabled + VREvent_RoomViewHidden = 527, // Sent by compositor whenever room-view is disabled + VREvent_ShowUI = 528, // data is showUi + VREvent_ShowDevTools = 529, // data is showDevTools + VREvent_DesktopViewUpdating = 530, + VREvent_DesktopViewReady = 531, + + VREvent_Notification_Shown = 600, + VREvent_Notification_Hidden = 601, + VREvent_Notification_BeginInteraction = 602, + VREvent_Notification_Destroyed = 603, + + VREvent_Quit = 700, // data is process + VREvent_ProcessQuit = 701, // data is process + //VREvent_QuitAborted_UserPrompt = 702, // data is process + VREvent_QuitAcknowledged = 703, // data is process + VREvent_DriverRequestedQuit = 704, // The driver has requested that SteamVR shut down + VREvent_RestartRequested = 705, // A driver or other component wants the user to restart SteamVR + + VREvent_ChaperoneDataHasChanged = 800, // this will never happen with the new chaperone system + VREvent_ChaperoneUniverseHasChanged = 801, + VREvent_ChaperoneTempDataHasChanged = 802, // this will never happen with the new chaperone system + VREvent_ChaperoneSettingsHaveChanged = 803, + VREvent_SeatedZeroPoseReset = 804, + VREvent_ChaperoneFlushCache = 805, // Sent when the process needs to reload any cached data it retrieved from VRChaperone() + VREvent_ChaperoneRoomSetupStarting = 806, // Triggered by CVRChaperoneClient::RoomSetupStarting + VREvent_ChaperoneRoomSetupFinished = 807, // Triggered by CVRChaperoneClient::CommitWorkingCopy + VREvent_StandingZeroPoseReset = 808, + + VREvent_AudioSettingsHaveChanged = 820, + + VREvent_BackgroundSettingHasChanged = 850, + VREvent_CameraSettingsHaveChanged = 851, + VREvent_ReprojectionSettingHasChanged = 852, + VREvent_ModelSkinSettingsHaveChanged = 853, + VREvent_EnvironmentSettingsHaveChanged = 854, + VREvent_PowerSettingsHaveChanged = 855, + VREvent_EnableHomeAppSettingsHaveChanged = 856, + VREvent_SteamVRSectionSettingChanged = 857, + VREvent_LighthouseSectionSettingChanged = 858, + VREvent_NullSectionSettingChanged = 859, + VREvent_UserInterfaceSectionSettingChanged = 860, + VREvent_NotificationsSectionSettingChanged = 861, + VREvent_KeyboardSectionSettingChanged = 862, + VREvent_PerfSectionSettingChanged = 863, + VREvent_DashboardSectionSettingChanged = 864, + VREvent_WebInterfaceSectionSettingChanged = 865, + VREvent_TrackersSectionSettingChanged = 866, + VREvent_LastKnownSectionSettingChanged = 867, + VREvent_DismissedWarningsSectionSettingChanged = 868, + VREvent_GpuSpeedSectionSettingChanged = 869, + VREvent_WindowsMRSectionSettingChanged = 870, + VREvent_OtherSectionSettingChanged = 871, + + VREvent_StatusUpdate = 900, + + VREvent_WebInterface_InstallDriverCompleted = 950, + + VREvent_MCImageUpdated = 1000, + + VREvent_FirmwareUpdateStarted = 1100, + VREvent_FirmwareUpdateFinished = 1101, + + VREvent_KeyboardClosed = 1200, + VREvent_KeyboardCharInput = 1201, + VREvent_KeyboardDone = 1202, // Sent when DONE button clicked on keyboard + + //VREvent_ApplicationTransitionStarted = 1300, + //VREvent_ApplicationTransitionAborted = 1301, + //VREvent_ApplicationTransitionNewAppStarted = 1302, + VREvent_ApplicationListUpdated = 1303, + VREvent_ApplicationMimeTypeLoad = 1304, + // VREvent_ApplicationTransitionNewAppLaunchComplete = 1305, + VREvent_ProcessConnected = 1306, + VREvent_ProcessDisconnected = 1307, + + //VREvent_Compositor_MirrorWindowShown = 1400, // DEPRECATED + //VREvent_Compositor_MirrorWindowHidden = 1401, // DEPRECATED + VREvent_Compositor_ChaperoneBoundsShown = 1410, + VREvent_Compositor_ChaperoneBoundsHidden = 1411, + VREvent_Compositor_DisplayDisconnected = 1412, + VREvent_Compositor_DisplayReconnected = 1413, + VREvent_Compositor_HDCPError = 1414, // data is hdcpError + VREvent_Compositor_ApplicationNotResponding = 1415, + VREvent_Compositor_ApplicationResumed = 1416, + VREvent_Compositor_OutOfVideoMemory = 1417, + VREvent_Compositor_DisplayModeNotSupported = 1418, // k_pch_SteamVR_PreferredRefreshRate + VREvent_Compositor_StageOverrideReady = 1419, + + VREvent_TrackedCamera_StartVideoStream = 1500, + VREvent_TrackedCamera_StopVideoStream = 1501, + VREvent_TrackedCamera_PauseVideoStream = 1502, + VREvent_TrackedCamera_ResumeVideoStream = 1503, + VREvent_TrackedCamera_EditingSurface = 1550, + + VREvent_PerformanceTest_EnableCapture = 1600, + VREvent_PerformanceTest_DisableCapture = 1601, + VREvent_PerformanceTest_FidelityLevel = 1602, + + VREvent_MessageOverlay_Closed = 1650, + VREvent_MessageOverlayCloseRequested = 1651, + + VREvent_Input_HapticVibration = 1700, // data is hapticVibration + VREvent_Input_BindingLoadFailed = 1701, // data is inputBinding + VREvent_Input_BindingLoadSuccessful = 1702, // data is inputBinding + VREvent_Input_ActionManifestReloaded = 1703, // no data + VREvent_Input_ActionManifestLoadFailed = 1704, // data is actionManifest + VREvent_Input_ProgressUpdate = 1705, // data is progressUpdate + VREvent_Input_TrackerActivated = 1706, + VREvent_Input_BindingsUpdated = 1707, + VREvent_Input_BindingSubscriptionChanged = 1708, + + VREvent_SpatialAnchors_PoseUpdated = 1800, // data is spatialAnchor. broadcast + VREvent_SpatialAnchors_DescriptorUpdated = 1801, // data is spatialAnchor. broadcast + VREvent_SpatialAnchors_RequestPoseUpdate = 1802, // data is spatialAnchor. sent to specific driver + VREvent_SpatialAnchors_RequestDescriptorUpdate = 1803, // data is spatialAnchor. sent to specific driver + + VREvent_SystemReport_Started = 1900, // user or system initiated generation of a system report. broadcast + + VREvent_Monitor_ShowHeadsetView = 2000, // data is process + VREvent_Monitor_HideHeadsetView = 2001, // data is process + + // Vendors are free to expose private events in this reserved region + VREvent_VendorSpecific_Reserved_Start = 10000, + VREvent_VendorSpecific_Reserved_End = 19999, +}; + + +/** Level of Hmd activity */ +// UserInteraction_Timeout means the device is in the process of timing out. +// InUse = ( k_EDeviceActivityLevel_UserInteraction || k_EDeviceActivityLevel_UserInteraction_Timeout ) +// VREvent_TrackedDeviceUserInteractionStarted fires when the devices transitions from Standby -> UserInteraction or Idle -> UserInteraction. +// VREvent_TrackedDeviceUserInteractionEnded fires when the devices transitions from UserInteraction_Timeout -> Idle +enum EDeviceActivityLevel +{ + k_EDeviceActivityLevel_Unknown = -1, + k_EDeviceActivityLevel_Idle = 0, // No activity for the last 10 seconds + k_EDeviceActivityLevel_UserInteraction = 1, // Activity (movement or prox sensor) is happening now + k_EDeviceActivityLevel_UserInteraction_Timeout = 2, // No activity for the last 0.5 seconds + k_EDeviceActivityLevel_Standby = 3, // Idle for at least 5 seconds (configurable in Settings -> Power Management) + k_EDeviceActivityLevel_Idle_Timeout = 4, +}; + + +/** VR controller button and axis IDs */ +enum EVRButtonId +{ + k_EButton_System = 0, + k_EButton_ApplicationMenu = 1, + k_EButton_Grip = 2, + k_EButton_DPad_Left = 3, + k_EButton_DPad_Up = 4, + k_EButton_DPad_Right = 5, + k_EButton_DPad_Down = 6, + k_EButton_A = 7, + + k_EButton_ProximitySensor = 31, + + k_EButton_Axis0 = 32, + k_EButton_Axis1 = 33, + k_EButton_Axis2 = 34, + k_EButton_Axis3 = 35, + k_EButton_Axis4 = 36, + + // aliases for well known controllers + k_EButton_SteamVR_Touchpad = k_EButton_Axis0, + k_EButton_SteamVR_Trigger = k_EButton_Axis1, + + k_EButton_Dashboard_Back = k_EButton_Grip, + + k_EButton_IndexController_A = k_EButton_Grip, + k_EButton_IndexController_B = k_EButton_ApplicationMenu, + k_EButton_IndexController_JoyStick = k_EButton_Axis3, + + k_EButton_Max = 64 +}; + +inline uint64_t ButtonMaskFromId( EVRButtonId id ) { return 1ull << id; } + +/** used for controller button events */ +struct VREvent_Controller_t +{ + uint32_t button; // EVRButtonId enum +}; + + +/** used for simulated mouse events in overlay space */ +enum EVRMouseButton +{ + VRMouseButton_Left = 0x0001, + VRMouseButton_Right = 0x0002, + VRMouseButton_Middle = 0x0004, +}; + + +/** used for simulated mouse events in overlay space */ +struct VREvent_Mouse_t +{ + float x, y; // co-ords are in GL space, bottom left of the texture is 0,0 + uint32_t button; // EVRMouseButton enum +}; + +/** used for simulated mouse wheel scroll */ +struct VREvent_Scroll_t +{ + float xdelta, ydelta; + uint32_t unused; + float viewportscale; // For scrolling on an overlay with laser mouse, this is the overlay's vertical size relative to the overlay height. Range: [0,1] +}; + +/** when in mouse input mode you can receive data from the touchpad, these events are only sent if the users finger + is on the touchpad (or just released from it). These events are sent to overlays with the VROverlayFlags_SendVRTouchpadEvents + flag set. +**/ +struct VREvent_TouchPadMove_t +{ + // true if the users finger is detected on the touch pad + bool bFingerDown; + + // How long the finger has been down in seconds + float flSecondsFingerDown; + + // These values indicate the starting finger position (so you can do some basic swipe stuff) + float fValueXFirst; + float fValueYFirst; + + // This is the raw sampled coordinate without deadzoning + float fValueXRaw; + float fValueYRaw; +}; + +/** notification related events. Details will still change at this point */ +struct VREvent_Notification_t +{ + uint64_t ulUserValue; + uint32_t notificationId; +}; + +/** Used for events about processes */ +struct VREvent_Process_t +{ + uint32_t pid; + uint32_t oldPid; + bool bForced; + // If the associated event was triggered by a connection loss + bool bConnectionLost; +}; + + +/** Used for a few events about overlays */ +struct VREvent_Overlay_t +{ + uint64_t overlayHandle; + uint64_t devicePath; + uint64_t memoryBlockId; +}; + + +/** Used for a few events about overlays */ +struct VREvent_Status_t +{ + uint32_t statusState; // EVRState enum +}; + +/** Used for keyboard events **/ +struct VREvent_Keyboard_t +{ + char cNewInput[8]; // Up to 11 bytes of new input + uint64_t uUserValue; // Possible flags about the new input +}; + +struct VREvent_Ipd_t +{ + float ipdMeters; +}; + +struct VREvent_Chaperone_t +{ + uint64_t m_nPreviousUniverse; + uint64_t m_nCurrentUniverse; +}; + +/** Not actually used for any events */ +struct VREvent_Reserved_t +{ + uint64_t reserved0; + uint64_t reserved1; + uint64_t reserved2; + uint64_t reserved3; + uint64_t reserved4; + uint64_t reserved5; +}; + +struct VREvent_PerformanceTest_t +{ + uint32_t m_nFidelityLevel; +}; + +struct VREvent_SeatedZeroPoseReset_t +{ + bool bResetBySystemMenu; +}; + +struct VREvent_Screenshot_t +{ + uint32_t handle; + uint32_t type; +}; + +struct VREvent_ScreenshotProgress_t +{ + float progress; +}; + +struct VREvent_ApplicationLaunch_t +{ + uint32_t pid; + uint32_t unArgsHandle; +}; + +struct VREvent_EditingCameraSurface_t +{ + uint64_t overlayHandle; + uint32_t nVisualMode; +}; + +struct VREvent_MessageOverlay_t +{ + uint32_t unVRMessageOverlayResponse; // vr::VRMessageOverlayResponse enum +}; + +struct VREvent_Property_t +{ + PropertyContainerHandle_t container; + ETrackedDeviceProperty prop; +}; + +struct VREvent_HapticVibration_t +{ + uint64_t containerHandle; // property container handle of the device with the haptic component + uint64_t componentHandle; // Which haptic component needs to vibrate + float fDurationSeconds; + float fFrequency; + float fAmplitude; +}; + +struct VREvent_WebConsole_t +{ + WebConsoleHandle_t webConsoleHandle; +}; + +struct VREvent_InputBindingLoad_t +{ + vr::PropertyContainerHandle_t ulAppContainer; + uint64_t pathMessage; + uint64_t pathUrl; + uint64_t pathControllerType; +}; + +struct VREvent_InputActionManifestLoad_t +{ + uint64_t pathAppKey; + uint64_t pathMessage; + uint64_t pathMessageParam; + uint64_t pathManifestPath; +}; + +struct VREvent_SpatialAnchor_t +{ + SpatialAnchorHandle_t unHandle; +}; + +struct VREvent_ProgressUpdate_t +{ + uint64_t ulApplicationPropertyContainer; + uint64_t pathDevice; + uint64_t pathInputSource; + uint64_t pathProgressAction; + uint64_t pathIcon; + float fProgress; +}; + +enum EShowUIType +{ + ShowUI_ControllerBinding = 0, + ShowUI_ManageTrackers = 1, + // ShowUI_QuickStart = 2, // Deprecated + ShowUI_Pairing = 3, + ShowUI_Settings = 4, + ShowUI_DebugCommands = 5, + ShowUI_FullControllerBinding = 6, + ShowUI_ManageDrivers = 7, +}; + +struct VREvent_ShowUI_t +{ + EShowUIType eType; +}; + +struct VREvent_ShowDevTools_t +{ + int32_t nBrowserIdentifier; +}; + +enum EHDCPError +{ + HDCPError_None = 0, + HDCPError_LinkLost = 1, + HDCPError_Tampered = 2, + HDCPError_DeviceRevoked = 3, + HDCPError_Unknown = 4 +}; + +struct VREvent_HDCPError_t +{ + EHDCPError eCode; +}; + +typedef union +{ + VREvent_Reserved_t reserved; + VREvent_Controller_t controller; + VREvent_Mouse_t mouse; + VREvent_Scroll_t scroll; + VREvent_Process_t process; + VREvent_Notification_t notification; + VREvent_Overlay_t overlay; + VREvent_Status_t status; + VREvent_Keyboard_t keyboard; + VREvent_Ipd_t ipd; + VREvent_Chaperone_t chaperone; + VREvent_PerformanceTest_t performanceTest; + VREvent_TouchPadMove_t touchPadMove; + VREvent_SeatedZeroPoseReset_t seatedZeroPoseReset; + VREvent_Screenshot_t screenshot; + VREvent_ScreenshotProgress_t screenshotProgress; + VREvent_ApplicationLaunch_t applicationLaunch; + VREvent_EditingCameraSurface_t cameraSurface; + VREvent_MessageOverlay_t messageOverlay; + VREvent_Property_t property; + VREvent_HapticVibration_t hapticVibration; + VREvent_WebConsole_t webConsole; + VREvent_InputBindingLoad_t inputBinding; + VREvent_InputActionManifestLoad_t actionManifest; + VREvent_SpatialAnchor_t spatialAnchor; + VREvent_ProgressUpdate_t progressUpdate; + VREvent_ShowUI_t showUi; + VREvent_ShowDevTools_t showDevTools; + VREvent_HDCPError_t hdcpError; + /** NOTE!!! If you change this you MUST manually update openvr_interop.cs.py */ +} VREvent_Data_t; + + +#if defined(__linux__) || defined(__APPLE__) +// This structure was originally defined mis-packed on Linux, preserved for +// compatibility. +#pragma pack( push, 4 ) +#endif + +/** An event posted by the server to all running applications */ +struct VREvent_t +{ + uint32_t eventType; // EVREventType enum + TrackedDeviceIndex_t trackedDeviceIndex; + float eventAgeSeconds; + // event data must be the end of the struct as its size is variable + VREvent_Data_t data; +}; + +#if defined(__linux__) || defined(__APPLE__) +#pragma pack( pop ) +#endif + +typedef uint32_t VRComponentProperties; + +enum EVRComponentProperty +{ + VRComponentProperty_IsStatic = (1 << 0), + VRComponentProperty_IsVisible = (1 << 1), + VRComponentProperty_IsTouched = (1 << 2), + VRComponentProperty_IsPressed = (1 << 3), + VRComponentProperty_IsScrolled = (1 << 4), + VRComponentProperty_IsHighlighted = (1 << 5), +}; + + +/** Describes state information about a render-model component, including transforms and other dynamic properties */ +struct RenderModel_ComponentState_t +{ + HmdMatrix34_t mTrackingToComponentRenderModel; // Transform required when drawing the component render model + HmdMatrix34_t mTrackingToComponentLocal; // Transform available for attaching to a local component coordinate system (-Z out from surface ) + VRComponentProperties uProperties; +}; + + +enum EVRInputError +{ + VRInputError_None = 0, + VRInputError_NameNotFound = 1, + VRInputError_WrongType = 2, + VRInputError_InvalidHandle = 3, + VRInputError_InvalidParam = 4, + VRInputError_NoSteam = 5, + VRInputError_MaxCapacityReached = 6, + VRInputError_IPCError = 7, + VRInputError_NoActiveActionSet = 8, + VRInputError_InvalidDevice = 9, + VRInputError_InvalidSkeleton = 10, + VRInputError_InvalidBoneCount = 11, + VRInputError_InvalidCompressedData = 12, + VRInputError_NoData = 13, + VRInputError_BufferTooSmall = 14, + VRInputError_MismatchedActionManifest = 15, + VRInputError_MissingSkeletonData = 16, + VRInputError_InvalidBoneIndex = 17, + VRInputError_InvalidPriority = 18, + VRInputError_PermissionDenied = 19, + VRInputError_InvalidRenderModel = 20, +}; + +enum EVRSpatialAnchorError +{ + VRSpatialAnchorError_Success = 0, + VRSpatialAnchorError_Internal = 1, + VRSpatialAnchorError_UnknownHandle = 2, + VRSpatialAnchorError_ArrayTooSmall = 3, + VRSpatialAnchorError_InvalidDescriptorChar = 4, + VRSpatialAnchorError_NotYetAvailable = 5, + VRSpatialAnchorError_NotAvailableInThisUniverse = 6, + VRSpatialAnchorError_PermanentlyUnavailable = 7, + VRSpatialAnchorError_WrongDriver = 8, + VRSpatialAnchorError_DescriptorTooLong = 9, + VRSpatialAnchorError_Unknown = 10, + VRSpatialAnchorError_NoRoomCalibration = 11, + VRSpatialAnchorError_InvalidArgument = 12, + VRSpatialAnchorError_UnknownDriver = 13, +}; + +/** The mesh to draw into the stencil (or depth) buffer to perform +* early stencil (or depth) kills of pixels that will never appear on the HMD. +* This mesh draws on all the pixels that will be hidden after distortion. +* +* If the HMD does not provide a visible area mesh pVertexData will be +* NULL and unTriangleCount will be 0. */ +struct HiddenAreaMesh_t +{ + const HmdVector2_t *pVertexData; + uint32_t unTriangleCount; +}; + + +enum EHiddenAreaMeshType +{ + k_eHiddenAreaMesh_Standard = 0, + k_eHiddenAreaMesh_Inverse = 1, + k_eHiddenAreaMesh_LineLoop = 2, + + k_eHiddenAreaMesh_Max = 3, +}; + + +/** Identifies what kind of axis is on the controller at index n. Read this type +* with pVRSystem->Get( nControllerDeviceIndex, Prop_Axis0Type_Int32 + n ); +*/ +enum EVRControllerAxisType +{ + k_eControllerAxis_None = 0, + k_eControllerAxis_TrackPad = 1, + k_eControllerAxis_Joystick = 2, + k_eControllerAxis_Trigger = 3, // Analog trigger data is in the X axis +}; + + +/** contains information about one axis on the controller */ +struct VRControllerAxis_t +{ + float x; // Ranges from -1.0 to 1.0 for joysticks and track pads. Ranges from 0.0 to 1.0 for triggers were 0 is fully released. + float y; // Ranges from -1.0 to 1.0 for joysticks and track pads. Is always 0.0 for triggers. +}; + + +/** the number of axes in the controller state */ +static const uint32_t k_unControllerStateAxisCount = 5; + + +#if defined(__linux__) || defined(__APPLE__) +// This structure was originally defined mis-packed on Linux, preserved for +// compatibility. +#pragma pack( push, 4 ) +#endif + +/** Holds all the state of a controller at one moment in time. */ +struct VRControllerState001_t +{ + // If packet num matches that on your prior call, then the controller state hasn't been changed since + // your last call and there is no need to process it + uint32_t unPacketNum; + + // bit flags for each of the buttons. Use ButtonMaskFromId to turn an ID into a mask + uint64_t ulButtonPressed; + uint64_t ulButtonTouched; + + // Axis data for the controller's analog inputs + VRControllerAxis_t rAxis[ k_unControllerStateAxisCount ]; +}; +#if defined(__linux__) || defined(__APPLE__) +#pragma pack( pop ) +#endif + + +typedef VRControllerState001_t VRControllerState_t; + + +/** determines how to provide output to the application of various event processing functions. */ +enum EVRControllerEventOutputType +{ + ControllerEventOutput_OSEvents = 0, + ControllerEventOutput_VREvents = 1, +}; + + + +/** Collision Bounds Style */ +enum ECollisionBoundsStyle +{ + COLLISION_BOUNDS_STYLE_BEGINNER = 0, + COLLISION_BOUNDS_STYLE_INTERMEDIATE, + COLLISION_BOUNDS_STYLE_SQUARES, + COLLISION_BOUNDS_STYLE_ADVANCED, + COLLISION_BOUNDS_STYLE_NONE, + + COLLISION_BOUNDS_STYLE_COUNT +}; + +/** used to refer to a single VR overlay */ +typedef uint64_t VROverlayHandle_t; + +static const VROverlayHandle_t k_ulOverlayHandleInvalid = 0; + +/** Errors that can occur around VR overlays */ +enum EVROverlayError +{ + VROverlayError_None = 0, + + VROverlayError_UnknownOverlay = 10, + VROverlayError_InvalidHandle = 11, + VROverlayError_PermissionDenied = 12, + VROverlayError_OverlayLimitExceeded = 13, // No more overlays could be created because the maximum number already exist + VROverlayError_WrongVisibilityType = 14, + VROverlayError_KeyTooLong = 15, + VROverlayError_NameTooLong = 16, + VROverlayError_KeyInUse = 17, + VROverlayError_WrongTransformType = 18, + VROverlayError_InvalidTrackedDevice = 19, + VROverlayError_InvalidParameter = 20, + VROverlayError_ThumbnailCantBeDestroyed = 21, + VROverlayError_ArrayTooSmall = 22, + VROverlayError_RequestFailed = 23, + VROverlayError_InvalidTexture = 24, + VROverlayError_UnableToLoadFile = 25, + VROverlayError_KeyboardAlreadyInUse = 26, + VROverlayError_NoNeighbor = 27, + VROverlayError_TooManyMaskPrimitives = 29, + VROverlayError_BadMaskPrimitive = 30, + VROverlayError_TextureAlreadyLocked = 31, + VROverlayError_TextureLockCapacityReached = 32, + VROverlayError_TextureNotLocked = 33, +}; + +/** enum values to pass in to VR_Init to identify whether the application will +* draw a 3D scene. */ +enum EVRApplicationType +{ + VRApplication_Other = 0, // Some other kind of application that isn't covered by the other entries + VRApplication_Scene = 1, // Application will submit 3D frames + VRApplication_Overlay = 2, // Application only interacts with overlays + VRApplication_Background = 3, // Application should not start SteamVR if it's not already running, and should not + // keep it running if everything else quits. + VRApplication_Utility = 4, // Init should not try to load any drivers. The application needs access to utility + // interfaces (like IVRSettings and IVRApplications) but not hardware. + VRApplication_VRMonitor = 5, // Reserved for vrmonitor + VRApplication_SteamWatchdog = 6,// Reserved for Steam + VRApplication_Bootstrapper = 7, // reserved for vrstartup + VRApplication_WebHelper = 8, // reserved for vrwebhelper + VRApplication_OpenXRInstance = 9, // reserved for openxr (created instance, but not session yet) + VRApplication_OpenXRScene = 10, // reserved for openxr (started session) + VRApplication_OpenXROverlay = 11, // reserved for openxr (started overlay session) + VRApplication_Prism = 12, // reserved for the vrprismhost process + + VRApplication_Max +}; + + +/** returns true if the specified application type is one of the +* OpenXR types */ +inline bool IsOpenXRAppType( EVRApplicationType eType ) +{ + return eType == VRApplication_OpenXRInstance + || eType == VRApplication_OpenXRScene + || eType == VRApplication_OpenXROverlay; +} + + +/** error codes for firmware */ +enum EVRFirmwareError +{ + VRFirmwareError_None = 0, + VRFirmwareError_Success = 1, + VRFirmwareError_Fail = 2, +}; + + +/** error codes for notifications */ +enum EVRNotificationError +{ + VRNotificationError_OK = 0, + VRNotificationError_InvalidNotificationId = 100, + VRNotificationError_NotificationQueueFull = 101, + VRNotificationError_InvalidOverlayHandle = 102, + VRNotificationError_SystemWithUserValueAlreadyExists = 103, +}; + + +enum EVRSkeletalMotionRange +{ + // The range of motion of the skeleton takes into account any physical limits imposed by + // the controller itself. This will tend to be the most accurate pose compared to the user's + // actual hand pose, but might not allow a closed fist for example + VRSkeletalMotionRange_WithController = 0, + + // Retarget the range of motion provided by the input device to make the hand appear to move + // as if it was not holding a controller. eg: map "hand grasping controller" to "closed fist" + VRSkeletalMotionRange_WithoutController = 1, +}; + +enum EVRSkeletalTrackingLevel +{ + // body part location can't be directly determined by the device. Any skeletal pose provided by + // the device is estimated by assuming the position required to active buttons, triggers, joysticks, + // or other input sensors. + // E.g. Vive Controller, Gamepad + VRSkeletalTracking_Estimated = 0, + + // body part location can be measured directly but with fewer degrees of freedom than the actual body + // part. Certain body part positions may be unmeasured by the device and estimated from other input data. + // E.g. Index Controllers, gloves that only measure finger curl + VRSkeletalTracking_Partial = 1, + + // Body part location can be measured directly throughout the entire range of motion of the body part. + // E.g. Mocap suit for the full body, gloves that measure rotation of each finger segment + VRSkeletalTracking_Full = 2, + + VRSkeletalTrackingLevel_Count, + VRSkeletalTrackingLevel_Max = VRSkeletalTrackingLevel_Count - 1 +}; + + +/** Type used for referring to bones by their index */ +typedef int32_t BoneIndex_t; +const BoneIndex_t k_unInvalidBoneIndex = -1; + + +/** error codes returned by Vr_Init */ + +// Please add adequate error description to https://developer.valvesoftware.com/w/index.php?title=Category:SteamVRHelp +enum EVRInitError +{ + VRInitError_None = 0, + VRInitError_Unknown = 1, + + VRInitError_Init_InstallationNotFound = 100, + VRInitError_Init_InstallationCorrupt = 101, + VRInitError_Init_VRClientDLLNotFound = 102, + VRInitError_Init_FileNotFound = 103, + VRInitError_Init_FactoryNotFound = 104, + VRInitError_Init_InterfaceNotFound = 105, + VRInitError_Init_InvalidInterface = 106, + VRInitError_Init_UserConfigDirectoryInvalid = 107, + VRInitError_Init_HmdNotFound = 108, + VRInitError_Init_NotInitialized = 109, + VRInitError_Init_PathRegistryNotFound = 110, + VRInitError_Init_NoConfigPath = 111, + VRInitError_Init_NoLogPath = 112, + VRInitError_Init_PathRegistryNotWritable = 113, + VRInitError_Init_AppInfoInitFailed = 114, + VRInitError_Init_Retry = 115, // Used internally to cause retries to vrserver + VRInitError_Init_InitCanceledByUser = 116, // The calling application should silently exit. The user canceled app startup + VRInitError_Init_AnotherAppLaunching = 117, + VRInitError_Init_SettingsInitFailed = 118, + VRInitError_Init_ShuttingDown = 119, + VRInitError_Init_TooManyObjects = 120, + VRInitError_Init_NoServerForBackgroundApp = 121, + VRInitError_Init_NotSupportedWithCompositor = 122, + VRInitError_Init_NotAvailableToUtilityApps = 123, + VRInitError_Init_Internal = 124, + VRInitError_Init_HmdDriverIdIsNone = 125, + VRInitError_Init_HmdNotFoundPresenceFailed = 126, + VRInitError_Init_VRMonitorNotFound = 127, + VRInitError_Init_VRMonitorStartupFailed = 128, + VRInitError_Init_LowPowerWatchdogNotSupported = 129, + VRInitError_Init_InvalidApplicationType = 130, + VRInitError_Init_NotAvailableToWatchdogApps = 131, + VRInitError_Init_WatchdogDisabledInSettings = 132, + VRInitError_Init_VRDashboardNotFound = 133, + VRInitError_Init_VRDashboardStartupFailed = 134, + VRInitError_Init_VRHomeNotFound = 135, + VRInitError_Init_VRHomeStartupFailed = 136, + VRInitError_Init_RebootingBusy = 137, + VRInitError_Init_FirmwareUpdateBusy = 138, + VRInitError_Init_FirmwareRecoveryBusy = 139, + VRInitError_Init_USBServiceBusy = 140, + VRInitError_Init_VRWebHelperStartupFailed = 141, + VRInitError_Init_TrackerManagerInitFailed = 142, + VRInitError_Init_AlreadyRunning = 143, + VRInitError_Init_FailedForVrMonitor = 144, + VRInitError_Init_PropertyManagerInitFailed = 145, + VRInitError_Init_WebServerFailed = 146, + VRInitError_Init_IllegalTypeTransition = 147, + VRInitError_Init_MismatchedRuntimes = 148, + VRInitError_Init_InvalidProcessId = 149, + VRInitError_Init_VRServiceStartupFailed = 150, + VRInitError_Init_PrismNeedsNewDrivers = 151, + VRInitError_Init_PrismStartupTimedOut = 152, + VRInitError_Init_CouldNotStartPrism = 153, + VRInitError_Init_CreateDriverDirectDeviceFailed = 154, + VRInitError_Init_PrismExitedUnexpectedly = 155, + + VRInitError_Driver_Failed = 200, + VRInitError_Driver_Unknown = 201, + VRInitError_Driver_HmdUnknown = 202, + VRInitError_Driver_NotLoaded = 203, + VRInitError_Driver_RuntimeOutOfDate = 204, + VRInitError_Driver_HmdInUse = 205, + VRInitError_Driver_NotCalibrated = 206, + VRInitError_Driver_CalibrationInvalid = 207, + VRInitError_Driver_HmdDisplayNotFound = 208, + VRInitError_Driver_TrackedDeviceInterfaceUnknown = 209, + // VRInitError_Driver_HmdDisplayNotFoundAfterFix = 210, // not needed: here for historic reasons + VRInitError_Driver_HmdDriverIdOutOfBounds = 211, + VRInitError_Driver_HmdDisplayMirrored = 212, + VRInitError_Driver_HmdDisplayNotFoundLaptop = 213, + // Never make error 259 because we return it from main and it would conflict with STILL_ACTIVE + + VRInitError_IPC_ServerInitFailed = 300, + VRInitError_IPC_ConnectFailed = 301, + VRInitError_IPC_SharedStateInitFailed = 302, + VRInitError_IPC_CompositorInitFailed = 303, + VRInitError_IPC_MutexInitFailed = 304, + VRInitError_IPC_Failed = 305, + VRInitError_IPC_CompositorConnectFailed = 306, + VRInitError_IPC_CompositorInvalidConnectResponse = 307, + VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308, + VRInitError_IPC_ConnectFailedAfterTargetExited = 309, + VRInitError_IPC_NamespaceUnavailable = 310, + + VRInitError_Compositor_Failed = 400, + VRInitError_Compositor_D3D11HardwareRequired = 401, + VRInitError_Compositor_FirmwareRequiresUpdate = 402, + VRInitError_Compositor_OverlayInitFailed = 403, + VRInitError_Compositor_ScreenshotsInitFailed = 404, + VRInitError_Compositor_UnableToCreateDevice = 405, + VRInitError_Compositor_SharedStateIsNull = 406, + VRInitError_Compositor_NotificationManagerIsNull = 407, + VRInitError_Compositor_ResourceManagerClientIsNull = 408, + VRInitError_Compositor_MessageOverlaySharedStateInitFailure = 409, + VRInitError_Compositor_PropertiesInterfaceIsNull = 410, + VRInitError_Compositor_CreateFullscreenWindowFailed = 411, + VRInitError_Compositor_SettingsInterfaceIsNull = 412, + VRInitError_Compositor_FailedToShowWindow = 413, + VRInitError_Compositor_DistortInterfaceIsNull = 414, + VRInitError_Compositor_DisplayFrequencyFailure = 415, + VRInitError_Compositor_RendererInitializationFailed = 416, + VRInitError_Compositor_DXGIFactoryInterfaceIsNull = 417, + VRInitError_Compositor_DXGIFactoryCreateFailed = 418, + VRInitError_Compositor_DXGIFactoryQueryFailed = 419, + VRInitError_Compositor_InvalidAdapterDesktop = 420, + VRInitError_Compositor_InvalidHmdAttachment = 421, + VRInitError_Compositor_InvalidOutputDesktop = 422, + VRInitError_Compositor_InvalidDeviceProvided = 423, + VRInitError_Compositor_D3D11RendererInitializationFailed = 424, + VRInitError_Compositor_FailedToFindDisplayMode = 425, + VRInitError_Compositor_FailedToCreateSwapChain = 426, + VRInitError_Compositor_FailedToGetBackBuffer = 427, + VRInitError_Compositor_FailedToCreateRenderTarget = 428, + VRInitError_Compositor_FailedToCreateDXGI2SwapChain = 429, + VRInitError_Compositor_FailedtoGetDXGI2BackBuffer = 430, + VRInitError_Compositor_FailedToCreateDXGI2RenderTarget = 431, + VRInitError_Compositor_FailedToGetDXGIDeviceInterface = 432, + VRInitError_Compositor_SelectDisplayMode = 433, + VRInitError_Compositor_FailedToCreateNvAPIRenderTargets = 434, + VRInitError_Compositor_NvAPISetDisplayMode = 435, + VRInitError_Compositor_FailedToCreateDirectModeDisplay = 436, + VRInitError_Compositor_InvalidHmdPropertyContainer = 437, + VRInitError_Compositor_UpdateDisplayFrequency = 438, + VRInitError_Compositor_CreateRasterizerState = 439, + VRInitError_Compositor_CreateWireframeRasterizerState = 440, + VRInitError_Compositor_CreateSamplerState = 441, + VRInitError_Compositor_CreateClampToBorderSamplerState = 442, + VRInitError_Compositor_CreateAnisoSamplerState = 443, + VRInitError_Compositor_CreateOverlaySamplerState = 444, + VRInitError_Compositor_CreatePanoramaSamplerState = 445, + VRInitError_Compositor_CreateFontSamplerState = 446, + VRInitError_Compositor_CreateNoBlendState = 447, + VRInitError_Compositor_CreateBlendState = 448, + VRInitError_Compositor_CreateAlphaBlendState = 449, + VRInitError_Compositor_CreateBlendStateMaskR = 450, + VRInitError_Compositor_CreateBlendStateMaskG = 451, + VRInitError_Compositor_CreateBlendStateMaskB = 452, + VRInitError_Compositor_CreateDepthStencilState = 453, + VRInitError_Compositor_CreateDepthStencilStateNoWrite = 454, + VRInitError_Compositor_CreateDepthStencilStateNoDepth = 455, + VRInitError_Compositor_CreateFlushTexture = 456, + VRInitError_Compositor_CreateDistortionSurfaces = 457, + VRInitError_Compositor_CreateConstantBuffer = 458, + VRInitError_Compositor_CreateHmdPoseConstantBuffer = 459, + VRInitError_Compositor_CreateHmdPoseStagingConstantBuffer = 460, + VRInitError_Compositor_CreateSharedFrameInfoConstantBuffer = 461, + VRInitError_Compositor_CreateOverlayConstantBuffer = 462, + VRInitError_Compositor_CreateSceneTextureIndexConstantBuffer = 463, + VRInitError_Compositor_CreateReadableSceneTextureIndexConstantBuffer = 464, + VRInitError_Compositor_CreateLayerGraphicsTextureIndexConstantBuffer = 465, + VRInitError_Compositor_CreateLayerComputeTextureIndexConstantBuffer = 466, + VRInitError_Compositor_CreateLayerComputeSceneTextureIndexConstantBuffer = 467, + VRInitError_Compositor_CreateComputeHmdPoseConstantBuffer = 468, + VRInitError_Compositor_CreateGeomConstantBuffer = 469, + VRInitError_Compositor_CreatePanelMaskConstantBuffer = 470, + VRInitError_Compositor_CreatePixelSimUBO = 471, + VRInitError_Compositor_CreateMSAARenderTextures = 472, + VRInitError_Compositor_CreateResolveRenderTextures = 473, + VRInitError_Compositor_CreateComputeResolveRenderTextures = 474, + VRInitError_Compositor_CreateDriverDirectModeResolveTextures = 475, + VRInitError_Compositor_OpenDriverDirectModeResolveTextures = 476, + VRInitError_Compositor_CreateFallbackSyncTexture = 477, + VRInitError_Compositor_ShareFallbackSyncTexture = 478, + VRInitError_Compositor_CreateOverlayIndexBuffer = 479, + VRInitError_Compositor_CreateOverlayVertexBuffer = 480, + VRInitError_Compositor_CreateTextVertexBuffer = 481, + VRInitError_Compositor_CreateTextIndexBuffer = 482, + VRInitError_Compositor_CreateMirrorTextures = 483, + VRInitError_Compositor_CreateLastFrameRenderTexture = 484, + VRInitError_Compositor_CreateMirrorOverlay = 485, + VRInitError_Compositor_FailedToCreateVirtualDisplayBackbuffer = 486, + VRInitError_Compositor_DisplayModeNotSupported = 487, + VRInitError_Compositor_CreateOverlayInvalidCall = 488, + VRInitError_Compositor_CreateOverlayAlreadyInitialized = 489, + VRInitError_Compositor_FailedToCreateMailbox = 490, + VRInitError_Compositor_WindowInterfaceIsNull = 491, + VRInitError_Compositor_SystemLayerCreateInstance = 492, + VRInitError_Compositor_SystemLayerCreateSession = 493, + + VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000, + VRInitError_VendorSpecific_WindowsNotInDevMode = 1001, + + VRInitError_VendorSpecific_HmdFound_CantOpenDevice = 1101, + VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102, + VRInitError_VendorSpecific_HmdFound_NoStoredConfig = 1103, + VRInitError_VendorSpecific_HmdFound_ConfigTooBig = 1104, + VRInitError_VendorSpecific_HmdFound_ConfigTooSmall = 1105, + VRInitError_VendorSpecific_HmdFound_UnableToInitZLib = 1106, + VRInitError_VendorSpecific_HmdFound_CantReadFirmwareVersion = 1107, + VRInitError_VendorSpecific_HmdFound_UnableToSendUserDataStart = 1108, + VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataStart = 1109, + VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataNext = 1110, + VRInitError_VendorSpecific_HmdFound_UserDataAddressRange = 1111, + VRInitError_VendorSpecific_HmdFound_UserDataError = 1112, + VRInitError_VendorSpecific_HmdFound_ConfigFailedSanityCheck = 1113, + VRInitError_VendorSpecific_OculusRuntimeBadInstall = 1114, + + VRInitError_Steam_SteamInstallationNotFound = 2000, + + // Strictly a placeholder + VRInitError_LastError +}; + +enum EVRScreenshotType +{ + VRScreenshotType_None = 0, + VRScreenshotType_Mono = 1, // left eye only + VRScreenshotType_Stereo = 2, + VRScreenshotType_Cubemap = 3, + VRScreenshotType_MonoPanorama = 4, + VRScreenshotType_StereoPanorama = 5 +}; + +enum EVRScreenshotPropertyFilenames +{ + VRScreenshotPropertyFilenames_Preview = 0, + VRScreenshotPropertyFilenames_VR = 1, +}; + +enum EVRTrackedCameraError +{ + VRTrackedCameraError_None = 0, + VRTrackedCameraError_OperationFailed = 100, + VRTrackedCameraError_InvalidHandle = 101, + VRTrackedCameraError_InvalidFrameHeaderVersion = 102, + VRTrackedCameraError_OutOfHandles = 103, + VRTrackedCameraError_IPCFailure = 104, + VRTrackedCameraError_NotSupportedForThisDevice = 105, + VRTrackedCameraError_SharedMemoryFailure = 106, + VRTrackedCameraError_FrameBufferingFailure = 107, + VRTrackedCameraError_StreamSetupFailure = 108, + VRTrackedCameraError_InvalidGLTextureId = 109, + VRTrackedCameraError_InvalidSharedTextureHandle = 110, + VRTrackedCameraError_FailedToGetGLTextureId = 111, + VRTrackedCameraError_SharedTextureFailure = 112, + VRTrackedCameraError_NoFrameAvailable = 113, + VRTrackedCameraError_InvalidArgument = 114, + VRTrackedCameraError_InvalidFrameBufferSize = 115, +}; + +enum EVRTrackedCameraFrameLayout +{ + EVRTrackedCameraFrameLayout_Mono = 0x0001, + EVRTrackedCameraFrameLayout_Stereo = 0x0002, + EVRTrackedCameraFrameLayout_VerticalLayout = 0x0010, // Stereo frames are Top/Bottom (left/right) + EVRTrackedCameraFrameLayout_HorizontalLayout = 0x0020, // Stereo frames are Left/Right +}; + +enum EVRTrackedCameraFrameType +{ + VRTrackedCameraFrameType_Distorted = 0, // This is the camera video frame size in pixels, still distorted. + VRTrackedCameraFrameType_Undistorted, // In pixels, an undistorted inscribed rectangle region without invalid regions. This size is subject to changes shortly. + VRTrackedCameraFrameType_MaximumUndistorted, // In pixels, maximum undistorted with invalid regions. Non zero alpha component identifies valid regions. + MAX_CAMERA_FRAME_TYPES +}; + +enum EVRDistortionFunctionType +{ + VRDistortionFunctionType_None, + VRDistortionFunctionType_FTheta, + VRDistortionFunctionType_Extended_FTheta, + MAX_DISTORTION_FUNCTION_TYPES, +}; + +static const uint32_t k_unMaxDistortionFunctionParameters = 8; + +typedef uint64_t TrackedCameraHandle_t; +#define INVALID_TRACKED_CAMERA_HANDLE ((vr::TrackedCameraHandle_t)0) + +struct CameraVideoStreamFrameHeader_t +{ + EVRTrackedCameraFrameType eFrameType; + + uint32_t nWidth; + uint32_t nHeight; + uint32_t nBytesPerPixel; + + uint32_t nFrameSequence; + + TrackedDevicePose_t trackedDevicePose; + + uint64_t ulFrameExposureTime; // mid-point of the exposure of the image in host system ticks +}; + +// Screenshot types +typedef uint32_t ScreenshotHandle_t; + +static const uint32_t k_unScreenshotHandleInvalid = 0; + +/** Compositor frame timing reprojection flags. */ +const uint32_t VRCompositor_ReprojectionReason_Cpu = 0x01; +const uint32_t VRCompositor_ReprojectionReason_Gpu = 0x02; +const uint32_t VRCompositor_ReprojectionAsync = 0x04; // This flag indicates the async reprojection mode is active, + // but does not indicate if reprojection actually happened or not. + // Use the ReprojectionReason flags above to check if reprojection + // was actually applied (i.e. scene texture was reused). + // NumFramePresents > 1 also indicates the scene texture was reused, + // and also the number of times that it was presented in total. + +const uint32_t VRCompositor_ReprojectionMotion = 0x08; // This flag indicates whether or not motion smoothing was triggered for this frame + +const uint32_t VRCompositor_PredictionMask = 0xF0; // The runtime may predict more than one frame (up to four) ahead if + // it detects the application is taking too long to render. These two + // bits will contain the count of additional frames (normally zero). + // Use the VR_COMPOSITOR_ADDITIONAL_PREDICTED_FRAMES macro to read from + // the latest frame timing entry. + +const uint32_t VRCompositor_ThrottleMask = 0xF00; // Number of frames the compositor is throttling the application. + // Use the VR_COMPOSITOR_NUMBER_OF_THROTTLED_FRAMES macro to read from + // the latest frame timing entry. + +#define VR_COMPOSITOR_ADDITIONAL_PREDICTED_FRAMES( timing ) ( ( ( timing ).m_nReprojectionFlags & vr::VRCompositor_PredictionMask ) >> 4 ) +#define VR_COMPOSITOR_NUMBER_OF_THROTTLED_FRAMES( timing ) ( ( ( timing ).m_nReprojectionFlags & vr::VRCompositor_ThrottleMask ) >> 8 ) + +/** Provides a single frame's timing information to the app */ +struct Compositor_FrameTiming +{ + uint32_t m_nSize; // Set to sizeof( Compositor_FrameTiming ) + uint32_t m_nFrameIndex; + uint32_t m_nNumFramePresents; // number of times this frame was presented + uint32_t m_nNumMisPresented; // number of times this frame was presented on a vsync other than it was originally predicted to + uint32_t m_nNumDroppedFrames; // number of additional times previous frame was scanned out + uint32_t m_nReprojectionFlags; + + /** Absolute time reference for comparing frames. This aligns with the vsync that running start is relative to. */ + double m_flSystemTimeInSeconds; + + /** These times may include work from other processes due to OS scheduling. + * The fewer packets of work these are broken up into, the less likely this will happen. + * GPU work can be broken up by calling Flush. This can sometimes be useful to get the GPU started + * processing that work earlier in the frame. */ + float m_flPreSubmitGpuMs; // time spent rendering the scene (gpu work submitted between WaitGetPoses and second Submit) + float m_flPostSubmitGpuMs; // additional time spent rendering by application (e.g. companion window) + float m_flTotalRenderGpuMs; // time between work submitted immediately after present (ideally vsync) until the end of compositor submitted work + float m_flCompositorRenderGpuMs; // time spend performing distortion correction, rendering chaperone, overlays, etc. + float m_flCompositorRenderCpuMs; // time spent on cpu submitting the above work for this frame + float m_flCompositorIdleCpuMs; // time spent waiting for running start (application could have used this much more time) + + /** Miscellaneous measured intervals. */ + float m_flClientFrameIntervalMs; // time between calls to WaitGetPoses + float m_flPresentCallCpuMs; // time blocked on call to present (usually 0.0, but can go long) + float m_flWaitForPresentCpuMs; // time spent spin-waiting for frame index to change (not near-zero indicates wait object failure) + float m_flSubmitFrameMs; // time spent in IVRCompositor::Submit (not near-zero indicates driver issue) + + /** The following are all relative to this frame's SystemTimeInSeconds */ + float m_flWaitGetPosesCalledMs; + float m_flNewPosesReadyMs; + float m_flNewFrameReadyMs; // second call to IVRCompositor::Submit + float m_flCompositorUpdateStartMs; + float m_flCompositorUpdateEndMs; + float m_flCompositorRenderStartMs; + + vr::TrackedDevicePose_t m_HmdPose; // pose used by app to render this frame + + uint32_t m_nNumVSyncsReadyForUse; + uint32_t m_nNumVSyncsToFirstView; +}; + +/** Provides compositor benchmark results to the app */ +struct Compositor_BenchmarkResults +{ + float m_flMegaPixelsPerSecond; // Measurement of GPU MP/s performed by compositor benchmark + float m_flHmdRecommendedMegaPixelsPerSecond; // Recommended default MP/s given the HMD resolution, refresh, and panel mask. +}; + +/** Frame timing data provided by direct mode drivers. */ +struct DriverDirectMode_FrameTiming +{ + uint32_t m_nSize; // Set to sizeof( DriverDirectMode_FrameTiming ) + uint32_t m_nNumFramePresents; // number of times frame was presented + uint32_t m_nNumMisPresented; // number of times frame was presented on a vsync other than it was originally predicted to + uint32_t m_nNumDroppedFrames; // number of additional times previous frame was scanned out (i.e. compositor missed vsync) + uint32_t m_nReprojectionFlags; +}; + +/** These flags will be set on DriverDirectMode_FrameTiming::m_nReprojectionFlags when IVRDriverDirectModeComponent::GetFrameTiming is called for drivers to optionally respond to. */ +const uint32_t VRCompositor_ReprojectionMotion_Enabled = 0x100; // Motion Smoothing is enabled in the UI for the currently running application +const uint32_t VRCompositor_ReprojectionMotion_ForcedOn = 0x200; // Motion Smoothing is forced on in the UI for the currently running application +const uint32_t VRCompositor_ReprojectionMotion_AppThrottled = 0x400; // Application is requesting throttling via ForceInterleavedReprojectionOn + + +enum EVSync +{ + VSync_None, + VSync_WaitRender, // block following render work until vsync + VSync_NoWaitRender, // do not block following render work (allow to get started early) +}; + +enum EVRMuraCorrectionMode +{ + EVRMuraCorrectionMode_Default = 0, + EVRMuraCorrectionMode_NoCorrection +}; + +/** raw IMU data provided by IVRIOBuffer from paths to tracked devices with IMUs */ +enum Imu_OffScaleFlags +{ + OffScale_AccelX = 0x01, + OffScale_AccelY = 0x02, + OffScale_AccelZ = 0x04, + OffScale_GyroX = 0x08, + OffScale_GyroY = 0x10, + OffScale_GyroZ = 0x20, +}; + +struct ImuSample_t +{ + double fSampleTime; + HmdVector3d_t vAccel; + HmdVector3d_t vGyro; + uint32_t unOffScaleFlags; +}; + +#pragma pack( pop ) + +// figure out how to import from the VR API dll +#if defined(_WIN32) + + #if !defined(OPENVR_BUILD_STATIC) + #ifdef VR_API_EXPORT + #define VR_INTERFACE extern "C" __declspec( dllexport ) + #else + #define VR_INTERFACE extern "C" __declspec( dllimport ) + #endif + #else + #define VR_INTERFACE extern "C" + #endif + +#elif defined(__GNUC__) || defined(COMPILER_GCC) || defined(__APPLE__) + +#ifdef VR_API_EXPORT + #define VR_INTERFACE extern "C" __attribute__((visibility("default"))) +#else + #define VR_INTERFACE extern "C" +#endif + +#else + #error "Unsupported Platform." +#endif + + +#if defined( _WIN32 ) + #define VR_CALLTYPE __cdecl +#else + #define VR_CALLTYPE +#endif + +} // namespace vr +#endif // _INCLUDE_VRTYPES_H + +// vrannotation.h + +#ifdef API_GEN +# define VR_CLANG_ATTR(ATTR) __attribute__((annotate( ATTR ))) +#else +# define VR_CLANG_ATTR(ATTR) +#endif + +#define VR_METHOD_DESC(DESC) VR_CLANG_ATTR( "desc:" #DESC ";" ) +#define VR_IGNOREATTR() VR_CLANG_ATTR( "ignore" ) +#define VR_OUT_STRUCT() VR_CLANG_ATTR( "out_struct: ;" ) +#define VR_OUT_STRING() VR_CLANG_ATTR( "out_string: ;" ) +#define VR_OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) VR_CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" ) +#define VR_OUT_ARRAY_COUNT(COUNTER) VR_CLANG_ATTR( "out_array_count:" #COUNTER ";" ) +#define VR_ARRAY_COUNT(COUNTER) VR_CLANG_ATTR( "array_count:" #COUNTER ";" ) +#define VR_ARRAY_COUNT_D(COUNTER, DESC) VR_CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC ) +#define VR_BUFFER_COUNT(COUNTER) VR_CLANG_ATTR( "buffer_count:" #COUNTER ";" ) +#define VR_OUT_BUFFER_COUNT(COUNTER) VR_CLANG_ATTR( "out_buffer_count:" #COUNTER ";" ) +#define VR_OUT_STRING_COUNT(COUNTER) VR_CLANG_ATTR( "out_string_count:" #COUNTER ";" ) + +// ivrsystem.h + +namespace vr +{ + +class IVRSystem +{ +public: + + + // ------------------------------------ + // Display Methods + // ------------------------------------ + + /** Suggested size for the intermediate render target that the distortion pulls from. */ + virtual void GetRecommendedRenderTargetSize( uint32_t *pnWidth, uint32_t *pnHeight ) = 0; + + /** The projection matrix for the specified eye */ + virtual HmdMatrix44_t GetProjectionMatrix( EVREye eEye, float fNearZ, float fFarZ ) = 0; + + /** The components necessary to build your own projection matrix in case your + * application is doing something fancy like infinite Z */ + virtual void GetProjectionRaw( EVREye eEye, float *pfLeft, float *pfRight, float *pfTop, float *pfBottom ) = 0; + + /** Gets the result of the distortion function for the specified eye and input UVs. UVs go from 0,0 in + * the upper left of that eye's viewport and 1,1 in the lower right of that eye's viewport. + * Returns true for success. Otherwise, returns false, and distortion coordinates are not suitable. */ + virtual bool ComputeDistortion( EVREye eEye, float fU, float fV, DistortionCoordinates_t *pDistortionCoordinates ) = 0; + + /** Returns the transform from eye space to the head space. Eye space is the per-eye flavor of head + * space that provides stereo disparity. Instead of Model * View * Projection the sequence is Model * View * Eye^-1 * Projection. + * Normally View and Eye^-1 will be multiplied together and treated as View in your application. + */ + virtual HmdMatrix34_t GetEyeToHeadTransform( EVREye eEye ) = 0; + + /** Returns the number of elapsed seconds since the last recorded vsync event. This + * will come from a vsync timer event in the timer if possible or from the application-reported + * time if that is not available. If no vsync times are available the function will + * return zero for vsync time and frame counter and return false from the method. */ + virtual bool GetTimeSinceLastVsync( float *pfSecondsSinceLastVsync, uint64_t *pulFrameCounter ) = 0; + + /** [D3D9 Only] + * Returns the adapter index that the user should pass into CreateDevice to set up D3D9 in such + * a way that it can go full screen exclusive on the HMD. Returns -1 if there was an error. + */ + virtual int32_t GetD3D9AdapterIndex() = 0; + + /** [D3D10/11 Only] + * Returns the adapter index that the user should pass into EnumAdapters to create the device + * and swap chain in DX10 and DX11. If an error occurs the index will be set to -1. + */ + virtual void GetDXGIOutputInfo( int32_t *pnAdapterIndex ) = 0; + + /** + * Returns platform- and texture-type specific adapter identification so that applications and the + * compositor are creating textures and swap chains on the same GPU. If an error occurs the device + * will be set to 0. + * pInstance is an optional parameter that is required only when textureType is TextureType_Vulkan. + * [D3D10/11/12 Only (D3D9 Not Supported)] + * Returns the adapter LUID that identifies the GPU attached to the HMD. The user should + * enumerate all adapters using IDXGIFactory::EnumAdapters and IDXGIAdapter::GetDesc to find + * the adapter with the matching LUID, or use IDXGIFactory4::EnumAdapterByLuid. + * The discovered IDXGIAdapter should be used to create the device and swap chain. + * [Vulkan Only] + * Returns the VkPhysicalDevice that should be used by the application. + * pInstance must be the instance the application will use to query for the VkPhysicalDevice. The application + * must create the VkInstance with extensions returned by IVRCompositor::GetVulkanInstanceExtensionsRequired enabled. + * [macOS Only] + * For TextureType_IOSurface returns the id that should be used by the application. + * On 10.13+ for TextureType_OpenGL returns the 'registryId' of the renderer which should be used + * by the application. See Apple Technical Q&A QA1168 for information on enumerating GL Renderers, and the + * new kCGLRPRegistryIDLow and kCGLRPRegistryIDHigh CGLRendererProperty values in the 10.13 SDK. + * Pre 10.13 for TextureType_OpenGL returns 0, as there is no dependable way to correlate the HMDs MTLDevice + * with a GL Renderer. + */ + virtual void GetOutputDevice( uint64_t *pnDevice, ETextureType textureType, VkInstance_T *pInstance = nullptr ) = 0; + + // ------------------------------------ + // Display Mode methods + // ------------------------------------ + + /** Use to determine if the headset display is part of the desktop (i.e. extended) or hidden (i.e. direct mode). */ + virtual bool IsDisplayOnDesktop() = 0; + + /** Set the display visibility (true = extended, false = direct mode). Return value of true indicates that the change was successful. */ + virtual bool SetDisplayVisibility( bool bIsVisibleOnDesktop ) = 0; + + // ------------------------------------ + // Tracking Methods + // ------------------------------------ + + /** The pose that the tracker thinks that the HMD will be in at the specified number of seconds into the + * future. Pass 0 to get the state at the instant the method is called. Most of the time the application should + * calculate the time until the photons will be emitted from the display and pass that time into the method. + * + * This is roughly analogous to the inverse of the view matrix in most applications, though + * many games will need to do some additional rotation or translation on top of the rotation + * and translation provided by the head pose. + * + * For devices where bPoseIsValid is true the application can use the pose to position the device + * in question. The provided array can be any size up to k_unMaxTrackedDeviceCount. + * + * Seated experiences should call this method with TrackingUniverseSeated and receive poses relative + * to the seated zero pose. Standing experiences should call this method with TrackingUniverseStanding + * and receive poses relative to the Chaperone Play Area. TrackingUniverseRawAndUncalibrated should + * probably not be used unless the application is the Chaperone calibration tool itself, but will provide + * poses relative to the hardware-specific coordinate system in the driver. + */ + virtual void GetDeviceToAbsoluteTrackingPose( ETrackingUniverseOrigin eOrigin, float fPredictedSecondsToPhotonsFromNow, VR_ARRAY_COUNT(unTrackedDevicePoseArrayCount) TrackedDevicePose_t *pTrackedDevicePoseArray, uint32_t unTrackedDevicePoseArrayCount ) = 0; + + /** Returns the transform from the seated zero pose to the standing absolute tracking system. This allows + * applications to represent the seated origin to used or transform object positions from one coordinate + * system to the other. + * + * The seated origin may or may not be inside the Play Area or Collision Bounds returned by IVRChaperone. Its position + * depends on what the user has set from the Dashboard settings and previous calls to ResetSeatedZeroPose. */ + virtual HmdMatrix34_t GetSeatedZeroPoseToStandingAbsoluteTrackingPose() = 0; + + /** Returns the transform from the tracking origin to the standing absolute tracking system. This allows + * applications to convert from raw tracking space to the calibrated standing coordinate system. */ + virtual HmdMatrix34_t GetRawZeroPoseToStandingAbsoluteTrackingPose() = 0; + + /** Get a sorted array of device indices of a given class of tracked devices (e.g. controllers). Devices are sorted right to left + * relative to the specified tracked device (default: hmd -- pass in -1 for absolute tracking space). Returns the number of devices + * in the list, or the size of the array needed if not large enough. */ + virtual uint32_t GetSortedTrackedDeviceIndicesOfClass( ETrackedDeviceClass eTrackedDeviceClass, VR_ARRAY_COUNT(unTrackedDeviceIndexArrayCount) vr::TrackedDeviceIndex_t *punTrackedDeviceIndexArray, uint32_t unTrackedDeviceIndexArrayCount, vr::TrackedDeviceIndex_t unRelativeToTrackedDeviceIndex = k_unTrackedDeviceIndex_Hmd ) = 0; + + /** Returns the level of activity on the device. */ + virtual EDeviceActivityLevel GetTrackedDeviceActivityLevel( vr::TrackedDeviceIndex_t unDeviceId ) = 0; + + /** Convenience utility to apply the specified transform to the specified pose. + * This properly transforms all pose components, including velocity and angular velocity + */ + virtual void ApplyTransform( TrackedDevicePose_t *pOutputPose, const TrackedDevicePose_t *pTrackedDevicePose, const HmdMatrix34_t *pTransform ) = 0; + + /** Returns the device index associated with a specific role, for example the left hand or the right hand. This function is deprecated in favor of the new IVRInput system. */ + virtual vr::TrackedDeviceIndex_t GetTrackedDeviceIndexForControllerRole( vr::ETrackedControllerRole unDeviceType ) = 0; + + /** Returns the controller type associated with a device index. This function is deprecated in favor of the new IVRInput system. */ + virtual vr::ETrackedControllerRole GetControllerRoleForTrackedDeviceIndex( vr::TrackedDeviceIndex_t unDeviceIndex ) = 0; + + // ------------------------------------ + // Property methods + // ------------------------------------ + + /** Returns the device class of a tracked device. If there has not been a device connected in this slot + * since the application started this function will return TrackedDevice_Invalid. For previous detected + * devices the function will return the previously observed device class. + * + * To determine which devices exist on the system, just loop from 0 to k_unMaxTrackedDeviceCount and check + * the device class. Every device with something other than TrackedDevice_Invalid is associated with an + * actual tracked device. */ + virtual ETrackedDeviceClass GetTrackedDeviceClass( vr::TrackedDeviceIndex_t unDeviceIndex ) = 0; + + /** Returns true if there is a device connected in this slot. */ + virtual bool IsTrackedDeviceConnected( vr::TrackedDeviceIndex_t unDeviceIndex ) = 0; + + /** Returns a bool property. If the device index is not valid or the property is not a bool type this function will return false. */ + virtual bool GetBoolTrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ) = 0; + + /** Returns a float property. If the device index is not valid or the property is not a float type this function will return 0. */ + virtual float GetFloatTrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ) = 0; + + /** Returns an int property. If the device index is not valid or the property is not a int type this function will return 0. */ + virtual int32_t GetInt32TrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ) = 0; + + /** Returns a uint64 property. If the device index is not valid or the property is not a uint64 type this function will return 0. */ + virtual uint64_t GetUint64TrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ) = 0; + + /** Returns a matrix property. If the device index is not valid or the property is not a matrix type, this function will return identity. */ + virtual HmdMatrix34_t GetMatrix34TrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ) = 0; + + /** Returns an array of one type of property. If the device index is not valid or the property is not a single value or an array of the specified type, + * this function will return 0. Otherwise it returns the number of bytes necessary to hold the array of properties. If unBufferSize is + * greater than the returned size and pBuffer is non-NULL, pBuffer is filled with the contents of array of properties. */ + virtual uint32_t GetArrayTrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, PropertyTypeTag_t propType, void *pBuffer, uint32_t unBufferSize, ETrackedPropertyError *pError = 0L ) = 0; + + /** Returns a string property. If the device index is not valid or the property is not a string type this function will + * return 0. Otherwise it returns the length of the number of bytes necessary to hold this string including the trailing + * null. Strings will always fit in buffers of k_unMaxPropertyStringSize characters. */ + virtual uint32_t GetStringTrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize, ETrackedPropertyError *pError = 0L ) = 0; + + /** returns a string that corresponds with the specified property error. The string will be the name + * of the error enum value for all valid error codes */ + virtual const char *GetPropErrorNameFromEnum( ETrackedPropertyError error ) = 0; + + // ------------------------------------ + // Event methods + // ------------------------------------ + + /** Returns true and fills the event with the next event on the queue if there is one. If there are no events + * this method returns false. uncbVREvent should be the size in bytes of the VREvent_t struct */ + virtual bool PollNextEvent( VREvent_t *pEvent, uint32_t uncbVREvent ) = 0; + + /** Returns true and fills the event with the next event on the queue if there is one. If there are no events + * this method returns false. Fills in the pose of the associated tracked device in the provided pose struct. + * This pose will always be older than the call to this function and should not be used to render the device. + uncbVREvent should be the size in bytes of the VREvent_t struct */ + virtual bool PollNextEventWithPose( ETrackingUniverseOrigin eOrigin, VREvent_t *pEvent, uint32_t uncbVREvent, vr::TrackedDevicePose_t *pTrackedDevicePose ) = 0; + + /** returns the name of an EVREvent enum value */ + virtual const char *GetEventTypeNameFromEnum( EVREventType eType ) = 0; + + // ------------------------------------ + // Rendering helper methods + // ------------------------------------ + + /** Returns the hidden area mesh for the current HMD. The pixels covered by this mesh will never be seen by the user after the lens distortion is + * applied based on visibility to the panels. If this HMD does not have a hidden area mesh, the vertex data and count will be NULL and 0 respectively. + * This mesh is meant to be rendered into the stencil buffer (or into the depth buffer setting nearz) before rendering each eye's view. + * This will improve performance by letting the GPU early-reject pixels the user will never see before running the pixel shader. + * NOTE: Render this mesh with backface culling disabled since the winding order of the vertices can be different per-HMD or per-eye. + * Setting the bInverse argument to true will produce the visible area mesh that is commonly used in place of full-screen quads. The visible area mesh covers all of the pixels the hidden area mesh does not cover. + * Setting the bLineLoop argument will return a line loop of vertices in HiddenAreaMesh_t->pVertexData with HiddenAreaMesh_t->unTriangleCount set to the number of vertices. + */ + virtual HiddenAreaMesh_t GetHiddenAreaMesh( EVREye eEye, EHiddenAreaMeshType type = k_eHiddenAreaMesh_Standard ) = 0; + + // ------------------------------------ + // Controller methods + // ------------------------------------ + + /** Fills the supplied struct with the current state of the controller. Returns false if the controller index + * is invalid. This function is deprecated in favor of the new IVRInput system. */ + virtual bool GetControllerState( vr::TrackedDeviceIndex_t unControllerDeviceIndex, vr::VRControllerState_t *pControllerState, uint32_t unControllerStateSize ) = 0; + + /** fills the supplied struct with the current state of the controller and the provided pose with the pose of + * the controller when the controller state was updated most recently. Use this form if you need a precise controller + * pose as input to your application when the user presses or releases a button. This function is deprecated in favor of the new IVRInput system. */ + virtual bool GetControllerStateWithPose( ETrackingUniverseOrigin eOrigin, vr::TrackedDeviceIndex_t unControllerDeviceIndex, vr::VRControllerState_t *pControllerState, uint32_t unControllerStateSize, TrackedDevicePose_t *pTrackedDevicePose ) = 0; + + /** Trigger a single haptic pulse on a controller. After this call the application may not trigger another haptic pulse on this controller + * and axis combination for 5ms. This function is deprecated in favor of the new IVRInput system. */ + virtual void TriggerHapticPulse( vr::TrackedDeviceIndex_t unControllerDeviceIndex, uint32_t unAxisId, unsigned short usDurationMicroSec ) = 0; + + /** returns the name of an EVRButtonId enum value. This function is deprecated in favor of the new IVRInput system. */ + virtual const char *GetButtonIdNameFromEnum( EVRButtonId eButtonId ) = 0; + + /** returns the name of an EVRControllerAxisType enum value. This function is deprecated in favor of the new IVRInput system. */ + virtual const char *GetControllerAxisTypeNameFromEnum( EVRControllerAxisType eAxisType ) = 0; + + /** Returns true if this application is receiving input from the system. This would return false if + * system-related functionality is consuming the input stream. */ + virtual bool IsInputAvailable() = 0; + + /** Returns true SteamVR is drawing controllers on top of the application. Applications should consider + * not drawing anything attached to the user's hands in this case. */ + virtual bool IsSteamVRDrawingControllers() = 0; + + /** Returns true if the user has put SteamVR into a mode that is distracting them from the application. + * For applications where this is appropriate, the application should pause ongoing activity. */ + virtual bool ShouldApplicationPause() = 0; + + /** Returns true if SteamVR is doing significant rendering work and the game should do what it can to reduce + * its own workload. One common way to do this is to reduce the size of the render target provided for each eye. */ + virtual bool ShouldApplicationReduceRenderingWork() = 0; + + // ------------------------------------ + // Firmware methods + // ------------------------------------ + + /** Performs the actual firmware update if applicable. + * The following events will be sent, if VRFirmwareError_None was returned: VREvent_FirmwareUpdateStarted, VREvent_FirmwareUpdateFinished + * Use the properties Prop_Firmware_UpdateAvailable_Bool, Prop_Firmware_ManualUpdate_Bool, and Prop_Firmware_ManualUpdateURL_String + * to figure our whether a firmware update is available, and to figure out whether its a manual update + * Prop_Firmware_ManualUpdateURL_String should point to an URL describing the manual update process */ + virtual vr::EVRFirmwareError PerformFirmwareUpdate( vr::TrackedDeviceIndex_t unDeviceIndex ) = 0; + + // ------------------------------------ + // Application life cycle methods + // ------------------------------------ + + /** Call this to acknowledge to the system that VREvent_Quit has been received and that the process is exiting. + * This extends the timeout until the process is killed. */ + virtual void AcknowledgeQuit_Exiting() = 0; + + // ------------------------------------- + // App container sandbox methods + // ------------------------------------- + + /** Retrieves a null-terminated, semicolon-delimited list of UTF8 file paths that an application + * must have read access to when running inside of an app container. Returns the number of bytes + * needed to hold the list. */ + virtual uint32_t GetAppContainerFilePaths( VR_OUT_STRING() char *pchBuffer, uint32_t unBufferSize ) = 0; + + // ------------------------------------- + // System methods + // ------------------------------------- + + /** Returns the current version of the SteamVR runtime. The returned string will remain valid until VR_Shutdown is called. + * + * NOTE: Is it not appropriate to use this version to test for the presence of any SteamVR feature. Only use this version + * number for logging or showing to a user, and not to try to detect anything at runtime. When appropriate, feature-specific + * presence information is provided by other APIs. */ + virtual const char *GetRuntimeVersion() = 0; + +}; + +static const char * const IVRSystem_Version = "IVRSystem_022"; + +} + + +// ivrapplications.h + +namespace vr +{ + + /** Used for all errors reported by the IVRApplications interface */ + enum EVRApplicationError + { + VRApplicationError_None = 0, + + VRApplicationError_AppKeyAlreadyExists = 100, // Only one application can use any given key + VRApplicationError_NoManifest = 101, // the running application does not have a manifest + VRApplicationError_NoApplication = 102, // No application is running + VRApplicationError_InvalidIndex = 103, + VRApplicationError_UnknownApplication = 104, // the application could not be found + VRApplicationError_IPCFailed = 105, // An IPC failure caused the request to fail + VRApplicationError_ApplicationAlreadyRunning = 106, + VRApplicationError_InvalidManifest = 107, + VRApplicationError_InvalidApplication = 108, + VRApplicationError_LaunchFailed = 109, // the process didn't start + VRApplicationError_ApplicationAlreadyStarting = 110, // the system was already starting the same application + VRApplicationError_LaunchInProgress = 111, // The system was already starting a different application + VRApplicationError_OldApplicationQuitting = 112, + VRApplicationError_TransitionAborted = 113, + VRApplicationError_IsTemplate = 114, // error when you try to call LaunchApplication() on a template type app (use LaunchTemplateApplication) + VRApplicationError_SteamVRIsExiting = 115, + + VRApplicationError_BufferTooSmall = 200, // The provided buffer was too small to fit the requested data + VRApplicationError_PropertyNotSet = 201, // The requested property was not set + VRApplicationError_UnknownProperty = 202, + VRApplicationError_InvalidParameter = 203, + + VRApplicationError_NotImplemented = 300, // Fcn is not implemented in current interface + }; + + /** The maximum length of an application key */ + static const uint32_t k_unMaxApplicationKeyLength = 128; + + /** these are the properties available on applications. */ + enum EVRApplicationProperty + { + VRApplicationProperty_Name_String = 0, + + VRApplicationProperty_LaunchType_String = 11, + VRApplicationProperty_WorkingDirectory_String = 12, + VRApplicationProperty_BinaryPath_String = 13, + VRApplicationProperty_Arguments_String = 14, + VRApplicationProperty_URL_String = 15, + + VRApplicationProperty_Description_String = 50, + VRApplicationProperty_NewsURL_String = 51, + VRApplicationProperty_ImagePath_String = 52, + VRApplicationProperty_Source_String = 53, + VRApplicationProperty_ActionManifestURL_String = 54, + + VRApplicationProperty_IsDashboardOverlay_Bool = 60, + VRApplicationProperty_IsTemplate_Bool = 61, + VRApplicationProperty_IsInstanced_Bool = 62, + VRApplicationProperty_IsInternal_Bool = 63, + VRApplicationProperty_WantsCompositorPauseInStandby_Bool = 64, + VRApplicationProperty_IsHidden_Bool = 65, + + VRApplicationProperty_LastLaunchTime_Uint64 = 70, + }; + + enum EVRSceneApplicationState + { + EVRSceneApplicationState_None = 0, // Scene Application is not running + EVRSceneApplicationState_Starting = 1, // Scene Application is starting + EVRSceneApplicationState_Quitting = 2, // Scene Application is quitting + EVRSceneApplicationState_Running = 3, // Scene Application is running, and submitting frames, a custom skybox, or a visible overlay + EVRSceneApplicationState_Waiting = 4, // Scene Application is running, but not drawing anything + }; + + struct AppOverrideKeys_t + { + const char *pchKey; + const char *pchValue; + }; + + /** Currently recognized mime types */ + static const char * const k_pch_MimeType_HomeApp = "vr/home"; + static const char * const k_pch_MimeType_GameTheater = "vr/game_theater"; + + class IVRApplications + { + public: + + // --------------- Application management --------------- // + + /** Adds an application manifest to the list to load when building the list of installed applications. + * Temporary manifests are not automatically loaded */ + virtual EVRApplicationError AddApplicationManifest( const char *pchApplicationManifestFullPath, bool bTemporary = false ) = 0; + + /** Removes an application manifest from the list to load when building the list of installed applications. */ + virtual EVRApplicationError RemoveApplicationManifest( const char *pchApplicationManifestFullPath ) = 0; + + /** Returns true if an application is installed */ + virtual bool IsApplicationInstalled( const char *pchAppKey ) = 0; + + /** Returns the number of applications available in the list */ + virtual uint32_t GetApplicationCount() = 0; + + /** Returns the key of the specified application. The index is at least 0 and is less than the return + * value of GetApplicationCount(). The buffer should be at least k_unMaxApplicationKeyLength in order to + * fit the key. */ + virtual EVRApplicationError GetApplicationKeyByIndex( uint32_t unApplicationIndex, VR_OUT_STRING() char *pchAppKeyBuffer, uint32_t unAppKeyBufferLen ) = 0; + + /** Returns the key of the application for the specified Process Id. The buffer should be at least + * k_unMaxApplicationKeyLength in order to fit the key. */ + virtual EVRApplicationError GetApplicationKeyByProcessId( uint32_t unProcessId, VR_OUT_STRING() char *pchAppKeyBuffer, uint32_t unAppKeyBufferLen ) = 0; + + /** Launches the application. The existing scene application will exit and then the new application will start. + * This call is not valid for dashboard overlay applications. */ + virtual EVRApplicationError LaunchApplication( const char *pchAppKey ) = 0; + + /** Launches an instance of an application of type template, with its app key being pchNewAppKey (which must be unique) and optionally override sections + * from the manifest file via AppOverrideKeys_t + */ + virtual EVRApplicationError LaunchTemplateApplication( const char *pchTemplateAppKey, const char *pchNewAppKey, VR_ARRAY_COUNT( unKeys ) const AppOverrideKeys_t *pKeys, uint32_t unKeys ) = 0; + + /** launches the application currently associated with this mime type and passes it the option args, typically the filename or object name of the item being launched */ + virtual vr::EVRApplicationError LaunchApplicationFromMimeType( const char *pchMimeType, const char *pchArgs ) = 0; + + /** Launches the dashboard overlay application if it is not already running. This call is only valid for + * dashboard overlay applications. */ + virtual EVRApplicationError LaunchDashboardOverlay( const char *pchAppKey ) = 0; + + /** Cancel a pending launch for an application */ + virtual bool CancelApplicationLaunch( const char *pchAppKey ) = 0; + + /** Identifies a running application. OpenVR can't always tell which process started in response + * to a URL. This function allows a URL handler (or the process itself) to identify the app key + * for the now running application. Passing a process ID of 0 identifies the calling process. + * The application must be one that's known to the system via a call to AddApplicationManifest. */ + virtual EVRApplicationError IdentifyApplication( uint32_t unProcessId, const char *pchAppKey ) = 0; + + /** Returns the process ID for an application. Return 0 if the application was not found or is not running. */ + virtual uint32_t GetApplicationProcessId( const char *pchAppKey ) = 0; + + /** Returns a string for an applications error */ + virtual const char *GetApplicationsErrorNameFromEnum( EVRApplicationError error ) = 0; + + // --------------- Application properties --------------- // + + /** Returns a value for an application property. The required buffer size to fit this value will be returned. */ + virtual uint32_t GetApplicationPropertyString( const char *pchAppKey, EVRApplicationProperty eProperty, VR_OUT_STRING() char *pchPropertyValueBuffer, uint32_t unPropertyValueBufferLen, EVRApplicationError *peError = nullptr ) = 0; + + /** Returns a bool value for an application property. Returns false in all error cases. */ + virtual bool GetApplicationPropertyBool( const char *pchAppKey, EVRApplicationProperty eProperty, EVRApplicationError *peError = nullptr ) = 0; + + /** Returns a uint64 value for an application property. Returns 0 in all error cases. */ + virtual uint64_t GetApplicationPropertyUint64( const char *pchAppKey, EVRApplicationProperty eProperty, EVRApplicationError *peError = nullptr ) = 0; + + /** Sets the application auto-launch flag. This is only valid for applications which return true for VRApplicationProperty_IsDashboardOverlay_Bool. */ + virtual EVRApplicationError SetApplicationAutoLaunch( const char *pchAppKey, bool bAutoLaunch ) = 0; + + /** Gets the application auto-launch flag. This is only valid for applications which return true for VRApplicationProperty_IsDashboardOverlay_Bool. */ + virtual bool GetApplicationAutoLaunch( const char *pchAppKey ) = 0; + + /** Adds this mime-type to the list of supported mime types for this application*/ + virtual EVRApplicationError SetDefaultApplicationForMimeType( const char *pchAppKey, const char *pchMimeType ) = 0; + + /** return the app key that will open this mime type */ + virtual bool GetDefaultApplicationForMimeType( const char *pchMimeType, VR_OUT_STRING() char *pchAppKeyBuffer, uint32_t unAppKeyBufferLen ) = 0; + + /** Get the list of supported mime types for this application, comma-delimited */ + virtual bool GetApplicationSupportedMimeTypes( const char *pchAppKey, VR_OUT_STRING() char *pchMimeTypesBuffer, uint32_t unMimeTypesBuffer ) = 0; + + /** Get the list of app-keys that support this mime type, comma-delimited, the return value is number of bytes you need to return the full string */ + virtual uint32_t GetApplicationsThatSupportMimeType( const char *pchMimeType, VR_OUT_STRING() char *pchAppKeysThatSupportBuffer, uint32_t unAppKeysThatSupportBuffer ) = 0; + + /** Get the args list from an app launch that had the process already running, you call this when you get a VREvent_ApplicationMimeTypeLoad */ + virtual uint32_t GetApplicationLaunchArguments( uint32_t unHandle, VR_OUT_STRING() char *pchArgs, uint32_t unArgs ) = 0; + + // --------------- Transition methods --------------- // + + /** Returns the app key for the application that is starting up */ + virtual EVRApplicationError GetStartingApplication( VR_OUT_STRING() char *pchAppKeyBuffer, uint32_t unAppKeyBufferLen ) = 0; + + /** Returns the application transition state */ + virtual EVRSceneApplicationState GetSceneApplicationState() = 0; + + /** Returns errors that would prevent the specified application from launching immediately. Calling this function will + * cause the current scene application to quit, so only call it when you are actually about to launch something else. + * What the caller should do about these failures depends on the failure: + * VRApplicationError_OldApplicationQuitting - An existing application has been told to quit. Wait for a VREvent_ProcessQuit + * and try again. + * VRApplicationError_ApplicationAlreadyStarting - This application is already starting. This is a permanent failure. + * VRApplicationError_LaunchInProgress - A different application is already starting. This is a permanent failure. + * VRApplicationError_None - Go ahead and launch. Everything is clear. + */ + virtual EVRApplicationError PerformApplicationPrelaunchCheck( const char *pchAppKey ) = 0; + + /** Returns a string for an application transition state */ + virtual const char *GetSceneApplicationStateNameFromEnum( EVRSceneApplicationState state ) = 0; + + /** Starts a subprocess within the calling application. This + * suppresses all application transition UI and automatically identifies the new executable + * as part of the same application. On success the calling process should exit immediately. + * If working directory is NULL or "" the directory portion of the binary path will be + * the working directory. */ + virtual EVRApplicationError LaunchInternalProcess( const char *pchBinaryPath, const char *pchArguments, const char *pchWorkingDirectory ) = 0; + + /** Returns the current scene process ID according to the application system. A scene process will get scene + * focus once it starts rendering, but it will appear here once it calls VR_Init with the Scene application + * type. */ + virtual uint32_t GetCurrentSceneProcessId() = 0; + }; + + static const char * const IVRApplications_Version = "IVRApplications_007"; + +} // namespace vr + +// ivrsettings.h + +#include + +namespace vr +{ + enum EVRSettingsError + { + VRSettingsError_None = 0, + VRSettingsError_IPCFailed = 1, + VRSettingsError_WriteFailed = 2, + VRSettingsError_ReadFailed = 3, + VRSettingsError_JsonParseFailed = 4, + VRSettingsError_UnsetSettingHasNoDefault = 5, // This will be returned if the setting does not appear in the appropriate default file and has not been set + }; + + // The maximum length of a settings key + static const uint32_t k_unMaxSettingsKeyLength = 128; + + class IVRSettings + { + public: + virtual const char *GetSettingsErrorNameFromEnum( EVRSettingsError eError ) = 0; + + virtual void SetBool( const char *pchSection, const char *pchSettingsKey, bool bValue, EVRSettingsError *peError = nullptr ) = 0; + virtual void SetInt32( const char *pchSection, const char *pchSettingsKey, int32_t nValue, EVRSettingsError *peError = nullptr ) = 0; + virtual void SetFloat( const char *pchSection, const char *pchSettingsKey, float flValue, EVRSettingsError *peError = nullptr ) = 0; + virtual void SetString( const char *pchSection, const char *pchSettingsKey, const char *pchValue, EVRSettingsError *peError = nullptr ) = 0; + + // Users of the system need to provide a proper default in default.vrsettings in the resources/settings/ directory + // of either the runtime or the driver_xxx directory. Otherwise the default will be false, 0, 0.0 or "" + virtual bool GetBool( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0; + virtual int32_t GetInt32( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0; + virtual float GetFloat( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0; + virtual void GetString( const char *pchSection, const char *pchSettingsKey, VR_OUT_STRING() char *pchValue, uint32_t unValueLen, EVRSettingsError *peError = nullptr ) = 0; + + virtual void RemoveSection( const char *pchSection, EVRSettingsError *peError = nullptr ) = 0; + virtual void RemoveKeyInSection( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0; + }; + + //----------------------------------------------------------------------------- + static const char * const IVRSettings_Version = "IVRSettings_003"; + + class CVRSettingHelper + { + IVRSettings *m_pSettings; + public: + CVRSettingHelper( IVRSettings *pSettings ) + { + m_pSettings = pSettings; + } + + const char *GetSettingsErrorNameFromEnum( EVRSettingsError eError ) + { + return m_pSettings->GetSettingsErrorNameFromEnum( eError ); + } + + void SetBool( const char *pchSection, const char *pchSettingsKey, bool bValue, EVRSettingsError *peError = nullptr ) + { + m_pSettings->SetBool( pchSection, pchSettingsKey, bValue, peError ); + } + + void SetInt32( const char *pchSection, const char *pchSettingsKey, int32_t nValue, EVRSettingsError *peError = nullptr ) + { + m_pSettings->SetInt32( pchSection, pchSettingsKey, nValue, peError ); + } + void SetFloat( const char *pchSection, const char *pchSettingsKey, float flValue, EVRSettingsError *peError = nullptr ) + { + m_pSettings->SetFloat( pchSection, pchSettingsKey, flValue, peError ); + } + void SetString( const char *pchSection, const char *pchSettingsKey, const char *pchValue, EVRSettingsError *peError = nullptr ) + { + m_pSettings->SetString( pchSection, pchSettingsKey, pchValue, peError ); + } + void SetString( const std::string & sSection, const std::string & sSettingsKey, const std::string & sValue, EVRSettingsError *peError = nullptr ) + { + m_pSettings->SetString( sSection.c_str(), sSettingsKey.c_str(), sValue.c_str(), peError ); + } + + bool GetBool( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) + { + return m_pSettings->GetBool( pchSection, pchSettingsKey, peError ); + } + int32_t GetInt32( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) + { + return m_pSettings->GetInt32( pchSection, pchSettingsKey, peError ); + } + float GetFloat( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) + { + return m_pSettings->GetFloat( pchSection, pchSettingsKey, peError ); + } + void GetString( const char *pchSection, const char *pchSettingsKey, VR_OUT_STRING() char *pchValue, uint32_t unValueLen, EVRSettingsError *peError = nullptr ) + { + m_pSettings->GetString( pchSection, pchSettingsKey, pchValue, unValueLen, peError ); + } + std::string GetString( const std::string & sSection, const std::string & sSettingsKey, EVRSettingsError *peError = nullptr ) + { + char buf[4096]; + vr::EVRSettingsError eError; + m_pSettings->GetString( sSection.c_str(), sSettingsKey.c_str(), buf, sizeof( buf ), &eError ); + if ( peError ) + *peError = eError; + if ( eError == vr::VRSettingsError_None ) + return buf; + else + return ""; + } + + void RemoveSection( const char *pchSection, EVRSettingsError *peError = nullptr ) + { + m_pSettings->RemoveSection( pchSection, peError ); + } + void RemoveKeyInSection( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) + { + m_pSettings->RemoveKeyInSection( pchSection, pchSettingsKey, peError ); + } + }; + + + //----------------------------------------------------------------------------- + // steamvr keys + static const char * const k_pch_SteamVR_Section = "steamvr"; + static const char * const k_pch_SteamVR_RequireHmd_String = "requireHmd"; + static const char * const k_pch_SteamVR_ForcedDriverKey_String = "forcedDriver"; + static const char * const k_pch_SteamVR_ForcedHmdKey_String = "forcedHmd"; + static const char * const k_pch_SteamVR_DisplayDebug_Bool = "displayDebug"; + static const char * const k_pch_SteamVR_DebugProcessPipe_String = "debugProcessPipe"; + static const char * const k_pch_SteamVR_DisplayDebugX_Int32 = "displayDebugX"; + static const char * const k_pch_SteamVR_DisplayDebugY_Int32 = "displayDebugY"; + static const char * const k_pch_SteamVR_SendSystemButtonToAllApps_Bool= "sendSystemButtonToAllApps"; + static const char * const k_pch_SteamVR_LogLevel_Int32 = "loglevel"; + static const char * const k_pch_SteamVR_IPD_Float = "ipd"; + static const char * const k_pch_SteamVR_Background_String = "background"; + static const char * const k_pch_SteamVR_BackgroundUseDomeProjection_Bool = "backgroundUseDomeProjection"; + static const char * const k_pch_SteamVR_BackgroundCameraHeight_Float = "backgroundCameraHeight"; + static const char * const k_pch_SteamVR_BackgroundDomeRadius_Float = "backgroundDomeRadius"; + static const char * const k_pch_SteamVR_GridColor_String = "gridColor"; + static const char * const k_pch_SteamVR_PlayAreaColor_String = "playAreaColor"; + static const char * const k_pch_SteamVR_TrackingLossColor_String = "trackingLossColor"; + static const char * const k_pch_SteamVR_ShowStage_Bool = "showStage"; + static const char * const k_pch_SteamVR_DrawTrackingReferences_Bool = "drawTrackingReferences"; + static const char * const k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers"; + static const char * const k_pch_SteamVR_UsingSpeakers_Bool = "usingSpeakers"; + static const char * const k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float = "speakersForwardYawOffsetDegrees"; + static const char * const k_pch_SteamVR_BaseStationPowerManagement_Int32 = "basestationPowerManagement"; + static const char * const k_pch_SteamVR_ShowBaseStationPowerManagementTip_Int32 = "ShowBaseStationPowerManagementTip"; + static const char * const k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses"; + static const char * const k_pch_SteamVR_SupersampleScale_Float = "supersampleScale"; + static const char * const k_pch_SteamVR_MaxRecommendedResolution_Int32 = "maxRecommendedResolution"; + static const char * const k_pch_SteamVR_MotionSmoothing_Bool = "motionSmoothing"; + static const char * const k_pch_SteamVR_MotionSmoothingOverride_Int32 = "motionSmoothingOverride"; + static const char * const k_pch_SteamVR_FramesToThrottle_Int32 = "framesToThrottle"; + static const char * const k_pch_SteamVR_AdditionalFramesToPredict_Int32 = "additionalFramesToPredict"; + static const char * const k_pch_SteamVR_DisableAsyncReprojection_Bool = "disableAsync"; + static const char * const k_pch_SteamVR_ForceFadeOnBadTracking_Bool = "forceFadeOnBadTracking"; + static const char * const k_pch_SteamVR_DefaultMirrorView_Int32 = "mirrorView"; + static const char * const k_pch_SteamVR_ShowLegacyMirrorView_Bool = "showLegacyMirrorView"; + static const char * const k_pch_SteamVR_MirrorViewVisibility_Bool = "showMirrorView"; + static const char * const k_pch_SteamVR_MirrorViewDisplayMode_Int32 = "mirrorViewDisplayMode"; + static const char * const k_pch_SteamVR_MirrorViewEye_Int32 = "mirrorViewEye"; + static const char * const k_pch_SteamVR_MirrorViewGeometry_String = "mirrorViewGeometry"; + static const char * const k_pch_SteamVR_MirrorViewGeometryMaximized_String = "mirrorViewGeometryMaximized"; + static const char * const k_pch_SteamVR_PerfGraphVisibility_Bool = "showPerfGraph"; + static const char * const k_pch_SteamVR_StartMonitorFromAppLaunch = "startMonitorFromAppLaunch"; + static const char * const k_pch_SteamVR_StartCompositorFromAppLaunch_Bool = "startCompositorFromAppLaunch"; + static const char * const k_pch_SteamVR_StartDashboardFromAppLaunch_Bool = "startDashboardFromAppLaunch"; + static const char * const k_pch_SteamVR_StartOverlayAppsFromDashboard_Bool = "startOverlayAppsFromDashboard"; + static const char * const k_pch_SteamVR_EnableHomeApp = "enableHomeApp"; + static const char * const k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32 = "CycleBackgroundImageTimeSec"; + static const char * const k_pch_SteamVR_RetailDemo_Bool = "retailDemo"; + static const char * const k_pch_SteamVR_IpdOffset_Float = "ipdOffset"; + static const char * const k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering"; + static const char * const k_pch_SteamVR_SupersampleManualOverride_Bool = "supersampleManualOverride"; + static const char * const k_pch_SteamVR_EnableLinuxVulkanAsync_Bool = "enableLinuxVulkanAsync"; + static const char * const k_pch_SteamVR_AllowDisplayLockedMode_Bool = "allowDisplayLockedMode"; + static const char * const k_pch_SteamVR_HaveStartedTutorialForNativeChaperoneDriver_Bool = "haveStartedTutorialForNativeChaperoneDriver"; + static const char * const k_pch_SteamVR_ForceWindows32bitVRMonitor = "forceWindows32BitVRMonitor"; + static const char * const k_pch_SteamVR_DebugInputBinding = "debugInputBinding"; + static const char * const k_pch_SteamVR_DoNotFadeToGrid = "doNotFadeToGrid"; + static const char * const k_pch_SteamVR_RenderCameraMode = "renderCameraMode"; + static const char * const k_pch_SteamVR_EnableSharedResourceJournaling = "enableSharedResourceJournaling"; + static const char * const k_pch_SteamVR_EnableSafeMode = "enableSafeMode"; + static const char * const k_pch_SteamVR_PreferredRefreshRate = "preferredRefreshRate"; + static const char * const k_pch_SteamVR_LastVersionNotice = "lastVersionNotice"; + static const char * const k_pch_SteamVR_LastVersionNoticeDate = "lastVersionNoticeDate"; + static const char * const k_pch_SteamVR_HmdDisplayColorGainR_Float = "hmdDisplayColorGainR"; + static const char * const k_pch_SteamVR_HmdDisplayColorGainG_Float = "hmdDisplayColorGainG"; + static const char * const k_pch_SteamVR_HmdDisplayColorGainB_Float = "hmdDisplayColorGainB"; + static const char * const k_pch_SteamVR_CustomIconStyle_String = "customIconStyle"; + static const char * const k_pch_SteamVR_CustomOffIconStyle_String = "customOffIconStyle"; + static const char * const k_pch_SteamVR_CustomIconForceUpdate_String = "customIconForceUpdate"; + static const char * const k_pch_SteamVR_AllowGlobalActionSetPriority = "globalActionSetPriority"; + static const char * const k_pch_SteamVR_OverlayRenderQuality = "overlayRenderQuality_2"; + static const char * const k_pch_SteamVR_BlockOculusSDKOnOpenVRLaunchOption_Bool = "blockOculusSDKOnOpenVRLaunchOption"; + static const char * const k_pch_SteamVR_BlockOculusSDKOnAllLaunches_Bool = "blockOculusSDKOnAllLaunches"; + static const char * const k_pch_SteamVR_HDCPLegacyCompatibility_Bool = "hdcp14legacyCompatibility"; + static const char * const k_pch_SteamVR_UsePrism_Bool = "usePrism"; + + //----------------------------------------------------------------------------- + // direct mode keys + static const char * const k_pch_DirectMode_Section = "direct_mode"; + static const char * const k_pch_DirectMode_Enable_Bool = "enable"; + static const char * const k_pch_DirectMode_Count_Int32 = "count"; + static const char * const k_pch_DirectMode_EdidVid_Int32 = "edidVid"; + static const char * const k_pch_DirectMode_EdidPid_Int32 = "edidPid"; + + //----------------------------------------------------------------------------- + // lighthouse keys + static const char * const k_pch_Lighthouse_Section = "driver_lighthouse"; + static const char * const k_pch_Lighthouse_DisableIMU_Bool = "disableimu"; + static const char * const k_pch_Lighthouse_DisableIMUExceptHMD_Bool = "disableimuexcepthmd"; + static const char * const k_pch_Lighthouse_UseDisambiguation_String = "usedisambiguation"; + static const char * const k_pch_Lighthouse_DisambiguationDebug_Int32 = "disambiguationdebug"; + static const char * const k_pch_Lighthouse_PrimaryBasestation_Int32 = "primarybasestation"; + static const char * const k_pch_Lighthouse_DBHistory_Bool = "dbhistory"; + static const char * const k_pch_Lighthouse_EnableBluetooth_Bool = "enableBluetooth"; + static const char * const k_pch_Lighthouse_PowerManagedBaseStations_String = "PowerManagedBaseStations"; + static const char * const k_pch_Lighthouse_PowerManagedBaseStations2_String = "PowerManagedBaseStations2"; + static const char * const k_pch_Lighthouse_InactivityTimeoutForBaseStations_Int32 = "InactivityTimeoutForBaseStations"; + static const char * const k_pch_Lighthouse_EnableImuFallback_Bool = "enableImuFallback"; + + //----------------------------------------------------------------------------- + // null keys + static const char * const k_pch_Null_Section = "driver_null"; + static const char * const k_pch_Null_SerialNumber_String = "serialNumber"; + static const char * const k_pch_Null_ModelNumber_String = "modelNumber"; + static const char * const k_pch_Null_WindowX_Int32 = "windowX"; + static const char * const k_pch_Null_WindowY_Int32 = "windowY"; + static const char * const k_pch_Null_WindowWidth_Int32 = "windowWidth"; + static const char * const k_pch_Null_WindowHeight_Int32 = "windowHeight"; + static const char * const k_pch_Null_RenderWidth_Int32 = "renderWidth"; + static const char * const k_pch_Null_RenderHeight_Int32 = "renderHeight"; + static const char * const k_pch_Null_SecondsFromVsyncToPhotons_Float = "secondsFromVsyncToPhotons"; + static const char * const k_pch_Null_DisplayFrequency_Float = "displayFrequency"; + + //----------------------------------------------------------------------------- + // Windows MR keys + static const char * const k_pch_WindowsMR_Section = "driver_holographic"; + + //----------------------------------------------------------------------------- + // user interface keys + static const char * const k_pch_UserInterface_Section = "userinterface"; + static const char * const k_pch_UserInterface_StatusAlwaysOnTop_Bool = "StatusAlwaysOnTop"; + static const char * const k_pch_UserInterface_MinimizeToTray_Bool = "MinimizeToTray"; + static const char * const k_pch_UserInterface_HidePopupsWhenStatusMinimized_Bool = "HidePopupsWhenStatusMinimized"; + static const char * const k_pch_UserInterface_Screenshots_Bool = "screenshots"; + static const char * const k_pch_UserInterface_ScreenshotType_Int = "screenshotType"; + + //----------------------------------------------------------------------------- + // notification keys + static const char * const k_pch_Notifications_Section = "notifications"; + static const char * const k_pch_Notifications_DoNotDisturb_Bool = "DoNotDisturb"; + + //----------------------------------------------------------------------------- + // keyboard keys + static const char * const k_pch_Keyboard_Section = "keyboard"; + static const char * const k_pch_Keyboard_TutorialCompletions = "TutorialCompletions"; + static const char * const k_pch_Keyboard_ScaleX = "ScaleX"; + static const char * const k_pch_Keyboard_ScaleY = "ScaleY"; + static const char * const k_pch_Keyboard_OffsetLeftX = "OffsetLeftX"; + static const char * const k_pch_Keyboard_OffsetRightX = "OffsetRightX"; + static const char * const k_pch_Keyboard_OffsetY = "OffsetY"; + static const char * const k_pch_Keyboard_Smoothing = "Smoothing"; + + //----------------------------------------------------------------------------- + // perf keys + static const char * const k_pch_Perf_Section = "perfcheck"; + static const char * const k_pch_Perf_PerfGraphInHMD_Bool = "perfGraphInHMD"; + static const char * const k_pch_Perf_AllowTimingStore_Bool = "allowTimingStore"; + static const char * const k_pch_Perf_SaveTimingsOnExit_Bool = "saveTimingsOnExit"; + static const char * const k_pch_Perf_TestData_Float = "perfTestData"; + static const char * const k_pch_Perf_GPUProfiling_Bool = "GPUProfiling"; + + //----------------------------------------------------------------------------- + // collision bounds keys + static const char * const k_pch_CollisionBounds_Section = "collisionBounds"; + static const char * const k_pch_CollisionBounds_Style_Int32 = "CollisionBoundsStyle"; + static const char * const k_pch_CollisionBounds_GroundPerimeterOn_Bool = "CollisionBoundsGroundPerimeterOn"; + static const char * const k_pch_CollisionBounds_CenterMarkerOn_Bool = "CollisionBoundsCenterMarkerOn"; + static const char * const k_pch_CollisionBounds_PlaySpaceOn_Bool = "CollisionBoundsPlaySpaceOn"; + static const char * const k_pch_CollisionBounds_FadeDistance_Float = "CollisionBoundsFadeDistance"; + static const char * const k_pch_CollisionBounds_WallHeight_Float = "CollisionBoundsWallHeight"; + static const char * const k_pch_CollisionBounds_ColorGammaR_Int32 = "CollisionBoundsColorGammaR"; + static const char * const k_pch_CollisionBounds_ColorGammaG_Int32 = "CollisionBoundsColorGammaG"; + static const char * const k_pch_CollisionBounds_ColorGammaB_Int32 = "CollisionBoundsColorGammaB"; + static const char * const k_pch_CollisionBounds_ColorGammaA_Int32 = "CollisionBoundsColorGammaA"; + static const char * const k_pch_CollisionBounds_EnableDriverImport = "enableDriverBoundsImport"; + + //----------------------------------------------------------------------------- + // camera keys + static const char * const k_pch_Camera_Section = "camera"; + static const char * const k_pch_Camera_EnableCamera_Bool = "enableCamera"; + static const char * const k_pch_Camera_ShowOnController_Bool = "showOnController"; + static const char * const k_pch_Camera_EnableCameraForCollisionBounds_Bool = "enableCameraForCollisionBounds"; + static const char * const k_pch_Camera_RoomView_Int32 = "roomView"; + static const char * const k_pch_Camera_BoundsColorGammaR_Int32 = "cameraBoundsColorGammaR"; + static const char * const k_pch_Camera_BoundsColorGammaG_Int32 = "cameraBoundsColorGammaG"; + static const char * const k_pch_Camera_BoundsColorGammaB_Int32 = "cameraBoundsColorGammaB"; + static const char * const k_pch_Camera_BoundsColorGammaA_Int32 = "cameraBoundsColorGammaA"; + static const char * const k_pch_Camera_BoundsStrength_Int32 = "cameraBoundsStrength"; + static const char * const k_pch_Camera_RoomViewStyle_Int32 = "roomViewStyle"; + + //----------------------------------------------------------------------------- + // audio keys + static const char * const k_pch_audio_Section = "audio"; + static const char * const k_pch_audio_SetOsDefaultPlaybackDevice_Bool = "setOsDefaultPlaybackDevice"; + static const char * const k_pch_audio_EnablePlaybackDeviceOverride_Bool = "enablePlaybackDeviceOverride"; + static const char * const k_pch_audio_PlaybackDeviceOverride_String = "playbackDeviceOverride"; + static const char * const k_pch_audio_PlaybackDeviceOverrideName_String = "playbackDeviceOverrideName"; + static const char * const k_pch_audio_SetOsDefaultRecordingDevice_Bool = "setOsDefaultRecordingDevice"; + static const char * const k_pch_audio_EnableRecordingDeviceOverride_Bool = "enableRecordingDeviceOverride"; + static const char * const k_pch_audio_RecordingDeviceOverride_String = "recordingDeviceOverride"; + static const char * const k_pch_audio_RecordingDeviceOverrideName_String = "recordingDeviceOverrideName"; + static const char * const k_pch_audio_EnablePlaybackMirror_Bool = "enablePlaybackMirror"; + static const char * const k_pch_audio_PlaybackMirrorDevice_String = "playbackMirrorDevice"; + static const char * const k_pch_audio_PlaybackMirrorDeviceName_String = "playbackMirrorDeviceName"; + static const char * const k_pch_audio_OldPlaybackMirrorDevice_String = "onPlaybackMirrorDevice"; + static const char * const k_pch_audio_ActiveMirrorDevice_String = "activePlaybackMirrorDevice"; + static const char * const k_pch_audio_EnablePlaybackMirrorIndependentVolume_Bool = "enablePlaybackMirrorIndependentVolume"; + static const char * const k_pch_audio_LastHmdPlaybackDeviceId_String = "lastHmdPlaybackDeviceId"; + static const char * const k_pch_audio_VIVEHDMIGain = "viveHDMIGain"; + static const char * const k_pch_audio_DualSpeakerAndJackOutput_Bool = "dualSpeakerAndJackOutput"; + static const char * const k_pch_audio_MuteMicMonitor_Bool = "muteMicMonitor"; + + //----------------------------------------------------------------------------- + // power management keys + static const char * const k_pch_Power_Section = "power"; + static const char * const k_pch_Power_PowerOffOnExit_Bool = "powerOffOnExit"; + static const char * const k_pch_Power_TurnOffScreensTimeout_Float = "turnOffScreensTimeout"; + static const char * const k_pch_Power_TurnOffControllersTimeout_Float = "turnOffControllersTimeout"; + static const char * const k_pch_Power_ReturnToWatchdogTimeout_Float = "returnToWatchdogTimeout"; + static const char * const k_pch_Power_AutoLaunchSteamVROnButtonPress = "autoLaunchSteamVROnButtonPress"; + static const char * const k_pch_Power_PauseCompositorOnStandby_Bool = "pauseCompositorOnStandby"; + + //----------------------------------------------------------------------------- + // dashboard keys + static const char * const k_pch_Dashboard_Section = "dashboard"; + static const char * const k_pch_Dashboard_EnableDashboard_Bool = "enableDashboard"; + static const char * const k_pch_Dashboard_ArcadeMode_Bool = "arcadeMode"; + static const char * const k_pch_Dashboard_Position = "position"; + static const char * const k_pch_Dashboard_DesktopScale = "desktopScale"; + static const char * const k_pch_Dashboard_DashboardScale = "dashboardScale"; + static const char * const k_pch_Dashboard_UseStandaloneSystemLayer = "standaloneSystemLayer"; + + //----------------------------------------------------------------------------- + // model skin keys + static const char * const k_pch_modelskin_Section = "modelskins"; + + //----------------------------------------------------------------------------- + // driver keys - These could be checked in any driver_ section + static const char * const k_pch_Driver_Enable_Bool = "enable"; + static const char * const k_pch_Driver_BlockedBySafemode_Bool = "blocked_by_safe_mode"; + static const char * const k_pch_Driver_LoadPriority_Int32 = "loadPriority"; + + //----------------------------------------------------------------------------- + // web interface keys + static const char* const k_pch_WebInterface_Section = "WebInterface"; + + //----------------------------------------------------------------------------- + // vrwebhelper keys + static const char* const k_pch_VRWebHelper_Section = "VRWebHelper"; + static const char* const k_pch_VRWebHelper_DebuggerEnabled_Bool = "DebuggerEnabled"; + static const char* const k_pch_VRWebHelper_DebuggerPort_Int32 = "DebuggerPort"; + + //----------------------------------------------------------------------------- + // tracking overrides - keys are device paths, values are the device paths their + // tracking/pose information overrides + static const char* const k_pch_TrackingOverride_Section = "TrackingOverrides"; + + //----------------------------------------------------------------------------- + // per-app keys - the section name for these is the app key itself. Some of these are prefixed by the controller type + static const char* const k_pch_App_BindingAutosaveURLSuffix_String = "AutosaveURL"; + static const char* const k_pch_App_BindingLegacyAPISuffix_String = "_legacy"; + static const char* const k_pch_App_BindingSteamVRInputAPISuffix_String = "_steamvrinput"; + static const char* const k_pch_App_BindingCurrentURLSuffix_String = "CurrentURL"; + static const char* const k_pch_App_BindingPreviousURLSuffix_String = "PreviousURL"; + static const char* const k_pch_App_NeedToUpdateAutosaveSuffix_Bool = "NeedToUpdateAutosave"; + static const char* const k_pch_App_DominantHand_Int32 = "DominantHand"; + static const char* const k_pch_App_BlockOculusSDK_Bool = "blockOculusSDK"; + + //----------------------------------------------------------------------------- + // configuration for trackers + static const char * const k_pch_Trackers_Section = "trackers"; + + //----------------------------------------------------------------------------- + // configuration for desktop UI windows + static const char * const k_pch_DesktopUI_Section = "DesktopUI"; + + //----------------------------------------------------------------------------- + // Last known keys for righting recovery + static const char * const k_pch_LastKnown_Section = "LastKnown"; + static const char* const k_pch_LastKnown_HMDManufacturer_String = "HMDManufacturer"; + static const char* const k_pch_LastKnown_HMDModel_String = "HMDModel"; + + //----------------------------------------------------------------------------- + // Dismissed warnings + static const char * const k_pch_DismissedWarnings_Section = "DismissedWarnings"; + + //----------------------------------------------------------------------------- + // Input Settings + static const char * const k_pch_Input_Section = "input"; + static const char* const k_pch_Input_LeftThumbstickRotation_Float = "leftThumbstickRotation"; + static const char* const k_pch_Input_RightThumbstickRotation_Float = "rightThumbstickRotation"; + static const char* const k_pch_Input_ThumbstickDeadzone_Float = "thumbstickDeadzone"; + + //----------------------------------------------------------------------------- + // Log of GPU performance + static const char * const k_pch_GpuSpeed_Section = "GpuSpeed"; + +} // namespace vr + +// ivrchaperone.h + +namespace vr +{ + +#pragma pack( push, 8 ) + +enum ChaperoneCalibrationState +{ + // OK! + ChaperoneCalibrationState_OK = 1, // Chaperone is fully calibrated and working correctly + + // Warnings + ChaperoneCalibrationState_Warning = 100, + ChaperoneCalibrationState_Warning_BaseStationMayHaveMoved = 101, // A base station thinks that it might have moved + ChaperoneCalibrationState_Warning_BaseStationRemoved = 102, // There are less base stations than when calibrated + ChaperoneCalibrationState_Warning_SeatedBoundsInvalid = 103, // Seated bounds haven't been calibrated for the current tracking center + + // Errors + ChaperoneCalibrationState_Error = 200, // The UniverseID is invalid + ChaperoneCalibrationState_Error_BaseStationUninitialized = 201, // Tracking center hasn't be calibrated for at least one of the base stations + ChaperoneCalibrationState_Error_BaseStationConflict = 202, // Tracking center is calibrated, but base stations disagree on the tracking space + ChaperoneCalibrationState_Error_PlayAreaInvalid = 203, // Play Area hasn't been calibrated for the current tracking center + ChaperoneCalibrationState_Error_CollisionBoundsInvalid = 204, // Collision Bounds haven't been calibrated for the current tracking center +}; + + +/** HIGH LEVEL TRACKING SPACE ASSUMPTIONS: +* 0,0,0 is the preferred standing area center. +* 0Y is the floor height. +* -Z is the preferred forward facing direction. */ +class IVRChaperone +{ +public: + + /** Get the current state of Chaperone calibration. This state can change at any time during a session due to physical base station changes. **/ + virtual ChaperoneCalibrationState GetCalibrationState() = 0; + + /** Returns the width and depth of the Play Area (formerly named Soft Bounds) in X and Z. + * Tracking space center (0,0,0) is the center of the Play Area. **/ + virtual bool GetPlayAreaSize( float *pSizeX, float *pSizeZ ) = 0; + + /** Returns the 4 corner positions of the Play Area (formerly named Soft Bounds). + * Corners are in counter-clockwise order. + * Standing center (0,0,0) is the center of the Play Area. + * It's a rectangle. + * 2 sides are parallel to the X axis and 2 sides are parallel to the Z axis. + * Height of every corner is 0Y (on the floor). **/ + virtual bool GetPlayAreaRect( HmdQuad_t *rect ) = 0; + + /** Reload Chaperone data from the .vrchap file on disk. */ + virtual void ReloadInfo( void ) = 0; + + /** Optionally give the chaperone system a hit about the color and brightness in the scene **/ + virtual void SetSceneColor( HmdColor_t color ) = 0; + + /** Get the current chaperone bounds draw color and brightness **/ + virtual void GetBoundsColor( HmdColor_t *pOutputColorArray, int nNumOutputColors, float flCollisionBoundsFadeDistance, HmdColor_t *pOutputCameraColor ) = 0; + + /** Determine whether the bounds are showing right now **/ + virtual bool AreBoundsVisible() = 0; + + /** Force the bounds to show, mostly for utilities **/ + virtual void ForceBoundsVisible( bool bForce ) = 0; + + /** Sets the zero pose for the given tracker coordinate system to the current position and yaw of the HMD. After + * ResetZeroPose all GetDeviceToAbsoluteTrackingPose calls as the origin will be relative to this new zero pose. + * The new zero coordinate system will not change the fact that the Y axis is up in the real world, so the next + * pose returned from GetDeviceToAbsoluteTrackingPose after a call to ResetZeroPose may not be exactly an + * identity matrix. + * + * NOTE: This function overrides the user's previously saved zero pose and should only be called as the result of a user action. + * Users are also able to set their zero pose via the OpenVR Dashboard. + **/ + virtual void ResetZeroPose( ETrackingUniverseOrigin eTrackingUniverseOrigin ) = 0; +}; + +static const char * const IVRChaperone_Version = "IVRChaperone_004"; + +#pragma pack( pop ) + +} + +// ivrchaperonesetup.h + +namespace vr +{ + +enum EChaperoneConfigFile +{ + EChaperoneConfigFile_Live = 1, // The live chaperone config, used by most applications and games + EChaperoneConfigFile_Temp = 2, // The temporary chaperone config, used to live-preview collision bounds in room setup +}; + +enum EChaperoneImportFlags +{ + EChaperoneImport_BoundsOnly = 0x0001, +}; + +/** Manages the working copy of the chaperone info. By default this will be the same as the +* live copy. Any changes made with this interface will stay in the working copy until +* CommitWorkingCopy() is called, at which point the working copy and the live copy will be +* the same again. */ +class IVRChaperoneSetup +{ +public: + + /** Saves the current working copy to disk */ + virtual bool CommitWorkingCopy( EChaperoneConfigFile configFile ) = 0; + + /** Reverts the working copy to match the live chaperone calibration. + * To modify existing data this MUST be do WHILE getting a non-error ChaperoneCalibrationStatus. + * Only after this should you do gets and sets on the existing data. */ + virtual void RevertWorkingCopy() = 0; + + /** Returns the width and depth of the Play Area (formerly named Soft Bounds) in X and Z from the working copy. + * Tracking space center (0,0,0) is the center of the Play Area. */ + virtual bool GetWorkingPlayAreaSize( float *pSizeX, float *pSizeZ ) = 0; + + /** Returns the 4 corner positions of the Play Area (formerly named Soft Bounds) from the working copy. + * Corners are in clockwise order. + * Tracking space center (0,0,0) is the center of the Play Area. + * It's a rectangle. + * 2 sides are parallel to the X axis and 2 sides are parallel to the Z axis. + * Height of every corner is 0Y (on the floor). **/ + virtual bool GetWorkingPlayAreaRect( HmdQuad_t *rect ) = 0; + + /** Returns the number of Quads if the buffer points to null. Otherwise it returns Quads + * into the buffer up to the max specified from the working copy. */ + virtual bool GetWorkingCollisionBoundsInfo( VR_OUT_ARRAY_COUNT(punQuadsCount) HmdQuad_t *pQuadsBuffer, uint32_t* punQuadsCount ) = 0; + + /** Returns the number of Quads if the buffer points to null. Otherwise it returns Quads + * into the buffer up to the max specified. */ + virtual bool GetLiveCollisionBoundsInfo( VR_OUT_ARRAY_COUNT(punQuadsCount) HmdQuad_t *pQuadsBuffer, uint32_t* punQuadsCount ) = 0; + + /** Returns the preferred seated position from the working copy. */ + virtual bool GetWorkingSeatedZeroPoseToRawTrackingPose( HmdMatrix34_t *pmatSeatedZeroPoseToRawTrackingPose ) = 0; + + /** Returns the standing origin from the working copy. */ + virtual bool GetWorkingStandingZeroPoseToRawTrackingPose( HmdMatrix34_t *pmatStandingZeroPoseToRawTrackingPose ) = 0; + + /** Sets the Play Area in the working copy. */ + virtual void SetWorkingPlayAreaSize( float sizeX, float sizeZ ) = 0; + + /** Sets the Collision Bounds in the working copy. Note: ceiling height is ignored. */ + virtual void SetWorkingCollisionBoundsInfo( VR_ARRAY_COUNT(unQuadsCount) HmdQuad_t *pQuadsBuffer, uint32_t unQuadsCount ) = 0; + + /** Sets the Collision Bounds in the working copy. */ + virtual void SetWorkingPerimeter( VR_ARRAY_COUNT( unPointCount ) HmdVector2_t *pPointBuffer, uint32_t unPointCount ) = 0; + + /** Sets the preferred seated position in the working copy. */ + virtual void SetWorkingSeatedZeroPoseToRawTrackingPose( const HmdMatrix34_t *pMatSeatedZeroPoseToRawTrackingPose ) = 0; + + /** Sets the preferred standing position in the working copy. */ + virtual void SetWorkingStandingZeroPoseToRawTrackingPose( const HmdMatrix34_t *pMatStandingZeroPoseToRawTrackingPose ) = 0; + + /** Tear everything down and reload it from the file on disk */ + virtual void ReloadFromDisk( EChaperoneConfigFile configFile ) = 0; + + /** Returns the preferred seated position. */ + virtual bool GetLiveSeatedZeroPoseToRawTrackingPose( HmdMatrix34_t *pmatSeatedZeroPoseToRawTrackingPose ) = 0; + + virtual bool ExportLiveToBuffer( VR_OUT_STRING() char *pBuffer, uint32_t *pnBufferLength ) = 0; + virtual bool ImportFromBufferToWorking( const char *pBuffer, uint32_t nImportFlags ) = 0; + + /** Shows the chaperone data in the working set to preview in the compositor.*/ + virtual void ShowWorkingSetPreview() = 0; + + /** Hides the chaperone data in the working set to preview in the compositor (if it was visible).*/ + virtual void HideWorkingSetPreview() = 0; + + /** Fire an event that the tracking system can use to know room setup is about to begin. This lets the tracking + * system make any last minute adjustments that should be incorporated into the new setup. If the user is adjusting + * live in HMD using a tweak tool, keep in mind that calling this might cause the user to see the room jump. */ + virtual void RoomSetupStarting() = 0; +}; + +static const char * const IVRChaperoneSetup_Version = "IVRChaperoneSetup_006"; + + +} + +// ivrcompositor.h + +namespace vr +{ + +#pragma pack( push, 8 ) + +/** Errors that can occur with the VR compositor */ +enum EVRCompositorError +{ + VRCompositorError_None = 0, + VRCompositorError_RequestFailed = 1, + VRCompositorError_IncompatibleVersion = 100, + VRCompositorError_DoNotHaveFocus = 101, + VRCompositorError_InvalidTexture = 102, + VRCompositorError_IsNotSceneApplication = 103, + VRCompositorError_TextureIsOnWrongDevice = 104, + VRCompositorError_TextureUsesUnsupportedFormat = 105, + VRCompositorError_SharedTexturesNotSupported = 106, + VRCompositorError_IndexOutOfRange = 107, + VRCompositorError_AlreadySubmitted = 108, + VRCompositorError_InvalidBounds = 109, + VRCompositorError_AlreadySet = 110, +}; + +/** Timing mode passed to SetExplicitTimingMode(); see that function for documentation */ +enum EVRCompositorTimingMode +{ + VRCompositorTimingMode_Implicit = 0, + VRCompositorTimingMode_Explicit_RuntimePerformsPostPresentHandoff = 1, + VRCompositorTimingMode_Explicit_ApplicationPerformsPostPresentHandoff = 2, +}; + +/** Cumulative stats for current application. These are not cleared until a new app connects, +* but they do stop accumulating once the associated app disconnects. */ +struct Compositor_CumulativeStats +{ + uint32_t m_nPid; // Process id associated with these stats (may no longer be running). + uint32_t m_nNumFramePresents; // total number of times we called present (includes reprojected frames) + uint32_t m_nNumDroppedFrames; // total number of times an old frame was re-scanned out (without reprojection) + uint32_t m_nNumReprojectedFrames; // total number of times a frame was scanned out a second time (with reprojection) + + /** Values recorded at startup before application has fully faded in the first time. */ + uint32_t m_nNumFramePresentsOnStartup; + uint32_t m_nNumDroppedFramesOnStartup; + uint32_t m_nNumReprojectedFramesOnStartup; + + /** Applications may explicitly fade to the compositor. This is usually to handle level transitions, and loading often causes + * system wide hitches. The following stats are collected during this period. Does not include values recorded during startup. */ + uint32_t m_nNumLoading; + uint32_t m_nNumFramePresentsLoading; + uint32_t m_nNumDroppedFramesLoading; + uint32_t m_nNumReprojectedFramesLoading; + + /** If we don't get a new frame from the app in less than 2.5 frames, then we assume the app has hung and start + * fading back to the compositor. The following stats are a result of this, and are a subset of those recorded above. + * Does not include values recorded during start up or loading. */ + uint32_t m_nNumTimedOut; + uint32_t m_nNumFramePresentsTimedOut; + uint32_t m_nNumDroppedFramesTimedOut; + uint32_t m_nNumReprojectedFramesTimedOut; +}; + +struct Compositor_StageRenderSettings +{ + /** Primary color is applied as a tint to (i.e. multiplied with) the model's texture */ + HmdColor_t m_PrimaryColor; + HmdColor_t m_SecondaryColor; + + /** Vignette radius is in meters and is used to fade to the specified secondary solid color over + * that 3D distance from the origin of the playspace. */ + float m_flVignetteInnerRadius; + float m_flVignetteOuterRadius; + + /** Fades to the secondary color based on view incidence. This variable controls the linearity + * of the effect. It is mutually exclusive with vignette. Additionally, it treats the mesh as faceted. */ + float m_flFresnelStrength; + + /** Controls backface culling. */ + bool m_bBackfaceCulling; + + /** Converts the render model's texture to luma and applies to rgb equally. This is useful to + * combat compression artifacts that can occur on desaturated source material. */ + bool m_bGreyscale; + + /** Renders mesh as a wireframe. */ + bool m_bWireframe; +}; + +static inline Compositor_StageRenderSettings DefaultStageRenderSettings() +{ + Compositor_StageRenderSettings settings; + settings.m_PrimaryColor.r = 1.0f; + settings.m_PrimaryColor.g = 1.0f; + settings.m_PrimaryColor.b = 1.0f; + settings.m_PrimaryColor.a = 1.0f; + settings.m_SecondaryColor.r = 1.0f; + settings.m_SecondaryColor.g = 1.0f; + settings.m_SecondaryColor.b = 1.0f; + settings.m_SecondaryColor.a = 1.0f; + settings.m_flVignetteInnerRadius = 0.0f; + settings.m_flVignetteOuterRadius = 0.0f; + settings.m_flFresnelStrength = 0.0f; + settings.m_bBackfaceCulling = false; + settings.m_bGreyscale = false; + settings.m_bWireframe = false; + return settings; +} + +#pragma pack( pop ) + +/** Allows the application to interact with the compositor */ +class IVRCompositor +{ +public: + /** Sets tracking space returned by WaitGetPoses */ + virtual void SetTrackingSpace( ETrackingUniverseOrigin eOrigin ) = 0; + + /** Gets current tracking space returned by WaitGetPoses */ + virtual ETrackingUniverseOrigin GetTrackingSpace() = 0; + + /** Scene applications should call this function to get poses to render with (and optionally poses predicted an additional frame out to use for gameplay). + * This function will block until "running start" milliseconds before the start of the frame, and should be called at the last moment before needing to + * start rendering. + * + * Return codes: + * - IsNotSceneApplication (make sure to call VR_Init with VRApplicaiton_Scene) + * - DoNotHaveFocus (some other app has taken focus - this will throttle the call to 10hz to reduce the impact on that app) + */ + virtual EVRCompositorError WaitGetPoses( VR_ARRAY_COUNT( unRenderPoseArrayCount ) TrackedDevicePose_t* pRenderPoseArray, uint32_t unRenderPoseArrayCount, + VR_ARRAY_COUNT( unGamePoseArrayCount ) TrackedDevicePose_t* pGamePoseArray, uint32_t unGamePoseArrayCount ) = 0; + + /** Get the last set of poses returned by WaitGetPoses. */ + virtual EVRCompositorError GetLastPoses( VR_ARRAY_COUNT( unRenderPoseArrayCount ) TrackedDevicePose_t* pRenderPoseArray, uint32_t unRenderPoseArrayCount, + VR_ARRAY_COUNT( unGamePoseArrayCount ) TrackedDevicePose_t* pGamePoseArray, uint32_t unGamePoseArrayCount ) = 0; + + /** Interface for accessing last set of poses returned by WaitGetPoses one at a time. + * Returns VRCompositorError_IndexOutOfRange if unDeviceIndex not less than k_unMaxTrackedDeviceCount otherwise VRCompositorError_None. + * It is okay to pass NULL for either pose if you only want one of the values. */ + virtual EVRCompositorError GetLastPoseForTrackedDeviceIndex( TrackedDeviceIndex_t unDeviceIndex, TrackedDevicePose_t *pOutputPose, TrackedDevicePose_t *pOutputGamePose ) = 0; + + /** Updated scene texture to display. If pBounds is NULL the entire texture will be used. If called from an OpenGL app, consider adding a glFlush after + * Submitting both frames to signal the driver to start processing, otherwise it may wait until the command buffer fills up, causing the app to miss frames. + * + * OpenGL dirty state: + * glBindTexture + * + * Return codes: + * - IsNotSceneApplication (make sure to call VR_Init with VRApplicaiton_Scene) + * - DoNotHaveFocus (some other app has taken focus) + * - TextureIsOnWrongDevice (application did not use proper AdapterIndex - see IVRSystem.GetDXGIOutputInfo) + * - SharedTexturesNotSupported (application needs to call CreateDXGIFactory1 or later before creating DX device) + * - TextureUsesUnsupportedFormat (scene textures must be compatible with DXGI sharing rules - e.g. uncompressed, no mips, etc.) + * - InvalidTexture (usually means bad arguments passed in) + * - AlreadySubmitted (app has submitted two left textures or two right textures in a single frame - i.e. before calling WaitGetPoses again) + */ + virtual EVRCompositorError Submit( EVREye eEye, const Texture_t *pTexture, const VRTextureBounds_t* pBounds = 0, EVRSubmitFlags nSubmitFlags = Submit_Default ) = 0; + + /** Clears the frame that was sent with the last call to Submit. This will cause the + * compositor to show the grid until Submit is called again. */ + virtual void ClearLastSubmittedFrame() = 0; + + /** Call immediately after presenting your app's window (i.e. companion window) to unblock the compositor. + * This is an optional call, which only needs to be used if you can't instead call WaitGetPoses immediately after Present. + * For example, if your engine's render and game loop are not on separate threads, or blocking the render thread until 3ms before the next vsync would + * introduce a deadlock of some sort. This function tells the compositor that you have finished all rendering after having Submitted buffers for both + * eyes, and it is free to start its rendering work. This should only be called from the same thread you are rendering on. */ + virtual void PostPresentHandoff() = 0; + + /** Returns true if timing data is filled it. Sets oldest timing info if nFramesAgo is larger than the stored history. + * Be sure to set timing.size = sizeof(Compositor_FrameTiming) on struct passed in before calling this function. */ + virtual bool GetFrameTiming( Compositor_FrameTiming *pTiming, uint32_t unFramesAgo = 0 ) = 0; + + /** Interface for copying a range of timing data. Frames are returned in ascending order (oldest to newest) with the last being the most recent frame. + * Only the first entry's m_nSize needs to be set, as the rest will be inferred from that. Returns total number of entries filled out. */ + virtual uint32_t GetFrameTimings( VR_ARRAY_COUNT( nFrames ) Compositor_FrameTiming *pTiming, uint32_t nFrames ) = 0; + + /** Returns the time in seconds left in the current (as identified by FrameTiming's frameIndex) frame. + * Due to "running start", this value may roll over to the next frame before ever reaching 0.0. */ + virtual float GetFrameTimeRemaining() = 0; + + /** Fills out stats accumulated for the last connected application. Pass in sizeof( Compositor_CumulativeStats ) as second parameter. */ + virtual void GetCumulativeStats( Compositor_CumulativeStats *pStats, uint32_t nStatsSizeInBytes ) = 0; + + /** Fades the view on the HMD to the specified color. The fade will take fSeconds, and the color values are between + * 0.0 and 1.0. This color is faded on top of the scene based on the alpha parameter. Removing the fade color instantly + * would be FadeToColor( 0.0, 0.0, 0.0, 0.0, 0.0 ). Values are in un-premultiplied alpha space. */ + virtual void FadeToColor( float fSeconds, float fRed, float fGreen, float fBlue, float fAlpha, bool bBackground = false ) = 0; + + /** Get current fade color value. */ + virtual HmdColor_t GetCurrentFadeColor( bool bBackground = false ) = 0; + + /** Fading the Grid in or out in fSeconds */ + virtual void FadeGrid( float fSeconds, bool bFadeGridIn ) = 0; + + /** Get current alpha value of grid. */ + virtual float GetCurrentGridAlpha() = 0; + + /** Override the skybox used in the compositor (e.g. for during level loads when the app can't feed scene images fast enough) + * Order is Front, Back, Left, Right, Top, Bottom. If only a single texture is passed, it is assumed in lat-long format. + * If two are passed, it is assumed a lat-long stereo pair. */ + virtual EVRCompositorError SetSkyboxOverride( VR_ARRAY_COUNT( unTextureCount ) const Texture_t *pTextures, uint32_t unTextureCount ) = 0; + + /** Resets compositor skybox back to defaults. */ + virtual void ClearSkyboxOverride() = 0; + + /** Brings the compositor window to the front. This is useful for covering any other window that may be on the HMD + * and is obscuring the compositor window. */ + virtual void CompositorBringToFront() = 0; + + /** Pushes the compositor window to the back. This is useful for allowing other applications to draw directly to the HMD. */ + virtual void CompositorGoToBack() = 0; + + /** DEPRECATED: Tells the compositor process to clean up and exit. You do not need to call this function at shutdown. + * Under normal circumstances the compositor will manage its own life cycle based on what applications are running. */ + virtual void CompositorQuit() = 0; + + /** Return whether the compositor is fullscreen */ + virtual bool IsFullscreen() = 0; + + /** Returns the process ID of the process that is currently rendering the scene */ + virtual uint32_t GetCurrentSceneFocusProcess() = 0; + + /** Returns the process ID of the process that rendered the last frame (or 0 if the compositor itself rendered the frame.) + * Returns 0 when fading out from an app and the app's process Id when fading into an app. */ + virtual uint32_t GetLastFrameRenderer() = 0; + + /** Returns true if the current process has the scene focus */ + virtual bool CanRenderScene() = 0; + + /** DEPRECATED: Opens the headset view (as either a window or docked widget depending on user's preferences) that displays what the user + * sees in the headset. */ + virtual void ShowMirrorWindow() = 0; + + /** DEPRECATED: Closes the headset view, either as a window or docked widget. */ + virtual void HideMirrorWindow() = 0; + + /** DEPRECATED: Returns true if the headset view (either as a window or docked widget) is shown. */ + virtual bool IsMirrorWindowVisible() = 0; + + /** Writes back buffer and stereo left/right pair from the application to a 'screenshots' folder in the SteamVR runtime root. */ + virtual void CompositorDumpImages() = 0; + + /** Let an app know it should be rendering with low resources. */ + virtual bool ShouldAppRenderWithLowResources() = 0; + + /** Override interleaved reprojection logic to force on. */ + virtual void ForceInterleavedReprojectionOn( bool bOverride ) = 0; + + /** Force reconnecting to the compositor process. */ + virtual void ForceReconnectProcess() = 0; + + /** Temporarily suspends rendering (useful for finer control over scene transitions). */ + virtual void SuspendRendering( bool bSuspend ) = 0; + + /** Opens a shared D3D11 texture with the undistorted composited image for each eye. Use ReleaseMirrorTextureD3D11 when finished + * instead of calling Release on the resource itself. */ + virtual vr::EVRCompositorError GetMirrorTextureD3D11( vr::EVREye eEye, void *pD3D11DeviceOrResource, void **ppD3D11ShaderResourceView ) = 0; + virtual void ReleaseMirrorTextureD3D11( void *pD3D11ShaderResourceView ) = 0; + + /** Access to mirror textures from OpenGL. */ + virtual vr::EVRCompositorError GetMirrorTextureGL( vr::EVREye eEye, vr::glUInt_t *pglTextureId, vr::glSharedTextureHandle_t *pglSharedTextureHandle ) = 0; + virtual bool ReleaseSharedGLTexture( vr::glUInt_t glTextureId, vr::glSharedTextureHandle_t glSharedTextureHandle ) = 0; + virtual void LockGLSharedTextureForAccess( vr::glSharedTextureHandle_t glSharedTextureHandle ) = 0; + virtual void UnlockGLSharedTextureForAccess( vr::glSharedTextureHandle_t glSharedTextureHandle ) = 0; + + /** [Vulkan Only] + * return 0. Otherwise it returns the length of the number of bytes necessary to hold this string including the trailing + * null. The string will be a space separated list of-required instance extensions to enable in VkCreateInstance */ + virtual uint32_t GetVulkanInstanceExtensionsRequired( VR_OUT_STRING() char *pchValue, uint32_t unBufferSize ) = 0; + + /** [Vulkan only] + * return 0. Otherwise it returns the length of the number of bytes necessary to hold this string including the trailing + * null. The string will be a space separated list of required device extensions to enable in VkCreateDevice */ + virtual uint32_t GetVulkanDeviceExtensionsRequired( VkPhysicalDevice_T *pPhysicalDevice, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize ) = 0; + + /** [ Vulkan/D3D12 Only ] + * There are two purposes for SetExplicitTimingMode: + * 1. To get a more accurate GPU timestamp for when the frame begins in Vulkan/D3D12 applications. + * 2. (Optional) To avoid having WaitGetPoses access the Vulkan queue so that the queue can be accessed from + * another thread while WaitGetPoses is executing. + * + * More accurate GPU timestamp for the start of the frame is achieved by the application calling + * SubmitExplicitTimingData immediately before its first submission to the Vulkan/D3D12 queue. + * This is more accurate because normally this GPU timestamp is recorded during WaitGetPoses. In D3D11, + * WaitGetPoses queues a GPU timestamp write, but it does not actually get submitted to the GPU until the + * application flushes. By using SubmitExplicitTimingData, the timestamp is recorded at the same place for + * Vulkan/D3D12 as it is for D3D11, resulting in a more accurate GPU time measurement for the frame. + * + * Avoiding WaitGetPoses accessing the Vulkan queue can be achieved using SetExplicitTimingMode as well. If this is desired, + * the application should set the timing mode to Explicit_ApplicationPerformsPostPresentHandoff and *MUST* call PostPresentHandoff + * itself. If these conditions are met, then WaitGetPoses is guaranteed not to access the queue. Note that PostPresentHandoff + * and SubmitExplicitTimingData will access the queue, so only WaitGetPoses becomes safe for accessing the queue from another + * thread. */ + virtual void SetExplicitTimingMode( EVRCompositorTimingMode eTimingMode ) = 0; + + /** [ Vulkan/D3D12 Only ] + * Submit explicit timing data. When SetExplicitTimingMode is true, this must be called immediately before + * the application's first vkQueueSubmit (Vulkan) or ID3D12CommandQueue::ExecuteCommandLists (D3D12) of each frame. + * This function will insert a GPU timestamp write just before the application starts its rendering. This function + * will perform a vkQueueSubmit on Vulkan so must not be done simultaneously with VkQueue operations on another thread. + * Returns VRCompositorError_RequestFailed if SetExplicitTimingMode is not enabled. */ + virtual EVRCompositorError SubmitExplicitTimingData() = 0; + + /** Indicates whether or not motion smoothing is enabled by the user settings. + * If you want to know if motion smoothing actually triggered due to a late frame, check Compositor_FrameTiming + * m_nReprojectionFlags & VRCompositor_ReprojectionMotion instead. */ + virtual bool IsMotionSmoothingEnabled() = 0; + + /** Indicates whether or not motion smoothing is supported by the current hardware. */ + virtual bool IsMotionSmoothingSupported() = 0; + + /** Indicates whether or not the current scene focus app is currently loading. This is inferred from its use of FadeGrid to + * explicitly fade to the compositor to cover up the fact that it cannot render at a sustained full framerate during this time. */ + virtual bool IsCurrentSceneFocusAppLoading() = 0; + + /** Override the stage model used in the compositor to replace the grid. RenderModelPath is a full path the an OBJ file to load. + * This file will be loaded asynchronously from disk and uploaded to the gpu by the runtime. Once ready for rendering, the + * VREvent StageOverrideReady will be sent. Use FadeToGrid to reveal. Call ClearStageOverride to free the associated resources when finished. */ + virtual EVRCompositorError SetStageOverride_Async( const char *pchRenderModelPath, const HmdMatrix34_t *pTransform = 0, + const Compositor_StageRenderSettings *pRenderSettings = 0, uint32_t nSizeOfRenderSettings = 0 ) = 0; + + /** Resets the stage to its default user specified setting. */ + virtual void ClearStageOverride() = 0; + + /** Returns true if pBenchmarkResults is filled it. Sets pBenchmarkResults with the result of the compositor benchmark. + * nSizeOfBenchmarkResults should be set to sizeof(Compositor_BenchmarkResults) */ + virtual bool GetCompositorBenchmarkResults( Compositor_BenchmarkResults *pBenchmarkResults, uint32_t nSizeOfBenchmarkResults ) = 0; + + /** Returns the frame id associated with the poses last returned by WaitGetPoses. Deltas between IDs correspond to number of headset vsync intervals. */ + virtual EVRCompositorError GetLastPosePredictionIDs( uint32_t *pRenderPosePredictionID, uint32_t *pGamePosePredictionID ) = 0; + + /** Get the most up-to-date predicted (or recorded - up to 100ms old) set of poses for a given frame id. */ + virtual EVRCompositorError GetPosesForFrame( uint32_t unPosePredictionID, VR_ARRAY_COUNT( unPoseArrayCount ) TrackedDevicePose_t* pPoseArray, uint32_t unPoseArrayCount ) = 0; +}; + +static const char * const IVRCompositor_Version = "IVRCompositor_027"; + +} // namespace vr + + + +// ivrheadsetview.h + +namespace vr +{ + enum HeadsetViewMode_t + { + HeadsetViewMode_Left = 0, + HeadsetViewMode_Right, + HeadsetViewMode_Both + }; + + class IVRHeadsetView + { + public: + /** Sets the resolution in pixels to render the headset view. These values are clamped to k_unHeadsetViewMaxWidth + * and k_unHeadsetViewMaxHeight respectively. For cropped views, the rendered output will be fit to aspect ratio + * defined by the the specified dimensions. For uncropped views, the caller should use GetHeadsetViewAspectRation + * to adjust the requested render size to avoid squashing or stretching, and then apply letterboxing to compensate + * when displaying the results. */ + virtual void SetHeadsetViewSize( uint32_t nWidth, uint32_t nHeight ) = 0; + + /** Gets the current resolution used to render the headset view. */ + virtual void GetHeadsetViewSize( uint32_t *pnWidth, uint32_t *pnHeight ) = 0; + + /** Set the mode used to render the headset view. */ + virtual void SetHeadsetViewMode( HeadsetViewMode_t eHeadsetViewMode ) = 0; + + /** Get the current mode used to render the headset view. */ + virtual HeadsetViewMode_t GetHeadsetViewMode() = 0; + + /** Set whether or not the headset view should be rendered cropped to hide the hidden area mesh or not. */ + virtual void SetHeadsetViewCropped( bool bCropped ) = 0; + + /** Get the current cropping status of the headset view. */ + virtual bool GetHeadsetViewCropped() = 0; + + /** Get the aspect ratio (width:height) of the uncropped headset view (accounting for the current set mode). */ + virtual float GetHeadsetViewAspectRatio() = 0; + + /** Set the range [0..1] that the headset view blends across the stereo overlapped area in cropped both mode. */ + virtual void SetHeadsetViewBlendRange( float flStartPct, float flEndPct ) = 0; + + /** Get the current range [0..1] that the headset view blends across the stereo overlapped area in cropped both mode. */ + virtual void GetHeadsetViewBlendRange( float *pStartPct, float *pEndPct ) = 0; + }; + + static const uint32_t k_unHeadsetViewMaxWidth = 3840; + static const uint32_t k_unHeadsetViewMaxHeight = 2160; + static const char * const k_pchHeadsetViewOverlayKey = "system.HeadsetView"; + + static const char * const IVRHeadsetView_Version = "IVRHeadsetView_001"; + + /** Returns the current IVRHeadsetView pointer or NULL the interface could not be found. */ + VR_INTERFACE vr::IVRHeadsetView *VR_CALLTYPE VRHeadsetView(); + +} // namespace vr + + +// ivrnotifications.h + +namespace vr +{ + +#pragma pack( push, 8 ) + +// Used for passing graphic data +struct NotificationBitmap_t +{ + NotificationBitmap_t() + : m_pImageData( nullptr ) + , m_nWidth( 0 ) + , m_nHeight( 0 ) + , m_nBytesPerPixel( 0 ) + { + } + + void *m_pImageData; + int32_t m_nWidth; + int32_t m_nHeight; + int32_t m_nBytesPerPixel; +}; + + +/** Be aware that the notification type is used as 'priority' to pick the next notification */ +enum EVRNotificationType +{ + /** Transient notifications are automatically hidden after a period of time set by the user. + * They are used for things like information and chat messages that do not require user interaction. */ + EVRNotificationType_Transient = 0, + + /** Persistent notifications are shown to the user until they are hidden by calling RemoveNotification(). + * They are used for things like phone calls and alarms that require user interaction. */ + EVRNotificationType_Persistent = 1, + + /** System notifications are shown no matter what. It is expected, that the ulUserValue is used as ID. + * If there is already a system notification in the queue with that ID it is not accepted into the queue + * to prevent spamming with system notification */ + EVRNotificationType_Transient_SystemWithUserValue = 2, +}; + +enum EVRNotificationStyle +{ + /** Creates a notification with minimal external styling. */ + EVRNotificationStyle_None = 0, + + /** Used for notifications about overlay-level status. In Steam this is used for events like downloads completing. */ + EVRNotificationStyle_Application = 100, + + /** Used for notifications about contacts that are unknown or not available. In Steam this is used for friend invitations and offline friends. */ + EVRNotificationStyle_Contact_Disabled = 200, + + /** Used for notifications about contacts that are available but inactive. In Steam this is used for friends that are online but not playing a game. */ + EVRNotificationStyle_Contact_Enabled = 201, + + /** Used for notifications about contacts that are available and active. In Steam this is used for friends that are online and currently running a game. */ + EVRNotificationStyle_Contact_Active = 202, +}; + +static const uint32_t k_unNotificationTextMaxSize = 256; + +typedef uint32_t VRNotificationId; + + + +#pragma pack( pop ) + +/** Allows notification sources to interact with the VR system + This current interface is not yet implemented. Do not use yet. */ +class IVRNotifications +{ +public: + /** Create a notification and enqueue it to be shown to the user. + * An overlay handle is required to create a notification, as otherwise it would be impossible for a user to act on it. + * To create a two-line notification, use a line break ('\n') to split the text into two lines. + * The pImage argument may be NULL, in which case the specified overlay's icon will be used instead. */ + virtual EVRNotificationError CreateNotification( VROverlayHandle_t ulOverlayHandle, uint64_t ulUserValue, EVRNotificationType type, const char *pchText, EVRNotificationStyle style, const NotificationBitmap_t *pImage, /* out */ VRNotificationId *pNotificationId ) = 0; + + /** Destroy a notification, hiding it first if it currently shown to the user. */ + virtual EVRNotificationError RemoveNotification( VRNotificationId notificationId ) = 0; + +}; + +static const char * const IVRNotifications_Version = "IVRNotifications_002"; + +} // namespace vr + + + +// ivroverlay.h + +namespace vr +{ + + /** The maximum length of an overlay key in bytes, counting the terminating null character. */ + static const uint32_t k_unVROverlayMaxKeyLength = 128; + + /** The maximum length of an overlay name in bytes, counting the terminating null character. */ + static const uint32_t k_unVROverlayMaxNameLength = 128; + + /** The maximum number of overlays that can exist in the system at one time. */ + static const uint32_t k_unMaxOverlayCount = 128; + + /** The maximum number of overlay intersection mask primitives per overlay */ + static const uint32_t k_unMaxOverlayIntersectionMaskPrimitivesCount = 32; + + /** Types of input supported by VR Overlays */ + enum VROverlayInputMethod + { + VROverlayInputMethod_None = 0, // No input events will be generated automatically for this overlay + VROverlayInputMethod_Mouse = 1, // Tracked controllers will get mouse events automatically + // VROverlayInputMethod_DualAnalog = 2, // No longer supported + }; + + /** Allows the caller to figure out which overlay transform getter to call. */ + enum VROverlayTransformType + { + VROverlayTransform_Invalid = -1, + VROverlayTransform_Absolute = 0, + VROverlayTransform_TrackedDeviceRelative = 1, + VROverlayTransform_SystemOverlay = 2, + VROverlayTransform_TrackedComponent = 3, + VROverlayTransform_Cursor = 4, + VROverlayTransform_DashboardTab = 5, + VROverlayTransform_DashboardThumb = 6, + VROverlayTransform_Mountable = 7, + VROverlayTransform_Projection = 8, + }; + + /** Overlay control settings */ + enum VROverlayFlags + { + // Set this flag on a dashboard overlay to prevent a tab from showing up for that overlay + VROverlayFlags_NoDashboardTab = 1 << 3, + + // When this is set the overlay will receive VREvent_ScrollDiscrete events like a mouse wheel. + // Requires mouse input mode. + VROverlayFlags_SendVRDiscreteScrollEvents = 1 << 6, + + // Indicates that the overlay would like to receive + VROverlayFlags_SendVRTouchpadEvents = 1 << 7, + + // If set this will render a vertical scroll wheel on the primary controller, + // only needed if not using VROverlayFlags_SendVRScrollEvents but you still want to represent a scroll wheel + VROverlayFlags_ShowTouchPadScrollWheel = 1 << 8, + + // If this is set ownership and render access to the overlay are transferred + // to the new scene process on a call to IVRApplications::LaunchInternalProcess + VROverlayFlags_TransferOwnershipToInternalProcess = 1 << 9, + + // If set, renders 50% of the texture in each eye, side by side + VROverlayFlags_SideBySide_Parallel = 1 << 10, // Texture is left/right + VROverlayFlags_SideBySide_Crossed = 1 << 11, // Texture is crossed and right/left + + VROverlayFlags_Panorama = 1 << 12, // Texture is a panorama + VROverlayFlags_StereoPanorama = 1 << 13, // Texture is a stereo panorama + + // If this is set on an overlay owned by the scene application that overlay + // will be sorted with the "Other" overlays on top of all other scene overlays + VROverlayFlags_SortWithNonSceneOverlays = 1 << 14, + + // If set, the overlay will be shown in the dashboard, otherwise it will be hidden. + VROverlayFlags_VisibleInDashboard = 1 << 15, + + // If this is set and the overlay's input method is not none, the system-wide laser mouse + // mode will be activated whenever this overlay is visible. + VROverlayFlags_MakeOverlaysInteractiveIfVisible = 1 << 16, + + // If this is set the overlay will receive smooth VREvent_ScrollSmooth that emulate trackpad scrolling. + // Requires mouse input mode. + VROverlayFlags_SendVRSmoothScrollEvents = 1 << 17, + + // If this is set, the overlay texture will be protected content, preventing unauthorized reads. + VROverlayFlags_ProtectedContent = 1 << 18, + + // If this is set, the laser mouse splat will not be drawn over this overlay. The overlay will + // be responsible for drawing its own "cursor". + VROverlayFlags_HideLaserIntersection = 1 << 19, + + // If this is set, clicking away from the overlay will cause it to receive a VREvent_Modal_Cancel event. + // This is ignored for dashboard overlays. + VROverlayFlags_WantsModalBehavior = 1 << 20, + + // If this is set, alpha composition assumes the texture is pre-multiplied + VROverlayFlags_IsPremultiplied = 1 << 21, + }; + + enum VRMessageOverlayResponse + { + VRMessageOverlayResponse_ButtonPress_0 = 0, + VRMessageOverlayResponse_ButtonPress_1 = 1, + VRMessageOverlayResponse_ButtonPress_2 = 2, + VRMessageOverlayResponse_ButtonPress_3 = 3, + VRMessageOverlayResponse_CouldntFindSystemOverlay = 4, + VRMessageOverlayResponse_CouldntFindOrCreateClientOverlay= 5, + VRMessageOverlayResponse_ApplicationQuit = 6 + }; + + struct VROverlayIntersectionParams_t + { + HmdVector3_t vSource; + HmdVector3_t vDirection; + ETrackingUniverseOrigin eOrigin; + }; + + struct VROverlayIntersectionResults_t + { + HmdVector3_t vPoint; + HmdVector3_t vNormal; + HmdVector2_t vUVs; + float fDistance; + }; + + // Input modes for the Big Picture gamepad text entry + enum EGamepadTextInputMode + { + k_EGamepadTextInputModeNormal = 0, + k_EGamepadTextInputModePassword = 1, + k_EGamepadTextInputModeSubmit = 2, + }; + + // Controls number of allowed lines for the Big Picture gamepad text entry + enum EGamepadTextInputLineMode + { + k_EGamepadTextInputLineModeSingleLine = 0, + k_EGamepadTextInputLineModeMultipleLines = 1 + }; + + enum EVROverlayIntersectionMaskPrimitiveType + { + OverlayIntersectionPrimitiveType_Rectangle, + OverlayIntersectionPrimitiveType_Circle, + }; + + struct IntersectionMaskRectangle_t + { + float m_flTopLeftX; + float m_flTopLeftY; + float m_flWidth; + float m_flHeight; + }; + + struct IntersectionMaskCircle_t + { + float m_flCenterX; + float m_flCenterY; + float m_flRadius; + }; + + /** NOTE!!! If you change this you MUST manually update openvr_interop.cs.py and openvr_api_flat.h.py */ + typedef union + { + IntersectionMaskRectangle_t m_Rectangle; + IntersectionMaskCircle_t m_Circle; + } VROverlayIntersectionMaskPrimitive_Data_t; + + struct VROverlayIntersectionMaskPrimitive_t + { + EVROverlayIntersectionMaskPrimitiveType m_nPrimitiveType; + VROverlayIntersectionMaskPrimitive_Data_t m_Primitive; + }; + + enum EKeyboardFlags + { + KeyboardFlag_Minimal = 1 << 0, // makes the keyboard send key events immediately instead of accumulating a buffer + KeyboardFlag_Modal = 2 << 0, // makes the keyboard take all focus and dismiss when clicking off the panel + }; + + /** Defines the project used in an overlay that is using SetOverlayTransformProjection */ + struct VROverlayProjection_t + { + /** Tangent of the sides of the frustum */ + float fLeft; + float fRight; + float fTop; + float fBottom; + }; + + class IVROverlay + { + public: + + // --------------------------------------------- + // Overlay management methods + // --------------------------------------------- + + /** Finds an existing overlay with the specified key. */ + virtual EVROverlayError FindOverlay( const char *pchOverlayKey, VROverlayHandle_t * pOverlayHandle ) = 0; + + /** Creates a new named overlay. All overlays start hidden and with default settings. */ + virtual EVROverlayError CreateOverlay( const char *pchOverlayKey, const char *pchOverlayName, VROverlayHandle_t * pOverlayHandle ) = 0; + + /** Destroys the specified overlay. When an application calls VR_Shutdown all overlays created by that app are + * automatically destroyed. */ + virtual EVROverlayError DestroyOverlay( VROverlayHandle_t ulOverlayHandle ) = 0; + + /** Fills the provided buffer with the string key of the overlay. Returns the size of buffer required to store the key, including + * the terminating null character. k_unVROverlayMaxKeyLength will be enough bytes to fit the string. */ + virtual uint32_t GetOverlayKey( VROverlayHandle_t ulOverlayHandle, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize, EVROverlayError *pError = 0L ) = 0; + + /** Fills the provided buffer with the friendly name of the overlay. Returns the size of buffer required to store the key, including + * the terminating null character. k_unVROverlayMaxNameLength will be enough bytes to fit the string. */ + virtual uint32_t GetOverlayName( VROverlayHandle_t ulOverlayHandle, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize, EVROverlayError *pError = 0L ) = 0; + + /** set the name to use for this overlay */ + virtual EVROverlayError SetOverlayName( VROverlayHandle_t ulOverlayHandle, const char *pchName ) = 0; + + /** Gets the raw image data from an overlay. Overlay image data is always returned as RGBA data, 4 bytes per pixel. If the buffer is not large enough, width and height + * will be set and VROverlayError_ArrayTooSmall is returned. */ + virtual EVROverlayError GetOverlayImageData( VROverlayHandle_t ulOverlayHandle, void *pvBuffer, uint32_t unBufferSize, uint32_t *punWidth, uint32_t *punHeight ) = 0; + + /** returns a string that corresponds with the specified overlay error. The string will be the name + * of the error enum value for all valid error codes */ + virtual const char *GetOverlayErrorNameFromEnum( EVROverlayError error ) = 0; + + // --------------------------------------------- + // Overlay rendering methods + // --------------------------------------------- + + /** Sets the pid that is allowed to render to this overlay (the creator pid is always allow to render), + * by default this is the pid of the process that made the overlay */ + virtual EVROverlayError SetOverlayRenderingPid( VROverlayHandle_t ulOverlayHandle, uint32_t unPID ) = 0; + + /** Gets the pid that is allowed to render to this overlay */ + virtual uint32_t GetOverlayRenderingPid( VROverlayHandle_t ulOverlayHandle ) = 0; + + /** Specify flag setting for a given overlay */ + virtual EVROverlayError SetOverlayFlag( VROverlayHandle_t ulOverlayHandle, VROverlayFlags eOverlayFlag, bool bEnabled ) = 0; + + /** Sets flag setting for a given overlay */ + virtual EVROverlayError GetOverlayFlag( VROverlayHandle_t ulOverlayHandle, VROverlayFlags eOverlayFlag, bool *pbEnabled ) = 0; + + /** Gets all the flags for a given overlay */ + virtual EVROverlayError GetOverlayFlags( VROverlayHandle_t ulOverlayHandle, uint32_t *pFlags ) = 0; + + /** Sets the color tint of the overlay quad. Use 0.0 to 1.0 per channel. */ + virtual EVROverlayError SetOverlayColor( VROverlayHandle_t ulOverlayHandle, float fRed, float fGreen, float fBlue ) = 0; + + /** Gets the color tint of the overlay quad. */ + virtual EVROverlayError GetOverlayColor( VROverlayHandle_t ulOverlayHandle, float *pfRed, float *pfGreen, float *pfBlue ) = 0; + + /** Sets the alpha of the overlay quad. Use 1.0 for 100 percent opacity to 0.0 for 0 percent opacity. */ + virtual EVROverlayError SetOverlayAlpha( VROverlayHandle_t ulOverlayHandle, float fAlpha ) = 0; + + /** Gets the alpha of the overlay quad. By default overlays are rendering at 100 percent alpha (1.0). */ + virtual EVROverlayError GetOverlayAlpha( VROverlayHandle_t ulOverlayHandle, float *pfAlpha ) = 0; + + /** Sets the aspect ratio of the texels in the overlay. 1.0 means the texels are square. 2.0 means the texels + * are twice as wide as they are tall. Defaults to 1.0. */ + virtual EVROverlayError SetOverlayTexelAspect( VROverlayHandle_t ulOverlayHandle, float fTexelAspect ) = 0; + + /** Gets the aspect ratio of the texels in the overlay. Defaults to 1.0 */ + virtual EVROverlayError GetOverlayTexelAspect( VROverlayHandle_t ulOverlayHandle, float *pfTexelAspect ) = 0; + + /** Sets the rendering sort order for the overlay. Overlays are rendered this order: + * Overlays owned by the scene application + * Overlays owned by some other application + * + * Within a category overlays are rendered lowest sort order to highest sort order. Overlays with the same + * sort order are rendered back to front base on distance from the HMD. + * + * Sort order defaults to 0. */ + virtual EVROverlayError SetOverlaySortOrder( VROverlayHandle_t ulOverlayHandle, uint32_t unSortOrder ) = 0; + + /** Gets the sort order of the overlay. See SetOverlaySortOrder for how this works. */ + virtual EVROverlayError GetOverlaySortOrder( VROverlayHandle_t ulOverlayHandle, uint32_t *punSortOrder ) = 0; + + /** Sets the width of the overlay quad in meters. By default overlays are rendered on a quad that is 1 meter across */ + virtual EVROverlayError SetOverlayWidthInMeters( VROverlayHandle_t ulOverlayHandle, float fWidthInMeters ) = 0; + + /** Returns the width of the overlay quad in meters. By default overlays are rendered on a quad that is 1 meter across */ + virtual EVROverlayError GetOverlayWidthInMeters( VROverlayHandle_t ulOverlayHandle, float *pfWidthInMeters ) = 0; + + /** Use to draw overlay as a curved surface. Curvature is a percentage from (0..1] where 1 is a fully closed cylinder. + * For a specific radius, curvature can be computed as: overlay.width / (2 PI r). */ + virtual EVROverlayError SetOverlayCurvature( VROverlayHandle_t ulOverlayHandle, float fCurvature ) = 0; + + /** Returns the curvature of the overlay as a percentage from (0..1] where 1 is a fully closed cylinder. */ + virtual EVROverlayError GetOverlayCurvature( VROverlayHandle_t ulOverlayHandle, float *pfCurvature ) = 0; + + /** Sets the colorspace the overlay texture's data is in. Defaults to 'auto'. + * If the texture needs to be resolved, you should call SetOverlayTexture with the appropriate colorspace instead. */ + virtual EVROverlayError SetOverlayTextureColorSpace( VROverlayHandle_t ulOverlayHandle, EColorSpace eTextureColorSpace ) = 0; + + /** Gets the overlay's current colorspace setting. */ + virtual EVROverlayError GetOverlayTextureColorSpace( VROverlayHandle_t ulOverlayHandle, EColorSpace *peTextureColorSpace ) = 0; + + /** Sets the part of the texture to use for the overlay. UV Min is the upper left corner and UV Max is the lower right corner. */ + virtual EVROverlayError SetOverlayTextureBounds( VROverlayHandle_t ulOverlayHandle, const VRTextureBounds_t *pOverlayTextureBounds ) = 0; + + /** Gets the part of the texture to use for the overlay. UV Min is the upper left corner and UV Max is the lower right corner. */ + virtual EVROverlayError GetOverlayTextureBounds( VROverlayHandle_t ulOverlayHandle, VRTextureBounds_t *pOverlayTextureBounds ) = 0; + + /** Returns the transform type of this overlay. */ + virtual EVROverlayError GetOverlayTransformType( VROverlayHandle_t ulOverlayHandle, VROverlayTransformType *peTransformType ) = 0; + + /** Sets the transform to absolute tracking origin. */ + virtual EVROverlayError SetOverlayTransformAbsolute( VROverlayHandle_t ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, const HmdMatrix34_t *pmatTrackingOriginToOverlayTransform ) = 0; + + /** Gets the transform if it is absolute. Returns an error if the transform is some other type. */ + virtual EVROverlayError GetOverlayTransformAbsolute( VROverlayHandle_t ulOverlayHandle, ETrackingUniverseOrigin *peTrackingOrigin, HmdMatrix34_t *pmatTrackingOriginToOverlayTransform ) = 0; + + /** Sets the transform to relative to the transform of the specified tracked device. */ + virtual EVROverlayError SetOverlayTransformTrackedDeviceRelative( VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t unTrackedDevice, const HmdMatrix34_t *pmatTrackedDeviceToOverlayTransform ) = 0; + + /** Gets the transform if it is relative to a tracked device. Returns an error if the transform is some other type. */ + virtual EVROverlayError GetOverlayTransformTrackedDeviceRelative( VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t *punTrackedDevice, HmdMatrix34_t *pmatTrackedDeviceToOverlayTransform ) = 0; + + /** Sets the transform to draw the overlay on a rendermodel component mesh instead of a quad. This will only draw when the system is + * drawing the device. Overlays with this transform type cannot receive mouse events. */ + virtual EVROverlayError SetOverlayTransformTrackedDeviceComponent( VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t unDeviceIndex, const char *pchComponentName ) = 0; + + /** Gets the transform information when the overlay is rendering on a component. */ + virtual EVROverlayError GetOverlayTransformTrackedDeviceComponent( VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t *punDeviceIndex, VR_OUT_STRING() char *pchComponentName, uint32_t unComponentNameSize ) = 0; + + /** Gets the transform if it is relative to another overlay. Returns an error if the transform is some other type. */ + virtual vr::EVROverlayError GetOverlayTransformOverlayRelative( VROverlayHandle_t ulOverlayHandle, VROverlayHandle_t *ulOverlayHandleParent, HmdMatrix34_t *pmatParentOverlayToOverlayTransform ) = 0; + + /** Sets the transform to relative to the transform of the specified overlay. This overlays visibility will also track the parents visibility */ + virtual vr::EVROverlayError SetOverlayTransformOverlayRelative( VROverlayHandle_t ulOverlayHandle, VROverlayHandle_t ulOverlayHandleParent, const HmdMatrix34_t *pmatParentOverlayToOverlayTransform ) = 0; + + /** Sets the hotspot for the specified overlay when that overlay is used as a cursor. These are in texture space with 0,0 in the upper left corner of + * the texture and 1,1 in the lower right corner of the texture. */ + virtual EVROverlayError SetOverlayTransformCursor( VROverlayHandle_t ulCursorOverlayHandle, const HmdVector2_t *pvHotspot ) = 0; + + /** Gets cursor hotspot/transform for the specified overlay */ + virtual vr::EVROverlayError GetOverlayTransformCursor( VROverlayHandle_t ulOverlayHandle, HmdVector2_t *pvHotspot ) = 0; + + /** Sets the overlay as a projection overlay */ + virtual vr::EVROverlayError SetOverlayTransformProjection( VROverlayHandle_t ulOverlayHandle, + ETrackingUniverseOrigin eTrackingOrigin, const HmdMatrix34_t* pmatTrackingOriginToOverlayTransform, + const VROverlayProjection_t *pProjection, vr::EVREye eEye ) = 0; + + /** Shows the VR overlay. For dashboard overlays, only the Dashboard Manager is allowed to call this. */ + virtual EVROverlayError ShowOverlay( VROverlayHandle_t ulOverlayHandle ) = 0; + + /** Hides the VR overlay. For dashboard overlays, only the Dashboard Manager is allowed to call this. */ + virtual EVROverlayError HideOverlay( VROverlayHandle_t ulOverlayHandle ) = 0; + + /** Returns true if the overlay is visible. */ + virtual bool IsOverlayVisible( VROverlayHandle_t ulOverlayHandle ) = 0; + + /** Get the transform in 3d space associated with a specific 2d point in the overlay's coordinate space (where 0,0 is the lower left). -Z points out of the overlay */ + virtual EVROverlayError GetTransformForOverlayCoordinates( VROverlayHandle_t ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, HmdVector2_t coordinatesInOverlay, HmdMatrix34_t *pmatTransform ) = 0; + + // --------------------------------------------- + // Overlay input methods + // --------------------------------------------- + + /** Returns true and fills the event with the next event on the overlay's event queue, if there is one. + * If there are no events this method returns false. uncbVREvent should be the size in bytes of the VREvent_t struct */ + virtual bool PollNextOverlayEvent( VROverlayHandle_t ulOverlayHandle, VREvent_t *pEvent, uint32_t uncbVREvent ) = 0; + + /** Returns the current input settings for the specified overlay. */ + virtual EVROverlayError GetOverlayInputMethod( VROverlayHandle_t ulOverlayHandle, VROverlayInputMethod *peInputMethod ) = 0; + + /** Sets the input settings for the specified overlay. */ + virtual EVROverlayError SetOverlayInputMethod( VROverlayHandle_t ulOverlayHandle, VROverlayInputMethod eInputMethod ) = 0; + + /** Gets the mouse scaling factor that is used for mouse events. The actual texture may be a different size, but this is + * typically the size of the underlying UI in pixels. */ + virtual EVROverlayError GetOverlayMouseScale( VROverlayHandle_t ulOverlayHandle, HmdVector2_t *pvecMouseScale ) = 0; + + /** Sets the mouse scaling factor that is used for mouse events. The actual texture may be a different size, but this is + * typically the size of the underlying UI in pixels (not in world space). */ + virtual EVROverlayError SetOverlayMouseScale( VROverlayHandle_t ulOverlayHandle, const HmdVector2_t *pvecMouseScale ) = 0; + + /** Computes the overlay-space pixel coordinates of where the ray intersects the overlay with the + * specified settings. Returns false if there is no intersection. */ + virtual bool ComputeOverlayIntersection( VROverlayHandle_t ulOverlayHandle, const VROverlayIntersectionParams_t *pParams, VROverlayIntersectionResults_t *pResults ) = 0; + + /** Returns true if the specified overlay is the hover target. An overlay is the hover target when it is the last overlay "moused over" + * by the virtual mouse pointer */ + virtual bool IsHoverTargetOverlay( VROverlayHandle_t ulOverlayHandle ) = 0; + + /** Sets a list of primitives to be used for controller ray intersection + * typically the size of the underlying UI in pixels (not in world space). */ + virtual EVROverlayError SetOverlayIntersectionMask( VROverlayHandle_t ulOverlayHandle, VROverlayIntersectionMaskPrimitive_t *pMaskPrimitives, uint32_t unNumMaskPrimitives, uint32_t unPrimitiveSize = sizeof( VROverlayIntersectionMaskPrimitive_t ) ) = 0; + + /** Triggers a haptic event on the laser mouse controller for the specified overlay */ + virtual EVROverlayError TriggerLaserMouseHapticVibration( VROverlayHandle_t ulOverlayHandle, float fDurationSeconds, float fFrequency, float fAmplitude ) = 0; + + /** Sets the cursor to use for the specified overlay. This will be drawn instead of the generic blob when the laser mouse is pointed at the specified overlay */ + virtual EVROverlayError SetOverlayCursor( VROverlayHandle_t ulOverlayHandle, VROverlayHandle_t ulCursorHandle ) = 0; + + /** Sets the override cursor position to use for this overlay in overlay mouse coordinates. This position will be used to draw the cursor + * instead of whatever the laser mouse cursor position is. */ + virtual EVROverlayError SetOverlayCursorPositionOverride( VROverlayHandle_t ulOverlayHandle, const HmdVector2_t *pvCursor ) = 0; + + /** Clears the override cursor position for this overlay */ + virtual EVROverlayError ClearOverlayCursorPositionOverride( VROverlayHandle_t ulOverlayHandle ) = 0; + + // --------------------------------------------- + // Overlay texture methods + // --------------------------------------------- + + /** Texture to draw for the overlay. This function can only be called by the overlay's creator or renderer process (see SetOverlayRenderingPid) . + * + * OpenGL dirty state: + * glBindTexture + */ + virtual EVROverlayError SetOverlayTexture( VROverlayHandle_t ulOverlayHandle, const Texture_t *pTexture ) = 0; + + /** Use this to tell the overlay system to release the texture set for this overlay. */ + virtual EVROverlayError ClearOverlayTexture( VROverlayHandle_t ulOverlayHandle ) = 0; + + /** Separate interface for providing the data as a stream of bytes, but there is an upper bound on data + * that can be sent. This function can only be called by the overlay's renderer process. */ + virtual EVROverlayError SetOverlayRaw( VROverlayHandle_t ulOverlayHandle, void *pvBuffer, uint32_t unWidth, uint32_t unHeight, uint32_t unBytesPerPixel ) = 0; + + /** Separate interface for providing the image through a filename: can be png or jpg, and should not be bigger than 1920x1080. + * This function can only be called by the overlay's renderer process */ + virtual EVROverlayError SetOverlayFromFile( VROverlayHandle_t ulOverlayHandle, const char *pchFilePath ) = 0; + + /** Get the native texture handle/device for an overlay you have created. + * On windows this handle will be a ID3D11ShaderResourceView with a ID3D11Texture2D bound. + * + * The texture will always be sized to match the backing texture you supplied in SetOverlayTexture above. + * + * You MUST call ReleaseNativeOverlayHandle() with pNativeTextureHandle once you are done with this texture. + * + * pNativeTextureHandle is an OUTPUT, it will be a pointer to a ID3D11ShaderResourceView *. + * pNativeTextureRef is an INPUT and should be a ID3D11Resource *. The device used by pNativeTextureRef will be used to bind pNativeTextureHandle. + */ + virtual EVROverlayError GetOverlayTexture( VROverlayHandle_t ulOverlayHandle, void **pNativeTextureHandle, void *pNativeTextureRef, uint32_t *pWidth, uint32_t *pHeight, uint32_t *pNativeFormat, ETextureType *pAPIType, EColorSpace *pColorSpace, VRTextureBounds_t *pTextureBounds ) = 0; + + /** Release the pNativeTextureHandle provided from the GetOverlayTexture call, this allows the system to free the underlying GPU resources for this object, + * so only do it once you stop rendering this texture. + */ + virtual EVROverlayError ReleaseNativeOverlayHandle( VROverlayHandle_t ulOverlayHandle, void *pNativeTextureHandle ) = 0; + + /** Get the size of the overlay texture */ + virtual EVROverlayError GetOverlayTextureSize( VROverlayHandle_t ulOverlayHandle, uint32_t *pWidth, uint32_t *pHeight ) = 0; + + // ---------------------------------------------- + // Dashboard Overlay Methods + // ---------------------------------------------- + + /** Creates a dashboard overlay and returns its handle */ + virtual EVROverlayError CreateDashboardOverlay( const char *pchOverlayKey, const char *pchOverlayFriendlyName, VROverlayHandle_t * pMainHandle, VROverlayHandle_t *pThumbnailHandle ) = 0; + + /** Returns true if the dashboard is visible */ + virtual bool IsDashboardVisible() = 0; + + /** returns true if the dashboard is visible and the specified overlay is the active system Overlay */ + virtual bool IsActiveDashboardOverlay( VROverlayHandle_t ulOverlayHandle ) = 0; + + /** Sets the dashboard overlay to only appear when the specified process ID has scene focus */ + virtual EVROverlayError SetDashboardOverlaySceneProcess( VROverlayHandle_t ulOverlayHandle, uint32_t unProcessId ) = 0; + + /** Gets the process ID that this dashboard overlay requires to have scene focus */ + virtual EVROverlayError GetDashboardOverlaySceneProcess( VROverlayHandle_t ulOverlayHandle, uint32_t *punProcessId ) = 0; + + /** Shows the dashboard. */ + virtual void ShowDashboard( const char *pchOverlayToShow ) = 0; + + /** Returns the tracked device that has the laser pointer in the dashboard */ + virtual vr::TrackedDeviceIndex_t GetPrimaryDashboardDevice() = 0; + + // --------------------------------------------- + // Keyboard methods + // --------------------------------------------- + + /** Show the virtual keyboard to accept input. In most cases, you should pass KeyboardFlag_Modal to enable modal overlay + * behavior on the keyboard itself. See EKeyboardFlags for more. */ + virtual EVROverlayError ShowKeyboard( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, uint32_t unFlags, + const char *pchDescription, uint32_t unCharMax, const char *pchExistingText, uint64_t uUserValue ) = 0; + + /** Show the virtual keyboard to accept input for an overlay. In most cases, you should pass KeyboardFlag_Modal to enable modal + * overlay behavior on the keyboard itself. See EKeyboardFlags for more. */ + virtual EVROverlayError ShowKeyboardForOverlay( VROverlayHandle_t ulOverlayHandle, EGamepadTextInputMode eInputMode, + EGamepadTextInputLineMode eLineInputMode, uint32_t unFlags, const char *pchDescription, uint32_t unCharMax, + const char *pchExistingText, uint64_t uUserValue ) = 0; + + /** Get the text that was entered into the text input **/ + virtual uint32_t GetKeyboardText( VR_OUT_STRING() char *pchText, uint32_t cchText ) = 0; + + /** Hide the virtual keyboard **/ + virtual void HideKeyboard() = 0; + + /** Set the position of the keyboard in world space **/ + virtual void SetKeyboardTransformAbsolute( ETrackingUniverseOrigin eTrackingOrigin, const HmdMatrix34_t *pmatTrackingOriginToKeyboardTransform ) = 0; + + /** Set the position of the keyboard in overlay space by telling it to avoid a rectangle in the overlay. Rectangle coords have (0,0) in the bottom left **/ + virtual void SetKeyboardPositionForOverlay( VROverlayHandle_t ulOverlayHandle, HmdRect2_t avoidRect ) = 0; + + // --------------------------------------------- + // Message box methods + // --------------------------------------------- + + /** Show the message overlay. This will block and return you a result. **/ + virtual VRMessageOverlayResponse ShowMessageOverlay( const char* pchText, const char* pchCaption, const char* pchButton0Text, const char* pchButton1Text = nullptr, const char* pchButton2Text = nullptr, const char* pchButton3Text = nullptr ) = 0; + + /** If the calling process owns the overlay and it's open, this will close it. **/ + virtual void CloseMessageOverlay() = 0; + }; + + static const char * const IVROverlay_Version = "IVROverlay_025"; + +} // namespace vr + +// ivroverlayview.h + +namespace vr +{ + struct VROverlayView_t + { + VROverlayHandle_t overlayHandle; + Texture_t texture; + VRTextureBounds_t textureBounds; + }; + + enum EDeviceType + { + DeviceType_Invalid = -1, // Invalid handle + DeviceType_DirectX11 = 0, // Handle is an ID3D11Device + DeviceType_Vulkan = 1, // Handle is a pointer to a VRVulkanDevice_t structure + }; + + struct VRVulkanDevice_t + { + VkInstance_T *m_pInstance; + VkDevice_T *m_pDevice; + VkPhysicalDevice_T *m_pPhysicalDevice; + VkQueue_T *m_pQueue; + uint32_t m_uQueueFamilyIndex; + }; + + struct VRNativeDevice_t + { + void *handle; // See EDeviceType definition above + EDeviceType eType; + }; + + class IVROverlayView + { + public: + /** Acquire an OverlayView_t from an overlay handle + * + * The overlay view can be used to sample the contents directly by a native API. The + * contents of the OverlayView_t will remain unchanged through the lifetime of the + * OverlayView_t. + * + * The caller acquires read privileges over the OverlayView_t, but should not + * write to it. + * + * AcquireOverlayView() may be called on the same ulOverlayHandle multiple times to + * refresh the image contents. In this case the caller is strongly encouraged to re-use + * the same pOverlayView for all re-acquisition calls. + * + * If the producer has not yet queued an image, AcquireOverlayView will return success, + * and the Texture_t will have the expected ETextureType. However, the Texture_t->handle + * will be nullptr. Once the producer generates the first overlay frame, Texture_t->handle + * will become a valid handle. + */ + virtual EVROverlayError AcquireOverlayView(VROverlayHandle_t ulOverlayHandle, VRNativeDevice_t *pNativeDevice, VROverlayView_t *pOverlayView, uint32_t unOverlayViewSize ) = 0; + + /** Release an acquired OverlayView_t + * + * Denotes that pOverlayView will no longer require access to the resources it acquired in + * all previous calls to AcquireOverlayView(). + * + * All OverlayView_t*'s provided to AcquireOverlayView() as pOverlayViews must be + * passed into ReleaseOverlayView() in order for the underlying GPU resources to be freed. + */ + virtual EVROverlayError ReleaseOverlayView(VROverlayView_t *pOverlayView) = 0; + + /** Posts an overlay event */ + virtual void PostOverlayEvent(VROverlayHandle_t ulOverlayHandle, const VREvent_t *pvrEvent) = 0; + + /** Determines whether this process is permitted to view an overlay's content. */ + virtual bool IsViewingPermitted( VROverlayHandle_t ulOverlayHandle ) = 0; + + }; + + static const char * const IVROverlayView_Version = "IVROverlayView_003"; + +} + +// ivrrendermodels.h + +namespace vr +{ + +static const char * const k_pch_Controller_Component_GDC2015 = "gdc2015"; // Canonical coordinate system of the gdc 2015 wired controller, provided for backwards compatibility +static const char * const k_pch_Controller_Component_Base = "base"; // For controllers with an unambiguous 'base'. +static const char * const k_pch_Controller_Component_Tip = "tip"; // For controllers with an unambiguous 'tip' (used for 'laser-pointing') +static const char * const k_pch_Controller_Component_HandGrip = "handgrip"; // Neutral, ambidextrous hand-pose when holding controller. On plane between neutrally posed index finger and thumb +static const char * const k_pch_Controller_Component_Status = "status"; // 1:1 aspect ratio status area, with canonical [0,1] uv mapping + +#pragma pack( push, 8 ) + +/** Errors that can occur with the VR compositor */ +enum EVRRenderModelError +{ + VRRenderModelError_None = 0, + VRRenderModelError_Loading = 100, + VRRenderModelError_NotSupported = 200, + VRRenderModelError_InvalidArg = 300, + VRRenderModelError_InvalidModel = 301, + VRRenderModelError_NoShapes = 302, + VRRenderModelError_MultipleShapes = 303, + VRRenderModelError_TooManyVertices = 304, + VRRenderModelError_MultipleTextures = 305, + VRRenderModelError_BufferTooSmall = 306, + VRRenderModelError_NotEnoughNormals = 307, + VRRenderModelError_NotEnoughTexCoords = 308, + + VRRenderModelError_InvalidTexture = 400, +}; + +enum EVRRenderModelTextureFormat +{ + VRRenderModelTextureFormat_RGBA8_SRGB = 0, // RGBA with 8 bits per channel per pixel. Data size is width * height * 4ub + VRRenderModelTextureFormat_BC2, + VRRenderModelTextureFormat_BC4, + VRRenderModelTextureFormat_BC7, + VRRenderModelTextureFormat_BC7_SRGB +}; + +/** A single vertex in a render model */ +struct RenderModel_Vertex_t +{ + HmdVector3_t vPosition; // position in meters in device space + HmdVector3_t vNormal; + float rfTextureCoord[2]; +}; + +/** A texture map for use on a render model */ +#if defined(__linux__) || defined(__APPLE__) +// This structure was originally defined mis-packed on Linux, preserved for +// compatibility. +#pragma pack( push, 4 ) +#endif + +struct RenderModel_TextureMap_t +{ + uint16_t unWidth, unHeight; // width and height of the texture map in pixels + const uint8_t *rubTextureMapData; // Map texture data. + EVRRenderModelTextureFormat format; // Refer to EVRRenderModelTextureFormat +}; +#if defined(__linux__) || defined(__APPLE__) +#pragma pack( pop ) +#endif + +/** Session unique texture identifier. Rendermodels which share the same texture will have the same id. +IDs <0 denote the texture is not present */ + +typedef int32_t TextureID_t; + +const TextureID_t INVALID_TEXTURE_ID = -1; + +#if defined(__linux__) || defined(__APPLE__) +// This structure was originally defined mis-packed on Linux, preserved for +// compatibility. +#pragma pack( push, 4 ) +#endif + +struct RenderModel_t +{ + const RenderModel_Vertex_t *rVertexData; // Vertex data for the mesh + uint32_t unVertexCount; // Number of vertices in the vertex data + const uint16_t *rIndexData; // Indices into the vertex data for each triangle + uint32_t unTriangleCount; // Number of triangles in the mesh. Index count is 3 * TriangleCount + TextureID_t diffuseTextureId; // Session unique texture identifier. Rendermodels which share the same texture will have the same id. <0 == texture not present +}; +#if defined(__linux__) || defined(__APPLE__) +#pragma pack( pop ) +#endif + + +struct RenderModel_ControllerMode_State_t +{ + bool bScrollWheelVisible; // is this controller currently set to be in a scroll wheel mode +}; + +#pragma pack( pop ) + +class IVRRenderModels +{ +public: + + /** Loads and returns a render model for use in the application. pchRenderModelName should be a render model name + * from the Prop_RenderModelName_String property or an absolute path name to a render model on disk. + * + * The resulting render model is valid until VR_Shutdown() is called or until FreeRenderModel() is called. When the + * application is finished with the render model it should call FreeRenderModel() to free the memory associated + * with the model. + * + * The method returns VRRenderModelError_Loading while the render model is still being loaded. + * The method returns VRRenderModelError_None once loaded successfully, otherwise will return an error. */ + virtual EVRRenderModelError LoadRenderModel_Async( const char *pchRenderModelName, RenderModel_t **ppRenderModel ) = 0; + + /** Frees a previously returned render model + * It is safe to call this on a null ptr. */ + virtual void FreeRenderModel( RenderModel_t *pRenderModel ) = 0; + + /** Loads and returns a texture for use in the application. */ + virtual EVRRenderModelError LoadTexture_Async( TextureID_t textureId, RenderModel_TextureMap_t **ppTexture ) = 0; + + /** Frees a previously returned texture + * It is safe to call this on a null ptr. */ + virtual void FreeTexture( RenderModel_TextureMap_t *pTexture ) = 0; + + /** Creates a D3D11 texture and loads data into it. */ + virtual EVRRenderModelError LoadTextureD3D11_Async( TextureID_t textureId, void *pD3D11Device, void **ppD3D11Texture2D ) = 0; + + /** Helper function to copy the bits into an existing texture. */ + virtual EVRRenderModelError LoadIntoTextureD3D11_Async( TextureID_t textureId, void *pDstTexture ) = 0; + + /** Use this to free textures created with LoadTextureD3D11_Async instead of calling Release on them. */ + virtual void FreeTextureD3D11( void *pD3D11Texture2D ) = 0; + + /** Use this to get the names of available render models. Index does not correlate to a tracked device index, but + * is only used for iterating over all available render models. If the index is out of range, this function will return 0. + * Otherwise, it will return the size of the buffer required for the name. */ + virtual uint32_t GetRenderModelName( uint32_t unRenderModelIndex, VR_OUT_STRING() char *pchRenderModelName, uint32_t unRenderModelNameLen ) = 0; + + /** Returns the number of available render models. */ + virtual uint32_t GetRenderModelCount() = 0; + + + /** Returns the number of components of the specified render model. + * Components are useful when client application wish to draw, label, or otherwise interact with components of tracked objects. + * Examples controller components: + * renderable things such as triggers, buttons + * non-renderable things which include coordinate systems such as 'tip', 'base', a neutral controller agnostic hand-pose + * If all controller components are enumerated and rendered, it will be equivalent to drawing the traditional render model + * Returns 0 if components not supported, >0 otherwise */ + virtual uint32_t GetComponentCount( const char *pchRenderModelName ) = 0; + + /** Use this to get the names of available components. Index does not correlate to a tracked device index, but + * is only used for iterating over all available components. If the index is out of range, this function will return 0. + * Otherwise, it will return the size of the buffer required for the name. */ + virtual uint32_t GetComponentName( const char *pchRenderModelName, uint32_t unComponentIndex, VR_OUT_STRING( ) char *pchComponentName, uint32_t unComponentNameLen ) = 0; + + /** Get the button mask for all buttons associated with this component + * If no buttons (or axes) are associated with this component, return 0 + * Note: multiple components may be associated with the same button. Ex: two grip buttons on a single controller. + * Note: A single component may be associated with multiple buttons. Ex: A trackpad which also provides "D-pad" functionality */ + virtual uint64_t GetComponentButtonMask( const char *pchRenderModelName, const char *pchComponentName ) = 0; + + /** Use this to get the render model name for the specified rendermode/component combination, to be passed to LoadRenderModel. + * If the component name is out of range, this function will return 0. + * Otherwise, it will return the size of the buffer required for the name. */ + virtual uint32_t GetComponentRenderModelName( const char *pchRenderModelName, const char *pchComponentName, VR_OUT_STRING( ) char *pchComponentRenderModelName, uint32_t unComponentRenderModelNameLen ) = 0; + + /** Use this to query information about the component, as a function of the controller state. + * + * For dynamic controller components (ex: trigger) values will reflect component motions + * For static components this will return a consistent value independent of the VRControllerState_t + * + * If the pchRenderModelName or pchComponentName is invalid, this will return false (and transforms will be set to identity). + * Otherwise, return true + * Note: For dynamic objects, visibility may be dynamic. (I.e., true/false will be returned based on controller state and controller mode state ) */ + virtual bool GetComponentStateForDevicePath( const char *pchRenderModelName, const char *pchComponentName, vr::VRInputValueHandle_t devicePath, const vr::RenderModel_ControllerMode_State_t *pState, vr::RenderModel_ComponentState_t *pComponentState ) = 0; + + /** This version of GetComponentState takes a controller state block instead of an action origin. This function is deprecated. You should use the new input system and GetComponentStateForDevicePath instead. */ + virtual bool GetComponentState( const char *pchRenderModelName, const char *pchComponentName, const vr::VRControllerState_t *pControllerState, const RenderModel_ControllerMode_State_t *pState, RenderModel_ComponentState_t *pComponentState ) = 0; + + /** Returns true if the render model has a component with the specified name */ + virtual bool RenderModelHasComponent( const char *pchRenderModelName, const char *pchComponentName ) = 0; + + /** Returns the URL of the thumbnail image for this rendermodel */ + virtual uint32_t GetRenderModelThumbnailURL( const char *pchRenderModelName, VR_OUT_STRING() char *pchThumbnailURL, uint32_t unThumbnailURLLen, vr::EVRRenderModelError *peError ) = 0; + + /** Provides a render model path that will load the unskinned model if the model name provided has been replace by the user. If the model + * hasn't been replaced the path value will still be a valid path to load the model. Pass this to LoadRenderModel_Async, etc. to load the + * model. */ + virtual uint32_t GetRenderModelOriginalPath( const char *pchRenderModelName, VR_OUT_STRING() char *pchOriginalPath, uint32_t unOriginalPathLen, vr::EVRRenderModelError *peError ) = 0; + + /** Returns a string for a render model error */ + virtual const char *GetRenderModelErrorNameFromEnum( vr::EVRRenderModelError error ) = 0; +}; + +static const char * const IVRRenderModels_Version = "IVRRenderModels_006"; + +} + + +// ivrextendeddisplay.h + +namespace vr +{ + + /** NOTE: Use of this interface is not recommended in production applications. It will not work for displays which use + * direct-to-display mode. Creating our own window is also incompatible with the VR compositor and is not available when the compositor is running. */ + class IVRExtendedDisplay + { + public: + + /** Size and position that the window needs to be on the VR display. */ + virtual void GetWindowBounds( int32_t *pnX, int32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0; + + /** Gets the viewport in the frame buffer to draw the output of the distortion into */ + virtual void GetEyeOutputViewport( EVREye eEye, uint32_t *pnX, uint32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0; + + /** [D3D10/11 Only] + * Returns the adapter index and output index that the user should pass into EnumAdapters and EnumOutputs + * to create the device and swap chain in DX10 and DX11. If an error occurs both indices will be set to -1. + */ + virtual void GetDXGIOutputInfo( int32_t *pnAdapterIndex, int32_t *pnAdapterOutputIndex ) = 0; + + }; + + static const char * const IVRExtendedDisplay_Version = "IVRExtendedDisplay_001"; + +} + + +// ivrtrackedcamera.h + +namespace vr +{ + +class IVRTrackedCamera +{ +public: + /** Returns a string for an error */ + virtual const char *GetCameraErrorNameFromEnum( vr::EVRTrackedCameraError eCameraError ) = 0; + + /** For convenience, same as tracked property request Prop_HasCamera_Bool */ + virtual vr::EVRTrackedCameraError HasCamera( vr::TrackedDeviceIndex_t nDeviceIndex, bool *pHasCamera ) = 0; + + /** Gets size of the image frame. */ + virtual vr::EVRTrackedCameraError GetCameraFrameSize( vr::TrackedDeviceIndex_t nDeviceIndex, vr::EVRTrackedCameraFrameType eFrameType, uint32_t *pnWidth, uint32_t *pnHeight, uint32_t *pnFrameBufferSize ) = 0; + + virtual vr::EVRTrackedCameraError GetCameraIntrinsics( vr::TrackedDeviceIndex_t nDeviceIndex, uint32_t nCameraIndex, vr::EVRTrackedCameraFrameType eFrameType, vr::HmdVector2_t *pFocalLength, vr::HmdVector2_t *pCenter ) = 0; + + virtual vr::EVRTrackedCameraError GetCameraProjection( vr::TrackedDeviceIndex_t nDeviceIndex, uint32_t nCameraIndex, vr::EVRTrackedCameraFrameType eFrameType, float flZNear, float flZFar, vr::HmdMatrix44_t *pProjection ) = 0; + + /** Acquiring streaming service permits video streaming for the caller. Releasing hints the system that video services do not need to be maintained for this client. + * If the camera has not already been activated, a one time spin up may incur some auto exposure as well as initial streaming frame delays. + * The camera should be considered a global resource accessible for shared consumption but not exclusive to any caller. + * The camera may go inactive due to lack of active consumers or headset idleness. */ + virtual vr::EVRTrackedCameraError AcquireVideoStreamingService( vr::TrackedDeviceIndex_t nDeviceIndex, vr::TrackedCameraHandle_t *pHandle ) = 0; + virtual vr::EVRTrackedCameraError ReleaseVideoStreamingService( vr::TrackedCameraHandle_t hTrackedCamera ) = 0; + + /** Copies the image frame into a caller's provided buffer. The image data is currently provided as RGBA data, 4 bytes per pixel. + * A caller can provide null for the framebuffer or frameheader if not desired. Requesting the frame header first, followed by the frame buffer allows + * the caller to determine if the frame as advanced per the frame header sequence. + * If there is no frame available yet, due to initial camera spinup or re-activation, the error will be VRTrackedCameraError_NoFrameAvailable. + * Ideally a caller should be polling at ~16ms intervals */ + virtual vr::EVRTrackedCameraError GetVideoStreamFrameBuffer( vr::TrackedCameraHandle_t hTrackedCamera, vr::EVRTrackedCameraFrameType eFrameType, void *pFrameBuffer, uint32_t nFrameBufferSize, vr::CameraVideoStreamFrameHeader_t *pFrameHeader, uint32_t nFrameHeaderSize ) = 0; + + /** Gets size of the image frame. */ + virtual vr::EVRTrackedCameraError GetVideoStreamTextureSize( vr::TrackedDeviceIndex_t nDeviceIndex, vr::EVRTrackedCameraFrameType eFrameType, vr::VRTextureBounds_t *pTextureBounds, uint32_t *pnWidth, uint32_t *pnHeight ) = 0; + + /** Access a shared D3D11 texture for the specified tracked camera stream. + * The camera frame type VRTrackedCameraFrameType_Undistorted is not supported directly as a shared texture. It is an interior subregion of the shared texture VRTrackedCameraFrameType_MaximumUndistorted. + * Instead, use GetVideoStreamTextureSize() with VRTrackedCameraFrameType_Undistorted to determine the proper interior subregion bounds along with GetVideoStreamTextureD3D11() with + * VRTrackedCameraFrameType_MaximumUndistorted to provide the texture. The VRTrackedCameraFrameType_MaximumUndistorted will yield an image where the invalid regions are decoded + * by the alpha channel having a zero component. The valid regions all have a non-zero alpha component. The subregion as described by VRTrackedCameraFrameType_Undistorted + * guarantees a rectangle where all pixels are valid. */ + virtual vr::EVRTrackedCameraError GetVideoStreamTextureD3D11( vr::TrackedCameraHandle_t hTrackedCamera, vr::EVRTrackedCameraFrameType eFrameType, void *pD3D11DeviceOrResource, void **ppD3D11ShaderResourceView, vr::CameraVideoStreamFrameHeader_t *pFrameHeader, uint32_t nFrameHeaderSize ) = 0; + + /** Access a shared GL texture for the specified tracked camera stream */ + virtual vr::EVRTrackedCameraError GetVideoStreamTextureGL( vr::TrackedCameraHandle_t hTrackedCamera, vr::EVRTrackedCameraFrameType eFrameType, vr::glUInt_t *pglTextureId, vr::CameraVideoStreamFrameHeader_t *pFrameHeader, uint32_t nFrameHeaderSize ) = 0; + virtual vr::EVRTrackedCameraError ReleaseVideoStreamTextureGL( vr::TrackedCameraHandle_t hTrackedCamera, vr::glUInt_t glTextureId ) = 0; + virtual void SetCameraTrackingSpace( vr::ETrackingUniverseOrigin eUniverse ) = 0; + virtual vr::ETrackingUniverseOrigin GetCameraTrackingSpace( ) = 0; +}; + +static const char * const IVRTrackedCamera_Version = "IVRTrackedCamera_006"; + +} // namespace vr + + +// ivrscreenshots.h + +namespace vr +{ + +/** Errors that can occur with the VR compositor */ +enum EVRScreenshotError +{ + VRScreenshotError_None = 0, + VRScreenshotError_RequestFailed = 1, + VRScreenshotError_IncompatibleVersion = 100, + VRScreenshotError_NotFound = 101, + VRScreenshotError_BufferTooSmall = 102, + VRScreenshotError_ScreenshotAlreadyInProgress = 108, +}; + +/** Allows the application to generate screenshots */ +class IVRScreenshots +{ +public: + /** Request a screenshot of the requested type. + * A request of the VRScreenshotType_Stereo type will always + * work. Other types will depend on the underlying application + * support. + * The first file name is for the preview image and should be a + * regular screenshot (ideally from the left eye). The second + * is the VR screenshot in the correct format. They should be + * in the same aspect ratio. Formats per type: + * VRScreenshotType_Mono: the VR filename is ignored (can be + * nullptr), this is a normal flat single shot. + * VRScreenshotType_Stereo: The VR image should be a + * side-by-side with the left eye image on the left. + * VRScreenshotType_Cubemap: The VR image should be six square + * images composited horizontally. + * VRScreenshotType_StereoPanorama: above/below with left eye + * panorama being the above image. Image is typically square + * with the panorama being 2x horizontal. + * + * Note that the VR dashboard will call this function when + * the user presses the screenshot binding (currently System + * Button + Trigger). If Steam is running, the destination + * file names will be in %TEMP% and will be copied into + * Steam's screenshot library for the running application + * once SubmitScreenshot() is called. + * If Steam is not running, the paths will be in the user's + * documents folder under Documents\SteamVR\Screenshots. + * Other VR applications can call this to initiate a + * screenshot outside of user control. + * The destination file names do not need an extension, + * will be replaced with the correct one for the format + * which is currently .png. */ + virtual vr::EVRScreenshotError RequestScreenshot( vr::ScreenshotHandle_t *pOutScreenshotHandle, vr::EVRScreenshotType type, const char *pchPreviewFilename, const char *pchVRFilename ) = 0; + + /** Called by the running VR application to indicate that it + * wishes to be in charge of screenshots. If the + * application does not call this, the Compositor will only + * support VRScreenshotType_Stereo screenshots that will be + * captured without notification to the running app. + * Once hooked your application will receive a + * VREvent_RequestScreenshot event when the user presses the + * buttons to take a screenshot. */ + virtual vr::EVRScreenshotError HookScreenshot( VR_ARRAY_COUNT( numTypes ) const vr::EVRScreenshotType *pSupportedTypes, int numTypes ) = 0; + + /** When your application receives a + * VREvent_RequestScreenshot event, call these functions to get + * the details of the screenshot request. */ + virtual vr::EVRScreenshotType GetScreenshotPropertyType( vr::ScreenshotHandle_t screenshotHandle, vr::EVRScreenshotError *pError ) = 0; + + /** Get the filename for the preview or vr image (see + * vr::EScreenshotPropertyFilenames). The return value is + * the size of the string. */ + virtual uint32_t GetScreenshotPropertyFilename( vr::ScreenshotHandle_t screenshotHandle, vr::EVRScreenshotPropertyFilenames filenameType, VR_OUT_STRING() char *pchFilename, uint32_t cchFilename, vr::EVRScreenshotError *pError ) = 0; + + /** Call this if the application is taking the screen shot + * will take more than a few ms processing. This will result + * in an overlay being presented that shows a completion + * bar. */ + virtual vr::EVRScreenshotError UpdateScreenshotProgress( vr::ScreenshotHandle_t screenshotHandle, float flProgress ) = 0; + + /** Tells the compositor to take an internal screenshot of + * type VRScreenshotType_Stereo. It will take the current + * submitted scene textures of the running application and + * write them into the preview image and a side-by-side file + * for the VR image. + * This is similar to request screenshot, but doesn't ever + * talk to the application, just takes the shot and submits. */ + virtual vr::EVRScreenshotError TakeStereoScreenshot( vr::ScreenshotHandle_t *pOutScreenshotHandle, const char *pchPreviewFilename, const char *pchVRFilename ) = 0; + + /** Submit the completed screenshot. If Steam is running + * this will call into the Steam client and upload the + * screenshot to the screenshots section of the library for + * the running application. If Steam is not running, this + * function will display a notification to the user that the + * screenshot was taken. The paths should be full paths with + * extensions. + * File paths should be absolute including extensions. + * screenshotHandle can be k_unScreenshotHandleInvalid if this + * was a new shot taking by the app to be saved and not + * initiated by a user (achievement earned or something) */ + virtual vr::EVRScreenshotError SubmitScreenshot( vr::ScreenshotHandle_t screenshotHandle, vr::EVRScreenshotType type, const char *pchSourcePreviewFilename, const char *pchSourceVRFilename ) = 0; +}; + +static const char * const IVRScreenshots_Version = "IVRScreenshots_001"; + +} // namespace vr + + + +// ivrresources.h + +namespace vr +{ + +class IVRResources +{ +public: + + // ------------------------------------ + // Shared Resource Methods + // ------------------------------------ + + /** Loads the specified resource into the provided buffer if large enough. + * Returns the size in bytes of the buffer required to hold the specified resource. */ + virtual uint32_t LoadSharedResource( const char *pchResourceName, char *pchBuffer, uint32_t unBufferLen ) = 0; + + /** Provides the full path to the specified resource. Resource names can include named directories for + * drivers and other things, and this resolves all of those and returns the actual physical path. + * pchResourceTypeDirectory is the subdirectory of resources to look in. */ + virtual uint32_t GetResourceFullPath( const char *pchResourceName, const char *pchResourceTypeDirectory, VR_OUT_STRING() char *pchPathBuffer, uint32_t unBufferLen ) = 0; +}; + +static const char * const IVRResources_Version = "IVRResources_001"; + + +} + +// ivrdrivermanager.h + +namespace vr +{ + +class IVRDriverManager +{ +public: + virtual uint32_t GetDriverCount() const = 0; + + /** Returns the length of the number of bytes necessary to hold this string including the trailing null. */ + virtual uint32_t GetDriverName( vr::DriverId_t nDriver, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize ) = 0; + + virtual DriverHandle_t GetDriverHandle( const char *pchDriverName ) = 0; + + virtual bool IsEnabled( vr::DriverId_t nDriver ) const = 0; +}; + +static const char * const IVRDriverManager_Version = "IVRDriverManager_001"; + +} // namespace vr + + + +// ivrinput.h + +namespace vr +{ + // Maximum number of characters in an action name, including the trailing null + static const uint32_t k_unMaxActionNameLength = 64; + + // Maximum number of characters in an action set name, including the trailing null + static const uint32_t k_unMaxActionSetNameLength = 64; + + // Maximum number of origins for an action + static const uint32_t k_unMaxActionOriginCount = 16; + + // Maximum number of characters in a bone name, including the trailing null + static const uint32_t k_unMaxBoneNameLength = 32; + + enum EVRSkeletalTransformSpace + { + VRSkeletalTransformSpace_Model = 0, + VRSkeletalTransformSpace_Parent = 1 + }; + + enum EVRSkeletalReferencePose + { + VRSkeletalReferencePose_BindPose = 0, + VRSkeletalReferencePose_OpenHand, + VRSkeletalReferencePose_Fist, + VRSkeletalReferencePose_GripLimit + }; + + enum EVRFinger + { + VRFinger_Thumb = 0, + VRFinger_Index, + VRFinger_Middle, + VRFinger_Ring, + VRFinger_Pinky, + VRFinger_Count + }; + + enum EVRFingerSplay + { + VRFingerSplay_Thumb_Index = 0, + VRFingerSplay_Index_Middle, + VRFingerSplay_Middle_Ring, + VRFingerSplay_Ring_Pinky, + VRFingerSplay_Count + }; + + enum EVRSummaryType + { + // The skeletal summary data will match the animated bone transforms for the action. + VRSummaryType_FromAnimation = 0, + + // The skeletal summary data will include unprocessed data directly from the device when available. + // This data is generally less latent than the data that is computed from the animations. + VRSummaryType_FromDevice = 1, + }; + + enum EVRInputFilterCancelType + { + VRInputFilterCancel_Timers = 0, + VRInputFilterCancel_Momentum = 1, + }; + + enum EVRInputStringBits + { + VRInputString_Hand = 0x01, + VRInputString_ControllerType = 0x02, + VRInputString_InputSource = 0x04, + + VRInputString_All = 0xFFFFFFFF + }; + + struct InputAnalogActionData_t + { + /** Whether or not this action is currently available to be bound in the active action set */ + bool bActive; + + /** The origin that caused this action's current state */ + VRInputValueHandle_t activeOrigin; + + /** The current state of this action; will be delta updates for mouse actions */ + float x, y, z; + + /** Deltas since the previous call to UpdateActionState() */ + float deltaX, deltaY, deltaZ; + + /** Time relative to now when this event happened. Will be negative to indicate a past time. */ + float fUpdateTime; + }; + + struct InputDigitalActionData_t + { + /** Whether or not this action is currently available to be bound in the active action set */ + bool bActive; + + /** The origin that caused this action's current state */ + VRInputValueHandle_t activeOrigin; + + /** The current state of this action; will be true if currently pressed */ + bool bState; + + /** This is true if the state has changed since the last frame */ + bool bChanged; + + /** Time relative to now when this event happened. Will be negative to indicate a past time. */ + float fUpdateTime; + }; + + struct InputPoseActionData_t + { + /** Whether or not this action is currently available to be bound in the active action set */ + bool bActive; + + /** The origin that caused this action's current state */ + VRInputValueHandle_t activeOrigin; + + /** The current state of this action */ + TrackedDevicePose_t pose; + }; + + struct InputSkeletalActionData_t + { + /** Whether or not this action is currently available to be bound in the active action set */ + bool bActive; + + /** The origin that caused this action's current state */ + VRInputValueHandle_t activeOrigin; + }; + + struct InputOriginInfo_t + { + VRInputValueHandle_t devicePath; + TrackedDeviceIndex_t trackedDeviceIndex; + char rchRenderModelComponentName[128]; + }; + + struct InputBindingInfo_t + { + char rchDevicePathName[128]; + char rchInputPathName[128]; + char rchModeName[128]; + char rchSlotName[128]; + char rchInputSourceType[ 32 ]; + }; + + // * Experimental global action set priority * + // These constants are part of the experimental support in SteamVR for overlay + // apps selectively overriding input in the base scene application. This may be + // useful for overlay applications that need to use part or all of a controller + // without taking away all input to the game. This system must be enabled by the + // "Experimental overlay input overrides" setting in the developer section of + // SteamVR settings. + // + // To use this system, set the nPriority field of an action set to any number in + // this range. + static const int32_t k_nActionSetOverlayGlobalPriorityMin = 0x01000000; + static const int32_t k_nActionSetOverlayGlobalPriorityMax = 0x01FFFFFF; + + static const int32_t k_nActionSetPriorityReservedMin = 0x02000000; + + struct VRActiveActionSet_t + { + /** This is the handle of the action set to activate for this frame. */ + VRActionSetHandle_t ulActionSet; + + /** This is the handle of a device path that this action set should be active for. To + * activate for all devices, set this to k_ulInvalidInputValueHandle. */ + VRInputValueHandle_t ulRestrictedToDevice; + + /** The action set to activate for all devices other than ulRestrictedDevice. If + * ulRestrictedToDevice is set to k_ulInvalidInputValueHandle, this parameter is + * ignored. */ + VRActionSetHandle_t ulSecondaryActionSet; + + // This field is ignored + uint32_t unPadding; + + /** The priority of this action set relative to other action sets. Any inputs + * bound to a source (e.g. trackpad, joystick, trigger) will disable bindings in + * other active action sets with a smaller priority. + * + * Overlay applications (i.e. ApplicationType_Overlay) may set their action set priority + * to a value between k_nActionSetOverlayGlobalPriorityMin and k_nActionSetOverlayGlobalPriorityMax + * to cause any inputs bound to a source used by that action set to be disabled in scene applications. + * + * No action set priority may value may be larger than k_nActionSetPriorityReservedMin + */ + int32_t nPriority; + }; + + /** Contains summary information about the current skeletal pose */ + struct VRSkeletalSummaryData_t + { + /** The amount that each finger is 'curled' inwards towards the palm. In the case of the thumb, + * this represents how much the thumb is wrapped around the fist. + * 0 means straight, 1 means fully curled */ + float flFingerCurl[ VRFinger_Count ]; + + /** The amount that each pair of adjacent fingers are separated. + * 0 means the digits are touching, 1 means they are fully separated. + */ + float flFingerSplay[ VRFingerSplay_Count ]; + }; + + + class IVRInput + { + public: + + // --------------- Handle management --------------- // + + /** Sets the path to the action manifest JSON file that is used by this application. If this information + * was set on the Steam partner site, calls to this function are ignored. If the Steam partner site + * setting and the path provided by this call are different, VRInputError_MismatchedActionManifest is returned. + * This call must be made before the first call to UpdateActionState or IVRSystem::PollNextEvent. */ + virtual EVRInputError SetActionManifestPath( const char *pchActionManifestPath ) = 0; + + /** Returns a handle for an action set. This handle is used for all performance-sensitive calls. */ + virtual EVRInputError GetActionSetHandle( const char *pchActionSetName, VRActionSetHandle_t *pHandle ) = 0; + + /** Returns a handle for an action. This handle is used for all performance-sensitive calls. */ + virtual EVRInputError GetActionHandle( const char *pchActionName, VRActionHandle_t *pHandle ) = 0; + + /** Returns a handle for any path in the input system. E.g. /user/hand/right */ + virtual EVRInputError GetInputSourceHandle( const char *pchInputSourcePath, VRInputValueHandle_t *pHandle ) = 0; + + + + // --------------- Reading action state ------------------- // + + /** Reads the current state into all actions. After this call, the results of Get*Action calls + * will be the same until the next call to UpdateActionState. */ + virtual EVRInputError UpdateActionState( VR_ARRAY_COUNT( unSetCount ) VRActiveActionSet_t *pSets, uint32_t unSizeOfVRSelectedActionSet_t, uint32_t unSetCount ) = 0; + + /** Reads the state of a digital action given its handle. This will return VRInputError_WrongType if the type of + * action is something other than digital */ + virtual EVRInputError GetDigitalActionData( VRActionHandle_t action, InputDigitalActionData_t *pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice ) = 0; + + /** Reads the state of an analog action given its handle. This will return VRInputError_WrongType if the type of + * action is something other than analog */ + virtual EVRInputError GetAnalogActionData( VRActionHandle_t action, InputAnalogActionData_t *pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice ) = 0; + + /** Reads the state of a pose action given its handle for the number of seconds relative to now. This + * will generally be called with negative times from the fUpdateTime fields in other actions. */ + virtual EVRInputError GetPoseActionDataRelativeToNow( VRActionHandle_t action, ETrackingUniverseOrigin eOrigin, float fPredictedSecondsFromNow, InputPoseActionData_t *pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice ) = 0; + + /** Reads the state of a pose action given its handle. The returned values will match the values returned + * by the last call to IVRCompositor::WaitGetPoses(). */ + virtual EVRInputError GetPoseActionDataForNextFrame( VRActionHandle_t action, ETrackingUniverseOrigin eOrigin, InputPoseActionData_t *pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice ) = 0; + + /** Reads the state of a skeletal action given its handle. */ + virtual EVRInputError GetSkeletalActionData( VRActionHandle_t action, InputSkeletalActionData_t *pActionData, uint32_t unActionDataSize ) = 0; + + /** Returns the current dominant hand for the user for this application. This function will only return success for applications + * which include "supports_dominant_hand_setting": true in their action manifests. The dominant hand will only change after + * a call to UpdateActionState, and the action data returned after that point will use the new dominant hand. */ + virtual EVRInputError GetDominantHand( ETrackedControllerRole *peDominantHand ) = 0; + + /** Sets the dominant hand for the user for this application. */ + virtual EVRInputError SetDominantHand( ETrackedControllerRole eDominantHand ) = 0; + + // --------------- Static Skeletal Data ------------------- // + + /** Reads the number of bones in skeleton associated with the given action */ + virtual EVRInputError GetBoneCount( VRActionHandle_t action, uint32_t* pBoneCount ) = 0; + + /** Fills the given array with the index of each bone's parent in the skeleton associated with the given action */ + virtual EVRInputError GetBoneHierarchy( VRActionHandle_t action, VR_ARRAY_COUNT( unIndexArayCount ) BoneIndex_t* pParentIndices, uint32_t unIndexArayCount ) = 0; + + /** Fills the given buffer with the name of the bone at the given index in the skeleton associated with the given action */ + virtual EVRInputError GetBoneName( VRActionHandle_t action, BoneIndex_t nBoneIndex, VR_OUT_STRING() char* pchBoneName, uint32_t unNameBufferSize ) = 0; + + /** Fills the given buffer with the transforms for a specific static skeletal reference pose */ + virtual EVRInputError GetSkeletalReferenceTransforms( VRActionHandle_t action, EVRSkeletalTransformSpace eTransformSpace, EVRSkeletalReferencePose eReferencePose, VR_ARRAY_COUNT( unTransformArrayCount ) VRBoneTransform_t *pTransformArray, uint32_t unTransformArrayCount ) = 0; + + /** Reads the level of accuracy to which the controller is able to track the user to recreate a skeletal pose */ + virtual EVRInputError GetSkeletalTrackingLevel( VRActionHandle_t action, EVRSkeletalTrackingLevel* pSkeletalTrackingLevel ) = 0; + + // --------------- Dynamic Skeletal Data ------------------- // + + /** Reads the state of the skeletal bone data associated with this action and copies it into the given buffer. */ + virtual EVRInputError GetSkeletalBoneData( VRActionHandle_t action, EVRSkeletalTransformSpace eTransformSpace, EVRSkeletalMotionRange eMotionRange, VR_ARRAY_COUNT( unTransformArrayCount ) VRBoneTransform_t *pTransformArray, uint32_t unTransformArrayCount ) = 0; + + /** Reads summary information about the current pose of the skeleton associated with the given action. */ + virtual EVRInputError GetSkeletalSummaryData( VRActionHandle_t action, EVRSummaryType eSummaryType, VRSkeletalSummaryData_t * pSkeletalSummaryData ) = 0; + + /** Reads the state of the skeletal bone data in a compressed form that is suitable for + * sending over the network. The required buffer size will never exceed ( sizeof(VR_BoneTransform_t)*boneCount + 2). + * Usually the size will be much smaller. */ + virtual EVRInputError GetSkeletalBoneDataCompressed( VRActionHandle_t action, EVRSkeletalMotionRange eMotionRange, VR_OUT_BUFFER_COUNT( unCompressedSize ) void *pvCompressedData, uint32_t unCompressedSize, uint32_t *punRequiredCompressedSize ) = 0; + + /** Turns a compressed buffer from GetSkeletalBoneDataCompressed and turns it back into a bone transform array. */ + virtual EVRInputError DecompressSkeletalBoneData( const void *pvCompressedBuffer, uint32_t unCompressedBufferSize, EVRSkeletalTransformSpace eTransformSpace, VR_ARRAY_COUNT( unTransformArrayCount ) VRBoneTransform_t *pTransformArray, uint32_t unTransformArrayCount ) = 0; + + // --------------- Haptics ------------------- // + + /** Triggers a haptic event as described by the specified action */ + virtual EVRInputError TriggerHapticVibrationAction( VRActionHandle_t action, float fStartSecondsFromNow, float fDurationSeconds, float fFrequency, float fAmplitude, VRInputValueHandle_t ulRestrictToDevice ) = 0; + + // --------------- Action Origins ---------------- // + + /** Retrieve origin handles for an action */ + virtual EVRInputError GetActionOrigins( VRActionSetHandle_t actionSetHandle, VRActionHandle_t digitalActionHandle, VR_ARRAY_COUNT( originOutCount ) VRInputValueHandle_t *originsOut, uint32_t originOutCount ) = 0; + + /** Retrieves the name of the origin in the current language. unStringSectionsToInclude is a bitfield of values in EVRInputStringBits that allows the + application to specify which parts of the origin's information it wants a string for. */ + virtual EVRInputError GetOriginLocalizedName( VRInputValueHandle_t origin, VR_OUT_STRING() char *pchNameArray, uint32_t unNameArraySize, int32_t unStringSectionsToInclude ) = 0; + + /** Retrieves useful information for the origin of this action */ + virtual EVRInputError GetOriginTrackedDeviceInfo( VRInputValueHandle_t origin, InputOriginInfo_t *pOriginInfo, uint32_t unOriginInfoSize ) = 0; + + /** Retrieves useful information about the bindings for an action */ + virtual EVRInputError GetActionBindingInfo( VRActionHandle_t action, InputBindingInfo_t *pOriginInfo, uint32_t unBindingInfoSize, uint32_t unBindingInfoCount, uint32_t *punReturnedBindingInfoCount ) = 0; + + /** Shows the current binding for the action in-headset */ + virtual EVRInputError ShowActionOrigins( VRActionSetHandle_t actionSetHandle, VRActionHandle_t ulActionHandle ) = 0; + + /** Shows the current binding all the actions in the specified action sets */ + virtual EVRInputError ShowBindingsForActionSet( VR_ARRAY_COUNT( unSetCount ) VRActiveActionSet_t *pSets, uint32_t unSizeOfVRSelectedActionSet_t, uint32_t unSetCount, VRInputValueHandle_t originToHighlight ) = 0; + + /** Use this to query what action on the component returned by GetOriginTrackedDeviceInfo would trigger this binding. */ + virtual EVRInputError GetComponentStateForBinding( const char *pchRenderModelName, const char *pchComponentName, + const InputBindingInfo_t *pOriginInfo, uint32_t unBindingInfoSize, uint32_t unBindingInfoCount, + vr::RenderModel_ComponentState_t *pComponentState ) = 0; + + + // --------------- Legacy Input ------------------- // + virtual bool IsUsingLegacyInput() = 0; + + + // --------------- Utilities ------------------- // + + /** Opens the binding user interface. If no app key is provided it will use the key from the calling process. + * If no set is provided it will open to the root of the app binding page. */ + virtual EVRInputError OpenBindingUI( const char* pchAppKey, VRActionSetHandle_t ulActionSetHandle, VRInputValueHandle_t ulDeviceHandle, bool bShowOnDesktop ) = 0; + + /** Returns the variant set in the current bindings. If the binding doesn't include a variant setting, this function + * will return an empty string */ + virtual EVRInputError GetBindingVariant( vr::VRInputValueHandle_t ulDevicePath, + VR_OUT_STRING() char *pchVariantArray, uint32_t unVariantArraySize ) = 0; + + }; + + static const char * const IVRInput_Version = "IVRInput_010"; + +} // namespace vr + +// ivriobuffer.h + +namespace vr +{ + +typedef uint64_t IOBufferHandle_t; +static const uint64_t k_ulInvalidIOBufferHandle = 0; + + enum EIOBufferError + { + IOBuffer_Success = 0, + IOBuffer_OperationFailed = 100, + IOBuffer_InvalidHandle = 101, + IOBuffer_InvalidArgument = 102, + IOBuffer_PathExists = 103, + IOBuffer_PathDoesNotExist = 104, + IOBuffer_Permission = 105, + }; + + enum EIOBufferMode + { + IOBufferMode_Read = 0x0001, + IOBufferMode_Write = 0x0002, + IOBufferMode_Create = 0x0200, + }; + + // ---------------------------------------------------------------------------------------------- + // Purpose: + // ---------------------------------------------------------------------------------------------- + class IVRIOBuffer + { + public: + /** opens an existing or creates a new IOBuffer of unSize bytes */ + virtual vr::EIOBufferError Open( const char *pchPath, vr::EIOBufferMode mode, uint32_t unElementSize, uint32_t unElements, vr::IOBufferHandle_t *pulBuffer ) = 0; + + /** closes a previously opened or created buffer */ + virtual vr::EIOBufferError Close( vr::IOBufferHandle_t ulBuffer ) = 0; + + /** reads up to unBytes from buffer into *pDst, returning number of bytes read in *punRead */ + virtual vr::EIOBufferError Read( vr::IOBufferHandle_t ulBuffer, void *pDst, uint32_t unBytes, uint32_t *punRead ) = 0; + + /** writes unBytes of data from *pSrc into a buffer. */ + virtual vr::EIOBufferError Write( vr::IOBufferHandle_t ulBuffer, void *pSrc, uint32_t unBytes ) = 0; + + /** retrieves the property container of an buffer. */ + virtual vr::PropertyContainerHandle_t PropertyContainer( vr::IOBufferHandle_t ulBuffer ) = 0; + + /** inexpensively checks for readers to allow writers to fast-fail potentially expensive copies and writes. */ + virtual bool HasReaders( vr::IOBufferHandle_t ulBuffer ) = 0; + }; + + static const char *IVRIOBuffer_Version = "IVRIOBuffer_002"; +} + +// ivrspatialanchors.h + +namespace vr +{ + static const SpatialAnchorHandle_t k_ulInvalidSpatialAnchorHandle = 0; + + struct SpatialAnchorPose_t + { + HmdMatrix34_t mAnchorToAbsoluteTracking; + }; + + class IVRSpatialAnchors + { + public: + + /** Returns a handle for an spatial anchor described by "descriptor". On success, pHandle + * will contain a handle valid for this session. Caller can wait for an event or occasionally + * poll GetSpatialAnchorPose() to find the virtual coordinate associated with this anchor. */ + virtual EVRSpatialAnchorError CreateSpatialAnchorFromDescriptor( const char *pchDescriptor, SpatialAnchorHandle_t *pHandleOut ) = 0; + + /** Returns a handle for an new spatial anchor at pPose. On success, pHandle + * will contain a handle valid for this session. Caller can wait for an event or occasionally + * poll GetSpatialAnchorDescriptor() to find the permanent descriptor for this pose. + * The result of GetSpatialAnchorPose() may evolve from this initial position if the driver chooses + * to update it. + * The anchor will be associated with the driver that provides unDeviceIndex, and the driver may use that specific + * device as a hint for how to best create the anchor. + * The eOrigin must match whatever tracking origin you are working in (seated/standing/raw). + * This should be called when the user is close to (and ideally looking at/interacting with) the target physical + * location. At that moment, the driver will have the most information about how to recover that physical point + * in the future, and the quality of the anchor (when the descriptor is re-used) will be highest. + * The caller may decide to apply offsets from this initial pose, but is advised to stay relatively close to the + * original pose location for highest fidelity. */ + virtual EVRSpatialAnchorError CreateSpatialAnchorFromPose( TrackedDeviceIndex_t unDeviceIndex, ETrackingUniverseOrigin eOrigin, SpatialAnchorPose_t *pPose, SpatialAnchorHandle_t *pHandleOut ) = 0; + + /** Get the pose for a given handle. This is intended to be cheap enough to call every frame (or fairly often) + * so that the driver can refine this position when it has more information available. */ + virtual EVRSpatialAnchorError GetSpatialAnchorPose( SpatialAnchorHandle_t unHandle, ETrackingUniverseOrigin eOrigin, SpatialAnchorPose_t *pPoseOut ) = 0; + + /** Get the descriptor for a given handle. This will be empty for handles where the driver has not + * yet built a descriptor. It will be the application-supplied descriptor for previously saved anchors + * that the application is requesting poses for. If the driver has called UpdateSpatialAnchorDescriptor() + * already in this session, it will be the descriptor provided by the driver. + * Returns true if the descriptor fits into the buffer, else false. Buffer size should be at least + * k_unMaxSpatialAnchorDescriptorSize. */ + virtual EVRSpatialAnchorError GetSpatialAnchorDescriptor( SpatialAnchorHandle_t unHandle, VR_OUT_STRING() char *pchDescriptorOut, uint32_t *punDescriptorBufferLenInOut ) = 0; + + }; + + static const char * const IVRSpatialAnchors_Version = "IVRSpatialAnchors_001"; + +} // namespace vr + +// ivrdebug.h + +namespace vr +{ + enum EVRDebugError + { + VRDebugError_Success = 0, + VRDebugError_BadParameter + }; + + /** Handle for vr profiler events */ + typedef uint64_t VrProfilerEventHandle_t; + + class IVRDebug + { + public: + + /** Create a vr profiler discrete event (point) + * The event will be associated with the message provided in pchMessage, and the current + * time will be used as the event timestamp. */ + virtual EVRDebugError EmitVrProfilerEvent( const char *pchMessage ) = 0; + + /** Create an vr profiler duration event (line) + * The current time will be used as the timestamp for the start of the line. + * On success, pHandleOut will contain a handle valid for terminating this event. */ + virtual EVRDebugError BeginVrProfilerEvent( VrProfilerEventHandle_t *pHandleOut ) = 0; + + /** Terminate a vr profiler event + * The event associated with hHandle will be considered completed when this method is called. + * The current time will be used assocaited to the termination time of the event, and + * pchMessage will be used as the event title. */ + virtual EVRDebugError FinishVrProfilerEvent( VrProfilerEventHandle_t hHandle, const char *pchMessage ) = 0; + + /** Sends a request to the driver for the specified device and returns the response. The maximum response size is 32k, + * but this method can be called with a smaller buffer. If the response exceeds the size of the buffer, it is truncated. + * The size of the response including its terminating null is returned. */ + virtual uint32_t DriverDebugRequest( vr::TrackedDeviceIndex_t unDeviceIndex, const char *pchRequest, VR_OUT_STRING() char *pchResponseBuffer, uint32_t unResponseBufferSize ) = 0; + + }; + + static const char * const IVRDebug_Version = "IVRDebug_001"; + +} // namespace vr +// End + +#endif // _OPENVR_API + + + +namespace vr +{ +#if !defined( OPENVR_INTERFACE_INTERNAL ) + + /** Finds the active installation of the VR API and initializes it. The provided path must be absolute + * or relative to the current working directory. These are the local install versions of the equivalent + * functions in steamvr.h and will work without a local Steam install. + * + * This path is to the "root" of the VR API install. That's the directory with + * the "drivers" directory and a platform (i.e. "win32") directory in it, not the directory with the DLL itself. + * + * pStartupInfo is reserved for future use. + */ + inline IVRSystem *VR_Init( EVRInitError *peError, EVRApplicationType eApplicationType, const char *pStartupInfo = nullptr ); + + /** unloads vrclient.dll. Any interface pointers from the interface are + * invalid after this point */ + inline void VR_Shutdown(); + + /** Returns true if there is an HMD attached. This check is as lightweight as possible and + * can be called outside of VR_Init/VR_Shutdown. It should be used when an application wants + * to know if initializing VR is a possibility but isn't ready to take that step yet. + */ + VR_INTERFACE bool VR_CALLTYPE VR_IsHmdPresent(); + + /** Returns true if the OpenVR runtime is installed. */ + VR_INTERFACE bool VR_CALLTYPE VR_IsRuntimeInstalled(); + + /** Returns where the OpenVR runtime is installed. */ + VR_INTERFACE bool VR_GetRuntimePath( VR_OUT_STRING() char *pchPathBuffer, uint32_t unBufferSize, uint32_t *punRequiredBufferSize ); + + /** Returns the name of the enum value for an EVRInitError. This function may be called outside of VR_Init()/VR_Shutdown(). */ + VR_INTERFACE const char *VR_CALLTYPE VR_GetVRInitErrorAsSymbol( EVRInitError error ); + + /** Returns an English string for an EVRInitError. Applications should call VR_GetVRInitErrorAsSymbol instead and + * use that as a key to look up their own localized error message. This function may be called outside of VR_Init()/VR_Shutdown(). */ + VR_INTERFACE const char *VR_CALLTYPE VR_GetVRInitErrorAsEnglishDescription( EVRInitError error ); + + /** Returns the interface of the specified version. This method must be called after VR_Init. The + * pointer returned is valid until VR_Shutdown is called. + */ + VR_INTERFACE void *VR_CALLTYPE VR_GetGenericInterface( const char *pchInterfaceVersion, EVRInitError *peError ); + + /** Returns whether the interface of the specified version exists. + */ + VR_INTERFACE bool VR_CALLTYPE VR_IsInterfaceVersionValid( const char *pchInterfaceVersion ); + + /** Returns a token that represents whether the VR interface handles need to be reloaded */ + VR_INTERFACE uint32_t VR_CALLTYPE VR_GetInitToken(); + + // These typedefs allow old enum names from SDK 0.9.11 to be used in applications. + // They will go away in the future. + typedef EVRInitError HmdError; + typedef EVREye Hmd_Eye; + typedef EColorSpace ColorSpace; + typedef ETrackingResult HmdTrackingResult; + typedef ETrackedDeviceClass TrackedDeviceClass; + typedef ETrackingUniverseOrigin TrackingUniverseOrigin; + typedef ETrackedDeviceProperty TrackedDeviceProperty; + typedef ETrackedPropertyError TrackedPropertyError; + typedef EVRSubmitFlags VRSubmitFlags_t; + typedef EVRState VRState_t; + typedef ECollisionBoundsStyle CollisionBoundsStyle_t; + typedef EVROverlayError VROverlayError; + typedef EVRFirmwareError VRFirmwareError; + typedef EVRCompositorError VRCompositorError; + typedef EVRScreenshotError VRScreenshotsError; + + inline uint32_t &VRToken() + { + static uint32_t token; + return token; + } + + class COpenVRContext + { + public: + COpenVRContext() { Clear(); } + void Clear(); + + inline void CheckClear() + { + if ( VRToken() != VR_GetInitToken() ) + { + Clear(); + VRToken() = VR_GetInitToken(); + } + } + + IVRSystem *VRSystem() + { + CheckClear(); + if ( m_pVRSystem == nullptr ) + { + EVRInitError eError; + m_pVRSystem = ( IVRSystem * )VR_GetGenericInterface( IVRSystem_Version, &eError ); + } + return m_pVRSystem; + } + IVRChaperone *VRChaperone() + { + CheckClear(); + if ( m_pVRChaperone == nullptr ) + { + EVRInitError eError; + m_pVRChaperone = ( IVRChaperone * )VR_GetGenericInterface( IVRChaperone_Version, &eError ); + } + return m_pVRChaperone; + } + + IVRChaperoneSetup *VRChaperoneSetup() + { + CheckClear(); + if ( m_pVRChaperoneSetup == nullptr ) + { + EVRInitError eError; + m_pVRChaperoneSetup = ( IVRChaperoneSetup * )VR_GetGenericInterface( IVRChaperoneSetup_Version, &eError ); + } + return m_pVRChaperoneSetup; + } + + IVRCompositor *VRCompositor() + { + CheckClear(); + if ( m_pVRCompositor == nullptr ) + { + EVRInitError eError; + m_pVRCompositor = ( IVRCompositor * )VR_GetGenericInterface( IVRCompositor_Version, &eError ); + } + return m_pVRCompositor; + } + + IVROverlay *VROverlay() + { + CheckClear(); + if ( m_pVROverlay == nullptr ) + { + EVRInitError eError; + m_pVROverlay = ( IVROverlay * )VR_GetGenericInterface( IVROverlay_Version, &eError ); + } + return m_pVROverlay; + } + + IVROverlayView *VROverlayView() + { + CheckClear(); + if ( m_pVROverlayView == nullptr ) + { + EVRInitError eError; + m_pVROverlayView = ( IVROverlayView * ) VR_GetGenericInterface( IVROverlayView_Version, &eError ); + } + return m_pVROverlayView; + } + + IVRHeadsetView *VRHeadsetView() + { + CheckClear(); + if ( m_pVRHeadsetView == nullptr ) + { + EVRInitError eError; + m_pVRHeadsetView = ( IVRHeadsetView * ) VR_GetGenericInterface( IVRHeadsetView_Version, &eError ); + } + return m_pVRHeadsetView; + } + + IVRResources *VRResources() + { + CheckClear(); + if ( m_pVRResources == nullptr ) + { + EVRInitError eError; + m_pVRResources = (IVRResources *)VR_GetGenericInterface( IVRResources_Version, &eError ); + } + return m_pVRResources; + } + + IVRScreenshots *VRScreenshots() + { + CheckClear(); + if ( m_pVRScreenshots == nullptr ) + { + EVRInitError eError; + m_pVRScreenshots = ( IVRScreenshots * )VR_GetGenericInterface( IVRScreenshots_Version, &eError ); + } + return m_pVRScreenshots; + } + + IVRRenderModels *VRRenderModels() + { + CheckClear(); + if ( m_pVRRenderModels == nullptr ) + { + EVRInitError eError; + m_pVRRenderModels = ( IVRRenderModels * )VR_GetGenericInterface( IVRRenderModels_Version, &eError ); + } + return m_pVRRenderModels; + } + + IVRExtendedDisplay *VRExtendedDisplay() + { + CheckClear(); + if ( m_pVRExtendedDisplay == nullptr ) + { + EVRInitError eError; + m_pVRExtendedDisplay = ( IVRExtendedDisplay * )VR_GetGenericInterface( IVRExtendedDisplay_Version, &eError ); + } + return m_pVRExtendedDisplay; + } + + IVRSettings *VRSettings() + { + CheckClear(); + if ( m_pVRSettings == nullptr ) + { + EVRInitError eError; + m_pVRSettings = ( IVRSettings * )VR_GetGenericInterface( IVRSettings_Version, &eError ); + } + return m_pVRSettings; + } + + IVRApplications *VRApplications() + { + CheckClear(); + if ( m_pVRApplications == nullptr ) + { + EVRInitError eError; + m_pVRApplications = ( IVRApplications * )VR_GetGenericInterface( IVRApplications_Version, &eError ); + } + return m_pVRApplications; + } + + IVRTrackedCamera *VRTrackedCamera() + { + CheckClear(); + if ( m_pVRTrackedCamera == nullptr ) + { + EVRInitError eError; + m_pVRTrackedCamera = ( IVRTrackedCamera * )VR_GetGenericInterface( IVRTrackedCamera_Version, &eError ); + } + return m_pVRTrackedCamera; + } + + IVRDriverManager *VRDriverManager() + { + CheckClear(); + if ( !m_pVRDriverManager ) + { + EVRInitError eError; + m_pVRDriverManager = ( IVRDriverManager * )VR_GetGenericInterface( IVRDriverManager_Version, &eError ); + } + return m_pVRDriverManager; + } + + IVRInput *VRInput() + { + CheckClear(); + if ( !m_pVRInput ) + { + EVRInitError eError; + m_pVRInput = (IVRInput *)VR_GetGenericInterface( IVRInput_Version, &eError ); + } + return m_pVRInput; + } + + IVRIOBuffer *VRIOBuffer() + { + if ( !m_pVRIOBuffer ) + { + EVRInitError eError; + m_pVRIOBuffer = ( IVRIOBuffer * )VR_GetGenericInterface( IVRIOBuffer_Version, &eError ); + } + return m_pVRIOBuffer; + } + + IVRSpatialAnchors *VRSpatialAnchors() + { + CheckClear(); + if ( !m_pVRSpatialAnchors ) + { + EVRInitError eError; + m_pVRSpatialAnchors = (IVRSpatialAnchors *)VR_GetGenericInterface( IVRSpatialAnchors_Version, &eError ); + } + return m_pVRSpatialAnchors; + } + + IVRDebug *VRDebug() + { + CheckClear(); + if ( !m_pVRDebug ) + { + EVRInitError eError; + m_pVRDebug = (IVRDebug *)VR_GetGenericInterface( IVRDebug_Version, &eError ); + } + return m_pVRDebug; + } + + IVRNotifications *VRNotifications() + { + CheckClear(); + if ( !m_pVRNotifications ) + { + EVRInitError eError; + m_pVRNotifications = ( IVRNotifications * )VR_GetGenericInterface( IVRNotifications_Version, &eError ); + } + return m_pVRNotifications; + } + + private: + IVRSystem *m_pVRSystem; + IVRChaperone *m_pVRChaperone; + IVRChaperoneSetup *m_pVRChaperoneSetup; + IVRCompositor *m_pVRCompositor; + IVRHeadsetView *m_pVRHeadsetView; + IVROverlay *m_pVROverlay; + IVROverlayView *m_pVROverlayView; + IVRResources *m_pVRResources; + IVRRenderModels *m_pVRRenderModels; + IVRExtendedDisplay *m_pVRExtendedDisplay; + IVRSettings *m_pVRSettings; + IVRApplications *m_pVRApplications; + IVRTrackedCamera *m_pVRTrackedCamera; + IVRScreenshots *m_pVRScreenshots; + IVRDriverManager *m_pVRDriverManager; + IVRInput *m_pVRInput; + IVRIOBuffer *m_pVRIOBuffer; + IVRSpatialAnchors *m_pVRSpatialAnchors; + IVRDebug *m_pVRDebug; + IVRNotifications *m_pVRNotifications; + }; + + inline COpenVRContext &OpenVRInternal_ModuleContext() + { + static void *ctx[ sizeof( COpenVRContext ) / sizeof( void * ) ]; + return *( COpenVRContext * )ctx; // bypass zero-init constructor + } + + inline IVRSystem *VR_CALLTYPE VRSystem() { return OpenVRInternal_ModuleContext().VRSystem(); } + inline IVRChaperone *VR_CALLTYPE VRChaperone() { return OpenVRInternal_ModuleContext().VRChaperone(); } + inline IVRChaperoneSetup *VR_CALLTYPE VRChaperoneSetup() { return OpenVRInternal_ModuleContext().VRChaperoneSetup(); } + inline IVRCompositor *VR_CALLTYPE VRCompositor() { return OpenVRInternal_ModuleContext().VRCompositor(); } + inline IVROverlay *VR_CALLTYPE VROverlay() { return OpenVRInternal_ModuleContext().VROverlay(); } + inline IVROverlayView *VR_CALLTYPE VROverlayView() { return OpenVRInternal_ModuleContext().VROverlayView(); } + inline IVRHeadsetView *VR_CALLTYPE VRHeadsetView() { return OpenVRInternal_ModuleContext().VRHeadsetView(); } + inline IVRScreenshots *VR_CALLTYPE VRScreenshots() { return OpenVRInternal_ModuleContext().VRScreenshots(); } + inline IVRRenderModels *VR_CALLTYPE VRRenderModels() { return OpenVRInternal_ModuleContext().VRRenderModels(); } + inline IVRApplications *VR_CALLTYPE VRApplications() { return OpenVRInternal_ModuleContext().VRApplications(); } + inline IVRSettings *VR_CALLTYPE VRSettings() { return OpenVRInternal_ModuleContext().VRSettings(); } + inline IVRResources *VR_CALLTYPE VRResources() { return OpenVRInternal_ModuleContext().VRResources(); } + inline IVRExtendedDisplay *VR_CALLTYPE VRExtendedDisplay() { return OpenVRInternal_ModuleContext().VRExtendedDisplay(); } + inline IVRTrackedCamera *VR_CALLTYPE VRTrackedCamera() { return OpenVRInternal_ModuleContext().VRTrackedCamera(); } + inline IVRDriverManager *VR_CALLTYPE VRDriverManager() { return OpenVRInternal_ModuleContext().VRDriverManager(); } + inline IVRInput *VR_CALLTYPE VRInput() { return OpenVRInternal_ModuleContext().VRInput(); } + inline IVRIOBuffer *VR_CALLTYPE VRIOBuffer() { return OpenVRInternal_ModuleContext().VRIOBuffer(); } + inline IVRSpatialAnchors *VR_CALLTYPE VRSpatialAnchors() { return OpenVRInternal_ModuleContext().VRSpatialAnchors(); } + inline IVRNotifications *VR_CALLTYPE VRNotifications() { return OpenVRInternal_ModuleContext().VRNotifications(); } + inline IVRDebug *VR_CALLTYPE VRDebug() { return OpenVRInternal_ModuleContext().VRDebug(); } + + inline void COpenVRContext::Clear() + { + m_pVRSystem = nullptr; + m_pVRChaperone = nullptr; + m_pVRChaperoneSetup = nullptr; + m_pVRCompositor = nullptr; + m_pVROverlay = nullptr; + m_pVROverlayView = nullptr; + m_pVRHeadsetView = nullptr; + m_pVRRenderModels = nullptr; + m_pVRExtendedDisplay = nullptr; + m_pVRSettings = nullptr; + m_pVRApplications = nullptr; + m_pVRTrackedCamera = nullptr; + m_pVRResources = nullptr; + m_pVRScreenshots = nullptr; + m_pVRDriverManager = nullptr; + m_pVRInput = nullptr; + m_pVRIOBuffer = nullptr; + m_pVRSpatialAnchors = nullptr; + m_pVRNotifications = nullptr; + m_pVRDebug = nullptr; + } + + VR_INTERFACE uint32_t VR_CALLTYPE VR_InitInternal2( EVRInitError *peError, EVRApplicationType eApplicationType, const char *pStartupInfo ); + VR_INTERFACE void VR_CALLTYPE VR_ShutdownInternal(); + + /** Finds the active installation of vrclient.dll and initializes it */ + inline IVRSystem *VR_Init( EVRInitError *peError, EVRApplicationType eApplicationType, const char *pStartupInfo ) + { + IVRSystem *pVRSystem = nullptr; + + EVRInitError eError; + VRToken() = VR_InitInternal2( &eError, eApplicationType, pStartupInfo ); + COpenVRContext &ctx = OpenVRInternal_ModuleContext(); + ctx.Clear(); + + if ( eError == VRInitError_None ) + { + if ( VR_IsInterfaceVersionValid( IVRSystem_Version ) ) + { + pVRSystem = VRSystem(); + } + else + { + VR_ShutdownInternal(); + eError = VRInitError_Init_InterfaceNotFound; + } + } + + if ( peError ) + *peError = eError; + return pVRSystem; + } + + /** unloads vrclient.dll. Any interface pointers from the interface are + * invalid after this point */ + inline void VR_Shutdown() + { + VR_ShutdownInternal(); + } + +#endif // OPENVR_INTERFACE_INTERNAL +} diff --git a/contrib/openvr/headers/openvr_api.cs b/contrib/openvr/headers/openvr_api.cs new file mode 100755 index 0000000..4732b62 --- /dev/null +++ b/contrib/openvr/headers/openvr_api.cs @@ -0,0 +1,8220 @@ +//======= Copyright (c) Valve Corporation, All rights reserved. =============== +// +// Purpose: This file contains C#/managed code bindings for the OpenVR interfaces +// This file is auto-generated, do not edit it. +// +//============================================================================= +#if !OPENVR_XR_API + +using System; +using System.Runtime.InteropServices; +using Valve.VR; + +#if UNITY_5_3_OR_NEWER +using UnityEngine; +#endif + +namespace Valve.VR +{ + +[StructLayout(LayoutKind.Sequential)] +public struct IVRSystem +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetRecommendedRenderTargetSize(ref uint pnWidth, ref uint pnHeight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetRecommendedRenderTargetSize GetRecommendedRenderTargetSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate HmdMatrix44_t _GetProjectionMatrix(EVREye eEye, float fNearZ, float fFarZ); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetProjectionMatrix GetProjectionMatrix; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetProjectionRaw(EVREye eEye, ref float pfLeft, ref float pfRight, ref float pfTop, ref float pfBottom); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetProjectionRaw GetProjectionRaw; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _ComputeDistortion(EVREye eEye, float fU, float fV, ref DistortionCoordinates_t pDistortionCoordinates); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ComputeDistortion ComputeDistortion; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate HmdMatrix34_t _GetEyeToHeadTransform(EVREye eEye); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetEyeToHeadTransform GetEyeToHeadTransform; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetTimeSinceLastVsync(ref float pfSecondsSinceLastVsync, ref ulong pulFrameCounter); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetTimeSinceLastVsync GetTimeSinceLastVsync; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate int _GetD3D9AdapterIndex(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetD3D9AdapterIndex GetD3D9AdapterIndex; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetDXGIOutputInfo(ref int pnAdapterIndex); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDXGIOutputInfo GetDXGIOutputInfo; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetOutputDevice(ref ulong pnDevice, ETextureType textureType, IntPtr pInstance); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOutputDevice GetOutputDevice; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _IsDisplayOnDesktop(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsDisplayOnDesktop IsDisplayOnDesktop; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _SetDisplayVisibility(bool bIsVisibleOnDesktop); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetDisplayVisibility SetDisplayVisibility; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetDeviceToAbsoluteTrackingPose(ETrackingUniverseOrigin eOrigin, float fPredictedSecondsToPhotonsFromNow, [In, Out] TrackedDevicePose_t[] pTrackedDevicePoseArray, uint unTrackedDevicePoseArrayCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDeviceToAbsoluteTrackingPose GetDeviceToAbsoluteTrackingPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate HmdMatrix34_t _GetSeatedZeroPoseToStandingAbsoluteTrackingPose(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSeatedZeroPoseToStandingAbsoluteTrackingPose GetSeatedZeroPoseToStandingAbsoluteTrackingPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate HmdMatrix34_t _GetRawZeroPoseToStandingAbsoluteTrackingPose(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetRawZeroPoseToStandingAbsoluteTrackingPose GetRawZeroPoseToStandingAbsoluteTrackingPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetSortedTrackedDeviceIndicesOfClass(ETrackedDeviceClass eTrackedDeviceClass, [In, Out] uint[] punTrackedDeviceIndexArray, uint unTrackedDeviceIndexArrayCount, uint unRelativeToTrackedDeviceIndex); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSortedTrackedDeviceIndicesOfClass GetSortedTrackedDeviceIndicesOfClass; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EDeviceActivityLevel _GetTrackedDeviceActivityLevel(uint unDeviceId); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetTrackedDeviceActivityLevel GetTrackedDeviceActivityLevel; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ApplyTransform(ref TrackedDevicePose_t pOutputPose, ref TrackedDevicePose_t pTrackedDevicePose, ref HmdMatrix34_t pTransform); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ApplyTransform ApplyTransform; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole unDeviceType); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetTrackedDeviceIndexForControllerRole GetTrackedDeviceIndexForControllerRole; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackedControllerRole _GetControllerRoleForTrackedDeviceIndex(uint unDeviceIndex); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetControllerRoleForTrackedDeviceIndex GetControllerRoleForTrackedDeviceIndex; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackedDeviceClass _GetTrackedDeviceClass(uint unDeviceIndex); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetTrackedDeviceClass GetTrackedDeviceClass; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _IsTrackedDeviceConnected(uint unDeviceIndex); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsTrackedDeviceConnected IsTrackedDeviceConnected; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetBoolTrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetBoolTrackedDeviceProperty GetBoolTrackedDeviceProperty; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate float _GetFloatTrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetFloatTrackedDeviceProperty GetFloatTrackedDeviceProperty; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate int _GetInt32TrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetInt32TrackedDeviceProperty GetInt32TrackedDeviceProperty; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ulong _GetUint64TrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetUint64TrackedDeviceProperty GetUint64TrackedDeviceProperty; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate HmdMatrix34_t _GetMatrix34TrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, ref ETrackedPropertyError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetMatrix34TrackedDeviceProperty GetMatrix34TrackedDeviceProperty; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetArrayTrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, uint propType, IntPtr pBuffer, uint unBufferSize, ref ETrackedPropertyError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetArrayTrackedDeviceProperty GetArrayTrackedDeviceProperty; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetStringTrackedDeviceProperty(uint unDeviceIndex, ETrackedDeviceProperty prop, System.Text.StringBuilder pchValue, uint unBufferSize, ref ETrackedPropertyError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetStringTrackedDeviceProperty GetStringTrackedDeviceProperty; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetPropErrorNameFromEnum(ETrackedPropertyError error); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetPropErrorNameFromEnum GetPropErrorNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _PollNextEvent(ref VREvent_t pEvent, uint uncbVREvent); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _PollNextEvent PollNextEvent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _PollNextEventWithPose(ETrackingUniverseOrigin eOrigin, ref VREvent_t pEvent, uint uncbVREvent, ref TrackedDevicePose_t pTrackedDevicePose); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _PollNextEventWithPose PollNextEventWithPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetEventTypeNameFromEnum(EVREventType eType); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetEventTypeNameFromEnum GetEventTypeNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate HiddenAreaMesh_t _GetHiddenAreaMesh(EVREye eEye, EHiddenAreaMeshType type); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetHiddenAreaMesh GetHiddenAreaMesh; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetControllerState(uint unControllerDeviceIndex, ref VRControllerState_t pControllerState, uint unControllerStateSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetControllerState GetControllerState; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetControllerStateWithPose(ETrackingUniverseOrigin eOrigin, uint unControllerDeviceIndex, ref VRControllerState_t pControllerState, uint unControllerStateSize, ref TrackedDevicePose_t pTrackedDevicePose); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetControllerStateWithPose GetControllerStateWithPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _TriggerHapticPulse(uint unControllerDeviceIndex, uint unAxisId, ushort usDurationMicroSec); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _TriggerHapticPulse TriggerHapticPulse; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetButtonIdNameFromEnum(EVRButtonId eButtonId); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetButtonIdNameFromEnum GetButtonIdNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetControllerAxisTypeNameFromEnum(EVRControllerAxisType eAxisType); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetControllerAxisTypeNameFromEnum GetControllerAxisTypeNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _IsInputAvailable(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsInputAvailable IsInputAvailable; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _IsSteamVRDrawingControllers(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsSteamVRDrawingControllers IsSteamVRDrawingControllers; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _ShouldApplicationPause(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShouldApplicationPause ShouldApplicationPause; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _ShouldApplicationReduceRenderingWork(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShouldApplicationReduceRenderingWork ShouldApplicationReduceRenderingWork; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRFirmwareError _PerformFirmwareUpdate(uint unDeviceIndex); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _PerformFirmwareUpdate PerformFirmwareUpdate; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _AcknowledgeQuit_Exiting(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _AcknowledgeQuit_Exiting AcknowledgeQuit_Exiting; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetAppContainerFilePaths(System.Text.StringBuilder pchBuffer, uint unBufferSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetAppContainerFilePaths GetAppContainerFilePaths; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetRuntimeVersion(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetRuntimeVersion GetRuntimeVersion; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRExtendedDisplay +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetWindowBounds(ref int pnX, ref int pnY, ref uint pnWidth, ref uint pnHeight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetWindowBounds GetWindowBounds; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetEyeOutputViewport(EVREye eEye, ref uint pnX, ref uint pnY, ref uint pnWidth, ref uint pnHeight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetEyeOutputViewport GetEyeOutputViewport; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetDXGIOutputInfo(ref int pnAdapterIndex, ref int pnAdapterOutputIndex); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDXGIOutputInfo GetDXGIOutputInfo; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRTrackedCamera +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetCameraErrorNameFromEnum(EVRTrackedCameraError eCameraError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCameraErrorNameFromEnum GetCameraErrorNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _HasCamera(uint nDeviceIndex, ref bool pHasCamera); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _HasCamera HasCamera; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _GetCameraFrameSize(uint nDeviceIndex, EVRTrackedCameraFrameType eFrameType, ref uint pnWidth, ref uint pnHeight, ref uint pnFrameBufferSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCameraFrameSize GetCameraFrameSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _GetCameraIntrinsics(uint nDeviceIndex, uint nCameraIndex, EVRTrackedCameraFrameType eFrameType, ref HmdVector2_t pFocalLength, ref HmdVector2_t pCenter); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCameraIntrinsics GetCameraIntrinsics; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _GetCameraProjection(uint nDeviceIndex, uint nCameraIndex, EVRTrackedCameraFrameType eFrameType, float flZNear, float flZFar, ref HmdMatrix44_t pProjection); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCameraProjection GetCameraProjection; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _AcquireVideoStreamingService(uint nDeviceIndex, ref ulong pHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _AcquireVideoStreamingService AcquireVideoStreamingService; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _ReleaseVideoStreamingService(ulong hTrackedCamera); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReleaseVideoStreamingService ReleaseVideoStreamingService; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _GetVideoStreamFrameBuffer(ulong hTrackedCamera, EVRTrackedCameraFrameType eFrameType, IntPtr pFrameBuffer, uint nFrameBufferSize, ref CameraVideoStreamFrameHeader_t pFrameHeader, uint nFrameHeaderSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetVideoStreamFrameBuffer GetVideoStreamFrameBuffer; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _GetVideoStreamTextureSize(uint nDeviceIndex, EVRTrackedCameraFrameType eFrameType, ref VRTextureBounds_t pTextureBounds, ref uint pnWidth, ref uint pnHeight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetVideoStreamTextureSize GetVideoStreamTextureSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _GetVideoStreamTextureD3D11(ulong hTrackedCamera, EVRTrackedCameraFrameType eFrameType, IntPtr pD3D11DeviceOrResource, ref IntPtr ppD3D11ShaderResourceView, ref CameraVideoStreamFrameHeader_t pFrameHeader, uint nFrameHeaderSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetVideoStreamTextureD3D11 GetVideoStreamTextureD3D11; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _GetVideoStreamTextureGL(ulong hTrackedCamera, EVRTrackedCameraFrameType eFrameType, ref uint pglTextureId, ref CameraVideoStreamFrameHeader_t pFrameHeader, uint nFrameHeaderSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetVideoStreamTextureGL GetVideoStreamTextureGL; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRTrackedCameraError _ReleaseVideoStreamTextureGL(ulong hTrackedCamera, uint glTextureId); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReleaseVideoStreamTextureGL ReleaseVideoStreamTextureGL; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetCameraTrackingSpace(ETrackingUniverseOrigin eUniverse); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetCameraTrackingSpace SetCameraTrackingSpace; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackingUniverseOrigin _GetCameraTrackingSpace(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCameraTrackingSpace GetCameraTrackingSpace; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRApplications +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _AddApplicationManifest(IntPtr pchApplicationManifestFullPath, bool bTemporary); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _AddApplicationManifest AddApplicationManifest; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _RemoveApplicationManifest(IntPtr pchApplicationManifestFullPath); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _RemoveApplicationManifest RemoveApplicationManifest; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _IsApplicationInstalled(IntPtr pchAppKey); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsApplicationInstalled IsApplicationInstalled; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetApplicationCount(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationCount GetApplicationCount; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _GetApplicationKeyByIndex(uint unApplicationIndex, System.Text.StringBuilder pchAppKeyBuffer, uint unAppKeyBufferLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationKeyByIndex GetApplicationKeyByIndex; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _GetApplicationKeyByProcessId(uint unProcessId, System.Text.StringBuilder pchAppKeyBuffer, uint unAppKeyBufferLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationKeyByProcessId GetApplicationKeyByProcessId; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _LaunchApplication(IntPtr pchAppKey); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LaunchApplication LaunchApplication; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _LaunchTemplateApplication(IntPtr pchTemplateAppKey, IntPtr pchNewAppKey, [In, Out] AppOverrideKeys_t[] pKeys, uint unKeys); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LaunchTemplateApplication LaunchTemplateApplication; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _LaunchApplicationFromMimeType(IntPtr pchMimeType, IntPtr pchArgs); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LaunchApplicationFromMimeType LaunchApplicationFromMimeType; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _LaunchDashboardOverlay(IntPtr pchAppKey); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LaunchDashboardOverlay LaunchDashboardOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _CancelApplicationLaunch(IntPtr pchAppKey); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CancelApplicationLaunch CancelApplicationLaunch; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _IdentifyApplication(uint unProcessId, IntPtr pchAppKey); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IdentifyApplication IdentifyApplication; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetApplicationProcessId(IntPtr pchAppKey); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationProcessId GetApplicationProcessId; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetApplicationsErrorNameFromEnum(EVRApplicationError error); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationsErrorNameFromEnum GetApplicationsErrorNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetApplicationPropertyString(IntPtr pchAppKey, EVRApplicationProperty eProperty, System.Text.StringBuilder pchPropertyValueBuffer, uint unPropertyValueBufferLen, ref EVRApplicationError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationPropertyString GetApplicationPropertyString; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetApplicationPropertyBool(IntPtr pchAppKey, EVRApplicationProperty eProperty, ref EVRApplicationError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationPropertyBool GetApplicationPropertyBool; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ulong _GetApplicationPropertyUint64(IntPtr pchAppKey, EVRApplicationProperty eProperty, ref EVRApplicationError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationPropertyUint64 GetApplicationPropertyUint64; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _SetApplicationAutoLaunch(IntPtr pchAppKey, bool bAutoLaunch); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetApplicationAutoLaunch SetApplicationAutoLaunch; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetApplicationAutoLaunch(IntPtr pchAppKey); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationAutoLaunch GetApplicationAutoLaunch; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _SetDefaultApplicationForMimeType(IntPtr pchAppKey, IntPtr pchMimeType); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetDefaultApplicationForMimeType SetDefaultApplicationForMimeType; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetDefaultApplicationForMimeType(IntPtr pchMimeType, System.Text.StringBuilder pchAppKeyBuffer, uint unAppKeyBufferLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDefaultApplicationForMimeType GetDefaultApplicationForMimeType; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetApplicationSupportedMimeTypes(IntPtr pchAppKey, System.Text.StringBuilder pchMimeTypesBuffer, uint unMimeTypesBuffer); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationSupportedMimeTypes GetApplicationSupportedMimeTypes; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetApplicationsThatSupportMimeType(IntPtr pchMimeType, System.Text.StringBuilder pchAppKeysThatSupportBuffer, uint unAppKeysThatSupportBuffer); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationsThatSupportMimeType GetApplicationsThatSupportMimeType; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetApplicationLaunchArguments(uint unHandle, System.Text.StringBuilder pchArgs, uint unArgs); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetApplicationLaunchArguments GetApplicationLaunchArguments; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _GetStartingApplication(System.Text.StringBuilder pchAppKeyBuffer, uint unAppKeyBufferLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetStartingApplication GetStartingApplication; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRSceneApplicationState _GetSceneApplicationState(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSceneApplicationState GetSceneApplicationState; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _PerformApplicationPrelaunchCheck(IntPtr pchAppKey); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _PerformApplicationPrelaunchCheck PerformApplicationPrelaunchCheck; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetSceneApplicationStateNameFromEnum(EVRSceneApplicationState state); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSceneApplicationStateNameFromEnum GetSceneApplicationStateNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRApplicationError _LaunchInternalProcess(IntPtr pchBinaryPath, IntPtr pchArguments, IntPtr pchWorkingDirectory); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LaunchInternalProcess LaunchInternalProcess; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetCurrentSceneProcessId(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCurrentSceneProcessId GetCurrentSceneProcessId; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRChaperone +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ChaperoneCalibrationState _GetCalibrationState(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCalibrationState GetCalibrationState; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetPlayAreaSize(ref float pSizeX, ref float pSizeZ); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetPlayAreaSize GetPlayAreaSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetPlayAreaRect(ref HmdQuad_t rect); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetPlayAreaRect GetPlayAreaRect; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ReloadInfo(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReloadInfo ReloadInfo; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetSceneColor(HmdColor_t color); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetSceneColor SetSceneColor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetBoundsColor(ref HmdColor_t pOutputColorArray, int nNumOutputColors, float flCollisionBoundsFadeDistance, ref HmdColor_t pOutputCameraColor); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetBoundsColor GetBoundsColor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _AreBoundsVisible(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _AreBoundsVisible AreBoundsVisible; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ForceBoundsVisible(bool bForce); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ForceBoundsVisible ForceBoundsVisible; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ResetZeroPose(ETrackingUniverseOrigin eTrackingUniverseOrigin); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ResetZeroPose ResetZeroPose; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRChaperoneSetup +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _CommitWorkingCopy(EChaperoneConfigFile configFile); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CommitWorkingCopy CommitWorkingCopy; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _RevertWorkingCopy(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _RevertWorkingCopy RevertWorkingCopy; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetWorkingPlayAreaSize(ref float pSizeX, ref float pSizeZ); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetWorkingPlayAreaSize GetWorkingPlayAreaSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetWorkingPlayAreaRect(ref HmdQuad_t rect); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetWorkingPlayAreaRect GetWorkingPlayAreaRect; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetWorkingCollisionBoundsInfo([In, Out] HmdQuad_t[] pQuadsBuffer, ref uint punQuadsCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetWorkingCollisionBoundsInfo GetWorkingCollisionBoundsInfo; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetLiveCollisionBoundsInfo([In, Out] HmdQuad_t[] pQuadsBuffer, ref uint punQuadsCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetLiveCollisionBoundsInfo GetLiveCollisionBoundsInfo; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetWorkingSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatSeatedZeroPoseToRawTrackingPose); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetWorkingSeatedZeroPoseToRawTrackingPose GetWorkingSeatedZeroPoseToRawTrackingPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetWorkingStandingZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatStandingZeroPoseToRawTrackingPose); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetWorkingStandingZeroPoseToRawTrackingPose GetWorkingStandingZeroPoseToRawTrackingPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetWorkingPlayAreaSize(float sizeX, float sizeZ); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetWorkingPlayAreaSize SetWorkingPlayAreaSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetWorkingCollisionBoundsInfo([In, Out] HmdQuad_t[] pQuadsBuffer, uint unQuadsCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetWorkingCollisionBoundsInfo SetWorkingCollisionBoundsInfo; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetWorkingPerimeter([In, Out] HmdVector2_t[] pPointBuffer, uint unPointCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetWorkingPerimeter SetWorkingPerimeter; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetWorkingSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pMatSeatedZeroPoseToRawTrackingPose); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetWorkingSeatedZeroPoseToRawTrackingPose SetWorkingSeatedZeroPoseToRawTrackingPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetWorkingStandingZeroPoseToRawTrackingPose(ref HmdMatrix34_t pMatStandingZeroPoseToRawTrackingPose); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetWorkingStandingZeroPoseToRawTrackingPose SetWorkingStandingZeroPoseToRawTrackingPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ReloadFromDisk(EChaperoneConfigFile configFile); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReloadFromDisk ReloadFromDisk; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetLiveSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatSeatedZeroPoseToRawTrackingPose); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetLiveSeatedZeroPoseToRawTrackingPose GetLiveSeatedZeroPoseToRawTrackingPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _ExportLiveToBuffer(System.Text.StringBuilder pBuffer, ref uint pnBufferLength); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ExportLiveToBuffer ExportLiveToBuffer; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _ImportFromBufferToWorking(IntPtr pBuffer, uint nImportFlags); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ImportFromBufferToWorking ImportFromBufferToWorking; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ShowWorkingSetPreview(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowWorkingSetPreview ShowWorkingSetPreview; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _HideWorkingSetPreview(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _HideWorkingSetPreview HideWorkingSetPreview; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _RoomSetupStarting(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _RoomSetupStarting RoomSetupStarting; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRCompositor +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetTrackingSpace(ETrackingUniverseOrigin eOrigin); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetTrackingSpace SetTrackingSpace; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackingUniverseOrigin _GetTrackingSpace(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetTrackingSpace GetTrackingSpace; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _WaitGetPoses([In, Out] TrackedDevicePose_t[] pRenderPoseArray, uint unRenderPoseArrayCount, [In, Out] TrackedDevicePose_t[] pGamePoseArray, uint unGamePoseArrayCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _WaitGetPoses WaitGetPoses; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _GetLastPoses([In, Out] TrackedDevicePose_t[] pRenderPoseArray, uint unRenderPoseArrayCount, [In, Out] TrackedDevicePose_t[] pGamePoseArray, uint unGamePoseArrayCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetLastPoses GetLastPoses; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _GetLastPoseForTrackedDeviceIndex(uint unDeviceIndex, ref TrackedDevicePose_t pOutputPose, ref TrackedDevicePose_t pOutputGamePose); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetLastPoseForTrackedDeviceIndex GetLastPoseForTrackedDeviceIndex; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _Submit(EVREye eEye, ref Texture_t pTexture, ref VRTextureBounds_t pBounds, EVRSubmitFlags nSubmitFlags); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _Submit Submit; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ClearLastSubmittedFrame(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ClearLastSubmittedFrame ClearLastSubmittedFrame; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _PostPresentHandoff(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _PostPresentHandoff PostPresentHandoff; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetFrameTiming(ref Compositor_FrameTiming pTiming, uint unFramesAgo); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetFrameTiming GetFrameTiming; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetFrameTimings([In, Out] Compositor_FrameTiming[] pTiming, uint nFrames); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetFrameTimings GetFrameTimings; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate float _GetFrameTimeRemaining(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetFrameTimeRemaining GetFrameTimeRemaining; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetCumulativeStats(ref Compositor_CumulativeStats pStats, uint nStatsSizeInBytes); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCumulativeStats GetCumulativeStats; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _FadeToColor(float fSeconds, float fRed, float fGreen, float fBlue, float fAlpha, bool bBackground); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _FadeToColor FadeToColor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate HmdColor_t _GetCurrentFadeColor(bool bBackground); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCurrentFadeColor GetCurrentFadeColor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _FadeGrid(float fSeconds, bool bFadeGridIn); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _FadeGrid FadeGrid; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate float _GetCurrentGridAlpha(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCurrentGridAlpha GetCurrentGridAlpha; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _SetSkyboxOverride([In, Out] Texture_t[] pTextures, uint unTextureCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetSkyboxOverride SetSkyboxOverride; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ClearSkyboxOverride(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ClearSkyboxOverride ClearSkyboxOverride; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _CompositorBringToFront(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CompositorBringToFront CompositorBringToFront; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _CompositorGoToBack(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CompositorGoToBack CompositorGoToBack; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _CompositorQuit(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CompositorQuit CompositorQuit; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _IsFullscreen(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsFullscreen IsFullscreen; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetCurrentSceneFocusProcess(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCurrentSceneFocusProcess GetCurrentSceneFocusProcess; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetLastFrameRenderer(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetLastFrameRenderer GetLastFrameRenderer; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _CanRenderScene(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CanRenderScene CanRenderScene; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ShowMirrorWindow(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowMirrorWindow ShowMirrorWindow; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _HideMirrorWindow(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _HideMirrorWindow HideMirrorWindow; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _IsMirrorWindowVisible(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsMirrorWindowVisible IsMirrorWindowVisible; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _CompositorDumpImages(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CompositorDumpImages CompositorDumpImages; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _ShouldAppRenderWithLowResources(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShouldAppRenderWithLowResources ShouldAppRenderWithLowResources; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ForceInterleavedReprojectionOn(bool bOverride); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ForceInterleavedReprojectionOn ForceInterleavedReprojectionOn; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ForceReconnectProcess(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ForceReconnectProcess ForceReconnectProcess; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SuspendRendering(bool bSuspend); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SuspendRendering SuspendRendering; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _GetMirrorTextureD3D11(EVREye eEye, IntPtr pD3D11DeviceOrResource, ref IntPtr ppD3D11ShaderResourceView); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetMirrorTextureD3D11 GetMirrorTextureD3D11; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ReleaseMirrorTextureD3D11(IntPtr pD3D11ShaderResourceView); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReleaseMirrorTextureD3D11 ReleaseMirrorTextureD3D11; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _GetMirrorTextureGL(EVREye eEye, ref uint pglTextureId, IntPtr pglSharedTextureHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetMirrorTextureGL GetMirrorTextureGL; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _ReleaseSharedGLTexture(uint glTextureId, IntPtr glSharedTextureHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReleaseSharedGLTexture ReleaseSharedGLTexture; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _LockGLSharedTextureForAccess(IntPtr glSharedTextureHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LockGLSharedTextureForAccess LockGLSharedTextureForAccess; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _UnlockGLSharedTextureForAccess(IntPtr glSharedTextureHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _UnlockGLSharedTextureForAccess UnlockGLSharedTextureForAccess; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetVulkanInstanceExtensionsRequired(System.Text.StringBuilder pchValue, uint unBufferSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetVulkanInstanceExtensionsRequired GetVulkanInstanceExtensionsRequired; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetVulkanDeviceExtensionsRequired(IntPtr pPhysicalDevice, System.Text.StringBuilder pchValue, uint unBufferSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetVulkanDeviceExtensionsRequired GetVulkanDeviceExtensionsRequired; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetExplicitTimingMode(EVRCompositorTimingMode eTimingMode); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetExplicitTimingMode SetExplicitTimingMode; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _SubmitExplicitTimingData(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SubmitExplicitTimingData SubmitExplicitTimingData; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _IsMotionSmoothingEnabled(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsMotionSmoothingEnabled IsMotionSmoothingEnabled; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _IsMotionSmoothingSupported(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsMotionSmoothingSupported IsMotionSmoothingSupported; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _IsCurrentSceneFocusAppLoading(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsCurrentSceneFocusAppLoading IsCurrentSceneFocusAppLoading; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _SetStageOverride_Async(IntPtr pchRenderModelPath, ref HmdMatrix34_t pTransform, ref Compositor_StageRenderSettings pRenderSettings, uint nSizeOfRenderSettings); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetStageOverride_Async SetStageOverride_Async; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ClearStageOverride(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ClearStageOverride ClearStageOverride; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetCompositorBenchmarkResults(ref Compositor_BenchmarkResults pBenchmarkResults, uint nSizeOfBenchmarkResults); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetCompositorBenchmarkResults GetCompositorBenchmarkResults; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _GetLastPosePredictionIDs(ref uint pRenderPosePredictionID, ref uint pGamePosePredictionID); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetLastPosePredictionIDs GetLastPosePredictionIDs; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRCompositorError _GetPosesForFrame(uint unPosePredictionID, [In, Out] TrackedDevicePose_t[] pPoseArray, uint unPoseArrayCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetPosesForFrame GetPosesForFrame; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVROverlay +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _FindOverlay(IntPtr pchOverlayKey, ref ulong pOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _FindOverlay FindOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _CreateOverlay(IntPtr pchOverlayKey, IntPtr pchOverlayName, ref ulong pOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CreateOverlay CreateOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _DestroyOverlay(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _DestroyOverlay DestroyOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetOverlayKey(ulong ulOverlayHandle, System.Text.StringBuilder pchValue, uint unBufferSize, ref EVROverlayError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayKey GetOverlayKey; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetOverlayName(ulong ulOverlayHandle, System.Text.StringBuilder pchValue, uint unBufferSize, ref EVROverlayError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayName GetOverlayName; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayName(ulong ulOverlayHandle, IntPtr pchName); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayName SetOverlayName; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayImageData(ulong ulOverlayHandle, IntPtr pvBuffer, uint unBufferSize, ref uint punWidth, ref uint punHeight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayImageData GetOverlayImageData; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetOverlayErrorNameFromEnum(EVROverlayError error); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayErrorNameFromEnum GetOverlayErrorNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayRenderingPid(ulong ulOverlayHandle, uint unPID); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayRenderingPid SetOverlayRenderingPid; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetOverlayRenderingPid(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayRenderingPid GetOverlayRenderingPid; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayFlag(ulong ulOverlayHandle, VROverlayFlags eOverlayFlag, bool bEnabled); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayFlag SetOverlayFlag; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayFlag(ulong ulOverlayHandle, VROverlayFlags eOverlayFlag, ref bool pbEnabled); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayFlag GetOverlayFlag; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayFlags(ulong ulOverlayHandle, ref uint pFlags); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayFlags GetOverlayFlags; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayColor(ulong ulOverlayHandle, float fRed, float fGreen, float fBlue); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayColor SetOverlayColor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayColor(ulong ulOverlayHandle, ref float pfRed, ref float pfGreen, ref float pfBlue); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayColor GetOverlayColor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayAlpha(ulong ulOverlayHandle, float fAlpha); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayAlpha SetOverlayAlpha; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayAlpha(ulong ulOverlayHandle, ref float pfAlpha); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayAlpha GetOverlayAlpha; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTexelAspect(ulong ulOverlayHandle, float fTexelAspect); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTexelAspect SetOverlayTexelAspect; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTexelAspect(ulong ulOverlayHandle, ref float pfTexelAspect); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTexelAspect GetOverlayTexelAspect; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlaySortOrder(ulong ulOverlayHandle, uint unSortOrder); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlaySortOrder SetOverlaySortOrder; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlaySortOrder(ulong ulOverlayHandle, ref uint punSortOrder); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlaySortOrder GetOverlaySortOrder; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayWidthInMeters(ulong ulOverlayHandle, float fWidthInMeters); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayWidthInMeters SetOverlayWidthInMeters; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayWidthInMeters(ulong ulOverlayHandle, ref float pfWidthInMeters); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayWidthInMeters GetOverlayWidthInMeters; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayCurvature(ulong ulOverlayHandle, float fCurvature); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayCurvature SetOverlayCurvature; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayCurvature(ulong ulOverlayHandle, ref float pfCurvature); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayCurvature GetOverlayCurvature; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTextureColorSpace(ulong ulOverlayHandle, EColorSpace eTextureColorSpace); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTextureColorSpace SetOverlayTextureColorSpace; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTextureColorSpace(ulong ulOverlayHandle, ref EColorSpace peTextureColorSpace); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTextureColorSpace GetOverlayTextureColorSpace; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTextureBounds(ulong ulOverlayHandle, ref VRTextureBounds_t pOverlayTextureBounds); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTextureBounds SetOverlayTextureBounds; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTextureBounds(ulong ulOverlayHandle, ref VRTextureBounds_t pOverlayTextureBounds); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTextureBounds GetOverlayTextureBounds; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTransformType(ulong ulOverlayHandle, ref VROverlayTransformType peTransformType); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTransformType GetOverlayTransformType; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTransformAbsolute(ulong ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTransformAbsolute SetOverlayTransformAbsolute; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTransformAbsolute(ulong ulOverlayHandle, ref ETrackingUniverseOrigin peTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTransformAbsolute GetOverlayTransformAbsolute; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTransformTrackedDeviceRelative(ulong ulOverlayHandle, uint unTrackedDevice, ref HmdMatrix34_t pmatTrackedDeviceToOverlayTransform); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTransformTrackedDeviceRelative SetOverlayTransformTrackedDeviceRelative; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTransformTrackedDeviceRelative(ulong ulOverlayHandle, ref uint punTrackedDevice, ref HmdMatrix34_t pmatTrackedDeviceToOverlayTransform); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTransformTrackedDeviceRelative GetOverlayTransformTrackedDeviceRelative; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTransformTrackedDeviceComponent(ulong ulOverlayHandle, uint unDeviceIndex, IntPtr pchComponentName); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTransformTrackedDeviceComponent SetOverlayTransformTrackedDeviceComponent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTransformTrackedDeviceComponent(ulong ulOverlayHandle, ref uint punDeviceIndex, System.Text.StringBuilder pchComponentName, uint unComponentNameSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTransformTrackedDeviceComponent GetOverlayTransformTrackedDeviceComponent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTransformOverlayRelative(ulong ulOverlayHandle, ref ulong ulOverlayHandleParent, ref HmdMatrix34_t pmatParentOverlayToOverlayTransform); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTransformOverlayRelative GetOverlayTransformOverlayRelative; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTransformOverlayRelative(ulong ulOverlayHandle, ulong ulOverlayHandleParent, ref HmdMatrix34_t pmatParentOverlayToOverlayTransform); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTransformOverlayRelative SetOverlayTransformOverlayRelative; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTransformCursor(ulong ulCursorOverlayHandle, ref HmdVector2_t pvHotspot); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTransformCursor SetOverlayTransformCursor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTransformCursor(ulong ulOverlayHandle, ref HmdVector2_t pvHotspot); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTransformCursor GetOverlayTransformCursor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTransformProjection(ulong ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform, ref VROverlayProjection_t pProjection, EVREye eEye); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTransformProjection SetOverlayTransformProjection; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _ShowOverlay(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowOverlay ShowOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _HideOverlay(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _HideOverlay HideOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _IsOverlayVisible(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsOverlayVisible IsOverlayVisible; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetTransformForOverlayCoordinates(ulong ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, HmdVector2_t coordinatesInOverlay, ref HmdMatrix34_t pmatTransform); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetTransformForOverlayCoordinates GetTransformForOverlayCoordinates; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _PollNextOverlayEvent(ulong ulOverlayHandle, ref VREvent_t pEvent, uint uncbVREvent); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _PollNextOverlayEvent PollNextOverlayEvent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayInputMethod(ulong ulOverlayHandle, ref VROverlayInputMethod peInputMethod); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayInputMethod GetOverlayInputMethod; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayInputMethod(ulong ulOverlayHandle, VROverlayInputMethod eInputMethod); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayInputMethod SetOverlayInputMethod; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayMouseScale(ulong ulOverlayHandle, ref HmdVector2_t pvecMouseScale); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayMouseScale GetOverlayMouseScale; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayMouseScale(ulong ulOverlayHandle, ref HmdVector2_t pvecMouseScale); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayMouseScale SetOverlayMouseScale; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _ComputeOverlayIntersection(ulong ulOverlayHandle, ref VROverlayIntersectionParams_t pParams, ref VROverlayIntersectionResults_t pResults); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ComputeOverlayIntersection ComputeOverlayIntersection; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _IsHoverTargetOverlay(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsHoverTargetOverlay IsHoverTargetOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayIntersectionMask(ulong ulOverlayHandle, ref VROverlayIntersectionMaskPrimitive_t pMaskPrimitives, uint unNumMaskPrimitives, uint unPrimitiveSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayIntersectionMask SetOverlayIntersectionMask; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _TriggerLaserMouseHapticVibration(ulong ulOverlayHandle, float fDurationSeconds, float fFrequency, float fAmplitude); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _TriggerLaserMouseHapticVibration TriggerLaserMouseHapticVibration; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayCursor(ulong ulOverlayHandle, ulong ulCursorHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayCursor SetOverlayCursor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayCursorPositionOverride(ulong ulOverlayHandle, ref HmdVector2_t pvCursor); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayCursorPositionOverride SetOverlayCursorPositionOverride; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _ClearOverlayCursorPositionOverride(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ClearOverlayCursorPositionOverride ClearOverlayCursorPositionOverride; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayTexture(ulong ulOverlayHandle, ref Texture_t pTexture); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayTexture SetOverlayTexture; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _ClearOverlayTexture(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ClearOverlayTexture ClearOverlayTexture; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayRaw(ulong ulOverlayHandle, IntPtr pvBuffer, uint unWidth, uint unHeight, uint unBytesPerPixel); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayRaw SetOverlayRaw; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetOverlayFromFile(ulong ulOverlayHandle, IntPtr pchFilePath); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetOverlayFromFile SetOverlayFromFile; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTexture(ulong ulOverlayHandle, ref IntPtr pNativeTextureHandle, IntPtr pNativeTextureRef, ref uint pWidth, ref uint pHeight, ref uint pNativeFormat, ref ETextureType pAPIType, ref EColorSpace pColorSpace, ref VRTextureBounds_t pTextureBounds); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTexture GetOverlayTexture; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _ReleaseNativeOverlayHandle(ulong ulOverlayHandle, IntPtr pNativeTextureHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReleaseNativeOverlayHandle ReleaseNativeOverlayHandle; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetOverlayTextureSize(ulong ulOverlayHandle, ref uint pWidth, ref uint pHeight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOverlayTextureSize GetOverlayTextureSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _CreateDashboardOverlay(IntPtr pchOverlayKey, IntPtr pchOverlayFriendlyName, ref ulong pMainHandle, ref ulong pThumbnailHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CreateDashboardOverlay CreateDashboardOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _IsDashboardVisible(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsDashboardVisible IsDashboardVisible; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _IsActiveDashboardOverlay(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsActiveDashboardOverlay IsActiveDashboardOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _SetDashboardOverlaySceneProcess(ulong ulOverlayHandle, uint unProcessId); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetDashboardOverlaySceneProcess SetDashboardOverlaySceneProcess; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _GetDashboardOverlaySceneProcess(ulong ulOverlayHandle, ref uint punProcessId); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDashboardOverlaySceneProcess GetDashboardOverlaySceneProcess; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _ShowDashboard(IntPtr pchOverlayToShow); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowDashboard ShowDashboard; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetPrimaryDashboardDevice(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetPrimaryDashboardDevice GetPrimaryDashboardDevice; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _ShowKeyboard(int eInputMode, int eLineInputMode, uint unFlags, IntPtr pchDescription, uint unCharMax, IntPtr pchExistingText, ulong uUserValue); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowKeyboard ShowKeyboard; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _ShowKeyboardForOverlay(ulong ulOverlayHandle, int eInputMode, int eLineInputMode, uint unFlags, IntPtr pchDescription, uint unCharMax, IntPtr pchExistingText, ulong uUserValue); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowKeyboardForOverlay ShowKeyboardForOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetKeyboardText(System.Text.StringBuilder pchText, uint cchText); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetKeyboardText GetKeyboardText; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _HideKeyboard(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _HideKeyboard HideKeyboard; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetKeyboardTransformAbsolute(ETrackingUniverseOrigin eTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToKeyboardTransform); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetKeyboardTransformAbsolute SetKeyboardTransformAbsolute; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetKeyboardPositionForOverlay(ulong ulOverlayHandle, HmdRect2_t avoidRect); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetKeyboardPositionForOverlay SetKeyboardPositionForOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate VRMessageOverlayResponse _ShowMessageOverlay(IntPtr pchText, IntPtr pchCaption, IntPtr pchButton0Text, IntPtr pchButton1Text, IntPtr pchButton2Text, IntPtr pchButton3Text); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowMessageOverlay ShowMessageOverlay; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _CloseMessageOverlay(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CloseMessageOverlay CloseMessageOverlay; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVROverlayView +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _AcquireOverlayView(ulong ulOverlayHandle, ref VRNativeDevice_t pNativeDevice, ref VROverlayView_t pOverlayView, uint unOverlayViewSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _AcquireOverlayView AcquireOverlayView; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVROverlayError _ReleaseOverlayView(ref VROverlayView_t pOverlayView); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReleaseOverlayView ReleaseOverlayView; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _PostOverlayEvent(ulong ulOverlayHandle, ref VREvent_t pvrEvent); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _PostOverlayEvent PostOverlayEvent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _IsViewingPermitted(ulong ulOverlayHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsViewingPermitted IsViewingPermitted; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRHeadsetView +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetHeadsetViewSize(uint nWidth, uint nHeight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetHeadsetViewSize SetHeadsetViewSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetHeadsetViewSize(ref uint pnWidth, ref uint pnHeight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetHeadsetViewSize GetHeadsetViewSize; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetHeadsetViewMode(uint eHeadsetViewMode); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetHeadsetViewMode SetHeadsetViewMode; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetHeadsetViewMode(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetHeadsetViewMode GetHeadsetViewMode; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetHeadsetViewCropped(bool bCropped); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetHeadsetViewCropped SetHeadsetViewCropped; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetHeadsetViewCropped(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetHeadsetViewCropped GetHeadsetViewCropped; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate float _GetHeadsetViewAspectRatio(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetHeadsetViewAspectRatio GetHeadsetViewAspectRatio; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetHeadsetViewBlendRange(float flStartPct, float flEndPct); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetHeadsetViewBlendRange SetHeadsetViewBlendRange; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetHeadsetViewBlendRange(ref float pStartPct, ref float pEndPct); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetHeadsetViewBlendRange GetHeadsetViewBlendRange; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRRenderModels +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRRenderModelError _LoadRenderModel_Async(IntPtr pchRenderModelName, ref IntPtr ppRenderModel); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LoadRenderModel_Async LoadRenderModel_Async; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _FreeRenderModel(IntPtr pRenderModel); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _FreeRenderModel FreeRenderModel; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRRenderModelError _LoadTexture_Async(int textureId, ref IntPtr ppTexture); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LoadTexture_Async LoadTexture_Async; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _FreeTexture(IntPtr pTexture); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _FreeTexture FreeTexture; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRRenderModelError _LoadTextureD3D11_Async(int textureId, IntPtr pD3D11Device, ref IntPtr ppD3D11Texture2D); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LoadTextureD3D11_Async LoadTextureD3D11_Async; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRRenderModelError _LoadIntoTextureD3D11_Async(int textureId, IntPtr pDstTexture); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LoadIntoTextureD3D11_Async LoadIntoTextureD3D11_Async; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _FreeTextureD3D11(IntPtr pD3D11Texture2D); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _FreeTextureD3D11 FreeTextureD3D11; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetRenderModelName(uint unRenderModelIndex, System.Text.StringBuilder pchRenderModelName, uint unRenderModelNameLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetRenderModelName GetRenderModelName; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetRenderModelCount(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetRenderModelCount GetRenderModelCount; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetComponentCount(IntPtr pchRenderModelName); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetComponentCount GetComponentCount; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetComponentName(IntPtr pchRenderModelName, uint unComponentIndex, System.Text.StringBuilder pchComponentName, uint unComponentNameLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetComponentName GetComponentName; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ulong _GetComponentButtonMask(IntPtr pchRenderModelName, IntPtr pchComponentName); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetComponentButtonMask GetComponentButtonMask; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetComponentRenderModelName(IntPtr pchRenderModelName, IntPtr pchComponentName, System.Text.StringBuilder pchComponentRenderModelName, uint unComponentRenderModelNameLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetComponentRenderModelName GetComponentRenderModelName; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetComponentStateForDevicePath(IntPtr pchRenderModelName, IntPtr pchComponentName, ulong devicePath, ref RenderModel_ControllerMode_State_t pState, ref RenderModel_ComponentState_t pComponentState); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetComponentStateForDevicePath GetComponentStateForDevicePath; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetComponentState(IntPtr pchRenderModelName, IntPtr pchComponentName, ref VRControllerState_t pControllerState, ref RenderModel_ControllerMode_State_t pState, ref RenderModel_ComponentState_t pComponentState); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetComponentState GetComponentState; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _RenderModelHasComponent(IntPtr pchRenderModelName, IntPtr pchComponentName); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _RenderModelHasComponent RenderModelHasComponent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetRenderModelThumbnailURL(IntPtr pchRenderModelName, System.Text.StringBuilder pchThumbnailURL, uint unThumbnailURLLen, ref EVRRenderModelError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetRenderModelThumbnailURL GetRenderModelThumbnailURL; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetRenderModelOriginalPath(IntPtr pchRenderModelName, System.Text.StringBuilder pchOriginalPath, uint unOriginalPathLen, ref EVRRenderModelError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetRenderModelOriginalPath GetRenderModelOriginalPath; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetRenderModelErrorNameFromEnum(EVRRenderModelError error); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetRenderModelErrorNameFromEnum GetRenderModelErrorNameFromEnum; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRNotifications +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRNotificationError _CreateNotification(ulong ulOverlayHandle, ulong ulUserValue, EVRNotificationType type, IntPtr pchText, EVRNotificationStyle style, ref NotificationBitmap_t pImage, ref uint pNotificationId); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CreateNotification CreateNotification; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRNotificationError _RemoveNotification(uint notificationId); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _RemoveNotification RemoveNotification; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRSettings +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetSettingsErrorNameFromEnum(EVRSettingsError eError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSettingsErrorNameFromEnum GetSettingsErrorNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetBool(IntPtr pchSection, IntPtr pchSettingsKey, bool bValue, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetBool SetBool; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetInt32(IntPtr pchSection, IntPtr pchSettingsKey, int nValue, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetInt32 SetInt32; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetFloat(IntPtr pchSection, IntPtr pchSettingsKey, float flValue, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetFloat SetFloat; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _SetString(IntPtr pchSection, IntPtr pchSettingsKey, IntPtr pchValue, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetString SetString; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetBool(IntPtr pchSection, IntPtr pchSettingsKey, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetBool GetBool; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate int _GetInt32(IntPtr pchSection, IntPtr pchSettingsKey, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetInt32 GetInt32; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate float _GetFloat(IntPtr pchSection, IntPtr pchSettingsKey, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetFloat GetFloat; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _GetString(IntPtr pchSection, IntPtr pchSettingsKey, System.Text.StringBuilder pchValue, uint unValueLen, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetString GetString; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _RemoveSection(IntPtr pchSection, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _RemoveSection RemoveSection; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate void _RemoveKeyInSection(IntPtr pchSection, IntPtr pchSettingsKey, ref EVRSettingsError peError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _RemoveKeyInSection RemoveKeyInSection; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRScreenshots +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRScreenshotError _RequestScreenshot(ref uint pOutScreenshotHandle, EVRScreenshotType type, IntPtr pchPreviewFilename, IntPtr pchVRFilename); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _RequestScreenshot RequestScreenshot; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRScreenshotError _HookScreenshot([In, Out] EVRScreenshotType[] pSupportedTypes, int numTypes); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _HookScreenshot HookScreenshot; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRScreenshotType _GetScreenshotPropertyType(uint screenshotHandle, ref EVRScreenshotError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetScreenshotPropertyType GetScreenshotPropertyType; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetScreenshotPropertyFilename(uint screenshotHandle, EVRScreenshotPropertyFilenames filenameType, System.Text.StringBuilder pchFilename, uint cchFilename, ref EVRScreenshotError pError); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetScreenshotPropertyFilename GetScreenshotPropertyFilename; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRScreenshotError _UpdateScreenshotProgress(uint screenshotHandle, float flProgress); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _UpdateScreenshotProgress UpdateScreenshotProgress; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRScreenshotError _TakeStereoScreenshot(ref uint pOutScreenshotHandle, IntPtr pchPreviewFilename, IntPtr pchVRFilename); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _TakeStereoScreenshot TakeStereoScreenshot; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRScreenshotError _SubmitScreenshot(uint screenshotHandle, EVRScreenshotType type, IntPtr pchSourcePreviewFilename, IntPtr pchSourceVRFilename); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SubmitScreenshot SubmitScreenshot; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRResources +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _LoadSharedResource(IntPtr pchResourceName, string pchBuffer, uint unBufferLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _LoadSharedResource LoadSharedResource; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetResourceFullPath(IntPtr pchResourceName, IntPtr pchResourceTypeDirectory, System.Text.StringBuilder pchPathBuffer, uint unBufferLen); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetResourceFullPath GetResourceFullPath; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRDriverManager +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetDriverCount(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDriverCount GetDriverCount; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _GetDriverName(uint nDriver, System.Text.StringBuilder pchValue, uint unBufferSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDriverName GetDriverName; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ulong _GetDriverHandle(IntPtr pchDriverName); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDriverHandle GetDriverHandle; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _IsEnabled(uint nDriver); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsEnabled IsEnabled; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRInput +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _SetActionManifestPath(IntPtr pchActionManifestPath); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetActionManifestPath SetActionManifestPath; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetActionSetHandle(IntPtr pchActionSetName, ref ulong pHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetActionSetHandle GetActionSetHandle; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetActionHandle(IntPtr pchActionName, ref ulong pHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetActionHandle GetActionHandle; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetInputSourceHandle(IntPtr pchInputSourcePath, ref ulong pHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetInputSourceHandle GetInputSourceHandle; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _UpdateActionState([In, Out] VRActiveActionSet_t[] pSets, uint unSizeOfVRSelectedActionSet_t, uint unSetCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _UpdateActionState UpdateActionState; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetDigitalActionData(ulong action, ref InputDigitalActionData_t pActionData, uint unActionDataSize, ulong ulRestrictToDevice); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDigitalActionData GetDigitalActionData; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetAnalogActionData(ulong action, ref InputAnalogActionData_t pActionData, uint unActionDataSize, ulong ulRestrictToDevice); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetAnalogActionData GetAnalogActionData; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetPoseActionDataRelativeToNow(ulong action, ETrackingUniverseOrigin eOrigin, float fPredictedSecondsFromNow, ref InputPoseActionData_t pActionData, uint unActionDataSize, ulong ulRestrictToDevice); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetPoseActionDataRelativeToNow GetPoseActionDataRelativeToNow; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetPoseActionDataForNextFrame(ulong action, ETrackingUniverseOrigin eOrigin, ref InputPoseActionData_t pActionData, uint unActionDataSize, ulong ulRestrictToDevice); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetPoseActionDataForNextFrame GetPoseActionDataForNextFrame; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetSkeletalActionData(ulong action, ref InputSkeletalActionData_t pActionData, uint unActionDataSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSkeletalActionData GetSkeletalActionData; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetDominantHand(ref ETrackedControllerRole peDominantHand); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetDominantHand GetDominantHand; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _SetDominantHand(ETrackedControllerRole eDominantHand); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _SetDominantHand SetDominantHand; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetBoneCount(ulong action, ref uint pBoneCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetBoneCount GetBoneCount; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetBoneHierarchy(ulong action, [In, Out] int[] pParentIndices, uint unIndexArayCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetBoneHierarchy GetBoneHierarchy; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetBoneName(ulong action, int nBoneIndex, System.Text.StringBuilder pchBoneName, uint unNameBufferSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetBoneName GetBoneName; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetSkeletalReferenceTransforms(ulong action, EVRSkeletalTransformSpace eTransformSpace, EVRSkeletalReferencePose eReferencePose, [In, Out] VRBoneTransform_t[] pTransformArray, uint unTransformArrayCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSkeletalReferenceTransforms GetSkeletalReferenceTransforms; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetSkeletalTrackingLevel(ulong action, ref EVRSkeletalTrackingLevel pSkeletalTrackingLevel); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSkeletalTrackingLevel GetSkeletalTrackingLevel; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetSkeletalBoneData(ulong action, EVRSkeletalTransformSpace eTransformSpace, EVRSkeletalMotionRange eMotionRange, [In, Out] VRBoneTransform_t[] pTransformArray, uint unTransformArrayCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSkeletalBoneData GetSkeletalBoneData; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetSkeletalSummaryData(ulong action, EVRSummaryType eSummaryType, ref VRSkeletalSummaryData_t pSkeletalSummaryData); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSkeletalSummaryData GetSkeletalSummaryData; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetSkeletalBoneDataCompressed(ulong action, EVRSkeletalMotionRange eMotionRange, IntPtr pvCompressedData, uint unCompressedSize, ref uint punRequiredCompressedSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSkeletalBoneDataCompressed GetSkeletalBoneDataCompressed; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _DecompressSkeletalBoneData(IntPtr pvCompressedBuffer, uint unCompressedBufferSize, EVRSkeletalTransformSpace eTransformSpace, [In, Out] VRBoneTransform_t[] pTransformArray, uint unTransformArrayCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _DecompressSkeletalBoneData DecompressSkeletalBoneData; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _TriggerHapticVibrationAction(ulong action, float fStartSecondsFromNow, float fDurationSeconds, float fFrequency, float fAmplitude, ulong ulRestrictToDevice); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _TriggerHapticVibrationAction TriggerHapticVibrationAction; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetActionOrigins(ulong actionSetHandle, ulong digitalActionHandle, [In, Out] ulong[] originsOut, uint originOutCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetActionOrigins GetActionOrigins; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetOriginLocalizedName(ulong origin, System.Text.StringBuilder pchNameArray, uint unNameArraySize, int unStringSectionsToInclude); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOriginLocalizedName GetOriginLocalizedName; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetOriginTrackedDeviceInfo(ulong origin, ref InputOriginInfo_t pOriginInfo, uint unOriginInfoSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetOriginTrackedDeviceInfo GetOriginTrackedDeviceInfo; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetActionBindingInfo(ulong action, ref InputBindingInfo_t pOriginInfo, uint unBindingInfoSize, uint unBindingInfoCount, ref uint punReturnedBindingInfoCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetActionBindingInfo GetActionBindingInfo; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _ShowActionOrigins(ulong actionSetHandle, ulong ulActionHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowActionOrigins ShowActionOrigins; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _ShowBindingsForActionSet([In, Out] VRActiveActionSet_t[] pSets, uint unSizeOfVRSelectedActionSet_t, uint unSetCount, ulong originToHighlight); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ShowBindingsForActionSet ShowBindingsForActionSet; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetComponentStateForBinding(IntPtr pchRenderModelName, IntPtr pchComponentName, ref InputBindingInfo_t pOriginInfo, uint unBindingInfoSize, uint unBindingInfoCount, ref RenderModel_ComponentState_t pComponentState); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetComponentStateForBinding GetComponentStateForBinding; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _IsUsingLegacyInput(); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _IsUsingLegacyInput IsUsingLegacyInput; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _OpenBindingUI(IntPtr pchAppKey, ulong ulActionSetHandle, ulong ulDeviceHandle, bool bShowOnDesktop); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _OpenBindingUI OpenBindingUI; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRInputError _GetBindingVariant(ulong ulDevicePath, System.Text.StringBuilder pchVariantArray, uint unVariantArraySize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetBindingVariant GetBindingVariant; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRIOBuffer +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EIOBufferError _Open(IntPtr pchPath, EIOBufferMode mode, uint unElementSize, uint unElements, ref ulong pulBuffer); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _Open Open; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EIOBufferError _Close(ulong ulBuffer); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _Close Close; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EIOBufferError _Read(ulong ulBuffer, IntPtr pDst, uint unBytes, ref uint punRead); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _Read Read; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EIOBufferError _Write(ulong ulBuffer, IntPtr pSrc, uint unBytes); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _Write Write; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ulong _PropertyContainer(ulong ulBuffer); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _PropertyContainer PropertyContainer; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _HasReaders(ulong ulBuffer); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _HasReaders HasReaders; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRSpatialAnchors +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRSpatialAnchorError _CreateSpatialAnchorFromDescriptor(IntPtr pchDescriptor, ref uint pHandleOut); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CreateSpatialAnchorFromDescriptor CreateSpatialAnchorFromDescriptor; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRSpatialAnchorError _CreateSpatialAnchorFromPose(uint unDeviceIndex, ETrackingUniverseOrigin eOrigin, ref SpatialAnchorPose_t pPose, ref uint pHandleOut); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _CreateSpatialAnchorFromPose CreateSpatialAnchorFromPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRSpatialAnchorError _GetSpatialAnchorPose(uint unHandle, ETrackingUniverseOrigin eOrigin, ref SpatialAnchorPose_t pPoseOut); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSpatialAnchorPose GetSpatialAnchorPose; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRSpatialAnchorError _GetSpatialAnchorDescriptor(uint unHandle, System.Text.StringBuilder pchDescriptorOut, ref uint punDescriptorBufferLenInOut); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetSpatialAnchorDescriptor GetSpatialAnchorDescriptor; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRDebug +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRDebugError _EmitVrProfilerEvent(IntPtr pchMessage); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _EmitVrProfilerEvent EmitVrProfilerEvent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRDebugError _BeginVrProfilerEvent(ref ulong pHandleOut); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _BeginVrProfilerEvent BeginVrProfilerEvent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EVRDebugError _FinishVrProfilerEvent(ulong hHandle, IntPtr pchMessage); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _FinishVrProfilerEvent FinishVrProfilerEvent; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate uint _DriverDebugRequest(uint unDeviceIndex, IntPtr pchRequest, System.Text.StringBuilder pchResponseBuffer, uint unResponseBufferSize); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _DriverDebugRequest DriverDebugRequest; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRProperties +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackedPropertyError _ReadPropertyBatch(ulong ulContainerHandle, ref PropertyRead_t pBatch, uint unBatchEntryCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReadPropertyBatch ReadPropertyBatch; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackedPropertyError _WritePropertyBatch(ulong ulContainerHandle, ref PropertyWrite_t pBatch, uint unBatchEntryCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _WritePropertyBatch WritePropertyBatch; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate IntPtr _GetPropErrorNameFromEnum(ETrackedPropertyError error); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _GetPropErrorNameFromEnum GetPropErrorNameFromEnum; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ulong _TrackedDeviceToPropertyContainer(uint nDevice); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _TrackedDeviceToPropertyContainer TrackedDeviceToPropertyContainer; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRPaths +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackedPropertyError _ReadPathBatch(ulong ulRootHandle, ref PathRead_t pBatch, uint unBatchEntryCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReadPathBatch ReadPathBatch; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackedPropertyError _WritePathBatch(ulong ulRootHandle, ref PathWrite_t pBatch, uint unBatchEntryCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _WritePathBatch WritePathBatch; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackedPropertyError _StringToHandle(ref ulong pHandle, IntPtr pchPath); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _StringToHandle StringToHandle; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate ETrackedPropertyError _HandleToString(ulong pHandle, string pchBuffer, uint unBufferSize, ref uint punBufferSizeUsed); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _HandleToString HandleToString; + +} + +[StructLayout(LayoutKind.Sequential)] +public struct IVRBlockQueue +{ + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _Create(ref ulong pulQueueHandle, IntPtr pchPath, uint unBlockDataSize, uint unBlockHeaderSize, uint unBlockCount); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _Create Create; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _Connect(ref ulong pulQueueHandle, IntPtr pchPath); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _Connect Connect; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _Destroy(ulong ulQueueHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _Destroy Destroy; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _AcquireWriteOnlyBlock(ulong ulQueueHandle, ref ulong pulBlockHandle, ref IntPtr ppvBuffer); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _AcquireWriteOnlyBlock AcquireWriteOnlyBlock; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _ReleaseWriteOnlyBlock(ulong ulQueueHandle, ulong ulBlockHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReleaseWriteOnlyBlock ReleaseWriteOnlyBlock; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _WaitAndAcquireReadOnlyBlock(ulong ulQueueHandle, ref ulong pulBlockHandle, ref IntPtr ppvBuffer, EBlockQueueReadType eReadType, uint unTimeoutMs); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _WaitAndAcquireReadOnlyBlock WaitAndAcquireReadOnlyBlock; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _AcquireReadOnlyBlock(ulong ulQueueHandle, ref ulong pulBlockHandle, ref IntPtr ppvBuffer, EBlockQueueReadType eReadType); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _AcquireReadOnlyBlock AcquireReadOnlyBlock; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _ReleaseReadOnlyBlock(ulong ulQueueHandle, ulong ulBlockHandle); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _ReleaseReadOnlyBlock ReleaseReadOnlyBlock; + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate EBlockQueueError _QueueHasReader(ulong ulQueueHandle, ref bool pbHasReaders); + [MarshalAs(UnmanagedType.FunctionPtr)] + internal _QueueHasReader QueueHasReader; + +} + + +public class Utils +{ + public static IntPtr ToUtf8(string managedString) + { + if (managedString == null) + { + return IntPtr.Zero; + } + + int size = System.Text.Encoding.UTF8.GetByteCount(managedString) + 1; + if (buffer.Length < size) buffer = new byte[size]; + int written = System.Text.Encoding.UTF8.GetBytes(managedString, 0, managedString.Length, buffer, 0); + buffer[written] = 0x00; // null terminate + IntPtr nativeUtf8 = Marshal.AllocHGlobal(written+1); + Marshal.Copy(buffer, 0, nativeUtf8, written+1); + return nativeUtf8; + } + private static byte[] buffer = new byte[1024]; +} + +public class CVRSystem +{ + IVRSystem FnTable; + internal CVRSystem(IntPtr pInterface) + { + FnTable = (IVRSystem)Marshal.PtrToStructure(pInterface, typeof(IVRSystem)); + } + public void GetRecommendedRenderTargetSize(ref uint pnWidth,ref uint pnHeight) + { + pnWidth = 0; + pnHeight = 0; + FnTable.GetRecommendedRenderTargetSize(ref pnWidth,ref pnHeight); + } + public HmdMatrix44_t GetProjectionMatrix(EVREye eEye,float fNearZ,float fFarZ) + { + HmdMatrix44_t result = FnTable.GetProjectionMatrix(eEye,fNearZ,fFarZ); + return result; + } + public void GetProjectionRaw(EVREye eEye,ref float pfLeft,ref float pfRight,ref float pfTop,ref float pfBottom) + { + pfLeft = 0; + pfRight = 0; + pfTop = 0; + pfBottom = 0; + FnTable.GetProjectionRaw(eEye,ref pfLeft,ref pfRight,ref pfTop,ref pfBottom); + } + public bool ComputeDistortion(EVREye eEye,float fU,float fV,ref DistortionCoordinates_t pDistortionCoordinates) + { + bool result = FnTable.ComputeDistortion(eEye,fU,fV,ref pDistortionCoordinates); + return result; + } + public HmdMatrix34_t GetEyeToHeadTransform(EVREye eEye) + { + HmdMatrix34_t result = FnTable.GetEyeToHeadTransform(eEye); + return result; + } + public bool GetTimeSinceLastVsync(ref float pfSecondsSinceLastVsync,ref ulong pulFrameCounter) + { + pfSecondsSinceLastVsync = 0; + pulFrameCounter = 0; + bool result = FnTable.GetTimeSinceLastVsync(ref pfSecondsSinceLastVsync,ref pulFrameCounter); + return result; + } + public int GetD3D9AdapterIndex() + { + int result = FnTable.GetD3D9AdapterIndex(); + return result; + } + public void GetDXGIOutputInfo(ref int pnAdapterIndex) + { + pnAdapterIndex = 0; + FnTable.GetDXGIOutputInfo(ref pnAdapterIndex); + } + public void GetOutputDevice(ref ulong pnDevice,ETextureType textureType,IntPtr pInstance) + { + pnDevice = 0; + FnTable.GetOutputDevice(ref pnDevice,textureType,pInstance); + } + public bool IsDisplayOnDesktop() + { + bool result = FnTable.IsDisplayOnDesktop(); + return result; + } + public bool SetDisplayVisibility(bool bIsVisibleOnDesktop) + { + bool result = FnTable.SetDisplayVisibility(bIsVisibleOnDesktop); + return result; + } + public void GetDeviceToAbsoluteTrackingPose(ETrackingUniverseOrigin eOrigin,float fPredictedSecondsToPhotonsFromNow,TrackedDevicePose_t [] pTrackedDevicePoseArray) + { + FnTable.GetDeviceToAbsoluteTrackingPose(eOrigin,fPredictedSecondsToPhotonsFromNow,pTrackedDevicePoseArray,(uint) pTrackedDevicePoseArray.Length); + } + public HmdMatrix34_t GetSeatedZeroPoseToStandingAbsoluteTrackingPose() + { + HmdMatrix34_t result = FnTable.GetSeatedZeroPoseToStandingAbsoluteTrackingPose(); + return result; + } + public HmdMatrix34_t GetRawZeroPoseToStandingAbsoluteTrackingPose() + { + HmdMatrix34_t result = FnTable.GetRawZeroPoseToStandingAbsoluteTrackingPose(); + return result; + } + public uint GetSortedTrackedDeviceIndicesOfClass(ETrackedDeviceClass eTrackedDeviceClass,uint [] punTrackedDeviceIndexArray,uint unRelativeToTrackedDeviceIndex) + { + uint result = FnTable.GetSortedTrackedDeviceIndicesOfClass(eTrackedDeviceClass,punTrackedDeviceIndexArray,(uint) punTrackedDeviceIndexArray.Length,unRelativeToTrackedDeviceIndex); + return result; + } + public EDeviceActivityLevel GetTrackedDeviceActivityLevel(uint unDeviceId) + { + EDeviceActivityLevel result = FnTable.GetTrackedDeviceActivityLevel(unDeviceId); + return result; + } + public void ApplyTransform(ref TrackedDevicePose_t pOutputPose,ref TrackedDevicePose_t pTrackedDevicePose,ref HmdMatrix34_t pTransform) + { + FnTable.ApplyTransform(ref pOutputPose,ref pTrackedDevicePose,ref pTransform); + } + public uint GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole unDeviceType) + { + uint result = FnTable.GetTrackedDeviceIndexForControllerRole(unDeviceType); + return result; + } + public ETrackedControllerRole GetControllerRoleForTrackedDeviceIndex(uint unDeviceIndex) + { + ETrackedControllerRole result = FnTable.GetControllerRoleForTrackedDeviceIndex(unDeviceIndex); + return result; + } + public ETrackedDeviceClass GetTrackedDeviceClass(uint unDeviceIndex) + { + ETrackedDeviceClass result = FnTable.GetTrackedDeviceClass(unDeviceIndex); + return result; + } + public bool IsTrackedDeviceConnected(uint unDeviceIndex) + { + bool result = FnTable.IsTrackedDeviceConnected(unDeviceIndex); + return result; + } + public bool GetBoolTrackedDeviceProperty(uint unDeviceIndex,ETrackedDeviceProperty prop,ref ETrackedPropertyError pError) + { + bool result = FnTable.GetBoolTrackedDeviceProperty(unDeviceIndex,prop,ref pError); + return result; + } + public float GetFloatTrackedDeviceProperty(uint unDeviceIndex,ETrackedDeviceProperty prop,ref ETrackedPropertyError pError) + { + float result = FnTable.GetFloatTrackedDeviceProperty(unDeviceIndex,prop,ref pError); + return result; + } + public int GetInt32TrackedDeviceProperty(uint unDeviceIndex,ETrackedDeviceProperty prop,ref ETrackedPropertyError pError) + { + int result = FnTable.GetInt32TrackedDeviceProperty(unDeviceIndex,prop,ref pError); + return result; + } + public ulong GetUint64TrackedDeviceProperty(uint unDeviceIndex,ETrackedDeviceProperty prop,ref ETrackedPropertyError pError) + { + ulong result = FnTable.GetUint64TrackedDeviceProperty(unDeviceIndex,prop,ref pError); + return result; + } + public HmdMatrix34_t GetMatrix34TrackedDeviceProperty(uint unDeviceIndex,ETrackedDeviceProperty prop,ref ETrackedPropertyError pError) + { + HmdMatrix34_t result = FnTable.GetMatrix34TrackedDeviceProperty(unDeviceIndex,prop,ref pError); + return result; + } + public uint GetArrayTrackedDeviceProperty(uint unDeviceIndex,ETrackedDeviceProperty prop,uint propType,IntPtr pBuffer,uint unBufferSize,ref ETrackedPropertyError pError) + { + uint result = FnTable.GetArrayTrackedDeviceProperty(unDeviceIndex,prop,propType,pBuffer,unBufferSize,ref pError); + return result; + } + public uint GetStringTrackedDeviceProperty(uint unDeviceIndex,ETrackedDeviceProperty prop,System.Text.StringBuilder pchValue,uint unBufferSize,ref ETrackedPropertyError pError) + { + uint result = FnTable.GetStringTrackedDeviceProperty(unDeviceIndex,prop,pchValue,unBufferSize,ref pError); + return result; + } + public string GetPropErrorNameFromEnum(ETrackedPropertyError error) + { + IntPtr result = FnTable.GetPropErrorNameFromEnum(error); + return Marshal.PtrToStringAnsi(result); + } +// This is a terrible hack to workaround the fact that VRControllerState_t and VREvent_t were +// originally mis-compiled with the wrong packing for Linux and OSX. + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _PollNextEventPacked(ref VREvent_t_Packed pEvent,uint uncbVREvent); + [StructLayout(LayoutKind.Explicit)] + struct PollNextEventUnion + { + [FieldOffset(0)] + public IVRSystem._PollNextEvent pPollNextEvent; + [FieldOffset(0)] + public _PollNextEventPacked pPollNextEventPacked; + } + public bool PollNextEvent(ref VREvent_t pEvent,uint uncbVREvent) + { +#if !UNITY_METRO + if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) || + (System.Environment.OSVersion.Platform == System.PlatformID.Unix)) + { + PollNextEventUnion u; + VREvent_t_Packed event_packed = new VREvent_t_Packed(); + u.pPollNextEventPacked = null; + u.pPollNextEvent = FnTable.PollNextEvent; + bool packed_result = u.pPollNextEventPacked(ref event_packed,(uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VREvent_t_Packed))); + + event_packed.Unpack(ref pEvent); + return packed_result; + } +#endif + bool result = FnTable.PollNextEvent(ref pEvent,uncbVREvent); + return result; + } + public bool PollNextEventWithPose(ETrackingUniverseOrigin eOrigin,ref VREvent_t pEvent,uint uncbVREvent,ref TrackedDevicePose_t pTrackedDevicePose) + { + bool result = FnTable.PollNextEventWithPose(eOrigin,ref pEvent,uncbVREvent,ref pTrackedDevicePose); + return result; + } + public string GetEventTypeNameFromEnum(EVREventType eType) + { + IntPtr result = FnTable.GetEventTypeNameFromEnum(eType); + return Marshal.PtrToStringAnsi(result); + } + public HiddenAreaMesh_t GetHiddenAreaMesh(EVREye eEye,EHiddenAreaMeshType type) + { + HiddenAreaMesh_t result = FnTable.GetHiddenAreaMesh(eEye,type); + return result; + } +// This is a terrible hack to workaround the fact that VRControllerState_t and VREvent_t were +// originally mis-compiled with the wrong packing for Linux and OSX. + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetControllerStatePacked(uint unControllerDeviceIndex,ref VRControllerState_t_Packed pControllerState,uint unControllerStateSize); + [StructLayout(LayoutKind.Explicit)] + struct GetControllerStateUnion + { + [FieldOffset(0)] + public IVRSystem._GetControllerState pGetControllerState; + [FieldOffset(0)] + public _GetControllerStatePacked pGetControllerStatePacked; + } + public bool GetControllerState(uint unControllerDeviceIndex,ref VRControllerState_t pControllerState,uint unControllerStateSize) + { +#if !UNITY_METRO + if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) || + (System.Environment.OSVersion.Platform == System.PlatformID.Unix)) + { + GetControllerStateUnion u; + VRControllerState_t_Packed state_packed = new VRControllerState_t_Packed(pControllerState); + u.pGetControllerStatePacked = null; + u.pGetControllerState = FnTable.GetControllerState; + bool packed_result = u.pGetControllerStatePacked(unControllerDeviceIndex,ref state_packed,(uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VRControllerState_t_Packed))); + + state_packed.Unpack(ref pControllerState); + return packed_result; + } +#endif + bool result = FnTable.GetControllerState(unControllerDeviceIndex,ref pControllerState,unControllerStateSize); + return result; + } +// This is a terrible hack to workaround the fact that VRControllerState_t and VREvent_t were +// originally mis-compiled with the wrong packing for Linux and OSX. + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetControllerStateWithPosePacked(ETrackingUniverseOrigin eOrigin,uint unControllerDeviceIndex,ref VRControllerState_t_Packed pControllerState,uint unControllerStateSize,ref TrackedDevicePose_t pTrackedDevicePose); + [StructLayout(LayoutKind.Explicit)] + struct GetControllerStateWithPoseUnion + { + [FieldOffset(0)] + public IVRSystem._GetControllerStateWithPose pGetControllerStateWithPose; + [FieldOffset(0)] + public _GetControllerStateWithPosePacked pGetControllerStateWithPosePacked; + } + public bool GetControllerStateWithPose(ETrackingUniverseOrigin eOrigin,uint unControllerDeviceIndex,ref VRControllerState_t pControllerState,uint unControllerStateSize,ref TrackedDevicePose_t pTrackedDevicePose) + { +#if !UNITY_METRO + if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) || + (System.Environment.OSVersion.Platform == System.PlatformID.Unix)) + { + GetControllerStateWithPoseUnion u; + VRControllerState_t_Packed state_packed = new VRControllerState_t_Packed(pControllerState); + u.pGetControllerStateWithPosePacked = null; + u.pGetControllerStateWithPose = FnTable.GetControllerStateWithPose; + bool packed_result = u.pGetControllerStateWithPosePacked(eOrigin,unControllerDeviceIndex,ref state_packed,(uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VRControllerState_t_Packed)),ref pTrackedDevicePose); + + state_packed.Unpack(ref pControllerState); + return packed_result; + } +#endif + bool result = FnTable.GetControllerStateWithPose(eOrigin,unControllerDeviceIndex,ref pControllerState,unControllerStateSize,ref pTrackedDevicePose); + return result; + } + public void TriggerHapticPulse(uint unControllerDeviceIndex,uint unAxisId,ushort usDurationMicroSec) + { + FnTable.TriggerHapticPulse(unControllerDeviceIndex,unAxisId,usDurationMicroSec); + } + public string GetButtonIdNameFromEnum(EVRButtonId eButtonId) + { + IntPtr result = FnTable.GetButtonIdNameFromEnum(eButtonId); + return Marshal.PtrToStringAnsi(result); + } + public string GetControllerAxisTypeNameFromEnum(EVRControllerAxisType eAxisType) + { + IntPtr result = FnTable.GetControllerAxisTypeNameFromEnum(eAxisType); + return Marshal.PtrToStringAnsi(result); + } + public bool IsInputAvailable() + { + bool result = FnTable.IsInputAvailable(); + return result; + } + public bool IsSteamVRDrawingControllers() + { + bool result = FnTable.IsSteamVRDrawingControllers(); + return result; + } + public bool ShouldApplicationPause() + { + bool result = FnTable.ShouldApplicationPause(); + return result; + } + public bool ShouldApplicationReduceRenderingWork() + { + bool result = FnTable.ShouldApplicationReduceRenderingWork(); + return result; + } + public EVRFirmwareError PerformFirmwareUpdate(uint unDeviceIndex) + { + EVRFirmwareError result = FnTable.PerformFirmwareUpdate(unDeviceIndex); + return result; + } + public void AcknowledgeQuit_Exiting() + { + FnTable.AcknowledgeQuit_Exiting(); + } + public uint GetAppContainerFilePaths(System.Text.StringBuilder pchBuffer,uint unBufferSize) + { + uint result = FnTable.GetAppContainerFilePaths(pchBuffer,unBufferSize); + return result; + } + public string GetRuntimeVersion() + { + IntPtr result = FnTable.GetRuntimeVersion(); + return Marshal.PtrToStringAnsi(result); + } +} + + +public class CVRExtendedDisplay +{ + IVRExtendedDisplay FnTable; + internal CVRExtendedDisplay(IntPtr pInterface) + { + FnTable = (IVRExtendedDisplay)Marshal.PtrToStructure(pInterface, typeof(IVRExtendedDisplay)); + } + public void GetWindowBounds(ref int pnX,ref int pnY,ref uint pnWidth,ref uint pnHeight) + { + pnX = 0; + pnY = 0; + pnWidth = 0; + pnHeight = 0; + FnTable.GetWindowBounds(ref pnX,ref pnY,ref pnWidth,ref pnHeight); + } + public void GetEyeOutputViewport(EVREye eEye,ref uint pnX,ref uint pnY,ref uint pnWidth,ref uint pnHeight) + { + pnX = 0; + pnY = 0; + pnWidth = 0; + pnHeight = 0; + FnTable.GetEyeOutputViewport(eEye,ref pnX,ref pnY,ref pnWidth,ref pnHeight); + } + public void GetDXGIOutputInfo(ref int pnAdapterIndex,ref int pnAdapterOutputIndex) + { + pnAdapterIndex = 0; + pnAdapterOutputIndex = 0; + FnTable.GetDXGIOutputInfo(ref pnAdapterIndex,ref pnAdapterOutputIndex); + } +} + + +public class CVRTrackedCamera +{ + IVRTrackedCamera FnTable; + internal CVRTrackedCamera(IntPtr pInterface) + { + FnTable = (IVRTrackedCamera)Marshal.PtrToStructure(pInterface, typeof(IVRTrackedCamera)); + } + public string GetCameraErrorNameFromEnum(EVRTrackedCameraError eCameraError) + { + IntPtr result = FnTable.GetCameraErrorNameFromEnum(eCameraError); + return Marshal.PtrToStringAnsi(result); + } + public EVRTrackedCameraError HasCamera(uint nDeviceIndex,ref bool pHasCamera) + { + pHasCamera = false; + EVRTrackedCameraError result = FnTable.HasCamera(nDeviceIndex,ref pHasCamera); + return result; + } + public EVRTrackedCameraError GetCameraFrameSize(uint nDeviceIndex,EVRTrackedCameraFrameType eFrameType,ref uint pnWidth,ref uint pnHeight,ref uint pnFrameBufferSize) + { + pnWidth = 0; + pnHeight = 0; + pnFrameBufferSize = 0; + EVRTrackedCameraError result = FnTable.GetCameraFrameSize(nDeviceIndex,eFrameType,ref pnWidth,ref pnHeight,ref pnFrameBufferSize); + return result; + } + public EVRTrackedCameraError GetCameraIntrinsics(uint nDeviceIndex,uint nCameraIndex,EVRTrackedCameraFrameType eFrameType,ref HmdVector2_t pFocalLength,ref HmdVector2_t pCenter) + { + EVRTrackedCameraError result = FnTable.GetCameraIntrinsics(nDeviceIndex,nCameraIndex,eFrameType,ref pFocalLength,ref pCenter); + return result; + } + public EVRTrackedCameraError GetCameraProjection(uint nDeviceIndex,uint nCameraIndex,EVRTrackedCameraFrameType eFrameType,float flZNear,float flZFar,ref HmdMatrix44_t pProjection) + { + EVRTrackedCameraError result = FnTable.GetCameraProjection(nDeviceIndex,nCameraIndex,eFrameType,flZNear,flZFar,ref pProjection); + return result; + } + public EVRTrackedCameraError AcquireVideoStreamingService(uint nDeviceIndex,ref ulong pHandle) + { + pHandle = 0; + EVRTrackedCameraError result = FnTable.AcquireVideoStreamingService(nDeviceIndex,ref pHandle); + return result; + } + public EVRTrackedCameraError ReleaseVideoStreamingService(ulong hTrackedCamera) + { + EVRTrackedCameraError result = FnTable.ReleaseVideoStreamingService(hTrackedCamera); + return result; + } + public EVRTrackedCameraError GetVideoStreamFrameBuffer(ulong hTrackedCamera,EVRTrackedCameraFrameType eFrameType,IntPtr pFrameBuffer,uint nFrameBufferSize,ref CameraVideoStreamFrameHeader_t pFrameHeader,uint nFrameHeaderSize) + { + EVRTrackedCameraError result = FnTable.GetVideoStreamFrameBuffer(hTrackedCamera,eFrameType,pFrameBuffer,nFrameBufferSize,ref pFrameHeader,nFrameHeaderSize); + return result; + } + public EVRTrackedCameraError GetVideoStreamTextureSize(uint nDeviceIndex,EVRTrackedCameraFrameType eFrameType,ref VRTextureBounds_t pTextureBounds,ref uint pnWidth,ref uint pnHeight) + { + pnWidth = 0; + pnHeight = 0; + EVRTrackedCameraError result = FnTable.GetVideoStreamTextureSize(nDeviceIndex,eFrameType,ref pTextureBounds,ref pnWidth,ref pnHeight); + return result; + } + public EVRTrackedCameraError GetVideoStreamTextureD3D11(ulong hTrackedCamera,EVRTrackedCameraFrameType eFrameType,IntPtr pD3D11DeviceOrResource,ref IntPtr ppD3D11ShaderResourceView,ref CameraVideoStreamFrameHeader_t pFrameHeader,uint nFrameHeaderSize) + { + EVRTrackedCameraError result = FnTable.GetVideoStreamTextureD3D11(hTrackedCamera,eFrameType,pD3D11DeviceOrResource,ref ppD3D11ShaderResourceView,ref pFrameHeader,nFrameHeaderSize); + return result; + } + public EVRTrackedCameraError GetVideoStreamTextureGL(ulong hTrackedCamera,EVRTrackedCameraFrameType eFrameType,ref uint pglTextureId,ref CameraVideoStreamFrameHeader_t pFrameHeader,uint nFrameHeaderSize) + { + pglTextureId = 0; + EVRTrackedCameraError result = FnTable.GetVideoStreamTextureGL(hTrackedCamera,eFrameType,ref pglTextureId,ref pFrameHeader,nFrameHeaderSize); + return result; + } + public EVRTrackedCameraError ReleaseVideoStreamTextureGL(ulong hTrackedCamera,uint glTextureId) + { + EVRTrackedCameraError result = FnTable.ReleaseVideoStreamTextureGL(hTrackedCamera,glTextureId); + return result; + } + public void SetCameraTrackingSpace(ETrackingUniverseOrigin eUniverse) + { + FnTable.SetCameraTrackingSpace(eUniverse); + } + public ETrackingUniverseOrigin GetCameraTrackingSpace() + { + ETrackingUniverseOrigin result = FnTable.GetCameraTrackingSpace(); + return result; + } +} + + +public class CVRApplications +{ + IVRApplications FnTable; + internal CVRApplications(IntPtr pInterface) + { + FnTable = (IVRApplications)Marshal.PtrToStructure(pInterface, typeof(IVRApplications)); + } + public EVRApplicationError AddApplicationManifest(string pchApplicationManifestFullPath,bool bTemporary) + { + IntPtr pchApplicationManifestFullPathUtf8 = Utils.ToUtf8(pchApplicationManifestFullPath); + EVRApplicationError result = FnTable.AddApplicationManifest(pchApplicationManifestFullPathUtf8,bTemporary); + Marshal.FreeHGlobal(pchApplicationManifestFullPathUtf8); + return result; + } + public EVRApplicationError RemoveApplicationManifest(string pchApplicationManifestFullPath) + { + IntPtr pchApplicationManifestFullPathUtf8 = Utils.ToUtf8(pchApplicationManifestFullPath); + EVRApplicationError result = FnTable.RemoveApplicationManifest(pchApplicationManifestFullPathUtf8); + Marshal.FreeHGlobal(pchApplicationManifestFullPathUtf8); + return result; + } + public bool IsApplicationInstalled(string pchAppKey) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + bool result = FnTable.IsApplicationInstalled(pchAppKeyUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public uint GetApplicationCount() + { + uint result = FnTable.GetApplicationCount(); + return result; + } + public EVRApplicationError GetApplicationKeyByIndex(uint unApplicationIndex,System.Text.StringBuilder pchAppKeyBuffer,uint unAppKeyBufferLen) + { + EVRApplicationError result = FnTable.GetApplicationKeyByIndex(unApplicationIndex,pchAppKeyBuffer,unAppKeyBufferLen); + return result; + } + public EVRApplicationError GetApplicationKeyByProcessId(uint unProcessId,System.Text.StringBuilder pchAppKeyBuffer,uint unAppKeyBufferLen) + { + EVRApplicationError result = FnTable.GetApplicationKeyByProcessId(unProcessId,pchAppKeyBuffer,unAppKeyBufferLen); + return result; + } + public EVRApplicationError LaunchApplication(string pchAppKey) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + EVRApplicationError result = FnTable.LaunchApplication(pchAppKeyUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public EVRApplicationError LaunchTemplateApplication(string pchTemplateAppKey,string pchNewAppKey,AppOverrideKeys_t [] pKeys) + { + IntPtr pchTemplateAppKeyUtf8 = Utils.ToUtf8(pchTemplateAppKey); + IntPtr pchNewAppKeyUtf8 = Utils.ToUtf8(pchNewAppKey); + EVRApplicationError result = FnTable.LaunchTemplateApplication(pchTemplateAppKeyUtf8,pchNewAppKeyUtf8,pKeys,(uint) pKeys.Length); + Marshal.FreeHGlobal(pchTemplateAppKeyUtf8); + Marshal.FreeHGlobal(pchNewAppKeyUtf8); + return result; + } + public EVRApplicationError LaunchApplicationFromMimeType(string pchMimeType,string pchArgs) + { + IntPtr pchMimeTypeUtf8 = Utils.ToUtf8(pchMimeType); + IntPtr pchArgsUtf8 = Utils.ToUtf8(pchArgs); + EVRApplicationError result = FnTable.LaunchApplicationFromMimeType(pchMimeTypeUtf8,pchArgsUtf8); + Marshal.FreeHGlobal(pchMimeTypeUtf8); + Marshal.FreeHGlobal(pchArgsUtf8); + return result; + } + public EVRApplicationError LaunchDashboardOverlay(string pchAppKey) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + EVRApplicationError result = FnTable.LaunchDashboardOverlay(pchAppKeyUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public bool CancelApplicationLaunch(string pchAppKey) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + bool result = FnTable.CancelApplicationLaunch(pchAppKeyUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public EVRApplicationError IdentifyApplication(uint unProcessId,string pchAppKey) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + EVRApplicationError result = FnTable.IdentifyApplication(unProcessId,pchAppKeyUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public uint GetApplicationProcessId(string pchAppKey) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + uint result = FnTable.GetApplicationProcessId(pchAppKeyUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public string GetApplicationsErrorNameFromEnum(EVRApplicationError error) + { + IntPtr result = FnTable.GetApplicationsErrorNameFromEnum(error); + return Marshal.PtrToStringAnsi(result); + } + public uint GetApplicationPropertyString(string pchAppKey,EVRApplicationProperty eProperty,System.Text.StringBuilder pchPropertyValueBuffer,uint unPropertyValueBufferLen,ref EVRApplicationError peError) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + uint result = FnTable.GetApplicationPropertyString(pchAppKeyUtf8,eProperty,pchPropertyValueBuffer,unPropertyValueBufferLen,ref peError); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public bool GetApplicationPropertyBool(string pchAppKey,EVRApplicationProperty eProperty,ref EVRApplicationError peError) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + bool result = FnTable.GetApplicationPropertyBool(pchAppKeyUtf8,eProperty,ref peError); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public ulong GetApplicationPropertyUint64(string pchAppKey,EVRApplicationProperty eProperty,ref EVRApplicationError peError) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + ulong result = FnTable.GetApplicationPropertyUint64(pchAppKeyUtf8,eProperty,ref peError); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public EVRApplicationError SetApplicationAutoLaunch(string pchAppKey,bool bAutoLaunch) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + EVRApplicationError result = FnTable.SetApplicationAutoLaunch(pchAppKeyUtf8,bAutoLaunch); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public bool GetApplicationAutoLaunch(string pchAppKey) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + bool result = FnTable.GetApplicationAutoLaunch(pchAppKeyUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public EVRApplicationError SetDefaultApplicationForMimeType(string pchAppKey,string pchMimeType) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + IntPtr pchMimeTypeUtf8 = Utils.ToUtf8(pchMimeType); + EVRApplicationError result = FnTable.SetDefaultApplicationForMimeType(pchAppKeyUtf8,pchMimeTypeUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + Marshal.FreeHGlobal(pchMimeTypeUtf8); + return result; + } + public bool GetDefaultApplicationForMimeType(string pchMimeType,System.Text.StringBuilder pchAppKeyBuffer,uint unAppKeyBufferLen) + { + IntPtr pchMimeTypeUtf8 = Utils.ToUtf8(pchMimeType); + bool result = FnTable.GetDefaultApplicationForMimeType(pchMimeTypeUtf8,pchAppKeyBuffer,unAppKeyBufferLen); + Marshal.FreeHGlobal(pchMimeTypeUtf8); + return result; + } + public bool GetApplicationSupportedMimeTypes(string pchAppKey,System.Text.StringBuilder pchMimeTypesBuffer,uint unMimeTypesBuffer) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + bool result = FnTable.GetApplicationSupportedMimeTypes(pchAppKeyUtf8,pchMimeTypesBuffer,unMimeTypesBuffer); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public uint GetApplicationsThatSupportMimeType(string pchMimeType,System.Text.StringBuilder pchAppKeysThatSupportBuffer,uint unAppKeysThatSupportBuffer) + { + IntPtr pchMimeTypeUtf8 = Utils.ToUtf8(pchMimeType); + uint result = FnTable.GetApplicationsThatSupportMimeType(pchMimeTypeUtf8,pchAppKeysThatSupportBuffer,unAppKeysThatSupportBuffer); + Marshal.FreeHGlobal(pchMimeTypeUtf8); + return result; + } + public uint GetApplicationLaunchArguments(uint unHandle,System.Text.StringBuilder pchArgs,uint unArgs) + { + uint result = FnTable.GetApplicationLaunchArguments(unHandle,pchArgs,unArgs); + return result; + } + public EVRApplicationError GetStartingApplication(System.Text.StringBuilder pchAppKeyBuffer,uint unAppKeyBufferLen) + { + EVRApplicationError result = FnTable.GetStartingApplication(pchAppKeyBuffer,unAppKeyBufferLen); + return result; + } + public EVRSceneApplicationState GetSceneApplicationState() + { + EVRSceneApplicationState result = FnTable.GetSceneApplicationState(); + return result; + } + public EVRApplicationError PerformApplicationPrelaunchCheck(string pchAppKey) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + EVRApplicationError result = FnTable.PerformApplicationPrelaunchCheck(pchAppKeyUtf8); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public string GetSceneApplicationStateNameFromEnum(EVRSceneApplicationState state) + { + IntPtr result = FnTable.GetSceneApplicationStateNameFromEnum(state); + return Marshal.PtrToStringAnsi(result); + } + public EVRApplicationError LaunchInternalProcess(string pchBinaryPath,string pchArguments,string pchWorkingDirectory) + { + IntPtr pchBinaryPathUtf8 = Utils.ToUtf8(pchBinaryPath); + IntPtr pchArgumentsUtf8 = Utils.ToUtf8(pchArguments); + IntPtr pchWorkingDirectoryUtf8 = Utils.ToUtf8(pchWorkingDirectory); + EVRApplicationError result = FnTable.LaunchInternalProcess(pchBinaryPathUtf8,pchArgumentsUtf8,pchWorkingDirectoryUtf8); + Marshal.FreeHGlobal(pchBinaryPathUtf8); + Marshal.FreeHGlobal(pchArgumentsUtf8); + Marshal.FreeHGlobal(pchWorkingDirectoryUtf8); + return result; + } + public uint GetCurrentSceneProcessId() + { + uint result = FnTable.GetCurrentSceneProcessId(); + return result; + } +} + + +public class CVRChaperone +{ + IVRChaperone FnTable; + internal CVRChaperone(IntPtr pInterface) + { + FnTable = (IVRChaperone)Marshal.PtrToStructure(pInterface, typeof(IVRChaperone)); + } + public ChaperoneCalibrationState GetCalibrationState() + { + ChaperoneCalibrationState result = FnTable.GetCalibrationState(); + return result; + } + public bool GetPlayAreaSize(ref float pSizeX,ref float pSizeZ) + { + pSizeX = 0; + pSizeZ = 0; + bool result = FnTable.GetPlayAreaSize(ref pSizeX,ref pSizeZ); + return result; + } + public bool GetPlayAreaRect(ref HmdQuad_t rect) + { + bool result = FnTable.GetPlayAreaRect(ref rect); + return result; + } + public void ReloadInfo() + { + FnTable.ReloadInfo(); + } + public void SetSceneColor(HmdColor_t color) + { + FnTable.SetSceneColor(color); + } + public void GetBoundsColor(ref HmdColor_t pOutputColorArray,int nNumOutputColors,float flCollisionBoundsFadeDistance,ref HmdColor_t pOutputCameraColor) + { + FnTable.GetBoundsColor(ref pOutputColorArray,nNumOutputColors,flCollisionBoundsFadeDistance,ref pOutputCameraColor); + } + public bool AreBoundsVisible() + { + bool result = FnTable.AreBoundsVisible(); + return result; + } + public void ForceBoundsVisible(bool bForce) + { + FnTable.ForceBoundsVisible(bForce); + } + public void ResetZeroPose(ETrackingUniverseOrigin eTrackingUniverseOrigin) + { + FnTable.ResetZeroPose(eTrackingUniverseOrigin); + } +} + + +public class CVRChaperoneSetup +{ + IVRChaperoneSetup FnTable; + internal CVRChaperoneSetup(IntPtr pInterface) + { + FnTable = (IVRChaperoneSetup)Marshal.PtrToStructure(pInterface, typeof(IVRChaperoneSetup)); + } + public bool CommitWorkingCopy(EChaperoneConfigFile configFile) + { + bool result = FnTable.CommitWorkingCopy(configFile); + return result; + } + public void RevertWorkingCopy() + { + FnTable.RevertWorkingCopy(); + } + public bool GetWorkingPlayAreaSize(ref float pSizeX,ref float pSizeZ) + { + pSizeX = 0; + pSizeZ = 0; + bool result = FnTable.GetWorkingPlayAreaSize(ref pSizeX,ref pSizeZ); + return result; + } + public bool GetWorkingPlayAreaRect(ref HmdQuad_t rect) + { + bool result = FnTable.GetWorkingPlayAreaRect(ref rect); + return result; + } + public bool GetWorkingCollisionBoundsInfo(out HmdQuad_t [] pQuadsBuffer) + { + uint punQuadsCount = 0; + bool result = FnTable.GetWorkingCollisionBoundsInfo(null,ref punQuadsCount); + pQuadsBuffer= new HmdQuad_t[punQuadsCount]; + result = FnTable.GetWorkingCollisionBoundsInfo(pQuadsBuffer,ref punQuadsCount); + return result; + } + public bool GetLiveCollisionBoundsInfo(out HmdQuad_t [] pQuadsBuffer) + { + uint punQuadsCount = 0; + bool result = FnTable.GetLiveCollisionBoundsInfo(null,ref punQuadsCount); + pQuadsBuffer= new HmdQuad_t[punQuadsCount]; + result = FnTable.GetLiveCollisionBoundsInfo(pQuadsBuffer,ref punQuadsCount); + return result; + } + public bool GetWorkingSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatSeatedZeroPoseToRawTrackingPose) + { + bool result = FnTable.GetWorkingSeatedZeroPoseToRawTrackingPose(ref pmatSeatedZeroPoseToRawTrackingPose); + return result; + } + public bool GetWorkingStandingZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatStandingZeroPoseToRawTrackingPose) + { + bool result = FnTable.GetWorkingStandingZeroPoseToRawTrackingPose(ref pmatStandingZeroPoseToRawTrackingPose); + return result; + } + public void SetWorkingPlayAreaSize(float sizeX,float sizeZ) + { + FnTable.SetWorkingPlayAreaSize(sizeX,sizeZ); + } + public void SetWorkingCollisionBoundsInfo(HmdQuad_t [] pQuadsBuffer) + { + FnTable.SetWorkingCollisionBoundsInfo(pQuadsBuffer,(uint) pQuadsBuffer.Length); + } + public void SetWorkingPerimeter(HmdVector2_t [] pPointBuffer) + { + FnTable.SetWorkingPerimeter(pPointBuffer,(uint) pPointBuffer.Length); + } + public void SetWorkingSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pMatSeatedZeroPoseToRawTrackingPose) + { + FnTable.SetWorkingSeatedZeroPoseToRawTrackingPose(ref pMatSeatedZeroPoseToRawTrackingPose); + } + public void SetWorkingStandingZeroPoseToRawTrackingPose(ref HmdMatrix34_t pMatStandingZeroPoseToRawTrackingPose) + { + FnTable.SetWorkingStandingZeroPoseToRawTrackingPose(ref pMatStandingZeroPoseToRawTrackingPose); + } + public void ReloadFromDisk(EChaperoneConfigFile configFile) + { + FnTable.ReloadFromDisk(configFile); + } + public bool GetLiveSeatedZeroPoseToRawTrackingPose(ref HmdMatrix34_t pmatSeatedZeroPoseToRawTrackingPose) + { + bool result = FnTable.GetLiveSeatedZeroPoseToRawTrackingPose(ref pmatSeatedZeroPoseToRawTrackingPose); + return result; + } + public bool ExportLiveToBuffer(System.Text.StringBuilder pBuffer,ref uint pnBufferLength) + { + pnBufferLength = 0; + bool result = FnTable.ExportLiveToBuffer(pBuffer,ref pnBufferLength); + return result; + } + public bool ImportFromBufferToWorking(string pBuffer,uint nImportFlags) + { + IntPtr pBufferUtf8 = Utils.ToUtf8(pBuffer); + bool result = FnTable.ImportFromBufferToWorking(pBufferUtf8,nImportFlags); + Marshal.FreeHGlobal(pBufferUtf8); + return result; + } + public void ShowWorkingSetPreview() + { + FnTable.ShowWorkingSetPreview(); + } + public void HideWorkingSetPreview() + { + FnTable.HideWorkingSetPreview(); + } + public void RoomSetupStarting() + { + FnTable.RoomSetupStarting(); + } +} + + +public class CVRCompositor +{ + IVRCompositor FnTable; + internal CVRCompositor(IntPtr pInterface) + { + FnTable = (IVRCompositor)Marshal.PtrToStructure(pInterface, typeof(IVRCompositor)); + } + public void SetTrackingSpace(ETrackingUniverseOrigin eOrigin) + { + FnTable.SetTrackingSpace(eOrigin); + } + public ETrackingUniverseOrigin GetTrackingSpace() + { + ETrackingUniverseOrigin result = FnTable.GetTrackingSpace(); + return result; + } + public EVRCompositorError WaitGetPoses(TrackedDevicePose_t [] pRenderPoseArray,TrackedDevicePose_t [] pGamePoseArray) + { + EVRCompositorError result = FnTable.WaitGetPoses(pRenderPoseArray,(uint) pRenderPoseArray.Length,pGamePoseArray,(uint) pGamePoseArray.Length); + return result; + } + public EVRCompositorError GetLastPoses(TrackedDevicePose_t [] pRenderPoseArray,TrackedDevicePose_t [] pGamePoseArray) + { + EVRCompositorError result = FnTable.GetLastPoses(pRenderPoseArray,(uint) pRenderPoseArray.Length,pGamePoseArray,(uint) pGamePoseArray.Length); + return result; + } + public EVRCompositorError GetLastPoseForTrackedDeviceIndex(uint unDeviceIndex,ref TrackedDevicePose_t pOutputPose,ref TrackedDevicePose_t pOutputGamePose) + { + EVRCompositorError result = FnTable.GetLastPoseForTrackedDeviceIndex(unDeviceIndex,ref pOutputPose,ref pOutputGamePose); + return result; + } + public EVRCompositorError Submit(EVREye eEye,ref Texture_t pTexture,ref VRTextureBounds_t pBounds,EVRSubmitFlags nSubmitFlags) + { + EVRCompositorError result = FnTable.Submit(eEye,ref pTexture,ref pBounds,nSubmitFlags); + return result; + } + public void ClearLastSubmittedFrame() + { + FnTable.ClearLastSubmittedFrame(); + } + public void PostPresentHandoff() + { + FnTable.PostPresentHandoff(); + } + public bool GetFrameTiming(ref Compositor_FrameTiming pTiming,uint unFramesAgo) + { + bool result = FnTable.GetFrameTiming(ref pTiming,unFramesAgo); + return result; + } + public uint GetFrameTimings(Compositor_FrameTiming [] pTiming) + { + uint result = FnTable.GetFrameTimings(pTiming,(uint) pTiming.Length); + return result; + } + public float GetFrameTimeRemaining() + { + float result = FnTable.GetFrameTimeRemaining(); + return result; + } + public void GetCumulativeStats(ref Compositor_CumulativeStats pStats,uint nStatsSizeInBytes) + { + FnTable.GetCumulativeStats(ref pStats,nStatsSizeInBytes); + } + public void FadeToColor(float fSeconds,float fRed,float fGreen,float fBlue,float fAlpha,bool bBackground) + { + FnTable.FadeToColor(fSeconds,fRed,fGreen,fBlue,fAlpha,bBackground); + } + public HmdColor_t GetCurrentFadeColor(bool bBackground) + { + HmdColor_t result = FnTable.GetCurrentFadeColor(bBackground); + return result; + } + public void FadeGrid(float fSeconds,bool bFadeGridIn) + { + FnTable.FadeGrid(fSeconds,bFadeGridIn); + } + public float GetCurrentGridAlpha() + { + float result = FnTable.GetCurrentGridAlpha(); + return result; + } + public EVRCompositorError SetSkyboxOverride(Texture_t [] pTextures) + { + EVRCompositorError result = FnTable.SetSkyboxOverride(pTextures,(uint) pTextures.Length); + return result; + } + public void ClearSkyboxOverride() + { + FnTable.ClearSkyboxOverride(); + } + public void CompositorBringToFront() + { + FnTable.CompositorBringToFront(); + } + public void CompositorGoToBack() + { + FnTable.CompositorGoToBack(); + } + public void CompositorQuit() + { + FnTable.CompositorQuit(); + } + public bool IsFullscreen() + { + bool result = FnTable.IsFullscreen(); + return result; + } + public uint GetCurrentSceneFocusProcess() + { + uint result = FnTable.GetCurrentSceneFocusProcess(); + return result; + } + public uint GetLastFrameRenderer() + { + uint result = FnTable.GetLastFrameRenderer(); + return result; + } + public bool CanRenderScene() + { + bool result = FnTable.CanRenderScene(); + return result; + } + public void ShowMirrorWindow() + { + FnTable.ShowMirrorWindow(); + } + public void HideMirrorWindow() + { + FnTable.HideMirrorWindow(); + } + public bool IsMirrorWindowVisible() + { + bool result = FnTable.IsMirrorWindowVisible(); + return result; + } + public void CompositorDumpImages() + { + FnTable.CompositorDumpImages(); + } + public bool ShouldAppRenderWithLowResources() + { + bool result = FnTable.ShouldAppRenderWithLowResources(); + return result; + } + public void ForceInterleavedReprojectionOn(bool bOverride) + { + FnTable.ForceInterleavedReprojectionOn(bOverride); + } + public void ForceReconnectProcess() + { + FnTable.ForceReconnectProcess(); + } + public void SuspendRendering(bool bSuspend) + { + FnTable.SuspendRendering(bSuspend); + } + public EVRCompositorError GetMirrorTextureD3D11(EVREye eEye,IntPtr pD3D11DeviceOrResource,ref IntPtr ppD3D11ShaderResourceView) + { + EVRCompositorError result = FnTable.GetMirrorTextureD3D11(eEye,pD3D11DeviceOrResource,ref ppD3D11ShaderResourceView); + return result; + } + public void ReleaseMirrorTextureD3D11(IntPtr pD3D11ShaderResourceView) + { + FnTable.ReleaseMirrorTextureD3D11(pD3D11ShaderResourceView); + } + public EVRCompositorError GetMirrorTextureGL(EVREye eEye,ref uint pglTextureId,IntPtr pglSharedTextureHandle) + { + pglTextureId = 0; + EVRCompositorError result = FnTable.GetMirrorTextureGL(eEye,ref pglTextureId,pglSharedTextureHandle); + return result; + } + public bool ReleaseSharedGLTexture(uint glTextureId,IntPtr glSharedTextureHandle) + { + bool result = FnTable.ReleaseSharedGLTexture(glTextureId,glSharedTextureHandle); + return result; + } + public void LockGLSharedTextureForAccess(IntPtr glSharedTextureHandle) + { + FnTable.LockGLSharedTextureForAccess(glSharedTextureHandle); + } + public void UnlockGLSharedTextureForAccess(IntPtr glSharedTextureHandle) + { + FnTable.UnlockGLSharedTextureForAccess(glSharedTextureHandle); + } + public uint GetVulkanInstanceExtensionsRequired(System.Text.StringBuilder pchValue,uint unBufferSize) + { + uint result = FnTable.GetVulkanInstanceExtensionsRequired(pchValue,unBufferSize); + return result; + } + public uint GetVulkanDeviceExtensionsRequired(IntPtr pPhysicalDevice,System.Text.StringBuilder pchValue,uint unBufferSize) + { + uint result = FnTable.GetVulkanDeviceExtensionsRequired(pPhysicalDevice,pchValue,unBufferSize); + return result; + } + public void SetExplicitTimingMode(EVRCompositorTimingMode eTimingMode) + { + FnTable.SetExplicitTimingMode(eTimingMode); + } + public EVRCompositorError SubmitExplicitTimingData() + { + EVRCompositorError result = FnTable.SubmitExplicitTimingData(); + return result; + } + public bool IsMotionSmoothingEnabled() + { + bool result = FnTable.IsMotionSmoothingEnabled(); + return result; + } + public bool IsMotionSmoothingSupported() + { + bool result = FnTable.IsMotionSmoothingSupported(); + return result; + } + public bool IsCurrentSceneFocusAppLoading() + { + bool result = FnTable.IsCurrentSceneFocusAppLoading(); + return result; + } + public EVRCompositorError SetStageOverride_Async(string pchRenderModelPath,ref HmdMatrix34_t pTransform,ref Compositor_StageRenderSettings pRenderSettings,uint nSizeOfRenderSettings) + { + IntPtr pchRenderModelPathUtf8 = Utils.ToUtf8(pchRenderModelPath); + EVRCompositorError result = FnTable.SetStageOverride_Async(pchRenderModelPathUtf8,ref pTransform,ref pRenderSettings,nSizeOfRenderSettings); + Marshal.FreeHGlobal(pchRenderModelPathUtf8); + return result; + } + public void ClearStageOverride() + { + FnTable.ClearStageOverride(); + } + public bool GetCompositorBenchmarkResults(ref Compositor_BenchmarkResults pBenchmarkResults,uint nSizeOfBenchmarkResults) + { + bool result = FnTable.GetCompositorBenchmarkResults(ref pBenchmarkResults,nSizeOfBenchmarkResults); + return result; + } + public EVRCompositorError GetLastPosePredictionIDs(ref uint pRenderPosePredictionID,ref uint pGamePosePredictionID) + { + pRenderPosePredictionID = 0; + pGamePosePredictionID = 0; + EVRCompositorError result = FnTable.GetLastPosePredictionIDs(ref pRenderPosePredictionID,ref pGamePosePredictionID); + return result; + } + public EVRCompositorError GetPosesForFrame(uint unPosePredictionID,TrackedDevicePose_t [] pPoseArray) + { + EVRCompositorError result = FnTable.GetPosesForFrame(unPosePredictionID,pPoseArray,(uint) pPoseArray.Length); + return result; + } +} + + +public class CVROverlay +{ + IVROverlay FnTable; + internal CVROverlay(IntPtr pInterface) + { + FnTable = (IVROverlay)Marshal.PtrToStructure(pInterface, typeof(IVROverlay)); + } + public EVROverlayError FindOverlay(string pchOverlayKey,ref ulong pOverlayHandle) + { + IntPtr pchOverlayKeyUtf8 = Utils.ToUtf8(pchOverlayKey); + pOverlayHandle = 0; + EVROverlayError result = FnTable.FindOverlay(pchOverlayKeyUtf8,ref pOverlayHandle); + Marshal.FreeHGlobal(pchOverlayKeyUtf8); + return result; + } + public EVROverlayError CreateOverlay(string pchOverlayKey,string pchOverlayName,ref ulong pOverlayHandle) + { + IntPtr pchOverlayKeyUtf8 = Utils.ToUtf8(pchOverlayKey); + IntPtr pchOverlayNameUtf8 = Utils.ToUtf8(pchOverlayName); + pOverlayHandle = 0; + EVROverlayError result = FnTable.CreateOverlay(pchOverlayKeyUtf8,pchOverlayNameUtf8,ref pOverlayHandle); + Marshal.FreeHGlobal(pchOverlayKeyUtf8); + Marshal.FreeHGlobal(pchOverlayNameUtf8); + return result; + } + public EVROverlayError DestroyOverlay(ulong ulOverlayHandle) + { + EVROverlayError result = FnTable.DestroyOverlay(ulOverlayHandle); + return result; + } + public uint GetOverlayKey(ulong ulOverlayHandle,System.Text.StringBuilder pchValue,uint unBufferSize,ref EVROverlayError pError) + { + uint result = FnTable.GetOverlayKey(ulOverlayHandle,pchValue,unBufferSize,ref pError); + return result; + } + public uint GetOverlayName(ulong ulOverlayHandle,System.Text.StringBuilder pchValue,uint unBufferSize,ref EVROverlayError pError) + { + uint result = FnTable.GetOverlayName(ulOverlayHandle,pchValue,unBufferSize,ref pError); + return result; + } + public EVROverlayError SetOverlayName(ulong ulOverlayHandle,string pchName) + { + IntPtr pchNameUtf8 = Utils.ToUtf8(pchName); + EVROverlayError result = FnTable.SetOverlayName(ulOverlayHandle,pchNameUtf8); + Marshal.FreeHGlobal(pchNameUtf8); + return result; + } + public EVROverlayError GetOverlayImageData(ulong ulOverlayHandle,IntPtr pvBuffer,uint unBufferSize,ref uint punWidth,ref uint punHeight) + { + punWidth = 0; + punHeight = 0; + EVROverlayError result = FnTable.GetOverlayImageData(ulOverlayHandle,pvBuffer,unBufferSize,ref punWidth,ref punHeight); + return result; + } + public string GetOverlayErrorNameFromEnum(EVROverlayError error) + { + IntPtr result = FnTable.GetOverlayErrorNameFromEnum(error); + return Marshal.PtrToStringAnsi(result); + } + public EVROverlayError SetOverlayRenderingPid(ulong ulOverlayHandle,uint unPID) + { + EVROverlayError result = FnTable.SetOverlayRenderingPid(ulOverlayHandle,unPID); + return result; + } + public uint GetOverlayRenderingPid(ulong ulOverlayHandle) + { + uint result = FnTable.GetOverlayRenderingPid(ulOverlayHandle); + return result; + } + public EVROverlayError SetOverlayFlag(ulong ulOverlayHandle,VROverlayFlags eOverlayFlag,bool bEnabled) + { + EVROverlayError result = FnTable.SetOverlayFlag(ulOverlayHandle,eOverlayFlag,bEnabled); + return result; + } + public EVROverlayError GetOverlayFlag(ulong ulOverlayHandle,VROverlayFlags eOverlayFlag,ref bool pbEnabled) + { + pbEnabled = false; + EVROverlayError result = FnTable.GetOverlayFlag(ulOverlayHandle,eOverlayFlag,ref pbEnabled); + return result; + } + public EVROverlayError GetOverlayFlags(ulong ulOverlayHandle,ref uint pFlags) + { + pFlags = 0; + EVROverlayError result = FnTable.GetOverlayFlags(ulOverlayHandle,ref pFlags); + return result; + } + public EVROverlayError SetOverlayColor(ulong ulOverlayHandle,float fRed,float fGreen,float fBlue) + { + EVROverlayError result = FnTable.SetOverlayColor(ulOverlayHandle,fRed,fGreen,fBlue); + return result; + } + public EVROverlayError GetOverlayColor(ulong ulOverlayHandle,ref float pfRed,ref float pfGreen,ref float pfBlue) + { + pfRed = 0; + pfGreen = 0; + pfBlue = 0; + EVROverlayError result = FnTable.GetOverlayColor(ulOverlayHandle,ref pfRed,ref pfGreen,ref pfBlue); + return result; + } + public EVROverlayError SetOverlayAlpha(ulong ulOverlayHandle,float fAlpha) + { + EVROverlayError result = FnTable.SetOverlayAlpha(ulOverlayHandle,fAlpha); + return result; + } + public EVROverlayError GetOverlayAlpha(ulong ulOverlayHandle,ref float pfAlpha) + { + pfAlpha = 0; + EVROverlayError result = FnTable.GetOverlayAlpha(ulOverlayHandle,ref pfAlpha); + return result; + } + public EVROverlayError SetOverlayTexelAspect(ulong ulOverlayHandle,float fTexelAspect) + { + EVROverlayError result = FnTable.SetOverlayTexelAspect(ulOverlayHandle,fTexelAspect); + return result; + } + public EVROverlayError GetOverlayTexelAspect(ulong ulOverlayHandle,ref float pfTexelAspect) + { + pfTexelAspect = 0; + EVROverlayError result = FnTable.GetOverlayTexelAspect(ulOverlayHandle,ref pfTexelAspect); + return result; + } + public EVROverlayError SetOverlaySortOrder(ulong ulOverlayHandle,uint unSortOrder) + { + EVROverlayError result = FnTable.SetOverlaySortOrder(ulOverlayHandle,unSortOrder); + return result; + } + public EVROverlayError GetOverlaySortOrder(ulong ulOverlayHandle,ref uint punSortOrder) + { + punSortOrder = 0; + EVROverlayError result = FnTable.GetOverlaySortOrder(ulOverlayHandle,ref punSortOrder); + return result; + } + public EVROverlayError SetOverlayWidthInMeters(ulong ulOverlayHandle,float fWidthInMeters) + { + EVROverlayError result = FnTable.SetOverlayWidthInMeters(ulOverlayHandle,fWidthInMeters); + return result; + } + public EVROverlayError GetOverlayWidthInMeters(ulong ulOverlayHandle,ref float pfWidthInMeters) + { + pfWidthInMeters = 0; + EVROverlayError result = FnTable.GetOverlayWidthInMeters(ulOverlayHandle,ref pfWidthInMeters); + return result; + } + public EVROverlayError SetOverlayCurvature(ulong ulOverlayHandle,float fCurvature) + { + EVROverlayError result = FnTable.SetOverlayCurvature(ulOverlayHandle,fCurvature); + return result; + } + public EVROverlayError GetOverlayCurvature(ulong ulOverlayHandle,ref float pfCurvature) + { + pfCurvature = 0; + EVROverlayError result = FnTable.GetOverlayCurvature(ulOverlayHandle,ref pfCurvature); + return result; + } + public EVROverlayError SetOverlayTextureColorSpace(ulong ulOverlayHandle,EColorSpace eTextureColorSpace) + { + EVROverlayError result = FnTable.SetOverlayTextureColorSpace(ulOverlayHandle,eTextureColorSpace); + return result; + } + public EVROverlayError GetOverlayTextureColorSpace(ulong ulOverlayHandle,ref EColorSpace peTextureColorSpace) + { + EVROverlayError result = FnTable.GetOverlayTextureColorSpace(ulOverlayHandle,ref peTextureColorSpace); + return result; + } + public EVROverlayError SetOverlayTextureBounds(ulong ulOverlayHandle,ref VRTextureBounds_t pOverlayTextureBounds) + { + EVROverlayError result = FnTable.SetOverlayTextureBounds(ulOverlayHandle,ref pOverlayTextureBounds); + return result; + } + public EVROverlayError GetOverlayTextureBounds(ulong ulOverlayHandle,ref VRTextureBounds_t pOverlayTextureBounds) + { + EVROverlayError result = FnTable.GetOverlayTextureBounds(ulOverlayHandle,ref pOverlayTextureBounds); + return result; + } + public EVROverlayError GetOverlayTransformType(ulong ulOverlayHandle,ref VROverlayTransformType peTransformType) + { + EVROverlayError result = FnTable.GetOverlayTransformType(ulOverlayHandle,ref peTransformType); + return result; + } + public EVROverlayError SetOverlayTransformAbsolute(ulong ulOverlayHandle,ETrackingUniverseOrigin eTrackingOrigin,ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform) + { + EVROverlayError result = FnTable.SetOverlayTransformAbsolute(ulOverlayHandle,eTrackingOrigin,ref pmatTrackingOriginToOverlayTransform); + return result; + } + public EVROverlayError GetOverlayTransformAbsolute(ulong ulOverlayHandle,ref ETrackingUniverseOrigin peTrackingOrigin,ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform) + { + EVROverlayError result = FnTable.GetOverlayTransformAbsolute(ulOverlayHandle,ref peTrackingOrigin,ref pmatTrackingOriginToOverlayTransform); + return result; + } + public EVROverlayError SetOverlayTransformTrackedDeviceRelative(ulong ulOverlayHandle,uint unTrackedDevice,ref HmdMatrix34_t pmatTrackedDeviceToOverlayTransform) + { + EVROverlayError result = FnTable.SetOverlayTransformTrackedDeviceRelative(ulOverlayHandle,unTrackedDevice,ref pmatTrackedDeviceToOverlayTransform); + return result; + } + public EVROverlayError GetOverlayTransformTrackedDeviceRelative(ulong ulOverlayHandle,ref uint punTrackedDevice,ref HmdMatrix34_t pmatTrackedDeviceToOverlayTransform) + { + punTrackedDevice = 0; + EVROverlayError result = FnTable.GetOverlayTransformTrackedDeviceRelative(ulOverlayHandle,ref punTrackedDevice,ref pmatTrackedDeviceToOverlayTransform); + return result; + } + public EVROverlayError SetOverlayTransformTrackedDeviceComponent(ulong ulOverlayHandle,uint unDeviceIndex,string pchComponentName) + { + IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); + EVROverlayError result = FnTable.SetOverlayTransformTrackedDeviceComponent(ulOverlayHandle,unDeviceIndex,pchComponentNameUtf8); + Marshal.FreeHGlobal(pchComponentNameUtf8); + return result; + } + public EVROverlayError GetOverlayTransformTrackedDeviceComponent(ulong ulOverlayHandle,ref uint punDeviceIndex,System.Text.StringBuilder pchComponentName,uint unComponentNameSize) + { + punDeviceIndex = 0; + EVROverlayError result = FnTable.GetOverlayTransformTrackedDeviceComponent(ulOverlayHandle,ref punDeviceIndex,pchComponentName,unComponentNameSize); + return result; + } + public EVROverlayError GetOverlayTransformOverlayRelative(ulong ulOverlayHandle,ref ulong ulOverlayHandleParent,ref HmdMatrix34_t pmatParentOverlayToOverlayTransform) + { + ulOverlayHandleParent = 0; + EVROverlayError result = FnTable.GetOverlayTransformOverlayRelative(ulOverlayHandle,ref ulOverlayHandleParent,ref pmatParentOverlayToOverlayTransform); + return result; + } + public EVROverlayError SetOverlayTransformOverlayRelative(ulong ulOverlayHandle,ulong ulOverlayHandleParent,ref HmdMatrix34_t pmatParentOverlayToOverlayTransform) + { + EVROverlayError result = FnTable.SetOverlayTransformOverlayRelative(ulOverlayHandle,ulOverlayHandleParent,ref pmatParentOverlayToOverlayTransform); + return result; + } + public EVROverlayError SetOverlayTransformCursor(ulong ulCursorOverlayHandle,ref HmdVector2_t pvHotspot) + { + EVROverlayError result = FnTable.SetOverlayTransformCursor(ulCursorOverlayHandle,ref pvHotspot); + return result; + } + public EVROverlayError GetOverlayTransformCursor(ulong ulOverlayHandle,ref HmdVector2_t pvHotspot) + { + EVROverlayError result = FnTable.GetOverlayTransformCursor(ulOverlayHandle,ref pvHotspot); + return result; + } + public EVROverlayError SetOverlayTransformProjection(ulong ulOverlayHandle,ETrackingUniverseOrigin eTrackingOrigin,ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform,ref VROverlayProjection_t pProjection,EVREye eEye) + { + EVROverlayError result = FnTable.SetOverlayTransformProjection(ulOverlayHandle,eTrackingOrigin,ref pmatTrackingOriginToOverlayTransform,ref pProjection,eEye); + return result; + } + public EVROverlayError ShowOverlay(ulong ulOverlayHandle) + { + EVROverlayError result = FnTable.ShowOverlay(ulOverlayHandle); + return result; + } + public EVROverlayError HideOverlay(ulong ulOverlayHandle) + { + EVROverlayError result = FnTable.HideOverlay(ulOverlayHandle); + return result; + } + public bool IsOverlayVisible(ulong ulOverlayHandle) + { + bool result = FnTable.IsOverlayVisible(ulOverlayHandle); + return result; + } + public EVROverlayError GetTransformForOverlayCoordinates(ulong ulOverlayHandle,ETrackingUniverseOrigin eTrackingOrigin,HmdVector2_t coordinatesInOverlay,ref HmdMatrix34_t pmatTransform) + { + EVROverlayError result = FnTable.GetTransformForOverlayCoordinates(ulOverlayHandle,eTrackingOrigin,coordinatesInOverlay,ref pmatTransform); + return result; + } +// This is a terrible hack to workaround the fact that VRControllerState_t and VREvent_t were +// originally mis-compiled with the wrong packing for Linux and OSX. + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _PollNextOverlayEventPacked(ulong ulOverlayHandle,ref VREvent_t_Packed pEvent,uint uncbVREvent); + [StructLayout(LayoutKind.Explicit)] + struct PollNextOverlayEventUnion + { + [FieldOffset(0)] + public IVROverlay._PollNextOverlayEvent pPollNextOverlayEvent; + [FieldOffset(0)] + public _PollNextOverlayEventPacked pPollNextOverlayEventPacked; + } + public bool PollNextOverlayEvent(ulong ulOverlayHandle,ref VREvent_t pEvent,uint uncbVREvent) + { +#if !UNITY_METRO + if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) || + (System.Environment.OSVersion.Platform == System.PlatformID.Unix)) + { + PollNextOverlayEventUnion u; + VREvent_t_Packed event_packed = new VREvent_t_Packed(); + u.pPollNextOverlayEventPacked = null; + u.pPollNextOverlayEvent = FnTable.PollNextOverlayEvent; + bool packed_result = u.pPollNextOverlayEventPacked(ulOverlayHandle,ref event_packed,(uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VREvent_t_Packed))); + + event_packed.Unpack(ref pEvent); + return packed_result; + } +#endif + bool result = FnTable.PollNextOverlayEvent(ulOverlayHandle,ref pEvent,uncbVREvent); + return result; + } + public EVROverlayError GetOverlayInputMethod(ulong ulOverlayHandle,ref VROverlayInputMethod peInputMethod) + { + EVROverlayError result = FnTable.GetOverlayInputMethod(ulOverlayHandle,ref peInputMethod); + return result; + } + public EVROverlayError SetOverlayInputMethod(ulong ulOverlayHandle,VROverlayInputMethod eInputMethod) + { + EVROverlayError result = FnTable.SetOverlayInputMethod(ulOverlayHandle,eInputMethod); + return result; + } + public EVROverlayError GetOverlayMouseScale(ulong ulOverlayHandle,ref HmdVector2_t pvecMouseScale) + { + EVROverlayError result = FnTable.GetOverlayMouseScale(ulOverlayHandle,ref pvecMouseScale); + return result; + } + public EVROverlayError SetOverlayMouseScale(ulong ulOverlayHandle,ref HmdVector2_t pvecMouseScale) + { + EVROverlayError result = FnTable.SetOverlayMouseScale(ulOverlayHandle,ref pvecMouseScale); + return result; + } + public bool ComputeOverlayIntersection(ulong ulOverlayHandle,ref VROverlayIntersectionParams_t pParams,ref VROverlayIntersectionResults_t pResults) + { + bool result = FnTable.ComputeOverlayIntersection(ulOverlayHandle,ref pParams,ref pResults); + return result; + } + public bool IsHoverTargetOverlay(ulong ulOverlayHandle) + { + bool result = FnTable.IsHoverTargetOverlay(ulOverlayHandle); + return result; + } + public EVROverlayError SetOverlayIntersectionMask(ulong ulOverlayHandle,ref VROverlayIntersectionMaskPrimitive_t pMaskPrimitives,uint unNumMaskPrimitives,uint unPrimitiveSize) + { + EVROverlayError result = FnTable.SetOverlayIntersectionMask(ulOverlayHandle,ref pMaskPrimitives,unNumMaskPrimitives,unPrimitiveSize); + return result; + } + public EVROverlayError TriggerLaserMouseHapticVibration(ulong ulOverlayHandle,float fDurationSeconds,float fFrequency,float fAmplitude) + { + EVROverlayError result = FnTable.TriggerLaserMouseHapticVibration(ulOverlayHandle,fDurationSeconds,fFrequency,fAmplitude); + return result; + } + public EVROverlayError SetOverlayCursor(ulong ulOverlayHandle,ulong ulCursorHandle) + { + EVROverlayError result = FnTable.SetOverlayCursor(ulOverlayHandle,ulCursorHandle); + return result; + } + public EVROverlayError SetOverlayCursorPositionOverride(ulong ulOverlayHandle,ref HmdVector2_t pvCursor) + { + EVROverlayError result = FnTable.SetOverlayCursorPositionOverride(ulOverlayHandle,ref pvCursor); + return result; + } + public EVROverlayError ClearOverlayCursorPositionOverride(ulong ulOverlayHandle) + { + EVROverlayError result = FnTable.ClearOverlayCursorPositionOverride(ulOverlayHandle); + return result; + } + public EVROverlayError SetOverlayTexture(ulong ulOverlayHandle,ref Texture_t pTexture) + { + EVROverlayError result = FnTable.SetOverlayTexture(ulOverlayHandle,ref pTexture); + return result; + } + public EVROverlayError ClearOverlayTexture(ulong ulOverlayHandle) + { + EVROverlayError result = FnTable.ClearOverlayTexture(ulOverlayHandle); + return result; + } + public EVROverlayError SetOverlayRaw(ulong ulOverlayHandle,IntPtr pvBuffer,uint unWidth,uint unHeight,uint unBytesPerPixel) + { + EVROverlayError result = FnTable.SetOverlayRaw(ulOverlayHandle,pvBuffer,unWidth,unHeight,unBytesPerPixel); + return result; + } + public EVROverlayError SetOverlayFromFile(ulong ulOverlayHandle,string pchFilePath) + { + IntPtr pchFilePathUtf8 = Utils.ToUtf8(pchFilePath); + EVROverlayError result = FnTable.SetOverlayFromFile(ulOverlayHandle,pchFilePathUtf8); + Marshal.FreeHGlobal(pchFilePathUtf8); + return result; + } + public EVROverlayError GetOverlayTexture(ulong ulOverlayHandle,ref IntPtr pNativeTextureHandle,IntPtr pNativeTextureRef,ref uint pWidth,ref uint pHeight,ref uint pNativeFormat,ref ETextureType pAPIType,ref EColorSpace pColorSpace,ref VRTextureBounds_t pTextureBounds) + { + pWidth = 0; + pHeight = 0; + pNativeFormat = 0; + EVROverlayError result = FnTable.GetOverlayTexture(ulOverlayHandle,ref pNativeTextureHandle,pNativeTextureRef,ref pWidth,ref pHeight,ref pNativeFormat,ref pAPIType,ref pColorSpace,ref pTextureBounds); + return result; + } + public EVROverlayError ReleaseNativeOverlayHandle(ulong ulOverlayHandle,IntPtr pNativeTextureHandle) + { + EVROverlayError result = FnTable.ReleaseNativeOverlayHandle(ulOverlayHandle,pNativeTextureHandle); + return result; + } + public EVROverlayError GetOverlayTextureSize(ulong ulOverlayHandle,ref uint pWidth,ref uint pHeight) + { + pWidth = 0; + pHeight = 0; + EVROverlayError result = FnTable.GetOverlayTextureSize(ulOverlayHandle,ref pWidth,ref pHeight); + return result; + } + public EVROverlayError CreateDashboardOverlay(string pchOverlayKey,string pchOverlayFriendlyName,ref ulong pMainHandle,ref ulong pThumbnailHandle) + { + IntPtr pchOverlayKeyUtf8 = Utils.ToUtf8(pchOverlayKey); + IntPtr pchOverlayFriendlyNameUtf8 = Utils.ToUtf8(pchOverlayFriendlyName); + pMainHandle = 0; + pThumbnailHandle = 0; + EVROverlayError result = FnTable.CreateDashboardOverlay(pchOverlayKeyUtf8,pchOverlayFriendlyNameUtf8,ref pMainHandle,ref pThumbnailHandle); + Marshal.FreeHGlobal(pchOverlayKeyUtf8); + Marshal.FreeHGlobal(pchOverlayFriendlyNameUtf8); + return result; + } + public bool IsDashboardVisible() + { + bool result = FnTable.IsDashboardVisible(); + return result; + } + public bool IsActiveDashboardOverlay(ulong ulOverlayHandle) + { + bool result = FnTable.IsActiveDashboardOverlay(ulOverlayHandle); + return result; + } + public EVROverlayError SetDashboardOverlaySceneProcess(ulong ulOverlayHandle,uint unProcessId) + { + EVROverlayError result = FnTable.SetDashboardOverlaySceneProcess(ulOverlayHandle,unProcessId); + return result; + } + public EVROverlayError GetDashboardOverlaySceneProcess(ulong ulOverlayHandle,ref uint punProcessId) + { + punProcessId = 0; + EVROverlayError result = FnTable.GetDashboardOverlaySceneProcess(ulOverlayHandle,ref punProcessId); + return result; + } + public void ShowDashboard(string pchOverlayToShow) + { + IntPtr pchOverlayToShowUtf8 = Utils.ToUtf8(pchOverlayToShow); + FnTable.ShowDashboard(pchOverlayToShowUtf8); + Marshal.FreeHGlobal(pchOverlayToShowUtf8); + } + public uint GetPrimaryDashboardDevice() + { + uint result = FnTable.GetPrimaryDashboardDevice(); + return result; + } + public EVROverlayError ShowKeyboard(int eInputMode,int eLineInputMode,uint unFlags,string pchDescription,uint unCharMax,string pchExistingText,ulong uUserValue) + { + IntPtr pchDescriptionUtf8 = Utils.ToUtf8(pchDescription); + IntPtr pchExistingTextUtf8 = Utils.ToUtf8(pchExistingText); + EVROverlayError result = FnTable.ShowKeyboard(eInputMode,eLineInputMode,unFlags,pchDescriptionUtf8,unCharMax,pchExistingTextUtf8,uUserValue); + Marshal.FreeHGlobal(pchDescriptionUtf8); + Marshal.FreeHGlobal(pchExistingTextUtf8); + return result; + } + public EVROverlayError ShowKeyboardForOverlay(ulong ulOverlayHandle,int eInputMode,int eLineInputMode,uint unFlags,string pchDescription,uint unCharMax,string pchExistingText,ulong uUserValue) + { + IntPtr pchDescriptionUtf8 = Utils.ToUtf8(pchDescription); + IntPtr pchExistingTextUtf8 = Utils.ToUtf8(pchExistingText); + EVROverlayError result = FnTable.ShowKeyboardForOverlay(ulOverlayHandle,eInputMode,eLineInputMode,unFlags,pchDescriptionUtf8,unCharMax,pchExistingTextUtf8,uUserValue); + Marshal.FreeHGlobal(pchDescriptionUtf8); + Marshal.FreeHGlobal(pchExistingTextUtf8); + return result; + } + public uint GetKeyboardText(System.Text.StringBuilder pchText,uint cchText) + { + uint result = FnTable.GetKeyboardText(pchText,cchText); + return result; + } + public void HideKeyboard() + { + FnTable.HideKeyboard(); + } + public void SetKeyboardTransformAbsolute(ETrackingUniverseOrigin eTrackingOrigin,ref HmdMatrix34_t pmatTrackingOriginToKeyboardTransform) + { + FnTable.SetKeyboardTransformAbsolute(eTrackingOrigin,ref pmatTrackingOriginToKeyboardTransform); + } + public void SetKeyboardPositionForOverlay(ulong ulOverlayHandle,HmdRect2_t avoidRect) + { + FnTable.SetKeyboardPositionForOverlay(ulOverlayHandle,avoidRect); + } + public VRMessageOverlayResponse ShowMessageOverlay(string pchText,string pchCaption,string pchButton0Text,string pchButton1Text,string pchButton2Text,string pchButton3Text) + { + IntPtr pchTextUtf8 = Utils.ToUtf8(pchText); + IntPtr pchCaptionUtf8 = Utils.ToUtf8(pchCaption); + IntPtr pchButton0TextUtf8 = Utils.ToUtf8(pchButton0Text); + IntPtr pchButton1TextUtf8 = Utils.ToUtf8(pchButton1Text); + IntPtr pchButton2TextUtf8 = Utils.ToUtf8(pchButton2Text); + IntPtr pchButton3TextUtf8 = Utils.ToUtf8(pchButton3Text); + VRMessageOverlayResponse result = FnTable.ShowMessageOverlay(pchTextUtf8,pchCaptionUtf8,pchButton0TextUtf8,pchButton1TextUtf8,pchButton2TextUtf8,pchButton3TextUtf8); + Marshal.FreeHGlobal(pchTextUtf8); + Marshal.FreeHGlobal(pchCaptionUtf8); + Marshal.FreeHGlobal(pchButton0TextUtf8); + Marshal.FreeHGlobal(pchButton1TextUtf8); + Marshal.FreeHGlobal(pchButton2TextUtf8); + Marshal.FreeHGlobal(pchButton3TextUtf8); + return result; + } + public void CloseMessageOverlay() + { + FnTable.CloseMessageOverlay(); + } +} + + +public class CVROverlayView +{ + IVROverlayView FnTable; + internal CVROverlayView(IntPtr pInterface) + { + FnTable = (IVROverlayView)Marshal.PtrToStructure(pInterface, typeof(IVROverlayView)); + } + public EVROverlayError AcquireOverlayView(ulong ulOverlayHandle,ref VRNativeDevice_t pNativeDevice,ref VROverlayView_t pOverlayView,uint unOverlayViewSize) + { + EVROverlayError result = FnTable.AcquireOverlayView(ulOverlayHandle,ref pNativeDevice,ref pOverlayView,unOverlayViewSize); + return result; + } + public EVROverlayError ReleaseOverlayView(ref VROverlayView_t pOverlayView) + { + EVROverlayError result = FnTable.ReleaseOverlayView(ref pOverlayView); + return result; + } + public void PostOverlayEvent(ulong ulOverlayHandle,ref VREvent_t pvrEvent) + { + FnTable.PostOverlayEvent(ulOverlayHandle,ref pvrEvent); + } + public bool IsViewingPermitted(ulong ulOverlayHandle) + { + bool result = FnTable.IsViewingPermitted(ulOverlayHandle); + return result; + } +} + + +public class CVRHeadsetView +{ + IVRHeadsetView FnTable; + internal CVRHeadsetView(IntPtr pInterface) + { + FnTable = (IVRHeadsetView)Marshal.PtrToStructure(pInterface, typeof(IVRHeadsetView)); + } + public void SetHeadsetViewSize(uint nWidth,uint nHeight) + { + FnTable.SetHeadsetViewSize(nWidth,nHeight); + } + public void GetHeadsetViewSize(ref uint pnWidth,ref uint pnHeight) + { + pnWidth = 0; + pnHeight = 0; + FnTable.GetHeadsetViewSize(ref pnWidth,ref pnHeight); + } + public void SetHeadsetViewMode(uint eHeadsetViewMode) + { + FnTable.SetHeadsetViewMode(eHeadsetViewMode); + } + public uint GetHeadsetViewMode() + { + uint result = FnTable.GetHeadsetViewMode(); + return result; + } + public void SetHeadsetViewCropped(bool bCropped) + { + FnTable.SetHeadsetViewCropped(bCropped); + } + public bool GetHeadsetViewCropped() + { + bool result = FnTable.GetHeadsetViewCropped(); + return result; + } + public float GetHeadsetViewAspectRatio() + { + float result = FnTable.GetHeadsetViewAspectRatio(); + return result; + } + public void SetHeadsetViewBlendRange(float flStartPct,float flEndPct) + { + FnTable.SetHeadsetViewBlendRange(flStartPct,flEndPct); + } + public void GetHeadsetViewBlendRange(ref float pStartPct,ref float pEndPct) + { + pStartPct = 0; + pEndPct = 0; + FnTable.GetHeadsetViewBlendRange(ref pStartPct,ref pEndPct); + } +} + + +public class CVRRenderModels +{ + IVRRenderModels FnTable; + internal CVRRenderModels(IntPtr pInterface) + { + FnTable = (IVRRenderModels)Marshal.PtrToStructure(pInterface, typeof(IVRRenderModels)); + } + public EVRRenderModelError LoadRenderModel_Async(string pchRenderModelName,ref IntPtr ppRenderModel) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + EVRRenderModelError result = FnTable.LoadRenderModel_Async(pchRenderModelNameUtf8,ref ppRenderModel); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + return result; + } + public void FreeRenderModel(IntPtr pRenderModel) + { + FnTable.FreeRenderModel(pRenderModel); + } + public EVRRenderModelError LoadTexture_Async(int textureId,ref IntPtr ppTexture) + { + EVRRenderModelError result = FnTable.LoadTexture_Async(textureId,ref ppTexture); + return result; + } + public void FreeTexture(IntPtr pTexture) + { + FnTable.FreeTexture(pTexture); + } + public EVRRenderModelError LoadTextureD3D11_Async(int textureId,IntPtr pD3D11Device,ref IntPtr ppD3D11Texture2D) + { + EVRRenderModelError result = FnTable.LoadTextureD3D11_Async(textureId,pD3D11Device,ref ppD3D11Texture2D); + return result; + } + public EVRRenderModelError LoadIntoTextureD3D11_Async(int textureId,IntPtr pDstTexture) + { + EVRRenderModelError result = FnTable.LoadIntoTextureD3D11_Async(textureId,pDstTexture); + return result; + } + public void FreeTextureD3D11(IntPtr pD3D11Texture2D) + { + FnTable.FreeTextureD3D11(pD3D11Texture2D); + } + public uint GetRenderModelName(uint unRenderModelIndex,System.Text.StringBuilder pchRenderModelName,uint unRenderModelNameLen) + { + uint result = FnTable.GetRenderModelName(unRenderModelIndex,pchRenderModelName,unRenderModelNameLen); + return result; + } + public uint GetRenderModelCount() + { + uint result = FnTable.GetRenderModelCount(); + return result; + } + public uint GetComponentCount(string pchRenderModelName) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + uint result = FnTable.GetComponentCount(pchRenderModelNameUtf8); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + return result; + } + public uint GetComponentName(string pchRenderModelName,uint unComponentIndex,System.Text.StringBuilder pchComponentName,uint unComponentNameLen) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + uint result = FnTable.GetComponentName(pchRenderModelNameUtf8,unComponentIndex,pchComponentName,unComponentNameLen); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + return result; + } + public ulong GetComponentButtonMask(string pchRenderModelName,string pchComponentName) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); + ulong result = FnTable.GetComponentButtonMask(pchRenderModelNameUtf8,pchComponentNameUtf8); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + Marshal.FreeHGlobal(pchComponentNameUtf8); + return result; + } + public uint GetComponentRenderModelName(string pchRenderModelName,string pchComponentName,System.Text.StringBuilder pchComponentRenderModelName,uint unComponentRenderModelNameLen) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); + uint result = FnTable.GetComponentRenderModelName(pchRenderModelNameUtf8,pchComponentNameUtf8,pchComponentRenderModelName,unComponentRenderModelNameLen); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + Marshal.FreeHGlobal(pchComponentNameUtf8); + return result; + } + public bool GetComponentStateForDevicePath(string pchRenderModelName,string pchComponentName,ulong devicePath,ref RenderModel_ControllerMode_State_t pState,ref RenderModel_ComponentState_t pComponentState) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); + bool result = FnTable.GetComponentStateForDevicePath(pchRenderModelNameUtf8,pchComponentNameUtf8,devicePath,ref pState,ref pComponentState); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + Marshal.FreeHGlobal(pchComponentNameUtf8); + return result; + } +// This is a terrible hack to workaround the fact that VRControllerState_t and VREvent_t were +// originally mis-compiled with the wrong packing for Linux and OSX. + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + internal delegate bool _GetComponentStatePacked(IntPtr pchRenderModelName,IntPtr pchComponentName,ref VRControllerState_t_Packed pControllerState,ref RenderModel_ControllerMode_State_t pState,ref RenderModel_ComponentState_t pComponentState); + [StructLayout(LayoutKind.Explicit)] + struct GetComponentStateUnion + { + [FieldOffset(0)] + public IVRRenderModels._GetComponentState pGetComponentState; + [FieldOffset(0)] + public _GetComponentStatePacked pGetComponentStatePacked; + } + public bool GetComponentState(string pchRenderModelName,string pchComponentName,ref VRControllerState_t pControllerState,ref RenderModel_ControllerMode_State_t pState,ref RenderModel_ComponentState_t pComponentState) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); +#if !UNITY_METRO + if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) || + (System.Environment.OSVersion.Platform == System.PlatformID.Unix)) + { + GetComponentStateUnion u; + VRControllerState_t_Packed state_packed = new VRControllerState_t_Packed(pControllerState); + u.pGetComponentStatePacked = null; + u.pGetComponentState = FnTable.GetComponentState; + bool packed_result = u.pGetComponentStatePacked(pchRenderModelNameUtf8,pchComponentNameUtf8,ref state_packed,ref pState,ref pComponentState); + + state_packed.Unpack(ref pControllerState); + return packed_result; + } +#endif + bool result = FnTable.GetComponentState(pchRenderModelNameUtf8,pchComponentNameUtf8,ref pControllerState,ref pState,ref pComponentState); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + Marshal.FreeHGlobal(pchComponentNameUtf8); + return result; + } + public bool RenderModelHasComponent(string pchRenderModelName,string pchComponentName) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); + bool result = FnTable.RenderModelHasComponent(pchRenderModelNameUtf8,pchComponentNameUtf8); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + Marshal.FreeHGlobal(pchComponentNameUtf8); + return result; + } + public uint GetRenderModelThumbnailURL(string pchRenderModelName,System.Text.StringBuilder pchThumbnailURL,uint unThumbnailURLLen,ref EVRRenderModelError peError) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + uint result = FnTable.GetRenderModelThumbnailURL(pchRenderModelNameUtf8,pchThumbnailURL,unThumbnailURLLen,ref peError); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + return result; + } + public uint GetRenderModelOriginalPath(string pchRenderModelName,System.Text.StringBuilder pchOriginalPath,uint unOriginalPathLen,ref EVRRenderModelError peError) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + uint result = FnTable.GetRenderModelOriginalPath(pchRenderModelNameUtf8,pchOriginalPath,unOriginalPathLen,ref peError); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + return result; + } + public string GetRenderModelErrorNameFromEnum(EVRRenderModelError error) + { + IntPtr result = FnTable.GetRenderModelErrorNameFromEnum(error); + return Marshal.PtrToStringAnsi(result); + } +} + + +public class CVRNotifications +{ + IVRNotifications FnTable; + internal CVRNotifications(IntPtr pInterface) + { + FnTable = (IVRNotifications)Marshal.PtrToStructure(pInterface, typeof(IVRNotifications)); + } + public EVRNotificationError CreateNotification(ulong ulOverlayHandle,ulong ulUserValue,EVRNotificationType type,string pchText,EVRNotificationStyle style,ref NotificationBitmap_t pImage,ref uint pNotificationId) + { + IntPtr pchTextUtf8 = Utils.ToUtf8(pchText); + pNotificationId = 0; + EVRNotificationError result = FnTable.CreateNotification(ulOverlayHandle,ulUserValue,type,pchTextUtf8,style,ref pImage,ref pNotificationId); + Marshal.FreeHGlobal(pchTextUtf8); + return result; + } + public EVRNotificationError RemoveNotification(uint notificationId) + { + EVRNotificationError result = FnTable.RemoveNotification(notificationId); + return result; + } +} + + +public class CVRSettings +{ + IVRSettings FnTable; + internal CVRSettings(IntPtr pInterface) + { + FnTable = (IVRSettings)Marshal.PtrToStructure(pInterface, typeof(IVRSettings)); + } + public string GetSettingsErrorNameFromEnum(EVRSettingsError eError) + { + IntPtr result = FnTable.GetSettingsErrorNameFromEnum(eError); + return Marshal.PtrToStringAnsi(result); + } + public void SetBool(string pchSection,string pchSettingsKey,bool bValue,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + FnTable.SetBool(pchSectionUtf8,pchSettingsKeyUtf8,bValue,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + } + public void SetInt32(string pchSection,string pchSettingsKey,int nValue,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + FnTable.SetInt32(pchSectionUtf8,pchSettingsKeyUtf8,nValue,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + } + public void SetFloat(string pchSection,string pchSettingsKey,float flValue,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + FnTable.SetFloat(pchSectionUtf8,pchSettingsKeyUtf8,flValue,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + } + public void SetString(string pchSection,string pchSettingsKey,string pchValue,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + IntPtr pchValueUtf8 = Utils.ToUtf8(pchValue); + FnTable.SetString(pchSectionUtf8,pchSettingsKeyUtf8,pchValueUtf8,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + Marshal.FreeHGlobal(pchValueUtf8); + } + public bool GetBool(string pchSection,string pchSettingsKey,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + bool result = FnTable.GetBool(pchSectionUtf8,pchSettingsKeyUtf8,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + return result; + } + public int GetInt32(string pchSection,string pchSettingsKey,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + int result = FnTable.GetInt32(pchSectionUtf8,pchSettingsKeyUtf8,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + return result; + } + public float GetFloat(string pchSection,string pchSettingsKey,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + float result = FnTable.GetFloat(pchSectionUtf8,pchSettingsKeyUtf8,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + return result; + } + public void GetString(string pchSection,string pchSettingsKey,System.Text.StringBuilder pchValue,uint unValueLen,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + FnTable.GetString(pchSectionUtf8,pchSettingsKeyUtf8,pchValue,unValueLen,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + } + public void RemoveSection(string pchSection,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + FnTable.RemoveSection(pchSectionUtf8,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + } + public void RemoveKeyInSection(string pchSection,string pchSettingsKey,ref EVRSettingsError peError) + { + IntPtr pchSectionUtf8 = Utils.ToUtf8(pchSection); + IntPtr pchSettingsKeyUtf8 = Utils.ToUtf8(pchSettingsKey); + FnTable.RemoveKeyInSection(pchSectionUtf8,pchSettingsKeyUtf8,ref peError); + Marshal.FreeHGlobal(pchSectionUtf8); + Marshal.FreeHGlobal(pchSettingsKeyUtf8); + } +} + + +public class CVRScreenshots +{ + IVRScreenshots FnTable; + internal CVRScreenshots(IntPtr pInterface) + { + FnTable = (IVRScreenshots)Marshal.PtrToStructure(pInterface, typeof(IVRScreenshots)); + } + public EVRScreenshotError RequestScreenshot(ref uint pOutScreenshotHandle,EVRScreenshotType type,string pchPreviewFilename,string pchVRFilename) + { + pOutScreenshotHandle = 0; + IntPtr pchPreviewFilenameUtf8 = Utils.ToUtf8(pchPreviewFilename); + IntPtr pchVRFilenameUtf8 = Utils.ToUtf8(pchVRFilename); + EVRScreenshotError result = FnTable.RequestScreenshot(ref pOutScreenshotHandle,type,pchPreviewFilenameUtf8,pchVRFilenameUtf8); + Marshal.FreeHGlobal(pchPreviewFilenameUtf8); + Marshal.FreeHGlobal(pchVRFilenameUtf8); + return result; + } + public EVRScreenshotError HookScreenshot(EVRScreenshotType [] pSupportedTypes) + { + EVRScreenshotError result = FnTable.HookScreenshot(pSupportedTypes,(int) pSupportedTypes.Length); + return result; + } + public EVRScreenshotType GetScreenshotPropertyType(uint screenshotHandle,ref EVRScreenshotError pError) + { + EVRScreenshotType result = FnTable.GetScreenshotPropertyType(screenshotHandle,ref pError); + return result; + } + public uint GetScreenshotPropertyFilename(uint screenshotHandle,EVRScreenshotPropertyFilenames filenameType,System.Text.StringBuilder pchFilename,uint cchFilename,ref EVRScreenshotError pError) + { + uint result = FnTable.GetScreenshotPropertyFilename(screenshotHandle,filenameType,pchFilename,cchFilename,ref pError); + return result; + } + public EVRScreenshotError UpdateScreenshotProgress(uint screenshotHandle,float flProgress) + { + EVRScreenshotError result = FnTable.UpdateScreenshotProgress(screenshotHandle,flProgress); + return result; + } + public EVRScreenshotError TakeStereoScreenshot(ref uint pOutScreenshotHandle,string pchPreviewFilename,string pchVRFilename) + { + pOutScreenshotHandle = 0; + IntPtr pchPreviewFilenameUtf8 = Utils.ToUtf8(pchPreviewFilename); + IntPtr pchVRFilenameUtf8 = Utils.ToUtf8(pchVRFilename); + EVRScreenshotError result = FnTable.TakeStereoScreenshot(ref pOutScreenshotHandle,pchPreviewFilenameUtf8,pchVRFilenameUtf8); + Marshal.FreeHGlobal(pchPreviewFilenameUtf8); + Marshal.FreeHGlobal(pchVRFilenameUtf8); + return result; + } + public EVRScreenshotError SubmitScreenshot(uint screenshotHandle,EVRScreenshotType type,string pchSourcePreviewFilename,string pchSourceVRFilename) + { + IntPtr pchSourcePreviewFilenameUtf8 = Utils.ToUtf8(pchSourcePreviewFilename); + IntPtr pchSourceVRFilenameUtf8 = Utils.ToUtf8(pchSourceVRFilename); + EVRScreenshotError result = FnTable.SubmitScreenshot(screenshotHandle,type,pchSourcePreviewFilenameUtf8,pchSourceVRFilenameUtf8); + Marshal.FreeHGlobal(pchSourcePreviewFilenameUtf8); + Marshal.FreeHGlobal(pchSourceVRFilenameUtf8); + return result; + } +} + + +public class CVRResources +{ + IVRResources FnTable; + internal CVRResources(IntPtr pInterface) + { + FnTable = (IVRResources)Marshal.PtrToStructure(pInterface, typeof(IVRResources)); + } + public uint LoadSharedResource(string pchResourceName,string pchBuffer,uint unBufferLen) + { + IntPtr pchResourceNameUtf8 = Utils.ToUtf8(pchResourceName); + uint result = FnTable.LoadSharedResource(pchResourceNameUtf8,pchBuffer,unBufferLen); + Marshal.FreeHGlobal(pchResourceNameUtf8); + return result; + } + public uint GetResourceFullPath(string pchResourceName,string pchResourceTypeDirectory,System.Text.StringBuilder pchPathBuffer,uint unBufferLen) + { + IntPtr pchResourceNameUtf8 = Utils.ToUtf8(pchResourceName); + IntPtr pchResourceTypeDirectoryUtf8 = Utils.ToUtf8(pchResourceTypeDirectory); + uint result = FnTable.GetResourceFullPath(pchResourceNameUtf8,pchResourceTypeDirectoryUtf8,pchPathBuffer,unBufferLen); + Marshal.FreeHGlobal(pchResourceNameUtf8); + Marshal.FreeHGlobal(pchResourceTypeDirectoryUtf8); + return result; + } +} + + +public class CVRDriverManager +{ + IVRDriverManager FnTable; + internal CVRDriverManager(IntPtr pInterface) + { + FnTable = (IVRDriverManager)Marshal.PtrToStructure(pInterface, typeof(IVRDriverManager)); + } + public uint GetDriverCount() + { + uint result = FnTable.GetDriverCount(); + return result; + } + public uint GetDriverName(uint nDriver,System.Text.StringBuilder pchValue,uint unBufferSize) + { + uint result = FnTable.GetDriverName(nDriver,pchValue,unBufferSize); + return result; + } + public ulong GetDriverHandle(string pchDriverName) + { + IntPtr pchDriverNameUtf8 = Utils.ToUtf8(pchDriverName); + ulong result = FnTable.GetDriverHandle(pchDriverNameUtf8); + Marshal.FreeHGlobal(pchDriverNameUtf8); + return result; + } + public bool IsEnabled(uint nDriver) + { + bool result = FnTable.IsEnabled(nDriver); + return result; + } +} + + +public class CVRInput +{ + IVRInput FnTable; + internal CVRInput(IntPtr pInterface) + { + FnTable = (IVRInput)Marshal.PtrToStructure(pInterface, typeof(IVRInput)); + } + public EVRInputError SetActionManifestPath(string pchActionManifestPath) + { + IntPtr pchActionManifestPathUtf8 = Utils.ToUtf8(pchActionManifestPath); + EVRInputError result = FnTable.SetActionManifestPath(pchActionManifestPathUtf8); + Marshal.FreeHGlobal(pchActionManifestPathUtf8); + return result; + } + public EVRInputError GetActionSetHandle(string pchActionSetName,ref ulong pHandle) + { + IntPtr pchActionSetNameUtf8 = Utils.ToUtf8(pchActionSetName); + pHandle = 0; + EVRInputError result = FnTable.GetActionSetHandle(pchActionSetNameUtf8,ref pHandle); + Marshal.FreeHGlobal(pchActionSetNameUtf8); + return result; + } + public EVRInputError GetActionHandle(string pchActionName,ref ulong pHandle) + { + IntPtr pchActionNameUtf8 = Utils.ToUtf8(pchActionName); + pHandle = 0; + EVRInputError result = FnTable.GetActionHandle(pchActionNameUtf8,ref pHandle); + Marshal.FreeHGlobal(pchActionNameUtf8); + return result; + } + public EVRInputError GetInputSourceHandle(string pchInputSourcePath,ref ulong pHandle) + { + IntPtr pchInputSourcePathUtf8 = Utils.ToUtf8(pchInputSourcePath); + pHandle = 0; + EVRInputError result = FnTable.GetInputSourceHandle(pchInputSourcePathUtf8,ref pHandle); + Marshal.FreeHGlobal(pchInputSourcePathUtf8); + return result; + } + public EVRInputError UpdateActionState(VRActiveActionSet_t [] pSets,uint unSizeOfVRSelectedActionSet_t) + { + EVRInputError result = FnTable.UpdateActionState(pSets,unSizeOfVRSelectedActionSet_t,(uint) pSets.Length); + return result; + } + public EVRInputError GetDigitalActionData(ulong action,ref InputDigitalActionData_t pActionData,uint unActionDataSize,ulong ulRestrictToDevice) + { + EVRInputError result = FnTable.GetDigitalActionData(action,ref pActionData,unActionDataSize,ulRestrictToDevice); + return result; + } + public EVRInputError GetAnalogActionData(ulong action,ref InputAnalogActionData_t pActionData,uint unActionDataSize,ulong ulRestrictToDevice) + { + EVRInputError result = FnTable.GetAnalogActionData(action,ref pActionData,unActionDataSize,ulRestrictToDevice); + return result; + } + public EVRInputError GetPoseActionDataRelativeToNow(ulong action,ETrackingUniverseOrigin eOrigin,float fPredictedSecondsFromNow,ref InputPoseActionData_t pActionData,uint unActionDataSize,ulong ulRestrictToDevice) + { + EVRInputError result = FnTable.GetPoseActionDataRelativeToNow(action,eOrigin,fPredictedSecondsFromNow,ref pActionData,unActionDataSize,ulRestrictToDevice); + return result; + } + public EVRInputError GetPoseActionDataForNextFrame(ulong action,ETrackingUniverseOrigin eOrigin,ref InputPoseActionData_t pActionData,uint unActionDataSize,ulong ulRestrictToDevice) + { + EVRInputError result = FnTable.GetPoseActionDataForNextFrame(action,eOrigin,ref pActionData,unActionDataSize,ulRestrictToDevice); + return result; + } + public EVRInputError GetSkeletalActionData(ulong action,ref InputSkeletalActionData_t pActionData,uint unActionDataSize) + { + EVRInputError result = FnTable.GetSkeletalActionData(action,ref pActionData,unActionDataSize); + return result; + } + public EVRInputError GetDominantHand(ref ETrackedControllerRole peDominantHand) + { + EVRInputError result = FnTable.GetDominantHand(ref peDominantHand); + return result; + } + public EVRInputError SetDominantHand(ETrackedControllerRole eDominantHand) + { + EVRInputError result = FnTable.SetDominantHand(eDominantHand); + return result; + } + public EVRInputError GetBoneCount(ulong action,ref uint pBoneCount) + { + pBoneCount = 0; + EVRInputError result = FnTable.GetBoneCount(action,ref pBoneCount); + return result; + } + public EVRInputError GetBoneHierarchy(ulong action,int [] pParentIndices) + { + EVRInputError result = FnTable.GetBoneHierarchy(action,pParentIndices,(uint) pParentIndices.Length); + return result; + } + public EVRInputError GetBoneName(ulong action,int nBoneIndex,System.Text.StringBuilder pchBoneName,uint unNameBufferSize) + { + EVRInputError result = FnTable.GetBoneName(action,nBoneIndex,pchBoneName,unNameBufferSize); + return result; + } + public EVRInputError GetSkeletalReferenceTransforms(ulong action,EVRSkeletalTransformSpace eTransformSpace,EVRSkeletalReferencePose eReferencePose,VRBoneTransform_t [] pTransformArray) + { + EVRInputError result = FnTable.GetSkeletalReferenceTransforms(action,eTransformSpace,eReferencePose,pTransformArray,(uint) pTransformArray.Length); + return result; + } + public EVRInputError GetSkeletalTrackingLevel(ulong action,ref EVRSkeletalTrackingLevel pSkeletalTrackingLevel) + { + EVRInputError result = FnTable.GetSkeletalTrackingLevel(action,ref pSkeletalTrackingLevel); + return result; + } + public EVRInputError GetSkeletalBoneData(ulong action,EVRSkeletalTransformSpace eTransformSpace,EVRSkeletalMotionRange eMotionRange,VRBoneTransform_t [] pTransformArray) + { + EVRInputError result = FnTable.GetSkeletalBoneData(action,eTransformSpace,eMotionRange,pTransformArray,(uint) pTransformArray.Length); + return result; + } + public EVRInputError GetSkeletalSummaryData(ulong action,EVRSummaryType eSummaryType,ref VRSkeletalSummaryData_t pSkeletalSummaryData) + { + EVRInputError result = FnTable.GetSkeletalSummaryData(action,eSummaryType,ref pSkeletalSummaryData); + return result; + } + public EVRInputError GetSkeletalBoneDataCompressed(ulong action,EVRSkeletalMotionRange eMotionRange,IntPtr pvCompressedData,uint unCompressedSize,ref uint punRequiredCompressedSize) + { + punRequiredCompressedSize = 0; + EVRInputError result = FnTable.GetSkeletalBoneDataCompressed(action,eMotionRange,pvCompressedData,unCompressedSize,ref punRequiredCompressedSize); + return result; + } + public EVRInputError DecompressSkeletalBoneData(IntPtr pvCompressedBuffer,uint unCompressedBufferSize,EVRSkeletalTransformSpace eTransformSpace,VRBoneTransform_t [] pTransformArray) + { + EVRInputError result = FnTable.DecompressSkeletalBoneData(pvCompressedBuffer,unCompressedBufferSize,eTransformSpace,pTransformArray,(uint) pTransformArray.Length); + return result; + } + public EVRInputError TriggerHapticVibrationAction(ulong action,float fStartSecondsFromNow,float fDurationSeconds,float fFrequency,float fAmplitude,ulong ulRestrictToDevice) + { + EVRInputError result = FnTable.TriggerHapticVibrationAction(action,fStartSecondsFromNow,fDurationSeconds,fFrequency,fAmplitude,ulRestrictToDevice); + return result; + } + public EVRInputError GetActionOrigins(ulong actionSetHandle,ulong digitalActionHandle,ulong [] originsOut) + { + EVRInputError result = FnTable.GetActionOrigins(actionSetHandle,digitalActionHandle,originsOut,(uint) originsOut.Length); + return result; + } + public EVRInputError GetOriginLocalizedName(ulong origin,System.Text.StringBuilder pchNameArray,uint unNameArraySize,int unStringSectionsToInclude) + { + EVRInputError result = FnTable.GetOriginLocalizedName(origin,pchNameArray,unNameArraySize,unStringSectionsToInclude); + return result; + } + public EVRInputError GetOriginTrackedDeviceInfo(ulong origin,ref InputOriginInfo_t pOriginInfo,uint unOriginInfoSize) + { + EVRInputError result = FnTable.GetOriginTrackedDeviceInfo(origin,ref pOriginInfo,unOriginInfoSize); + return result; + } + public EVRInputError GetActionBindingInfo(ulong action,ref InputBindingInfo_t pOriginInfo,uint unBindingInfoSize,uint unBindingInfoCount,ref uint punReturnedBindingInfoCount) + { + punReturnedBindingInfoCount = 0; + EVRInputError result = FnTable.GetActionBindingInfo(action,ref pOriginInfo,unBindingInfoSize,unBindingInfoCount,ref punReturnedBindingInfoCount); + return result; + } + public EVRInputError ShowActionOrigins(ulong actionSetHandle,ulong ulActionHandle) + { + EVRInputError result = FnTable.ShowActionOrigins(actionSetHandle,ulActionHandle); + return result; + } + public EVRInputError ShowBindingsForActionSet(VRActiveActionSet_t [] pSets,uint unSizeOfVRSelectedActionSet_t,ulong originToHighlight) + { + EVRInputError result = FnTable.ShowBindingsForActionSet(pSets,unSizeOfVRSelectedActionSet_t,(uint) pSets.Length,originToHighlight); + return result; + } + public EVRInputError GetComponentStateForBinding(string pchRenderModelName,string pchComponentName,ref InputBindingInfo_t pOriginInfo,uint unBindingInfoSize,uint unBindingInfoCount,ref RenderModel_ComponentState_t pComponentState) + { + IntPtr pchRenderModelNameUtf8 = Utils.ToUtf8(pchRenderModelName); + IntPtr pchComponentNameUtf8 = Utils.ToUtf8(pchComponentName); + EVRInputError result = FnTable.GetComponentStateForBinding(pchRenderModelNameUtf8,pchComponentNameUtf8,ref pOriginInfo,unBindingInfoSize,unBindingInfoCount,ref pComponentState); + Marshal.FreeHGlobal(pchRenderModelNameUtf8); + Marshal.FreeHGlobal(pchComponentNameUtf8); + return result; + } + public bool IsUsingLegacyInput() + { + bool result = FnTable.IsUsingLegacyInput(); + return result; + } + public EVRInputError OpenBindingUI(string pchAppKey,ulong ulActionSetHandle,ulong ulDeviceHandle,bool bShowOnDesktop) + { + IntPtr pchAppKeyUtf8 = Utils.ToUtf8(pchAppKey); + EVRInputError result = FnTable.OpenBindingUI(pchAppKeyUtf8,ulActionSetHandle,ulDeviceHandle,bShowOnDesktop); + Marshal.FreeHGlobal(pchAppKeyUtf8); + return result; + } + public EVRInputError GetBindingVariant(ulong ulDevicePath,System.Text.StringBuilder pchVariantArray,uint unVariantArraySize) + { + EVRInputError result = FnTable.GetBindingVariant(ulDevicePath,pchVariantArray,unVariantArraySize); + return result; + } +} + + +public class CVRIOBuffer +{ + IVRIOBuffer FnTable; + internal CVRIOBuffer(IntPtr pInterface) + { + FnTable = (IVRIOBuffer)Marshal.PtrToStructure(pInterface, typeof(IVRIOBuffer)); + } + public EIOBufferError Open(string pchPath,EIOBufferMode mode,uint unElementSize,uint unElements,ref ulong pulBuffer) + { + IntPtr pchPathUtf8 = Utils.ToUtf8(pchPath); + pulBuffer = 0; + EIOBufferError result = FnTable.Open(pchPathUtf8,mode,unElementSize,unElements,ref pulBuffer); + Marshal.FreeHGlobal(pchPathUtf8); + return result; + } + public EIOBufferError Close(ulong ulBuffer) + { + EIOBufferError result = FnTable.Close(ulBuffer); + return result; + } + public EIOBufferError Read(ulong ulBuffer,IntPtr pDst,uint unBytes,ref uint punRead) + { + punRead = 0; + EIOBufferError result = FnTable.Read(ulBuffer,pDst,unBytes,ref punRead); + return result; + } + public EIOBufferError Write(ulong ulBuffer,IntPtr pSrc,uint unBytes) + { + EIOBufferError result = FnTable.Write(ulBuffer,pSrc,unBytes); + return result; + } + public ulong PropertyContainer(ulong ulBuffer) + { + ulong result = FnTable.PropertyContainer(ulBuffer); + return result; + } + public bool HasReaders(ulong ulBuffer) + { + bool result = FnTable.HasReaders(ulBuffer); + return result; + } +} + + +public class CVRSpatialAnchors +{ + IVRSpatialAnchors FnTable; + internal CVRSpatialAnchors(IntPtr pInterface) + { + FnTable = (IVRSpatialAnchors)Marshal.PtrToStructure(pInterface, typeof(IVRSpatialAnchors)); + } + public EVRSpatialAnchorError CreateSpatialAnchorFromDescriptor(string pchDescriptor,ref uint pHandleOut) + { + IntPtr pchDescriptorUtf8 = Utils.ToUtf8(pchDescriptor); + pHandleOut = 0; + EVRSpatialAnchorError result = FnTable.CreateSpatialAnchorFromDescriptor(pchDescriptorUtf8,ref pHandleOut); + Marshal.FreeHGlobal(pchDescriptorUtf8); + return result; + } + public EVRSpatialAnchorError CreateSpatialAnchorFromPose(uint unDeviceIndex,ETrackingUniverseOrigin eOrigin,ref SpatialAnchorPose_t pPose,ref uint pHandleOut) + { + pHandleOut = 0; + EVRSpatialAnchorError result = FnTable.CreateSpatialAnchorFromPose(unDeviceIndex,eOrigin,ref pPose,ref pHandleOut); + return result; + } + public EVRSpatialAnchorError GetSpatialAnchorPose(uint unHandle,ETrackingUniverseOrigin eOrigin,ref SpatialAnchorPose_t pPoseOut) + { + EVRSpatialAnchorError result = FnTable.GetSpatialAnchorPose(unHandle,eOrigin,ref pPoseOut); + return result; + } + public EVRSpatialAnchorError GetSpatialAnchorDescriptor(uint unHandle,System.Text.StringBuilder pchDescriptorOut,ref uint punDescriptorBufferLenInOut) + { + punDescriptorBufferLenInOut = 0; + EVRSpatialAnchorError result = FnTable.GetSpatialAnchorDescriptor(unHandle,pchDescriptorOut,ref punDescriptorBufferLenInOut); + return result; + } +} + + +public class CVRDebug +{ + IVRDebug FnTable; + internal CVRDebug(IntPtr pInterface) + { + FnTable = (IVRDebug)Marshal.PtrToStructure(pInterface, typeof(IVRDebug)); + } + public EVRDebugError EmitVrProfilerEvent(string pchMessage) + { + IntPtr pchMessageUtf8 = Utils.ToUtf8(pchMessage); + EVRDebugError result = FnTable.EmitVrProfilerEvent(pchMessageUtf8); + Marshal.FreeHGlobal(pchMessageUtf8); + return result; + } + public EVRDebugError BeginVrProfilerEvent(ref ulong pHandleOut) + { + pHandleOut = 0; + EVRDebugError result = FnTable.BeginVrProfilerEvent(ref pHandleOut); + return result; + } + public EVRDebugError FinishVrProfilerEvent(ulong hHandle,string pchMessage) + { + IntPtr pchMessageUtf8 = Utils.ToUtf8(pchMessage); + EVRDebugError result = FnTable.FinishVrProfilerEvent(hHandle,pchMessageUtf8); + Marshal.FreeHGlobal(pchMessageUtf8); + return result; + } + public uint DriverDebugRequest(uint unDeviceIndex,string pchRequest,System.Text.StringBuilder pchResponseBuffer,uint unResponseBufferSize) + { + IntPtr pchRequestUtf8 = Utils.ToUtf8(pchRequest); + uint result = FnTable.DriverDebugRequest(unDeviceIndex,pchRequestUtf8,pchResponseBuffer,unResponseBufferSize); + Marshal.FreeHGlobal(pchRequestUtf8); + return result; + } +} + + +public class CVRProperties +{ + IVRProperties FnTable; + internal CVRProperties(IntPtr pInterface) + { + FnTable = (IVRProperties)Marshal.PtrToStructure(pInterface, typeof(IVRProperties)); + } + public ETrackedPropertyError ReadPropertyBatch(ulong ulContainerHandle,ref PropertyRead_t pBatch,uint unBatchEntryCount) + { + ETrackedPropertyError result = FnTable.ReadPropertyBatch(ulContainerHandle,ref pBatch,unBatchEntryCount); + return result; + } + public ETrackedPropertyError WritePropertyBatch(ulong ulContainerHandle,ref PropertyWrite_t pBatch,uint unBatchEntryCount) + { + ETrackedPropertyError result = FnTable.WritePropertyBatch(ulContainerHandle,ref pBatch,unBatchEntryCount); + return result; + } + public string GetPropErrorNameFromEnum(ETrackedPropertyError error) + { + IntPtr result = FnTable.GetPropErrorNameFromEnum(error); + return Marshal.PtrToStringAnsi(result); + } + public ulong TrackedDeviceToPropertyContainer(uint nDevice) + { + ulong result = FnTable.TrackedDeviceToPropertyContainer(nDevice); + return result; + } +} + + +public class CVRPaths +{ + IVRPaths FnTable; + internal CVRPaths(IntPtr pInterface) + { + FnTable = (IVRPaths)Marshal.PtrToStructure(pInterface, typeof(IVRPaths)); + } + public ETrackedPropertyError ReadPathBatch(ulong ulRootHandle,ref PathRead_t pBatch,uint unBatchEntryCount) + { + ETrackedPropertyError result = FnTable.ReadPathBatch(ulRootHandle,ref pBatch,unBatchEntryCount); + return result; + } + public ETrackedPropertyError WritePathBatch(ulong ulRootHandle,ref PathWrite_t pBatch,uint unBatchEntryCount) + { + ETrackedPropertyError result = FnTable.WritePathBatch(ulRootHandle,ref pBatch,unBatchEntryCount); + return result; + } + public ETrackedPropertyError StringToHandle(ref ulong pHandle,string pchPath) + { + pHandle = 0; + IntPtr pchPathUtf8 = Utils.ToUtf8(pchPath); + ETrackedPropertyError result = FnTable.StringToHandle(ref pHandle,pchPathUtf8); + Marshal.FreeHGlobal(pchPathUtf8); + return result; + } + public ETrackedPropertyError HandleToString(ulong pHandle,string pchBuffer,uint unBufferSize,ref uint punBufferSizeUsed) + { + punBufferSizeUsed = 0; + ETrackedPropertyError result = FnTable.HandleToString(pHandle,pchBuffer,unBufferSize,ref punBufferSizeUsed); + return result; + } +} + + +public class CVRBlockQueue +{ + IVRBlockQueue FnTable; + internal CVRBlockQueue(IntPtr pInterface) + { + FnTable = (IVRBlockQueue)Marshal.PtrToStructure(pInterface, typeof(IVRBlockQueue)); + } + public EBlockQueueError Create(ref ulong pulQueueHandle,string pchPath,uint unBlockDataSize,uint unBlockHeaderSize,uint unBlockCount) + { + pulQueueHandle = 0; + IntPtr pchPathUtf8 = Utils.ToUtf8(pchPath); + EBlockQueueError result = FnTable.Create(ref pulQueueHandle,pchPathUtf8,unBlockDataSize,unBlockHeaderSize,unBlockCount); + Marshal.FreeHGlobal(pchPathUtf8); + return result; + } + public EBlockQueueError Connect(ref ulong pulQueueHandle,string pchPath) + { + pulQueueHandle = 0; + IntPtr pchPathUtf8 = Utils.ToUtf8(pchPath); + EBlockQueueError result = FnTable.Connect(ref pulQueueHandle,pchPathUtf8); + Marshal.FreeHGlobal(pchPathUtf8); + return result; + } + public EBlockQueueError Destroy(ulong ulQueueHandle) + { + EBlockQueueError result = FnTable.Destroy(ulQueueHandle); + return result; + } + public EBlockQueueError AcquireWriteOnlyBlock(ulong ulQueueHandle,ref ulong pulBlockHandle,ref IntPtr ppvBuffer) + { + pulBlockHandle = 0; + EBlockQueueError result = FnTable.AcquireWriteOnlyBlock(ulQueueHandle,ref pulBlockHandle,ref ppvBuffer); + return result; + } + public EBlockQueueError ReleaseWriteOnlyBlock(ulong ulQueueHandle,ulong ulBlockHandle) + { + EBlockQueueError result = FnTable.ReleaseWriteOnlyBlock(ulQueueHandle,ulBlockHandle); + return result; + } + public EBlockQueueError WaitAndAcquireReadOnlyBlock(ulong ulQueueHandle,ref ulong pulBlockHandle,ref IntPtr ppvBuffer,EBlockQueueReadType eReadType,uint unTimeoutMs) + { + pulBlockHandle = 0; + EBlockQueueError result = FnTable.WaitAndAcquireReadOnlyBlock(ulQueueHandle,ref pulBlockHandle,ref ppvBuffer,eReadType,unTimeoutMs); + return result; + } + public EBlockQueueError AcquireReadOnlyBlock(ulong ulQueueHandle,ref ulong pulBlockHandle,ref IntPtr ppvBuffer,EBlockQueueReadType eReadType) + { + pulBlockHandle = 0; + EBlockQueueError result = FnTable.AcquireReadOnlyBlock(ulQueueHandle,ref pulBlockHandle,ref ppvBuffer,eReadType); + return result; + } + public EBlockQueueError ReleaseReadOnlyBlock(ulong ulQueueHandle,ulong ulBlockHandle) + { + EBlockQueueError result = FnTable.ReleaseReadOnlyBlock(ulQueueHandle,ulBlockHandle); + return result; + } + public EBlockQueueError QueueHasReader(ulong ulQueueHandle,ref bool pbHasReaders) + { + pbHasReaders = false; + EBlockQueueError result = FnTable.QueueHasReader(ulQueueHandle,ref pbHasReaders); + return result; + } +} + + +public class OpenVRInterop +{ + [DllImportAttribute("openvr_api", EntryPoint = "VR_InitInternal", CallingConvention = CallingConvention.Cdecl)] + internal static extern uint InitInternal(ref EVRInitError peError, EVRApplicationType eApplicationType); + [DllImportAttribute("openvr_api", EntryPoint = "VR_InitInternal2", CallingConvention = CallingConvention.Cdecl)] + internal static extern uint InitInternal2(ref EVRInitError peError, EVRApplicationType eApplicationType,[In, MarshalAs(UnmanagedType.LPStr)] string pStartupInfo); + [DllImportAttribute("openvr_api", EntryPoint = "VR_ShutdownInternal", CallingConvention = CallingConvention.Cdecl)] + internal static extern void ShutdownInternal(); + [DllImportAttribute("openvr_api", EntryPoint = "VR_IsHmdPresent", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool IsHmdPresent(); + [DllImportAttribute("openvr_api", EntryPoint = "VR_IsRuntimeInstalled", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool IsRuntimeInstalled(); + [DllImportAttribute("openvr_api", EntryPoint = "VR_RuntimePath", CallingConvention = CallingConvention.Cdecl)] + internal static extern string RuntimePath(); + [DllImportAttribute("openvr_api", EntryPoint = "VR_GetRuntimePath", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool GetRuntimePath(System.Text.StringBuilder pchPathBuffer, uint unBufferSize, ref uint punRequiredBufferSize); + [DllImportAttribute("openvr_api", EntryPoint = "VR_GetStringForHmdError", CallingConvention = CallingConvention.Cdecl)] + internal static extern IntPtr GetStringForHmdError(EVRInitError error); + [DllImportAttribute("openvr_api", EntryPoint = "VR_GetGenericInterface", CallingConvention = CallingConvention.Cdecl)] + internal static extern IntPtr GetGenericInterface([In, MarshalAs(UnmanagedType.LPStr)] string pchInterfaceVersion, ref EVRInitError peError); + [DllImportAttribute("openvr_api", EntryPoint = "VR_IsInterfaceVersionValid", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool IsInterfaceVersionValid([In, MarshalAs(UnmanagedType.LPStr)] string pchInterfaceVersion); + [DllImportAttribute("openvr_api", EntryPoint = "VR_GetInitToken", CallingConvention = CallingConvention.Cdecl)] + internal static extern uint GetInitToken(); +} + + +public enum EVREye +{ + Eye_Left = 0, + Eye_Right = 1, +} +public enum ETextureType +{ + Invalid = -1, + DirectX = 0, + OpenGL = 1, + Vulkan = 2, + IOSurface = 3, + DirectX12 = 4, + DXGISharedHandle = 5, + Metal = 6, +} +public enum EColorSpace +{ + Auto = 0, + Gamma = 1, + Linear = 2, +} +public enum ETrackingResult +{ + Uninitialized = 1, + Calibrating_InProgress = 100, + Calibrating_OutOfRange = 101, + Running_OK = 200, + Running_OutOfRange = 201, + Fallback_RotationOnly = 300, +} +public enum ETrackedDeviceClass +{ + Invalid = 0, + HMD = 1, + Controller = 2, + GenericTracker = 3, + TrackingReference = 4, + DisplayRedirect = 5, + Max = 6, +} +public enum ETrackedControllerRole +{ + Invalid = 0, + LeftHand = 1, + RightHand = 2, + OptOut = 3, + Treadmill = 4, + Stylus = 5, + Max = 5, +} +public enum ETrackingUniverseOrigin +{ + TrackingUniverseSeated = 0, + TrackingUniverseStanding = 1, + TrackingUniverseRawAndUncalibrated = 2, +} +public enum EAdditionalRadioFeatures +{ + None = 0, + HTCLinkBox = 1, + InternalDongle = 2, + ExternalDongle = 4, +} +public enum ETrackedDeviceProperty +{ + Prop_Invalid = 0, + Prop_TrackingSystemName_String = 1000, + Prop_ModelNumber_String = 1001, + Prop_SerialNumber_String = 1002, + Prop_RenderModelName_String = 1003, + Prop_WillDriftInYaw_Bool = 1004, + Prop_ManufacturerName_String = 1005, + Prop_TrackingFirmwareVersion_String = 1006, + Prop_HardwareRevision_String = 1007, + Prop_AllWirelessDongleDescriptions_String = 1008, + Prop_ConnectedWirelessDongle_String = 1009, + Prop_DeviceIsWireless_Bool = 1010, + Prop_DeviceIsCharging_Bool = 1011, + Prop_DeviceBatteryPercentage_Float = 1012, + Prop_StatusDisplayTransform_Matrix34 = 1013, + Prop_Firmware_UpdateAvailable_Bool = 1014, + Prop_Firmware_ManualUpdate_Bool = 1015, + Prop_Firmware_ManualUpdateURL_String = 1016, + Prop_HardwareRevision_Uint64 = 1017, + Prop_FirmwareVersion_Uint64 = 1018, + Prop_FPGAVersion_Uint64 = 1019, + Prop_VRCVersion_Uint64 = 1020, + Prop_RadioVersion_Uint64 = 1021, + Prop_DongleVersion_Uint64 = 1022, + Prop_BlockServerShutdown_Bool = 1023, + Prop_CanUnifyCoordinateSystemWithHmd_Bool = 1024, + Prop_ContainsProximitySensor_Bool = 1025, + Prop_DeviceProvidesBatteryStatus_Bool = 1026, + Prop_DeviceCanPowerOff_Bool = 1027, + Prop_Firmware_ProgrammingTarget_String = 1028, + Prop_DeviceClass_Int32 = 1029, + Prop_HasCamera_Bool = 1030, + Prop_DriverVersion_String = 1031, + Prop_Firmware_ForceUpdateRequired_Bool = 1032, + Prop_ViveSystemButtonFixRequired_Bool = 1033, + Prop_ParentDriver_Uint64 = 1034, + Prop_ResourceRoot_String = 1035, + Prop_RegisteredDeviceType_String = 1036, + Prop_InputProfilePath_String = 1037, + Prop_NeverTracked_Bool = 1038, + Prop_NumCameras_Int32 = 1039, + Prop_CameraFrameLayout_Int32 = 1040, + Prop_CameraStreamFormat_Int32 = 1041, + Prop_AdditionalDeviceSettingsPath_String = 1042, + Prop_Identifiable_Bool = 1043, + Prop_BootloaderVersion_Uint64 = 1044, + Prop_AdditionalSystemReportData_String = 1045, + Prop_CompositeFirmwareVersion_String = 1046, + Prop_Firmware_RemindUpdate_Bool = 1047, + Prop_PeripheralApplicationVersion_Uint64 = 1048, + Prop_ManufacturerSerialNumber_String = 1049, + Prop_ComputedSerialNumber_String = 1050, + Prop_EstimatedDeviceFirstUseTime_Int32 = 1051, + Prop_ReportsTimeSinceVSync_Bool = 2000, + Prop_SecondsFromVsyncToPhotons_Float = 2001, + Prop_DisplayFrequency_Float = 2002, + Prop_UserIpdMeters_Float = 2003, + Prop_CurrentUniverseId_Uint64 = 2004, + Prop_PreviousUniverseId_Uint64 = 2005, + Prop_DisplayFirmwareVersion_Uint64 = 2006, + Prop_IsOnDesktop_Bool = 2007, + Prop_DisplayMCType_Int32 = 2008, + Prop_DisplayMCOffset_Float = 2009, + Prop_DisplayMCScale_Float = 2010, + Prop_EdidVendorID_Int32 = 2011, + Prop_DisplayMCImageLeft_String = 2012, + Prop_DisplayMCImageRight_String = 2013, + Prop_DisplayGCBlackClamp_Float = 2014, + Prop_EdidProductID_Int32 = 2015, + Prop_CameraToHeadTransform_Matrix34 = 2016, + Prop_DisplayGCType_Int32 = 2017, + Prop_DisplayGCOffset_Float = 2018, + Prop_DisplayGCScale_Float = 2019, + Prop_DisplayGCPrescale_Float = 2020, + Prop_DisplayGCImage_String = 2021, + Prop_LensCenterLeftU_Float = 2022, + Prop_LensCenterLeftV_Float = 2023, + Prop_LensCenterRightU_Float = 2024, + Prop_LensCenterRightV_Float = 2025, + Prop_UserHeadToEyeDepthMeters_Float = 2026, + Prop_CameraFirmwareVersion_Uint64 = 2027, + Prop_CameraFirmwareDescription_String = 2028, + Prop_DisplayFPGAVersion_Uint64 = 2029, + Prop_DisplayBootloaderVersion_Uint64 = 2030, + Prop_DisplayHardwareVersion_Uint64 = 2031, + Prop_AudioFirmwareVersion_Uint64 = 2032, + Prop_CameraCompatibilityMode_Int32 = 2033, + Prop_ScreenshotHorizontalFieldOfViewDegrees_Float = 2034, + Prop_ScreenshotVerticalFieldOfViewDegrees_Float = 2035, + Prop_DisplaySuppressed_Bool = 2036, + Prop_DisplayAllowNightMode_Bool = 2037, + Prop_DisplayMCImageWidth_Int32 = 2038, + Prop_DisplayMCImageHeight_Int32 = 2039, + Prop_DisplayMCImageNumChannels_Int32 = 2040, + Prop_DisplayMCImageData_Binary = 2041, + Prop_SecondsFromPhotonsToVblank_Float = 2042, + Prop_DriverDirectModeSendsVsyncEvents_Bool = 2043, + Prop_DisplayDebugMode_Bool = 2044, + Prop_GraphicsAdapterLuid_Uint64 = 2045, + Prop_DriverProvidedChaperonePath_String = 2048, + Prop_ExpectedTrackingReferenceCount_Int32 = 2049, + Prop_ExpectedControllerCount_Int32 = 2050, + Prop_NamedIconPathControllerLeftDeviceOff_String = 2051, + Prop_NamedIconPathControllerRightDeviceOff_String = 2052, + Prop_NamedIconPathTrackingReferenceDeviceOff_String = 2053, + Prop_DoNotApplyPrediction_Bool = 2054, + Prop_CameraToHeadTransforms_Matrix34_Array = 2055, + Prop_DistortionMeshResolution_Int32 = 2056, + Prop_DriverIsDrawingControllers_Bool = 2057, + Prop_DriverRequestsApplicationPause_Bool = 2058, + Prop_DriverRequestsReducedRendering_Bool = 2059, + Prop_MinimumIpdStepMeters_Float = 2060, + Prop_AudioBridgeFirmwareVersion_Uint64 = 2061, + Prop_ImageBridgeFirmwareVersion_Uint64 = 2062, + Prop_ImuToHeadTransform_Matrix34 = 2063, + Prop_ImuFactoryGyroBias_Vector3 = 2064, + Prop_ImuFactoryGyroScale_Vector3 = 2065, + Prop_ImuFactoryAccelerometerBias_Vector3 = 2066, + Prop_ImuFactoryAccelerometerScale_Vector3 = 2067, + Prop_ConfigurationIncludesLighthouse20Features_Bool = 2069, + Prop_AdditionalRadioFeatures_Uint64 = 2070, + Prop_CameraWhiteBalance_Vector4_Array = 2071, + Prop_CameraDistortionFunction_Int32_Array = 2072, + Prop_CameraDistortionCoefficients_Float_Array = 2073, + Prop_ExpectedControllerType_String = 2074, + Prop_HmdTrackingStyle_Int32 = 2075, + Prop_DriverProvidedChaperoneVisibility_Bool = 2076, + Prop_HmdColumnCorrectionSettingPrefix_String = 2077, + Prop_CameraSupportsCompatibilityModes_Bool = 2078, + Prop_SupportsRoomViewDepthProjection_Bool = 2079, + Prop_DisplayAvailableFrameRates_Float_Array = 2080, + Prop_DisplaySupportsMultipleFramerates_Bool = 2081, + Prop_DisplayColorMultLeft_Vector3 = 2082, + Prop_DisplayColorMultRight_Vector3 = 2083, + Prop_DisplaySupportsRuntimeFramerateChange_Bool = 2084, + Prop_DisplaySupportsAnalogGain_Bool = 2085, + Prop_DisplayMinAnalogGain_Float = 2086, + Prop_DisplayMaxAnalogGain_Float = 2087, + Prop_CameraExposureTime_Float = 2088, + Prop_CameraGlobalGain_Float = 2089, + Prop_DashboardScale_Float = 2091, + Prop_IpdUIRangeMinMeters_Float = 2100, + Prop_IpdUIRangeMaxMeters_Float = 2101, + Prop_Hmd_SupportsHDCP14LegacyCompat_Bool = 2102, + Prop_Hmd_SupportsMicMonitoring_Bool = 2103, + Prop_DriverRequestedMuraCorrectionMode_Int32 = 2200, + Prop_DriverRequestedMuraFeather_InnerLeft_Int32 = 2201, + Prop_DriverRequestedMuraFeather_InnerRight_Int32 = 2202, + Prop_DriverRequestedMuraFeather_InnerTop_Int32 = 2203, + Prop_DriverRequestedMuraFeather_InnerBottom_Int32 = 2204, + Prop_DriverRequestedMuraFeather_OuterLeft_Int32 = 2205, + Prop_DriverRequestedMuraFeather_OuterRight_Int32 = 2206, + Prop_DriverRequestedMuraFeather_OuterTop_Int32 = 2207, + Prop_DriverRequestedMuraFeather_OuterBottom_Int32 = 2208, + Prop_Audio_DefaultPlaybackDeviceId_String = 2300, + Prop_Audio_DefaultRecordingDeviceId_String = 2301, + Prop_Audio_DefaultPlaybackDeviceVolume_Float = 2302, + Prop_Audio_SupportsDualSpeakerAndJackOutput_Bool = 2303, + Prop_AttachedDeviceId_String = 3000, + Prop_SupportedButtons_Uint64 = 3001, + Prop_Axis0Type_Int32 = 3002, + Prop_Axis1Type_Int32 = 3003, + Prop_Axis2Type_Int32 = 3004, + Prop_Axis3Type_Int32 = 3005, + Prop_Axis4Type_Int32 = 3006, + Prop_ControllerRoleHint_Int32 = 3007, + Prop_FieldOfViewLeftDegrees_Float = 4000, + Prop_FieldOfViewRightDegrees_Float = 4001, + Prop_FieldOfViewTopDegrees_Float = 4002, + Prop_FieldOfViewBottomDegrees_Float = 4003, + Prop_TrackingRangeMinimumMeters_Float = 4004, + Prop_TrackingRangeMaximumMeters_Float = 4005, + Prop_ModeLabel_String = 4006, + Prop_CanWirelessIdentify_Bool = 4007, + Prop_Nonce_Int32 = 4008, + Prop_IconPathName_String = 5000, + Prop_NamedIconPathDeviceOff_String = 5001, + Prop_NamedIconPathDeviceSearching_String = 5002, + Prop_NamedIconPathDeviceSearchingAlert_String = 5003, + Prop_NamedIconPathDeviceReady_String = 5004, + Prop_NamedIconPathDeviceReadyAlert_String = 5005, + Prop_NamedIconPathDeviceNotReady_String = 5006, + Prop_NamedIconPathDeviceStandby_String = 5007, + Prop_NamedIconPathDeviceAlertLow_String = 5008, + Prop_NamedIconPathDeviceStandbyAlert_String = 5009, + Prop_DisplayHiddenArea_Binary_Start = 5100, + Prop_DisplayHiddenArea_Binary_End = 5150, + Prop_ParentContainer = 5151, + Prop_OverrideContainer_Uint64 = 5152, + Prop_UserConfigPath_String = 6000, + Prop_InstallPath_String = 6001, + Prop_HasDisplayComponent_Bool = 6002, + Prop_HasControllerComponent_Bool = 6003, + Prop_HasCameraComponent_Bool = 6004, + Prop_HasDriverDirectModeComponent_Bool = 6005, + Prop_HasVirtualDisplayComponent_Bool = 6006, + Prop_HasSpatialAnchorsSupport_Bool = 6007, + Prop_ControllerType_String = 7000, + Prop_ControllerHandSelectionPriority_Int32 = 7002, + Prop_VendorSpecific_Reserved_Start = 10000, + Prop_VendorSpecific_Reserved_End = 10999, + Prop_TrackedDeviceProperty_Max = 1000000, +} +public enum ETrackedPropertyError +{ + TrackedProp_Success = 0, + TrackedProp_WrongDataType = 1, + TrackedProp_WrongDeviceClass = 2, + TrackedProp_BufferTooSmall = 3, + TrackedProp_UnknownProperty = 4, + TrackedProp_InvalidDevice = 5, + TrackedProp_CouldNotContactServer = 6, + TrackedProp_ValueNotProvidedByDevice = 7, + TrackedProp_StringExceedsMaximumLength = 8, + TrackedProp_NotYetAvailable = 9, + TrackedProp_PermissionDenied = 10, + TrackedProp_InvalidOperation = 11, + TrackedProp_CannotWriteToWildcards = 12, + TrackedProp_IPCReadFailure = 13, + TrackedProp_OutOfMemory = 14, + TrackedProp_InvalidContainer = 15, +} +public enum EHmdTrackingStyle +{ + Unknown = 0, + Lighthouse = 1, + OutsideInCameras = 2, + InsideOutCameras = 3, +} +public enum EVRSubmitFlags +{ + Submit_Default = 0, + Submit_LensDistortionAlreadyApplied = 1, + Submit_GlRenderBuffer = 2, + Submit_Reserved = 4, + Submit_TextureWithPose = 8, + Submit_TextureWithDepth = 16, + Submit_FrameDiscontinuty = 32, + Submit_VulkanTextureWithArrayData = 64, + Submit_GlArrayTexture = 128, + Submit_Reserved2 = 32768, +} +public enum EVRState +{ + Undefined = -1, + Off = 0, + Searching = 1, + Searching_Alert = 2, + Ready = 3, + Ready_Alert = 4, + NotReady = 5, + Standby = 6, + Ready_Alert_Low = 7, +} +public enum EVREventType +{ + VREvent_None = 0, + VREvent_TrackedDeviceActivated = 100, + VREvent_TrackedDeviceDeactivated = 101, + VREvent_TrackedDeviceUpdated = 102, + VREvent_TrackedDeviceUserInteractionStarted = 103, + VREvent_TrackedDeviceUserInteractionEnded = 104, + VREvent_IpdChanged = 105, + VREvent_EnterStandbyMode = 106, + VREvent_LeaveStandbyMode = 107, + VREvent_TrackedDeviceRoleChanged = 108, + VREvent_WatchdogWakeUpRequested = 109, + VREvent_LensDistortionChanged = 110, + VREvent_PropertyChanged = 111, + VREvent_WirelessDisconnect = 112, + VREvent_WirelessReconnect = 113, + VREvent_ButtonPress = 200, + VREvent_ButtonUnpress = 201, + VREvent_ButtonTouch = 202, + VREvent_ButtonUntouch = 203, + VREvent_Modal_Cancel = 257, + VREvent_MouseMove = 300, + VREvent_MouseButtonDown = 301, + VREvent_MouseButtonUp = 302, + VREvent_FocusEnter = 303, + VREvent_FocusLeave = 304, + VREvent_ScrollDiscrete = 305, + VREvent_TouchPadMove = 306, + VREvent_OverlayFocusChanged = 307, + VREvent_ReloadOverlays = 308, + VREvent_ScrollSmooth = 309, + VREvent_LockMousePosition = 310, + VREvent_UnlockMousePosition = 311, + VREvent_InputFocusCaptured = 400, + VREvent_InputFocusReleased = 401, + VREvent_SceneApplicationChanged = 404, + VREvent_SceneFocusChanged = 405, + VREvent_InputFocusChanged = 406, + VREvent_SceneApplicationUsingWrongGraphicsAdapter = 408, + VREvent_ActionBindingReloaded = 409, + VREvent_HideRenderModels = 410, + VREvent_ShowRenderModels = 411, + VREvent_SceneApplicationStateChanged = 412, + VREvent_ConsoleOpened = 420, + VREvent_ConsoleClosed = 421, + VREvent_OverlayShown = 500, + VREvent_OverlayHidden = 501, + VREvent_DashboardActivated = 502, + VREvent_DashboardDeactivated = 503, + VREvent_DashboardRequested = 505, + VREvent_ResetDashboard = 506, + VREvent_ImageLoaded = 508, + VREvent_ShowKeyboard = 509, + VREvent_HideKeyboard = 510, + VREvent_OverlayGamepadFocusGained = 511, + VREvent_OverlayGamepadFocusLost = 512, + VREvent_OverlaySharedTextureChanged = 513, + VREvent_ScreenshotTriggered = 516, + VREvent_ImageFailed = 517, + VREvent_DashboardOverlayCreated = 518, + VREvent_SwitchGamepadFocus = 519, + VREvent_RequestScreenshot = 520, + VREvent_ScreenshotTaken = 521, + VREvent_ScreenshotFailed = 522, + VREvent_SubmitScreenshotToDashboard = 523, + VREvent_ScreenshotProgressToDashboard = 524, + VREvent_PrimaryDashboardDeviceChanged = 525, + VREvent_RoomViewShown = 526, + VREvent_RoomViewHidden = 527, + VREvent_ShowUI = 528, + VREvent_ShowDevTools = 529, + VREvent_DesktopViewUpdating = 530, + VREvent_DesktopViewReady = 531, + VREvent_Notification_Shown = 600, + VREvent_Notification_Hidden = 601, + VREvent_Notification_BeginInteraction = 602, + VREvent_Notification_Destroyed = 603, + VREvent_Quit = 700, + VREvent_ProcessQuit = 701, + VREvent_QuitAcknowledged = 703, + VREvent_DriverRequestedQuit = 704, + VREvent_RestartRequested = 705, + VREvent_ChaperoneDataHasChanged = 800, + VREvent_ChaperoneUniverseHasChanged = 801, + VREvent_ChaperoneTempDataHasChanged = 802, + VREvent_ChaperoneSettingsHaveChanged = 803, + VREvent_SeatedZeroPoseReset = 804, + VREvent_ChaperoneFlushCache = 805, + VREvent_ChaperoneRoomSetupStarting = 806, + VREvent_ChaperoneRoomSetupFinished = 807, + VREvent_StandingZeroPoseReset = 808, + VREvent_AudioSettingsHaveChanged = 820, + VREvent_BackgroundSettingHasChanged = 850, + VREvent_CameraSettingsHaveChanged = 851, + VREvent_ReprojectionSettingHasChanged = 852, + VREvent_ModelSkinSettingsHaveChanged = 853, + VREvent_EnvironmentSettingsHaveChanged = 854, + VREvent_PowerSettingsHaveChanged = 855, + VREvent_EnableHomeAppSettingsHaveChanged = 856, + VREvent_SteamVRSectionSettingChanged = 857, + VREvent_LighthouseSectionSettingChanged = 858, + VREvent_NullSectionSettingChanged = 859, + VREvent_UserInterfaceSectionSettingChanged = 860, + VREvent_NotificationsSectionSettingChanged = 861, + VREvent_KeyboardSectionSettingChanged = 862, + VREvent_PerfSectionSettingChanged = 863, + VREvent_DashboardSectionSettingChanged = 864, + VREvent_WebInterfaceSectionSettingChanged = 865, + VREvent_TrackersSectionSettingChanged = 866, + VREvent_LastKnownSectionSettingChanged = 867, + VREvent_DismissedWarningsSectionSettingChanged = 868, + VREvent_GpuSpeedSectionSettingChanged = 869, + VREvent_WindowsMRSectionSettingChanged = 870, + VREvent_OtherSectionSettingChanged = 871, + VREvent_StatusUpdate = 900, + VREvent_WebInterface_InstallDriverCompleted = 950, + VREvent_MCImageUpdated = 1000, + VREvent_FirmwareUpdateStarted = 1100, + VREvent_FirmwareUpdateFinished = 1101, + VREvent_KeyboardClosed = 1200, + VREvent_KeyboardCharInput = 1201, + VREvent_KeyboardDone = 1202, + VREvent_ApplicationListUpdated = 1303, + VREvent_ApplicationMimeTypeLoad = 1304, + VREvent_ProcessConnected = 1306, + VREvent_ProcessDisconnected = 1307, + VREvent_Compositor_ChaperoneBoundsShown = 1410, + VREvent_Compositor_ChaperoneBoundsHidden = 1411, + VREvent_Compositor_DisplayDisconnected = 1412, + VREvent_Compositor_DisplayReconnected = 1413, + VREvent_Compositor_HDCPError = 1414, + VREvent_Compositor_ApplicationNotResponding = 1415, + VREvent_Compositor_ApplicationResumed = 1416, + VREvent_Compositor_OutOfVideoMemory = 1417, + VREvent_Compositor_DisplayModeNotSupported = 1418, + VREvent_Compositor_StageOverrideReady = 1419, + VREvent_TrackedCamera_StartVideoStream = 1500, + VREvent_TrackedCamera_StopVideoStream = 1501, + VREvent_TrackedCamera_PauseVideoStream = 1502, + VREvent_TrackedCamera_ResumeVideoStream = 1503, + VREvent_TrackedCamera_EditingSurface = 1550, + VREvent_PerformanceTest_EnableCapture = 1600, + VREvent_PerformanceTest_DisableCapture = 1601, + VREvent_PerformanceTest_FidelityLevel = 1602, + VREvent_MessageOverlay_Closed = 1650, + VREvent_MessageOverlayCloseRequested = 1651, + VREvent_Input_HapticVibration = 1700, + VREvent_Input_BindingLoadFailed = 1701, + VREvent_Input_BindingLoadSuccessful = 1702, + VREvent_Input_ActionManifestReloaded = 1703, + VREvent_Input_ActionManifestLoadFailed = 1704, + VREvent_Input_ProgressUpdate = 1705, + VREvent_Input_TrackerActivated = 1706, + VREvent_Input_BindingsUpdated = 1707, + VREvent_Input_BindingSubscriptionChanged = 1708, + VREvent_SpatialAnchors_PoseUpdated = 1800, + VREvent_SpatialAnchors_DescriptorUpdated = 1801, + VREvent_SpatialAnchors_RequestPoseUpdate = 1802, + VREvent_SpatialAnchors_RequestDescriptorUpdate = 1803, + VREvent_SystemReport_Started = 1900, + VREvent_Monitor_ShowHeadsetView = 2000, + VREvent_Monitor_HideHeadsetView = 2001, + VREvent_VendorSpecific_Reserved_Start = 10000, + VREvent_VendorSpecific_Reserved_End = 19999, +} +public enum EDeviceActivityLevel +{ + k_EDeviceActivityLevel_Unknown = -1, + k_EDeviceActivityLevel_Idle = 0, + k_EDeviceActivityLevel_UserInteraction = 1, + k_EDeviceActivityLevel_UserInteraction_Timeout = 2, + k_EDeviceActivityLevel_Standby = 3, + k_EDeviceActivityLevel_Idle_Timeout = 4, +} +public enum EVRButtonId +{ + k_EButton_System = 0, + k_EButton_ApplicationMenu = 1, + k_EButton_Grip = 2, + k_EButton_DPad_Left = 3, + k_EButton_DPad_Up = 4, + k_EButton_DPad_Right = 5, + k_EButton_DPad_Down = 6, + k_EButton_A = 7, + k_EButton_ProximitySensor = 31, + k_EButton_Axis0 = 32, + k_EButton_Axis1 = 33, + k_EButton_Axis2 = 34, + k_EButton_Axis3 = 35, + k_EButton_Axis4 = 36, + k_EButton_SteamVR_Touchpad = 32, + k_EButton_SteamVR_Trigger = 33, + k_EButton_Dashboard_Back = 2, + k_EButton_IndexController_A = 2, + k_EButton_IndexController_B = 1, + k_EButton_IndexController_JoyStick = 35, + k_EButton_Max = 64, +} +public enum EVRMouseButton +{ + Left = 1, + Right = 2, + Middle = 4, +} +public enum EShowUIType +{ + ShowUI_ControllerBinding = 0, + ShowUI_ManageTrackers = 1, + ShowUI_Pairing = 3, + ShowUI_Settings = 4, + ShowUI_DebugCommands = 5, + ShowUI_FullControllerBinding = 6, + ShowUI_ManageDrivers = 7, +} +public enum EHDCPError +{ + None = 0, + LinkLost = 1, + Tampered = 2, + DeviceRevoked = 3, + Unknown = 4, +} +public enum EVRComponentProperty +{ + IsStatic = 1, + IsVisible = 2, + IsTouched = 4, + IsPressed = 8, + IsScrolled = 16, + IsHighlighted = 32, +} +public enum EVRInputError +{ + None = 0, + NameNotFound = 1, + WrongType = 2, + InvalidHandle = 3, + InvalidParam = 4, + NoSteam = 5, + MaxCapacityReached = 6, + IPCError = 7, + NoActiveActionSet = 8, + InvalidDevice = 9, + InvalidSkeleton = 10, + InvalidBoneCount = 11, + InvalidCompressedData = 12, + NoData = 13, + BufferTooSmall = 14, + MismatchedActionManifest = 15, + MissingSkeletonData = 16, + InvalidBoneIndex = 17, + InvalidPriority = 18, + PermissionDenied = 19, + InvalidRenderModel = 20, +} +public enum EVRSpatialAnchorError +{ + Success = 0, + Internal = 1, + UnknownHandle = 2, + ArrayTooSmall = 3, + InvalidDescriptorChar = 4, + NotYetAvailable = 5, + NotAvailableInThisUniverse = 6, + PermanentlyUnavailable = 7, + WrongDriver = 8, + DescriptorTooLong = 9, + Unknown = 10, + NoRoomCalibration = 11, + InvalidArgument = 12, + UnknownDriver = 13, +} +public enum EHiddenAreaMeshType +{ + k_eHiddenAreaMesh_Standard = 0, + k_eHiddenAreaMesh_Inverse = 1, + k_eHiddenAreaMesh_LineLoop = 2, + k_eHiddenAreaMesh_Max = 3, +} +public enum EVRControllerAxisType +{ + k_eControllerAxis_None = 0, + k_eControllerAxis_TrackPad = 1, + k_eControllerAxis_Joystick = 2, + k_eControllerAxis_Trigger = 3, +} +public enum EVRControllerEventOutputType +{ + ControllerEventOutput_OSEvents = 0, + ControllerEventOutput_VREvents = 1, +} +public enum ECollisionBoundsStyle +{ + COLLISION_BOUNDS_STYLE_BEGINNER = 0, + COLLISION_BOUNDS_STYLE_INTERMEDIATE = 1, + COLLISION_BOUNDS_STYLE_SQUARES = 2, + COLLISION_BOUNDS_STYLE_ADVANCED = 3, + COLLISION_BOUNDS_STYLE_NONE = 4, + COLLISION_BOUNDS_STYLE_COUNT = 5, +} +public enum EVROverlayError +{ + None = 0, + UnknownOverlay = 10, + InvalidHandle = 11, + PermissionDenied = 12, + OverlayLimitExceeded = 13, + WrongVisibilityType = 14, + KeyTooLong = 15, + NameTooLong = 16, + KeyInUse = 17, + WrongTransformType = 18, + InvalidTrackedDevice = 19, + InvalidParameter = 20, + ThumbnailCantBeDestroyed = 21, + ArrayTooSmall = 22, + RequestFailed = 23, + InvalidTexture = 24, + UnableToLoadFile = 25, + KeyboardAlreadyInUse = 26, + NoNeighbor = 27, + TooManyMaskPrimitives = 29, + BadMaskPrimitive = 30, + TextureAlreadyLocked = 31, + TextureLockCapacityReached = 32, + TextureNotLocked = 33, +} +public enum EVRApplicationType +{ + VRApplication_Other = 0, + VRApplication_Scene = 1, + VRApplication_Overlay = 2, + VRApplication_Background = 3, + VRApplication_Utility = 4, + VRApplication_VRMonitor = 5, + VRApplication_SteamWatchdog = 6, + VRApplication_Bootstrapper = 7, + VRApplication_WebHelper = 8, + VRApplication_OpenXRInstance = 9, + VRApplication_OpenXRScene = 10, + VRApplication_OpenXROverlay = 11, + VRApplication_Prism = 12, + VRApplication_Max = 13, +} +public enum EVRFirmwareError +{ + None = 0, + Success = 1, + Fail = 2, +} +public enum EVRNotificationError +{ + OK = 0, + InvalidNotificationId = 100, + NotificationQueueFull = 101, + InvalidOverlayHandle = 102, + SystemWithUserValueAlreadyExists = 103, +} +public enum EVRSkeletalMotionRange +{ + WithController = 0, + WithoutController = 1, +} +public enum EVRSkeletalTrackingLevel +{ + VRSkeletalTracking_Estimated = 0, + VRSkeletalTracking_Partial = 1, + VRSkeletalTracking_Full = 2, + Count = 3, + Max = 2, +} +public enum EVRInitError +{ + None = 0, + Unknown = 1, + Init_InstallationNotFound = 100, + Init_InstallationCorrupt = 101, + Init_VRClientDLLNotFound = 102, + Init_FileNotFound = 103, + Init_FactoryNotFound = 104, + Init_InterfaceNotFound = 105, + Init_InvalidInterface = 106, + Init_UserConfigDirectoryInvalid = 107, + Init_HmdNotFound = 108, + Init_NotInitialized = 109, + Init_PathRegistryNotFound = 110, + Init_NoConfigPath = 111, + Init_NoLogPath = 112, + Init_PathRegistryNotWritable = 113, + Init_AppInfoInitFailed = 114, + Init_Retry = 115, + Init_InitCanceledByUser = 116, + Init_AnotherAppLaunching = 117, + Init_SettingsInitFailed = 118, + Init_ShuttingDown = 119, + Init_TooManyObjects = 120, + Init_NoServerForBackgroundApp = 121, + Init_NotSupportedWithCompositor = 122, + Init_NotAvailableToUtilityApps = 123, + Init_Internal = 124, + Init_HmdDriverIdIsNone = 125, + Init_HmdNotFoundPresenceFailed = 126, + Init_VRMonitorNotFound = 127, + Init_VRMonitorStartupFailed = 128, + Init_LowPowerWatchdogNotSupported = 129, + Init_InvalidApplicationType = 130, + Init_NotAvailableToWatchdogApps = 131, + Init_WatchdogDisabledInSettings = 132, + Init_VRDashboardNotFound = 133, + Init_VRDashboardStartupFailed = 134, + Init_VRHomeNotFound = 135, + Init_VRHomeStartupFailed = 136, + Init_RebootingBusy = 137, + Init_FirmwareUpdateBusy = 138, + Init_FirmwareRecoveryBusy = 139, + Init_USBServiceBusy = 140, + Init_VRWebHelperStartupFailed = 141, + Init_TrackerManagerInitFailed = 142, + Init_AlreadyRunning = 143, + Init_FailedForVrMonitor = 144, + Init_PropertyManagerInitFailed = 145, + Init_WebServerFailed = 146, + Init_IllegalTypeTransition = 147, + Init_MismatchedRuntimes = 148, + Init_InvalidProcessId = 149, + Init_VRServiceStartupFailed = 150, + Init_PrismNeedsNewDrivers = 151, + Init_PrismStartupTimedOut = 152, + Init_CouldNotStartPrism = 153, + Init_CreateDriverDirectDeviceFailed = 154, + Init_PrismExitedUnexpectedly = 155, + Driver_Failed = 200, + Driver_Unknown = 201, + Driver_HmdUnknown = 202, + Driver_NotLoaded = 203, + Driver_RuntimeOutOfDate = 204, + Driver_HmdInUse = 205, + Driver_NotCalibrated = 206, + Driver_CalibrationInvalid = 207, + Driver_HmdDisplayNotFound = 208, + Driver_TrackedDeviceInterfaceUnknown = 209, + Driver_HmdDriverIdOutOfBounds = 211, + Driver_HmdDisplayMirrored = 212, + Driver_HmdDisplayNotFoundLaptop = 213, + IPC_ServerInitFailed = 300, + IPC_ConnectFailed = 301, + IPC_SharedStateInitFailed = 302, + IPC_CompositorInitFailed = 303, + IPC_MutexInitFailed = 304, + IPC_Failed = 305, + IPC_CompositorConnectFailed = 306, + IPC_CompositorInvalidConnectResponse = 307, + IPC_ConnectFailedAfterMultipleAttempts = 308, + IPC_ConnectFailedAfterTargetExited = 309, + IPC_NamespaceUnavailable = 310, + Compositor_Failed = 400, + Compositor_D3D11HardwareRequired = 401, + Compositor_FirmwareRequiresUpdate = 402, + Compositor_OverlayInitFailed = 403, + Compositor_ScreenshotsInitFailed = 404, + Compositor_UnableToCreateDevice = 405, + Compositor_SharedStateIsNull = 406, + Compositor_NotificationManagerIsNull = 407, + Compositor_ResourceManagerClientIsNull = 408, + Compositor_MessageOverlaySharedStateInitFailure = 409, + Compositor_PropertiesInterfaceIsNull = 410, + Compositor_CreateFullscreenWindowFailed = 411, + Compositor_SettingsInterfaceIsNull = 412, + Compositor_FailedToShowWindow = 413, + Compositor_DistortInterfaceIsNull = 414, + Compositor_DisplayFrequencyFailure = 415, + Compositor_RendererInitializationFailed = 416, + Compositor_DXGIFactoryInterfaceIsNull = 417, + Compositor_DXGIFactoryCreateFailed = 418, + Compositor_DXGIFactoryQueryFailed = 419, + Compositor_InvalidAdapterDesktop = 420, + Compositor_InvalidHmdAttachment = 421, + Compositor_InvalidOutputDesktop = 422, + Compositor_InvalidDeviceProvided = 423, + Compositor_D3D11RendererInitializationFailed = 424, + Compositor_FailedToFindDisplayMode = 425, + Compositor_FailedToCreateSwapChain = 426, + Compositor_FailedToGetBackBuffer = 427, + Compositor_FailedToCreateRenderTarget = 428, + Compositor_FailedToCreateDXGI2SwapChain = 429, + Compositor_FailedtoGetDXGI2BackBuffer = 430, + Compositor_FailedToCreateDXGI2RenderTarget = 431, + Compositor_FailedToGetDXGIDeviceInterface = 432, + Compositor_SelectDisplayMode = 433, + Compositor_FailedToCreateNvAPIRenderTargets = 434, + Compositor_NvAPISetDisplayMode = 435, + Compositor_FailedToCreateDirectModeDisplay = 436, + Compositor_InvalidHmdPropertyContainer = 437, + Compositor_UpdateDisplayFrequency = 438, + Compositor_CreateRasterizerState = 439, + Compositor_CreateWireframeRasterizerState = 440, + Compositor_CreateSamplerState = 441, + Compositor_CreateClampToBorderSamplerState = 442, + Compositor_CreateAnisoSamplerState = 443, + Compositor_CreateOverlaySamplerState = 444, + Compositor_CreatePanoramaSamplerState = 445, + Compositor_CreateFontSamplerState = 446, + Compositor_CreateNoBlendState = 447, + Compositor_CreateBlendState = 448, + Compositor_CreateAlphaBlendState = 449, + Compositor_CreateBlendStateMaskR = 450, + Compositor_CreateBlendStateMaskG = 451, + Compositor_CreateBlendStateMaskB = 452, + Compositor_CreateDepthStencilState = 453, + Compositor_CreateDepthStencilStateNoWrite = 454, + Compositor_CreateDepthStencilStateNoDepth = 455, + Compositor_CreateFlushTexture = 456, + Compositor_CreateDistortionSurfaces = 457, + Compositor_CreateConstantBuffer = 458, + Compositor_CreateHmdPoseConstantBuffer = 459, + Compositor_CreateHmdPoseStagingConstantBuffer = 460, + Compositor_CreateSharedFrameInfoConstantBuffer = 461, + Compositor_CreateOverlayConstantBuffer = 462, + Compositor_CreateSceneTextureIndexConstantBuffer = 463, + Compositor_CreateReadableSceneTextureIndexConstantBuffer = 464, + Compositor_CreateLayerGraphicsTextureIndexConstantBuffer = 465, + Compositor_CreateLayerComputeTextureIndexConstantBuffer = 466, + Compositor_CreateLayerComputeSceneTextureIndexConstantBuffer = 467, + Compositor_CreateComputeHmdPoseConstantBuffer = 468, + Compositor_CreateGeomConstantBuffer = 469, + Compositor_CreatePanelMaskConstantBuffer = 470, + Compositor_CreatePixelSimUBO = 471, + Compositor_CreateMSAARenderTextures = 472, + Compositor_CreateResolveRenderTextures = 473, + Compositor_CreateComputeResolveRenderTextures = 474, + Compositor_CreateDriverDirectModeResolveTextures = 475, + Compositor_OpenDriverDirectModeResolveTextures = 476, + Compositor_CreateFallbackSyncTexture = 477, + Compositor_ShareFallbackSyncTexture = 478, + Compositor_CreateOverlayIndexBuffer = 479, + Compositor_CreateOverlayVertexBuffer = 480, + Compositor_CreateTextVertexBuffer = 481, + Compositor_CreateTextIndexBuffer = 482, + Compositor_CreateMirrorTextures = 483, + Compositor_CreateLastFrameRenderTexture = 484, + Compositor_CreateMirrorOverlay = 485, + Compositor_FailedToCreateVirtualDisplayBackbuffer = 486, + Compositor_DisplayModeNotSupported = 487, + Compositor_CreateOverlayInvalidCall = 488, + Compositor_CreateOverlayAlreadyInitialized = 489, + Compositor_FailedToCreateMailbox = 490, + Compositor_WindowInterfaceIsNull = 491, + Compositor_SystemLayerCreateInstance = 492, + Compositor_SystemLayerCreateSession = 493, + VendorSpecific_UnableToConnectToOculusRuntime = 1000, + VendorSpecific_WindowsNotInDevMode = 1001, + VendorSpecific_HmdFound_CantOpenDevice = 1101, + VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102, + VendorSpecific_HmdFound_NoStoredConfig = 1103, + VendorSpecific_HmdFound_ConfigTooBig = 1104, + VendorSpecific_HmdFound_ConfigTooSmall = 1105, + VendorSpecific_HmdFound_UnableToInitZLib = 1106, + VendorSpecific_HmdFound_CantReadFirmwareVersion = 1107, + VendorSpecific_HmdFound_UnableToSendUserDataStart = 1108, + VendorSpecific_HmdFound_UnableToGetUserDataStart = 1109, + VendorSpecific_HmdFound_UnableToGetUserDataNext = 1110, + VendorSpecific_HmdFound_UserDataAddressRange = 1111, + VendorSpecific_HmdFound_UserDataError = 1112, + VendorSpecific_HmdFound_ConfigFailedSanityCheck = 1113, + VendorSpecific_OculusRuntimeBadInstall = 1114, + Steam_SteamInstallationNotFound = 2000, + LastError = 2001, +} +public enum EVRScreenshotType +{ + None = 0, + Mono = 1, + Stereo = 2, + Cubemap = 3, + MonoPanorama = 4, + StereoPanorama = 5, +} +public enum EVRScreenshotPropertyFilenames +{ + Preview = 0, + VR = 1, +} +public enum EVRTrackedCameraError +{ + None = 0, + OperationFailed = 100, + InvalidHandle = 101, + InvalidFrameHeaderVersion = 102, + OutOfHandles = 103, + IPCFailure = 104, + NotSupportedForThisDevice = 105, + SharedMemoryFailure = 106, + FrameBufferingFailure = 107, + StreamSetupFailure = 108, + InvalidGLTextureId = 109, + InvalidSharedTextureHandle = 110, + FailedToGetGLTextureId = 111, + SharedTextureFailure = 112, + NoFrameAvailable = 113, + InvalidArgument = 114, + InvalidFrameBufferSize = 115, +} +public enum EVRTrackedCameraFrameLayout +{ + Mono = 1, + Stereo = 2, + VerticalLayout = 16, + HorizontalLayout = 32, +} +public enum EVRTrackedCameraFrameType +{ + Distorted = 0, + Undistorted = 1, + MaximumUndistorted = 2, + MAX_CAMERA_FRAME_TYPES = 3, +} +public enum EVRDistortionFunctionType +{ + None = 0, + FTheta = 1, + Extended_FTheta = 2, + MAX_DISTORTION_FUNCTION_TYPES = 3, +} +public enum EVSync +{ + None = 0, + WaitRender = 1, + NoWaitRender = 2, +} +public enum EVRMuraCorrectionMode +{ + Default = 0, + NoCorrection = 1, +} +public enum Imu_OffScaleFlags +{ + OffScale_AccelX = 1, + OffScale_AccelY = 2, + OffScale_AccelZ = 4, + OffScale_GyroX = 8, + OffScale_GyroY = 16, + OffScale_GyroZ = 32, +} +public enum EVRApplicationError +{ + None = 0, + AppKeyAlreadyExists = 100, + NoManifest = 101, + NoApplication = 102, + InvalidIndex = 103, + UnknownApplication = 104, + IPCFailed = 105, + ApplicationAlreadyRunning = 106, + InvalidManifest = 107, + InvalidApplication = 108, + LaunchFailed = 109, + ApplicationAlreadyStarting = 110, + LaunchInProgress = 111, + OldApplicationQuitting = 112, + TransitionAborted = 113, + IsTemplate = 114, + SteamVRIsExiting = 115, + BufferTooSmall = 200, + PropertyNotSet = 201, + UnknownProperty = 202, + InvalidParameter = 203, + NotImplemented = 300, +} +public enum EVRApplicationProperty +{ + Name_String = 0, + LaunchType_String = 11, + WorkingDirectory_String = 12, + BinaryPath_String = 13, + Arguments_String = 14, + URL_String = 15, + Description_String = 50, + NewsURL_String = 51, + ImagePath_String = 52, + Source_String = 53, + ActionManifestURL_String = 54, + IsDashboardOverlay_Bool = 60, + IsTemplate_Bool = 61, + IsInstanced_Bool = 62, + IsInternal_Bool = 63, + WantsCompositorPauseInStandby_Bool = 64, + IsHidden_Bool = 65, + LastLaunchTime_Uint64 = 70, +} +public enum EVRSceneApplicationState +{ + None = 0, + Starting = 1, + Quitting = 2, + Running = 3, + Waiting = 4, +} +public enum ChaperoneCalibrationState +{ + OK = 1, + Warning = 100, + Warning_BaseStationMayHaveMoved = 101, + Warning_BaseStationRemoved = 102, + Warning_SeatedBoundsInvalid = 103, + Error = 200, + Error_BaseStationUninitialized = 201, + Error_BaseStationConflict = 202, + Error_PlayAreaInvalid = 203, + Error_CollisionBoundsInvalid = 204, +} +public enum EChaperoneConfigFile +{ + Live = 1, + Temp = 2, +} +public enum EChaperoneImportFlags +{ + EChaperoneImport_BoundsOnly = 1, +} +public enum EVRCompositorError +{ + None = 0, + RequestFailed = 1, + IncompatibleVersion = 100, + DoNotHaveFocus = 101, + InvalidTexture = 102, + IsNotSceneApplication = 103, + TextureIsOnWrongDevice = 104, + TextureUsesUnsupportedFormat = 105, + SharedTexturesNotSupported = 106, + IndexOutOfRange = 107, + AlreadySubmitted = 108, + InvalidBounds = 109, + AlreadySet = 110, +} +public enum EVRCompositorTimingMode +{ + Implicit = 0, + Explicit_RuntimePerformsPostPresentHandoff = 1, + Explicit_ApplicationPerformsPostPresentHandoff = 2, +} +public enum VROverlayInputMethod +{ + None = 0, + Mouse = 1, +} +public enum VROverlayTransformType +{ + VROverlayTransform_Invalid = -1, + VROverlayTransform_Absolute = 0, + VROverlayTransform_TrackedDeviceRelative = 1, + VROverlayTransform_SystemOverlay = 2, + VROverlayTransform_TrackedComponent = 3, + VROverlayTransform_Cursor = 4, + VROverlayTransform_DashboardTab = 5, + VROverlayTransform_DashboardThumb = 6, + VROverlayTransform_Mountable = 7, + VROverlayTransform_Projection = 8, +} +public enum VROverlayFlags +{ + NoDashboardTab = 8, + SendVRDiscreteScrollEvents = 64, + SendVRTouchpadEvents = 128, + ShowTouchPadScrollWheel = 256, + TransferOwnershipToInternalProcess = 512, + SideBySide_Parallel = 1024, + SideBySide_Crossed = 2048, + Panorama = 4096, + StereoPanorama = 8192, + SortWithNonSceneOverlays = 16384, + VisibleInDashboard = 32768, + MakeOverlaysInteractiveIfVisible = 65536, + SendVRSmoothScrollEvents = 131072, + ProtectedContent = 262144, + HideLaserIntersection = 524288, + WantsModalBehavior = 1048576, + IsPremultiplied = 2097152, +} +public enum VRMessageOverlayResponse +{ + ButtonPress_0 = 0, + ButtonPress_1 = 1, + ButtonPress_2 = 2, + ButtonPress_3 = 3, + CouldntFindSystemOverlay = 4, + CouldntFindOrCreateClientOverlay = 5, + ApplicationQuit = 6, +} +public enum EGamepadTextInputMode +{ + k_EGamepadTextInputModeNormal = 0, + k_EGamepadTextInputModePassword = 1, + k_EGamepadTextInputModeSubmit = 2, +} +public enum EGamepadTextInputLineMode +{ + k_EGamepadTextInputLineModeSingleLine = 0, + k_EGamepadTextInputLineModeMultipleLines = 1, +} +public enum EVROverlayIntersectionMaskPrimitiveType +{ + OverlayIntersectionPrimitiveType_Rectangle = 0, + OverlayIntersectionPrimitiveType_Circle = 1, +} +public enum EKeyboardFlags +{ + KeyboardFlag_Minimal = 1, + KeyboardFlag_Modal = 2, +} +public enum EDeviceType +{ + Invalid = -1, + DirectX11 = 0, + Vulkan = 1, +} +public enum HeadsetViewMode_t +{ + HeadsetViewMode_Left = 0, + HeadsetViewMode_Right = 1, + HeadsetViewMode_Both = 2, +} +public enum EVRRenderModelError +{ + None = 0, + Loading = 100, + NotSupported = 200, + InvalidArg = 300, + InvalidModel = 301, + NoShapes = 302, + MultipleShapes = 303, + TooManyVertices = 304, + MultipleTextures = 305, + BufferTooSmall = 306, + NotEnoughNormals = 307, + NotEnoughTexCoords = 308, + InvalidTexture = 400, +} +public enum EVRRenderModelTextureFormat +{ + RGBA8_SRGB = 0, + BC2 = 1, + BC4 = 2, + BC7 = 3, + BC7_SRGB = 4, +} +public enum EVRNotificationType +{ + Transient = 0, + Persistent = 1, + Transient_SystemWithUserValue = 2, +} +public enum EVRNotificationStyle +{ + None = 0, + Application = 100, + Contact_Disabled = 200, + Contact_Enabled = 201, + Contact_Active = 202, +} +public enum EVRSettingsError +{ + None = 0, + IPCFailed = 1, + WriteFailed = 2, + ReadFailed = 3, + JsonParseFailed = 4, + UnsetSettingHasNoDefault = 5, +} +public enum EVRScreenshotError +{ + None = 0, + RequestFailed = 1, + IncompatibleVersion = 100, + NotFound = 101, + BufferTooSmall = 102, + ScreenshotAlreadyInProgress = 108, +} +public enum EVRSkeletalTransformSpace +{ + Model = 0, + Parent = 1, +} +public enum EVRSkeletalReferencePose +{ + BindPose = 0, + OpenHand = 1, + Fist = 2, + GripLimit = 3, +} +public enum EVRFinger +{ + Thumb = 0, + Index = 1, + Middle = 2, + Ring = 3, + Pinky = 4, + Count = 5, +} +public enum EVRFingerSplay +{ + Thumb_Index = 0, + Index_Middle = 1, + Middle_Ring = 2, + Ring_Pinky = 3, + Count = 4, +} +public enum EVRSummaryType +{ + FromAnimation = 0, + FromDevice = 1, +} +public enum EVRInputFilterCancelType +{ + VRInputFilterCancel_Timers = 0, + VRInputFilterCancel_Momentum = 1, +} +public enum EVRInputStringBits +{ + VRInputString_Hand = 1, + VRInputString_ControllerType = 2, + VRInputString_InputSource = 4, + VRInputString_All = -1, +} +public enum EIOBufferError +{ + IOBuffer_Success = 0, + IOBuffer_OperationFailed = 100, + IOBuffer_InvalidHandle = 101, + IOBuffer_InvalidArgument = 102, + IOBuffer_PathExists = 103, + IOBuffer_PathDoesNotExist = 104, + IOBuffer_Permission = 105, +} +public enum EIOBufferMode +{ + Read = 1, + Write = 2, + Create = 512, +} +public enum EVRDebugError +{ + Success = 0, + BadParameter = 1, +} +public enum EPropertyWriteType +{ + PropertyWrite_Set = 0, + PropertyWrite_Erase = 1, + PropertyWrite_SetError = 2, +} +public enum EBlockQueueError +{ + None = 0, + QueueAlreadyExists = 1, + QueueNotFound = 2, + BlockNotAvailable = 3, + InvalidHandle = 4, + InvalidParam = 5, + ParamMismatch = 6, + InternalError = 7, + AlreadyInitialized = 8, + OperationIsServerOnly = 9, + TooManyConnections = 10, +} +public enum EBlockQueueReadType +{ + BlockQueueRead_Latest = 0, + BlockQueueRead_New = 1, + BlockQueueRead_Next = 2, +} + +[StructLayout(LayoutKind.Explicit)] public struct VREvent_Data_t +{ + [FieldOffset(0)] public VREvent_Reserved_t reserved; + [FieldOffset(0)] public VREvent_Controller_t controller; + [FieldOffset(0)] public VREvent_Mouse_t mouse; + [FieldOffset(0)] public VREvent_Scroll_t scroll; + [FieldOffset(0)] public VREvent_Process_t process; + [FieldOffset(0)] public VREvent_Notification_t notification; + [FieldOffset(0)] public VREvent_Overlay_t overlay; + [FieldOffset(0)] public VREvent_Status_t status; + [FieldOffset(0)] public VREvent_Ipd_t ipd; + [FieldOffset(0)] public VREvent_Chaperone_t chaperone; + [FieldOffset(0)] public VREvent_PerformanceTest_t performanceTest; + [FieldOffset(0)] public VREvent_TouchPadMove_t touchPadMove; + [FieldOffset(0)] public VREvent_SeatedZeroPoseReset_t seatedZeroPoseReset; + [FieldOffset(0)] public VREvent_Screenshot_t screenshot; + [FieldOffset(0)] public VREvent_ScreenshotProgress_t screenshotProgress; + [FieldOffset(0)] public VREvent_ApplicationLaunch_t applicationLaunch; + [FieldOffset(0)] public VREvent_EditingCameraSurface_t cameraSurface; + [FieldOffset(0)] public VREvent_MessageOverlay_t messageOverlay; + [FieldOffset(0)] public VREvent_Property_t property; + [FieldOffset(0)] public VREvent_HapticVibration_t hapticVibration; + [FieldOffset(0)] public VREvent_WebConsole_t webConsole; + [FieldOffset(0)] public VREvent_InputBindingLoad_t inputBinding; + [FieldOffset(0)] public VREvent_SpatialAnchor_t spatialAnchor; + [FieldOffset(0)] public VREvent_InputActionManifestLoad_t actionManifest; + [FieldOffset(0)] public VREvent_ProgressUpdate_t progressUpdate; + [FieldOffset(0)] public VREvent_ShowUI_t showUi; + [FieldOffset(0)] public VREvent_ShowDevTools_t showDevTools; + [FieldOffset(0)] public VREvent_HDCPError_t hdcpError; + [FieldOffset(0)] public VREvent_Keyboard_t keyboard; // This has to be at the end due to a mono bug +} + + +[StructLayout(LayoutKind.Explicit)] public struct VROverlayIntersectionMaskPrimitive_Data_t +{ + [FieldOffset(0)] public IntersectionMaskRectangle_t m_Rectangle; + [FieldOffset(0)] public IntersectionMaskCircle_t m_Circle; +} + +[StructLayout(LayoutKind.Sequential)] public struct HmdMatrix34_t +{ + public float m0; //float[3][4] + public float m1; + public float m2; + public float m3; + public float m4; + public float m5; + public float m6; + public float m7; + public float m8; + public float m9; + public float m10; + public float m11; +#if UNITY_5_3_OR_NEWER + + public Vector3 GetPosition() + { + return new Vector3(m3, m7, -m11); + } + + public bool IsRotationValid() + { + return ((m2 != 0 || m6 != 0 || m10 != 0) && (m1 != 0 || m5 != 0 || m9 != 0)); + } + + public Quaternion GetRotation() + { + if (IsRotationValid()) + { + float w = Mathf.Sqrt(Mathf.Max(0, 1 + m0 + m5 + m10)) / 2; + float x = Mathf.Sqrt(Mathf.Max(0, 1 + m0 - m5 - m10)) / 2; + float y = Mathf.Sqrt(Mathf.Max(0, 1 - m0 + m5 - m10)) / 2; + float z = Mathf.Sqrt(Mathf.Max(0, 1 - m0 - m5 + m10)) / 2; + + _copysign(ref x, -m9 - -m6); + _copysign(ref y, -m2 - -m8); + _copysign(ref z, m4 - m1); + + return new Quaternion(x, y, z, w); + } + return Quaternion.identity; + } + + private static void _copysign(ref float sizeval, float signval) + { + if (signval > 0 != sizeval > 0) + sizeval = -sizeval; + } +#endif +} +[StructLayout(LayoutKind.Sequential)] public struct HmdMatrix33_t +{ + public float m0; //float[3][3] + public float m1; + public float m2; + public float m3; + public float m4; + public float m5; + public float m6; + public float m7; + public float m8; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdMatrix44_t +{ + public float m0; //float[4][4] + public float m1; + public float m2; + public float m3; + public float m4; + public float m5; + public float m6; + public float m7; + public float m8; + public float m9; + public float m10; + public float m11; + public float m12; + public float m13; + public float m14; + public float m15; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdVector3_t +{ + public float v0; //float[3] + public float v1; + public float v2; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdVector4_t +{ + public float v0; //float[4] + public float v1; + public float v2; + public float v3; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdVector3d_t +{ + public double v0; //double[3] + public double v1; + public double v2; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdVector2_t +{ + public float v0; //float[2] + public float v1; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdQuaternion_t +{ + public double w; + public double x; + public double y; + public double z; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdQuaternionf_t +{ + public float w; + public float x; + public float y; + public float z; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdColor_t +{ + public float r; + public float g; + public float b; + public float a; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdQuad_t +{ + public HmdVector3_t vCorners0; //HmdVector3_t[4] + public HmdVector3_t vCorners1; + public HmdVector3_t vCorners2; + public HmdVector3_t vCorners3; +} +[StructLayout(LayoutKind.Sequential)] public struct HmdRect2_t +{ + public HmdVector2_t vTopLeft; + public HmdVector2_t vBottomRight; +} +[StructLayout(LayoutKind.Sequential)] public struct VRBoneTransform_t +{ + public HmdVector4_t position; + public HmdQuaternionf_t orientation; +} +[StructLayout(LayoutKind.Sequential)] public struct DistortionCoordinates_t +{ + public float rfRed0; //float[2] + public float rfRed1; + public float rfGreen0; //float[2] + public float rfGreen1; + public float rfBlue0; //float[2] + public float rfBlue1; +} +[StructLayout(LayoutKind.Sequential)] public struct Texture_t +{ + public IntPtr handle; // void * + public ETextureType eType; + public EColorSpace eColorSpace; +} +[StructLayout(LayoutKind.Sequential)] public struct TrackedDevicePose_t +{ + public HmdMatrix34_t mDeviceToAbsoluteTracking; + public HmdVector3_t vVelocity; + public HmdVector3_t vAngularVelocity; + public ETrackingResult eTrackingResult; + [MarshalAs(UnmanagedType.I1)] + public bool bPoseIsValid; + [MarshalAs(UnmanagedType.I1)] + public bool bDeviceIsConnected; +} +[StructLayout(LayoutKind.Sequential)] public struct VRTextureBounds_t +{ + public float uMin; + public float vMin; + public float uMax; + public float vMax; +} +[StructLayout(LayoutKind.Sequential)] public struct VRTextureWithPose_t +{ + public IntPtr handle; // void * + public ETextureType eType; + public EColorSpace eColorSpace; + public HmdMatrix34_t mDeviceToAbsoluteTracking; +} +[StructLayout(LayoutKind.Sequential)] public struct VRTextureDepthInfo_t +{ + public IntPtr handle; // void * + public HmdMatrix44_t mProjection; + public HmdVector2_t vRange; +} +[StructLayout(LayoutKind.Sequential)] public struct VRTextureWithDepth_t +{ + public IntPtr handle; // void * + public ETextureType eType; + public EColorSpace eColorSpace; + public VRTextureDepthInfo_t depth; +} +[StructLayout(LayoutKind.Sequential)] public struct VRTextureWithPoseAndDepth_t +{ + public IntPtr handle; // void * + public ETextureType eType; + public EColorSpace eColorSpace; + public HmdMatrix34_t mDeviceToAbsoluteTracking; + public VRTextureDepthInfo_t depth; +} +[StructLayout(LayoutKind.Sequential)] public struct VRVulkanTextureData_t +{ + public ulong m_nImage; + public IntPtr m_pDevice; // struct VkDevice_T * + public IntPtr m_pPhysicalDevice; // struct VkPhysicalDevice_T * + public IntPtr m_pInstance; // struct VkInstance_T * + public IntPtr m_pQueue; // struct VkQueue_T * + public uint m_nQueueFamilyIndex; + public uint m_nWidth; + public uint m_nHeight; + public uint m_nFormat; + public uint m_nSampleCount; +} +[StructLayout(LayoutKind.Sequential)] public struct VRVulkanTextureArrayData_t +{ + public uint m_unArrayIndex; + public uint m_unArraySize; +} +[StructLayout(LayoutKind.Sequential)] public struct D3D12TextureData_t +{ + public IntPtr m_pResource; // struct ID3D12Resource * + public IntPtr m_pCommandQueue; // struct ID3D12CommandQueue * + public uint m_nNodeMask; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Controller_t +{ + public uint button; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Mouse_t +{ + public float x; + public float y; + public uint button; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Scroll_t +{ + public float xdelta; + public float ydelta; + public uint unused; + public float viewportscale; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_TouchPadMove_t +{ + [MarshalAs(UnmanagedType.I1)] + public bool bFingerDown; + public float flSecondsFingerDown; + public float fValueXFirst; + public float fValueYFirst; + public float fValueXRaw; + public float fValueYRaw; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Notification_t +{ + public ulong ulUserValue; + public uint notificationId; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Process_t +{ + public uint pid; + public uint oldPid; + [MarshalAs(UnmanagedType.I1)] + public bool bForced; + [MarshalAs(UnmanagedType.I1)] + public bool bConnectionLost; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Overlay_t +{ + public ulong overlayHandle; + public ulong devicePath; + public ulong memoryBlockId; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Status_t +{ + public uint statusState; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Keyboard_t +{ + public byte cNewInput0,cNewInput1,cNewInput2,cNewInput3,cNewInput4,cNewInput5,cNewInput6,cNewInput7; + public string cNewInput + { + get + { + return new string(new char[] { + (char)cNewInput0, + (char)cNewInput1, + (char)cNewInput2, + (char)cNewInput3, + (char)cNewInput4, + (char)cNewInput5, + (char)cNewInput6, + (char)cNewInput7 + }).TrimEnd('\0'); + } + } + public ulong uUserValue; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Ipd_t +{ + public float ipdMeters; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Chaperone_t +{ + public ulong m_nPreviousUniverse; + public ulong m_nCurrentUniverse; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Reserved_t +{ + public ulong reserved0; + public ulong reserved1; + public ulong reserved2; + public ulong reserved3; + public ulong reserved4; + public ulong reserved5; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_PerformanceTest_t +{ + public uint m_nFidelityLevel; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_SeatedZeroPoseReset_t +{ + [MarshalAs(UnmanagedType.I1)] + public bool bResetBySystemMenu; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Screenshot_t +{ + public uint handle; + public uint type; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_ScreenshotProgress_t +{ + public float progress; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_ApplicationLaunch_t +{ + public uint pid; + public uint unArgsHandle; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_EditingCameraSurface_t +{ + public ulong overlayHandle; + public uint nVisualMode; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_MessageOverlay_t +{ + public uint unVRMessageOverlayResponse; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_Property_t +{ + public ulong container; + public ETrackedDeviceProperty prop; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_HapticVibration_t +{ + public ulong containerHandle; + public ulong componentHandle; + public float fDurationSeconds; + public float fFrequency; + public float fAmplitude; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_WebConsole_t +{ + public ulong webConsoleHandle; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_InputBindingLoad_t +{ + public ulong ulAppContainer; + public ulong pathMessage; + public ulong pathUrl; + public ulong pathControllerType; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_InputActionManifestLoad_t +{ + public ulong pathAppKey; + public ulong pathMessage; + public ulong pathMessageParam; + public ulong pathManifestPath; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_SpatialAnchor_t +{ + public uint unHandle; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_ProgressUpdate_t +{ + public ulong ulApplicationPropertyContainer; + public ulong pathDevice; + public ulong pathInputSource; + public ulong pathProgressAction; + public ulong pathIcon; + public float fProgress; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_ShowUI_t +{ + public EShowUIType eType; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_ShowDevTools_t +{ + public int nBrowserIdentifier; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_HDCPError_t +{ + public EHDCPError eCode; +} +[StructLayout(LayoutKind.Sequential)] public struct VREvent_t +{ + public uint eventType; + public uint trackedDeviceIndex; + public float eventAgeSeconds; + public VREvent_Data_t data; +} +// This structure is for backwards binary compatibility on Linux and OSX only +[StructLayout(LayoutKind.Sequential, Pack = 4)] public struct VREvent_t_Packed +{ + public uint eventType; + public uint trackedDeviceIndex; + public float eventAgeSeconds; + public VREvent_Data_t data; + public VREvent_t_Packed(VREvent_t unpacked) + { + this.eventType = unpacked.eventType; + this.trackedDeviceIndex = unpacked.trackedDeviceIndex; + this.eventAgeSeconds = unpacked.eventAgeSeconds; + this.data = unpacked.data; + } + public void Unpack(ref VREvent_t unpacked) + { + unpacked.eventType = this.eventType; + unpacked.trackedDeviceIndex = this.trackedDeviceIndex; + unpacked.eventAgeSeconds = this.eventAgeSeconds; + unpacked.data = this.data; + } +} +[StructLayout(LayoutKind.Sequential)] public struct RenderModel_ComponentState_t +{ + public HmdMatrix34_t mTrackingToComponentRenderModel; + public HmdMatrix34_t mTrackingToComponentLocal; + public uint uProperties; +} +[StructLayout(LayoutKind.Sequential)] public struct HiddenAreaMesh_t +{ + public IntPtr pVertexData; // const struct vr::HmdVector2_t * + public uint unTriangleCount; +} +[StructLayout(LayoutKind.Sequential)] public struct VRControllerAxis_t +{ + public float x; + public float y; +} +[StructLayout(LayoutKind.Sequential)] public struct VRControllerState_t +{ + public uint unPacketNum; + public ulong ulButtonPressed; + public ulong ulButtonTouched; + public VRControllerAxis_t rAxis0; //VRControllerAxis_t[5] + public VRControllerAxis_t rAxis1; + public VRControllerAxis_t rAxis2; + public VRControllerAxis_t rAxis3; + public VRControllerAxis_t rAxis4; +} +// This structure is for backwards binary compatibility on Linux and OSX only +[StructLayout(LayoutKind.Sequential, Pack = 4)] public struct VRControllerState_t_Packed +{ + public uint unPacketNum; + public ulong ulButtonPressed; + public ulong ulButtonTouched; + public VRControllerAxis_t rAxis0; //VRControllerAxis_t[5] + public VRControllerAxis_t rAxis1; + public VRControllerAxis_t rAxis2; + public VRControllerAxis_t rAxis3; + public VRControllerAxis_t rAxis4; + public VRControllerState_t_Packed(VRControllerState_t unpacked) + { + this.unPacketNum = unpacked.unPacketNum; + this.ulButtonPressed = unpacked.ulButtonPressed; + this.ulButtonTouched = unpacked.ulButtonTouched; + this.rAxis0 = unpacked.rAxis0; + this.rAxis1 = unpacked.rAxis1; + this.rAxis2 = unpacked.rAxis2; + this.rAxis3 = unpacked.rAxis3; + this.rAxis4 = unpacked.rAxis4; + } + public void Unpack(ref VRControllerState_t unpacked) + { + unpacked.unPacketNum = this.unPacketNum; + unpacked.ulButtonPressed = this.ulButtonPressed; + unpacked.ulButtonTouched = this.ulButtonTouched; + unpacked.rAxis0 = this.rAxis0; + unpacked.rAxis1 = this.rAxis1; + unpacked.rAxis2 = this.rAxis2; + unpacked.rAxis3 = this.rAxis3; + unpacked.rAxis4 = this.rAxis4; + } +} +[StructLayout(LayoutKind.Sequential)] public struct CameraVideoStreamFrameHeader_t +{ + public EVRTrackedCameraFrameType eFrameType; + public uint nWidth; + public uint nHeight; + public uint nBytesPerPixel; + public uint nFrameSequence; + public TrackedDevicePose_t trackedDevicePose; + public ulong ulFrameExposureTime; +} +[StructLayout(LayoutKind.Sequential)] public struct Compositor_FrameTiming +{ + public uint m_nSize; + public uint m_nFrameIndex; + public uint m_nNumFramePresents; + public uint m_nNumMisPresented; + public uint m_nNumDroppedFrames; + public uint m_nReprojectionFlags; + public double m_flSystemTimeInSeconds; + public float m_flPreSubmitGpuMs; + public float m_flPostSubmitGpuMs; + public float m_flTotalRenderGpuMs; + public float m_flCompositorRenderGpuMs; + public float m_flCompositorRenderCpuMs; + public float m_flCompositorIdleCpuMs; + public float m_flClientFrameIntervalMs; + public float m_flPresentCallCpuMs; + public float m_flWaitForPresentCpuMs; + public float m_flSubmitFrameMs; + public float m_flWaitGetPosesCalledMs; + public float m_flNewPosesReadyMs; + public float m_flNewFrameReadyMs; + public float m_flCompositorUpdateStartMs; + public float m_flCompositorUpdateEndMs; + public float m_flCompositorRenderStartMs; + public TrackedDevicePose_t m_HmdPose; + public uint m_nNumVSyncsReadyForUse; + public uint m_nNumVSyncsToFirstView; +} +[StructLayout(LayoutKind.Sequential)] public struct Compositor_BenchmarkResults +{ + public float m_flMegaPixelsPerSecond; + public float m_flHmdRecommendedMegaPixelsPerSecond; +} +[StructLayout(LayoutKind.Sequential)] public struct DriverDirectMode_FrameTiming +{ + public uint m_nSize; + public uint m_nNumFramePresents; + public uint m_nNumMisPresented; + public uint m_nNumDroppedFrames; + public uint m_nReprojectionFlags; +} +[StructLayout(LayoutKind.Sequential)] public struct ImuSample_t +{ + public double fSampleTime; + public HmdVector3d_t vAccel; + public HmdVector3d_t vGyro; + public uint unOffScaleFlags; +} +[StructLayout(LayoutKind.Sequential)] public struct AppOverrideKeys_t +{ + public IntPtr pchKey; // const char * + public IntPtr pchValue; // const char * +} +[StructLayout(LayoutKind.Sequential)] public struct Compositor_CumulativeStats +{ + public uint m_nPid; + public uint m_nNumFramePresents; + public uint m_nNumDroppedFrames; + public uint m_nNumReprojectedFrames; + public uint m_nNumFramePresentsOnStartup; + public uint m_nNumDroppedFramesOnStartup; + public uint m_nNumReprojectedFramesOnStartup; + public uint m_nNumLoading; + public uint m_nNumFramePresentsLoading; + public uint m_nNumDroppedFramesLoading; + public uint m_nNumReprojectedFramesLoading; + public uint m_nNumTimedOut; + public uint m_nNumFramePresentsTimedOut; + public uint m_nNumDroppedFramesTimedOut; + public uint m_nNumReprojectedFramesTimedOut; +} +[StructLayout(LayoutKind.Sequential)] public struct Compositor_StageRenderSettings +{ + public HmdColor_t m_PrimaryColor; + public HmdColor_t m_SecondaryColor; + public float m_flVignetteInnerRadius; + public float m_flVignetteOuterRadius; + public float m_flFresnelStrength; + [MarshalAs(UnmanagedType.I1)] + public bool m_bBackfaceCulling; + [MarshalAs(UnmanagedType.I1)] + public bool m_bGreyscale; + [MarshalAs(UnmanagedType.I1)] + public bool m_bWireframe; +} +[StructLayout(LayoutKind.Sequential)] public struct VROverlayIntersectionParams_t +{ + public HmdVector3_t vSource; + public HmdVector3_t vDirection; + public ETrackingUniverseOrigin eOrigin; +} +[StructLayout(LayoutKind.Sequential)] public struct VROverlayIntersectionResults_t +{ + public HmdVector3_t vPoint; + public HmdVector3_t vNormal; + public HmdVector2_t vUVs; + public float fDistance; +} +[StructLayout(LayoutKind.Sequential)] public struct IntersectionMaskRectangle_t +{ + public float m_flTopLeftX; + public float m_flTopLeftY; + public float m_flWidth; + public float m_flHeight; +} +[StructLayout(LayoutKind.Sequential)] public struct IntersectionMaskCircle_t +{ + public float m_flCenterX; + public float m_flCenterY; + public float m_flRadius; +} +[StructLayout(LayoutKind.Sequential)] public struct VROverlayIntersectionMaskPrimitive_t +{ + public EVROverlayIntersectionMaskPrimitiveType m_nPrimitiveType; + public VROverlayIntersectionMaskPrimitive_Data_t m_Primitive; +} +[StructLayout(LayoutKind.Sequential)] public struct VROverlayProjection_t +{ + public float fLeft; + public float fRight; + public float fTop; + public float fBottom; +} +[StructLayout(LayoutKind.Sequential)] public struct VROverlayView_t +{ + public ulong overlayHandle; + public Texture_t texture; + public VRTextureBounds_t textureBounds; +} +[StructLayout(LayoutKind.Sequential)] public struct VRVulkanDevice_t +{ + public IntPtr m_pInstance; // struct VkInstance_T * + public IntPtr m_pDevice; // struct VkDevice_T * + public IntPtr m_pPhysicalDevice; // struct VkPhysicalDevice_T * + public IntPtr m_pQueue; // struct VkQueue_T * + public uint m_uQueueFamilyIndex; +} +[StructLayout(LayoutKind.Sequential)] public struct VRNativeDevice_t +{ + public IntPtr handle; // void * + public EDeviceType eType; +} +[StructLayout(LayoutKind.Sequential)] public struct RenderModel_Vertex_t +{ + public HmdVector3_t vPosition; + public HmdVector3_t vNormal; + public float rfTextureCoord0; //float[2] + public float rfTextureCoord1; +} +[StructLayout(LayoutKind.Sequential)] public struct RenderModel_TextureMap_t +{ + public ushort unWidth; + public ushort unHeight; + public IntPtr rubTextureMapData; // const uint8_t * + public EVRRenderModelTextureFormat format; +} +// This structure is for backwards binary compatibility on Linux and OSX only +[StructLayout(LayoutKind.Sequential, Pack = 4)] public struct RenderModel_TextureMap_t_Packed +{ + public ushort unWidth; + public ushort unHeight; + public IntPtr rubTextureMapData; // const uint8_t * + public EVRRenderModelTextureFormat format; + public RenderModel_TextureMap_t_Packed(RenderModel_TextureMap_t unpacked) + { + this.unWidth = unpacked.unWidth; + this.unHeight = unpacked.unHeight; + this.rubTextureMapData = unpacked.rubTextureMapData; + this.format = unpacked.format; + } + public void Unpack(ref RenderModel_TextureMap_t unpacked) + { + unpacked.unWidth = this.unWidth; + unpacked.unHeight = this.unHeight; + unpacked.rubTextureMapData = this.rubTextureMapData; + unpacked.format = this.format; + } +} +[StructLayout(LayoutKind.Sequential)] public struct RenderModel_t +{ + public IntPtr rVertexData; // const struct vr::RenderModel_Vertex_t * + public uint unVertexCount; + public IntPtr rIndexData; // const uint16_t * + public uint unTriangleCount; + public int diffuseTextureId; +} +// This structure is for backwards binary compatibility on Linux and OSX only +[StructLayout(LayoutKind.Sequential, Pack = 4)] public struct RenderModel_t_Packed +{ + public IntPtr rVertexData; // const struct vr::RenderModel_Vertex_t * + public uint unVertexCount; + public IntPtr rIndexData; // const uint16_t * + public uint unTriangleCount; + public int diffuseTextureId; + public RenderModel_t_Packed(RenderModel_t unpacked) + { + this.rVertexData = unpacked.rVertexData; + this.unVertexCount = unpacked.unVertexCount; + this.rIndexData = unpacked.rIndexData; + this.unTriangleCount = unpacked.unTriangleCount; + this.diffuseTextureId = unpacked.diffuseTextureId; + } + public void Unpack(ref RenderModel_t unpacked) + { + unpacked.rVertexData = this.rVertexData; + unpacked.unVertexCount = this.unVertexCount; + unpacked.rIndexData = this.rIndexData; + unpacked.unTriangleCount = this.unTriangleCount; + unpacked.diffuseTextureId = this.diffuseTextureId; + } +} +[StructLayout(LayoutKind.Sequential)] public struct RenderModel_ControllerMode_State_t +{ + [MarshalAs(UnmanagedType.I1)] + public bool bScrollWheelVisible; +} +[StructLayout(LayoutKind.Sequential)] public struct NotificationBitmap_t +{ + public IntPtr m_pImageData; // void * + public int m_nWidth; + public int m_nHeight; + public int m_nBytesPerPixel; +} +[StructLayout(LayoutKind.Sequential)] public struct CVRSettingHelper +{ + public IntPtr m_pSettings; // class vr::IVRSettings * +} +[StructLayout(LayoutKind.Sequential)] public struct InputAnalogActionData_t +{ + [MarshalAs(UnmanagedType.I1)] + public bool bActive; + public ulong activeOrigin; + public float x; + public float y; + public float z; + public float deltaX; + public float deltaY; + public float deltaZ; + public float fUpdateTime; +} +[StructLayout(LayoutKind.Sequential)] public struct InputDigitalActionData_t +{ + [MarshalAs(UnmanagedType.I1)] + public bool bActive; + public ulong activeOrigin; + [MarshalAs(UnmanagedType.I1)] + public bool bState; + [MarshalAs(UnmanagedType.I1)] + public bool bChanged; + public float fUpdateTime; +} +[StructLayout(LayoutKind.Sequential)] public struct InputPoseActionData_t +{ + [MarshalAs(UnmanagedType.I1)] + public bool bActive; + public ulong activeOrigin; + public TrackedDevicePose_t pose; +} +[StructLayout(LayoutKind.Sequential)] public struct InputSkeletalActionData_t +{ + [MarshalAs(UnmanagedType.I1)] + public bool bActive; + public ulong activeOrigin; +} +[StructLayout(LayoutKind.Sequential)] public struct InputOriginInfo_t +{ + public ulong devicePath; + public uint trackedDeviceIndex; + public byte rchRenderModelComponentName0,rchRenderModelComponentName1,rchRenderModelComponentName2,rchRenderModelComponentName3,rchRenderModelComponentName4,rchRenderModelComponentName5,rchRenderModelComponentName6,rchRenderModelComponentName7,rchRenderModelComponentName8,rchRenderModelComponentName9,rchRenderModelComponentName10,rchRenderModelComponentName11,rchRenderModelComponentName12,rchRenderModelComponentName13,rchRenderModelComponentName14,rchRenderModelComponentName15,rchRenderModelComponentName16,rchRenderModelComponentName17,rchRenderModelComponentName18,rchRenderModelComponentName19,rchRenderModelComponentName20,rchRenderModelComponentName21,rchRenderModelComponentName22,rchRenderModelComponentName23,rchRenderModelComponentName24,rchRenderModelComponentName25,rchRenderModelComponentName26,rchRenderModelComponentName27,rchRenderModelComponentName28,rchRenderModelComponentName29,rchRenderModelComponentName30,rchRenderModelComponentName31,rchRenderModelComponentName32,rchRenderModelComponentName33,rchRenderModelComponentName34,rchRenderModelComponentName35,rchRenderModelComponentName36,rchRenderModelComponentName37,rchRenderModelComponentName38,rchRenderModelComponentName39,rchRenderModelComponentName40,rchRenderModelComponentName41,rchRenderModelComponentName42,rchRenderModelComponentName43,rchRenderModelComponentName44,rchRenderModelComponentName45,rchRenderModelComponentName46,rchRenderModelComponentName47,rchRenderModelComponentName48,rchRenderModelComponentName49,rchRenderModelComponentName50,rchRenderModelComponentName51,rchRenderModelComponentName52,rchRenderModelComponentName53,rchRenderModelComponentName54,rchRenderModelComponentName55,rchRenderModelComponentName56,rchRenderModelComponentName57,rchRenderModelComponentName58,rchRenderModelComponentName59,rchRenderModelComponentName60,rchRenderModelComponentName61,rchRenderModelComponentName62,rchRenderModelComponentName63,rchRenderModelComponentName64,rchRenderModelComponentName65,rchRenderModelComponentName66,rchRenderModelComponentName67,rchRenderModelComponentName68,rchRenderModelComponentName69,rchRenderModelComponentName70,rchRenderModelComponentName71,rchRenderModelComponentName72,rchRenderModelComponentName73,rchRenderModelComponentName74,rchRenderModelComponentName75,rchRenderModelComponentName76,rchRenderModelComponentName77,rchRenderModelComponentName78,rchRenderModelComponentName79,rchRenderModelComponentName80,rchRenderModelComponentName81,rchRenderModelComponentName82,rchRenderModelComponentName83,rchRenderModelComponentName84,rchRenderModelComponentName85,rchRenderModelComponentName86,rchRenderModelComponentName87,rchRenderModelComponentName88,rchRenderModelComponentName89,rchRenderModelComponentName90,rchRenderModelComponentName91,rchRenderModelComponentName92,rchRenderModelComponentName93,rchRenderModelComponentName94,rchRenderModelComponentName95,rchRenderModelComponentName96,rchRenderModelComponentName97,rchRenderModelComponentName98,rchRenderModelComponentName99,rchRenderModelComponentName100,rchRenderModelComponentName101,rchRenderModelComponentName102,rchRenderModelComponentName103,rchRenderModelComponentName104,rchRenderModelComponentName105,rchRenderModelComponentName106,rchRenderModelComponentName107,rchRenderModelComponentName108,rchRenderModelComponentName109,rchRenderModelComponentName110,rchRenderModelComponentName111,rchRenderModelComponentName112,rchRenderModelComponentName113,rchRenderModelComponentName114,rchRenderModelComponentName115,rchRenderModelComponentName116,rchRenderModelComponentName117,rchRenderModelComponentName118,rchRenderModelComponentName119,rchRenderModelComponentName120,rchRenderModelComponentName121,rchRenderModelComponentName122,rchRenderModelComponentName123,rchRenderModelComponentName124,rchRenderModelComponentName125,rchRenderModelComponentName126,rchRenderModelComponentName127; + public string rchRenderModelComponentName + { + get + { + return new string(new char[] { + (char)rchRenderModelComponentName0, + (char)rchRenderModelComponentName1, + (char)rchRenderModelComponentName2, + (char)rchRenderModelComponentName3, + (char)rchRenderModelComponentName4, + (char)rchRenderModelComponentName5, + (char)rchRenderModelComponentName6, + (char)rchRenderModelComponentName7, + (char)rchRenderModelComponentName8, + (char)rchRenderModelComponentName9, + (char)rchRenderModelComponentName10, + (char)rchRenderModelComponentName11, + (char)rchRenderModelComponentName12, + (char)rchRenderModelComponentName13, + (char)rchRenderModelComponentName14, + (char)rchRenderModelComponentName15, + (char)rchRenderModelComponentName16, + (char)rchRenderModelComponentName17, + (char)rchRenderModelComponentName18, + (char)rchRenderModelComponentName19, + (char)rchRenderModelComponentName20, + (char)rchRenderModelComponentName21, + (char)rchRenderModelComponentName22, + (char)rchRenderModelComponentName23, + (char)rchRenderModelComponentName24, + (char)rchRenderModelComponentName25, + (char)rchRenderModelComponentName26, + (char)rchRenderModelComponentName27, + (char)rchRenderModelComponentName28, + (char)rchRenderModelComponentName29, + (char)rchRenderModelComponentName30, + (char)rchRenderModelComponentName31, + (char)rchRenderModelComponentName32, + (char)rchRenderModelComponentName33, + (char)rchRenderModelComponentName34, + (char)rchRenderModelComponentName35, + (char)rchRenderModelComponentName36, + (char)rchRenderModelComponentName37, + (char)rchRenderModelComponentName38, + (char)rchRenderModelComponentName39, + (char)rchRenderModelComponentName40, + (char)rchRenderModelComponentName41, + (char)rchRenderModelComponentName42, + (char)rchRenderModelComponentName43, + (char)rchRenderModelComponentName44, + (char)rchRenderModelComponentName45, + (char)rchRenderModelComponentName46, + (char)rchRenderModelComponentName47, + (char)rchRenderModelComponentName48, + (char)rchRenderModelComponentName49, + (char)rchRenderModelComponentName50, + (char)rchRenderModelComponentName51, + (char)rchRenderModelComponentName52, + (char)rchRenderModelComponentName53, + (char)rchRenderModelComponentName54, + (char)rchRenderModelComponentName55, + (char)rchRenderModelComponentName56, + (char)rchRenderModelComponentName57, + (char)rchRenderModelComponentName58, + (char)rchRenderModelComponentName59, + (char)rchRenderModelComponentName60, + (char)rchRenderModelComponentName61, + (char)rchRenderModelComponentName62, + (char)rchRenderModelComponentName63, + (char)rchRenderModelComponentName64, + (char)rchRenderModelComponentName65, + (char)rchRenderModelComponentName66, + (char)rchRenderModelComponentName67, + (char)rchRenderModelComponentName68, + (char)rchRenderModelComponentName69, + (char)rchRenderModelComponentName70, + (char)rchRenderModelComponentName71, + (char)rchRenderModelComponentName72, + (char)rchRenderModelComponentName73, + (char)rchRenderModelComponentName74, + (char)rchRenderModelComponentName75, + (char)rchRenderModelComponentName76, + (char)rchRenderModelComponentName77, + (char)rchRenderModelComponentName78, + (char)rchRenderModelComponentName79, + (char)rchRenderModelComponentName80, + (char)rchRenderModelComponentName81, + (char)rchRenderModelComponentName82, + (char)rchRenderModelComponentName83, + (char)rchRenderModelComponentName84, + (char)rchRenderModelComponentName85, + (char)rchRenderModelComponentName86, + (char)rchRenderModelComponentName87, + (char)rchRenderModelComponentName88, + (char)rchRenderModelComponentName89, + (char)rchRenderModelComponentName90, + (char)rchRenderModelComponentName91, + (char)rchRenderModelComponentName92, + (char)rchRenderModelComponentName93, + (char)rchRenderModelComponentName94, + (char)rchRenderModelComponentName95, + (char)rchRenderModelComponentName96, + (char)rchRenderModelComponentName97, + (char)rchRenderModelComponentName98, + (char)rchRenderModelComponentName99, + (char)rchRenderModelComponentName100, + (char)rchRenderModelComponentName101, + (char)rchRenderModelComponentName102, + (char)rchRenderModelComponentName103, + (char)rchRenderModelComponentName104, + (char)rchRenderModelComponentName105, + (char)rchRenderModelComponentName106, + (char)rchRenderModelComponentName107, + (char)rchRenderModelComponentName108, + (char)rchRenderModelComponentName109, + (char)rchRenderModelComponentName110, + (char)rchRenderModelComponentName111, + (char)rchRenderModelComponentName112, + (char)rchRenderModelComponentName113, + (char)rchRenderModelComponentName114, + (char)rchRenderModelComponentName115, + (char)rchRenderModelComponentName116, + (char)rchRenderModelComponentName117, + (char)rchRenderModelComponentName118, + (char)rchRenderModelComponentName119, + (char)rchRenderModelComponentName120, + (char)rchRenderModelComponentName121, + (char)rchRenderModelComponentName122, + (char)rchRenderModelComponentName123, + (char)rchRenderModelComponentName124, + (char)rchRenderModelComponentName125, + (char)rchRenderModelComponentName126, + (char)rchRenderModelComponentName127 + }).TrimEnd('\0'); + } + } +} +[StructLayout(LayoutKind.Sequential)] public struct InputBindingInfo_t +{ + public byte rchDevicePathName0,rchDevicePathName1,rchDevicePathName2,rchDevicePathName3,rchDevicePathName4,rchDevicePathName5,rchDevicePathName6,rchDevicePathName7,rchDevicePathName8,rchDevicePathName9,rchDevicePathName10,rchDevicePathName11,rchDevicePathName12,rchDevicePathName13,rchDevicePathName14,rchDevicePathName15,rchDevicePathName16,rchDevicePathName17,rchDevicePathName18,rchDevicePathName19,rchDevicePathName20,rchDevicePathName21,rchDevicePathName22,rchDevicePathName23,rchDevicePathName24,rchDevicePathName25,rchDevicePathName26,rchDevicePathName27,rchDevicePathName28,rchDevicePathName29,rchDevicePathName30,rchDevicePathName31,rchDevicePathName32,rchDevicePathName33,rchDevicePathName34,rchDevicePathName35,rchDevicePathName36,rchDevicePathName37,rchDevicePathName38,rchDevicePathName39,rchDevicePathName40,rchDevicePathName41,rchDevicePathName42,rchDevicePathName43,rchDevicePathName44,rchDevicePathName45,rchDevicePathName46,rchDevicePathName47,rchDevicePathName48,rchDevicePathName49,rchDevicePathName50,rchDevicePathName51,rchDevicePathName52,rchDevicePathName53,rchDevicePathName54,rchDevicePathName55,rchDevicePathName56,rchDevicePathName57,rchDevicePathName58,rchDevicePathName59,rchDevicePathName60,rchDevicePathName61,rchDevicePathName62,rchDevicePathName63,rchDevicePathName64,rchDevicePathName65,rchDevicePathName66,rchDevicePathName67,rchDevicePathName68,rchDevicePathName69,rchDevicePathName70,rchDevicePathName71,rchDevicePathName72,rchDevicePathName73,rchDevicePathName74,rchDevicePathName75,rchDevicePathName76,rchDevicePathName77,rchDevicePathName78,rchDevicePathName79,rchDevicePathName80,rchDevicePathName81,rchDevicePathName82,rchDevicePathName83,rchDevicePathName84,rchDevicePathName85,rchDevicePathName86,rchDevicePathName87,rchDevicePathName88,rchDevicePathName89,rchDevicePathName90,rchDevicePathName91,rchDevicePathName92,rchDevicePathName93,rchDevicePathName94,rchDevicePathName95,rchDevicePathName96,rchDevicePathName97,rchDevicePathName98,rchDevicePathName99,rchDevicePathName100,rchDevicePathName101,rchDevicePathName102,rchDevicePathName103,rchDevicePathName104,rchDevicePathName105,rchDevicePathName106,rchDevicePathName107,rchDevicePathName108,rchDevicePathName109,rchDevicePathName110,rchDevicePathName111,rchDevicePathName112,rchDevicePathName113,rchDevicePathName114,rchDevicePathName115,rchDevicePathName116,rchDevicePathName117,rchDevicePathName118,rchDevicePathName119,rchDevicePathName120,rchDevicePathName121,rchDevicePathName122,rchDevicePathName123,rchDevicePathName124,rchDevicePathName125,rchDevicePathName126,rchDevicePathName127; + public string rchDevicePathName + { + get + { + return new string(new char[] { + (char)rchDevicePathName0, + (char)rchDevicePathName1, + (char)rchDevicePathName2, + (char)rchDevicePathName3, + (char)rchDevicePathName4, + (char)rchDevicePathName5, + (char)rchDevicePathName6, + (char)rchDevicePathName7, + (char)rchDevicePathName8, + (char)rchDevicePathName9, + (char)rchDevicePathName10, + (char)rchDevicePathName11, + (char)rchDevicePathName12, + (char)rchDevicePathName13, + (char)rchDevicePathName14, + (char)rchDevicePathName15, + (char)rchDevicePathName16, + (char)rchDevicePathName17, + (char)rchDevicePathName18, + (char)rchDevicePathName19, + (char)rchDevicePathName20, + (char)rchDevicePathName21, + (char)rchDevicePathName22, + (char)rchDevicePathName23, + (char)rchDevicePathName24, + (char)rchDevicePathName25, + (char)rchDevicePathName26, + (char)rchDevicePathName27, + (char)rchDevicePathName28, + (char)rchDevicePathName29, + (char)rchDevicePathName30, + (char)rchDevicePathName31, + (char)rchDevicePathName32, + (char)rchDevicePathName33, + (char)rchDevicePathName34, + (char)rchDevicePathName35, + (char)rchDevicePathName36, + (char)rchDevicePathName37, + (char)rchDevicePathName38, + (char)rchDevicePathName39, + (char)rchDevicePathName40, + (char)rchDevicePathName41, + (char)rchDevicePathName42, + (char)rchDevicePathName43, + (char)rchDevicePathName44, + (char)rchDevicePathName45, + (char)rchDevicePathName46, + (char)rchDevicePathName47, + (char)rchDevicePathName48, + (char)rchDevicePathName49, + (char)rchDevicePathName50, + (char)rchDevicePathName51, + (char)rchDevicePathName52, + (char)rchDevicePathName53, + (char)rchDevicePathName54, + (char)rchDevicePathName55, + (char)rchDevicePathName56, + (char)rchDevicePathName57, + (char)rchDevicePathName58, + (char)rchDevicePathName59, + (char)rchDevicePathName60, + (char)rchDevicePathName61, + (char)rchDevicePathName62, + (char)rchDevicePathName63, + (char)rchDevicePathName64, + (char)rchDevicePathName65, + (char)rchDevicePathName66, + (char)rchDevicePathName67, + (char)rchDevicePathName68, + (char)rchDevicePathName69, + (char)rchDevicePathName70, + (char)rchDevicePathName71, + (char)rchDevicePathName72, + (char)rchDevicePathName73, + (char)rchDevicePathName74, + (char)rchDevicePathName75, + (char)rchDevicePathName76, + (char)rchDevicePathName77, + (char)rchDevicePathName78, + (char)rchDevicePathName79, + (char)rchDevicePathName80, + (char)rchDevicePathName81, + (char)rchDevicePathName82, + (char)rchDevicePathName83, + (char)rchDevicePathName84, + (char)rchDevicePathName85, + (char)rchDevicePathName86, + (char)rchDevicePathName87, + (char)rchDevicePathName88, + (char)rchDevicePathName89, + (char)rchDevicePathName90, + (char)rchDevicePathName91, + (char)rchDevicePathName92, + (char)rchDevicePathName93, + (char)rchDevicePathName94, + (char)rchDevicePathName95, + (char)rchDevicePathName96, + (char)rchDevicePathName97, + (char)rchDevicePathName98, + (char)rchDevicePathName99, + (char)rchDevicePathName100, + (char)rchDevicePathName101, + (char)rchDevicePathName102, + (char)rchDevicePathName103, + (char)rchDevicePathName104, + (char)rchDevicePathName105, + (char)rchDevicePathName106, + (char)rchDevicePathName107, + (char)rchDevicePathName108, + (char)rchDevicePathName109, + (char)rchDevicePathName110, + (char)rchDevicePathName111, + (char)rchDevicePathName112, + (char)rchDevicePathName113, + (char)rchDevicePathName114, + (char)rchDevicePathName115, + (char)rchDevicePathName116, + (char)rchDevicePathName117, + (char)rchDevicePathName118, + (char)rchDevicePathName119, + (char)rchDevicePathName120, + (char)rchDevicePathName121, + (char)rchDevicePathName122, + (char)rchDevicePathName123, + (char)rchDevicePathName124, + (char)rchDevicePathName125, + (char)rchDevicePathName126, + (char)rchDevicePathName127 + }).TrimEnd('\0'); + } + } + public byte rchInputPathName0,rchInputPathName1,rchInputPathName2,rchInputPathName3,rchInputPathName4,rchInputPathName5,rchInputPathName6,rchInputPathName7,rchInputPathName8,rchInputPathName9,rchInputPathName10,rchInputPathName11,rchInputPathName12,rchInputPathName13,rchInputPathName14,rchInputPathName15,rchInputPathName16,rchInputPathName17,rchInputPathName18,rchInputPathName19,rchInputPathName20,rchInputPathName21,rchInputPathName22,rchInputPathName23,rchInputPathName24,rchInputPathName25,rchInputPathName26,rchInputPathName27,rchInputPathName28,rchInputPathName29,rchInputPathName30,rchInputPathName31,rchInputPathName32,rchInputPathName33,rchInputPathName34,rchInputPathName35,rchInputPathName36,rchInputPathName37,rchInputPathName38,rchInputPathName39,rchInputPathName40,rchInputPathName41,rchInputPathName42,rchInputPathName43,rchInputPathName44,rchInputPathName45,rchInputPathName46,rchInputPathName47,rchInputPathName48,rchInputPathName49,rchInputPathName50,rchInputPathName51,rchInputPathName52,rchInputPathName53,rchInputPathName54,rchInputPathName55,rchInputPathName56,rchInputPathName57,rchInputPathName58,rchInputPathName59,rchInputPathName60,rchInputPathName61,rchInputPathName62,rchInputPathName63,rchInputPathName64,rchInputPathName65,rchInputPathName66,rchInputPathName67,rchInputPathName68,rchInputPathName69,rchInputPathName70,rchInputPathName71,rchInputPathName72,rchInputPathName73,rchInputPathName74,rchInputPathName75,rchInputPathName76,rchInputPathName77,rchInputPathName78,rchInputPathName79,rchInputPathName80,rchInputPathName81,rchInputPathName82,rchInputPathName83,rchInputPathName84,rchInputPathName85,rchInputPathName86,rchInputPathName87,rchInputPathName88,rchInputPathName89,rchInputPathName90,rchInputPathName91,rchInputPathName92,rchInputPathName93,rchInputPathName94,rchInputPathName95,rchInputPathName96,rchInputPathName97,rchInputPathName98,rchInputPathName99,rchInputPathName100,rchInputPathName101,rchInputPathName102,rchInputPathName103,rchInputPathName104,rchInputPathName105,rchInputPathName106,rchInputPathName107,rchInputPathName108,rchInputPathName109,rchInputPathName110,rchInputPathName111,rchInputPathName112,rchInputPathName113,rchInputPathName114,rchInputPathName115,rchInputPathName116,rchInputPathName117,rchInputPathName118,rchInputPathName119,rchInputPathName120,rchInputPathName121,rchInputPathName122,rchInputPathName123,rchInputPathName124,rchInputPathName125,rchInputPathName126,rchInputPathName127; + public string rchInputPathName + { + get + { + return new string(new char[] { + (char)rchInputPathName0, + (char)rchInputPathName1, + (char)rchInputPathName2, + (char)rchInputPathName3, + (char)rchInputPathName4, + (char)rchInputPathName5, + (char)rchInputPathName6, + (char)rchInputPathName7, + (char)rchInputPathName8, + (char)rchInputPathName9, + (char)rchInputPathName10, + (char)rchInputPathName11, + (char)rchInputPathName12, + (char)rchInputPathName13, + (char)rchInputPathName14, + (char)rchInputPathName15, + (char)rchInputPathName16, + (char)rchInputPathName17, + (char)rchInputPathName18, + (char)rchInputPathName19, + (char)rchInputPathName20, + (char)rchInputPathName21, + (char)rchInputPathName22, + (char)rchInputPathName23, + (char)rchInputPathName24, + (char)rchInputPathName25, + (char)rchInputPathName26, + (char)rchInputPathName27, + (char)rchInputPathName28, + (char)rchInputPathName29, + (char)rchInputPathName30, + (char)rchInputPathName31, + (char)rchInputPathName32, + (char)rchInputPathName33, + (char)rchInputPathName34, + (char)rchInputPathName35, + (char)rchInputPathName36, + (char)rchInputPathName37, + (char)rchInputPathName38, + (char)rchInputPathName39, + (char)rchInputPathName40, + (char)rchInputPathName41, + (char)rchInputPathName42, + (char)rchInputPathName43, + (char)rchInputPathName44, + (char)rchInputPathName45, + (char)rchInputPathName46, + (char)rchInputPathName47, + (char)rchInputPathName48, + (char)rchInputPathName49, + (char)rchInputPathName50, + (char)rchInputPathName51, + (char)rchInputPathName52, + (char)rchInputPathName53, + (char)rchInputPathName54, + (char)rchInputPathName55, + (char)rchInputPathName56, + (char)rchInputPathName57, + (char)rchInputPathName58, + (char)rchInputPathName59, + (char)rchInputPathName60, + (char)rchInputPathName61, + (char)rchInputPathName62, + (char)rchInputPathName63, + (char)rchInputPathName64, + (char)rchInputPathName65, + (char)rchInputPathName66, + (char)rchInputPathName67, + (char)rchInputPathName68, + (char)rchInputPathName69, + (char)rchInputPathName70, + (char)rchInputPathName71, + (char)rchInputPathName72, + (char)rchInputPathName73, + (char)rchInputPathName74, + (char)rchInputPathName75, + (char)rchInputPathName76, + (char)rchInputPathName77, + (char)rchInputPathName78, + (char)rchInputPathName79, + (char)rchInputPathName80, + (char)rchInputPathName81, + (char)rchInputPathName82, + (char)rchInputPathName83, + (char)rchInputPathName84, + (char)rchInputPathName85, + (char)rchInputPathName86, + (char)rchInputPathName87, + (char)rchInputPathName88, + (char)rchInputPathName89, + (char)rchInputPathName90, + (char)rchInputPathName91, + (char)rchInputPathName92, + (char)rchInputPathName93, + (char)rchInputPathName94, + (char)rchInputPathName95, + (char)rchInputPathName96, + (char)rchInputPathName97, + (char)rchInputPathName98, + (char)rchInputPathName99, + (char)rchInputPathName100, + (char)rchInputPathName101, + (char)rchInputPathName102, + (char)rchInputPathName103, + (char)rchInputPathName104, + (char)rchInputPathName105, + (char)rchInputPathName106, + (char)rchInputPathName107, + (char)rchInputPathName108, + (char)rchInputPathName109, + (char)rchInputPathName110, + (char)rchInputPathName111, + (char)rchInputPathName112, + (char)rchInputPathName113, + (char)rchInputPathName114, + (char)rchInputPathName115, + (char)rchInputPathName116, + (char)rchInputPathName117, + (char)rchInputPathName118, + (char)rchInputPathName119, + (char)rchInputPathName120, + (char)rchInputPathName121, + (char)rchInputPathName122, + (char)rchInputPathName123, + (char)rchInputPathName124, + (char)rchInputPathName125, + (char)rchInputPathName126, + (char)rchInputPathName127 + }).TrimEnd('\0'); + } + } + public byte rchModeName0,rchModeName1,rchModeName2,rchModeName3,rchModeName4,rchModeName5,rchModeName6,rchModeName7,rchModeName8,rchModeName9,rchModeName10,rchModeName11,rchModeName12,rchModeName13,rchModeName14,rchModeName15,rchModeName16,rchModeName17,rchModeName18,rchModeName19,rchModeName20,rchModeName21,rchModeName22,rchModeName23,rchModeName24,rchModeName25,rchModeName26,rchModeName27,rchModeName28,rchModeName29,rchModeName30,rchModeName31,rchModeName32,rchModeName33,rchModeName34,rchModeName35,rchModeName36,rchModeName37,rchModeName38,rchModeName39,rchModeName40,rchModeName41,rchModeName42,rchModeName43,rchModeName44,rchModeName45,rchModeName46,rchModeName47,rchModeName48,rchModeName49,rchModeName50,rchModeName51,rchModeName52,rchModeName53,rchModeName54,rchModeName55,rchModeName56,rchModeName57,rchModeName58,rchModeName59,rchModeName60,rchModeName61,rchModeName62,rchModeName63,rchModeName64,rchModeName65,rchModeName66,rchModeName67,rchModeName68,rchModeName69,rchModeName70,rchModeName71,rchModeName72,rchModeName73,rchModeName74,rchModeName75,rchModeName76,rchModeName77,rchModeName78,rchModeName79,rchModeName80,rchModeName81,rchModeName82,rchModeName83,rchModeName84,rchModeName85,rchModeName86,rchModeName87,rchModeName88,rchModeName89,rchModeName90,rchModeName91,rchModeName92,rchModeName93,rchModeName94,rchModeName95,rchModeName96,rchModeName97,rchModeName98,rchModeName99,rchModeName100,rchModeName101,rchModeName102,rchModeName103,rchModeName104,rchModeName105,rchModeName106,rchModeName107,rchModeName108,rchModeName109,rchModeName110,rchModeName111,rchModeName112,rchModeName113,rchModeName114,rchModeName115,rchModeName116,rchModeName117,rchModeName118,rchModeName119,rchModeName120,rchModeName121,rchModeName122,rchModeName123,rchModeName124,rchModeName125,rchModeName126,rchModeName127; + public string rchModeName + { + get + { + return new string(new char[] { + (char)rchModeName0, + (char)rchModeName1, + (char)rchModeName2, + (char)rchModeName3, + (char)rchModeName4, + (char)rchModeName5, + (char)rchModeName6, + (char)rchModeName7, + (char)rchModeName8, + (char)rchModeName9, + (char)rchModeName10, + (char)rchModeName11, + (char)rchModeName12, + (char)rchModeName13, + (char)rchModeName14, + (char)rchModeName15, + (char)rchModeName16, + (char)rchModeName17, + (char)rchModeName18, + (char)rchModeName19, + (char)rchModeName20, + (char)rchModeName21, + (char)rchModeName22, + (char)rchModeName23, + (char)rchModeName24, + (char)rchModeName25, + (char)rchModeName26, + (char)rchModeName27, + (char)rchModeName28, + (char)rchModeName29, + (char)rchModeName30, + (char)rchModeName31, + (char)rchModeName32, + (char)rchModeName33, + (char)rchModeName34, + (char)rchModeName35, + (char)rchModeName36, + (char)rchModeName37, + (char)rchModeName38, + (char)rchModeName39, + (char)rchModeName40, + (char)rchModeName41, + (char)rchModeName42, + (char)rchModeName43, + (char)rchModeName44, + (char)rchModeName45, + (char)rchModeName46, + (char)rchModeName47, + (char)rchModeName48, + (char)rchModeName49, + (char)rchModeName50, + (char)rchModeName51, + (char)rchModeName52, + (char)rchModeName53, + (char)rchModeName54, + (char)rchModeName55, + (char)rchModeName56, + (char)rchModeName57, + (char)rchModeName58, + (char)rchModeName59, + (char)rchModeName60, + (char)rchModeName61, + (char)rchModeName62, + (char)rchModeName63, + (char)rchModeName64, + (char)rchModeName65, + (char)rchModeName66, + (char)rchModeName67, + (char)rchModeName68, + (char)rchModeName69, + (char)rchModeName70, + (char)rchModeName71, + (char)rchModeName72, + (char)rchModeName73, + (char)rchModeName74, + (char)rchModeName75, + (char)rchModeName76, + (char)rchModeName77, + (char)rchModeName78, + (char)rchModeName79, + (char)rchModeName80, + (char)rchModeName81, + (char)rchModeName82, + (char)rchModeName83, + (char)rchModeName84, + (char)rchModeName85, + (char)rchModeName86, + (char)rchModeName87, + (char)rchModeName88, + (char)rchModeName89, + (char)rchModeName90, + (char)rchModeName91, + (char)rchModeName92, + (char)rchModeName93, + (char)rchModeName94, + (char)rchModeName95, + (char)rchModeName96, + (char)rchModeName97, + (char)rchModeName98, + (char)rchModeName99, + (char)rchModeName100, + (char)rchModeName101, + (char)rchModeName102, + (char)rchModeName103, + (char)rchModeName104, + (char)rchModeName105, + (char)rchModeName106, + (char)rchModeName107, + (char)rchModeName108, + (char)rchModeName109, + (char)rchModeName110, + (char)rchModeName111, + (char)rchModeName112, + (char)rchModeName113, + (char)rchModeName114, + (char)rchModeName115, + (char)rchModeName116, + (char)rchModeName117, + (char)rchModeName118, + (char)rchModeName119, + (char)rchModeName120, + (char)rchModeName121, + (char)rchModeName122, + (char)rchModeName123, + (char)rchModeName124, + (char)rchModeName125, + (char)rchModeName126, + (char)rchModeName127 + }).TrimEnd('\0'); + } + } + public byte rchSlotName0,rchSlotName1,rchSlotName2,rchSlotName3,rchSlotName4,rchSlotName5,rchSlotName6,rchSlotName7,rchSlotName8,rchSlotName9,rchSlotName10,rchSlotName11,rchSlotName12,rchSlotName13,rchSlotName14,rchSlotName15,rchSlotName16,rchSlotName17,rchSlotName18,rchSlotName19,rchSlotName20,rchSlotName21,rchSlotName22,rchSlotName23,rchSlotName24,rchSlotName25,rchSlotName26,rchSlotName27,rchSlotName28,rchSlotName29,rchSlotName30,rchSlotName31,rchSlotName32,rchSlotName33,rchSlotName34,rchSlotName35,rchSlotName36,rchSlotName37,rchSlotName38,rchSlotName39,rchSlotName40,rchSlotName41,rchSlotName42,rchSlotName43,rchSlotName44,rchSlotName45,rchSlotName46,rchSlotName47,rchSlotName48,rchSlotName49,rchSlotName50,rchSlotName51,rchSlotName52,rchSlotName53,rchSlotName54,rchSlotName55,rchSlotName56,rchSlotName57,rchSlotName58,rchSlotName59,rchSlotName60,rchSlotName61,rchSlotName62,rchSlotName63,rchSlotName64,rchSlotName65,rchSlotName66,rchSlotName67,rchSlotName68,rchSlotName69,rchSlotName70,rchSlotName71,rchSlotName72,rchSlotName73,rchSlotName74,rchSlotName75,rchSlotName76,rchSlotName77,rchSlotName78,rchSlotName79,rchSlotName80,rchSlotName81,rchSlotName82,rchSlotName83,rchSlotName84,rchSlotName85,rchSlotName86,rchSlotName87,rchSlotName88,rchSlotName89,rchSlotName90,rchSlotName91,rchSlotName92,rchSlotName93,rchSlotName94,rchSlotName95,rchSlotName96,rchSlotName97,rchSlotName98,rchSlotName99,rchSlotName100,rchSlotName101,rchSlotName102,rchSlotName103,rchSlotName104,rchSlotName105,rchSlotName106,rchSlotName107,rchSlotName108,rchSlotName109,rchSlotName110,rchSlotName111,rchSlotName112,rchSlotName113,rchSlotName114,rchSlotName115,rchSlotName116,rchSlotName117,rchSlotName118,rchSlotName119,rchSlotName120,rchSlotName121,rchSlotName122,rchSlotName123,rchSlotName124,rchSlotName125,rchSlotName126,rchSlotName127; + public string rchSlotName + { + get + { + return new string(new char[] { + (char)rchSlotName0, + (char)rchSlotName1, + (char)rchSlotName2, + (char)rchSlotName3, + (char)rchSlotName4, + (char)rchSlotName5, + (char)rchSlotName6, + (char)rchSlotName7, + (char)rchSlotName8, + (char)rchSlotName9, + (char)rchSlotName10, + (char)rchSlotName11, + (char)rchSlotName12, + (char)rchSlotName13, + (char)rchSlotName14, + (char)rchSlotName15, + (char)rchSlotName16, + (char)rchSlotName17, + (char)rchSlotName18, + (char)rchSlotName19, + (char)rchSlotName20, + (char)rchSlotName21, + (char)rchSlotName22, + (char)rchSlotName23, + (char)rchSlotName24, + (char)rchSlotName25, + (char)rchSlotName26, + (char)rchSlotName27, + (char)rchSlotName28, + (char)rchSlotName29, + (char)rchSlotName30, + (char)rchSlotName31, + (char)rchSlotName32, + (char)rchSlotName33, + (char)rchSlotName34, + (char)rchSlotName35, + (char)rchSlotName36, + (char)rchSlotName37, + (char)rchSlotName38, + (char)rchSlotName39, + (char)rchSlotName40, + (char)rchSlotName41, + (char)rchSlotName42, + (char)rchSlotName43, + (char)rchSlotName44, + (char)rchSlotName45, + (char)rchSlotName46, + (char)rchSlotName47, + (char)rchSlotName48, + (char)rchSlotName49, + (char)rchSlotName50, + (char)rchSlotName51, + (char)rchSlotName52, + (char)rchSlotName53, + (char)rchSlotName54, + (char)rchSlotName55, + (char)rchSlotName56, + (char)rchSlotName57, + (char)rchSlotName58, + (char)rchSlotName59, + (char)rchSlotName60, + (char)rchSlotName61, + (char)rchSlotName62, + (char)rchSlotName63, + (char)rchSlotName64, + (char)rchSlotName65, + (char)rchSlotName66, + (char)rchSlotName67, + (char)rchSlotName68, + (char)rchSlotName69, + (char)rchSlotName70, + (char)rchSlotName71, + (char)rchSlotName72, + (char)rchSlotName73, + (char)rchSlotName74, + (char)rchSlotName75, + (char)rchSlotName76, + (char)rchSlotName77, + (char)rchSlotName78, + (char)rchSlotName79, + (char)rchSlotName80, + (char)rchSlotName81, + (char)rchSlotName82, + (char)rchSlotName83, + (char)rchSlotName84, + (char)rchSlotName85, + (char)rchSlotName86, + (char)rchSlotName87, + (char)rchSlotName88, + (char)rchSlotName89, + (char)rchSlotName90, + (char)rchSlotName91, + (char)rchSlotName92, + (char)rchSlotName93, + (char)rchSlotName94, + (char)rchSlotName95, + (char)rchSlotName96, + (char)rchSlotName97, + (char)rchSlotName98, + (char)rchSlotName99, + (char)rchSlotName100, + (char)rchSlotName101, + (char)rchSlotName102, + (char)rchSlotName103, + (char)rchSlotName104, + (char)rchSlotName105, + (char)rchSlotName106, + (char)rchSlotName107, + (char)rchSlotName108, + (char)rchSlotName109, + (char)rchSlotName110, + (char)rchSlotName111, + (char)rchSlotName112, + (char)rchSlotName113, + (char)rchSlotName114, + (char)rchSlotName115, + (char)rchSlotName116, + (char)rchSlotName117, + (char)rchSlotName118, + (char)rchSlotName119, + (char)rchSlotName120, + (char)rchSlotName121, + (char)rchSlotName122, + (char)rchSlotName123, + (char)rchSlotName124, + (char)rchSlotName125, + (char)rchSlotName126, + (char)rchSlotName127 + }).TrimEnd('\0'); + } + } + public byte rchInputSourceType0,rchInputSourceType1,rchInputSourceType2,rchInputSourceType3,rchInputSourceType4,rchInputSourceType5,rchInputSourceType6,rchInputSourceType7,rchInputSourceType8,rchInputSourceType9,rchInputSourceType10,rchInputSourceType11,rchInputSourceType12,rchInputSourceType13,rchInputSourceType14,rchInputSourceType15,rchInputSourceType16,rchInputSourceType17,rchInputSourceType18,rchInputSourceType19,rchInputSourceType20,rchInputSourceType21,rchInputSourceType22,rchInputSourceType23,rchInputSourceType24,rchInputSourceType25,rchInputSourceType26,rchInputSourceType27,rchInputSourceType28,rchInputSourceType29,rchInputSourceType30,rchInputSourceType31; + public string rchInputSourceType + { + get + { + return new string(new char[] { + (char)rchInputSourceType0, + (char)rchInputSourceType1, + (char)rchInputSourceType2, + (char)rchInputSourceType3, + (char)rchInputSourceType4, + (char)rchInputSourceType5, + (char)rchInputSourceType6, + (char)rchInputSourceType7, + (char)rchInputSourceType8, + (char)rchInputSourceType9, + (char)rchInputSourceType10, + (char)rchInputSourceType11, + (char)rchInputSourceType12, + (char)rchInputSourceType13, + (char)rchInputSourceType14, + (char)rchInputSourceType15, + (char)rchInputSourceType16, + (char)rchInputSourceType17, + (char)rchInputSourceType18, + (char)rchInputSourceType19, + (char)rchInputSourceType20, + (char)rchInputSourceType21, + (char)rchInputSourceType22, + (char)rchInputSourceType23, + (char)rchInputSourceType24, + (char)rchInputSourceType25, + (char)rchInputSourceType26, + (char)rchInputSourceType27, + (char)rchInputSourceType28, + (char)rchInputSourceType29, + (char)rchInputSourceType30, + (char)rchInputSourceType31 + }).TrimEnd('\0'); + } + } +} +[StructLayout(LayoutKind.Sequential)] public struct VRActiveActionSet_t +{ + public ulong ulActionSet; + public ulong ulRestrictedToDevice; + public ulong ulSecondaryActionSet; + public uint unPadding; + public int nPriority; +} +[StructLayout(LayoutKind.Sequential)] public struct VRSkeletalSummaryData_t +{ + public float flFingerCurl0; //float[5] + public float flFingerCurl1; + public float flFingerCurl2; + public float flFingerCurl3; + public float flFingerCurl4; + public float flFingerSplay0; //float[4] + public float flFingerSplay1; + public float flFingerSplay2; + public float flFingerSplay3; +} +[StructLayout(LayoutKind.Sequential)] public struct SpatialAnchorPose_t +{ + public HmdMatrix34_t mAnchorToAbsoluteTracking; +} +[StructLayout(LayoutKind.Sequential)] public struct COpenVRContext +{ + public IntPtr m_pVRSystem; // class vr::IVRSystem * + public IntPtr m_pVRChaperone; // class vr::IVRChaperone * + public IntPtr m_pVRChaperoneSetup; // class vr::IVRChaperoneSetup * + public IntPtr m_pVRCompositor; // class vr::IVRCompositor * + public IntPtr m_pVRHeadsetView; // class vr::IVRHeadsetView * + public IntPtr m_pVROverlay; // class vr::IVROverlay * + public IntPtr m_pVROverlayView; // class vr::IVROverlayView * + public IntPtr m_pVRResources; // class vr::IVRResources * + public IntPtr m_pVRRenderModels; // class vr::IVRRenderModels * + public IntPtr m_pVRExtendedDisplay; // class vr::IVRExtendedDisplay * + public IntPtr m_pVRSettings; // class vr::IVRSettings * + public IntPtr m_pVRApplications; // class vr::IVRApplications * + public IntPtr m_pVRTrackedCamera; // class vr::IVRTrackedCamera * + public IntPtr m_pVRScreenshots; // class vr::IVRScreenshots * + public IntPtr m_pVRDriverManager; // class vr::IVRDriverManager * + public IntPtr m_pVRInput; // class vr::IVRInput * + public IntPtr m_pVRIOBuffer; // class vr::IVRIOBuffer * + public IntPtr m_pVRSpatialAnchors; // class vr::IVRSpatialAnchors * + public IntPtr m_pVRDebug; // class vr::IVRDebug * + public IntPtr m_pVRNotifications; // class vr::IVRNotifications * +} +[StructLayout(LayoutKind.Sequential)] public struct PropertyWrite_t +{ + public ETrackedDeviceProperty prop; + public EPropertyWriteType writeType; + public ETrackedPropertyError eSetError; + public IntPtr pvBuffer; // void * + public uint unBufferSize; + public uint unTag; + public ETrackedPropertyError eError; +} +[StructLayout(LayoutKind.Sequential)] public struct PropertyRead_t +{ + public ETrackedDeviceProperty prop; + public IntPtr pvBuffer; // void * + public uint unBufferSize; + public uint unTag; + public uint unRequiredBufferSize; + public ETrackedPropertyError eError; +} +[StructLayout(LayoutKind.Sequential)] public struct CVRPropertyHelpers +{ + public IntPtr m_pProperties; // class vr::IVRProperties * +} +[StructLayout(LayoutKind.Sequential)] public struct PathWrite_t +{ + public ulong ulPath; + public EPropertyWriteType writeType; + public ETrackedPropertyError eSetError; + public IntPtr pvBuffer; // void * + public uint unBufferSize; + public uint unTag; + public ETrackedPropertyError eError; + public IntPtr pszPath; // const char * +} +[StructLayout(LayoutKind.Sequential)] public struct PathRead_t +{ + public ulong ulPath; + public IntPtr pvBuffer; // void * + public uint unBufferSize; + public uint unTag; + public uint unRequiredBufferSize; + public ETrackedPropertyError eError; + public IntPtr pszPath; // const char * +} + +public class OpenVR +{ + + public static uint InitInternal(ref EVRInitError peError, EVRApplicationType eApplicationType) + { + return OpenVRInterop.InitInternal(ref peError, eApplicationType); + } + + public static uint InitInternal2(ref EVRInitError peError, EVRApplicationType eApplicationType, string pchStartupInfo) + { + return OpenVRInterop.InitInternal2(ref peError, eApplicationType, pchStartupInfo); + } + + public static void ShutdownInternal() + { + OpenVRInterop.ShutdownInternal(); + } + + public static bool IsHmdPresent() + { + return OpenVRInterop.IsHmdPresent(); + } + + public static bool IsRuntimeInstalled() + { + return OpenVRInterop.IsRuntimeInstalled(); + } + + public static string RuntimePath() + { + try + { + uint pathSize = 512; + uint requiredPathSize = 512; + System.Text.StringBuilder path = new System.Text.StringBuilder((int)pathSize); + bool success = OpenVRInterop.GetRuntimePath(path, pathSize, ref requiredPathSize); + if (success == false) + { + return null; + } + + return path.ToString(); + } catch + { + return OpenVRInterop.RuntimePath(); //this api is deprecated but here to support older unity versions + } + } + + public static string GetStringForHmdError(EVRInitError error) + { + return Marshal.PtrToStringAnsi(OpenVRInterop.GetStringForHmdError(error)); + } + + public static IntPtr GetGenericInterface(string pchInterfaceVersion, ref EVRInitError peError) + { + return OpenVRInterop.GetGenericInterface(pchInterfaceVersion, ref peError); + } + + public static bool IsInterfaceVersionValid(string pchInterfaceVersion) + { + return OpenVRInterop.IsInterfaceVersionValid(pchInterfaceVersion); + } + + public static uint GetInitToken() + { + return OpenVRInterop.GetInitToken(); + } + + public const uint k_nDriverNone = 4294967295; + public const uint k_unMaxDriverDebugResponseSize = 32768; + public const uint k_unTrackedDeviceIndex_Hmd = 0; + public const uint k_unMaxTrackedDeviceCount = 64; + public const uint k_unTrackedDeviceIndexOther = 4294967294; + public const uint k_unTrackedDeviceIndexInvalid = 4294967295; + public const ulong k_ulInvalidPropertyContainer = 0; + public const uint k_unInvalidPropertyTag = 0; + public const ulong k_ulInvalidDriverHandle = 0; + public const uint k_unFloatPropertyTag = 1; + public const uint k_unInt32PropertyTag = 2; + public const uint k_unUint64PropertyTag = 3; + public const uint k_unBoolPropertyTag = 4; + public const uint k_unStringPropertyTag = 5; + public const uint k_unErrorPropertyTag = 6; + public const uint k_unDoublePropertyTag = 7; + public const uint k_unHmdMatrix34PropertyTag = 20; + public const uint k_unHmdMatrix44PropertyTag = 21; + public const uint k_unHmdVector3PropertyTag = 22; + public const uint k_unHmdVector4PropertyTag = 23; + public const uint k_unHmdVector2PropertyTag = 24; + public const uint k_unHmdQuadPropertyTag = 25; + public const uint k_unHiddenAreaPropertyTag = 30; + public const uint k_unPathHandleInfoTag = 31; + public const uint k_unActionPropertyTag = 32; + public const uint k_unInputValuePropertyTag = 33; + public const uint k_unWildcardPropertyTag = 34; + public const uint k_unHapticVibrationPropertyTag = 35; + public const uint k_unSkeletonPropertyTag = 36; + public const uint k_unSpatialAnchorPosePropertyTag = 40; + public const uint k_unJsonPropertyTag = 41; + public const uint k_unActiveActionSetPropertyTag = 42; + public const uint k_unOpenVRInternalReserved_Start = 1000; + public const uint k_unOpenVRInternalReserved_End = 10000; + public const uint k_unMaxPropertyStringSize = 32768; + public const ulong k_ulInvalidActionHandle = 0; + public const ulong k_ulInvalidActionSetHandle = 0; + public const ulong k_ulInvalidInputValueHandle = 0; + public const uint k_unControllerStateAxisCount = 5; + public const ulong k_ulOverlayHandleInvalid = 0; + public const uint k_unMaxDistortionFunctionParameters = 8; + public const uint k_unScreenshotHandleInvalid = 0; + public const string IVRSystem_Version = "IVRSystem_022"; + public const string IVRExtendedDisplay_Version = "IVRExtendedDisplay_001"; + public const string IVRTrackedCamera_Version = "IVRTrackedCamera_006"; + public const uint k_unMaxApplicationKeyLength = 128; + public const string k_pch_MimeType_HomeApp = "vr/home"; + public const string k_pch_MimeType_GameTheater = "vr/game_theater"; + public const string IVRApplications_Version = "IVRApplications_007"; + public const string IVRChaperone_Version = "IVRChaperone_004"; + public const string IVRChaperoneSetup_Version = "IVRChaperoneSetup_006"; + public const string IVRCompositor_Version = "IVRCompositor_027"; + public const uint k_unVROverlayMaxKeyLength = 128; + public const uint k_unVROverlayMaxNameLength = 128; + public const uint k_unMaxOverlayCount = 128; + public const uint k_unMaxOverlayIntersectionMaskPrimitivesCount = 32; + public const string IVROverlay_Version = "IVROverlay_025"; + public const string IVROverlayView_Version = "IVROverlayView_003"; + public const uint k_unHeadsetViewMaxWidth = 3840; + public const uint k_unHeadsetViewMaxHeight = 2160; + public const string k_pchHeadsetViewOverlayKey = "system.HeadsetView"; + public const string IVRHeadsetView_Version = "IVRHeadsetView_001"; + public const string k_pch_Controller_Component_GDC2015 = "gdc2015"; + public const string k_pch_Controller_Component_Base = "base"; + public const string k_pch_Controller_Component_Tip = "tip"; + public const string k_pch_Controller_Component_HandGrip = "handgrip"; + public const string k_pch_Controller_Component_Status = "status"; + public const string IVRRenderModels_Version = "IVRRenderModels_006"; + public const uint k_unNotificationTextMaxSize = 256; + public const string IVRNotifications_Version = "IVRNotifications_002"; + public const uint k_unMaxSettingsKeyLength = 128; + public const string IVRSettings_Version = "IVRSettings_003"; + public const string k_pch_SteamVR_Section = "steamvr"; + public const string k_pch_SteamVR_RequireHmd_String = "requireHmd"; + public const string k_pch_SteamVR_ForcedDriverKey_String = "forcedDriver"; + public const string k_pch_SteamVR_ForcedHmdKey_String = "forcedHmd"; + public const string k_pch_SteamVR_DisplayDebug_Bool = "displayDebug"; + public const string k_pch_SteamVR_DebugProcessPipe_String = "debugProcessPipe"; + public const string k_pch_SteamVR_DisplayDebugX_Int32 = "displayDebugX"; + public const string k_pch_SteamVR_DisplayDebugY_Int32 = "displayDebugY"; + public const string k_pch_SteamVR_SendSystemButtonToAllApps_Bool = "sendSystemButtonToAllApps"; + public const string k_pch_SteamVR_LogLevel_Int32 = "loglevel"; + public const string k_pch_SteamVR_IPD_Float = "ipd"; + public const string k_pch_SteamVR_Background_String = "background"; + public const string k_pch_SteamVR_BackgroundUseDomeProjection_Bool = "backgroundUseDomeProjection"; + public const string k_pch_SteamVR_BackgroundCameraHeight_Float = "backgroundCameraHeight"; + public const string k_pch_SteamVR_BackgroundDomeRadius_Float = "backgroundDomeRadius"; + public const string k_pch_SteamVR_GridColor_String = "gridColor"; + public const string k_pch_SteamVR_PlayAreaColor_String = "playAreaColor"; + public const string k_pch_SteamVR_TrackingLossColor_String = "trackingLossColor"; + public const string k_pch_SteamVR_ShowStage_Bool = "showStage"; + public const string k_pch_SteamVR_DrawTrackingReferences_Bool = "drawTrackingReferences"; + public const string k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers"; + public const string k_pch_SteamVR_UsingSpeakers_Bool = "usingSpeakers"; + public const string k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float = "speakersForwardYawOffsetDegrees"; + public const string k_pch_SteamVR_BaseStationPowerManagement_Int32 = "basestationPowerManagement"; + public const string k_pch_SteamVR_ShowBaseStationPowerManagementTip_Int32 = "ShowBaseStationPowerManagementTip"; + public const string k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses"; + public const string k_pch_SteamVR_SupersampleScale_Float = "supersampleScale"; + public const string k_pch_SteamVR_MaxRecommendedResolution_Int32 = "maxRecommendedResolution"; + public const string k_pch_SteamVR_MotionSmoothing_Bool = "motionSmoothing"; + public const string k_pch_SteamVR_MotionSmoothingOverride_Int32 = "motionSmoothingOverride"; + public const string k_pch_SteamVR_FramesToThrottle_Int32 = "framesToThrottle"; + public const string k_pch_SteamVR_AdditionalFramesToPredict_Int32 = "additionalFramesToPredict"; + public const string k_pch_SteamVR_DisableAsyncReprojection_Bool = "disableAsync"; + public const string k_pch_SteamVR_ForceFadeOnBadTracking_Bool = "forceFadeOnBadTracking"; + public const string k_pch_SteamVR_DefaultMirrorView_Int32 = "mirrorView"; + public const string k_pch_SteamVR_ShowLegacyMirrorView_Bool = "showLegacyMirrorView"; + public const string k_pch_SteamVR_MirrorViewVisibility_Bool = "showMirrorView"; + public const string k_pch_SteamVR_MirrorViewDisplayMode_Int32 = "mirrorViewDisplayMode"; + public const string k_pch_SteamVR_MirrorViewEye_Int32 = "mirrorViewEye"; + public const string k_pch_SteamVR_MirrorViewGeometry_String = "mirrorViewGeometry"; + public const string k_pch_SteamVR_MirrorViewGeometryMaximized_String = "mirrorViewGeometryMaximized"; + public const string k_pch_SteamVR_PerfGraphVisibility_Bool = "showPerfGraph"; + public const string k_pch_SteamVR_StartMonitorFromAppLaunch = "startMonitorFromAppLaunch"; + public const string k_pch_SteamVR_StartCompositorFromAppLaunch_Bool = "startCompositorFromAppLaunch"; + public const string k_pch_SteamVR_StartDashboardFromAppLaunch_Bool = "startDashboardFromAppLaunch"; + public const string k_pch_SteamVR_StartOverlayAppsFromDashboard_Bool = "startOverlayAppsFromDashboard"; + public const string k_pch_SteamVR_EnableHomeApp = "enableHomeApp"; + public const string k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32 = "CycleBackgroundImageTimeSec"; + public const string k_pch_SteamVR_RetailDemo_Bool = "retailDemo"; + public const string k_pch_SteamVR_IpdOffset_Float = "ipdOffset"; + public const string k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering"; + public const string k_pch_SteamVR_SupersampleManualOverride_Bool = "supersampleManualOverride"; + public const string k_pch_SteamVR_EnableLinuxVulkanAsync_Bool = "enableLinuxVulkanAsync"; + public const string k_pch_SteamVR_AllowDisplayLockedMode_Bool = "allowDisplayLockedMode"; + public const string k_pch_SteamVR_HaveStartedTutorialForNativeChaperoneDriver_Bool = "haveStartedTutorialForNativeChaperoneDriver"; + public const string k_pch_SteamVR_ForceWindows32bitVRMonitor = "forceWindows32BitVRMonitor"; + public const string k_pch_SteamVR_DebugInputBinding = "debugInputBinding"; + public const string k_pch_SteamVR_DoNotFadeToGrid = "doNotFadeToGrid"; + public const string k_pch_SteamVR_RenderCameraMode = "renderCameraMode"; + public const string k_pch_SteamVR_EnableSharedResourceJournaling = "enableSharedResourceJournaling"; + public const string k_pch_SteamVR_EnableSafeMode = "enableSafeMode"; + public const string k_pch_SteamVR_PreferredRefreshRate = "preferredRefreshRate"; + public const string k_pch_SteamVR_LastVersionNotice = "lastVersionNotice"; + public const string k_pch_SteamVR_LastVersionNoticeDate = "lastVersionNoticeDate"; + public const string k_pch_SteamVR_HmdDisplayColorGainR_Float = "hmdDisplayColorGainR"; + public const string k_pch_SteamVR_HmdDisplayColorGainG_Float = "hmdDisplayColorGainG"; + public const string k_pch_SteamVR_HmdDisplayColorGainB_Float = "hmdDisplayColorGainB"; + public const string k_pch_SteamVR_CustomIconStyle_String = "customIconStyle"; + public const string k_pch_SteamVR_CustomOffIconStyle_String = "customOffIconStyle"; + public const string k_pch_SteamVR_CustomIconForceUpdate_String = "customIconForceUpdate"; + public const string k_pch_SteamVR_AllowGlobalActionSetPriority = "globalActionSetPriority"; + public const string k_pch_SteamVR_OverlayRenderQuality = "overlayRenderQuality_2"; + public const string k_pch_SteamVR_BlockOculusSDKOnOpenVRLaunchOption_Bool = "blockOculusSDKOnOpenVRLaunchOption"; + public const string k_pch_SteamVR_BlockOculusSDKOnAllLaunches_Bool = "blockOculusSDKOnAllLaunches"; + public const string k_pch_SteamVR_HDCPLegacyCompatibility_Bool = "hdcp14legacyCompatibility"; + public const string k_pch_SteamVR_UsePrism_Bool = "usePrism"; + public const string k_pch_DirectMode_Section = "direct_mode"; + public const string k_pch_DirectMode_Enable_Bool = "enable"; + public const string k_pch_DirectMode_Count_Int32 = "count"; + public const string k_pch_DirectMode_EdidVid_Int32 = "edidVid"; + public const string k_pch_DirectMode_EdidPid_Int32 = "edidPid"; + public const string k_pch_Lighthouse_Section = "driver_lighthouse"; + public const string k_pch_Lighthouse_DisableIMU_Bool = "disableimu"; + public const string k_pch_Lighthouse_DisableIMUExceptHMD_Bool = "disableimuexcepthmd"; + public const string k_pch_Lighthouse_UseDisambiguation_String = "usedisambiguation"; + public const string k_pch_Lighthouse_DisambiguationDebug_Int32 = "disambiguationdebug"; + public const string k_pch_Lighthouse_PrimaryBasestation_Int32 = "primarybasestation"; + public const string k_pch_Lighthouse_DBHistory_Bool = "dbhistory"; + public const string k_pch_Lighthouse_EnableBluetooth_Bool = "enableBluetooth"; + public const string k_pch_Lighthouse_PowerManagedBaseStations_String = "PowerManagedBaseStations"; + public const string k_pch_Lighthouse_PowerManagedBaseStations2_String = "PowerManagedBaseStations2"; + public const string k_pch_Lighthouse_InactivityTimeoutForBaseStations_Int32 = "InactivityTimeoutForBaseStations"; + public const string k_pch_Lighthouse_EnableImuFallback_Bool = "enableImuFallback"; + public const string k_pch_Null_Section = "driver_null"; + public const string k_pch_Null_SerialNumber_String = "serialNumber"; + public const string k_pch_Null_ModelNumber_String = "modelNumber"; + public const string k_pch_Null_WindowX_Int32 = "windowX"; + public const string k_pch_Null_WindowY_Int32 = "windowY"; + public const string k_pch_Null_WindowWidth_Int32 = "windowWidth"; + public const string k_pch_Null_WindowHeight_Int32 = "windowHeight"; + public const string k_pch_Null_RenderWidth_Int32 = "renderWidth"; + public const string k_pch_Null_RenderHeight_Int32 = "renderHeight"; + public const string k_pch_Null_SecondsFromVsyncToPhotons_Float = "secondsFromVsyncToPhotons"; + public const string k_pch_Null_DisplayFrequency_Float = "displayFrequency"; + public const string k_pch_WindowsMR_Section = "driver_holographic"; + public const string k_pch_UserInterface_Section = "userinterface"; + public const string k_pch_UserInterface_StatusAlwaysOnTop_Bool = "StatusAlwaysOnTop"; + public const string k_pch_UserInterface_MinimizeToTray_Bool = "MinimizeToTray"; + public const string k_pch_UserInterface_HidePopupsWhenStatusMinimized_Bool = "HidePopupsWhenStatusMinimized"; + public const string k_pch_UserInterface_Screenshots_Bool = "screenshots"; + public const string k_pch_UserInterface_ScreenshotType_Int = "screenshotType"; + public const string k_pch_Notifications_Section = "notifications"; + public const string k_pch_Notifications_DoNotDisturb_Bool = "DoNotDisturb"; + public const string k_pch_Keyboard_Section = "keyboard"; + public const string k_pch_Keyboard_TutorialCompletions = "TutorialCompletions"; + public const string k_pch_Keyboard_ScaleX = "ScaleX"; + public const string k_pch_Keyboard_ScaleY = "ScaleY"; + public const string k_pch_Keyboard_OffsetLeftX = "OffsetLeftX"; + public const string k_pch_Keyboard_OffsetRightX = "OffsetRightX"; + public const string k_pch_Keyboard_OffsetY = "OffsetY"; + public const string k_pch_Keyboard_Smoothing = "Smoothing"; + public const string k_pch_Perf_Section = "perfcheck"; + public const string k_pch_Perf_PerfGraphInHMD_Bool = "perfGraphInHMD"; + public const string k_pch_Perf_AllowTimingStore_Bool = "allowTimingStore"; + public const string k_pch_Perf_SaveTimingsOnExit_Bool = "saveTimingsOnExit"; + public const string k_pch_Perf_TestData_Float = "perfTestData"; + public const string k_pch_Perf_GPUProfiling_Bool = "GPUProfiling"; + public const string k_pch_CollisionBounds_Section = "collisionBounds"; + public const string k_pch_CollisionBounds_Style_Int32 = "CollisionBoundsStyle"; + public const string k_pch_CollisionBounds_GroundPerimeterOn_Bool = "CollisionBoundsGroundPerimeterOn"; + public const string k_pch_CollisionBounds_CenterMarkerOn_Bool = "CollisionBoundsCenterMarkerOn"; + public const string k_pch_CollisionBounds_PlaySpaceOn_Bool = "CollisionBoundsPlaySpaceOn"; + public const string k_pch_CollisionBounds_FadeDistance_Float = "CollisionBoundsFadeDistance"; + public const string k_pch_CollisionBounds_WallHeight_Float = "CollisionBoundsWallHeight"; + public const string k_pch_CollisionBounds_ColorGammaR_Int32 = "CollisionBoundsColorGammaR"; + public const string k_pch_CollisionBounds_ColorGammaG_Int32 = "CollisionBoundsColorGammaG"; + public const string k_pch_CollisionBounds_ColorGammaB_Int32 = "CollisionBoundsColorGammaB"; + public const string k_pch_CollisionBounds_ColorGammaA_Int32 = "CollisionBoundsColorGammaA"; + public const string k_pch_CollisionBounds_EnableDriverImport = "enableDriverBoundsImport"; + public const string k_pch_Camera_Section = "camera"; + public const string k_pch_Camera_EnableCamera_Bool = "enableCamera"; + public const string k_pch_Camera_ShowOnController_Bool = "showOnController"; + public const string k_pch_Camera_EnableCameraForCollisionBounds_Bool = "enableCameraForCollisionBounds"; + public const string k_pch_Camera_RoomView_Int32 = "roomView"; + public const string k_pch_Camera_BoundsColorGammaR_Int32 = "cameraBoundsColorGammaR"; + public const string k_pch_Camera_BoundsColorGammaG_Int32 = "cameraBoundsColorGammaG"; + public const string k_pch_Camera_BoundsColorGammaB_Int32 = "cameraBoundsColorGammaB"; + public const string k_pch_Camera_BoundsColorGammaA_Int32 = "cameraBoundsColorGammaA"; + public const string k_pch_Camera_BoundsStrength_Int32 = "cameraBoundsStrength"; + public const string k_pch_Camera_RoomViewStyle_Int32 = "roomViewStyle"; + public const string k_pch_audio_Section = "audio"; + public const string k_pch_audio_SetOsDefaultPlaybackDevice_Bool = "setOsDefaultPlaybackDevice"; + public const string k_pch_audio_EnablePlaybackDeviceOverride_Bool = "enablePlaybackDeviceOverride"; + public const string k_pch_audio_PlaybackDeviceOverride_String = "playbackDeviceOverride"; + public const string k_pch_audio_PlaybackDeviceOverrideName_String = "playbackDeviceOverrideName"; + public const string k_pch_audio_SetOsDefaultRecordingDevice_Bool = "setOsDefaultRecordingDevice"; + public const string k_pch_audio_EnableRecordingDeviceOverride_Bool = "enableRecordingDeviceOverride"; + public const string k_pch_audio_RecordingDeviceOverride_String = "recordingDeviceOverride"; + public const string k_pch_audio_RecordingDeviceOverrideName_String = "recordingDeviceOverrideName"; + public const string k_pch_audio_EnablePlaybackMirror_Bool = "enablePlaybackMirror"; + public const string k_pch_audio_PlaybackMirrorDevice_String = "playbackMirrorDevice"; + public const string k_pch_audio_PlaybackMirrorDeviceName_String = "playbackMirrorDeviceName"; + public const string k_pch_audio_OldPlaybackMirrorDevice_String = "onPlaybackMirrorDevice"; + public const string k_pch_audio_ActiveMirrorDevice_String = "activePlaybackMirrorDevice"; + public const string k_pch_audio_EnablePlaybackMirrorIndependentVolume_Bool = "enablePlaybackMirrorIndependentVolume"; + public const string k_pch_audio_LastHmdPlaybackDeviceId_String = "lastHmdPlaybackDeviceId"; + public const string k_pch_audio_VIVEHDMIGain = "viveHDMIGain"; + public const string k_pch_audio_DualSpeakerAndJackOutput_Bool = "dualSpeakerAndJackOutput"; + public const string k_pch_audio_MuteMicMonitor_Bool = "muteMicMonitor"; + public const string k_pch_Power_Section = "power"; + public const string k_pch_Power_PowerOffOnExit_Bool = "powerOffOnExit"; + public const string k_pch_Power_TurnOffScreensTimeout_Float = "turnOffScreensTimeout"; + public const string k_pch_Power_TurnOffControllersTimeout_Float = "turnOffControllersTimeout"; + public const string k_pch_Power_ReturnToWatchdogTimeout_Float = "returnToWatchdogTimeout"; + public const string k_pch_Power_AutoLaunchSteamVROnButtonPress = "autoLaunchSteamVROnButtonPress"; + public const string k_pch_Power_PauseCompositorOnStandby_Bool = "pauseCompositorOnStandby"; + public const string k_pch_Dashboard_Section = "dashboard"; + public const string k_pch_Dashboard_EnableDashboard_Bool = "enableDashboard"; + public const string k_pch_Dashboard_ArcadeMode_Bool = "arcadeMode"; + public const string k_pch_Dashboard_Position = "position"; + public const string k_pch_Dashboard_DesktopScale = "desktopScale"; + public const string k_pch_Dashboard_DashboardScale = "dashboardScale"; + public const string k_pch_Dashboard_UseStandaloneSystemLayer = "standaloneSystemLayer"; + public const string k_pch_modelskin_Section = "modelskins"; + public const string k_pch_Driver_Enable_Bool = "enable"; + public const string k_pch_Driver_BlockedBySafemode_Bool = "blocked_by_safe_mode"; + public const string k_pch_Driver_LoadPriority_Int32 = "loadPriority"; + public const string k_pch_WebInterface_Section = "WebInterface"; + public const string k_pch_VRWebHelper_Section = "VRWebHelper"; + public const string k_pch_VRWebHelper_DebuggerEnabled_Bool = "DebuggerEnabled"; + public const string k_pch_VRWebHelper_DebuggerPort_Int32 = "DebuggerPort"; + public const string k_pch_TrackingOverride_Section = "TrackingOverrides"; + public const string k_pch_App_BindingAutosaveURLSuffix_String = "AutosaveURL"; + public const string k_pch_App_BindingLegacyAPISuffix_String = "_legacy"; + public const string k_pch_App_BindingSteamVRInputAPISuffix_String = "_steamvrinput"; + public const string k_pch_App_BindingCurrentURLSuffix_String = "CurrentURL"; + public const string k_pch_App_BindingPreviousURLSuffix_String = "PreviousURL"; + public const string k_pch_App_NeedToUpdateAutosaveSuffix_Bool = "NeedToUpdateAutosave"; + public const string k_pch_App_DominantHand_Int32 = "DominantHand"; + public const string k_pch_App_BlockOculusSDK_Bool = "blockOculusSDK"; + public const string k_pch_Trackers_Section = "trackers"; + public const string k_pch_DesktopUI_Section = "DesktopUI"; + public const string k_pch_LastKnown_Section = "LastKnown"; + public const string k_pch_LastKnown_HMDManufacturer_String = "HMDManufacturer"; + public const string k_pch_LastKnown_HMDModel_String = "HMDModel"; + public const string k_pch_DismissedWarnings_Section = "DismissedWarnings"; + public const string k_pch_Input_Section = "input"; + public const string k_pch_Input_LeftThumbstickRotation_Float = "leftThumbstickRotation"; + public const string k_pch_Input_RightThumbstickRotation_Float = "rightThumbstickRotation"; + public const string k_pch_Input_ThumbstickDeadzone_Float = "thumbstickDeadzone"; + public const string k_pch_GpuSpeed_Section = "GpuSpeed"; + public const string IVRScreenshots_Version = "IVRScreenshots_001"; + public const string IVRResources_Version = "IVRResources_001"; + public const string IVRDriverManager_Version = "IVRDriverManager_001"; + public const uint k_unMaxActionNameLength = 64; + public const uint k_unMaxActionSetNameLength = 64; + public const uint k_unMaxActionOriginCount = 16; + public const uint k_unMaxBoneNameLength = 32; + public const int k_nActionSetOverlayGlobalPriorityMin = 16777216; + public const int k_nActionSetOverlayGlobalPriorityMax = 33554431; + public const int k_nActionSetPriorityReservedMin = 33554432; + public const string IVRInput_Version = "IVRInput_010"; + public const ulong k_ulInvalidIOBufferHandle = 0; + public const string IVRIOBuffer_Version = "IVRIOBuffer_002"; + public const uint k_ulInvalidSpatialAnchorHandle = 0; + public const string IVRSpatialAnchors_Version = "IVRSpatialAnchors_001"; + public const string IVRDebug_Version = "IVRDebug_001"; + public const ulong k_ulDisplayRedirectContainer = 25769803779; + public const string IVRProperties_Version = "IVRProperties_001"; + public const string k_pchPathUserHandRight = "/user/hand/right"; + public const string k_pchPathUserHandLeft = "/user/hand/left"; + public const string k_pchPathUserHandPrimary = "/user/hand/primary"; + public const string k_pchPathUserHandSecondary = "/user/hand/secondary"; + public const string k_pchPathUserHead = "/user/head"; + public const string k_pchPathUserGamepad = "/user/gamepad"; + public const string k_pchPathUserTreadmill = "/user/treadmill"; + public const string k_pchPathUserStylus = "/user/stylus"; + public const string k_pchPathDevices = "/devices"; + public const string k_pchPathDevicePath = "/device_path"; + public const string k_pchPathBestAliasPath = "/best_alias_path"; + public const string k_pchPathBoundTrackerAliasPath = "/bound_tracker_path"; + public const string k_pchPathBoundTrackerRole = "/bound_tracker_role"; + public const string k_pchPathPoseRaw = "/pose/raw"; + public const string k_pchPathPoseTip = "/pose/tip"; + public const string k_pchPathPoseGrip = "/pose/grip"; + public const string k_pchPathSystemButtonClick = "/input/system/click"; + public const string k_pchPathProximity = "/proximity"; + public const string k_pchPathControllerTypePrefix = "/controller_type/"; + public const string k_pchPathInputProfileSuffix = "/input_profile"; + public const string k_pchPathBindingNameSuffix = "/binding_name"; + public const string k_pchPathBindingUrlSuffix = "/binding_url"; + public const string k_pchPathBindingErrorSuffix = "/binding_error"; + public const string k_pchPathActiveActionSets = "/active_action_sets"; + public const string k_pchPathComponentUpdates = "/total_component_updates"; + public const string k_pchPathUserFootLeft = "/user/foot/left"; + public const string k_pchPathUserFootRight = "/user/foot/right"; + public const string k_pchPathUserShoulderLeft = "/user/shoulder/left"; + public const string k_pchPathUserShoulderRight = "/user/shoulder/right"; + public const string k_pchPathUserElbowLeft = "/user/elbow/left"; + public const string k_pchPathUserElbowRight = "/user/elbow/right"; + public const string k_pchPathUserKneeLeft = "/user/knee/left"; + public const string k_pchPathUserKneeRight = "/user/knee/right"; + public const string k_pchPathUserWaist = "/user/waist"; + public const string k_pchPathUserChest = "/user/chest"; + public const string k_pchPathUserCamera = "/user/camera"; + public const string k_pchPathUserKeyboard = "/user/keyboard"; + public const string k_pchPathClientAppKey = "/client_info/app_key"; + public const ulong k_ulInvalidPathHandle = 0; + public const string IVRPaths_Version = "IVRPaths_001"; + public const string IVRBlockQueue_Version = "IVRBlockQueue_004"; + + static uint VRToken { get; set; } + + const string FnTable_Prefix = "FnTable:"; + + class COpenVRContext + { + public COpenVRContext() { Clear(); } + + public void Clear() + { + m_pVRSystem = null; + m_pVRChaperone = null; + m_pVRChaperoneSetup = null; + m_pVRCompositor = null; + m_pVRHeadsetView = null; + m_pVROverlay = null; + m_pVROverlayView = null; + m_pVRRenderModels = null; + m_pVRExtendedDisplay = null; + m_pVRSettings = null; + m_pVRApplications = null; + m_pVRScreenshots = null; + m_pVRTrackedCamera = null; + m_pVRInput = null; + m_pVRIOBuffer = null; + m_pVRSpatialAnchors = null; + m_pVRNotifications = null; + m_pVRDebug = null; + } + + void CheckClear() + { + if (VRToken != GetInitToken()) + { + Clear(); + VRToken = GetInitToken(); + } + } + + public CVRSystem VRSystem() + { + CheckClear(); + if (m_pVRSystem == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRSystem_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRSystem = new CVRSystem(pInterface); + } + return m_pVRSystem; + } + + public CVRChaperone VRChaperone() + { + CheckClear(); + if (m_pVRChaperone == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRChaperone_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRChaperone = new CVRChaperone(pInterface); + } + return m_pVRChaperone; + } + + public CVRChaperoneSetup VRChaperoneSetup() + { + CheckClear(); + if (m_pVRChaperoneSetup == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRChaperoneSetup_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRChaperoneSetup = new CVRChaperoneSetup(pInterface); + } + return m_pVRChaperoneSetup; + } + + public CVRCompositor VRCompositor() + { + CheckClear(); + if (m_pVRCompositor == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRCompositor_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRCompositor = new CVRCompositor(pInterface); + } + return m_pVRCompositor; + } + + public CVRHeadsetView VRHeadsetView() + { + CheckClear(); + if (m_pVRHeadsetView == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRHeadsetView_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRHeadsetView = new CVRHeadsetView(pInterface); + } + return m_pVRHeadsetView; + } + + public CVROverlay VROverlay() + { + CheckClear(); + if (m_pVROverlay == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVROverlay_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVROverlay = new CVROverlay(pInterface); + } + return m_pVROverlay; + } + + public CVROverlayView VROverlayView() + { + CheckClear(); + if (m_pVROverlayView == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVROverlayView_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVROverlayView = new CVROverlayView(pInterface); + } + return m_pVROverlayView; + } + + public CVRRenderModels VRRenderModels() + { + CheckClear(); + if (m_pVRRenderModels == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRRenderModels_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRRenderModels = new CVRRenderModels(pInterface); + } + return m_pVRRenderModels; + } + + public CVRExtendedDisplay VRExtendedDisplay() + { + CheckClear(); + if (m_pVRExtendedDisplay == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRExtendedDisplay_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRExtendedDisplay = new CVRExtendedDisplay(pInterface); + } + return m_pVRExtendedDisplay; + } + + public CVRSettings VRSettings() + { + CheckClear(); + if (m_pVRSettings == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRSettings_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRSettings = new CVRSettings(pInterface); + } + return m_pVRSettings; + } + + public CVRApplications VRApplications() + { + CheckClear(); + if (m_pVRApplications == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRApplications_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRApplications = new CVRApplications(pInterface); + } + return m_pVRApplications; + } + + public CVRScreenshots VRScreenshots() + { + CheckClear(); + if (m_pVRScreenshots == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRScreenshots_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRScreenshots = new CVRScreenshots(pInterface); + } + return m_pVRScreenshots; + } + + public CVRTrackedCamera VRTrackedCamera() + { + CheckClear(); + if (m_pVRTrackedCamera == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRTrackedCamera_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRTrackedCamera = new CVRTrackedCamera(pInterface); + } + return m_pVRTrackedCamera; + } + + public CVRInput VRInput() + { + CheckClear(); + if (m_pVRInput == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix+IVRInput_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRInput = new CVRInput(pInterface); + } + return m_pVRInput; + } + + public CVRIOBuffer VRIOBuffer() + { + CheckClear(); + if (m_pVRIOBuffer == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRIOBuffer_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRIOBuffer = new CVRIOBuffer(pInterface); + } + return m_pVRIOBuffer; + } + + public CVRSpatialAnchors VRSpatialAnchors() + { + CheckClear(); + if (m_pVRSpatialAnchors == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRSpatialAnchors_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRSpatialAnchors = new CVRSpatialAnchors(pInterface); + } + return m_pVRSpatialAnchors; + } + + public CVRDebug VRDebug() + { + CheckClear(); + if (m_pVRDebug == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRDebug_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRDebug = new CVRDebug(pInterface); + } + return m_pVRDebug; + } + + public CVRNotifications VRNotifications() + { + CheckClear(); + if (m_pVRNotifications == null) + { + var eError = EVRInitError.None; + var pInterface = OpenVRInterop.GetGenericInterface(FnTable_Prefix + IVRNotifications_Version, ref eError); + if (pInterface != IntPtr.Zero && eError == EVRInitError.None) + m_pVRNotifications = new CVRNotifications(pInterface); + } + return m_pVRNotifications; + } + + private CVRSystem m_pVRSystem; + private CVRChaperone m_pVRChaperone; + private CVRChaperoneSetup m_pVRChaperoneSetup; + private CVRCompositor m_pVRCompositor; + private CVRHeadsetView m_pVRHeadsetView; + private CVROverlay m_pVROverlay; + private CVROverlayView m_pVROverlayView; + private CVRRenderModels m_pVRRenderModels; + private CVRExtendedDisplay m_pVRExtendedDisplay; + private CVRSettings m_pVRSettings; + private CVRApplications m_pVRApplications; + private CVRScreenshots m_pVRScreenshots; + private CVRTrackedCamera m_pVRTrackedCamera; + private CVRInput m_pVRInput; + private CVRIOBuffer m_pVRIOBuffer; + private CVRSpatialAnchors m_pVRSpatialAnchors; + private CVRNotifications m_pVRNotifications; + private CVRDebug m_pVRDebug; + }; + + private static COpenVRContext _OpenVRInternal_ModuleContext = null; + static COpenVRContext OpenVRInternal_ModuleContext + { + get + { + if (_OpenVRInternal_ModuleContext == null) + _OpenVRInternal_ModuleContext = new COpenVRContext(); + return _OpenVRInternal_ModuleContext; + } + } + + public static CVRSystem System { get { return OpenVRInternal_ModuleContext.VRSystem(); } } + public static CVRChaperone Chaperone { get { return OpenVRInternal_ModuleContext.VRChaperone(); } } + public static CVRChaperoneSetup ChaperoneSetup { get { return OpenVRInternal_ModuleContext.VRChaperoneSetup(); } } + public static CVRCompositor Compositor { get { return OpenVRInternal_ModuleContext.VRCompositor(); } } + public static CVRHeadsetView HeadsetView { get { return OpenVRInternal_ModuleContext.VRHeadsetView(); } } + public static CVROverlay Overlay { get { return OpenVRInternal_ModuleContext.VROverlay(); } } + public static CVROverlayView OverlayView { get { return OpenVRInternal_ModuleContext.VROverlayView(); } } + public static CVRRenderModels RenderModels { get { return OpenVRInternal_ModuleContext.VRRenderModels(); } } + public static CVRExtendedDisplay ExtendedDisplay { get { return OpenVRInternal_ModuleContext.VRExtendedDisplay(); } } + public static CVRSettings Settings { get { return OpenVRInternal_ModuleContext.VRSettings(); } } + public static CVRApplications Applications { get { return OpenVRInternal_ModuleContext.VRApplications(); } } + public static CVRScreenshots Screenshots { get { return OpenVRInternal_ModuleContext.VRScreenshots(); } } + public static CVRTrackedCamera TrackedCamera { get { return OpenVRInternal_ModuleContext.VRTrackedCamera(); } } + public static CVRInput Input { get { return OpenVRInternal_ModuleContext.VRInput(); } } + public static CVRIOBuffer IOBuffer { get { return OpenVRInternal_ModuleContext.VRIOBuffer(); } } + public static CVRSpatialAnchors SpatialAnchors { get { return OpenVRInternal_ModuleContext.VRSpatialAnchors(); } } + public static CVRNotifications Notifications { get { return OpenVRInternal_ModuleContext.VRNotifications(); } } + public static CVRDebug Debug { get { return OpenVRInternal_ModuleContext.VRDebug(); } } + + + /** Finds the active installation of vrclient.dll and initializes it */ + public static CVRSystem Init(ref EVRInitError peError, EVRApplicationType eApplicationType = EVRApplicationType.VRApplication_Scene, string pchStartupInfo= "") + { + try + { + VRToken = InitInternal2(ref peError, eApplicationType, pchStartupInfo); + } + catch (EntryPointNotFoundException) + { + VRToken = InitInternal(ref peError, eApplicationType); + } + + OpenVRInternal_ModuleContext.Clear(); + + if (peError != EVRInitError.None) + return null; + + bool bInterfaceValid = IsInterfaceVersionValid(IVRSystem_Version); + if (!bInterfaceValid) + { + ShutdownInternal(); + peError = EVRInitError.Init_InterfaceNotFound; + return null; + } + + return OpenVR.System; + } + + /** unloads vrclient.dll. Any interface pointers from the interface are + * invalid after this point */ + public static void Shutdown() + { + ShutdownInternal(); + } + +} + + + +} +#endif + diff --git a/contrib/openvr/headers/openvr_api.json b/contrib/openvr/headers/openvr_api.json new file mode 100755 index 0000000..463243b --- /dev/null +++ b/contrib/openvr/headers/openvr_api.json @@ -0,0 +1,5761 @@ +{"typedefs":[{"typedef": "vr::SpatialAnchorHandle_t","type": "uint32_t"} +,{"typedef": "vr::glSharedTextureHandle_t","type": "void *"} +,{"typedef": "vr::glInt_t","type": "int32_t"} +,{"typedef": "vr::glUInt_t","type": "uint32_t"} +,{"typedef": "vr::SharedTextureHandle_t","type": "uint64_t"} +,{"typedef": "vr::DriverId_t","type": "uint32_t"} +,{"typedef": "vr::TrackedDeviceIndex_t","type": "uint32_t"} +,{"typedef": "vr::WebConsoleHandle_t","type": "uint64_t"} +,{"typedef": "vr::PropertyContainerHandle_t","type": "uint64_t"} +,{"typedef": "vr::PropertyTypeTag_t","type": "uint32_t"} +,{"typedef": "vr::DriverHandle_t","type": "PropertyContainerHandle_t"} +,{"typedef": "vr::VRActionHandle_t","type": "uint64_t"} +,{"typedef": "vr::VRActionSetHandle_t","type": "uint64_t"} +,{"typedef": "vr::VRInputValueHandle_t","type": "uint64_t"} +,{"typedef": "vr::VREvent_Data_t","type": "union VREvent_Data_t"} +,{"typedef": "vr::VRComponentProperties","type": "uint32_t"} +,{"typedef": "vr::VRControllerState_t","type": "struct vr::VRControllerState001_t"} +,{"typedef": "vr::VROverlayHandle_t","type": "uint64_t"} +,{"typedef": "vr::BoneIndex_t","type": "int32_t"} +,{"typedef": "vr::TrackedCameraHandle_t","type": "uint64_t"} +,{"typedef": "vr::ScreenshotHandle_t","type": "uint32_t"} +,{"typedef": "vr::VROverlayIntersectionMaskPrimitive_Data_t","type": "union VROverlayIntersectionMaskPrimitive_Data_t"} +,{"typedef": "vr::TextureID_t","type": "int32_t"} +,{"typedef": "vr::VRNotificationId","type": "uint32_t"} +,{"typedef": "vr::IOBufferHandle_t","type": "uint64_t"} +,{"typedef": "vr::VrProfilerEventHandle_t","type": "uint64_t"} +,{"typedef": "vr::HmdError","type": "enum vr::EVRInitError"} +,{"typedef": "vr::Hmd_Eye","type": "enum vr::EVREye"} +,{"typedef": "vr::ColorSpace","type": "enum vr::EColorSpace"} +,{"typedef": "vr::HmdTrackingResult","type": "enum vr::ETrackingResult"} +,{"typedef": "vr::TrackedDeviceClass","type": "enum vr::ETrackedDeviceClass"} +,{"typedef": "vr::TrackingUniverseOrigin","type": "enum vr::ETrackingUniverseOrigin"} +,{"typedef": "vr::TrackedDeviceProperty","type": "enum vr::ETrackedDeviceProperty"} +,{"typedef": "vr::TrackedPropertyError","type": "enum vr::ETrackedPropertyError"} +,{"typedef": "vr::VRSubmitFlags_t","type": "enum vr::EVRSubmitFlags"} +,{"typedef": "vr::VRState_t","type": "enum vr::EVRState"} +,{"typedef": "vr::CollisionBoundsStyle_t","type": "enum vr::ECollisionBoundsStyle"} +,{"typedef": "vr::VROverlayError","type": "enum vr::EVROverlayError"} +,{"typedef": "vr::VRFirmwareError","type": "enum vr::EVRFirmwareError"} +,{"typedef": "vr::VRCompositorError","type": "enum vr::EVRCompositorError"} +,{"typedef": "vr::VRScreenshotsError","type": "enum vr::EVRScreenshotError"} +,{"typedef": "vr::PathHandle_t","type": "uint64_t"} +], +"enums":[ + {"enumname": "vr::EVREye","values": [ + {"name": "Eye_Left","value": "0"} + ,{"name": "Eye_Right","value": "1"} +]} +, {"enumname": "vr::ETextureType","values": [ + {"name": "TextureType_Invalid","value": "-1"} + ,{"name": "TextureType_DirectX","value": "0"} + ,{"name": "TextureType_OpenGL","value": "1"} + ,{"name": "TextureType_Vulkan","value": "2"} + ,{"name": "TextureType_IOSurface","value": "3"} + ,{"name": "TextureType_DirectX12","value": "4"} + ,{"name": "TextureType_DXGISharedHandle","value": "5"} + ,{"name": "TextureType_Metal","value": "6"} +]} +, {"enumname": "vr::EColorSpace","values": [ + {"name": "ColorSpace_Auto","value": "0"} + ,{"name": "ColorSpace_Gamma","value": "1"} + ,{"name": "ColorSpace_Linear","value": "2"} +]} +, {"enumname": "vr::ETrackingResult","values": [ + {"name": "TrackingResult_Uninitialized","value": "1"} + ,{"name": "TrackingResult_Calibrating_InProgress","value": "100"} + ,{"name": "TrackingResult_Calibrating_OutOfRange","value": "101"} + ,{"name": "TrackingResult_Running_OK","value": "200"} + ,{"name": "TrackingResult_Running_OutOfRange","value": "201"} + ,{"name": "TrackingResult_Fallback_RotationOnly","value": "300"} +]} +, {"enumname": "vr::ETrackedDeviceClass","values": [ + {"name": "TrackedDeviceClass_Invalid","value": "0"} + ,{"name": "TrackedDeviceClass_HMD","value": "1"} + ,{"name": "TrackedDeviceClass_Controller","value": "2"} + ,{"name": "TrackedDeviceClass_GenericTracker","value": "3"} + ,{"name": "TrackedDeviceClass_TrackingReference","value": "4"} + ,{"name": "TrackedDeviceClass_DisplayRedirect","value": "5"} + ,{"name": "TrackedDeviceClass_Max","value": "6"} +]} +, {"enumname": "vr::ETrackedControllerRole","values": [ + {"name": "TrackedControllerRole_Invalid","value": "0"} + ,{"name": "TrackedControllerRole_LeftHand","value": "1"} + ,{"name": "TrackedControllerRole_RightHand","value": "2"} + ,{"name": "TrackedControllerRole_OptOut","value": "3"} + ,{"name": "TrackedControllerRole_Treadmill","value": "4"} + ,{"name": "TrackedControllerRole_Stylus","value": "5"} + ,{"name": "TrackedControllerRole_Max","value": "5"} +]} +, {"enumname": "vr::ETrackingUniverseOrigin","values": [ + {"name": "TrackingUniverseSeated","value": "0"} + ,{"name": "TrackingUniverseStanding","value": "1"} + ,{"name": "TrackingUniverseRawAndUncalibrated","value": "2"} +]} +, {"enumname": "vr::EAdditionalRadioFeatures","values": [ + {"name": "AdditionalRadioFeatures_None","value": "0"} + ,{"name": "AdditionalRadioFeatures_HTCLinkBox","value": "1"} + ,{"name": "AdditionalRadioFeatures_InternalDongle","value": "2"} + ,{"name": "AdditionalRadioFeatures_ExternalDongle","value": "4"} +]} +, {"enumname": "vr::ETrackedDeviceProperty","values": [ + {"name": "Prop_Invalid","value": "0"} + ,{"name": "Prop_TrackingSystemName_String","value": "1000"} + ,{"name": "Prop_ModelNumber_String","value": "1001"} + ,{"name": "Prop_SerialNumber_String","value": "1002"} + ,{"name": "Prop_RenderModelName_String","value": "1003"} + ,{"name": "Prop_WillDriftInYaw_Bool","value": "1004"} + ,{"name": "Prop_ManufacturerName_String","value": "1005"} + ,{"name": "Prop_TrackingFirmwareVersion_String","value": "1006"} + ,{"name": "Prop_HardwareRevision_String","value": "1007"} + ,{"name": "Prop_AllWirelessDongleDescriptions_String","value": "1008"} + ,{"name": "Prop_ConnectedWirelessDongle_String","value": "1009"} + ,{"name": "Prop_DeviceIsWireless_Bool","value": "1010"} + ,{"name": "Prop_DeviceIsCharging_Bool","value": "1011"} + ,{"name": "Prop_DeviceBatteryPercentage_Float","value": "1012"} + ,{"name": "Prop_StatusDisplayTransform_Matrix34","value": "1013"} + ,{"name": "Prop_Firmware_UpdateAvailable_Bool","value": "1014"} + ,{"name": "Prop_Firmware_ManualUpdate_Bool","value": "1015"} + ,{"name": "Prop_Firmware_ManualUpdateURL_String","value": "1016"} + ,{"name": "Prop_HardwareRevision_Uint64","value": "1017"} + ,{"name": "Prop_FirmwareVersion_Uint64","value": "1018"} + ,{"name": "Prop_FPGAVersion_Uint64","value": "1019"} + ,{"name": "Prop_VRCVersion_Uint64","value": "1020"} + ,{"name": "Prop_RadioVersion_Uint64","value": "1021"} + ,{"name": "Prop_DongleVersion_Uint64","value": "1022"} + ,{"name": "Prop_BlockServerShutdown_Bool","value": "1023"} + ,{"name": "Prop_CanUnifyCoordinateSystemWithHmd_Bool","value": "1024"} + ,{"name": "Prop_ContainsProximitySensor_Bool","value": "1025"} + ,{"name": "Prop_DeviceProvidesBatteryStatus_Bool","value": "1026"} + ,{"name": "Prop_DeviceCanPowerOff_Bool","value": "1027"} + ,{"name": "Prop_Firmware_ProgrammingTarget_String","value": "1028"} + ,{"name": "Prop_DeviceClass_Int32","value": "1029"} + ,{"name": "Prop_HasCamera_Bool","value": "1030"} + ,{"name": "Prop_DriverVersion_String","value": "1031"} + ,{"name": "Prop_Firmware_ForceUpdateRequired_Bool","value": "1032"} + ,{"name": "Prop_ViveSystemButtonFixRequired_Bool","value": "1033"} + ,{"name": "Prop_ParentDriver_Uint64","value": "1034"} + ,{"name": "Prop_ResourceRoot_String","value": "1035"} + ,{"name": "Prop_RegisteredDeviceType_String","value": "1036"} + ,{"name": "Prop_InputProfilePath_String","value": "1037"} + ,{"name": "Prop_NeverTracked_Bool","value": "1038"} + ,{"name": "Prop_NumCameras_Int32","value": "1039"} + ,{"name": "Prop_CameraFrameLayout_Int32","value": "1040"} + ,{"name": "Prop_CameraStreamFormat_Int32","value": "1041"} + ,{"name": "Prop_AdditionalDeviceSettingsPath_String","value": "1042"} + ,{"name": "Prop_Identifiable_Bool","value": "1043"} + ,{"name": "Prop_BootloaderVersion_Uint64","value": "1044"} + ,{"name": "Prop_AdditionalSystemReportData_String","value": "1045"} + ,{"name": "Prop_CompositeFirmwareVersion_String","value": "1046"} + ,{"name": "Prop_Firmware_RemindUpdate_Bool","value": "1047"} + ,{"name": "Prop_PeripheralApplicationVersion_Uint64","value": "1048"} + ,{"name": "Prop_ManufacturerSerialNumber_String","value": "1049"} + ,{"name": "Prop_ComputedSerialNumber_String","value": "1050"} + ,{"name": "Prop_EstimatedDeviceFirstUseTime_Int32","value": "1051"} + ,{"name": "Prop_ReportsTimeSinceVSync_Bool","value": "2000"} + ,{"name": "Prop_SecondsFromVsyncToPhotons_Float","value": "2001"} + ,{"name": "Prop_DisplayFrequency_Float","value": "2002"} + ,{"name": "Prop_UserIpdMeters_Float","value": "2003"} + ,{"name": "Prop_CurrentUniverseId_Uint64","value": "2004"} + ,{"name": "Prop_PreviousUniverseId_Uint64","value": "2005"} + ,{"name": "Prop_DisplayFirmwareVersion_Uint64","value": "2006"} + ,{"name": "Prop_IsOnDesktop_Bool","value": "2007"} + ,{"name": "Prop_DisplayMCType_Int32","value": "2008"} + ,{"name": "Prop_DisplayMCOffset_Float","value": "2009"} + ,{"name": "Prop_DisplayMCScale_Float","value": "2010"} + ,{"name": "Prop_EdidVendorID_Int32","value": "2011"} + ,{"name": "Prop_DisplayMCImageLeft_String","value": "2012"} + ,{"name": "Prop_DisplayMCImageRight_String","value": "2013"} + ,{"name": "Prop_DisplayGCBlackClamp_Float","value": "2014"} + ,{"name": "Prop_EdidProductID_Int32","value": "2015"} + ,{"name": "Prop_CameraToHeadTransform_Matrix34","value": "2016"} + ,{"name": "Prop_DisplayGCType_Int32","value": "2017"} + ,{"name": "Prop_DisplayGCOffset_Float","value": "2018"} + ,{"name": "Prop_DisplayGCScale_Float","value": "2019"} + ,{"name": "Prop_DisplayGCPrescale_Float","value": "2020"} + ,{"name": "Prop_DisplayGCImage_String","value": "2021"} + ,{"name": "Prop_LensCenterLeftU_Float","value": "2022"} + ,{"name": "Prop_LensCenterLeftV_Float","value": "2023"} + ,{"name": "Prop_LensCenterRightU_Float","value": "2024"} + ,{"name": "Prop_LensCenterRightV_Float","value": "2025"} + ,{"name": "Prop_UserHeadToEyeDepthMeters_Float","value": "2026"} + ,{"name": "Prop_CameraFirmwareVersion_Uint64","value": "2027"} + ,{"name": "Prop_CameraFirmwareDescription_String","value": "2028"} + ,{"name": "Prop_DisplayFPGAVersion_Uint64","value": "2029"} + ,{"name": "Prop_DisplayBootloaderVersion_Uint64","value": "2030"} + ,{"name": "Prop_DisplayHardwareVersion_Uint64","value": "2031"} + ,{"name": "Prop_AudioFirmwareVersion_Uint64","value": "2032"} + ,{"name": "Prop_CameraCompatibilityMode_Int32","value": "2033"} + ,{"name": "Prop_ScreenshotHorizontalFieldOfViewDegrees_Float","value": "2034"} + ,{"name": "Prop_ScreenshotVerticalFieldOfViewDegrees_Float","value": "2035"} + ,{"name": "Prop_DisplaySuppressed_Bool","value": "2036"} + ,{"name": "Prop_DisplayAllowNightMode_Bool","value": "2037"} + ,{"name": "Prop_DisplayMCImageWidth_Int32","value": "2038"} + ,{"name": "Prop_DisplayMCImageHeight_Int32","value": "2039"} + ,{"name": "Prop_DisplayMCImageNumChannels_Int32","value": "2040"} + ,{"name": "Prop_DisplayMCImageData_Binary","value": "2041"} + ,{"name": "Prop_SecondsFromPhotonsToVblank_Float","value": "2042"} + ,{"name": "Prop_DriverDirectModeSendsVsyncEvents_Bool","value": "2043"} + ,{"name": "Prop_DisplayDebugMode_Bool","value": "2044"} + ,{"name": "Prop_GraphicsAdapterLuid_Uint64","value": "2045"} + ,{"name": "Prop_DriverProvidedChaperonePath_String","value": "2048"} + ,{"name": "Prop_ExpectedTrackingReferenceCount_Int32","value": "2049"} + ,{"name": "Prop_ExpectedControllerCount_Int32","value": "2050"} + ,{"name": "Prop_NamedIconPathControllerLeftDeviceOff_String","value": "2051"} + ,{"name": "Prop_NamedIconPathControllerRightDeviceOff_String","value": "2052"} + ,{"name": "Prop_NamedIconPathTrackingReferenceDeviceOff_String","value": "2053"} + ,{"name": "Prop_DoNotApplyPrediction_Bool","value": "2054"} + ,{"name": "Prop_CameraToHeadTransforms_Matrix34_Array","value": "2055"} + ,{"name": "Prop_DistortionMeshResolution_Int32","value": "2056"} + ,{"name": "Prop_DriverIsDrawingControllers_Bool","value": "2057"} + ,{"name": "Prop_DriverRequestsApplicationPause_Bool","value": "2058"} + ,{"name": "Prop_DriverRequestsReducedRendering_Bool","value": "2059"} + ,{"name": "Prop_MinimumIpdStepMeters_Float","value": "2060"} + ,{"name": "Prop_AudioBridgeFirmwareVersion_Uint64","value": "2061"} + ,{"name": "Prop_ImageBridgeFirmwareVersion_Uint64","value": "2062"} + ,{"name": "Prop_ImuToHeadTransform_Matrix34","value": "2063"} + ,{"name": "Prop_ImuFactoryGyroBias_Vector3","value": "2064"} + ,{"name": "Prop_ImuFactoryGyroScale_Vector3","value": "2065"} + ,{"name": "Prop_ImuFactoryAccelerometerBias_Vector3","value": "2066"} + ,{"name": "Prop_ImuFactoryAccelerometerScale_Vector3","value": "2067"} + ,{"name": "Prop_ConfigurationIncludesLighthouse20Features_Bool","value": "2069"} + ,{"name": "Prop_AdditionalRadioFeatures_Uint64","value": "2070"} + ,{"name": "Prop_CameraWhiteBalance_Vector4_Array","value": "2071"} + ,{"name": "Prop_CameraDistortionFunction_Int32_Array","value": "2072"} + ,{"name": "Prop_CameraDistortionCoefficients_Float_Array","value": "2073"} + ,{"name": "Prop_ExpectedControllerType_String","value": "2074"} + ,{"name": "Prop_HmdTrackingStyle_Int32","value": "2075"} + ,{"name": "Prop_DriverProvidedChaperoneVisibility_Bool","value": "2076"} + ,{"name": "Prop_HmdColumnCorrectionSettingPrefix_String","value": "2077"} + ,{"name": "Prop_CameraSupportsCompatibilityModes_Bool","value": "2078"} + ,{"name": "Prop_SupportsRoomViewDepthProjection_Bool","value": "2079"} + ,{"name": "Prop_DisplayAvailableFrameRates_Float_Array","value": "2080"} + ,{"name": "Prop_DisplaySupportsMultipleFramerates_Bool","value": "2081"} + ,{"name": "Prop_DisplayColorMultLeft_Vector3","value": "2082"} + ,{"name": "Prop_DisplayColorMultRight_Vector3","value": "2083"} + ,{"name": "Prop_DisplaySupportsRuntimeFramerateChange_Bool","value": "2084"} + ,{"name": "Prop_DisplaySupportsAnalogGain_Bool","value": "2085"} + ,{"name": "Prop_DisplayMinAnalogGain_Float","value": "2086"} + ,{"name": "Prop_DisplayMaxAnalogGain_Float","value": "2087"} + ,{"name": "Prop_CameraExposureTime_Float","value": "2088"} + ,{"name": "Prop_CameraGlobalGain_Float","value": "2089"} + ,{"name": "Prop_DashboardScale_Float","value": "2091"} + ,{"name": "Prop_IpdUIRangeMinMeters_Float","value": "2100"} + ,{"name": "Prop_IpdUIRangeMaxMeters_Float","value": "2101"} + ,{"name": "Prop_Hmd_SupportsHDCP14LegacyCompat_Bool","value": "2102"} + ,{"name": "Prop_Hmd_SupportsMicMonitoring_Bool","value": "2103"} + ,{"name": "Prop_DriverRequestedMuraCorrectionMode_Int32","value": "2200"} + ,{"name": "Prop_DriverRequestedMuraFeather_InnerLeft_Int32","value": "2201"} + ,{"name": "Prop_DriverRequestedMuraFeather_InnerRight_Int32","value": "2202"} + ,{"name": "Prop_DriverRequestedMuraFeather_InnerTop_Int32","value": "2203"} + ,{"name": "Prop_DriverRequestedMuraFeather_InnerBottom_Int32","value": "2204"} + ,{"name": "Prop_DriverRequestedMuraFeather_OuterLeft_Int32","value": "2205"} + ,{"name": "Prop_DriverRequestedMuraFeather_OuterRight_Int32","value": "2206"} + ,{"name": "Prop_DriverRequestedMuraFeather_OuterTop_Int32","value": "2207"} + ,{"name": "Prop_DriverRequestedMuraFeather_OuterBottom_Int32","value": "2208"} + ,{"name": "Prop_Audio_DefaultPlaybackDeviceId_String","value": "2300"} + ,{"name": "Prop_Audio_DefaultRecordingDeviceId_String","value": "2301"} + ,{"name": "Prop_Audio_DefaultPlaybackDeviceVolume_Float","value": "2302"} + ,{"name": "Prop_Audio_SupportsDualSpeakerAndJackOutput_Bool","value": "2303"} + ,{"name": "Prop_AttachedDeviceId_String","value": "3000"} + ,{"name": "Prop_SupportedButtons_Uint64","value": "3001"} + ,{"name": "Prop_Axis0Type_Int32","value": "3002"} + ,{"name": "Prop_Axis1Type_Int32","value": "3003"} + ,{"name": "Prop_Axis2Type_Int32","value": "3004"} + ,{"name": "Prop_Axis3Type_Int32","value": "3005"} + ,{"name": "Prop_Axis4Type_Int32","value": "3006"} + ,{"name": "Prop_ControllerRoleHint_Int32","value": "3007"} + ,{"name": "Prop_FieldOfViewLeftDegrees_Float","value": "4000"} + ,{"name": "Prop_FieldOfViewRightDegrees_Float","value": "4001"} + ,{"name": "Prop_FieldOfViewTopDegrees_Float","value": "4002"} + ,{"name": "Prop_FieldOfViewBottomDegrees_Float","value": "4003"} + ,{"name": "Prop_TrackingRangeMinimumMeters_Float","value": "4004"} + ,{"name": "Prop_TrackingRangeMaximumMeters_Float","value": "4005"} + ,{"name": "Prop_ModeLabel_String","value": "4006"} + ,{"name": "Prop_CanWirelessIdentify_Bool","value": "4007"} + ,{"name": "Prop_Nonce_Int32","value": "4008"} + ,{"name": "Prop_IconPathName_String","value": "5000"} + ,{"name": "Prop_NamedIconPathDeviceOff_String","value": "5001"} + ,{"name": "Prop_NamedIconPathDeviceSearching_String","value": "5002"} + ,{"name": "Prop_NamedIconPathDeviceSearchingAlert_String","value": "5003"} + ,{"name": "Prop_NamedIconPathDeviceReady_String","value": "5004"} + ,{"name": "Prop_NamedIconPathDeviceReadyAlert_String","value": "5005"} + ,{"name": "Prop_NamedIconPathDeviceNotReady_String","value": "5006"} + ,{"name": "Prop_NamedIconPathDeviceStandby_String","value": "5007"} + ,{"name": "Prop_NamedIconPathDeviceAlertLow_String","value": "5008"} + ,{"name": "Prop_NamedIconPathDeviceStandbyAlert_String","value": "5009"} + ,{"name": "Prop_DisplayHiddenArea_Binary_Start","value": "5100"} + ,{"name": "Prop_DisplayHiddenArea_Binary_End","value": "5150"} + ,{"name": "Prop_ParentContainer","value": "5151"} + ,{"name": "Prop_OverrideContainer_Uint64","value": "5152"} + ,{"name": "Prop_UserConfigPath_String","value": "6000"} + ,{"name": "Prop_InstallPath_String","value": "6001"} + ,{"name": "Prop_HasDisplayComponent_Bool","value": "6002"} + ,{"name": "Prop_HasControllerComponent_Bool","value": "6003"} + ,{"name": "Prop_HasCameraComponent_Bool","value": "6004"} + ,{"name": "Prop_HasDriverDirectModeComponent_Bool","value": "6005"} + ,{"name": "Prop_HasVirtualDisplayComponent_Bool","value": "6006"} + ,{"name": "Prop_HasSpatialAnchorsSupport_Bool","value": "6007"} + ,{"name": "Prop_ControllerType_String","value": "7000"} + ,{"name": "Prop_ControllerHandSelectionPriority_Int32","value": "7002"} + ,{"name": "Prop_VendorSpecific_Reserved_Start","value": "10000"} + ,{"name": "Prop_VendorSpecific_Reserved_End","value": "10999"} + ,{"name": "Prop_TrackedDeviceProperty_Max","value": "1000000"} +]} +, {"enumname": "vr::ETrackedPropertyError","values": [ + {"name": "TrackedProp_Success","value": "0"} + ,{"name": "TrackedProp_WrongDataType","value": "1"} + ,{"name": "TrackedProp_WrongDeviceClass","value": "2"} + ,{"name": "TrackedProp_BufferTooSmall","value": "3"} + ,{"name": "TrackedProp_UnknownProperty","value": "4"} + ,{"name": "TrackedProp_InvalidDevice","value": "5"} + ,{"name": "TrackedProp_CouldNotContactServer","value": "6"} + ,{"name": "TrackedProp_ValueNotProvidedByDevice","value": "7"} + ,{"name": "TrackedProp_StringExceedsMaximumLength","value": "8"} + ,{"name": "TrackedProp_NotYetAvailable","value": "9"} + ,{"name": "TrackedProp_PermissionDenied","value": "10"} + ,{"name": "TrackedProp_InvalidOperation","value": "11"} + ,{"name": "TrackedProp_CannotWriteToWildcards","value": "12"} + ,{"name": "TrackedProp_IPCReadFailure","value": "13"} + ,{"name": "TrackedProp_OutOfMemory","value": "14"} + ,{"name": "TrackedProp_InvalidContainer","value": "15"} +]} +, {"enumname": "vr::EHmdTrackingStyle","values": [ + {"name": "HmdTrackingStyle_Unknown","value": "0"} + ,{"name": "HmdTrackingStyle_Lighthouse","value": "1"} + ,{"name": "HmdTrackingStyle_OutsideInCameras","value": "2"} + ,{"name": "HmdTrackingStyle_InsideOutCameras","value": "3"} +]} +, {"enumname": "vr::EVRSubmitFlags","values": [ + {"name": "Submit_Default","value": "0"} + ,{"name": "Submit_LensDistortionAlreadyApplied","value": "1"} + ,{"name": "Submit_GlRenderBuffer","value": "2"} + ,{"name": "Submit_Reserved","value": "4"} + ,{"name": "Submit_TextureWithPose","value": "8"} + ,{"name": "Submit_TextureWithDepth","value": "16"} + ,{"name": "Submit_FrameDiscontinuty","value": "32"} + ,{"name": "Submit_VulkanTextureWithArrayData","value": "64"} + ,{"name": "Submit_GlArrayTexture","value": "128"} + ,{"name": "Submit_Reserved2","value": "32768"} +]} +, {"enumname": "vr::EVRState","values": [ + {"name": "VRState_Undefined","value": "-1"} + ,{"name": "VRState_Off","value": "0"} + ,{"name": "VRState_Searching","value": "1"} + ,{"name": "VRState_Searching_Alert","value": "2"} + ,{"name": "VRState_Ready","value": "3"} + ,{"name": "VRState_Ready_Alert","value": "4"} + ,{"name": "VRState_NotReady","value": "5"} + ,{"name": "VRState_Standby","value": "6"} + ,{"name": "VRState_Ready_Alert_Low","value": "7"} +]} +, {"enumname": "vr::EVREventType","values": [ + {"name": "VREvent_None","value": "0"} + ,{"name": "VREvent_TrackedDeviceActivated","value": "100"} + ,{"name": "VREvent_TrackedDeviceDeactivated","value": "101"} + ,{"name": "VREvent_TrackedDeviceUpdated","value": "102"} + ,{"name": "VREvent_TrackedDeviceUserInteractionStarted","value": "103"} + ,{"name": "VREvent_TrackedDeviceUserInteractionEnded","value": "104"} + ,{"name": "VREvent_IpdChanged","value": "105"} + ,{"name": "VREvent_EnterStandbyMode","value": "106"} + ,{"name": "VREvent_LeaveStandbyMode","value": "107"} + ,{"name": "VREvent_TrackedDeviceRoleChanged","value": "108"} + ,{"name": "VREvent_WatchdogWakeUpRequested","value": "109"} + ,{"name": "VREvent_LensDistortionChanged","value": "110"} + ,{"name": "VREvent_PropertyChanged","value": "111"} + ,{"name": "VREvent_WirelessDisconnect","value": "112"} + ,{"name": "VREvent_WirelessReconnect","value": "113"} + ,{"name": "VREvent_ButtonPress","value": "200"} + ,{"name": "VREvent_ButtonUnpress","value": "201"} + ,{"name": "VREvent_ButtonTouch","value": "202"} + ,{"name": "VREvent_ButtonUntouch","value": "203"} + ,{"name": "VREvent_Modal_Cancel","value": "257"} + ,{"name": "VREvent_MouseMove","value": "300"} + ,{"name": "VREvent_MouseButtonDown","value": "301"} + ,{"name": "VREvent_MouseButtonUp","value": "302"} + ,{"name": "VREvent_FocusEnter","value": "303"} + ,{"name": "VREvent_FocusLeave","value": "304"} + ,{"name": "VREvent_ScrollDiscrete","value": "305"} + ,{"name": "VREvent_TouchPadMove","value": "306"} + ,{"name": "VREvent_OverlayFocusChanged","value": "307"} + ,{"name": "VREvent_ReloadOverlays","value": "308"} + ,{"name": "VREvent_ScrollSmooth","value": "309"} + ,{"name": "VREvent_LockMousePosition","value": "310"} + ,{"name": "VREvent_UnlockMousePosition","value": "311"} + ,{"name": "VREvent_InputFocusCaptured","value": "400"} + ,{"name": "VREvent_InputFocusReleased","value": "401"} + ,{"name": "VREvent_SceneApplicationChanged","value": "404"} + ,{"name": "VREvent_SceneFocusChanged","value": "405"} + ,{"name": "VREvent_InputFocusChanged","value": "406"} + ,{"name": "VREvent_SceneApplicationUsingWrongGraphicsAdapter","value": "408"} + ,{"name": "VREvent_ActionBindingReloaded","value": "409"} + ,{"name": "VREvent_HideRenderModels","value": "410"} + ,{"name": "VREvent_ShowRenderModels","value": "411"} + ,{"name": "VREvent_SceneApplicationStateChanged","value": "412"} + ,{"name": "VREvent_ConsoleOpened","value": "420"} + ,{"name": "VREvent_ConsoleClosed","value": "421"} + ,{"name": "VREvent_OverlayShown","value": "500"} + ,{"name": "VREvent_OverlayHidden","value": "501"} + ,{"name": "VREvent_DashboardActivated","value": "502"} + ,{"name": "VREvent_DashboardDeactivated","value": "503"} + ,{"name": "VREvent_DashboardRequested","value": "505"} + ,{"name": "VREvent_ResetDashboard","value": "506"} + ,{"name": "VREvent_ImageLoaded","value": "508"} + ,{"name": "VREvent_ShowKeyboard","value": "509"} + ,{"name": "VREvent_HideKeyboard","value": "510"} + ,{"name": "VREvent_OverlayGamepadFocusGained","value": "511"} + ,{"name": "VREvent_OverlayGamepadFocusLost","value": "512"} + ,{"name": "VREvent_OverlaySharedTextureChanged","value": "513"} + ,{"name": "VREvent_ScreenshotTriggered","value": "516"} + ,{"name": "VREvent_ImageFailed","value": "517"} + ,{"name": "VREvent_DashboardOverlayCreated","value": "518"} + ,{"name": "VREvent_SwitchGamepadFocus","value": "519"} + ,{"name": "VREvent_RequestScreenshot","value": "520"} + ,{"name": "VREvent_ScreenshotTaken","value": "521"} + ,{"name": "VREvent_ScreenshotFailed","value": "522"} + ,{"name": "VREvent_SubmitScreenshotToDashboard","value": "523"} + ,{"name": "VREvent_ScreenshotProgressToDashboard","value": "524"} + ,{"name": "VREvent_PrimaryDashboardDeviceChanged","value": "525"} + ,{"name": "VREvent_RoomViewShown","value": "526"} + ,{"name": "VREvent_RoomViewHidden","value": "527"} + ,{"name": "VREvent_ShowUI","value": "528"} + ,{"name": "VREvent_ShowDevTools","value": "529"} + ,{"name": "VREvent_DesktopViewUpdating","value": "530"} + ,{"name": "VREvent_DesktopViewReady","value": "531"} + ,{"name": "VREvent_Notification_Shown","value": "600"} + ,{"name": "VREvent_Notification_Hidden","value": "601"} + ,{"name": "VREvent_Notification_BeginInteraction","value": "602"} + ,{"name": "VREvent_Notification_Destroyed","value": "603"} + ,{"name": "VREvent_Quit","value": "700"} + ,{"name": "VREvent_ProcessQuit","value": "701"} + ,{"name": "VREvent_QuitAcknowledged","value": "703"} + ,{"name": "VREvent_DriverRequestedQuit","value": "704"} + ,{"name": "VREvent_RestartRequested","value": "705"} + ,{"name": "VREvent_ChaperoneDataHasChanged","value": "800"} + ,{"name": "VREvent_ChaperoneUniverseHasChanged","value": "801"} + ,{"name": "VREvent_ChaperoneTempDataHasChanged","value": "802"} + ,{"name": "VREvent_ChaperoneSettingsHaveChanged","value": "803"} + ,{"name": "VREvent_SeatedZeroPoseReset","value": "804"} + ,{"name": "VREvent_ChaperoneFlushCache","value": "805"} + ,{"name": "VREvent_ChaperoneRoomSetupStarting","value": "806"} + ,{"name": "VREvent_ChaperoneRoomSetupFinished","value": "807"} + ,{"name": "VREvent_StandingZeroPoseReset","value": "808"} + ,{"name": "VREvent_AudioSettingsHaveChanged","value": "820"} + ,{"name": "VREvent_BackgroundSettingHasChanged","value": "850"} + ,{"name": "VREvent_CameraSettingsHaveChanged","value": "851"} + ,{"name": "VREvent_ReprojectionSettingHasChanged","value": "852"} + ,{"name": "VREvent_ModelSkinSettingsHaveChanged","value": "853"} + ,{"name": "VREvent_EnvironmentSettingsHaveChanged","value": "854"} + ,{"name": "VREvent_PowerSettingsHaveChanged","value": "855"} + ,{"name": "VREvent_EnableHomeAppSettingsHaveChanged","value": "856"} + ,{"name": "VREvent_SteamVRSectionSettingChanged","value": "857"} + ,{"name": "VREvent_LighthouseSectionSettingChanged","value": "858"} + ,{"name": "VREvent_NullSectionSettingChanged","value": "859"} + ,{"name": "VREvent_UserInterfaceSectionSettingChanged","value": "860"} + ,{"name": "VREvent_NotificationsSectionSettingChanged","value": "861"} + ,{"name": "VREvent_KeyboardSectionSettingChanged","value": "862"} + ,{"name": "VREvent_PerfSectionSettingChanged","value": "863"} + ,{"name": "VREvent_DashboardSectionSettingChanged","value": "864"} + ,{"name": "VREvent_WebInterfaceSectionSettingChanged","value": "865"} + ,{"name": "VREvent_TrackersSectionSettingChanged","value": "866"} + ,{"name": "VREvent_LastKnownSectionSettingChanged","value": "867"} + ,{"name": "VREvent_DismissedWarningsSectionSettingChanged","value": "868"} + ,{"name": "VREvent_GpuSpeedSectionSettingChanged","value": "869"} + ,{"name": "VREvent_WindowsMRSectionSettingChanged","value": "870"} + ,{"name": "VREvent_OtherSectionSettingChanged","value": "871"} + ,{"name": "VREvent_StatusUpdate","value": "900"} + ,{"name": "VREvent_WebInterface_InstallDriverCompleted","value": "950"} + ,{"name": "VREvent_MCImageUpdated","value": "1000"} + ,{"name": "VREvent_FirmwareUpdateStarted","value": "1100"} + ,{"name": "VREvent_FirmwareUpdateFinished","value": "1101"} + ,{"name": "VREvent_KeyboardClosed","value": "1200"} + ,{"name": "VREvent_KeyboardCharInput","value": "1201"} + ,{"name": "VREvent_KeyboardDone","value": "1202"} + ,{"name": "VREvent_ApplicationListUpdated","value": "1303"} + ,{"name": "VREvent_ApplicationMimeTypeLoad","value": "1304"} + ,{"name": "VREvent_ProcessConnected","value": "1306"} + ,{"name": "VREvent_ProcessDisconnected","value": "1307"} + ,{"name": "VREvent_Compositor_ChaperoneBoundsShown","value": "1410"} + ,{"name": "VREvent_Compositor_ChaperoneBoundsHidden","value": "1411"} + ,{"name": "VREvent_Compositor_DisplayDisconnected","value": "1412"} + ,{"name": "VREvent_Compositor_DisplayReconnected","value": "1413"} + ,{"name": "VREvent_Compositor_HDCPError","value": "1414"} + ,{"name": "VREvent_Compositor_ApplicationNotResponding","value": "1415"} + ,{"name": "VREvent_Compositor_ApplicationResumed","value": "1416"} + ,{"name": "VREvent_Compositor_OutOfVideoMemory","value": "1417"} + ,{"name": "VREvent_Compositor_DisplayModeNotSupported","value": "1418"} + ,{"name": "VREvent_Compositor_StageOverrideReady","value": "1419"} + ,{"name": "VREvent_TrackedCamera_StartVideoStream","value": "1500"} + ,{"name": "VREvent_TrackedCamera_StopVideoStream","value": "1501"} + ,{"name": "VREvent_TrackedCamera_PauseVideoStream","value": "1502"} + ,{"name": "VREvent_TrackedCamera_ResumeVideoStream","value": "1503"} + ,{"name": "VREvent_TrackedCamera_EditingSurface","value": "1550"} + ,{"name": "VREvent_PerformanceTest_EnableCapture","value": "1600"} + ,{"name": "VREvent_PerformanceTest_DisableCapture","value": "1601"} + ,{"name": "VREvent_PerformanceTest_FidelityLevel","value": "1602"} + ,{"name": "VREvent_MessageOverlay_Closed","value": "1650"} + ,{"name": "VREvent_MessageOverlayCloseRequested","value": "1651"} + ,{"name": "VREvent_Input_HapticVibration","value": "1700"} + ,{"name": "VREvent_Input_BindingLoadFailed","value": "1701"} + ,{"name": "VREvent_Input_BindingLoadSuccessful","value": "1702"} + ,{"name": "VREvent_Input_ActionManifestReloaded","value": "1703"} + ,{"name": "VREvent_Input_ActionManifestLoadFailed","value": "1704"} + ,{"name": "VREvent_Input_ProgressUpdate","value": "1705"} + ,{"name": "VREvent_Input_TrackerActivated","value": "1706"} + ,{"name": "VREvent_Input_BindingsUpdated","value": "1707"} + ,{"name": "VREvent_Input_BindingSubscriptionChanged","value": "1708"} + ,{"name": "VREvent_SpatialAnchors_PoseUpdated","value": "1800"} + ,{"name": "VREvent_SpatialAnchors_DescriptorUpdated","value": "1801"} + ,{"name": "VREvent_SpatialAnchors_RequestPoseUpdate","value": "1802"} + ,{"name": "VREvent_SpatialAnchors_RequestDescriptorUpdate","value": "1803"} + ,{"name": "VREvent_SystemReport_Started","value": "1900"} + ,{"name": "VREvent_Monitor_ShowHeadsetView","value": "2000"} + ,{"name": "VREvent_Monitor_HideHeadsetView","value": "2001"} + ,{"name": "VREvent_VendorSpecific_Reserved_Start","value": "10000"} + ,{"name": "VREvent_VendorSpecific_Reserved_End","value": "19999"} +]} +, {"enumname": "vr::EDeviceActivityLevel","values": [ + {"name": "k_EDeviceActivityLevel_Unknown","value": "-1"} + ,{"name": "k_EDeviceActivityLevel_Idle","value": "0"} + ,{"name": "k_EDeviceActivityLevel_UserInteraction","value": "1"} + ,{"name": "k_EDeviceActivityLevel_UserInteraction_Timeout","value": "2"} + ,{"name": "k_EDeviceActivityLevel_Standby","value": "3"} + ,{"name": "k_EDeviceActivityLevel_Idle_Timeout","value": "4"} +]} +, {"enumname": "vr::EVRButtonId","values": [ + {"name": "k_EButton_System","value": "0"} + ,{"name": "k_EButton_ApplicationMenu","value": "1"} + ,{"name": "k_EButton_Grip","value": "2"} + ,{"name": "k_EButton_DPad_Left","value": "3"} + ,{"name": "k_EButton_DPad_Up","value": "4"} + ,{"name": "k_EButton_DPad_Right","value": "5"} + ,{"name": "k_EButton_DPad_Down","value": "6"} + ,{"name": "k_EButton_A","value": "7"} + ,{"name": "k_EButton_ProximitySensor","value": "31"} + ,{"name": "k_EButton_Axis0","value": "32"} + ,{"name": "k_EButton_Axis1","value": "33"} + ,{"name": "k_EButton_Axis2","value": "34"} + ,{"name": "k_EButton_Axis3","value": "35"} + ,{"name": "k_EButton_Axis4","value": "36"} + ,{"name": "k_EButton_SteamVR_Touchpad","value": "32"} + ,{"name": "k_EButton_SteamVR_Trigger","value": "33"} + ,{"name": "k_EButton_Dashboard_Back","value": "2"} + ,{"name": "k_EButton_IndexController_A","value": "2"} + ,{"name": "k_EButton_IndexController_B","value": "1"} + ,{"name": "k_EButton_IndexController_JoyStick","value": "35"} + ,{"name": "k_EButton_Max","value": "64"} +]} +, {"enumname": "vr::EVRMouseButton","values": [ + {"name": "VRMouseButton_Left","value": "1"} + ,{"name": "VRMouseButton_Right","value": "2"} + ,{"name": "VRMouseButton_Middle","value": "4"} +]} +, {"enumname": "vr::EShowUIType","values": [ + {"name": "ShowUI_ControllerBinding","value": "0"} + ,{"name": "ShowUI_ManageTrackers","value": "1"} + ,{"name": "ShowUI_Pairing","value": "3"} + ,{"name": "ShowUI_Settings","value": "4"} + ,{"name": "ShowUI_DebugCommands","value": "5"} + ,{"name": "ShowUI_FullControllerBinding","value": "6"} + ,{"name": "ShowUI_ManageDrivers","value": "7"} +]} +, {"enumname": "vr::EHDCPError","values": [ + {"name": "HDCPError_None","value": "0"} + ,{"name": "HDCPError_LinkLost","value": "1"} + ,{"name": "HDCPError_Tampered","value": "2"} + ,{"name": "HDCPError_DeviceRevoked","value": "3"} + ,{"name": "HDCPError_Unknown","value": "4"} +]} +, {"enumname": "vr::EVRComponentProperty","values": [ + {"name": "VRComponentProperty_IsStatic","value": "1"} + ,{"name": "VRComponentProperty_IsVisible","value": "2"} + ,{"name": "VRComponentProperty_IsTouched","value": "4"} + ,{"name": "VRComponentProperty_IsPressed","value": "8"} + ,{"name": "VRComponentProperty_IsScrolled","value": "16"} + ,{"name": "VRComponentProperty_IsHighlighted","value": "32"} +]} +, {"enumname": "vr::EVRInputError","values": [ + {"name": "VRInputError_None","value": "0"} + ,{"name": "VRInputError_NameNotFound","value": "1"} + ,{"name": "VRInputError_WrongType","value": "2"} + ,{"name": "VRInputError_InvalidHandle","value": "3"} + ,{"name": "VRInputError_InvalidParam","value": "4"} + ,{"name": "VRInputError_NoSteam","value": "5"} + ,{"name": "VRInputError_MaxCapacityReached","value": "6"} + ,{"name": "VRInputError_IPCError","value": "7"} + ,{"name": "VRInputError_NoActiveActionSet","value": "8"} + ,{"name": "VRInputError_InvalidDevice","value": "9"} + ,{"name": "VRInputError_InvalidSkeleton","value": "10"} + ,{"name": "VRInputError_InvalidBoneCount","value": "11"} + ,{"name": "VRInputError_InvalidCompressedData","value": "12"} + ,{"name": "VRInputError_NoData","value": "13"} + ,{"name": "VRInputError_BufferTooSmall","value": "14"} + ,{"name": "VRInputError_MismatchedActionManifest","value": "15"} + ,{"name": "VRInputError_MissingSkeletonData","value": "16"} + ,{"name": "VRInputError_InvalidBoneIndex","value": "17"} + ,{"name": "VRInputError_InvalidPriority","value": "18"} + ,{"name": "VRInputError_PermissionDenied","value": "19"} + ,{"name": "VRInputError_InvalidRenderModel","value": "20"} +]} +, {"enumname": "vr::EVRSpatialAnchorError","values": [ + {"name": "VRSpatialAnchorError_Success","value": "0"} + ,{"name": "VRSpatialAnchorError_Internal","value": "1"} + ,{"name": "VRSpatialAnchorError_UnknownHandle","value": "2"} + ,{"name": "VRSpatialAnchorError_ArrayTooSmall","value": "3"} + ,{"name": "VRSpatialAnchorError_InvalidDescriptorChar","value": "4"} + ,{"name": "VRSpatialAnchorError_NotYetAvailable","value": "5"} + ,{"name": "VRSpatialAnchorError_NotAvailableInThisUniverse","value": "6"} + ,{"name": "VRSpatialAnchorError_PermanentlyUnavailable","value": "7"} + ,{"name": "VRSpatialAnchorError_WrongDriver","value": "8"} + ,{"name": "VRSpatialAnchorError_DescriptorTooLong","value": "9"} + ,{"name": "VRSpatialAnchorError_Unknown","value": "10"} + ,{"name": "VRSpatialAnchorError_NoRoomCalibration","value": "11"} + ,{"name": "VRSpatialAnchorError_InvalidArgument","value": "12"} + ,{"name": "VRSpatialAnchorError_UnknownDriver","value": "13"} +]} +, {"enumname": "vr::EHiddenAreaMeshType","values": [ + {"name": "k_eHiddenAreaMesh_Standard","value": "0"} + ,{"name": "k_eHiddenAreaMesh_Inverse","value": "1"} + ,{"name": "k_eHiddenAreaMesh_LineLoop","value": "2"} + ,{"name": "k_eHiddenAreaMesh_Max","value": "3"} +]} +, {"enumname": "vr::EVRControllerAxisType","values": [ + {"name": "k_eControllerAxis_None","value": "0"} + ,{"name": "k_eControllerAxis_TrackPad","value": "1"} + ,{"name": "k_eControllerAxis_Joystick","value": "2"} + ,{"name": "k_eControllerAxis_Trigger","value": "3"} +]} +, {"enumname": "vr::EVRControllerEventOutputType","values": [ + {"name": "ControllerEventOutput_OSEvents","value": "0"} + ,{"name": "ControllerEventOutput_VREvents","value": "1"} +]} +, {"enumname": "vr::ECollisionBoundsStyle","values": [ + {"name": "COLLISION_BOUNDS_STYLE_BEGINNER","value": "0"} + ,{"name": "COLLISION_BOUNDS_STYLE_INTERMEDIATE","value": "1"} + ,{"name": "COLLISION_BOUNDS_STYLE_SQUARES","value": "2"} + ,{"name": "COLLISION_BOUNDS_STYLE_ADVANCED","value": "3"} + ,{"name": "COLLISION_BOUNDS_STYLE_NONE","value": "4"} + ,{"name": "COLLISION_BOUNDS_STYLE_COUNT","value": "5"} +]} +, {"enumname": "vr::EVROverlayError","values": [ + {"name": "VROverlayError_None","value": "0"} + ,{"name": "VROverlayError_UnknownOverlay","value": "10"} + ,{"name": "VROverlayError_InvalidHandle","value": "11"} + ,{"name": "VROverlayError_PermissionDenied","value": "12"} + ,{"name": "VROverlayError_OverlayLimitExceeded","value": "13"} + ,{"name": "VROverlayError_WrongVisibilityType","value": "14"} + ,{"name": "VROverlayError_KeyTooLong","value": "15"} + ,{"name": "VROverlayError_NameTooLong","value": "16"} + ,{"name": "VROverlayError_KeyInUse","value": "17"} + ,{"name": "VROverlayError_WrongTransformType","value": "18"} + ,{"name": "VROverlayError_InvalidTrackedDevice","value": "19"} + ,{"name": "VROverlayError_InvalidParameter","value": "20"} + ,{"name": "VROverlayError_ThumbnailCantBeDestroyed","value": "21"} + ,{"name": "VROverlayError_ArrayTooSmall","value": "22"} + ,{"name": "VROverlayError_RequestFailed","value": "23"} + ,{"name": "VROverlayError_InvalidTexture","value": "24"} + ,{"name": "VROverlayError_UnableToLoadFile","value": "25"} + ,{"name": "VROverlayError_KeyboardAlreadyInUse","value": "26"} + ,{"name": "VROverlayError_NoNeighbor","value": "27"} + ,{"name": "VROverlayError_TooManyMaskPrimitives","value": "29"} + ,{"name": "VROverlayError_BadMaskPrimitive","value": "30"} + ,{"name": "VROverlayError_TextureAlreadyLocked","value": "31"} + ,{"name": "VROverlayError_TextureLockCapacityReached","value": "32"} + ,{"name": "VROverlayError_TextureNotLocked","value": "33"} +]} +, {"enumname": "vr::EVRApplicationType","values": [ + {"name": "VRApplication_Other","value": "0"} + ,{"name": "VRApplication_Scene","value": "1"} + ,{"name": "VRApplication_Overlay","value": "2"} + ,{"name": "VRApplication_Background","value": "3"} + ,{"name": "VRApplication_Utility","value": "4"} + ,{"name": "VRApplication_VRMonitor","value": "5"} + ,{"name": "VRApplication_SteamWatchdog","value": "6"} + ,{"name": "VRApplication_Bootstrapper","value": "7"} + ,{"name": "VRApplication_WebHelper","value": "8"} + ,{"name": "VRApplication_OpenXRInstance","value": "9"} + ,{"name": "VRApplication_OpenXRScene","value": "10"} + ,{"name": "VRApplication_OpenXROverlay","value": "11"} + ,{"name": "VRApplication_Prism","value": "12"} + ,{"name": "VRApplication_Max","value": "13"} +]} +, {"enumname": "vr::EVRFirmwareError","values": [ + {"name": "VRFirmwareError_None","value": "0"} + ,{"name": "VRFirmwareError_Success","value": "1"} + ,{"name": "VRFirmwareError_Fail","value": "2"} +]} +, {"enumname": "vr::EVRNotificationError","values": [ + {"name": "VRNotificationError_OK","value": "0"} + ,{"name": "VRNotificationError_InvalidNotificationId","value": "100"} + ,{"name": "VRNotificationError_NotificationQueueFull","value": "101"} + ,{"name": "VRNotificationError_InvalidOverlayHandle","value": "102"} + ,{"name": "VRNotificationError_SystemWithUserValueAlreadyExists","value": "103"} +]} +, {"enumname": "vr::EVRSkeletalMotionRange","values": [ + {"name": "VRSkeletalMotionRange_WithController","value": "0"} + ,{"name": "VRSkeletalMotionRange_WithoutController","value": "1"} +]} +, {"enumname": "vr::EVRSkeletalTrackingLevel","values": [ + {"name": "VRSkeletalTracking_Estimated","value": "0"} + ,{"name": "VRSkeletalTracking_Partial","value": "1"} + ,{"name": "VRSkeletalTracking_Full","value": "2"} + ,{"name": "VRSkeletalTrackingLevel_Count","value": "3"} + ,{"name": "VRSkeletalTrackingLevel_Max","value": "2"} +]} +, {"enumname": "vr::EVRInitError","values": [ + {"name": "VRInitError_None","value": "0"} + ,{"name": "VRInitError_Unknown","value": "1"} + ,{"name": "VRInitError_Init_InstallationNotFound","value": "100"} + ,{"name": "VRInitError_Init_InstallationCorrupt","value": "101"} + ,{"name": "VRInitError_Init_VRClientDLLNotFound","value": "102"} + ,{"name": "VRInitError_Init_FileNotFound","value": "103"} + ,{"name": "VRInitError_Init_FactoryNotFound","value": "104"} + ,{"name": "VRInitError_Init_InterfaceNotFound","value": "105"} + ,{"name": "VRInitError_Init_InvalidInterface","value": "106"} + ,{"name": "VRInitError_Init_UserConfigDirectoryInvalid","value": "107"} + ,{"name": "VRInitError_Init_HmdNotFound","value": "108"} + ,{"name": "VRInitError_Init_NotInitialized","value": "109"} + ,{"name": "VRInitError_Init_PathRegistryNotFound","value": "110"} + ,{"name": "VRInitError_Init_NoConfigPath","value": "111"} + ,{"name": "VRInitError_Init_NoLogPath","value": "112"} + ,{"name": "VRInitError_Init_PathRegistryNotWritable","value": "113"} + ,{"name": "VRInitError_Init_AppInfoInitFailed","value": "114"} + ,{"name": "VRInitError_Init_Retry","value": "115"} + ,{"name": "VRInitError_Init_InitCanceledByUser","value": "116"} + ,{"name": "VRInitError_Init_AnotherAppLaunching","value": "117"} + ,{"name": "VRInitError_Init_SettingsInitFailed","value": "118"} + ,{"name": "VRInitError_Init_ShuttingDown","value": "119"} + ,{"name": "VRInitError_Init_TooManyObjects","value": "120"} + ,{"name": "VRInitError_Init_NoServerForBackgroundApp","value": "121"} + ,{"name": "VRInitError_Init_NotSupportedWithCompositor","value": "122"} + ,{"name": "VRInitError_Init_NotAvailableToUtilityApps","value": "123"} + ,{"name": "VRInitError_Init_Internal","value": "124"} + ,{"name": "VRInitError_Init_HmdDriverIdIsNone","value": "125"} + ,{"name": "VRInitError_Init_HmdNotFoundPresenceFailed","value": "126"} + ,{"name": "VRInitError_Init_VRMonitorNotFound","value": "127"} + ,{"name": "VRInitError_Init_VRMonitorStartupFailed","value": "128"} + ,{"name": "VRInitError_Init_LowPowerWatchdogNotSupported","value": "129"} + ,{"name": "VRInitError_Init_InvalidApplicationType","value": "130"} + ,{"name": "VRInitError_Init_NotAvailableToWatchdogApps","value": "131"} + ,{"name": "VRInitError_Init_WatchdogDisabledInSettings","value": "132"} + ,{"name": "VRInitError_Init_VRDashboardNotFound","value": "133"} + ,{"name": "VRInitError_Init_VRDashboardStartupFailed","value": "134"} + ,{"name": "VRInitError_Init_VRHomeNotFound","value": "135"} + ,{"name": "VRInitError_Init_VRHomeStartupFailed","value": "136"} + ,{"name": "VRInitError_Init_RebootingBusy","value": "137"} + ,{"name": "VRInitError_Init_FirmwareUpdateBusy","value": "138"} + ,{"name": "VRInitError_Init_FirmwareRecoveryBusy","value": "139"} + ,{"name": "VRInitError_Init_USBServiceBusy","value": "140"} + ,{"name": "VRInitError_Init_VRWebHelperStartupFailed","value": "141"} + ,{"name": "VRInitError_Init_TrackerManagerInitFailed","value": "142"} + ,{"name": "VRInitError_Init_AlreadyRunning","value": "143"} + ,{"name": "VRInitError_Init_FailedForVrMonitor","value": "144"} + ,{"name": "VRInitError_Init_PropertyManagerInitFailed","value": "145"} + ,{"name": "VRInitError_Init_WebServerFailed","value": "146"} + ,{"name": "VRInitError_Init_IllegalTypeTransition","value": "147"} + ,{"name": "VRInitError_Init_MismatchedRuntimes","value": "148"} + ,{"name": "VRInitError_Init_InvalidProcessId","value": "149"} + ,{"name": "VRInitError_Init_VRServiceStartupFailed","value": "150"} + ,{"name": "VRInitError_Init_PrismNeedsNewDrivers","value": "151"} + ,{"name": "VRInitError_Init_PrismStartupTimedOut","value": "152"} + ,{"name": "VRInitError_Init_CouldNotStartPrism","value": "153"} + ,{"name": "VRInitError_Init_CreateDriverDirectDeviceFailed","value": "154"} + ,{"name": "VRInitError_Init_PrismExitedUnexpectedly","value": "155"} + ,{"name": "VRInitError_Driver_Failed","value": "200"} + ,{"name": "VRInitError_Driver_Unknown","value": "201"} + ,{"name": "VRInitError_Driver_HmdUnknown","value": "202"} + ,{"name": "VRInitError_Driver_NotLoaded","value": "203"} + ,{"name": "VRInitError_Driver_RuntimeOutOfDate","value": "204"} + ,{"name": "VRInitError_Driver_HmdInUse","value": "205"} + ,{"name": "VRInitError_Driver_NotCalibrated","value": "206"} + ,{"name": "VRInitError_Driver_CalibrationInvalid","value": "207"} + ,{"name": "VRInitError_Driver_HmdDisplayNotFound","value": "208"} + ,{"name": "VRInitError_Driver_TrackedDeviceInterfaceUnknown","value": "209"} + ,{"name": "VRInitError_Driver_HmdDriverIdOutOfBounds","value": "211"} + ,{"name": "VRInitError_Driver_HmdDisplayMirrored","value": "212"} + ,{"name": "VRInitError_Driver_HmdDisplayNotFoundLaptop","value": "213"} + ,{"name": "VRInitError_IPC_ServerInitFailed","value": "300"} + ,{"name": "VRInitError_IPC_ConnectFailed","value": "301"} + ,{"name": "VRInitError_IPC_SharedStateInitFailed","value": "302"} + ,{"name": "VRInitError_IPC_CompositorInitFailed","value": "303"} + ,{"name": "VRInitError_IPC_MutexInitFailed","value": "304"} + ,{"name": "VRInitError_IPC_Failed","value": "305"} + ,{"name": "VRInitError_IPC_CompositorConnectFailed","value": "306"} + ,{"name": "VRInitError_IPC_CompositorInvalidConnectResponse","value": "307"} + ,{"name": "VRInitError_IPC_ConnectFailedAfterMultipleAttempts","value": "308"} + ,{"name": "VRInitError_IPC_ConnectFailedAfterTargetExited","value": "309"} + ,{"name": "VRInitError_IPC_NamespaceUnavailable","value": "310"} + ,{"name": "VRInitError_Compositor_Failed","value": "400"} + ,{"name": "VRInitError_Compositor_D3D11HardwareRequired","value": "401"} + ,{"name": "VRInitError_Compositor_FirmwareRequiresUpdate","value": "402"} + ,{"name": "VRInitError_Compositor_OverlayInitFailed","value": "403"} + ,{"name": "VRInitError_Compositor_ScreenshotsInitFailed","value": "404"} + ,{"name": "VRInitError_Compositor_UnableToCreateDevice","value": "405"} + ,{"name": "VRInitError_Compositor_SharedStateIsNull","value": "406"} + ,{"name": "VRInitError_Compositor_NotificationManagerIsNull","value": "407"} + ,{"name": "VRInitError_Compositor_ResourceManagerClientIsNull","value": "408"} + ,{"name": "VRInitError_Compositor_MessageOverlaySharedStateInitFailure","value": "409"} + ,{"name": "VRInitError_Compositor_PropertiesInterfaceIsNull","value": "410"} + ,{"name": "VRInitError_Compositor_CreateFullscreenWindowFailed","value": "411"} + ,{"name": "VRInitError_Compositor_SettingsInterfaceIsNull","value": "412"} + ,{"name": "VRInitError_Compositor_FailedToShowWindow","value": "413"} + ,{"name": "VRInitError_Compositor_DistortInterfaceIsNull","value": "414"} + ,{"name": "VRInitError_Compositor_DisplayFrequencyFailure","value": "415"} + ,{"name": "VRInitError_Compositor_RendererInitializationFailed","value": "416"} + ,{"name": "VRInitError_Compositor_DXGIFactoryInterfaceIsNull","value": "417"} + ,{"name": "VRInitError_Compositor_DXGIFactoryCreateFailed","value": "418"} + ,{"name": "VRInitError_Compositor_DXGIFactoryQueryFailed","value": "419"} + ,{"name": "VRInitError_Compositor_InvalidAdapterDesktop","value": "420"} + ,{"name": "VRInitError_Compositor_InvalidHmdAttachment","value": "421"} + ,{"name": "VRInitError_Compositor_InvalidOutputDesktop","value": "422"} + ,{"name": "VRInitError_Compositor_InvalidDeviceProvided","value": "423"} + ,{"name": "VRInitError_Compositor_D3D11RendererInitializationFailed","value": "424"} + ,{"name": "VRInitError_Compositor_FailedToFindDisplayMode","value": "425"} + ,{"name": "VRInitError_Compositor_FailedToCreateSwapChain","value": "426"} + ,{"name": "VRInitError_Compositor_FailedToGetBackBuffer","value": "427"} + ,{"name": "VRInitError_Compositor_FailedToCreateRenderTarget","value": "428"} + ,{"name": "VRInitError_Compositor_FailedToCreateDXGI2SwapChain","value": "429"} + ,{"name": "VRInitError_Compositor_FailedtoGetDXGI2BackBuffer","value": "430"} + ,{"name": "VRInitError_Compositor_FailedToCreateDXGI2RenderTarget","value": "431"} + ,{"name": "VRInitError_Compositor_FailedToGetDXGIDeviceInterface","value": "432"} + ,{"name": "VRInitError_Compositor_SelectDisplayMode","value": "433"} + ,{"name": "VRInitError_Compositor_FailedToCreateNvAPIRenderTargets","value": "434"} + ,{"name": "VRInitError_Compositor_NvAPISetDisplayMode","value": "435"} + ,{"name": "VRInitError_Compositor_FailedToCreateDirectModeDisplay","value": "436"} + ,{"name": "VRInitError_Compositor_InvalidHmdPropertyContainer","value": "437"} + ,{"name": "VRInitError_Compositor_UpdateDisplayFrequency","value": "438"} + ,{"name": "VRInitError_Compositor_CreateRasterizerState","value": "439"} + ,{"name": "VRInitError_Compositor_CreateWireframeRasterizerState","value": "440"} + ,{"name": "VRInitError_Compositor_CreateSamplerState","value": "441"} + ,{"name": "VRInitError_Compositor_CreateClampToBorderSamplerState","value": "442"} + ,{"name": "VRInitError_Compositor_CreateAnisoSamplerState","value": "443"} + ,{"name": "VRInitError_Compositor_CreateOverlaySamplerState","value": "444"} + ,{"name": "VRInitError_Compositor_CreatePanoramaSamplerState","value": "445"} + ,{"name": "VRInitError_Compositor_CreateFontSamplerState","value": "446"} + ,{"name": "VRInitError_Compositor_CreateNoBlendState","value": "447"} + ,{"name": "VRInitError_Compositor_CreateBlendState","value": "448"} + ,{"name": "VRInitError_Compositor_CreateAlphaBlendState","value": "449"} + ,{"name": "VRInitError_Compositor_CreateBlendStateMaskR","value": "450"} + ,{"name": "VRInitError_Compositor_CreateBlendStateMaskG","value": "451"} + ,{"name": "VRInitError_Compositor_CreateBlendStateMaskB","value": "452"} + ,{"name": "VRInitError_Compositor_CreateDepthStencilState","value": "453"} + ,{"name": "VRInitError_Compositor_CreateDepthStencilStateNoWrite","value": "454"} + ,{"name": "VRInitError_Compositor_CreateDepthStencilStateNoDepth","value": "455"} + ,{"name": "VRInitError_Compositor_CreateFlushTexture","value": "456"} + ,{"name": "VRInitError_Compositor_CreateDistortionSurfaces","value": "457"} + ,{"name": "VRInitError_Compositor_CreateConstantBuffer","value": "458"} + ,{"name": "VRInitError_Compositor_CreateHmdPoseConstantBuffer","value": "459"} + ,{"name": "VRInitError_Compositor_CreateHmdPoseStagingConstantBuffer","value": "460"} + ,{"name": "VRInitError_Compositor_CreateSharedFrameInfoConstantBuffer","value": "461"} + ,{"name": "VRInitError_Compositor_CreateOverlayConstantBuffer","value": "462"} + ,{"name": "VRInitError_Compositor_CreateSceneTextureIndexConstantBuffer","value": "463"} + ,{"name": "VRInitError_Compositor_CreateReadableSceneTextureIndexConstantBuffer","value": "464"} + ,{"name": "VRInitError_Compositor_CreateLayerGraphicsTextureIndexConstantBuffer","value": "465"} + ,{"name": "VRInitError_Compositor_CreateLayerComputeTextureIndexConstantBuffer","value": "466"} + ,{"name": "VRInitError_Compositor_CreateLayerComputeSceneTextureIndexConstantBuffer","value": "467"} + ,{"name": "VRInitError_Compositor_CreateComputeHmdPoseConstantBuffer","value": "468"} + ,{"name": "VRInitError_Compositor_CreateGeomConstantBuffer","value": "469"} + ,{"name": "VRInitError_Compositor_CreatePanelMaskConstantBuffer","value": "470"} + ,{"name": "VRInitError_Compositor_CreatePixelSimUBO","value": "471"} + ,{"name": "VRInitError_Compositor_CreateMSAARenderTextures","value": "472"} + ,{"name": "VRInitError_Compositor_CreateResolveRenderTextures","value": "473"} + ,{"name": "VRInitError_Compositor_CreateComputeResolveRenderTextures","value": "474"} + ,{"name": "VRInitError_Compositor_CreateDriverDirectModeResolveTextures","value": "475"} + ,{"name": "VRInitError_Compositor_OpenDriverDirectModeResolveTextures","value": "476"} + ,{"name": "VRInitError_Compositor_CreateFallbackSyncTexture","value": "477"} + ,{"name": "VRInitError_Compositor_ShareFallbackSyncTexture","value": "478"} + ,{"name": "VRInitError_Compositor_CreateOverlayIndexBuffer","value": "479"} + ,{"name": "VRInitError_Compositor_CreateOverlayVertexBuffer","value": "480"} + ,{"name": "VRInitError_Compositor_CreateTextVertexBuffer","value": "481"} + ,{"name": "VRInitError_Compositor_CreateTextIndexBuffer","value": "482"} + ,{"name": "VRInitError_Compositor_CreateMirrorTextures","value": "483"} + ,{"name": "VRInitError_Compositor_CreateLastFrameRenderTexture","value": "484"} + ,{"name": "VRInitError_Compositor_CreateMirrorOverlay","value": "485"} + ,{"name": "VRInitError_Compositor_FailedToCreateVirtualDisplayBackbuffer","value": "486"} + ,{"name": "VRInitError_Compositor_DisplayModeNotSupported","value": "487"} + ,{"name": "VRInitError_Compositor_CreateOverlayInvalidCall","value": "488"} + ,{"name": "VRInitError_Compositor_CreateOverlayAlreadyInitialized","value": "489"} + ,{"name": "VRInitError_Compositor_FailedToCreateMailbox","value": "490"} + ,{"name": "VRInitError_Compositor_WindowInterfaceIsNull","value": "491"} + ,{"name": "VRInitError_Compositor_SystemLayerCreateInstance","value": "492"} + ,{"name": "VRInitError_Compositor_SystemLayerCreateSession","value": "493"} + ,{"name": "VRInitError_VendorSpecific_UnableToConnectToOculusRuntime","value": "1000"} + ,{"name": "VRInitError_VendorSpecific_WindowsNotInDevMode","value": "1001"} + ,{"name": "VRInitError_VendorSpecific_HmdFound_CantOpenDevice","value": "1101"} + ,{"name": "VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart","value": "1102"} + ,{"name": "VRInitError_VendorSpecific_HmdFound_NoStoredConfig","value": "1103"} + ,{"name": "VRInitError_VendorSpecific_HmdFound_ConfigTooBig","value": "1104"} + ,{"name": "VRInitError_VendorSpecific_HmdFound_ConfigTooSmall","value": "1105"} + ,{"name": "VRInitError_VendorSpecific_HmdFound_UnableToInitZLib","value": "1106"} + ,{"name": "VRInitError_VendorSpecific_HmdFound_CantReadFirmwareVersion","value": "1107"} + ,{"name": "VRInitError_VendorSpecific_HmdFound_UnableToSendUserDataStart","value": "1108"} + ,{"name": "VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataStart","value": "1109"} + ,{"name": "VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataNext","value": "1110"} + ,{"name": "VRInitError_VendorSpecific_HmdFound_UserDataAddressRange","value": "1111"} + ,{"name": "VRInitError_VendorSpecific_HmdFound_UserDataError","value": "1112"} + ,{"name": "VRInitError_VendorSpecific_HmdFound_ConfigFailedSanityCheck","value": "1113"} + ,{"name": "VRInitError_VendorSpecific_OculusRuntimeBadInstall","value": "1114"} + ,{"name": "VRInitError_Steam_SteamInstallationNotFound","value": "2000"} + ,{"name": "VRInitError_LastError","value": "2001"} +]} +, {"enumname": "vr::EVRScreenshotType","values": [ + {"name": "VRScreenshotType_None","value": "0"} + ,{"name": "VRScreenshotType_Mono","value": "1"} + ,{"name": "VRScreenshotType_Stereo","value": "2"} + ,{"name": "VRScreenshotType_Cubemap","value": "3"} + ,{"name": "VRScreenshotType_MonoPanorama","value": "4"} + ,{"name": "VRScreenshotType_StereoPanorama","value": "5"} +]} +, {"enumname": "vr::EVRScreenshotPropertyFilenames","values": [ + {"name": "VRScreenshotPropertyFilenames_Preview","value": "0"} + ,{"name": "VRScreenshotPropertyFilenames_VR","value": "1"} +]} +, {"enumname": "vr::EVRTrackedCameraError","values": [ + {"name": "VRTrackedCameraError_None","value": "0"} + ,{"name": "VRTrackedCameraError_OperationFailed","value": "100"} + ,{"name": "VRTrackedCameraError_InvalidHandle","value": "101"} + ,{"name": "VRTrackedCameraError_InvalidFrameHeaderVersion","value": "102"} + ,{"name": "VRTrackedCameraError_OutOfHandles","value": "103"} + ,{"name": "VRTrackedCameraError_IPCFailure","value": "104"} + ,{"name": "VRTrackedCameraError_NotSupportedForThisDevice","value": "105"} + ,{"name": "VRTrackedCameraError_SharedMemoryFailure","value": "106"} + ,{"name": "VRTrackedCameraError_FrameBufferingFailure","value": "107"} + ,{"name": "VRTrackedCameraError_StreamSetupFailure","value": "108"} + ,{"name": "VRTrackedCameraError_InvalidGLTextureId","value": "109"} + ,{"name": "VRTrackedCameraError_InvalidSharedTextureHandle","value": "110"} + ,{"name": "VRTrackedCameraError_FailedToGetGLTextureId","value": "111"} + ,{"name": "VRTrackedCameraError_SharedTextureFailure","value": "112"} + ,{"name": "VRTrackedCameraError_NoFrameAvailable","value": "113"} + ,{"name": "VRTrackedCameraError_InvalidArgument","value": "114"} + ,{"name": "VRTrackedCameraError_InvalidFrameBufferSize","value": "115"} +]} +, {"enumname": "vr::EVRTrackedCameraFrameLayout","values": [ + {"name": "EVRTrackedCameraFrameLayout_Mono","value": "1"} + ,{"name": "EVRTrackedCameraFrameLayout_Stereo","value": "2"} + ,{"name": "EVRTrackedCameraFrameLayout_VerticalLayout","value": "16"} + ,{"name": "EVRTrackedCameraFrameLayout_HorizontalLayout","value": "32"} +]} +, {"enumname": "vr::EVRTrackedCameraFrameType","values": [ + {"name": "VRTrackedCameraFrameType_Distorted","value": "0"} + ,{"name": "VRTrackedCameraFrameType_Undistorted","value": "1"} + ,{"name": "VRTrackedCameraFrameType_MaximumUndistorted","value": "2"} + ,{"name": "MAX_CAMERA_FRAME_TYPES","value": "3"} +]} +, {"enumname": "vr::EVRDistortionFunctionType","values": [ + {"name": "VRDistortionFunctionType_None","value": "0"} + ,{"name": "VRDistortionFunctionType_FTheta","value": "1"} + ,{"name": "VRDistortionFunctionType_Extended_FTheta","value": "2"} + ,{"name": "MAX_DISTORTION_FUNCTION_TYPES","value": "3"} +]} +, {"enumname": "vr::EVSync","values": [ + {"name": "VSync_None","value": "0"} + ,{"name": "VSync_WaitRender","value": "1"} + ,{"name": "VSync_NoWaitRender","value": "2"} +]} +, {"enumname": "vr::EVRMuraCorrectionMode","values": [ + {"name": "EVRMuraCorrectionMode_Default","value": "0"} + ,{"name": "EVRMuraCorrectionMode_NoCorrection","value": "1"} +]} +, {"enumname": "vr::Imu_OffScaleFlags","values": [ + {"name": "OffScale_AccelX","value": "1"} + ,{"name": "OffScale_AccelY","value": "2"} + ,{"name": "OffScale_AccelZ","value": "4"} + ,{"name": "OffScale_GyroX","value": "8"} + ,{"name": "OffScale_GyroY","value": "16"} + ,{"name": "OffScale_GyroZ","value": "32"} +]} +, {"enumname": "vr::EVRApplicationError","values": [ + {"name": "VRApplicationError_None","value": "0"} + ,{"name": "VRApplicationError_AppKeyAlreadyExists","value": "100"} + ,{"name": "VRApplicationError_NoManifest","value": "101"} + ,{"name": "VRApplicationError_NoApplication","value": "102"} + ,{"name": "VRApplicationError_InvalidIndex","value": "103"} + ,{"name": "VRApplicationError_UnknownApplication","value": "104"} + ,{"name": "VRApplicationError_IPCFailed","value": "105"} + ,{"name": "VRApplicationError_ApplicationAlreadyRunning","value": "106"} + ,{"name": "VRApplicationError_InvalidManifest","value": "107"} + ,{"name": "VRApplicationError_InvalidApplication","value": "108"} + ,{"name": "VRApplicationError_LaunchFailed","value": "109"} + ,{"name": "VRApplicationError_ApplicationAlreadyStarting","value": "110"} + ,{"name": "VRApplicationError_LaunchInProgress","value": "111"} + ,{"name": "VRApplicationError_OldApplicationQuitting","value": "112"} + ,{"name": "VRApplicationError_TransitionAborted","value": "113"} + ,{"name": "VRApplicationError_IsTemplate","value": "114"} + ,{"name": "VRApplicationError_SteamVRIsExiting","value": "115"} + ,{"name": "VRApplicationError_BufferTooSmall","value": "200"} + ,{"name": "VRApplicationError_PropertyNotSet","value": "201"} + ,{"name": "VRApplicationError_UnknownProperty","value": "202"} + ,{"name": "VRApplicationError_InvalidParameter","value": "203"} + ,{"name": "VRApplicationError_NotImplemented","value": "300"} +]} +, {"enumname": "vr::EVRApplicationProperty","values": [ + {"name": "VRApplicationProperty_Name_String","value": "0"} + ,{"name": "VRApplicationProperty_LaunchType_String","value": "11"} + ,{"name": "VRApplicationProperty_WorkingDirectory_String","value": "12"} + ,{"name": "VRApplicationProperty_BinaryPath_String","value": "13"} + ,{"name": "VRApplicationProperty_Arguments_String","value": "14"} + ,{"name": "VRApplicationProperty_URL_String","value": "15"} + ,{"name": "VRApplicationProperty_Description_String","value": "50"} + ,{"name": "VRApplicationProperty_NewsURL_String","value": "51"} + ,{"name": "VRApplicationProperty_ImagePath_String","value": "52"} + ,{"name": "VRApplicationProperty_Source_String","value": "53"} + ,{"name": "VRApplicationProperty_ActionManifestURL_String","value": "54"} + ,{"name": "VRApplicationProperty_IsDashboardOverlay_Bool","value": "60"} + ,{"name": "VRApplicationProperty_IsTemplate_Bool","value": "61"} + ,{"name": "VRApplicationProperty_IsInstanced_Bool","value": "62"} + ,{"name": "VRApplicationProperty_IsInternal_Bool","value": "63"} + ,{"name": "VRApplicationProperty_WantsCompositorPauseInStandby_Bool","value": "64"} + ,{"name": "VRApplicationProperty_IsHidden_Bool","value": "65"} + ,{"name": "VRApplicationProperty_LastLaunchTime_Uint64","value": "70"} +]} +, {"enumname": "vr::EVRSceneApplicationState","values": [ + {"name": "EVRSceneApplicationState_None","value": "0"} + ,{"name": "EVRSceneApplicationState_Starting","value": "1"} + ,{"name": "EVRSceneApplicationState_Quitting","value": "2"} + ,{"name": "EVRSceneApplicationState_Running","value": "3"} + ,{"name": "EVRSceneApplicationState_Waiting","value": "4"} +]} +, {"enumname": "vr::ChaperoneCalibrationState","values": [ + {"name": "ChaperoneCalibrationState_OK","value": "1"} + ,{"name": "ChaperoneCalibrationState_Warning","value": "100"} + ,{"name": "ChaperoneCalibrationState_Warning_BaseStationMayHaveMoved","value": "101"} + ,{"name": "ChaperoneCalibrationState_Warning_BaseStationRemoved","value": "102"} + ,{"name": "ChaperoneCalibrationState_Warning_SeatedBoundsInvalid","value": "103"} + ,{"name": "ChaperoneCalibrationState_Error","value": "200"} + ,{"name": "ChaperoneCalibrationState_Error_BaseStationUninitialized","value": "201"} + ,{"name": "ChaperoneCalibrationState_Error_BaseStationConflict","value": "202"} + ,{"name": "ChaperoneCalibrationState_Error_PlayAreaInvalid","value": "203"} + ,{"name": "ChaperoneCalibrationState_Error_CollisionBoundsInvalid","value": "204"} +]} +, {"enumname": "vr::EChaperoneConfigFile","values": [ + {"name": "EChaperoneConfigFile_Live","value": "1"} + ,{"name": "EChaperoneConfigFile_Temp","value": "2"} +]} +, {"enumname": "vr::EChaperoneImportFlags","values": [ + {"name": "EChaperoneImport_BoundsOnly","value": "1"} +]} +, {"enumname": "vr::EVRCompositorError","values": [ + {"name": "VRCompositorError_None","value": "0"} + ,{"name": "VRCompositorError_RequestFailed","value": "1"} + ,{"name": "VRCompositorError_IncompatibleVersion","value": "100"} + ,{"name": "VRCompositorError_DoNotHaveFocus","value": "101"} + ,{"name": "VRCompositorError_InvalidTexture","value": "102"} + ,{"name": "VRCompositorError_IsNotSceneApplication","value": "103"} + ,{"name": "VRCompositorError_TextureIsOnWrongDevice","value": "104"} + ,{"name": "VRCompositorError_TextureUsesUnsupportedFormat","value": "105"} + ,{"name": "VRCompositorError_SharedTexturesNotSupported","value": "106"} + ,{"name": "VRCompositorError_IndexOutOfRange","value": "107"} + ,{"name": "VRCompositorError_AlreadySubmitted","value": "108"} + ,{"name": "VRCompositorError_InvalidBounds","value": "109"} + ,{"name": "VRCompositorError_AlreadySet","value": "110"} +]} +, {"enumname": "vr::EVRCompositorTimingMode","values": [ + {"name": "VRCompositorTimingMode_Implicit","value": "0"} + ,{"name": "VRCompositorTimingMode_Explicit_RuntimePerformsPostPresentHandoff","value": "1"} + ,{"name": "VRCompositorTimingMode_Explicit_ApplicationPerformsPostPresentHandoff","value": "2"} +]} +, {"enumname": "vr::VROverlayInputMethod","values": [ + {"name": "VROverlayInputMethod_None","value": "0"} + ,{"name": "VROverlayInputMethod_Mouse","value": "1"} +]} +, {"enumname": "vr::VROverlayTransformType","values": [ + {"name": "VROverlayTransform_Invalid","value": "-1"} + ,{"name": "VROverlayTransform_Absolute","value": "0"} + ,{"name": "VROverlayTransform_TrackedDeviceRelative","value": "1"} + ,{"name": "VROverlayTransform_SystemOverlay","value": "2"} + ,{"name": "VROverlayTransform_TrackedComponent","value": "3"} + ,{"name": "VROverlayTransform_Cursor","value": "4"} + ,{"name": "VROverlayTransform_DashboardTab","value": "5"} + ,{"name": "VROverlayTransform_DashboardThumb","value": "6"} + ,{"name": "VROverlayTransform_Mountable","value": "7"} + ,{"name": "VROverlayTransform_Projection","value": "8"} +]} +, {"enumname": "vr::VROverlayFlags","values": [ + {"name": "VROverlayFlags_NoDashboardTab","value": "8"} + ,{"name": "VROverlayFlags_SendVRDiscreteScrollEvents","value": "64"} + ,{"name": "VROverlayFlags_SendVRTouchpadEvents","value": "128"} + ,{"name": "VROverlayFlags_ShowTouchPadScrollWheel","value": "256"} + ,{"name": "VROverlayFlags_TransferOwnershipToInternalProcess","value": "512"} + ,{"name": "VROverlayFlags_SideBySide_Parallel","value": "1024"} + ,{"name": "VROverlayFlags_SideBySide_Crossed","value": "2048"} + ,{"name": "VROverlayFlags_Panorama","value": "4096"} + ,{"name": "VROverlayFlags_StereoPanorama","value": "8192"} + ,{"name": "VROverlayFlags_SortWithNonSceneOverlays","value": "16384"} + ,{"name": "VROverlayFlags_VisibleInDashboard","value": "32768"} + ,{"name": "VROverlayFlags_MakeOverlaysInteractiveIfVisible","value": "65536"} + ,{"name": "VROverlayFlags_SendVRSmoothScrollEvents","value": "131072"} + ,{"name": "VROverlayFlags_ProtectedContent","value": "262144"} + ,{"name": "VROverlayFlags_HideLaserIntersection","value": "524288"} + ,{"name": "VROverlayFlags_WantsModalBehavior","value": "1048576"} + ,{"name": "VROverlayFlags_IsPremultiplied","value": "2097152"} +]} +, {"enumname": "vr::VRMessageOverlayResponse","values": [ + {"name": "VRMessageOverlayResponse_ButtonPress_0","value": "0"} + ,{"name": "VRMessageOverlayResponse_ButtonPress_1","value": "1"} + ,{"name": "VRMessageOverlayResponse_ButtonPress_2","value": "2"} + ,{"name": "VRMessageOverlayResponse_ButtonPress_3","value": "3"} + ,{"name": "VRMessageOverlayResponse_CouldntFindSystemOverlay","value": "4"} + ,{"name": "VRMessageOverlayResponse_CouldntFindOrCreateClientOverlay","value": "5"} + ,{"name": "VRMessageOverlayResponse_ApplicationQuit","value": "6"} +]} +, {"enumname": "vr::EGamepadTextInputMode","values": [ + {"name": "k_EGamepadTextInputModeNormal","value": "0"} + ,{"name": "k_EGamepadTextInputModePassword","value": "1"} + ,{"name": "k_EGamepadTextInputModeSubmit","value": "2"} +]} +, {"enumname": "vr::EGamepadTextInputLineMode","values": [ + {"name": "k_EGamepadTextInputLineModeSingleLine","value": "0"} + ,{"name": "k_EGamepadTextInputLineModeMultipleLines","value": "1"} +]} +, {"enumname": "vr::EVROverlayIntersectionMaskPrimitiveType","values": [ + {"name": "OverlayIntersectionPrimitiveType_Rectangle","value": "0"} + ,{"name": "OverlayIntersectionPrimitiveType_Circle","value": "1"} +]} +, {"enumname": "vr::EKeyboardFlags","values": [ + {"name": "KeyboardFlag_Minimal","value": "1"} + ,{"name": "KeyboardFlag_Modal","value": "2"} +]} +, {"enumname": "vr::EDeviceType","values": [ + {"name": "DeviceType_Invalid","value": "-1"} + ,{"name": "DeviceType_DirectX11","value": "0"} + ,{"name": "DeviceType_Vulkan","value": "1"} +]} +, {"enumname": "vr::HeadsetViewMode_t","values": [ + {"name": "HeadsetViewMode_Left","value": "0"} + ,{"name": "HeadsetViewMode_Right","value": "1"} + ,{"name": "HeadsetViewMode_Both","value": "2"} +]} +, {"enumname": "vr::EVRRenderModelError","values": [ + {"name": "VRRenderModelError_None","value": "0"} + ,{"name": "VRRenderModelError_Loading","value": "100"} + ,{"name": "VRRenderModelError_NotSupported","value": "200"} + ,{"name": "VRRenderModelError_InvalidArg","value": "300"} + ,{"name": "VRRenderModelError_InvalidModel","value": "301"} + ,{"name": "VRRenderModelError_NoShapes","value": "302"} + ,{"name": "VRRenderModelError_MultipleShapes","value": "303"} + ,{"name": "VRRenderModelError_TooManyVertices","value": "304"} + ,{"name": "VRRenderModelError_MultipleTextures","value": "305"} + ,{"name": "VRRenderModelError_BufferTooSmall","value": "306"} + ,{"name": "VRRenderModelError_NotEnoughNormals","value": "307"} + ,{"name": "VRRenderModelError_NotEnoughTexCoords","value": "308"} + ,{"name": "VRRenderModelError_InvalidTexture","value": "400"} +]} +, {"enumname": "vr::EVRRenderModelTextureFormat","values": [ + {"name": "VRRenderModelTextureFormat_RGBA8_SRGB","value": "0"} + ,{"name": "VRRenderModelTextureFormat_BC2","value": "1"} + ,{"name": "VRRenderModelTextureFormat_BC4","value": "2"} + ,{"name": "VRRenderModelTextureFormat_BC7","value": "3"} + ,{"name": "VRRenderModelTextureFormat_BC7_SRGB","value": "4"} +]} +, {"enumname": "vr::EVRNotificationType","values": [ + {"name": "EVRNotificationType_Transient","value": "0"} + ,{"name": "EVRNotificationType_Persistent","value": "1"} + ,{"name": "EVRNotificationType_Transient_SystemWithUserValue","value": "2"} +]} +, {"enumname": "vr::EVRNotificationStyle","values": [ + {"name": "EVRNotificationStyle_None","value": "0"} + ,{"name": "EVRNotificationStyle_Application","value": "100"} + ,{"name": "EVRNotificationStyle_Contact_Disabled","value": "200"} + ,{"name": "EVRNotificationStyle_Contact_Enabled","value": "201"} + ,{"name": "EVRNotificationStyle_Contact_Active","value": "202"} +]} +, {"enumname": "vr::EVRSettingsError","values": [ + {"name": "VRSettingsError_None","value": "0"} + ,{"name": "VRSettingsError_IPCFailed","value": "1"} + ,{"name": "VRSettingsError_WriteFailed","value": "2"} + ,{"name": "VRSettingsError_ReadFailed","value": "3"} + ,{"name": "VRSettingsError_JsonParseFailed","value": "4"} + ,{"name": "VRSettingsError_UnsetSettingHasNoDefault","value": "5"} +]} +, {"enumname": "vr::EVRScreenshotError","values": [ + {"name": "VRScreenshotError_None","value": "0"} + ,{"name": "VRScreenshotError_RequestFailed","value": "1"} + ,{"name": "VRScreenshotError_IncompatibleVersion","value": "100"} + ,{"name": "VRScreenshotError_NotFound","value": "101"} + ,{"name": "VRScreenshotError_BufferTooSmall","value": "102"} + ,{"name": "VRScreenshotError_ScreenshotAlreadyInProgress","value": "108"} +]} +, {"enumname": "vr::EVRSkeletalTransformSpace","values": [ + {"name": "VRSkeletalTransformSpace_Model","value": "0"} + ,{"name": "VRSkeletalTransformSpace_Parent","value": "1"} +]} +, {"enumname": "vr::EVRSkeletalReferencePose","values": [ + {"name": "VRSkeletalReferencePose_BindPose","value": "0"} + ,{"name": "VRSkeletalReferencePose_OpenHand","value": "1"} + ,{"name": "VRSkeletalReferencePose_Fist","value": "2"} + ,{"name": "VRSkeletalReferencePose_GripLimit","value": "3"} +]} +, {"enumname": "vr::EVRFinger","values": [ + {"name": "VRFinger_Thumb","value": "0"} + ,{"name": "VRFinger_Index","value": "1"} + ,{"name": "VRFinger_Middle","value": "2"} + ,{"name": "VRFinger_Ring","value": "3"} + ,{"name": "VRFinger_Pinky","value": "4"} + ,{"name": "VRFinger_Count","value": "5"} +]} +, {"enumname": "vr::EVRFingerSplay","values": [ + {"name": "VRFingerSplay_Thumb_Index","value": "0"} + ,{"name": "VRFingerSplay_Index_Middle","value": "1"} + ,{"name": "VRFingerSplay_Middle_Ring","value": "2"} + ,{"name": "VRFingerSplay_Ring_Pinky","value": "3"} + ,{"name": "VRFingerSplay_Count","value": "4"} +]} +, {"enumname": "vr::EVRSummaryType","values": [ + {"name": "VRSummaryType_FromAnimation","value": "0"} + ,{"name": "VRSummaryType_FromDevice","value": "1"} +]} +, {"enumname": "vr::EVRInputFilterCancelType","values": [ + {"name": "VRInputFilterCancel_Timers","value": "0"} + ,{"name": "VRInputFilterCancel_Momentum","value": "1"} +]} +, {"enumname": "vr::EVRInputStringBits","values": [ + {"name": "VRInputString_Hand","value": "1"} + ,{"name": "VRInputString_ControllerType","value": "2"} + ,{"name": "VRInputString_InputSource","value": "4"} + ,{"name": "VRInputString_All","value": "-1"} +]} +, {"enumname": "vr::EIOBufferError","values": [ + {"name": "IOBuffer_Success","value": "0"} + ,{"name": "IOBuffer_OperationFailed","value": "100"} + ,{"name": "IOBuffer_InvalidHandle","value": "101"} + ,{"name": "IOBuffer_InvalidArgument","value": "102"} + ,{"name": "IOBuffer_PathExists","value": "103"} + ,{"name": "IOBuffer_PathDoesNotExist","value": "104"} + ,{"name": "IOBuffer_Permission","value": "105"} +]} +, {"enumname": "vr::EIOBufferMode","values": [ + {"name": "IOBufferMode_Read","value": "1"} + ,{"name": "IOBufferMode_Write","value": "2"} + ,{"name": "IOBufferMode_Create","value": "512"} +]} +, {"enumname": "vr::EVRDebugError","values": [ + {"name": "VRDebugError_Success","value": "0"} + ,{"name": "VRDebugError_BadParameter","value": "1"} +]} +, {"enumname": "vr::EPropertyWriteType","values": [ + {"name": "PropertyWrite_Set","value": "0"} + ,{"name": "PropertyWrite_Erase","value": "1"} + ,{"name": "PropertyWrite_SetError","value": "2"} +]} +, {"enumname": "vr::EBlockQueueError","values": [ + {"name": "BlockQueueError_None","value": "0"} + ,{"name": "BlockQueueError_QueueAlreadyExists","value": "1"} + ,{"name": "BlockQueueError_QueueNotFound","value": "2"} + ,{"name": "BlockQueueError_BlockNotAvailable","value": "3"} + ,{"name": "BlockQueueError_InvalidHandle","value": "4"} + ,{"name": "BlockQueueError_InvalidParam","value": "5"} + ,{"name": "BlockQueueError_ParamMismatch","value": "6"} + ,{"name": "BlockQueueError_InternalError","value": "7"} + ,{"name": "BlockQueueError_AlreadyInitialized","value": "8"} + ,{"name": "BlockQueueError_OperationIsServerOnly","value": "9"} + ,{"name": "BlockQueueError_TooManyConnections","value": "10"} +]} +, {"enumname": "vr::EBlockQueueReadType","values": [ + {"name": "BlockQueueRead_Latest","value": "0"} + ,{"name": "BlockQueueRead_New","value": "1"} + ,{"name": "BlockQueueRead_Next","value": "2"} +]} +], +"consts":[{ + "constname": "k_nDriverNone","consttype": "const uint32_t", "constval": "4294967295"} +,{ + "constname": "k_unMaxDriverDebugResponseSize","consttype": "const uint32_t", "constval": "32768"} +,{ + "constname": "k_unTrackedDeviceIndex_Hmd","consttype": "const uint32_t", "constval": "0"} +,{ + "constname": "k_unMaxTrackedDeviceCount","consttype": "const uint32_t", "constval": "64"} +,{ + "constname": "k_unTrackedDeviceIndexOther","consttype": "const uint32_t", "constval": "4294967294"} +,{ + "constname": "k_unTrackedDeviceIndexInvalid","consttype": "const uint32_t", "constval": "4294967295"} +,{ + "constname": "k_ulInvalidPropertyContainer","consttype": "const PropertyContainerHandle_t", "constval": "0"} +,{ + "constname": "k_unInvalidPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "0"} +,{ + "constname": "k_ulInvalidDriverHandle","consttype": "const PropertyContainerHandle_t", "constval": "0"} +,{ + "constname": "k_unFloatPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "1"} +,{ + "constname": "k_unInt32PropertyTag","consttype": "const PropertyTypeTag_t", "constval": "2"} +,{ + "constname": "k_unUint64PropertyTag","consttype": "const PropertyTypeTag_t", "constval": "3"} +,{ + "constname": "k_unBoolPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "4"} +,{ + "constname": "k_unStringPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "5"} +,{ + "constname": "k_unErrorPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "6"} +,{ + "constname": "k_unDoublePropertyTag","consttype": "const PropertyTypeTag_t", "constval": "7"} +,{ + "constname": "k_unHmdMatrix34PropertyTag","consttype": "const PropertyTypeTag_t", "constval": "20"} +,{ + "constname": "k_unHmdMatrix44PropertyTag","consttype": "const PropertyTypeTag_t", "constval": "21"} +,{ + "constname": "k_unHmdVector3PropertyTag","consttype": "const PropertyTypeTag_t", "constval": "22"} +,{ + "constname": "k_unHmdVector4PropertyTag","consttype": "const PropertyTypeTag_t", "constval": "23"} +,{ + "constname": "k_unHmdVector2PropertyTag","consttype": "const PropertyTypeTag_t", "constval": "24"} +,{ + "constname": "k_unHmdQuadPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "25"} +,{ + "constname": "k_unHiddenAreaPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "30"} +,{ + "constname": "k_unPathHandleInfoTag","consttype": "const PropertyTypeTag_t", "constval": "31"} +,{ + "constname": "k_unActionPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "32"} +,{ + "constname": "k_unInputValuePropertyTag","consttype": "const PropertyTypeTag_t", "constval": "33"} +,{ + "constname": "k_unWildcardPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "34"} +,{ + "constname": "k_unHapticVibrationPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "35"} +,{ + "constname": "k_unSkeletonPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "36"} +,{ + "constname": "k_unSpatialAnchorPosePropertyTag","consttype": "const PropertyTypeTag_t", "constval": "40"} +,{ + "constname": "k_unJsonPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "41"} +,{ + "constname": "k_unActiveActionSetPropertyTag","consttype": "const PropertyTypeTag_t", "constval": "42"} +,{ + "constname": "k_unOpenVRInternalReserved_Start","consttype": "const PropertyTypeTag_t", "constval": "1000"} +,{ + "constname": "k_unOpenVRInternalReserved_End","consttype": "const PropertyTypeTag_t", "constval": "10000"} +,{ + "constname": "k_unMaxPropertyStringSize","consttype": "const uint32_t", "constval": "32768"} +,{ + "constname": "k_ulInvalidActionHandle","consttype": "const VRActionHandle_t", "constval": "0"} +,{ + "constname": "k_ulInvalidActionSetHandle","consttype": "const VRActionSetHandle_t", "constval": "0"} +,{ + "constname": "k_ulInvalidInputValueHandle","consttype": "const VRInputValueHandle_t", "constval": "0"} +,{ + "constname": "k_unControllerStateAxisCount","consttype": "const uint32_t", "constval": "5"} +,{ + "constname": "k_ulOverlayHandleInvalid","consttype": "const VROverlayHandle_t", "constval": "0"} +,{ + "constname": "k_unMaxDistortionFunctionParameters","consttype": "const uint32_t", "constval": "8"} +,{ + "constname": "k_unScreenshotHandleInvalid","consttype": "const uint32_t", "constval": "0"} +,{ + "constname": "IVRSystem_Version","consttype": "const char *const", "constval": "IVRSystem_022"} +,{ + "constname": "IVRExtendedDisplay_Version","consttype": "const char *const", "constval": "IVRExtendedDisplay_001"} +,{ + "constname": "IVRTrackedCamera_Version","consttype": "const char *const", "constval": "IVRTrackedCamera_006"} +,{ + "constname": "k_unMaxApplicationKeyLength","consttype": "const uint32_t", "constval": "128"} +,{ + "constname": "k_pch_MimeType_HomeApp","consttype": "const char *const", "constval": "vr/home"} +,{ + "constname": "k_pch_MimeType_GameTheater","consttype": "const char *const", "constval": "vr/game_theater"} +,{ + "constname": "IVRApplications_Version","consttype": "const char *const", "constval": "IVRApplications_007"} +,{ + "constname": "IVRChaperone_Version","consttype": "const char *const", "constval": "IVRChaperone_004"} +,{ + "constname": "IVRChaperoneSetup_Version","consttype": "const char *const", "constval": "IVRChaperoneSetup_006"} +,{ + "constname": "IVRCompositor_Version","consttype": "const char *const", "constval": "IVRCompositor_027"} +,{ + "constname": "k_unVROverlayMaxKeyLength","consttype": "const uint32_t", "constval": "128"} +,{ + "constname": "k_unVROverlayMaxNameLength","consttype": "const uint32_t", "constval": "128"} +,{ + "constname": "k_unMaxOverlayCount","consttype": "const uint32_t", "constval": "128"} +,{ + "constname": "k_unMaxOverlayIntersectionMaskPrimitivesCount","consttype": "const uint32_t", "constval": "32"} +,{ + "constname": "IVROverlay_Version","consttype": "const char *const", "constval": "IVROverlay_025"} +,{ + "constname": "IVROverlayView_Version","consttype": "const char *const", "constval": "IVROverlayView_003"} +,{ + "constname": "k_unHeadsetViewMaxWidth","consttype": "const uint32_t", "constval": "3840"} +,{ + "constname": "k_unHeadsetViewMaxHeight","consttype": "const uint32_t", "constval": "2160"} +,{ + "constname": "k_pchHeadsetViewOverlayKey","consttype": "const char *const", "constval": "system.HeadsetView"} +,{ + "constname": "IVRHeadsetView_Version","consttype": "const char *const", "constval": "IVRHeadsetView_001"} +,{ + "constname": "k_pch_Controller_Component_GDC2015","consttype": "const char *const", "constval": "gdc2015"} +,{ + "constname": "k_pch_Controller_Component_Base","consttype": "const char *const", "constval": "base"} +,{ + "constname": "k_pch_Controller_Component_Tip","consttype": "const char *const", "constval": "tip"} +,{ + "constname": "k_pch_Controller_Component_HandGrip","consttype": "const char *const", "constval": "handgrip"} +,{ + "constname": "k_pch_Controller_Component_Status","consttype": "const char *const", "constval": "status"} +,{ + "constname": "IVRRenderModels_Version","consttype": "const char *const", "constval": "IVRRenderModels_006"} +,{ + "constname": "k_unNotificationTextMaxSize","consttype": "const uint32_t", "constval": "256"} +,{ + "constname": "IVRNotifications_Version","consttype": "const char *const", "constval": "IVRNotifications_002"} +,{ + "constname": "k_unMaxSettingsKeyLength","consttype": "const uint32_t", "constval": "128"} +,{ + "constname": "IVRSettings_Version","consttype": "const char *const", "constval": "IVRSettings_003"} +,{ + "constname": "k_pch_SteamVR_Section","consttype": "const char *const", "constval": "steamvr"} +,{ + "constname": "k_pch_SteamVR_RequireHmd_String","consttype": "const char *const", "constval": "requireHmd"} +,{ + "constname": "k_pch_SteamVR_ForcedDriverKey_String","consttype": "const char *const", "constval": "forcedDriver"} +,{ + "constname": "k_pch_SteamVR_ForcedHmdKey_String","consttype": "const char *const", "constval": "forcedHmd"} +,{ + "constname": "k_pch_SteamVR_DisplayDebug_Bool","consttype": "const char *const", "constval": "displayDebug"} +,{ + "constname": "k_pch_SteamVR_DebugProcessPipe_String","consttype": "const char *const", "constval": "debugProcessPipe"} +,{ + "constname": "k_pch_SteamVR_DisplayDebugX_Int32","consttype": "const char *const", "constval": "displayDebugX"} +,{ + "constname": "k_pch_SteamVR_DisplayDebugY_Int32","consttype": "const char *const", "constval": "displayDebugY"} +,{ + "constname": "k_pch_SteamVR_SendSystemButtonToAllApps_Bool","consttype": "const char *const", "constval": "sendSystemButtonToAllApps"} +,{ + "constname": "k_pch_SteamVR_LogLevel_Int32","consttype": "const char *const", "constval": "loglevel"} +,{ + "constname": "k_pch_SteamVR_IPD_Float","consttype": "const char *const", "constval": "ipd"} +,{ + "constname": "k_pch_SteamVR_Background_String","consttype": "const char *const", "constval": "background"} +,{ + "constname": "k_pch_SteamVR_BackgroundUseDomeProjection_Bool","consttype": "const char *const", "constval": "backgroundUseDomeProjection"} +,{ + "constname": "k_pch_SteamVR_BackgroundCameraHeight_Float","consttype": "const char *const", "constval": "backgroundCameraHeight"} +,{ + "constname": "k_pch_SteamVR_BackgroundDomeRadius_Float","consttype": "const char *const", "constval": "backgroundDomeRadius"} +,{ + "constname": "k_pch_SteamVR_GridColor_String","consttype": "const char *const", "constval": "gridColor"} +,{ + "constname": "k_pch_SteamVR_PlayAreaColor_String","consttype": "const char *const", "constval": "playAreaColor"} +,{ + "constname": "k_pch_SteamVR_TrackingLossColor_String","consttype": "const char *const", "constval": "trackingLossColor"} +,{ + "constname": "k_pch_SteamVR_ShowStage_Bool","consttype": "const char *const", "constval": "showStage"} +,{ + "constname": "k_pch_SteamVR_DrawTrackingReferences_Bool","consttype": "const char *const", "constval": "drawTrackingReferences"} +,{ + "constname": "k_pch_SteamVR_ActivateMultipleDrivers_Bool","consttype": "const char *const", "constval": "activateMultipleDrivers"} +,{ + "constname": "k_pch_SteamVR_UsingSpeakers_Bool","consttype": "const char *const", "constval": "usingSpeakers"} +,{ + "constname": "k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float","consttype": "const char *const", "constval": "speakersForwardYawOffsetDegrees"} +,{ + "constname": "k_pch_SteamVR_BaseStationPowerManagement_Int32","consttype": "const char *const", "constval": "basestationPowerManagement"} +,{ + "constname": "k_pch_SteamVR_ShowBaseStationPowerManagementTip_Int32","consttype": "const char *const", "constval": "ShowBaseStationPowerManagementTip"} +,{ + "constname": "k_pch_SteamVR_NeverKillProcesses_Bool","consttype": "const char *const", "constval": "neverKillProcesses"} +,{ + "constname": "k_pch_SteamVR_SupersampleScale_Float","consttype": "const char *const", "constval": "supersampleScale"} +,{ + "constname": "k_pch_SteamVR_MaxRecommendedResolution_Int32","consttype": "const char *const", "constval": "maxRecommendedResolution"} +,{ + "constname": "k_pch_SteamVR_MotionSmoothing_Bool","consttype": "const char *const", "constval": "motionSmoothing"} +,{ + "constname": "k_pch_SteamVR_MotionSmoothingOverride_Int32","consttype": "const char *const", "constval": "motionSmoothingOverride"} +,{ + "constname": "k_pch_SteamVR_FramesToThrottle_Int32","consttype": "const char *const", "constval": "framesToThrottle"} +,{ + "constname": "k_pch_SteamVR_AdditionalFramesToPredict_Int32","consttype": "const char *const", "constval": "additionalFramesToPredict"} +,{ + "constname": "k_pch_SteamVR_DisableAsyncReprojection_Bool","consttype": "const char *const", "constval": "disableAsync"} +,{ + "constname": "k_pch_SteamVR_ForceFadeOnBadTracking_Bool","consttype": "const char *const", "constval": "forceFadeOnBadTracking"} +,{ + "constname": "k_pch_SteamVR_DefaultMirrorView_Int32","consttype": "const char *const", "constval": "mirrorView"} +,{ + "constname": "k_pch_SteamVR_ShowLegacyMirrorView_Bool","consttype": "const char *const", "constval": "showLegacyMirrorView"} +,{ + "constname": "k_pch_SteamVR_MirrorViewVisibility_Bool","consttype": "const char *const", "constval": "showMirrorView"} +,{ + "constname": "k_pch_SteamVR_MirrorViewDisplayMode_Int32","consttype": "const char *const", "constval": "mirrorViewDisplayMode"} +,{ + "constname": "k_pch_SteamVR_MirrorViewEye_Int32","consttype": "const char *const", "constval": "mirrorViewEye"} +,{ + "constname": "k_pch_SteamVR_MirrorViewGeometry_String","consttype": "const char *const", "constval": "mirrorViewGeometry"} +,{ + "constname": "k_pch_SteamVR_MirrorViewGeometryMaximized_String","consttype": "const char *const", "constval": "mirrorViewGeometryMaximized"} +,{ + "constname": "k_pch_SteamVR_PerfGraphVisibility_Bool","consttype": "const char *const", "constval": "showPerfGraph"} +,{ + "constname": "k_pch_SteamVR_StartMonitorFromAppLaunch","consttype": "const char *const", "constval": "startMonitorFromAppLaunch"} +,{ + "constname": "k_pch_SteamVR_StartCompositorFromAppLaunch_Bool","consttype": "const char *const", "constval": "startCompositorFromAppLaunch"} +,{ + "constname": "k_pch_SteamVR_StartDashboardFromAppLaunch_Bool","consttype": "const char *const", "constval": "startDashboardFromAppLaunch"} +,{ + "constname": "k_pch_SteamVR_StartOverlayAppsFromDashboard_Bool","consttype": "const char *const", "constval": "startOverlayAppsFromDashboard"} +,{ + "constname": "k_pch_SteamVR_EnableHomeApp","consttype": "const char *const", "constval": "enableHomeApp"} +,{ + "constname": "k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32","consttype": "const char *const", "constval": "CycleBackgroundImageTimeSec"} +,{ + "constname": "k_pch_SteamVR_RetailDemo_Bool","consttype": "const char *const", "constval": "retailDemo"} +,{ + "constname": "k_pch_SteamVR_IpdOffset_Float","consttype": "const char *const", "constval": "ipdOffset"} +,{ + "constname": "k_pch_SteamVR_AllowSupersampleFiltering_Bool","consttype": "const char *const", "constval": "allowSupersampleFiltering"} +,{ + "constname": "k_pch_SteamVR_SupersampleManualOverride_Bool","consttype": "const char *const", "constval": "supersampleManualOverride"} +,{ + "constname": "k_pch_SteamVR_EnableLinuxVulkanAsync_Bool","consttype": "const char *const", "constval": "enableLinuxVulkanAsync"} +,{ + "constname": "k_pch_SteamVR_AllowDisplayLockedMode_Bool","consttype": "const char *const", "constval": "allowDisplayLockedMode"} +,{ + "constname": "k_pch_SteamVR_HaveStartedTutorialForNativeChaperoneDriver_Bool","consttype": "const char *const", "constval": "haveStartedTutorialForNativeChaperoneDriver"} +,{ + "constname": "k_pch_SteamVR_ForceWindows32bitVRMonitor","consttype": "const char *const", "constval": "forceWindows32BitVRMonitor"} +,{ + "constname": "k_pch_SteamVR_DebugInputBinding","consttype": "const char *const", "constval": "debugInputBinding"} +,{ + "constname": "k_pch_SteamVR_DoNotFadeToGrid","consttype": "const char *const", "constval": "doNotFadeToGrid"} +,{ + "constname": "k_pch_SteamVR_RenderCameraMode","consttype": "const char *const", "constval": "renderCameraMode"} +,{ + "constname": "k_pch_SteamVR_EnableSharedResourceJournaling","consttype": "const char *const", "constval": "enableSharedResourceJournaling"} +,{ + "constname": "k_pch_SteamVR_EnableSafeMode","consttype": "const char *const", "constval": "enableSafeMode"} +,{ + "constname": "k_pch_SteamVR_PreferredRefreshRate","consttype": "const char *const", "constval": "preferredRefreshRate"} +,{ + "constname": "k_pch_SteamVR_LastVersionNotice","consttype": "const char *const", "constval": "lastVersionNotice"} +,{ + "constname": "k_pch_SteamVR_LastVersionNoticeDate","consttype": "const char *const", "constval": "lastVersionNoticeDate"} +,{ + "constname": "k_pch_SteamVR_HmdDisplayColorGainR_Float","consttype": "const char *const", "constval": "hmdDisplayColorGainR"} +,{ + "constname": "k_pch_SteamVR_HmdDisplayColorGainG_Float","consttype": "const char *const", "constval": "hmdDisplayColorGainG"} +,{ + "constname": "k_pch_SteamVR_HmdDisplayColorGainB_Float","consttype": "const char *const", "constval": "hmdDisplayColorGainB"} +,{ + "constname": "k_pch_SteamVR_CustomIconStyle_String","consttype": "const char *const", "constval": "customIconStyle"} +,{ + "constname": "k_pch_SteamVR_CustomOffIconStyle_String","consttype": "const char *const", "constval": "customOffIconStyle"} +,{ + "constname": "k_pch_SteamVR_CustomIconForceUpdate_String","consttype": "const char *const", "constval": "customIconForceUpdate"} +,{ + "constname": "k_pch_SteamVR_AllowGlobalActionSetPriority","consttype": "const char *const", "constval": "globalActionSetPriority"} +,{ + "constname": "k_pch_SteamVR_OverlayRenderQuality","consttype": "const char *const", "constval": "overlayRenderQuality_2"} +,{ + "constname": "k_pch_SteamVR_BlockOculusSDKOnOpenVRLaunchOption_Bool","consttype": "const char *const", "constval": "blockOculusSDKOnOpenVRLaunchOption"} +,{ + "constname": "k_pch_SteamVR_BlockOculusSDKOnAllLaunches_Bool","consttype": "const char *const", "constval": "blockOculusSDKOnAllLaunches"} +,{ + "constname": "k_pch_SteamVR_HDCPLegacyCompatibility_Bool","consttype": "const char *const", "constval": "hdcp14legacyCompatibility"} +,{ + "constname": "k_pch_SteamVR_UsePrism_Bool","consttype": "const char *const", "constval": "usePrism"} +,{ + "constname": "k_pch_DirectMode_Section","consttype": "const char *const", "constval": "direct_mode"} +,{ + "constname": "k_pch_DirectMode_Enable_Bool","consttype": "const char *const", "constval": "enable"} +,{ + "constname": "k_pch_DirectMode_Count_Int32","consttype": "const char *const", "constval": "count"} +,{ + "constname": "k_pch_DirectMode_EdidVid_Int32","consttype": "const char *const", "constval": "edidVid"} +,{ + "constname": "k_pch_DirectMode_EdidPid_Int32","consttype": "const char *const", "constval": "edidPid"} +,{ + "constname": "k_pch_Lighthouse_Section","consttype": "const char *const", "constval": "driver_lighthouse"} +,{ + "constname": "k_pch_Lighthouse_DisableIMU_Bool","consttype": "const char *const", "constval": "disableimu"} +,{ + "constname": "k_pch_Lighthouse_DisableIMUExceptHMD_Bool","consttype": "const char *const", "constval": "disableimuexcepthmd"} +,{ + "constname": "k_pch_Lighthouse_UseDisambiguation_String","consttype": "const char *const", "constval": "usedisambiguation"} +,{ + "constname": "k_pch_Lighthouse_DisambiguationDebug_Int32","consttype": "const char *const", "constval": "disambiguationdebug"} +,{ + "constname": "k_pch_Lighthouse_PrimaryBasestation_Int32","consttype": "const char *const", "constval": "primarybasestation"} +,{ + "constname": "k_pch_Lighthouse_DBHistory_Bool","consttype": "const char *const", "constval": "dbhistory"} +,{ + "constname": "k_pch_Lighthouse_EnableBluetooth_Bool","consttype": "const char *const", "constval": "enableBluetooth"} +,{ + "constname": "k_pch_Lighthouse_PowerManagedBaseStations_String","consttype": "const char *const", "constval": "PowerManagedBaseStations"} +,{ + "constname": "k_pch_Lighthouse_PowerManagedBaseStations2_String","consttype": "const char *const", "constval": "PowerManagedBaseStations2"} +,{ + "constname": "k_pch_Lighthouse_InactivityTimeoutForBaseStations_Int32","consttype": "const char *const", "constval": "InactivityTimeoutForBaseStations"} +,{ + "constname": "k_pch_Lighthouse_EnableImuFallback_Bool","consttype": "const char *const", "constval": "enableImuFallback"} +,{ + "constname": "k_pch_Null_Section","consttype": "const char *const", "constval": "driver_null"} +,{ + "constname": "k_pch_Null_SerialNumber_String","consttype": "const char *const", "constval": "serialNumber"} +,{ + "constname": "k_pch_Null_ModelNumber_String","consttype": "const char *const", "constval": "modelNumber"} +,{ + "constname": "k_pch_Null_WindowX_Int32","consttype": "const char *const", "constval": "windowX"} +,{ + "constname": "k_pch_Null_WindowY_Int32","consttype": "const char *const", "constval": "windowY"} +,{ + "constname": "k_pch_Null_WindowWidth_Int32","consttype": "const char *const", "constval": "windowWidth"} +,{ + "constname": "k_pch_Null_WindowHeight_Int32","consttype": "const char *const", "constval": "windowHeight"} +,{ + "constname": "k_pch_Null_RenderWidth_Int32","consttype": "const char *const", "constval": "renderWidth"} +,{ + "constname": "k_pch_Null_RenderHeight_Int32","consttype": "const char *const", "constval": "renderHeight"} +,{ + "constname": "k_pch_Null_SecondsFromVsyncToPhotons_Float","consttype": "const char *const", "constval": "secondsFromVsyncToPhotons"} +,{ + "constname": "k_pch_Null_DisplayFrequency_Float","consttype": "const char *const", "constval": "displayFrequency"} +,{ + "constname": "k_pch_WindowsMR_Section","consttype": "const char *const", "constval": "driver_holographic"} +,{ + "constname": "k_pch_UserInterface_Section","consttype": "const char *const", "constval": "userinterface"} +,{ + "constname": "k_pch_UserInterface_StatusAlwaysOnTop_Bool","consttype": "const char *const", "constval": "StatusAlwaysOnTop"} +,{ + "constname": "k_pch_UserInterface_MinimizeToTray_Bool","consttype": "const char *const", "constval": "MinimizeToTray"} +,{ + "constname": "k_pch_UserInterface_HidePopupsWhenStatusMinimized_Bool","consttype": "const char *const", "constval": "HidePopupsWhenStatusMinimized"} +,{ + "constname": "k_pch_UserInterface_Screenshots_Bool","consttype": "const char *const", "constval": "screenshots"} +,{ + "constname": "k_pch_UserInterface_ScreenshotType_Int","consttype": "const char *const", "constval": "screenshotType"} +,{ + "constname": "k_pch_Notifications_Section","consttype": "const char *const", "constval": "notifications"} +,{ + "constname": "k_pch_Notifications_DoNotDisturb_Bool","consttype": "const char *const", "constval": "DoNotDisturb"} +,{ + "constname": "k_pch_Keyboard_Section","consttype": "const char *const", "constval": "keyboard"} +,{ + "constname": "k_pch_Keyboard_TutorialCompletions","consttype": "const char *const", "constval": "TutorialCompletions"} +,{ + "constname": "k_pch_Keyboard_ScaleX","consttype": "const char *const", "constval": "ScaleX"} +,{ + "constname": "k_pch_Keyboard_ScaleY","consttype": "const char *const", "constval": "ScaleY"} +,{ + "constname": "k_pch_Keyboard_OffsetLeftX","consttype": "const char *const", "constval": "OffsetLeftX"} +,{ + "constname": "k_pch_Keyboard_OffsetRightX","consttype": "const char *const", "constval": "OffsetRightX"} +,{ + "constname": "k_pch_Keyboard_OffsetY","consttype": "const char *const", "constval": "OffsetY"} +,{ + "constname": "k_pch_Keyboard_Smoothing","consttype": "const char *const", "constval": "Smoothing"} +,{ + "constname": "k_pch_Perf_Section","consttype": "const char *const", "constval": "perfcheck"} +,{ + "constname": "k_pch_Perf_PerfGraphInHMD_Bool","consttype": "const char *const", "constval": "perfGraphInHMD"} +,{ + "constname": "k_pch_Perf_AllowTimingStore_Bool","consttype": "const char *const", "constval": "allowTimingStore"} +,{ + "constname": "k_pch_Perf_SaveTimingsOnExit_Bool","consttype": "const char *const", "constval": "saveTimingsOnExit"} +,{ + "constname": "k_pch_Perf_TestData_Float","consttype": "const char *const", "constval": "perfTestData"} +,{ + "constname": "k_pch_Perf_GPUProfiling_Bool","consttype": "const char *const", "constval": "GPUProfiling"} +,{ + "constname": "k_pch_CollisionBounds_Section","consttype": "const char *const", "constval": "collisionBounds"} +,{ + "constname": "k_pch_CollisionBounds_Style_Int32","consttype": "const char *const", "constval": "CollisionBoundsStyle"} +,{ + "constname": "k_pch_CollisionBounds_GroundPerimeterOn_Bool","consttype": "const char *const", "constval": "CollisionBoundsGroundPerimeterOn"} +,{ + "constname": "k_pch_CollisionBounds_CenterMarkerOn_Bool","consttype": "const char *const", "constval": "CollisionBoundsCenterMarkerOn"} +,{ + "constname": "k_pch_CollisionBounds_PlaySpaceOn_Bool","consttype": "const char *const", "constval": "CollisionBoundsPlaySpaceOn"} +,{ + "constname": "k_pch_CollisionBounds_FadeDistance_Float","consttype": "const char *const", "constval": "CollisionBoundsFadeDistance"} +,{ + "constname": "k_pch_CollisionBounds_WallHeight_Float","consttype": "const char *const", "constval": "CollisionBoundsWallHeight"} +,{ + "constname": "k_pch_CollisionBounds_ColorGammaR_Int32","consttype": "const char *const", "constval": "CollisionBoundsColorGammaR"} +,{ + "constname": "k_pch_CollisionBounds_ColorGammaG_Int32","consttype": "const char *const", "constval": "CollisionBoundsColorGammaG"} +,{ + "constname": "k_pch_CollisionBounds_ColorGammaB_Int32","consttype": "const char *const", "constval": "CollisionBoundsColorGammaB"} +,{ + "constname": "k_pch_CollisionBounds_ColorGammaA_Int32","consttype": "const char *const", "constval": "CollisionBoundsColorGammaA"} +,{ + "constname": "k_pch_CollisionBounds_EnableDriverImport","consttype": "const char *const", "constval": "enableDriverBoundsImport"} +,{ + "constname": "k_pch_Camera_Section","consttype": "const char *const", "constval": "camera"} +,{ + "constname": "k_pch_Camera_EnableCamera_Bool","consttype": "const char *const", "constval": "enableCamera"} +,{ + "constname": "k_pch_Camera_ShowOnController_Bool","consttype": "const char *const", "constval": "showOnController"} +,{ + "constname": "k_pch_Camera_EnableCameraForCollisionBounds_Bool","consttype": "const char *const", "constval": "enableCameraForCollisionBounds"} +,{ + "constname": "k_pch_Camera_RoomView_Int32","consttype": "const char *const", "constval": "roomView"} +,{ + "constname": "k_pch_Camera_BoundsColorGammaR_Int32","consttype": "const char *const", "constval": "cameraBoundsColorGammaR"} +,{ + "constname": "k_pch_Camera_BoundsColorGammaG_Int32","consttype": "const char *const", "constval": "cameraBoundsColorGammaG"} +,{ + "constname": "k_pch_Camera_BoundsColorGammaB_Int32","consttype": "const char *const", "constval": "cameraBoundsColorGammaB"} +,{ + "constname": "k_pch_Camera_BoundsColorGammaA_Int32","consttype": "const char *const", "constval": "cameraBoundsColorGammaA"} +,{ + "constname": "k_pch_Camera_BoundsStrength_Int32","consttype": "const char *const", "constval": "cameraBoundsStrength"} +,{ + "constname": "k_pch_Camera_RoomViewStyle_Int32","consttype": "const char *const", "constval": "roomViewStyle"} +,{ + "constname": "k_pch_audio_Section","consttype": "const char *const", "constval": "audio"} +,{ + "constname": "k_pch_audio_SetOsDefaultPlaybackDevice_Bool","consttype": "const char *const", "constval": "setOsDefaultPlaybackDevice"} +,{ + "constname": "k_pch_audio_EnablePlaybackDeviceOverride_Bool","consttype": "const char *const", "constval": "enablePlaybackDeviceOverride"} +,{ + "constname": "k_pch_audio_PlaybackDeviceOverride_String","consttype": "const char *const", "constval": "playbackDeviceOverride"} +,{ + "constname": "k_pch_audio_PlaybackDeviceOverrideName_String","consttype": "const char *const", "constval": "playbackDeviceOverrideName"} +,{ + "constname": "k_pch_audio_SetOsDefaultRecordingDevice_Bool","consttype": "const char *const", "constval": "setOsDefaultRecordingDevice"} +,{ + "constname": "k_pch_audio_EnableRecordingDeviceOverride_Bool","consttype": "const char *const", "constval": "enableRecordingDeviceOverride"} +,{ + "constname": "k_pch_audio_RecordingDeviceOverride_String","consttype": "const char *const", "constval": "recordingDeviceOverride"} +,{ + "constname": "k_pch_audio_RecordingDeviceOverrideName_String","consttype": "const char *const", "constval": "recordingDeviceOverrideName"} +,{ + "constname": "k_pch_audio_EnablePlaybackMirror_Bool","consttype": "const char *const", "constval": "enablePlaybackMirror"} +,{ + "constname": "k_pch_audio_PlaybackMirrorDevice_String","consttype": "const char *const", "constval": "playbackMirrorDevice"} +,{ + "constname": "k_pch_audio_PlaybackMirrorDeviceName_String","consttype": "const char *const", "constval": "playbackMirrorDeviceName"} +,{ + "constname": "k_pch_audio_OldPlaybackMirrorDevice_String","consttype": "const char *const", "constval": "onPlaybackMirrorDevice"} +,{ + "constname": "k_pch_audio_ActiveMirrorDevice_String","consttype": "const char *const", "constval": "activePlaybackMirrorDevice"} +,{ + "constname": "k_pch_audio_EnablePlaybackMirrorIndependentVolume_Bool","consttype": "const char *const", "constval": "enablePlaybackMirrorIndependentVolume"} +,{ + "constname": "k_pch_audio_LastHmdPlaybackDeviceId_String","consttype": "const char *const", "constval": "lastHmdPlaybackDeviceId"} +,{ + "constname": "k_pch_audio_VIVEHDMIGain","consttype": "const char *const", "constval": "viveHDMIGain"} +,{ + "constname": "k_pch_audio_DualSpeakerAndJackOutput_Bool","consttype": "const char *const", "constval": "dualSpeakerAndJackOutput"} +,{ + "constname": "k_pch_audio_MuteMicMonitor_Bool","consttype": "const char *const", "constval": "muteMicMonitor"} +,{ + "constname": "k_pch_Power_Section","consttype": "const char *const", "constval": "power"} +,{ + "constname": "k_pch_Power_PowerOffOnExit_Bool","consttype": "const char *const", "constval": "powerOffOnExit"} +,{ + "constname": "k_pch_Power_TurnOffScreensTimeout_Float","consttype": "const char *const", "constval": "turnOffScreensTimeout"} +,{ + "constname": "k_pch_Power_TurnOffControllersTimeout_Float","consttype": "const char *const", "constval": "turnOffControllersTimeout"} +,{ + "constname": "k_pch_Power_ReturnToWatchdogTimeout_Float","consttype": "const char *const", "constval": "returnToWatchdogTimeout"} +,{ + "constname": "k_pch_Power_AutoLaunchSteamVROnButtonPress","consttype": "const char *const", "constval": "autoLaunchSteamVROnButtonPress"} +,{ + "constname": "k_pch_Power_PauseCompositorOnStandby_Bool","consttype": "const char *const", "constval": "pauseCompositorOnStandby"} +,{ + "constname": "k_pch_Dashboard_Section","consttype": "const char *const", "constval": "dashboard"} +,{ + "constname": "k_pch_Dashboard_EnableDashboard_Bool","consttype": "const char *const", "constval": "enableDashboard"} +,{ + "constname": "k_pch_Dashboard_ArcadeMode_Bool","consttype": "const char *const", "constval": "arcadeMode"} +,{ + "constname": "k_pch_Dashboard_Position","consttype": "const char *const", "constval": "position"} +,{ + "constname": "k_pch_Dashboard_DesktopScale","consttype": "const char *const", "constval": "desktopScale"} +,{ + "constname": "k_pch_Dashboard_DashboardScale","consttype": "const char *const", "constval": "dashboardScale"} +,{ + "constname": "k_pch_Dashboard_UseStandaloneSystemLayer","consttype": "const char *const", "constval": "standaloneSystemLayer"} +,{ + "constname": "k_pch_modelskin_Section","consttype": "const char *const", "constval": "modelskins"} +,{ + "constname": "k_pch_Driver_Enable_Bool","consttype": "const char *const", "constval": "enable"} +,{ + "constname": "k_pch_Driver_BlockedBySafemode_Bool","consttype": "const char *const", "constval": "blocked_by_safe_mode"} +,{ + "constname": "k_pch_Driver_LoadPriority_Int32","consttype": "const char *const", "constval": "loadPriority"} +,{ + "constname": "k_pch_WebInterface_Section","consttype": "const char *const", "constval": "WebInterface"} +,{ + "constname": "k_pch_VRWebHelper_Section","consttype": "const char *const", "constval": "VRWebHelper"} +,{ + "constname": "k_pch_VRWebHelper_DebuggerEnabled_Bool","consttype": "const char *const", "constval": "DebuggerEnabled"} +,{ + "constname": "k_pch_VRWebHelper_DebuggerPort_Int32","consttype": "const char *const", "constval": "DebuggerPort"} +,{ + "constname": "k_pch_TrackingOverride_Section","consttype": "const char *const", "constval": "TrackingOverrides"} +,{ + "constname": "k_pch_App_BindingAutosaveURLSuffix_String","consttype": "const char *const", "constval": "AutosaveURL"} +,{ + "constname": "k_pch_App_BindingLegacyAPISuffix_String","consttype": "const char *const", "constval": "_legacy"} +,{ + "constname": "k_pch_App_BindingSteamVRInputAPISuffix_String","consttype": "const char *const", "constval": "_steamvrinput"} +,{ + "constname": "k_pch_App_BindingCurrentURLSuffix_String","consttype": "const char *const", "constval": "CurrentURL"} +,{ + "constname": "k_pch_App_BindingPreviousURLSuffix_String","consttype": "const char *const", "constval": "PreviousURL"} +,{ + "constname": "k_pch_App_NeedToUpdateAutosaveSuffix_Bool","consttype": "const char *const", "constval": "NeedToUpdateAutosave"} +,{ + "constname": "k_pch_App_DominantHand_Int32","consttype": "const char *const", "constval": "DominantHand"} +,{ + "constname": "k_pch_App_BlockOculusSDK_Bool","consttype": "const char *const", "constval": "blockOculusSDK"} +,{ + "constname": "k_pch_Trackers_Section","consttype": "const char *const", "constval": "trackers"} +,{ + "constname": "k_pch_DesktopUI_Section","consttype": "const char *const", "constval": "DesktopUI"} +,{ + "constname": "k_pch_LastKnown_Section","consttype": "const char *const", "constval": "LastKnown"} +,{ + "constname": "k_pch_LastKnown_HMDManufacturer_String","consttype": "const char *const", "constval": "HMDManufacturer"} +,{ + "constname": "k_pch_LastKnown_HMDModel_String","consttype": "const char *const", "constval": "HMDModel"} +,{ + "constname": "k_pch_DismissedWarnings_Section","consttype": "const char *const", "constval": "DismissedWarnings"} +,{ + "constname": "k_pch_Input_Section","consttype": "const char *const", "constval": "input"} +,{ + "constname": "k_pch_Input_LeftThumbstickRotation_Float","consttype": "const char *const", "constval": "leftThumbstickRotation"} +,{ + "constname": "k_pch_Input_RightThumbstickRotation_Float","consttype": "const char *const", "constval": "rightThumbstickRotation"} +,{ + "constname": "k_pch_Input_ThumbstickDeadzone_Float","consttype": "const char *const", "constval": "thumbstickDeadzone"} +,{ + "constname": "k_pch_GpuSpeed_Section","consttype": "const char *const", "constval": "GpuSpeed"} +,{ + "constname": "IVRScreenshots_Version","consttype": "const char *const", "constval": "IVRScreenshots_001"} +,{ + "constname": "IVRResources_Version","consttype": "const char *const", "constval": "IVRResources_001"} +,{ + "constname": "IVRDriverManager_Version","consttype": "const char *const", "constval": "IVRDriverManager_001"} +,{ + "constname": "k_unMaxActionNameLength","consttype": "const uint32_t", "constval": "64"} +,{ + "constname": "k_unMaxActionSetNameLength","consttype": "const uint32_t", "constval": "64"} +,{ + "constname": "k_unMaxActionOriginCount","consttype": "const uint32_t", "constval": "16"} +,{ + "constname": "k_unMaxBoneNameLength","consttype": "const uint32_t", "constval": "32"} +,{ + "constname": "k_nActionSetOverlayGlobalPriorityMin","consttype": "const int32_t", "constval": "16777216"} +,{ + "constname": "k_nActionSetOverlayGlobalPriorityMax","consttype": "const int32_t", "constval": "33554431"} +,{ + "constname": "k_nActionSetPriorityReservedMin","consttype": "const int32_t", "constval": "33554432"} +,{ + "constname": "IVRInput_Version","consttype": "const char *const", "constval": "IVRInput_010"} +,{ + "constname": "k_ulInvalidIOBufferHandle","consttype": "const uint64_t", "constval": "0"} +,{ + "constname": "IVRIOBuffer_Version","consttype": "const char *", "constval": "IVRIOBuffer_002"} +,{ + "constname": "k_ulInvalidSpatialAnchorHandle","consttype": "const SpatialAnchorHandle_t", "constval": "0"} +,{ + "constname": "IVRSpatialAnchors_Version","consttype": "const char *const", "constval": "IVRSpatialAnchors_001"} +,{ + "constname": "IVRDebug_Version","consttype": "const char *const", "constval": "IVRDebug_001"} +,{ + "constname": "k_ulDisplayRedirectContainer","consttype": "const PropertyContainerHandle_t", "constval": "25769803779"} +,{ + "constname": "IVRProperties_Version","consttype": "const char *const", "constval": "IVRProperties_001"} +,{ + "constname": "k_pchPathUserHandRight","consttype": "const char *", "constval": "/user/hand/right"} +,{ + "constname": "k_pchPathUserHandLeft","consttype": "const char *", "constval": "/user/hand/left"} +,{ + "constname": "k_pchPathUserHandPrimary","consttype": "const char *", "constval": "/user/hand/primary"} +,{ + "constname": "k_pchPathUserHandSecondary","consttype": "const char *", "constval": "/user/hand/secondary"} +,{ + "constname": "k_pchPathUserHead","consttype": "const char *", "constval": "/user/head"} +,{ + "constname": "k_pchPathUserGamepad","consttype": "const char *", "constval": "/user/gamepad"} +,{ + "constname": "k_pchPathUserTreadmill","consttype": "const char *", "constval": "/user/treadmill"} +,{ + "constname": "k_pchPathUserStylus","consttype": "const char *", "constval": "/user/stylus"} +,{ + "constname": "k_pchPathDevices","consttype": "const char *", "constval": "/devices"} +,{ + "constname": "k_pchPathDevicePath","consttype": "const char *", "constval": "/device_path"} +,{ + "constname": "k_pchPathBestAliasPath","consttype": "const char *", "constval": "/best_alias_path"} +,{ + "constname": "k_pchPathBoundTrackerAliasPath","consttype": "const char *", "constval": "/bound_tracker_path"} +,{ + "constname": "k_pchPathBoundTrackerRole","consttype": "const char *", "constval": "/bound_tracker_role"} +,{ + "constname": "k_pchPathPoseRaw","consttype": "const char *", "constval": "/pose/raw"} +,{ + "constname": "k_pchPathPoseTip","consttype": "const char *", "constval": "/pose/tip"} +,{ + "constname": "k_pchPathPoseGrip","consttype": "const char *", "constval": "/pose/grip"} +,{ + "constname": "k_pchPathSystemButtonClick","consttype": "const char *", "constval": "/input/system/click"} +,{ + "constname": "k_pchPathProximity","consttype": "const char *", "constval": "/proximity"} +,{ + "constname": "k_pchPathControllerTypePrefix","consttype": "const char *", "constval": "/controller_type/"} +,{ + "constname": "k_pchPathInputProfileSuffix","consttype": "const char *", "constval": "/input_profile"} +,{ + "constname": "k_pchPathBindingNameSuffix","consttype": "const char *", "constval": "/binding_name"} +,{ + "constname": "k_pchPathBindingUrlSuffix","consttype": "const char *", "constval": "/binding_url"} +,{ + "constname": "k_pchPathBindingErrorSuffix","consttype": "const char *", "constval": "/binding_error"} +,{ + "constname": "k_pchPathActiveActionSets","consttype": "const char *", "constval": "/active_action_sets"} +,{ + "constname": "k_pchPathComponentUpdates","consttype": "const char *", "constval": "/total_component_updates"} +,{ + "constname": "k_pchPathUserFootLeft","consttype": "const char *", "constval": "/user/foot/left"} +,{ + "constname": "k_pchPathUserFootRight","consttype": "const char *", "constval": "/user/foot/right"} +,{ + "constname": "k_pchPathUserShoulderLeft","consttype": "const char *", "constval": "/user/shoulder/left"} +,{ + "constname": "k_pchPathUserShoulderRight","consttype": "const char *", "constval": "/user/shoulder/right"} +,{ + "constname": "k_pchPathUserElbowLeft","consttype": "const char *", "constval": "/user/elbow/left"} +,{ + "constname": "k_pchPathUserElbowRight","consttype": "const char *", "constval": "/user/elbow/right"} +,{ + "constname": "k_pchPathUserKneeLeft","consttype": "const char *", "constval": "/user/knee/left"} +,{ + "constname": "k_pchPathUserKneeRight","consttype": "const char *", "constval": "/user/knee/right"} +,{ + "constname": "k_pchPathUserWaist","consttype": "const char *", "constval": "/user/waist"} +,{ + "constname": "k_pchPathUserChest","consttype": "const char *", "constval": "/user/chest"} +,{ + "constname": "k_pchPathUserCamera","consttype": "const char *", "constval": "/user/camera"} +,{ + "constname": "k_pchPathUserKeyboard","consttype": "const char *", "constval": "/user/keyboard"} +,{ + "constname": "k_pchPathClientAppKey","consttype": "const char *", "constval": "/client_info/app_key"} +,{ + "constname": "k_ulInvalidPathHandle","consttype": "const PathHandle_t", "constval": "0"} +,{ + "constname": "IVRPaths_Version","consttype": "const char *const", "constval": "IVRPaths_001"} +,{ + "constname": "IVRBlockQueue_Version","consttype": "const char *", "constval": "IVRBlockQueue_004"} +], +"structs":[{"struct": "vr::HmdMatrix34_t","fields": [ +{ "fieldname": "m", "fieldtype": "float [3][4]"}]} +,{"struct": "vr::HmdMatrix33_t","fields": [ +{ "fieldname": "m", "fieldtype": "float [3][3]"}]} +,{"struct": "vr::HmdMatrix44_t","fields": [ +{ "fieldname": "m", "fieldtype": "float [4][4]"}]} +,{"struct": "vr::HmdVector3_t","fields": [ +{ "fieldname": "v", "fieldtype": "float [3]"}]} +,{"struct": "vr::HmdVector4_t","fields": [ +{ "fieldname": "v", "fieldtype": "float [4]"}]} +,{"struct": "vr::HmdVector3d_t","fields": [ +{ "fieldname": "v", "fieldtype": "double [3]"}]} +,{"struct": "vr::HmdVector2_t","fields": [ +{ "fieldname": "v", "fieldtype": "float [2]"}]} +,{"struct": "vr::HmdQuaternion_t","fields": [ +{ "fieldname": "w", "fieldtype": "double"}, +{ "fieldname": "x", "fieldtype": "double"}, +{ "fieldname": "y", "fieldtype": "double"}, +{ "fieldname": "z", "fieldtype": "double"}]} +,{"struct": "vr::HmdQuaternionf_t","fields": [ +{ "fieldname": "w", "fieldtype": "float"}, +{ "fieldname": "x", "fieldtype": "float"}, +{ "fieldname": "y", "fieldtype": "float"}, +{ "fieldname": "z", "fieldtype": "float"}]} +,{"struct": "vr::HmdColor_t","fields": [ +{ "fieldname": "r", "fieldtype": "float"}, +{ "fieldname": "g", "fieldtype": "float"}, +{ "fieldname": "b", "fieldtype": "float"}, +{ "fieldname": "a", "fieldtype": "float"}]} +,{"struct": "vr::HmdQuad_t","fields": [ +{ "fieldname": "vCorners", "fieldtype": "struct vr::HmdVector3_t [4]"}]} +,{"struct": "vr::HmdRect2_t","fields": [ +{ "fieldname": "vTopLeft", "fieldtype": "struct vr::HmdVector2_t"}, +{ "fieldname": "vBottomRight", "fieldtype": "struct vr::HmdVector2_t"}]} +,{"struct": "vr::VRBoneTransform_t","fields": [ +{ "fieldname": "position", "fieldtype": "struct vr::HmdVector4_t"}, +{ "fieldname": "orientation", "fieldtype": "struct vr::HmdQuaternionf_t"}]} +,{"struct": "vr::DistortionCoordinates_t","fields": [ +{ "fieldname": "rfRed", "fieldtype": "float [2]"}, +{ "fieldname": "rfGreen", "fieldtype": "float [2]"}, +{ "fieldname": "rfBlue", "fieldtype": "float [2]"}]} +,{"struct": "vr::Texture_t","fields": [ +{ "fieldname": "handle", "fieldtype": "void *"}, +{ "fieldname": "eType", "fieldtype": "enum vr::ETextureType"}, +{ "fieldname": "eColorSpace", "fieldtype": "enum vr::EColorSpace"}]} +,{"struct": "vr::TrackedDevicePose_t","fields": [ +{ "fieldname": "mDeviceToAbsoluteTracking", "fieldtype": "struct vr::HmdMatrix34_t"}, +{ "fieldname": "vVelocity", "fieldtype": "struct vr::HmdVector3_t"}, +{ "fieldname": "vAngularVelocity", "fieldtype": "struct vr::HmdVector3_t"}, +{ "fieldname": "eTrackingResult", "fieldtype": "enum vr::ETrackingResult"}, +{ "fieldname": "bPoseIsValid", "fieldtype": "_Bool"}, +{ "fieldname": "bDeviceIsConnected", "fieldtype": "_Bool"}]} +,{"struct": "vr::VRTextureBounds_t","fields": [ +{ "fieldname": "uMin", "fieldtype": "float"}, +{ "fieldname": "vMin", "fieldtype": "float"}, +{ "fieldname": "uMax", "fieldtype": "float"}, +{ "fieldname": "vMax", "fieldtype": "float"}]} +,{"struct": "vr::VRTextureWithPose_t","fields": [ +{ "fieldname": "mDeviceToAbsoluteTracking", "fieldtype": "struct vr::HmdMatrix34_t"}]} +,{"struct": "vr::VRTextureDepthInfo_t","fields": [ +{ "fieldname": "handle", "fieldtype": "void *"}, +{ "fieldname": "mProjection", "fieldtype": "struct vr::HmdMatrix44_t"}, +{ "fieldname": "vRange", "fieldtype": "struct vr::HmdVector2_t"}]} +,{"struct": "vr::VRTextureWithDepth_t","fields": [ +{ "fieldname": "depth", "fieldtype": "struct vr::VRTextureDepthInfo_t"}]} +,{"struct": "vr::VRTextureWithPoseAndDepth_t","fields": [ +{ "fieldname": "depth", "fieldtype": "struct vr::VRTextureDepthInfo_t"}]} +,{"struct": "vr::VRVulkanTextureData_t","fields": [ +{ "fieldname": "m_nImage", "fieldtype": "uint64_t"}, +{ "fieldname": "m_pDevice", "fieldtype": "struct VkDevice_T *"}, +{ "fieldname": "m_pPhysicalDevice", "fieldtype": "struct VkPhysicalDevice_T *"}, +{ "fieldname": "m_pInstance", "fieldtype": "struct VkInstance_T *"}, +{ "fieldname": "m_pQueue", "fieldtype": "struct VkQueue_T *"}, +{ "fieldname": "m_nQueueFamilyIndex", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nWidth", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nHeight", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nFormat", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nSampleCount", "fieldtype": "uint32_t"}]} +,{"struct": "vr::VRVulkanTextureArrayData_t","fields": [ +{ "fieldname": "m_unArrayIndex", "fieldtype": "uint32_t"}, +{ "fieldname": "m_unArraySize", "fieldtype": "uint32_t"}]} +,{"struct": "vr::D3D12TextureData_t","fields": [ +{ "fieldname": "m_pResource", "fieldtype": "struct ID3D12Resource *"}, +{ "fieldname": "m_pCommandQueue", "fieldtype": "struct ID3D12CommandQueue *"}, +{ "fieldname": "m_nNodeMask", "fieldtype": "uint32_t"}]} +,{"struct": "vr::VREvent_Controller_t","fields": [ +{ "fieldname": "button", "fieldtype": "uint32_t"}]} +,{"struct": "vr::VREvent_Mouse_t","fields": [ +{ "fieldname": "x", "fieldtype": "float"}, +{ "fieldname": "y", "fieldtype": "float"}, +{ "fieldname": "button", "fieldtype": "uint32_t"}]} +,{"struct": "vr::VREvent_Scroll_t","fields": [ +{ "fieldname": "xdelta", "fieldtype": "float"}, +{ "fieldname": "ydelta", "fieldtype": "float"}, +{ "fieldname": "unused", "fieldtype": "uint32_t"}, +{ "fieldname": "viewportscale", "fieldtype": "float"}]} +,{"struct": "vr::VREvent_TouchPadMove_t","fields": [ +{ "fieldname": "bFingerDown", "fieldtype": "_Bool"}, +{ "fieldname": "flSecondsFingerDown", "fieldtype": "float"}, +{ "fieldname": "fValueXFirst", "fieldtype": "float"}, +{ "fieldname": "fValueYFirst", "fieldtype": "float"}, +{ "fieldname": "fValueXRaw", "fieldtype": "float"}, +{ "fieldname": "fValueYRaw", "fieldtype": "float"}]} +,{"struct": "vr::VREvent_Notification_t","fields": [ +{ "fieldname": "ulUserValue", "fieldtype": "uint64_t"}, +{ "fieldname": "notificationId", "fieldtype": "uint32_t"}]} +,{"struct": "vr::VREvent_Process_t","fields": [ +{ "fieldname": "pid", "fieldtype": "uint32_t"}, +{ "fieldname": "oldPid", "fieldtype": "uint32_t"}, +{ "fieldname": "bForced", "fieldtype": "_Bool"}, +{ "fieldname": "bConnectionLost", "fieldtype": "_Bool"}]} +,{"struct": "vr::VREvent_Overlay_t","fields": [ +{ "fieldname": "overlayHandle", "fieldtype": "uint64_t"}, +{ "fieldname": "devicePath", "fieldtype": "uint64_t"}, +{ "fieldname": "memoryBlockId", "fieldtype": "uint64_t"}]} +,{"struct": "vr::VREvent_Status_t","fields": [ +{ "fieldname": "statusState", "fieldtype": "uint32_t"}]} +,{"struct": "vr::VREvent_Keyboard_t","fields": [ +{ "fieldname": "cNewInput", "fieldtype": "char [8]"}, +{ "fieldname": "uUserValue", "fieldtype": "uint64_t"}]} +,{"struct": "vr::VREvent_Ipd_t","fields": [ +{ "fieldname": "ipdMeters", "fieldtype": "float"}]} +,{"struct": "vr::VREvent_Chaperone_t","fields": [ +{ "fieldname": "m_nPreviousUniverse", "fieldtype": "uint64_t"}, +{ "fieldname": "m_nCurrentUniverse", "fieldtype": "uint64_t"}]} +,{"struct": "vr::VREvent_Reserved_t","fields": [ +{ "fieldname": "reserved0", "fieldtype": "uint64_t"}, +{ "fieldname": "reserved1", "fieldtype": "uint64_t"}, +{ "fieldname": "reserved2", "fieldtype": "uint64_t"}, +{ "fieldname": "reserved3", "fieldtype": "uint64_t"}, +{ "fieldname": "reserved4", "fieldtype": "uint64_t"}, +{ "fieldname": "reserved5", "fieldtype": "uint64_t"}]} +,{"struct": "vr::VREvent_PerformanceTest_t","fields": [ +{ "fieldname": "m_nFidelityLevel", "fieldtype": "uint32_t"}]} +,{"struct": "vr::VREvent_SeatedZeroPoseReset_t","fields": [ +{ "fieldname": "bResetBySystemMenu", "fieldtype": "_Bool"}]} +,{"struct": "vr::VREvent_Screenshot_t","fields": [ +{ "fieldname": "handle", "fieldtype": "uint32_t"}, +{ "fieldname": "type", "fieldtype": "uint32_t"}]} +,{"struct": "vr::VREvent_ScreenshotProgress_t","fields": [ +{ "fieldname": "progress", "fieldtype": "float"}]} +,{"struct": "vr::VREvent_ApplicationLaunch_t","fields": [ +{ "fieldname": "pid", "fieldtype": "uint32_t"}, +{ "fieldname": "unArgsHandle", "fieldtype": "uint32_t"}]} +,{"struct": "vr::VREvent_EditingCameraSurface_t","fields": [ +{ "fieldname": "overlayHandle", "fieldtype": "uint64_t"}, +{ "fieldname": "nVisualMode", "fieldtype": "uint32_t"}]} +,{"struct": "vr::VREvent_MessageOverlay_t","fields": [ +{ "fieldname": "unVRMessageOverlayResponse", "fieldtype": "uint32_t"}]} +,{"struct": "vr::VREvent_Property_t","fields": [ +{ "fieldname": "container", "fieldtype": "PropertyContainerHandle_t"}, +{ "fieldname": "prop", "fieldtype": "enum vr::ETrackedDeviceProperty"}]} +,{"struct": "vr::VREvent_HapticVibration_t","fields": [ +{ "fieldname": "containerHandle", "fieldtype": "uint64_t"}, +{ "fieldname": "componentHandle", "fieldtype": "uint64_t"}, +{ "fieldname": "fDurationSeconds", "fieldtype": "float"}, +{ "fieldname": "fFrequency", "fieldtype": "float"}, +{ "fieldname": "fAmplitude", "fieldtype": "float"}]} +,{"struct": "vr::VREvent_WebConsole_t","fields": [ +{ "fieldname": "webConsoleHandle", "fieldtype": "WebConsoleHandle_t"}]} +,{"struct": "vr::VREvent_InputBindingLoad_t","fields": [ +{ "fieldname": "ulAppContainer", "fieldtype": "vr::PropertyContainerHandle_t"}, +{ "fieldname": "pathMessage", "fieldtype": "uint64_t"}, +{ "fieldname": "pathUrl", "fieldtype": "uint64_t"}, +{ "fieldname": "pathControllerType", "fieldtype": "uint64_t"}]} +,{"struct": "vr::VREvent_InputActionManifestLoad_t","fields": [ +{ "fieldname": "pathAppKey", "fieldtype": "uint64_t"}, +{ "fieldname": "pathMessage", "fieldtype": "uint64_t"}, +{ "fieldname": "pathMessageParam", "fieldtype": "uint64_t"}, +{ "fieldname": "pathManifestPath", "fieldtype": "uint64_t"}]} +,{"struct": "vr::VREvent_SpatialAnchor_t","fields": [ +{ "fieldname": "unHandle", "fieldtype": "SpatialAnchorHandle_t"}]} +,{"struct": "vr::VREvent_ProgressUpdate_t","fields": [ +{ "fieldname": "ulApplicationPropertyContainer", "fieldtype": "uint64_t"}, +{ "fieldname": "pathDevice", "fieldtype": "uint64_t"}, +{ "fieldname": "pathInputSource", "fieldtype": "uint64_t"}, +{ "fieldname": "pathProgressAction", "fieldtype": "uint64_t"}, +{ "fieldname": "pathIcon", "fieldtype": "uint64_t"}, +{ "fieldname": "fProgress", "fieldtype": "float"}]} +,{"struct": "vr::VREvent_ShowUI_t","fields": [ +{ "fieldname": "eType", "fieldtype": "enum vr::EShowUIType"}]} +,{"struct": "vr::VREvent_ShowDevTools_t","fields": [ +{ "fieldname": "nBrowserIdentifier", "fieldtype": "int32_t"}]} +,{"struct": "vr::VREvent_HDCPError_t","fields": [ +{ "fieldname": "eCode", "fieldtype": "enum vr::EHDCPError"}]} +,{"struct": "vr::(anonymous)","fields": [ +{ "fieldname": "reserved", "fieldtype": "struct vr::VREvent_Reserved_t"}, +{ "fieldname": "controller", "fieldtype": "struct vr::VREvent_Controller_t"}, +{ "fieldname": "mouse", "fieldtype": "struct vr::VREvent_Mouse_t"}, +{ "fieldname": "scroll", "fieldtype": "struct vr::VREvent_Scroll_t"}, +{ "fieldname": "process", "fieldtype": "struct vr::VREvent_Process_t"}, +{ "fieldname": "notification", "fieldtype": "struct vr::VREvent_Notification_t"}, +{ "fieldname": "overlay", "fieldtype": "struct vr::VREvent_Overlay_t"}, +{ "fieldname": "status", "fieldtype": "struct vr::VREvent_Status_t"}, +{ "fieldname": "keyboard", "fieldtype": "struct vr::VREvent_Keyboard_t"}, +{ "fieldname": "ipd", "fieldtype": "struct vr::VREvent_Ipd_t"}, +{ "fieldname": "chaperone", "fieldtype": "struct vr::VREvent_Chaperone_t"}, +{ "fieldname": "performanceTest", "fieldtype": "struct vr::VREvent_PerformanceTest_t"}, +{ "fieldname": "touchPadMove", "fieldtype": "struct vr::VREvent_TouchPadMove_t"}, +{ "fieldname": "seatedZeroPoseReset", "fieldtype": "struct vr::VREvent_SeatedZeroPoseReset_t"}, +{ "fieldname": "screenshot", "fieldtype": "struct vr::VREvent_Screenshot_t"}, +{ "fieldname": "screenshotProgress", "fieldtype": "struct vr::VREvent_ScreenshotProgress_t"}, +{ "fieldname": "applicationLaunch", "fieldtype": "struct vr::VREvent_ApplicationLaunch_t"}, +{ "fieldname": "cameraSurface", "fieldtype": "struct vr::VREvent_EditingCameraSurface_t"}, +{ "fieldname": "messageOverlay", "fieldtype": "struct vr::VREvent_MessageOverlay_t"}, +{ "fieldname": "property", "fieldtype": "struct vr::VREvent_Property_t"}, +{ "fieldname": "hapticVibration", "fieldtype": "struct vr::VREvent_HapticVibration_t"}, +{ "fieldname": "webConsole", "fieldtype": "struct vr::VREvent_WebConsole_t"}, +{ "fieldname": "inputBinding", "fieldtype": "struct vr::VREvent_InputBindingLoad_t"}, +{ "fieldname": "actionManifest", "fieldtype": "struct vr::VREvent_InputActionManifestLoad_t"}, +{ "fieldname": "spatialAnchor", "fieldtype": "struct vr::VREvent_SpatialAnchor_t"}, +{ "fieldname": "progressUpdate", "fieldtype": "struct vr::VREvent_ProgressUpdate_t"}, +{ "fieldname": "showUi", "fieldtype": "struct vr::VREvent_ShowUI_t"}, +{ "fieldname": "showDevTools", "fieldtype": "struct vr::VREvent_ShowDevTools_t"}, +{ "fieldname": "hdcpError", "fieldtype": "struct vr::VREvent_HDCPError_t"}]} +,{"struct": "vr::VREvent_t","fields": [ +{ "fieldname": "eventType", "fieldtype": "uint32_t"}, +{ "fieldname": "trackedDeviceIndex", "fieldtype": "TrackedDeviceIndex_t"}, +{ "fieldname": "eventAgeSeconds", "fieldtype": "float"}, +{ "fieldname": "data", "fieldtype": "VREvent_Data_t"}]} +,{"struct": "vr::RenderModel_ComponentState_t","fields": [ +{ "fieldname": "mTrackingToComponentRenderModel", "fieldtype": "struct vr::HmdMatrix34_t"}, +{ "fieldname": "mTrackingToComponentLocal", "fieldtype": "struct vr::HmdMatrix34_t"}, +{ "fieldname": "uProperties", "fieldtype": "VRComponentProperties"}]} +,{"struct": "vr::HiddenAreaMesh_t","fields": [ +{ "fieldname": "pVertexData", "fieldtype": "const struct vr::HmdVector2_t *"}, +{ "fieldname": "unTriangleCount", "fieldtype": "uint32_t"}]} +,{"struct": "vr::VRControllerAxis_t","fields": [ +{ "fieldname": "x", "fieldtype": "float"}, +{ "fieldname": "y", "fieldtype": "float"}]} +,{"struct": "vr::VRControllerState001_t","fields": [ +{ "fieldname": "unPacketNum", "fieldtype": "uint32_t"}, +{ "fieldname": "ulButtonPressed", "fieldtype": "uint64_t"}, +{ "fieldname": "ulButtonTouched", "fieldtype": "uint64_t"}, +{ "fieldname": "rAxis", "fieldtype": "struct vr::VRControllerAxis_t [5]"}]} +,{"struct": "vr::CameraVideoStreamFrameHeader_t","fields": [ +{ "fieldname": "eFrameType", "fieldtype": "enum vr::EVRTrackedCameraFrameType"}, +{ "fieldname": "nWidth", "fieldtype": "uint32_t"}, +{ "fieldname": "nHeight", "fieldtype": "uint32_t"}, +{ "fieldname": "nBytesPerPixel", "fieldtype": "uint32_t"}, +{ "fieldname": "nFrameSequence", "fieldtype": "uint32_t"}, +{ "fieldname": "trackedDevicePose", "fieldtype": "struct vr::TrackedDevicePose_t"}, +{ "fieldname": "ulFrameExposureTime", "fieldtype": "uint64_t"}]} +,{"struct": "vr::Compositor_FrameTiming","fields": [ +{ "fieldname": "m_nSize", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nFrameIndex", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumFramePresents", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumMisPresented", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumDroppedFrames", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nReprojectionFlags", "fieldtype": "uint32_t"}, +{ "fieldname": "m_flSystemTimeInSeconds", "fieldtype": "double"}, +{ "fieldname": "m_flPreSubmitGpuMs", "fieldtype": "float"}, +{ "fieldname": "m_flPostSubmitGpuMs", "fieldtype": "float"}, +{ "fieldname": "m_flTotalRenderGpuMs", "fieldtype": "float"}, +{ "fieldname": "m_flCompositorRenderGpuMs", "fieldtype": "float"}, +{ "fieldname": "m_flCompositorRenderCpuMs", "fieldtype": "float"}, +{ "fieldname": "m_flCompositorIdleCpuMs", "fieldtype": "float"}, +{ "fieldname": "m_flClientFrameIntervalMs", "fieldtype": "float"}, +{ "fieldname": "m_flPresentCallCpuMs", "fieldtype": "float"}, +{ "fieldname": "m_flWaitForPresentCpuMs", "fieldtype": "float"}, +{ "fieldname": "m_flSubmitFrameMs", "fieldtype": "float"}, +{ "fieldname": "m_flWaitGetPosesCalledMs", "fieldtype": "float"}, +{ "fieldname": "m_flNewPosesReadyMs", "fieldtype": "float"}, +{ "fieldname": "m_flNewFrameReadyMs", "fieldtype": "float"}, +{ "fieldname": "m_flCompositorUpdateStartMs", "fieldtype": "float"}, +{ "fieldname": "m_flCompositorUpdateEndMs", "fieldtype": "float"}, +{ "fieldname": "m_flCompositorRenderStartMs", "fieldtype": "float"}, +{ "fieldname": "m_HmdPose", "fieldtype": "vr::TrackedDevicePose_t"}, +{ "fieldname": "m_nNumVSyncsReadyForUse", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumVSyncsToFirstView", "fieldtype": "uint32_t"}]} +,{"struct": "vr::Compositor_BenchmarkResults","fields": [ +{ "fieldname": "m_flMegaPixelsPerSecond", "fieldtype": "float"}, +{ "fieldname": "m_flHmdRecommendedMegaPixelsPerSecond", "fieldtype": "float"}]} +,{"struct": "vr::DriverDirectMode_FrameTiming","fields": [ +{ "fieldname": "m_nSize", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumFramePresents", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumMisPresented", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumDroppedFrames", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nReprojectionFlags", "fieldtype": "uint32_t"}]} +,{"struct": "vr::ImuSample_t","fields": [ +{ "fieldname": "fSampleTime", "fieldtype": "double"}, +{ "fieldname": "vAccel", "fieldtype": "struct vr::HmdVector3d_t"}, +{ "fieldname": "vGyro", "fieldtype": "struct vr::HmdVector3d_t"}, +{ "fieldname": "unOffScaleFlags", "fieldtype": "uint32_t"}]} +,{"struct": "vr::AppOverrideKeys_t","fields": [ +{ "fieldname": "pchKey", "fieldtype": "const char *"}, +{ "fieldname": "pchValue", "fieldtype": "const char *"}]} +,{"struct": "vr::Compositor_CumulativeStats","fields": [ +{ "fieldname": "m_nPid", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumFramePresents", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumDroppedFrames", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumReprojectedFrames", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumFramePresentsOnStartup", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumDroppedFramesOnStartup", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumReprojectedFramesOnStartup", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumLoading", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumFramePresentsLoading", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumDroppedFramesLoading", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumReprojectedFramesLoading", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumTimedOut", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumFramePresentsTimedOut", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumDroppedFramesTimedOut", "fieldtype": "uint32_t"}, +{ "fieldname": "m_nNumReprojectedFramesTimedOut", "fieldtype": "uint32_t"}]} +,{"struct": "vr::Compositor_StageRenderSettings","fields": [ +{ "fieldname": "m_PrimaryColor", "fieldtype": "struct vr::HmdColor_t"}, +{ "fieldname": "m_SecondaryColor", "fieldtype": "struct vr::HmdColor_t"}, +{ "fieldname": "m_flVignetteInnerRadius", "fieldtype": "float"}, +{ "fieldname": "m_flVignetteOuterRadius", "fieldtype": "float"}, +{ "fieldname": "m_flFresnelStrength", "fieldtype": "float"}, +{ "fieldname": "m_bBackfaceCulling", "fieldtype": "_Bool"}, +{ "fieldname": "m_bGreyscale", "fieldtype": "_Bool"}, +{ "fieldname": "m_bWireframe", "fieldtype": "_Bool"}]} +,{"struct": "vr::VROverlayIntersectionParams_t","fields": [ +{ "fieldname": "vSource", "fieldtype": "struct vr::HmdVector3_t"}, +{ "fieldname": "vDirection", "fieldtype": "struct vr::HmdVector3_t"}, +{ "fieldname": "eOrigin", "fieldtype": "enum vr::ETrackingUniverseOrigin"}]} +,{"struct": "vr::VROverlayIntersectionResults_t","fields": [ +{ "fieldname": "vPoint", "fieldtype": "struct vr::HmdVector3_t"}, +{ "fieldname": "vNormal", "fieldtype": "struct vr::HmdVector3_t"}, +{ "fieldname": "vUVs", "fieldtype": "struct vr::HmdVector2_t"}, +{ "fieldname": "fDistance", "fieldtype": "float"}]} +,{"struct": "vr::IntersectionMaskRectangle_t","fields": [ +{ "fieldname": "m_flTopLeftX", "fieldtype": "float"}, +{ "fieldname": "m_flTopLeftY", "fieldtype": "float"}, +{ "fieldname": "m_flWidth", "fieldtype": "float"}, +{ "fieldname": "m_flHeight", "fieldtype": "float"}]} +,{"struct": "vr::IntersectionMaskCircle_t","fields": [ +{ "fieldname": "m_flCenterX", "fieldtype": "float"}, +{ "fieldname": "m_flCenterY", "fieldtype": "float"}, +{ "fieldname": "m_flRadius", "fieldtype": "float"}]} +,{"struct": "vr::(anonymous)","fields": [ +{ "fieldname": "m_Rectangle", "fieldtype": "struct vr::IntersectionMaskRectangle_t"}, +{ "fieldname": "m_Circle", "fieldtype": "struct vr::IntersectionMaskCircle_t"}]} +,{"struct": "vr::VROverlayIntersectionMaskPrimitive_t","fields": [ +{ "fieldname": "m_nPrimitiveType", "fieldtype": "enum vr::EVROverlayIntersectionMaskPrimitiveType"}, +{ "fieldname": "m_Primitive", "fieldtype": "VROverlayIntersectionMaskPrimitive_Data_t"}]} +,{"struct": "vr::VROverlayProjection_t","fields": [ +{ "fieldname": "fLeft", "fieldtype": "float"}, +{ "fieldname": "fRight", "fieldtype": "float"}, +{ "fieldname": "fTop", "fieldtype": "float"}, +{ "fieldname": "fBottom", "fieldtype": "float"}]} +,{"struct": "vr::VROverlayView_t","fields": [ +{ "fieldname": "overlayHandle", "fieldtype": "VROverlayHandle_t"}, +{ "fieldname": "texture", "fieldtype": "struct vr::Texture_t"}, +{ "fieldname": "textureBounds", "fieldtype": "struct vr::VRTextureBounds_t"}]} +,{"struct": "vr::VRVulkanDevice_t","fields": [ +{ "fieldname": "m_pInstance", "fieldtype": "struct VkInstance_T *"}, +{ "fieldname": "m_pDevice", "fieldtype": "struct VkDevice_T *"}, +{ "fieldname": "m_pPhysicalDevice", "fieldtype": "struct VkPhysicalDevice_T *"}, +{ "fieldname": "m_pQueue", "fieldtype": "struct VkQueue_T *"}, +{ "fieldname": "m_uQueueFamilyIndex", "fieldtype": "uint32_t"}]} +,{"struct": "vr::VRNativeDevice_t","fields": [ +{ "fieldname": "handle", "fieldtype": "void *"}, +{ "fieldname": "eType", "fieldtype": "enum vr::EDeviceType"}]} +,{"struct": "vr::RenderModel_Vertex_t","fields": [ +{ "fieldname": "vPosition", "fieldtype": "struct vr::HmdVector3_t"}, +{ "fieldname": "vNormal", "fieldtype": "struct vr::HmdVector3_t"}, +{ "fieldname": "rfTextureCoord", "fieldtype": "float [2]"}]} +,{"struct": "vr::RenderModel_TextureMap_t","fields": [ +{ "fieldname": "unWidth", "fieldtype": "uint16_t"}, +{ "fieldname": "unHeight", "fieldtype": "uint16_t"}, +{ "fieldname": "rubTextureMapData", "fieldtype": "const uint8_t *"}, +{ "fieldname": "format", "fieldtype": "enum vr::EVRRenderModelTextureFormat"}]} +,{"struct": "vr::RenderModel_t","fields": [ +{ "fieldname": "rVertexData", "fieldtype": "const struct vr::RenderModel_Vertex_t *"}, +{ "fieldname": "unVertexCount", "fieldtype": "uint32_t"}, +{ "fieldname": "rIndexData", "fieldtype": "const uint16_t *"}, +{ "fieldname": "unTriangleCount", "fieldtype": "uint32_t"}, +{ "fieldname": "diffuseTextureId", "fieldtype": "TextureID_t"}]} +,{"struct": "vr::RenderModel_ControllerMode_State_t","fields": [ +{ "fieldname": "bScrollWheelVisible", "fieldtype": "_Bool"}]} +,{"struct": "vr::NotificationBitmap_t","fields": [ +{ "fieldname": "m_pImageData", "fieldtype": "void *"}, +{ "fieldname": "m_nWidth", "fieldtype": "int32_t"}, +{ "fieldname": "m_nHeight", "fieldtype": "int32_t"}, +{ "fieldname": "m_nBytesPerPixel", "fieldtype": "int32_t"}]} +,{"struct": "vr::CVRSettingHelper","fields": [ +{ "fieldname": "m_pSettings", "fieldtype": "class vr::IVRSettings *"}]} +,{"struct": "vr::InputAnalogActionData_t","fields": [ +{ "fieldname": "bActive", "fieldtype": "_Bool"}, +{ "fieldname": "activeOrigin", "fieldtype": "VRInputValueHandle_t"}, +{ "fieldname": "x", "fieldtype": "float"}, +{ "fieldname": "y", "fieldtype": "float"}, +{ "fieldname": "z", "fieldtype": "float"}, +{ "fieldname": "deltaX", "fieldtype": "float"}, +{ "fieldname": "deltaY", "fieldtype": "float"}, +{ "fieldname": "deltaZ", "fieldtype": "float"}, +{ "fieldname": "fUpdateTime", "fieldtype": "float"}]} +,{"struct": "vr::InputDigitalActionData_t","fields": [ +{ "fieldname": "bActive", "fieldtype": "_Bool"}, +{ "fieldname": "activeOrigin", "fieldtype": "VRInputValueHandle_t"}, +{ "fieldname": "bState", "fieldtype": "_Bool"}, +{ "fieldname": "bChanged", "fieldtype": "_Bool"}, +{ "fieldname": "fUpdateTime", "fieldtype": "float"}]} +,{"struct": "vr::InputPoseActionData_t","fields": [ +{ "fieldname": "bActive", "fieldtype": "_Bool"}, +{ "fieldname": "activeOrigin", "fieldtype": "VRInputValueHandle_t"}, +{ "fieldname": "pose", "fieldtype": "struct vr::TrackedDevicePose_t"}]} +,{"struct": "vr::InputSkeletalActionData_t","fields": [ +{ "fieldname": "bActive", "fieldtype": "_Bool"}, +{ "fieldname": "activeOrigin", "fieldtype": "VRInputValueHandle_t"}]} +,{"struct": "vr::InputOriginInfo_t","fields": [ +{ "fieldname": "devicePath", "fieldtype": "VRInputValueHandle_t"}, +{ "fieldname": "trackedDeviceIndex", "fieldtype": "TrackedDeviceIndex_t"}, +{ "fieldname": "rchRenderModelComponentName", "fieldtype": "char [128]"}]} +,{"struct": "vr::InputBindingInfo_t","fields": [ +{ "fieldname": "rchDevicePathName", "fieldtype": "char [128]"}, +{ "fieldname": "rchInputPathName", "fieldtype": "char [128]"}, +{ "fieldname": "rchModeName", "fieldtype": "char [128]"}, +{ "fieldname": "rchSlotName", "fieldtype": "char [128]"}, +{ "fieldname": "rchInputSourceType", "fieldtype": "char [32]"}]} +,{"struct": "vr::VRActiveActionSet_t","fields": [ +{ "fieldname": "ulActionSet", "fieldtype": "VRActionSetHandle_t"}, +{ "fieldname": "ulRestrictedToDevice", "fieldtype": "VRInputValueHandle_t"}, +{ "fieldname": "ulSecondaryActionSet", "fieldtype": "VRActionSetHandle_t"}, +{ "fieldname": "unPadding", "fieldtype": "uint32_t"}, +{ "fieldname": "nPriority", "fieldtype": "int32_t"}]} +,{"struct": "vr::VRSkeletalSummaryData_t","fields": [ +{ "fieldname": "flFingerCurl", "fieldtype": "float [5]"}, +{ "fieldname": "flFingerSplay", "fieldtype": "float [4]"}]} +,{"struct": "vr::SpatialAnchorPose_t","fields": [ +{ "fieldname": "mAnchorToAbsoluteTracking", "fieldtype": "struct vr::HmdMatrix34_t"}]} +,{"struct": "vr::COpenVRContext","fields": [ +{ "fieldname": "m_pVRSystem", "fieldtype": "class vr::IVRSystem *"}, +{ "fieldname": "m_pVRChaperone", "fieldtype": "class vr::IVRChaperone *"}, +{ "fieldname": "m_pVRChaperoneSetup", "fieldtype": "class vr::IVRChaperoneSetup *"}, +{ "fieldname": "m_pVRCompositor", "fieldtype": "class vr::IVRCompositor *"}, +{ "fieldname": "m_pVRHeadsetView", "fieldtype": "class vr::IVRHeadsetView *"}, +{ "fieldname": "m_pVROverlay", "fieldtype": "class vr::IVROverlay *"}, +{ "fieldname": "m_pVROverlayView", "fieldtype": "class vr::IVROverlayView *"}, +{ "fieldname": "m_pVRResources", "fieldtype": "class vr::IVRResources *"}, +{ "fieldname": "m_pVRRenderModels", "fieldtype": "class vr::IVRRenderModels *"}, +{ "fieldname": "m_pVRExtendedDisplay", "fieldtype": "class vr::IVRExtendedDisplay *"}, +{ "fieldname": "m_pVRSettings", "fieldtype": "class vr::IVRSettings *"}, +{ "fieldname": "m_pVRApplications", "fieldtype": "class vr::IVRApplications *"}, +{ "fieldname": "m_pVRTrackedCamera", "fieldtype": "class vr::IVRTrackedCamera *"}, +{ "fieldname": "m_pVRScreenshots", "fieldtype": "class vr::IVRScreenshots *"}, +{ "fieldname": "m_pVRDriverManager", "fieldtype": "class vr::IVRDriverManager *"}, +{ "fieldname": "m_pVRInput", "fieldtype": "class vr::IVRInput *"}, +{ "fieldname": "m_pVRIOBuffer", "fieldtype": "class vr::IVRIOBuffer *"}, +{ "fieldname": "m_pVRSpatialAnchors", "fieldtype": "class vr::IVRSpatialAnchors *"}, +{ "fieldname": "m_pVRDebug", "fieldtype": "class vr::IVRDebug *"}, +{ "fieldname": "m_pVRNotifications", "fieldtype": "class vr::IVRNotifications *"}]} +,{"struct": "vr::PropertyWrite_t","fields": [ +{ "fieldname": "prop", "fieldtype": "enum vr::ETrackedDeviceProperty"}, +{ "fieldname": "writeType", "fieldtype": "enum vr::EPropertyWriteType"}, +{ "fieldname": "eSetError", "fieldtype": "enum vr::ETrackedPropertyError"}, +{ "fieldname": "pvBuffer", "fieldtype": "void *"}, +{ "fieldname": "unBufferSize", "fieldtype": "uint32_t"}, +{ "fieldname": "unTag", "fieldtype": "PropertyTypeTag_t"}, +{ "fieldname": "eError", "fieldtype": "enum vr::ETrackedPropertyError"}]} +,{"struct": "vr::PropertyRead_t","fields": [ +{ "fieldname": "prop", "fieldtype": "enum vr::ETrackedDeviceProperty"}, +{ "fieldname": "pvBuffer", "fieldtype": "void *"}, +{ "fieldname": "unBufferSize", "fieldtype": "uint32_t"}, +{ "fieldname": "unTag", "fieldtype": "PropertyTypeTag_t"}, +{ "fieldname": "unRequiredBufferSize", "fieldtype": "uint32_t"}, +{ "fieldname": "eError", "fieldtype": "enum vr::ETrackedPropertyError"}]} +,{"struct": "vr::CVRPropertyHelpers","fields": [ +{ "fieldname": "m_pProperties", "fieldtype": "class vr::IVRProperties *"}]} +,{"struct": "vr::PathWrite_t","fields": [ +{ "fieldname": "ulPath", "fieldtype": "PathHandle_t"}, +{ "fieldname": "writeType", "fieldtype": "enum vr::EPropertyWriteType"}, +{ "fieldname": "eSetError", "fieldtype": "enum vr::ETrackedPropertyError"}, +{ "fieldname": "pvBuffer", "fieldtype": "void *"}, +{ "fieldname": "unBufferSize", "fieldtype": "uint32_t"}, +{ "fieldname": "unTag", "fieldtype": "PropertyTypeTag_t"}, +{ "fieldname": "eError", "fieldtype": "enum vr::ETrackedPropertyError"}, +{ "fieldname": "pszPath", "fieldtype": "const char *"}]} +,{"struct": "vr::PathRead_t","fields": [ +{ "fieldname": "ulPath", "fieldtype": "PathHandle_t"}, +{ "fieldname": "pvBuffer", "fieldtype": "void *"}, +{ "fieldname": "unBufferSize", "fieldtype": "uint32_t"}, +{ "fieldname": "unTag", "fieldtype": "PropertyTypeTag_t"}, +{ "fieldname": "unRequiredBufferSize", "fieldtype": "uint32_t"}, +{ "fieldname": "eError", "fieldtype": "enum vr::ETrackedPropertyError"}, +{ "fieldname": "pszPath", "fieldtype": "const char *"}]} +], +"methods":[{ + "classname": "vr::IVRSystem", + "methodname": "GetRecommendedRenderTargetSize", + "returntype": "void", + "params": [ +{ "paramname": "pnWidth" ,"paramtype": "uint32_t *"}, +{ "paramname": "pnHeight" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetProjectionMatrix", + "returntype": "struct vr::HmdMatrix44_t", + "params": [ +{ "paramname": "eEye" ,"paramtype": "vr::EVREye"}, +{ "paramname": "fNearZ" ,"paramtype": "float"}, +{ "paramname": "fFarZ" ,"paramtype": "float"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetProjectionRaw", + "returntype": "void", + "params": [ +{ "paramname": "eEye" ,"paramtype": "vr::EVREye"}, +{ "paramname": "pfLeft" ,"paramtype": "float *"}, +{ "paramname": "pfRight" ,"paramtype": "float *"}, +{ "paramname": "pfTop" ,"paramtype": "float *"}, +{ "paramname": "pfBottom" ,"paramtype": "float *"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "ComputeDistortion", + "returntype": "bool", + "params": [ +{ "paramname": "eEye" ,"paramtype": "vr::EVREye"}, +{ "paramname": "fU" ,"paramtype": "float"}, +{ "paramname": "fV" ,"paramtype": "float"}, +{ "paramname": "pDistortionCoordinates" ,"paramtype": "struct vr::DistortionCoordinates_t *"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetEyeToHeadTransform", + "returntype": "struct vr::HmdMatrix34_t", + "params": [ +{ "paramname": "eEye" ,"paramtype": "vr::EVREye"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetTimeSinceLastVsync", + "returntype": "bool", + "params": [ +{ "paramname": "pfSecondsSinceLastVsync" ,"paramtype": "float *"}, +{ "paramname": "pulFrameCounter" ,"paramtype": "uint64_t *"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetD3D9AdapterIndex", + "returntype": "int32_t" +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetDXGIOutputInfo", + "returntype": "void", + "params": [ +{ "paramname": "pnAdapterIndex" ,"paramtype": "int32_t *"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetOutputDevice", + "returntype": "void", + "params": [ +{ "paramname": "pnDevice" ,"paramtype": "uint64_t *"}, +{ "paramname": "textureType" ,"paramtype": "vr::ETextureType"}, +{ "paramname": "pInstance" ,"paramtype": "struct VkInstance_T *"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "IsDisplayOnDesktop", + "returntype": "bool" +} +,{ + "classname": "vr::IVRSystem", + "methodname": "SetDisplayVisibility", + "returntype": "bool", + "params": [ +{ "paramname": "bIsVisibleOnDesktop" ,"paramtype": "bool"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetDeviceToAbsoluteTrackingPose", + "returntype": "void", + "params": [ +{ "paramname": "eOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"}, +{ "paramname": "fPredictedSecondsToPhotonsFromNow" ,"paramtype": "float"}, +{ "paramname": "pTrackedDevicePoseArray" ,"array_count": "unTrackedDevicePoseArrayCount" ,"paramtype": "struct vr::TrackedDevicePose_t *"}, +{ "paramname": "unTrackedDevicePoseArrayCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetSeatedZeroPoseToStandingAbsoluteTrackingPose", + "returntype": "struct vr::HmdMatrix34_t" +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetRawZeroPoseToStandingAbsoluteTrackingPose", + "returntype": "struct vr::HmdMatrix34_t" +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetSortedTrackedDeviceIndicesOfClass", + "returntype": "uint32_t", + "params": [ +{ "paramname": "eTrackedDeviceClass" ,"paramtype": "vr::ETrackedDeviceClass"}, +{ "paramname": "punTrackedDeviceIndexArray" ,"array_count": "unTrackedDeviceIndexArrayCount" ,"paramtype": "vr::TrackedDeviceIndex_t *"}, +{ "paramname": "unTrackedDeviceIndexArrayCount" ,"paramtype": "uint32_t"}, +{ "paramname": "unRelativeToTrackedDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetTrackedDeviceActivityLevel", + "returntype": "vr::EDeviceActivityLevel", + "params": [ +{ "paramname": "unDeviceId" ,"paramtype": "vr::TrackedDeviceIndex_t"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "ApplyTransform", + "returntype": "void", + "params": [ +{ "paramname": "pOutputPose" ,"paramtype": "struct vr::TrackedDevicePose_t *"}, +{ "paramname": "pTrackedDevicePose" ,"paramtype": "const struct vr::TrackedDevicePose_t *"}, +{ "paramname": "pTransform" ,"paramtype": "const struct vr::HmdMatrix34_t *"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetTrackedDeviceIndexForControllerRole", + "returntype": "vr::TrackedDeviceIndex_t", + "params": [ +{ "paramname": "unDeviceType" ,"paramtype": "vr::ETrackedControllerRole"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetControllerRoleForTrackedDeviceIndex", + "returntype": "vr::ETrackedControllerRole", + "params": [ +{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetTrackedDeviceClass", + "returntype": "vr::ETrackedDeviceClass", + "params": [ +{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "IsTrackedDeviceConnected", + "returntype": "bool", + "params": [ +{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetBoolTrackedDeviceProperty", + "returntype": "bool", + "params": [ +{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "prop" ,"paramtype": "vr::ETrackedDeviceProperty"}, +{ "paramname": "pError" ,"paramtype": "vr::ETrackedPropertyError *"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetFloatTrackedDeviceProperty", + "returntype": "float", + "params": [ +{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "prop" ,"paramtype": "vr::ETrackedDeviceProperty"}, +{ "paramname": "pError" ,"paramtype": "vr::ETrackedPropertyError *"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetInt32TrackedDeviceProperty", + "returntype": "int32_t", + "params": [ +{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "prop" ,"paramtype": "vr::ETrackedDeviceProperty"}, +{ "paramname": "pError" ,"paramtype": "vr::ETrackedPropertyError *"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetUint64TrackedDeviceProperty", + "returntype": "uint64_t", + "params": [ +{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "prop" ,"paramtype": "vr::ETrackedDeviceProperty"}, +{ "paramname": "pError" ,"paramtype": "vr::ETrackedPropertyError *"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetMatrix34TrackedDeviceProperty", + "returntype": "struct vr::HmdMatrix34_t", + "params": [ +{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "prop" ,"paramtype": "vr::ETrackedDeviceProperty"}, +{ "paramname": "pError" ,"paramtype": "vr::ETrackedPropertyError *"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetArrayTrackedDeviceProperty", + "returntype": "uint32_t", + "params": [ +{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "prop" ,"paramtype": "vr::ETrackedDeviceProperty"}, +{ "paramname": "propType" ,"paramtype": "vr::PropertyTypeTag_t"}, +{ "paramname": "pBuffer" ,"paramtype": "void *"}, +{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"}, +{ "paramname": "pError" ,"paramtype": "vr::ETrackedPropertyError *"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetStringTrackedDeviceProperty", + "returntype": "uint32_t", + "params": [ +{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "prop" ,"paramtype": "vr::ETrackedDeviceProperty"}, +{ "paramname": "pchValue" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"}, +{ "paramname": "pError" ,"paramtype": "vr::ETrackedPropertyError *"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetPropErrorNameFromEnum", + "returntype": "const char *", + "params": [ +{ "paramname": "error" ,"paramtype": "vr::ETrackedPropertyError"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "PollNextEvent", + "returntype": "bool", + "params": [ +{ "paramname": "pEvent" ,"paramtype": "struct vr::VREvent_t *"}, +{ "paramname": "uncbVREvent" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "PollNextEventWithPose", + "returntype": "bool", + "params": [ +{ "paramname": "eOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"}, +{ "paramname": "pEvent" ,"paramtype": "struct vr::VREvent_t *"}, +{ "paramname": "uncbVREvent" ,"paramtype": "uint32_t"}, +{ "paramname": "pTrackedDevicePose" ,"paramtype": "vr::TrackedDevicePose_t *"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetEventTypeNameFromEnum", + "returntype": "const char *", + "params": [ +{ "paramname": "eType" ,"paramtype": "vr::EVREventType"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetHiddenAreaMesh", + "returntype": "struct vr::HiddenAreaMesh_t", + "params": [ +{ "paramname": "eEye" ,"paramtype": "vr::EVREye"}, +{ "paramname": "type" ,"paramtype": "vr::EHiddenAreaMeshType"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetControllerState", + "returntype": "bool", + "params": [ +{ "paramname": "unControllerDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "pControllerState" ,"paramtype": "vr::VRControllerState_t *"}, +{ "paramname": "unControllerStateSize" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetControllerStateWithPose", + "returntype": "bool", + "params": [ +{ "paramname": "eOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"}, +{ "paramname": "unControllerDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "pControllerState" ,"paramtype": "vr::VRControllerState_t *"}, +{ "paramname": "unControllerStateSize" ,"paramtype": "uint32_t"}, +{ "paramname": "pTrackedDevicePose" ,"paramtype": "struct vr::TrackedDevicePose_t *"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "TriggerHapticPulse", + "returntype": "void", + "params": [ +{ "paramname": "unControllerDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "unAxisId" ,"paramtype": "uint32_t"}, +{ "paramname": "usDurationMicroSec" ,"paramtype": "unsigned short"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetButtonIdNameFromEnum", + "returntype": "const char *", + "params": [ +{ "paramname": "eButtonId" ,"paramtype": "vr::EVRButtonId"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetControllerAxisTypeNameFromEnum", + "returntype": "const char *", + "params": [ +{ "paramname": "eAxisType" ,"paramtype": "vr::EVRControllerAxisType"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "IsInputAvailable", + "returntype": "bool" +} +,{ + "classname": "vr::IVRSystem", + "methodname": "IsSteamVRDrawingControllers", + "returntype": "bool" +} +,{ + "classname": "vr::IVRSystem", + "methodname": "ShouldApplicationPause", + "returntype": "bool" +} +,{ + "classname": "vr::IVRSystem", + "methodname": "ShouldApplicationReduceRenderingWork", + "returntype": "bool" +} +,{ + "classname": "vr::IVRSystem", + "methodname": "PerformFirmwareUpdate", + "returntype": "vr::EVRFirmwareError", + "params": [ +{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "AcknowledgeQuit_Exiting", + "returntype": "void" +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetAppContainerFilePaths", + "returntype": "uint32_t", + "params": [ +{ "paramname": "pchBuffer" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRSystem", + "methodname": "GetRuntimeVersion", + "returntype": "const char *" +} +,{ + "classname": "vr::IVRExtendedDisplay", + "methodname": "GetWindowBounds", + "returntype": "void", + "params": [ +{ "paramname": "pnX" ,"paramtype": "int32_t *"}, +{ "paramname": "pnY" ,"paramtype": "int32_t *"}, +{ "paramname": "pnWidth" ,"paramtype": "uint32_t *"}, +{ "paramname": "pnHeight" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVRExtendedDisplay", + "methodname": "GetEyeOutputViewport", + "returntype": "void", + "params": [ +{ "paramname": "eEye" ,"paramtype": "vr::EVREye"}, +{ "paramname": "pnX" ,"paramtype": "uint32_t *"}, +{ "paramname": "pnY" ,"paramtype": "uint32_t *"}, +{ "paramname": "pnWidth" ,"paramtype": "uint32_t *"}, +{ "paramname": "pnHeight" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVRExtendedDisplay", + "methodname": "GetDXGIOutputInfo", + "returntype": "void", + "params": [ +{ "paramname": "pnAdapterIndex" ,"paramtype": "int32_t *"}, +{ "paramname": "pnAdapterOutputIndex" ,"paramtype": "int32_t *"} + ] +} +,{ + "classname": "vr::IVRTrackedCamera", + "methodname": "GetCameraErrorNameFromEnum", + "returntype": "const char *", + "params": [ +{ "paramname": "eCameraError" ,"paramtype": "vr::EVRTrackedCameraError"} + ] +} +,{ + "classname": "vr::IVRTrackedCamera", + "methodname": "HasCamera", + "returntype": "vr::EVRTrackedCameraError", + "params": [ +{ "paramname": "nDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "pHasCamera" ,"paramtype": "bool *"} + ] +} +,{ + "classname": "vr::IVRTrackedCamera", + "methodname": "GetCameraFrameSize", + "returntype": "vr::EVRTrackedCameraError", + "params": [ +{ "paramname": "nDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "eFrameType" ,"paramtype": "vr::EVRTrackedCameraFrameType"}, +{ "paramname": "pnWidth" ,"paramtype": "uint32_t *"}, +{ "paramname": "pnHeight" ,"paramtype": "uint32_t *"}, +{ "paramname": "pnFrameBufferSize" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVRTrackedCamera", + "methodname": "GetCameraIntrinsics", + "returntype": "vr::EVRTrackedCameraError", + "params": [ +{ "paramname": "nDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "nCameraIndex" ,"paramtype": "uint32_t"}, +{ "paramname": "eFrameType" ,"paramtype": "vr::EVRTrackedCameraFrameType"}, +{ "paramname": "pFocalLength" ,"paramtype": "vr::HmdVector2_t *"}, +{ "paramname": "pCenter" ,"paramtype": "vr::HmdVector2_t *"} + ] +} +,{ + "classname": "vr::IVRTrackedCamera", + "methodname": "GetCameraProjection", + "returntype": "vr::EVRTrackedCameraError", + "params": [ +{ "paramname": "nDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "nCameraIndex" ,"paramtype": "uint32_t"}, +{ "paramname": "eFrameType" ,"paramtype": "vr::EVRTrackedCameraFrameType"}, +{ "paramname": "flZNear" ,"paramtype": "float"}, +{ "paramname": "flZFar" ,"paramtype": "float"}, +{ "paramname": "pProjection" ,"paramtype": "vr::HmdMatrix44_t *"} + ] +} +,{ + "classname": "vr::IVRTrackedCamera", + "methodname": "AcquireVideoStreamingService", + "returntype": "vr::EVRTrackedCameraError", + "params": [ +{ "paramname": "nDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "pHandle" ,"paramtype": "vr::TrackedCameraHandle_t *"} + ] +} +,{ + "classname": "vr::IVRTrackedCamera", + "methodname": "ReleaseVideoStreamingService", + "returntype": "vr::EVRTrackedCameraError", + "params": [ +{ "paramname": "hTrackedCamera" ,"paramtype": "vr::TrackedCameraHandle_t"} + ] +} +,{ + "classname": "vr::IVRTrackedCamera", + "methodname": "GetVideoStreamFrameBuffer", + "returntype": "vr::EVRTrackedCameraError", + "params": [ +{ "paramname": "hTrackedCamera" ,"paramtype": "vr::TrackedCameraHandle_t"}, +{ "paramname": "eFrameType" ,"paramtype": "vr::EVRTrackedCameraFrameType"}, +{ "paramname": "pFrameBuffer" ,"paramtype": "void *"}, +{ "paramname": "nFrameBufferSize" ,"paramtype": "uint32_t"}, +{ "paramname": "pFrameHeader" ,"paramtype": "vr::CameraVideoStreamFrameHeader_t *"}, +{ "paramname": "nFrameHeaderSize" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRTrackedCamera", + "methodname": "GetVideoStreamTextureSize", + "returntype": "vr::EVRTrackedCameraError", + "params": [ +{ "paramname": "nDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "eFrameType" ,"paramtype": "vr::EVRTrackedCameraFrameType"}, +{ "paramname": "pTextureBounds" ,"paramtype": "vr::VRTextureBounds_t *"}, +{ "paramname": "pnWidth" ,"paramtype": "uint32_t *"}, +{ "paramname": "pnHeight" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVRTrackedCamera", + "methodname": "GetVideoStreamTextureD3D11", + "returntype": "vr::EVRTrackedCameraError", + "params": [ +{ "paramname": "hTrackedCamera" ,"paramtype": "vr::TrackedCameraHandle_t"}, +{ "paramname": "eFrameType" ,"paramtype": "vr::EVRTrackedCameraFrameType"}, +{ "paramname": "pD3D11DeviceOrResource" ,"paramtype": "void *"}, +{ "paramname": "ppD3D11ShaderResourceView" ,"paramtype": "void **"}, +{ "paramname": "pFrameHeader" ,"paramtype": "vr::CameraVideoStreamFrameHeader_t *"}, +{ "paramname": "nFrameHeaderSize" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRTrackedCamera", + "methodname": "GetVideoStreamTextureGL", + "returntype": "vr::EVRTrackedCameraError", + "params": [ +{ "paramname": "hTrackedCamera" ,"paramtype": "vr::TrackedCameraHandle_t"}, +{ "paramname": "eFrameType" ,"paramtype": "vr::EVRTrackedCameraFrameType"}, +{ "paramname": "pglTextureId" ,"paramtype": "vr::glUInt_t *"}, +{ "paramname": "pFrameHeader" ,"paramtype": "vr::CameraVideoStreamFrameHeader_t *"}, +{ "paramname": "nFrameHeaderSize" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRTrackedCamera", + "methodname": "ReleaseVideoStreamTextureGL", + "returntype": "vr::EVRTrackedCameraError", + "params": [ +{ "paramname": "hTrackedCamera" ,"paramtype": "vr::TrackedCameraHandle_t"}, +{ "paramname": "glTextureId" ,"paramtype": "vr::glUInt_t"} + ] +} +,{ + "classname": "vr::IVRTrackedCamera", + "methodname": "SetCameraTrackingSpace", + "returntype": "void", + "params": [ +{ "paramname": "eUniverse" ,"paramtype": "vr::ETrackingUniverseOrigin"} + ] +} +,{ + "classname": "vr::IVRTrackedCamera", + "methodname": "GetCameraTrackingSpace", + "returntype": "vr::ETrackingUniverseOrigin" +} +,{ + "classname": "vr::IVRApplications", + "methodname": "AddApplicationManifest", + "returntype": "vr::EVRApplicationError", + "params": [ +{ "paramname": "pchApplicationManifestFullPath" ,"paramtype": "const char *"}, +{ "paramname": "bTemporary" ,"paramtype": "bool"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "RemoveApplicationManifest", + "returntype": "vr::EVRApplicationError", + "params": [ +{ "paramname": "pchApplicationManifestFullPath" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "IsApplicationInstalled", + "returntype": "bool", + "params": [ +{ "paramname": "pchAppKey" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "GetApplicationCount", + "returntype": "uint32_t" +} +,{ + "classname": "vr::IVRApplications", + "methodname": "GetApplicationKeyByIndex", + "returntype": "vr::EVRApplicationError", + "params": [ +{ "paramname": "unApplicationIndex" ,"paramtype": "uint32_t"}, +{ "paramname": "pchAppKeyBuffer" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unAppKeyBufferLen" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "GetApplicationKeyByProcessId", + "returntype": "vr::EVRApplicationError", + "params": [ +{ "paramname": "unProcessId" ,"paramtype": "uint32_t"}, +{ "paramname": "pchAppKeyBuffer" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unAppKeyBufferLen" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "LaunchApplication", + "returntype": "vr::EVRApplicationError", + "params": [ +{ "paramname": "pchAppKey" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "LaunchTemplateApplication", + "returntype": "vr::EVRApplicationError", + "params": [ +{ "paramname": "pchTemplateAppKey" ,"paramtype": "const char *"}, +{ "paramname": "pchNewAppKey" ,"paramtype": "const char *"}, +{ "paramname": "pKeys" ,"array_count": "unKeys" ,"paramtype": "const struct vr::AppOverrideKeys_t *"}, +{ "paramname": "unKeys" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "LaunchApplicationFromMimeType", + "returntype": "vr::EVRApplicationError", + "params": [ +{ "paramname": "pchMimeType" ,"paramtype": "const char *"}, +{ "paramname": "pchArgs" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "LaunchDashboardOverlay", + "returntype": "vr::EVRApplicationError", + "params": [ +{ "paramname": "pchAppKey" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "CancelApplicationLaunch", + "returntype": "bool", + "params": [ +{ "paramname": "pchAppKey" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "IdentifyApplication", + "returntype": "vr::EVRApplicationError", + "params": [ +{ "paramname": "unProcessId" ,"paramtype": "uint32_t"}, +{ "paramname": "pchAppKey" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "GetApplicationProcessId", + "returntype": "uint32_t", + "params": [ +{ "paramname": "pchAppKey" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "GetApplicationsErrorNameFromEnum", + "returntype": "const char *", + "params": [ +{ "paramname": "error" ,"paramtype": "vr::EVRApplicationError"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "GetApplicationPropertyString", + "returntype": "uint32_t", + "params": [ +{ "paramname": "pchAppKey" ,"paramtype": "const char *"}, +{ "paramname": "eProperty" ,"paramtype": "vr::EVRApplicationProperty"}, +{ "paramname": "pchPropertyValueBuffer" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unPropertyValueBufferLen" ,"paramtype": "uint32_t"}, +{ "paramname": "peError" ,"paramtype": "vr::EVRApplicationError *"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "GetApplicationPropertyBool", + "returntype": "bool", + "params": [ +{ "paramname": "pchAppKey" ,"paramtype": "const char *"}, +{ "paramname": "eProperty" ,"paramtype": "vr::EVRApplicationProperty"}, +{ "paramname": "peError" ,"paramtype": "vr::EVRApplicationError *"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "GetApplicationPropertyUint64", + "returntype": "uint64_t", + "params": [ +{ "paramname": "pchAppKey" ,"paramtype": "const char *"}, +{ "paramname": "eProperty" ,"paramtype": "vr::EVRApplicationProperty"}, +{ "paramname": "peError" ,"paramtype": "vr::EVRApplicationError *"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "SetApplicationAutoLaunch", + "returntype": "vr::EVRApplicationError", + "params": [ +{ "paramname": "pchAppKey" ,"paramtype": "const char *"}, +{ "paramname": "bAutoLaunch" ,"paramtype": "bool"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "GetApplicationAutoLaunch", + "returntype": "bool", + "params": [ +{ "paramname": "pchAppKey" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "SetDefaultApplicationForMimeType", + "returntype": "vr::EVRApplicationError", + "params": [ +{ "paramname": "pchAppKey" ,"paramtype": "const char *"}, +{ "paramname": "pchMimeType" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "GetDefaultApplicationForMimeType", + "returntype": "bool", + "params": [ +{ "paramname": "pchMimeType" ,"paramtype": "const char *"}, +{ "paramname": "pchAppKeyBuffer" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unAppKeyBufferLen" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "GetApplicationSupportedMimeTypes", + "returntype": "bool", + "params": [ +{ "paramname": "pchAppKey" ,"paramtype": "const char *"}, +{ "paramname": "pchMimeTypesBuffer" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unMimeTypesBuffer" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "GetApplicationsThatSupportMimeType", + "returntype": "uint32_t", + "params": [ +{ "paramname": "pchMimeType" ,"paramtype": "const char *"}, +{ "paramname": "pchAppKeysThatSupportBuffer" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unAppKeysThatSupportBuffer" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "GetApplicationLaunchArguments", + "returntype": "uint32_t", + "params": [ +{ "paramname": "unHandle" ,"paramtype": "uint32_t"}, +{ "paramname": "pchArgs" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unArgs" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "GetStartingApplication", + "returntype": "vr::EVRApplicationError", + "params": [ +{ "paramname": "pchAppKeyBuffer" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unAppKeyBufferLen" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "GetSceneApplicationState", + "returntype": "vr::EVRSceneApplicationState" +} +,{ + "classname": "vr::IVRApplications", + "methodname": "PerformApplicationPrelaunchCheck", + "returntype": "vr::EVRApplicationError", + "params": [ +{ "paramname": "pchAppKey" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "GetSceneApplicationStateNameFromEnum", + "returntype": "const char *", + "params": [ +{ "paramname": "state" ,"paramtype": "vr::EVRSceneApplicationState"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "LaunchInternalProcess", + "returntype": "vr::EVRApplicationError", + "params": [ +{ "paramname": "pchBinaryPath" ,"paramtype": "const char *"}, +{ "paramname": "pchArguments" ,"paramtype": "const char *"}, +{ "paramname": "pchWorkingDirectory" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRApplications", + "methodname": "GetCurrentSceneProcessId", + "returntype": "uint32_t" +} +,{ + "classname": "vr::IVRChaperone", + "methodname": "GetCalibrationState", + "returntype": "vr::ChaperoneCalibrationState" +} +,{ + "classname": "vr::IVRChaperone", + "methodname": "GetPlayAreaSize", + "returntype": "bool", + "params": [ +{ "paramname": "pSizeX" ,"paramtype": "float *"}, +{ "paramname": "pSizeZ" ,"paramtype": "float *"} + ] +} +,{ + "classname": "vr::IVRChaperone", + "methodname": "GetPlayAreaRect", + "returntype": "bool", + "params": [ +{ "paramname": "rect" ,"paramtype": "struct vr::HmdQuad_t *"} + ] +} +,{ + "classname": "vr::IVRChaperone", + "methodname": "ReloadInfo", + "returntype": "void" +} +,{ + "classname": "vr::IVRChaperone", + "methodname": "SetSceneColor", + "returntype": "void", + "params": [ +{ "paramname": "color" ,"paramtype": "struct vr::HmdColor_t"} + ] +} +,{ + "classname": "vr::IVRChaperone", + "methodname": "GetBoundsColor", + "returntype": "void", + "params": [ +{ "paramname": "pOutputColorArray" ,"paramtype": "struct vr::HmdColor_t *"}, +{ "paramname": "nNumOutputColors" ,"paramtype": "int"}, +{ "paramname": "flCollisionBoundsFadeDistance" ,"paramtype": "float"}, +{ "paramname": "pOutputCameraColor" ,"paramtype": "struct vr::HmdColor_t *"} + ] +} +,{ + "classname": "vr::IVRChaperone", + "methodname": "AreBoundsVisible", + "returntype": "bool" +} +,{ + "classname": "vr::IVRChaperone", + "methodname": "ForceBoundsVisible", + "returntype": "void", + "params": [ +{ "paramname": "bForce" ,"paramtype": "bool"} + ] +} +,{ + "classname": "vr::IVRChaperone", + "methodname": "ResetZeroPose", + "returntype": "void", + "params": [ +{ "paramname": "eTrackingUniverseOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"} + ] +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "CommitWorkingCopy", + "returntype": "bool", + "params": [ +{ "paramname": "configFile" ,"paramtype": "vr::EChaperoneConfigFile"} + ] +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "RevertWorkingCopy", + "returntype": "void" +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "GetWorkingPlayAreaSize", + "returntype": "bool", + "params": [ +{ "paramname": "pSizeX" ,"paramtype": "float *"}, +{ "paramname": "pSizeZ" ,"paramtype": "float *"} + ] +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "GetWorkingPlayAreaRect", + "returntype": "bool", + "params": [ +{ "paramname": "rect" ,"paramtype": "struct vr::HmdQuad_t *"} + ] +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "GetWorkingCollisionBoundsInfo", + "returntype": "bool", + "params": [ +{ "paramname": "pQuadsBuffer" ,"out_array_count": "punQuadsCount" ,"paramtype": "struct vr::HmdQuad_t *"}, +{ "paramname": "punQuadsCount" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "GetLiveCollisionBoundsInfo", + "returntype": "bool", + "params": [ +{ "paramname": "pQuadsBuffer" ,"out_array_count": "punQuadsCount" ,"paramtype": "struct vr::HmdQuad_t *"}, +{ "paramname": "punQuadsCount" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "GetWorkingSeatedZeroPoseToRawTrackingPose", + "returntype": "bool", + "params": [ +{ "paramname": "pmatSeatedZeroPoseToRawTrackingPose" ,"paramtype": "struct vr::HmdMatrix34_t *"} + ] +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "GetWorkingStandingZeroPoseToRawTrackingPose", + "returntype": "bool", + "params": [ +{ "paramname": "pmatStandingZeroPoseToRawTrackingPose" ,"paramtype": "struct vr::HmdMatrix34_t *"} + ] +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "SetWorkingPlayAreaSize", + "returntype": "void", + "params": [ +{ "paramname": "sizeX" ,"paramtype": "float"}, +{ "paramname": "sizeZ" ,"paramtype": "float"} + ] +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "SetWorkingCollisionBoundsInfo", + "returntype": "void", + "params": [ +{ "paramname": "pQuadsBuffer" ,"array_count": "unQuadsCount" ,"paramtype": "struct vr::HmdQuad_t *"}, +{ "paramname": "unQuadsCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "SetWorkingPerimeter", + "returntype": "void", + "params": [ +{ "paramname": "pPointBuffer" ,"array_count": "unPointCount" ,"paramtype": "struct vr::HmdVector2_t *"}, +{ "paramname": "unPointCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "SetWorkingSeatedZeroPoseToRawTrackingPose", + "returntype": "void", + "params": [ +{ "paramname": "pMatSeatedZeroPoseToRawTrackingPose" ,"paramtype": "const struct vr::HmdMatrix34_t *"} + ] +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "SetWorkingStandingZeroPoseToRawTrackingPose", + "returntype": "void", + "params": [ +{ "paramname": "pMatStandingZeroPoseToRawTrackingPose" ,"paramtype": "const struct vr::HmdMatrix34_t *"} + ] +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "ReloadFromDisk", + "returntype": "void", + "params": [ +{ "paramname": "configFile" ,"paramtype": "vr::EChaperoneConfigFile"} + ] +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "GetLiveSeatedZeroPoseToRawTrackingPose", + "returntype": "bool", + "params": [ +{ "paramname": "pmatSeatedZeroPoseToRawTrackingPose" ,"paramtype": "struct vr::HmdMatrix34_t *"} + ] +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "ExportLiveToBuffer", + "returntype": "bool", + "params": [ +{ "paramname": "pBuffer" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "pnBufferLength" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "ImportFromBufferToWorking", + "returntype": "bool", + "params": [ +{ "paramname": "pBuffer" ,"paramtype": "const char *"}, +{ "paramname": "nImportFlags" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "ShowWorkingSetPreview", + "returntype": "void" +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "HideWorkingSetPreview", + "returntype": "void" +} +,{ + "classname": "vr::IVRChaperoneSetup", + "methodname": "RoomSetupStarting", + "returntype": "void" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "SetTrackingSpace", + "returntype": "void", + "params": [ +{ "paramname": "eOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetTrackingSpace", + "returntype": "vr::ETrackingUniverseOrigin" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "WaitGetPoses", + "returntype": "vr::EVRCompositorError", + "params": [ +{ "paramname": "pRenderPoseArray" ,"array_count": "unRenderPoseArrayCount" ,"paramtype": "struct vr::TrackedDevicePose_t *"}, +{ "paramname": "unRenderPoseArrayCount" ,"paramtype": "uint32_t"}, +{ "paramname": "pGamePoseArray" ,"array_count": "unGamePoseArrayCount" ,"paramtype": "struct vr::TrackedDevicePose_t *"}, +{ "paramname": "unGamePoseArrayCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetLastPoses", + "returntype": "vr::EVRCompositorError", + "params": [ +{ "paramname": "pRenderPoseArray" ,"array_count": "unRenderPoseArrayCount" ,"paramtype": "struct vr::TrackedDevicePose_t *"}, +{ "paramname": "unRenderPoseArrayCount" ,"paramtype": "uint32_t"}, +{ "paramname": "pGamePoseArray" ,"array_count": "unGamePoseArrayCount" ,"paramtype": "struct vr::TrackedDevicePose_t *"}, +{ "paramname": "unGamePoseArrayCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetLastPoseForTrackedDeviceIndex", + "returntype": "vr::EVRCompositorError", + "params": [ +{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "pOutputPose" ,"paramtype": "struct vr::TrackedDevicePose_t *"}, +{ "paramname": "pOutputGamePose" ,"paramtype": "struct vr::TrackedDevicePose_t *"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "Submit", + "returntype": "vr::EVRCompositorError", + "params": [ +{ "paramname": "eEye" ,"paramtype": "vr::EVREye"}, +{ "paramname": "pTexture" ,"paramtype": "const struct vr::Texture_t *"}, +{ "paramname": "pBounds" ,"paramtype": "const struct vr::VRTextureBounds_t *"}, +{ "paramname": "nSubmitFlags" ,"paramtype": "vr::EVRSubmitFlags"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "ClearLastSubmittedFrame", + "returntype": "void" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "PostPresentHandoff", + "returntype": "void" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetFrameTiming", + "returntype": "bool", + "params": [ +{ "paramname": "pTiming" ,"paramtype": "struct vr::Compositor_FrameTiming *"}, +{ "paramname": "unFramesAgo" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetFrameTimings", + "returntype": "uint32_t", + "params": [ +{ "paramname": "pTiming" ,"array_count": "nFrames" ,"paramtype": "struct vr::Compositor_FrameTiming *"}, +{ "paramname": "nFrames" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetFrameTimeRemaining", + "returntype": "float" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetCumulativeStats", + "returntype": "void", + "params": [ +{ "paramname": "pStats" ,"paramtype": "struct vr::Compositor_CumulativeStats *"}, +{ "paramname": "nStatsSizeInBytes" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "FadeToColor", + "returntype": "void", + "params": [ +{ "paramname": "fSeconds" ,"paramtype": "float"}, +{ "paramname": "fRed" ,"paramtype": "float"}, +{ "paramname": "fGreen" ,"paramtype": "float"}, +{ "paramname": "fBlue" ,"paramtype": "float"}, +{ "paramname": "fAlpha" ,"paramtype": "float"}, +{ "paramname": "bBackground" ,"paramtype": "bool"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetCurrentFadeColor", + "returntype": "struct vr::HmdColor_t", + "params": [ +{ "paramname": "bBackground" ,"paramtype": "bool"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "FadeGrid", + "returntype": "void", + "params": [ +{ "paramname": "fSeconds" ,"paramtype": "float"}, +{ "paramname": "bFadeGridIn" ,"paramtype": "bool"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetCurrentGridAlpha", + "returntype": "float" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "SetSkyboxOverride", + "returntype": "vr::EVRCompositorError", + "params": [ +{ "paramname": "pTextures" ,"array_count": "unTextureCount" ,"paramtype": "const struct vr::Texture_t *"}, +{ "paramname": "unTextureCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "ClearSkyboxOverride", + "returntype": "void" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "CompositorBringToFront", + "returntype": "void" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "CompositorGoToBack", + "returntype": "void" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "CompositorQuit", + "returntype": "void" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "IsFullscreen", + "returntype": "bool" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetCurrentSceneFocusProcess", + "returntype": "uint32_t" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetLastFrameRenderer", + "returntype": "uint32_t" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "CanRenderScene", + "returntype": "bool" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "ShowMirrorWindow", + "returntype": "void" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "HideMirrorWindow", + "returntype": "void" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "IsMirrorWindowVisible", + "returntype": "bool" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "CompositorDumpImages", + "returntype": "void" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "ShouldAppRenderWithLowResources", + "returntype": "bool" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "ForceInterleavedReprojectionOn", + "returntype": "void", + "params": [ +{ "paramname": "bOverride" ,"paramtype": "bool"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "ForceReconnectProcess", + "returntype": "void" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "SuspendRendering", + "returntype": "void", + "params": [ +{ "paramname": "bSuspend" ,"paramtype": "bool"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetMirrorTextureD3D11", + "returntype": "vr::EVRCompositorError", + "params": [ +{ "paramname": "eEye" ,"paramtype": "vr::EVREye"}, +{ "paramname": "pD3D11DeviceOrResource" ,"paramtype": "void *"}, +{ "paramname": "ppD3D11ShaderResourceView" ,"paramtype": "void **"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "ReleaseMirrorTextureD3D11", + "returntype": "void", + "params": [ +{ "paramname": "pD3D11ShaderResourceView" ,"paramtype": "void *"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetMirrorTextureGL", + "returntype": "vr::EVRCompositorError", + "params": [ +{ "paramname": "eEye" ,"paramtype": "vr::EVREye"}, +{ "paramname": "pglTextureId" ,"paramtype": "vr::glUInt_t *"}, +{ "paramname": "pglSharedTextureHandle" ,"paramtype": "vr::glSharedTextureHandle_t *"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "ReleaseSharedGLTexture", + "returntype": "bool", + "params": [ +{ "paramname": "glTextureId" ,"paramtype": "vr::glUInt_t"}, +{ "paramname": "glSharedTextureHandle" ,"paramtype": "vr::glSharedTextureHandle_t"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "LockGLSharedTextureForAccess", + "returntype": "void", + "params": [ +{ "paramname": "glSharedTextureHandle" ,"paramtype": "vr::glSharedTextureHandle_t"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "UnlockGLSharedTextureForAccess", + "returntype": "void", + "params": [ +{ "paramname": "glSharedTextureHandle" ,"paramtype": "vr::glSharedTextureHandle_t"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetVulkanInstanceExtensionsRequired", + "returntype": "uint32_t", + "params": [ +{ "paramname": "pchValue" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetVulkanDeviceExtensionsRequired", + "returntype": "uint32_t", + "params": [ +{ "paramname": "pPhysicalDevice" ,"paramtype": "struct VkPhysicalDevice_T *"}, +{ "paramname": "pchValue" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "SetExplicitTimingMode", + "returntype": "void", + "params": [ +{ "paramname": "eTimingMode" ,"paramtype": "vr::EVRCompositorTimingMode"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "SubmitExplicitTimingData", + "returntype": "vr::EVRCompositorError" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "IsMotionSmoothingEnabled", + "returntype": "bool" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "IsMotionSmoothingSupported", + "returntype": "bool" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "IsCurrentSceneFocusAppLoading", + "returntype": "bool" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "SetStageOverride_Async", + "returntype": "vr::EVRCompositorError", + "params": [ +{ "paramname": "pchRenderModelPath" ,"paramtype": "const char *"}, +{ "paramname": "pTransform" ,"paramtype": "const struct vr::HmdMatrix34_t *"}, +{ "paramname": "pRenderSettings" ,"paramtype": "const struct vr::Compositor_StageRenderSettings *"}, +{ "paramname": "nSizeOfRenderSettings" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "ClearStageOverride", + "returntype": "void" +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetCompositorBenchmarkResults", + "returntype": "bool", + "params": [ +{ "paramname": "pBenchmarkResults" ,"paramtype": "struct vr::Compositor_BenchmarkResults *"}, +{ "paramname": "nSizeOfBenchmarkResults" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetLastPosePredictionIDs", + "returntype": "vr::EVRCompositorError", + "params": [ +{ "paramname": "pRenderPosePredictionID" ,"paramtype": "uint32_t *"}, +{ "paramname": "pGamePosePredictionID" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVRCompositor", + "methodname": "GetPosesForFrame", + "returntype": "vr::EVRCompositorError", + "params": [ +{ "paramname": "unPosePredictionID" ,"paramtype": "uint32_t"}, +{ "paramname": "pPoseArray" ,"array_count": "unPoseArrayCount" ,"paramtype": "struct vr::TrackedDevicePose_t *"}, +{ "paramname": "unPoseArrayCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "FindOverlay", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "pchOverlayKey" ,"paramtype": "const char *"}, +{ "paramname": "pOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "CreateOverlay", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "pchOverlayKey" ,"paramtype": "const char *"}, +{ "paramname": "pchOverlayName" ,"paramtype": "const char *"}, +{ "paramname": "pOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "DestroyOverlay", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayKey", + "returntype": "uint32_t", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pchValue" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"}, +{ "paramname": "pError" ,"paramtype": "vr::EVROverlayError *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayName", + "returntype": "uint32_t", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pchValue" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"}, +{ "paramname": "pError" ,"paramtype": "vr::EVROverlayError *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayName", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pchName" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayImageData", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pvBuffer" ,"paramtype": "void *"}, +{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"}, +{ "paramname": "punWidth" ,"paramtype": "uint32_t *"}, +{ "paramname": "punHeight" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayErrorNameFromEnum", + "returntype": "const char *", + "params": [ +{ "paramname": "error" ,"paramtype": "vr::EVROverlayError"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayRenderingPid", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "unPID" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayRenderingPid", + "returntype": "uint32_t", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayFlag", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "eOverlayFlag" ,"paramtype": "vr::VROverlayFlags"}, +{ "paramname": "bEnabled" ,"paramtype": "bool"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayFlag", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "eOverlayFlag" ,"paramtype": "vr::VROverlayFlags"}, +{ "paramname": "pbEnabled" ,"paramtype": "bool *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayFlags", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pFlags" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayColor", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "fRed" ,"paramtype": "float"}, +{ "paramname": "fGreen" ,"paramtype": "float"}, +{ "paramname": "fBlue" ,"paramtype": "float"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayColor", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pfRed" ,"paramtype": "float *"}, +{ "paramname": "pfGreen" ,"paramtype": "float *"}, +{ "paramname": "pfBlue" ,"paramtype": "float *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayAlpha", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "fAlpha" ,"paramtype": "float"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayAlpha", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pfAlpha" ,"paramtype": "float *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayTexelAspect", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "fTexelAspect" ,"paramtype": "float"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayTexelAspect", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pfTexelAspect" ,"paramtype": "float *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlaySortOrder", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "unSortOrder" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlaySortOrder", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "punSortOrder" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayWidthInMeters", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "fWidthInMeters" ,"paramtype": "float"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayWidthInMeters", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pfWidthInMeters" ,"paramtype": "float *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayCurvature", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "fCurvature" ,"paramtype": "float"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayCurvature", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pfCurvature" ,"paramtype": "float *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayTextureColorSpace", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "eTextureColorSpace" ,"paramtype": "vr::EColorSpace"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayTextureColorSpace", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "peTextureColorSpace" ,"paramtype": "vr::EColorSpace *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayTextureBounds", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pOverlayTextureBounds" ,"paramtype": "const struct vr::VRTextureBounds_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayTextureBounds", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pOverlayTextureBounds" ,"paramtype": "struct vr::VRTextureBounds_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayTransformType", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "peTransformType" ,"paramtype": "vr::VROverlayTransformType *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayTransformAbsolute", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "eTrackingOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"}, +{ "paramname": "pmatTrackingOriginToOverlayTransform" ,"paramtype": "const struct vr::HmdMatrix34_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayTransformAbsolute", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "peTrackingOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin *"}, +{ "paramname": "pmatTrackingOriginToOverlayTransform" ,"paramtype": "struct vr::HmdMatrix34_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayTransformTrackedDeviceRelative", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "unTrackedDevice" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "pmatTrackedDeviceToOverlayTransform" ,"paramtype": "const struct vr::HmdMatrix34_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayTransformTrackedDeviceRelative", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "punTrackedDevice" ,"paramtype": "vr::TrackedDeviceIndex_t *"}, +{ "paramname": "pmatTrackedDeviceToOverlayTransform" ,"paramtype": "struct vr::HmdMatrix34_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayTransformTrackedDeviceComponent", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "pchComponentName" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayTransformTrackedDeviceComponent", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "punDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t *"}, +{ "paramname": "pchComponentName" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unComponentNameSize" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayTransformOverlayRelative", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "ulOverlayHandleParent" ,"paramtype": "vr::VROverlayHandle_t *"}, +{ "paramname": "pmatParentOverlayToOverlayTransform" ,"paramtype": "struct vr::HmdMatrix34_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayTransformOverlayRelative", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "ulOverlayHandleParent" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pmatParentOverlayToOverlayTransform" ,"paramtype": "const struct vr::HmdMatrix34_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayTransformCursor", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulCursorOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pvHotspot" ,"paramtype": "const struct vr::HmdVector2_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayTransformCursor", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pvHotspot" ,"paramtype": "struct vr::HmdVector2_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayTransformProjection", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "eTrackingOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"}, +{ "paramname": "pmatTrackingOriginToOverlayTransform" ,"paramtype": "const struct vr::HmdMatrix34_t *"}, +{ "paramname": "pProjection" ,"paramtype": "const struct vr::VROverlayProjection_t *"}, +{ "paramname": "eEye" ,"paramtype": "vr::EVREye"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "ShowOverlay", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "HideOverlay", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "IsOverlayVisible", + "returntype": "bool", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetTransformForOverlayCoordinates", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "eTrackingOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"}, +{ "paramname": "coordinatesInOverlay" ,"paramtype": "struct vr::HmdVector2_t"}, +{ "paramname": "pmatTransform" ,"paramtype": "struct vr::HmdMatrix34_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "PollNextOverlayEvent", + "returntype": "bool", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pEvent" ,"paramtype": "struct vr::VREvent_t *"}, +{ "paramname": "uncbVREvent" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayInputMethod", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "peInputMethod" ,"paramtype": "vr::VROverlayInputMethod *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayInputMethod", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "eInputMethod" ,"paramtype": "vr::VROverlayInputMethod"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayMouseScale", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pvecMouseScale" ,"paramtype": "struct vr::HmdVector2_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayMouseScale", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pvecMouseScale" ,"paramtype": "const struct vr::HmdVector2_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "ComputeOverlayIntersection", + "returntype": "bool", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pParams" ,"paramtype": "const struct vr::VROverlayIntersectionParams_t *"}, +{ "paramname": "pResults" ,"paramtype": "struct vr::VROverlayIntersectionResults_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "IsHoverTargetOverlay", + "returntype": "bool", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayIntersectionMask", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pMaskPrimitives" ,"paramtype": "struct vr::VROverlayIntersectionMaskPrimitive_t *"}, +{ "paramname": "unNumMaskPrimitives" ,"paramtype": "uint32_t"}, +{ "paramname": "unPrimitiveSize" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "TriggerLaserMouseHapticVibration", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "fDurationSeconds" ,"paramtype": "float"}, +{ "paramname": "fFrequency" ,"paramtype": "float"}, +{ "paramname": "fAmplitude" ,"paramtype": "float"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayCursor", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "ulCursorHandle" ,"paramtype": "vr::VROverlayHandle_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayCursorPositionOverride", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pvCursor" ,"paramtype": "const struct vr::HmdVector2_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "ClearOverlayCursorPositionOverride", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayTexture", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pTexture" ,"paramtype": "const struct vr::Texture_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "ClearOverlayTexture", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayRaw", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pvBuffer" ,"paramtype": "void *"}, +{ "paramname": "unWidth" ,"paramtype": "uint32_t"}, +{ "paramname": "unHeight" ,"paramtype": "uint32_t"}, +{ "paramname": "unBytesPerPixel" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetOverlayFromFile", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pchFilePath" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayTexture", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pNativeTextureHandle" ,"paramtype": "void **"}, +{ "paramname": "pNativeTextureRef" ,"paramtype": "void *"}, +{ "paramname": "pWidth" ,"paramtype": "uint32_t *"}, +{ "paramname": "pHeight" ,"paramtype": "uint32_t *"}, +{ "paramname": "pNativeFormat" ,"paramtype": "uint32_t *"}, +{ "paramname": "pAPIType" ,"paramtype": "vr::ETextureType *"}, +{ "paramname": "pColorSpace" ,"paramtype": "vr::EColorSpace *"}, +{ "paramname": "pTextureBounds" ,"paramtype": "struct vr::VRTextureBounds_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "ReleaseNativeOverlayHandle", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pNativeTextureHandle" ,"paramtype": "void *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetOverlayTextureSize", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pWidth" ,"paramtype": "uint32_t *"}, +{ "paramname": "pHeight" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "CreateDashboardOverlay", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "pchOverlayKey" ,"paramtype": "const char *"}, +{ "paramname": "pchOverlayFriendlyName" ,"paramtype": "const char *"}, +{ "paramname": "pMainHandle" ,"paramtype": "vr::VROverlayHandle_t *"}, +{ "paramname": "pThumbnailHandle" ,"paramtype": "vr::VROverlayHandle_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "IsDashboardVisible", + "returntype": "bool" +} +,{ + "classname": "vr::IVROverlay", + "methodname": "IsActiveDashboardOverlay", + "returntype": "bool", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetDashboardOverlaySceneProcess", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "unProcessId" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetDashboardOverlaySceneProcess", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "punProcessId" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "ShowDashboard", + "returntype": "void", + "params": [ +{ "paramname": "pchOverlayToShow" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetPrimaryDashboardDevice", + "returntype": "vr::TrackedDeviceIndex_t" +} +,{ + "classname": "vr::IVROverlay", + "methodname": "ShowKeyboard", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "eInputMode" ,"paramtype": "vr::EGamepadTextInputMode"}, +{ "paramname": "eLineInputMode" ,"paramtype": "vr::EGamepadTextInputLineMode"}, +{ "paramname": "unFlags" ,"paramtype": "uint32_t"}, +{ "paramname": "pchDescription" ,"paramtype": "const char *"}, +{ "paramname": "unCharMax" ,"paramtype": "uint32_t"}, +{ "paramname": "pchExistingText" ,"paramtype": "const char *"}, +{ "paramname": "uUserValue" ,"paramtype": "uint64_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "ShowKeyboardForOverlay", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "eInputMode" ,"paramtype": "vr::EGamepadTextInputMode"}, +{ "paramname": "eLineInputMode" ,"paramtype": "vr::EGamepadTextInputLineMode"}, +{ "paramname": "unFlags" ,"paramtype": "uint32_t"}, +{ "paramname": "pchDescription" ,"paramtype": "const char *"}, +{ "paramname": "unCharMax" ,"paramtype": "uint32_t"}, +{ "paramname": "pchExistingText" ,"paramtype": "const char *"}, +{ "paramname": "uUserValue" ,"paramtype": "uint64_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "GetKeyboardText", + "returntype": "uint32_t", + "params": [ +{ "paramname": "pchText" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "cchText" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "HideKeyboard", + "returntype": "void" +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetKeyboardTransformAbsolute", + "returntype": "void", + "params": [ +{ "paramname": "eTrackingOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"}, +{ "paramname": "pmatTrackingOriginToKeyboardTransform" ,"paramtype": "const struct vr::HmdMatrix34_t *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "SetKeyboardPositionForOverlay", + "returntype": "void", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "avoidRect" ,"paramtype": "struct vr::HmdRect2_t"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "ShowMessageOverlay", + "returntype": "vr::VRMessageOverlayResponse", + "params": [ +{ "paramname": "pchText" ,"paramtype": "const char *"}, +{ "paramname": "pchCaption" ,"paramtype": "const char *"}, +{ "paramname": "pchButton0Text" ,"paramtype": "const char *"}, +{ "paramname": "pchButton1Text" ,"paramtype": "const char *"}, +{ "paramname": "pchButton2Text" ,"paramtype": "const char *"}, +{ "paramname": "pchButton3Text" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVROverlay", + "methodname": "CloseMessageOverlay", + "returntype": "void" +} +,{ + "classname": "vr::IVROverlayView", + "methodname": "AcquireOverlayView", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pNativeDevice" ,"paramtype": "struct vr::VRNativeDevice_t *"}, +{ "paramname": "pOverlayView" ,"paramtype": "struct vr::VROverlayView_t *"}, +{ "paramname": "unOverlayViewSize" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVROverlayView", + "methodname": "ReleaseOverlayView", + "returntype": "vr::EVROverlayError", + "params": [ +{ "paramname": "pOverlayView" ,"paramtype": "struct vr::VROverlayView_t *"} + ] +} +,{ + "classname": "vr::IVROverlayView", + "methodname": "PostOverlayEvent", + "returntype": "void", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "pvrEvent" ,"paramtype": "const struct vr::VREvent_t *"} + ] +} +,{ + "classname": "vr::IVROverlayView", + "methodname": "IsViewingPermitted", + "returntype": "bool", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"} + ] +} +,{ + "classname": "vr::IVRHeadsetView", + "methodname": "SetHeadsetViewSize", + "returntype": "void", + "params": [ +{ "paramname": "nWidth" ,"paramtype": "uint32_t"}, +{ "paramname": "nHeight" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRHeadsetView", + "methodname": "GetHeadsetViewSize", + "returntype": "void", + "params": [ +{ "paramname": "pnWidth" ,"paramtype": "uint32_t *"}, +{ "paramname": "pnHeight" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVRHeadsetView", + "methodname": "SetHeadsetViewMode", + "returntype": "void", + "params": [ +{ "paramname": "eHeadsetViewMode" ,"paramtype": "vr::HeadsetViewMode_t"} + ] +} +,{ + "classname": "vr::IVRHeadsetView", + "methodname": "GetHeadsetViewMode", + "returntype": "vr::HeadsetViewMode_t" +} +,{ + "classname": "vr::IVRHeadsetView", + "methodname": "SetHeadsetViewCropped", + "returntype": "void", + "params": [ +{ "paramname": "bCropped" ,"paramtype": "bool"} + ] +} +,{ + "classname": "vr::IVRHeadsetView", + "methodname": "GetHeadsetViewCropped", + "returntype": "bool" +} +,{ + "classname": "vr::IVRHeadsetView", + "methodname": "GetHeadsetViewAspectRatio", + "returntype": "float" +} +,{ + "classname": "vr::IVRHeadsetView", + "methodname": "SetHeadsetViewBlendRange", + "returntype": "void", + "params": [ +{ "paramname": "flStartPct" ,"paramtype": "float"}, +{ "paramname": "flEndPct" ,"paramtype": "float"} + ] +} +,{ + "classname": "vr::IVRHeadsetView", + "methodname": "GetHeadsetViewBlendRange", + "returntype": "void", + "params": [ +{ "paramname": "pStartPct" ,"paramtype": "float *"}, +{ "paramname": "pEndPct" ,"paramtype": "float *"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "LoadRenderModel_Async", + "returntype": "vr::EVRRenderModelError", + "params": [ +{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"}, +{ "paramname": "ppRenderModel" ,"paramtype": "struct vr::RenderModel_t **"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "FreeRenderModel", + "returntype": "void", + "params": [ +{ "paramname": "pRenderModel" ,"paramtype": "struct vr::RenderModel_t *"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "LoadTexture_Async", + "returntype": "vr::EVRRenderModelError", + "params": [ +{ "paramname": "textureId" ,"paramtype": "vr::TextureID_t"}, +{ "paramname": "ppTexture" ,"paramtype": "struct vr::RenderModel_TextureMap_t **"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "FreeTexture", + "returntype": "void", + "params": [ +{ "paramname": "pTexture" ,"paramtype": "struct vr::RenderModel_TextureMap_t *"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "LoadTextureD3D11_Async", + "returntype": "vr::EVRRenderModelError", + "params": [ +{ "paramname": "textureId" ,"paramtype": "vr::TextureID_t"}, +{ "paramname": "pD3D11Device" ,"paramtype": "void *"}, +{ "paramname": "ppD3D11Texture2D" ,"paramtype": "void **"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "LoadIntoTextureD3D11_Async", + "returntype": "vr::EVRRenderModelError", + "params": [ +{ "paramname": "textureId" ,"paramtype": "vr::TextureID_t"}, +{ "paramname": "pDstTexture" ,"paramtype": "void *"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "FreeTextureD3D11", + "returntype": "void", + "params": [ +{ "paramname": "pD3D11Texture2D" ,"paramtype": "void *"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "GetRenderModelName", + "returntype": "uint32_t", + "params": [ +{ "paramname": "unRenderModelIndex" ,"paramtype": "uint32_t"}, +{ "paramname": "pchRenderModelName" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unRenderModelNameLen" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "GetRenderModelCount", + "returntype": "uint32_t" +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "GetComponentCount", + "returntype": "uint32_t", + "params": [ +{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "GetComponentName", + "returntype": "uint32_t", + "params": [ +{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"}, +{ "paramname": "unComponentIndex" ,"paramtype": "uint32_t"}, +{ "paramname": "pchComponentName" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unComponentNameLen" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "GetComponentButtonMask", + "returntype": "uint64_t", + "params": [ +{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"}, +{ "paramname": "pchComponentName" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "GetComponentRenderModelName", + "returntype": "uint32_t", + "params": [ +{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"}, +{ "paramname": "pchComponentName" ,"paramtype": "const char *"}, +{ "paramname": "pchComponentRenderModelName" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unComponentRenderModelNameLen" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "GetComponentStateForDevicePath", + "returntype": "bool", + "params": [ +{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"}, +{ "paramname": "pchComponentName" ,"paramtype": "const char *"}, +{ "paramname": "devicePath" ,"paramtype": "vr::VRInputValueHandle_t"}, +{ "paramname": "pState" ,"paramtype": "const vr::RenderModel_ControllerMode_State_t *"}, +{ "paramname": "pComponentState" ,"paramtype": "vr::RenderModel_ComponentState_t *"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "GetComponentState", + "returntype": "bool", + "params": [ +{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"}, +{ "paramname": "pchComponentName" ,"paramtype": "const char *"}, +{ "paramname": "pControllerState" ,"paramtype": "const vr::VRControllerState_t *"}, +{ "paramname": "pState" ,"paramtype": "const struct vr::RenderModel_ControllerMode_State_t *"}, +{ "paramname": "pComponentState" ,"paramtype": "struct vr::RenderModel_ComponentState_t *"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "RenderModelHasComponent", + "returntype": "bool", + "params": [ +{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"}, +{ "paramname": "pchComponentName" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "GetRenderModelThumbnailURL", + "returntype": "uint32_t", + "params": [ +{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"}, +{ "paramname": "pchThumbnailURL" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unThumbnailURLLen" ,"paramtype": "uint32_t"}, +{ "paramname": "peError" ,"paramtype": "vr::EVRRenderModelError *"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "GetRenderModelOriginalPath", + "returntype": "uint32_t", + "params": [ +{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"}, +{ "paramname": "pchOriginalPath" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unOriginalPathLen" ,"paramtype": "uint32_t"}, +{ "paramname": "peError" ,"paramtype": "vr::EVRRenderModelError *"} + ] +} +,{ + "classname": "vr::IVRRenderModels", + "methodname": "GetRenderModelErrorNameFromEnum", + "returntype": "const char *", + "params": [ +{ "paramname": "error" ,"paramtype": "vr::EVRRenderModelError"} + ] +} +,{ + "classname": "vr::IVRNotifications", + "methodname": "CreateNotification", + "returntype": "vr::EVRNotificationError", + "params": [ +{ "paramname": "ulOverlayHandle" ,"paramtype": "vr::VROverlayHandle_t"}, +{ "paramname": "ulUserValue" ,"paramtype": "uint64_t"}, +{ "paramname": "type" ,"paramtype": "vr::EVRNotificationType"}, +{ "paramname": "pchText" ,"paramtype": "const char *"}, +{ "paramname": "style" ,"paramtype": "vr::EVRNotificationStyle"}, +{ "paramname": "pImage" ,"paramtype": "const struct vr::NotificationBitmap_t *"}, +{ "paramname": "pNotificationId" ,"paramtype": "vr::VRNotificationId *"} + ] +} +,{ + "classname": "vr::IVRNotifications", + "methodname": "RemoveNotification", + "returntype": "vr::EVRNotificationError", + "params": [ +{ "paramname": "notificationId" ,"paramtype": "vr::VRNotificationId"} + ] +} +,{ + "classname": "vr::IVRSettings", + "methodname": "GetSettingsErrorNameFromEnum", + "returntype": "const char *", + "params": [ +{ "paramname": "eError" ,"paramtype": "vr::EVRSettingsError"} + ] +} +,{ + "classname": "vr::IVRSettings", + "methodname": "SetBool", + "returntype": "void", + "params": [ +{ "paramname": "pchSection" ,"paramtype": "const char *"}, +{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"}, +{ "paramname": "bValue" ,"paramtype": "bool"}, +{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"} + ] +} +,{ + "classname": "vr::IVRSettings", + "methodname": "SetInt32", + "returntype": "void", + "params": [ +{ "paramname": "pchSection" ,"paramtype": "const char *"}, +{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"}, +{ "paramname": "nValue" ,"paramtype": "int32_t"}, +{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"} + ] +} +,{ + "classname": "vr::IVRSettings", + "methodname": "SetFloat", + "returntype": "void", + "params": [ +{ "paramname": "pchSection" ,"paramtype": "const char *"}, +{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"}, +{ "paramname": "flValue" ,"paramtype": "float"}, +{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"} + ] +} +,{ + "classname": "vr::IVRSettings", + "methodname": "SetString", + "returntype": "void", + "params": [ +{ "paramname": "pchSection" ,"paramtype": "const char *"}, +{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"}, +{ "paramname": "pchValue" ,"paramtype": "const char *"}, +{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"} + ] +} +,{ + "classname": "vr::IVRSettings", + "methodname": "GetBool", + "returntype": "bool", + "params": [ +{ "paramname": "pchSection" ,"paramtype": "const char *"}, +{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"}, +{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"} + ] +} +,{ + "classname": "vr::IVRSettings", + "methodname": "GetInt32", + "returntype": "int32_t", + "params": [ +{ "paramname": "pchSection" ,"paramtype": "const char *"}, +{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"}, +{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"} + ] +} +,{ + "classname": "vr::IVRSettings", + "methodname": "GetFloat", + "returntype": "float", + "params": [ +{ "paramname": "pchSection" ,"paramtype": "const char *"}, +{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"}, +{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"} + ] +} +,{ + "classname": "vr::IVRSettings", + "methodname": "GetString", + "returntype": "void", + "params": [ +{ "paramname": "pchSection" ,"paramtype": "const char *"}, +{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"}, +{ "paramname": "pchValue" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unValueLen" ,"paramtype": "uint32_t"}, +{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"} + ] +} +,{ + "classname": "vr::IVRSettings", + "methodname": "RemoveSection", + "returntype": "void", + "params": [ +{ "paramname": "pchSection" ,"paramtype": "const char *"}, +{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"} + ] +} +,{ + "classname": "vr::IVRSettings", + "methodname": "RemoveKeyInSection", + "returntype": "void", + "params": [ +{ "paramname": "pchSection" ,"paramtype": "const char *"}, +{ "paramname": "pchSettingsKey" ,"paramtype": "const char *"}, +{ "paramname": "peError" ,"paramtype": "vr::EVRSettingsError *"} + ] +} +,{ + "classname": "vr::IVRScreenshots", + "methodname": "RequestScreenshot", + "returntype": "vr::EVRScreenshotError", + "params": [ +{ "paramname": "pOutScreenshotHandle" ,"paramtype": "vr::ScreenshotHandle_t *"}, +{ "paramname": "type" ,"paramtype": "vr::EVRScreenshotType"}, +{ "paramname": "pchPreviewFilename" ,"paramtype": "const char *"}, +{ "paramname": "pchVRFilename" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRScreenshots", + "methodname": "HookScreenshot", + "returntype": "vr::EVRScreenshotError", + "params": [ +{ "paramname": "pSupportedTypes" ,"array_count": "numTypes" ,"paramtype": "const vr::EVRScreenshotType *"}, +{ "paramname": "numTypes" ,"paramtype": "int"} + ] +} +,{ + "classname": "vr::IVRScreenshots", + "methodname": "GetScreenshotPropertyType", + "returntype": "vr::EVRScreenshotType", + "params": [ +{ "paramname": "screenshotHandle" ,"paramtype": "vr::ScreenshotHandle_t"}, +{ "paramname": "pError" ,"paramtype": "vr::EVRScreenshotError *"} + ] +} +,{ + "classname": "vr::IVRScreenshots", + "methodname": "GetScreenshotPropertyFilename", + "returntype": "uint32_t", + "params": [ +{ "paramname": "screenshotHandle" ,"paramtype": "vr::ScreenshotHandle_t"}, +{ "paramname": "filenameType" ,"paramtype": "vr::EVRScreenshotPropertyFilenames"}, +{ "paramname": "pchFilename" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "cchFilename" ,"paramtype": "uint32_t"}, +{ "paramname": "pError" ,"paramtype": "vr::EVRScreenshotError *"} + ] +} +,{ + "classname": "vr::IVRScreenshots", + "methodname": "UpdateScreenshotProgress", + "returntype": "vr::EVRScreenshotError", + "params": [ +{ "paramname": "screenshotHandle" ,"paramtype": "vr::ScreenshotHandle_t"}, +{ "paramname": "flProgress" ,"paramtype": "float"} + ] +} +,{ + "classname": "vr::IVRScreenshots", + "methodname": "TakeStereoScreenshot", + "returntype": "vr::EVRScreenshotError", + "params": [ +{ "paramname": "pOutScreenshotHandle" ,"paramtype": "vr::ScreenshotHandle_t *"}, +{ "paramname": "pchPreviewFilename" ,"paramtype": "const char *"}, +{ "paramname": "pchVRFilename" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRScreenshots", + "methodname": "SubmitScreenshot", + "returntype": "vr::EVRScreenshotError", + "params": [ +{ "paramname": "screenshotHandle" ,"paramtype": "vr::ScreenshotHandle_t"}, +{ "paramname": "type" ,"paramtype": "vr::EVRScreenshotType"}, +{ "paramname": "pchSourcePreviewFilename" ,"paramtype": "const char *"}, +{ "paramname": "pchSourceVRFilename" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRResources", + "methodname": "LoadSharedResource", + "returntype": "uint32_t", + "params": [ +{ "paramname": "pchResourceName" ,"paramtype": "const char *"}, +{ "paramname": "pchBuffer" ,"paramtype": "char *"}, +{ "paramname": "unBufferLen" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRResources", + "methodname": "GetResourceFullPath", + "returntype": "uint32_t", + "params": [ +{ "paramname": "pchResourceName" ,"paramtype": "const char *"}, +{ "paramname": "pchResourceTypeDirectory" ,"paramtype": "const char *"}, +{ "paramname": "pchPathBuffer" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unBufferLen" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRDriverManager", + "methodname": "GetDriverCount", + "returntype": "uint32_t" +} +,{ + "classname": "vr::IVRDriverManager", + "methodname": "GetDriverName", + "returntype": "uint32_t", + "params": [ +{ "paramname": "nDriver" ,"paramtype": "vr::DriverId_t"}, +{ "paramname": "pchValue" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRDriverManager", + "methodname": "GetDriverHandle", + "returntype": "DriverHandle_t", + "params": [ +{ "paramname": "pchDriverName" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRDriverManager", + "methodname": "IsEnabled", + "returntype": "bool", + "params": [ +{ "paramname": "nDriver" ,"paramtype": "vr::DriverId_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "SetActionManifestPath", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "pchActionManifestPath" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetActionSetHandle", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "pchActionSetName" ,"paramtype": "const char *"}, +{ "paramname": "pHandle" ,"paramtype": "vr::VRActionSetHandle_t *"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetActionHandle", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "pchActionName" ,"paramtype": "const char *"}, +{ "paramname": "pHandle" ,"paramtype": "vr::VRActionHandle_t *"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetInputSourceHandle", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "pchInputSourcePath" ,"paramtype": "const char *"}, +{ "paramname": "pHandle" ,"paramtype": "vr::VRInputValueHandle_t *"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "UpdateActionState", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "pSets" ,"array_count": "unSetCount" ,"paramtype": "struct vr::VRActiveActionSet_t *"}, +{ "paramname": "unSizeOfVRSelectedActionSet_t" ,"paramtype": "uint32_t"}, +{ "paramname": "unSetCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetDigitalActionData", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "action" ,"paramtype": "vr::VRActionHandle_t"}, +{ "paramname": "pActionData" ,"paramtype": "struct vr::InputDigitalActionData_t *"}, +{ "paramname": "unActionDataSize" ,"paramtype": "uint32_t"}, +{ "paramname": "ulRestrictToDevice" ,"paramtype": "vr::VRInputValueHandle_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetAnalogActionData", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "action" ,"paramtype": "vr::VRActionHandle_t"}, +{ "paramname": "pActionData" ,"paramtype": "struct vr::InputAnalogActionData_t *"}, +{ "paramname": "unActionDataSize" ,"paramtype": "uint32_t"}, +{ "paramname": "ulRestrictToDevice" ,"paramtype": "vr::VRInputValueHandle_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetPoseActionDataRelativeToNow", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "action" ,"paramtype": "vr::VRActionHandle_t"}, +{ "paramname": "eOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"}, +{ "paramname": "fPredictedSecondsFromNow" ,"paramtype": "float"}, +{ "paramname": "pActionData" ,"paramtype": "struct vr::InputPoseActionData_t *"}, +{ "paramname": "unActionDataSize" ,"paramtype": "uint32_t"}, +{ "paramname": "ulRestrictToDevice" ,"paramtype": "vr::VRInputValueHandle_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetPoseActionDataForNextFrame", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "action" ,"paramtype": "vr::VRActionHandle_t"}, +{ "paramname": "eOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"}, +{ "paramname": "pActionData" ,"paramtype": "struct vr::InputPoseActionData_t *"}, +{ "paramname": "unActionDataSize" ,"paramtype": "uint32_t"}, +{ "paramname": "ulRestrictToDevice" ,"paramtype": "vr::VRInputValueHandle_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetSkeletalActionData", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "action" ,"paramtype": "vr::VRActionHandle_t"}, +{ "paramname": "pActionData" ,"paramtype": "struct vr::InputSkeletalActionData_t *"}, +{ "paramname": "unActionDataSize" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetDominantHand", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "peDominantHand" ,"paramtype": "vr::ETrackedControllerRole *"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "SetDominantHand", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "eDominantHand" ,"paramtype": "vr::ETrackedControllerRole"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetBoneCount", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "action" ,"paramtype": "vr::VRActionHandle_t"}, +{ "paramname": "pBoneCount" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetBoneHierarchy", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "action" ,"paramtype": "vr::VRActionHandle_t"}, +{ "paramname": "pParentIndices" ,"array_count": "unIndexArayCount" ,"paramtype": "vr::BoneIndex_t *"}, +{ "paramname": "unIndexArayCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetBoneName", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "action" ,"paramtype": "vr::VRActionHandle_t"}, +{ "paramname": "nBoneIndex" ,"paramtype": "vr::BoneIndex_t"}, +{ "paramname": "pchBoneName" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unNameBufferSize" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetSkeletalReferenceTransforms", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "action" ,"paramtype": "vr::VRActionHandle_t"}, +{ "paramname": "eTransformSpace" ,"paramtype": "vr::EVRSkeletalTransformSpace"}, +{ "paramname": "eReferencePose" ,"paramtype": "vr::EVRSkeletalReferencePose"}, +{ "paramname": "pTransformArray" ,"array_count": "unTransformArrayCount" ,"paramtype": "struct vr::VRBoneTransform_t *"}, +{ "paramname": "unTransformArrayCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetSkeletalTrackingLevel", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "action" ,"paramtype": "vr::VRActionHandle_t"}, +{ "paramname": "pSkeletalTrackingLevel" ,"paramtype": "vr::EVRSkeletalTrackingLevel *"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetSkeletalBoneData", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "action" ,"paramtype": "vr::VRActionHandle_t"}, +{ "paramname": "eTransformSpace" ,"paramtype": "vr::EVRSkeletalTransformSpace"}, +{ "paramname": "eMotionRange" ,"paramtype": "vr::EVRSkeletalMotionRange"}, +{ "paramname": "pTransformArray" ,"array_count": "unTransformArrayCount" ,"paramtype": "struct vr::VRBoneTransform_t *"}, +{ "paramname": "unTransformArrayCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetSkeletalSummaryData", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "action" ,"paramtype": "vr::VRActionHandle_t"}, +{ "paramname": "eSummaryType" ,"paramtype": "vr::EVRSummaryType"}, +{ "paramname": "pSkeletalSummaryData" ,"paramtype": "struct vr::VRSkeletalSummaryData_t *"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetSkeletalBoneDataCompressed", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "action" ,"paramtype": "vr::VRActionHandle_t"}, +{ "paramname": "eMotionRange" ,"paramtype": "vr::EVRSkeletalMotionRange"}, +{ "paramname": "pvCompressedData" ,"out_buffer_count": "unCompressedSize" ,"paramtype": "void *"}, +{ "paramname": "unCompressedSize" ,"paramtype": "uint32_t"}, +{ "paramname": "punRequiredCompressedSize" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "DecompressSkeletalBoneData", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "pvCompressedBuffer" ,"paramtype": "const void *"}, +{ "paramname": "unCompressedBufferSize" ,"paramtype": "uint32_t"}, +{ "paramname": "eTransformSpace" ,"paramtype": "vr::EVRSkeletalTransformSpace"}, +{ "paramname": "pTransformArray" ,"array_count": "unTransformArrayCount" ,"paramtype": "struct vr::VRBoneTransform_t *"}, +{ "paramname": "unTransformArrayCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "TriggerHapticVibrationAction", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "action" ,"paramtype": "vr::VRActionHandle_t"}, +{ "paramname": "fStartSecondsFromNow" ,"paramtype": "float"}, +{ "paramname": "fDurationSeconds" ,"paramtype": "float"}, +{ "paramname": "fFrequency" ,"paramtype": "float"}, +{ "paramname": "fAmplitude" ,"paramtype": "float"}, +{ "paramname": "ulRestrictToDevice" ,"paramtype": "vr::VRInputValueHandle_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetActionOrigins", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "actionSetHandle" ,"paramtype": "vr::VRActionSetHandle_t"}, +{ "paramname": "digitalActionHandle" ,"paramtype": "vr::VRActionHandle_t"}, +{ "paramname": "originsOut" ,"array_count": "originOutCount" ,"paramtype": "vr::VRInputValueHandle_t *"}, +{ "paramname": "originOutCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetOriginLocalizedName", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "origin" ,"paramtype": "vr::VRInputValueHandle_t"}, +{ "paramname": "pchNameArray" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unNameArraySize" ,"paramtype": "uint32_t"}, +{ "paramname": "unStringSectionsToInclude" ,"paramtype": "int32_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetOriginTrackedDeviceInfo", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "origin" ,"paramtype": "vr::VRInputValueHandle_t"}, +{ "paramname": "pOriginInfo" ,"paramtype": "struct vr::InputOriginInfo_t *"}, +{ "paramname": "unOriginInfoSize" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetActionBindingInfo", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "action" ,"paramtype": "vr::VRActionHandle_t"}, +{ "paramname": "pOriginInfo" ,"paramtype": "struct vr::InputBindingInfo_t *"}, +{ "paramname": "unBindingInfoSize" ,"paramtype": "uint32_t"}, +{ "paramname": "unBindingInfoCount" ,"paramtype": "uint32_t"}, +{ "paramname": "punReturnedBindingInfoCount" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "ShowActionOrigins", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "actionSetHandle" ,"paramtype": "vr::VRActionSetHandle_t"}, +{ "paramname": "ulActionHandle" ,"paramtype": "vr::VRActionHandle_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "ShowBindingsForActionSet", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "pSets" ,"array_count": "unSetCount" ,"paramtype": "struct vr::VRActiveActionSet_t *"}, +{ "paramname": "unSizeOfVRSelectedActionSet_t" ,"paramtype": "uint32_t"}, +{ "paramname": "unSetCount" ,"paramtype": "uint32_t"}, +{ "paramname": "originToHighlight" ,"paramtype": "vr::VRInputValueHandle_t"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetComponentStateForBinding", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "pchRenderModelName" ,"paramtype": "const char *"}, +{ "paramname": "pchComponentName" ,"paramtype": "const char *"}, +{ "paramname": "pOriginInfo" ,"paramtype": "const struct vr::InputBindingInfo_t *"}, +{ "paramname": "unBindingInfoSize" ,"paramtype": "uint32_t"}, +{ "paramname": "unBindingInfoCount" ,"paramtype": "uint32_t"}, +{ "paramname": "pComponentState" ,"paramtype": "vr::RenderModel_ComponentState_t *"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "IsUsingLegacyInput", + "returntype": "bool" +} +,{ + "classname": "vr::IVRInput", + "methodname": "OpenBindingUI", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "pchAppKey" ,"paramtype": "const char *"}, +{ "paramname": "ulActionSetHandle" ,"paramtype": "vr::VRActionSetHandle_t"}, +{ "paramname": "ulDeviceHandle" ,"paramtype": "vr::VRInputValueHandle_t"}, +{ "paramname": "bShowOnDesktop" ,"paramtype": "bool"} + ] +} +,{ + "classname": "vr::IVRInput", + "methodname": "GetBindingVariant", + "returntype": "vr::EVRInputError", + "params": [ +{ "paramname": "ulDevicePath" ,"paramtype": "vr::VRInputValueHandle_t"}, +{ "paramname": "pchVariantArray" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unVariantArraySize" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRIOBuffer", + "methodname": "Open", + "returntype": "vr::EIOBufferError", + "params": [ +{ "paramname": "pchPath" ,"paramtype": "const char *"}, +{ "paramname": "mode" ,"paramtype": "vr::EIOBufferMode"}, +{ "paramname": "unElementSize" ,"paramtype": "uint32_t"}, +{ "paramname": "unElements" ,"paramtype": "uint32_t"}, +{ "paramname": "pulBuffer" ,"paramtype": "vr::IOBufferHandle_t *"} + ] +} +,{ + "classname": "vr::IVRIOBuffer", + "methodname": "Close", + "returntype": "vr::EIOBufferError", + "params": [ +{ "paramname": "ulBuffer" ,"paramtype": "vr::IOBufferHandle_t"} + ] +} +,{ + "classname": "vr::IVRIOBuffer", + "methodname": "Read", + "returntype": "vr::EIOBufferError", + "params": [ +{ "paramname": "ulBuffer" ,"paramtype": "vr::IOBufferHandle_t"}, +{ "paramname": "pDst" ,"paramtype": "void *"}, +{ "paramname": "unBytes" ,"paramtype": "uint32_t"}, +{ "paramname": "punRead" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVRIOBuffer", + "methodname": "Write", + "returntype": "vr::EIOBufferError", + "params": [ +{ "paramname": "ulBuffer" ,"paramtype": "vr::IOBufferHandle_t"}, +{ "paramname": "pSrc" ,"paramtype": "void *"}, +{ "paramname": "unBytes" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRIOBuffer", + "methodname": "PropertyContainer", + "returntype": "vr::PropertyContainerHandle_t", + "params": [ +{ "paramname": "ulBuffer" ,"paramtype": "vr::IOBufferHandle_t"} + ] +} +,{ + "classname": "vr::IVRIOBuffer", + "methodname": "HasReaders", + "returntype": "bool", + "params": [ +{ "paramname": "ulBuffer" ,"paramtype": "vr::IOBufferHandle_t"} + ] +} +,{ + "classname": "vr::IVRSpatialAnchors", + "methodname": "CreateSpatialAnchorFromDescriptor", + "returntype": "vr::EVRSpatialAnchorError", + "params": [ +{ "paramname": "pchDescriptor" ,"paramtype": "const char *"}, +{ "paramname": "pHandleOut" ,"paramtype": "vr::SpatialAnchorHandle_t *"} + ] +} +,{ + "classname": "vr::IVRSpatialAnchors", + "methodname": "CreateSpatialAnchorFromPose", + "returntype": "vr::EVRSpatialAnchorError", + "params": [ +{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "eOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"}, +{ "paramname": "pPose" ,"paramtype": "struct vr::SpatialAnchorPose_t *"}, +{ "paramname": "pHandleOut" ,"paramtype": "vr::SpatialAnchorHandle_t *"} + ] +} +,{ + "classname": "vr::IVRSpatialAnchors", + "methodname": "GetSpatialAnchorPose", + "returntype": "vr::EVRSpatialAnchorError", + "params": [ +{ "paramname": "unHandle" ,"paramtype": "vr::SpatialAnchorHandle_t"}, +{ "paramname": "eOrigin" ,"paramtype": "vr::ETrackingUniverseOrigin"}, +{ "paramname": "pPoseOut" ,"paramtype": "struct vr::SpatialAnchorPose_t *"} + ] +} +,{ + "classname": "vr::IVRSpatialAnchors", + "methodname": "GetSpatialAnchorDescriptor", + "returntype": "vr::EVRSpatialAnchorError", + "params": [ +{ "paramname": "unHandle" ,"paramtype": "vr::SpatialAnchorHandle_t"}, +{ "paramname": "pchDescriptorOut" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "punDescriptorBufferLenInOut" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVRDebug", + "methodname": "EmitVrProfilerEvent", + "returntype": "vr::EVRDebugError", + "params": [ +{ "paramname": "pchMessage" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRDebug", + "methodname": "BeginVrProfilerEvent", + "returntype": "vr::EVRDebugError", + "params": [ +{ "paramname": "pHandleOut" ,"paramtype": "vr::VrProfilerEventHandle_t *"} + ] +} +,{ + "classname": "vr::IVRDebug", + "methodname": "FinishVrProfilerEvent", + "returntype": "vr::EVRDebugError", + "params": [ +{ "paramname": "hHandle" ,"paramtype": "vr::VrProfilerEventHandle_t"}, +{ "paramname": "pchMessage" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRDebug", + "methodname": "DriverDebugRequest", + "returntype": "uint32_t", + "params": [ +{ "paramname": "unDeviceIndex" ,"paramtype": "vr::TrackedDeviceIndex_t"}, +{ "paramname": "pchRequest" ,"paramtype": "const char *"}, +{ "paramname": "pchResponseBuffer" ,"out_string": " " ,"paramtype": "char *"}, +{ "paramname": "unResponseBufferSize" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRProperties", + "methodname": "ReadPropertyBatch", + "returntype": "vr::ETrackedPropertyError", + "params": [ +{ "paramname": "ulContainerHandle" ,"paramtype": "vr::PropertyContainerHandle_t"}, +{ "paramname": "pBatch" ,"paramtype": "struct vr::PropertyRead_t *"}, +{ "paramname": "unBatchEntryCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRProperties", + "methodname": "WritePropertyBatch", + "returntype": "vr::ETrackedPropertyError", + "params": [ +{ "paramname": "ulContainerHandle" ,"paramtype": "vr::PropertyContainerHandle_t"}, +{ "paramname": "pBatch" ,"paramtype": "struct vr::PropertyWrite_t *"}, +{ "paramname": "unBatchEntryCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRProperties", + "methodname": "GetPropErrorNameFromEnum", + "returntype": "const char *", + "params": [ +{ "paramname": "error" ,"paramtype": "vr::ETrackedPropertyError"} + ] +} +,{ + "classname": "vr::IVRProperties", + "methodname": "TrackedDeviceToPropertyContainer", + "returntype": "PropertyContainerHandle_t", + "params": [ +{ "paramname": "nDevice" ,"paramtype": "vr::TrackedDeviceIndex_t"} + ] +} +,{ + "classname": "vr::IVRPaths", + "methodname": "ReadPathBatch", + "returntype": "vr::ETrackedPropertyError", + "params": [ +{ "paramname": "ulRootHandle" ,"paramtype": "vr::PropertyContainerHandle_t"}, +{ "paramname": "pBatch" ,"paramtype": "struct vr::PathRead_t *"}, +{ "paramname": "unBatchEntryCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRPaths", + "methodname": "WritePathBatch", + "returntype": "vr::ETrackedPropertyError", + "params": [ +{ "paramname": "ulRootHandle" ,"paramtype": "vr::PropertyContainerHandle_t"}, +{ "paramname": "pBatch" ,"paramtype": "struct vr::PathWrite_t *"}, +{ "paramname": "unBatchEntryCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRPaths", + "methodname": "StringToHandle", + "returntype": "vr::ETrackedPropertyError", + "params": [ +{ "paramname": "pHandle" ,"paramtype": "vr::PathHandle_t *"}, +{ "paramname": "pchPath" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRPaths", + "methodname": "HandleToString", + "returntype": "vr::ETrackedPropertyError", + "params": [ +{ "paramname": "pHandle" ,"paramtype": "vr::PathHandle_t"}, +{ "paramname": "pchBuffer" ,"paramtype": "char *"}, +{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"}, +{ "paramname": "punBufferSizeUsed" ,"paramtype": "uint32_t *"} + ] +} +,{ + "classname": "vr::IVRBlockQueue", + "methodname": "Create", + "returntype": "vr::EBlockQueueError", + "params": [ +{ "paramname": "pulQueueHandle" ,"paramtype": "vr::PropertyContainerHandle_t *"}, +{ "paramname": "pchPath" ,"paramtype": "const char *"}, +{ "paramname": "unBlockDataSize" ,"paramtype": "uint32_t"}, +{ "paramname": "unBlockHeaderSize" ,"paramtype": "uint32_t"}, +{ "paramname": "unBlockCount" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRBlockQueue", + "methodname": "Connect", + "returntype": "vr::EBlockQueueError", + "params": [ +{ "paramname": "pulQueueHandle" ,"paramtype": "vr::PropertyContainerHandle_t *"}, +{ "paramname": "pchPath" ,"paramtype": "const char *"} + ] +} +,{ + "classname": "vr::IVRBlockQueue", + "methodname": "Destroy", + "returntype": "vr::EBlockQueueError", + "params": [ +{ "paramname": "ulQueueHandle" ,"paramtype": "vr::PropertyContainerHandle_t"} + ] +} +,{ + "classname": "vr::IVRBlockQueue", + "methodname": "AcquireWriteOnlyBlock", + "returntype": "vr::EBlockQueueError", + "params": [ +{ "paramname": "ulQueueHandle" ,"paramtype": "vr::PropertyContainerHandle_t"}, +{ "paramname": "pulBlockHandle" ,"paramtype": "vr::PropertyContainerHandle_t *"}, +{ "paramname": "ppvBuffer" ,"paramtype": "void **"} + ] +} +,{ + "classname": "vr::IVRBlockQueue", + "methodname": "ReleaseWriteOnlyBlock", + "returntype": "vr::EBlockQueueError", + "params": [ +{ "paramname": "ulQueueHandle" ,"paramtype": "vr::PropertyContainerHandle_t"}, +{ "paramname": "ulBlockHandle" ,"paramtype": "vr::PropertyContainerHandle_t"} + ] +} +,{ + "classname": "vr::IVRBlockQueue", + "methodname": "WaitAndAcquireReadOnlyBlock", + "returntype": "vr::EBlockQueueError", + "params": [ +{ "paramname": "ulQueueHandle" ,"paramtype": "vr::PropertyContainerHandle_t"}, +{ "paramname": "pulBlockHandle" ,"paramtype": "vr::PropertyContainerHandle_t *"}, +{ "paramname": "ppvBuffer" ,"paramtype": "const void **"}, +{ "paramname": "eReadType" ,"paramtype": "vr::EBlockQueueReadType"}, +{ "paramname": "unTimeoutMs" ,"paramtype": "uint32_t"} + ] +} +,{ + "classname": "vr::IVRBlockQueue", + "methodname": "AcquireReadOnlyBlock", + "returntype": "vr::EBlockQueueError", + "params": [ +{ "paramname": "ulQueueHandle" ,"paramtype": "vr::PropertyContainerHandle_t"}, +{ "paramname": "pulBlockHandle" ,"paramtype": "vr::PropertyContainerHandle_t *"}, +{ "paramname": "ppvBuffer" ,"paramtype": "const void **"}, +{ "paramname": "eReadType" ,"paramtype": "vr::EBlockQueueReadType"} + ] +} +,{ + "classname": "vr::IVRBlockQueue", + "methodname": "ReleaseReadOnlyBlock", + "returntype": "vr::EBlockQueueError", + "params": [ +{ "paramname": "ulQueueHandle" ,"paramtype": "vr::PropertyContainerHandle_t"}, +{ "paramname": "ulBlockHandle" ,"paramtype": "vr::PropertyContainerHandle_t"} + ] +} +,{ + "classname": "vr::IVRBlockQueue", + "methodname": "QueueHasReader", + "returntype": "vr::EBlockQueueError", + "params": [ +{ "paramname": "ulQueueHandle" ,"paramtype": "vr::PropertyContainerHandle_t"}, +{ "paramname": "pbHasReaders" ,"paramtype": "bool *"} + ] +} +] +} \ No newline at end of file diff --git a/contrib/openvr/headers/openvr_capi.h b/contrib/openvr/headers/openvr_capi.h new file mode 100755 index 0000000..3c32c59 --- /dev/null +++ b/contrib/openvr/headers/openvr_capi.h @@ -0,0 +1,3125 @@ +//======= Copyright (c) Valve Corporation, All rights reserved. =============== +// +// Purpose: Header for flatted SteamAPI. Use this for binding to other languages. +// This file is auto-generated, do not edit it. +// +//============================================================================= + +#ifndef __OPENVR_API_FLAT_H__ +#define __OPENVR_API_FLAT_H__ +#if defined( _WIN32 ) || defined( __clang__ ) +#pragma once +#endif + +#ifdef __cplusplus +#define EXTERN_C extern "C" +#else +#define EXTERN_C +#endif + +#if defined( _WIN32 ) +#define OPENVR_FNTABLE_CALLTYPE __stdcall +#else +#define OPENVR_FNTABLE_CALLTYPE +#endif + +// OPENVR API export macro +#if defined( _WIN32 ) && !defined( _X360 ) + #if defined( OPENVR_API_EXPORTS ) + #define S_API EXTERN_C __declspec( dllexport ) + #elif defined( OPENVR_API_NODLL ) + #define S_API EXTERN_C + #else + #define S_API extern "C" __declspec( dllimport ) + #endif // OPENVR_API_EXPORTS +#elif defined( __GNUC__ ) + #if defined( OPENVR_API_EXPORTS ) + #define S_API EXTERN_C __attribute__ ((visibility("default"))) + #else + #define S_API EXTERN_C + #endif // OPENVR_API_EXPORTS +#else // !WIN32 + #if defined( OPENVR_API_EXPORTS ) + #define S_API EXTERN_C + #else + #define S_API EXTERN_C + #endif // OPENVR_API_EXPORTS +#endif + +#include + +#if defined( __WIN32 ) +typedef char bool; +#else +#include +#endif + +typedef uint64_t PropertyContainerHandle_t; +typedef uint32_t PropertyTypeTag_t; +typedef uint64_t VRActionHandle_t; +typedef uint64_t VRActionSetHandle_t; +typedef uint64_t VRInputValueHandle_t; +typedef uint64_t PathHandle_t; + + +// OpenVR Constants + +static const unsigned long k_nDriverNone = 4294967295; +static const unsigned long k_unMaxDriverDebugResponseSize = 32768; +static const unsigned long k_unTrackedDeviceIndex_Hmd = 0; +static const unsigned long k_unMaxTrackedDeviceCount = 64; +static const unsigned long k_unTrackedDeviceIndexOther = 4294967294; +static const unsigned long k_unTrackedDeviceIndexInvalid = 4294967295; +static const unsigned long long k_ulInvalidPropertyContainer = 0; +static const unsigned long k_unInvalidPropertyTag = 0; +static const unsigned long long k_ulInvalidDriverHandle = 0; +static const unsigned long k_unFloatPropertyTag = 1; +static const unsigned long k_unInt32PropertyTag = 2; +static const unsigned long k_unUint64PropertyTag = 3; +static const unsigned long k_unBoolPropertyTag = 4; +static const unsigned long k_unStringPropertyTag = 5; +static const unsigned long k_unErrorPropertyTag = 6; +static const unsigned long k_unDoublePropertyTag = 7; +static const unsigned long k_unHmdMatrix34PropertyTag = 20; +static const unsigned long k_unHmdMatrix44PropertyTag = 21; +static const unsigned long k_unHmdVector3PropertyTag = 22; +static const unsigned long k_unHmdVector4PropertyTag = 23; +static const unsigned long k_unHmdVector2PropertyTag = 24; +static const unsigned long k_unHmdQuadPropertyTag = 25; +static const unsigned long k_unHiddenAreaPropertyTag = 30; +static const unsigned long k_unPathHandleInfoTag = 31; +static const unsigned long k_unActionPropertyTag = 32; +static const unsigned long k_unInputValuePropertyTag = 33; +static const unsigned long k_unWildcardPropertyTag = 34; +static const unsigned long k_unHapticVibrationPropertyTag = 35; +static const unsigned long k_unSkeletonPropertyTag = 36; +static const unsigned long k_unSpatialAnchorPosePropertyTag = 40; +static const unsigned long k_unJsonPropertyTag = 41; +static const unsigned long k_unActiveActionSetPropertyTag = 42; +static const unsigned long k_unOpenVRInternalReserved_Start = 1000; +static const unsigned long k_unOpenVRInternalReserved_End = 10000; +static const unsigned long k_unMaxPropertyStringSize = 32768; +static const unsigned long long k_ulInvalidActionHandle = 0; +static const unsigned long long k_ulInvalidActionSetHandle = 0; +static const unsigned long long k_ulInvalidInputValueHandle = 0; +static const unsigned long k_unControllerStateAxisCount = 5; +static const unsigned long long k_ulOverlayHandleInvalid = 0; +static const unsigned long k_unMaxDistortionFunctionParameters = 8; +static const unsigned long k_unScreenshotHandleInvalid = 0; +static const char * IVRSystem_Version = "IVRSystem_022"; +static const char * IVRExtendedDisplay_Version = "IVRExtendedDisplay_001"; +static const char * IVRTrackedCamera_Version = "IVRTrackedCamera_006"; +static const unsigned long k_unMaxApplicationKeyLength = 128; +static const char * k_pch_MimeType_HomeApp = "vr/home"; +static const char * k_pch_MimeType_GameTheater = "vr/game_theater"; +static const char * IVRApplications_Version = "IVRApplications_007"; +static const char * IVRChaperone_Version = "IVRChaperone_004"; +static const char * IVRChaperoneSetup_Version = "IVRChaperoneSetup_006"; +static const char * IVRCompositor_Version = "IVRCompositor_027"; +static const unsigned long k_unVROverlayMaxKeyLength = 128; +static const unsigned long k_unVROverlayMaxNameLength = 128; +static const unsigned long k_unMaxOverlayCount = 128; +static const unsigned long k_unMaxOverlayIntersectionMaskPrimitivesCount = 32; +static const char * IVROverlay_Version = "IVROverlay_025"; +static const char * IVROverlayView_Version = "IVROverlayView_003"; +static const unsigned long k_unHeadsetViewMaxWidth = 3840; +static const unsigned long k_unHeadsetViewMaxHeight = 2160; +static const char * k_pchHeadsetViewOverlayKey = "system.HeadsetView"; +static const char * IVRHeadsetView_Version = "IVRHeadsetView_001"; +static const char * k_pch_Controller_Component_GDC2015 = "gdc2015"; +static const char * k_pch_Controller_Component_Base = "base"; +static const char * k_pch_Controller_Component_Tip = "tip"; +static const char * k_pch_Controller_Component_HandGrip = "handgrip"; +static const char * k_pch_Controller_Component_Status = "status"; +static const char * IVRRenderModels_Version = "IVRRenderModels_006"; +static const unsigned long k_unNotificationTextMaxSize = 256; +static const char * IVRNotifications_Version = "IVRNotifications_002"; +static const unsigned long k_unMaxSettingsKeyLength = 128; +static const char * IVRSettings_Version = "IVRSettings_003"; +static const char * k_pch_SteamVR_Section = "steamvr"; +static const char * k_pch_SteamVR_RequireHmd_String = "requireHmd"; +static const char * k_pch_SteamVR_ForcedDriverKey_String = "forcedDriver"; +static const char * k_pch_SteamVR_ForcedHmdKey_String = "forcedHmd"; +static const char * k_pch_SteamVR_DisplayDebug_Bool = "displayDebug"; +static const char * k_pch_SteamVR_DebugProcessPipe_String = "debugProcessPipe"; +static const char * k_pch_SteamVR_DisplayDebugX_Int32 = "displayDebugX"; +static const char * k_pch_SteamVR_DisplayDebugY_Int32 = "displayDebugY"; +static const char * k_pch_SteamVR_SendSystemButtonToAllApps_Bool = "sendSystemButtonToAllApps"; +static const char * k_pch_SteamVR_LogLevel_Int32 = "loglevel"; +static const char * k_pch_SteamVR_IPD_Float = "ipd"; +static const char * k_pch_SteamVR_Background_String = "background"; +static const char * k_pch_SteamVR_BackgroundUseDomeProjection_Bool = "backgroundUseDomeProjection"; +static const char * k_pch_SteamVR_BackgroundCameraHeight_Float = "backgroundCameraHeight"; +static const char * k_pch_SteamVR_BackgroundDomeRadius_Float = "backgroundDomeRadius"; +static const char * k_pch_SteamVR_GridColor_String = "gridColor"; +static const char * k_pch_SteamVR_PlayAreaColor_String = "playAreaColor"; +static const char * k_pch_SteamVR_TrackingLossColor_String = "trackingLossColor"; +static const char * k_pch_SteamVR_ShowStage_Bool = "showStage"; +static const char * k_pch_SteamVR_DrawTrackingReferences_Bool = "drawTrackingReferences"; +static const char * k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers"; +static const char * k_pch_SteamVR_UsingSpeakers_Bool = "usingSpeakers"; +static const char * k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float = "speakersForwardYawOffsetDegrees"; +static const char * k_pch_SteamVR_BaseStationPowerManagement_Int32 = "basestationPowerManagement"; +static const char * k_pch_SteamVR_ShowBaseStationPowerManagementTip_Int32 = "ShowBaseStationPowerManagementTip"; +static const char * k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses"; +static const char * k_pch_SteamVR_SupersampleScale_Float = "supersampleScale"; +static const char * k_pch_SteamVR_MaxRecommendedResolution_Int32 = "maxRecommendedResolution"; +static const char * k_pch_SteamVR_MotionSmoothing_Bool = "motionSmoothing"; +static const char * k_pch_SteamVR_MotionSmoothingOverride_Int32 = "motionSmoothingOverride"; +static const char * k_pch_SteamVR_FramesToThrottle_Int32 = "framesToThrottle"; +static const char * k_pch_SteamVR_AdditionalFramesToPredict_Int32 = "additionalFramesToPredict"; +static const char * k_pch_SteamVR_DisableAsyncReprojection_Bool = "disableAsync"; +static const char * k_pch_SteamVR_ForceFadeOnBadTracking_Bool = "forceFadeOnBadTracking"; +static const char * k_pch_SteamVR_DefaultMirrorView_Int32 = "mirrorView"; +static const char * k_pch_SteamVR_ShowLegacyMirrorView_Bool = "showLegacyMirrorView"; +static const char * k_pch_SteamVR_MirrorViewVisibility_Bool = "showMirrorView"; +static const char * k_pch_SteamVR_MirrorViewDisplayMode_Int32 = "mirrorViewDisplayMode"; +static const char * k_pch_SteamVR_MirrorViewEye_Int32 = "mirrorViewEye"; +static const char * k_pch_SteamVR_MirrorViewGeometry_String = "mirrorViewGeometry"; +static const char * k_pch_SteamVR_MirrorViewGeometryMaximized_String = "mirrorViewGeometryMaximized"; +static const char * k_pch_SteamVR_PerfGraphVisibility_Bool = "showPerfGraph"; +static const char * k_pch_SteamVR_StartMonitorFromAppLaunch = "startMonitorFromAppLaunch"; +static const char * k_pch_SteamVR_StartCompositorFromAppLaunch_Bool = "startCompositorFromAppLaunch"; +static const char * k_pch_SteamVR_StartDashboardFromAppLaunch_Bool = "startDashboardFromAppLaunch"; +static const char * k_pch_SteamVR_StartOverlayAppsFromDashboard_Bool = "startOverlayAppsFromDashboard"; +static const char * k_pch_SteamVR_EnableHomeApp = "enableHomeApp"; +static const char * k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32 = "CycleBackgroundImageTimeSec"; +static const char * k_pch_SteamVR_RetailDemo_Bool = "retailDemo"; +static const char * k_pch_SteamVR_IpdOffset_Float = "ipdOffset"; +static const char * k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering"; +static const char * k_pch_SteamVR_SupersampleManualOverride_Bool = "supersampleManualOverride"; +static const char * k_pch_SteamVR_EnableLinuxVulkanAsync_Bool = "enableLinuxVulkanAsync"; +static const char * k_pch_SteamVR_AllowDisplayLockedMode_Bool = "allowDisplayLockedMode"; +static const char * k_pch_SteamVR_HaveStartedTutorialForNativeChaperoneDriver_Bool = "haveStartedTutorialForNativeChaperoneDriver"; +static const char * k_pch_SteamVR_ForceWindows32bitVRMonitor = "forceWindows32BitVRMonitor"; +static const char * k_pch_SteamVR_DebugInputBinding = "debugInputBinding"; +static const char * k_pch_SteamVR_DoNotFadeToGrid = "doNotFadeToGrid"; +static const char * k_pch_SteamVR_RenderCameraMode = "renderCameraMode"; +static const char * k_pch_SteamVR_EnableSharedResourceJournaling = "enableSharedResourceJournaling"; +static const char * k_pch_SteamVR_EnableSafeMode = "enableSafeMode"; +static const char * k_pch_SteamVR_PreferredRefreshRate = "preferredRefreshRate"; +static const char * k_pch_SteamVR_LastVersionNotice = "lastVersionNotice"; +static const char * k_pch_SteamVR_LastVersionNoticeDate = "lastVersionNoticeDate"; +static const char * k_pch_SteamVR_HmdDisplayColorGainR_Float = "hmdDisplayColorGainR"; +static const char * k_pch_SteamVR_HmdDisplayColorGainG_Float = "hmdDisplayColorGainG"; +static const char * k_pch_SteamVR_HmdDisplayColorGainB_Float = "hmdDisplayColorGainB"; +static const char * k_pch_SteamVR_CustomIconStyle_String = "customIconStyle"; +static const char * k_pch_SteamVR_CustomOffIconStyle_String = "customOffIconStyle"; +static const char * k_pch_SteamVR_CustomIconForceUpdate_String = "customIconForceUpdate"; +static const char * k_pch_SteamVR_AllowGlobalActionSetPriority = "globalActionSetPriority"; +static const char * k_pch_SteamVR_OverlayRenderQuality = "overlayRenderQuality_2"; +static const char * k_pch_SteamVR_BlockOculusSDKOnOpenVRLaunchOption_Bool = "blockOculusSDKOnOpenVRLaunchOption"; +static const char * k_pch_SteamVR_BlockOculusSDKOnAllLaunches_Bool = "blockOculusSDKOnAllLaunches"; +static const char * k_pch_SteamVR_HDCPLegacyCompatibility_Bool = "hdcp14legacyCompatibility"; +static const char * k_pch_SteamVR_UsePrism_Bool = "usePrism"; +static const char * k_pch_DirectMode_Section = "direct_mode"; +static const char * k_pch_DirectMode_Enable_Bool = "enable"; +static const char * k_pch_DirectMode_Count_Int32 = "count"; +static const char * k_pch_DirectMode_EdidVid_Int32 = "edidVid"; +static const char * k_pch_DirectMode_EdidPid_Int32 = "edidPid"; +static const char * k_pch_Lighthouse_Section = "driver_lighthouse"; +static const char * k_pch_Lighthouse_DisableIMU_Bool = "disableimu"; +static const char * k_pch_Lighthouse_DisableIMUExceptHMD_Bool = "disableimuexcepthmd"; +static const char * k_pch_Lighthouse_UseDisambiguation_String = "usedisambiguation"; +static const char * k_pch_Lighthouse_DisambiguationDebug_Int32 = "disambiguationdebug"; +static const char * k_pch_Lighthouse_PrimaryBasestation_Int32 = "primarybasestation"; +static const char * k_pch_Lighthouse_DBHistory_Bool = "dbhistory"; +static const char * k_pch_Lighthouse_EnableBluetooth_Bool = "enableBluetooth"; +static const char * k_pch_Lighthouse_PowerManagedBaseStations_String = "PowerManagedBaseStations"; +static const char * k_pch_Lighthouse_PowerManagedBaseStations2_String = "PowerManagedBaseStations2"; +static const char * k_pch_Lighthouse_InactivityTimeoutForBaseStations_Int32 = "InactivityTimeoutForBaseStations"; +static const char * k_pch_Lighthouse_EnableImuFallback_Bool = "enableImuFallback"; +static const char * k_pch_Null_Section = "driver_null"; +static const char * k_pch_Null_SerialNumber_String = "serialNumber"; +static const char * k_pch_Null_ModelNumber_String = "modelNumber"; +static const char * k_pch_Null_WindowX_Int32 = "windowX"; +static const char * k_pch_Null_WindowY_Int32 = "windowY"; +static const char * k_pch_Null_WindowWidth_Int32 = "windowWidth"; +static const char * k_pch_Null_WindowHeight_Int32 = "windowHeight"; +static const char * k_pch_Null_RenderWidth_Int32 = "renderWidth"; +static const char * k_pch_Null_RenderHeight_Int32 = "renderHeight"; +static const char * k_pch_Null_SecondsFromVsyncToPhotons_Float = "secondsFromVsyncToPhotons"; +static const char * k_pch_Null_DisplayFrequency_Float = "displayFrequency"; +static const char * k_pch_WindowsMR_Section = "driver_holographic"; +static const char * k_pch_UserInterface_Section = "userinterface"; +static const char * k_pch_UserInterface_StatusAlwaysOnTop_Bool = "StatusAlwaysOnTop"; +static const char * k_pch_UserInterface_MinimizeToTray_Bool = "MinimizeToTray"; +static const char * k_pch_UserInterface_HidePopupsWhenStatusMinimized_Bool = "HidePopupsWhenStatusMinimized"; +static const char * k_pch_UserInterface_Screenshots_Bool = "screenshots"; +static const char * k_pch_UserInterface_ScreenshotType_Int = "screenshotType"; +static const char * k_pch_Notifications_Section = "notifications"; +static const char * k_pch_Notifications_DoNotDisturb_Bool = "DoNotDisturb"; +static const char * k_pch_Keyboard_Section = "keyboard"; +static const char * k_pch_Keyboard_TutorialCompletions = "TutorialCompletions"; +static const char * k_pch_Keyboard_ScaleX = "ScaleX"; +static const char * k_pch_Keyboard_ScaleY = "ScaleY"; +static const char * k_pch_Keyboard_OffsetLeftX = "OffsetLeftX"; +static const char * k_pch_Keyboard_OffsetRightX = "OffsetRightX"; +static const char * k_pch_Keyboard_OffsetY = "OffsetY"; +static const char * k_pch_Keyboard_Smoothing = "Smoothing"; +static const char * k_pch_Perf_Section = "perfcheck"; +static const char * k_pch_Perf_PerfGraphInHMD_Bool = "perfGraphInHMD"; +static const char * k_pch_Perf_AllowTimingStore_Bool = "allowTimingStore"; +static const char * k_pch_Perf_SaveTimingsOnExit_Bool = "saveTimingsOnExit"; +static const char * k_pch_Perf_TestData_Float = "perfTestData"; +static const char * k_pch_Perf_GPUProfiling_Bool = "GPUProfiling"; +static const char * k_pch_CollisionBounds_Section = "collisionBounds"; +static const char * k_pch_CollisionBounds_Style_Int32 = "CollisionBoundsStyle"; +static const char * k_pch_CollisionBounds_GroundPerimeterOn_Bool = "CollisionBoundsGroundPerimeterOn"; +static const char * k_pch_CollisionBounds_CenterMarkerOn_Bool = "CollisionBoundsCenterMarkerOn"; +static const char * k_pch_CollisionBounds_PlaySpaceOn_Bool = "CollisionBoundsPlaySpaceOn"; +static const char * k_pch_CollisionBounds_FadeDistance_Float = "CollisionBoundsFadeDistance"; +static const char * k_pch_CollisionBounds_WallHeight_Float = "CollisionBoundsWallHeight"; +static const char * k_pch_CollisionBounds_ColorGammaR_Int32 = "CollisionBoundsColorGammaR"; +static const char * k_pch_CollisionBounds_ColorGammaG_Int32 = "CollisionBoundsColorGammaG"; +static const char * k_pch_CollisionBounds_ColorGammaB_Int32 = "CollisionBoundsColorGammaB"; +static const char * k_pch_CollisionBounds_ColorGammaA_Int32 = "CollisionBoundsColorGammaA"; +static const char * k_pch_CollisionBounds_EnableDriverImport = "enableDriverBoundsImport"; +static const char * k_pch_Camera_Section = "camera"; +static const char * k_pch_Camera_EnableCamera_Bool = "enableCamera"; +static const char * k_pch_Camera_ShowOnController_Bool = "showOnController"; +static const char * k_pch_Camera_EnableCameraForCollisionBounds_Bool = "enableCameraForCollisionBounds"; +static const char * k_pch_Camera_RoomView_Int32 = "roomView"; +static const char * k_pch_Camera_BoundsColorGammaR_Int32 = "cameraBoundsColorGammaR"; +static const char * k_pch_Camera_BoundsColorGammaG_Int32 = "cameraBoundsColorGammaG"; +static const char * k_pch_Camera_BoundsColorGammaB_Int32 = "cameraBoundsColorGammaB"; +static const char * k_pch_Camera_BoundsColorGammaA_Int32 = "cameraBoundsColorGammaA"; +static const char * k_pch_Camera_BoundsStrength_Int32 = "cameraBoundsStrength"; +static const char * k_pch_Camera_RoomViewStyle_Int32 = "roomViewStyle"; +static const char * k_pch_audio_Section = "audio"; +static const char * k_pch_audio_SetOsDefaultPlaybackDevice_Bool = "setOsDefaultPlaybackDevice"; +static const char * k_pch_audio_EnablePlaybackDeviceOverride_Bool = "enablePlaybackDeviceOverride"; +static const char * k_pch_audio_PlaybackDeviceOverride_String = "playbackDeviceOverride"; +static const char * k_pch_audio_PlaybackDeviceOverrideName_String = "playbackDeviceOverrideName"; +static const char * k_pch_audio_SetOsDefaultRecordingDevice_Bool = "setOsDefaultRecordingDevice"; +static const char * k_pch_audio_EnableRecordingDeviceOverride_Bool = "enableRecordingDeviceOverride"; +static const char * k_pch_audio_RecordingDeviceOverride_String = "recordingDeviceOverride"; +static const char * k_pch_audio_RecordingDeviceOverrideName_String = "recordingDeviceOverrideName"; +static const char * k_pch_audio_EnablePlaybackMirror_Bool = "enablePlaybackMirror"; +static const char * k_pch_audio_PlaybackMirrorDevice_String = "playbackMirrorDevice"; +static const char * k_pch_audio_PlaybackMirrorDeviceName_String = "playbackMirrorDeviceName"; +static const char * k_pch_audio_OldPlaybackMirrorDevice_String = "onPlaybackMirrorDevice"; +static const char * k_pch_audio_ActiveMirrorDevice_String = "activePlaybackMirrorDevice"; +static const char * k_pch_audio_EnablePlaybackMirrorIndependentVolume_Bool = "enablePlaybackMirrorIndependentVolume"; +static const char * k_pch_audio_LastHmdPlaybackDeviceId_String = "lastHmdPlaybackDeviceId"; +static const char * k_pch_audio_VIVEHDMIGain = "viveHDMIGain"; +static const char * k_pch_audio_DualSpeakerAndJackOutput_Bool = "dualSpeakerAndJackOutput"; +static const char * k_pch_audio_MuteMicMonitor_Bool = "muteMicMonitor"; +static const char * k_pch_Power_Section = "power"; +static const char * k_pch_Power_PowerOffOnExit_Bool = "powerOffOnExit"; +static const char * k_pch_Power_TurnOffScreensTimeout_Float = "turnOffScreensTimeout"; +static const char * k_pch_Power_TurnOffControllersTimeout_Float = "turnOffControllersTimeout"; +static const char * k_pch_Power_ReturnToWatchdogTimeout_Float = "returnToWatchdogTimeout"; +static const char * k_pch_Power_AutoLaunchSteamVROnButtonPress = "autoLaunchSteamVROnButtonPress"; +static const char * k_pch_Power_PauseCompositorOnStandby_Bool = "pauseCompositorOnStandby"; +static const char * k_pch_Dashboard_Section = "dashboard"; +static const char * k_pch_Dashboard_EnableDashboard_Bool = "enableDashboard"; +static const char * k_pch_Dashboard_ArcadeMode_Bool = "arcadeMode"; +static const char * k_pch_Dashboard_Position = "position"; +static const char * k_pch_Dashboard_DesktopScale = "desktopScale"; +static const char * k_pch_Dashboard_DashboardScale = "dashboardScale"; +static const char * k_pch_Dashboard_UseStandaloneSystemLayer = "standaloneSystemLayer"; +static const char * k_pch_modelskin_Section = "modelskins"; +static const char * k_pch_Driver_Enable_Bool = "enable"; +static const char * k_pch_Driver_BlockedBySafemode_Bool = "blocked_by_safe_mode"; +static const char * k_pch_Driver_LoadPriority_Int32 = "loadPriority"; +static const char * k_pch_WebInterface_Section = "WebInterface"; +static const char * k_pch_VRWebHelper_Section = "VRWebHelper"; +static const char * k_pch_VRWebHelper_DebuggerEnabled_Bool = "DebuggerEnabled"; +static const char * k_pch_VRWebHelper_DebuggerPort_Int32 = "DebuggerPort"; +static const char * k_pch_TrackingOverride_Section = "TrackingOverrides"; +static const char * k_pch_App_BindingAutosaveURLSuffix_String = "AutosaveURL"; +static const char * k_pch_App_BindingLegacyAPISuffix_String = "_legacy"; +static const char * k_pch_App_BindingSteamVRInputAPISuffix_String = "_steamvrinput"; +static const char * k_pch_App_BindingCurrentURLSuffix_String = "CurrentURL"; +static const char * k_pch_App_BindingPreviousURLSuffix_String = "PreviousURL"; +static const char * k_pch_App_NeedToUpdateAutosaveSuffix_Bool = "NeedToUpdateAutosave"; +static const char * k_pch_App_DominantHand_Int32 = "DominantHand"; +static const char * k_pch_App_BlockOculusSDK_Bool = "blockOculusSDK"; +static const char * k_pch_Trackers_Section = "trackers"; +static const char * k_pch_DesktopUI_Section = "DesktopUI"; +static const char * k_pch_LastKnown_Section = "LastKnown"; +static const char * k_pch_LastKnown_HMDManufacturer_String = "HMDManufacturer"; +static const char * k_pch_LastKnown_HMDModel_String = "HMDModel"; +static const char * k_pch_DismissedWarnings_Section = "DismissedWarnings"; +static const char * k_pch_Input_Section = "input"; +static const char * k_pch_Input_LeftThumbstickRotation_Float = "leftThumbstickRotation"; +static const char * k_pch_Input_RightThumbstickRotation_Float = "rightThumbstickRotation"; +static const char * k_pch_Input_ThumbstickDeadzone_Float = "thumbstickDeadzone"; +static const char * k_pch_GpuSpeed_Section = "GpuSpeed"; +static const char * IVRScreenshots_Version = "IVRScreenshots_001"; +static const char * IVRResources_Version = "IVRResources_001"; +static const char * IVRDriverManager_Version = "IVRDriverManager_001"; +static const unsigned long k_unMaxActionNameLength = 64; +static const unsigned long k_unMaxActionSetNameLength = 64; +static const unsigned long k_unMaxActionOriginCount = 16; +static const unsigned long k_unMaxBoneNameLength = 32; +static const int k_nActionSetOverlayGlobalPriorityMin = 16777216; +static const int k_nActionSetOverlayGlobalPriorityMax = 33554431; +static const int k_nActionSetPriorityReservedMin = 33554432; +static const char * IVRInput_Version = "IVRInput_010"; +static const unsigned long long k_ulInvalidIOBufferHandle = 0; +static const char * IVRIOBuffer_Version = "IVRIOBuffer_002"; +static const unsigned long k_ulInvalidSpatialAnchorHandle = 0; +static const char * IVRSpatialAnchors_Version = "IVRSpatialAnchors_001"; +static const char * IVRDebug_Version = "IVRDebug_001"; +static const unsigned long long k_ulDisplayRedirectContainer = 25769803779; +static const char * IVRProperties_Version = "IVRProperties_001"; +static const char * k_pchPathUserHandRight = "/user/hand/right"; +static const char * k_pchPathUserHandLeft = "/user/hand/left"; +static const char * k_pchPathUserHandPrimary = "/user/hand/primary"; +static const char * k_pchPathUserHandSecondary = "/user/hand/secondary"; +static const char * k_pchPathUserHead = "/user/head"; +static const char * k_pchPathUserGamepad = "/user/gamepad"; +static const char * k_pchPathUserTreadmill = "/user/treadmill"; +static const char * k_pchPathUserStylus = "/user/stylus"; +static const char * k_pchPathDevices = "/devices"; +static const char * k_pchPathDevicePath = "/device_path"; +static const char * k_pchPathBestAliasPath = "/best_alias_path"; +static const char * k_pchPathBoundTrackerAliasPath = "/bound_tracker_path"; +static const char * k_pchPathBoundTrackerRole = "/bound_tracker_role"; +static const char * k_pchPathPoseRaw = "/pose/raw"; +static const char * k_pchPathPoseTip = "/pose/tip"; +static const char * k_pchPathPoseGrip = "/pose/grip"; +static const char * k_pchPathSystemButtonClick = "/input/system/click"; +static const char * k_pchPathProximity = "/proximity"; +static const char * k_pchPathControllerTypePrefix = "/controller_type/"; +static const char * k_pchPathInputProfileSuffix = "/input_profile"; +static const char * k_pchPathBindingNameSuffix = "/binding_name"; +static const char * k_pchPathBindingUrlSuffix = "/binding_url"; +static const char * k_pchPathBindingErrorSuffix = "/binding_error"; +static const char * k_pchPathActiveActionSets = "/active_action_sets"; +static const char * k_pchPathComponentUpdates = "/total_component_updates"; +static const char * k_pchPathUserFootLeft = "/user/foot/left"; +static const char * k_pchPathUserFootRight = "/user/foot/right"; +static const char * k_pchPathUserShoulderLeft = "/user/shoulder/left"; +static const char * k_pchPathUserShoulderRight = "/user/shoulder/right"; +static const char * k_pchPathUserElbowLeft = "/user/elbow/left"; +static const char * k_pchPathUserElbowRight = "/user/elbow/right"; +static const char * k_pchPathUserKneeLeft = "/user/knee/left"; +static const char * k_pchPathUserKneeRight = "/user/knee/right"; +static const char * k_pchPathUserWaist = "/user/waist"; +static const char * k_pchPathUserChest = "/user/chest"; +static const char * k_pchPathUserCamera = "/user/camera"; +static const char * k_pchPathUserKeyboard = "/user/keyboard"; +static const char * k_pchPathClientAppKey = "/client_info/app_key"; +static const unsigned long long k_ulInvalidPathHandle = 0; +static const char * IVRPaths_Version = "IVRPaths_001"; +static const char * IVRBlockQueue_Version = "IVRBlockQueue_004"; + +// OpenVR Enums + +typedef enum EVREye +{ + EVREye_Eye_Left = 0, + EVREye_Eye_Right = 1, +} EVREye; + +typedef enum ETextureType +{ + ETextureType_TextureType_Invalid = -1, + ETextureType_TextureType_DirectX = 0, + ETextureType_TextureType_OpenGL = 1, + ETextureType_TextureType_Vulkan = 2, + ETextureType_TextureType_IOSurface = 3, + ETextureType_TextureType_DirectX12 = 4, + ETextureType_TextureType_DXGISharedHandle = 5, + ETextureType_TextureType_Metal = 6, +} ETextureType; + +typedef enum EColorSpace +{ + EColorSpace_ColorSpace_Auto = 0, + EColorSpace_ColorSpace_Gamma = 1, + EColorSpace_ColorSpace_Linear = 2, +} EColorSpace; + +typedef enum ETrackingResult +{ + ETrackingResult_TrackingResult_Uninitialized = 1, + ETrackingResult_TrackingResult_Calibrating_InProgress = 100, + ETrackingResult_TrackingResult_Calibrating_OutOfRange = 101, + ETrackingResult_TrackingResult_Running_OK = 200, + ETrackingResult_TrackingResult_Running_OutOfRange = 201, + ETrackingResult_TrackingResult_Fallback_RotationOnly = 300, +} ETrackingResult; + +typedef enum ETrackedDeviceClass +{ + ETrackedDeviceClass_TrackedDeviceClass_Invalid = 0, + ETrackedDeviceClass_TrackedDeviceClass_HMD = 1, + ETrackedDeviceClass_TrackedDeviceClass_Controller = 2, + ETrackedDeviceClass_TrackedDeviceClass_GenericTracker = 3, + ETrackedDeviceClass_TrackedDeviceClass_TrackingReference = 4, + ETrackedDeviceClass_TrackedDeviceClass_DisplayRedirect = 5, + ETrackedDeviceClass_TrackedDeviceClass_Max = 6, +} ETrackedDeviceClass; + +typedef enum ETrackedControllerRole +{ + ETrackedControllerRole_TrackedControllerRole_Invalid = 0, + ETrackedControllerRole_TrackedControllerRole_LeftHand = 1, + ETrackedControllerRole_TrackedControllerRole_RightHand = 2, + ETrackedControllerRole_TrackedControllerRole_OptOut = 3, + ETrackedControllerRole_TrackedControllerRole_Treadmill = 4, + ETrackedControllerRole_TrackedControllerRole_Stylus = 5, + ETrackedControllerRole_TrackedControllerRole_Max = 5, +} ETrackedControllerRole; + +typedef enum ETrackingUniverseOrigin +{ + ETrackingUniverseOrigin_TrackingUniverseSeated = 0, + ETrackingUniverseOrigin_TrackingUniverseStanding = 1, + ETrackingUniverseOrigin_TrackingUniverseRawAndUncalibrated = 2, +} ETrackingUniverseOrigin; + +typedef enum EAdditionalRadioFeatures +{ + EAdditionalRadioFeatures_AdditionalRadioFeatures_None = 0, + EAdditionalRadioFeatures_AdditionalRadioFeatures_HTCLinkBox = 1, + EAdditionalRadioFeatures_AdditionalRadioFeatures_InternalDongle = 2, + EAdditionalRadioFeatures_AdditionalRadioFeatures_ExternalDongle = 4, +} EAdditionalRadioFeatures; + +typedef enum ETrackedDeviceProperty +{ + ETrackedDeviceProperty_Prop_Invalid = 0, + ETrackedDeviceProperty_Prop_TrackingSystemName_String = 1000, + ETrackedDeviceProperty_Prop_ModelNumber_String = 1001, + ETrackedDeviceProperty_Prop_SerialNumber_String = 1002, + ETrackedDeviceProperty_Prop_RenderModelName_String = 1003, + ETrackedDeviceProperty_Prop_WillDriftInYaw_Bool = 1004, + ETrackedDeviceProperty_Prop_ManufacturerName_String = 1005, + ETrackedDeviceProperty_Prop_TrackingFirmwareVersion_String = 1006, + ETrackedDeviceProperty_Prop_HardwareRevision_String = 1007, + ETrackedDeviceProperty_Prop_AllWirelessDongleDescriptions_String = 1008, + ETrackedDeviceProperty_Prop_ConnectedWirelessDongle_String = 1009, + ETrackedDeviceProperty_Prop_DeviceIsWireless_Bool = 1010, + ETrackedDeviceProperty_Prop_DeviceIsCharging_Bool = 1011, + ETrackedDeviceProperty_Prop_DeviceBatteryPercentage_Float = 1012, + ETrackedDeviceProperty_Prop_StatusDisplayTransform_Matrix34 = 1013, + ETrackedDeviceProperty_Prop_Firmware_UpdateAvailable_Bool = 1014, + ETrackedDeviceProperty_Prop_Firmware_ManualUpdate_Bool = 1015, + ETrackedDeviceProperty_Prop_Firmware_ManualUpdateURL_String = 1016, + ETrackedDeviceProperty_Prop_HardwareRevision_Uint64 = 1017, + ETrackedDeviceProperty_Prop_FirmwareVersion_Uint64 = 1018, + ETrackedDeviceProperty_Prop_FPGAVersion_Uint64 = 1019, + ETrackedDeviceProperty_Prop_VRCVersion_Uint64 = 1020, + ETrackedDeviceProperty_Prop_RadioVersion_Uint64 = 1021, + ETrackedDeviceProperty_Prop_DongleVersion_Uint64 = 1022, + ETrackedDeviceProperty_Prop_BlockServerShutdown_Bool = 1023, + ETrackedDeviceProperty_Prop_CanUnifyCoordinateSystemWithHmd_Bool = 1024, + ETrackedDeviceProperty_Prop_ContainsProximitySensor_Bool = 1025, + ETrackedDeviceProperty_Prop_DeviceProvidesBatteryStatus_Bool = 1026, + ETrackedDeviceProperty_Prop_DeviceCanPowerOff_Bool = 1027, + ETrackedDeviceProperty_Prop_Firmware_ProgrammingTarget_String = 1028, + ETrackedDeviceProperty_Prop_DeviceClass_Int32 = 1029, + ETrackedDeviceProperty_Prop_HasCamera_Bool = 1030, + ETrackedDeviceProperty_Prop_DriverVersion_String = 1031, + ETrackedDeviceProperty_Prop_Firmware_ForceUpdateRequired_Bool = 1032, + ETrackedDeviceProperty_Prop_ViveSystemButtonFixRequired_Bool = 1033, + ETrackedDeviceProperty_Prop_ParentDriver_Uint64 = 1034, + ETrackedDeviceProperty_Prop_ResourceRoot_String = 1035, + ETrackedDeviceProperty_Prop_RegisteredDeviceType_String = 1036, + ETrackedDeviceProperty_Prop_InputProfilePath_String = 1037, + ETrackedDeviceProperty_Prop_NeverTracked_Bool = 1038, + ETrackedDeviceProperty_Prop_NumCameras_Int32 = 1039, + ETrackedDeviceProperty_Prop_CameraFrameLayout_Int32 = 1040, + ETrackedDeviceProperty_Prop_CameraStreamFormat_Int32 = 1041, + ETrackedDeviceProperty_Prop_AdditionalDeviceSettingsPath_String = 1042, + ETrackedDeviceProperty_Prop_Identifiable_Bool = 1043, + ETrackedDeviceProperty_Prop_BootloaderVersion_Uint64 = 1044, + ETrackedDeviceProperty_Prop_AdditionalSystemReportData_String = 1045, + ETrackedDeviceProperty_Prop_CompositeFirmwareVersion_String = 1046, + ETrackedDeviceProperty_Prop_Firmware_RemindUpdate_Bool = 1047, + ETrackedDeviceProperty_Prop_PeripheralApplicationVersion_Uint64 = 1048, + ETrackedDeviceProperty_Prop_ManufacturerSerialNumber_String = 1049, + ETrackedDeviceProperty_Prop_ComputedSerialNumber_String = 1050, + ETrackedDeviceProperty_Prop_EstimatedDeviceFirstUseTime_Int32 = 1051, + ETrackedDeviceProperty_Prop_ReportsTimeSinceVSync_Bool = 2000, + ETrackedDeviceProperty_Prop_SecondsFromVsyncToPhotons_Float = 2001, + ETrackedDeviceProperty_Prop_DisplayFrequency_Float = 2002, + ETrackedDeviceProperty_Prop_UserIpdMeters_Float = 2003, + ETrackedDeviceProperty_Prop_CurrentUniverseId_Uint64 = 2004, + ETrackedDeviceProperty_Prop_PreviousUniverseId_Uint64 = 2005, + ETrackedDeviceProperty_Prop_DisplayFirmwareVersion_Uint64 = 2006, + ETrackedDeviceProperty_Prop_IsOnDesktop_Bool = 2007, + ETrackedDeviceProperty_Prop_DisplayMCType_Int32 = 2008, + ETrackedDeviceProperty_Prop_DisplayMCOffset_Float = 2009, + ETrackedDeviceProperty_Prop_DisplayMCScale_Float = 2010, + ETrackedDeviceProperty_Prop_EdidVendorID_Int32 = 2011, + ETrackedDeviceProperty_Prop_DisplayMCImageLeft_String = 2012, + ETrackedDeviceProperty_Prop_DisplayMCImageRight_String = 2013, + ETrackedDeviceProperty_Prop_DisplayGCBlackClamp_Float = 2014, + ETrackedDeviceProperty_Prop_EdidProductID_Int32 = 2015, + ETrackedDeviceProperty_Prop_CameraToHeadTransform_Matrix34 = 2016, + ETrackedDeviceProperty_Prop_DisplayGCType_Int32 = 2017, + ETrackedDeviceProperty_Prop_DisplayGCOffset_Float = 2018, + ETrackedDeviceProperty_Prop_DisplayGCScale_Float = 2019, + ETrackedDeviceProperty_Prop_DisplayGCPrescale_Float = 2020, + ETrackedDeviceProperty_Prop_DisplayGCImage_String = 2021, + ETrackedDeviceProperty_Prop_LensCenterLeftU_Float = 2022, + ETrackedDeviceProperty_Prop_LensCenterLeftV_Float = 2023, + ETrackedDeviceProperty_Prop_LensCenterRightU_Float = 2024, + ETrackedDeviceProperty_Prop_LensCenterRightV_Float = 2025, + ETrackedDeviceProperty_Prop_UserHeadToEyeDepthMeters_Float = 2026, + ETrackedDeviceProperty_Prop_CameraFirmwareVersion_Uint64 = 2027, + ETrackedDeviceProperty_Prop_CameraFirmwareDescription_String = 2028, + ETrackedDeviceProperty_Prop_DisplayFPGAVersion_Uint64 = 2029, + ETrackedDeviceProperty_Prop_DisplayBootloaderVersion_Uint64 = 2030, + ETrackedDeviceProperty_Prop_DisplayHardwareVersion_Uint64 = 2031, + ETrackedDeviceProperty_Prop_AudioFirmwareVersion_Uint64 = 2032, + ETrackedDeviceProperty_Prop_CameraCompatibilityMode_Int32 = 2033, + ETrackedDeviceProperty_Prop_ScreenshotHorizontalFieldOfViewDegrees_Float = 2034, + ETrackedDeviceProperty_Prop_ScreenshotVerticalFieldOfViewDegrees_Float = 2035, + ETrackedDeviceProperty_Prop_DisplaySuppressed_Bool = 2036, + ETrackedDeviceProperty_Prop_DisplayAllowNightMode_Bool = 2037, + ETrackedDeviceProperty_Prop_DisplayMCImageWidth_Int32 = 2038, + ETrackedDeviceProperty_Prop_DisplayMCImageHeight_Int32 = 2039, + ETrackedDeviceProperty_Prop_DisplayMCImageNumChannels_Int32 = 2040, + ETrackedDeviceProperty_Prop_DisplayMCImageData_Binary = 2041, + ETrackedDeviceProperty_Prop_SecondsFromPhotonsToVblank_Float = 2042, + ETrackedDeviceProperty_Prop_DriverDirectModeSendsVsyncEvents_Bool = 2043, + ETrackedDeviceProperty_Prop_DisplayDebugMode_Bool = 2044, + ETrackedDeviceProperty_Prop_GraphicsAdapterLuid_Uint64 = 2045, + ETrackedDeviceProperty_Prop_DriverProvidedChaperonePath_String = 2048, + ETrackedDeviceProperty_Prop_ExpectedTrackingReferenceCount_Int32 = 2049, + ETrackedDeviceProperty_Prop_ExpectedControllerCount_Int32 = 2050, + ETrackedDeviceProperty_Prop_NamedIconPathControllerLeftDeviceOff_String = 2051, + ETrackedDeviceProperty_Prop_NamedIconPathControllerRightDeviceOff_String = 2052, + ETrackedDeviceProperty_Prop_NamedIconPathTrackingReferenceDeviceOff_String = 2053, + ETrackedDeviceProperty_Prop_DoNotApplyPrediction_Bool = 2054, + ETrackedDeviceProperty_Prop_CameraToHeadTransforms_Matrix34_Array = 2055, + ETrackedDeviceProperty_Prop_DistortionMeshResolution_Int32 = 2056, + ETrackedDeviceProperty_Prop_DriverIsDrawingControllers_Bool = 2057, + ETrackedDeviceProperty_Prop_DriverRequestsApplicationPause_Bool = 2058, + ETrackedDeviceProperty_Prop_DriverRequestsReducedRendering_Bool = 2059, + ETrackedDeviceProperty_Prop_MinimumIpdStepMeters_Float = 2060, + ETrackedDeviceProperty_Prop_AudioBridgeFirmwareVersion_Uint64 = 2061, + ETrackedDeviceProperty_Prop_ImageBridgeFirmwareVersion_Uint64 = 2062, + ETrackedDeviceProperty_Prop_ImuToHeadTransform_Matrix34 = 2063, + ETrackedDeviceProperty_Prop_ImuFactoryGyroBias_Vector3 = 2064, + ETrackedDeviceProperty_Prop_ImuFactoryGyroScale_Vector3 = 2065, + ETrackedDeviceProperty_Prop_ImuFactoryAccelerometerBias_Vector3 = 2066, + ETrackedDeviceProperty_Prop_ImuFactoryAccelerometerScale_Vector3 = 2067, + ETrackedDeviceProperty_Prop_ConfigurationIncludesLighthouse20Features_Bool = 2069, + ETrackedDeviceProperty_Prop_AdditionalRadioFeatures_Uint64 = 2070, + ETrackedDeviceProperty_Prop_CameraWhiteBalance_Vector4_Array = 2071, + ETrackedDeviceProperty_Prop_CameraDistortionFunction_Int32_Array = 2072, + ETrackedDeviceProperty_Prop_CameraDistortionCoefficients_Float_Array = 2073, + ETrackedDeviceProperty_Prop_ExpectedControllerType_String = 2074, + ETrackedDeviceProperty_Prop_HmdTrackingStyle_Int32 = 2075, + ETrackedDeviceProperty_Prop_DriverProvidedChaperoneVisibility_Bool = 2076, + ETrackedDeviceProperty_Prop_HmdColumnCorrectionSettingPrefix_String = 2077, + ETrackedDeviceProperty_Prop_CameraSupportsCompatibilityModes_Bool = 2078, + ETrackedDeviceProperty_Prop_SupportsRoomViewDepthProjection_Bool = 2079, + ETrackedDeviceProperty_Prop_DisplayAvailableFrameRates_Float_Array = 2080, + ETrackedDeviceProperty_Prop_DisplaySupportsMultipleFramerates_Bool = 2081, + ETrackedDeviceProperty_Prop_DisplayColorMultLeft_Vector3 = 2082, + ETrackedDeviceProperty_Prop_DisplayColorMultRight_Vector3 = 2083, + ETrackedDeviceProperty_Prop_DisplaySupportsRuntimeFramerateChange_Bool = 2084, + ETrackedDeviceProperty_Prop_DisplaySupportsAnalogGain_Bool = 2085, + ETrackedDeviceProperty_Prop_DisplayMinAnalogGain_Float = 2086, + ETrackedDeviceProperty_Prop_DisplayMaxAnalogGain_Float = 2087, + ETrackedDeviceProperty_Prop_CameraExposureTime_Float = 2088, + ETrackedDeviceProperty_Prop_CameraGlobalGain_Float = 2089, + ETrackedDeviceProperty_Prop_DashboardScale_Float = 2091, + ETrackedDeviceProperty_Prop_IpdUIRangeMinMeters_Float = 2100, + ETrackedDeviceProperty_Prop_IpdUIRangeMaxMeters_Float = 2101, + ETrackedDeviceProperty_Prop_Hmd_SupportsHDCP14LegacyCompat_Bool = 2102, + ETrackedDeviceProperty_Prop_Hmd_SupportsMicMonitoring_Bool = 2103, + ETrackedDeviceProperty_Prop_DriverRequestedMuraCorrectionMode_Int32 = 2200, + ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_InnerLeft_Int32 = 2201, + ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_InnerRight_Int32 = 2202, + ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_InnerTop_Int32 = 2203, + ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_InnerBottom_Int32 = 2204, + ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_OuterLeft_Int32 = 2205, + ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_OuterRight_Int32 = 2206, + ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_OuterTop_Int32 = 2207, + ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_OuterBottom_Int32 = 2208, + ETrackedDeviceProperty_Prop_Audio_DefaultPlaybackDeviceId_String = 2300, + ETrackedDeviceProperty_Prop_Audio_DefaultRecordingDeviceId_String = 2301, + ETrackedDeviceProperty_Prop_Audio_DefaultPlaybackDeviceVolume_Float = 2302, + ETrackedDeviceProperty_Prop_Audio_SupportsDualSpeakerAndJackOutput_Bool = 2303, + ETrackedDeviceProperty_Prop_AttachedDeviceId_String = 3000, + ETrackedDeviceProperty_Prop_SupportedButtons_Uint64 = 3001, + ETrackedDeviceProperty_Prop_Axis0Type_Int32 = 3002, + ETrackedDeviceProperty_Prop_Axis1Type_Int32 = 3003, + ETrackedDeviceProperty_Prop_Axis2Type_Int32 = 3004, + ETrackedDeviceProperty_Prop_Axis3Type_Int32 = 3005, + ETrackedDeviceProperty_Prop_Axis4Type_Int32 = 3006, + ETrackedDeviceProperty_Prop_ControllerRoleHint_Int32 = 3007, + ETrackedDeviceProperty_Prop_FieldOfViewLeftDegrees_Float = 4000, + ETrackedDeviceProperty_Prop_FieldOfViewRightDegrees_Float = 4001, + ETrackedDeviceProperty_Prop_FieldOfViewTopDegrees_Float = 4002, + ETrackedDeviceProperty_Prop_FieldOfViewBottomDegrees_Float = 4003, + ETrackedDeviceProperty_Prop_TrackingRangeMinimumMeters_Float = 4004, + ETrackedDeviceProperty_Prop_TrackingRangeMaximumMeters_Float = 4005, + ETrackedDeviceProperty_Prop_ModeLabel_String = 4006, + ETrackedDeviceProperty_Prop_CanWirelessIdentify_Bool = 4007, + ETrackedDeviceProperty_Prop_Nonce_Int32 = 4008, + ETrackedDeviceProperty_Prop_IconPathName_String = 5000, + ETrackedDeviceProperty_Prop_NamedIconPathDeviceOff_String = 5001, + ETrackedDeviceProperty_Prop_NamedIconPathDeviceSearching_String = 5002, + ETrackedDeviceProperty_Prop_NamedIconPathDeviceSearchingAlert_String = 5003, + ETrackedDeviceProperty_Prop_NamedIconPathDeviceReady_String = 5004, + ETrackedDeviceProperty_Prop_NamedIconPathDeviceReadyAlert_String = 5005, + ETrackedDeviceProperty_Prop_NamedIconPathDeviceNotReady_String = 5006, + ETrackedDeviceProperty_Prop_NamedIconPathDeviceStandby_String = 5007, + ETrackedDeviceProperty_Prop_NamedIconPathDeviceAlertLow_String = 5008, + ETrackedDeviceProperty_Prop_NamedIconPathDeviceStandbyAlert_String = 5009, + ETrackedDeviceProperty_Prop_DisplayHiddenArea_Binary_Start = 5100, + ETrackedDeviceProperty_Prop_DisplayHiddenArea_Binary_End = 5150, + ETrackedDeviceProperty_Prop_ParentContainer = 5151, + ETrackedDeviceProperty_Prop_OverrideContainer_Uint64 = 5152, + ETrackedDeviceProperty_Prop_UserConfigPath_String = 6000, + ETrackedDeviceProperty_Prop_InstallPath_String = 6001, + ETrackedDeviceProperty_Prop_HasDisplayComponent_Bool = 6002, + ETrackedDeviceProperty_Prop_HasControllerComponent_Bool = 6003, + ETrackedDeviceProperty_Prop_HasCameraComponent_Bool = 6004, + ETrackedDeviceProperty_Prop_HasDriverDirectModeComponent_Bool = 6005, + ETrackedDeviceProperty_Prop_HasVirtualDisplayComponent_Bool = 6006, + ETrackedDeviceProperty_Prop_HasSpatialAnchorsSupport_Bool = 6007, + ETrackedDeviceProperty_Prop_ControllerType_String = 7000, + ETrackedDeviceProperty_Prop_ControllerHandSelectionPriority_Int32 = 7002, + ETrackedDeviceProperty_Prop_VendorSpecific_Reserved_Start = 10000, + ETrackedDeviceProperty_Prop_VendorSpecific_Reserved_End = 10999, + ETrackedDeviceProperty_Prop_TrackedDeviceProperty_Max = 1000000, +} ETrackedDeviceProperty; + +typedef enum ETrackedPropertyError +{ + ETrackedPropertyError_TrackedProp_Success = 0, + ETrackedPropertyError_TrackedProp_WrongDataType = 1, + ETrackedPropertyError_TrackedProp_WrongDeviceClass = 2, + ETrackedPropertyError_TrackedProp_BufferTooSmall = 3, + ETrackedPropertyError_TrackedProp_UnknownProperty = 4, + ETrackedPropertyError_TrackedProp_InvalidDevice = 5, + ETrackedPropertyError_TrackedProp_CouldNotContactServer = 6, + ETrackedPropertyError_TrackedProp_ValueNotProvidedByDevice = 7, + ETrackedPropertyError_TrackedProp_StringExceedsMaximumLength = 8, + ETrackedPropertyError_TrackedProp_NotYetAvailable = 9, + ETrackedPropertyError_TrackedProp_PermissionDenied = 10, + ETrackedPropertyError_TrackedProp_InvalidOperation = 11, + ETrackedPropertyError_TrackedProp_CannotWriteToWildcards = 12, + ETrackedPropertyError_TrackedProp_IPCReadFailure = 13, + ETrackedPropertyError_TrackedProp_OutOfMemory = 14, + ETrackedPropertyError_TrackedProp_InvalidContainer = 15, +} ETrackedPropertyError; + +typedef enum EHmdTrackingStyle +{ + EHmdTrackingStyle_HmdTrackingStyle_Unknown = 0, + EHmdTrackingStyle_HmdTrackingStyle_Lighthouse = 1, + EHmdTrackingStyle_HmdTrackingStyle_OutsideInCameras = 2, + EHmdTrackingStyle_HmdTrackingStyle_InsideOutCameras = 3, +} EHmdTrackingStyle; + +typedef enum EVRSubmitFlags +{ + EVRSubmitFlags_Submit_Default = 0, + EVRSubmitFlags_Submit_LensDistortionAlreadyApplied = 1, + EVRSubmitFlags_Submit_GlRenderBuffer = 2, + EVRSubmitFlags_Submit_Reserved = 4, + EVRSubmitFlags_Submit_TextureWithPose = 8, + EVRSubmitFlags_Submit_TextureWithDepth = 16, + EVRSubmitFlags_Submit_FrameDiscontinuty = 32, + EVRSubmitFlags_Submit_VulkanTextureWithArrayData = 64, + EVRSubmitFlags_Submit_GlArrayTexture = 128, + EVRSubmitFlags_Submit_Reserved2 = 32768, +} EVRSubmitFlags; + +typedef enum EVRState +{ + EVRState_VRState_Undefined = -1, + EVRState_VRState_Off = 0, + EVRState_VRState_Searching = 1, + EVRState_VRState_Searching_Alert = 2, + EVRState_VRState_Ready = 3, + EVRState_VRState_Ready_Alert = 4, + EVRState_VRState_NotReady = 5, + EVRState_VRState_Standby = 6, + EVRState_VRState_Ready_Alert_Low = 7, +} EVRState; + +typedef enum EVREventType +{ + EVREventType_VREvent_None = 0, + EVREventType_VREvent_TrackedDeviceActivated = 100, + EVREventType_VREvent_TrackedDeviceDeactivated = 101, + EVREventType_VREvent_TrackedDeviceUpdated = 102, + EVREventType_VREvent_TrackedDeviceUserInteractionStarted = 103, + EVREventType_VREvent_TrackedDeviceUserInteractionEnded = 104, + EVREventType_VREvent_IpdChanged = 105, + EVREventType_VREvent_EnterStandbyMode = 106, + EVREventType_VREvent_LeaveStandbyMode = 107, + EVREventType_VREvent_TrackedDeviceRoleChanged = 108, + EVREventType_VREvent_WatchdogWakeUpRequested = 109, + EVREventType_VREvent_LensDistortionChanged = 110, + EVREventType_VREvent_PropertyChanged = 111, + EVREventType_VREvent_WirelessDisconnect = 112, + EVREventType_VREvent_WirelessReconnect = 113, + EVREventType_VREvent_ButtonPress = 200, + EVREventType_VREvent_ButtonUnpress = 201, + EVREventType_VREvent_ButtonTouch = 202, + EVREventType_VREvent_ButtonUntouch = 203, + EVREventType_VREvent_Modal_Cancel = 257, + EVREventType_VREvent_MouseMove = 300, + EVREventType_VREvent_MouseButtonDown = 301, + EVREventType_VREvent_MouseButtonUp = 302, + EVREventType_VREvent_FocusEnter = 303, + EVREventType_VREvent_FocusLeave = 304, + EVREventType_VREvent_ScrollDiscrete = 305, + EVREventType_VREvent_TouchPadMove = 306, + EVREventType_VREvent_OverlayFocusChanged = 307, + EVREventType_VREvent_ReloadOverlays = 308, + EVREventType_VREvent_ScrollSmooth = 309, + EVREventType_VREvent_LockMousePosition = 310, + EVREventType_VREvent_UnlockMousePosition = 311, + EVREventType_VREvent_InputFocusCaptured = 400, + EVREventType_VREvent_InputFocusReleased = 401, + EVREventType_VREvent_SceneApplicationChanged = 404, + EVREventType_VREvent_SceneFocusChanged = 405, + EVREventType_VREvent_InputFocusChanged = 406, + EVREventType_VREvent_SceneApplicationUsingWrongGraphicsAdapter = 408, + EVREventType_VREvent_ActionBindingReloaded = 409, + EVREventType_VREvent_HideRenderModels = 410, + EVREventType_VREvent_ShowRenderModels = 411, + EVREventType_VREvent_SceneApplicationStateChanged = 412, + EVREventType_VREvent_ConsoleOpened = 420, + EVREventType_VREvent_ConsoleClosed = 421, + EVREventType_VREvent_OverlayShown = 500, + EVREventType_VREvent_OverlayHidden = 501, + EVREventType_VREvent_DashboardActivated = 502, + EVREventType_VREvent_DashboardDeactivated = 503, + EVREventType_VREvent_DashboardRequested = 505, + EVREventType_VREvent_ResetDashboard = 506, + EVREventType_VREvent_ImageLoaded = 508, + EVREventType_VREvent_ShowKeyboard = 509, + EVREventType_VREvent_HideKeyboard = 510, + EVREventType_VREvent_OverlayGamepadFocusGained = 511, + EVREventType_VREvent_OverlayGamepadFocusLost = 512, + EVREventType_VREvent_OverlaySharedTextureChanged = 513, + EVREventType_VREvent_ScreenshotTriggered = 516, + EVREventType_VREvent_ImageFailed = 517, + EVREventType_VREvent_DashboardOverlayCreated = 518, + EVREventType_VREvent_SwitchGamepadFocus = 519, + EVREventType_VREvent_RequestScreenshot = 520, + EVREventType_VREvent_ScreenshotTaken = 521, + EVREventType_VREvent_ScreenshotFailed = 522, + EVREventType_VREvent_SubmitScreenshotToDashboard = 523, + EVREventType_VREvent_ScreenshotProgressToDashboard = 524, + EVREventType_VREvent_PrimaryDashboardDeviceChanged = 525, + EVREventType_VREvent_RoomViewShown = 526, + EVREventType_VREvent_RoomViewHidden = 527, + EVREventType_VREvent_ShowUI = 528, + EVREventType_VREvent_ShowDevTools = 529, + EVREventType_VREvent_DesktopViewUpdating = 530, + EVREventType_VREvent_DesktopViewReady = 531, + EVREventType_VREvent_Notification_Shown = 600, + EVREventType_VREvent_Notification_Hidden = 601, + EVREventType_VREvent_Notification_BeginInteraction = 602, + EVREventType_VREvent_Notification_Destroyed = 603, + EVREventType_VREvent_Quit = 700, + EVREventType_VREvent_ProcessQuit = 701, + EVREventType_VREvent_QuitAcknowledged = 703, + EVREventType_VREvent_DriverRequestedQuit = 704, + EVREventType_VREvent_RestartRequested = 705, + EVREventType_VREvent_ChaperoneDataHasChanged = 800, + EVREventType_VREvent_ChaperoneUniverseHasChanged = 801, + EVREventType_VREvent_ChaperoneTempDataHasChanged = 802, + EVREventType_VREvent_ChaperoneSettingsHaveChanged = 803, + EVREventType_VREvent_SeatedZeroPoseReset = 804, + EVREventType_VREvent_ChaperoneFlushCache = 805, + EVREventType_VREvent_ChaperoneRoomSetupStarting = 806, + EVREventType_VREvent_ChaperoneRoomSetupFinished = 807, + EVREventType_VREvent_StandingZeroPoseReset = 808, + EVREventType_VREvent_AudioSettingsHaveChanged = 820, + EVREventType_VREvent_BackgroundSettingHasChanged = 850, + EVREventType_VREvent_CameraSettingsHaveChanged = 851, + EVREventType_VREvent_ReprojectionSettingHasChanged = 852, + EVREventType_VREvent_ModelSkinSettingsHaveChanged = 853, + EVREventType_VREvent_EnvironmentSettingsHaveChanged = 854, + EVREventType_VREvent_PowerSettingsHaveChanged = 855, + EVREventType_VREvent_EnableHomeAppSettingsHaveChanged = 856, + EVREventType_VREvent_SteamVRSectionSettingChanged = 857, + EVREventType_VREvent_LighthouseSectionSettingChanged = 858, + EVREventType_VREvent_NullSectionSettingChanged = 859, + EVREventType_VREvent_UserInterfaceSectionSettingChanged = 860, + EVREventType_VREvent_NotificationsSectionSettingChanged = 861, + EVREventType_VREvent_KeyboardSectionSettingChanged = 862, + EVREventType_VREvent_PerfSectionSettingChanged = 863, + EVREventType_VREvent_DashboardSectionSettingChanged = 864, + EVREventType_VREvent_WebInterfaceSectionSettingChanged = 865, + EVREventType_VREvent_TrackersSectionSettingChanged = 866, + EVREventType_VREvent_LastKnownSectionSettingChanged = 867, + EVREventType_VREvent_DismissedWarningsSectionSettingChanged = 868, + EVREventType_VREvent_GpuSpeedSectionSettingChanged = 869, + EVREventType_VREvent_WindowsMRSectionSettingChanged = 870, + EVREventType_VREvent_OtherSectionSettingChanged = 871, + EVREventType_VREvent_StatusUpdate = 900, + EVREventType_VREvent_WebInterface_InstallDriverCompleted = 950, + EVREventType_VREvent_MCImageUpdated = 1000, + EVREventType_VREvent_FirmwareUpdateStarted = 1100, + EVREventType_VREvent_FirmwareUpdateFinished = 1101, + EVREventType_VREvent_KeyboardClosed = 1200, + EVREventType_VREvent_KeyboardCharInput = 1201, + EVREventType_VREvent_KeyboardDone = 1202, + EVREventType_VREvent_ApplicationListUpdated = 1303, + EVREventType_VREvent_ApplicationMimeTypeLoad = 1304, + EVREventType_VREvent_ProcessConnected = 1306, + EVREventType_VREvent_ProcessDisconnected = 1307, + EVREventType_VREvent_Compositor_ChaperoneBoundsShown = 1410, + EVREventType_VREvent_Compositor_ChaperoneBoundsHidden = 1411, + EVREventType_VREvent_Compositor_DisplayDisconnected = 1412, + EVREventType_VREvent_Compositor_DisplayReconnected = 1413, + EVREventType_VREvent_Compositor_HDCPError = 1414, + EVREventType_VREvent_Compositor_ApplicationNotResponding = 1415, + EVREventType_VREvent_Compositor_ApplicationResumed = 1416, + EVREventType_VREvent_Compositor_OutOfVideoMemory = 1417, + EVREventType_VREvent_Compositor_DisplayModeNotSupported = 1418, + EVREventType_VREvent_Compositor_StageOverrideReady = 1419, + EVREventType_VREvent_TrackedCamera_StartVideoStream = 1500, + EVREventType_VREvent_TrackedCamera_StopVideoStream = 1501, + EVREventType_VREvent_TrackedCamera_PauseVideoStream = 1502, + EVREventType_VREvent_TrackedCamera_ResumeVideoStream = 1503, + EVREventType_VREvent_TrackedCamera_EditingSurface = 1550, + EVREventType_VREvent_PerformanceTest_EnableCapture = 1600, + EVREventType_VREvent_PerformanceTest_DisableCapture = 1601, + EVREventType_VREvent_PerformanceTest_FidelityLevel = 1602, + EVREventType_VREvent_MessageOverlay_Closed = 1650, + EVREventType_VREvent_MessageOverlayCloseRequested = 1651, + EVREventType_VREvent_Input_HapticVibration = 1700, + EVREventType_VREvent_Input_BindingLoadFailed = 1701, + EVREventType_VREvent_Input_BindingLoadSuccessful = 1702, + EVREventType_VREvent_Input_ActionManifestReloaded = 1703, + EVREventType_VREvent_Input_ActionManifestLoadFailed = 1704, + EVREventType_VREvent_Input_ProgressUpdate = 1705, + EVREventType_VREvent_Input_TrackerActivated = 1706, + EVREventType_VREvent_Input_BindingsUpdated = 1707, + EVREventType_VREvent_Input_BindingSubscriptionChanged = 1708, + EVREventType_VREvent_SpatialAnchors_PoseUpdated = 1800, + EVREventType_VREvent_SpatialAnchors_DescriptorUpdated = 1801, + EVREventType_VREvent_SpatialAnchors_RequestPoseUpdate = 1802, + EVREventType_VREvent_SpatialAnchors_RequestDescriptorUpdate = 1803, + EVREventType_VREvent_SystemReport_Started = 1900, + EVREventType_VREvent_Monitor_ShowHeadsetView = 2000, + EVREventType_VREvent_Monitor_HideHeadsetView = 2001, + EVREventType_VREvent_VendorSpecific_Reserved_Start = 10000, + EVREventType_VREvent_VendorSpecific_Reserved_End = 19999, +} EVREventType; + +typedef enum EDeviceActivityLevel +{ + EDeviceActivityLevel_k_EDeviceActivityLevel_Unknown = -1, + EDeviceActivityLevel_k_EDeviceActivityLevel_Idle = 0, + EDeviceActivityLevel_k_EDeviceActivityLevel_UserInteraction = 1, + EDeviceActivityLevel_k_EDeviceActivityLevel_UserInteraction_Timeout = 2, + EDeviceActivityLevel_k_EDeviceActivityLevel_Standby = 3, + EDeviceActivityLevel_k_EDeviceActivityLevel_Idle_Timeout = 4, +} EDeviceActivityLevel; + +typedef enum EVRButtonId +{ + EVRButtonId_k_EButton_System = 0, + EVRButtonId_k_EButton_ApplicationMenu = 1, + EVRButtonId_k_EButton_Grip = 2, + EVRButtonId_k_EButton_DPad_Left = 3, + EVRButtonId_k_EButton_DPad_Up = 4, + EVRButtonId_k_EButton_DPad_Right = 5, + EVRButtonId_k_EButton_DPad_Down = 6, + EVRButtonId_k_EButton_A = 7, + EVRButtonId_k_EButton_ProximitySensor = 31, + EVRButtonId_k_EButton_Axis0 = 32, + EVRButtonId_k_EButton_Axis1 = 33, + EVRButtonId_k_EButton_Axis2 = 34, + EVRButtonId_k_EButton_Axis3 = 35, + EVRButtonId_k_EButton_Axis4 = 36, + EVRButtonId_k_EButton_SteamVR_Touchpad = 32, + EVRButtonId_k_EButton_SteamVR_Trigger = 33, + EVRButtonId_k_EButton_Dashboard_Back = 2, + EVRButtonId_k_EButton_IndexController_A = 2, + EVRButtonId_k_EButton_IndexController_B = 1, + EVRButtonId_k_EButton_IndexController_JoyStick = 35, + EVRButtonId_k_EButton_Max = 64, +} EVRButtonId; + +typedef enum EVRMouseButton +{ + EVRMouseButton_VRMouseButton_Left = 1, + EVRMouseButton_VRMouseButton_Right = 2, + EVRMouseButton_VRMouseButton_Middle = 4, +} EVRMouseButton; + +typedef enum EShowUIType +{ + EShowUIType_ShowUI_ControllerBinding = 0, + EShowUIType_ShowUI_ManageTrackers = 1, + EShowUIType_ShowUI_Pairing = 3, + EShowUIType_ShowUI_Settings = 4, + EShowUIType_ShowUI_DebugCommands = 5, + EShowUIType_ShowUI_FullControllerBinding = 6, + EShowUIType_ShowUI_ManageDrivers = 7, +} EShowUIType; + +typedef enum EHDCPError +{ + EHDCPError_HDCPError_None = 0, + EHDCPError_HDCPError_LinkLost = 1, + EHDCPError_HDCPError_Tampered = 2, + EHDCPError_HDCPError_DeviceRevoked = 3, + EHDCPError_HDCPError_Unknown = 4, +} EHDCPError; + +typedef enum EVRComponentProperty +{ + EVRComponentProperty_VRComponentProperty_IsStatic = 1, + EVRComponentProperty_VRComponentProperty_IsVisible = 2, + EVRComponentProperty_VRComponentProperty_IsTouched = 4, + EVRComponentProperty_VRComponentProperty_IsPressed = 8, + EVRComponentProperty_VRComponentProperty_IsScrolled = 16, + EVRComponentProperty_VRComponentProperty_IsHighlighted = 32, +} EVRComponentProperty; + +typedef enum EVRInputError +{ + EVRInputError_VRInputError_None = 0, + EVRInputError_VRInputError_NameNotFound = 1, + EVRInputError_VRInputError_WrongType = 2, + EVRInputError_VRInputError_InvalidHandle = 3, + EVRInputError_VRInputError_InvalidParam = 4, + EVRInputError_VRInputError_NoSteam = 5, + EVRInputError_VRInputError_MaxCapacityReached = 6, + EVRInputError_VRInputError_IPCError = 7, + EVRInputError_VRInputError_NoActiveActionSet = 8, + EVRInputError_VRInputError_InvalidDevice = 9, + EVRInputError_VRInputError_InvalidSkeleton = 10, + EVRInputError_VRInputError_InvalidBoneCount = 11, + EVRInputError_VRInputError_InvalidCompressedData = 12, + EVRInputError_VRInputError_NoData = 13, + EVRInputError_VRInputError_BufferTooSmall = 14, + EVRInputError_VRInputError_MismatchedActionManifest = 15, + EVRInputError_VRInputError_MissingSkeletonData = 16, + EVRInputError_VRInputError_InvalidBoneIndex = 17, + EVRInputError_VRInputError_InvalidPriority = 18, + EVRInputError_VRInputError_PermissionDenied = 19, + EVRInputError_VRInputError_InvalidRenderModel = 20, +} EVRInputError; + +typedef enum EVRSpatialAnchorError +{ + EVRSpatialAnchorError_VRSpatialAnchorError_Success = 0, + EVRSpatialAnchorError_VRSpatialAnchorError_Internal = 1, + EVRSpatialAnchorError_VRSpatialAnchorError_UnknownHandle = 2, + EVRSpatialAnchorError_VRSpatialAnchorError_ArrayTooSmall = 3, + EVRSpatialAnchorError_VRSpatialAnchorError_InvalidDescriptorChar = 4, + EVRSpatialAnchorError_VRSpatialAnchorError_NotYetAvailable = 5, + EVRSpatialAnchorError_VRSpatialAnchorError_NotAvailableInThisUniverse = 6, + EVRSpatialAnchorError_VRSpatialAnchorError_PermanentlyUnavailable = 7, + EVRSpatialAnchorError_VRSpatialAnchorError_WrongDriver = 8, + EVRSpatialAnchorError_VRSpatialAnchorError_DescriptorTooLong = 9, + EVRSpatialAnchorError_VRSpatialAnchorError_Unknown = 10, + EVRSpatialAnchorError_VRSpatialAnchorError_NoRoomCalibration = 11, + EVRSpatialAnchorError_VRSpatialAnchorError_InvalidArgument = 12, + EVRSpatialAnchorError_VRSpatialAnchorError_UnknownDriver = 13, +} EVRSpatialAnchorError; + +typedef enum EHiddenAreaMeshType +{ + EHiddenAreaMeshType_k_eHiddenAreaMesh_Standard = 0, + EHiddenAreaMeshType_k_eHiddenAreaMesh_Inverse = 1, + EHiddenAreaMeshType_k_eHiddenAreaMesh_LineLoop = 2, + EHiddenAreaMeshType_k_eHiddenAreaMesh_Max = 3, +} EHiddenAreaMeshType; + +typedef enum EVRControllerAxisType +{ + EVRControllerAxisType_k_eControllerAxis_None = 0, + EVRControllerAxisType_k_eControllerAxis_TrackPad = 1, + EVRControllerAxisType_k_eControllerAxis_Joystick = 2, + EVRControllerAxisType_k_eControllerAxis_Trigger = 3, +} EVRControllerAxisType; + +typedef enum EVRControllerEventOutputType +{ + EVRControllerEventOutputType_ControllerEventOutput_OSEvents = 0, + EVRControllerEventOutputType_ControllerEventOutput_VREvents = 1, +} EVRControllerEventOutputType; + +typedef enum ECollisionBoundsStyle +{ + ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_BEGINNER = 0, + ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_INTERMEDIATE = 1, + ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_SQUARES = 2, + ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_ADVANCED = 3, + ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_NONE = 4, + ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_COUNT = 5, +} ECollisionBoundsStyle; + +typedef enum EVROverlayError +{ + EVROverlayError_VROverlayError_None = 0, + EVROverlayError_VROverlayError_UnknownOverlay = 10, + EVROverlayError_VROverlayError_InvalidHandle = 11, + EVROverlayError_VROverlayError_PermissionDenied = 12, + EVROverlayError_VROverlayError_OverlayLimitExceeded = 13, + EVROverlayError_VROverlayError_WrongVisibilityType = 14, + EVROverlayError_VROverlayError_KeyTooLong = 15, + EVROverlayError_VROverlayError_NameTooLong = 16, + EVROverlayError_VROverlayError_KeyInUse = 17, + EVROverlayError_VROverlayError_WrongTransformType = 18, + EVROverlayError_VROverlayError_InvalidTrackedDevice = 19, + EVROverlayError_VROverlayError_InvalidParameter = 20, + EVROverlayError_VROverlayError_ThumbnailCantBeDestroyed = 21, + EVROverlayError_VROverlayError_ArrayTooSmall = 22, + EVROverlayError_VROverlayError_RequestFailed = 23, + EVROverlayError_VROverlayError_InvalidTexture = 24, + EVROverlayError_VROverlayError_UnableToLoadFile = 25, + EVROverlayError_VROverlayError_KeyboardAlreadyInUse = 26, + EVROverlayError_VROverlayError_NoNeighbor = 27, + EVROverlayError_VROverlayError_TooManyMaskPrimitives = 29, + EVROverlayError_VROverlayError_BadMaskPrimitive = 30, + EVROverlayError_VROverlayError_TextureAlreadyLocked = 31, + EVROverlayError_VROverlayError_TextureLockCapacityReached = 32, + EVROverlayError_VROverlayError_TextureNotLocked = 33, +} EVROverlayError; + +typedef enum EVRApplicationType +{ + EVRApplicationType_VRApplication_Other = 0, + EVRApplicationType_VRApplication_Scene = 1, + EVRApplicationType_VRApplication_Overlay = 2, + EVRApplicationType_VRApplication_Background = 3, + EVRApplicationType_VRApplication_Utility = 4, + EVRApplicationType_VRApplication_VRMonitor = 5, + EVRApplicationType_VRApplication_SteamWatchdog = 6, + EVRApplicationType_VRApplication_Bootstrapper = 7, + EVRApplicationType_VRApplication_WebHelper = 8, + EVRApplicationType_VRApplication_OpenXRInstance = 9, + EVRApplicationType_VRApplication_OpenXRScene = 10, + EVRApplicationType_VRApplication_OpenXROverlay = 11, + EVRApplicationType_VRApplication_Prism = 12, + EVRApplicationType_VRApplication_Max = 13, +} EVRApplicationType; + +typedef enum EVRFirmwareError +{ + EVRFirmwareError_VRFirmwareError_None = 0, + EVRFirmwareError_VRFirmwareError_Success = 1, + EVRFirmwareError_VRFirmwareError_Fail = 2, +} EVRFirmwareError; + +typedef enum EVRNotificationError +{ + EVRNotificationError_VRNotificationError_OK = 0, + EVRNotificationError_VRNotificationError_InvalidNotificationId = 100, + EVRNotificationError_VRNotificationError_NotificationQueueFull = 101, + EVRNotificationError_VRNotificationError_InvalidOverlayHandle = 102, + EVRNotificationError_VRNotificationError_SystemWithUserValueAlreadyExists = 103, +} EVRNotificationError; + +typedef enum EVRSkeletalMotionRange +{ + EVRSkeletalMotionRange_VRSkeletalMotionRange_WithController = 0, + EVRSkeletalMotionRange_VRSkeletalMotionRange_WithoutController = 1, +} EVRSkeletalMotionRange; + +typedef enum EVRSkeletalTrackingLevel +{ + EVRSkeletalTrackingLevel_VRSkeletalTracking_Estimated = 0, + EVRSkeletalTrackingLevel_VRSkeletalTracking_Partial = 1, + EVRSkeletalTrackingLevel_VRSkeletalTracking_Full = 2, + EVRSkeletalTrackingLevel_VRSkeletalTrackingLevel_Count = 3, + EVRSkeletalTrackingLevel_VRSkeletalTrackingLevel_Max = 2, +} EVRSkeletalTrackingLevel; + +typedef enum EVRInitError +{ + EVRInitError_VRInitError_None = 0, + EVRInitError_VRInitError_Unknown = 1, + EVRInitError_VRInitError_Init_InstallationNotFound = 100, + EVRInitError_VRInitError_Init_InstallationCorrupt = 101, + EVRInitError_VRInitError_Init_VRClientDLLNotFound = 102, + EVRInitError_VRInitError_Init_FileNotFound = 103, + EVRInitError_VRInitError_Init_FactoryNotFound = 104, + EVRInitError_VRInitError_Init_InterfaceNotFound = 105, + EVRInitError_VRInitError_Init_InvalidInterface = 106, + EVRInitError_VRInitError_Init_UserConfigDirectoryInvalid = 107, + EVRInitError_VRInitError_Init_HmdNotFound = 108, + EVRInitError_VRInitError_Init_NotInitialized = 109, + EVRInitError_VRInitError_Init_PathRegistryNotFound = 110, + EVRInitError_VRInitError_Init_NoConfigPath = 111, + EVRInitError_VRInitError_Init_NoLogPath = 112, + EVRInitError_VRInitError_Init_PathRegistryNotWritable = 113, + EVRInitError_VRInitError_Init_AppInfoInitFailed = 114, + EVRInitError_VRInitError_Init_Retry = 115, + EVRInitError_VRInitError_Init_InitCanceledByUser = 116, + EVRInitError_VRInitError_Init_AnotherAppLaunching = 117, + EVRInitError_VRInitError_Init_SettingsInitFailed = 118, + EVRInitError_VRInitError_Init_ShuttingDown = 119, + EVRInitError_VRInitError_Init_TooManyObjects = 120, + EVRInitError_VRInitError_Init_NoServerForBackgroundApp = 121, + EVRInitError_VRInitError_Init_NotSupportedWithCompositor = 122, + EVRInitError_VRInitError_Init_NotAvailableToUtilityApps = 123, + EVRInitError_VRInitError_Init_Internal = 124, + EVRInitError_VRInitError_Init_HmdDriverIdIsNone = 125, + EVRInitError_VRInitError_Init_HmdNotFoundPresenceFailed = 126, + EVRInitError_VRInitError_Init_VRMonitorNotFound = 127, + EVRInitError_VRInitError_Init_VRMonitorStartupFailed = 128, + EVRInitError_VRInitError_Init_LowPowerWatchdogNotSupported = 129, + EVRInitError_VRInitError_Init_InvalidApplicationType = 130, + EVRInitError_VRInitError_Init_NotAvailableToWatchdogApps = 131, + EVRInitError_VRInitError_Init_WatchdogDisabledInSettings = 132, + EVRInitError_VRInitError_Init_VRDashboardNotFound = 133, + EVRInitError_VRInitError_Init_VRDashboardStartupFailed = 134, + EVRInitError_VRInitError_Init_VRHomeNotFound = 135, + EVRInitError_VRInitError_Init_VRHomeStartupFailed = 136, + EVRInitError_VRInitError_Init_RebootingBusy = 137, + EVRInitError_VRInitError_Init_FirmwareUpdateBusy = 138, + EVRInitError_VRInitError_Init_FirmwareRecoveryBusy = 139, + EVRInitError_VRInitError_Init_USBServiceBusy = 140, + EVRInitError_VRInitError_Init_VRWebHelperStartupFailed = 141, + EVRInitError_VRInitError_Init_TrackerManagerInitFailed = 142, + EVRInitError_VRInitError_Init_AlreadyRunning = 143, + EVRInitError_VRInitError_Init_FailedForVrMonitor = 144, + EVRInitError_VRInitError_Init_PropertyManagerInitFailed = 145, + EVRInitError_VRInitError_Init_WebServerFailed = 146, + EVRInitError_VRInitError_Init_IllegalTypeTransition = 147, + EVRInitError_VRInitError_Init_MismatchedRuntimes = 148, + EVRInitError_VRInitError_Init_InvalidProcessId = 149, + EVRInitError_VRInitError_Init_VRServiceStartupFailed = 150, + EVRInitError_VRInitError_Init_PrismNeedsNewDrivers = 151, + EVRInitError_VRInitError_Init_PrismStartupTimedOut = 152, + EVRInitError_VRInitError_Init_CouldNotStartPrism = 153, + EVRInitError_VRInitError_Init_CreateDriverDirectDeviceFailed = 154, + EVRInitError_VRInitError_Init_PrismExitedUnexpectedly = 155, + EVRInitError_VRInitError_Driver_Failed = 200, + EVRInitError_VRInitError_Driver_Unknown = 201, + EVRInitError_VRInitError_Driver_HmdUnknown = 202, + EVRInitError_VRInitError_Driver_NotLoaded = 203, + EVRInitError_VRInitError_Driver_RuntimeOutOfDate = 204, + EVRInitError_VRInitError_Driver_HmdInUse = 205, + EVRInitError_VRInitError_Driver_NotCalibrated = 206, + EVRInitError_VRInitError_Driver_CalibrationInvalid = 207, + EVRInitError_VRInitError_Driver_HmdDisplayNotFound = 208, + EVRInitError_VRInitError_Driver_TrackedDeviceInterfaceUnknown = 209, + EVRInitError_VRInitError_Driver_HmdDriverIdOutOfBounds = 211, + EVRInitError_VRInitError_Driver_HmdDisplayMirrored = 212, + EVRInitError_VRInitError_Driver_HmdDisplayNotFoundLaptop = 213, + EVRInitError_VRInitError_IPC_ServerInitFailed = 300, + EVRInitError_VRInitError_IPC_ConnectFailed = 301, + EVRInitError_VRInitError_IPC_SharedStateInitFailed = 302, + EVRInitError_VRInitError_IPC_CompositorInitFailed = 303, + EVRInitError_VRInitError_IPC_MutexInitFailed = 304, + EVRInitError_VRInitError_IPC_Failed = 305, + EVRInitError_VRInitError_IPC_CompositorConnectFailed = 306, + EVRInitError_VRInitError_IPC_CompositorInvalidConnectResponse = 307, + EVRInitError_VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308, + EVRInitError_VRInitError_IPC_ConnectFailedAfterTargetExited = 309, + EVRInitError_VRInitError_IPC_NamespaceUnavailable = 310, + EVRInitError_VRInitError_Compositor_Failed = 400, + EVRInitError_VRInitError_Compositor_D3D11HardwareRequired = 401, + EVRInitError_VRInitError_Compositor_FirmwareRequiresUpdate = 402, + EVRInitError_VRInitError_Compositor_OverlayInitFailed = 403, + EVRInitError_VRInitError_Compositor_ScreenshotsInitFailed = 404, + EVRInitError_VRInitError_Compositor_UnableToCreateDevice = 405, + EVRInitError_VRInitError_Compositor_SharedStateIsNull = 406, + EVRInitError_VRInitError_Compositor_NotificationManagerIsNull = 407, + EVRInitError_VRInitError_Compositor_ResourceManagerClientIsNull = 408, + EVRInitError_VRInitError_Compositor_MessageOverlaySharedStateInitFailure = 409, + EVRInitError_VRInitError_Compositor_PropertiesInterfaceIsNull = 410, + EVRInitError_VRInitError_Compositor_CreateFullscreenWindowFailed = 411, + EVRInitError_VRInitError_Compositor_SettingsInterfaceIsNull = 412, + EVRInitError_VRInitError_Compositor_FailedToShowWindow = 413, + EVRInitError_VRInitError_Compositor_DistortInterfaceIsNull = 414, + EVRInitError_VRInitError_Compositor_DisplayFrequencyFailure = 415, + EVRInitError_VRInitError_Compositor_RendererInitializationFailed = 416, + EVRInitError_VRInitError_Compositor_DXGIFactoryInterfaceIsNull = 417, + EVRInitError_VRInitError_Compositor_DXGIFactoryCreateFailed = 418, + EVRInitError_VRInitError_Compositor_DXGIFactoryQueryFailed = 419, + EVRInitError_VRInitError_Compositor_InvalidAdapterDesktop = 420, + EVRInitError_VRInitError_Compositor_InvalidHmdAttachment = 421, + EVRInitError_VRInitError_Compositor_InvalidOutputDesktop = 422, + EVRInitError_VRInitError_Compositor_InvalidDeviceProvided = 423, + EVRInitError_VRInitError_Compositor_D3D11RendererInitializationFailed = 424, + EVRInitError_VRInitError_Compositor_FailedToFindDisplayMode = 425, + EVRInitError_VRInitError_Compositor_FailedToCreateSwapChain = 426, + EVRInitError_VRInitError_Compositor_FailedToGetBackBuffer = 427, + EVRInitError_VRInitError_Compositor_FailedToCreateRenderTarget = 428, + EVRInitError_VRInitError_Compositor_FailedToCreateDXGI2SwapChain = 429, + EVRInitError_VRInitError_Compositor_FailedtoGetDXGI2BackBuffer = 430, + EVRInitError_VRInitError_Compositor_FailedToCreateDXGI2RenderTarget = 431, + EVRInitError_VRInitError_Compositor_FailedToGetDXGIDeviceInterface = 432, + EVRInitError_VRInitError_Compositor_SelectDisplayMode = 433, + EVRInitError_VRInitError_Compositor_FailedToCreateNvAPIRenderTargets = 434, + EVRInitError_VRInitError_Compositor_NvAPISetDisplayMode = 435, + EVRInitError_VRInitError_Compositor_FailedToCreateDirectModeDisplay = 436, + EVRInitError_VRInitError_Compositor_InvalidHmdPropertyContainer = 437, + EVRInitError_VRInitError_Compositor_UpdateDisplayFrequency = 438, + EVRInitError_VRInitError_Compositor_CreateRasterizerState = 439, + EVRInitError_VRInitError_Compositor_CreateWireframeRasterizerState = 440, + EVRInitError_VRInitError_Compositor_CreateSamplerState = 441, + EVRInitError_VRInitError_Compositor_CreateClampToBorderSamplerState = 442, + EVRInitError_VRInitError_Compositor_CreateAnisoSamplerState = 443, + EVRInitError_VRInitError_Compositor_CreateOverlaySamplerState = 444, + EVRInitError_VRInitError_Compositor_CreatePanoramaSamplerState = 445, + EVRInitError_VRInitError_Compositor_CreateFontSamplerState = 446, + EVRInitError_VRInitError_Compositor_CreateNoBlendState = 447, + EVRInitError_VRInitError_Compositor_CreateBlendState = 448, + EVRInitError_VRInitError_Compositor_CreateAlphaBlendState = 449, + EVRInitError_VRInitError_Compositor_CreateBlendStateMaskR = 450, + EVRInitError_VRInitError_Compositor_CreateBlendStateMaskG = 451, + EVRInitError_VRInitError_Compositor_CreateBlendStateMaskB = 452, + EVRInitError_VRInitError_Compositor_CreateDepthStencilState = 453, + EVRInitError_VRInitError_Compositor_CreateDepthStencilStateNoWrite = 454, + EVRInitError_VRInitError_Compositor_CreateDepthStencilStateNoDepth = 455, + EVRInitError_VRInitError_Compositor_CreateFlushTexture = 456, + EVRInitError_VRInitError_Compositor_CreateDistortionSurfaces = 457, + EVRInitError_VRInitError_Compositor_CreateConstantBuffer = 458, + EVRInitError_VRInitError_Compositor_CreateHmdPoseConstantBuffer = 459, + EVRInitError_VRInitError_Compositor_CreateHmdPoseStagingConstantBuffer = 460, + EVRInitError_VRInitError_Compositor_CreateSharedFrameInfoConstantBuffer = 461, + EVRInitError_VRInitError_Compositor_CreateOverlayConstantBuffer = 462, + EVRInitError_VRInitError_Compositor_CreateSceneTextureIndexConstantBuffer = 463, + EVRInitError_VRInitError_Compositor_CreateReadableSceneTextureIndexConstantBuffer = 464, + EVRInitError_VRInitError_Compositor_CreateLayerGraphicsTextureIndexConstantBuffer = 465, + EVRInitError_VRInitError_Compositor_CreateLayerComputeTextureIndexConstantBuffer = 466, + EVRInitError_VRInitError_Compositor_CreateLayerComputeSceneTextureIndexConstantBuffer = 467, + EVRInitError_VRInitError_Compositor_CreateComputeHmdPoseConstantBuffer = 468, + EVRInitError_VRInitError_Compositor_CreateGeomConstantBuffer = 469, + EVRInitError_VRInitError_Compositor_CreatePanelMaskConstantBuffer = 470, + EVRInitError_VRInitError_Compositor_CreatePixelSimUBO = 471, + EVRInitError_VRInitError_Compositor_CreateMSAARenderTextures = 472, + EVRInitError_VRInitError_Compositor_CreateResolveRenderTextures = 473, + EVRInitError_VRInitError_Compositor_CreateComputeResolveRenderTextures = 474, + EVRInitError_VRInitError_Compositor_CreateDriverDirectModeResolveTextures = 475, + EVRInitError_VRInitError_Compositor_OpenDriverDirectModeResolveTextures = 476, + EVRInitError_VRInitError_Compositor_CreateFallbackSyncTexture = 477, + EVRInitError_VRInitError_Compositor_ShareFallbackSyncTexture = 478, + EVRInitError_VRInitError_Compositor_CreateOverlayIndexBuffer = 479, + EVRInitError_VRInitError_Compositor_CreateOverlayVertexBuffer = 480, + EVRInitError_VRInitError_Compositor_CreateTextVertexBuffer = 481, + EVRInitError_VRInitError_Compositor_CreateTextIndexBuffer = 482, + EVRInitError_VRInitError_Compositor_CreateMirrorTextures = 483, + EVRInitError_VRInitError_Compositor_CreateLastFrameRenderTexture = 484, + EVRInitError_VRInitError_Compositor_CreateMirrorOverlay = 485, + EVRInitError_VRInitError_Compositor_FailedToCreateVirtualDisplayBackbuffer = 486, + EVRInitError_VRInitError_Compositor_DisplayModeNotSupported = 487, + EVRInitError_VRInitError_Compositor_CreateOverlayInvalidCall = 488, + EVRInitError_VRInitError_Compositor_CreateOverlayAlreadyInitialized = 489, + EVRInitError_VRInitError_Compositor_FailedToCreateMailbox = 490, + EVRInitError_VRInitError_Compositor_WindowInterfaceIsNull = 491, + EVRInitError_VRInitError_Compositor_SystemLayerCreateInstance = 492, + EVRInitError_VRInitError_Compositor_SystemLayerCreateSession = 493, + EVRInitError_VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000, + EVRInitError_VRInitError_VendorSpecific_WindowsNotInDevMode = 1001, + EVRInitError_VRInitError_VendorSpecific_HmdFound_CantOpenDevice = 1101, + EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102, + EVRInitError_VRInitError_VendorSpecific_HmdFound_NoStoredConfig = 1103, + EVRInitError_VRInitError_VendorSpecific_HmdFound_ConfigTooBig = 1104, + EVRInitError_VRInitError_VendorSpecific_HmdFound_ConfigTooSmall = 1105, + EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToInitZLib = 1106, + EVRInitError_VRInitError_VendorSpecific_HmdFound_CantReadFirmwareVersion = 1107, + EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToSendUserDataStart = 1108, + EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataStart = 1109, + EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataNext = 1110, + EVRInitError_VRInitError_VendorSpecific_HmdFound_UserDataAddressRange = 1111, + EVRInitError_VRInitError_VendorSpecific_HmdFound_UserDataError = 1112, + EVRInitError_VRInitError_VendorSpecific_HmdFound_ConfigFailedSanityCheck = 1113, + EVRInitError_VRInitError_VendorSpecific_OculusRuntimeBadInstall = 1114, + EVRInitError_VRInitError_Steam_SteamInstallationNotFound = 2000, + EVRInitError_VRInitError_LastError = 2001, +} EVRInitError; + +typedef enum EVRScreenshotType +{ + EVRScreenshotType_VRScreenshotType_None = 0, + EVRScreenshotType_VRScreenshotType_Mono = 1, + EVRScreenshotType_VRScreenshotType_Stereo = 2, + EVRScreenshotType_VRScreenshotType_Cubemap = 3, + EVRScreenshotType_VRScreenshotType_MonoPanorama = 4, + EVRScreenshotType_VRScreenshotType_StereoPanorama = 5, +} EVRScreenshotType; + +typedef enum EVRScreenshotPropertyFilenames +{ + EVRScreenshotPropertyFilenames_VRScreenshotPropertyFilenames_Preview = 0, + EVRScreenshotPropertyFilenames_VRScreenshotPropertyFilenames_VR = 1, +} EVRScreenshotPropertyFilenames; + +typedef enum EVRTrackedCameraError +{ + EVRTrackedCameraError_VRTrackedCameraError_None = 0, + EVRTrackedCameraError_VRTrackedCameraError_OperationFailed = 100, + EVRTrackedCameraError_VRTrackedCameraError_InvalidHandle = 101, + EVRTrackedCameraError_VRTrackedCameraError_InvalidFrameHeaderVersion = 102, + EVRTrackedCameraError_VRTrackedCameraError_OutOfHandles = 103, + EVRTrackedCameraError_VRTrackedCameraError_IPCFailure = 104, + EVRTrackedCameraError_VRTrackedCameraError_NotSupportedForThisDevice = 105, + EVRTrackedCameraError_VRTrackedCameraError_SharedMemoryFailure = 106, + EVRTrackedCameraError_VRTrackedCameraError_FrameBufferingFailure = 107, + EVRTrackedCameraError_VRTrackedCameraError_StreamSetupFailure = 108, + EVRTrackedCameraError_VRTrackedCameraError_InvalidGLTextureId = 109, + EVRTrackedCameraError_VRTrackedCameraError_InvalidSharedTextureHandle = 110, + EVRTrackedCameraError_VRTrackedCameraError_FailedToGetGLTextureId = 111, + EVRTrackedCameraError_VRTrackedCameraError_SharedTextureFailure = 112, + EVRTrackedCameraError_VRTrackedCameraError_NoFrameAvailable = 113, + EVRTrackedCameraError_VRTrackedCameraError_InvalidArgument = 114, + EVRTrackedCameraError_VRTrackedCameraError_InvalidFrameBufferSize = 115, +} EVRTrackedCameraError; + +typedef enum EVRTrackedCameraFrameLayout +{ + EVRTrackedCameraFrameLayout_Mono = 1, + EVRTrackedCameraFrameLayout_Stereo = 2, + EVRTrackedCameraFrameLayout_VerticalLayout = 16, + EVRTrackedCameraFrameLayout_HorizontalLayout = 32, +} EVRTrackedCameraFrameLayout; + +typedef enum EVRTrackedCameraFrameType +{ + EVRTrackedCameraFrameType_VRTrackedCameraFrameType_Distorted = 0, + EVRTrackedCameraFrameType_VRTrackedCameraFrameType_Undistorted = 1, + EVRTrackedCameraFrameType_VRTrackedCameraFrameType_MaximumUndistorted = 2, + EVRTrackedCameraFrameType_MAX_CAMERA_FRAME_TYPES = 3, +} EVRTrackedCameraFrameType; + +typedef enum EVRDistortionFunctionType +{ + EVRDistortionFunctionType_VRDistortionFunctionType_None = 0, + EVRDistortionFunctionType_VRDistortionFunctionType_FTheta = 1, + EVRDistortionFunctionType_VRDistortionFunctionType_Extended_FTheta = 2, + EVRDistortionFunctionType_MAX_DISTORTION_FUNCTION_TYPES = 3, +} EVRDistortionFunctionType; + +typedef enum EVSync +{ + EVSync_VSync_None = 0, + EVSync_VSync_WaitRender = 1, + EVSync_VSync_NoWaitRender = 2, +} EVSync; + +typedef enum EVRMuraCorrectionMode +{ + EVRMuraCorrectionMode_Default = 0, + EVRMuraCorrectionMode_NoCorrection = 1, +} EVRMuraCorrectionMode; + +typedef enum Imu_OffScaleFlags +{ + Imu_OffScaleFlags_OffScale_AccelX = 1, + Imu_OffScaleFlags_OffScale_AccelY = 2, + Imu_OffScaleFlags_OffScale_AccelZ = 4, + Imu_OffScaleFlags_OffScale_GyroX = 8, + Imu_OffScaleFlags_OffScale_GyroY = 16, + Imu_OffScaleFlags_OffScale_GyroZ = 32, +} Imu_OffScaleFlags; + +typedef enum EVRApplicationError +{ + EVRApplicationError_VRApplicationError_None = 0, + EVRApplicationError_VRApplicationError_AppKeyAlreadyExists = 100, + EVRApplicationError_VRApplicationError_NoManifest = 101, + EVRApplicationError_VRApplicationError_NoApplication = 102, + EVRApplicationError_VRApplicationError_InvalidIndex = 103, + EVRApplicationError_VRApplicationError_UnknownApplication = 104, + EVRApplicationError_VRApplicationError_IPCFailed = 105, + EVRApplicationError_VRApplicationError_ApplicationAlreadyRunning = 106, + EVRApplicationError_VRApplicationError_InvalidManifest = 107, + EVRApplicationError_VRApplicationError_InvalidApplication = 108, + EVRApplicationError_VRApplicationError_LaunchFailed = 109, + EVRApplicationError_VRApplicationError_ApplicationAlreadyStarting = 110, + EVRApplicationError_VRApplicationError_LaunchInProgress = 111, + EVRApplicationError_VRApplicationError_OldApplicationQuitting = 112, + EVRApplicationError_VRApplicationError_TransitionAborted = 113, + EVRApplicationError_VRApplicationError_IsTemplate = 114, + EVRApplicationError_VRApplicationError_SteamVRIsExiting = 115, + EVRApplicationError_VRApplicationError_BufferTooSmall = 200, + EVRApplicationError_VRApplicationError_PropertyNotSet = 201, + EVRApplicationError_VRApplicationError_UnknownProperty = 202, + EVRApplicationError_VRApplicationError_InvalidParameter = 203, + EVRApplicationError_VRApplicationError_NotImplemented = 300, +} EVRApplicationError; + +typedef enum EVRApplicationProperty +{ + EVRApplicationProperty_VRApplicationProperty_Name_String = 0, + EVRApplicationProperty_VRApplicationProperty_LaunchType_String = 11, + EVRApplicationProperty_VRApplicationProperty_WorkingDirectory_String = 12, + EVRApplicationProperty_VRApplicationProperty_BinaryPath_String = 13, + EVRApplicationProperty_VRApplicationProperty_Arguments_String = 14, + EVRApplicationProperty_VRApplicationProperty_URL_String = 15, + EVRApplicationProperty_VRApplicationProperty_Description_String = 50, + EVRApplicationProperty_VRApplicationProperty_NewsURL_String = 51, + EVRApplicationProperty_VRApplicationProperty_ImagePath_String = 52, + EVRApplicationProperty_VRApplicationProperty_Source_String = 53, + EVRApplicationProperty_VRApplicationProperty_ActionManifestURL_String = 54, + EVRApplicationProperty_VRApplicationProperty_IsDashboardOverlay_Bool = 60, + EVRApplicationProperty_VRApplicationProperty_IsTemplate_Bool = 61, + EVRApplicationProperty_VRApplicationProperty_IsInstanced_Bool = 62, + EVRApplicationProperty_VRApplicationProperty_IsInternal_Bool = 63, + EVRApplicationProperty_VRApplicationProperty_WantsCompositorPauseInStandby_Bool = 64, + EVRApplicationProperty_VRApplicationProperty_IsHidden_Bool = 65, + EVRApplicationProperty_VRApplicationProperty_LastLaunchTime_Uint64 = 70, +} EVRApplicationProperty; + +typedef enum EVRSceneApplicationState +{ + EVRSceneApplicationState_None = 0, + EVRSceneApplicationState_Starting = 1, + EVRSceneApplicationState_Quitting = 2, + EVRSceneApplicationState_Running = 3, + EVRSceneApplicationState_Waiting = 4, +} EVRSceneApplicationState; + +typedef enum ChaperoneCalibrationState +{ + ChaperoneCalibrationState_OK = 1, + ChaperoneCalibrationState_Warning = 100, + ChaperoneCalibrationState_Warning_BaseStationMayHaveMoved = 101, + ChaperoneCalibrationState_Warning_BaseStationRemoved = 102, + ChaperoneCalibrationState_Warning_SeatedBoundsInvalid = 103, + ChaperoneCalibrationState_Error = 200, + ChaperoneCalibrationState_Error_BaseStationUninitialized = 201, + ChaperoneCalibrationState_Error_BaseStationConflict = 202, + ChaperoneCalibrationState_Error_PlayAreaInvalid = 203, + ChaperoneCalibrationState_Error_CollisionBoundsInvalid = 204, +} ChaperoneCalibrationState; + +typedef enum EChaperoneConfigFile +{ + EChaperoneConfigFile_Live = 1, + EChaperoneConfigFile_Temp = 2, +} EChaperoneConfigFile; + +typedef enum EChaperoneImportFlags +{ + EChaperoneImportFlags_EChaperoneImport_BoundsOnly = 1, +} EChaperoneImportFlags; + +typedef enum EVRCompositorError +{ + EVRCompositorError_VRCompositorError_None = 0, + EVRCompositorError_VRCompositorError_RequestFailed = 1, + EVRCompositorError_VRCompositorError_IncompatibleVersion = 100, + EVRCompositorError_VRCompositorError_DoNotHaveFocus = 101, + EVRCompositorError_VRCompositorError_InvalidTexture = 102, + EVRCompositorError_VRCompositorError_IsNotSceneApplication = 103, + EVRCompositorError_VRCompositorError_TextureIsOnWrongDevice = 104, + EVRCompositorError_VRCompositorError_TextureUsesUnsupportedFormat = 105, + EVRCompositorError_VRCompositorError_SharedTexturesNotSupported = 106, + EVRCompositorError_VRCompositorError_IndexOutOfRange = 107, + EVRCompositorError_VRCompositorError_AlreadySubmitted = 108, + EVRCompositorError_VRCompositorError_InvalidBounds = 109, + EVRCompositorError_VRCompositorError_AlreadySet = 110, +} EVRCompositorError; + +typedef enum EVRCompositorTimingMode +{ + EVRCompositorTimingMode_VRCompositorTimingMode_Implicit = 0, + EVRCompositorTimingMode_VRCompositorTimingMode_Explicit_RuntimePerformsPostPresentHandoff = 1, + EVRCompositorTimingMode_VRCompositorTimingMode_Explicit_ApplicationPerformsPostPresentHandoff = 2, +} EVRCompositorTimingMode; + +typedef enum VROverlayInputMethod +{ + VROverlayInputMethod_None = 0, + VROverlayInputMethod_Mouse = 1, +} VROverlayInputMethod; + +typedef enum VROverlayTransformType +{ + VROverlayTransformType_VROverlayTransform_Invalid = -1, + VROverlayTransformType_VROverlayTransform_Absolute = 0, + VROverlayTransformType_VROverlayTransform_TrackedDeviceRelative = 1, + VROverlayTransformType_VROverlayTransform_SystemOverlay = 2, + VROverlayTransformType_VROverlayTransform_TrackedComponent = 3, + VROverlayTransformType_VROverlayTransform_Cursor = 4, + VROverlayTransformType_VROverlayTransform_DashboardTab = 5, + VROverlayTransformType_VROverlayTransform_DashboardThumb = 6, + VROverlayTransformType_VROverlayTransform_Mountable = 7, + VROverlayTransformType_VROverlayTransform_Projection = 8, +} VROverlayTransformType; + +typedef enum VROverlayFlags +{ + VROverlayFlags_NoDashboardTab = 8, + VROverlayFlags_SendVRDiscreteScrollEvents = 64, + VROverlayFlags_SendVRTouchpadEvents = 128, + VROverlayFlags_ShowTouchPadScrollWheel = 256, + VROverlayFlags_TransferOwnershipToInternalProcess = 512, + VROverlayFlags_SideBySide_Parallel = 1024, + VROverlayFlags_SideBySide_Crossed = 2048, + VROverlayFlags_Panorama = 4096, + VROverlayFlags_StereoPanorama = 8192, + VROverlayFlags_SortWithNonSceneOverlays = 16384, + VROverlayFlags_VisibleInDashboard = 32768, + VROverlayFlags_MakeOverlaysInteractiveIfVisible = 65536, + VROverlayFlags_SendVRSmoothScrollEvents = 131072, + VROverlayFlags_ProtectedContent = 262144, + VROverlayFlags_HideLaserIntersection = 524288, + VROverlayFlags_WantsModalBehavior = 1048576, + VROverlayFlags_IsPremultiplied = 2097152, +} VROverlayFlags; + +typedef enum VRMessageOverlayResponse +{ + VRMessageOverlayResponse_ButtonPress_0 = 0, + VRMessageOverlayResponse_ButtonPress_1 = 1, + VRMessageOverlayResponse_ButtonPress_2 = 2, + VRMessageOverlayResponse_ButtonPress_3 = 3, + VRMessageOverlayResponse_CouldntFindSystemOverlay = 4, + VRMessageOverlayResponse_CouldntFindOrCreateClientOverlay = 5, + VRMessageOverlayResponse_ApplicationQuit = 6, +} VRMessageOverlayResponse; + +typedef enum EGamepadTextInputMode +{ + EGamepadTextInputMode_k_EGamepadTextInputModeNormal = 0, + EGamepadTextInputMode_k_EGamepadTextInputModePassword = 1, + EGamepadTextInputMode_k_EGamepadTextInputModeSubmit = 2, +} EGamepadTextInputMode; + +typedef enum EGamepadTextInputLineMode +{ + EGamepadTextInputLineMode_k_EGamepadTextInputLineModeSingleLine = 0, + EGamepadTextInputLineMode_k_EGamepadTextInputLineModeMultipleLines = 1, +} EGamepadTextInputLineMode; + +typedef enum EVROverlayIntersectionMaskPrimitiveType +{ + EVROverlayIntersectionMaskPrimitiveType_OverlayIntersectionPrimitiveType_Rectangle = 0, + EVROverlayIntersectionMaskPrimitiveType_OverlayIntersectionPrimitiveType_Circle = 1, +} EVROverlayIntersectionMaskPrimitiveType; + +typedef enum EKeyboardFlags +{ + EKeyboardFlags_KeyboardFlag_Minimal = 1, + EKeyboardFlags_KeyboardFlag_Modal = 2, +} EKeyboardFlags; + +typedef enum EDeviceType +{ + EDeviceType_DeviceType_Invalid = -1, + EDeviceType_DeviceType_DirectX11 = 0, + EDeviceType_DeviceType_Vulkan = 1, +} EDeviceType; + +typedef enum HeadsetViewMode_t +{ + HeadsetViewMode_t_HeadsetViewMode_Left = 0, + HeadsetViewMode_t_HeadsetViewMode_Right = 1, + HeadsetViewMode_t_HeadsetViewMode_Both = 2, +} HeadsetViewMode_t; + +typedef enum EVRRenderModelError +{ + EVRRenderModelError_VRRenderModelError_None = 0, + EVRRenderModelError_VRRenderModelError_Loading = 100, + EVRRenderModelError_VRRenderModelError_NotSupported = 200, + EVRRenderModelError_VRRenderModelError_InvalidArg = 300, + EVRRenderModelError_VRRenderModelError_InvalidModel = 301, + EVRRenderModelError_VRRenderModelError_NoShapes = 302, + EVRRenderModelError_VRRenderModelError_MultipleShapes = 303, + EVRRenderModelError_VRRenderModelError_TooManyVertices = 304, + EVRRenderModelError_VRRenderModelError_MultipleTextures = 305, + EVRRenderModelError_VRRenderModelError_BufferTooSmall = 306, + EVRRenderModelError_VRRenderModelError_NotEnoughNormals = 307, + EVRRenderModelError_VRRenderModelError_NotEnoughTexCoords = 308, + EVRRenderModelError_VRRenderModelError_InvalidTexture = 400, +} EVRRenderModelError; + +typedef enum EVRRenderModelTextureFormat +{ + EVRRenderModelTextureFormat_VRRenderModelTextureFormat_RGBA8_SRGB = 0, + EVRRenderModelTextureFormat_VRRenderModelTextureFormat_BC2 = 1, + EVRRenderModelTextureFormat_VRRenderModelTextureFormat_BC4 = 2, + EVRRenderModelTextureFormat_VRRenderModelTextureFormat_BC7 = 3, + EVRRenderModelTextureFormat_VRRenderModelTextureFormat_BC7_SRGB = 4, +} EVRRenderModelTextureFormat; + +typedef enum EVRNotificationType +{ + EVRNotificationType_Transient = 0, + EVRNotificationType_Persistent = 1, + EVRNotificationType_Transient_SystemWithUserValue = 2, +} EVRNotificationType; + +typedef enum EVRNotificationStyle +{ + EVRNotificationStyle_None = 0, + EVRNotificationStyle_Application = 100, + EVRNotificationStyle_Contact_Disabled = 200, + EVRNotificationStyle_Contact_Enabled = 201, + EVRNotificationStyle_Contact_Active = 202, +} EVRNotificationStyle; + +typedef enum EVRSettingsError +{ + EVRSettingsError_VRSettingsError_None = 0, + EVRSettingsError_VRSettingsError_IPCFailed = 1, + EVRSettingsError_VRSettingsError_WriteFailed = 2, + EVRSettingsError_VRSettingsError_ReadFailed = 3, + EVRSettingsError_VRSettingsError_JsonParseFailed = 4, + EVRSettingsError_VRSettingsError_UnsetSettingHasNoDefault = 5, +} EVRSettingsError; + +typedef enum EVRScreenshotError +{ + EVRScreenshotError_VRScreenshotError_None = 0, + EVRScreenshotError_VRScreenshotError_RequestFailed = 1, + EVRScreenshotError_VRScreenshotError_IncompatibleVersion = 100, + EVRScreenshotError_VRScreenshotError_NotFound = 101, + EVRScreenshotError_VRScreenshotError_BufferTooSmall = 102, + EVRScreenshotError_VRScreenshotError_ScreenshotAlreadyInProgress = 108, +} EVRScreenshotError; + +typedef enum EVRSkeletalTransformSpace +{ + EVRSkeletalTransformSpace_VRSkeletalTransformSpace_Model = 0, + EVRSkeletalTransformSpace_VRSkeletalTransformSpace_Parent = 1, +} EVRSkeletalTransformSpace; + +typedef enum EVRSkeletalReferencePose +{ + EVRSkeletalReferencePose_VRSkeletalReferencePose_BindPose = 0, + EVRSkeletalReferencePose_VRSkeletalReferencePose_OpenHand = 1, + EVRSkeletalReferencePose_VRSkeletalReferencePose_Fist = 2, + EVRSkeletalReferencePose_VRSkeletalReferencePose_GripLimit = 3, +} EVRSkeletalReferencePose; + +typedef enum EVRFinger +{ + EVRFinger_VRFinger_Thumb = 0, + EVRFinger_VRFinger_Index = 1, + EVRFinger_VRFinger_Middle = 2, + EVRFinger_VRFinger_Ring = 3, + EVRFinger_VRFinger_Pinky = 4, + EVRFinger_VRFinger_Count = 5, +} EVRFinger; + +typedef enum EVRFingerSplay +{ + EVRFingerSplay_VRFingerSplay_Thumb_Index = 0, + EVRFingerSplay_VRFingerSplay_Index_Middle = 1, + EVRFingerSplay_VRFingerSplay_Middle_Ring = 2, + EVRFingerSplay_VRFingerSplay_Ring_Pinky = 3, + EVRFingerSplay_VRFingerSplay_Count = 4, +} EVRFingerSplay; + +typedef enum EVRSummaryType +{ + EVRSummaryType_VRSummaryType_FromAnimation = 0, + EVRSummaryType_VRSummaryType_FromDevice = 1, +} EVRSummaryType; + +typedef enum EVRInputFilterCancelType +{ + EVRInputFilterCancelType_VRInputFilterCancel_Timers = 0, + EVRInputFilterCancelType_VRInputFilterCancel_Momentum = 1, +} EVRInputFilterCancelType; + +typedef enum EVRInputStringBits +{ + EVRInputStringBits_VRInputString_Hand = 1, + EVRInputStringBits_VRInputString_ControllerType = 2, + EVRInputStringBits_VRInputString_InputSource = 4, + EVRInputStringBits_VRInputString_All = -1, +} EVRInputStringBits; + +typedef enum EIOBufferError +{ + EIOBufferError_IOBuffer_Success = 0, + EIOBufferError_IOBuffer_OperationFailed = 100, + EIOBufferError_IOBuffer_InvalidHandle = 101, + EIOBufferError_IOBuffer_InvalidArgument = 102, + EIOBufferError_IOBuffer_PathExists = 103, + EIOBufferError_IOBuffer_PathDoesNotExist = 104, + EIOBufferError_IOBuffer_Permission = 105, +} EIOBufferError; + +typedef enum EIOBufferMode +{ + EIOBufferMode_IOBufferMode_Read = 1, + EIOBufferMode_IOBufferMode_Write = 2, + EIOBufferMode_IOBufferMode_Create = 512, +} EIOBufferMode; + +typedef enum EVRDebugError +{ + EVRDebugError_VRDebugError_Success = 0, + EVRDebugError_VRDebugError_BadParameter = 1, +} EVRDebugError; + +typedef enum EPropertyWriteType +{ + EPropertyWriteType_PropertyWrite_Set = 0, + EPropertyWriteType_PropertyWrite_Erase = 1, + EPropertyWriteType_PropertyWrite_SetError = 2, +} EPropertyWriteType; + +typedef enum EBlockQueueError +{ + EBlockQueueError_BlockQueueError_None = 0, + EBlockQueueError_BlockQueueError_QueueAlreadyExists = 1, + EBlockQueueError_BlockQueueError_QueueNotFound = 2, + EBlockQueueError_BlockQueueError_BlockNotAvailable = 3, + EBlockQueueError_BlockQueueError_InvalidHandle = 4, + EBlockQueueError_BlockQueueError_InvalidParam = 5, + EBlockQueueError_BlockQueueError_ParamMismatch = 6, + EBlockQueueError_BlockQueueError_InternalError = 7, + EBlockQueueError_BlockQueueError_AlreadyInitialized = 8, + EBlockQueueError_BlockQueueError_OperationIsServerOnly = 9, + EBlockQueueError_BlockQueueError_TooManyConnections = 10, +} EBlockQueueError; + +typedef enum EBlockQueueReadType +{ + EBlockQueueReadType_BlockQueueRead_Latest = 0, + EBlockQueueReadType_BlockQueueRead_New = 1, + EBlockQueueReadType_BlockQueueRead_Next = 2, +} EBlockQueueReadType; + + +// OpenVR typedefs + +typedef uint32_t TrackedDeviceIndex_t; +typedef uint32_t VRNotificationId; +typedef uint64_t VROverlayHandle_t; + +typedef uint32_t SpatialAnchorHandle_t; +typedef void * glSharedTextureHandle_t; +typedef int32_t glInt_t; +typedef uint32_t glUInt_t; +typedef uint64_t SharedTextureHandle_t; +typedef uint32_t DriverId_t; +typedef uint32_t TrackedDeviceIndex_t; +typedef uint64_t WebConsoleHandle_t; +typedef uint64_t PropertyContainerHandle_t; +typedef uint32_t PropertyTypeTag_t; +typedef PropertyContainerHandle_t DriverHandle_t; +typedef uint64_t VRActionHandle_t; +typedef uint64_t VRActionSetHandle_t; +typedef uint64_t VRInputValueHandle_t; +typedef uint32_t VRComponentProperties; +typedef uint64_t VROverlayHandle_t; +typedef int32_t BoneIndex_t; +typedef uint64_t TrackedCameraHandle_t; +typedef uint32_t ScreenshotHandle_t; +typedef int32_t TextureID_t; +typedef uint32_t VRNotificationId; +typedef uint64_t IOBufferHandle_t; +typedef uint64_t VrProfilerEventHandle_t; +typedef EVRInitError HmdError; +typedef EVREye Hmd_Eye; +typedef EColorSpace ColorSpace; +typedef ETrackingResult HmdTrackingResult; +typedef ETrackedDeviceClass TrackedDeviceClass; +typedef ETrackingUniverseOrigin TrackingUniverseOrigin; +typedef ETrackedDeviceProperty TrackedDeviceProperty; +typedef ETrackedPropertyError TrackedPropertyError; +typedef EVRSubmitFlags VRSubmitFlags_t; +typedef EVRState VRState_t; +typedef ECollisionBoundsStyle CollisionBoundsStyle_t; +typedef EVROverlayError VROverlayError; +typedef EVRFirmwareError VRFirmwareError; +typedef EVRCompositorError VRCompositorError; +typedef EVRScreenshotError VRScreenshotsError; +typedef uint64_t PathHandle_t; + +// OpenVR Structs + +typedef struct HmdMatrix34_t +{ + float m[3][4]; //float[3][4] +} HmdMatrix34_t; + +typedef struct HmdMatrix33_t +{ + float m[3][3]; //float[3][3] +} HmdMatrix33_t; + +typedef struct HmdMatrix44_t +{ + float m[4][4]; //float[4][4] +} HmdMatrix44_t; + +typedef struct HmdVector3_t +{ + float v[3]; //float[3] +} HmdVector3_t; + +typedef struct HmdVector4_t +{ + float v[4]; //float[4] +} HmdVector4_t; + +typedef struct HmdVector3d_t +{ + double v[3]; //double[3] +} HmdVector3d_t; + +typedef struct HmdVector2_t +{ + float v[2]; //float[2] +} HmdVector2_t; + +typedef struct HmdQuaternion_t +{ + double w; + double x; + double y; + double z; +} HmdQuaternion_t; + +typedef struct HmdQuaternionf_t +{ + float w; + float x; + float y; + float z; +} HmdQuaternionf_t; + +typedef struct HmdColor_t +{ + float r; + float g; + float b; + float a; +} HmdColor_t; + +typedef struct HmdQuad_t +{ + struct HmdVector3_t vCorners[4]; //struct vr::HmdVector3_t[4] +} HmdQuad_t; + +typedef struct HmdRect2_t +{ + struct HmdVector2_t vTopLeft; + struct HmdVector2_t vBottomRight; +} HmdRect2_t; + +typedef struct VRBoneTransform_t +{ + struct HmdVector4_t position; + struct HmdQuaternionf_t orientation; +} VRBoneTransform_t; + +typedef struct DistortionCoordinates_t +{ + float rfRed[2]; //float[2] + float rfGreen[2]; //float[2] + float rfBlue[2]; //float[2] +} DistortionCoordinates_t; + +typedef struct Texture_t +{ + void * handle; // void * + enum ETextureType eType; + enum EColorSpace eColorSpace; +} Texture_t; + +typedef struct TrackedDevicePose_t +{ + struct HmdMatrix34_t mDeviceToAbsoluteTracking; + struct HmdVector3_t vVelocity; + struct HmdVector3_t vAngularVelocity; + enum ETrackingResult eTrackingResult; + bool bPoseIsValid; + bool bDeviceIsConnected; +} TrackedDevicePose_t; + +typedef struct VRTextureBounds_t +{ + float uMin; + float vMin; + float uMax; + float vMax; +} VRTextureBounds_t; + +typedef struct VRTextureWithPose_t +{ + void * handle; // void * + enum ETextureType eType; + enum EColorSpace eColorSpace; + struct HmdMatrix34_t mDeviceToAbsoluteTracking; +} VRTextureWithPose_t; + +typedef struct VRTextureDepthInfo_t +{ + void * handle; // void * + struct HmdMatrix44_t mProjection; + struct HmdVector2_t vRange; +} VRTextureDepthInfo_t; + +typedef struct VRTextureWithDepth_t +{ + void * handle; // void * + enum ETextureType eType; + enum EColorSpace eColorSpace; + struct VRTextureDepthInfo_t depth; +} VRTextureWithDepth_t; + +typedef struct VRTextureWithPoseAndDepth_t +{ + void * handle; // void * + enum ETextureType eType; + enum EColorSpace eColorSpace; + struct HmdMatrix34_t mDeviceToAbsoluteTracking; + struct VRTextureDepthInfo_t depth; +} VRTextureWithPoseAndDepth_t; + +typedef struct VRVulkanTextureData_t +{ + uint64_t m_nImage; + struct VkDevice_T * m_pDevice; // struct VkDevice_T * + struct VkPhysicalDevice_T * m_pPhysicalDevice; // struct VkPhysicalDevice_T * + struct VkInstance_T * m_pInstance; // struct VkInstance_T * + struct VkQueue_T * m_pQueue; // struct VkQueue_T * + uint32_t m_nQueueFamilyIndex; + uint32_t m_nWidth; + uint32_t m_nHeight; + uint32_t m_nFormat; + uint32_t m_nSampleCount; +} VRVulkanTextureData_t; + +typedef struct VRVulkanTextureArrayData_t +{ + uint32_t m_unArrayIndex; + uint32_t m_unArraySize; +} VRVulkanTextureArrayData_t; + +typedef struct D3D12TextureData_t +{ + struct ID3D12Resource * m_pResource; // struct ID3D12Resource * + struct ID3D12CommandQueue * m_pCommandQueue; // struct ID3D12CommandQueue * + uint32_t m_nNodeMask; +} D3D12TextureData_t; + +typedef struct VREvent_Controller_t +{ + uint32_t button; +} VREvent_Controller_t; + +typedef struct VREvent_Mouse_t +{ + float x; + float y; + uint32_t button; +} VREvent_Mouse_t; + +typedef struct VREvent_Scroll_t +{ + float xdelta; + float ydelta; + uint32_t unused; + float viewportscale; +} VREvent_Scroll_t; + +typedef struct VREvent_TouchPadMove_t +{ + bool bFingerDown; + float flSecondsFingerDown; + float fValueXFirst; + float fValueYFirst; + float fValueXRaw; + float fValueYRaw; +} VREvent_TouchPadMove_t; + +typedef struct VREvent_Notification_t +{ + uint64_t ulUserValue; + uint32_t notificationId; +} VREvent_Notification_t; + +typedef struct VREvent_Process_t +{ + uint32_t pid; + uint32_t oldPid; + bool bForced; + bool bConnectionLost; +} VREvent_Process_t; + +typedef struct VREvent_Overlay_t +{ + uint64_t overlayHandle; + uint64_t devicePath; + uint64_t memoryBlockId; +} VREvent_Overlay_t; + +typedef struct VREvent_Status_t +{ + uint32_t statusState; +} VREvent_Status_t; + +typedef struct VREvent_Keyboard_t +{ + char cNewInput[8]; //char[8] + uint64_t uUserValue; +} VREvent_Keyboard_t; + +typedef struct VREvent_Ipd_t +{ + float ipdMeters; +} VREvent_Ipd_t; + +typedef struct VREvent_Chaperone_t +{ + uint64_t m_nPreviousUniverse; + uint64_t m_nCurrentUniverse; +} VREvent_Chaperone_t; + +typedef struct VREvent_Reserved_t +{ + uint64_t reserved0; + uint64_t reserved1; + uint64_t reserved2; + uint64_t reserved3; + uint64_t reserved4; + uint64_t reserved5; +} VREvent_Reserved_t; + +typedef struct VREvent_PerformanceTest_t +{ + uint32_t m_nFidelityLevel; +} VREvent_PerformanceTest_t; + +typedef struct VREvent_SeatedZeroPoseReset_t +{ + bool bResetBySystemMenu; +} VREvent_SeatedZeroPoseReset_t; + +typedef struct VREvent_Screenshot_t +{ + uint32_t handle; + uint32_t type; +} VREvent_Screenshot_t; + +typedef struct VREvent_ScreenshotProgress_t +{ + float progress; +} VREvent_ScreenshotProgress_t; + +typedef struct VREvent_ApplicationLaunch_t +{ + uint32_t pid; + uint32_t unArgsHandle; +} VREvent_ApplicationLaunch_t; + +typedef struct VREvent_EditingCameraSurface_t +{ + uint64_t overlayHandle; + uint32_t nVisualMode; +} VREvent_EditingCameraSurface_t; + +typedef struct VREvent_MessageOverlay_t +{ + uint32_t unVRMessageOverlayResponse; +} VREvent_MessageOverlay_t; + +typedef struct VREvent_Property_t +{ + PropertyContainerHandle_t container; + enum ETrackedDeviceProperty prop; +} VREvent_Property_t; + +typedef struct VREvent_HapticVibration_t +{ + uint64_t containerHandle; + uint64_t componentHandle; + float fDurationSeconds; + float fFrequency; + float fAmplitude; +} VREvent_HapticVibration_t; + +typedef struct VREvent_WebConsole_t +{ + WebConsoleHandle_t webConsoleHandle; +} VREvent_WebConsole_t; + +typedef struct VREvent_InputBindingLoad_t +{ + PropertyContainerHandle_t ulAppContainer; + uint64_t pathMessage; + uint64_t pathUrl; + uint64_t pathControllerType; +} VREvent_InputBindingLoad_t; + +typedef struct VREvent_InputActionManifestLoad_t +{ + uint64_t pathAppKey; + uint64_t pathMessage; + uint64_t pathMessageParam; + uint64_t pathManifestPath; +} VREvent_InputActionManifestLoad_t; + +typedef struct VREvent_SpatialAnchor_t +{ + SpatialAnchorHandle_t unHandle; +} VREvent_SpatialAnchor_t; + +typedef struct VREvent_ProgressUpdate_t +{ + uint64_t ulApplicationPropertyContainer; + uint64_t pathDevice; + uint64_t pathInputSource; + uint64_t pathProgressAction; + uint64_t pathIcon; + float fProgress; +} VREvent_ProgressUpdate_t; + +typedef struct VREvent_ShowUI_t +{ + enum EShowUIType eType; +} VREvent_ShowUI_t; + +typedef struct VREvent_ShowDevTools_t +{ + int32_t nBrowserIdentifier; +} VREvent_ShowDevTools_t; + +typedef struct VREvent_HDCPError_t +{ + enum EHDCPError eCode; +} VREvent_HDCPError_t; + +typedef struct RenderModel_ComponentState_t +{ + struct HmdMatrix34_t mTrackingToComponentRenderModel; + struct HmdMatrix34_t mTrackingToComponentLocal; + VRComponentProperties uProperties; +} RenderModel_ComponentState_t; + +typedef struct HiddenAreaMesh_t +{ + struct HmdVector2_t * pVertexData; // const struct vr::HmdVector2_t * + uint32_t unTriangleCount; +} HiddenAreaMesh_t; + +typedef struct VRControllerAxis_t +{ + float x; + float y; +} VRControllerAxis_t; + +#if defined(__linux__) || defined(__APPLE__) +// This structure was originally defined mis-packed on Linux, preserved for +// compatibility. +#pragma pack( push, 4 ) +#endif +typedef struct VRControllerState_t +{ + uint32_t unPacketNum; + uint64_t ulButtonPressed; + uint64_t ulButtonTouched; + struct VRControllerAxis_t rAxis[5]; //struct vr::VRControllerAxis_t[5] +} VRControllerState_t; +#if defined(__linux__) || defined(__APPLE__) +#pragma pack( pop ) +#endif + +typedef struct CameraVideoStreamFrameHeader_t +{ + enum EVRTrackedCameraFrameType eFrameType; + uint32_t nWidth; + uint32_t nHeight; + uint32_t nBytesPerPixel; + uint32_t nFrameSequence; + struct TrackedDevicePose_t trackedDevicePose; + uint64_t ulFrameExposureTime; +} CameraVideoStreamFrameHeader_t; + +typedef struct Compositor_FrameTiming +{ + uint32_t m_nSize; + uint32_t m_nFrameIndex; + uint32_t m_nNumFramePresents; + uint32_t m_nNumMisPresented; + uint32_t m_nNumDroppedFrames; + uint32_t m_nReprojectionFlags; + double m_flSystemTimeInSeconds; + float m_flPreSubmitGpuMs; + float m_flPostSubmitGpuMs; + float m_flTotalRenderGpuMs; + float m_flCompositorRenderGpuMs; + float m_flCompositorRenderCpuMs; + float m_flCompositorIdleCpuMs; + float m_flClientFrameIntervalMs; + float m_flPresentCallCpuMs; + float m_flWaitForPresentCpuMs; + float m_flSubmitFrameMs; + float m_flWaitGetPosesCalledMs; + float m_flNewPosesReadyMs; + float m_flNewFrameReadyMs; + float m_flCompositorUpdateStartMs; + float m_flCompositorUpdateEndMs; + float m_flCompositorRenderStartMs; + TrackedDevicePose_t m_HmdPose; + uint32_t m_nNumVSyncsReadyForUse; + uint32_t m_nNumVSyncsToFirstView; +} Compositor_FrameTiming; + +typedef struct Compositor_BenchmarkResults +{ + float m_flMegaPixelsPerSecond; + float m_flHmdRecommendedMegaPixelsPerSecond; +} Compositor_BenchmarkResults; + +typedef struct DriverDirectMode_FrameTiming +{ + uint32_t m_nSize; + uint32_t m_nNumFramePresents; + uint32_t m_nNumMisPresented; + uint32_t m_nNumDroppedFrames; + uint32_t m_nReprojectionFlags; +} DriverDirectMode_FrameTiming; + +typedef struct ImuSample_t +{ + double fSampleTime; + struct HmdVector3d_t vAccel; + struct HmdVector3d_t vGyro; + uint32_t unOffScaleFlags; +} ImuSample_t; + +typedef struct AppOverrideKeys_t +{ + char * pchKey; // const char * + char * pchValue; // const char * +} AppOverrideKeys_t; + +typedef struct Compositor_CumulativeStats +{ + uint32_t m_nPid; + uint32_t m_nNumFramePresents; + uint32_t m_nNumDroppedFrames; + uint32_t m_nNumReprojectedFrames; + uint32_t m_nNumFramePresentsOnStartup; + uint32_t m_nNumDroppedFramesOnStartup; + uint32_t m_nNumReprojectedFramesOnStartup; + uint32_t m_nNumLoading; + uint32_t m_nNumFramePresentsLoading; + uint32_t m_nNumDroppedFramesLoading; + uint32_t m_nNumReprojectedFramesLoading; + uint32_t m_nNumTimedOut; + uint32_t m_nNumFramePresentsTimedOut; + uint32_t m_nNumDroppedFramesTimedOut; + uint32_t m_nNumReprojectedFramesTimedOut; +} Compositor_CumulativeStats; + +typedef struct Compositor_StageRenderSettings +{ + struct HmdColor_t m_PrimaryColor; + struct HmdColor_t m_SecondaryColor; + float m_flVignetteInnerRadius; + float m_flVignetteOuterRadius; + float m_flFresnelStrength; + bool m_bBackfaceCulling; + bool m_bGreyscale; + bool m_bWireframe; +} Compositor_StageRenderSettings; + +typedef struct VROverlayIntersectionParams_t +{ + struct HmdVector3_t vSource; + struct HmdVector3_t vDirection; + enum ETrackingUniverseOrigin eOrigin; +} VROverlayIntersectionParams_t; + +typedef struct VROverlayIntersectionResults_t +{ + struct HmdVector3_t vPoint; + struct HmdVector3_t vNormal; + struct HmdVector2_t vUVs; + float fDistance; +} VROverlayIntersectionResults_t; + +typedef struct IntersectionMaskRectangle_t +{ + float m_flTopLeftX; + float m_flTopLeftY; + float m_flWidth; + float m_flHeight; +} IntersectionMaskRectangle_t; + +typedef struct IntersectionMaskCircle_t +{ + float m_flCenterX; + float m_flCenterY; + float m_flRadius; +} IntersectionMaskCircle_t; + +typedef struct VROverlayProjection_t +{ + float fLeft; + float fRight; + float fTop; + float fBottom; +} VROverlayProjection_t; + +typedef struct VROverlayView_t +{ + VROverlayHandle_t overlayHandle; + struct Texture_t texture; + struct VRTextureBounds_t textureBounds; +} VROverlayView_t; + +typedef struct VRVulkanDevice_t +{ + struct VkInstance_T * m_pInstance; // struct VkInstance_T * + struct VkDevice_T * m_pDevice; // struct VkDevice_T * + struct VkPhysicalDevice_T * m_pPhysicalDevice; // struct VkPhysicalDevice_T * + struct VkQueue_T * m_pQueue; // struct VkQueue_T * + uint32_t m_uQueueFamilyIndex; +} VRVulkanDevice_t; + +typedef struct VRNativeDevice_t +{ + void * handle; // void * + enum EDeviceType eType; +} VRNativeDevice_t; + +typedef struct RenderModel_Vertex_t +{ + struct HmdVector3_t vPosition; + struct HmdVector3_t vNormal; + float rfTextureCoord[2]; //float[2] +} RenderModel_Vertex_t; + +#if defined(__linux__) || defined(__APPLE__) +#pragma pack( push, 4 ) +#endif +typedef struct RenderModel_TextureMap_t +{ + uint16_t unWidth; + uint16_t unHeight; + uint8_t * rubTextureMapData; // const uint8_t * + enum EVRRenderModelTextureFormat format; +} RenderModel_TextureMap_t; + +#if defined(__linux__) || defined(__APPLE__) +#pragma pack( pop ) +#endif +#if defined(__linux__) || defined(__APPLE__) +#pragma pack( push, 4 ) +#endif +typedef struct RenderModel_t +{ + struct RenderModel_Vertex_t * rVertexData; // const struct vr::RenderModel_Vertex_t * + uint32_t unVertexCount; + uint16_t * rIndexData; // const uint16_t * + uint32_t unTriangleCount; + TextureID_t diffuseTextureId; +} RenderModel_t; + +#if defined(__linux__) || defined(__APPLE__) +#pragma pack( pop ) +#endif +typedef struct RenderModel_ControllerMode_State_t +{ + bool bScrollWheelVisible; +} RenderModel_ControllerMode_State_t; + +typedef struct NotificationBitmap_t +{ + void * m_pImageData; // void * + int32_t m_nWidth; + int32_t m_nHeight; + int32_t m_nBytesPerPixel; +} NotificationBitmap_t; + +typedef struct CVRSettingHelper +{ + intptr_t m_pSettings; // class vr::IVRSettings * +} CVRSettingHelper; + +typedef struct InputAnalogActionData_t +{ + bool bActive; + VRInputValueHandle_t activeOrigin; + float x; + float y; + float z; + float deltaX; + float deltaY; + float deltaZ; + float fUpdateTime; +} InputAnalogActionData_t; + +typedef struct InputDigitalActionData_t +{ + bool bActive; + VRInputValueHandle_t activeOrigin; + bool bState; + bool bChanged; + float fUpdateTime; +} InputDigitalActionData_t; + +typedef struct InputPoseActionData_t +{ + bool bActive; + VRInputValueHandle_t activeOrigin; + struct TrackedDevicePose_t pose; +} InputPoseActionData_t; + +typedef struct InputSkeletalActionData_t +{ + bool bActive; + VRInputValueHandle_t activeOrigin; +} InputSkeletalActionData_t; + +typedef struct InputOriginInfo_t +{ + VRInputValueHandle_t devicePath; + TrackedDeviceIndex_t trackedDeviceIndex; + char rchRenderModelComponentName[128]; //char[128] +} InputOriginInfo_t; + +typedef struct InputBindingInfo_t +{ + char rchDevicePathName[128]; //char[128] + char rchInputPathName[128]; //char[128] + char rchModeName[128]; //char[128] + char rchSlotName[128]; //char[128] + char rchInputSourceType[32]; //char[32] +} InputBindingInfo_t; + +typedef struct VRActiveActionSet_t +{ + VRActionSetHandle_t ulActionSet; + VRInputValueHandle_t ulRestrictedToDevice; + VRActionSetHandle_t ulSecondaryActionSet; + uint32_t unPadding; + int32_t nPriority; +} VRActiveActionSet_t; + +typedef struct VRSkeletalSummaryData_t +{ + float flFingerCurl[5]; //float[5] + float flFingerSplay[4]; //float[4] +} VRSkeletalSummaryData_t; + +typedef struct SpatialAnchorPose_t +{ + struct HmdMatrix34_t mAnchorToAbsoluteTracking; +} SpatialAnchorPose_t; + +typedef struct COpenVRContext +{ + intptr_t m_pVRSystem; // class vr::IVRSystem * + intptr_t m_pVRChaperone; // class vr::IVRChaperone * + intptr_t m_pVRChaperoneSetup; // class vr::IVRChaperoneSetup * + intptr_t m_pVRCompositor; // class vr::IVRCompositor * + intptr_t m_pVRHeadsetView; // class vr::IVRHeadsetView * + intptr_t m_pVROverlay; // class vr::IVROverlay * + intptr_t m_pVROverlayView; // class vr::IVROverlayView * + intptr_t m_pVRResources; // class vr::IVRResources * + intptr_t m_pVRRenderModels; // class vr::IVRRenderModels * + intptr_t m_pVRExtendedDisplay; // class vr::IVRExtendedDisplay * + intptr_t m_pVRSettings; // class vr::IVRSettings * + intptr_t m_pVRApplications; // class vr::IVRApplications * + intptr_t m_pVRTrackedCamera; // class vr::IVRTrackedCamera * + intptr_t m_pVRScreenshots; // class vr::IVRScreenshots * + intptr_t m_pVRDriverManager; // class vr::IVRDriverManager * + intptr_t m_pVRInput; // class vr::IVRInput * + intptr_t m_pVRIOBuffer; // class vr::IVRIOBuffer * + intptr_t m_pVRSpatialAnchors; // class vr::IVRSpatialAnchors * + intptr_t m_pVRDebug; // class vr::IVRDebug * + intptr_t m_pVRNotifications; // class vr::IVRNotifications * +} COpenVRContext; + +typedef struct PropertyWrite_t +{ + enum ETrackedDeviceProperty prop; + enum EPropertyWriteType writeType; + enum ETrackedPropertyError eSetError; + void * pvBuffer; // void * + uint32_t unBufferSize; + PropertyTypeTag_t unTag; + enum ETrackedPropertyError eError; +} PropertyWrite_t; + +typedef struct PropertyRead_t +{ + enum ETrackedDeviceProperty prop; + void * pvBuffer; // void * + uint32_t unBufferSize; + PropertyTypeTag_t unTag; + uint32_t unRequiredBufferSize; + enum ETrackedPropertyError eError; +} PropertyRead_t; + +typedef struct CVRPropertyHelpers +{ + intptr_t m_pProperties; // class vr::IVRProperties * +} CVRPropertyHelpers; + +typedef struct PathWrite_t +{ + PathHandle_t ulPath; + enum EPropertyWriteType writeType; + enum ETrackedPropertyError eSetError; + void * pvBuffer; // void * + uint32_t unBufferSize; + PropertyTypeTag_t unTag; + enum ETrackedPropertyError eError; + char * pszPath; // const char * +} PathWrite_t; + +typedef struct PathRead_t +{ + PathHandle_t ulPath; + void * pvBuffer; // void * + uint32_t unBufferSize; + PropertyTypeTag_t unTag; + uint32_t unRequiredBufferSize; + enum ETrackedPropertyError eError; + char * pszPath; // const char * +} PathRead_t; + + +typedef union +{ + VREvent_Reserved_t reserved; + VREvent_Controller_t controller; + VREvent_Mouse_t mouse; + VREvent_Scroll_t scroll; + VREvent_Process_t process; + VREvent_Notification_t notification; + VREvent_Overlay_t overlay; + VREvent_Status_t status; + VREvent_Keyboard_t keyboard; + VREvent_Ipd_t ipd; + VREvent_Chaperone_t chaperone; + VREvent_PerformanceTest_t performanceTest; + VREvent_TouchPadMove_t touchPadMove; + VREvent_SeatedZeroPoseReset_t seatedZeroPoseReset; + VREvent_Screenshot_t screenshot; + VREvent_ScreenshotProgress_t screenshotProgress; + VREvent_ApplicationLaunch_t applicationLaunch; + VREvent_EditingCameraSurface_t cameraSurface; + VREvent_MessageOverlay_t messageOverlay; + VREvent_Property_t property; + VREvent_HapticVibration_t hapticVibration; + VREvent_WebConsole_t webConsole; + VREvent_InputBindingLoad_t inputBinding; + VREvent_InputActionManifestLoad_t actionManifest; + VREvent_SpatialAnchor_t spatialAnchor; +} VREvent_Data_t; + +#if defined(__linux__) || defined(__APPLE__) +// This structure was originally defined mis-packed on Linux, preserved for +// compatibility. +#pragma pack( push, 4 ) +#endif + +/** An event posted by the server to all running applications */ +struct VREvent_t +{ + uint32_t eventType; // EVREventType enum + TrackedDeviceIndex_t trackedDeviceIndex; + float eventAgeSeconds; + // event data must be the end of the struct as its size is variable + VREvent_Data_t data; +}; + +#if defined(__linux__) || defined(__APPLE__) +#pragma pack( pop ) +#endif + + +typedef union +{ + IntersectionMaskRectangle_t m_Rectangle; + IntersectionMaskCircle_t m_Circle; +} VROverlayIntersectionMaskPrimitive_Data_t; + +struct VROverlayIntersectionMaskPrimitive_t +{ + EVROverlayIntersectionMaskPrimitiveType m_nPrimitiveType; + VROverlayIntersectionMaskPrimitive_Data_t m_Primitive; +}; + + +// OpenVR Function Pointer Tables + +struct VR_IVRSystem_FnTable +{ + void (OPENVR_FNTABLE_CALLTYPE *GetRecommendedRenderTargetSize)(uint32_t * pnWidth, uint32_t * pnHeight); + struct HmdMatrix44_t (OPENVR_FNTABLE_CALLTYPE *GetProjectionMatrix)(EVREye eEye, float fNearZ, float fFarZ); + void (OPENVR_FNTABLE_CALLTYPE *GetProjectionRaw)(EVREye eEye, float * pfLeft, float * pfRight, float * pfTop, float * pfBottom); + bool (OPENVR_FNTABLE_CALLTYPE *ComputeDistortion)(EVREye eEye, float fU, float fV, struct DistortionCoordinates_t * pDistortionCoordinates); + struct HmdMatrix34_t (OPENVR_FNTABLE_CALLTYPE *GetEyeToHeadTransform)(EVREye eEye); + bool (OPENVR_FNTABLE_CALLTYPE *GetTimeSinceLastVsync)(float * pfSecondsSinceLastVsync, uint64_t * pulFrameCounter); + int32_t (OPENVR_FNTABLE_CALLTYPE *GetD3D9AdapterIndex)(); + void (OPENVR_FNTABLE_CALLTYPE *GetDXGIOutputInfo)(int32_t * pnAdapterIndex); + void (OPENVR_FNTABLE_CALLTYPE *GetOutputDevice)(uint64_t * pnDevice, ETextureType textureType, struct VkInstance_T * pInstance); + bool (OPENVR_FNTABLE_CALLTYPE *IsDisplayOnDesktop)(); + bool (OPENVR_FNTABLE_CALLTYPE *SetDisplayVisibility)(bool bIsVisibleOnDesktop); + void (OPENVR_FNTABLE_CALLTYPE *GetDeviceToAbsoluteTrackingPose)(ETrackingUniverseOrigin eOrigin, float fPredictedSecondsToPhotonsFromNow, struct TrackedDevicePose_t * pTrackedDevicePoseArray, uint32_t unTrackedDevicePoseArrayCount); + struct HmdMatrix34_t (OPENVR_FNTABLE_CALLTYPE *GetSeatedZeroPoseToStandingAbsoluteTrackingPose)(); + struct HmdMatrix34_t (OPENVR_FNTABLE_CALLTYPE *GetRawZeroPoseToStandingAbsoluteTrackingPose)(); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetSortedTrackedDeviceIndicesOfClass)(ETrackedDeviceClass eTrackedDeviceClass, TrackedDeviceIndex_t * punTrackedDeviceIndexArray, uint32_t unTrackedDeviceIndexArrayCount, TrackedDeviceIndex_t unRelativeToTrackedDeviceIndex); + EDeviceActivityLevel (OPENVR_FNTABLE_CALLTYPE *GetTrackedDeviceActivityLevel)(TrackedDeviceIndex_t unDeviceId); + void (OPENVR_FNTABLE_CALLTYPE *ApplyTransform)(struct TrackedDevicePose_t * pOutputPose, struct TrackedDevicePose_t * pTrackedDevicePose, struct HmdMatrix34_t * pTransform); + TrackedDeviceIndex_t (OPENVR_FNTABLE_CALLTYPE *GetTrackedDeviceIndexForControllerRole)(ETrackedControllerRole unDeviceType); + ETrackedControllerRole (OPENVR_FNTABLE_CALLTYPE *GetControllerRoleForTrackedDeviceIndex)(TrackedDeviceIndex_t unDeviceIndex); + ETrackedDeviceClass (OPENVR_FNTABLE_CALLTYPE *GetTrackedDeviceClass)(TrackedDeviceIndex_t unDeviceIndex); + bool (OPENVR_FNTABLE_CALLTYPE *IsTrackedDeviceConnected)(TrackedDeviceIndex_t unDeviceIndex); + bool (OPENVR_FNTABLE_CALLTYPE *GetBoolTrackedDeviceProperty)(TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError * pError); + float (OPENVR_FNTABLE_CALLTYPE *GetFloatTrackedDeviceProperty)(TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError * pError); + int32_t (OPENVR_FNTABLE_CALLTYPE *GetInt32TrackedDeviceProperty)(TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError * pError); + uint64_t (OPENVR_FNTABLE_CALLTYPE *GetUint64TrackedDeviceProperty)(TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError * pError); + struct HmdMatrix34_t (OPENVR_FNTABLE_CALLTYPE *GetMatrix34TrackedDeviceProperty)(TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError * pError); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetArrayTrackedDeviceProperty)(TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, PropertyTypeTag_t propType, void * pBuffer, uint32_t unBufferSize, ETrackedPropertyError * pError); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetStringTrackedDeviceProperty)(TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, char * pchValue, uint32_t unBufferSize, ETrackedPropertyError * pError); + char * (OPENVR_FNTABLE_CALLTYPE *GetPropErrorNameFromEnum)(ETrackedPropertyError error); + bool (OPENVR_FNTABLE_CALLTYPE *PollNextEvent)(struct VREvent_t * pEvent, uint32_t uncbVREvent); + bool (OPENVR_FNTABLE_CALLTYPE *PollNextEventWithPose)(ETrackingUniverseOrigin eOrigin, struct VREvent_t * pEvent, uint32_t uncbVREvent, TrackedDevicePose_t * pTrackedDevicePose); + char * (OPENVR_FNTABLE_CALLTYPE *GetEventTypeNameFromEnum)(EVREventType eType); + struct HiddenAreaMesh_t (OPENVR_FNTABLE_CALLTYPE *GetHiddenAreaMesh)(EVREye eEye, EHiddenAreaMeshType type); + bool (OPENVR_FNTABLE_CALLTYPE *GetControllerState)(TrackedDeviceIndex_t unControllerDeviceIndex, VRControllerState_t * pControllerState, uint32_t unControllerStateSize); + bool (OPENVR_FNTABLE_CALLTYPE *GetControllerStateWithPose)(ETrackingUniverseOrigin eOrigin, TrackedDeviceIndex_t unControllerDeviceIndex, VRControllerState_t * pControllerState, uint32_t unControllerStateSize, struct TrackedDevicePose_t * pTrackedDevicePose); + void (OPENVR_FNTABLE_CALLTYPE *TriggerHapticPulse)(TrackedDeviceIndex_t unControllerDeviceIndex, uint32_t unAxisId, unsigned short usDurationMicroSec); + char * (OPENVR_FNTABLE_CALLTYPE *GetButtonIdNameFromEnum)(EVRButtonId eButtonId); + char * (OPENVR_FNTABLE_CALLTYPE *GetControllerAxisTypeNameFromEnum)(EVRControllerAxisType eAxisType); + bool (OPENVR_FNTABLE_CALLTYPE *IsInputAvailable)(); + bool (OPENVR_FNTABLE_CALLTYPE *IsSteamVRDrawingControllers)(); + bool (OPENVR_FNTABLE_CALLTYPE *ShouldApplicationPause)(); + bool (OPENVR_FNTABLE_CALLTYPE *ShouldApplicationReduceRenderingWork)(); + EVRFirmwareError (OPENVR_FNTABLE_CALLTYPE *PerformFirmwareUpdate)(TrackedDeviceIndex_t unDeviceIndex); + void (OPENVR_FNTABLE_CALLTYPE *AcknowledgeQuit_Exiting)(); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetAppContainerFilePaths)(char * pchBuffer, uint32_t unBufferSize); + char * (OPENVR_FNTABLE_CALLTYPE *GetRuntimeVersion)(); +}; + +struct VR_IVRExtendedDisplay_FnTable +{ + void (OPENVR_FNTABLE_CALLTYPE *GetWindowBounds)(int32_t * pnX, int32_t * pnY, uint32_t * pnWidth, uint32_t * pnHeight); + void (OPENVR_FNTABLE_CALLTYPE *GetEyeOutputViewport)(EVREye eEye, uint32_t * pnX, uint32_t * pnY, uint32_t * pnWidth, uint32_t * pnHeight); + void (OPENVR_FNTABLE_CALLTYPE *GetDXGIOutputInfo)(int32_t * pnAdapterIndex, int32_t * pnAdapterOutputIndex); +}; + +struct VR_IVRTrackedCamera_FnTable +{ + char * (OPENVR_FNTABLE_CALLTYPE *GetCameraErrorNameFromEnum)(EVRTrackedCameraError eCameraError); + EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *HasCamera)(TrackedDeviceIndex_t nDeviceIndex, bool * pHasCamera); + EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *GetCameraFrameSize)(TrackedDeviceIndex_t nDeviceIndex, EVRTrackedCameraFrameType eFrameType, uint32_t * pnWidth, uint32_t * pnHeight, uint32_t * pnFrameBufferSize); + EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *GetCameraIntrinsics)(TrackedDeviceIndex_t nDeviceIndex, uint32_t nCameraIndex, EVRTrackedCameraFrameType eFrameType, HmdVector2_t * pFocalLength, HmdVector2_t * pCenter); + EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *GetCameraProjection)(TrackedDeviceIndex_t nDeviceIndex, uint32_t nCameraIndex, EVRTrackedCameraFrameType eFrameType, float flZNear, float flZFar, HmdMatrix44_t * pProjection); + EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *AcquireVideoStreamingService)(TrackedDeviceIndex_t nDeviceIndex, TrackedCameraHandle_t * pHandle); + EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *ReleaseVideoStreamingService)(TrackedCameraHandle_t hTrackedCamera); + EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *GetVideoStreamFrameBuffer)(TrackedCameraHandle_t hTrackedCamera, EVRTrackedCameraFrameType eFrameType, void * pFrameBuffer, uint32_t nFrameBufferSize, CameraVideoStreamFrameHeader_t * pFrameHeader, uint32_t nFrameHeaderSize); + EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *GetVideoStreamTextureSize)(TrackedDeviceIndex_t nDeviceIndex, EVRTrackedCameraFrameType eFrameType, VRTextureBounds_t * pTextureBounds, uint32_t * pnWidth, uint32_t * pnHeight); + EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *GetVideoStreamTextureD3D11)(TrackedCameraHandle_t hTrackedCamera, EVRTrackedCameraFrameType eFrameType, void * pD3D11DeviceOrResource, void ** ppD3D11ShaderResourceView, CameraVideoStreamFrameHeader_t * pFrameHeader, uint32_t nFrameHeaderSize); + EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *GetVideoStreamTextureGL)(TrackedCameraHandle_t hTrackedCamera, EVRTrackedCameraFrameType eFrameType, glUInt_t * pglTextureId, CameraVideoStreamFrameHeader_t * pFrameHeader, uint32_t nFrameHeaderSize); + EVRTrackedCameraError (OPENVR_FNTABLE_CALLTYPE *ReleaseVideoStreamTextureGL)(TrackedCameraHandle_t hTrackedCamera, glUInt_t glTextureId); + void (OPENVR_FNTABLE_CALLTYPE *SetCameraTrackingSpace)(ETrackingUniverseOrigin eUniverse); + ETrackingUniverseOrigin (OPENVR_FNTABLE_CALLTYPE *GetCameraTrackingSpace)(); +}; + +struct VR_IVRApplications_FnTable +{ + EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *AddApplicationManifest)(char * pchApplicationManifestFullPath, bool bTemporary); + EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *RemoveApplicationManifest)(char * pchApplicationManifestFullPath); + bool (OPENVR_FNTABLE_CALLTYPE *IsApplicationInstalled)(char * pchAppKey); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetApplicationCount)(); + EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *GetApplicationKeyByIndex)(uint32_t unApplicationIndex, char * pchAppKeyBuffer, uint32_t unAppKeyBufferLen); + EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *GetApplicationKeyByProcessId)(uint32_t unProcessId, char * pchAppKeyBuffer, uint32_t unAppKeyBufferLen); + EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *LaunchApplication)(char * pchAppKey); + EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *LaunchTemplateApplication)(char * pchTemplateAppKey, char * pchNewAppKey, struct AppOverrideKeys_t * pKeys, uint32_t unKeys); + EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *LaunchApplicationFromMimeType)(char * pchMimeType, char * pchArgs); + EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *LaunchDashboardOverlay)(char * pchAppKey); + bool (OPENVR_FNTABLE_CALLTYPE *CancelApplicationLaunch)(char * pchAppKey); + EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *IdentifyApplication)(uint32_t unProcessId, char * pchAppKey); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetApplicationProcessId)(char * pchAppKey); + char * (OPENVR_FNTABLE_CALLTYPE *GetApplicationsErrorNameFromEnum)(EVRApplicationError error); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetApplicationPropertyString)(char * pchAppKey, EVRApplicationProperty eProperty, char * pchPropertyValueBuffer, uint32_t unPropertyValueBufferLen, EVRApplicationError * peError); + bool (OPENVR_FNTABLE_CALLTYPE *GetApplicationPropertyBool)(char * pchAppKey, EVRApplicationProperty eProperty, EVRApplicationError * peError); + uint64_t (OPENVR_FNTABLE_CALLTYPE *GetApplicationPropertyUint64)(char * pchAppKey, EVRApplicationProperty eProperty, EVRApplicationError * peError); + EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *SetApplicationAutoLaunch)(char * pchAppKey, bool bAutoLaunch); + bool (OPENVR_FNTABLE_CALLTYPE *GetApplicationAutoLaunch)(char * pchAppKey); + EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *SetDefaultApplicationForMimeType)(char * pchAppKey, char * pchMimeType); + bool (OPENVR_FNTABLE_CALLTYPE *GetDefaultApplicationForMimeType)(char * pchMimeType, char * pchAppKeyBuffer, uint32_t unAppKeyBufferLen); + bool (OPENVR_FNTABLE_CALLTYPE *GetApplicationSupportedMimeTypes)(char * pchAppKey, char * pchMimeTypesBuffer, uint32_t unMimeTypesBuffer); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetApplicationsThatSupportMimeType)(char * pchMimeType, char * pchAppKeysThatSupportBuffer, uint32_t unAppKeysThatSupportBuffer); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetApplicationLaunchArguments)(uint32_t unHandle, char * pchArgs, uint32_t unArgs); + EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *GetStartingApplication)(char * pchAppKeyBuffer, uint32_t unAppKeyBufferLen); + EVRSceneApplicationState (OPENVR_FNTABLE_CALLTYPE *GetSceneApplicationState)(); + EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *PerformApplicationPrelaunchCheck)(char * pchAppKey); + char * (OPENVR_FNTABLE_CALLTYPE *GetSceneApplicationStateNameFromEnum)(EVRSceneApplicationState state); + EVRApplicationError (OPENVR_FNTABLE_CALLTYPE *LaunchInternalProcess)(char * pchBinaryPath, char * pchArguments, char * pchWorkingDirectory); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetCurrentSceneProcessId)(); +}; + +struct VR_IVRChaperone_FnTable +{ + ChaperoneCalibrationState (OPENVR_FNTABLE_CALLTYPE *GetCalibrationState)(); + bool (OPENVR_FNTABLE_CALLTYPE *GetPlayAreaSize)(float * pSizeX, float * pSizeZ); + bool (OPENVR_FNTABLE_CALLTYPE *GetPlayAreaRect)(struct HmdQuad_t * rect); + void (OPENVR_FNTABLE_CALLTYPE *ReloadInfo)(); + void (OPENVR_FNTABLE_CALLTYPE *SetSceneColor)(struct HmdColor_t color); + void (OPENVR_FNTABLE_CALLTYPE *GetBoundsColor)(struct HmdColor_t * pOutputColorArray, int nNumOutputColors, float flCollisionBoundsFadeDistance, struct HmdColor_t * pOutputCameraColor); + bool (OPENVR_FNTABLE_CALLTYPE *AreBoundsVisible)(); + void (OPENVR_FNTABLE_CALLTYPE *ForceBoundsVisible)(bool bForce); + void (OPENVR_FNTABLE_CALLTYPE *ResetZeroPose)(ETrackingUniverseOrigin eTrackingUniverseOrigin); +}; + +struct VR_IVRChaperoneSetup_FnTable +{ + bool (OPENVR_FNTABLE_CALLTYPE *CommitWorkingCopy)(EChaperoneConfigFile configFile); + void (OPENVR_FNTABLE_CALLTYPE *RevertWorkingCopy)(); + bool (OPENVR_FNTABLE_CALLTYPE *GetWorkingPlayAreaSize)(float * pSizeX, float * pSizeZ); + bool (OPENVR_FNTABLE_CALLTYPE *GetWorkingPlayAreaRect)(struct HmdQuad_t * rect); + bool (OPENVR_FNTABLE_CALLTYPE *GetWorkingCollisionBoundsInfo)(struct HmdQuad_t * pQuadsBuffer, uint32_t * punQuadsCount); + bool (OPENVR_FNTABLE_CALLTYPE *GetLiveCollisionBoundsInfo)(struct HmdQuad_t * pQuadsBuffer, uint32_t * punQuadsCount); + bool (OPENVR_FNTABLE_CALLTYPE *GetWorkingSeatedZeroPoseToRawTrackingPose)(struct HmdMatrix34_t * pmatSeatedZeroPoseToRawTrackingPose); + bool (OPENVR_FNTABLE_CALLTYPE *GetWorkingStandingZeroPoseToRawTrackingPose)(struct HmdMatrix34_t * pmatStandingZeroPoseToRawTrackingPose); + void (OPENVR_FNTABLE_CALLTYPE *SetWorkingPlayAreaSize)(float sizeX, float sizeZ); + void (OPENVR_FNTABLE_CALLTYPE *SetWorkingCollisionBoundsInfo)(struct HmdQuad_t * pQuadsBuffer, uint32_t unQuadsCount); + void (OPENVR_FNTABLE_CALLTYPE *SetWorkingPerimeter)(struct HmdVector2_t * pPointBuffer, uint32_t unPointCount); + void (OPENVR_FNTABLE_CALLTYPE *SetWorkingSeatedZeroPoseToRawTrackingPose)(struct HmdMatrix34_t * pMatSeatedZeroPoseToRawTrackingPose); + void (OPENVR_FNTABLE_CALLTYPE *SetWorkingStandingZeroPoseToRawTrackingPose)(struct HmdMatrix34_t * pMatStandingZeroPoseToRawTrackingPose); + void (OPENVR_FNTABLE_CALLTYPE *ReloadFromDisk)(EChaperoneConfigFile configFile); + bool (OPENVR_FNTABLE_CALLTYPE *GetLiveSeatedZeroPoseToRawTrackingPose)(struct HmdMatrix34_t * pmatSeatedZeroPoseToRawTrackingPose); + bool (OPENVR_FNTABLE_CALLTYPE *ExportLiveToBuffer)(char * pBuffer, uint32_t * pnBufferLength); + bool (OPENVR_FNTABLE_CALLTYPE *ImportFromBufferToWorking)(char * pBuffer, uint32_t nImportFlags); + void (OPENVR_FNTABLE_CALLTYPE *ShowWorkingSetPreview)(); + void (OPENVR_FNTABLE_CALLTYPE *HideWorkingSetPreview)(); + void (OPENVR_FNTABLE_CALLTYPE *RoomSetupStarting)(); +}; + +struct VR_IVRCompositor_FnTable +{ + void (OPENVR_FNTABLE_CALLTYPE *SetTrackingSpace)(ETrackingUniverseOrigin eOrigin); + ETrackingUniverseOrigin (OPENVR_FNTABLE_CALLTYPE *GetTrackingSpace)(); + EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *WaitGetPoses)(struct TrackedDevicePose_t * pRenderPoseArray, uint32_t unRenderPoseArrayCount, struct TrackedDevicePose_t * pGamePoseArray, uint32_t unGamePoseArrayCount); + EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *GetLastPoses)(struct TrackedDevicePose_t * pRenderPoseArray, uint32_t unRenderPoseArrayCount, struct TrackedDevicePose_t * pGamePoseArray, uint32_t unGamePoseArrayCount); + EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *GetLastPoseForTrackedDeviceIndex)(TrackedDeviceIndex_t unDeviceIndex, struct TrackedDevicePose_t * pOutputPose, struct TrackedDevicePose_t * pOutputGamePose); + EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *Submit)(EVREye eEye, struct Texture_t * pTexture, struct VRTextureBounds_t * pBounds, EVRSubmitFlags nSubmitFlags); + void (OPENVR_FNTABLE_CALLTYPE *ClearLastSubmittedFrame)(); + void (OPENVR_FNTABLE_CALLTYPE *PostPresentHandoff)(); + bool (OPENVR_FNTABLE_CALLTYPE *GetFrameTiming)(struct Compositor_FrameTiming * pTiming, uint32_t unFramesAgo); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetFrameTimings)(struct Compositor_FrameTiming * pTiming, uint32_t nFrames); + float (OPENVR_FNTABLE_CALLTYPE *GetFrameTimeRemaining)(); + void (OPENVR_FNTABLE_CALLTYPE *GetCumulativeStats)(struct Compositor_CumulativeStats * pStats, uint32_t nStatsSizeInBytes); + void (OPENVR_FNTABLE_CALLTYPE *FadeToColor)(float fSeconds, float fRed, float fGreen, float fBlue, float fAlpha, bool bBackground); + struct HmdColor_t (OPENVR_FNTABLE_CALLTYPE *GetCurrentFadeColor)(bool bBackground); + void (OPENVR_FNTABLE_CALLTYPE *FadeGrid)(float fSeconds, bool bFadeGridIn); + float (OPENVR_FNTABLE_CALLTYPE *GetCurrentGridAlpha)(); + EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *SetSkyboxOverride)(struct Texture_t * pTextures, uint32_t unTextureCount); + void (OPENVR_FNTABLE_CALLTYPE *ClearSkyboxOverride)(); + void (OPENVR_FNTABLE_CALLTYPE *CompositorBringToFront)(); + void (OPENVR_FNTABLE_CALLTYPE *CompositorGoToBack)(); + void (OPENVR_FNTABLE_CALLTYPE *CompositorQuit)(); + bool (OPENVR_FNTABLE_CALLTYPE *IsFullscreen)(); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetCurrentSceneFocusProcess)(); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetLastFrameRenderer)(); + bool (OPENVR_FNTABLE_CALLTYPE *CanRenderScene)(); + void (OPENVR_FNTABLE_CALLTYPE *ShowMirrorWindow)(); + void (OPENVR_FNTABLE_CALLTYPE *HideMirrorWindow)(); + bool (OPENVR_FNTABLE_CALLTYPE *IsMirrorWindowVisible)(); + void (OPENVR_FNTABLE_CALLTYPE *CompositorDumpImages)(); + bool (OPENVR_FNTABLE_CALLTYPE *ShouldAppRenderWithLowResources)(); + void (OPENVR_FNTABLE_CALLTYPE *ForceInterleavedReprojectionOn)(bool bOverride); + void (OPENVR_FNTABLE_CALLTYPE *ForceReconnectProcess)(); + void (OPENVR_FNTABLE_CALLTYPE *SuspendRendering)(bool bSuspend); + EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *GetMirrorTextureD3D11)(EVREye eEye, void * pD3D11DeviceOrResource, void ** ppD3D11ShaderResourceView); + void (OPENVR_FNTABLE_CALLTYPE *ReleaseMirrorTextureD3D11)(void * pD3D11ShaderResourceView); + EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *GetMirrorTextureGL)(EVREye eEye, glUInt_t * pglTextureId, glSharedTextureHandle_t * pglSharedTextureHandle); + bool (OPENVR_FNTABLE_CALLTYPE *ReleaseSharedGLTexture)(glUInt_t glTextureId, glSharedTextureHandle_t glSharedTextureHandle); + void (OPENVR_FNTABLE_CALLTYPE *LockGLSharedTextureForAccess)(glSharedTextureHandle_t glSharedTextureHandle); + void (OPENVR_FNTABLE_CALLTYPE *UnlockGLSharedTextureForAccess)(glSharedTextureHandle_t glSharedTextureHandle); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetVulkanInstanceExtensionsRequired)(char * pchValue, uint32_t unBufferSize); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetVulkanDeviceExtensionsRequired)(struct VkPhysicalDevice_T * pPhysicalDevice, char * pchValue, uint32_t unBufferSize); + void (OPENVR_FNTABLE_CALLTYPE *SetExplicitTimingMode)(EVRCompositorTimingMode eTimingMode); + EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *SubmitExplicitTimingData)(); + bool (OPENVR_FNTABLE_CALLTYPE *IsMotionSmoothingEnabled)(); + bool (OPENVR_FNTABLE_CALLTYPE *IsMotionSmoothingSupported)(); + bool (OPENVR_FNTABLE_CALLTYPE *IsCurrentSceneFocusAppLoading)(); + EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *SetStageOverride_Async)(char * pchRenderModelPath, struct HmdMatrix34_t * pTransform, struct Compositor_StageRenderSettings * pRenderSettings, uint32_t nSizeOfRenderSettings); + void (OPENVR_FNTABLE_CALLTYPE *ClearStageOverride)(); + bool (OPENVR_FNTABLE_CALLTYPE *GetCompositorBenchmarkResults)(struct Compositor_BenchmarkResults * pBenchmarkResults, uint32_t nSizeOfBenchmarkResults); + EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *GetLastPosePredictionIDs)(uint32_t * pRenderPosePredictionID, uint32_t * pGamePosePredictionID); + EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *GetPosesForFrame)(uint32_t unPosePredictionID, struct TrackedDevicePose_t * pPoseArray, uint32_t unPoseArrayCount); +}; + +struct VR_IVROverlay_FnTable +{ + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *FindOverlay)(char * pchOverlayKey, VROverlayHandle_t * pOverlayHandle); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *CreateOverlay)(char * pchOverlayKey, char * pchOverlayName, VROverlayHandle_t * pOverlayHandle); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *DestroyOverlay)(VROverlayHandle_t ulOverlayHandle); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetOverlayKey)(VROverlayHandle_t ulOverlayHandle, char * pchValue, uint32_t unBufferSize, EVROverlayError * pError); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetOverlayName)(VROverlayHandle_t ulOverlayHandle, char * pchValue, uint32_t unBufferSize, EVROverlayError * pError); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayName)(VROverlayHandle_t ulOverlayHandle, char * pchName); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayImageData)(VROverlayHandle_t ulOverlayHandle, void * pvBuffer, uint32_t unBufferSize, uint32_t * punWidth, uint32_t * punHeight); + char * (OPENVR_FNTABLE_CALLTYPE *GetOverlayErrorNameFromEnum)(EVROverlayError error); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayRenderingPid)(VROverlayHandle_t ulOverlayHandle, uint32_t unPID); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetOverlayRenderingPid)(VROverlayHandle_t ulOverlayHandle); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayFlag)(VROverlayHandle_t ulOverlayHandle, VROverlayFlags eOverlayFlag, bool bEnabled); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayFlag)(VROverlayHandle_t ulOverlayHandle, VROverlayFlags eOverlayFlag, bool * pbEnabled); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayFlags)(VROverlayHandle_t ulOverlayHandle, uint32_t * pFlags); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayColor)(VROverlayHandle_t ulOverlayHandle, float fRed, float fGreen, float fBlue); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayColor)(VROverlayHandle_t ulOverlayHandle, float * pfRed, float * pfGreen, float * pfBlue); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayAlpha)(VROverlayHandle_t ulOverlayHandle, float fAlpha); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayAlpha)(VROverlayHandle_t ulOverlayHandle, float * pfAlpha); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTexelAspect)(VROverlayHandle_t ulOverlayHandle, float fTexelAspect); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTexelAspect)(VROverlayHandle_t ulOverlayHandle, float * pfTexelAspect); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlaySortOrder)(VROverlayHandle_t ulOverlayHandle, uint32_t unSortOrder); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlaySortOrder)(VROverlayHandle_t ulOverlayHandle, uint32_t * punSortOrder); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayWidthInMeters)(VROverlayHandle_t ulOverlayHandle, float fWidthInMeters); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayWidthInMeters)(VROverlayHandle_t ulOverlayHandle, float * pfWidthInMeters); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayCurvature)(VROverlayHandle_t ulOverlayHandle, float fCurvature); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayCurvature)(VROverlayHandle_t ulOverlayHandle, float * pfCurvature); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTextureColorSpace)(VROverlayHandle_t ulOverlayHandle, EColorSpace eTextureColorSpace); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTextureColorSpace)(VROverlayHandle_t ulOverlayHandle, EColorSpace * peTextureColorSpace); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTextureBounds)(VROverlayHandle_t ulOverlayHandle, struct VRTextureBounds_t * pOverlayTextureBounds); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTextureBounds)(VROverlayHandle_t ulOverlayHandle, struct VRTextureBounds_t * pOverlayTextureBounds); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTransformType)(VROverlayHandle_t ulOverlayHandle, VROverlayTransformType * peTransformType); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTransformAbsolute)(VROverlayHandle_t ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, struct HmdMatrix34_t * pmatTrackingOriginToOverlayTransform); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTransformAbsolute)(VROverlayHandle_t ulOverlayHandle, ETrackingUniverseOrigin * peTrackingOrigin, struct HmdMatrix34_t * pmatTrackingOriginToOverlayTransform); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTransformTrackedDeviceRelative)(VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t unTrackedDevice, struct HmdMatrix34_t * pmatTrackedDeviceToOverlayTransform); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTransformTrackedDeviceRelative)(VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t * punTrackedDevice, struct HmdMatrix34_t * pmatTrackedDeviceToOverlayTransform); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTransformTrackedDeviceComponent)(VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t unDeviceIndex, char * pchComponentName); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTransformTrackedDeviceComponent)(VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t * punDeviceIndex, char * pchComponentName, uint32_t unComponentNameSize); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTransformOverlayRelative)(VROverlayHandle_t ulOverlayHandle, VROverlayHandle_t * ulOverlayHandleParent, struct HmdMatrix34_t * pmatParentOverlayToOverlayTransform); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTransformOverlayRelative)(VROverlayHandle_t ulOverlayHandle, VROverlayHandle_t ulOverlayHandleParent, struct HmdMatrix34_t * pmatParentOverlayToOverlayTransform); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTransformCursor)(VROverlayHandle_t ulCursorOverlayHandle, struct HmdVector2_t * pvHotspot); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTransformCursor)(VROverlayHandle_t ulOverlayHandle, struct HmdVector2_t * pvHotspot); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTransformProjection)(VROverlayHandle_t ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, struct HmdMatrix34_t * pmatTrackingOriginToOverlayTransform, struct VROverlayProjection_t * pProjection, EVREye eEye); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *ShowOverlay)(VROverlayHandle_t ulOverlayHandle); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *HideOverlay)(VROverlayHandle_t ulOverlayHandle); + bool (OPENVR_FNTABLE_CALLTYPE *IsOverlayVisible)(VROverlayHandle_t ulOverlayHandle); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetTransformForOverlayCoordinates)(VROverlayHandle_t ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, struct HmdVector2_t coordinatesInOverlay, struct HmdMatrix34_t * pmatTransform); + bool (OPENVR_FNTABLE_CALLTYPE *PollNextOverlayEvent)(VROverlayHandle_t ulOverlayHandle, struct VREvent_t * pEvent, uint32_t uncbVREvent); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayInputMethod)(VROverlayHandle_t ulOverlayHandle, VROverlayInputMethod * peInputMethod); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayInputMethod)(VROverlayHandle_t ulOverlayHandle, VROverlayInputMethod eInputMethod); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayMouseScale)(VROverlayHandle_t ulOverlayHandle, struct HmdVector2_t * pvecMouseScale); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayMouseScale)(VROverlayHandle_t ulOverlayHandle, struct HmdVector2_t * pvecMouseScale); + bool (OPENVR_FNTABLE_CALLTYPE *ComputeOverlayIntersection)(VROverlayHandle_t ulOverlayHandle, struct VROverlayIntersectionParams_t * pParams, struct VROverlayIntersectionResults_t * pResults); + bool (OPENVR_FNTABLE_CALLTYPE *IsHoverTargetOverlay)(VROverlayHandle_t ulOverlayHandle); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayIntersectionMask)(VROverlayHandle_t ulOverlayHandle, struct VROverlayIntersectionMaskPrimitive_t * pMaskPrimitives, uint32_t unNumMaskPrimitives, uint32_t unPrimitiveSize); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *TriggerLaserMouseHapticVibration)(VROverlayHandle_t ulOverlayHandle, float fDurationSeconds, float fFrequency, float fAmplitude); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayCursor)(VROverlayHandle_t ulOverlayHandle, VROverlayHandle_t ulCursorHandle); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayCursorPositionOverride)(VROverlayHandle_t ulOverlayHandle, struct HmdVector2_t * pvCursor); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *ClearOverlayCursorPositionOverride)(VROverlayHandle_t ulOverlayHandle); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayTexture)(VROverlayHandle_t ulOverlayHandle, struct Texture_t * pTexture); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *ClearOverlayTexture)(VROverlayHandle_t ulOverlayHandle); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayRaw)(VROverlayHandle_t ulOverlayHandle, void * pvBuffer, uint32_t unWidth, uint32_t unHeight, uint32_t unBytesPerPixel); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayFromFile)(VROverlayHandle_t ulOverlayHandle, char * pchFilePath); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTexture)(VROverlayHandle_t ulOverlayHandle, void ** pNativeTextureHandle, void * pNativeTextureRef, uint32_t * pWidth, uint32_t * pHeight, uint32_t * pNativeFormat, ETextureType * pAPIType, EColorSpace * pColorSpace, struct VRTextureBounds_t * pTextureBounds); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *ReleaseNativeOverlayHandle)(VROverlayHandle_t ulOverlayHandle, void * pNativeTextureHandle); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayTextureSize)(VROverlayHandle_t ulOverlayHandle, uint32_t * pWidth, uint32_t * pHeight); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *CreateDashboardOverlay)(char * pchOverlayKey, char * pchOverlayFriendlyName, VROverlayHandle_t * pMainHandle, VROverlayHandle_t * pThumbnailHandle); + bool (OPENVR_FNTABLE_CALLTYPE *IsDashboardVisible)(); + bool (OPENVR_FNTABLE_CALLTYPE *IsActiveDashboardOverlay)(VROverlayHandle_t ulOverlayHandle); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetDashboardOverlaySceneProcess)(VROverlayHandle_t ulOverlayHandle, uint32_t unProcessId); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetDashboardOverlaySceneProcess)(VROverlayHandle_t ulOverlayHandle, uint32_t * punProcessId); + void (OPENVR_FNTABLE_CALLTYPE *ShowDashboard)(char * pchOverlayToShow); + TrackedDeviceIndex_t (OPENVR_FNTABLE_CALLTYPE *GetPrimaryDashboardDevice)(); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *ShowKeyboard)(EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, uint32_t unFlags, char * pchDescription, uint32_t unCharMax, char * pchExistingText, uint64_t uUserValue); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *ShowKeyboardForOverlay)(VROverlayHandle_t ulOverlayHandle, EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, uint32_t unFlags, char * pchDescription, uint32_t unCharMax, char * pchExistingText, uint64_t uUserValue); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetKeyboardText)(char * pchText, uint32_t cchText); + void (OPENVR_FNTABLE_CALLTYPE *HideKeyboard)(); + void (OPENVR_FNTABLE_CALLTYPE *SetKeyboardTransformAbsolute)(ETrackingUniverseOrigin eTrackingOrigin, struct HmdMatrix34_t * pmatTrackingOriginToKeyboardTransform); + void (OPENVR_FNTABLE_CALLTYPE *SetKeyboardPositionForOverlay)(VROverlayHandle_t ulOverlayHandle, struct HmdRect2_t avoidRect); + VRMessageOverlayResponse (OPENVR_FNTABLE_CALLTYPE *ShowMessageOverlay)(char * pchText, char * pchCaption, char * pchButton0Text, char * pchButton1Text, char * pchButton2Text, char * pchButton3Text); + void (OPENVR_FNTABLE_CALLTYPE *CloseMessageOverlay)(); +}; + +struct VR_IVROverlayView_FnTable +{ + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *AcquireOverlayView)(VROverlayHandle_t ulOverlayHandle, struct VRNativeDevice_t * pNativeDevice, struct VROverlayView_t * pOverlayView, uint32_t unOverlayViewSize); + EVROverlayError (OPENVR_FNTABLE_CALLTYPE *ReleaseOverlayView)(struct VROverlayView_t * pOverlayView); + void (OPENVR_FNTABLE_CALLTYPE *PostOverlayEvent)(VROverlayHandle_t ulOverlayHandle, struct VREvent_t * pvrEvent); + bool (OPENVR_FNTABLE_CALLTYPE *IsViewingPermitted)(VROverlayHandle_t ulOverlayHandle); +}; + +struct VR_IVRHeadsetView_FnTable +{ + void (OPENVR_FNTABLE_CALLTYPE *SetHeadsetViewSize)(uint32_t nWidth, uint32_t nHeight); + void (OPENVR_FNTABLE_CALLTYPE *GetHeadsetViewSize)(uint32_t * pnWidth, uint32_t * pnHeight); + void (OPENVR_FNTABLE_CALLTYPE *SetHeadsetViewMode)(HeadsetViewMode_t eHeadsetViewMode); + HeadsetViewMode_t (OPENVR_FNTABLE_CALLTYPE *GetHeadsetViewMode)(); + void (OPENVR_FNTABLE_CALLTYPE *SetHeadsetViewCropped)(bool bCropped); + bool (OPENVR_FNTABLE_CALLTYPE *GetHeadsetViewCropped)(); + float (OPENVR_FNTABLE_CALLTYPE *GetHeadsetViewAspectRatio)(); + void (OPENVR_FNTABLE_CALLTYPE *SetHeadsetViewBlendRange)(float flStartPct, float flEndPct); + void (OPENVR_FNTABLE_CALLTYPE *GetHeadsetViewBlendRange)(float * pStartPct, float * pEndPct); +}; + +struct VR_IVRRenderModels_FnTable +{ + EVRRenderModelError (OPENVR_FNTABLE_CALLTYPE *LoadRenderModel_Async)(char * pchRenderModelName, struct RenderModel_t ** ppRenderModel); + void (OPENVR_FNTABLE_CALLTYPE *FreeRenderModel)(struct RenderModel_t * pRenderModel); + EVRRenderModelError (OPENVR_FNTABLE_CALLTYPE *LoadTexture_Async)(TextureID_t textureId, struct RenderModel_TextureMap_t ** ppTexture); + void (OPENVR_FNTABLE_CALLTYPE *FreeTexture)(struct RenderModel_TextureMap_t * pTexture); + EVRRenderModelError (OPENVR_FNTABLE_CALLTYPE *LoadTextureD3D11_Async)(TextureID_t textureId, void * pD3D11Device, void ** ppD3D11Texture2D); + EVRRenderModelError (OPENVR_FNTABLE_CALLTYPE *LoadIntoTextureD3D11_Async)(TextureID_t textureId, void * pDstTexture); + void (OPENVR_FNTABLE_CALLTYPE *FreeTextureD3D11)(void * pD3D11Texture2D); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetRenderModelName)(uint32_t unRenderModelIndex, char * pchRenderModelName, uint32_t unRenderModelNameLen); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetRenderModelCount)(); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetComponentCount)(char * pchRenderModelName); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetComponentName)(char * pchRenderModelName, uint32_t unComponentIndex, char * pchComponentName, uint32_t unComponentNameLen); + uint64_t (OPENVR_FNTABLE_CALLTYPE *GetComponentButtonMask)(char * pchRenderModelName, char * pchComponentName); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetComponentRenderModelName)(char * pchRenderModelName, char * pchComponentName, char * pchComponentRenderModelName, uint32_t unComponentRenderModelNameLen); + bool (OPENVR_FNTABLE_CALLTYPE *GetComponentStateForDevicePath)(char * pchRenderModelName, char * pchComponentName, VRInputValueHandle_t devicePath, RenderModel_ControllerMode_State_t * pState, RenderModel_ComponentState_t * pComponentState); + bool (OPENVR_FNTABLE_CALLTYPE *GetComponentState)(char * pchRenderModelName, char * pchComponentName, VRControllerState_t * pControllerState, struct RenderModel_ControllerMode_State_t * pState, struct RenderModel_ComponentState_t * pComponentState); + bool (OPENVR_FNTABLE_CALLTYPE *RenderModelHasComponent)(char * pchRenderModelName, char * pchComponentName); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetRenderModelThumbnailURL)(char * pchRenderModelName, char * pchThumbnailURL, uint32_t unThumbnailURLLen, EVRRenderModelError * peError); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetRenderModelOriginalPath)(char * pchRenderModelName, char * pchOriginalPath, uint32_t unOriginalPathLen, EVRRenderModelError * peError); + char * (OPENVR_FNTABLE_CALLTYPE *GetRenderModelErrorNameFromEnum)(EVRRenderModelError error); +}; + +struct VR_IVRNotifications_FnTable +{ + EVRNotificationError (OPENVR_FNTABLE_CALLTYPE *CreateNotification)(VROverlayHandle_t ulOverlayHandle, uint64_t ulUserValue, EVRNotificationType type, char * pchText, EVRNotificationStyle style, struct NotificationBitmap_t * pImage, VRNotificationId * pNotificationId); + EVRNotificationError (OPENVR_FNTABLE_CALLTYPE *RemoveNotification)(VRNotificationId notificationId); +}; + +struct VR_IVRSettings_FnTable +{ + char * (OPENVR_FNTABLE_CALLTYPE *GetSettingsErrorNameFromEnum)(EVRSettingsError eError); + void (OPENVR_FNTABLE_CALLTYPE *SetBool)(char * pchSection, char * pchSettingsKey, bool bValue, EVRSettingsError * peError); + void (OPENVR_FNTABLE_CALLTYPE *SetInt32)(char * pchSection, char * pchSettingsKey, int32_t nValue, EVRSettingsError * peError); + void (OPENVR_FNTABLE_CALLTYPE *SetFloat)(char * pchSection, char * pchSettingsKey, float flValue, EVRSettingsError * peError); + void (OPENVR_FNTABLE_CALLTYPE *SetString)(char * pchSection, char * pchSettingsKey, char * pchValue, EVRSettingsError * peError); + bool (OPENVR_FNTABLE_CALLTYPE *GetBool)(char * pchSection, char * pchSettingsKey, EVRSettingsError * peError); + int32_t (OPENVR_FNTABLE_CALLTYPE *GetInt32)(char * pchSection, char * pchSettingsKey, EVRSettingsError * peError); + float (OPENVR_FNTABLE_CALLTYPE *GetFloat)(char * pchSection, char * pchSettingsKey, EVRSettingsError * peError); + void (OPENVR_FNTABLE_CALLTYPE *GetString)(char * pchSection, char * pchSettingsKey, char * pchValue, uint32_t unValueLen, EVRSettingsError * peError); + void (OPENVR_FNTABLE_CALLTYPE *RemoveSection)(char * pchSection, EVRSettingsError * peError); + void (OPENVR_FNTABLE_CALLTYPE *RemoveKeyInSection)(char * pchSection, char * pchSettingsKey, EVRSettingsError * peError); +}; + +struct VR_IVRScreenshots_FnTable +{ + EVRScreenshotError (OPENVR_FNTABLE_CALLTYPE *RequestScreenshot)(ScreenshotHandle_t * pOutScreenshotHandle, EVRScreenshotType type, char * pchPreviewFilename, char * pchVRFilename); + EVRScreenshotError (OPENVR_FNTABLE_CALLTYPE *HookScreenshot)(EVRScreenshotType * pSupportedTypes, int numTypes); + EVRScreenshotType (OPENVR_FNTABLE_CALLTYPE *GetScreenshotPropertyType)(ScreenshotHandle_t screenshotHandle, EVRScreenshotError * pError); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetScreenshotPropertyFilename)(ScreenshotHandle_t screenshotHandle, EVRScreenshotPropertyFilenames filenameType, char * pchFilename, uint32_t cchFilename, EVRScreenshotError * pError); + EVRScreenshotError (OPENVR_FNTABLE_CALLTYPE *UpdateScreenshotProgress)(ScreenshotHandle_t screenshotHandle, float flProgress); + EVRScreenshotError (OPENVR_FNTABLE_CALLTYPE *TakeStereoScreenshot)(ScreenshotHandle_t * pOutScreenshotHandle, char * pchPreviewFilename, char * pchVRFilename); + EVRScreenshotError (OPENVR_FNTABLE_CALLTYPE *SubmitScreenshot)(ScreenshotHandle_t screenshotHandle, EVRScreenshotType type, char * pchSourcePreviewFilename, char * pchSourceVRFilename); +}; + +struct VR_IVRResources_FnTable +{ + uint32_t (OPENVR_FNTABLE_CALLTYPE *LoadSharedResource)(char * pchResourceName, char * pchBuffer, uint32_t unBufferLen); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetResourceFullPath)(char * pchResourceName, char * pchResourceTypeDirectory, char * pchPathBuffer, uint32_t unBufferLen); +}; + +struct VR_IVRDriverManager_FnTable +{ + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetDriverCount)(); + uint32_t (OPENVR_FNTABLE_CALLTYPE *GetDriverName)(DriverId_t nDriver, char * pchValue, uint32_t unBufferSize); + DriverHandle_t (OPENVR_FNTABLE_CALLTYPE *GetDriverHandle)(char * pchDriverName); + bool (OPENVR_FNTABLE_CALLTYPE *IsEnabled)(DriverId_t nDriver); +}; + +struct VR_IVRInput_FnTable +{ + EVRInputError (OPENVR_FNTABLE_CALLTYPE *SetActionManifestPath)(char * pchActionManifestPath); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetActionSetHandle)(char * pchActionSetName, VRActionSetHandle_t * pHandle); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetActionHandle)(char * pchActionName, VRActionHandle_t * pHandle); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetInputSourceHandle)(char * pchInputSourcePath, VRInputValueHandle_t * pHandle); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *UpdateActionState)(struct VRActiveActionSet_t * pSets, uint32_t unSizeOfVRSelectedActionSet_t, uint32_t unSetCount); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetDigitalActionData)(VRActionHandle_t action, struct InputDigitalActionData_t * pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetAnalogActionData)(VRActionHandle_t action, struct InputAnalogActionData_t * pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetPoseActionDataRelativeToNow)(VRActionHandle_t action, ETrackingUniverseOrigin eOrigin, float fPredictedSecondsFromNow, struct InputPoseActionData_t * pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetPoseActionDataForNextFrame)(VRActionHandle_t action, ETrackingUniverseOrigin eOrigin, struct InputPoseActionData_t * pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetSkeletalActionData)(VRActionHandle_t action, struct InputSkeletalActionData_t * pActionData, uint32_t unActionDataSize); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetDominantHand)(ETrackedControllerRole * peDominantHand); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *SetDominantHand)(ETrackedControllerRole eDominantHand); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetBoneCount)(VRActionHandle_t action, uint32_t * pBoneCount); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetBoneHierarchy)(VRActionHandle_t action, BoneIndex_t * pParentIndices, uint32_t unIndexArayCount); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetBoneName)(VRActionHandle_t action, BoneIndex_t nBoneIndex, char * pchBoneName, uint32_t unNameBufferSize); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetSkeletalReferenceTransforms)(VRActionHandle_t action, EVRSkeletalTransformSpace eTransformSpace, EVRSkeletalReferencePose eReferencePose, struct VRBoneTransform_t * pTransformArray, uint32_t unTransformArrayCount); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetSkeletalTrackingLevel)(VRActionHandle_t action, EVRSkeletalTrackingLevel * pSkeletalTrackingLevel); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetSkeletalBoneData)(VRActionHandle_t action, EVRSkeletalTransformSpace eTransformSpace, EVRSkeletalMotionRange eMotionRange, struct VRBoneTransform_t * pTransformArray, uint32_t unTransformArrayCount); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetSkeletalSummaryData)(VRActionHandle_t action, EVRSummaryType eSummaryType, struct VRSkeletalSummaryData_t * pSkeletalSummaryData); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetSkeletalBoneDataCompressed)(VRActionHandle_t action, EVRSkeletalMotionRange eMotionRange, void * pvCompressedData, uint32_t unCompressedSize, uint32_t * punRequiredCompressedSize); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *DecompressSkeletalBoneData)(void * pvCompressedBuffer, uint32_t unCompressedBufferSize, EVRSkeletalTransformSpace eTransformSpace, struct VRBoneTransform_t * pTransformArray, uint32_t unTransformArrayCount); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *TriggerHapticVibrationAction)(VRActionHandle_t action, float fStartSecondsFromNow, float fDurationSeconds, float fFrequency, float fAmplitude, VRInputValueHandle_t ulRestrictToDevice); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetActionOrigins)(VRActionSetHandle_t actionSetHandle, VRActionHandle_t digitalActionHandle, VRInputValueHandle_t * originsOut, uint32_t originOutCount); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetOriginLocalizedName)(VRInputValueHandle_t origin, char * pchNameArray, uint32_t unNameArraySize, int32_t unStringSectionsToInclude); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetOriginTrackedDeviceInfo)(VRInputValueHandle_t origin, struct InputOriginInfo_t * pOriginInfo, uint32_t unOriginInfoSize); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetActionBindingInfo)(VRActionHandle_t action, struct InputBindingInfo_t * pOriginInfo, uint32_t unBindingInfoSize, uint32_t unBindingInfoCount, uint32_t * punReturnedBindingInfoCount); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *ShowActionOrigins)(VRActionSetHandle_t actionSetHandle, VRActionHandle_t ulActionHandle); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *ShowBindingsForActionSet)(struct VRActiveActionSet_t * pSets, uint32_t unSizeOfVRSelectedActionSet_t, uint32_t unSetCount, VRInputValueHandle_t originToHighlight); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetComponentStateForBinding)(char * pchRenderModelName, char * pchComponentName, struct InputBindingInfo_t * pOriginInfo, uint32_t unBindingInfoSize, uint32_t unBindingInfoCount, RenderModel_ComponentState_t * pComponentState); + bool (OPENVR_FNTABLE_CALLTYPE *IsUsingLegacyInput)(); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *OpenBindingUI)(char * pchAppKey, VRActionSetHandle_t ulActionSetHandle, VRInputValueHandle_t ulDeviceHandle, bool bShowOnDesktop); + EVRInputError (OPENVR_FNTABLE_CALLTYPE *GetBindingVariant)(VRInputValueHandle_t ulDevicePath, char * pchVariantArray, uint32_t unVariantArraySize); +}; + +struct VR_IVRIOBuffer_FnTable +{ + EIOBufferError (OPENVR_FNTABLE_CALLTYPE *Open)(char * pchPath, EIOBufferMode mode, uint32_t unElementSize, uint32_t unElements, IOBufferHandle_t * pulBuffer); + EIOBufferError (OPENVR_FNTABLE_CALLTYPE *Close)(IOBufferHandle_t ulBuffer); + EIOBufferError (OPENVR_FNTABLE_CALLTYPE *Read)(IOBufferHandle_t ulBuffer, void * pDst, uint32_t unBytes, uint32_t * punRead); + EIOBufferError (OPENVR_FNTABLE_CALLTYPE *Write)(IOBufferHandle_t ulBuffer, void * pSrc, uint32_t unBytes); + PropertyContainerHandle_t (OPENVR_FNTABLE_CALLTYPE *PropertyContainer)(IOBufferHandle_t ulBuffer); + bool (OPENVR_FNTABLE_CALLTYPE *HasReaders)(IOBufferHandle_t ulBuffer); +}; + +struct VR_IVRSpatialAnchors_FnTable +{ + EVRSpatialAnchorError (OPENVR_FNTABLE_CALLTYPE *CreateSpatialAnchorFromDescriptor)(char * pchDescriptor, SpatialAnchorHandle_t * pHandleOut); + EVRSpatialAnchorError (OPENVR_FNTABLE_CALLTYPE *CreateSpatialAnchorFromPose)(TrackedDeviceIndex_t unDeviceIndex, ETrackingUniverseOrigin eOrigin, struct SpatialAnchorPose_t * pPose, SpatialAnchorHandle_t * pHandleOut); + EVRSpatialAnchorError (OPENVR_FNTABLE_CALLTYPE *GetSpatialAnchorPose)(SpatialAnchorHandle_t unHandle, ETrackingUniverseOrigin eOrigin, struct SpatialAnchorPose_t * pPoseOut); + EVRSpatialAnchorError (OPENVR_FNTABLE_CALLTYPE *GetSpatialAnchorDescriptor)(SpatialAnchorHandle_t unHandle, char * pchDescriptorOut, uint32_t * punDescriptorBufferLenInOut); +}; + +struct VR_IVRDebug_FnTable +{ + EVRDebugError (OPENVR_FNTABLE_CALLTYPE *EmitVrProfilerEvent)(char * pchMessage); + EVRDebugError (OPENVR_FNTABLE_CALLTYPE *BeginVrProfilerEvent)(VrProfilerEventHandle_t * pHandleOut); + EVRDebugError (OPENVR_FNTABLE_CALLTYPE *FinishVrProfilerEvent)(VrProfilerEventHandle_t hHandle, char * pchMessage); + uint32_t (OPENVR_FNTABLE_CALLTYPE *DriverDebugRequest)(TrackedDeviceIndex_t unDeviceIndex, char * pchRequest, char * pchResponseBuffer, uint32_t unResponseBufferSize); +}; + +struct VR_IVRProperties_FnTable +{ + ETrackedPropertyError (OPENVR_FNTABLE_CALLTYPE *ReadPropertyBatch)(PropertyContainerHandle_t ulContainerHandle, struct PropertyRead_t * pBatch, uint32_t unBatchEntryCount); + ETrackedPropertyError (OPENVR_FNTABLE_CALLTYPE *WritePropertyBatch)(PropertyContainerHandle_t ulContainerHandle, struct PropertyWrite_t * pBatch, uint32_t unBatchEntryCount); + char * (OPENVR_FNTABLE_CALLTYPE *GetPropErrorNameFromEnum)(ETrackedPropertyError error); + PropertyContainerHandle_t (OPENVR_FNTABLE_CALLTYPE *TrackedDeviceToPropertyContainer)(TrackedDeviceIndex_t nDevice); +}; + +struct VR_IVRPaths_FnTable +{ + ETrackedPropertyError (OPENVR_FNTABLE_CALLTYPE *ReadPathBatch)(PropertyContainerHandle_t ulRootHandle, struct PathRead_t * pBatch, uint32_t unBatchEntryCount); + ETrackedPropertyError (OPENVR_FNTABLE_CALLTYPE *WritePathBatch)(PropertyContainerHandle_t ulRootHandle, struct PathWrite_t * pBatch, uint32_t unBatchEntryCount); + ETrackedPropertyError (OPENVR_FNTABLE_CALLTYPE *StringToHandle)(PathHandle_t * pHandle, char * pchPath); + ETrackedPropertyError (OPENVR_FNTABLE_CALLTYPE *HandleToString)(PathHandle_t pHandle, char * pchBuffer, uint32_t unBufferSize, uint32_t * punBufferSizeUsed); +}; + +struct VR_IVRBlockQueue_FnTable +{ + EBlockQueueError (OPENVR_FNTABLE_CALLTYPE *Create)(PropertyContainerHandle_t * pulQueueHandle, char * pchPath, uint32_t unBlockDataSize, uint32_t unBlockHeaderSize, uint32_t unBlockCount); + EBlockQueueError (OPENVR_FNTABLE_CALLTYPE *Connect)(PropertyContainerHandle_t * pulQueueHandle, char * pchPath); + EBlockQueueError (OPENVR_FNTABLE_CALLTYPE *Destroy)(PropertyContainerHandle_t ulQueueHandle); + EBlockQueueError (OPENVR_FNTABLE_CALLTYPE *AcquireWriteOnlyBlock)(PropertyContainerHandle_t ulQueueHandle, PropertyContainerHandle_t * pulBlockHandle, void ** ppvBuffer); + EBlockQueueError (OPENVR_FNTABLE_CALLTYPE *ReleaseWriteOnlyBlock)(PropertyContainerHandle_t ulQueueHandle, PropertyContainerHandle_t ulBlockHandle); + EBlockQueueError (OPENVR_FNTABLE_CALLTYPE *WaitAndAcquireReadOnlyBlock)(PropertyContainerHandle_t ulQueueHandle, PropertyContainerHandle_t * pulBlockHandle, void ** ppvBuffer, EBlockQueueReadType eReadType, uint32_t unTimeoutMs); + EBlockQueueError (OPENVR_FNTABLE_CALLTYPE *AcquireReadOnlyBlock)(PropertyContainerHandle_t ulQueueHandle, PropertyContainerHandle_t * pulBlockHandle, void ** ppvBuffer, EBlockQueueReadType eReadType); + EBlockQueueError (OPENVR_FNTABLE_CALLTYPE *ReleaseReadOnlyBlock)(PropertyContainerHandle_t ulQueueHandle, PropertyContainerHandle_t ulBlockHandle); + EBlockQueueError (OPENVR_FNTABLE_CALLTYPE *QueueHasReader)(PropertyContainerHandle_t ulQueueHandle, bool * pbHasReaders); +}; + + +#if 0 +// Global entry points +S_API intptr_t VR_InitInternal( EVRInitError *peError, EVRApplicationType eType ); +S_API void VR_ShutdownInternal(); +S_API bool VR_IsHmdPresent(); +S_API intptr_t VR_GetGenericInterface( const char *pchInterfaceVersion, EVRInitError *peError ); +S_API bool VR_IsRuntimeInstalled(); +S_API const char * VR_GetVRInitErrorAsSymbol( EVRInitError error ); +S_API const char * VR_GetVRInitErrorAsEnglishDescription( EVRInitError error ); +#endif + +#endif // __OPENVR_API_FLAT_H__ + + diff --git a/contrib/openvr/headers/openvr_driver.h b/contrib/openvr/headers/openvr_driver.h new file mode 100755 index 0000000..34b7053 --- /dev/null +++ b/contrib/openvr/headers/openvr_driver.h @@ -0,0 +1,4212 @@ +#pragma once + +// openvr_driver.h +//========= Copyright Valve Corporation ============// +// Dynamically generated file. Do not modify this file directly. + +#ifndef _OPENVR_DRIVER_API +#define _OPENVR_DRIVER_API + +#include + + + +// version.h + +namespace vr +{ + static const uint32_t k_nSteamVRVersionMajor = 1; + static const uint32_t k_nSteamVRVersionMinor = 16; + static const uint32_t k_nSteamVRVersionBuild = 8; +} // namespace vr + +// public_vrtypes.h + +#ifndef _INCLUDE_CORE_VRTYPES_PUBLIC_H +#define _INCLUDE_CORE_VRTYPES_PUBLIC_H + +namespace vr +{ +#pragma pack( push, 8 ) + +// right-handed system +// +y is up +// +x is to the right +// -z is forward +// Distance unit is meters +struct HmdMatrix34_t +{ + float m[3][4]; +}; + +struct HmdMatrix33_t +{ + float m[3][3]; +}; + +struct HmdMatrix44_t +{ + float m[4][4]; +}; + +struct HmdVector3_t +{ + float v[3]; +}; + +struct HmdVector4_t +{ + float v[4]; +}; + +struct HmdVector3d_t +{ + double v[3]; +}; + +struct HmdVector2_t +{ + float v[2]; +}; + +struct HmdQuaternion_t +{ + double w, x, y, z; +}; + +struct HmdQuaternionf_t +{ + float w, x, y, z; +}; + +struct HmdColor_t +{ + float r, g, b, a; +}; + +struct HmdQuad_t +{ + HmdVector3_t vCorners[ 4 ]; +}; + +struct HmdRect2_t +{ + HmdVector2_t vTopLeft; + HmdVector2_t vBottomRight; +}; + +/** Holds the transform for a single bone */ +struct VRBoneTransform_t +{ + HmdVector4_t position; + HmdQuaternionf_t orientation; +}; + +#pragma pack( pop ) + +} // namespace vr + +#endif + +// vrtypes.h + +#ifndef _INCLUDE_VRTYPES_H +#define _INCLUDE_VRTYPES_H + +// Forward declarations to avoid requiring vulkan.h +struct VkDevice_T; +struct VkPhysicalDevice_T; +struct VkInstance_T; +struct VkQueue_T; + +// Forward declarations to avoid requiring d3d12.h +struct ID3D12Resource; +struct ID3D12CommandQueue; + +namespace vr +{ +#pragma pack( push, 8 ) + +/** A handle for a spatial anchor. This handle is only valid during the session it was created in. +* Anchors that live beyond one session should be saved by their string descriptors. */ +typedef uint32_t SpatialAnchorHandle_t; + +typedef void* glSharedTextureHandle_t; +typedef int32_t glInt_t; +typedef uint32_t glUInt_t; + + +/** Used to return the post-distortion UVs for each color channel. +* UVs range from 0 to 1 with 0,0 in the upper left corner of the +* source render target. The 0,0 to 1,1 range covers a single eye. */ +struct DistortionCoordinates_t +{ + float rfRed[2]; + float rfGreen[2]; + float rfBlue[2]; +}; + +enum EVREye +{ + Eye_Left = 0, + Eye_Right = 1 +}; + +enum ETextureType +{ + TextureType_Invalid = -1, // Handle has been invalidated + TextureType_DirectX = 0, // Handle is an ID3D11Texture + TextureType_OpenGL = 1, // Handle is an OpenGL texture name or an OpenGL render buffer name, depending on submit flags + TextureType_Vulkan = 2, // Handle is a pointer to a VRVulkanTextureData_t structure + TextureType_IOSurface = 3, // Handle is a macOS cross-process-sharable IOSurfaceRef, deprecated in favor of TextureType_Metal on supported platforms + TextureType_DirectX12 = 4, // Handle is a pointer to a D3D12TextureData_t structure + TextureType_DXGISharedHandle = 5, // Handle is a HANDLE DXGI share handle, only supported for Overlay render targets. + // this texture is used directly by our renderer, so only perform atomic (copyresource or resolve) on it + TextureType_Metal = 6, // Handle is a MTLTexture conforming to the MTLSharedTexture protocol. Textures submitted to IVRCompositor::Submit which + // are of type MTLTextureType2DArray assume layer 0 is the left eye texture (vr::EVREye::Eye_left), layer 1 is the right + // eye texture (vr::EVREye::Eye_Right) +}; + +enum EColorSpace +{ + ColorSpace_Auto = 0, // Assumes 'gamma' for 8-bit per component formats, otherwise 'linear'. This mirrors the DXGI formats which have _SRGB variants. + ColorSpace_Gamma = 1, // Texture data can be displayed directly on the display without any conversion (a.k.a. display native format). + ColorSpace_Linear = 2, // Same as gamma but has been converted to a linear representation using DXGI's sRGB conversion algorithm. +}; + +struct Texture_t +{ + void* handle; // See ETextureType definition above + ETextureType eType; + EColorSpace eColorSpace; +}; + +// Handle to a shared texture (HANDLE on Windows obtained using OpenSharedResource). +typedef uint64_t SharedTextureHandle_t; +#define INVALID_SHARED_TEXTURE_HANDLE ((vr::SharedTextureHandle_t)0) + +enum ETrackingResult +{ + TrackingResult_Uninitialized = 1, + + TrackingResult_Calibrating_InProgress = 100, + TrackingResult_Calibrating_OutOfRange = 101, + + TrackingResult_Running_OK = 200, + TrackingResult_Running_OutOfRange = 201, + + TrackingResult_Fallback_RotationOnly = 300, +}; + +typedef uint32_t DriverId_t; +static const uint32_t k_nDriverNone = 0xFFFFFFFF; + +static const uint32_t k_unMaxDriverDebugResponseSize = 32768; + +/** Used to pass device IDs to API calls */ +typedef uint32_t TrackedDeviceIndex_t; +static const uint32_t k_unTrackedDeviceIndex_Hmd = 0; +static const uint32_t k_unMaxTrackedDeviceCount = 64; +static const uint32_t k_unTrackedDeviceIndexOther = 0xFFFFFFFE; +static const uint32_t k_unTrackedDeviceIndexInvalid = 0xFFFFFFFF; + +/** Describes what kind of object is being tracked at a given ID */ +enum ETrackedDeviceClass +{ + TrackedDeviceClass_Invalid = 0, // the ID was not valid. + TrackedDeviceClass_HMD = 1, // Head-Mounted Displays + TrackedDeviceClass_Controller = 2, // Tracked controllers + TrackedDeviceClass_GenericTracker = 3, // Generic trackers, similar to controllers + TrackedDeviceClass_TrackingReference = 4, // Camera and base stations that serve as tracking reference points + TrackedDeviceClass_DisplayRedirect = 5, // Accessories that aren't necessarily tracked themselves, but may redirect video output from other tracked devices + + TrackedDeviceClass_Max +}; + + +/** Describes what specific role associated with a tracked device */ +enum ETrackedControllerRole +{ + TrackedControllerRole_Invalid = 0, // Invalid value for controller type + TrackedControllerRole_LeftHand = 1, // Tracked device associated with the left hand + TrackedControllerRole_RightHand = 2, // Tracked device associated with the right hand + TrackedControllerRole_OptOut = 3, // Tracked device is opting out of left/right hand selection + TrackedControllerRole_Treadmill = 4, // Tracked device is a treadmill or other locomotion device + TrackedControllerRole_Stylus = 5, // Tracked device is a stylus + TrackedControllerRole_Max = 5 +}; + + +/** Returns true if the tracked controller role is allowed to be a hand */ +inline bool IsRoleAllowedAsHand( ETrackedControllerRole eRole ) +{ + switch ( eRole ) + { + case TrackedControllerRole_Invalid: + case TrackedControllerRole_LeftHand: + case TrackedControllerRole_RightHand: + return true; + default: + return false; + } +} + + +/** describes a single pose for a tracked object */ +struct TrackedDevicePose_t +{ + HmdMatrix34_t mDeviceToAbsoluteTracking; + HmdVector3_t vVelocity; // velocity in tracker space in m/s + HmdVector3_t vAngularVelocity; // angular velocity in radians/s (?) + ETrackingResult eTrackingResult; + bool bPoseIsValid; + + // This indicates that there is a device connected for this spot in the pose array. + // It could go from true to false if the user unplugs the device. + bool bDeviceIsConnected; +}; + +/** Identifies which style of tracking origin the application wants to use +* for the poses it is requesting */ +enum ETrackingUniverseOrigin +{ + TrackingUniverseSeated = 0, // Poses are provided relative to the seated zero pose + TrackingUniverseStanding = 1, // Poses are provided relative to the safe bounds configured by the user + TrackingUniverseRawAndUncalibrated = 2, // Poses are provided in the coordinate system defined by the driver. It has Y up and is unified for devices of the same driver. You usually don't want this one. +}; + +enum EAdditionalRadioFeatures +{ + AdditionalRadioFeatures_None = 0x00000000, + AdditionalRadioFeatures_HTCLinkBox = 0x00000001, + AdditionalRadioFeatures_InternalDongle = 0x00000002, + AdditionalRadioFeatures_ExternalDongle = 0x00000004, +}; + +typedef uint64_t WebConsoleHandle_t; +#define INVALID_WEB_CONSOLE_HANDLE ((vr::WebConsoleHandle_t)0) + +// Refers to a single container of properties +typedef uint64_t PropertyContainerHandle_t; +typedef uint32_t PropertyTypeTag_t; + +static const PropertyContainerHandle_t k_ulInvalidPropertyContainer = 0; +static const PropertyTypeTag_t k_unInvalidPropertyTag = 0; + +typedef PropertyContainerHandle_t DriverHandle_t; +static const PropertyContainerHandle_t k_ulInvalidDriverHandle = 0; + +// Use these tags to set/get common types as struct properties +static const PropertyTypeTag_t k_unFloatPropertyTag = 1; +static const PropertyTypeTag_t k_unInt32PropertyTag = 2; +static const PropertyTypeTag_t k_unUint64PropertyTag = 3; +static const PropertyTypeTag_t k_unBoolPropertyTag = 4; +static const PropertyTypeTag_t k_unStringPropertyTag = 5; +static const PropertyTypeTag_t k_unErrorPropertyTag = 6; +static const PropertyTypeTag_t k_unDoublePropertyTag = 7; + +static const PropertyTypeTag_t k_unHmdMatrix34PropertyTag = 20; +static const PropertyTypeTag_t k_unHmdMatrix44PropertyTag = 21; +static const PropertyTypeTag_t k_unHmdVector3PropertyTag = 22; +static const PropertyTypeTag_t k_unHmdVector4PropertyTag = 23; +static const PropertyTypeTag_t k_unHmdVector2PropertyTag = 24; +static const PropertyTypeTag_t k_unHmdQuadPropertyTag = 25; + +static const PropertyTypeTag_t k_unHiddenAreaPropertyTag = 30; +static const PropertyTypeTag_t k_unPathHandleInfoTag = 31; +static const PropertyTypeTag_t k_unActionPropertyTag = 32; +static const PropertyTypeTag_t k_unInputValuePropertyTag = 33; +static const PropertyTypeTag_t k_unWildcardPropertyTag = 34; +static const PropertyTypeTag_t k_unHapticVibrationPropertyTag = 35; +static const PropertyTypeTag_t k_unSkeletonPropertyTag = 36; + +static const PropertyTypeTag_t k_unSpatialAnchorPosePropertyTag = 40; +static const PropertyTypeTag_t k_unJsonPropertyTag = 41; +static const PropertyTypeTag_t k_unActiveActionSetPropertyTag = 42; + +static const PropertyTypeTag_t k_unOpenVRInternalReserved_Start = 1000; +static const PropertyTypeTag_t k_unOpenVRInternalReserved_End = 10000; + + +/** Each entry in this enum represents a property that can be retrieved about a +* tracked device. Many fields are only valid for one ETrackedDeviceClass. */ +enum ETrackedDeviceProperty +{ + Prop_Invalid = 0, + + // general properties that apply to all device classes + Prop_TrackingSystemName_String = 1000, + Prop_ModelNumber_String = 1001, + Prop_SerialNumber_String = 1002, + Prop_RenderModelName_String = 1003, + Prop_WillDriftInYaw_Bool = 1004, + Prop_ManufacturerName_String = 1005, + Prop_TrackingFirmwareVersion_String = 1006, + Prop_HardwareRevision_String = 1007, + Prop_AllWirelessDongleDescriptions_String = 1008, + Prop_ConnectedWirelessDongle_String = 1009, + Prop_DeviceIsWireless_Bool = 1010, + Prop_DeviceIsCharging_Bool = 1011, + Prop_DeviceBatteryPercentage_Float = 1012, // 0 is empty, 1 is full + Prop_StatusDisplayTransform_Matrix34 = 1013, + Prop_Firmware_UpdateAvailable_Bool = 1014, + Prop_Firmware_ManualUpdate_Bool = 1015, + Prop_Firmware_ManualUpdateURL_String = 1016, + Prop_HardwareRevision_Uint64 = 1017, + Prop_FirmwareVersion_Uint64 = 1018, + Prop_FPGAVersion_Uint64 = 1019, + Prop_VRCVersion_Uint64 = 1020, + Prop_RadioVersion_Uint64 = 1021, + Prop_DongleVersion_Uint64 = 1022, + Prop_BlockServerShutdown_Bool = 1023, + Prop_CanUnifyCoordinateSystemWithHmd_Bool = 1024, + Prop_ContainsProximitySensor_Bool = 1025, + Prop_DeviceProvidesBatteryStatus_Bool = 1026, + Prop_DeviceCanPowerOff_Bool = 1027, + Prop_Firmware_ProgrammingTarget_String = 1028, + Prop_DeviceClass_Int32 = 1029, + Prop_HasCamera_Bool = 1030, + Prop_DriverVersion_String = 1031, + Prop_Firmware_ForceUpdateRequired_Bool = 1032, + Prop_ViveSystemButtonFixRequired_Bool = 1033, + Prop_ParentDriver_Uint64 = 1034, + Prop_ResourceRoot_String = 1035, + Prop_RegisteredDeviceType_String = 1036, + Prop_InputProfilePath_String = 1037, // input profile to use for this device in the input system. Will default to tracking system name if this isn't provided + Prop_NeverTracked_Bool = 1038, // Used for devices that will never have a valid pose by design + Prop_NumCameras_Int32 = 1039, + Prop_CameraFrameLayout_Int32 = 1040, // EVRTrackedCameraFrameLayout value + Prop_CameraStreamFormat_Int32 = 1041, // ECameraVideoStreamFormat value + Prop_AdditionalDeviceSettingsPath_String = 1042, // driver-relative path to additional device and global configuration settings + Prop_Identifiable_Bool = 1043, // Whether device supports being identified from vrmonitor (e.g. blink LED, vibrate haptics, etc) + Prop_BootloaderVersion_Uint64 = 1044, + Prop_AdditionalSystemReportData_String = 1045, // additional string to include in system reports about a tracked device + Prop_CompositeFirmwareVersion_String = 1046, // additional FW components from a device that gets propagated into reports + Prop_Firmware_RemindUpdate_Bool = 1047, + Prop_PeripheralApplicationVersion_Uint64 = 1048, + Prop_ManufacturerSerialNumber_String = 1049, + Prop_ComputedSerialNumber_String = 1050, + Prop_EstimatedDeviceFirstUseTime_Int32 = 1051, + + // Properties that are unique to TrackedDeviceClass_HMD + Prop_ReportsTimeSinceVSync_Bool = 2000, + Prop_SecondsFromVsyncToPhotons_Float = 2001, + Prop_DisplayFrequency_Float = 2002, + Prop_UserIpdMeters_Float = 2003, + Prop_CurrentUniverseId_Uint64 = 2004, + Prop_PreviousUniverseId_Uint64 = 2005, + Prop_DisplayFirmwareVersion_Uint64 = 2006, + Prop_IsOnDesktop_Bool = 2007, + Prop_DisplayMCType_Int32 = 2008, + Prop_DisplayMCOffset_Float = 2009, + Prop_DisplayMCScale_Float = 2010, + Prop_EdidVendorID_Int32 = 2011, + Prop_DisplayMCImageLeft_String = 2012, + Prop_DisplayMCImageRight_String = 2013, + Prop_DisplayGCBlackClamp_Float = 2014, + Prop_EdidProductID_Int32 = 2015, + Prop_CameraToHeadTransform_Matrix34 = 2016, + Prop_DisplayGCType_Int32 = 2017, + Prop_DisplayGCOffset_Float = 2018, + Prop_DisplayGCScale_Float = 2019, + Prop_DisplayGCPrescale_Float = 2020, + Prop_DisplayGCImage_String = 2021, + Prop_LensCenterLeftU_Float = 2022, + Prop_LensCenterLeftV_Float = 2023, + Prop_LensCenterRightU_Float = 2024, + Prop_LensCenterRightV_Float = 2025, + Prop_UserHeadToEyeDepthMeters_Float = 2026, + Prop_CameraFirmwareVersion_Uint64 = 2027, + Prop_CameraFirmwareDescription_String = 2028, + Prop_DisplayFPGAVersion_Uint64 = 2029, + Prop_DisplayBootloaderVersion_Uint64 = 2030, + Prop_DisplayHardwareVersion_Uint64 = 2031, + Prop_AudioFirmwareVersion_Uint64 = 2032, + Prop_CameraCompatibilityMode_Int32 = 2033, + Prop_ScreenshotHorizontalFieldOfViewDegrees_Float = 2034, + Prop_ScreenshotVerticalFieldOfViewDegrees_Float = 2035, + Prop_DisplaySuppressed_Bool = 2036, + Prop_DisplayAllowNightMode_Bool = 2037, + Prop_DisplayMCImageWidth_Int32 = 2038, + Prop_DisplayMCImageHeight_Int32 = 2039, + Prop_DisplayMCImageNumChannels_Int32 = 2040, + Prop_DisplayMCImageData_Binary = 2041, + Prop_SecondsFromPhotonsToVblank_Float = 2042, + Prop_DriverDirectModeSendsVsyncEvents_Bool = 2043, + Prop_DisplayDebugMode_Bool = 2044, + Prop_GraphicsAdapterLuid_Uint64 = 2045, + Prop_DriverProvidedChaperonePath_String = 2048, + Prop_ExpectedTrackingReferenceCount_Int32 = 2049, // expected number of sensors or basestations to reserve UI space for + Prop_ExpectedControllerCount_Int32 = 2050, // expected number of tracked controllers to reserve UI space for + Prop_NamedIconPathControllerLeftDeviceOff_String = 2051, // placeholder icon for "left" controller if not yet detected/loaded + Prop_NamedIconPathControllerRightDeviceOff_String = 2052, // placeholder icon for "right" controller if not yet detected/loaded + Prop_NamedIconPathTrackingReferenceDeviceOff_String = 2053, // placeholder icon for sensor/base if not yet detected/loaded + Prop_DoNotApplyPrediction_Bool = 2054, // currently no effect. was used to disable HMD pose prediction on MR, which is now done by MR driver setting velocity=0 + Prop_CameraToHeadTransforms_Matrix34_Array = 2055, + Prop_DistortionMeshResolution_Int32 = 2056, // custom resolution of compositor calls to IVRSystem::ComputeDistortion + Prop_DriverIsDrawingControllers_Bool = 2057, + Prop_DriverRequestsApplicationPause_Bool = 2058, + Prop_DriverRequestsReducedRendering_Bool = 2059, + Prop_MinimumIpdStepMeters_Float = 2060, + Prop_AudioBridgeFirmwareVersion_Uint64 = 2061, + Prop_ImageBridgeFirmwareVersion_Uint64 = 2062, + Prop_ImuToHeadTransform_Matrix34 = 2063, + Prop_ImuFactoryGyroBias_Vector3 = 2064, + Prop_ImuFactoryGyroScale_Vector3 = 2065, + Prop_ImuFactoryAccelerometerBias_Vector3 = 2066, + Prop_ImuFactoryAccelerometerScale_Vector3 = 2067, + // reserved 2068 + Prop_ConfigurationIncludesLighthouse20Features_Bool = 2069, + Prop_AdditionalRadioFeatures_Uint64 = 2070, + Prop_CameraWhiteBalance_Vector4_Array = 2071, // Prop_NumCameras_Int32-sized array of float[4] RGBG white balance calibration data (max size is vr::k_unMaxCameras) + Prop_CameraDistortionFunction_Int32_Array = 2072, // Prop_NumCameras_Int32-sized array of vr::EVRDistortionFunctionType values (max size is vr::k_unMaxCameras) + Prop_CameraDistortionCoefficients_Float_Array = 2073, // Prop_NumCameras_Int32-sized array of double[vr::k_unMaxDistortionFunctionParameters] (max size is vr::k_unMaxCameras) + Prop_ExpectedControllerType_String = 2074, + Prop_HmdTrackingStyle_Int32 = 2075, // one of EHmdTrackingStyle + Prop_DriverProvidedChaperoneVisibility_Bool = 2076, + Prop_HmdColumnCorrectionSettingPrefix_String = 2077, + Prop_CameraSupportsCompatibilityModes_Bool = 2078, + Prop_SupportsRoomViewDepthProjection_Bool = 2079, + Prop_DisplayAvailableFrameRates_Float_Array = 2080, // populated by compositor from actual EDID list when available from GPU driver + Prop_DisplaySupportsMultipleFramerates_Bool = 2081, // if this is true but Prop_DisplayAvailableFrameRates_Float_Array is empty, explain to user + Prop_DisplayColorMultLeft_Vector3 = 2082, + Prop_DisplayColorMultRight_Vector3 = 2083, + Prop_DisplaySupportsRuntimeFramerateChange_Bool = 2084, + Prop_DisplaySupportsAnalogGain_Bool = 2085, + Prop_DisplayMinAnalogGain_Float = 2086, + Prop_DisplayMaxAnalogGain_Float = 2087, + Prop_CameraExposureTime_Float = 2088, + Prop_CameraGlobalGain_Float = 2089, + // Prop_DashboardLayoutPathName_String = 2090, // DELETED + Prop_DashboardScale_Float = 2091, + Prop_IpdUIRangeMinMeters_Float = 2100, + Prop_IpdUIRangeMaxMeters_Float = 2101, + Prop_Hmd_SupportsHDCP14LegacyCompat_Bool = 2102, + Prop_Hmd_SupportsMicMonitoring_Bool = 2103, + + // Driver requested mura correction properties + Prop_DriverRequestedMuraCorrectionMode_Int32 = 2200, + Prop_DriverRequestedMuraFeather_InnerLeft_Int32 = 2201, + Prop_DriverRequestedMuraFeather_InnerRight_Int32 = 2202, + Prop_DriverRequestedMuraFeather_InnerTop_Int32 = 2203, + Prop_DriverRequestedMuraFeather_InnerBottom_Int32 = 2204, + Prop_DriverRequestedMuraFeather_OuterLeft_Int32 = 2205, + Prop_DriverRequestedMuraFeather_OuterRight_Int32 = 2206, + Prop_DriverRequestedMuraFeather_OuterTop_Int32 = 2207, + Prop_DriverRequestedMuraFeather_OuterBottom_Int32 = 2208, + + Prop_Audio_DefaultPlaybackDeviceId_String = 2300, + Prop_Audio_DefaultRecordingDeviceId_String = 2301, + Prop_Audio_DefaultPlaybackDeviceVolume_Float = 2302, + Prop_Audio_SupportsDualSpeakerAndJackOutput_Bool = 2303, + + // Properties that are unique to TrackedDeviceClass_Controller + Prop_AttachedDeviceId_String = 3000, + Prop_SupportedButtons_Uint64 = 3001, + Prop_Axis0Type_Int32 = 3002, // Return value is of type EVRControllerAxisType + Prop_Axis1Type_Int32 = 3003, // Return value is of type EVRControllerAxisType + Prop_Axis2Type_Int32 = 3004, // Return value is of type EVRControllerAxisType + Prop_Axis3Type_Int32 = 3005, // Return value is of type EVRControllerAxisType + Prop_Axis4Type_Int32 = 3006, // Return value is of type EVRControllerAxisType + Prop_ControllerRoleHint_Int32 = 3007, // Return value is of type ETrackedControllerRole + + // Properties that are unique to TrackedDeviceClass_TrackingReference + Prop_FieldOfViewLeftDegrees_Float = 4000, + Prop_FieldOfViewRightDegrees_Float = 4001, + Prop_FieldOfViewTopDegrees_Float = 4002, + Prop_FieldOfViewBottomDegrees_Float = 4003, + Prop_TrackingRangeMinimumMeters_Float = 4004, + Prop_TrackingRangeMaximumMeters_Float = 4005, + Prop_ModeLabel_String = 4006, + Prop_CanWirelessIdentify_Bool = 4007, // volatile, based on radio presence and fw discovery + Prop_Nonce_Int32 = 4008, + + // Properties that are used for user interface like icons names + Prop_IconPathName_String = 5000, // DEPRECATED. Value not referenced. Now expected to be part of icon path properties. + Prop_NamedIconPathDeviceOff_String = 5001, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + Prop_NamedIconPathDeviceSearching_String = 5002, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + Prop_NamedIconPathDeviceSearchingAlert_String = 5003, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + Prop_NamedIconPathDeviceReady_String = 5004, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + Prop_NamedIconPathDeviceReadyAlert_String = 5005, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + Prop_NamedIconPathDeviceNotReady_String = 5006, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + Prop_NamedIconPathDeviceStandby_String = 5007, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + Prop_NamedIconPathDeviceAlertLow_String = 5008, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + Prop_NamedIconPathDeviceStandbyAlert_String = 5009, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others + + // Properties that are used by helpers, but are opaque to applications + Prop_DisplayHiddenArea_Binary_Start = 5100, + Prop_DisplayHiddenArea_Binary_End = 5150, + Prop_ParentContainer = 5151, + Prop_OverrideContainer_Uint64 = 5152, + + // Properties that are unique to drivers + Prop_UserConfigPath_String = 6000, + Prop_InstallPath_String = 6001, + Prop_HasDisplayComponent_Bool = 6002, + Prop_HasControllerComponent_Bool = 6003, + Prop_HasCameraComponent_Bool = 6004, + Prop_HasDriverDirectModeComponent_Bool = 6005, + Prop_HasVirtualDisplayComponent_Bool = 6006, + Prop_HasSpatialAnchorsSupport_Bool = 6007, + + // Properties that are set internally based on other information provided by drivers + Prop_ControllerType_String = 7000, + //Prop_LegacyInputProfile_String = 7001, // This is no longer used. See "legacy_binding" in the input profile instead. + Prop_ControllerHandSelectionPriority_Int32 = 7002, // Allows hand assignments to prefer some controllers over others. High numbers are selected over low numbers + + // Vendors are free to expose private debug data in this reserved region + Prop_VendorSpecific_Reserved_Start = 10000, + Prop_VendorSpecific_Reserved_End = 10999, + + Prop_TrackedDeviceProperty_Max = 1000000, +}; + +/** No string property will ever be longer than this length */ +static const uint32_t k_unMaxPropertyStringSize = 32 * 1024; + +/** Used to return errors that occur when reading properties. */ +enum ETrackedPropertyError +{ + TrackedProp_Success = 0, + TrackedProp_WrongDataType = 1, + TrackedProp_WrongDeviceClass = 2, + TrackedProp_BufferTooSmall = 3, + TrackedProp_UnknownProperty = 4, // Driver has not set the property (and may not ever). + TrackedProp_InvalidDevice = 5, + TrackedProp_CouldNotContactServer = 6, + TrackedProp_ValueNotProvidedByDevice = 7, + TrackedProp_StringExceedsMaximumLength = 8, + TrackedProp_NotYetAvailable = 9, // The property value isn't known yet, but is expected soon. Call again later. + TrackedProp_PermissionDenied = 10, + TrackedProp_InvalidOperation = 11, + TrackedProp_CannotWriteToWildcards = 12, + TrackedProp_IPCReadFailure = 13, + TrackedProp_OutOfMemory = 14, + TrackedProp_InvalidContainer = 15, +}; + +/** Used to drive certain text in the UI when talking about the tracking system for the HMD */ +enum EHmdTrackingStyle +{ + HmdTrackingStyle_Unknown = 0, + + HmdTrackingStyle_Lighthouse = 1, // base stations and lasers + HmdTrackingStyle_OutsideInCameras = 2, // Cameras and LED, Rift 1 style + HmdTrackingStyle_InsideOutCameras = 3, // Cameras on HMD looking at the world +}; + +typedef uint64_t VRActionHandle_t; +typedef uint64_t VRActionSetHandle_t; +typedef uint64_t VRInputValueHandle_t; + +static const VRActionHandle_t k_ulInvalidActionHandle = 0; +static const VRActionSetHandle_t k_ulInvalidActionSetHandle = 0; +static const VRInputValueHandle_t k_ulInvalidInputValueHandle = 0; + + +/** Allows the application to control what part of the provided texture will be used in the +* frame buffer. */ +struct VRTextureBounds_t +{ + float uMin, vMin; + float uMax, vMax; +}; + +/** Allows specifying pose used to render provided scene texture (if different from value returned by WaitGetPoses). */ +struct VRTextureWithPose_t : public Texture_t +{ + HmdMatrix34_t mDeviceToAbsoluteTracking; // Actual pose used to render scene textures. +}; + +struct VRTextureDepthInfo_t +{ + void* handle; // See ETextureType definition above + HmdMatrix44_t mProjection; + HmdVector2_t vRange; // 0..1 +}; + +struct VRTextureWithDepth_t : public Texture_t +{ + VRTextureDepthInfo_t depth; +}; + +struct VRTextureWithPoseAndDepth_t : public VRTextureWithPose_t +{ + VRTextureDepthInfo_t depth; +}; + +/** Allows the application to control how scene textures are used by the compositor when calling Submit. */ +enum EVRSubmitFlags +{ + // Simple render path. App submits rendered left and right eye images with no lens distortion correction applied. + Submit_Default = 0x00, + + // App submits final left and right eye images with lens distortion already applied (lens distortion makes the images appear + // barrel distorted with chromatic aberration correction applied). The app would have used the data returned by + // vr::IVRSystem::ComputeDistortion() to apply the correct distortion to the rendered images before calling Submit(). + Submit_LensDistortionAlreadyApplied = 0x01, + + // If the texture pointer passed in is actually a renderbuffer (e.g. for MSAA in OpenGL) then set this flag. + Submit_GlRenderBuffer = 0x02, + + // Do not use + Submit_Reserved = 0x04, + + // Set to indicate that pTexture is a pointer to a VRTextureWithPose_t. + // This flag can be combined with Submit_TextureWithDepth to pass a VRTextureWithPoseAndDepth_t. + Submit_TextureWithPose = 0x08, + + // Set to indicate that pTexture is a pointer to a VRTextureWithDepth_t. + // This flag can be combined with Submit_TextureWithPose to pass a VRTextureWithPoseAndDepth_t. + Submit_TextureWithDepth = 0x10, + + // Set to indicate a discontinuity between this and the last frame. + // This will prevent motion smoothing from attempting to extrapolate using the pair. + Submit_FrameDiscontinuty = 0x20, + + // Set to indicate that pTexture->handle is a contains VRVulkanTextureArrayData_t + Submit_VulkanTextureWithArrayData = 0x40, + + // If the texture pointer passed in is an OpenGL Array texture, set this flag + Submit_GlArrayTexture = 0x80, + + // Do not use + Submit_Reserved2 = 0x8000, + + +}; + +/** Data required for passing Vulkan textures to IVRCompositor::Submit. +* Be sure to call OpenVR_Shutdown before destroying these resources. +* Please see https://github.com/ValveSoftware/openvr/wiki/Vulkan for Vulkan-specific documentation */ +struct VRVulkanTextureData_t +{ + uint64_t m_nImage; // VkImage + VkDevice_T *m_pDevice; + VkPhysicalDevice_T *m_pPhysicalDevice; + VkInstance_T *m_pInstance; + VkQueue_T *m_pQueue; + uint32_t m_nQueueFamilyIndex; + uint32_t m_nWidth, m_nHeight, m_nFormat, m_nSampleCount; +}; + +/** Data required for passing Vulkan texture arrays to IVRCompositor::Submit. +* Be sure to call OpenVR_Shutdown before destroying these resources. +* Please see https://github.com/ValveSoftware/openvr/wiki/Vulkan for Vulkan-specific documentation */ +struct VRVulkanTextureArrayData_t : public VRVulkanTextureData_t +{ + uint32_t m_unArrayIndex; + uint32_t m_unArraySize; +}; + +/** Data required for passing D3D12 textures to IVRCompositor::Submit. +* Be sure to call OpenVR_Shutdown before destroying these resources. */ +struct D3D12TextureData_t +{ + ID3D12Resource *m_pResource; + ID3D12CommandQueue *m_pCommandQueue; + uint32_t m_nNodeMask; +}; + +/** Status of the overall system or tracked objects */ +enum EVRState +{ + VRState_Undefined = -1, + VRState_Off = 0, + VRState_Searching = 1, + VRState_Searching_Alert = 2, + VRState_Ready = 3, + VRState_Ready_Alert = 4, + VRState_NotReady = 5, + VRState_Standby = 6, + VRState_Ready_Alert_Low = 7, +}; + +/** The types of events that could be posted (and what the parameters mean for each event type) */ +enum EVREventType +{ + VREvent_None = 0, + + VREvent_TrackedDeviceActivated = 100, + VREvent_TrackedDeviceDeactivated = 101, + VREvent_TrackedDeviceUpdated = 102, + VREvent_TrackedDeviceUserInteractionStarted = 103, + VREvent_TrackedDeviceUserInteractionEnded = 104, + VREvent_IpdChanged = 105, + VREvent_EnterStandbyMode = 106, + VREvent_LeaveStandbyMode = 107, + VREvent_TrackedDeviceRoleChanged = 108, + VREvent_WatchdogWakeUpRequested = 109, + VREvent_LensDistortionChanged = 110, + VREvent_PropertyChanged = 111, + VREvent_WirelessDisconnect = 112, + VREvent_WirelessReconnect = 113, + + VREvent_ButtonPress = 200, // data is controller + VREvent_ButtonUnpress = 201, // data is controller + VREvent_ButtonTouch = 202, // data is controller + VREvent_ButtonUntouch = 203, // data is controller + + // VREvent_DualAnalog_Press = 250, // No longer sent + // VREvent_DualAnalog_Unpress = 251, // No longer sent + // VREvent_DualAnalog_Touch = 252, // No longer sent + // VREvent_DualAnalog_Untouch = 253, // No longer sent + // VREvent_DualAnalog_Move = 254, // No longer sent + // VREvent_DualAnalog_ModeSwitch1 = 255, // No longer sent + // VREvent_DualAnalog_ModeSwitch2 = 256, // No longer sent + VREvent_Modal_Cancel = 257, // Sent to overlays with the + + VREvent_MouseMove = 300, // data is mouse + VREvent_MouseButtonDown = 301, // data is mouse + VREvent_MouseButtonUp = 302, // data is mouse + VREvent_FocusEnter = 303, // data is overlay + VREvent_FocusLeave = 304, // data is overlay + VREvent_ScrollDiscrete = 305, // data is scroll + VREvent_TouchPadMove = 306, // data is mouse + VREvent_OverlayFocusChanged = 307, // data is overlay, global event + VREvent_ReloadOverlays = 308, + VREvent_ScrollSmooth = 309, // data is scroll + VREvent_LockMousePosition = 310, + VREvent_UnlockMousePosition = 311, + + VREvent_InputFocusCaptured = 400, // data is process DEPRECATED + VREvent_InputFocusReleased = 401, // data is process DEPRECATED + // VREvent_SceneFocusLost = 402, // data is process + // VREvent_SceneFocusGained = 403, // data is process + VREvent_SceneApplicationChanged = 404, // data is process - The App actually drawing the scene changed (usually to or from the compositor) + VREvent_SceneFocusChanged = 405, // data is process - New app got access to draw the scene + VREvent_InputFocusChanged = 406, // data is process + // VREvent_SceneApplicationSecondaryRenderingStarted = 407, + VREvent_SceneApplicationUsingWrongGraphicsAdapter = 408, // data is process + VREvent_ActionBindingReloaded = 409, // data is process - The App that action binds reloaded for + + VREvent_HideRenderModels = 410, // Sent to the scene application to request hiding render models temporarily + VREvent_ShowRenderModels = 411, // Sent to the scene application to request restoring render model visibility + + VREvent_SceneApplicationStateChanged = 412, // No data; but query VRApplications()->GetSceneApplicationState(); + + VREvent_ConsoleOpened = 420, + VREvent_ConsoleClosed = 421, + + VREvent_OverlayShown = 500, + VREvent_OverlayHidden = 501, + VREvent_DashboardActivated = 502, + VREvent_DashboardDeactivated = 503, + //VREvent_DashboardThumbSelected = 504, // Sent to the overlay manager - data is overlay - No longer sent + VREvent_DashboardRequested = 505, // Sent to the overlay manager - data is overlay + VREvent_ResetDashboard = 506, // Send to the overlay manager + //VREvent_RenderToast = 507, // Send to the dashboard to render a toast - data is the notification ID -- no longer sent + VREvent_ImageLoaded = 508, // Sent to overlays when a SetOverlayRaw or SetOverlayFromFile call finishes loading + VREvent_ShowKeyboard = 509, // Sent to keyboard renderer in the dashboard to invoke it + VREvent_HideKeyboard = 510, // Sent to keyboard renderer in the dashboard to hide it + VREvent_OverlayGamepadFocusGained = 511, // Sent to an overlay when IVROverlay::SetFocusOverlay is called on it + VREvent_OverlayGamepadFocusLost = 512, // Send to an overlay when it previously had focus and IVROverlay::SetFocusOverlay is called on something else + VREvent_OverlaySharedTextureChanged = 513, + //VREvent_DashboardGuideButtonDown = 514, // These are no longer sent + //VREvent_DashboardGuideButtonUp = 515, + VREvent_ScreenshotTriggered = 516, // Screenshot button combo was pressed, Dashboard should request a screenshot + VREvent_ImageFailed = 517, // Sent to overlays when a SetOverlayRaw or SetOverlayfromFail fails to load + VREvent_DashboardOverlayCreated = 518, + VREvent_SwitchGamepadFocus = 519, + + // Screenshot API + VREvent_RequestScreenshot = 520, // Sent by vrclient application to compositor to take a screenshot + VREvent_ScreenshotTaken = 521, // Sent by compositor to the application that the screenshot has been taken + VREvent_ScreenshotFailed = 522, // Sent by compositor to the application that the screenshot failed to be taken + VREvent_SubmitScreenshotToDashboard = 523, // Sent by compositor to the dashboard that a completed screenshot was submitted + VREvent_ScreenshotProgressToDashboard = 524, // Sent by compositor to the dashboard that a completed screenshot was submitted + + VREvent_PrimaryDashboardDeviceChanged = 525, + VREvent_RoomViewShown = 526, // Sent by compositor whenever room-view is enabled + VREvent_RoomViewHidden = 527, // Sent by compositor whenever room-view is disabled + VREvent_ShowUI = 528, // data is showUi + VREvent_ShowDevTools = 529, // data is showDevTools + VREvent_DesktopViewUpdating = 530, + VREvent_DesktopViewReady = 531, + + VREvent_Notification_Shown = 600, + VREvent_Notification_Hidden = 601, + VREvent_Notification_BeginInteraction = 602, + VREvent_Notification_Destroyed = 603, + + VREvent_Quit = 700, // data is process + VREvent_ProcessQuit = 701, // data is process + //VREvent_QuitAborted_UserPrompt = 702, // data is process + VREvent_QuitAcknowledged = 703, // data is process + VREvent_DriverRequestedQuit = 704, // The driver has requested that SteamVR shut down + VREvent_RestartRequested = 705, // A driver or other component wants the user to restart SteamVR + + VREvent_ChaperoneDataHasChanged = 800, // this will never happen with the new chaperone system + VREvent_ChaperoneUniverseHasChanged = 801, + VREvent_ChaperoneTempDataHasChanged = 802, // this will never happen with the new chaperone system + VREvent_ChaperoneSettingsHaveChanged = 803, + VREvent_SeatedZeroPoseReset = 804, + VREvent_ChaperoneFlushCache = 805, // Sent when the process needs to reload any cached data it retrieved from VRChaperone() + VREvent_ChaperoneRoomSetupStarting = 806, // Triggered by CVRChaperoneClient::RoomSetupStarting + VREvent_ChaperoneRoomSetupFinished = 807, // Triggered by CVRChaperoneClient::CommitWorkingCopy + VREvent_StandingZeroPoseReset = 808, + + VREvent_AudioSettingsHaveChanged = 820, + + VREvent_BackgroundSettingHasChanged = 850, + VREvent_CameraSettingsHaveChanged = 851, + VREvent_ReprojectionSettingHasChanged = 852, + VREvent_ModelSkinSettingsHaveChanged = 853, + VREvent_EnvironmentSettingsHaveChanged = 854, + VREvent_PowerSettingsHaveChanged = 855, + VREvent_EnableHomeAppSettingsHaveChanged = 856, + VREvent_SteamVRSectionSettingChanged = 857, + VREvent_LighthouseSectionSettingChanged = 858, + VREvent_NullSectionSettingChanged = 859, + VREvent_UserInterfaceSectionSettingChanged = 860, + VREvent_NotificationsSectionSettingChanged = 861, + VREvent_KeyboardSectionSettingChanged = 862, + VREvent_PerfSectionSettingChanged = 863, + VREvent_DashboardSectionSettingChanged = 864, + VREvent_WebInterfaceSectionSettingChanged = 865, + VREvent_TrackersSectionSettingChanged = 866, + VREvent_LastKnownSectionSettingChanged = 867, + VREvent_DismissedWarningsSectionSettingChanged = 868, + VREvent_GpuSpeedSectionSettingChanged = 869, + VREvent_WindowsMRSectionSettingChanged = 870, + VREvent_OtherSectionSettingChanged = 871, + + VREvent_StatusUpdate = 900, + + VREvent_WebInterface_InstallDriverCompleted = 950, + + VREvent_MCImageUpdated = 1000, + + VREvent_FirmwareUpdateStarted = 1100, + VREvent_FirmwareUpdateFinished = 1101, + + VREvent_KeyboardClosed = 1200, + VREvent_KeyboardCharInput = 1201, + VREvent_KeyboardDone = 1202, // Sent when DONE button clicked on keyboard + + //VREvent_ApplicationTransitionStarted = 1300, + //VREvent_ApplicationTransitionAborted = 1301, + //VREvent_ApplicationTransitionNewAppStarted = 1302, + VREvent_ApplicationListUpdated = 1303, + VREvent_ApplicationMimeTypeLoad = 1304, + // VREvent_ApplicationTransitionNewAppLaunchComplete = 1305, + VREvent_ProcessConnected = 1306, + VREvent_ProcessDisconnected = 1307, + + //VREvent_Compositor_MirrorWindowShown = 1400, // DEPRECATED + //VREvent_Compositor_MirrorWindowHidden = 1401, // DEPRECATED + VREvent_Compositor_ChaperoneBoundsShown = 1410, + VREvent_Compositor_ChaperoneBoundsHidden = 1411, + VREvent_Compositor_DisplayDisconnected = 1412, + VREvent_Compositor_DisplayReconnected = 1413, + VREvent_Compositor_HDCPError = 1414, // data is hdcpError + VREvent_Compositor_ApplicationNotResponding = 1415, + VREvent_Compositor_ApplicationResumed = 1416, + VREvent_Compositor_OutOfVideoMemory = 1417, + VREvent_Compositor_DisplayModeNotSupported = 1418, // k_pch_SteamVR_PreferredRefreshRate + VREvent_Compositor_StageOverrideReady = 1419, + + VREvent_TrackedCamera_StartVideoStream = 1500, + VREvent_TrackedCamera_StopVideoStream = 1501, + VREvent_TrackedCamera_PauseVideoStream = 1502, + VREvent_TrackedCamera_ResumeVideoStream = 1503, + VREvent_TrackedCamera_EditingSurface = 1550, + + VREvent_PerformanceTest_EnableCapture = 1600, + VREvent_PerformanceTest_DisableCapture = 1601, + VREvent_PerformanceTest_FidelityLevel = 1602, + + VREvent_MessageOverlay_Closed = 1650, + VREvent_MessageOverlayCloseRequested = 1651, + + VREvent_Input_HapticVibration = 1700, // data is hapticVibration + VREvent_Input_BindingLoadFailed = 1701, // data is inputBinding + VREvent_Input_BindingLoadSuccessful = 1702, // data is inputBinding + VREvent_Input_ActionManifestReloaded = 1703, // no data + VREvent_Input_ActionManifestLoadFailed = 1704, // data is actionManifest + VREvent_Input_ProgressUpdate = 1705, // data is progressUpdate + VREvent_Input_TrackerActivated = 1706, + VREvent_Input_BindingsUpdated = 1707, + VREvent_Input_BindingSubscriptionChanged = 1708, + + VREvent_SpatialAnchors_PoseUpdated = 1800, // data is spatialAnchor. broadcast + VREvent_SpatialAnchors_DescriptorUpdated = 1801, // data is spatialAnchor. broadcast + VREvent_SpatialAnchors_RequestPoseUpdate = 1802, // data is spatialAnchor. sent to specific driver + VREvent_SpatialAnchors_RequestDescriptorUpdate = 1803, // data is spatialAnchor. sent to specific driver + + VREvent_SystemReport_Started = 1900, // user or system initiated generation of a system report. broadcast + + VREvent_Monitor_ShowHeadsetView = 2000, // data is process + VREvent_Monitor_HideHeadsetView = 2001, // data is process + + // Vendors are free to expose private events in this reserved region + VREvent_VendorSpecific_Reserved_Start = 10000, + VREvent_VendorSpecific_Reserved_End = 19999, +}; + + +/** Level of Hmd activity */ +// UserInteraction_Timeout means the device is in the process of timing out. +// InUse = ( k_EDeviceActivityLevel_UserInteraction || k_EDeviceActivityLevel_UserInteraction_Timeout ) +// VREvent_TrackedDeviceUserInteractionStarted fires when the devices transitions from Standby -> UserInteraction or Idle -> UserInteraction. +// VREvent_TrackedDeviceUserInteractionEnded fires when the devices transitions from UserInteraction_Timeout -> Idle +enum EDeviceActivityLevel +{ + k_EDeviceActivityLevel_Unknown = -1, + k_EDeviceActivityLevel_Idle = 0, // No activity for the last 10 seconds + k_EDeviceActivityLevel_UserInteraction = 1, // Activity (movement or prox sensor) is happening now + k_EDeviceActivityLevel_UserInteraction_Timeout = 2, // No activity for the last 0.5 seconds + k_EDeviceActivityLevel_Standby = 3, // Idle for at least 5 seconds (configurable in Settings -> Power Management) + k_EDeviceActivityLevel_Idle_Timeout = 4, +}; + + +/** VR controller button and axis IDs */ +enum EVRButtonId +{ + k_EButton_System = 0, + k_EButton_ApplicationMenu = 1, + k_EButton_Grip = 2, + k_EButton_DPad_Left = 3, + k_EButton_DPad_Up = 4, + k_EButton_DPad_Right = 5, + k_EButton_DPad_Down = 6, + k_EButton_A = 7, + + k_EButton_ProximitySensor = 31, + + k_EButton_Axis0 = 32, + k_EButton_Axis1 = 33, + k_EButton_Axis2 = 34, + k_EButton_Axis3 = 35, + k_EButton_Axis4 = 36, + + // aliases for well known controllers + k_EButton_SteamVR_Touchpad = k_EButton_Axis0, + k_EButton_SteamVR_Trigger = k_EButton_Axis1, + + k_EButton_Dashboard_Back = k_EButton_Grip, + + k_EButton_IndexController_A = k_EButton_Grip, + k_EButton_IndexController_B = k_EButton_ApplicationMenu, + k_EButton_IndexController_JoyStick = k_EButton_Axis3, + + k_EButton_Max = 64 +}; + +inline uint64_t ButtonMaskFromId( EVRButtonId id ) { return 1ull << id; } + +/** used for controller button events */ +struct VREvent_Controller_t +{ + uint32_t button; // EVRButtonId enum +}; + + +/** used for simulated mouse events in overlay space */ +enum EVRMouseButton +{ + VRMouseButton_Left = 0x0001, + VRMouseButton_Right = 0x0002, + VRMouseButton_Middle = 0x0004, +}; + + +/** used for simulated mouse events in overlay space */ +struct VREvent_Mouse_t +{ + float x, y; // co-ords are in GL space, bottom left of the texture is 0,0 + uint32_t button; // EVRMouseButton enum +}; + +/** used for simulated mouse wheel scroll */ +struct VREvent_Scroll_t +{ + float xdelta, ydelta; + uint32_t unused; + float viewportscale; // For scrolling on an overlay with laser mouse, this is the overlay's vertical size relative to the overlay height. Range: [0,1] +}; + +/** when in mouse input mode you can receive data from the touchpad, these events are only sent if the users finger + is on the touchpad (or just released from it). These events are sent to overlays with the VROverlayFlags_SendVRTouchpadEvents + flag set. +**/ +struct VREvent_TouchPadMove_t +{ + // true if the users finger is detected on the touch pad + bool bFingerDown; + + // How long the finger has been down in seconds + float flSecondsFingerDown; + + // These values indicate the starting finger position (so you can do some basic swipe stuff) + float fValueXFirst; + float fValueYFirst; + + // This is the raw sampled coordinate without deadzoning + float fValueXRaw; + float fValueYRaw; +}; + +/** notification related events. Details will still change at this point */ +struct VREvent_Notification_t +{ + uint64_t ulUserValue; + uint32_t notificationId; +}; + +/** Used for events about processes */ +struct VREvent_Process_t +{ + uint32_t pid; + uint32_t oldPid; + bool bForced; + // If the associated event was triggered by a connection loss + bool bConnectionLost; +}; + + +/** Used for a few events about overlays */ +struct VREvent_Overlay_t +{ + uint64_t overlayHandle; + uint64_t devicePath; + uint64_t memoryBlockId; +}; + + +/** Used for a few events about overlays */ +struct VREvent_Status_t +{ + uint32_t statusState; // EVRState enum +}; + +/** Used for keyboard events **/ +struct VREvent_Keyboard_t +{ + char cNewInput[8]; // Up to 11 bytes of new input + uint64_t uUserValue; // Possible flags about the new input +}; + +struct VREvent_Ipd_t +{ + float ipdMeters; +}; + +struct VREvent_Chaperone_t +{ + uint64_t m_nPreviousUniverse; + uint64_t m_nCurrentUniverse; +}; + +/** Not actually used for any events */ +struct VREvent_Reserved_t +{ + uint64_t reserved0; + uint64_t reserved1; + uint64_t reserved2; + uint64_t reserved3; + uint64_t reserved4; + uint64_t reserved5; +}; + +struct VREvent_PerformanceTest_t +{ + uint32_t m_nFidelityLevel; +}; + +struct VREvent_SeatedZeroPoseReset_t +{ + bool bResetBySystemMenu; +}; + +struct VREvent_Screenshot_t +{ + uint32_t handle; + uint32_t type; +}; + +struct VREvent_ScreenshotProgress_t +{ + float progress; +}; + +struct VREvent_ApplicationLaunch_t +{ + uint32_t pid; + uint32_t unArgsHandle; +}; + +struct VREvent_EditingCameraSurface_t +{ + uint64_t overlayHandle; + uint32_t nVisualMode; +}; + +struct VREvent_MessageOverlay_t +{ + uint32_t unVRMessageOverlayResponse; // vr::VRMessageOverlayResponse enum +}; + +struct VREvent_Property_t +{ + PropertyContainerHandle_t container; + ETrackedDeviceProperty prop; +}; + +struct VREvent_HapticVibration_t +{ + uint64_t containerHandle; // property container handle of the device with the haptic component + uint64_t componentHandle; // Which haptic component needs to vibrate + float fDurationSeconds; + float fFrequency; + float fAmplitude; +}; + +struct VREvent_WebConsole_t +{ + WebConsoleHandle_t webConsoleHandle; +}; + +struct VREvent_InputBindingLoad_t +{ + vr::PropertyContainerHandle_t ulAppContainer; + uint64_t pathMessage; + uint64_t pathUrl; + uint64_t pathControllerType; +}; + +struct VREvent_InputActionManifestLoad_t +{ + uint64_t pathAppKey; + uint64_t pathMessage; + uint64_t pathMessageParam; + uint64_t pathManifestPath; +}; + +struct VREvent_SpatialAnchor_t +{ + SpatialAnchorHandle_t unHandle; +}; + +struct VREvent_ProgressUpdate_t +{ + uint64_t ulApplicationPropertyContainer; + uint64_t pathDevice; + uint64_t pathInputSource; + uint64_t pathProgressAction; + uint64_t pathIcon; + float fProgress; +}; + +enum EShowUIType +{ + ShowUI_ControllerBinding = 0, + ShowUI_ManageTrackers = 1, + // ShowUI_QuickStart = 2, // Deprecated + ShowUI_Pairing = 3, + ShowUI_Settings = 4, + ShowUI_DebugCommands = 5, + ShowUI_FullControllerBinding = 6, + ShowUI_ManageDrivers = 7, +}; + +struct VREvent_ShowUI_t +{ + EShowUIType eType; +}; + +struct VREvent_ShowDevTools_t +{ + int32_t nBrowserIdentifier; +}; + +enum EHDCPError +{ + HDCPError_None = 0, + HDCPError_LinkLost = 1, + HDCPError_Tampered = 2, + HDCPError_DeviceRevoked = 3, + HDCPError_Unknown = 4 +}; + +struct VREvent_HDCPError_t +{ + EHDCPError eCode; +}; + +typedef union +{ + VREvent_Reserved_t reserved; + VREvent_Controller_t controller; + VREvent_Mouse_t mouse; + VREvent_Scroll_t scroll; + VREvent_Process_t process; + VREvent_Notification_t notification; + VREvent_Overlay_t overlay; + VREvent_Status_t status; + VREvent_Keyboard_t keyboard; + VREvent_Ipd_t ipd; + VREvent_Chaperone_t chaperone; + VREvent_PerformanceTest_t performanceTest; + VREvent_TouchPadMove_t touchPadMove; + VREvent_SeatedZeroPoseReset_t seatedZeroPoseReset; + VREvent_Screenshot_t screenshot; + VREvent_ScreenshotProgress_t screenshotProgress; + VREvent_ApplicationLaunch_t applicationLaunch; + VREvent_EditingCameraSurface_t cameraSurface; + VREvent_MessageOverlay_t messageOverlay; + VREvent_Property_t property; + VREvent_HapticVibration_t hapticVibration; + VREvent_WebConsole_t webConsole; + VREvent_InputBindingLoad_t inputBinding; + VREvent_InputActionManifestLoad_t actionManifest; + VREvent_SpatialAnchor_t spatialAnchor; + VREvent_ProgressUpdate_t progressUpdate; + VREvent_ShowUI_t showUi; + VREvent_ShowDevTools_t showDevTools; + VREvent_HDCPError_t hdcpError; + /** NOTE!!! If you change this you MUST manually update openvr_interop.cs.py */ +} VREvent_Data_t; + + +#if defined(__linux__) || defined(__APPLE__) +// This structure was originally defined mis-packed on Linux, preserved for +// compatibility. +#pragma pack( push, 4 ) +#endif + +/** An event posted by the server to all running applications */ +struct VREvent_t +{ + uint32_t eventType; // EVREventType enum + TrackedDeviceIndex_t trackedDeviceIndex; + float eventAgeSeconds; + // event data must be the end of the struct as its size is variable + VREvent_Data_t data; +}; + +#if defined(__linux__) || defined(__APPLE__) +#pragma pack( pop ) +#endif + +typedef uint32_t VRComponentProperties; + +enum EVRComponentProperty +{ + VRComponentProperty_IsStatic = (1 << 0), + VRComponentProperty_IsVisible = (1 << 1), + VRComponentProperty_IsTouched = (1 << 2), + VRComponentProperty_IsPressed = (1 << 3), + VRComponentProperty_IsScrolled = (1 << 4), + VRComponentProperty_IsHighlighted = (1 << 5), +}; + + +/** Describes state information about a render-model component, including transforms and other dynamic properties */ +struct RenderModel_ComponentState_t +{ + HmdMatrix34_t mTrackingToComponentRenderModel; // Transform required when drawing the component render model + HmdMatrix34_t mTrackingToComponentLocal; // Transform available for attaching to a local component coordinate system (-Z out from surface ) + VRComponentProperties uProperties; +}; + + +enum EVRInputError +{ + VRInputError_None = 0, + VRInputError_NameNotFound = 1, + VRInputError_WrongType = 2, + VRInputError_InvalidHandle = 3, + VRInputError_InvalidParam = 4, + VRInputError_NoSteam = 5, + VRInputError_MaxCapacityReached = 6, + VRInputError_IPCError = 7, + VRInputError_NoActiveActionSet = 8, + VRInputError_InvalidDevice = 9, + VRInputError_InvalidSkeleton = 10, + VRInputError_InvalidBoneCount = 11, + VRInputError_InvalidCompressedData = 12, + VRInputError_NoData = 13, + VRInputError_BufferTooSmall = 14, + VRInputError_MismatchedActionManifest = 15, + VRInputError_MissingSkeletonData = 16, + VRInputError_InvalidBoneIndex = 17, + VRInputError_InvalidPriority = 18, + VRInputError_PermissionDenied = 19, + VRInputError_InvalidRenderModel = 20, +}; + +enum EVRSpatialAnchorError +{ + VRSpatialAnchorError_Success = 0, + VRSpatialAnchorError_Internal = 1, + VRSpatialAnchorError_UnknownHandle = 2, + VRSpatialAnchorError_ArrayTooSmall = 3, + VRSpatialAnchorError_InvalidDescriptorChar = 4, + VRSpatialAnchorError_NotYetAvailable = 5, + VRSpatialAnchorError_NotAvailableInThisUniverse = 6, + VRSpatialAnchorError_PermanentlyUnavailable = 7, + VRSpatialAnchorError_WrongDriver = 8, + VRSpatialAnchorError_DescriptorTooLong = 9, + VRSpatialAnchorError_Unknown = 10, + VRSpatialAnchorError_NoRoomCalibration = 11, + VRSpatialAnchorError_InvalidArgument = 12, + VRSpatialAnchorError_UnknownDriver = 13, +}; + +/** The mesh to draw into the stencil (or depth) buffer to perform +* early stencil (or depth) kills of pixels that will never appear on the HMD. +* This mesh draws on all the pixels that will be hidden after distortion. +* +* If the HMD does not provide a visible area mesh pVertexData will be +* NULL and unTriangleCount will be 0. */ +struct HiddenAreaMesh_t +{ + const HmdVector2_t *pVertexData; + uint32_t unTriangleCount; +}; + + +enum EHiddenAreaMeshType +{ + k_eHiddenAreaMesh_Standard = 0, + k_eHiddenAreaMesh_Inverse = 1, + k_eHiddenAreaMesh_LineLoop = 2, + + k_eHiddenAreaMesh_Max = 3, +}; + + +/** Identifies what kind of axis is on the controller at index n. Read this type +* with pVRSystem->Get( nControllerDeviceIndex, Prop_Axis0Type_Int32 + n ); +*/ +enum EVRControllerAxisType +{ + k_eControllerAxis_None = 0, + k_eControllerAxis_TrackPad = 1, + k_eControllerAxis_Joystick = 2, + k_eControllerAxis_Trigger = 3, // Analog trigger data is in the X axis +}; + + +/** contains information about one axis on the controller */ +struct VRControllerAxis_t +{ + float x; // Ranges from -1.0 to 1.0 for joysticks and track pads. Ranges from 0.0 to 1.0 for triggers were 0 is fully released. + float y; // Ranges from -1.0 to 1.0 for joysticks and track pads. Is always 0.0 for triggers. +}; + + +/** the number of axes in the controller state */ +static const uint32_t k_unControllerStateAxisCount = 5; + + +#if defined(__linux__) || defined(__APPLE__) +// This structure was originally defined mis-packed on Linux, preserved for +// compatibility. +#pragma pack( push, 4 ) +#endif + +/** Holds all the state of a controller at one moment in time. */ +struct VRControllerState001_t +{ + // If packet num matches that on your prior call, then the controller state hasn't been changed since + // your last call and there is no need to process it + uint32_t unPacketNum; + + // bit flags for each of the buttons. Use ButtonMaskFromId to turn an ID into a mask + uint64_t ulButtonPressed; + uint64_t ulButtonTouched; + + // Axis data for the controller's analog inputs + VRControllerAxis_t rAxis[ k_unControllerStateAxisCount ]; +}; +#if defined(__linux__) || defined(__APPLE__) +#pragma pack( pop ) +#endif + + +typedef VRControllerState001_t VRControllerState_t; + + +/** determines how to provide output to the application of various event processing functions. */ +enum EVRControllerEventOutputType +{ + ControllerEventOutput_OSEvents = 0, + ControllerEventOutput_VREvents = 1, +}; + + + +/** Collision Bounds Style */ +enum ECollisionBoundsStyle +{ + COLLISION_BOUNDS_STYLE_BEGINNER = 0, + COLLISION_BOUNDS_STYLE_INTERMEDIATE, + COLLISION_BOUNDS_STYLE_SQUARES, + COLLISION_BOUNDS_STYLE_ADVANCED, + COLLISION_BOUNDS_STYLE_NONE, + + COLLISION_BOUNDS_STYLE_COUNT +}; + +/** used to refer to a single VR overlay */ +typedef uint64_t VROverlayHandle_t; + +static const VROverlayHandle_t k_ulOverlayHandleInvalid = 0; + +/** Errors that can occur around VR overlays */ +enum EVROverlayError +{ + VROverlayError_None = 0, + + VROverlayError_UnknownOverlay = 10, + VROverlayError_InvalidHandle = 11, + VROverlayError_PermissionDenied = 12, + VROverlayError_OverlayLimitExceeded = 13, // No more overlays could be created because the maximum number already exist + VROverlayError_WrongVisibilityType = 14, + VROverlayError_KeyTooLong = 15, + VROverlayError_NameTooLong = 16, + VROverlayError_KeyInUse = 17, + VROverlayError_WrongTransformType = 18, + VROverlayError_InvalidTrackedDevice = 19, + VROverlayError_InvalidParameter = 20, + VROverlayError_ThumbnailCantBeDestroyed = 21, + VROverlayError_ArrayTooSmall = 22, + VROverlayError_RequestFailed = 23, + VROverlayError_InvalidTexture = 24, + VROverlayError_UnableToLoadFile = 25, + VROverlayError_KeyboardAlreadyInUse = 26, + VROverlayError_NoNeighbor = 27, + VROverlayError_TooManyMaskPrimitives = 29, + VROverlayError_BadMaskPrimitive = 30, + VROverlayError_TextureAlreadyLocked = 31, + VROverlayError_TextureLockCapacityReached = 32, + VROverlayError_TextureNotLocked = 33, +}; + +/** enum values to pass in to VR_Init to identify whether the application will +* draw a 3D scene. */ +enum EVRApplicationType +{ + VRApplication_Other = 0, // Some other kind of application that isn't covered by the other entries + VRApplication_Scene = 1, // Application will submit 3D frames + VRApplication_Overlay = 2, // Application only interacts with overlays + VRApplication_Background = 3, // Application should not start SteamVR if it's not already running, and should not + // keep it running if everything else quits. + VRApplication_Utility = 4, // Init should not try to load any drivers. The application needs access to utility + // interfaces (like IVRSettings and IVRApplications) but not hardware. + VRApplication_VRMonitor = 5, // Reserved for vrmonitor + VRApplication_SteamWatchdog = 6,// Reserved for Steam + VRApplication_Bootstrapper = 7, // reserved for vrstartup + VRApplication_WebHelper = 8, // reserved for vrwebhelper + VRApplication_OpenXRInstance = 9, // reserved for openxr (created instance, but not session yet) + VRApplication_OpenXRScene = 10, // reserved for openxr (started session) + VRApplication_OpenXROverlay = 11, // reserved for openxr (started overlay session) + VRApplication_Prism = 12, // reserved for the vrprismhost process + + VRApplication_Max +}; + + +/** returns true if the specified application type is one of the +* OpenXR types */ +inline bool IsOpenXRAppType( EVRApplicationType eType ) +{ + return eType == VRApplication_OpenXRInstance + || eType == VRApplication_OpenXRScene + || eType == VRApplication_OpenXROverlay; +} + + +/** error codes for firmware */ +enum EVRFirmwareError +{ + VRFirmwareError_None = 0, + VRFirmwareError_Success = 1, + VRFirmwareError_Fail = 2, +}; + + +/** error codes for notifications */ +enum EVRNotificationError +{ + VRNotificationError_OK = 0, + VRNotificationError_InvalidNotificationId = 100, + VRNotificationError_NotificationQueueFull = 101, + VRNotificationError_InvalidOverlayHandle = 102, + VRNotificationError_SystemWithUserValueAlreadyExists = 103, +}; + + +enum EVRSkeletalMotionRange +{ + // The range of motion of the skeleton takes into account any physical limits imposed by + // the controller itself. This will tend to be the most accurate pose compared to the user's + // actual hand pose, but might not allow a closed fist for example + VRSkeletalMotionRange_WithController = 0, + + // Retarget the range of motion provided by the input device to make the hand appear to move + // as if it was not holding a controller. eg: map "hand grasping controller" to "closed fist" + VRSkeletalMotionRange_WithoutController = 1, +}; + +enum EVRSkeletalTrackingLevel +{ + // body part location can't be directly determined by the device. Any skeletal pose provided by + // the device is estimated by assuming the position required to active buttons, triggers, joysticks, + // or other input sensors. + // E.g. Vive Controller, Gamepad + VRSkeletalTracking_Estimated = 0, + + // body part location can be measured directly but with fewer degrees of freedom than the actual body + // part. Certain body part positions may be unmeasured by the device and estimated from other input data. + // E.g. Index Controllers, gloves that only measure finger curl + VRSkeletalTracking_Partial = 1, + + // Body part location can be measured directly throughout the entire range of motion of the body part. + // E.g. Mocap suit for the full body, gloves that measure rotation of each finger segment + VRSkeletalTracking_Full = 2, + + VRSkeletalTrackingLevel_Count, + VRSkeletalTrackingLevel_Max = VRSkeletalTrackingLevel_Count - 1 +}; + + +/** Type used for referring to bones by their index */ +typedef int32_t BoneIndex_t; +const BoneIndex_t k_unInvalidBoneIndex = -1; + + +/** error codes returned by Vr_Init */ + +// Please add adequate error description to https://developer.valvesoftware.com/w/index.php?title=Category:SteamVRHelp +enum EVRInitError +{ + VRInitError_None = 0, + VRInitError_Unknown = 1, + + VRInitError_Init_InstallationNotFound = 100, + VRInitError_Init_InstallationCorrupt = 101, + VRInitError_Init_VRClientDLLNotFound = 102, + VRInitError_Init_FileNotFound = 103, + VRInitError_Init_FactoryNotFound = 104, + VRInitError_Init_InterfaceNotFound = 105, + VRInitError_Init_InvalidInterface = 106, + VRInitError_Init_UserConfigDirectoryInvalid = 107, + VRInitError_Init_HmdNotFound = 108, + VRInitError_Init_NotInitialized = 109, + VRInitError_Init_PathRegistryNotFound = 110, + VRInitError_Init_NoConfigPath = 111, + VRInitError_Init_NoLogPath = 112, + VRInitError_Init_PathRegistryNotWritable = 113, + VRInitError_Init_AppInfoInitFailed = 114, + VRInitError_Init_Retry = 115, // Used internally to cause retries to vrserver + VRInitError_Init_InitCanceledByUser = 116, // The calling application should silently exit. The user canceled app startup + VRInitError_Init_AnotherAppLaunching = 117, + VRInitError_Init_SettingsInitFailed = 118, + VRInitError_Init_ShuttingDown = 119, + VRInitError_Init_TooManyObjects = 120, + VRInitError_Init_NoServerForBackgroundApp = 121, + VRInitError_Init_NotSupportedWithCompositor = 122, + VRInitError_Init_NotAvailableToUtilityApps = 123, + VRInitError_Init_Internal = 124, + VRInitError_Init_HmdDriverIdIsNone = 125, + VRInitError_Init_HmdNotFoundPresenceFailed = 126, + VRInitError_Init_VRMonitorNotFound = 127, + VRInitError_Init_VRMonitorStartupFailed = 128, + VRInitError_Init_LowPowerWatchdogNotSupported = 129, + VRInitError_Init_InvalidApplicationType = 130, + VRInitError_Init_NotAvailableToWatchdogApps = 131, + VRInitError_Init_WatchdogDisabledInSettings = 132, + VRInitError_Init_VRDashboardNotFound = 133, + VRInitError_Init_VRDashboardStartupFailed = 134, + VRInitError_Init_VRHomeNotFound = 135, + VRInitError_Init_VRHomeStartupFailed = 136, + VRInitError_Init_RebootingBusy = 137, + VRInitError_Init_FirmwareUpdateBusy = 138, + VRInitError_Init_FirmwareRecoveryBusy = 139, + VRInitError_Init_USBServiceBusy = 140, + VRInitError_Init_VRWebHelperStartupFailed = 141, + VRInitError_Init_TrackerManagerInitFailed = 142, + VRInitError_Init_AlreadyRunning = 143, + VRInitError_Init_FailedForVrMonitor = 144, + VRInitError_Init_PropertyManagerInitFailed = 145, + VRInitError_Init_WebServerFailed = 146, + VRInitError_Init_IllegalTypeTransition = 147, + VRInitError_Init_MismatchedRuntimes = 148, + VRInitError_Init_InvalidProcessId = 149, + VRInitError_Init_VRServiceStartupFailed = 150, + VRInitError_Init_PrismNeedsNewDrivers = 151, + VRInitError_Init_PrismStartupTimedOut = 152, + VRInitError_Init_CouldNotStartPrism = 153, + VRInitError_Init_CreateDriverDirectDeviceFailed = 154, + VRInitError_Init_PrismExitedUnexpectedly = 155, + + VRInitError_Driver_Failed = 200, + VRInitError_Driver_Unknown = 201, + VRInitError_Driver_HmdUnknown = 202, + VRInitError_Driver_NotLoaded = 203, + VRInitError_Driver_RuntimeOutOfDate = 204, + VRInitError_Driver_HmdInUse = 205, + VRInitError_Driver_NotCalibrated = 206, + VRInitError_Driver_CalibrationInvalid = 207, + VRInitError_Driver_HmdDisplayNotFound = 208, + VRInitError_Driver_TrackedDeviceInterfaceUnknown = 209, + // VRInitError_Driver_HmdDisplayNotFoundAfterFix = 210, // not needed: here for historic reasons + VRInitError_Driver_HmdDriverIdOutOfBounds = 211, + VRInitError_Driver_HmdDisplayMirrored = 212, + VRInitError_Driver_HmdDisplayNotFoundLaptop = 213, + // Never make error 259 because we return it from main and it would conflict with STILL_ACTIVE + + VRInitError_IPC_ServerInitFailed = 300, + VRInitError_IPC_ConnectFailed = 301, + VRInitError_IPC_SharedStateInitFailed = 302, + VRInitError_IPC_CompositorInitFailed = 303, + VRInitError_IPC_MutexInitFailed = 304, + VRInitError_IPC_Failed = 305, + VRInitError_IPC_CompositorConnectFailed = 306, + VRInitError_IPC_CompositorInvalidConnectResponse = 307, + VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308, + VRInitError_IPC_ConnectFailedAfterTargetExited = 309, + VRInitError_IPC_NamespaceUnavailable = 310, + + VRInitError_Compositor_Failed = 400, + VRInitError_Compositor_D3D11HardwareRequired = 401, + VRInitError_Compositor_FirmwareRequiresUpdate = 402, + VRInitError_Compositor_OverlayInitFailed = 403, + VRInitError_Compositor_ScreenshotsInitFailed = 404, + VRInitError_Compositor_UnableToCreateDevice = 405, + VRInitError_Compositor_SharedStateIsNull = 406, + VRInitError_Compositor_NotificationManagerIsNull = 407, + VRInitError_Compositor_ResourceManagerClientIsNull = 408, + VRInitError_Compositor_MessageOverlaySharedStateInitFailure = 409, + VRInitError_Compositor_PropertiesInterfaceIsNull = 410, + VRInitError_Compositor_CreateFullscreenWindowFailed = 411, + VRInitError_Compositor_SettingsInterfaceIsNull = 412, + VRInitError_Compositor_FailedToShowWindow = 413, + VRInitError_Compositor_DistortInterfaceIsNull = 414, + VRInitError_Compositor_DisplayFrequencyFailure = 415, + VRInitError_Compositor_RendererInitializationFailed = 416, + VRInitError_Compositor_DXGIFactoryInterfaceIsNull = 417, + VRInitError_Compositor_DXGIFactoryCreateFailed = 418, + VRInitError_Compositor_DXGIFactoryQueryFailed = 419, + VRInitError_Compositor_InvalidAdapterDesktop = 420, + VRInitError_Compositor_InvalidHmdAttachment = 421, + VRInitError_Compositor_InvalidOutputDesktop = 422, + VRInitError_Compositor_InvalidDeviceProvided = 423, + VRInitError_Compositor_D3D11RendererInitializationFailed = 424, + VRInitError_Compositor_FailedToFindDisplayMode = 425, + VRInitError_Compositor_FailedToCreateSwapChain = 426, + VRInitError_Compositor_FailedToGetBackBuffer = 427, + VRInitError_Compositor_FailedToCreateRenderTarget = 428, + VRInitError_Compositor_FailedToCreateDXGI2SwapChain = 429, + VRInitError_Compositor_FailedtoGetDXGI2BackBuffer = 430, + VRInitError_Compositor_FailedToCreateDXGI2RenderTarget = 431, + VRInitError_Compositor_FailedToGetDXGIDeviceInterface = 432, + VRInitError_Compositor_SelectDisplayMode = 433, + VRInitError_Compositor_FailedToCreateNvAPIRenderTargets = 434, + VRInitError_Compositor_NvAPISetDisplayMode = 435, + VRInitError_Compositor_FailedToCreateDirectModeDisplay = 436, + VRInitError_Compositor_InvalidHmdPropertyContainer = 437, + VRInitError_Compositor_UpdateDisplayFrequency = 438, + VRInitError_Compositor_CreateRasterizerState = 439, + VRInitError_Compositor_CreateWireframeRasterizerState = 440, + VRInitError_Compositor_CreateSamplerState = 441, + VRInitError_Compositor_CreateClampToBorderSamplerState = 442, + VRInitError_Compositor_CreateAnisoSamplerState = 443, + VRInitError_Compositor_CreateOverlaySamplerState = 444, + VRInitError_Compositor_CreatePanoramaSamplerState = 445, + VRInitError_Compositor_CreateFontSamplerState = 446, + VRInitError_Compositor_CreateNoBlendState = 447, + VRInitError_Compositor_CreateBlendState = 448, + VRInitError_Compositor_CreateAlphaBlendState = 449, + VRInitError_Compositor_CreateBlendStateMaskR = 450, + VRInitError_Compositor_CreateBlendStateMaskG = 451, + VRInitError_Compositor_CreateBlendStateMaskB = 452, + VRInitError_Compositor_CreateDepthStencilState = 453, + VRInitError_Compositor_CreateDepthStencilStateNoWrite = 454, + VRInitError_Compositor_CreateDepthStencilStateNoDepth = 455, + VRInitError_Compositor_CreateFlushTexture = 456, + VRInitError_Compositor_CreateDistortionSurfaces = 457, + VRInitError_Compositor_CreateConstantBuffer = 458, + VRInitError_Compositor_CreateHmdPoseConstantBuffer = 459, + VRInitError_Compositor_CreateHmdPoseStagingConstantBuffer = 460, + VRInitError_Compositor_CreateSharedFrameInfoConstantBuffer = 461, + VRInitError_Compositor_CreateOverlayConstantBuffer = 462, + VRInitError_Compositor_CreateSceneTextureIndexConstantBuffer = 463, + VRInitError_Compositor_CreateReadableSceneTextureIndexConstantBuffer = 464, + VRInitError_Compositor_CreateLayerGraphicsTextureIndexConstantBuffer = 465, + VRInitError_Compositor_CreateLayerComputeTextureIndexConstantBuffer = 466, + VRInitError_Compositor_CreateLayerComputeSceneTextureIndexConstantBuffer = 467, + VRInitError_Compositor_CreateComputeHmdPoseConstantBuffer = 468, + VRInitError_Compositor_CreateGeomConstantBuffer = 469, + VRInitError_Compositor_CreatePanelMaskConstantBuffer = 470, + VRInitError_Compositor_CreatePixelSimUBO = 471, + VRInitError_Compositor_CreateMSAARenderTextures = 472, + VRInitError_Compositor_CreateResolveRenderTextures = 473, + VRInitError_Compositor_CreateComputeResolveRenderTextures = 474, + VRInitError_Compositor_CreateDriverDirectModeResolveTextures = 475, + VRInitError_Compositor_OpenDriverDirectModeResolveTextures = 476, + VRInitError_Compositor_CreateFallbackSyncTexture = 477, + VRInitError_Compositor_ShareFallbackSyncTexture = 478, + VRInitError_Compositor_CreateOverlayIndexBuffer = 479, + VRInitError_Compositor_CreateOverlayVertexBuffer = 480, + VRInitError_Compositor_CreateTextVertexBuffer = 481, + VRInitError_Compositor_CreateTextIndexBuffer = 482, + VRInitError_Compositor_CreateMirrorTextures = 483, + VRInitError_Compositor_CreateLastFrameRenderTexture = 484, + VRInitError_Compositor_CreateMirrorOverlay = 485, + VRInitError_Compositor_FailedToCreateVirtualDisplayBackbuffer = 486, + VRInitError_Compositor_DisplayModeNotSupported = 487, + VRInitError_Compositor_CreateOverlayInvalidCall = 488, + VRInitError_Compositor_CreateOverlayAlreadyInitialized = 489, + VRInitError_Compositor_FailedToCreateMailbox = 490, + VRInitError_Compositor_WindowInterfaceIsNull = 491, + VRInitError_Compositor_SystemLayerCreateInstance = 492, + VRInitError_Compositor_SystemLayerCreateSession = 493, + + VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000, + VRInitError_VendorSpecific_WindowsNotInDevMode = 1001, + + VRInitError_VendorSpecific_HmdFound_CantOpenDevice = 1101, + VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102, + VRInitError_VendorSpecific_HmdFound_NoStoredConfig = 1103, + VRInitError_VendorSpecific_HmdFound_ConfigTooBig = 1104, + VRInitError_VendorSpecific_HmdFound_ConfigTooSmall = 1105, + VRInitError_VendorSpecific_HmdFound_UnableToInitZLib = 1106, + VRInitError_VendorSpecific_HmdFound_CantReadFirmwareVersion = 1107, + VRInitError_VendorSpecific_HmdFound_UnableToSendUserDataStart = 1108, + VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataStart = 1109, + VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataNext = 1110, + VRInitError_VendorSpecific_HmdFound_UserDataAddressRange = 1111, + VRInitError_VendorSpecific_HmdFound_UserDataError = 1112, + VRInitError_VendorSpecific_HmdFound_ConfigFailedSanityCheck = 1113, + VRInitError_VendorSpecific_OculusRuntimeBadInstall = 1114, + + VRInitError_Steam_SteamInstallationNotFound = 2000, + + // Strictly a placeholder + VRInitError_LastError +}; + +enum EVRScreenshotType +{ + VRScreenshotType_None = 0, + VRScreenshotType_Mono = 1, // left eye only + VRScreenshotType_Stereo = 2, + VRScreenshotType_Cubemap = 3, + VRScreenshotType_MonoPanorama = 4, + VRScreenshotType_StereoPanorama = 5 +}; + +enum EVRScreenshotPropertyFilenames +{ + VRScreenshotPropertyFilenames_Preview = 0, + VRScreenshotPropertyFilenames_VR = 1, +}; + +enum EVRTrackedCameraError +{ + VRTrackedCameraError_None = 0, + VRTrackedCameraError_OperationFailed = 100, + VRTrackedCameraError_InvalidHandle = 101, + VRTrackedCameraError_InvalidFrameHeaderVersion = 102, + VRTrackedCameraError_OutOfHandles = 103, + VRTrackedCameraError_IPCFailure = 104, + VRTrackedCameraError_NotSupportedForThisDevice = 105, + VRTrackedCameraError_SharedMemoryFailure = 106, + VRTrackedCameraError_FrameBufferingFailure = 107, + VRTrackedCameraError_StreamSetupFailure = 108, + VRTrackedCameraError_InvalidGLTextureId = 109, + VRTrackedCameraError_InvalidSharedTextureHandle = 110, + VRTrackedCameraError_FailedToGetGLTextureId = 111, + VRTrackedCameraError_SharedTextureFailure = 112, + VRTrackedCameraError_NoFrameAvailable = 113, + VRTrackedCameraError_InvalidArgument = 114, + VRTrackedCameraError_InvalidFrameBufferSize = 115, +}; + +enum EVRTrackedCameraFrameLayout +{ + EVRTrackedCameraFrameLayout_Mono = 0x0001, + EVRTrackedCameraFrameLayout_Stereo = 0x0002, + EVRTrackedCameraFrameLayout_VerticalLayout = 0x0010, // Stereo frames are Top/Bottom (left/right) + EVRTrackedCameraFrameLayout_HorizontalLayout = 0x0020, // Stereo frames are Left/Right +}; + +enum EVRTrackedCameraFrameType +{ + VRTrackedCameraFrameType_Distorted = 0, // This is the camera video frame size in pixels, still distorted. + VRTrackedCameraFrameType_Undistorted, // In pixels, an undistorted inscribed rectangle region without invalid regions. This size is subject to changes shortly. + VRTrackedCameraFrameType_MaximumUndistorted, // In pixels, maximum undistorted with invalid regions. Non zero alpha component identifies valid regions. + MAX_CAMERA_FRAME_TYPES +}; + +enum EVRDistortionFunctionType +{ + VRDistortionFunctionType_None, + VRDistortionFunctionType_FTheta, + VRDistortionFunctionType_Extended_FTheta, + MAX_DISTORTION_FUNCTION_TYPES, +}; + +static const uint32_t k_unMaxDistortionFunctionParameters = 8; + +typedef uint64_t TrackedCameraHandle_t; +#define INVALID_TRACKED_CAMERA_HANDLE ((vr::TrackedCameraHandle_t)0) + +struct CameraVideoStreamFrameHeader_t +{ + EVRTrackedCameraFrameType eFrameType; + + uint32_t nWidth; + uint32_t nHeight; + uint32_t nBytesPerPixel; + + uint32_t nFrameSequence; + + TrackedDevicePose_t trackedDevicePose; + + uint64_t ulFrameExposureTime; // mid-point of the exposure of the image in host system ticks +}; + +// Screenshot types +typedef uint32_t ScreenshotHandle_t; + +static const uint32_t k_unScreenshotHandleInvalid = 0; + +/** Compositor frame timing reprojection flags. */ +const uint32_t VRCompositor_ReprojectionReason_Cpu = 0x01; +const uint32_t VRCompositor_ReprojectionReason_Gpu = 0x02; +const uint32_t VRCompositor_ReprojectionAsync = 0x04; // This flag indicates the async reprojection mode is active, + // but does not indicate if reprojection actually happened or not. + // Use the ReprojectionReason flags above to check if reprojection + // was actually applied (i.e. scene texture was reused). + // NumFramePresents > 1 also indicates the scene texture was reused, + // and also the number of times that it was presented in total. + +const uint32_t VRCompositor_ReprojectionMotion = 0x08; // This flag indicates whether or not motion smoothing was triggered for this frame + +const uint32_t VRCompositor_PredictionMask = 0xF0; // The runtime may predict more than one frame (up to four) ahead if + // it detects the application is taking too long to render. These two + // bits will contain the count of additional frames (normally zero). + // Use the VR_COMPOSITOR_ADDITIONAL_PREDICTED_FRAMES macro to read from + // the latest frame timing entry. + +const uint32_t VRCompositor_ThrottleMask = 0xF00; // Number of frames the compositor is throttling the application. + // Use the VR_COMPOSITOR_NUMBER_OF_THROTTLED_FRAMES macro to read from + // the latest frame timing entry. + +#define VR_COMPOSITOR_ADDITIONAL_PREDICTED_FRAMES( timing ) ( ( ( timing ).m_nReprojectionFlags & vr::VRCompositor_PredictionMask ) >> 4 ) +#define VR_COMPOSITOR_NUMBER_OF_THROTTLED_FRAMES( timing ) ( ( ( timing ).m_nReprojectionFlags & vr::VRCompositor_ThrottleMask ) >> 8 ) + +/** Provides a single frame's timing information to the app */ +struct Compositor_FrameTiming +{ + uint32_t m_nSize; // Set to sizeof( Compositor_FrameTiming ) + uint32_t m_nFrameIndex; + uint32_t m_nNumFramePresents; // number of times this frame was presented + uint32_t m_nNumMisPresented; // number of times this frame was presented on a vsync other than it was originally predicted to + uint32_t m_nNumDroppedFrames; // number of additional times previous frame was scanned out + uint32_t m_nReprojectionFlags; + + /** Absolute time reference for comparing frames. This aligns with the vsync that running start is relative to. */ + double m_flSystemTimeInSeconds; + + /** These times may include work from other processes due to OS scheduling. + * The fewer packets of work these are broken up into, the less likely this will happen. + * GPU work can be broken up by calling Flush. This can sometimes be useful to get the GPU started + * processing that work earlier in the frame. */ + float m_flPreSubmitGpuMs; // time spent rendering the scene (gpu work submitted between WaitGetPoses and second Submit) + float m_flPostSubmitGpuMs; // additional time spent rendering by application (e.g. companion window) + float m_flTotalRenderGpuMs; // time between work submitted immediately after present (ideally vsync) until the end of compositor submitted work + float m_flCompositorRenderGpuMs; // time spend performing distortion correction, rendering chaperone, overlays, etc. + float m_flCompositorRenderCpuMs; // time spent on cpu submitting the above work for this frame + float m_flCompositorIdleCpuMs; // time spent waiting for running start (application could have used this much more time) + + /** Miscellaneous measured intervals. */ + float m_flClientFrameIntervalMs; // time between calls to WaitGetPoses + float m_flPresentCallCpuMs; // time blocked on call to present (usually 0.0, but can go long) + float m_flWaitForPresentCpuMs; // time spent spin-waiting for frame index to change (not near-zero indicates wait object failure) + float m_flSubmitFrameMs; // time spent in IVRCompositor::Submit (not near-zero indicates driver issue) + + /** The following are all relative to this frame's SystemTimeInSeconds */ + float m_flWaitGetPosesCalledMs; + float m_flNewPosesReadyMs; + float m_flNewFrameReadyMs; // second call to IVRCompositor::Submit + float m_flCompositorUpdateStartMs; + float m_flCompositorUpdateEndMs; + float m_flCompositorRenderStartMs; + + vr::TrackedDevicePose_t m_HmdPose; // pose used by app to render this frame + + uint32_t m_nNumVSyncsReadyForUse; + uint32_t m_nNumVSyncsToFirstView; +}; + +/** Provides compositor benchmark results to the app */ +struct Compositor_BenchmarkResults +{ + float m_flMegaPixelsPerSecond; // Measurement of GPU MP/s performed by compositor benchmark + float m_flHmdRecommendedMegaPixelsPerSecond; // Recommended default MP/s given the HMD resolution, refresh, and panel mask. +}; + +/** Frame timing data provided by direct mode drivers. */ +struct DriverDirectMode_FrameTiming +{ + uint32_t m_nSize; // Set to sizeof( DriverDirectMode_FrameTiming ) + uint32_t m_nNumFramePresents; // number of times frame was presented + uint32_t m_nNumMisPresented; // number of times frame was presented on a vsync other than it was originally predicted to + uint32_t m_nNumDroppedFrames; // number of additional times previous frame was scanned out (i.e. compositor missed vsync) + uint32_t m_nReprojectionFlags; +}; + +/** These flags will be set on DriverDirectMode_FrameTiming::m_nReprojectionFlags when IVRDriverDirectModeComponent::GetFrameTiming is called for drivers to optionally respond to. */ +const uint32_t VRCompositor_ReprojectionMotion_Enabled = 0x100; // Motion Smoothing is enabled in the UI for the currently running application +const uint32_t VRCompositor_ReprojectionMotion_ForcedOn = 0x200; // Motion Smoothing is forced on in the UI for the currently running application +const uint32_t VRCompositor_ReprojectionMotion_AppThrottled = 0x400; // Application is requesting throttling via ForceInterleavedReprojectionOn + + +enum EVSync +{ + VSync_None, + VSync_WaitRender, // block following render work until vsync + VSync_NoWaitRender, // do not block following render work (allow to get started early) +}; + +enum EVRMuraCorrectionMode +{ + EVRMuraCorrectionMode_Default = 0, + EVRMuraCorrectionMode_NoCorrection +}; + +/** raw IMU data provided by IVRIOBuffer from paths to tracked devices with IMUs */ +enum Imu_OffScaleFlags +{ + OffScale_AccelX = 0x01, + OffScale_AccelY = 0x02, + OffScale_AccelZ = 0x04, + OffScale_GyroX = 0x08, + OffScale_GyroY = 0x10, + OffScale_GyroZ = 0x20, +}; + +struct ImuSample_t +{ + double fSampleTime; + HmdVector3d_t vAccel; + HmdVector3d_t vGyro; + uint32_t unOffScaleFlags; +}; + +#pragma pack( pop ) + +// figure out how to import from the VR API dll +#if defined(_WIN32) + + #if !defined(OPENVR_BUILD_STATIC) + #ifdef VR_API_EXPORT + #define VR_INTERFACE extern "C" __declspec( dllexport ) + #else + #define VR_INTERFACE extern "C" __declspec( dllimport ) + #endif + #else + #define VR_INTERFACE extern "C" + #endif + +#elif defined(__GNUC__) || defined(COMPILER_GCC) || defined(__APPLE__) + +#ifdef VR_API_EXPORT + #define VR_INTERFACE extern "C" __attribute__((visibility("default"))) +#else + #define VR_INTERFACE extern "C" +#endif + +#else + #error "Unsupported Platform." +#endif + + +#if defined( _WIN32 ) + #define VR_CALLTYPE __cdecl +#else + #define VR_CALLTYPE +#endif + +} // namespace vr +#endif // _INCLUDE_VRTYPES_H + +// vrannotation.h + +#ifdef API_GEN +# define VR_CLANG_ATTR(ATTR) __attribute__((annotate( ATTR ))) +#else +# define VR_CLANG_ATTR(ATTR) +#endif + +#define VR_METHOD_DESC(DESC) VR_CLANG_ATTR( "desc:" #DESC ";" ) +#define VR_IGNOREATTR() VR_CLANG_ATTR( "ignore" ) +#define VR_OUT_STRUCT() VR_CLANG_ATTR( "out_struct: ;" ) +#define VR_OUT_STRING() VR_CLANG_ATTR( "out_string: ;" ) +#define VR_OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) VR_CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" ) +#define VR_OUT_ARRAY_COUNT(COUNTER) VR_CLANG_ATTR( "out_array_count:" #COUNTER ";" ) +#define VR_ARRAY_COUNT(COUNTER) VR_CLANG_ATTR( "array_count:" #COUNTER ";" ) +#define VR_ARRAY_COUNT_D(COUNTER, DESC) VR_CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC ) +#define VR_BUFFER_COUNT(COUNTER) VR_CLANG_ATTR( "buffer_count:" #COUNTER ";" ) +#define VR_OUT_BUFFER_COUNT(COUNTER) VR_CLANG_ATTR( "out_buffer_count:" #COUNTER ";" ) +#define VR_OUT_STRING_COUNT(COUNTER) VR_CLANG_ATTR( "out_string_count:" #COUNTER ";" ) + +// vrtrackedcameratypes.h + +#ifndef _VRTRACKEDCAMERATYPES_H +#define _VRTRACKEDCAMERATYPES_H + +namespace vr +{ + +#pragma pack( push, 8 ) + +enum ECameraVideoStreamFormat +{ + CVS_FORMAT_UNKNOWN = 0, + CVS_FORMAT_RAW10 = 1, // 10 bits per pixel + CVS_FORMAT_NV12 = 2, // 12 bits per pixel + CVS_FORMAT_RGB24 = 3, // 24 bits per pixel + CVS_FORMAT_NV12_2 = 4, // 12 bits per pixel, 2x height + CVS_FORMAT_YUYV16 = 5, // 16 bits per pixel + CVS_FORMAT_BAYER16BG = 6, // 16 bits per pixel, 10-bit BG-format Bayer, see https://docs.opencv.org/3.1.0/de/d25/imgproc_color_conversions.html + CVS_FORMAT_MJPEG = 7, // variable-sized MJPEG Open DML format, see https://www.loc.gov/preservation/digital/formats/fdd/fdd000063.shtml + CVS_MAX_FORMATS +}; + +enum ECameraCompatibilityMode +{ + CAMERA_COMPAT_MODE_BULK_DEFAULT = 0, + CAMERA_COMPAT_MODE_BULK_64K_DMA = 1, + CAMERA_COMPAT_MODE_BULK_16K_DMA = 2, + CAMERA_COMPAT_MODE_BULK_8K_DMA = 3, + CAMERA_COMPAT_MODE_ISO_52FPS = 4, + CAMERA_COMPAT_MODE_ISO_50FPS = 5, + CAMERA_COMPAT_MODE_ISO_48FPS = 6, + CAMERA_COMPAT_MODE_ISO_46FPS = 7, + CAMERA_COMPAT_MODE_ISO_44FPS = 8, + CAMERA_COMPAT_MODE_ISO_42FPS = 9, + CAMERA_COMPAT_MODE_ISO_40FPS = 10, + CAMERA_COMPAT_MODE_ISO_35FPS = 11, + CAMERA_COMPAT_MODE_ISO_30FPS = 12, + CAMERA_COMPAT_MODE_ISO_15FPS = 13, + MAX_CAMERA_COMPAT_MODES +}; + +enum ECameraRoomViewStyle +{ + CAMERA_ROOMVIEW_STYLE_DEFAULT = 0, + CAMERA_ROOMVIEW_STYLE_EDGE_A = 1, + CAMERA_ROOMVIEW_STYLE_EDGE_B = 2, + CAMERA_ROOMVIEW_STYLE_VIDEO_TRANSLUSCENT = 3, + CAMERA_ROOMVIEW_STYLE_VIDEO_OPAQUE = 4, + CAMERA_ROOMVIEW_STYLE_COUNT = 5, +}; + +#ifdef _MSC_VER +#define VR_CAMERA_DECL_ALIGN( x ) __declspec( align( x ) ) +#else +#define VR_CAMERA_DECL_ALIGN( x ) // +#endif + +static const uint32_t k_unMaxCameras = 4; +static const uint32_t k_unMaxCameraFrameSharedHandles = 4; + +VR_CAMERA_DECL_ALIGN( 8 ) struct CameraVideoStreamFrame_t +{ + ECameraVideoStreamFormat m_nStreamFormat; + + uint32_t m_nWidth; + uint32_t m_nHeight; + + uint32_t m_nImageDataSize; // Based on stream format, width, height + + uint32_t m_nFrameSequence; // Starts from 0 when stream starts. + + uint32_t m_nBufferIndex; // Identifies which buffer the image data is hosted + uint32_t m_nBufferCount; // Total number of configured buffers + + uint32_t m_nExposureTime; + + uint32_t m_nISPFrameTimeStamp; // Driver provided time stamp per driver centric time base + uint32_t m_nISPReferenceTimeStamp; + uint32_t m_nSyncCounter; + + uint32_t m_nCamSyncEvents; + uint32_t m_nISPSyncEvents; + + double m_flReferenceCamSyncTime; + + double m_flFrameElapsedTime; // Starts from 0 when stream starts. In seconds. + double m_flFrameDeliveryRate; + + double m_flFrameCaptureTime_DriverAbsolute; // In USB time, via AuxEvent + double m_flFrameCaptureTime_ServerRelative; // In System time within the server + uint64_t m_nFrameCaptureTicks_ServerAbsolute; // In system ticks within the server + double m_flFrameCaptureTime_ClientRelative; // At the client, relative to when the frame was exposed/captured. + + double m_flSyncMarkerError; + + TrackedDevicePose_t m_RawTrackedDevicePose; // Raw-and-uncalibrated pose, supplied by HMD layer when used as a tracked camera + + uint64_t m_pImageData; +}; + +#pragma pack( pop ) + +} + +#endif // _VRTRACKEDCAMERATYPES_H + +// ivrsettings.h + +#include + +namespace vr +{ + enum EVRSettingsError + { + VRSettingsError_None = 0, + VRSettingsError_IPCFailed = 1, + VRSettingsError_WriteFailed = 2, + VRSettingsError_ReadFailed = 3, + VRSettingsError_JsonParseFailed = 4, + VRSettingsError_UnsetSettingHasNoDefault = 5, // This will be returned if the setting does not appear in the appropriate default file and has not been set + }; + + // The maximum length of a settings key + static const uint32_t k_unMaxSettingsKeyLength = 128; + + class IVRSettings + { + public: + virtual const char *GetSettingsErrorNameFromEnum( EVRSettingsError eError ) = 0; + + virtual void SetBool( const char *pchSection, const char *pchSettingsKey, bool bValue, EVRSettingsError *peError = nullptr ) = 0; + virtual void SetInt32( const char *pchSection, const char *pchSettingsKey, int32_t nValue, EVRSettingsError *peError = nullptr ) = 0; + virtual void SetFloat( const char *pchSection, const char *pchSettingsKey, float flValue, EVRSettingsError *peError = nullptr ) = 0; + virtual void SetString( const char *pchSection, const char *pchSettingsKey, const char *pchValue, EVRSettingsError *peError = nullptr ) = 0; + + // Users of the system need to provide a proper default in default.vrsettings in the resources/settings/ directory + // of either the runtime or the driver_xxx directory. Otherwise the default will be false, 0, 0.0 or "" + virtual bool GetBool( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0; + virtual int32_t GetInt32( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0; + virtual float GetFloat( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0; + virtual void GetString( const char *pchSection, const char *pchSettingsKey, VR_OUT_STRING() char *pchValue, uint32_t unValueLen, EVRSettingsError *peError = nullptr ) = 0; + + virtual void RemoveSection( const char *pchSection, EVRSettingsError *peError = nullptr ) = 0; + virtual void RemoveKeyInSection( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0; + }; + + //----------------------------------------------------------------------------- + static const char * const IVRSettings_Version = "IVRSettings_003"; + + class CVRSettingHelper + { + IVRSettings *m_pSettings; + public: + CVRSettingHelper( IVRSettings *pSettings ) + { + m_pSettings = pSettings; + } + + const char *GetSettingsErrorNameFromEnum( EVRSettingsError eError ) + { + return m_pSettings->GetSettingsErrorNameFromEnum( eError ); + } + + void SetBool( const char *pchSection, const char *pchSettingsKey, bool bValue, EVRSettingsError *peError = nullptr ) + { + m_pSettings->SetBool( pchSection, pchSettingsKey, bValue, peError ); + } + + void SetInt32( const char *pchSection, const char *pchSettingsKey, int32_t nValue, EVRSettingsError *peError = nullptr ) + { + m_pSettings->SetInt32( pchSection, pchSettingsKey, nValue, peError ); + } + void SetFloat( const char *pchSection, const char *pchSettingsKey, float flValue, EVRSettingsError *peError = nullptr ) + { + m_pSettings->SetFloat( pchSection, pchSettingsKey, flValue, peError ); + } + void SetString( const char *pchSection, const char *pchSettingsKey, const char *pchValue, EVRSettingsError *peError = nullptr ) + { + m_pSettings->SetString( pchSection, pchSettingsKey, pchValue, peError ); + } + void SetString( const std::string & sSection, const std::string & sSettingsKey, const std::string & sValue, EVRSettingsError *peError = nullptr ) + { + m_pSettings->SetString( sSection.c_str(), sSettingsKey.c_str(), sValue.c_str(), peError ); + } + + bool GetBool( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) + { + return m_pSettings->GetBool( pchSection, pchSettingsKey, peError ); + } + int32_t GetInt32( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) + { + return m_pSettings->GetInt32( pchSection, pchSettingsKey, peError ); + } + float GetFloat( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) + { + return m_pSettings->GetFloat( pchSection, pchSettingsKey, peError ); + } + void GetString( const char *pchSection, const char *pchSettingsKey, VR_OUT_STRING() char *pchValue, uint32_t unValueLen, EVRSettingsError *peError = nullptr ) + { + m_pSettings->GetString( pchSection, pchSettingsKey, pchValue, unValueLen, peError ); + } + std::string GetString( const std::string & sSection, const std::string & sSettingsKey, EVRSettingsError *peError = nullptr ) + { + char buf[4096]; + vr::EVRSettingsError eError; + m_pSettings->GetString( sSection.c_str(), sSettingsKey.c_str(), buf, sizeof( buf ), &eError ); + if ( peError ) + *peError = eError; + if ( eError == vr::VRSettingsError_None ) + return buf; + else + return ""; + } + + void RemoveSection( const char *pchSection, EVRSettingsError *peError = nullptr ) + { + m_pSettings->RemoveSection( pchSection, peError ); + } + void RemoveKeyInSection( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) + { + m_pSettings->RemoveKeyInSection( pchSection, pchSettingsKey, peError ); + } + }; + + + //----------------------------------------------------------------------------- + // steamvr keys + static const char * const k_pch_SteamVR_Section = "steamvr"; + static const char * const k_pch_SteamVR_RequireHmd_String = "requireHmd"; + static const char * const k_pch_SteamVR_ForcedDriverKey_String = "forcedDriver"; + static const char * const k_pch_SteamVR_ForcedHmdKey_String = "forcedHmd"; + static const char * const k_pch_SteamVR_DisplayDebug_Bool = "displayDebug"; + static const char * const k_pch_SteamVR_DebugProcessPipe_String = "debugProcessPipe"; + static const char * const k_pch_SteamVR_DisplayDebugX_Int32 = "displayDebugX"; + static const char * const k_pch_SteamVR_DisplayDebugY_Int32 = "displayDebugY"; + static const char * const k_pch_SteamVR_SendSystemButtonToAllApps_Bool= "sendSystemButtonToAllApps"; + static const char * const k_pch_SteamVR_LogLevel_Int32 = "loglevel"; + static const char * const k_pch_SteamVR_IPD_Float = "ipd"; + static const char * const k_pch_SteamVR_Background_String = "background"; + static const char * const k_pch_SteamVR_BackgroundUseDomeProjection_Bool = "backgroundUseDomeProjection"; + static const char * const k_pch_SteamVR_BackgroundCameraHeight_Float = "backgroundCameraHeight"; + static const char * const k_pch_SteamVR_BackgroundDomeRadius_Float = "backgroundDomeRadius"; + static const char * const k_pch_SteamVR_GridColor_String = "gridColor"; + static const char * const k_pch_SteamVR_PlayAreaColor_String = "playAreaColor"; + static const char * const k_pch_SteamVR_TrackingLossColor_String = "trackingLossColor"; + static const char * const k_pch_SteamVR_ShowStage_Bool = "showStage"; + static const char * const k_pch_SteamVR_DrawTrackingReferences_Bool = "drawTrackingReferences"; + static const char * const k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers"; + static const char * const k_pch_SteamVR_UsingSpeakers_Bool = "usingSpeakers"; + static const char * const k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float = "speakersForwardYawOffsetDegrees"; + static const char * const k_pch_SteamVR_BaseStationPowerManagement_Int32 = "basestationPowerManagement"; + static const char * const k_pch_SteamVR_ShowBaseStationPowerManagementTip_Int32 = "ShowBaseStationPowerManagementTip"; + static const char * const k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses"; + static const char * const k_pch_SteamVR_SupersampleScale_Float = "supersampleScale"; + static const char * const k_pch_SteamVR_MaxRecommendedResolution_Int32 = "maxRecommendedResolution"; + static const char * const k_pch_SteamVR_MotionSmoothing_Bool = "motionSmoothing"; + static const char * const k_pch_SteamVR_MotionSmoothingOverride_Int32 = "motionSmoothingOverride"; + static const char * const k_pch_SteamVR_FramesToThrottle_Int32 = "framesToThrottle"; + static const char * const k_pch_SteamVR_AdditionalFramesToPredict_Int32 = "additionalFramesToPredict"; + static const char * const k_pch_SteamVR_DisableAsyncReprojection_Bool = "disableAsync"; + static const char * const k_pch_SteamVR_ForceFadeOnBadTracking_Bool = "forceFadeOnBadTracking"; + static const char * const k_pch_SteamVR_DefaultMirrorView_Int32 = "mirrorView"; + static const char * const k_pch_SteamVR_ShowLegacyMirrorView_Bool = "showLegacyMirrorView"; + static const char * const k_pch_SteamVR_MirrorViewVisibility_Bool = "showMirrorView"; + static const char * const k_pch_SteamVR_MirrorViewDisplayMode_Int32 = "mirrorViewDisplayMode"; + static const char * const k_pch_SteamVR_MirrorViewEye_Int32 = "mirrorViewEye"; + static const char * const k_pch_SteamVR_MirrorViewGeometry_String = "mirrorViewGeometry"; + static const char * const k_pch_SteamVR_MirrorViewGeometryMaximized_String = "mirrorViewGeometryMaximized"; + static const char * const k_pch_SteamVR_PerfGraphVisibility_Bool = "showPerfGraph"; + static const char * const k_pch_SteamVR_StartMonitorFromAppLaunch = "startMonitorFromAppLaunch"; + static const char * const k_pch_SteamVR_StartCompositorFromAppLaunch_Bool = "startCompositorFromAppLaunch"; + static const char * const k_pch_SteamVR_StartDashboardFromAppLaunch_Bool = "startDashboardFromAppLaunch"; + static const char * const k_pch_SteamVR_StartOverlayAppsFromDashboard_Bool = "startOverlayAppsFromDashboard"; + static const char * const k_pch_SteamVR_EnableHomeApp = "enableHomeApp"; + static const char * const k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32 = "CycleBackgroundImageTimeSec"; + static const char * const k_pch_SteamVR_RetailDemo_Bool = "retailDemo"; + static const char * const k_pch_SteamVR_IpdOffset_Float = "ipdOffset"; + static const char * const k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering"; + static const char * const k_pch_SteamVR_SupersampleManualOverride_Bool = "supersampleManualOverride"; + static const char * const k_pch_SteamVR_EnableLinuxVulkanAsync_Bool = "enableLinuxVulkanAsync"; + static const char * const k_pch_SteamVR_AllowDisplayLockedMode_Bool = "allowDisplayLockedMode"; + static const char * const k_pch_SteamVR_HaveStartedTutorialForNativeChaperoneDriver_Bool = "haveStartedTutorialForNativeChaperoneDriver"; + static const char * const k_pch_SteamVR_ForceWindows32bitVRMonitor = "forceWindows32BitVRMonitor"; + static const char * const k_pch_SteamVR_DebugInputBinding = "debugInputBinding"; + static const char * const k_pch_SteamVR_DoNotFadeToGrid = "doNotFadeToGrid"; + static const char * const k_pch_SteamVR_RenderCameraMode = "renderCameraMode"; + static const char * const k_pch_SteamVR_EnableSharedResourceJournaling = "enableSharedResourceJournaling"; + static const char * const k_pch_SteamVR_EnableSafeMode = "enableSafeMode"; + static const char * const k_pch_SteamVR_PreferredRefreshRate = "preferredRefreshRate"; + static const char * const k_pch_SteamVR_LastVersionNotice = "lastVersionNotice"; + static const char * const k_pch_SteamVR_LastVersionNoticeDate = "lastVersionNoticeDate"; + static const char * const k_pch_SteamVR_HmdDisplayColorGainR_Float = "hmdDisplayColorGainR"; + static const char * const k_pch_SteamVR_HmdDisplayColorGainG_Float = "hmdDisplayColorGainG"; + static const char * const k_pch_SteamVR_HmdDisplayColorGainB_Float = "hmdDisplayColorGainB"; + static const char * const k_pch_SteamVR_CustomIconStyle_String = "customIconStyle"; + static const char * const k_pch_SteamVR_CustomOffIconStyle_String = "customOffIconStyle"; + static const char * const k_pch_SteamVR_CustomIconForceUpdate_String = "customIconForceUpdate"; + static const char * const k_pch_SteamVR_AllowGlobalActionSetPriority = "globalActionSetPriority"; + static const char * const k_pch_SteamVR_OverlayRenderQuality = "overlayRenderQuality_2"; + static const char * const k_pch_SteamVR_BlockOculusSDKOnOpenVRLaunchOption_Bool = "blockOculusSDKOnOpenVRLaunchOption"; + static const char * const k_pch_SteamVR_BlockOculusSDKOnAllLaunches_Bool = "blockOculusSDKOnAllLaunches"; + static const char * const k_pch_SteamVR_HDCPLegacyCompatibility_Bool = "hdcp14legacyCompatibility"; + static const char * const k_pch_SteamVR_UsePrism_Bool = "usePrism"; + + //----------------------------------------------------------------------------- + // direct mode keys + static const char * const k_pch_DirectMode_Section = "direct_mode"; + static const char * const k_pch_DirectMode_Enable_Bool = "enable"; + static const char * const k_pch_DirectMode_Count_Int32 = "count"; + static const char * const k_pch_DirectMode_EdidVid_Int32 = "edidVid"; + static const char * const k_pch_DirectMode_EdidPid_Int32 = "edidPid"; + + //----------------------------------------------------------------------------- + // lighthouse keys + static const char * const k_pch_Lighthouse_Section = "driver_lighthouse"; + static const char * const k_pch_Lighthouse_DisableIMU_Bool = "disableimu"; + static const char * const k_pch_Lighthouse_DisableIMUExceptHMD_Bool = "disableimuexcepthmd"; + static const char * const k_pch_Lighthouse_UseDisambiguation_String = "usedisambiguation"; + static const char * const k_pch_Lighthouse_DisambiguationDebug_Int32 = "disambiguationdebug"; + static const char * const k_pch_Lighthouse_PrimaryBasestation_Int32 = "primarybasestation"; + static const char * const k_pch_Lighthouse_DBHistory_Bool = "dbhistory"; + static const char * const k_pch_Lighthouse_EnableBluetooth_Bool = "enableBluetooth"; + static const char * const k_pch_Lighthouse_PowerManagedBaseStations_String = "PowerManagedBaseStations"; + static const char * const k_pch_Lighthouse_PowerManagedBaseStations2_String = "PowerManagedBaseStations2"; + static const char * const k_pch_Lighthouse_InactivityTimeoutForBaseStations_Int32 = "InactivityTimeoutForBaseStations"; + static const char * const k_pch_Lighthouse_EnableImuFallback_Bool = "enableImuFallback"; + + //----------------------------------------------------------------------------- + // null keys + static const char * const k_pch_Null_Section = "driver_null"; + static const char * const k_pch_Null_SerialNumber_String = "serialNumber"; + static const char * const k_pch_Null_ModelNumber_String = "modelNumber"; + static const char * const k_pch_Null_WindowX_Int32 = "windowX"; + static const char * const k_pch_Null_WindowY_Int32 = "windowY"; + static const char * const k_pch_Null_WindowWidth_Int32 = "windowWidth"; + static const char * const k_pch_Null_WindowHeight_Int32 = "windowHeight"; + static const char * const k_pch_Null_RenderWidth_Int32 = "renderWidth"; + static const char * const k_pch_Null_RenderHeight_Int32 = "renderHeight"; + static const char * const k_pch_Null_SecondsFromVsyncToPhotons_Float = "secondsFromVsyncToPhotons"; + static const char * const k_pch_Null_DisplayFrequency_Float = "displayFrequency"; + + //----------------------------------------------------------------------------- + // Windows MR keys + static const char * const k_pch_WindowsMR_Section = "driver_holographic"; + + //----------------------------------------------------------------------------- + // user interface keys + static const char * const k_pch_UserInterface_Section = "userinterface"; + static const char * const k_pch_UserInterface_StatusAlwaysOnTop_Bool = "StatusAlwaysOnTop"; + static const char * const k_pch_UserInterface_MinimizeToTray_Bool = "MinimizeToTray"; + static const char * const k_pch_UserInterface_HidePopupsWhenStatusMinimized_Bool = "HidePopupsWhenStatusMinimized"; + static const char * const k_pch_UserInterface_Screenshots_Bool = "screenshots"; + static const char * const k_pch_UserInterface_ScreenshotType_Int = "screenshotType"; + + //----------------------------------------------------------------------------- + // notification keys + static const char * const k_pch_Notifications_Section = "notifications"; + static const char * const k_pch_Notifications_DoNotDisturb_Bool = "DoNotDisturb"; + + //----------------------------------------------------------------------------- + // keyboard keys + static const char * const k_pch_Keyboard_Section = "keyboard"; + static const char * const k_pch_Keyboard_TutorialCompletions = "TutorialCompletions"; + static const char * const k_pch_Keyboard_ScaleX = "ScaleX"; + static const char * const k_pch_Keyboard_ScaleY = "ScaleY"; + static const char * const k_pch_Keyboard_OffsetLeftX = "OffsetLeftX"; + static const char * const k_pch_Keyboard_OffsetRightX = "OffsetRightX"; + static const char * const k_pch_Keyboard_OffsetY = "OffsetY"; + static const char * const k_pch_Keyboard_Smoothing = "Smoothing"; + + //----------------------------------------------------------------------------- + // perf keys + static const char * const k_pch_Perf_Section = "perfcheck"; + static const char * const k_pch_Perf_PerfGraphInHMD_Bool = "perfGraphInHMD"; + static const char * const k_pch_Perf_AllowTimingStore_Bool = "allowTimingStore"; + static const char * const k_pch_Perf_SaveTimingsOnExit_Bool = "saveTimingsOnExit"; + static const char * const k_pch_Perf_TestData_Float = "perfTestData"; + static const char * const k_pch_Perf_GPUProfiling_Bool = "GPUProfiling"; + + //----------------------------------------------------------------------------- + // collision bounds keys + static const char * const k_pch_CollisionBounds_Section = "collisionBounds"; + static const char * const k_pch_CollisionBounds_Style_Int32 = "CollisionBoundsStyle"; + static const char * const k_pch_CollisionBounds_GroundPerimeterOn_Bool = "CollisionBoundsGroundPerimeterOn"; + static const char * const k_pch_CollisionBounds_CenterMarkerOn_Bool = "CollisionBoundsCenterMarkerOn"; + static const char * const k_pch_CollisionBounds_PlaySpaceOn_Bool = "CollisionBoundsPlaySpaceOn"; + static const char * const k_pch_CollisionBounds_FadeDistance_Float = "CollisionBoundsFadeDistance"; + static const char * const k_pch_CollisionBounds_WallHeight_Float = "CollisionBoundsWallHeight"; + static const char * const k_pch_CollisionBounds_ColorGammaR_Int32 = "CollisionBoundsColorGammaR"; + static const char * const k_pch_CollisionBounds_ColorGammaG_Int32 = "CollisionBoundsColorGammaG"; + static const char * const k_pch_CollisionBounds_ColorGammaB_Int32 = "CollisionBoundsColorGammaB"; + static const char * const k_pch_CollisionBounds_ColorGammaA_Int32 = "CollisionBoundsColorGammaA"; + static const char * const k_pch_CollisionBounds_EnableDriverImport = "enableDriverBoundsImport"; + + //----------------------------------------------------------------------------- + // camera keys + static const char * const k_pch_Camera_Section = "camera"; + static const char * const k_pch_Camera_EnableCamera_Bool = "enableCamera"; + static const char * const k_pch_Camera_ShowOnController_Bool = "showOnController"; + static const char * const k_pch_Camera_EnableCameraForCollisionBounds_Bool = "enableCameraForCollisionBounds"; + static const char * const k_pch_Camera_RoomView_Int32 = "roomView"; + static const char * const k_pch_Camera_BoundsColorGammaR_Int32 = "cameraBoundsColorGammaR"; + static const char * const k_pch_Camera_BoundsColorGammaG_Int32 = "cameraBoundsColorGammaG"; + static const char * const k_pch_Camera_BoundsColorGammaB_Int32 = "cameraBoundsColorGammaB"; + static const char * const k_pch_Camera_BoundsColorGammaA_Int32 = "cameraBoundsColorGammaA"; + static const char * const k_pch_Camera_BoundsStrength_Int32 = "cameraBoundsStrength"; + static const char * const k_pch_Camera_RoomViewStyle_Int32 = "roomViewStyle"; + + //----------------------------------------------------------------------------- + // audio keys + static const char * const k_pch_audio_Section = "audio"; + static const char * const k_pch_audio_SetOsDefaultPlaybackDevice_Bool = "setOsDefaultPlaybackDevice"; + static const char * const k_pch_audio_EnablePlaybackDeviceOverride_Bool = "enablePlaybackDeviceOverride"; + static const char * const k_pch_audio_PlaybackDeviceOverride_String = "playbackDeviceOverride"; + static const char * const k_pch_audio_PlaybackDeviceOverrideName_String = "playbackDeviceOverrideName"; + static const char * const k_pch_audio_SetOsDefaultRecordingDevice_Bool = "setOsDefaultRecordingDevice"; + static const char * const k_pch_audio_EnableRecordingDeviceOverride_Bool = "enableRecordingDeviceOverride"; + static const char * const k_pch_audio_RecordingDeviceOverride_String = "recordingDeviceOverride"; + static const char * const k_pch_audio_RecordingDeviceOverrideName_String = "recordingDeviceOverrideName"; + static const char * const k_pch_audio_EnablePlaybackMirror_Bool = "enablePlaybackMirror"; + static const char * const k_pch_audio_PlaybackMirrorDevice_String = "playbackMirrorDevice"; + static const char * const k_pch_audio_PlaybackMirrorDeviceName_String = "playbackMirrorDeviceName"; + static const char * const k_pch_audio_OldPlaybackMirrorDevice_String = "onPlaybackMirrorDevice"; + static const char * const k_pch_audio_ActiveMirrorDevice_String = "activePlaybackMirrorDevice"; + static const char * const k_pch_audio_EnablePlaybackMirrorIndependentVolume_Bool = "enablePlaybackMirrorIndependentVolume"; + static const char * const k_pch_audio_LastHmdPlaybackDeviceId_String = "lastHmdPlaybackDeviceId"; + static const char * const k_pch_audio_VIVEHDMIGain = "viveHDMIGain"; + static const char * const k_pch_audio_DualSpeakerAndJackOutput_Bool = "dualSpeakerAndJackOutput"; + static const char * const k_pch_audio_MuteMicMonitor_Bool = "muteMicMonitor"; + + //----------------------------------------------------------------------------- + // power management keys + static const char * const k_pch_Power_Section = "power"; + static const char * const k_pch_Power_PowerOffOnExit_Bool = "powerOffOnExit"; + static const char * const k_pch_Power_TurnOffScreensTimeout_Float = "turnOffScreensTimeout"; + static const char * const k_pch_Power_TurnOffControllersTimeout_Float = "turnOffControllersTimeout"; + static const char * const k_pch_Power_ReturnToWatchdogTimeout_Float = "returnToWatchdogTimeout"; + static const char * const k_pch_Power_AutoLaunchSteamVROnButtonPress = "autoLaunchSteamVROnButtonPress"; + static const char * const k_pch_Power_PauseCompositorOnStandby_Bool = "pauseCompositorOnStandby"; + + //----------------------------------------------------------------------------- + // dashboard keys + static const char * const k_pch_Dashboard_Section = "dashboard"; + static const char * const k_pch_Dashboard_EnableDashboard_Bool = "enableDashboard"; + static const char * const k_pch_Dashboard_ArcadeMode_Bool = "arcadeMode"; + static const char * const k_pch_Dashboard_Position = "position"; + static const char * const k_pch_Dashboard_DesktopScale = "desktopScale"; + static const char * const k_pch_Dashboard_DashboardScale = "dashboardScale"; + static const char * const k_pch_Dashboard_UseStandaloneSystemLayer = "standaloneSystemLayer"; + + //----------------------------------------------------------------------------- + // model skin keys + static const char * const k_pch_modelskin_Section = "modelskins"; + + //----------------------------------------------------------------------------- + // driver keys - These could be checked in any driver_ section + static const char * const k_pch_Driver_Enable_Bool = "enable"; + static const char * const k_pch_Driver_BlockedBySafemode_Bool = "blocked_by_safe_mode"; + static const char * const k_pch_Driver_LoadPriority_Int32 = "loadPriority"; + + //----------------------------------------------------------------------------- + // web interface keys + static const char* const k_pch_WebInterface_Section = "WebInterface"; + + //----------------------------------------------------------------------------- + // vrwebhelper keys + static const char* const k_pch_VRWebHelper_Section = "VRWebHelper"; + static const char* const k_pch_VRWebHelper_DebuggerEnabled_Bool = "DebuggerEnabled"; + static const char* const k_pch_VRWebHelper_DebuggerPort_Int32 = "DebuggerPort"; + + //----------------------------------------------------------------------------- + // tracking overrides - keys are device paths, values are the device paths their + // tracking/pose information overrides + static const char* const k_pch_TrackingOverride_Section = "TrackingOverrides"; + + //----------------------------------------------------------------------------- + // per-app keys - the section name for these is the app key itself. Some of these are prefixed by the controller type + static const char* const k_pch_App_BindingAutosaveURLSuffix_String = "AutosaveURL"; + static const char* const k_pch_App_BindingLegacyAPISuffix_String = "_legacy"; + static const char* const k_pch_App_BindingSteamVRInputAPISuffix_String = "_steamvrinput"; + static const char* const k_pch_App_BindingCurrentURLSuffix_String = "CurrentURL"; + static const char* const k_pch_App_BindingPreviousURLSuffix_String = "PreviousURL"; + static const char* const k_pch_App_NeedToUpdateAutosaveSuffix_Bool = "NeedToUpdateAutosave"; + static const char* const k_pch_App_DominantHand_Int32 = "DominantHand"; + static const char* const k_pch_App_BlockOculusSDK_Bool = "blockOculusSDK"; + + //----------------------------------------------------------------------------- + // configuration for trackers + static const char * const k_pch_Trackers_Section = "trackers"; + + //----------------------------------------------------------------------------- + // configuration for desktop UI windows + static const char * const k_pch_DesktopUI_Section = "DesktopUI"; + + //----------------------------------------------------------------------------- + // Last known keys for righting recovery + static const char * const k_pch_LastKnown_Section = "LastKnown"; + static const char* const k_pch_LastKnown_HMDManufacturer_String = "HMDManufacturer"; + static const char* const k_pch_LastKnown_HMDModel_String = "HMDModel"; + + //----------------------------------------------------------------------------- + // Dismissed warnings + static const char * const k_pch_DismissedWarnings_Section = "DismissedWarnings"; + + //----------------------------------------------------------------------------- + // Input Settings + static const char * const k_pch_Input_Section = "input"; + static const char* const k_pch_Input_LeftThumbstickRotation_Float = "leftThumbstickRotation"; + static const char* const k_pch_Input_RightThumbstickRotation_Float = "rightThumbstickRotation"; + static const char* const k_pch_Input_ThumbstickDeadzone_Float = "thumbstickDeadzone"; + + //----------------------------------------------------------------------------- + // Log of GPU performance + static const char * const k_pch_GpuSpeed_Section = "GpuSpeed"; + +} // namespace vr + +// iservertrackeddevicedriver.h + +namespace vr +{ + + +struct DriverPoseQuaternion_t +{ + double w, x, y, z; +}; + +struct DriverPose_t +{ + /* Time offset of this pose, in seconds from the actual time of the pose, + * relative to the time of the PoseUpdated() call made by the driver. + */ + double poseTimeOffset; + + /* Generally, the pose maintained by a driver + * is in an inertial coordinate system different + * from the world system of x+ right, y+ up, z+ back. + * Also, the driver is not usually tracking the "head" position, + * but instead an internal IMU or another reference point in the HMD. + * The following two transforms transform positions and orientations + * to app world space from driver world space, + * and to HMD head space from driver local body space. + * + * We maintain the driver pose state in its internal coordinate system, + * so we can do the pose prediction math without having to + * use angular acceleration. A driver's angular acceleration is generally not measured, + * and is instead calculated from successive samples of angular velocity. + * This leads to a noisy angular acceleration values, which are also + * lagged due to the filtering required to reduce noise to an acceptable level. + */ + vr::HmdQuaternion_t qWorldFromDriverRotation; + double vecWorldFromDriverTranslation[ 3 ]; + + vr::HmdQuaternion_t qDriverFromHeadRotation; + double vecDriverFromHeadTranslation[ 3 ]; + + /* State of driver pose, in meters and radians. */ + /* Position of the driver tracking reference in driver world space + * +[0] (x) is right + * +[1] (y) is up + * -[2] (z) is forward + */ + double vecPosition[ 3 ]; + + /* Velocity of the pose in meters/second */ + double vecVelocity[ 3 ]; + + /* Acceleration of the pose in meters/second */ + double vecAcceleration[ 3 ]; + + /* Orientation of the tracker, represented as a quaternion */ + vr::HmdQuaternion_t qRotation; + + /* Angular velocity of the pose in axis-angle + * representation. The direction is the angle of + * rotation and the magnitude is the angle around + * that axis in radians/second. */ + double vecAngularVelocity[ 3 ]; + + /* Angular acceleration of the pose in axis-angle + * representation. The direction is the angle of + * rotation and the magnitude is the angle around + * that axis in radians/second^2. */ + double vecAngularAcceleration[ 3 ]; + + ETrackingResult result; + + bool poseIsValid; + bool willDriftInYaw; + bool shouldApplyHeadModel; + bool deviceIsConnected; +}; + + +// ---------------------------------------------------------------------------------------------- +// Purpose: Represents a single tracked device in a driver +// ---------------------------------------------------------------------------------------------- +class ITrackedDeviceServerDriver +{ +public: + + // ------------------------------------ + // Management Methods + // ------------------------------------ + /** This is called before an HMD is returned to the application. It will always be + * called before any display or tracking methods. Memory and processor use by the + * ITrackedDeviceServerDriver object should be kept to a minimum until it is activated. + * The pose listener is guaranteed to be valid until Deactivate is called, but + * should not be used after that point. */ + virtual EVRInitError Activate( uint32_t unObjectId ) = 0; + + /** This is called when The VR system is switching from this Hmd being the active display + * to another Hmd being the active display. The driver should clean whatever memory + * and thread use it can when it is deactivated */ + virtual void Deactivate() = 0; + + /** Handles a request from the system to put this device into standby mode. What that means is defined per-device. */ + virtual void EnterStandby() = 0; + + /** Requests a component interface of the driver for device-specific functionality. The driver should return NULL + * if the requested interface or version is not supported. */ + virtual void *GetComponent( const char *pchComponentNameAndVersion ) = 0; + + /** A VR Client has made this debug request of the driver. The set of valid requests is entirely + * up to the driver and the client to figure out, as is the format of the response. Responses that + * exceed the length of the supplied buffer should be truncated and null terminated */ + virtual void DebugRequest( const char *pchRequest, char *pchResponseBuffer, uint32_t unResponseBufferSize ) = 0; + + // ------------------------------------ + // Tracking Methods + // ------------------------------------ + virtual DriverPose_t GetPose() = 0; +}; + + + +static const char *ITrackedDeviceServerDriver_Version = "ITrackedDeviceServerDriver_005"; + +} + +// ivrdisplaycomponent.h + +namespace vr +{ + + + // ---------------------------------------------------------------------------------------------- + // Purpose: The display component on a single tracked device + // ---------------------------------------------------------------------------------------------- + class IVRDisplayComponent + { + public: + + // ------------------------------------ + // Display Methods + // ------------------------------------ + + /** Size and position that the window needs to be on the VR display. */ + virtual void GetWindowBounds( int32_t *pnX, int32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0; + + /** Returns true if the display is extending the desktop. */ + virtual bool IsDisplayOnDesktop( ) = 0; + + /** Returns true if the display is real and not a fictional display. */ + virtual bool IsDisplayRealDisplay( ) = 0; + + /** Suggested size for the intermediate render target that the distortion pulls from. */ + virtual void GetRecommendedRenderTargetSize( uint32_t *pnWidth, uint32_t *pnHeight ) = 0; + + /** Gets the viewport in the frame buffer to draw the output of the distortion into */ + virtual void GetEyeOutputViewport( EVREye eEye, uint32_t *pnX, uint32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0; + + /** The components necessary to build your own projection matrix in case your + * application is doing something fancy like infinite Z */ + virtual void GetProjectionRaw( EVREye eEye, float *pfLeft, float *pfRight, float *pfTop, float *pfBottom ) = 0; + + /** Returns the result of the distortion function for the specified eye and input UVs. UVs go from 0,0 in + * the upper left of that eye's viewport and 1,1 in the lower right of that eye's viewport. */ + virtual DistortionCoordinates_t ComputeDistortion( EVREye eEye, float fU, float fV ) = 0; + + }; + + static const char *IVRDisplayComponent_Version = "IVRDisplayComponent_002"; + +} + +// ivrdriverdirectmodecomponent.h + +namespace vr +{ + enum VRSwapTextureFlag + { + // Specify that the shared texture resource was created with the SHARED_NTHANDLE option (Windows) + VRSwapTextureFlag_Shared_NTHandle = 1 << 0, + }; + + // ---------------------------------------------------------------------------------------------- + // Purpose: This component is used for drivers that implement direct mode entirely on their own + // without allowing the VR Compositor to own the window/device. + // ---------------------------------------------------------------------------------------------- + class IVRDriverDirectModeComponent + { + public: + + // ----------------------------------- + // Direct mode methods + // ----------------------------------- + + struct SwapTextureSetDesc_t + { + uint32_t nWidth; + uint32_t nHeight; + uint32_t nFormat; + uint32_t nSampleCount; + }; + + struct SwapTextureSet_t + { + vr::SharedTextureHandle_t rSharedTextureHandles[ 3 ]; + uint32_t unTextureFlags; + }; + + /** Called to allocate textures for applications to render into. One of these per eye will be passed back to SubmitLayer each frame. */ + virtual void CreateSwapTextureSet( uint32_t unPid, const SwapTextureSetDesc_t *pSwapTextureSetDesc, SwapTextureSet_t *pOutSwapTextureSet ) {} + + /** Used to textures created using CreateSwapTextureSet. Only one of the set's handles needs to be used to destroy the entire set. */ + virtual void DestroySwapTextureSet( vr::SharedTextureHandle_t sharedTextureHandle ) {} + + /** Used to purge all texture sets for a given process. */ + virtual void DestroyAllSwapTextureSets( uint32_t unPid ) {} + + /** After Present returns, calls this to get the next index to use for rendering. */ + virtual void GetNextSwapTextureSetIndex( vr::SharedTextureHandle_t sharedTextureHandles[ 2 ], uint32_t( *pIndices )[ 2 ] ) {} + + /** Call once per layer to draw for this frame. One shared texture handle per eye. Textures must be created + * using CreateSwapTextureSet and should be alternated per frame. Call Present once all layers have been submitted. */ + struct SubmitLayerPerEye_t + { + // Shared texture handles (depth not always provided). + vr::SharedTextureHandle_t hTexture, hDepthTexture; + + // Valid region of provided texture (and depth). + vr::VRTextureBounds_t bounds; + + // Projection matrix used to render the depth buffer. + vr::HmdMatrix44_t mProjection; + + // Hmd pose used to render this layer. + vr::HmdMatrix34_t mHmdPose; + }; + virtual void SubmitLayer( const SubmitLayerPerEye_t( &perEye )[ 2 ] ) {} + + /** Submits queued layers for display. */ + virtual void Present( vr::SharedTextureHandle_t syncTexture ) {} + + /** Called after Present to allow driver to take more time until vsync after they've successfully acquired the sync texture in Present.*/ + virtual void PostPresent() {} + + /** Called to get additional frame timing stats from driver. Check m_nSize for versioning (new members will be added to end only). */ + virtual void GetFrameTiming( DriverDirectMode_FrameTiming *pFrameTiming ) {} + }; + + static const char *IVRDriverDirectModeComponent_Version = "IVRDriverDirectModeComponent_007"; + +} + +// ivrcameracomponent.h + +namespace vr +{ + //----------------------------------------------------------------------------- + //----------------------------------------------------------------------------- + class ICameraVideoSinkCallback + { + public: + virtual void OnCameraVideoSinkCallback() = 0; + }; + + // ---------------------------------------------------------------------------------------------- + // Purpose: The camera on a single tracked device + // ---------------------------------------------------------------------------------------------- + class IVRCameraComponent + { + public: + // ------------------------------------ + // Camera Methods + // ------------------------------------ + virtual bool GetCameraFrameDimensions( vr::ECameraVideoStreamFormat nVideoStreamFormat, uint32_t *pWidth, uint32_t *pHeight ) = 0; + virtual bool GetCameraFrameBufferingRequirements( int *pDefaultFrameQueueSize, uint32_t *pFrameBufferDataSize ) = 0; + virtual bool SetCameraFrameBuffering( int nFrameBufferCount, void **ppFrameBuffers, uint32_t nFrameBufferDataSize ) = 0; + virtual bool SetCameraVideoStreamFormat( vr::ECameraVideoStreamFormat nVideoStreamFormat ) = 0; + virtual vr::ECameraVideoStreamFormat GetCameraVideoStreamFormat() = 0; + virtual bool StartVideoStream() = 0; + virtual void StopVideoStream() = 0; + virtual bool IsVideoStreamActive( bool *pbPaused, float *pflElapsedTime ) = 0; + virtual const vr::CameraVideoStreamFrame_t *GetVideoStreamFrame() = 0; + virtual void ReleaseVideoStreamFrame( const vr::CameraVideoStreamFrame_t *pFrameImage ) = 0; + virtual bool SetAutoExposure( bool bEnable ) = 0; + virtual bool PauseVideoStream() = 0; + virtual bool ResumeVideoStream() = 0; + virtual bool GetCameraDistortion( uint32_t nCameraIndex, float flInputU, float flInputV, float *pflOutputU, float *pflOutputV ) = 0; + virtual bool GetCameraProjection( uint32_t nCameraIndex, vr::EVRTrackedCameraFrameType eFrameType, float flZNear, float flZFar, vr::HmdMatrix44_t *pProjection ) = 0; + virtual bool SetFrameRate( int nISPFrameRate, int nSensorFrameRate ) = 0; + virtual bool SetCameraVideoSinkCallback( vr::ICameraVideoSinkCallback *pCameraVideoSinkCallback ) = 0; + virtual bool GetCameraCompatibilityMode( vr::ECameraCompatibilityMode *pCameraCompatibilityMode ) = 0; + virtual bool SetCameraCompatibilityMode( vr::ECameraCompatibilityMode nCameraCompatibilityMode ) = 0; + virtual bool GetCameraFrameBounds( vr::EVRTrackedCameraFrameType eFrameType, uint32_t *pLeft, uint32_t *pTop, uint32_t *pWidth, uint32_t *pHeight ) = 0; + virtual bool GetCameraIntrinsics( uint32_t nCameraIndex, vr::EVRTrackedCameraFrameType eFrameType, HmdVector2_t *pFocalLength, HmdVector2_t *pCenter, vr::EVRDistortionFunctionType *peDistortionType, double rCoefficients[ k_unMaxDistortionFunctionParameters ] ) = 0; + }; + + static const char *IVRCameraComponent_Version = "IVRCameraComponent_003"; +} + +// itrackeddevicedriverprovider.h + +namespace vr +{ + +class ITrackedDeviceServerDriver; +struct TrackedDeviceDriverInfo_t; +struct DriverPose_t; + +/** This interface is provided by vrserver to allow the driver to notify +* the system when something changes about a device. These changes must +* not change the serial number or class of the device because those values +* are permanently associated with the device's index. */ +class IVRDriverContext +{ +public: + /** Returns the requested interface. If the interface was not available it will return NULL and fill + * out the error. */ + virtual void *GetGenericInterface( const char *pchInterfaceVersion, EVRInitError *peError = nullptr ) = 0; + + /** Returns the property container handle for this driver */ + virtual DriverHandle_t GetDriverHandle() = 0; +}; + + +/** This interface must be implemented in each driver. It will be loaded in vrserver.exe */ +class IServerTrackedDeviceProvider +{ +public: + /** initializes the driver. This will be called before any other methods are called. + * If Init returns anything other than VRInitError_None the driver DLL will be unloaded. + * + * pDriverHost will never be NULL, and will always be a pointer to a IServerDriverHost interface + * + * pchUserDriverConfigDir - The absolute path of the directory where the driver should store user + * config files. + * pchDriverInstallDir - The absolute path of the root directory for the driver. + */ + virtual EVRInitError Init( IVRDriverContext *pDriverContext ) = 0; + + /** cleans up the driver right before it is unloaded */ + virtual void Cleanup() = 0; + + /** Returns the version of the ITrackedDeviceServerDriver interface used by this driver */ + virtual const char * const *GetInterfaceVersions() = 0; + + /** Allows the driver do to some work in the main loop of the server. */ + virtual void RunFrame() = 0; + + + // ------------ Power State Functions ----------------------- // + + /** Returns true if the driver wants to block Standby mode. */ + virtual bool ShouldBlockStandbyMode() = 0; + + /** Called when the system is entering Standby mode. The driver should switch itself into whatever sort of low-power + * state it has. */ + virtual void EnterStandby() = 0; + + /** Called when the system is leaving Standby mode. The driver should switch itself back to + full operation. */ + virtual void LeaveStandby() = 0; + +}; + + +static const char *IServerTrackedDeviceProvider_Version = "IServerTrackedDeviceProvider_004"; + + + + +/** This interface must be implemented in each driver. It will be loaded in vrclient.dll */ +class IVRWatchdogProvider +{ +public: + /** initializes the driver in watchdog mode. */ + virtual EVRInitError Init( IVRDriverContext *pDriverContext ) = 0; + + /** cleans up the driver right before it is unloaded */ + virtual void Cleanup() = 0; +}; + +static const char *IVRWatchdogProvider_Version = "IVRWatchdogProvider_001"; + + + + +/** This is an optional interface drivers may implement. It will be loaded in vrcompositor.exe */ +class IVRCompositorPluginProvider +{ +public: + /** initializes the driver when used to load compositor plugins */ + virtual EVRInitError Init( IVRDriverContext *pDriverContext ) = 0; + + /** cleans up the driver right before it is unloaded */ + virtual void Cleanup() = 0; + + /** Returns the versions of interfaces used by this driver */ + virtual const char * const *GetInterfaceVersions() = 0; + + /** Requests a component interface of the driver for specific functionality. The driver should return NULL + * if the requested interface or version is not supported. */ + virtual void *GetComponent( const char *pchComponentNameAndVersion ) = 0; +}; + +static const char *IVRCompositorPluginProvider_Version = "IVRCompositorPluginProvider_001"; + +} + +// ivrproperties.h + +#include +#include + +namespace vr +{ + + /** This container is automatically created before a display redirect device is activated. + * Any properties in this container will be returned when that property is read from the HMD's + * property container. */ + static const PropertyContainerHandle_t k_ulDisplayRedirectContainer = 0x600000003; + + enum EPropertyWriteType + { + PropertyWrite_Set = 0, + PropertyWrite_Erase = 1, + PropertyWrite_SetError = 2 + }; + + struct PropertyWrite_t + { + ETrackedDeviceProperty prop; + EPropertyWriteType writeType; + ETrackedPropertyError eSetError; + void *pvBuffer; + uint32_t unBufferSize; + PropertyTypeTag_t unTag; + ETrackedPropertyError eError; + }; + + struct PropertyRead_t + { + ETrackedDeviceProperty prop; + void *pvBuffer; + uint32_t unBufferSize; + PropertyTypeTag_t unTag; + uint32_t unRequiredBufferSize; + ETrackedPropertyError eError; + }; + + +class IVRProperties +{ +public: + + /** Reads a set of properties atomically. See the PropertyReadBatch_t struct for more information. */ + virtual ETrackedPropertyError ReadPropertyBatch( PropertyContainerHandle_t ulContainerHandle, PropertyRead_t *pBatch, uint32_t unBatchEntryCount ) = 0; + + /** Writes a set of properties atomically. See the PropertyWriteBatch_t struct for more information. */ + virtual ETrackedPropertyError WritePropertyBatch( PropertyContainerHandle_t ulContainerHandle, PropertyWrite_t *pBatch, uint32_t unBatchEntryCount ) = 0; + + /** returns a string that corresponds with the specified property error. The string will be the name + * of the error enum value for all valid error codes */ + virtual const char *GetPropErrorNameFromEnum( ETrackedPropertyError error ) = 0; + + /** Returns a container handle given a tracked device index */ + virtual PropertyContainerHandle_t TrackedDeviceToPropertyContainer( TrackedDeviceIndex_t nDevice ) = 0; +}; + +static const char * const IVRProperties_Version = "IVRProperties_001"; + +class CVRPropertyHelpers +{ +public: + CVRPropertyHelpers( IVRProperties * pProperties ) : m_pProperties( pProperties ) {} + + /** Returns a scaler property. If the device index is not valid or the property value type does not match, + * this function will return false. */ + bool GetBoolProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ); + float GetFloatProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ); + int32_t GetInt32Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ); + uint64_t GetUint64Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ); + HmdVector2_t GetVec2Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ); + HmdVector3_t GetVec3Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ); + HmdVector4_t GetVec4Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ); + double GetDoubleProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ); + + /** Returns a single typed property. If the device index is not valid or the property is not a string type this function will + * return 0. Otherwise it returns the length of the number of bytes necessary to hold this string including the trailing + * null. Strings will always fit in buffers of k_unMaxPropertyStringSize characters. */ + uint32_t GetProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, VR_OUT_STRING() void *pvBuffer, uint32_t unBufferSize, PropertyTypeTag_t *punTag, ETrackedPropertyError *pError = 0L ); + + + /** Returns a string property. If the device index is not valid or the property is not a string type this function will + * return 0. Otherwise it returns the length of the number of bytes necessary to hold this string including the trailing + * null. Strings will always fit in buffers of k_unMaxPropertyStringSize characters. */ + uint32_t GetStringProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize, ETrackedPropertyError *pError = 0L ); + + /** Returns a string property as a std::string. If the device index is not valid or the property is not a string type this function will + * return an empty string. */ + std::string GetStringProperty( vr::PropertyContainerHandle_t ulContainer, vr::ETrackedDeviceProperty prop, vr::ETrackedPropertyError *peError = nullptr ); + + /** Reads a std::vector of data from a property. */ + template< typename T> + ETrackedPropertyError GetPropertyVector( PropertyContainerHandle_t ulContainer, ETrackedDeviceProperty prop, PropertyTypeTag_t unExpectedTag, std::vector *pvecResults ); + + /** Sets a scaler property. The new value will be returned on any subsequent call to get this property in any process. */ + ETrackedPropertyError SetBoolProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, bool bNewValue ); + ETrackedPropertyError SetFloatProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, float fNewValue ); + ETrackedPropertyError SetInt32Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, int32_t nNewValue ); + ETrackedPropertyError SetUint64Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, uint64_t ulNewValue ); + ETrackedPropertyError SetVec2Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector2_t & vNewValue ); + ETrackedPropertyError SetVec3Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector3_t & vNewValue ); + ETrackedPropertyError SetVec4Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector4_t & vNewValue ); + ETrackedPropertyError SetDoubleProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, double vNewValue ); + + /** Sets a string property. The new value will be returned on any subsequent call to get this property in any process. */ + ETrackedPropertyError SetStringProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const char *pchNewValue ); + + /** Sets a single typed property. The new value will be returned on any subsequent call to get this property in any process. */ + ETrackedPropertyError SetProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, void *pvNewValue, uint32_t unNewValueSize, PropertyTypeTag_t unTag ); + + /** Sets the error return value for a property. This value will be returned on all subsequent requests to get the property */ + ETrackedPropertyError SetPropertyError( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError eError ); + + /** Clears any value or error set for the property. */ + ETrackedPropertyError EraseProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop ); + + /* Turns a device index into a property container handle. */ + PropertyContainerHandle_t TrackedDeviceToPropertyContainer( TrackedDeviceIndex_t nDevice ) { return m_pProperties->TrackedDeviceToPropertyContainer( nDevice ); } + + /** Sets a std::vector of typed data to a property. */ + template< typename T> + ETrackedPropertyError SetPropertyVector( PropertyContainerHandle_t ulContainer, ETrackedDeviceProperty prop, PropertyTypeTag_t unExpectedTag, std::vector *vecProperties ); + + /** Returns true if the specified property is set on the specified container */ + bool IsPropertySet( PropertyContainerHandle_t ulContainer, ETrackedDeviceProperty prop, ETrackedPropertyError *peError = nullptr ); +private: + template + T GetPropertyHelper( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError, T bDefault, PropertyTypeTag_t unTypeTag ); + + IVRProperties *m_pProperties; +}; + + +inline uint32_t CVRPropertyHelpers::GetProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, VR_OUT_STRING() void *pvBuffer, uint32_t unBufferSize, PropertyTypeTag_t *punTag, ETrackedPropertyError *pError ) +{ + PropertyRead_t batch; + batch.prop = prop; + batch.pvBuffer = pvBuffer; + batch.unBufferSize = unBufferSize; + + m_pProperties->ReadPropertyBatch( ulContainerHandle, &batch, 1 ); + + if ( pError ) + { + *pError = batch.eError; + } + + if ( punTag ) + { + *punTag = batch.unTag; + } + + return batch.unRequiredBufferSize; +} + + +/** Sets a single typed property. The new value will be returned on any subsequent call to get this property in any process. */ +inline ETrackedPropertyError CVRPropertyHelpers::SetProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, void *pvNewValue, uint32_t unNewValueSize, PropertyTypeTag_t unTag ) +{ + PropertyWrite_t batch; + batch.writeType = PropertyWrite_Set; + batch.prop = prop; + batch.pvBuffer = pvNewValue; + batch.unBufferSize = unNewValueSize; + batch.unTag = unTag; + + m_pProperties->WritePropertyBatch( ulContainerHandle, &batch, 1 ); + + return batch.eError; +} + + +/** Returns a string property. If the device index is not valid or the property is not a string type this function will +* return 0. Otherwise it returns the length of the number of bytes necessary to hold this string including the trailing +* null. Strings will always fit in buffers of k_unMaxPropertyStringSize characters. */ +inline uint32_t CVRPropertyHelpers::GetStringProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize, ETrackedPropertyError *pError ) +{ + PropertyTypeTag_t unTag; + ETrackedPropertyError error; + uint32_t unRequiredSize = GetProperty( ulContainerHandle, prop, pchValue, unBufferSize, &unTag, &error ); + if ( unTag != k_unStringPropertyTag && error == TrackedProp_Success ) + { + error = TrackedProp_WrongDataType; + } + + if ( pError ) + { + *pError = error; + } + + if ( error != TrackedProp_Success ) + { + if ( pchValue && unBufferSize ) + { + *pchValue = '\0'; + } + } + + return unRequiredSize; +} + + +/** Returns a string property as a std::string. If the device index is not valid or the property is not a string type this function will +* return an empty string. */ +inline std::string CVRPropertyHelpers::GetStringProperty( vr::PropertyContainerHandle_t ulContainer, vr::ETrackedDeviceProperty prop, vr::ETrackedPropertyError *peError ) +{ + char buf[1024]; + vr::ETrackedPropertyError err; + uint32_t unRequiredBufferLen = GetStringProperty( ulContainer, prop, buf, sizeof(buf), &err ); + + std::string sResult; + + if ( err == TrackedProp_Success ) + { + sResult = buf; + } + else if ( err == TrackedProp_BufferTooSmall ) + { + char *pchBuffer = new char[unRequiredBufferLen]; + unRequiredBufferLen = GetStringProperty( ulContainer, prop, pchBuffer, unRequiredBufferLen, &err ); + sResult = pchBuffer; + delete[] pchBuffer; + } + + if ( peError ) + { + *peError = err; + } + + return sResult; +} + + +/** Sets a string property. The new value will be returned on any subsequent call to get this property in any process. */ +inline ETrackedPropertyError CVRPropertyHelpers::SetStringProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const char *pchNewValue ) +{ + if ( !pchNewValue ) + return TrackedProp_InvalidOperation; + + // this is strlen without the dependency on string.h + const char *pchCurr = pchNewValue; + while ( *pchCurr ) + { + pchCurr++; + } + + return SetProperty( ulContainerHandle, prop, (void *)pchNewValue, (uint32_t)(pchCurr - pchNewValue) + 1, k_unStringPropertyTag ); +} + + +template +inline T CVRPropertyHelpers::GetPropertyHelper( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError, T bDefault, PropertyTypeTag_t unTypeTag ) +{ + T bValue; + ETrackedPropertyError eError; + PropertyTypeTag_t unReadTag; + GetProperty( ulContainerHandle, prop, &bValue, sizeof( bValue ), &unReadTag, &eError ); + if ( unReadTag != unTypeTag && eError == TrackedProp_Success ) + { + eError = TrackedProp_WrongDataType; + }; + + if ( pError ) + *pError = eError; + if ( eError != TrackedProp_Success ) + { + return bDefault; + } + else + { + return bValue; + } +} + + +inline bool CVRPropertyHelpers::GetBoolProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError ) +{ + return GetPropertyHelper( ulContainerHandle, prop, pError, false, k_unBoolPropertyTag ); +} + +inline float CVRPropertyHelpers::GetFloatProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError ) +{ + return GetPropertyHelper( ulContainerHandle, prop, pError, 0.f, k_unFloatPropertyTag ); +} + +inline double CVRPropertyHelpers::GetDoubleProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError ) +{ + return GetPropertyHelper( ulContainerHandle, prop, pError, 0., k_unDoublePropertyTag ); +} + +inline int32_t CVRPropertyHelpers::GetInt32Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError ) +{ + return GetPropertyHelper( ulContainerHandle, prop, pError, 0, k_unInt32PropertyTag ); +} + +inline uint64_t CVRPropertyHelpers::GetUint64Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError ) +{ + return GetPropertyHelper( ulContainerHandle, prop, pError, 0, k_unUint64PropertyTag ); +} + +inline HmdVector2_t CVRPropertyHelpers::GetVec2Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError ) +{ + HmdVector2_t defaultval = { 0 }; + return GetPropertyHelper( ulContainerHandle, prop, pError, defaultval, k_unHmdVector2PropertyTag ); +} + +inline HmdVector3_t CVRPropertyHelpers::GetVec3Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError ) +{ + HmdVector3_t defaultval = { 0 }; + return GetPropertyHelper( ulContainerHandle, prop, pError, defaultval, k_unHmdVector3PropertyTag ); +} + +inline HmdVector4_t CVRPropertyHelpers::GetVec4Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError ) +{ + HmdVector4_t defaultval = { 0 }; + return GetPropertyHelper( ulContainerHandle, prop, pError, defaultval, k_unHmdVector4PropertyTag ); +} + +inline ETrackedPropertyError CVRPropertyHelpers::SetBoolProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, bool bNewValue ) +{ + return SetProperty( ulContainerHandle, prop, &bNewValue, sizeof( bNewValue ), k_unBoolPropertyTag ); +} + +inline ETrackedPropertyError CVRPropertyHelpers::SetFloatProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, float fNewValue ) +{ + return SetProperty( ulContainerHandle, prop, &fNewValue, sizeof( fNewValue ), k_unFloatPropertyTag ); +} + +inline ETrackedPropertyError CVRPropertyHelpers::SetDoubleProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, double fNewValue ) +{ + return SetProperty( ulContainerHandle, prop, &fNewValue, sizeof( fNewValue ), k_unDoublePropertyTag ); +} + +inline ETrackedPropertyError CVRPropertyHelpers::SetInt32Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, int32_t nNewValue ) +{ + return SetProperty( ulContainerHandle, prop, &nNewValue, sizeof( nNewValue ), k_unInt32PropertyTag ); +} + +inline ETrackedPropertyError CVRPropertyHelpers::SetUint64Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, uint64_t ulNewValue ) +{ + return SetProperty( ulContainerHandle, prop, &ulNewValue, sizeof( ulNewValue ), k_unUint64PropertyTag ); +} + +inline ETrackedPropertyError CVRPropertyHelpers::SetVec2Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector2_t & vNewValue ) +{ + return SetProperty( ulContainerHandle, prop, ( void * ) &vNewValue, sizeof( HmdVector2_t ), k_unHmdVector2PropertyTag ); +} + +inline ETrackedPropertyError CVRPropertyHelpers::SetVec3Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector3_t & vNewValue ) +{ + return SetProperty( ulContainerHandle, prop, ( void * ) &vNewValue, sizeof( HmdVector3_t ), k_unHmdVector3PropertyTag ); +} + +inline ETrackedPropertyError CVRPropertyHelpers::SetVec4Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector4_t & vNewValue ) +{ + return SetProperty( ulContainerHandle, prop, ( void * ) &vNewValue, sizeof( HmdVector4_t ), k_unHmdVector4PropertyTag ); +} + +/** Sets the error return value for a property. This value will be returned on all subsequent requests to get the property */ +inline ETrackedPropertyError CVRPropertyHelpers::SetPropertyError( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError eError ) +{ + PropertyWrite_t batch; + batch.writeType = PropertyWrite_SetError; + batch.prop = prop; + batch.eSetError = eError; + + m_pProperties->WritePropertyBatch( ulContainerHandle, &batch, 1 ); + + return batch.eError; +} + +/** Clears any value or error set for the property. */ +inline ETrackedPropertyError CVRPropertyHelpers::EraseProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop ) +{ + PropertyWrite_t batch; + batch.writeType = PropertyWrite_Erase; + batch.prop = prop; + + m_pProperties->WritePropertyBatch( ulContainerHandle, &batch, 1 ); + + return batch.eError; + +} + +template< typename T > +ETrackedPropertyError CVRPropertyHelpers::SetPropertyVector(PropertyContainerHandle_t ulContainer, vr::ETrackedDeviceProperty prop, PropertyTypeTag_t unTag, std::vector *pvecProperties) +{ + return SetProperty( ulContainer, prop, &(*pvecProperties)[0], (uint32_t)(pvecProperties->size() * sizeof( T )), unTag ); +} + +template< typename T > +ETrackedPropertyError CVRPropertyHelpers::GetPropertyVector( PropertyContainerHandle_t ulContainer, ETrackedDeviceProperty prop, PropertyTypeTag_t unExpectedTag, std::vector *pvecResults ) +{ + ETrackedPropertyError err; + PropertyTypeTag_t unTag; + uint32_t unNeeded; + if ( pvecResults->empty() ) + unNeeded = GetProperty( ulContainer, prop, nullptr, 0, &unTag, &err ); + else + unNeeded = GetProperty( ulContainer, prop, &(*pvecResults)[0], (uint32_t)(pvecResults->size() * sizeof( T )), &unTag, &err ); + uint32_t unFound = unNeeded / sizeof( T ); + if ( err == TrackedProp_Success ) + { + if ( unTag != unExpectedTag && unFound > 0 ) + { + return TrackedProp_WrongDataType; + } + + pvecResults->resize( unFound ); + return TrackedProp_Success; + } + else if ( err == TrackedProp_BufferTooSmall ) + { + pvecResults->resize( unFound ); + unNeeded = GetProperty( ulContainer, prop, &(*pvecResults)[0], (uint32_t)(pvecResults->size() * sizeof( T )), &unTag, &err ); + unFound = unNeeded / sizeof( T ); + + if ( err == TrackedProp_Success ) + { + if ( unTag != unExpectedTag ) + { + return TrackedProp_WrongDataType; + } + + pvecResults->resize( unFound ); + return TrackedProp_Success; + } + } + return err; +} + +inline bool CVRPropertyHelpers::IsPropertySet( PropertyContainerHandle_t ulContainer, ETrackedDeviceProperty prop, ETrackedPropertyError *peError ) +{ + ETrackedPropertyError error; + GetProperty( ulContainer, prop, nullptr, 0, nullptr, &error ); + if ( peError ) + *peError = error; + return error == TrackedProp_Success || error == TrackedProp_BufferTooSmall; +} + +} + + + +// ivrdriverinput.h + +namespace vr +{ + + typedef uint64_t VRInputComponentHandle_t; + static const VRInputComponentHandle_t k_ulInvalidInputComponentHandle = 0; + + enum EVRScalarType + { + VRScalarType_Absolute = 0, + VRScalarType_Relative = 1, + }; + + + enum EVRScalarUnits + { + VRScalarUnits_NormalizedOneSided = 0, // Value ranges from 0 to 1 + VRScalarUnits_NormalizedTwoSided = 1, // Value ranges from -1 to 1 + }; + + class IVRDriverInput + { + public: + + /** Creates a boolean input component for the device */ + virtual EVRInputError CreateBooleanComponent( PropertyContainerHandle_t ulContainer, const char *pchName, VRInputComponentHandle_t *pHandle ) = 0; + + /** Updates a boolean component */ + virtual EVRInputError UpdateBooleanComponent( VRInputComponentHandle_t ulComponent, bool bNewValue, double fTimeOffset ) = 0; + + /** Creates a scalar input component for the device */ + virtual EVRInputError CreateScalarComponent( PropertyContainerHandle_t ulContainer, const char *pchName, VRInputComponentHandle_t *pHandle, EVRScalarType eType, EVRScalarUnits eUnits ) = 0; + + /** Updates a boolean component */ + virtual EVRInputError UpdateScalarComponent( VRInputComponentHandle_t ulComponent, float fNewValue, double fTimeOffset ) = 0; + + /** Creates a haptic component for the device */ + virtual EVRInputError CreateHapticComponent( PropertyContainerHandle_t ulContainer, const char *pchName, VRInputComponentHandle_t *pHandle ) = 0; + + /** Creates a skeleton component. */ + virtual EVRInputError CreateSkeletonComponent( PropertyContainerHandle_t ulContainer, const char *pchName, const char *pchSkeletonPath, const char *pchBasePosePath, EVRSkeletalTrackingLevel eSkeletalTrackingLevel, const VRBoneTransform_t *pGripLimitTransforms, uint32_t unGripLimitTransformCount, VRInputComponentHandle_t *pHandle ) = 0; + + /** Updates a skeleton component. */ + virtual EVRInputError UpdateSkeletonComponent( VRInputComponentHandle_t ulComponent, EVRSkeletalMotionRange eMotionRange, const VRBoneTransform_t *pTransforms, uint32_t unTransformCount ) = 0; + + }; + + static const char * const IVRDriverInput_Version = "IVRDriverInput_003"; + +} // namespace vr + +// ivrdriverlog.h + +namespace vr +{ + +class IVRDriverLog +{ +public: + /** Writes a log message to the log file prefixed with the driver name */ + virtual void Log( const char *pchLogMessage ) = 0; +}; + + +static const char *IVRDriverLog_Version = "IVRDriverLog_001"; + +} + +// ivrserverdriverhost.h + +namespace vr +{ + +class ITrackedDeviceServerDriver; +struct TrackedDeviceDriverInfo_t; +struct DriverPose_t; + +/** This interface is provided by vrserver to allow the driver to notify +* the system when something changes about a device. These changes must +* not change the serial number or class of the device because those values +* are permanently associated with the device's index. */ +class IVRServerDriverHost +{ +public: + /** Notifies the server that a tracked device has been added. If this function returns true + * the server will call Activate on the device. If it returns false some kind of error + * has occurred and the device will not be activated. */ + virtual bool TrackedDeviceAdded( const char *pchDeviceSerialNumber, ETrackedDeviceClass eDeviceClass, ITrackedDeviceServerDriver *pDriver ) = 0; + + /** Notifies the server that a tracked device's pose has been updated */ + virtual void TrackedDevicePoseUpdated( uint32_t unWhichDevice, const DriverPose_t & newPose, uint32_t unPoseStructSize ) = 0; + + /** Notifies the server that vsync has occurred on the the display attached to the device. This is + * only permitted on devices of the HMD class. */ + virtual void VsyncEvent( double vsyncTimeOffsetSeconds ) = 0; + + /** Sends a vendor specific event (VREvent_VendorSpecific_Reserved_Start..VREvent_VendorSpecific_Reserved_End */ + virtual void VendorSpecificEvent( uint32_t unWhichDevice, vr::EVREventType eventType, const VREvent_Data_t & eventData, double eventTimeOffset ) = 0; + + /** Returns true if SteamVR is exiting */ + virtual bool IsExiting() = 0; + + /** Returns true and fills the event with the next event on the queue if there is one. If there are no events + * this method returns false. uncbVREvent should be the size in bytes of the VREvent_t struct */ + virtual bool PollNextEvent( VREvent_t *pEvent, uint32_t uncbVREvent ) = 0; + + /** Provides access to device poses for drivers. Poses are in their "raw" tracking space which is uniquely + * defined by each driver providing poses for its devices. It is up to clients of this function to correlate + * poses across different drivers. Poses are indexed by their device id, and their associated driver and + * other properties can be looked up via IVRProperties. */ + virtual void GetRawTrackedDevicePoses( float fPredictedSecondsFromNow, TrackedDevicePose_t *pTrackedDevicePoseArray, uint32_t unTrackedDevicePoseArrayCount ) = 0; + + /** Requests that SteamVR be restarted. The provided reason will be displayed to the user and should be in the current locale. */ + virtual void RequestRestart( const char *pchLocalizedReason, const char *pchExecutableToStart, const char *pchArguments, const char *pchWorkingDirectory ) = 0; + + /** Interface for copying a range of timing data. Frames are returned in ascending order (oldest to newest) with the last being the most recent frame. + * Only the first entry's m_nSize needs to be set, as the rest will be inferred from that. Returns total number of entries filled out. */ + virtual uint32_t GetFrameTimings( Compositor_FrameTiming *pTiming, uint32_t nFrames ) = 0; + + /** Notifies the server that a tracked device's display component transforms have been updated. + * only permitted on devices of the HMD class. */ + virtual void SetDisplayEyeToHead( uint32_t unWhichDevice, const HmdMatrix34_t & eyeToHeadLeft, const HmdMatrix34_t & eyeToHeadRight ) = 0; + + /** Notifies the server that a tracked device's display projection has changed. + * only permitted on devices of the HMD class. */ + virtual void SetDisplayProjectionRaw( uint32_t unWhichDevice, const HmdRect2_t & eyeLeft, const HmdRect2_t & eyeRight ) = 0; + + /** Notifies the server that a tracked device's recommended render target resolution has changed. + * only permitted on devices of the HMD class. */ + virtual void SetRecommendedRenderTargetSize( uint32_t unWhichDevice, uint32_t nWidth, uint32_t nHeight ) = 0; +}; + +static const char *IVRServerDriverHost_Version = "IVRServerDriverHost_006"; + +} + +// ivrcompositordriverhost.h + +namespace vr +{ + +class IVRCompositorDriverHost +{ +public: + /** Returns true and fills the event with the next event on the queue if there is one. If there are no events + * this method returns false. uncbVREvent should be the size in bytes of the VREvent_t struct */ + virtual bool PollNextEvent( VREvent_t *pEvent, uint32_t uncbVREvent ) = 0; +}; + +static const char *IVRCompositorDriverHost_Version = "IVRCompositorDriverHost_001"; + +} + +// ivrhiddenarea.h + +namespace vr +{ + +class CVRHiddenAreaHelpers +{ +public: + CVRHiddenAreaHelpers( IVRProperties *pProperties ) : m_pProperties( pProperties ) {} + + /** Stores a hidden area mesh in a property */ + ETrackedPropertyError SetHiddenArea( EVREye eEye, EHiddenAreaMeshType type, HmdVector2_t *pVerts, uint32_t unVertCount ); + + /** retrieves a hidden area mesh from a property. Returns the vert count read out of the property. */ + uint32_t GetHiddenArea( EVREye eEye, EHiddenAreaMeshType type, HmdVector2_t *pVerts, uint32_t unVertCount, ETrackedPropertyError *peError ); + +private: + ETrackedDeviceProperty GetPropertyEnum( EVREye eEye, EHiddenAreaMeshType type ) + { + return (ETrackedDeviceProperty)(Prop_DisplayHiddenArea_Binary_Start + ((int)type * 2) + (int)eEye); + } + + IVRProperties *m_pProperties; +}; + + +inline ETrackedPropertyError CVRHiddenAreaHelpers::SetHiddenArea( EVREye eEye, EHiddenAreaMeshType type, HmdVector2_t *pVerts, uint32_t unVertCount ) +{ + ETrackedDeviceProperty prop = GetPropertyEnum( eEye, type ); + CVRPropertyHelpers propHelpers( m_pProperties ); + return propHelpers.SetProperty( propHelpers.TrackedDeviceToPropertyContainer( k_unTrackedDeviceIndex_Hmd ), prop, pVerts, sizeof( HmdVector2_t ) * unVertCount, k_unHiddenAreaPropertyTag ); +} + + +inline uint32_t CVRHiddenAreaHelpers::GetHiddenArea( EVREye eEye, EHiddenAreaMeshType type, HmdVector2_t *pVerts, uint32_t unVertCount, ETrackedPropertyError *peError ) +{ + ETrackedDeviceProperty prop = GetPropertyEnum( eEye, type ); + CVRPropertyHelpers propHelpers( m_pProperties ); + ETrackedPropertyError propError; + PropertyTypeTag_t unTag; + uint32_t unBytesNeeded = propHelpers.GetProperty( propHelpers.TrackedDeviceToPropertyContainer( k_unTrackedDeviceIndex_Hmd ), prop, pVerts, sizeof( HmdVector2_t )*unVertCount, &unTag, &propError ); + if ( propError == TrackedProp_Success && unTag != k_unHiddenAreaPropertyTag ) + { + propError = TrackedProp_WrongDataType; + unBytesNeeded = 0; + } + + if ( peError ) + { + *peError = propError; + } + + return unBytesNeeded / sizeof( HmdVector2_t ); +} + +} + +// ivrwatchdoghost.h + +namespace vr +{ + +/** This interface is provided by vrclient to allow the driver to make everything wake up */ +class IVRWatchdogHost +{ +public: + /** Client drivers in watchdog mode should call this when they have received a signal from hardware that should + * cause SteamVR to start */ + virtual void WatchdogWakeUp( vr::ETrackedDeviceClass eDeviceClass ) = 0; +}; + +static const char *IVRWatchdogHost_Version = "IVRWatchdogHost_002"; + +}; + + + +// ivrvirtualdisplay.h + +namespace vr +{ + struct PresentInfo_t + { + SharedTextureHandle_t backbufferTextureHandle; + EVSync vsync; + uint64_t nFrameId; + double flVSyncTimeInSeconds; + }; + + // ---------------------------------------------------------------------------------------------- + // Purpose: This component is used for drivers that implement a virtual display (e.g. wireless). + // ---------------------------------------------------------------------------------------------- + class IVRVirtualDisplay + { + public: + + /** Submits final backbuffer for display. */ + virtual void Present( const PresentInfo_t *pPresentInfo, uint32_t unPresentInfoSize ) = 0; + + /** Block until the last presented buffer start scanning out. */ + virtual void WaitForPresent() = 0; + + /** Provides timing data for synchronizing with display. */ + virtual bool GetTimeSinceLastVsync( float *pfSecondsSinceLastVsync, uint64_t *pulFrameCounter ) = 0; + }; + + static const char *IVRVirtualDisplay_Version = "IVRVirtualDisplay_002"; +} + + +// ivrresources.h + +namespace vr +{ + +class IVRResources +{ +public: + + // ------------------------------------ + // Shared Resource Methods + // ------------------------------------ + + /** Loads the specified resource into the provided buffer if large enough. + * Returns the size in bytes of the buffer required to hold the specified resource. */ + virtual uint32_t LoadSharedResource( const char *pchResourceName, char *pchBuffer, uint32_t unBufferLen ) = 0; + + /** Provides the full path to the specified resource. Resource names can include named directories for + * drivers and other things, and this resolves all of those and returns the actual physical path. + * pchResourceTypeDirectory is the subdirectory of resources to look in. */ + virtual uint32_t GetResourceFullPath( const char *pchResourceName, const char *pchResourceTypeDirectory, VR_OUT_STRING() char *pchPathBuffer, uint32_t unBufferLen ) = 0; +}; + +static const char * const IVRResources_Version = "IVRResources_001"; + + +} + +// ivriobuffer.h + +namespace vr +{ + +typedef uint64_t IOBufferHandle_t; +static const uint64_t k_ulInvalidIOBufferHandle = 0; + + enum EIOBufferError + { + IOBuffer_Success = 0, + IOBuffer_OperationFailed = 100, + IOBuffer_InvalidHandle = 101, + IOBuffer_InvalidArgument = 102, + IOBuffer_PathExists = 103, + IOBuffer_PathDoesNotExist = 104, + IOBuffer_Permission = 105, + }; + + enum EIOBufferMode + { + IOBufferMode_Read = 0x0001, + IOBufferMode_Write = 0x0002, + IOBufferMode_Create = 0x0200, + }; + + // ---------------------------------------------------------------------------------------------- + // Purpose: + // ---------------------------------------------------------------------------------------------- + class IVRIOBuffer + { + public: + /** opens an existing or creates a new IOBuffer of unSize bytes */ + virtual vr::EIOBufferError Open( const char *pchPath, vr::EIOBufferMode mode, uint32_t unElementSize, uint32_t unElements, vr::IOBufferHandle_t *pulBuffer ) = 0; + + /** closes a previously opened or created buffer */ + virtual vr::EIOBufferError Close( vr::IOBufferHandle_t ulBuffer ) = 0; + + /** reads up to unBytes from buffer into *pDst, returning number of bytes read in *punRead */ + virtual vr::EIOBufferError Read( vr::IOBufferHandle_t ulBuffer, void *pDst, uint32_t unBytes, uint32_t *punRead ) = 0; + + /** writes unBytes of data from *pSrc into a buffer. */ + virtual vr::EIOBufferError Write( vr::IOBufferHandle_t ulBuffer, void *pSrc, uint32_t unBytes ) = 0; + + /** retrieves the property container of an buffer. */ + virtual vr::PropertyContainerHandle_t PropertyContainer( vr::IOBufferHandle_t ulBuffer ) = 0; + + /** inexpensively checks for readers to allow writers to fast-fail potentially expensive copies and writes. */ + virtual bool HasReaders( vr::IOBufferHandle_t ulBuffer ) = 0; + }; + + static const char *IVRIOBuffer_Version = "IVRIOBuffer_002"; +} + +// ivrdrivermanager.h + +namespace vr +{ + +class IVRDriverManager +{ +public: + virtual uint32_t GetDriverCount() const = 0; + + /** Returns the length of the number of bytes necessary to hold this string including the trailing null. */ + virtual uint32_t GetDriverName( vr::DriverId_t nDriver, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize ) = 0; + + virtual DriverHandle_t GetDriverHandle( const char *pchDriverName ) = 0; + + virtual bool IsEnabled( vr::DriverId_t nDriver ) const = 0; +}; + +static const char * const IVRDriverManager_Version = "IVRDriverManager_001"; + +} // namespace vr + + + +// ivrdriverspatialanchors.h + +namespace vr +{ + struct SpatialAnchorDriverPose_t + { + /** This position is in the same "world" space (+Y up) as provided by DriverPose_t. */ + vr::HmdQuaternion_t qWorldRotation; + vr::HmdVector3d_t vWorldTranslation; + + /** The pose will automatically start returning VRSpatialAnchorError_NotAvailableInThisUniverse + * if this is nonzero and does not match the current universe ID. */ + uint64_t ulRequiredUniverseId; + + /** When this time expires, SteamVR will start generating + * VREvent_SpatialAnchors_RequestPoseUpdate when the pose is read by an application + * to let the driver know it is still worth updating. + * You can use this facility in several ways: + * 1. Set to -1 to never receive an update request for this pose. The driver + * may still update poses at any time. + * 2. Set to 0 to always receive an update request *after* each time the pose + * is read. The rate of requests could be very high if the application gets + * the pose at framerate. + * 3. If the driver knows there is no reason to update the pose for some amount of + * time, it can set that time here and receive the update request reminder later. + * 4. If the driver plans to automatically update this pose for some amount of time + * (as it gets better information about the virtual location of this anchor) it can + * set that duration here to indicate that no "update requested" reminders are needed. + * When that automatic update period expires, any future interest in the pose will + * be indicated by a pose update request. + * The driver may always update the pose, including during the valid duration. */ + double fValidDuration; // seconds + }; + + class IVRDriverSpatialAnchors + { + public: + + /* NOTE: You must declare support for spatial anchors in your driver manifest. Add + * "spatialAnchorsSupport": true to your manifest. Without that setting, SteamVR + * will short-circuit anchor requests from applications and provide a generic descriptor + * that does not have any of the advantages of true spatial anchors. */ + + /* The driver should monitor for events VREvent_SpatialAnchors_RequestPoseUpdate (for new + * descriptors from applications that need UpdateSpatialAnchorPose()) and for + * VREvent_SpatialAnchors_RequestDescriptorUpdate (for new poses that need UpdateSpatialAnchorDescriptor()). + * For automatic pose updates over time, the driver should keep track of the handles it + * has seen and provide updates when conditions change. If the driver uses fValidDuration, + * it may wait for VREvent_SpatialAnchors_RequestPoseUpdate instead of keeping track itself. */ + + /** Update a pose for a spatial anchor. Should be called when an event notifies the driver that a + * new descriptor has been registered by an application. May be called for any anchor whenever the + * driver has better information about the best virtual coordinate to represent the anchor. Should + * be called on all active handles whenever driver state changes in a way that changes how physical + * world locations map to virtual coordinates (e.g. anything that would cause a universe ID change). + * This fires an event when it is called for the first time (to alert whoever submitted the descriptor). */ + virtual EVRSpatialAnchorError UpdateSpatialAnchorPose( SpatialAnchorHandle_t unHandle, const SpatialAnchorDriverPose_t *pPose ) = 0; + + /** Invalidate any pose associated with the handle and cause future calls to GetSpatialAnchorPose (on + * both the client and driver side) to return the specified error. eError must be one of + * VRSpatialAnchorError_NotYetAvailable, VRSpatialAnchorError_NotAvailableInThisUniverse, or + * VRSpatialAnchorError_PermanentlyUnavailable */ + virtual EVRSpatialAnchorError SetSpatialAnchorPoseError( SpatialAnchorHandle_t unHandle, EVRSpatialAnchorError eError, double fValidDuration ) = 0; + + /** Update the descriptor for a spatial anchor. Should be called when an event notifies the driver + * that a new pose has been registered by an application. May be called for any anchor whenever the + * driver has better or additional information it wants to include in the anchor descriptor. Note, + * however, that the application may never fetch the updated anchor descriptor and may request the + * original descriptor in a future session having ignored the update. + * The supplied descriptor should be only the driver's opaque internal data, not the decorated form that + * is used by clients (wrapped by runtime metadata). The descriptor must not contain non-ASCII characters or + * the two special characters ~ or " + * This fires an event every time it is called. */ + virtual EVRSpatialAnchorError UpdateSpatialAnchorDescriptor( SpatialAnchorHandle_t unHandle, const char *pchDescriptor ) = 0; + + /** Get the pose for a given handle. */ + virtual EVRSpatialAnchorError GetSpatialAnchorPose( SpatialAnchorHandle_t unHandle, SpatialAnchorDriverPose_t *pDriverPoseOut ) = 0; + + /** Get the descriptor for a given handle. This will be VRSpatialAnchorError_NotYetAvailable for handles + * where the driver has not yet built a descriptor. It will be the application-supplied descriptor for previously + * saved anchors that the application is requesting poses for. If the driver has called UpdateSpatialAnchorDescriptor() + * already in this session, it will be the descriptor provided by the driver. + * If bDecorated, returns the descriptor wrapped with runtime metadata suitable for a client to save. Else returns only + * the driver's opaque internal data. + */ + virtual EVRSpatialAnchorError GetSpatialAnchorDescriptor( SpatialAnchorHandle_t unHandle, VR_OUT_STRING() char *pchDescriptorOut, uint32_t *punDescriptorBufferLenInOut, bool bDecorated ) = 0; + + }; + + static const char * const IVRDriverSpatialAnchors_Version = "IVRDriverSpatialAnchors_001"; + +} // namespace vr + + + +namespace vr +{ +#if !defined( OPENVR_INTERFACE_INTERNAL ) + static const char * const k_InterfaceVersions[] = + { + IVRSettings_Version, + ITrackedDeviceServerDriver_Version, + IVRDisplayComponent_Version, + IVRDriverDirectModeComponent_Version, + IVRCameraComponent_Version, + IServerTrackedDeviceProvider_Version, + IVRWatchdogProvider_Version, + IVRVirtualDisplay_Version, + IVRDriverManager_Version, + IVRResources_Version, + IVRCompositorPluginProvider_Version, + nullptr + }; + + inline IVRDriverContext *&VRDriverContext() + { + static IVRDriverContext *pHost; + return pHost; + } + + class COpenVRDriverContext + { + public: + COpenVRDriverContext() : m_propertyHelpers(nullptr), m_hiddenAreaHelpers(nullptr) { Clear(); } + void Clear(); + + EVRInitError InitServer(); + EVRInitError InitWatchdog(); + EVRInitError InitCompositor(); + + IVRSettings *VRSettings() + { + if ( m_pVRSettings == nullptr ) + { + EVRInitError eError; + m_pVRSettings = (IVRSettings *)VRDriverContext()->GetGenericInterface( IVRSettings_Version, &eError ); + } + return m_pVRSettings; + } + + IVRProperties *VRPropertiesRaw() + { + if ( m_pVRProperties == nullptr ) + { + EVRInitError eError; + m_pVRProperties = (IVRProperties *)VRDriverContext()->GetGenericInterface( IVRProperties_Version, &eError ); + m_propertyHelpers = CVRPropertyHelpers( m_pVRProperties ); + m_hiddenAreaHelpers = CVRHiddenAreaHelpers( m_pVRProperties ); + } + return m_pVRProperties; + } + + CVRPropertyHelpers *VRProperties() + { + VRPropertiesRaw(); + return &m_propertyHelpers; + } + + CVRHiddenAreaHelpers *VRHiddenArea() + { + VRPropertiesRaw(); + return &m_hiddenAreaHelpers; + } + + IVRServerDriverHost *VRServerDriverHost() + { + if ( m_pVRServerDriverHost == nullptr ) + { + EVRInitError eError; + m_pVRServerDriverHost = (IVRServerDriverHost *)VRDriverContext()->GetGenericInterface( IVRServerDriverHost_Version, &eError ); + } + return m_pVRServerDriverHost; + } + + IVRWatchdogHost *VRWatchdogHost() + { + if ( m_pVRWatchdogHost == nullptr ) + { + EVRInitError eError; + m_pVRWatchdogHost = (IVRWatchdogHost *)VRDriverContext()->GetGenericInterface( IVRWatchdogHost_Version, &eError ); + } + return m_pVRWatchdogHost; + } + + IVRCompositorDriverHost *VRCompositorDriverHost() + { + if ( m_pVRCompositorDriverHost == nullptr ) + { + EVRInitError eError; + m_pVRCompositorDriverHost = ( IVRCompositorDriverHost * )VRDriverContext()->GetGenericInterface( IVRCompositorDriverHost_Version, &eError ); + } + return m_pVRCompositorDriverHost; + } + + IVRDriverLog *VRDriverLog() + { + if ( m_pVRDriverLog == nullptr ) + { + EVRInitError eError; + m_pVRDriverLog = (IVRDriverLog *)VRDriverContext()->GetGenericInterface( IVRDriverLog_Version, &eError ); + } + return m_pVRDriverLog; + } + + DriverHandle_t VR_CALLTYPE VRDriverHandle() + { + return VRDriverContext()->GetDriverHandle(); + } + + IVRDriverManager *VRDriverManager() + { + if ( !m_pVRDriverManager ) + { + EVRInitError eError; + m_pVRDriverManager = (IVRDriverManager *)VRDriverContext()->GetGenericInterface( IVRDriverManager_Version, &eError ); + } + return m_pVRDriverManager; + } + + IVRResources *VRResources() + { + if ( !m_pVRResources ) + { + EVRInitError eError; + m_pVRResources = (IVRResources *)VRDriverContext()->GetGenericInterface( IVRResources_Version, &eError ); + } + return m_pVRResources; + } + + IVRDriverInput *VRDriverInput() + { + if ( !m_pVRDriverInput ) + { + EVRInitError eError; + m_pVRDriverInput = (IVRDriverInput *)VRDriverContext()->GetGenericInterface( IVRDriverInput_Version, &eError ); + } + return m_pVRDriverInput; + } + + IVRIOBuffer *VRIOBuffer() + { + if ( !m_pVRIOBuffer ) + { + EVRInitError eError; + m_pVRIOBuffer = (IVRIOBuffer *)VRDriverContext()->GetGenericInterface( IVRIOBuffer_Version, &eError ); + } + return m_pVRIOBuffer; + } + + IVRDriverSpatialAnchors *VRDriverSpatialAnchors() + { + if ( !m_pVRDriverSpatialAnchors ) + { + EVRInitError eError; + m_pVRDriverSpatialAnchors = (IVRDriverSpatialAnchors *)VRDriverContext()->GetGenericInterface( IVRDriverSpatialAnchors_Version, &eError ); + } + return m_pVRDriverSpatialAnchors; + } + + private: + CVRPropertyHelpers m_propertyHelpers; + CVRHiddenAreaHelpers m_hiddenAreaHelpers; + + IVRSettings *m_pVRSettings; + IVRProperties *m_pVRProperties; + IVRServerDriverHost *m_pVRServerDriverHost; + IVRWatchdogHost *m_pVRWatchdogHost; + IVRCompositorDriverHost *m_pVRCompositorDriverHost; + IVRDriverLog *m_pVRDriverLog; + IVRDriverManager *m_pVRDriverManager; + IVRResources *m_pVRResources; + IVRDriverInput *m_pVRDriverInput; + IVRIOBuffer *m_pVRIOBuffer; + IVRDriverSpatialAnchors *m_pVRDriverSpatialAnchors; + }; + + inline COpenVRDriverContext &OpenVRInternal_ModuleServerDriverContext() + { + static void *ctx[sizeof( COpenVRDriverContext ) / sizeof( void * )]; + return *(COpenVRDriverContext *)ctx; // bypass zero-init constructor + } + + inline IVRSettings *VR_CALLTYPE VRSettings() { return OpenVRInternal_ModuleServerDriverContext().VRSettings(); } + inline IVRProperties *VR_CALLTYPE VRPropertiesRaw() { return OpenVRInternal_ModuleServerDriverContext().VRPropertiesRaw(); } + inline CVRPropertyHelpers *VR_CALLTYPE VRProperties() { return OpenVRInternal_ModuleServerDriverContext().VRProperties(); } + inline CVRHiddenAreaHelpers *VR_CALLTYPE VRHiddenArea() { return OpenVRInternal_ModuleServerDriverContext().VRHiddenArea(); } + inline IVRDriverLog *VR_CALLTYPE VRDriverLog() { return OpenVRInternal_ModuleServerDriverContext().VRDriverLog(); } + inline IVRServerDriverHost *VR_CALLTYPE VRServerDriverHost() { return OpenVRInternal_ModuleServerDriverContext().VRServerDriverHost(); } + inline IVRWatchdogHost *VR_CALLTYPE VRWatchdogHost() { return OpenVRInternal_ModuleServerDriverContext().VRWatchdogHost(); } + inline IVRCompositorDriverHost *VR_CALLTYPE VRCompositorDriverHost() { return OpenVRInternal_ModuleServerDriverContext().VRCompositorDriverHost(); } + inline DriverHandle_t VR_CALLTYPE VRDriverHandle() { return OpenVRInternal_ModuleServerDriverContext().VRDriverHandle(); } + inline IVRDriverManager *VR_CALLTYPE VRDriverManager() { return OpenVRInternal_ModuleServerDriverContext().VRDriverManager(); } + inline IVRResources *VR_CALLTYPE VRResources() { return OpenVRInternal_ModuleServerDriverContext().VRResources(); } + inline IVRDriverInput *VR_CALLTYPE VRDriverInput() { return OpenVRInternal_ModuleServerDriverContext().VRDriverInput(); } + inline IVRIOBuffer *VR_CALLTYPE VRIOBuffer() { return OpenVRInternal_ModuleServerDriverContext().VRIOBuffer(); } + inline IVRDriverSpatialAnchors *VR_CALLTYPE VRDriverSpatialAnchors() { return OpenVRInternal_ModuleServerDriverContext().VRDriverSpatialAnchors(); } + + inline void COpenVRDriverContext::Clear() + { + m_pVRSettings = nullptr; + m_pVRProperties = nullptr; + m_pVRServerDriverHost = nullptr; + m_pVRWatchdogHost = nullptr; + m_pVRCompositorDriverHost = nullptr; + m_pVRDriverLog = nullptr; + m_pVRDriverManager = nullptr; + m_pVRResources = nullptr; + m_pVRDriverInput = nullptr; + m_pVRIOBuffer = nullptr; + m_pVRDriverSpatialAnchors = nullptr; + } + + inline EVRInitError COpenVRDriverContext::InitServer() + { + Clear(); + if ( !VRServerDriverHost() + || !VRSettings() + || !VRProperties() + || !VRDriverLog() + || !VRDriverManager() + || !VRResources() ) + return VRInitError_Init_InterfaceNotFound; + return VRInitError_None; + } + + inline EVRInitError COpenVRDriverContext::InitWatchdog() + { + Clear(); + if ( !VRWatchdogHost() + || !VRSettings() + || !VRDriverLog() ) + return VRInitError_Init_InterfaceNotFound; + return VRInitError_None; + } + + inline EVRInitError COpenVRDriverContext::InitCompositor() + { + Clear(); + if ( !VRCompositorDriverHost() + || !VRSettings() + || !VRProperties() + || !VRDriverLog() + || !VRDriverManager() + || !VRResources() ) + return VRInitError_Init_InterfaceNotFound; + return VRInitError_None; + } + + inline EVRInitError InitServerDriverContext( IVRDriverContext *pContext ) + { + VRDriverContext() = pContext; + return OpenVRInternal_ModuleServerDriverContext().InitServer(); + } + + inline EVRInitError InitWatchdogDriverContext( IVRDriverContext *pContext ) + { + VRDriverContext() = pContext; + return OpenVRInternal_ModuleServerDriverContext().InitWatchdog(); + } + + inline EVRInitError InitCompositorDriverContext( IVRDriverContext *pContext ) + { + VRDriverContext() = pContext; + return OpenVRInternal_ModuleServerDriverContext().InitCompositor(); + } + + inline void CleanupDriverContext() + { + VRDriverContext() = nullptr; + OpenVRInternal_ModuleServerDriverContext().Clear(); + } + + #define VR_INIT_SERVER_DRIVER_CONTEXT( pContext ) \ + { \ + vr::EVRInitError eError = vr::InitServerDriverContext( pContext ); \ + if( eError != vr::VRInitError_None ) \ + return eError; \ + } + + #define VR_CLEANUP_SERVER_DRIVER_CONTEXT() \ + vr::CleanupDriverContext(); + + #define VR_INIT_WATCHDOG_DRIVER_CONTEXT( pContext ) \ + { \ + vr::EVRInitError eError = vr::InitWatchdogDriverContext( pContext ); \ + if( eError != vr::VRInitError_None ) \ + return eError; \ + } + + #define VR_CLEANUP_WATCHDOG_DRIVER_CONTEXT() \ + vr::CleanupDriverContext(); + +#define VR_INIT_COMPOSITOR_DRIVER_CONTEXT( pContext ) \ + { \ + vr::EVRInitError eError = vr::InitCompositorDriverContext( pContext ); \ + if( eError != vr::VRInitError_None ) \ + return eError; \ + } + +#define VR_CLEANUP_COMPOSITOR_DRIVER_CONTEXT() \ + vr::CleanupDriverContext(); + + +#endif // OPENVR_INTERFACE_INTERNAL + +} +// End + +#endif // _OPENVR_DRIVER_API + + diff --git a/contrib/openvr/src/CMakeLists.txt b/contrib/openvr/src/CMakeLists.txt new file mode 100755 index 0000000..29b69c5 --- /dev/null +++ b/contrib/openvr/src/CMakeLists.txt @@ -0,0 +1,116 @@ +# Project name. +project(openvr_api) + +set( LIBNAME "openvr_api" ) +set(OPENVR_HEADER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../headers) + +# Set some properies for specific files. +if(APPLE) + set(CMAKE_MACOSX_RPATH 1) + if(CMAKE_SYSTEM_NAME MATCHES "Darwin") + set_source_files_properties(vrcommon/pathtools_public.cpp vrcommon/vrpathregistry_public.cpp PROPERTIES COMPILE_FLAGS "-x objective-c++") + endif() + if(BUILD_SHARED OR BUILD_FRAMEWORK) + find_library(FOUNDATION_FRAMEWORK Foundation) + mark_as_advanced(FOUNDATION_FRAMEWORK) + set(EXTRA_LIBS ${EXTRA_LIBS} ${FOUNDATION_FRAMEWORK}) + endif(BUILD_SHARED OR BUILD_FRAMEWORK) +elseif(WIN32) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + add_definitions( -DWIN64 ) + set( LIBNAME "openvr_api64" ) + endif() +endif() + +# Add include folders. +include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../headers ${CMAKE_CURRENT_SOURCE_DIR}/vrcommon) + +if(USE_CUSTOM_LIBCXX) + link_directories( + ${LIBCXX_LIB_DIR} + ) +endif() + +# Set the source group and files. +set(CORE_FILES + openvr_api_public.cpp + jsoncpp.cpp +) +set(VRCOMMON_FILES + vrcommon/dirtools_public.cpp + vrcommon/envvartools_public.cpp + vrcommon/pathtools_public.cpp + vrcommon/sharedlibtools_public.cpp + vrcommon/hmderrors_public.cpp + vrcommon/vrpathregistry_public.cpp + vrcommon/strtools_public.cpp +) + +set(SOURCE_FILES + ${CORE_FILES} + ${VRCOMMON_FILES} +) + +set(PUBLIC_HEADER_FILES + ${OPENVR_HEADER_DIR}/openvr_driver.h + ${OPENVR_HEADER_DIR}/openvr_capi.h + ${OPENVR_HEADER_DIR}/openvr.h +) + +source_group("Src" FILES + ${CORE_FILES} +) + +source_group("VRCommon" FILES + ${VRCOMMON_FILES} +) + +# Build the library. +if(BUILD_SHARED) + add_library(${LIBNAME} SHARED ${SOURCE_FILES}) +elseif(BUILD_FRAMEWORK) + set( LIBNAME "OpenVR" ) + add_library( ${LIBNAME} + SHARED ${SOURCE_FILES} + ${CMAKE_SOURCE_DIR}/headers/openvr.h + ${CMAKE_SOURCE_DIR}/headers/openvr_api.cs + ${CMAKE_SOURCE_DIR}/headers/openvr_api.json + ${CMAKE_SOURCE_DIR}/headers/openvr_capi.h + ${CMAKE_SOURCE_DIR}/headers/openvr_driver.h + ) + set_target_properties(OpenVR PROPERTIES + FRAMEWORK TRUE + FRAMEWORK_VERSION A + MACOSX_FRAMEWORK_IDENTIFIER com.valvesoftware.OpenVR.framework + MACOSX_FRAMEWORK_INFO_PLIST ${CMAKE_SOURCE_DIR}/src/Info.plist + # "current version" in semantic format in Mach-O binary file + VERSION 1.0.6 + # "compatibility version" in semantic format in Mach-O binary file + SOVERSION 1.0.0 + PUBLIC_HEADER "${CMAKE_SOURCE_DIR}/headers/openvr.h;${CMAKE_SOURCE_DIR}/headers/openvr_api.cs;${CMAKE_SOURCE_DIR}/headers/openvr_api.json;${CMAKE_SOURCE_DIR}/headers/openvr_capi.h;${CMAKE_SOURCE_DIR}/headers/openvr_driver.h" + LINKER_LANGUAGE CXX + ) +else() + add_library(${LIBNAME} STATIC ${SOURCE_FILES}) +endif() + +if(USE_CUSTOM_LIBCXX) + set(EXTRA_LIBS ${EXTRA_LIBS} c++ c++abi) +endif() + +target_link_libraries(${LIBNAME} ${EXTRA_LIBS} ${CMAKE_DL_LIBS}) +target_include_directories(${LIBNAME} PUBLIC ${OPENVR_HEADER_DIR}) + +install(TARGETS ${LIBNAME} DESTINATION lib) +install(FILES ${PUBLIC_HEADER_FILES} DESTINATION include/openvr) + +# Generate a .pc file for linux environments +if(PLATFORM_NAME MATCHES "linux") + set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/share/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files") + CONFIGURE_FILE("openvr.pc.in" "openvr.pc" @ONLY) + + set(OPENVR_PC ${CMAKE_CURRENT_BINARY_DIR}/openvr.pc) + if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) + install(FILES ${OPENVR_PC} DESTINATION "${INSTALL_PKGCONFIG_DIR}") + endif() +endif() diff --git a/contrib/openvr/src/Info.plist b/contrib/openvr/src/Info.plist new file mode 100755 index 0000000..50ff90a --- /dev/null +++ b/contrib/openvr/src/Info.plist @@ -0,0 +1,18 @@ + + + + + CFBundleIdentifier + com.valvesoftware.OpenVR.framework + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + OpenVR + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1.0 + + diff --git a/contrib/openvr/src/README b/contrib/openvr/src/README new file mode 100755 index 0000000..826c58d --- /dev/null +++ b/contrib/openvr/src/README @@ -0,0 +1,39 @@ +This is the source code for the OpenVR API client binding library which connects +OpenVR applications to the SteamVR runtime, taking into account the version +of the OpenVR interface they were compiled against. + +The client binding library - openvr_api.dll on Windows, openvr_api.so on +Linux, and openvr_api.dylib or OpenVR.framework on macOS - knows how to find +and read the SteamVR runtime installation information which allows it to +find and dynamically connect to the installed runtime. In combination with the +interface version identifiers from /include/openvr.h which are baked +into applications at the time they are built, the OpenVR API client +binding library captures and conveys to the SteamVR runtime the version +of the OpenVR API interface behavior that the application expects. + +Applications carry with them a private/local copy of the client binding +library when they ship, and they should install it locally to their +application. Applications should not install the client binding library +globally or attempt to link to a globally installed client binding library. +Doing so negates at least part of the ability for the client binding library +to accurately reflect the version of the OpenVR API that the application +was built against, and so hinders compatibility support in the face of +API changes. + +Most applications should simply link to and redistribute with their application +the pre-built client binding library found in the /bin directory of this +repository. Some small number of applications which have specific requirements +around redistributing only binaries they build themselves should build +the client library from this source and either statically link it into +their application or redistribute the binary they build. + +This is a cmake project, to build it use the version of cmake appropriate +for your platform. For example, to build on a POSIX system simply perform + + cd src; mkdir _build; cd _build; cmake ..; make + +and you will end up with the static library /src/bin//libopenvr_api.a + +To build a shared library, pass -DBUILD_SHARED=1 to cmake. +To build as a framework on apple platforms, pass -DBUILD_FRAMEWORK=1 to cmake. +To see a complete list of configurable build options, use `cmake -LAH` diff --git a/contrib/openvr/src/ivrclientcore.h b/contrib/openvr/src/ivrclientcore.h new file mode 100755 index 0000000..6884e7f --- /dev/null +++ b/contrib/openvr/src/ivrclientcore.h @@ -0,0 +1,35 @@ +//========= Copyright Valve Corporation ============// +#pragma once + +namespace vr +{ + +class IVRClientCore +{ +public: + /** Initializes the system */ + virtual EVRInitError Init( vr::EVRApplicationType eApplicationType, const char *pStartupInfo ) = 0; + + /** cleans up everything in vrclient.dll and prepares the DLL to be unloaded */ + virtual void Cleanup() = 0; + + /** checks to see if the specified interface/version is supported in this vrclient.dll */ + virtual EVRInitError IsInterfaceVersionValid( const char *pchInterfaceVersion ) = 0; + + /** Retrieves any interface from vrclient.dll */ + virtual void *GetGenericInterface( const char *pchNameAndVersion, EVRInitError *peError ) = 0; + + /** Returns true if any driver has an HMD attached. Can be called outside of Init/Cleanup */ + virtual bool BIsHmdPresent() = 0; + + /** Returns an English error string from inside vrclient.dll which might be newer than the API DLL */ + virtual const char *GetEnglishStringForHmdError( vr::EVRInitError eError ) = 0; + + /** Returns an error symbol from inside vrclient.dll which might be newer than the API DLL */ + virtual const char *GetIDForVRInitError( vr::EVRInitError eError ) = 0; +}; + +static const char * const IVRClientCore_Version = "IVRClientCore_003"; + + +} diff --git a/contrib/openvr/src/json/json-forwards.h b/contrib/openvr/src/json/json-forwards.h new file mode 100755 index 0000000..910c7de --- /dev/null +++ b/contrib/openvr/src/json/json-forwards.h @@ -0,0 +1,284 @@ +/// Json-cpp amalgated forward header (http://jsoncpp.sourceforge.net/). +/// It is intended to be used with #include "json/json-forwards.h" +/// This header provides forward declaration for all JsonCpp types. + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + +/* +The JsonCpp library's source code, including accompanying documentation, +tests and demonstration applications, are licensed under the following +conditions... + +The author (Baptiste Lepilleur) explicitly disclaims copyright in all +jurisdictions which recognize such a disclaimer. In such jurisdictions, +this software is released into the Public Domain. + +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is +released under the terms of the MIT License (see below). + +In jurisdictions which recognize Public Domain property, the user of this +software may choose to accept it either as 1) Public Domain, 2) under the +conditions of the MIT License (see below), or 3) under the terms of dual +Public Domain/MIT License conditions described here, as they choose. + +The MIT License is about as close to Public Domain as a license can get, and is +described in clear, concise terms at: + + http://en.wikipedia.org/wiki/MIT_License + +The full text of the MIT License follows: + +======================================================================== +Copyright (c) 2007-2010 Baptiste Lepilleur + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +======================================================================== +(END LICENSE TEXT) + +The MIT license is compatible with both the GPL and commercial +software, affording one all of the rights of Public Domain with the +minor nuisance of being required to keep the above copyright notice +and license text in the source code. Note also that by accepting the +Public Domain "license" you can re-license your copy using whatever +license you like. + +*/ + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + + + + + +#ifndef JSON_FORWARD_AMALGATED_H_INCLUDED +# define JSON_FORWARD_AMALGATED_H_INCLUDED +/// If defined, indicates that the source file is amalgated +/// to prevent private header inclusion. +#define JSON_IS_AMALGAMATION + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/config.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_CONFIG_H_INCLUDED +#define JSON_CONFIG_H_INCLUDED + +/// If defined, indicates that json library is embedded in CppTL library. +//# define JSON_IN_CPPTL 1 + +/// If defined, indicates that json may leverage CppTL library +//# define JSON_USE_CPPTL 1 +/// If defined, indicates that cpptl vector based map should be used instead of +/// std::map +/// as Value container. +//# define JSON_USE_CPPTL_SMALLMAP 1 + +// If non-zero, the library uses exceptions to report bad input instead of C +// assertion macros. The default is to use exceptions. +#ifndef JSON_USE_EXCEPTION +#define JSON_USE_EXCEPTION 1 +#endif + +/// If defined, indicates that the source file is amalgated +/// to prevent private header inclusion. +/// Remarks: it is automatically defined in the generated amalgated header. +// #define JSON_IS_AMALGAMATION + +#ifdef JSON_IN_CPPTL +#include +#ifndef JSON_USE_CPPTL +#define JSON_USE_CPPTL 1 +#endif +#endif + +#ifdef JSON_IN_CPPTL +#define JSON_API CPPTL_API +#elif defined(JSON_DLL_BUILD) +#if defined(_MSC_VER) +#define JSON_API __declspec(dllexport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#endif // if defined(_MSC_VER) +#elif defined(JSON_DLL) +#if defined(_MSC_VER) +#define JSON_API __declspec(dllimport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#endif // if defined(_MSC_VER) +#endif // ifdef JSON_IN_CPPTL +#if !defined(JSON_API) +#define JSON_API +#endif + +// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for +// integer +// Storages, and 64 bits integer support is disabled. +// #define JSON_NO_INT64 1 + +#if defined(_MSC_VER) // MSVC +# if _MSC_VER <= 1200 // MSVC 6 + // Microsoft Visual Studio 6 only support conversion from __int64 to double + // (no conversion from unsigned __int64). +# define JSON_USE_INT64_DOUBLE_CONVERSION 1 + // Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255' + // characters in the debug information) + // All projects I've ever seen with VS6 were using this globally (not bothering + // with pragma push/pop). +# pragma warning(disable : 4786) +# endif // MSVC 6 + +# if _MSC_VER >= 1500 // MSVC 2008 + /// Indicates that the following function is deprecated. +# define JSONCPP_DEPRECATED(message) __declspec(deprecated(message)) +# endif + +#endif // defined(_MSC_VER) + + +#ifndef JSON_HAS_RVALUE_REFERENCES + +#if defined(_MSC_VER) && _MSC_VER >= 1600 // MSVC >= 2010 +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // MSVC >= 2010 + +#ifdef __clang__ +#if __has_feature(cxx_rvalue_references) +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // has_feature + +#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) +#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L) +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // GXX_EXPERIMENTAL + +#endif // __clang__ || __GNUC__ + +#endif // not defined JSON_HAS_RVALUE_REFERENCES + +#ifndef JSON_HAS_RVALUE_REFERENCES +#define JSON_HAS_RVALUE_REFERENCES 0 +#endif + +#ifdef __clang__ +#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) +# if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +# define JSONCPP_DEPRECATED(message) __attribute__ ((deprecated(message))) +# elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) +# define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__)) +# endif // GNUC version +#endif // __clang__ || __GNUC__ + +#if !defined(JSONCPP_DEPRECATED) +#define JSONCPP_DEPRECATED(message) +#endif // if !defined(JSONCPP_DEPRECATED) + +namespace Json { +typedef int Int; +typedef unsigned int UInt; +#if defined(JSON_NO_INT64) +typedef int LargestInt; +typedef unsigned int LargestUInt; +#undef JSON_HAS_INT64 +#else // if defined(JSON_NO_INT64) +// For Microsoft Visual use specific types as long long is not supported +#if defined(_MSC_VER) // Microsoft Visual Studio +typedef __int64 Int64; +typedef unsigned __int64 UInt64; +#else // if defined(_MSC_VER) // Other platforms, use long long +typedef long long int Int64; +typedef unsigned long long int UInt64; +#endif // if defined(_MSC_VER) +typedef Int64 LargestInt; +typedef UInt64 LargestUInt; +#define JSON_HAS_INT64 +#endif // if defined(JSON_NO_INT64) +} // end namespace Json + +#endif // JSON_CONFIG_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/config.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/forwards.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_FORWARDS_H_INCLUDED +#define JSON_FORWARDS_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "config.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +// writer.h +class FastWriter; +class StyledWriter; + +// reader.h +class Reader; + +// features.h +class Features; + +// value.h +typedef unsigned int ArrayIndex; +class StaticString; +class Path; +class PathArgument; +class Value; +class ValueIteratorBase; +class ValueIterator; +class ValueConstIterator; + +} // namespace Json + +#endif // JSON_FORWARDS_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/forwards.h +// ////////////////////////////////////////////////////////////////////// + + + + + +#endif //ifndef JSON_FORWARD_AMALGATED_H_INCLUDED diff --git a/contrib/openvr/src/json/json.h b/contrib/openvr/src/json/json.h new file mode 100755 index 0000000..d27f65d --- /dev/null +++ b/contrib/openvr/src/json/json.h @@ -0,0 +1,2077 @@ +/// Json-cpp amalgated header (http://jsoncpp.sourceforge.net/). +/// It is intended to be used with #include "json/json.h" + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + +/* +The JsonCpp library's source code, including accompanying documentation, +tests and demonstration applications, are licensed under the following +conditions... + +The author (Baptiste Lepilleur) explicitly disclaims copyright in all +jurisdictions which recognize such a disclaimer. In such jurisdictions, +this software is released into the Public Domain. + +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is +released under the terms of the MIT License (see below). + +In jurisdictions which recognize Public Domain property, the user of this +software may choose to accept it either as 1) Public Domain, 2) under the +conditions of the MIT License (see below), or 3) under the terms of dual +Public Domain/MIT License conditions described here, as they choose. + +The MIT License is about as close to Public Domain as a license can get, and is +described in clear, concise terms at: + + http://en.wikipedia.org/wiki/MIT_License + +The full text of the MIT License follows: + +======================================================================== +Copyright (c) 2007-2010 Baptiste Lepilleur + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +======================================================================== +(END LICENSE TEXT) + +The MIT license is compatible with both the GPL and commercial +software, affording one all of the rights of Public Domain with the +minor nuisance of being required to keep the above copyright notice +and license text in the source code. Note also that by accepting the +Public Domain "license" you can re-license your copy using whatever +license you like. + +*/ + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + + + + + +#ifndef JSON_AMALGATED_H_INCLUDED +# define JSON_AMALGATED_H_INCLUDED +/// If defined, indicates that the source file is amalgated +/// to prevent private header inclusion. +#define JSON_IS_AMALGAMATION + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/version.h +// ////////////////////////////////////////////////////////////////////// + +// DO NOT EDIT. This file (and "version") is generated by CMake. +// Run CMake configure step to update it. +#ifndef JSON_VERSION_H_INCLUDED +# define JSON_VERSION_H_INCLUDED + +# define JSONCPP_VERSION_STRING "1.6.5" +# define JSONCPP_VERSION_MAJOR 1 +# define JSONCPP_VERSION_MINOR 6 +# define JSONCPP_VERSION_PATCH 5 +# define JSONCPP_VERSION_QUALIFIER +# define JSONCPP_VERSION_HEXA ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | (JSONCPP_VERSION_PATCH << 8)) + +#endif // JSON_VERSION_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/version.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/config.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_CONFIG_H_INCLUDED +#define JSON_CONFIG_H_INCLUDED + +/// If defined, indicates that json library is embedded in CppTL library. +//# define JSON_IN_CPPTL 1 + +/// If defined, indicates that json may leverage CppTL library +//# define JSON_USE_CPPTL 1 +/// If defined, indicates that cpptl vector based map should be used instead of +/// std::map +/// as Value container. +//# define JSON_USE_CPPTL_SMALLMAP 1 + +// If non-zero, the library uses exceptions to report bad input instead of C +// assertion macros. The default is to use exceptions. +#ifndef JSON_USE_EXCEPTION +#define JSON_USE_EXCEPTION 1 +#endif + +/// If defined, indicates that the source file is amalgated +/// to prevent private header inclusion. +/// Remarks: it is automatically defined in the generated amalgated header. +// #define JSON_IS_AMALGAMATION + +#ifdef JSON_IN_CPPTL +#include +#ifndef JSON_USE_CPPTL +#define JSON_USE_CPPTL 1 +#endif +#endif + +#ifdef JSON_IN_CPPTL +#define JSON_API CPPTL_API +#elif defined(JSON_DLL_BUILD) +#if defined(_MSC_VER) +#define JSON_API __declspec(dllexport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#endif // if defined(_MSC_VER) +#elif defined(JSON_DLL) +#if defined(_MSC_VER) +#define JSON_API __declspec(dllimport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#endif // if defined(_MSC_VER) +#endif // ifdef JSON_IN_CPPTL +#if !defined(JSON_API) +#define JSON_API +#endif + +// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for +// integer +// Storages, and 64 bits integer support is disabled. +// #define JSON_NO_INT64 1 + +#if defined(_MSC_VER) // MSVC +# if _MSC_VER <= 1200 // MSVC 6 + // Microsoft Visual Studio 6 only support conversion from __int64 to double + // (no conversion from unsigned __int64). +# define JSON_USE_INT64_DOUBLE_CONVERSION 1 + // Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255' + // characters in the debug information) + // All projects I've ever seen with VS6 were using this globally (not bothering + // with pragma push/pop). +# pragma warning(disable : 4786) +# endif // MSVC 6 + +# if _MSC_VER >= 1500 // MSVC 2008 + /// Indicates that the following function is deprecated. +# define JSONCPP_DEPRECATED(message) __declspec(deprecated(message)) +# endif + +#endif // defined(_MSC_VER) + + +#ifndef JSON_HAS_RVALUE_REFERENCES + +#if defined(_MSC_VER) && _MSC_VER >= 1600 // MSVC >= 2010 +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // MSVC >= 2010 + +#ifdef __clang__ +#if __has_feature(cxx_rvalue_references) +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // has_feature + +#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) +#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L) +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // GXX_EXPERIMENTAL + +#endif // __clang__ || __GNUC__ + +#endif // not defined JSON_HAS_RVALUE_REFERENCES + +#ifndef JSON_HAS_RVALUE_REFERENCES +#define JSON_HAS_RVALUE_REFERENCES 0 +#endif + +#ifdef __clang__ +#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) +# if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +# define JSONCPP_DEPRECATED(message) __attribute__ ((deprecated(message))) +# elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) +# define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__)) +# endif // GNUC version +#endif // __clang__ || __GNUC__ + +#if !defined(JSONCPP_DEPRECATED) +#define JSONCPP_DEPRECATED(message) +#endif // if !defined(JSONCPP_DEPRECATED) + +namespace Json { +typedef int Int; +typedef unsigned int UInt; +#if defined(JSON_NO_INT64) +typedef int LargestInt; +typedef unsigned int LargestUInt; +#undef JSON_HAS_INT64 +#else // if defined(JSON_NO_INT64) +// For Microsoft Visual use specific types as long long is not supported +#if defined(_MSC_VER) // Microsoft Visual Studio +typedef __int64 Int64; +typedef unsigned __int64 UInt64; +#else // if defined(_MSC_VER) // Other platforms, use long long +typedef long long int Int64; +typedef unsigned long long int UInt64; +#endif // if defined(_MSC_VER) +typedef Int64 LargestInt; +typedef UInt64 LargestUInt; +#define JSON_HAS_INT64 +#endif // if defined(JSON_NO_INT64) +} // end namespace Json + +#endif // JSON_CONFIG_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/config.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/forwards.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_FORWARDS_H_INCLUDED +#define JSON_FORWARDS_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "config.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +// writer.h +class FastWriter; +class StyledWriter; + +// reader.h +class Reader; + +// features.h +class Features; + +// value.h +typedef unsigned int ArrayIndex; +class StaticString; +class Path; +class PathArgument; +class Value; +class ValueIteratorBase; +class ValueIterator; +class ValueConstIterator; + +} // namespace Json + +#endif // JSON_FORWARDS_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/forwards.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/features.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_FEATURES_H_INCLUDED +#define CPPTL_JSON_FEATURES_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "forwards.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +/** \brief Configuration passed to reader and writer. + * This configuration object can be used to force the Reader or Writer + * to behave in a standard conforming way. + */ +class JSON_API Features { +public: + /** \brief A configuration that allows all features and assumes all strings + * are UTF-8. + * - C & C++ comments are allowed + * - Root object can be any JSON value + * - Assumes Value strings are encoded in UTF-8 + */ + static Features all(); + + /** \brief A configuration that is strictly compatible with the JSON + * specification. + * - Comments are forbidden. + * - Root object must be either an array or an object value. + * - Assumes Value strings are encoded in UTF-8 + */ + static Features strictMode(); + + /** \brief Initialize the configuration like JsonConfig::allFeatures; + */ + Features(); + + /// \c true if comments are allowed. Default: \c true. + bool allowComments_; + + /// \c true if root must be either an array or an object value. Default: \c + /// false. + bool strictRoot_; + + /// \c true if dropped null placeholders are allowed. Default: \c false. + bool allowDroppedNullPlaceholders_; + + /// \c true if numeric object key are allowed. Default: \c false. + bool allowNumericKeys_; +}; + +} // namespace Json + +#endif // CPPTL_JSON_FEATURES_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/features.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/value.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_H_INCLUDED +#define CPPTL_JSON_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "forwards.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include + +#ifndef JSON_USE_CPPTL_SMALLMAP +#include +#else +#include +#endif +#ifdef JSON_USE_CPPTL +#include +#endif + +// Disable warning C4251: : needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +/** \brief JSON (JavaScript Object Notation). + */ +namespace Json { + +/** Base class for all exceptions we throw. + * + * We use nothing but these internally. Of course, STL can throw others. + */ +class JSON_API Exception : public std::exception { +public: + Exception(std::string const& msg); + ~Exception() throw(); + char const* what() const throw(); +protected: + std::string msg_; +}; + +/** Exceptions which the user cannot easily avoid. + * + * E.g. out-of-memory (when we use malloc), stack-overflow, malicious input + * + * \remark derived from Json::Exception + */ +class JSON_API RuntimeError : public Exception { +public: + RuntimeError(std::string const& msg); +}; + +/** Exceptions thrown by JSON_ASSERT/JSON_FAIL macros. + * + * These are precondition-violations (user bugs) and internal errors (our bugs). + * + * \remark derived from Json::Exception + */ +class JSON_API LogicError : public Exception { +public: + LogicError(std::string const& msg); +}; + +/// used internally +void throwRuntimeError(std::string const& msg); +/// used internally +void throwLogicError(std::string const& msg); + +/** \brief Type of the value held by a Value object. + */ +enum ValueType { + nullValue = 0, ///< 'null' value + intValue, ///< signed integer value + uintValue, ///< unsigned integer value + realValue, ///< double value + stringValue, ///< UTF-8 string value + booleanValue, ///< bool value + arrayValue, ///< array value (ordered list) + objectValue ///< object value (collection of name/value pairs). +}; + +enum CommentPlacement { + commentBefore = 0, ///< a comment placed on the line before a value + commentAfterOnSameLine, ///< a comment just after a value on the same line + commentAfter, ///< a comment on the line after a value (only make sense for + /// root value) + numberOfCommentPlacement +}; + +//# ifdef JSON_USE_CPPTL +// typedef CppTL::AnyEnumerator EnumMemberNames; +// typedef CppTL::AnyEnumerator EnumValues; +//# endif + +/** \brief Lightweight wrapper to tag static string. + * + * Value constructor and objectValue member assignement takes advantage of the + * StaticString and avoid the cost of string duplication when storing the + * string or the member name. + * + * Example of usage: + * \code + * Json::Value aValue( StaticString("some text") ); + * Json::Value object; + * static const StaticString code("code"); + * object[code] = 1234; + * \endcode + */ +class JSON_API StaticString { +public: + explicit StaticString(const char* czstring) : c_str_(czstring) {} + + operator const char*() const { return c_str_; } + + const char* c_str() const { return c_str_; } + +private: + const char* c_str_; +}; + +/** \brief Represents a JSON value. + * + * This class is a discriminated union wrapper that can represents a: + * - signed integer [range: Value::minInt - Value::maxInt] + * - unsigned integer (range: 0 - Value::maxUInt) + * - double + * - UTF-8 string + * - boolean + * - 'null' + * - an ordered list of Value + * - collection of name/value pairs (javascript object) + * + * The type of the held value is represented by a #ValueType and + * can be obtained using type(). + * + * Values of an #objectValue or #arrayValue can be accessed using operator[]() + * methods. + * Non-const methods will automatically create the a #nullValue element + * if it does not exist. + * The sequence of an #arrayValue will be automatically resized and initialized + * with #nullValue. resize() can be used to enlarge or truncate an #arrayValue. + * + * The get() methods can be used to obtain default value in the case the + * required element does not exist. + * + * It is possible to iterate over the list of a #objectValue values using + * the getMemberNames() method. + * + * \note #Value string-length fit in size_t, but keys must be < 2^30. + * (The reason is an implementation detail.) A #CharReader will raise an + * exception if a bound is exceeded to avoid security holes in your app, + * but the Value API does *not* check bounds. That is the responsibility + * of the caller. + */ +class JSON_API Value { + friend class ValueIteratorBase; +public: + typedef std::vector Members; + typedef ValueIterator iterator; + typedef ValueConstIterator const_iterator; + typedef Json::UInt UInt; + typedef Json::Int Int; +#if defined(JSON_HAS_INT64) + typedef Json::UInt64 UInt64; + typedef Json::Int64 Int64; +#endif // defined(JSON_HAS_INT64) + typedef Json::LargestInt LargestInt; + typedef Json::LargestUInt LargestUInt; + typedef Json::ArrayIndex ArrayIndex; + + static const Value& null; ///< We regret this reference to a global instance; prefer the simpler Value(). + static const Value& nullRef; ///< just a kludge for binary-compatibility; same as null + /// Minimum signed integer value that can be stored in a Json::Value. + static const LargestInt minLargestInt; + /// Maximum signed integer value that can be stored in a Json::Value. + static const LargestInt maxLargestInt; + /// Maximum unsigned integer value that can be stored in a Json::Value. + static const LargestUInt maxLargestUInt; + + /// Minimum signed int value that can be stored in a Json::Value. + static const Int minInt; + /// Maximum signed int value that can be stored in a Json::Value. + static const Int maxInt; + /// Maximum unsigned int value that can be stored in a Json::Value. + static const UInt maxUInt; + +#if defined(JSON_HAS_INT64) + /// Minimum signed 64 bits int value that can be stored in a Json::Value. + static const Int64 minInt64; + /// Maximum signed 64 bits int value that can be stored in a Json::Value. + static const Int64 maxInt64; + /// Maximum unsigned 64 bits int value that can be stored in a Json::Value. + static const UInt64 maxUInt64; +#endif // defined(JSON_HAS_INT64) + +private: +#ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION + class CZString { + public: + enum DuplicationPolicy { + noDuplication = 0, + duplicate, + duplicateOnCopy + }; + CZString(ArrayIndex index); + CZString(char const* str, unsigned length, DuplicationPolicy allocate); + CZString(CZString const& other); +#if JSON_HAS_RVALUE_REFERENCES + CZString(CZString&& other); +#endif + ~CZString(); + CZString& operator=(CZString other); + bool operator<(CZString const& other) const; + bool operator==(CZString const& other) const; + ArrayIndex index() const; + //const char* c_str() const; ///< \deprecated + char const* data() const; + unsigned length() const; + bool isStaticString() const; + + private: + void swap(CZString& other); + + struct StringStorage { + unsigned policy_: 2; + unsigned length_: 30; // 1GB max + }; + + char const* cstr_; // actually, a prefixed string, unless policy is noDup + union { + ArrayIndex index_; + StringStorage storage_; + }; + }; + +public: +#ifndef JSON_USE_CPPTL_SMALLMAP + typedef std::map ObjectValues; +#else + typedef CppTL::SmallMap ObjectValues; +#endif // ifndef JSON_USE_CPPTL_SMALLMAP +#endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION + +public: + /** \brief Create a default Value of the given type. + + This is a very useful constructor. + To create an empty array, pass arrayValue. + To create an empty object, pass objectValue. + Another Value can then be set to this one by assignment. +This is useful since clear() and resize() will not alter types. + + Examples: +\code +Json::Value null_value; // null +Json::Value arr_value(Json::arrayValue); // [] +Json::Value obj_value(Json::objectValue); // {} +\endcode + */ + Value(ValueType type = nullValue); + Value(Int value); + Value(UInt value); +#if defined(JSON_HAS_INT64) + Value(Int64 value); + Value(UInt64 value); +#endif // if defined(JSON_HAS_INT64) + Value(double value); + Value(const char* value); ///< Copy til first 0. (NULL causes to seg-fault.) + Value(const char* begin, const char* end); ///< Copy all, incl zeroes. + /** \brief Constructs a value from a static string. + + * Like other value string constructor but do not duplicate the string for + * internal storage. The given string must remain alive after the call to this + * constructor. + * \note This works only for null-terminated strings. (We cannot change the + * size of this class, so we have nowhere to store the length, + * which might be computed later for various operations.) + * + * Example of usage: + * \code + * static StaticString foo("some text"); + * Json::Value aValue(foo); + * \endcode + */ + Value(const StaticString& value); + Value(const std::string& value); ///< Copy data() til size(). Embedded zeroes too. +#ifdef JSON_USE_CPPTL + Value(const CppTL::ConstString& value); +#endif + Value(bool value); + /// Deep copy. + Value(const Value& other); +#if JSON_HAS_RVALUE_REFERENCES + /// Move constructor + Value(Value&& other); +#endif + ~Value(); + + /// Deep copy, then swap(other). + /// \note Over-write existing comments. To preserve comments, use #swapPayload(). + Value& operator=(Value other); + /// Swap everything. + void swap(Value& other); + /// Swap values but leave comments and source offsets in place. + void swapPayload(Value& other); + + ValueType type() const; + + /// Compare payload only, not comments etc. + bool operator<(const Value& other) const; + bool operator<=(const Value& other) const; + bool operator>=(const Value& other) const; + bool operator>(const Value& other) const; + bool operator==(const Value& other) const; + bool operator!=(const Value& other) const; + int compare(const Value& other) const; + + const char* asCString() const; ///< Embedded zeroes could cause you trouble! + std::string asString() const; ///< Embedded zeroes are possible. + /** Get raw char* of string-value. + * \return false if !string. (Seg-fault if str or end are NULL.) + */ + bool getString( + char const** begin, char const** end) const; +#ifdef JSON_USE_CPPTL + CppTL::ConstString asConstString() const; +#endif + Int asInt() const; + UInt asUInt() const; +#if defined(JSON_HAS_INT64) + Int64 asInt64() const; + UInt64 asUInt64() const; +#endif // if defined(JSON_HAS_INT64) + LargestInt asLargestInt() const; + LargestUInt asLargestUInt() const; + float asFloat() const; + double asDouble() const; + bool asBool() const; + + bool isNull() const; + bool isBool() const; + bool isInt() const; + bool isInt64() const; + bool isUInt() const; + bool isUInt64() const; + bool isIntegral() const; + bool isDouble() const; + bool isNumeric() const; + bool isString() const; + bool isArray() const; + bool isObject() const; + + bool isConvertibleTo(ValueType other) const; + + /// Number of values in array or object + ArrayIndex size() const; + + /// \brief Return true if empty array, empty object, or null; + /// otherwise, false. + bool empty() const; + + /// Return isNull() + bool operator!() const; + + /// Remove all object members and array elements. + /// \pre type() is arrayValue, objectValue, or nullValue + /// \post type() is unchanged + void clear(); + + /// Resize the array to size elements. + /// New elements are initialized to null. + /// May only be called on nullValue or arrayValue. + /// \pre type() is arrayValue or nullValue + /// \post type() is arrayValue + void resize(ArrayIndex size); + + /// Access an array element (zero based index ). + /// If the array contains less than index element, then null value are + /// inserted + /// in the array so that its size is index+1. + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + Value& operator[](ArrayIndex index); + + /// Access an array element (zero based index ). + /// If the array contains less than index element, then null value are + /// inserted + /// in the array so that its size is index+1. + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + Value& operator[](int index); + + /// Access an array element (zero based index ) + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + const Value& operator[](ArrayIndex index) const; + + /// Access an array element (zero based index ) + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + const Value& operator[](int index) const; + + /// If the array contains at least index+1 elements, returns the element + /// value, + /// otherwise returns defaultValue. + Value get(ArrayIndex index, const Value& defaultValue) const; + /// Return true if index < size(). + bool isValidIndex(ArrayIndex index) const; + /// \brief Append value to array at the end. + /// + /// Equivalent to jsonvalue[jsonvalue.size()] = value; + Value& append(const Value& value); + + /// Access an object value by name, create a null member if it does not exist. + /// \note Because of our implementation, keys are limited to 2^30 -1 chars. + /// Exceeding that will cause an exception. + Value& operator[](const char* key); + /// Access an object value by name, returns null if there is no member with + /// that name. + const Value& operator[](const char* key) const; + /// Access an object value by name, create a null member if it does not exist. + /// \param key may contain embedded nulls. + Value& operator[](const std::string& key); + /// Access an object value by name, returns null if there is no member with + /// that name. + /// \param key may contain embedded nulls. + const Value& operator[](const std::string& key) const; + /** \brief Access an object value by name, create a null member if it does not + exist. + + * If the object has no entry for that name, then the member name used to store + * the new entry is not duplicated. + * Example of use: + * \code + * Json::Value object; + * static const StaticString code("code"); + * object[code] = 1234; + * \endcode + */ + Value& operator[](const StaticString& key); +#ifdef JSON_USE_CPPTL + /// Access an object value by name, create a null member if it does not exist. + Value& operator[](const CppTL::ConstString& key); + /// Access an object value by name, returns null if there is no member with + /// that name. + const Value& operator[](const CppTL::ConstString& key) const; +#endif + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + Value get(const char* key, const Value& defaultValue) const; + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + /// \note key may contain embedded nulls. + Value get(const char* begin, const char* end, const Value& defaultValue) const; + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + /// \param key may contain embedded nulls. + Value get(const std::string& key, const Value& defaultValue) const; +#ifdef JSON_USE_CPPTL + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + Value get(const CppTL::ConstString& key, const Value& defaultValue) const; +#endif + /// Most general and efficient version of isMember()const, get()const, + /// and operator[]const + /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 + Value const* find(char const* begin, char const* end) const; + /// Most general and efficient version of object-mutators. + /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 + /// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue. + Value const* demand(char const* begin, char const* end); + /// \brief Remove and return the named member. + /// + /// Do nothing if it did not exist. + /// \return the removed Value, or null. + /// \pre type() is objectValue or nullValue + /// \post type() is unchanged + /// \deprecated + Value removeMember(const char* key); + /// Same as removeMember(const char*) + /// \param key may contain embedded nulls. + /// \deprecated + Value removeMember(const std::string& key); + /// Same as removeMember(const char* begin, const char* end, Value* removed), + /// but 'key' is null-terminated. + bool removeMember(const char* key, Value* removed); + /** \brief Remove the named map member. + + Update 'removed' iff removed. + \param key may contain embedded nulls. + \return true iff removed (no exceptions) + */ + bool removeMember(std::string const& key, Value* removed); + /// Same as removeMember(std::string const& key, Value* removed) + bool removeMember(const char* begin, const char* end, Value* removed); + /** \brief Remove the indexed array element. + + O(n) expensive operations. + Update 'removed' iff removed. + \return true iff removed (no exceptions) + */ + bool removeIndex(ArrayIndex i, Value* removed); + + /// Return true if the object has a member named key. + /// \note 'key' must be null-terminated. + bool isMember(const char* key) const; + /// Return true if the object has a member named key. + /// \param key may contain embedded nulls. + bool isMember(const std::string& key) const; + /// Same as isMember(std::string const& key)const + bool isMember(const char* begin, const char* end) const; +#ifdef JSON_USE_CPPTL + /// Return true if the object has a member named key. + bool isMember(const CppTL::ConstString& key) const; +#endif + + /// \brief Return a list of the member names. + /// + /// If null, return an empty list. + /// \pre type() is objectValue or nullValue + /// \post if type() was nullValue, it remains nullValue + Members getMemberNames() const; + + //# ifdef JSON_USE_CPPTL + // EnumMemberNames enumMemberNames() const; + // EnumValues enumValues() const; + //# endif + + /// \deprecated Always pass len. + JSONCPP_DEPRECATED("Use setComment(std::string const&) instead.") + void setComment(const char* comment, CommentPlacement placement); + /// Comments must be //... or /* ... */ + void setComment(const char* comment, size_t len, CommentPlacement placement); + /// Comments must be //... or /* ... */ + void setComment(const std::string& comment, CommentPlacement placement); + bool hasComment(CommentPlacement placement) const; + /// Include delimiters and embedded newlines. + std::string getComment(CommentPlacement placement) const; + + std::string toStyledString() const; + + const_iterator begin() const; + const_iterator end() const; + + iterator begin(); + iterator end(); + + // Accessors for the [start, limit) range of bytes within the JSON text from + // which this value was parsed, if any. + void setOffsetStart(size_t start); + void setOffsetLimit(size_t limit); + size_t getOffsetStart() const; + size_t getOffsetLimit() const; + +private: + void initBasic(ValueType type, bool allocated = false); + + Value& resolveReference(const char* key); + Value& resolveReference(const char* key, const char* end); + + struct CommentInfo { + CommentInfo(); + ~CommentInfo(); + + void setComment(const char* text, size_t len); + + char* comment_; + }; + + // struct MemberNamesTransform + //{ + // typedef const char *result_type; + // const char *operator()( const CZString &name ) const + // { + // return name.c_str(); + // } + //}; + + union ValueHolder { + LargestInt int_; + LargestUInt uint_; + double real_; + bool bool_; + char* string_; // actually ptr to unsigned, followed by str, unless !allocated_ + ObjectValues* map_; + } value_; + ValueType type_ : 8; + unsigned int allocated_ : 1; // Notes: if declared as bool, bitfield is useless. + // If not allocated_, string_ must be null-terminated. + CommentInfo* comments_; + Value *default_value_; // if via .get( "key", default ), this was the default + + // [start, limit) byte offsets in the source JSON text from which this Value + // was extracted. + size_t start_; + size_t limit_; +}; + +/** \brief Experimental and untested: represents an element of the "path" to + * access a node. + */ +class JSON_API PathArgument { +public: + friend class Path; + + PathArgument(); + PathArgument(ArrayIndex index); + PathArgument(const char* key); + PathArgument(const std::string& key); + +private: + enum Kind { + kindNone = 0, + kindIndex, + kindKey + }; + std::string key_; + ArrayIndex index_; + Kind kind_; +}; + +/** \brief Experimental and untested: represents a "path" to access a node. + * + * Syntax: + * - "." => root node + * - ".[n]" => elements at index 'n' of root node (an array value) + * - ".name" => member named 'name' of root node (an object value) + * - ".name1.name2.name3" + * - ".[0][1][2].name1[3]" + * - ".%" => member name is provided as parameter + * - ".[%]" => index is provied as parameter + */ +class JSON_API Path { +public: + Path(const std::string& path, + const PathArgument& a1 = PathArgument(), + const PathArgument& a2 = PathArgument(), + const PathArgument& a3 = PathArgument(), + const PathArgument& a4 = PathArgument(), + const PathArgument& a5 = PathArgument()); + + const Value& resolve(const Value& root) const; + Value resolve(const Value& root, const Value& defaultValue) const; + /// Creates the "path" to access the specified node and returns a reference on + /// the node. + Value& make(Value& root) const; + +private: + typedef std::vector InArgs; + typedef std::vector Args; + + void makePath(const std::string& path, const InArgs& in); + void addPathInArg(const std::string& path, + const InArgs& in, + InArgs::const_iterator& itInArg, + PathArgument::Kind kind); + void invalidPath(const std::string& path, int location); + + Args args_; +}; + +/** \brief base class for Value iterators. + * + */ +class JSON_API ValueIteratorBase { +public: + typedef std::bidirectional_iterator_tag iterator_category; + typedef unsigned int size_t; + typedef int difference_type; + typedef ValueIteratorBase SelfType; + + bool operator==(const SelfType& other) const { return isEqual(other); } + + bool operator!=(const SelfType& other) const { return !isEqual(other); } + + difference_type operator-(const SelfType& other) const { + return other.computeDistance(*this); + } + + /// Return either the index or the member name of the referenced value as a + /// Value. + Value key() const; + + /// Return the index of the referenced Value, or -1 if it is not an arrayValue. + UInt index() const; + + /// Return the member name of the referenced Value, or "" if it is not an + /// objectValue. + /// \note Avoid `c_str()` on result, as embedded zeroes are possible. + std::string name() const; + + /// Return the member name of the referenced Value. "" if it is not an + /// objectValue. + /// \deprecated This cannot be used for UTF-8 strings, since there can be embedded nulls. + JSONCPP_DEPRECATED("Use `key = name();` instead.") + char const* memberName() const; + /// Return the member name of the referenced Value, or NULL if it is not an + /// objectValue. + /// \note Better version than memberName(). Allows embedded nulls. + char const* memberName(char const** end) const; + +protected: + Value& deref() const; + + void increment(); + + void decrement(); + + difference_type computeDistance(const SelfType& other) const; + + bool isEqual(const SelfType& other) const; + + void copy(const SelfType& other); + +private: + Value::ObjectValues::iterator current_; + // Indicates that iterator is for a null value. + bool isNull_; + +public: + // For some reason, BORLAND needs these at the end, rather + // than earlier. No idea why. + ValueIteratorBase(); + explicit ValueIteratorBase(const Value::ObjectValues::iterator& current); +}; + +/** \brief const iterator for object and array value. + * + */ +class JSON_API ValueConstIterator : public ValueIteratorBase { + friend class Value; + +public: + typedef const Value value_type; + //typedef unsigned int size_t; + //typedef int difference_type; + typedef const Value& reference; + typedef const Value* pointer; + typedef ValueConstIterator SelfType; + + ValueConstIterator(); + ValueConstIterator(ValueIterator const& other); + +private: +/*! \internal Use by Value to create an iterator. + */ + explicit ValueConstIterator(const Value::ObjectValues::iterator& current); +public: + SelfType& operator=(const ValueIteratorBase& other); + + SelfType operator++(int) { + SelfType temp(*this); + ++*this; + return temp; + } + + SelfType operator--(int) { + SelfType temp(*this); + --*this; + return temp; + } + + SelfType& operator--() { + decrement(); + return *this; + } + + SelfType& operator++() { + increment(); + return *this; + } + + reference operator*() const { return deref(); } + + pointer operator->() const { return &deref(); } +}; + +/** \brief Iterator for object and array value. + */ +class JSON_API ValueIterator : public ValueIteratorBase { + friend class Value; + +public: + typedef Value value_type; + typedef unsigned int size_t; + typedef int difference_type; + typedef Value& reference; + typedef Value* pointer; + typedef ValueIterator SelfType; + + ValueIterator(); + explicit ValueIterator(const ValueConstIterator& other); + ValueIterator(const ValueIterator& other); + +private: +/*! \internal Use by Value to create an iterator. + */ + explicit ValueIterator(const Value::ObjectValues::iterator& current); +public: + SelfType& operator=(const SelfType& other); + + SelfType operator++(int) { + SelfType temp(*this); + ++*this; + return temp; + } + + SelfType operator--(int) { + SelfType temp(*this); + --*this; + return temp; + } + + SelfType& operator--() { + decrement(); + return *this; + } + + SelfType& operator++() { + increment(); + return *this; + } + + reference operator*() const { return deref(); } + + pointer operator->() const { return &deref(); } +}; + +} // namespace Json + + +namespace std { +/// Specialize std::swap() for Json::Value. +template<> +inline void swap(Json::Value& a, Json::Value& b) { a.swap(b); } +} + + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // CPPTL_JSON_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/value.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/reader.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_READER_H_INCLUDED +#define CPPTL_JSON_READER_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "features.h" +#include "value.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include +#include +#include + +// Disable warning C4251: : needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +namespace Json { + +/** \brief Unserialize a JSON document into a + *Value. + * + * \deprecated Use CharReader and CharReaderBuilder. + */ +class JSON_API Reader { +public: + typedef char Char; + typedef const Char* Location; + + /** \brief An error tagged with where in the JSON text it was encountered. + * + * The offsets give the [start, limit) range of bytes within the text. Note + * that this is bytes, not codepoints. + * + */ + struct StructuredError { + size_t offset_start; + size_t offset_limit; + std::string message; + }; + + /** \brief Constructs a Reader allowing all features + * for parsing. + */ + Reader(); + + /** \brief Constructs a Reader allowing the specified feature set + * for parsing. + */ + Reader(const Features& features); + + /** \brief Read a Value from a JSON + * document. + * \param document UTF-8 encoded string containing the document to read. + * \param root [out] Contains the root value of the document if it was + * successfully parsed. + * \param collectComments \c true to collect comment and allow writing them + * back during + * serialization, \c false to discard comments. + * This parameter is ignored if + * Features::allowComments_ + * is \c false. + * \return \c true if the document was successfully parsed, \c false if an + * error occurred. + */ + bool + parse(const std::string& document, Value& root, bool collectComments = true); + + /** \brief Read a Value from a JSON + document. + * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the + document to read. + * \param endDoc Pointer on the end of the UTF-8 encoded string of the + document to read. + * Must be >= beginDoc. + * \param root [out] Contains the root value of the document if it was + * successfully parsed. + * \param collectComments \c true to collect comment and allow writing them + back during + * serialization, \c false to discard comments. + * This parameter is ignored if + Features::allowComments_ + * is \c false. + * \return \c true if the document was successfully parsed, \c false if an + error occurred. + */ + bool parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments = true); + + /// \brief Parse from input stream. + /// \see Json::operator>>(std::istream&, Json::Value&). + bool parse(std::istream& is, Value& root, bool collectComments = true); + + /** \brief Returns a user friendly string that list errors in the parsed + * document. + * \return Formatted error message with the list of errors with their location + * in + * the parsed document. An empty string is returned if no error + * occurred + * during parsing. + * \deprecated Use getFormattedErrorMessages() instead (typo fix). + */ + JSONCPP_DEPRECATED("Use getFormattedErrorMessages() instead.") + std::string getFormatedErrorMessages() const; + + /** \brief Returns a user friendly string that list errors in the parsed + * document. + * \return Formatted error message with the list of errors with their location + * in + * the parsed document. An empty string is returned if no error + * occurred + * during parsing. + */ + std::string getFormattedErrorMessages() const; + + /** \brief Returns a vector of structured erros encounted while parsing. + * \return A (possibly empty) vector of StructuredError objects. Currently + * only one error can be returned, but the caller should tolerate + * multiple + * errors. This can occur if the parser recovers from a non-fatal + * parse error and then encounters additional errors. + */ + std::vector getStructuredErrors() const; + + /** \brief Add a semantic error message. + * \param value JSON Value location associated with the error + * \param message The error message. + * \return \c true if the error was successfully added, \c false if the + * Value offset exceeds the document size. + */ + bool pushError(const Value& value, const std::string& message); + + /** \brief Add a semantic error message with extra context. + * \param value JSON Value location associated with the error + * \param message The error message. + * \param extra Additional JSON Value location to contextualize the error + * \return \c true if the error was successfully added, \c false if either + * Value offset exceeds the document size. + */ + bool pushError(const Value& value, const std::string& message, const Value& extra); + + /** \brief Return whether there are any errors. + * \return \c true if there are no errors to report \c false if + * errors have occurred. + */ + bool good() const; + +private: + enum TokenType { + tokenEndOfStream = 0, + tokenObjectBegin, + tokenObjectEnd, + tokenArrayBegin, + tokenArrayEnd, + tokenString, + tokenNumber, + tokenTrue, + tokenFalse, + tokenNull, + tokenArraySeparator, + tokenMemberSeparator, + tokenComment, + tokenError + }; + + class Token { + public: + TokenType type_; + Location start_; + Location end_; + }; + + class ErrorInfo { + public: + Token token_; + std::string message_; + Location extra_; + }; + + typedef std::deque Errors; + + bool readToken(Token& token); + void skipSpaces(); + bool match(Location pattern, int patternLength); + bool readComment(); + bool readCStyleComment(); + bool readCppStyleComment(); + bool readString(); + void readNumber(); + bool readValue(); + bool readObject(Token& token); + bool readArray(Token& token); + bool decodeNumber(Token& token); + bool decodeNumber(Token& token, Value& decoded); + bool decodeString(Token& token); + bool decodeString(Token& token, std::string& decoded); + bool decodeDouble(Token& token); + bool decodeDouble(Token& token, Value& decoded); + bool decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool addError(const std::string& message, Token& token, Location extra = 0); + bool recoverFromError(TokenType skipUntilToken); + bool addErrorAndRecover(const std::string& message, + Token& token, + TokenType skipUntilToken); + void skipUntilSpace(); + Value& currentValue(); + Char getNextChar(); + void + getLocationLineAndColumn(Location location, int& line, int& column) const; + std::string getLocationLineAndColumn(Location location) const; + std::string getLocationSnippet(Location location) const; + void addComment(Location begin, Location end, CommentPlacement placement); + void skipCommentTokens(Token& token); + + typedef std::stack Nodes; + Nodes nodes_; + Errors errors_; + std::string document_; + Location begin_; + Location end_; + Location current_; + Location lastValueEnd_; + Value* lastValue_; + std::string commentsBefore_; + Features features_; + bool collectComments_; +}; // Reader + +/** Interface for reading JSON from a char array. + */ +class JSON_API CharReader { +public: + virtual ~CharReader() {} + /** \brief Read a Value from a JSON + document. + * The document must be a UTF-8 encoded string containing the document to read. + * + * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the + document to read. + * \param endDoc Pointer on the end of the UTF-8 encoded string of the + document to read. + * Must be >= beginDoc. + * \param root [out] Contains the root value of the document if it was + * successfully parsed. + * \param errs [out] Formatted error messages (if not NULL) + * a user friendly string that lists errors in the parsed + * document. + * \return \c true if the document was successfully parsed, \c false if an + error occurred. + */ + virtual bool parse( + char const* beginDoc, char const* endDoc, + Value* root, std::string* errs) = 0; + + class JSON_API Factory { + public: + virtual ~Factory() {} + /** \brief Allocate a CharReader via operator new(). + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + virtual CharReader* newCharReader() const = 0; + }; // Factory +}; // CharReader + +/** \brief Build a CharReader implementation. + +Usage: +\code + using namespace Json; + CharReaderBuilder builder; + builder["collectComments"] = false; + Value value; + std::string errs; + bool ok = parseFromStream(builder, std::cin, &value, &errs); +\endcode +*/ +class JSON_API CharReaderBuilder : public CharReader::Factory { +public: + // Note: We use a Json::Value so that we can add data-members to this class + // without a major version bump. + /** Configuration of this builder. + These are case-sensitive. + Available settings (case-sensitive): + - `"collectComments": false or true` + - true to collect comment and allow writing them + back during serialization, false to discard comments. + This parameter is ignored if allowComments is false. + - `"allowComments": false or true` + - true if comments are allowed. + - `"strictRoot": false or true` + - true if root must be either an array or an object value + - `"allowDroppedNullPlaceholders": false or true` + - true if dropped null placeholders are allowed. (See StreamWriterBuilder.) + - `"allowNumericKeys": false or true` + - true if numeric object keys are allowed. + - `"allowSingleQuotes": false or true` + - true if '' are allowed for strings (both keys and values) + - `"stackLimit": integer` + - Exceeding stackLimit (recursive depth of `readValue()`) will + cause an exception. + - This is a security issue (seg-faults caused by deeply nested JSON), + so the default is low. + - `"failIfExtra": false or true` + - If true, `parse()` returns false when extra non-whitespace trails + the JSON value in the input string. + - `"rejectDupKeys": false or true` + - If true, `parse()` returns false when a key is duplicated within an object. + - `"allowSpecialFloats": false or true` + - If true, special float values (NaNs and infinities) are allowed + and their values are lossfree restorable. + + You can examine 'settings_` yourself + to see the defaults. You can also write and read them just like any + JSON Value. + \sa setDefaults() + */ + Json::Value settings_; + + CharReaderBuilder(); + ~CharReaderBuilder(); + + CharReader* newCharReader() const; + + /** \return true if 'settings' are legal and consistent; + * otherwise, indicate bad settings via 'invalid'. + */ + bool validate(Json::Value* invalid) const; + + /** A simple way to update a specific setting. + */ + Value& operator[](std::string key); + + /** Called by ctor, but you can use this to reset settings_. + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_reader.cpp CharReaderBuilderDefaults + */ + static void setDefaults(Json::Value* settings); + /** Same as old Features::strictMode(). + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_reader.cpp CharReaderBuilderStrictMode + */ + static void strictMode(Json::Value* settings); +}; + +/** Consume entire stream and use its begin/end. + * Someday we might have a real StreamReader, but for now this + * is convenient. + */ +bool JSON_API parseFromStream( + CharReader::Factory const&, + std::istream&, + Value* root, std::string* errs); + +/** \brief Read from 'sin' into 'root'. + + Always keep comments from the input JSON. + + This can be used to read a file into a particular sub-object. + For example: + \code + Json::Value root; + cin >> root["dir"]["file"]; + cout << root; + \endcode + Result: + \verbatim + { + "dir": { + "file": { + // The input stream JSON would be nested here. + } + } + } + \endverbatim + \throw std::exception on parse error. + \see Json::operator<<() +*/ +JSON_API std::istream& operator>>(std::istream&, Value&); + +} // namespace Json + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // CPPTL_JSON_READER_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/reader.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/writer.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_WRITER_H_INCLUDED +#define JSON_WRITER_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "value.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include + +// Disable warning C4251: : needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +namespace Json { + +class Value; + +/** + +Usage: +\code + using namespace Json; + void writeToStdout(StreamWriter::Factory const& factory, Value const& value) { + std::unique_ptr const writer( + factory.newStreamWriter()); + writer->write(value, &std::cout); + std::cout << std::endl; // add lf and flush + } +\endcode +*/ +class JSON_API StreamWriter { +protected: + std::ostream* sout_; // not owned; will not delete +public: + StreamWriter(); + virtual ~StreamWriter(); + /** Write Value into document as configured in sub-class. + Do not take ownership of sout, but maintain a reference during function. + \pre sout != NULL + \return zero on success (For now, we always return zero, so check the stream instead.) + \throw std::exception possibly, depending on configuration + */ + virtual int write(Value const& root, std::ostream* sout) = 0; + + /** \brief A simple abstract factory. + */ + class JSON_API Factory { + public: + virtual ~Factory(); + /** \brief Allocate a CharReader via operator new(). + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + virtual StreamWriter* newStreamWriter() const = 0; + }; // Factory +}; // StreamWriter + +/** \brief Write into stringstream, then return string, for convenience. + * A StreamWriter will be created from the factory, used, and then deleted. + */ +std::string JSON_API writeString(StreamWriter::Factory const& factory, Value const& root); + + +/** \brief Build a StreamWriter implementation. + +Usage: +\code + using namespace Json; + Value value = ...; + StreamWriterBuilder builder; + builder["commentStyle"] = "None"; + builder["indentation"] = " "; // or whatever you like + std::unique_ptr writer( + builder.newStreamWriter()); + writer->write(value, &std::cout); + std::cout << std::endl; // add lf and flush +\endcode +*/ +class JSON_API StreamWriterBuilder : public StreamWriter::Factory { +public: + // Note: We use a Json::Value so that we can add data-members to this class + // without a major version bump. + /** Configuration of this builder. + Available settings (case-sensitive): + - "commentStyle": "None" or "All" + - "indentation": "" + - "enableYAMLCompatibility": false or true + - slightly change the whitespace around colons + - "dropNullPlaceholders": false or true + - Drop the "null" string from the writer's output for nullValues. + Strictly speaking, this is not valid JSON. But when the output is being + fed to a browser's Javascript, it makes for smaller output and the + browser can handle the output just fine. + - "useSpecialFloats": false or true + - If true, outputs non-finite floating point values in the following way: + NaN values as "NaN", positive infinity as "Infinity", and negative infinity + as "-Infinity". + + You can examine 'settings_` yourself + to see the defaults. You can also write and read them just like any + JSON Value. + \sa setDefaults() + */ + Json::Value settings_; + + StreamWriterBuilder(); + ~StreamWriterBuilder(); + + /** + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + StreamWriter* newStreamWriter() const; + + /** \return true if 'settings' are legal and consistent; + * otherwise, indicate bad settings via 'invalid'. + */ + bool validate(Json::Value* invalid) const; + /** A simple way to update a specific setting. + */ + Value& operator[](std::string key); + + /** Called by ctor, but you can use this to reset settings_. + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_writer.cpp StreamWriterBuilderDefaults + */ + static void setDefaults(Json::Value* settings); +}; + +/** \brief Abstract class for writers. + * \deprecated Use StreamWriter. (And really, this is an implementation detail.) + */ +class JSON_API Writer { +public: + virtual ~Writer(); + + virtual std::string write(const Value& root) = 0; +}; + +/** \brief Outputs a Value in JSON format + *without formatting (not human friendly). + * + * The JSON document is written in a single line. It is not intended for 'human' + *consumption, + * but may be usefull to support feature such as RPC where bandwith is limited. + * \sa Reader, Value + * \deprecated Use StreamWriterBuilder. + */ +class JSON_API FastWriter : public Writer { + +public: + FastWriter(); + ~FastWriter() {} + + void enableYAMLCompatibility(); + + /** \brief Drop the "null" string from the writer's output for nullValues. + * Strictly speaking, this is not valid JSON. But when the output is being + * fed to a browser's Javascript, it makes for smaller output and the + * browser can handle the output just fine. + */ + void dropNullPlaceholders(); + + void omitEndingLineFeed(); + +public: // overridden from Writer + std::string write(const Value& root); + +private: + void writeValue(const Value& value); + + std::string document_; + bool yamlCompatiblityEnabled_; + bool dropNullPlaceholders_; + bool omitEndingLineFeed_; +}; + +/** \brief Writes a Value in JSON format in a + *human friendly way. + * + * The rules for line break and indent are as follow: + * - Object value: + * - if empty then print {} without indent and line break + * - if not empty the print '{', line break & indent, print one value per + *line + * and then unindent and line break and print '}'. + * - Array value: + * - if empty then print [] without indent and line break + * - if the array contains no object value, empty array or some other value + *types, + * and all the values fit on one lines, then print the array on a single + *line. + * - otherwise, it the values do not fit on one line, or the array contains + * object or non empty array, then print one value per line. + * + * If the Value have comments then they are outputed according to their + *#CommentPlacement. + * + * \sa Reader, Value, Value::setComment() + * \deprecated Use StreamWriterBuilder. + */ +class JSON_API StyledWriter : public Writer { +public: + StyledWriter(); + ~StyledWriter() {} + +public: // overridden from Writer + /** \brief Serialize a Value in JSON format. + * \param root Value to serialize. + * \return String containing the JSON document that represents the root value. + */ + std::string write(const Value& root); + +private: + void writeValue(const Value& value); + void writeArrayValue(const Value& value); + bool isMultineArray(const Value& value); + void pushValue(const std::string& value); + void writeIndent(); + void writeWithIndent(const std::string& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(const Value& root); + void writeCommentAfterValueOnSameLine(const Value& root); + bool hasCommentForValue(const Value& value); + static std::string normalizeEOL(const std::string& text); + + typedef std::vector ChildValues; + + ChildValues childValues_; + std::string document_; + std::string indentString_; + int rightMargin_; + int indentSize_; + bool addChildValues_; +}; + +/** \brief Writes a Value in JSON format in a + human friendly way, + to a stream rather than to a string. + * + * The rules for line break and indent are as follow: + * - Object value: + * - if empty then print {} without indent and line break + * - if not empty the print '{', line break & indent, print one value per + line + * and then unindent and line break and print '}'. + * - Array value: + * - if empty then print [] without indent and line break + * - if the array contains no object value, empty array or some other value + types, + * and all the values fit on one lines, then print the array on a single + line. + * - otherwise, it the values do not fit on one line, or the array contains + * object or non empty array, then print one value per line. + * + * If the Value have comments then they are outputed according to their + #CommentPlacement. + * + * \param indentation Each level will be indented by this amount extra. + * \sa Reader, Value, Value::setComment() + * \deprecated Use StreamWriterBuilder. + */ +class JSON_API StyledStreamWriter { +public: + StyledStreamWriter(std::string indentation = "\t"); + ~StyledStreamWriter() {} + +public: + /** \brief Serialize a Value in JSON format. + * \param out Stream to write to. (Can be ostringstream, e.g.) + * \param root Value to serialize. + * \note There is no point in deriving from Writer, since write() should not + * return a value. + */ + void write(std::ostream& out, const Value& root); + +private: + void writeValue(const Value& value); + void writeArrayValue(const Value& value); + bool isMultineArray(const Value& value); + void pushValue(const std::string& value); + void writeIndent(); + void writeWithIndent(const std::string& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(const Value& root); + void writeCommentAfterValueOnSameLine(const Value& root); + bool hasCommentForValue(const Value& value); + static std::string normalizeEOL(const std::string& text); + + typedef std::vector ChildValues; + + ChildValues childValues_; + std::ostream* document_; + std::string indentString_; + int rightMargin_; + std::string indentation_; + bool addChildValues_ : 1; + bool indented_ : 1; +}; + +#if defined(JSON_HAS_INT64) +std::string JSON_API valueToString(Int value); +std::string JSON_API valueToString(UInt value); +#endif // if defined(JSON_HAS_INT64) +std::string JSON_API valueToString(LargestInt value); +std::string JSON_API valueToString(LargestUInt value); +std::string JSON_API valueToString(double value); +std::string JSON_API valueToString(bool value); +std::string JSON_API valueToQuotedString(const char* value); + +/// \brief Output using the StyledStreamWriter. +/// \see Json::operator>>() +JSON_API std::ostream& operator<<(std::ostream&, const Value& root); + +} // namespace Json + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // JSON_WRITER_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/writer.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/assertions.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_ASSERTIONS_H_INCLUDED +#define CPPTL_JSON_ASSERTIONS_H_INCLUDED + +#include +#include + +#if !defined(JSON_IS_AMALGAMATION) +#include "config.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +/** It should not be possible for a maliciously designed file to + * cause an abort() or seg-fault, so these macros are used only + * for pre-condition violations and internal logic errors. + */ +#if JSON_USE_EXCEPTION + +// @todo <= add detail about condition in exception +# define JSON_ASSERT(condition) \ + {if (!(condition)) {Json::throwLogicError( "assert json failed" );}} + +# define JSON_FAIL_MESSAGE(message) \ + { \ + std::ostringstream oss; oss << message; \ + Json::throwLogicError(oss.str()); \ + abort(); \ + } + +#else // JSON_USE_EXCEPTION + +# define JSON_ASSERT(condition) assert(condition) + +// The call to assert() will show the failure message in debug builds. In +// release builds we abort, for a core-dump or debugger. +# define JSON_FAIL_MESSAGE(message) \ + { \ + std::ostringstream oss; oss << message; \ + assert(false && oss.str().c_str()); \ + abort(); \ + } + + +#endif + +#define JSON_ASSERT_MESSAGE(condition, message) \ + if (!(condition)) { \ + JSON_FAIL_MESSAGE(message); \ + } + +#endif // CPPTL_JSON_ASSERTIONS_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/assertions.h +// ////////////////////////////////////////////////////////////////////// + + + + + +#endif //ifndef JSON_AMALGATED_H_INCLUDED diff --git a/contrib/openvr/src/jsoncpp.cpp b/contrib/openvr/src/jsoncpp.cpp new file mode 100755 index 0000000..e67d353 --- /dev/null +++ b/contrib/openvr/src/jsoncpp.cpp @@ -0,0 +1,5266 @@ +/// Json-cpp amalgated source (http://jsoncpp.sourceforge.net/). +/// It is intended to be used with #include "json/json.h" + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + +/* +The JsonCpp library's source code, including accompanying documentation, +tests and demonstration applications, are licensed under the following +conditions... + +The author (Baptiste Lepilleur) explicitly disclaims copyright in all +jurisdictions which recognize such a disclaimer. In such jurisdictions, +this software is released into the Public Domain. + +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is +released under the terms of the MIT License (see below). + +In jurisdictions which recognize Public Domain property, the user of this +software may choose to accept it either as 1) Public Domain, 2) under the +conditions of the MIT License (see below), or 3) under the terms of dual +Public Domain/MIT License conditions described here, as they choose. + +The MIT License is about as close to Public Domain as a license can get, and is +described in clear, concise terms at: + + http://en.wikipedia.org/wiki/MIT_License + +The full text of the MIT License follows: + +======================================================================== +Copyright (c) 2007-2010 Baptiste Lepilleur + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +======================================================================== +(END LICENSE TEXT) + +The MIT license is compatible with both the GPL and commercial +software, affording one all of the rights of Public Domain with the +minor nuisance of being required to keep the above copyright notice +and license text in the source code. Note also that by accepting the +Public Domain "license" you can re-license your copy using whatever +license you like. + +*/ + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + + + + + + +#include "json/json.h" + +#ifndef JSON_IS_AMALGAMATION +#error "Compile with -I PATH_TO_JSON_DIRECTORY" +#endif + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_tool.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED +#define LIB_JSONCPP_JSON_TOOL_H_INCLUDED + +/* This header provides common string manipulation support, such as UTF-8, + * portable conversion from/to string... + * + * It is an internal header that must not be exposed. + */ + +namespace Json { + +/// Converts a unicode code-point to UTF-8. +static inline std::string codePointToUTF8(unsigned int cp) { + std::string result; + + // based on description from http://en.wikipedia.org/wiki/UTF-8 + + if (cp <= 0x7f) { + result.resize(1); + result[0] = static_cast(cp); + } else if (cp <= 0x7FF) { + result.resize(2); + result[1] = static_cast(0x80 | (0x3f & cp)); + result[0] = static_cast(0xC0 | (0x1f & (cp >> 6))); + } else if (cp <= 0xFFFF) { + result.resize(3); + result[2] = static_cast(0x80 | (0x3f & cp)); + result[1] = static_cast(0x80 | (0x3f & (cp >> 6))); + result[0] = static_cast(0xE0 | (0xf & (cp >> 12))); + } else if (cp <= 0x10FFFF) { + result.resize(4); + result[3] = static_cast(0x80 | (0x3f & cp)); + result[2] = static_cast(0x80 | (0x3f & (cp >> 6))); + result[1] = static_cast(0x80 | (0x3f & (cp >> 12))); + result[0] = static_cast(0xF0 | (0x7 & (cp >> 18))); + } + + return result; +} + +/// Returns true if ch is a control character (in range [1,31]). +static inline bool isControlCharacter(char ch) { return ch > 0 && ch <= 0x1F; } + +enum { + /// Constant that specify the size of the buffer that must be passed to + /// uintToString. + uintToStringBufferSize = 3 * sizeof(LargestUInt) + 1 +}; + +// Defines a char buffer for use with uintToString(). +typedef char UIntToStringBuffer[uintToStringBufferSize]; + +/** Converts an unsigned integer to string. + * @param value Unsigned interger to convert to string + * @param current Input/Output string buffer. + * Must have at least uintToStringBufferSize chars free. + */ +static inline void uintToString(LargestUInt value, char*& current) { + *--current = 0; + do { + *--current = static_cast(value % 10U + static_cast('0')); + value /= 10; + } while (value != 0); +} + +/** Change ',' to '.' everywhere in buffer. + * + * We had a sophisticated way, but it did not work in WinCE. + * @see https://github.com/open-source-parsers/jsoncpp/pull/9 + */ +static inline void fixNumericLocale(char* begin, char* end) { + while (begin < end) { + if (*begin == ',') { + *begin = '.'; + } + ++begin; + } +} + +} // namespace Json { + +#endif // LIB_JSONCPP_JSON_TOOL_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_tool.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_reader.cpp +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2011 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include +#include "json_tool.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(_MSC_VER) +#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above +#define snprintf sprintf_s +#elif _MSC_VER >= 1900 // VC++ 14.0 and above +#define snprintf std::snprintf +#else +#define snprintf _snprintf +#endif +#elif defined(__ANDROID__) || defined(__QNXNTO__) +#define snprintf snprintf +#elif __cplusplus >= 201103L +#define snprintf std::snprintf +#endif + +#if defined(__QNXNTO__) +#define sscanf std::sscanf +#endif + +#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0 +// Disable warning about strdup being deprecated. +#pragma warning(disable : 4996) +#endif + +static int const stackLimit_g = 1000; +static int stackDepth_g = 0; // see readValue() + +namespace Json { + +#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520) +typedef std::unique_ptr CharReaderPtr; +#else +typedef std::auto_ptr CharReaderPtr; +#endif + +// Implementation of class Features +// //////////////////////////////// + +Features::Features() + : allowComments_(true), strictRoot_(false), + allowDroppedNullPlaceholders_(false), allowNumericKeys_(false) {} + +Features Features::all() { return Features(); } + +Features Features::strictMode() { + Features features; + features.allowComments_ = false; + features.strictRoot_ = true; + features.allowDroppedNullPlaceholders_ = false; + features.allowNumericKeys_ = false; + return features; +} + +// Implementation of class Reader +// //////////////////////////////// + +static bool containsNewLine(Reader::Location begin, Reader::Location end) { + for (; begin < end; ++begin) + if (*begin == '\n' || *begin == '\r') + return true; + return false; +} + +// Class Reader +// ////////////////////////////////////////////////////////////////// + +Reader::Reader() + : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), + lastValue_(), commentsBefore_(), features_(Features::all()), + collectComments_() {} + +Reader::Reader(const Features& features) + : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), + lastValue_(), commentsBefore_(), features_(features), collectComments_() { +} + +bool +Reader::parse(const std::string& document, Value& root, bool collectComments) { + document_ = document; + const char* begin = document_.c_str(); + const char* end = begin + document_.length(); + return parse(begin, end, root, collectComments); +} + +bool Reader::parse(std::istream& sin, Value& root, bool collectComments) { + // std::istream_iterator begin(sin); + // std::istream_iterator end; + // Those would allow streamed input from a file, if parse() were a + // template function. + + // Since std::string is reference-counted, this at least does not + // create an extra copy. + std::string doc; + std::getline(sin, doc, (char)EOF); + return parse(doc, root, collectComments); +} + +bool Reader::parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments) { + if (!features_.allowComments_) { + collectComments = false; + } + + begin_ = beginDoc; + end_ = endDoc; + collectComments_ = collectComments; + current_ = begin_; + lastValueEnd_ = 0; + lastValue_ = 0; + commentsBefore_ = ""; + errors_.clear(); + while (!nodes_.empty()) + nodes_.pop(); + nodes_.push(&root); + + stackDepth_g = 0; // Yes, this is bad coding, but options are limited. + bool successful = readValue(); + Token token; + skipCommentTokens(token); + if (collectComments_ && !commentsBefore_.empty()) + root.setComment(commentsBefore_, commentAfter); + if (features_.strictRoot_) { + if (!root.isArray() && !root.isObject()) { + // Set error location to start of doc, ideally should be first token found + // in doc + token.type_ = tokenError; + token.start_ = beginDoc; + token.end_ = endDoc; + addError( + "A valid JSON document must be either an array or an object value.", + token); + return false; + } + } + return successful; +} + +bool Reader::readValue() { + // This is a non-reentrant way to support a stackLimit. Terrible! + // But this deprecated class has a security problem: Bad input can + // cause a seg-fault. This seems like a fair, binary-compatible way + // to prevent the problem. + if (stackDepth_g >= stackLimit_g) throwRuntimeError("Exceeded stackLimit in readValue()."); + ++stackDepth_g; + + Token token; + skipCommentTokens(token); + bool successful = true; + + if (collectComments_ && !commentsBefore_.empty()) { + currentValue().setComment(commentsBefore_, commentBefore); + commentsBefore_ = ""; + } + + switch (token.type_) { + case tokenObjectBegin: + successful = readObject(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenArrayBegin: + successful = readArray(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenNumber: + successful = decodeNumber(token); + break; + case tokenString: + successful = decodeString(token); + break; + case tokenTrue: + { + Value v(true); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenFalse: + { + Value v(false); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNull: + { + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenArraySeparator: + case tokenObjectEnd: + case tokenArrayEnd: + if (features_.allowDroppedNullPlaceholders_) { + // "Un-read" the current token and mark the current value as a null + // token. + current_--; + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(current_ - begin_ - 1); + currentValue().setOffsetLimit(current_ - begin_); + break; + } // Else, fall through... + default: + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return addError("Syntax error: value, object or array expected.", token); + } + + if (collectComments_) { + lastValueEnd_ = current_; + lastValue_ = ¤tValue(); + } + + --stackDepth_g; + return successful; +} + +void Reader::skipCommentTokens(Token& token) { + if (features_.allowComments_) { + do { + readToken(token); + } while (token.type_ == tokenComment); + } else { + readToken(token); + } +} + +bool Reader::readToken(Token& token) { + skipSpaces(); + token.start_ = current_; + Char c = getNextChar(); + bool ok = true; + switch (c) { + case '{': + token.type_ = tokenObjectBegin; + break; + case '}': + token.type_ = tokenObjectEnd; + break; + case '[': + token.type_ = tokenArrayBegin; + break; + case ']': + token.type_ = tokenArrayEnd; + break; + case '"': + token.type_ = tokenString; + ok = readString(); + break; + case '/': + token.type_ = tokenComment; + ok = readComment(); + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '-': + token.type_ = tokenNumber; + readNumber(); + break; + case 't': + token.type_ = tokenTrue; + ok = match("rue", 3); + break; + case 'f': + token.type_ = tokenFalse; + ok = match("alse", 4); + break; + case 'n': + token.type_ = tokenNull; + ok = match("ull", 3); + break; + case ',': + token.type_ = tokenArraySeparator; + break; + case ':': + token.type_ = tokenMemberSeparator; + break; + case 0: + token.type_ = tokenEndOfStream; + break; + default: + ok = false; + break; + } + if (!ok) + token.type_ = tokenError; + token.end_ = current_; + return true; +} + +void Reader::skipSpaces() { + while (current_ != end_) { + Char c = *current_; + if (c == ' ' || c == '\t' || c == '\r' || c == '\n') + ++current_; + else + break; + } +} + +bool Reader::match(Location pattern, int patternLength) { + if (end_ - current_ < patternLength) + return false; + int index = patternLength; + while (index--) + if (current_[index] != pattern[index]) + return false; + current_ += patternLength; + return true; +} + +bool Reader::readComment() { + Location commentBegin = current_ - 1; + Char c = getNextChar(); + bool successful = false; + if (c == '*') + successful = readCStyleComment(); + else if (c == '/') + successful = readCppStyleComment(); + if (!successful) + return false; + + if (collectComments_) { + CommentPlacement placement = commentBefore; + if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) { + if (c != '*' || !containsNewLine(commentBegin, current_)) + placement = commentAfterOnSameLine; + } + + addComment(commentBegin, current_, placement); + } + return true; +} + +static std::string normalizeEOL(Reader::Location begin, Reader::Location end) { + std::string normalized; + normalized.reserve(end - begin); + Reader::Location current = begin; + while (current != end) { + char c = *current++; + if (c == '\r') { + if (current != end && *current == '\n') + // convert dos EOL + ++current; + // convert Mac EOL + normalized += '\n'; + } else { + normalized += c; + } + } + return normalized; +} + +void +Reader::addComment(Location begin, Location end, CommentPlacement placement) { + assert(collectComments_); + const std::string& normalized = normalizeEOL(begin, end); + if (placement == commentAfterOnSameLine) { + assert(lastValue_ != 0); + lastValue_->setComment(normalized, placement); + } else { + commentsBefore_ += normalized; + } +} + +bool Reader::readCStyleComment() { + while (current_ != end_) { + Char c = getNextChar(); + if (c == '*' && *current_ == '/') + break; + } + return getNextChar() == '/'; +} + +bool Reader::readCppStyleComment() { + while (current_ != end_) { + Char c = getNextChar(); + if (c == '\n') + break; + if (c == '\r') { + // Consume DOS EOL. It will be normalized in addComment. + if (current_ != end_ && *current_ == '\n') + getNextChar(); + // Break on Moc OS 9 EOL. + break; + } + } + return true; +} + +void Reader::readNumber() { + const char *p = current_; + char c = '0'; // stopgap for already consumed character + // integral part + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + // fractional part + if (c == '.') { + c = (current_ = p) < end_ ? *p++ : 0; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + } + // exponential part + if (c == 'e' || c == 'E') { + c = (current_ = p) < end_ ? *p++ : 0; + if (c == '+' || c == '-') + c = (current_ = p) < end_ ? *p++ : 0; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + } +} + +bool Reader::readString() { + Char c = 0; + while (current_ != end_) { + c = getNextChar(); + if (c == '\\') + getNextChar(); + else if (c == '"') + break; + } + return c == '"'; +} + +bool Reader::readObject(Token& tokenStart) { + Token tokenName; + std::string name; + Value init(objectValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + while (readToken(tokenName)) { + bool initialTokenOk = true; + while (tokenName.type_ == tokenComment && initialTokenOk) + initialTokenOk = readToken(tokenName); + if (!initialTokenOk) + break; + if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object + return true; + name = ""; + if (tokenName.type_ == tokenString) { + if (!decodeString(tokenName, name)) + return recoverFromError(tokenObjectEnd); + } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) { + Value numberName; + if (!decodeNumber(tokenName, numberName)) + return recoverFromError(tokenObjectEnd); + name = numberName.asString(); + } else { + break; + } + + Token colon; + if (!readToken(colon) || colon.type_ != tokenMemberSeparator) { + return addErrorAndRecover( + "Missing ':' after object member name", colon, tokenObjectEnd); + } + Value& value = currentValue()[name]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenObjectEnd); + + Token comma; + if (!readToken(comma) || + (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator && + comma.type_ != tokenComment)) { + return addErrorAndRecover( + "Missing ',' or '}' in object declaration", comma, tokenObjectEnd); + } + bool finalizeTokenOk = true; + while (comma.type_ == tokenComment && finalizeTokenOk) + finalizeTokenOk = readToken(comma); + if (comma.type_ == tokenObjectEnd) + return true; + } + return addErrorAndRecover( + "Missing '}' or object member name", tokenName, tokenObjectEnd); +} + +bool Reader::readArray(Token& tokenStart) { + Value init(arrayValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + skipSpaces(); + if (*current_ == ']') // empty array + { + Token endArray; + readToken(endArray); + return true; + } + int index = 0; + for (;;) { + Value& value = currentValue()[index++]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenArrayEnd); + + Token token; + // Accept Comment after last item in the array. + ok = readToken(token); + while (token.type_ == tokenComment && ok) { + ok = readToken(token); + } + bool badTokenType = + (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd); + if (!ok || badTokenType) { + return addErrorAndRecover( + "Missing ',' or ']' in array declaration", token, tokenArrayEnd); + } + if (token.type_ == tokenArrayEnd) + break; + } + return true; +} + +bool Reader::decodeNumber(Token& token) { + Value decoded; + if (!decodeNumber(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool Reader::decodeNumber(Token& token, Value& decoded) { + // Attempts to parse the number as an integer. If the number is + // larger than the maximum supported value of an integer then + // we decode the number as a double. + Location current = token.start_; + bool isNegative = *current == '-'; + if (isNegative) + ++current; + // TODO: Help the compiler do the div and mod at compile time or get rid of them. + Value::LargestUInt maxIntegerValue = + isNegative ? Value::LargestUInt(Value::maxLargestInt) + 1 + : Value::maxLargestUInt; + Value::LargestUInt threshold = maxIntegerValue / 10; + Value::LargestUInt value = 0; + while (current < token.end_) { + Char c = *current++; + if (c < '0' || c > '9') + return decodeDouble(token, decoded); + Value::UInt digit(c - '0'); + if (value >= threshold) { + // We've hit or exceeded the max value divided by 10 (rounded down). If + // a) we've only just touched the limit, b) this is the last digit, and + // c) it's small enough to fit in that rounding delta, we're okay. + // Otherwise treat this number as a double to avoid overflow. + if (value > threshold || current != token.end_ || + digit > maxIntegerValue % 10) { + return decodeDouble(token, decoded); + } + } + value = value * 10 + digit; + } + if (isNegative && value == maxIntegerValue) + decoded = Value::minLargestInt; + else if (isNegative) + decoded = -Value::LargestInt(value); + else if (value <= Value::LargestUInt(Value::maxInt)) + decoded = Value::LargestInt(value); + else + decoded = value; + return true; +} + +bool Reader::decodeDouble(Token& token) { + Value decoded; + if (!decodeDouble(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool Reader::decodeDouble(Token& token, Value& decoded) { + double value = 0; + std::string buffer(token.start_, token.end_); + std::istringstream is(buffer); + if (!(is >> value)) + return addError("'" + std::string(token.start_, token.end_) + + "' is not a number.", + token); + decoded = value; + return true; +} + +bool Reader::decodeString(Token& token) { + std::string decoded_string; + if (!decodeString(token, decoded_string)) + return false; + Value decoded(decoded_string); + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool Reader::decodeString(Token& token, std::string& decoded) { + decoded.reserve(token.end_ - token.start_ - 2); + Location current = token.start_ + 1; // skip '"' + Location end = token.end_ - 1; // do not include '"' + while (current != end) { + Char c = *current++; + if (c == '"') + break; + else if (c == '\\') { + if (current == end) + return addError("Empty escape sequence in string", token, current); + Char escape = *current++; + switch (escape) { + case '"': + decoded += '"'; + break; + case '/': + decoded += '/'; + break; + case '\\': + decoded += '\\'; + break; + case 'b': + decoded += '\b'; + break; + case 'f': + decoded += '\f'; + break; + case 'n': + decoded += '\n'; + break; + case 'r': + decoded += '\r'; + break; + case 't': + decoded += '\t'; + break; + case 'u': { + unsigned int unicode; + if (!decodeUnicodeCodePoint(token, current, end, unicode)) + return false; + decoded += codePointToUTF8(unicode); + } break; + default: + return addError("Bad escape sequence in string", token, current); + } + } else { + decoded += c; + } + } + return true; +} + +bool Reader::decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode) { + + if (!decodeUnicodeEscapeSequence(token, current, end, unicode)) + return false; + if (unicode >= 0xD800 && unicode <= 0xDBFF) { + // surrogate pairs + if (end - current < 6) + return addError( + "additional six characters expected to parse unicode surrogate pair.", + token, + current); + unsigned int surrogatePair; + if (*(current++) == '\\' && *(current++) == 'u') { + if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) { + unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF); + } else + return false; + } else + return addError("expecting another \\u token to begin the second half of " + "a unicode surrogate pair", + token, + current); + } + return true; +} + +bool Reader::decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& unicode) { + if (end - current < 4) + return addError( + "Bad unicode escape sequence in string: four digits expected.", + token, + current); + unicode = 0; + for (int index = 0; index < 4; ++index) { + Char c = *current++; + unicode *= 16; + if (c >= '0' && c <= '9') + unicode += c - '0'; + else if (c >= 'a' && c <= 'f') + unicode += c - 'a' + 10; + else if (c >= 'A' && c <= 'F') + unicode += c - 'A' + 10; + else + return addError( + "Bad unicode escape sequence in string: hexadecimal digit expected.", + token, + current); + } + return true; +} + +bool +Reader::addError(const std::string& message, Token& token, Location extra) { + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = extra; + errors_.push_back(info); + return false; +} + +bool Reader::recoverFromError(TokenType skipUntilToken) { + int errorCount = int(errors_.size()); + Token skip; + for (;;) { + if (!readToken(skip)) + errors_.resize(errorCount); // discard errors caused by recovery + if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream) + break; + } + errors_.resize(errorCount); + return false; +} + +bool Reader::addErrorAndRecover(const std::string& message, + Token& token, + TokenType skipUntilToken) { + addError(message, token); + return recoverFromError(skipUntilToken); +} + +Value& Reader::currentValue() { return *(nodes_.top()); } + +Reader::Char Reader::getNextChar() { + if (current_ == end_) + return 0; + return *current_++; +} + +void Reader::getLocationLineAndColumn(Location location, + int& line, + int& column) const { + Location current = begin_; + Location lastLineStart = current; + line = 0; + while (current < location && current != end_) { + Char c = *current++; + if (c == '\r') { + if (*current == '\n') + ++current; + lastLineStart = current; + ++line; + } else if (c == '\n') { + lastLineStart = current; + ++line; + } + } + // column & line start at 1 + column = int(location - lastLineStart) + 1; + ++line; +} + +std::string Reader::getLocationLineAndColumn(Location location) const { + int line, column; + getLocationLineAndColumn(location, line, column); + char buffer[18 + 16 + 16 + 1]; + snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column); + return buffer; +} + +std::string Reader::getLocationSnippet(Location location) const { + std::string snippet = ""; + std::istringstream docStream(document_); + int lin, col; + getLocationLineAndColumn(location, lin, col); + std::string line; + for (int i=1; i Reader::getStructuredErrors() const { + std::vector allErrors; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + Reader::StructuredError structured; + structured.offset_start = error.token_.start_ - begin_; + structured.offset_limit = error.token_.end_ - begin_; + structured.message = error.message_; + allErrors.push_back(structured); + } + return allErrors; +} + +bool Reader::pushError(const Value& value, const std::string& message) { + size_t length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = end_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = 0; + errors_.push_back(info); + return true; +} + +bool Reader::pushError(const Value& value, const std::string& message, const Value& extra) { + size_t length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length + || extra.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = begin_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = begin_ + extra.getOffsetStart(); + errors_.push_back(info); + return true; +} + +bool Reader::good() const { + return !errors_.size(); +} + +// exact copy of Features +class OurFeatures { +public: + static OurFeatures all(); + bool allowComments_; + bool strictRoot_; + bool allowDroppedNullPlaceholders_; + bool allowNumericKeys_; + bool allowSingleQuotes_; + bool failIfExtra_; + bool rejectDupKeys_; + bool allowSpecialFloats_; + int stackLimit_; +}; // OurFeatures + +// exact copy of Implementation of class Features +// //////////////////////////////// + +OurFeatures OurFeatures::all() { return OurFeatures(); } + +// Implementation of class Reader +// //////////////////////////////// + +// exact copy of Reader, renamed to OurReader +class OurReader { +public: + typedef char Char; + typedef const Char* Location; + struct StructuredError { + size_t offset_start; + size_t offset_limit; + std::string message; + }; + + OurReader(OurFeatures const& features); + bool parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments = true); + std::string getFormattedErrorMessages() const; + std::vector getStructuredErrors() const; + bool pushError(const Value& value, const std::string& message); + bool pushError(const Value& value, const std::string& message, const Value& extra); + bool good() const; + +private: + OurReader(OurReader const&); // no impl + void operator=(OurReader const&); // no impl + + enum TokenType { + tokenEndOfStream = 0, + tokenObjectBegin, + tokenObjectEnd, + tokenArrayBegin, + tokenArrayEnd, + tokenString, + tokenNumber, + tokenTrue, + tokenFalse, + tokenNull, + tokenNaN, + tokenPosInf, + tokenNegInf, + tokenArraySeparator, + tokenMemberSeparator, + tokenComment, + tokenError + }; + + class Token { + public: + TokenType type_; + Location start_; + Location end_; + }; + + class ErrorInfo { + public: + Token token_; + std::string message_; + Location extra_; + }; + + typedef std::deque Errors; + + bool readToken(Token& token); + void skipSpaces(); + bool match(Location pattern, int patternLength); + bool readComment(); + bool readCStyleComment(); + bool readCppStyleComment(); + bool readString(); + bool readStringSingleQuote(); + bool readNumber(bool checkInf); + bool readValue(); + bool readObject(Token& token); + bool readArray(Token& token); + bool decodeNumber(Token& token); + bool decodeNumber(Token& token, Value& decoded); + bool decodeString(Token& token); + bool decodeString(Token& token, std::string& decoded); + bool decodeDouble(Token& token); + bool decodeDouble(Token& token, Value& decoded); + bool decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool addError(const std::string& message, Token& token, Location extra = 0); + bool recoverFromError(TokenType skipUntilToken); + bool addErrorAndRecover(const std::string& message, + Token& token, + TokenType skipUntilToken); + void skipUntilSpace(); + Value& currentValue(); + Char getNextChar(); + void + getLocationLineAndColumn(Location location, int& line, int& column) const; + std::string getLocationLineAndColumn(Location location) const; + void addComment(Location begin, Location end, CommentPlacement placement); + void skipCommentTokens(Token& token); + + typedef std::stack Nodes; + Nodes nodes_; + Errors errors_; + std::string document_; + Location begin_; + Location end_; + Location current_; + Location lastValueEnd_; + Value* lastValue_; + std::string commentsBefore_; + int stackDepth_; + + OurFeatures const features_; + bool collectComments_; +}; // OurReader + +// complete copy of Read impl, for OurReader + +OurReader::OurReader(OurFeatures const& features) + : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), + lastValue_(), commentsBefore_(), + stackDepth_(0), + features_(features), collectComments_() { +} + +bool OurReader::parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments) { + if (!features_.allowComments_) { + collectComments = false; + } + + begin_ = beginDoc; + end_ = endDoc; + collectComments_ = collectComments; + current_ = begin_; + lastValueEnd_ = 0; + lastValue_ = 0; + commentsBefore_ = ""; + errors_.clear(); + while (!nodes_.empty()) + nodes_.pop(); + nodes_.push(&root); + + stackDepth_ = 0; + bool successful = readValue(); + Token token; + skipCommentTokens(token); + if (features_.failIfExtra_) { + if (token.type_ != tokenError && token.type_ != tokenEndOfStream) { + addError("Extra non-whitespace after JSON value.", token); + return false; + } + } + if (collectComments_ && !commentsBefore_.empty()) + root.setComment(commentsBefore_, commentAfter); + if (features_.strictRoot_) { + if (!root.isArray() && !root.isObject()) { + // Set error location to start of doc, ideally should be first token found + // in doc + token.type_ = tokenError; + token.start_ = beginDoc; + token.end_ = endDoc; + addError( + "A valid JSON document must be either an array or an object value.", + token); + return false; + } + } + return successful; +} + +bool OurReader::readValue() { + if (stackDepth_ >= features_.stackLimit_) throwRuntimeError("Exceeded stackLimit in readValue()."); + ++stackDepth_; + Token token; + skipCommentTokens(token); + bool successful = true; + + if (collectComments_ && !commentsBefore_.empty()) { + currentValue().setComment(commentsBefore_, commentBefore); + commentsBefore_ = ""; + } + + switch (token.type_) { + case tokenObjectBegin: + successful = readObject(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenArrayBegin: + successful = readArray(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenNumber: + successful = decodeNumber(token); + break; + case tokenString: + successful = decodeString(token); + break; + case tokenTrue: + { + Value v(true); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenFalse: + { + Value v(false); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNull: + { + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNaN: + { + Value v(std::numeric_limits::quiet_NaN()); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenPosInf: + { + Value v(std::numeric_limits::infinity()); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNegInf: + { + Value v(-std::numeric_limits::infinity()); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenArraySeparator: + case tokenObjectEnd: + case tokenArrayEnd: + if (features_.allowDroppedNullPlaceholders_) { + // "Un-read" the current token and mark the current value as a null + // token. + current_--; + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(current_ - begin_ - 1); + currentValue().setOffsetLimit(current_ - begin_); + break; + } // else, fall through ... + default: + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return addError("Syntax error: value, object or array expected.", token); + } + + if (collectComments_) { + lastValueEnd_ = current_; + lastValue_ = ¤tValue(); + } + + --stackDepth_; + return successful; +} + +void OurReader::skipCommentTokens(Token& token) { + if (features_.allowComments_) { + do { + readToken(token); + } while (token.type_ == tokenComment); + } else { + readToken(token); + } +} + +bool OurReader::readToken(Token& token) { + skipSpaces(); + token.start_ = current_; + Char c = getNextChar(); + bool ok = true; + switch (c) { + case '{': + token.type_ = tokenObjectBegin; + break; + case '}': + token.type_ = tokenObjectEnd; + break; + case '[': + token.type_ = tokenArrayBegin; + break; + case ']': + token.type_ = tokenArrayEnd; + break; + case '"': + token.type_ = tokenString; + ok = readString(); + break; + case '\'': + if (features_.allowSingleQuotes_) { + token.type_ = tokenString; + ok = readStringSingleQuote(); + break; + } // else continue + case '/': + token.type_ = tokenComment; + ok = readComment(); + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + token.type_ = tokenNumber; + readNumber(false); + break; + case '-': + if (readNumber(true)) { + token.type_ = tokenNumber; + } else { + token.type_ = tokenNegInf; + ok = features_.allowSpecialFloats_ && match("nfinity", 7); + } + break; + case 't': + token.type_ = tokenTrue; + ok = match("rue", 3); + break; + case 'f': + token.type_ = tokenFalse; + ok = match("alse", 4); + break; + case 'n': + token.type_ = tokenNull; + ok = match("ull", 3); + break; + case 'N': + if (features_.allowSpecialFloats_) { + token.type_ = tokenNaN; + ok = match("aN", 2); + } else { + ok = false; + } + break; + case 'I': + if (features_.allowSpecialFloats_) { + token.type_ = tokenPosInf; + ok = match("nfinity", 7); + } else { + ok = false; + } + break; + case ',': + token.type_ = tokenArraySeparator; + break; + case ':': + token.type_ = tokenMemberSeparator; + break; + case 0: + token.type_ = tokenEndOfStream; + break; + default: + ok = false; + break; + } + if (!ok) + token.type_ = tokenError; + token.end_ = current_; + return true; +} + +void OurReader::skipSpaces() { + while (current_ != end_) { + Char c = *current_; + if (c == ' ' || c == '\t' || c == '\r' || c == '\n') + ++current_; + else + break; + } +} + +bool OurReader::match(Location pattern, int patternLength) { + if (end_ - current_ < patternLength) + return false; + int index = patternLength; + while (index--) + if (current_[index] != pattern[index]) + return false; + current_ += patternLength; + return true; +} + +bool OurReader::readComment() { + Location commentBegin = current_ - 1; + Char c = getNextChar(); + bool successful = false; + if (c == '*') + successful = readCStyleComment(); + else if (c == '/') + successful = readCppStyleComment(); + if (!successful) + return false; + + if (collectComments_) { + CommentPlacement placement = commentBefore; + if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) { + if (c != '*' || !containsNewLine(commentBegin, current_)) + placement = commentAfterOnSameLine; + } + + addComment(commentBegin, current_, placement); + } + return true; +} + +void +OurReader::addComment(Location begin, Location end, CommentPlacement placement) { + assert(collectComments_); + const std::string& normalized = normalizeEOL(begin, end); + if (placement == commentAfterOnSameLine) { + assert(lastValue_ != 0); + lastValue_->setComment(normalized, placement); + } else { + commentsBefore_ += normalized; + } +} + +bool OurReader::readCStyleComment() { + while (current_ != end_) { + Char c = getNextChar(); + if (c == '*' && *current_ == '/') + break; + } + return getNextChar() == '/'; +} + +bool OurReader::readCppStyleComment() { + while (current_ != end_) { + Char c = getNextChar(); + if (c == '\n') + break; + if (c == '\r') { + // Consume DOS EOL. It will be normalized in addComment. + if (current_ != end_ && *current_ == '\n') + getNextChar(); + // Break on Moc OS 9 EOL. + break; + } + } + return true; +} + +bool OurReader::readNumber(bool checkInf) { + const char *p = current_; + if (checkInf && p != end_ && *p == 'I') { + current_ = ++p; + return false; + } + char c = '0'; // stopgap for already consumed character + // integral part + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + // fractional part + if (c == '.') { + c = (current_ = p) < end_ ? *p++ : 0; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + } + // exponential part + if (c == 'e' || c == 'E') { + c = (current_ = p) < end_ ? *p++ : 0; + if (c == '+' || c == '-') + c = (current_ = p) < end_ ? *p++ : 0; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + } + return true; +} +bool OurReader::readString() { + Char c = 0; + while (current_ != end_) { + c = getNextChar(); + if (c == '\\') + getNextChar(); + else if (c == '"') + break; + } + return c == '"'; +} + + +bool OurReader::readStringSingleQuote() { + Char c = 0; + while (current_ != end_) { + c = getNextChar(); + if (c == '\\') + getNextChar(); + else if (c == '\'') + break; + } + return c == '\''; +} + +bool OurReader::readObject(Token& tokenStart) { + Token tokenName; + std::string name; + Value init(objectValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + while (readToken(tokenName)) { + bool initialTokenOk = true; + while (tokenName.type_ == tokenComment && initialTokenOk) + initialTokenOk = readToken(tokenName); + if (!initialTokenOk) + break; + if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object + return true; + name = ""; + if (tokenName.type_ == tokenString) { + if (!decodeString(tokenName, name)) + return recoverFromError(tokenObjectEnd); + } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) { + Value numberName; + if (!decodeNumber(tokenName, numberName)) + return recoverFromError(tokenObjectEnd); + name = numberName.asString(); + } else { + break; + } + + Token colon; + if (!readToken(colon) || colon.type_ != tokenMemberSeparator) { + return addErrorAndRecover( + "Missing ':' after object member name", colon, tokenObjectEnd); + } + if (name.length() >= (1U<<30)) throwRuntimeError("keylength >= 2^30"); + if (features_.rejectDupKeys_ && currentValue().isMember(name)) { + std::string msg = "Duplicate key: '" + name + "'"; + return addErrorAndRecover( + msg, tokenName, tokenObjectEnd); + } + Value& value = currentValue()[name]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenObjectEnd); + + Token comma; + if (!readToken(comma) || + (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator && + comma.type_ != tokenComment)) { + return addErrorAndRecover( + "Missing ',' or '}' in object declaration", comma, tokenObjectEnd); + } + bool finalizeTokenOk = true; + while (comma.type_ == tokenComment && finalizeTokenOk) + finalizeTokenOk = readToken(comma); + if (comma.type_ == tokenObjectEnd) + return true; + } + return addErrorAndRecover( + "Missing '}' or object member name", tokenName, tokenObjectEnd); +} + +bool OurReader::readArray(Token& tokenStart) { + Value init(arrayValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + skipSpaces(); + if (*current_ == ']') // empty array + { + Token endArray; + readToken(endArray); + return true; + } + int index = 0; + for (;;) { + Value& value = currentValue()[index++]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenArrayEnd); + + Token token; + // Accept Comment after last item in the array. + ok = readToken(token); + while (token.type_ == tokenComment && ok) { + ok = readToken(token); + } + bool badTokenType = + (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd); + if (!ok || badTokenType) { + return addErrorAndRecover( + "Missing ',' or ']' in array declaration", token, tokenArrayEnd); + } + if (token.type_ == tokenArrayEnd) + break; + } + return true; +} + +bool OurReader::decodeNumber(Token& token) { + Value decoded; + if (!decodeNumber(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool OurReader::decodeNumber(Token& token, Value& decoded) { + // Attempts to parse the number as an integer. If the number is + // larger than the maximum supported value of an integer then + // we decode the number as a double. + Location current = token.start_; + bool isNegative = *current == '-'; + if (isNegative) + ++current; + // TODO: Help the compiler do the div and mod at compile time or get rid of them. + Value::LargestUInt maxIntegerValue = + isNegative ? Value::LargestUInt(-Value::minLargestInt) + : Value::maxLargestUInt; + Value::LargestUInt threshold = maxIntegerValue / 10; + Value::LargestUInt value = 0; + while (current < token.end_) { + Char c = *current++; + if (c < '0' || c > '9') + return decodeDouble(token, decoded); + Value::UInt digit(c - '0'); + if (value >= threshold) { + // We've hit or exceeded the max value divided by 10 (rounded down). If + // a) we've only just touched the limit, b) this is the last digit, and + // c) it's small enough to fit in that rounding delta, we're okay. + // Otherwise treat this number as a double to avoid overflow. + if (value > threshold || current != token.end_ || + digit > maxIntegerValue % 10) { + return decodeDouble(token, decoded); + } + } + value = value * 10 + digit; + } + if (isNegative) + decoded = -Value::LargestInt(value); + else if (value <= Value::LargestUInt(Value::maxInt)) + decoded = Value::LargestInt(value); + else + decoded = value; + return true; +} + +bool OurReader::decodeDouble(Token& token) { + Value decoded; + if (!decodeDouble(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool OurReader::decodeDouble(Token& token, Value& decoded) { + double value = 0; + const int bufferSize = 32; + int count; + int length = int(token.end_ - token.start_); + + // Sanity check to avoid buffer overflow exploits. + if (length < 0) { + return addError("Unable to parse token length", token); + } + + // Avoid using a string constant for the format control string given to + // sscanf, as this can cause hard to debug crashes on OS X. See here for more + // info: + // + // http://developer.apple.com/library/mac/#DOCUMENTATION/DeveloperTools/gcc-4.0.1/gcc/Incompatibilities.html + char format[] = "%lf"; + + if (length <= bufferSize) { + Char buffer[bufferSize + 1]; + memcpy(buffer, token.start_, length); + buffer[length] = 0; + count = sscanf(buffer, format, &value); + } else { + std::string buffer(token.start_, token.end_); + count = sscanf(buffer.c_str(), format, &value); + } + + if (count != 1) + return addError("'" + std::string(token.start_, token.end_) + + "' is not a number.", + token); + decoded = value; + return true; +} + +bool OurReader::decodeString(Token& token) { + std::string decoded_string; + if (!decodeString(token, decoded_string)) + return false; + Value decoded(decoded_string); + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool OurReader::decodeString(Token& token, std::string& decoded) { + decoded.reserve(token.end_ - token.start_ - 2); + Location current = token.start_ + 1; // skip '"' + Location end = token.end_ - 1; // do not include '"' + while (current != end) { + Char c = *current++; + if (c == '"') + break; + else if (c == '\\') { + if (current == end) + return addError("Empty escape sequence in string", token, current); + Char escape = *current++; + switch (escape) { + case '"': + decoded += '"'; + break; + case '/': + decoded += '/'; + break; + case '\\': + decoded += '\\'; + break; + case 'b': + decoded += '\b'; + break; + case 'f': + decoded += '\f'; + break; + case 'n': + decoded += '\n'; + break; + case 'r': + decoded += '\r'; + break; + case 't': + decoded += '\t'; + break; + case 'u': { + unsigned int unicode; + if (!decodeUnicodeCodePoint(token, current, end, unicode)) + return false; + decoded += codePointToUTF8(unicode); + } break; + default: + return addError("Bad escape sequence in string", token, current); + } + } else { + decoded += c; + } + } + return true; +} + +bool OurReader::decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode) { + + if (!decodeUnicodeEscapeSequence(token, current, end, unicode)) + return false; + if (unicode >= 0xD800 && unicode <= 0xDBFF) { + // surrogate pairs + if (end - current < 6) + return addError( + "additional six characters expected to parse unicode surrogate pair.", + token, + current); + unsigned int surrogatePair; + if (*(current++) == '\\' && *(current++) == 'u') { + if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) { + unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF); + } else + return false; + } else + return addError("expecting another \\u token to begin the second half of " + "a unicode surrogate pair", + token, + current); + } + return true; +} + +bool OurReader::decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& unicode) { + if (end - current < 4) + return addError( + "Bad unicode escape sequence in string: four digits expected.", + token, + current); + unicode = 0; + for (int index = 0; index < 4; ++index) { + Char c = *current++; + unicode *= 16; + if (c >= '0' && c <= '9') + unicode += c - '0'; + else if (c >= 'a' && c <= 'f') + unicode += c - 'a' + 10; + else if (c >= 'A' && c <= 'F') + unicode += c - 'A' + 10; + else + return addError( + "Bad unicode escape sequence in string: hexadecimal digit expected.", + token, + current); + } + return true; +} + +bool +OurReader::addError(const std::string& message, Token& token, Location extra) { + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = extra; + errors_.push_back(info); + return false; +} + +bool OurReader::recoverFromError(TokenType skipUntilToken) { + int errorCount = int(errors_.size()); + Token skip; + for (;;) { + if (!readToken(skip)) + errors_.resize(errorCount); // discard errors caused by recovery + if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream) + break; + } + errors_.resize(errorCount); + return false; +} + +bool OurReader::addErrorAndRecover(const std::string& message, + Token& token, + TokenType skipUntilToken) { + addError(message, token); + return recoverFromError(skipUntilToken); +} + +Value& OurReader::currentValue() { return *(nodes_.top()); } + +OurReader::Char OurReader::getNextChar() { + if (current_ == end_) + return 0; + return *current_++; +} + +void OurReader::getLocationLineAndColumn(Location location, + int& line, + int& column) const { + Location current = begin_; + Location lastLineStart = current; + line = 0; + while (current < location && current != end_) { + Char c = *current++; + if (c == '\r') { + if (*current == '\n') + ++current; + lastLineStart = current; + ++line; + } else if (c == '\n') { + lastLineStart = current; + ++line; + } + } + // column & line start at 1 + column = int(location - lastLineStart) + 1; + ++line; +} + +std::string OurReader::getLocationLineAndColumn(Location location) const { + int line, column; + getLocationLineAndColumn(location, line, column); + char buffer[18 + 16 + 16 + 1]; + snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column); + return buffer; +} + +std::string OurReader::getFormattedErrorMessages() const { + std::string formattedMessage; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + formattedMessage += + "* " + getLocationLineAndColumn(error.token_.start_) + "\n"; + formattedMessage += " " + error.message_ + "\n"; + if (error.extra_) + formattedMessage += + "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n"; + } + return formattedMessage; +} + +std::vector OurReader::getStructuredErrors() const { + std::vector allErrors; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + OurReader::StructuredError structured; + structured.offset_start = error.token_.start_ - begin_; + structured.offset_limit = error.token_.end_ - begin_; + structured.message = error.message_; + allErrors.push_back(structured); + } + return allErrors; +} + +bool OurReader::pushError(const Value& value, const std::string& message) { + size_t length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = end_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = 0; + errors_.push_back(info); + return true; +} + +bool OurReader::pushError(const Value& value, const std::string& message, const Value& extra) { + size_t length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length + || extra.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = begin_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = begin_ + extra.getOffsetStart(); + errors_.push_back(info); + return true; +} + +bool OurReader::good() const { + return !errors_.size(); +} + + +class OurCharReader : public CharReader { + bool const collectComments_; + OurReader reader_; +public: + OurCharReader( + bool collectComments, + OurFeatures const& features) + : collectComments_(collectComments) + , reader_(features) + {} + bool parse( + char const* beginDoc, char const* endDoc, + Value* root, std::string* errs) { + bool ok = reader_.parse(beginDoc, endDoc, *root, collectComments_); + if (errs) { + *errs = reader_.getFormattedErrorMessages(); + } + return ok; + } +}; + +CharReaderBuilder::CharReaderBuilder() +{ + setDefaults(&settings_); +} +CharReaderBuilder::~CharReaderBuilder() +{} +CharReader* CharReaderBuilder::newCharReader() const +{ + bool collectComments = settings_["collectComments"].asBool(); + OurFeatures features = OurFeatures::all(); + features.allowComments_ = settings_["allowComments"].asBool(); + features.strictRoot_ = settings_["strictRoot"].asBool(); + features.allowDroppedNullPlaceholders_ = settings_["allowDroppedNullPlaceholders"].asBool(); + features.allowNumericKeys_ = settings_["allowNumericKeys"].asBool(); + features.allowSingleQuotes_ = settings_["allowSingleQuotes"].asBool(); + features.stackLimit_ = settings_["stackLimit"].asInt(); + features.failIfExtra_ = settings_["failIfExtra"].asBool(); + features.rejectDupKeys_ = settings_["rejectDupKeys"].asBool(); + features.allowSpecialFloats_ = settings_["allowSpecialFloats"].asBool(); + return new OurCharReader(collectComments, features); +} +static void getValidReaderKeys(std::set* valid_keys) +{ + valid_keys->clear(); + valid_keys->insert("collectComments"); + valid_keys->insert("allowComments"); + valid_keys->insert("strictRoot"); + valid_keys->insert("allowDroppedNullPlaceholders"); + valid_keys->insert("allowNumericKeys"); + valid_keys->insert("allowSingleQuotes"); + valid_keys->insert("stackLimit"); + valid_keys->insert("failIfExtra"); + valid_keys->insert("rejectDupKeys"); + valid_keys->insert("allowSpecialFloats"); +} +bool CharReaderBuilder::validate(Json::Value* invalid) const +{ + Json::Value my_invalid; + if (!invalid) invalid = &my_invalid; // so we do not need to test for NULL + Json::Value& inv = *invalid; + std::set valid_keys; + getValidReaderKeys(&valid_keys); + Value::Members keys = settings_.getMemberNames(); + size_t n = keys.size(); + for (size_t i = 0; i < n; ++i) { + std::string const& key = keys[i]; + if (valid_keys.find(key) == valid_keys.end()) { + inv[key] = settings_[key]; + } + } + return 0u == inv.size(); +} +Value& CharReaderBuilder::operator[](std::string key) +{ + return settings_[key]; +} +// static +void CharReaderBuilder::strictMode(Json::Value* settings) +{ +//! [CharReaderBuilderStrictMode] + (*settings)["allowComments"] = false; + (*settings)["strictRoot"] = true; + (*settings)["allowDroppedNullPlaceholders"] = false; + (*settings)["allowNumericKeys"] = false; + (*settings)["allowSingleQuotes"] = false; + (*settings)["stackLimit"] = 1000; + (*settings)["failIfExtra"] = true; + (*settings)["rejectDupKeys"] = true; + (*settings)["allowSpecialFloats"] = false; +//! [CharReaderBuilderStrictMode] +} +// static +void CharReaderBuilder::setDefaults(Json::Value* settings) +{ +//! [CharReaderBuilderDefaults] + (*settings)["collectComments"] = true; + (*settings)["allowComments"] = true; + (*settings)["strictRoot"] = false; + (*settings)["allowDroppedNullPlaceholders"] = false; + (*settings)["allowNumericKeys"] = false; + (*settings)["allowSingleQuotes"] = false; + (*settings)["stackLimit"] = 1000; + (*settings)["failIfExtra"] = false; + (*settings)["rejectDupKeys"] = false; + (*settings)["allowSpecialFloats"] = false; +//! [CharReaderBuilderDefaults] +} + +////////////////////////////////// +// global functions + +bool parseFromStream( + CharReader::Factory const& fact, std::istream& sin, + Value* root, std::string* errs) +{ + std::ostringstream ssin; + ssin << sin.rdbuf(); + std::string doc = ssin.str(); + char const* begin = doc.data(); + char const* end = begin + doc.size(); + // Note that we do not actually need a null-terminator. + CharReaderPtr const reader(fact.newCharReader()); + return reader->parse(begin, end, root, errs); +} + +std::istream& operator>>(std::istream& sin, Value& root) { + CharReaderBuilder b; + std::string errs; + bool ok = parseFromStream(b, sin, &root, &errs); + if (!ok) { + fprintf(stderr, + "Error from reader: %s", + errs.c_str()); + + throwRuntimeError(errs); + } + return sin; +} + +} // namespace Json + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_reader.cpp +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_valueiterator.inl +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +// included by json_value.cpp + +namespace Json { + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class ValueIteratorBase +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +ValueIteratorBase::ValueIteratorBase() + : current_(), isNull_(true) { +} + +ValueIteratorBase::ValueIteratorBase( + const Value::ObjectValues::iterator& current) + : current_(current), isNull_(false) {} + +Value& ValueIteratorBase::deref() const { + return current_->second; +} + +void ValueIteratorBase::increment() { + ++current_; +} + +void ValueIteratorBase::decrement() { + --current_; +} + +ValueIteratorBase::difference_type +ValueIteratorBase::computeDistance(const SelfType& other) const { +#ifdef JSON_USE_CPPTL_SMALLMAP + return other.current_ - current_; +#else + // Iterator for null value are initialized using the default + // constructor, which initialize current_ to the default + // std::map::iterator. As begin() and end() are two instance + // of the default std::map::iterator, they can not be compared. + // To allow this, we handle this comparison specifically. + if (isNull_ && other.isNull_) { + return 0; + } + + // Usage of std::distance is not portable (does not compile with Sun Studio 12 + // RogueWave STL, + // which is the one used by default). + // Using a portable hand-made version for non random iterator instead: + // return difference_type( std::distance( current_, other.current_ ) ); + difference_type myDistance = 0; + for (Value::ObjectValues::iterator it = current_; it != other.current_; + ++it) { + ++myDistance; + } + return myDistance; +#endif +} + +bool ValueIteratorBase::isEqual(const SelfType& other) const { + if (isNull_) { + return other.isNull_; + } + return current_ == other.current_; +} + +void ValueIteratorBase::copy(const SelfType& other) { + current_ = other.current_; + isNull_ = other.isNull_; +} + +Value ValueIteratorBase::key() const { + const Value::CZString czstring = (*current_).first; + if (czstring.data()) { + if (czstring.isStaticString()) + return Value(StaticString(czstring.data())); + return Value(czstring.data(), czstring.data() + czstring.length()); + } + return Value(czstring.index()); +} + +UInt ValueIteratorBase::index() const { + const Value::CZString czstring = (*current_).first; + if (!czstring.data()) + return czstring.index(); + return Value::UInt(-1); +} + +std::string ValueIteratorBase::name() const { + char const* keey; + char const* end; + keey = memberName(&end); + if (!keey) return std::string(); + return std::string(keey, end); +} + +char const* ValueIteratorBase::memberName() const { + const char* cname = (*current_).first.data(); + return cname ? cname : ""; +} + +char const* ValueIteratorBase::memberName(char const** end) const { + const char* cname = (*current_).first.data(); + if (!cname) { + *end = NULL; + return NULL; + } + *end = cname + (*current_).first.length(); + return cname; +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class ValueConstIterator +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +ValueConstIterator::ValueConstIterator() {} + +ValueConstIterator::ValueConstIterator( + const Value::ObjectValues::iterator& current) + : ValueIteratorBase(current) {} + +ValueConstIterator::ValueConstIterator(ValueIterator const& other) + : ValueIteratorBase(other) {} + +ValueConstIterator& ValueConstIterator:: +operator=(const ValueIteratorBase& other) { + copy(other); + return *this; +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class ValueIterator +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +ValueIterator::ValueIterator() {} + +ValueIterator::ValueIterator(const Value::ObjectValues::iterator& current) + : ValueIteratorBase(current) {} + +ValueIterator::ValueIterator(const ValueConstIterator& other) + : ValueIteratorBase(other) { + throwRuntimeError("ConstIterator to Iterator should never be allowed."); +} + +ValueIterator::ValueIterator(const ValueIterator& other) + : ValueIteratorBase(other) {} + +ValueIterator& ValueIterator::operator=(const SelfType& other) { + copy(other); + return *this; +} + +} // namespace Json + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_valueiterator.inl +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_value.cpp +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2011 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include +#endif // if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include +#include +#include +#ifdef JSON_USE_CPPTL +#include +#endif +#include // size_t +#include // min() + +#define JSON_ASSERT_UNREACHABLE assert(false) + +/* +-- Valve 1/7/16 +4702 unreachable code +*/ +#pragma warning (push) +#pragma warning (disable: 4702) + +namespace Json { + +// This is a walkaround to avoid the static initialization of Value::null. +// kNull must be word-aligned to avoid crashing on ARM. We use an alignment of +// 8 (instead of 4) as a bit of future-proofing. +#if defined(__ARMEL__) +#define ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment))) +#else +#define ALIGNAS(byte_alignment) +#endif +static const unsigned char ALIGNAS(8) kNull[sizeof(Value)] = { 0 }; +const unsigned char& kNullRef = kNull[0]; +const Value& Value::null = reinterpret_cast(kNullRef); +const Value& Value::nullRef = null; + +const Int Value::minInt = Int(~(UInt(-1) / 2)); +const Int Value::maxInt = Int(UInt(-1) / 2); +const UInt Value::maxUInt = UInt(-1); +#if defined(JSON_HAS_INT64) +const Int64 Value::minInt64 = Int64(~(UInt64(-1) / 2)); +const Int64 Value::maxInt64 = Int64(UInt64(-1) / 2); +const UInt64 Value::maxUInt64 = UInt64(-1); +// The constant is hard-coded because some compiler have trouble +// converting Value::maxUInt64 to a double correctly (AIX/xlC). +// Assumes that UInt64 is a 64 bits integer. +static const double maxUInt64AsDouble = 18446744073709551615.0; +#endif // defined(JSON_HAS_INT64) +const LargestInt Value::minLargestInt = LargestInt(~(LargestUInt(-1) / 2)); +const LargestInt Value::maxLargestInt = LargestInt(LargestUInt(-1) / 2); +const LargestUInt Value::maxLargestUInt = LargestUInt(-1); + +#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) +template +static inline bool InRange(double d, T min, U max) { + return d >= min && d <= max; +} +#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) +static inline double integerToDouble(Json::UInt64 value) { + return static_cast(Int64(value / 2)) * 2.0 + Int64(value & 1); +} + +template static inline double integerToDouble(T value) { + return static_cast(value); +} + +template +static inline bool InRange(double d, T min, U max) { + return d >= integerToDouble(min) && d <= integerToDouble(max); +} +#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + +/** Duplicates the specified string value. + * @param value Pointer to the string to duplicate. Must be zero-terminated if + * length is "unknown". + * @param length Length of the value. if equals to unknown, then it will be + * computed using strlen(value). + * @return Pointer on the duplicate instance of string. + */ +static inline char* duplicateStringValue(const char* value, + size_t length) { + // Avoid an integer overflow in the call to malloc below by limiting length + // to a sane value. + if (length >= (size_t)Value::maxInt) + length = Value::maxInt - 1; + + char* newString = static_cast(malloc(length + 1)); + if (newString == NULL) { + throwRuntimeError( + "in Json::Value::duplicateStringValue(): " + "Failed to allocate string value buffer"); + } + memcpy(newString, value, length); + newString[length] = 0; + return newString; +} + +/* Record the length as a prefix. + */ +static inline char* duplicateAndPrefixStringValue( + const char* value, + unsigned int length) +{ + // Avoid an integer overflow in the call to malloc below by limiting length + // to a sane value. + JSON_ASSERT_MESSAGE(length <= (unsigned)Value::maxInt - sizeof(unsigned) - 1U, + "in Json::Value::duplicateAndPrefixStringValue(): " + "length too big for prefixing"); + unsigned actualLength = length + static_cast(sizeof(unsigned)) + 1U; + char* newString = static_cast(malloc(actualLength)); + if (newString == 0) { + throwRuntimeError( + "in Json::Value::duplicateAndPrefixStringValue(): " + "Failed to allocate string value buffer"); + } + *reinterpret_cast(newString) = length; + memcpy(newString + sizeof(unsigned), value, length); + newString[actualLength - 1U] = 0; // to avoid buffer over-run accidents by users later + return newString; +} +inline static void decodePrefixedString( + bool isPrefixed, char const* prefixed, + unsigned* length, char const** value) +{ + if (!isPrefixed) { + *length = static_cast(strlen(prefixed)); + *value = prefixed; + } else { + *length = *reinterpret_cast(prefixed); + *value = prefixed + sizeof(unsigned); + } +} +/** Free the string duplicated by duplicateStringValue()/duplicateAndPrefixStringValue(). + */ +static inline void releaseStringValue(char* value) { free(value); } + +} // namespace Json + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ValueInternals... +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +#if !defined(JSON_IS_AMALGAMATION) + +#include "json_valueiterator.inl" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +Exception::Exception(std::string const& msg) + : msg_(msg) +{} +Exception::~Exception() throw() +{} +char const* Exception::what() const throw() +{ + return msg_.c_str(); +} +RuntimeError::RuntimeError(std::string const& msg) + : Exception(msg) +{} +LogicError::LogicError(std::string const& msg) + : Exception(msg) +{} +void throwRuntimeError(std::string const& msg) +{ + throw RuntimeError(msg); +} +void throwLogicError(std::string const& msg) +{ + throw LogicError(msg); +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class Value::CommentInfo +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +Value::CommentInfo::CommentInfo() : comment_(0) {} + +Value::CommentInfo::~CommentInfo() { + if (comment_) + releaseStringValue(comment_); +} + +void Value::CommentInfo::setComment(const char* text, size_t len) { + if (comment_) { + releaseStringValue(comment_); + comment_ = 0; + } + JSON_ASSERT(text != 0); + JSON_ASSERT_MESSAGE( + text[0] == '\0' || text[0] == '/', + "in Json::Value::setComment(): Comments must start with /"); + // It seems that /**/ style comments are acceptable as well. + comment_ = duplicateStringValue(text, len); +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class Value::CZString +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +// Notes: policy_ indicates if the string was allocated when +// a string is stored. + +Value::CZString::CZString(ArrayIndex aindex) : cstr_(0), index_(aindex) {} + +Value::CZString::CZString(char const* str, unsigned ulength, DuplicationPolicy allocate) + : cstr_(str) { + // allocate != duplicate + storage_.policy_ = allocate & 0x3; + storage_.length_ = ulength & 0x3FFFFFFF; +} + +Value::CZString::CZString(const CZString& other) + : cstr_(other.storage_.policy_ != noDuplication && other.cstr_ != 0 + ? duplicateStringValue(other.cstr_, other.storage_.length_) + : other.cstr_) { + storage_.policy_ = (other.cstr_ + ? (static_cast(other.storage_.policy_) == noDuplication + ? noDuplication : duplicate) + : static_cast(other.storage_.policy_)); + storage_.length_ = other.storage_.length_; +} + +#if JSON_HAS_RVALUE_REFERENCES +Value::CZString::CZString(CZString&& other) + : cstr_(other.cstr_), index_(other.index_) { + other.cstr_ = nullptr; +} +#endif + +Value::CZString::~CZString() { + if (cstr_ && storage_.policy_ == duplicate) + releaseStringValue(const_cast(cstr_)); +} + +void Value::CZString::swap(CZString& other) { + std::swap(cstr_, other.cstr_); + std::swap(index_, other.index_); +} + +Value::CZString& Value::CZString::operator=(CZString other) { + swap(other); + return *this; +} + +bool Value::CZString::operator<(const CZString& other) const { + if (!cstr_) return index_ < other.index_; + //return strcmp(cstr_, other.cstr_) < 0; + // Assume both are strings. + unsigned this_len = this->storage_.length_; + unsigned other_len = other.storage_.length_; + unsigned min_len = std::min(this_len, other_len); + int comp = memcmp(this->cstr_, other.cstr_, min_len); + if (comp < 0) return true; + if (comp > 0) return false; + return (this_len < other_len); +} + +bool Value::CZString::operator==(const CZString& other) const { + if (!cstr_) return index_ == other.index_; + //return strcmp(cstr_, other.cstr_) == 0; + // Assume both are strings. + unsigned this_len = this->storage_.length_; + unsigned other_len = other.storage_.length_; + if (this_len != other_len) return false; + int comp = memcmp(this->cstr_, other.cstr_, this_len); + return comp == 0; +} + +ArrayIndex Value::CZString::index() const { return index_; } + +//const char* Value::CZString::c_str() const { return cstr_; } +const char* Value::CZString::data() const { return cstr_; } +unsigned Value::CZString::length() const { return storage_.length_; } +bool Value::CZString::isStaticString() const { return storage_.policy_ == noDuplication; } + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class Value::Value +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +/*! \internal Default constructor initialization must be equivalent to: + * memset( this, 0, sizeof(Value) ) + * This optimization is used in ValueInternalMap fast allocator. + */ +Value::Value(ValueType vtype) { + initBasic(vtype); + switch (vtype) { + case nullValue: + break; + case intValue: + case uintValue: + value_.int_ = 0; + break; + case realValue: + value_.real_ = 0.0; + break; + case stringValue: + value_.string_ = 0; + break; + case arrayValue: + case objectValue: + value_.map_ = new ObjectValues(); + break; + case booleanValue: + value_.bool_ = false; + break; + default: + JSON_ASSERT_UNREACHABLE; + } +} + +Value::Value(Int value) { + initBasic(intValue); + value_.int_ = value; +} + +Value::Value(UInt value) { + initBasic(uintValue); + value_.uint_ = value; +} +#if defined(JSON_HAS_INT64) +Value::Value(Int64 value) { + initBasic(intValue); + value_.int_ = value; +} +Value::Value(UInt64 value) { + initBasic(uintValue); + value_.uint_ = value; +} +#endif // defined(JSON_HAS_INT64) + +Value::Value(double value) { + initBasic(realValue); + value_.real_ = value; +} + +Value::Value(const char* value) { + initBasic(stringValue, true); + value_.string_ = duplicateAndPrefixStringValue(value, static_cast(strlen(value))); +} + +Value::Value(const char* beginValue, const char* endValue) { + initBasic(stringValue, true); + value_.string_ = + duplicateAndPrefixStringValue(beginValue, static_cast(endValue - beginValue)); +} + +Value::Value(const std::string& value) { + initBasic(stringValue, true); + value_.string_ = + duplicateAndPrefixStringValue(value.data(), static_cast(value.length())); +} + +Value::Value(const StaticString& value) { + initBasic(stringValue); + value_.string_ = const_cast(value.c_str()); +} + +#ifdef JSON_USE_CPPTL +Value::Value(const CppTL::ConstString& value) { + initBasic(stringValue, true); + value_.string_ = duplicateAndPrefixStringValue(value, static_cast(value.length())); +} +#endif + +Value::Value(bool value) { + initBasic(booleanValue); + value_.bool_ = value; +} + +Value::Value(Value const& other) + : type_(other.type_), allocated_(false) + , + comments_(nullptr), default_value_(nullptr), start_(other.start_), limit_(other.limit_) +{ + switch (type_) { + case nullValue: + case intValue: + case uintValue: + case realValue: + case booleanValue: + value_ = other.value_; + break; + case stringValue: + if (other.value_.string_ && other.allocated_) { + unsigned len; + char const* str; + decodePrefixedString(other.allocated_, other.value_.string_, + &len, &str); + value_.string_ = duplicateAndPrefixStringValue(str, len); + allocated_ = true; + } else { + value_.string_ = other.value_.string_; + allocated_ = false; + } + break; + case arrayValue: + case objectValue: + value_.map_ = new ObjectValues(*other.value_.map_); + break; + default: + JSON_ASSERT_UNREACHABLE; + } + if (other.comments_) { + comments_ = new CommentInfo[numberOfCommentPlacement]; + for (int comment = 0; comment < numberOfCommentPlacement; ++comment) { + const CommentInfo& otherComment = other.comments_[comment]; + if (otherComment.comment_) + comments_[comment].setComment( + otherComment.comment_, strlen(otherComment.comment_)); + } + } + + if ( other.default_value_ ) + { + default_value_ = new Value( *other.default_value_ ); + } + +} + +#if JSON_HAS_RVALUE_REFERENCES +// Move constructor +Value::Value(Value&& other) { + initBasic(nullValue); + swap(other); +} +#endif + +Value::~Value() { + switch (type_) { + case nullValue: + case intValue: + case uintValue: + case realValue: + case booleanValue: + break; + case stringValue: + if (allocated_) + releaseStringValue(value_.string_); + break; + case arrayValue: + case objectValue: + delete value_.map_; + break; + default: + JSON_ASSERT_UNREACHABLE; + } + + if (comments_) + delete[] comments_; + + if ( default_value_) + delete default_value_; +} + +Value& Value::operator=(Value other) { + swap(other); + return *this; +} + +void Value::swapPayload(Value& other) { + ValueType temp = type_; + type_ = other.type_; + other.type_ = temp; + std::swap(value_, other.value_); + int temp2 = allocated_; + allocated_ = other.allocated_; + other.allocated_ = temp2 & 0x1; +} + +void Value::swap(Value& other) { + swapPayload(other); + std::swap(comments_, other.comments_); + std::swap(default_value_, other.default_value_); + std::swap(start_, other.start_); + std::swap(limit_, other.limit_); +} + +ValueType Value::type() const { return type_; } + +int Value::compare(const Value& other) const { + if (*this < other) + return -1; + if (*this > other) + return 1; + return 0; +} + +bool Value::operator<(const Value& other) const { + int typeDelta = type_ - other.type_; + if (typeDelta) + return typeDelta < 0 ? true : false; + switch (type_) { + case nullValue: + return false; + case intValue: + return value_.int_ < other.value_.int_; + case uintValue: + return value_.uint_ < other.value_.uint_; + case realValue: + return value_.real_ < other.value_.real_; + case booleanValue: + return value_.bool_ < other.value_.bool_; + case stringValue: + { + if ((value_.string_ == 0) || (other.value_.string_ == 0)) { + if (other.value_.string_) return true; + else return false; + } + unsigned this_len; + unsigned other_len; + char const* this_str; + char const* other_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str); + unsigned min_len = std::min(this_len, other_len); + int comp = memcmp(this_str, other_str, min_len); + if (comp < 0) return true; + if (comp > 0) return false; + return (this_len < other_len); + } + case arrayValue: + case objectValue: { + int delta = int(value_.map_->size() - other.value_.map_->size()); + if (delta) + return delta < 0; + return (*value_.map_) < (*other.value_.map_); + } + default: + JSON_ASSERT_UNREACHABLE; + } + return false; // unreachable +} + +bool Value::operator<=(const Value& other) const { return !(other < *this); } + +bool Value::operator>=(const Value& other) const { return !(*this < other); } + +bool Value::operator>(const Value& other) const { return other < *this; } + +bool Value::operator==(const Value& other) const { + // if ( type_ != other.type_ ) + // GCC 2.95.3 says: + // attempt to take address of bit-field structure member `Json::Value::type_' + // Beats me, but a temp solves the problem. + int temp = other.type_; + if (type_ != temp) + return false; + switch (type_) { + case nullValue: + return true; + case intValue: + return value_.int_ == other.value_.int_; + case uintValue: + return value_.uint_ == other.value_.uint_; + case realValue: + return value_.real_ == other.value_.real_; + case booleanValue: + return value_.bool_ == other.value_.bool_; + case stringValue: + { + if ((value_.string_ == 0) || (other.value_.string_ == 0)) { + return (value_.string_ == other.value_.string_); + } + unsigned this_len; + unsigned other_len; + char const* this_str; + char const* other_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str); + if (this_len != other_len) return false; + int comp = memcmp(this_str, other_str, this_len); + return comp == 0; + } + case arrayValue: + case objectValue: + return value_.map_->size() == other.value_.map_->size() && + (*value_.map_) == (*other.value_.map_); + default: + JSON_ASSERT_UNREACHABLE; + } + return false; // unreachable +} + +bool Value::operator!=(const Value& other) const { return !(*this == other); } + +const char* Value::asCString() const { + JSON_ASSERT_MESSAGE(type_ == stringValue, + "in Json::Value::asCString(): requires stringValue"); + if (value_.string_ == 0) return 0; + unsigned this_len; + char const* this_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + return this_str; +} + +bool Value::getString(char const** str, char const** cend) const { + if (type_ != stringValue) return false; + if (value_.string_ == 0) return false; + unsigned length; + decodePrefixedString(this->allocated_, this->value_.string_, &length, str); + *cend = *str + length; + return true; +} + +std::string Value::asString() const { + switch (type_) { + case nullValue: + return ""; + case stringValue: + { + if (value_.string_ == 0) return ""; + unsigned this_len; + char const* this_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + return std::string(this_str, this_len); + } + case booleanValue: + return value_.bool_ ? "true" : "false"; + case intValue: + return valueToString(value_.int_); + case uintValue: + return valueToString(value_.uint_); + case realValue: + return valueToString(value_.real_); + default: + if ( default_value_ ) + return default_value_->asString(); + else + return ""; + } +} + +#ifdef JSON_USE_CPPTL +CppTL::ConstString Value::asConstString() const { + unsigned len; + char const* str; + decodePrefixedString(allocated_, value_.string_, + &len, &str); + return CppTL::ConstString(str, len); +} +#endif + +Value::Int Value::asInt() const { + switch (type_) { + case intValue: + JSON_ASSERT_MESSAGE(isInt(), "LargestInt out of Int range"); + return Int(value_.int_); + case uintValue: + JSON_ASSERT_MESSAGE(isInt(), "LargestUInt out of Int range"); + return Int(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt, maxInt), + "double out of Int range"); + return Int(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + if ( default_value_ ) + return default_value_->asInt(); + else + return 0; + } +} + +Value::UInt Value::asUInt() const { + switch (type_) { + case intValue: + JSON_ASSERT_MESSAGE(isUInt(), "LargestInt out of UInt range"); + return UInt(value_.int_); + case uintValue: + JSON_ASSERT_MESSAGE(isUInt(), "LargestUInt out of UInt range"); + return UInt(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt), + "double out of UInt range"); + return UInt(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + if ( default_value_ ) + return default_value_->asUInt(); + else + return 0u; + } +} + +#if defined(JSON_HAS_INT64) + +Value::Int64 Value::asInt64() const { + switch (type_) { + case intValue: + return Int64(value_.int_); + case uintValue: + JSON_ASSERT_MESSAGE(isInt64(), "LargestUInt out of Int64 range"); + return Int64(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt64, maxInt64), + "double out of Int64 range"); + return Int64(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + if ( default_value_ ) + return default_value_->asInt64(); + else + return 0l; + } +} + +Value::UInt64 Value::asUInt64() const { + switch (type_) { + case intValue: + JSON_ASSERT_MESSAGE(isUInt64(), "LargestInt out of UInt64 range"); + return UInt64(value_.int_); + case uintValue: + return UInt64(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt64), + "double out of UInt64 range"); + return UInt64(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + if ( default_value_ ) + return default_value_->asUInt64(); + else + return 0ul; + } +} +#endif // if defined(JSON_HAS_INT64) + +LargestInt Value::asLargestInt() const { +#if defined(JSON_NO_INT64) + return asInt(); +#else + return asInt64(); +#endif +} + +LargestUInt Value::asLargestUInt() const { +#if defined(JSON_NO_INT64) + return asUInt(); +#else + return asUInt64(); +#endif +} + +double Value::asDouble() const { + switch (type_) { + case intValue: + return static_cast(value_.int_); + case uintValue: +#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return static_cast(value_.uint_); +#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return integerToDouble(value_.uint_); +#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + case realValue: + return value_.real_; + case nullValue: + return 0.0; + case booleanValue: + return value_.bool_ ? 1.0 : 0.0; + default: + if ( default_value_ ) + return default_value_->asDouble(); + else + return 0.0; + } +} + +float Value::asFloat() const { + switch (type_) { + case intValue: + return static_cast(value_.int_); + case uintValue: +#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return static_cast(value_.uint_); +#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return integerToDouble(value_.uint_); +#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + case realValue: + return static_cast(value_.real_); + case nullValue: + return 0.0; + case booleanValue: + return value_.bool_ ? 1.0f : 0.0f; + default: + if ( default_value_ ) + return default_value_->asFloat(); + else + return 0.0f; + } +} + +bool Value::asBool() const { + switch (type_) { + case booleanValue: + return value_.bool_; + case nullValue: + return false; + case intValue: + return value_.int_ ? true : false; + case uintValue: + return value_.uint_ ? true : false; + case realValue: + // This is kind of strange. Not recommended. + return (value_.real_ != 0.0) ? true : false; + default: + if ( default_value_ ) + return default_value_->asBool(); + else + return false; + } +} + +bool Value::isConvertibleTo(ValueType other) const { + switch (other) { + case nullValue: + return (isNumeric() && asDouble() == 0.0) || + (type_ == booleanValue && value_.bool_ == false) || + (type_ == stringValue && asString() == "") || + (type_ == arrayValue && value_.map_->size() == 0) || + (type_ == objectValue && value_.map_->size() == 0) || + type_ == nullValue; + case intValue: + return isInt() || + (type_ == realValue && InRange(value_.real_, minInt, maxInt)) || + type_ == booleanValue || type_ == nullValue; + case uintValue: + return isUInt() || + (type_ == realValue && InRange(value_.real_, 0, maxUInt)) || + type_ == booleanValue || type_ == nullValue; + case realValue: + return isNumeric() || type_ == booleanValue || type_ == nullValue; + case booleanValue: + return isNumeric() || type_ == booleanValue || type_ == nullValue; + case stringValue: + return isNumeric() || type_ == booleanValue || type_ == stringValue || + type_ == nullValue; + case arrayValue: + return type_ == arrayValue || type_ == nullValue; + case objectValue: + return type_ == objectValue || type_ == nullValue; + } + JSON_ASSERT_UNREACHABLE; + return false; +} + +/// Number of values in array or object +ArrayIndex Value::size() const { + switch (type_) { + case nullValue: + case intValue: + case uintValue: + case realValue: + case booleanValue: + case stringValue: + return 0; + case arrayValue: // size of the array is highest index + 1 + if (!value_.map_->empty()) { + ObjectValues::const_iterator itLast = value_.map_->end(); + --itLast; + return (*itLast).first.index() + 1; + } + return 0; + case objectValue: + return ArrayIndex(value_.map_->size()); + } + JSON_ASSERT_UNREACHABLE; + return 0; // unreachable; +} + +bool Value::empty() const { + if (isNull() || isArray() || isObject()) + return size() == 0u; + else + return false; +} + +bool Value::operator!() const { return isNull(); } + +void Value::clear() { + JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue || + type_ == objectValue, + "in Json::Value::clear(): requires complex value"); + start_ = 0; + limit_ = 0; + delete default_value_; + default_value_ = nullptr; + switch (type_) { + case arrayValue: + case objectValue: + value_.map_->clear(); + break; + default: + break; + } +} + +void Value::resize(ArrayIndex newSize) { + JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue, + "in Json::Value::resize(): requires arrayValue"); + if (type_ == nullValue) + *this = Value(arrayValue); + ArrayIndex oldSize = size(); + if (newSize == 0) + clear(); + else if (newSize > oldSize) + (*this)[newSize - 1]; + else { + for (ArrayIndex index = newSize; index < oldSize; ++index) { + value_.map_->erase(index); + } + assert(size() == newSize); + } +} + +Value& Value::operator[](ArrayIndex index) { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == arrayValue, + "in Json::Value::operator[](ArrayIndex): requires arrayValue"); + if (type_ == nullValue) + *this = Value(arrayValue); + CZString key(index); + ObjectValues::iterator it = value_.map_->lower_bound(key); + if (it != value_.map_->end() && (*it).first == key) + return (*it).second; + + ObjectValues::value_type defaultValue(key, nullRef); + it = value_.map_->insert(it, defaultValue); + return (*it).second; +} + +Value& Value::operator[](int index) { + JSON_ASSERT_MESSAGE( + index >= 0, + "in Json::Value::operator[](int index): index cannot be negative"); + return (*this)[ArrayIndex(index)]; +} + +const Value& Value::operator[](ArrayIndex index) const { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == arrayValue, + "in Json::Value::operator[](ArrayIndex)const: requires arrayValue"); + if (type_ == nullValue) + return nullRef; + CZString key(index); + ObjectValues::const_iterator it = value_.map_->find(key); + if (it == value_.map_->end()) + return nullRef; + return (*it).second; +} + +const Value& Value::operator[](int index) const { + JSON_ASSERT_MESSAGE( + index >= 0, + "in Json::Value::operator[](int index) const: index cannot be negative"); + return (*this)[ArrayIndex(index)]; +} + +void Value::initBasic(ValueType vtype, bool allocated) { + type_ = vtype; + allocated_ = allocated; + comments_ = 0; + start_ = 0; + limit_ = 0; + default_value_ = nullptr; +} + +// Access an object value by name, create a null member if it does not exist. +// @pre Type of '*this' is object or null. +// @param key is null-terminated. +Value& Value::resolveReference(const char* key) { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::resolveReference(): requires objectValue"); + if (type_ == nullValue) + *this = Value(objectValue); + CZString actualKey( + key, static_cast(strlen(key)), CZString::noDuplication); // NOTE! + ObjectValues::iterator it = value_.map_->lower_bound(actualKey); + if (it != value_.map_->end() && (*it).first == actualKey) + return (*it).second; + + ObjectValues::value_type defaultValue(actualKey, nullRef); + it = value_.map_->insert(it, defaultValue); + Value& value = (*it).second; + return value; +} + +// @param key is not null-terminated. +Value& Value::resolveReference(char const* key, char const* cend) +{ + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::resolveReference(key, end): requires objectValue"); + if (type_ == nullValue) + *this = Value(objectValue); + CZString actualKey( + key, static_cast(cend-key), CZString::duplicateOnCopy); + ObjectValues::iterator it = value_.map_->lower_bound(actualKey); + if (it != value_.map_->end() && (*it).first == actualKey) + return (*it).second; + + ObjectValues::value_type defaultValue(actualKey, nullRef); + it = value_.map_->insert(it, defaultValue); + Value& value = (*it).second; + return value; +} + +Value Value::get(ArrayIndex index, const Value& defaultValue) const { + const Value* value = &((*this)[index]); + if ( value == &nullRef ) + { + return defaultValue; + } + else + { + Value result = *value; + result.default_value_ = new Value( defaultValue ); + return result; + } +} + +bool Value::isValidIndex(ArrayIndex index) const { return index < size(); } + +Value const* Value::find(char const* key, char const* cend) const +{ + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::find(key, end, found): requires objectValue or nullValue"); + if (type_ == nullValue) return NULL; + CZString actualKey(key, static_cast(cend-key), CZString::noDuplication); + ObjectValues::const_iterator it = value_.map_->find(actualKey); + if (it == value_.map_->end()) return NULL; + return &(*it).second; +} +const Value& Value::operator[](const char* key) const +{ + Value const* found = find(key, key + strlen(key)); + if (!found) return nullRef; + return *found; +} +Value const& Value::operator[](std::string const& key) const +{ + Value const* found = find(key.data(), key.data() + key.length()); + if (!found) return nullRef; + return *found; +} + +Value& Value::operator[](const char* key) { + return resolveReference(key, key + strlen(key)); +} + +Value& Value::operator[](const std::string& key) { + return resolveReference(key.data(), key.data() + key.length()); +} + +Value& Value::operator[](const StaticString& key) { + return resolveReference(key.c_str()); +} + +#ifdef JSON_USE_CPPTL +Value& Value::operator[](const CppTL::ConstString& key) { + return resolveReference(key.c_str(), key.end_c_str()); +} +Value const& Value::operator[](CppTL::ConstString const& key) const +{ + Value const* found = find(key.c_str(), key.end_c_str()); + if (!found) return nullRef; + return *found; +} +#endif + +Value& Value::append(const Value& value) { return (*this)[size()] = value; } + +Value Value::get(char const* key, char const* cend, Value const& defaultValue) const +{ + Value const* found = find(key, cend); + if ( !found ) + { + return defaultValue; + } + else + { + Value result = *found; + result.default_value_ = new Value( defaultValue ); + return result; + } +} +Value Value::get(char const* key, Value const& defaultValue) const +{ + return get(key, key + strlen(key), defaultValue); +} +Value Value::get(std::string const& key, Value const& defaultValue) const +{ + return get(key.data(), key.data() + key.length(), defaultValue); +} + + +bool Value::removeMember(const char* key, const char* cend, Value* removed) +{ + if (type_ != objectValue) { + return false; + } + CZString actualKey(key, static_cast(cend-key), CZString::noDuplication); + ObjectValues::iterator it = value_.map_->find(actualKey); + if (it == value_.map_->end()) + return false; + *removed = it->second; + value_.map_->erase(it); + return true; +} +bool Value::removeMember(const char* key, Value* removed) +{ + return removeMember(key, key + strlen(key), removed); +} +bool Value::removeMember(std::string const& key, Value* removed) +{ + return removeMember(key.data(), key.data() + key.length(), removed); +} +Value Value::removeMember(const char* key) +{ + JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue, + "in Json::Value::removeMember(): requires objectValue"); + if (type_ == nullValue) + return nullRef; + + Value removed; // null + removeMember(key, key + strlen(key), &removed); + return removed; // still null if removeMember() did nothing +} +Value Value::removeMember(const std::string& key) +{ + return removeMember(key.c_str()); +} + +bool Value::removeIndex(ArrayIndex index, Value* removed) { + if (type_ != arrayValue) { + return false; + } + CZString key(index); + ObjectValues::iterator it = value_.map_->find(key); + if (it == value_.map_->end()) { + return false; + } + *removed = it->second; + ArrayIndex oldSize = size(); + // shift left all items left, into the place of the "removed" + for (ArrayIndex i = index; i < (oldSize - 1); ++i){ + CZString keey(i); + (*value_.map_)[keey] = (*this)[i + 1]; + } + // erase the last one ("leftover") + CZString keyLast(oldSize - 1); + ObjectValues::iterator itLast = value_.map_->find(keyLast); + value_.map_->erase(itLast); + return true; +} + +#ifdef JSON_USE_CPPTL +Value Value::get(const CppTL::ConstString& key, + const Value& defaultValue) const { + return get(key.c_str(), key.end_c_str(), defaultValue); +} +#endif + +bool Value::isMember(char const* key, char const* cend) const +{ + Value const* value = find(key, cend); + return NULL != value; +} +bool Value::isMember(char const* key) const +{ + return isMember(key, key + strlen(key)); +} +bool Value::isMember(std::string const& key) const +{ + return isMember(key.data(), key.data() + key.length()); +} + +#ifdef JSON_USE_CPPTL +bool Value::isMember(const CppTL::ConstString& key) const { + return isMember(key.c_str(), key.end_c_str()); +} +#endif + +Value::Members Value::getMemberNames() const { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::getMemberNames(), value must be objectValue"); + if (type_ == nullValue) + return Value::Members(); + Members members; + members.reserve(value_.map_->size()); + ObjectValues::const_iterator it = value_.map_->begin(); + ObjectValues::const_iterator itEnd = value_.map_->end(); + for (; it != itEnd; ++it) { + members.push_back(std::string((*it).first.data(), + (*it).first.length())); + } + return members; +} +// +//# ifdef JSON_USE_CPPTL +// EnumMemberNames +// Value::enumMemberNames() const +//{ +// if ( type_ == objectValue ) +// { +// return CppTL::Enum::any( CppTL::Enum::transform( +// CppTL::Enum::keys( *(value_.map_), CppTL::Type() ), +// MemberNamesTransform() ) ); +// } +// return EnumMemberNames(); +//} +// +// +// EnumValues +// Value::enumValues() const +//{ +// if ( type_ == objectValue || type_ == arrayValue ) +// return CppTL::Enum::anyValues( *(value_.map_), +// CppTL::Type() ); +// return EnumValues(); +//} +// +//# endif + +static bool IsIntegral(double d) { + double integral_part; + return modf(d, &integral_part) == 0.0; +} + +bool Value::isNull() const { return type_ == nullValue; } + +bool Value::isBool() const { return type_ == booleanValue; } + +bool Value::isInt() const { + switch (type_) { + case intValue: + return value_.int_ >= minInt && value_.int_ <= maxInt; + case uintValue: + return value_.uint_ <= UInt(maxInt); + case realValue: + return value_.real_ >= minInt && value_.real_ <= maxInt && + IsIntegral(value_.real_); + default: + break; + } + return false; +} + +bool Value::isUInt() const { + switch (type_) { + case intValue: + return value_.int_ >= 0 && LargestUInt(value_.int_) <= LargestUInt(maxUInt); + case uintValue: + return value_.uint_ <= maxUInt; + case realValue: + return value_.real_ >= 0 && value_.real_ <= maxUInt && + IsIntegral(value_.real_); + default: + break; + } + return false; +} + +bool Value::isInt64() const { +#if defined(JSON_HAS_INT64) + switch (type_) { + case intValue: + return true; + case uintValue: + return value_.uint_ <= UInt64(maxInt64); + case realValue: + // Note that maxInt64 (= 2^63 - 1) is not exactly representable as a + // double, so double(maxInt64) will be rounded up to 2^63. Therefore we + // require the value to be strictly less than the limit. + return value_.real_ >= double(minInt64) && + value_.real_ < double(maxInt64) && IsIntegral(value_.real_); + default: + break; + } +#endif // JSON_HAS_INT64 + return false; +} + +bool Value::isUInt64() const { +#if defined(JSON_HAS_INT64) + switch (type_) { + case intValue: + return value_.int_ >= 0; + case uintValue: + return true; + case realValue: + // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a + // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we + // require the value to be strictly less than the limit. + return value_.real_ >= 0 && value_.real_ < maxUInt64AsDouble && + IsIntegral(value_.real_); + default: + break; + } +#endif // JSON_HAS_INT64 + return false; +} + +bool Value::isIntegral() const { +#if defined(JSON_HAS_INT64) + return isInt64() || isUInt64(); +#else + return isInt() || isUInt(); +#endif +} + +bool Value::isDouble() const { return type_ == realValue || isIntegral(); } + +bool Value::isNumeric() const { return isIntegral() || isDouble(); } + +bool Value::isString() const { return type_ == stringValue; } + +bool Value::isArray() const { return type_ == arrayValue; } + +bool Value::isObject() const { return type_ == objectValue; } + +void Value::setComment(const char* comment, size_t len, CommentPlacement placement) { + if (!comments_) + comments_ = new CommentInfo[numberOfCommentPlacement]; + if ((len > 0) && (comment[len-1] == '\n')) { + // Always discard trailing newline, to aid indentation. + len -= 1; + } + comments_[placement].setComment(comment, len); +} + +void Value::setComment(const char* comment, CommentPlacement placement) { + setComment(comment, strlen(comment), placement); +} + +void Value::setComment(const std::string& comment, CommentPlacement placement) { + setComment(comment.c_str(), comment.length(), placement); +} + +bool Value::hasComment(CommentPlacement placement) const { + return comments_ != 0 && comments_[placement].comment_ != 0; +} + +std::string Value::getComment(CommentPlacement placement) const { + if (hasComment(placement)) + return comments_[placement].comment_; + return ""; +} + +void Value::setOffsetStart(size_t start) { start_ = start; } + +void Value::setOffsetLimit(size_t limit) { limit_ = limit; } + +size_t Value::getOffsetStart() const { return start_; } + +size_t Value::getOffsetLimit() const { return limit_; } + +std::string Value::toStyledString() const { + StyledWriter writer; + return writer.write(*this); +} + +Value::const_iterator Value::begin() const { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return const_iterator(value_.map_->begin()); + break; + default: + break; + } + return const_iterator(); +} + +Value::const_iterator Value::end() const { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return const_iterator(value_.map_->end()); + break; + default: + break; + } + return const_iterator(); +} + +Value::iterator Value::begin() { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return iterator(value_.map_->begin()); + break; + default: + break; + } + return iterator(); +} + +Value::iterator Value::end() { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return iterator(value_.map_->end()); + break; + default: + break; + } + return iterator(); +} + +// class PathArgument +// ////////////////////////////////////////////////////////////////// + +PathArgument::PathArgument() : key_(), index_(), kind_(kindNone) {} + +PathArgument::PathArgument(ArrayIndex index) + : key_(), index_(index), kind_(kindIndex) {} + +PathArgument::PathArgument(const char* key) + : key_(key), index_(), kind_(kindKey) {} + +PathArgument::PathArgument(const std::string& key) + : key_(key.c_str()), index_(), kind_(kindKey) {} + +// class Path +// ////////////////////////////////////////////////////////////////// + +Path::Path(const std::string& path, + const PathArgument& a1, + const PathArgument& a2, + const PathArgument& a3, + const PathArgument& a4, + const PathArgument& a5) { + InArgs in; + in.push_back(&a1); + in.push_back(&a2); + in.push_back(&a3); + in.push_back(&a4); + in.push_back(&a5); + makePath(path, in); +} + +void Path::makePath(const std::string& path, const InArgs& in) { + const char* current = path.c_str(); + const char* end = current + path.length(); + InArgs::const_iterator itInArg = in.begin(); + while (current != end) { + if (*current == '[') { + ++current; + if (*current == '%') + addPathInArg(path, in, itInArg, PathArgument::kindIndex); + else { + ArrayIndex index = 0; + for (; current != end && *current >= '0' && *current <= '9'; ++current) + index = index * 10 + ArrayIndex(*current - '0'); + args_.push_back(index); + } + if (current == end || *current++ != ']') + invalidPath(path, int(current - path.c_str())); + } else if (*current == '%') { + addPathInArg(path, in, itInArg, PathArgument::kindKey); + ++current; + } else if (*current == '.') { + ++current; + } else { + const char* beginName = current; + while (current != end && !strchr("[.", *current)) + ++current; + args_.push_back(std::string(beginName, current)); + } + } +} + +void Path::addPathInArg(const std::string& /*path*/, + const InArgs& in, + InArgs::const_iterator& itInArg, + PathArgument::Kind kind) { + if (itInArg == in.end()) { + // Error: missing argument %d + } else if ((*itInArg)->kind_ != kind) { + // Error: bad argument type + } else { + args_.push_back(**itInArg); + } +} + +void Path::invalidPath(const std::string& /*path*/, int /*location*/) { + // Error: invalid path. +} + +const Value& Path::resolve(const Value& root) const { + const Value* node = &root; + for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { + const PathArgument& arg = *it; + if (arg.kind_ == PathArgument::kindIndex) { + if (!node->isArray() || !node->isValidIndex(arg.index_)) { + // Error: unable to resolve path (array value expected at position... + } + node = &((*node)[arg.index_]); + } else if (arg.kind_ == PathArgument::kindKey) { + if (!node->isObject()) { + // Error: unable to resolve path (object value expected at position...) + } + node = &((*node)[arg.key_]); + if (node == &Value::nullRef) { + // Error: unable to resolve path (object has no member named '' at + // position...) + } + } + } + return *node; +} + +Value Path::resolve(const Value& root, const Value& defaultValue) const { + const Value* node = &root; + for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { + const PathArgument& arg = *it; + if (arg.kind_ == PathArgument::kindIndex) { + if (!node->isArray() || !node->isValidIndex(arg.index_)) + return defaultValue; + node = &((*node)[arg.index_]); + } else if (arg.kind_ == PathArgument::kindKey) { + if (!node->isObject()) + return defaultValue; + node = &((*node)[arg.key_]); + if (node == &Value::nullRef) + return defaultValue; + } + } + return *node; +} + +Value& Path::make(Value& root) const { + Value* node = &root; + for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { + const PathArgument& arg = *it; + if (arg.kind_ == PathArgument::kindIndex) { + if (!node->isArray()) { + // Error: node is not an array at position ... + } + node = &((*node)[arg.index_]); + } else if (arg.kind_ == PathArgument::kindKey) { + if (!node->isObject()) { + // Error: node is not an object at position... + } + node = &((*node)[arg.key_]); + } + } + return *node; +} + +} // namespace Json + +#pragma warning (pop) + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_value.cpp +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_writer.cpp +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2011 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#if !defined(JSON_IS_AMALGAMATION) +#include +#include "json_tool.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(_MSC_VER) && _MSC_VER >= 1200 && _MSC_VER < 1800 // Between VC++ 6.0 and VC++ 11.0 +#include +#define isfinite _finite +#elif defined(__sun) && defined(__SVR4) //Solaris +#if !defined(isfinite) +#include +#define isfinite finite +#endif +#elif defined(_AIX) +#if !defined(isfinite) +#include +#define isfinite finite +#endif +#elif defined(__hpux) +#if !defined(isfinite) +#if defined(__ia64) && !defined(finite) +#define isfinite(x) ((sizeof(x) == sizeof(float) ? \ + _Isfinitef(x) : _IsFinite(x))) +#else +#include +#define isfinite finite +#endif +#endif +#else +#include +#if !(defined(__QNXNTO__)) // QNX already defines isfinite +#define isfinite std::isfinite +#endif +#endif + +#if defined(_MSC_VER) +#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above +#define snprintf sprintf_s +#elif _MSC_VER >= 1900 // VC++ 14.0 and above +#define snprintf std::snprintf +#else +#define snprintf _snprintf +#endif +#elif defined(__ANDROID__) || defined(__QNXNTO__) +#define snprintf snprintf +#elif __cplusplus >= 201103L +#define snprintf std::snprintf +#endif + +#if defined(__BORLANDC__) +#include +#define isfinite _finite +#define snprintf _snprintf +#endif + +#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0 +// Disable warning about strdup being deprecated. +#pragma warning(disable : 4996) +#endif + +namespace Json { + +#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520) +typedef std::unique_ptr StreamWriterPtr; +#else +typedef std::auto_ptr StreamWriterPtr; +#endif + +static bool containsControlCharacter(const char* str) { + while (*str) { + if (isControlCharacter(*(str++))) + return true; + } + return false; +} + +static bool containsControlCharacter0(const char* str, unsigned len) { + char const* end = str + len; + while (end != str) { + if (isControlCharacter(*str) || 0==*str) + return true; + ++str; + } + return false; +} + +std::string valueToString(LargestInt value) { + UIntToStringBuffer buffer; + char* current = buffer + sizeof(buffer); + if (value == Value::minLargestInt) { + uintToString(LargestUInt(Value::maxLargestInt) + 1, current); + *--current = '-'; + } else if (value < 0) { + uintToString(LargestUInt(-value), current); + *--current = '-'; + } else { + uintToString(LargestUInt(value), current); + } + assert(current >= buffer); + return current; +} + +std::string valueToString(LargestUInt value) { + UIntToStringBuffer buffer; + char* current = buffer + sizeof(buffer); + uintToString(value, current); + assert(current >= buffer); + return current; +} + +#if defined(JSON_HAS_INT64) + +std::string valueToString(Int value) { + return valueToString(LargestInt(value)); +} + +std::string valueToString(UInt value) { + return valueToString(LargestUInt(value)); +} + +#endif // # if defined(JSON_HAS_INT64) + +std::string valueToString(double value, bool useSpecialFloats, unsigned int precision) { + // Allocate a buffer that is more than large enough to store the 16 digits of + // precision requested below. + char buffer[32]; + int len = -1; + + char formatString[6]; + sprintf(formatString, "%%.%dg", precision); + + // Print into the buffer. We need not request the alternative representation + // that always has a decimal point because JSON doesn't distingish the + // concepts of reals and integers. + if (isfinite(value)) { + len = snprintf(buffer, sizeof(buffer), formatString, value); + } else { + // IEEE standard states that NaN values will not compare to themselves + if (value != value) { + len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "NaN" : "null"); + } else if (value < 0) { + len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "-Infinity" : "-1e+9999"); + } else { + len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "Infinity" : "1e+9999"); + } + // For those, we do not need to call fixNumLoc, but it is fast. + } + assert(len >= 0); + fixNumericLocale(buffer, buffer + len); + return buffer; +} + +std::string valueToString(double value) { return valueToString(value, false, 17); } + +std::string valueToString(bool value) { return value ? "true" : "false"; } + +std::string valueToQuotedString(const char* value) { + if (value == NULL) + return ""; + // Not sure how to handle unicode... + if (strpbrk(value, "\"\\\b\f\n\r\t") == NULL && + !containsControlCharacter(value)) + return std::string("\"") + value + "\""; + // We have to walk value and escape any special characters. + // Appending to std::string is not efficient, but this should be rare. + // (Note: forward slashes are *not* rare, but I am not escaping them.) + std::string::size_type maxsize = + strlen(value) * 2 + 3; // allescaped+quotes+NULL + std::string result; + result.reserve(maxsize); // to avoid lots of mallocs + result += "\""; + for (const char* c = value; *c != 0; ++c) { + switch (*c) { + case '\"': + result += "\\\""; + break; + case '\\': + result += "\\\\"; + break; + case '\b': + result += "\\b"; + break; + case '\f': + result += "\\f"; + break; + case '\n': + result += "\\n"; + break; + case '\r': + result += "\\r"; + break; + case '\t': + result += "\\t"; + break; + // case '/': + // Even though \/ is considered a legal escape in JSON, a bare + // slash is also legal, so I see no reason to escape it. + // (I hope I am not misunderstanding something. + // blep notes: actually escaping \/ may be useful in javascript to avoid (*c); + result += oss.str(); + } else { + result += *c; + } + break; + } + } + result += "\""; + return result; +} + +// https://github.com/upcaste/upcaste/blob/master/src/upcore/src/cstring/strnpbrk.cpp +static char const* strnpbrk(char const* s, char const* accept, size_t n) { + assert((s || !n) && accept); + + char const* const end = s + n; + for (char const* cur = s; cur < end; ++cur) { + int const c = *cur; + for (char const* a = accept; *a; ++a) { + if (*a == c) { + return cur; + } + } + } + return NULL; +} +static std::string valueToQuotedStringN(const char* value, unsigned length) { + if (value == NULL) + return ""; + // Not sure how to handle unicode... + if (strnpbrk(value, "\"\\\b\f\n\r\t", length) == NULL && + !containsControlCharacter0(value, length)) + return std::string("\"") + value + "\""; + // We have to walk value and escape any special characters. + // Appending to std::string is not efficient, but this should be rare. + // (Note: forward slashes are *not* rare, but I am not escaping them.) + std::string::size_type maxsize = + length * 2 + 3; // allescaped+quotes+NULL + std::string result; + result.reserve(maxsize); // to avoid lots of mallocs + result += "\""; + char const* end = value + length; + for (const char* c = value; c != end; ++c) { + switch (*c) { + case '\"': + result += "\\\""; + break; + case '\\': + result += "\\\\"; + break; + case '\b': + result += "\\b"; + break; + case '\f': + result += "\\f"; + break; + case '\n': + result += "\\n"; + break; + case '\r': + result += "\\r"; + break; + case '\t': + result += "\\t"; + break; + // case '/': + // Even though \/ is considered a legal escape in JSON, a bare + // slash is also legal, so I see no reason to escape it. + // (I hope I am not misunderstanding something.) + // blep notes: actually escaping \/ may be useful in javascript to avoid (*c); + result += oss.str(); + } else { + result += *c; + } + break; + } + } + result += "\""; + return result; +} + +// Class Writer +// ////////////////////////////////////////////////////////////////// +Writer::~Writer() {} + +// Class FastWriter +// ////////////////////////////////////////////////////////////////// + +FastWriter::FastWriter() + : yamlCompatiblityEnabled_(false), dropNullPlaceholders_(false), + omitEndingLineFeed_(false) {} + +void FastWriter::enableYAMLCompatibility() { yamlCompatiblityEnabled_ = true; } + +void FastWriter::dropNullPlaceholders() { dropNullPlaceholders_ = true; } + +void FastWriter::omitEndingLineFeed() { omitEndingLineFeed_ = true; } + +std::string FastWriter::write(const Value& root) { + document_ = ""; + writeValue(root); + if (!omitEndingLineFeed_) + document_ += "\n"; + return document_; +} + +void FastWriter::writeValue(const Value& value) { + switch (value.type()) { + case nullValue: + if (!dropNullPlaceholders_) + document_ += "null"; + break; + case intValue: + document_ += valueToString(value.asLargestInt()); + break; + case uintValue: + document_ += valueToString(value.asLargestUInt()); + break; + case realValue: + document_ += valueToString(value.asDouble()); + break; + case stringValue: + { + // Is NULL possible for value.string_? + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) document_ += valueToQuotedStringN(str, static_cast(end-str)); + break; + } + case booleanValue: + document_ += valueToString(value.asBool()); + break; + case arrayValue: { + document_ += '['; + int size = value.size(); + for (int index = 0; index < size; ++index) { + if (index > 0) + document_ += ','; + writeValue(value[index]); + } + document_ += ']'; + } break; + case objectValue: { + Value::Members members(value.getMemberNames()); + document_ += '{'; + for (Value::Members::iterator it = members.begin(); it != members.end(); + ++it) { + const std::string& name = *it; + if (it != members.begin()) + document_ += ','; + document_ += valueToQuotedStringN(name.data(), static_cast(name.length())); + document_ += yamlCompatiblityEnabled_ ? ": " : ":"; + writeValue(value[name]); + } + document_ += '}'; + } break; + } +} + +// Class StyledWriter +// ////////////////////////////////////////////////////////////////// + +StyledWriter::StyledWriter() + : rightMargin_(74), indentSize_(3), addChildValues_() {} + +std::string StyledWriter::write(const Value& root) { + document_ = ""; + addChildValues_ = false; + indentString_ = ""; + writeCommentBeforeValue(root); + writeValue(root); + writeCommentAfterValueOnSameLine(root); + document_ += "\n"; + return document_; +} + +void StyledWriter::writeValue(const Value& value) { + switch (value.type()) { + case nullValue: + pushValue("null"); + break; + case intValue: + pushValue(valueToString(value.asLargestInt())); + break; + case uintValue: + pushValue(valueToString(value.asLargestUInt())); + break; + case realValue: + pushValue(valueToString(value.asDouble())); + break; + case stringValue: + { + // Is NULL possible for value.string_? + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) pushValue(valueToQuotedStringN(str, static_cast(end-str))); + else pushValue(""); + break; + } + case booleanValue: + pushValue(valueToString(value.asBool())); + break; + case arrayValue: + writeArrayValue(value); + break; + case objectValue: { + Value::Members members(value.getMemberNames()); + if (members.empty()) + pushValue("{}"); + else { + writeWithIndent("{"); + indent(); + Value::Members::iterator it = members.begin(); + for (;;) { + const std::string& name = *it; + const Value& childValue = value[name]; + writeCommentBeforeValue(childValue); + writeWithIndent(valueToQuotedString(name.c_str())); + document_ += " : "; + writeValue(childValue); + if (++it == members.end()) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + document_ += ','; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("}"); + } + } break; + } +} + +void StyledWriter::writeArrayValue(const Value& value) { + unsigned size = value.size(); + if (size == 0) + pushValue("[]"); + else { + bool isArrayMultiLine = isMultineArray(value); + if (isArrayMultiLine) { + writeWithIndent("["); + indent(); + bool hasChildValue = !childValues_.empty(); + unsigned index = 0; + for (;;) { + const Value& childValue = value[index]; + writeCommentBeforeValue(childValue); + if (hasChildValue) + writeWithIndent(childValues_[index]); + else { + writeIndent(); + writeValue(childValue); + } + if (++index == size) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + document_ += ','; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("]"); + } else // output on a single line + { + assert(childValues_.size() == size); + document_ += "[ "; + for (unsigned index = 0; index < size; ++index) { + if (index > 0) + document_ += ", "; + document_ += childValues_[index]; + } + document_ += " ]"; + } + } +} + +bool StyledWriter::isMultineArray(const Value& value) { + int size = value.size(); + bool isMultiLine = size * 3 >= rightMargin_; + childValues_.clear(); + for (int index = 0; index < size && !isMultiLine; ++index) { + const Value& childValue = value[index]; + isMultiLine = ((childValue.isArray() || childValue.isObject()) && + childValue.size() > 0); + } + if (!isMultiLine) // check if line length > max line length + { + childValues_.reserve(size); + addChildValues_ = true; + int lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' + for (int index = 0; index < size; ++index) { + if (hasCommentForValue(value[index])) { + isMultiLine = true; + } + writeValue(value[index]); + lineLength += int(childValues_[index].length()); + } + addChildValues_ = false; + isMultiLine = isMultiLine || lineLength >= rightMargin_; + } + return isMultiLine; +} + +void StyledWriter::pushValue(const std::string& value) { + if (addChildValues_) + childValues_.push_back(value); + else + document_ += value; +} + +void StyledWriter::writeIndent() { + if (!document_.empty()) { + char last = document_[document_.length() - 1]; + if (last == ' ') // already indented + return; + if (last != '\n') // Comments may add new-line + document_ += '\n'; + } + document_ += indentString_; +} + +void StyledWriter::writeWithIndent(const std::string& value) { + writeIndent(); + document_ += value; +} + +void StyledWriter::indent() { indentString_ += std::string(indentSize_, ' '); } + +void StyledWriter::unindent() { + assert(int(indentString_.size()) >= indentSize_); + indentString_.resize(indentString_.size() - indentSize_); +} + +void StyledWriter::writeCommentBeforeValue(const Value& root) { + if (!root.hasComment(commentBefore)) + return; + + document_ += "\n"; + writeIndent(); + const std::string& comment = root.getComment(commentBefore); + std::string::const_iterator iter = comment.begin(); + while (iter != comment.end()) { + document_ += *iter; + if (*iter == '\n' && + (iter != comment.end() && *(iter + 1) == '/')) + writeIndent(); + ++iter; + } + + // Comments are stripped of trailing newlines, so add one here + document_ += "\n"; +} + +void StyledWriter::writeCommentAfterValueOnSameLine(const Value& root) { + if (root.hasComment(commentAfterOnSameLine)) + document_ += " " + root.getComment(commentAfterOnSameLine); + + if (root.hasComment(commentAfter)) { + document_ += "\n"; + document_ += root.getComment(commentAfter); + document_ += "\n"; + } +} + +bool StyledWriter::hasCommentForValue(const Value& value) { + return value.hasComment(commentBefore) || + value.hasComment(commentAfterOnSameLine) || + value.hasComment(commentAfter); +} + +// Class StyledStreamWriter +// ////////////////////////////////////////////////////////////////// + +StyledStreamWriter::StyledStreamWriter(std::string indentation) + : document_(NULL), rightMargin_(74), indentation_(indentation), + addChildValues_() {} + +void StyledStreamWriter::write(std::ostream& out, const Value& root) { + document_ = &out; + addChildValues_ = false; + indentString_ = ""; + indented_ = true; + writeCommentBeforeValue(root); + if (!indented_) writeIndent(); + indented_ = true; + writeValue(root); + writeCommentAfterValueOnSameLine(root); + *document_ << "\n"; + document_ = NULL; // Forget the stream, for safety. +} + +void StyledStreamWriter::writeValue(const Value& value) { + switch (value.type()) { + case nullValue: + pushValue("null"); + break; + case intValue: + pushValue(valueToString(value.asLargestInt())); + break; + case uintValue: + pushValue(valueToString(value.asLargestUInt())); + break; + case realValue: + pushValue(valueToString(value.asDouble())); + break; + case stringValue: + { + // Is NULL possible for value.string_? + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) pushValue(valueToQuotedStringN(str, static_cast(end-str))); + else pushValue(""); + break; + } + case booleanValue: + pushValue(valueToString(value.asBool())); + break; + case arrayValue: + writeArrayValue(value); + break; + case objectValue: { + Value::Members members(value.getMemberNames()); + if (members.empty()) + pushValue("{}"); + else { + writeWithIndent("{"); + indent(); + Value::Members::iterator it = members.begin(); + for (;;) { + const std::string& name = *it; + const Value& childValue = value[name]; + writeCommentBeforeValue(childValue); + writeWithIndent(valueToQuotedString(name.c_str())); + *document_ << " : "; + writeValue(childValue); + if (++it == members.end()) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *document_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("}"); + } + } break; + } +} + +void StyledStreamWriter::writeArrayValue(const Value& value) { + unsigned size = value.size(); + if (size == 0) + pushValue("[]"); + else { + bool isArrayMultiLine = isMultineArray(value); + if (isArrayMultiLine) { + writeWithIndent("["); + indent(); + bool hasChildValue = !childValues_.empty(); + unsigned index = 0; + for (;;) { + const Value& childValue = value[index]; + writeCommentBeforeValue(childValue); + if (hasChildValue) + writeWithIndent(childValues_[index]); + else { + if (!indented_) writeIndent(); + indented_ = true; + writeValue(childValue); + indented_ = false; + } + if (++index == size) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *document_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("]"); + } else // output on a single line + { + assert(childValues_.size() == size); + *document_ << "[ "; + for (unsigned index = 0; index < size; ++index) { + if (index > 0) + *document_ << ", "; + *document_ << childValues_[index]; + } + *document_ << " ]"; + } + } +} + +bool StyledStreamWriter::isMultineArray(const Value& value) { + int size = value.size(); + bool isMultiLine = size * 3 >= rightMargin_; + childValues_.clear(); + for (int index = 0; index < size && !isMultiLine; ++index) { + const Value& childValue = value[index]; + isMultiLine = ((childValue.isArray() || childValue.isObject()) && + childValue.size() > 0); + } + if (!isMultiLine) // check if line length > max line length + { + childValues_.reserve(size); + addChildValues_ = true; + int lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' + for (int index = 0; index < size; ++index) { + if (hasCommentForValue(value[index])) { + isMultiLine = true; + } + writeValue(value[index]); + lineLength += int(childValues_[index].length()); + } + addChildValues_ = false; + isMultiLine = isMultiLine || lineLength >= rightMargin_; + } + return isMultiLine; +} + +void StyledStreamWriter::pushValue(const std::string& value) { + if (addChildValues_) + childValues_.push_back(value); + else + *document_ << value; +} + +void StyledStreamWriter::writeIndent() { + // blep intended this to look at the so-far-written string + // to determine whether we are already indented, but + // with a stream we cannot do that. So we rely on some saved state. + // The caller checks indented_. + *document_ << '\n' << indentString_; +} + +void StyledStreamWriter::writeWithIndent(const std::string& value) { + if (!indented_) writeIndent(); + *document_ << value; + indented_ = false; +} + +void StyledStreamWriter::indent() { indentString_ += indentation_; } + +void StyledStreamWriter::unindent() { + assert(indentString_.size() >= indentation_.size()); + indentString_.resize(indentString_.size() - indentation_.size()); +} + +void StyledStreamWriter::writeCommentBeforeValue(const Value& root) { + if (!root.hasComment(commentBefore)) + return; + + if (!indented_) writeIndent(); + const std::string& comment = root.getComment(commentBefore); + std::string::const_iterator iter = comment.begin(); + while (iter != comment.end()) { + *document_ << *iter; + if (*iter == '\n' && + (iter != comment.end() && *(iter + 1) == '/')) + // writeIndent(); // would include newline + *document_ << indentString_; + ++iter; + } + indented_ = false; +} + +void StyledStreamWriter::writeCommentAfterValueOnSameLine(const Value& root) { + if (root.hasComment(commentAfterOnSameLine)) + *document_ << ' ' << root.getComment(commentAfterOnSameLine); + + if (root.hasComment(commentAfter)) { + writeIndent(); + *document_ << root.getComment(commentAfter); + } + indented_ = false; +} + +bool StyledStreamWriter::hasCommentForValue(const Value& value) { + return value.hasComment(commentBefore) || + value.hasComment(commentAfterOnSameLine) || + value.hasComment(commentAfter); +} + +////////////////////////// +// BuiltStyledStreamWriter + +/// Scoped enums are not available until C++11. +struct CommentStyle { + /// Decide whether to write comments. + enum Enum { + None, ///< Drop all comments. + Most, ///< Recover odd behavior of previous versions (not implemented yet). + All ///< Keep all comments. + }; +}; + +struct BuiltStyledStreamWriter : public StreamWriter +{ + BuiltStyledStreamWriter( + std::string const& indentation, + CommentStyle::Enum cs, + std::string const& colonSymbol, + std::string const& nullSymbol, + std::string const& endingLineFeedSymbol, + bool useSpecialFloats, + unsigned int precision); + int write(Value const& root, std::ostream* sout); +private: + void writeValue(Value const& value); + void writeArrayValue(Value const& value); + bool isMultineArray(Value const& value); + void pushValue(std::string const& value); + void writeIndent(); + void writeWithIndent(std::string const& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(Value const& root); + void writeCommentAfterValueOnSameLine(Value const& root); + static bool hasCommentForValue(const Value& value); + + typedef std::vector ChildValues; + + ChildValues childValues_; + std::string indentString_; + int rightMargin_; + std::string indentation_; + CommentStyle::Enum cs_; + std::string colonSymbol_; + std::string nullSymbol_; + std::string endingLineFeedSymbol_; + bool addChildValues_ : 1; + bool indented_ : 1; + bool useSpecialFloats_ : 1; + unsigned int precision_; +}; +BuiltStyledStreamWriter::BuiltStyledStreamWriter( + std::string const& indentation, + CommentStyle::Enum cs, + std::string const& colonSymbol, + std::string const& nullSymbol, + std::string const& endingLineFeedSymbol, + bool useSpecialFloats, + unsigned int precision) + : rightMargin_(74) + , indentation_(indentation) + , cs_(cs) + , colonSymbol_(colonSymbol) + , nullSymbol_(nullSymbol) + , endingLineFeedSymbol_(endingLineFeedSymbol) + , addChildValues_(false) + , indented_(false) + , useSpecialFloats_(useSpecialFloats) + , precision_(precision) +{ +} +int BuiltStyledStreamWriter::write(Value const& root, std::ostream* sout) +{ + sout_ = sout; + addChildValues_ = false; + indented_ = true; + indentString_ = ""; + writeCommentBeforeValue(root); + if (!indented_) writeIndent(); + indented_ = true; + writeValue(root); + writeCommentAfterValueOnSameLine(root); + *sout_ << endingLineFeedSymbol_; + sout_ = NULL; + return 0; +} +void BuiltStyledStreamWriter::writeValue(Value const& value) { + switch (value.type()) { + case nullValue: + pushValue(nullSymbol_); + break; + case intValue: + pushValue(valueToString(value.asLargestInt())); + break; + case uintValue: + pushValue(valueToString(value.asLargestUInt())); + break; + case realValue: + pushValue(valueToString(value.asDouble(), useSpecialFloats_, precision_)); + break; + case stringValue: + { + // Is NULL is possible for value.string_? + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) pushValue(valueToQuotedStringN(str, static_cast(end-str))); + else pushValue(""); + break; + } + case booleanValue: + pushValue(valueToString(value.asBool())); + break; + case arrayValue: + writeArrayValue(value); + break; + case objectValue: { + Value::Members members(value.getMemberNames()); + if (members.empty()) + pushValue("{}"); + else { + writeWithIndent("{"); + indent(); + Value::Members::iterator it = members.begin(); + for (;;) { + std::string const& name = *it; + Value const& childValue = value[name]; + writeCommentBeforeValue(childValue); + writeWithIndent(valueToQuotedStringN(name.data(), static_cast(name.length()))); + *sout_ << colonSymbol_; + writeValue(childValue); + if (++it == members.end()) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *sout_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("}"); + } + } break; + } +} + +void BuiltStyledStreamWriter::writeArrayValue(Value const& value) { + unsigned size = value.size(); + if (size == 0) + pushValue("[]"); + else { + bool isMultiLine = (cs_ == CommentStyle::All) || isMultineArray(value); + if (isMultiLine) { + writeWithIndent("["); + indent(); + bool hasChildValue = !childValues_.empty(); + unsigned index = 0; + for (;;) { + Value const& childValue = value[index]; + writeCommentBeforeValue(childValue); + if (hasChildValue) + writeWithIndent(childValues_[index]); + else { + if (!indented_) writeIndent(); + indented_ = true; + writeValue(childValue); + indented_ = false; + } + if (++index == size) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *sout_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("]"); + } else // output on a single line + { + assert(childValues_.size() == size); + *sout_ << "["; + if (!indentation_.empty()) *sout_ << " "; + for (unsigned index = 0; index < size; ++index) { + if (index > 0) + *sout_ << ", "; + *sout_ << childValues_[index]; + } + if (!indentation_.empty()) *sout_ << " "; + *sout_ << "]"; + } + } +} + +bool BuiltStyledStreamWriter::isMultineArray(Value const& value) { + int size = value.size(); + bool isMultiLine = size * 3 >= rightMargin_; + childValues_.clear(); + for (int index = 0; index < size && !isMultiLine; ++index) { + Value const& childValue = value[index]; + isMultiLine = ((childValue.isArray() || childValue.isObject()) && + childValue.size() > 0); + } + if (!isMultiLine) // check if line length > max line length + { + childValues_.reserve(size); + addChildValues_ = true; + int lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' + for (int index = 0; index < size; ++index) { + if (hasCommentForValue(value[index])) { + isMultiLine = true; + } + writeValue(value[index]); + lineLength += int(childValues_[index].length()); + } + addChildValues_ = false; + isMultiLine = isMultiLine || lineLength >= rightMargin_; + } + return isMultiLine; +} + +void BuiltStyledStreamWriter::pushValue(std::string const& value) { + if (addChildValues_) + childValues_.push_back(value); + else + *sout_ << value; +} + +void BuiltStyledStreamWriter::writeIndent() { + // blep intended this to look at the so-far-written string + // to determine whether we are already indented, but + // with a stream we cannot do that. So we rely on some saved state. + // The caller checks indented_. + + if (!indentation_.empty()) { + // In this case, drop newlines too. + *sout_ << '\n' << indentString_; + } +} + +void BuiltStyledStreamWriter::writeWithIndent(std::string const& value) { + if (!indented_) writeIndent(); + *sout_ << value; + indented_ = false; +} + +void BuiltStyledStreamWriter::indent() { indentString_ += indentation_; } + +void BuiltStyledStreamWriter::unindent() { + assert(indentString_.size() >= indentation_.size()); + indentString_.resize(indentString_.size() - indentation_.size()); +} + +void BuiltStyledStreamWriter::writeCommentBeforeValue(Value const& root) { + if (cs_ == CommentStyle::None) return; + if (!root.hasComment(commentBefore)) + return; + + if (!indented_) writeIndent(); + const std::string& comment = root.getComment(commentBefore); + std::string::const_iterator iter = comment.begin(); + while (iter != comment.end()) { + *sout_ << *iter; + if (*iter == '\n' && + (iter != comment.end() && *(iter + 1) == '/')) + // writeIndent(); // would write extra newline + *sout_ << indentString_; + ++iter; + } + indented_ = false; +} + +void BuiltStyledStreamWriter::writeCommentAfterValueOnSameLine(Value const& root) { + if (cs_ == CommentStyle::None) return; + if (root.hasComment(commentAfterOnSameLine)) + *sout_ << " " + root.getComment(commentAfterOnSameLine); + + if (root.hasComment(commentAfter)) { + writeIndent(); + *sout_ << root.getComment(commentAfter); + } +} + +// static +bool BuiltStyledStreamWriter::hasCommentForValue(const Value& value) { + return value.hasComment(commentBefore) || + value.hasComment(commentAfterOnSameLine) || + value.hasComment(commentAfter); +} + +/////////////// +// StreamWriter + +StreamWriter::StreamWriter() + : sout_(NULL) +{ +} +StreamWriter::~StreamWriter() +{ +} +StreamWriter::Factory::~Factory() +{} +StreamWriterBuilder::StreamWriterBuilder() +{ + setDefaults(&settings_); +} +StreamWriterBuilder::~StreamWriterBuilder() +{} +StreamWriter* StreamWriterBuilder::newStreamWriter() const +{ + std::string indentation = settings_["indentation"].asString(); + std::string cs_str = settings_["commentStyle"].asString(); + bool eyc = settings_["enableYAMLCompatibility"].asBool(); + bool dnp = settings_["dropNullPlaceholders"].asBool(); + bool usf = settings_["useSpecialFloats"].asBool(); + unsigned int pre = settings_["precision"].asUInt(); + CommentStyle::Enum cs = CommentStyle::All; + if (cs_str == "All") { + cs = CommentStyle::All; + } else if (cs_str == "None") { + cs = CommentStyle::None; + } else { + throwRuntimeError("commentStyle must be 'All' or 'None'"); + } + std::string colonSymbol = " : "; + if (eyc) { + colonSymbol = ": "; + } else if (indentation.empty()) { + colonSymbol = ":"; + } + std::string nullSymbol = "null"; + if (dnp) { + nullSymbol = ""; + } + if (pre > 17) pre = 17; + std::string endingLineFeedSymbol = ""; + return new BuiltStyledStreamWriter( + indentation, cs, + colonSymbol, nullSymbol, endingLineFeedSymbol, usf, pre); +} +static void getValidWriterKeys(std::set* valid_keys) +{ + valid_keys->clear(); + valid_keys->insert("indentation"); + valid_keys->insert("commentStyle"); + valid_keys->insert("enableYAMLCompatibility"); + valid_keys->insert("dropNullPlaceholders"); + valid_keys->insert("useSpecialFloats"); + valid_keys->insert("precision"); +} +bool StreamWriterBuilder::validate(Json::Value* invalid) const +{ + Json::Value my_invalid; + if (!invalid) invalid = &my_invalid; // so we do not need to test for NULL + Json::Value& inv = *invalid; + std::set valid_keys; + getValidWriterKeys(&valid_keys); + Value::Members keys = settings_.getMemberNames(); + size_t n = keys.size(); + for (size_t i = 0; i < n; ++i) { + std::string const& key = keys[i]; + if (valid_keys.find(key) == valid_keys.end()) { + inv[key] = settings_[key]; + } + } + return 0u == inv.size(); +} +Value& StreamWriterBuilder::operator[](std::string key) +{ + return settings_[key]; +} +// static +void StreamWriterBuilder::setDefaults(Json::Value* settings) +{ + //! [StreamWriterBuilderDefaults] + (*settings)["commentStyle"] = "All"; + (*settings)["indentation"] = "\t"; + (*settings)["enableYAMLCompatibility"] = false; + (*settings)["dropNullPlaceholders"] = false; + (*settings)["useSpecialFloats"] = false; + (*settings)["precision"] = 17; + //! [StreamWriterBuilderDefaults] +} + +std::string writeString(StreamWriter::Factory const& builder, Value const& root) { + std::ostringstream sout; + StreamWriterPtr const writer(builder.newStreamWriter()); + writer->write(root, &sout); + return sout.str(); +} + +std::ostream& operator<<(std::ostream& sout, Value const& root) { + StreamWriterBuilder builder; + StreamWriterPtr const writer(builder.newStreamWriter()); + writer->write(root, &sout); + return sout; +} + +} // namespace Json + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_writer.cpp +// ////////////////////////////////////////////////////////////////////// + + + + + diff --git a/contrib/openvr/src/openvr.pc.in b/contrib/openvr/src/openvr.pc.in new file mode 100755 index 0000000..3edba91 --- /dev/null +++ b/contrib/openvr/src/openvr.pc.in @@ -0,0 +1,11 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${prefix}/lib +includedir=${prefix}/include/openvr + +Name: openvr +Description: OpenVR is an API and runtime that allos access to VR hardware. +Version: @OPENVR_VERSION@ + +Libs: -L${libdir} -lopenvr_api -ldl +Cflags: -I${includedir} diff --git a/contrib/openvr/src/openvr_api_public.cpp b/contrib/openvr/src/openvr_api_public.cpp new file mode 100755 index 0000000..8143b1e --- /dev/null +++ b/contrib/openvr/src/openvr_api_public.cpp @@ -0,0 +1,356 @@ +//========= Copyright Valve Corporation ============// +#define VR_API_EXPORT 1 +#define VR_API_PUBLIC 1 +#include "openvr.h" +#include "ivrclientcore.h" +#include +#include +#include +#include "hmderrors_public.h" +#include +#include +#include + +using vr::EVRInitError; +using vr::IVRSystem; +using vr::IVRClientCore; +using vr::VRInitError_None; + +// figure out how to import from the VR API dll +#if defined(_WIN32) +#define DYNAMIC_LIB_EXT ".dll" +#define PROGRAM_EXT ".exe" + +#if !defined(OPENVR_BUILD_STATIC) +#define VR_EXPORT_INTERFACE extern "C" __declspec( dllexport ) +#else +#define VR_EXPORT_INTERFACE extern "C" +#endif + +#elif defined(__GNUC__) || defined(COMPILER_GCC) || defined(__APPLE__) + +#define VR_EXPORT_INTERFACE extern "C" __attribute__((visibility("default"))) + +#else +#error "Unsupported Platform." +#endif + +namespace vr +{ + +static void *g_pVRModule = NULL; +static IVRClientCore *g_pHmdSystem = NULL; +static std::recursive_mutex g_mutexSystem; + + +typedef void* (*VRClientCoreFactoryFn)(const char *pInterfaceName, int *pReturnCode); + +static uint32_t g_nVRToken = 0; + +uint32_t VR_GetInitToken() +{ + return g_nVRToken; +} + +EVRInitError VR_LoadHmdSystemInternal(); +void CleanupInternalInterfaces(); + + +uint32_t VR_InitInternal2( EVRInitError *peError, vr::EVRApplicationType eApplicationType, const char *pStartupInfo ) +{ + std::lock_guard lock( g_mutexSystem ); + + EVRInitError err = VR_LoadHmdSystemInternal(); + if ( err == vr::VRInitError_None ) + { + err = g_pHmdSystem->Init( eApplicationType, pStartupInfo ); + } + + if ( peError ) + *peError = err; + + if ( err != VRInitError_None ) + { + SharedLib_Unload( g_pVRModule ); + g_pHmdSystem = NULL; + g_pVRModule = NULL; + + return 0; + } + + return ++g_nVRToken; +} + +VR_INTERFACE uint32_t VR_CALLTYPE VR_InitInternal( EVRInitError *peError, EVRApplicationType eApplicationType ); + +uint32_t VR_InitInternal( EVRInitError *peError, vr::EVRApplicationType eApplicationType ) +{ + return VR_InitInternal2( peError, eApplicationType, nullptr ); +} + +void VR_ShutdownInternal() +{ + std::lock_guard lock( g_mutexSystem ); + +#if !defined( VR_API_PUBLIC ) + CleanupInternalInterfaces(); +#endif + + if ( g_pHmdSystem ) + { + g_pHmdSystem->Cleanup(); + g_pHmdSystem = NULL; + } + + if ( g_pVRModule ) + { + SharedLib_Unload( g_pVRModule ); + g_pVRModule = NULL; + } + + ++g_nVRToken; +} + +EVRInitError VR_LoadHmdSystemInternal() +{ + std::string sRuntimePath, sConfigPath, sLogPath; + + bool bReadPathRegistry = CVRPathRegistry_Public::GetPaths( &sRuntimePath, &sConfigPath, &sLogPath, NULL, NULL ); + if( !bReadPathRegistry ) + { + return vr::VRInitError_Init_PathRegistryNotFound; + } + + // figure out where we're going to look for vrclient.dll + // see if the specified path actually exists. + if( !Path_IsDirectory( sRuntimePath ) ) + { + return vr::VRInitError_Init_InstallationNotFound; + } + + // Because we don't have a way to select debug vs. release yet we'll just + // use debug if it's there +#if defined( LINUX64 ) || defined( LINUXARM64 ) + std::string sTestPath = Path_Join( sRuntimePath, "bin", PLATSUBDIR ); +#else + std::string sTestPath = Path_Join( sRuntimePath, "bin" ); +#endif + if( !Path_IsDirectory( sTestPath ) ) + { + return vr::VRInitError_Init_InstallationCorrupt; + } + +#if defined( WIN64 ) + std::string sDLLPath = Path_Join( sTestPath, "vrclient_x64" DYNAMIC_LIB_EXT ); +#else + std::string sDLLPath = Path_Join( sTestPath, "vrclient" DYNAMIC_LIB_EXT ); +#endif + + // only look in the override + void *pMod = SharedLib_Load( sDLLPath.c_str() ); + // nothing more to do if we can't load the DLL + if( !pMod ) + { + return vr::VRInitError_Init_VRClientDLLNotFound; + } + + VRClientCoreFactoryFn fnFactory = ( VRClientCoreFactoryFn )( SharedLib_GetFunction( pMod, "VRClientCoreFactory" ) ); + if( !fnFactory ) + { + SharedLib_Unload( pMod ); + return vr::VRInitError_Init_FactoryNotFound; + } + + int nReturnCode = 0; + g_pHmdSystem = static_cast< IVRClientCore * > ( fnFactory( vr::IVRClientCore_Version, &nReturnCode ) ); + if( !g_pHmdSystem ) + { + SharedLib_Unload( pMod ); + return vr::VRInitError_Init_InterfaceNotFound; + } + + g_pVRModule = pMod; + return VRInitError_None; +} + + +void *VR_GetGenericInterface(const char *pchInterfaceVersion, EVRInitError *peError) +{ + std::lock_guard lock( g_mutexSystem ); + + if (!g_pHmdSystem) + { + if (peError) + *peError = vr::VRInitError_Init_NotInitialized; + return NULL; + } + + return g_pHmdSystem->GetGenericInterface(pchInterfaceVersion, peError); +} + +bool VR_IsInterfaceVersionValid(const char *pchInterfaceVersion) +{ + std::lock_guard lock( g_mutexSystem ); + + if (!g_pHmdSystem) + { + return false; + } + + return g_pHmdSystem->IsInterfaceVersionValid(pchInterfaceVersion) == VRInitError_None; +} + +bool VR_IsHmdPresent() +{ + std::lock_guard lock( g_mutexSystem ); + + if( g_pHmdSystem ) + { + // if we're already initialized, just call through + return g_pHmdSystem->BIsHmdPresent(); + } + else + { + // otherwise we need to do a bit more work + EVRInitError err = VR_LoadHmdSystemInternal(); + if( err != VRInitError_None ) + return false; + + bool bHasHmd = g_pHmdSystem->BIsHmdPresent(); + + g_pHmdSystem = NULL; + SharedLib_Unload( g_pVRModule ); + g_pVRModule = NULL; + + return bHasHmd; + } +} + +/** Returns true if the OpenVR runtime is installed. */ +bool VR_IsRuntimeInstalled() +{ + std::lock_guard lock( g_mutexSystem ); + + if( g_pHmdSystem ) + { + // if we're already initialized, OpenVR is obviously installed + return true; + } + else + { + // otherwise we need to do a bit more work + std::string sRuntimePath, sConfigPath, sLogPath; + + bool bReadPathRegistry = CVRPathRegistry_Public::GetPaths( &sRuntimePath, &sConfigPath, &sLogPath, NULL, NULL ); + if( !bReadPathRegistry ) + { + return false; + } + + // figure out where we're going to look for vrclient.dll + // see if the specified path actually exists. + if( !Path_IsDirectory( sRuntimePath ) ) + { + return false; + } + + // the installation may be corrupt in some way, but it certainly looks installed + return true; + } +} + + +// ------------------------------------------------------------------------------- +// Purpose: This is the old Runtime Path interface that is no longer exported in the +// latest header. We still want to export it from the DLL, though, so updating +// to a new DLL doesn't break old compiled code. This version was not thread +// safe and could change the buffer pointer to by a previous result on a +// subsequent call +// ------------------------------------------------------------------------------- +VR_EXPORT_INTERFACE const char *VR_CALLTYPE VR_RuntimePath(); + +/** Returns where OpenVR runtime is installed. */ +const char *VR_RuntimePath() +{ + static char rchBuffer[1024]; + uint32_t unRequiredSize; + if ( VR_GetRuntimePath( rchBuffer, sizeof( rchBuffer ), &unRequiredSize ) && unRequiredSize < sizeof( rchBuffer ) ) + { + return rchBuffer; + } + else + { + return nullptr; + } +} + + +/** Returns where OpenVR runtime is installed. */ +bool VR_GetRuntimePath( char *pchPathBuffer, uint32_t unBufferSize, uint32_t *punRequiredBufferSize ) +{ + // otherwise we need to do a bit more work + std::string sRuntimePath; + + *punRequiredBufferSize = 0; + + bool bReadPathRegistry = CVRPathRegistry_Public::GetPaths( &sRuntimePath, nullptr, nullptr, nullptr, nullptr ); + if ( !bReadPathRegistry ) + { + return false; + } + + // figure out where we're going to look for vrclient.dll + // see if the specified path actually exists. + if ( !Path_IsDirectory( sRuntimePath ) ) + { + return false; + } + + *punRequiredBufferSize = (uint32_t)sRuntimePath.size() + 1; + if ( sRuntimePath.size() >= unBufferSize ) + { + *pchPathBuffer = '\0'; + } + else + { + strcpy_safe( pchPathBuffer, unBufferSize, sRuntimePath.c_str() ); + } + + return true; +} + + +/** Returns the symbol version of an HMD error. */ +const char *VR_GetVRInitErrorAsSymbol( EVRInitError error ) +{ + std::lock_guard lock( g_mutexSystem ); + + if( g_pHmdSystem ) + return g_pHmdSystem->GetIDForVRInitError( error ); + else + return GetIDForVRInitError( error ); +} + + +/** Returns the english string version of an HMD error. */ +const char *VR_GetVRInitErrorAsEnglishDescription( EVRInitError error ) +{ + std::lock_guard lock( g_mutexSystem ); + + if ( g_pHmdSystem ) + return g_pHmdSystem->GetEnglishStringForHmdError( error ); + else + return GetEnglishStringForHmdError( error ); +} + + +VR_INTERFACE const char *VR_CALLTYPE VR_GetStringForHmdError( vr::EVRInitError error ); + +/** Returns the english string version of an HMD error. */ +const char *VR_GetStringForHmdError( EVRInitError error ) +{ + return VR_GetVRInitErrorAsEnglishDescription( error ); +} + +} + diff --git a/contrib/openvr/src/vrcommon/dirtools_public.cpp b/contrib/openvr/src/vrcommon/dirtools_public.cpp new file mode 100755 index 0000000..a9ab8a4 --- /dev/null +++ b/contrib/openvr/src/vrcommon/dirtools_public.cpp @@ -0,0 +1,101 @@ +//========= Copyright Valve Corporation ============// +#include +#include +#include + +#include +#include + +#ifdef _WIN32 +#include "windows.h" +#else +#include +#include +#include +#include +#endif + +#if defined( OSX ) +#include +#endif + + +//----------------------------------------------------------------------------- +// Purpose: utility function to create dirs & subdirs +//----------------------------------------------------------------------------- +bool BCreateDirectoryRecursive( const char *pchPath ) +{ + // Does it already exist? + if ( Path_IsDirectory( pchPath ) ) + return true; + + // copy the path into something we can munge + int len = (int)strlen( pchPath ); + char *path = (char *)malloc( len + 1 ); + strcpy( path, pchPath ); + + // Walk backwards to first non-existing dir that we find + char *s = path + len - 1; + + const char slash = Path_GetSlash(); + while ( s > path ) + { + if ( *s == slash ) + { + *s = '\0'; + bool bExists = Path_IsDirectory( path ); + *s = slash; + + if ( bExists ) + { + ++s; + break; + } + } + --s; + } + + // and then move forwards from there + + while ( *s ) + { + if ( *s == slash ) + { + *s = '\0'; + BCreateDirectory( path ); + *s = slash; + } + s++; + } + + bool bRetVal = BCreateDirectory( path ); + free( path ); + return bRetVal; +} + + +//----------------------------------------------------------------------------- +// Purpose: Creates the directory, returning true if it is created, or if it already existed +//----------------------------------------------------------------------------- +bool BCreateDirectory( const char *pchPath ) +{ +#ifdef WIN32 + std::wstring wPath = UTF8to16( pchPath ); + if ( ::CreateDirectoryW( wPath.c_str(), NULL ) ) + return true; + + if ( ::GetLastError() == ERROR_ALREADY_EXISTS ) + return true; + + return false; +#else + int i = mkdir( pchPath, S_IRWXU | S_IRWXG | S_IRWXO ); + if ( i == 0 ) + return true; + if ( errno == EEXIST ) + return true; + + return false; +#endif +} + diff --git a/contrib/openvr/src/vrcommon/dirtools_public.h b/contrib/openvr/src/vrcommon/dirtools_public.h new file mode 100755 index 0000000..b048b41 --- /dev/null +++ b/contrib/openvr/src/vrcommon/dirtools_public.h @@ -0,0 +1,17 @@ +//========= Copyright Valve Corporation ============// +#pragma once + +#include +#include + + +#if !defined(_WIN32) +#include +#include +#endif + + +extern bool BCreateDirectoryRecursive( const char *pchPath ); +extern bool BCreateDirectory( const char *pchPath ); + + diff --git a/contrib/openvr/src/vrcommon/envvartools_public.cpp b/contrib/openvr/src/vrcommon/envvartools_public.cpp new file mode 100755 index 0000000..b8522e7 --- /dev/null +++ b/contrib/openvr/src/vrcommon/envvartools_public.cpp @@ -0,0 +1,88 @@ +//========= Copyright Valve Corporation ============// +#include +#include +#include +#include +#include + +#if defined(_WIN32) +#include + +#undef GetEnvironmentVariable +#undef SetEnvironmentVariable +#endif + + +std::string GetEnvironmentVariable( const char *pchVarName ) +{ +#if defined(_WIN32) + char rchValue[32767]; // max size for an env var on Windows + DWORD cChars = GetEnvironmentVariableA( pchVarName, rchValue, sizeof( rchValue ) ); + if( cChars == 0 ) + return ""; + else + return rchValue; +#elif defined(POSIX) + char *pchValue = getenv( pchVarName ); + if( pchValue ) + return pchValue; + else + return ""; +#else +#error "Unsupported Platform" +#endif +} + +bool GetEnvironmentVariableAsBool( const char *pchVarName, bool bDefault ) +{ + std::string sValue = GetEnvironmentVariable( pchVarName ); + + if ( sValue.empty() ) + { + return bDefault; + } + + sValue = StringToLower( sValue ); + std::string sYesValues[] = { "y", "yes", "true" }; + std::string sNoValues[] = { "n", "no", "false" }; + + for ( std::string &sMatch : sYesValues ) + { + if ( sMatch == sValue ) + { + return true; + } + } + + for ( std::string &sMatch : sNoValues ) + { + if ( sMatch == sValue ) + { + return false; + } + } + + if ( std::isdigit( sValue.at(0) ) ) + { + return atoi( sValue.c_str() ) != 0; + } + + fprintf( stderr, + "GetEnvironmentVariableAsBool(%s): Unable to parse value '%s', using default %d\n", + pchVarName, sValue.c_str(), bDefault ); + return bDefault; +} + +bool SetEnvironmentVariable( const char *pchVarName, const char *pchVarValue ) +{ +#if defined(_WIN32) + return 0 != SetEnvironmentVariableA( pchVarName, pchVarValue ); +#elif defined(POSIX) + if( pchVarValue == NULL ) + return 0 == unsetenv( pchVarName ); + else + return 0 == setenv( pchVarName, pchVarValue, 1 ); +#else +#error "Unsupported Platform" +#endif +} diff --git a/contrib/openvr/src/vrcommon/envvartools_public.h b/contrib/openvr/src/vrcommon/envvartools_public.h new file mode 100755 index 0000000..7cd4c20 --- /dev/null +++ b/contrib/openvr/src/vrcommon/envvartools_public.h @@ -0,0 +1,8 @@ +//========= Copyright Valve Corporation ============// +#pragma once + +#include + +std::string GetEnvironmentVariable( const char *pchVarName ); +bool GetEnvironmentVariableAsBool( const char *pchVarName, bool bDefault ); +bool SetEnvironmentVariable( const char *pchVarName, const char *pchVarValue ); diff --git a/contrib/openvr/src/vrcommon/hmderrors_public.cpp b/contrib/openvr/src/vrcommon/hmderrors_public.cpp new file mode 100755 index 0000000..6f44d3a --- /dev/null +++ b/contrib/openvr/src/vrcommon/hmderrors_public.cpp @@ -0,0 +1,338 @@ +//========= Copyright Valve Corporation ============// +#include "openvr.h" +#include "hmderrors_public.h" +#include +#include + +using namespace vr; + +#define RETURN_ENUM_AS_STRING(enumValue) case enumValue: return #enumValue; + + +const char *GetEnglishStringForHmdError( vr::EVRInitError eError ) +{ + switch( eError ) + { + case VRInitError_None: return "No Error (0)"; + + case VRInitError_Init_InstallationNotFound: return "Installation Not Found (100)"; + case VRInitError_Init_InstallationCorrupt: return "Installation Corrupt (101)"; + case VRInitError_Init_VRClientDLLNotFound: return "vrclient Shared Lib Not Found (102)"; + case VRInitError_Init_FileNotFound: return "File Not Found (103)"; + case VRInitError_Init_FactoryNotFound: return "Factory Function Not Found (104)"; + case VRInitError_Init_InterfaceNotFound: return "Interface Not Found (105)"; + case VRInitError_Init_InvalidInterface: return "Invalid Interface (106)"; + case VRInitError_Init_UserConfigDirectoryInvalid: return "User Config Directory Invalid (107)"; + case VRInitError_Init_HmdNotFound: return "Hmd Not Found (108)"; + case VRInitError_Init_NotInitialized: return "Not Initialized (109)"; + case VRInitError_Init_PathRegistryNotFound: return "Installation path could not be located (110)"; + case VRInitError_Init_NoConfigPath: return "Config path could not be located (111)"; + case VRInitError_Init_NoLogPath: return "Log path could not be located (112)"; + case VRInitError_Init_PathRegistryNotWritable: return "Unable to write path registry (113)"; + case VRInitError_Init_AppInfoInitFailed: return "App info manager init failed (114)"; + case VRInitError_Init_Retry: return "Internal Retry (115)"; + case VRInitError_Init_InitCanceledByUser: return "User Canceled Init (116)"; + case VRInitError_Init_AnotherAppLaunching: return "Another app was already launching (117)"; + case VRInitError_Init_SettingsInitFailed: return "Settings manager init failed (118)"; + case VRInitError_Init_ShuttingDown: return "VR system shutting down (119)"; + case VRInitError_Init_TooManyObjects: return "Too many tracked objects (120)"; + case VRInitError_Init_NoServerForBackgroundApp: return "Not starting vrserver for background app (121)"; + case VRInitError_Init_NotSupportedWithCompositor: return "The requested interface is incompatible with the compositor and the compositor is running (122)"; + case VRInitError_Init_NotAvailableToUtilityApps: return "This interface is not available to utility applications (123)"; + case VRInitError_Init_Internal: return "vrserver internal error (124)"; + case VRInitError_Init_HmdDriverIdIsNone: return "Hmd DriverId is invalid (125)"; + case VRInitError_Init_HmdNotFoundPresenceFailed: return "Hmd Not Found Presence Failed (126)"; + case VRInitError_Init_VRMonitorNotFound: return "VR Monitor Not Found (127)"; + case VRInitError_Init_VRMonitorStartupFailed: return "VR Monitor startup failed (128)"; + case VRInitError_Init_LowPowerWatchdogNotSupported: return "Low Power Watchdog Not Supported (129)"; + case VRInitError_Init_InvalidApplicationType: return "Invalid Application Type (130)"; + case VRInitError_Init_NotAvailableToWatchdogApps: return "Not available to watchdog apps (131)"; + case VRInitError_Init_WatchdogDisabledInSettings: return "Watchdog disabled in settings (132)"; + case VRInitError_Init_VRDashboardNotFound: return "VR Dashboard Not Found (133)"; + case VRInitError_Init_VRDashboardStartupFailed: return "VR Dashboard startup failed (134)"; + case VRInitError_Init_VRHomeNotFound: return "VR Home Not Found (135)"; + case VRInitError_Init_VRHomeStartupFailed: return "VR home startup failed (136)"; + case VRInitError_Init_RebootingBusy: return "Rebooting In Progress (137)"; + case VRInitError_Init_FirmwareUpdateBusy: return "Firmware Update In Progress (138)"; + case VRInitError_Init_FirmwareRecoveryBusy: return "Firmware Recovery In Progress (139)"; + case VRInitError_Init_USBServiceBusy: return "USB Service Busy (140)"; + + case VRInitError_Driver_Failed: return "Driver Failed (200)"; + case VRInitError_Driver_Unknown: return "Driver Not Known (201)"; + case VRInitError_Driver_HmdUnknown: return "HMD Not Known (202)"; + case VRInitError_Driver_NotLoaded: return "Driver Not Loaded (203)"; + case VRInitError_Driver_RuntimeOutOfDate: return "Driver runtime is out of date (204)"; + case VRInitError_Driver_HmdInUse: return "HMD already in use by another application (205)"; + case VRInitError_Driver_NotCalibrated: return "Device is not calibrated (206)"; + case VRInitError_Driver_CalibrationInvalid: return "Device Calibration is invalid (207)"; + case VRInitError_Driver_HmdDisplayNotFound: return "HMD detected over USB, but Monitor not found (208)"; + case VRInitError_Driver_TrackedDeviceInterfaceUnknown: return "Driver Tracked Device Interface unknown (209)"; + // case VRInitError_Driver_HmdDisplayNotFoundAfterFix: return "HMD detected over USB, but Monitor not found after attempt to fix (210)"; // taken out upon Ben's request: He thinks that there is no need to separate that error from 208 + case VRInitError_Driver_HmdDriverIdOutOfBounds: return "Hmd DriverId is our of bounds (211)"; + case VRInitError_Driver_HmdDisplayMirrored: return "HMD detected over USB, but Monitor may be mirrored instead of extended (212)"; + case VRInitError_Driver_HmdDisplayNotFoundLaptop: return "On laptop, HMD detected over USB, but Monitor not found (213)"; + + case VRInitError_IPC_ServerInitFailed: return "VR Server Init Failed (300)"; + case VRInitError_IPC_ConnectFailed: return "Connect to VR Server Failed (301)"; + case VRInitError_IPC_SharedStateInitFailed: return "Shared IPC State Init Failed (302)"; + case VRInitError_IPC_CompositorInitFailed: return "Shared IPC Compositor Init Failed (303)"; + case VRInitError_IPC_MutexInitFailed: return "Shared IPC Mutex Init Failed (304)"; + case VRInitError_IPC_Failed: return "Shared IPC Failed (305)"; + case VRInitError_IPC_CompositorConnectFailed: return "Shared IPC Compositor Connect Failed (306)"; + case VRInitError_IPC_CompositorInvalidConnectResponse: return "Shared IPC Compositor Invalid Connect Response (307)"; + case VRInitError_IPC_ConnectFailedAfterMultipleAttempts: return "Shared IPC Connect Failed After Multiple Attempts (308)"; + case VRInitError_IPC_ConnectFailedAfterTargetExited: return "Shared IPC Connect Failed After Target Exited (309)"; + case VRInitError_IPC_NamespaceUnavailable: return "Shared IPC Namespace Unavailable (310)"; + + case VRInitError_Compositor_Failed: return "Compositor failed to initialize (400)"; + case VRInitError_Compositor_D3D11HardwareRequired: return "Compositor failed to find DX11 hardware (401)"; + case VRInitError_Compositor_FirmwareRequiresUpdate: return "Compositor requires mandatory firmware update (402)"; + case VRInitError_Compositor_OverlayInitFailed: return "Compositor initialization succeeded, but overlay init failed (403)"; + case VRInitError_Compositor_ScreenshotsInitFailed: return "Compositor initialization succeeded, but screenshot init failed (404)"; + case VRInitError_Compositor_UnableToCreateDevice: return "Compositor unable to create graphics device (405)"; + + // Oculus + case VRInitError_VendorSpecific_UnableToConnectToOculusRuntime: return "Unable to connect to Oculus Runtime (1000)"; + case VRInitError_VendorSpecific_OculusRuntimeBadInstall: return "Unable to connect to Oculus Runtime, possible bad install (1114)"; + + // Lighthouse + case VRInitError_VendorSpecific_HmdFound_CantOpenDevice: return "HMD found, but can not open device (1101)"; + case VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart: return "HMD found, but unable to request config (1102)"; + case VRInitError_VendorSpecific_HmdFound_NoStoredConfig: return "HMD found, but no stored config (1103)"; + case VRInitError_VendorSpecific_HmdFound_ConfigFailedSanityCheck: return "HMD found, but failed configuration check (1113)"; + case VRInitError_VendorSpecific_HmdFound_ConfigTooBig: return "HMD found, but config too big (1104)"; + case VRInitError_VendorSpecific_HmdFound_ConfigTooSmall: return "HMD found, but config too small (1105)"; + case VRInitError_VendorSpecific_HmdFound_UnableToInitZLib: return "HMD found, but unable to init ZLib (1106)"; + case VRInitError_VendorSpecific_HmdFound_CantReadFirmwareVersion: return "HMD found, but problems with the data (1107)"; + case VRInitError_VendorSpecific_HmdFound_UnableToSendUserDataStart: return "HMD found, but problems with the data (1108)"; + case VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataStart: return "HMD found, but problems with the data (1109)"; + case VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataNext: return "HMD found, but problems with the data (1110)"; + case VRInitError_VendorSpecific_HmdFound_UserDataAddressRange: return "HMD found, but problems with the data (1111)"; + case VRInitError_VendorSpecific_HmdFound_UserDataError: return "HMD found, but problems with the data (1112)"; + + case VRInitError_Steam_SteamInstallationNotFound: return "Unable to find Steam installation (2000)"; + + default: + return GetIDForVRInitError( eError ); + } + +} + + +const char *GetIDForVRInitError( vr::EVRInitError eError ) +{ + switch( eError ) + { + RETURN_ENUM_AS_STRING( VRInitError_None ); + RETURN_ENUM_AS_STRING( VRInitError_Unknown ); + + RETURN_ENUM_AS_STRING( VRInitError_Init_InstallationNotFound ); + RETURN_ENUM_AS_STRING( VRInitError_Init_InstallationCorrupt ); + RETURN_ENUM_AS_STRING( VRInitError_Init_VRClientDLLNotFound ); + RETURN_ENUM_AS_STRING( VRInitError_Init_FileNotFound ); + RETURN_ENUM_AS_STRING( VRInitError_Init_FactoryNotFound ); + RETURN_ENUM_AS_STRING( VRInitError_Init_InterfaceNotFound ); + RETURN_ENUM_AS_STRING( VRInitError_Init_InvalidInterface ); + RETURN_ENUM_AS_STRING( VRInitError_Init_UserConfigDirectoryInvalid ); + RETURN_ENUM_AS_STRING( VRInitError_Init_HmdNotFound ); + RETURN_ENUM_AS_STRING( VRInitError_Init_NotInitialized ); + RETURN_ENUM_AS_STRING( VRInitError_Init_PathRegistryNotFound ); + RETURN_ENUM_AS_STRING( VRInitError_Init_NoConfigPath ); + RETURN_ENUM_AS_STRING( VRInitError_Init_NoLogPath ); + RETURN_ENUM_AS_STRING( VRInitError_Init_PathRegistryNotWritable ); + RETURN_ENUM_AS_STRING( VRInitError_Init_AppInfoInitFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Init_Retry ); + RETURN_ENUM_AS_STRING( VRInitError_Init_InitCanceledByUser ); + RETURN_ENUM_AS_STRING( VRInitError_Init_AnotherAppLaunching ); + RETURN_ENUM_AS_STRING( VRInitError_Init_SettingsInitFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Init_ShuttingDown ); + RETURN_ENUM_AS_STRING( VRInitError_Init_TooManyObjects ); + RETURN_ENUM_AS_STRING( VRInitError_Init_NoServerForBackgroundApp ); + RETURN_ENUM_AS_STRING( VRInitError_Init_NotSupportedWithCompositor ); + RETURN_ENUM_AS_STRING( VRInitError_Init_NotAvailableToUtilityApps ); + RETURN_ENUM_AS_STRING( VRInitError_Init_Internal ); + RETURN_ENUM_AS_STRING( VRInitError_Init_HmdDriverIdIsNone ); + RETURN_ENUM_AS_STRING( VRInitError_Init_HmdNotFoundPresenceFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Init_VRMonitorNotFound ); + RETURN_ENUM_AS_STRING( VRInitError_Init_VRMonitorStartupFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Init_LowPowerWatchdogNotSupported ); + RETURN_ENUM_AS_STRING( VRInitError_Init_InvalidApplicationType ); + RETURN_ENUM_AS_STRING( VRInitError_Init_NotAvailableToWatchdogApps ); + RETURN_ENUM_AS_STRING( VRInitError_Init_WatchdogDisabledInSettings ); + RETURN_ENUM_AS_STRING( VRInitError_Init_VRDashboardNotFound ); + RETURN_ENUM_AS_STRING( VRInitError_Init_VRDashboardStartupFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Init_VRHomeNotFound ); + RETURN_ENUM_AS_STRING( VRInitError_Init_VRHomeStartupFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Init_RebootingBusy ); + RETURN_ENUM_AS_STRING( VRInitError_Init_FirmwareUpdateBusy ); + RETURN_ENUM_AS_STRING( VRInitError_Init_FirmwareRecoveryBusy ); + RETURN_ENUM_AS_STRING( VRInitError_Init_USBServiceBusy ); + RETURN_ENUM_AS_STRING( VRInitError_Init_VRWebHelperStartupFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Init_TrackerManagerInitFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Init_AlreadyRunning ); + RETURN_ENUM_AS_STRING( VRInitError_Init_FailedForVrMonitor); + RETURN_ENUM_AS_STRING( VRInitError_Init_PropertyManagerInitFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Init_WebServerFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Init_IllegalTypeTransition ); + RETURN_ENUM_AS_STRING( VRInitError_Init_MismatchedRuntimes ); + RETURN_ENUM_AS_STRING( VRInitError_Init_InvalidProcessId ); + RETURN_ENUM_AS_STRING( VRInitError_Init_VRServiceStartupFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Init_PrismNeedsNewDrivers ); + RETURN_ENUM_AS_STRING( VRInitError_Init_PrismStartupTimedOut ); + RETURN_ENUM_AS_STRING( VRInitError_Init_CouldNotStartPrism ); + RETURN_ENUM_AS_STRING( VRInitError_Init_CreateDriverDirectDeviceFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Init_PrismExitedUnexpectedly ); + + RETURN_ENUM_AS_STRING( VRInitError_Driver_Failed ); + RETURN_ENUM_AS_STRING( VRInitError_Driver_Unknown ); + RETURN_ENUM_AS_STRING( VRInitError_Driver_HmdUnknown); + RETURN_ENUM_AS_STRING( VRInitError_Driver_NotLoaded); + RETURN_ENUM_AS_STRING( VRInitError_Driver_RuntimeOutOfDate); + RETURN_ENUM_AS_STRING( VRInitError_Driver_HmdInUse); + RETURN_ENUM_AS_STRING( VRInitError_Driver_NotCalibrated); + RETURN_ENUM_AS_STRING( VRInitError_Driver_CalibrationInvalid); + RETURN_ENUM_AS_STRING( VRInitError_Driver_HmdDisplayNotFound); + RETURN_ENUM_AS_STRING( VRInitError_Driver_TrackedDeviceInterfaceUnknown ); + // RETURN_ENUM_AS_STRING( VRInitError_Driver_HmdDisplayNotFoundAfterFix ); + RETURN_ENUM_AS_STRING( VRInitError_Driver_HmdDriverIdOutOfBounds ); + RETURN_ENUM_AS_STRING( VRInitError_Driver_HmdDisplayMirrored ); + RETURN_ENUM_AS_STRING( VRInitError_Driver_HmdDisplayNotFoundLaptop ); + + RETURN_ENUM_AS_STRING( VRInitError_IPC_ServerInitFailed); + RETURN_ENUM_AS_STRING( VRInitError_IPC_ConnectFailed); + RETURN_ENUM_AS_STRING( VRInitError_IPC_SharedStateInitFailed); + RETURN_ENUM_AS_STRING( VRInitError_IPC_CompositorInitFailed); + RETURN_ENUM_AS_STRING( VRInitError_IPC_MutexInitFailed); + RETURN_ENUM_AS_STRING( VRInitError_IPC_Failed); + RETURN_ENUM_AS_STRING( VRInitError_IPC_CompositorConnectFailed); + RETURN_ENUM_AS_STRING( VRInitError_IPC_CompositorInvalidConnectResponse); + RETURN_ENUM_AS_STRING( VRInitError_IPC_ConnectFailedAfterMultipleAttempts ); + RETURN_ENUM_AS_STRING( VRInitError_IPC_ConnectFailedAfterTargetExited ); + RETURN_ENUM_AS_STRING( VRInitError_IPC_NamespaceUnavailable ); + + RETURN_ENUM_AS_STRING( VRInitError_Compositor_Failed ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_D3D11HardwareRequired ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_FirmwareRequiresUpdate ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_OverlayInitFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_ScreenshotsInitFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_UnableToCreateDevice ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_SharedStateIsNull ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_NotificationManagerIsNull ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_ResourceManagerClientIsNull ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_MessageOverlaySharedStateInitFailure ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_PropertiesInterfaceIsNull ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateFullscreenWindowFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_SettingsInterfaceIsNull ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_FailedToShowWindow ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_DistortInterfaceIsNull ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_DisplayFrequencyFailure ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_RendererInitializationFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_DXGIFactoryInterfaceIsNull ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_DXGIFactoryCreateFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_DXGIFactoryQueryFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_InvalidAdapterDesktop ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_InvalidHmdAttachment ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_InvalidOutputDesktop ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_InvalidDeviceProvided ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_D3D11RendererInitializationFailed ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_FailedToFindDisplayMode ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_FailedToCreateSwapChain ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_FailedToGetBackBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_FailedToCreateRenderTarget ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_FailedToCreateDXGI2SwapChain ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_FailedtoGetDXGI2BackBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_FailedToCreateDXGI2RenderTarget ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_FailedToGetDXGIDeviceInterface ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_SelectDisplayMode ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_FailedToCreateNvAPIRenderTargets ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_NvAPISetDisplayMode ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_FailedToCreateDirectModeDisplay ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_InvalidHmdPropertyContainer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_UpdateDisplayFrequency ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateRasterizerState ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateWireframeRasterizerState ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateSamplerState ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateClampToBorderSamplerState ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateAnisoSamplerState ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateOverlaySamplerState ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreatePanoramaSamplerState ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateFontSamplerState ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateNoBlendState ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateBlendState ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateAlphaBlendState ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateBlendStateMaskR ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateBlendStateMaskG ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateBlendStateMaskB ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateDepthStencilState ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateDepthStencilStateNoWrite ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateDepthStencilStateNoDepth ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateFlushTexture ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateDistortionSurfaces ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateConstantBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateHmdPoseConstantBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateHmdPoseStagingConstantBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateSharedFrameInfoConstantBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateOverlayConstantBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateSceneTextureIndexConstantBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateReadableSceneTextureIndexConstantBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateLayerGraphicsTextureIndexConstantBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateLayerComputeTextureIndexConstantBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateLayerComputeSceneTextureIndexConstantBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateComputeHmdPoseConstantBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateGeomConstantBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreatePanelMaskConstantBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreatePixelSimUBO ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateMSAARenderTextures ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateResolveRenderTextures ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateComputeResolveRenderTextures ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateDriverDirectModeResolveTextures ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_OpenDriverDirectModeResolveTextures ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateFallbackSyncTexture ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_ShareFallbackSyncTexture ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateOverlayIndexBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateOverlayVertexBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateTextVertexBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateTextIndexBuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateMirrorTextures ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateLastFrameRenderTexture ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateMirrorOverlay ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_FailedToCreateVirtualDisplayBackbuffer ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_DisplayModeNotSupported ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateOverlayInvalidCall ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_CreateOverlayAlreadyInitialized ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_FailedToCreateMailbox ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_WindowInterfaceIsNull ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_SystemLayerCreateInstance ); + RETURN_ENUM_AS_STRING( VRInitError_Compositor_SystemLayerCreateSession ); + + // Vendor-specific errors + RETURN_ENUM_AS_STRING( VRInitError_VendorSpecific_UnableToConnectToOculusRuntime); + RETURN_ENUM_AS_STRING( VRInitError_VendorSpecific_WindowsNotInDevMode ); + RETURN_ENUM_AS_STRING( VRInitError_VendorSpecific_OculusRuntimeBadInstall ); + + // Lighthouse + RETURN_ENUM_AS_STRING( VRInitError_VendorSpecific_HmdFound_CantOpenDevice); + RETURN_ENUM_AS_STRING( VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart); + RETURN_ENUM_AS_STRING( VRInitError_VendorSpecific_HmdFound_NoStoredConfig); + RETURN_ENUM_AS_STRING( VRInitError_VendorSpecific_HmdFound_ConfigFailedSanityCheck ); + RETURN_ENUM_AS_STRING( VRInitError_VendorSpecific_HmdFound_ConfigTooBig ); + RETURN_ENUM_AS_STRING( VRInitError_VendorSpecific_HmdFound_ConfigTooSmall ); + RETURN_ENUM_AS_STRING( VRInitError_VendorSpecific_HmdFound_UnableToInitZLib ); + RETURN_ENUM_AS_STRING( VRInitError_VendorSpecific_HmdFound_CantReadFirmwareVersion ); + RETURN_ENUM_AS_STRING( VRInitError_VendorSpecific_HmdFound_UnableToSendUserDataStart ); + RETURN_ENUM_AS_STRING( VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataStart ); + RETURN_ENUM_AS_STRING( VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataNext ); + RETURN_ENUM_AS_STRING( VRInitError_VendorSpecific_HmdFound_UserDataAddressRange ); + RETURN_ENUM_AS_STRING( VRInitError_VendorSpecific_HmdFound_UserDataError ); + + RETURN_ENUM_AS_STRING( VRInitError_Steam_SteamInstallationNotFound ); + + default: + { + static char buf[128]; + sprintf( buf, "Unknown error (%d)", eError ); + return buf; + } + } +} + diff --git a/contrib/openvr/src/vrcommon/hmderrors_public.h b/contrib/openvr/src/vrcommon/hmderrors_public.h new file mode 100755 index 0000000..ccd6c8a --- /dev/null +++ b/contrib/openvr/src/vrcommon/hmderrors_public.h @@ -0,0 +1,6 @@ +//========= Copyright Valve Corporation ============// +#pragma once + +const char *GetEnglishStringForHmdError( vr::EVRInitError eError ); +const char *GetIDForVRInitError( vr::EVRInitError eError ); + diff --git a/contrib/openvr/src/vrcommon/pathtools_public.cpp b/contrib/openvr/src/vrcommon/pathtools_public.cpp new file mode 100755 index 0000000..1d1cb54 --- /dev/null +++ b/contrib/openvr/src/vrcommon/pathtools_public.cpp @@ -0,0 +1,988 @@ +//========= Copyright Valve Corporation ============// +#include +#include + +#if defined( _WIN32) +#include +#include +#include +#include +#include +#include + +#undef GetEnvironmentVariable +#else +#include +#include +#include +#include +#include +#endif + +#if defined OSX +#include +#include +#include +#define _S_IFDIR S_IFDIR // really from tier0/platform.h which we dont have yet +#endif + +#include + +#include + +/** Returns the path (including filename) to the current executable */ +std::string Path_GetExecutablePath() +{ +#if defined( _WIN32 ) + wchar_t *pwchPath = new wchar_t[MAX_UNICODE_PATH]; + char *pchPath = new char[MAX_UNICODE_PATH_IN_UTF8]; + ::GetModuleFileNameW( NULL, pwchPath, MAX_UNICODE_PATH ); + WideCharToMultiByte( CP_UTF8, 0, pwchPath, -1, pchPath, MAX_UNICODE_PATH_IN_UTF8, NULL, NULL ); + delete[] pwchPath; + + std::string sPath = pchPath; + delete[] pchPath; + return sPath; +#elif defined( OSX ) + char rchPath[1024]; + uint32_t nBuff = sizeof( rchPath ); + bool bSuccess = _NSGetExecutablePath(rchPath, &nBuff) == 0; + rchPath[nBuff-1] = '\0'; + if( bSuccess ) + return rchPath; + else + return ""; +#elif defined LINUX + char rchPath[1024]; + size_t nBuff = sizeof( rchPath ); + ssize_t nRead = readlink("/proc/self/exe", rchPath, nBuff-1 ); + if ( nRead != -1 ) + { + rchPath[ nRead ] = 0; + return rchPath; + } + else + { + return ""; + } +#else + AssertMsg( false, "Implement Plat_GetExecutablePath" ); + return ""; +#endif + +} + +/** Returns the path of the current working directory */ +std::string Path_GetWorkingDirectory() +{ + std::string sPath; +#if defined( _WIN32 ) + wchar_t buf[MAX_UNICODE_PATH]; + sPath = UTF16to8( _wgetcwd( buf, MAX_UNICODE_PATH ) ); +#else + char buf[ 1024 ]; + sPath = getcwd( buf, sizeof( buf ) ); +#endif + return sPath; +} + +/** Sets the path of the current working directory. Returns true if this was successful. */ +bool Path_SetWorkingDirectory( const std::string & sPath ) +{ + bool bSuccess; +#if defined( _WIN32 ) + std::wstring wsPath = UTF8to16( sPath.c_str() ); + bSuccess = 0 == _wchdir( wsPath.c_str() ); +#else + bSuccess = 0 == chdir( sPath.c_str() ); +#endif + return bSuccess; +} + +/** Gets the path to a temporary directory. */ +std::string Path_GetTemporaryDirectory() +{ +#if defined( _WIN32 ) + wchar_t buf[MAX_UNICODE_PATH]; + if ( GetTempPathW( MAX_UNICODE_PATH, buf ) == 0 ) + return Path_GetWorkingDirectory(); + return UTF16to8( buf ); +#else + const char *pchTmpDir = getenv( "TMPDIR" ); + if ( pchTmpDir == NULL ) + { + return ""; + } + return pchTmpDir; +#endif +} + +/** Returns the specified path without its filename */ +std::string Path_StripFilename( const std::string & sPath, char slash ) +{ + if( slash == 0 ) + slash = Path_GetSlash(); + + std::string::size_type n = sPath.find_last_of( slash ); + if( n == std::string::npos ) + return sPath; + else + return std::string( sPath.begin(), sPath.begin() + n ); +} + +/** returns just the filename from the provided full or relative path. */ +std::string Path_StripDirectory( const std::string & sPath, char slash ) +{ + if( slash == 0 ) + slash = Path_GetSlash(); + + std::string::size_type n = sPath.find_last_of( slash ); + if( n == std::string::npos ) + return sPath; + else + return std::string( sPath.begin() + n + 1, sPath.end() ); +} + +/** returns just the filename with no extension of the provided filename. +* If there is a path the path is left intact. */ +std::string Path_StripExtension( const std::string & sPath ) +{ + for( std::string::const_reverse_iterator i = sPath.rbegin(); i != sPath.rend(); i++ ) + { + if( *i == '.' ) + { + return std::string( sPath.begin(), i.base() - 1 ); + } + + // if we find a slash there is no extension + if( *i == '\\' || *i == '/' ) + break; + } + + // we didn't find an extension + return sPath; +} + +/** returns just extension of the provided filename (if any). */ +std::string Path_GetExtension( const std::string & sPath ) +{ + for ( std::string::const_reverse_iterator i = sPath.rbegin(); i != sPath.rend(); i++ ) + { + if ( *i == '.' ) + { + return std::string( i.base(), sPath.end() ); + } + + // if we find a slash there is no extension + if ( *i == '\\' || *i == '/' ) + break; + } + + // we didn't find an extension + return ""; +} + +bool Path_IsAbsolute( const std::string & sPath ) +{ + if( sPath.empty() ) + return false; + +#if defined( WIN32 ) + if ( sPath.size() < 3 ) // must be c:\x or \\x at least + return false; + + if ( sPath[1] == ':' ) // drive letter plus slash, but must test both slash cases + { + if ( sPath[2] == '\\' || sPath[2] == '/' ) + return true; + } + else if ( sPath[0] == '\\' && sPath[1] == '\\' ) // UNC path + return true; +#else + if( sPath[0] == '\\' || sPath[0] == '/' ) // any leading slash + return true; +#endif + + return false; +} + + +/** Makes an absolute path from a relative path and a base path */ +std::string Path_MakeAbsolute( const std::string & sRelativePath, const std::string & sBasePath ) +{ + if( Path_IsAbsolute( sRelativePath ) ) + return Path_Compact( sRelativePath ); + else + { + if( !Path_IsAbsolute( sBasePath ) ) + return ""; + + std::string sCompacted = Path_Compact( Path_Join( sBasePath, sRelativePath ) ); + if( Path_IsAbsolute( sCompacted ) ) + return sCompacted; + else + return ""; + } +} + + +/** Fixes the directory separators for the current platform */ +std::string Path_FixSlashes( const std::string & sPath, char slash ) +{ + if( slash == 0 ) + slash = Path_GetSlash(); + + std::string sFixed = sPath; + for( std::string::iterator i = sFixed.begin(); i != sFixed.end(); i++ ) + { + if( *i == '/' || *i == '\\' ) + *i = slash; + } + + return sFixed; +} + + +char Path_GetSlash() +{ +#if defined(_WIN32) + return '\\'; +#else + return '/'; +#endif +} + +/** Jams two paths together with the right kind of slash */ +std::string Path_Join( const std::string & first, const std::string & second, char slash ) +{ + if( slash == 0 ) + slash = Path_GetSlash(); + + // only insert a slash if we don't already have one + std::string::size_type nLen = first.length(); + if( !nLen ) + return second; +#if defined(_WIN32) + if( first.back() == '\\' || first.back() == '/' ) + nLen--; +#else + char last_char = first[first.length()-1]; + if (last_char == '\\' || last_char == '/') + nLen--; +#endif + + return first.substr( 0, nLen ) + std::string( 1, slash ) + second; +} + + +std::string Path_Join( const std::string & first, const std::string & second, const std::string & third, char slash ) +{ + return Path_Join( Path_Join( first, second, slash ), third, slash ); +} + +std::string Path_Join( const std::string & first, const std::string & second, const std::string & third, const std::string &fourth, char slash ) +{ + return Path_Join( Path_Join( Path_Join( first, second, slash ), third, slash ), fourth, slash ); +} + +std::string Path_Join( + const std::string & first, + const std::string & second, + const std::string & third, + const std::string & fourth, + const std::string & fifth, + char slash ) +{ + return Path_Join( Path_Join( Path_Join( Path_Join( first, second, slash ), third, slash ), fourth, slash ), fifth, slash ); +} + + +std::string Path_RemoveTrailingSlash( const std::string & sRawPath, char slash ) +{ + if ( slash == 0 ) + slash = Path_GetSlash(); + + std::string sPath = sRawPath; + std::string::size_type nCurrent = sRawPath.length(); + if ( nCurrent == 0 ) + return sPath; + + int nLastFound = -1; + nCurrent--; + while( nCurrent != 0 ) + { + if ( sRawPath[ nCurrent ] == slash ) + { + nLastFound = (int)nCurrent; + nCurrent--; + } + else + { + break; + } + } + + if ( nLastFound >= 0 ) + { + sPath.erase( nLastFound, std::string::npos ); + } + + return sPath; +} + + +/** Removes redundant /.. elements in the path. Returns an empty path if the +* specified path has a broken number of directories for its number of ..s */ +std::string Path_Compact( const std::string & sRawPath, char slash ) +{ + if( slash == 0 ) + slash = Path_GetSlash(); + + std::string sPath = Path_FixSlashes( sRawPath, slash ); + std::string sSlashString( 1, slash ); + + // strip out all /./ + for( std::string::size_type i = 0; (i + 3) < sPath.length(); ) + { + if( sPath[ i ] == slash && sPath[ i+1 ] == '.' && sPath[ i+2 ] == slash ) + { + sPath.replace( i, 3, sSlashString ); + } + else + { + ++i; + } + } + + + // get rid of trailing /. but leave the path separator + if( sPath.length() > 2 ) + { + std::string::size_type len = sPath.length(); + if( sPath[ len-1 ] == '.' && sPath[ len-2 ] == slash ) + { + sPath.pop_back(); + //Not sure why the following line of code was used for a while. It causes problems with strlen. + //sPath[len-1] = 0; // for now, at least + } + } + + // get rid of leading ./ + if( sPath.length() > 2 ) + { + if( sPath[ 0 ] == '.' && sPath[ 1 ] == slash ) + { + sPath.replace( 0, 2, "" ); + } + } + + // each time we encounter .. back up until we've found the previous directory name + // then get rid of both + std::string::size_type i = 0; + while( i < sPath.length() ) + { + if( i > 0 && sPath.length() - i >= 2 + && sPath[i] == '.' + && sPath[i+1] == '.' + && ( i + 2 == sPath.length() || sPath[ i+2 ] == slash ) + && sPath[ i-1 ] == slash ) + { + // check if we've hit the start of the string and have a bogus path + if( i == 1 ) + return ""; + + // find the separator before i-1 + std::string::size_type iDirStart = i-2; + while( iDirStart > 0 && sPath[ iDirStart - 1 ] != slash ) + --iDirStart; + + // remove everything from iDirStart to i+2 + sPath.replace( iDirStart, (i - iDirStart) + 3, "" ); + + // start over + i = 0; + } + else + { + ++i; + } + } + + return sPath; +} + + +/** Returns true if these two paths are the same without respect for internal . or .. +* sequences, slash type, or case (on case-insensitive platforms). */ +bool Path_IsSamePath( const std::string & sPath1, const std::string & sPath2 ) +{ + std::string sCompact1 = Path_Compact( sPath1 ); + std::string sCompact2 = Path_Compact( sPath2 ); +#if defined(WIN32) + return !stricmp( sCompact1.c_str(), sCompact2.c_str() ); +#else + return !strcmp( sCompact1.c_str(), sCompact2.c_str() ); +#endif +} + + +/** Returns the path to the current DLL or exe */ +std::string Path_GetThisModulePath() +{ + // gets the path of vrclient.dll itself +#ifdef WIN32 + HMODULE hmodule = NULL; + + ::GetModuleHandleEx( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, reinterpret_cast(Path_GetThisModulePath), &hmodule ); + + wchar_t *pwchPath = new wchar_t[MAX_UNICODE_PATH]; + char *pchPath = new char[ MAX_UNICODE_PATH_IN_UTF8 ]; + ::GetModuleFileNameW( hmodule, pwchPath, MAX_UNICODE_PATH ); + WideCharToMultiByte( CP_UTF8, 0, pwchPath, -1, pchPath, MAX_UNICODE_PATH_IN_UTF8, NULL, NULL ); + delete[] pwchPath; + + std::string sPath = pchPath; + delete [] pchPath; + return sPath; + +#elif defined( OSX ) || defined( LINUX ) + // get the addr of a function in vrclient.so and then ask the dlopen system about it + Dl_info info; + dladdr( (void *)Path_GetThisModulePath, &info ); + return info.dli_fname; +#endif + +} + + +/** returns true if the specified path exists and is a directory */ +bool Path_IsDirectory( const std::string & sPath ) +{ + std::string sFixedPath = Path_FixSlashes( sPath ); + if( sFixedPath.empty() ) + return false; + char cLast = sFixedPath[ sFixedPath.length() - 1 ]; + if( cLast == '/' || cLast == '\\' ) + sFixedPath.erase( sFixedPath.end() - 1, sFixedPath.end() ); + + // see if the specified path actually exists. + +#if defined(POSIX) + struct stat buf; + if ( stat( sFixedPath.c_str(), &buf ) == -1 ) + { + return false; + } + +#if defined( LINUX ) || defined( OSX ) + return S_ISDIR( buf.st_mode ); +#else + return (buf.st_mode & _S_IFDIR) != 0; +#endif + +#else + struct _stat buf; + std::wstring wsFixedPath = UTF8to16( sFixedPath.c_str() ); + if ( _wstat( wsFixedPath.c_str(), &buf ) == -1 ) + { + return false; + } + + return (buf.st_mode & _S_IFDIR) != 0; +#endif +} + +/** returns true if the specified path represents an app bundle */ +bool Path_IsAppBundle( const std::string & sPath ) +{ +#if defined(OSX) + @autoreleasepool { + NSBundle *bundle = [ NSBundle bundleWithPath: [ NSString stringWithUTF8String:sPath.c_str() ] ]; + bool bisAppBundle = ( nullptr != bundle ); + return bisAppBundle; + } +#else + return false; +#endif +} + +//----------------------------------------------------------------------------- +// Purpose: returns true if the the path exists +//----------------------------------------------------------------------------- +bool Path_Exists( const std::string & sPath ) +{ + std::string sFixedPath = Path_FixSlashes( sPath ); + if( sFixedPath.empty() ) + return false; + +#if defined( WIN32 ) + struct _stat buf; + std::wstring wsFixedPath = UTF8to16( sFixedPath.c_str() ); + if ( _wstat( wsFixedPath.c_str(), &buf ) == -1 ) + { + return false; + } +#else + struct stat buf; + if ( stat ( sFixedPath.c_str(), &buf ) == -1) + { + return false; + } +#endif + + return true; +} + + +//----------------------------------------------------------------------------- +// Purpose: helper to find a directory upstream from a given path +//----------------------------------------------------------------------------- +std::string Path_FindParentDirectoryRecursively( const std::string &strStartDirectory, const std::string &strDirectoryName ) +{ + std::string strFoundPath = ""; + std::string strCurrentPath = Path_FixSlashes( strStartDirectory ); + if ( strCurrentPath.length() == 0 ) + return ""; + + bool bExists = Path_Exists( strCurrentPath ); + std::string strCurrentDirectoryName = Path_StripDirectory( strCurrentPath ); + if ( bExists && stricmp( strCurrentDirectoryName.c_str(), strDirectoryName.c_str() ) == 0 ) + return strCurrentPath; + + while( bExists && strCurrentPath.length() != 0 ) + { + strCurrentPath = Path_StripFilename( strCurrentPath ); + strCurrentDirectoryName = Path_StripDirectory( strCurrentPath ); + bExists = Path_Exists( strCurrentPath ); + if ( bExists && stricmp( strCurrentDirectoryName.c_str(), strDirectoryName.c_str() ) == 0 ) + return strCurrentPath; + } + + return ""; +} + + +//----------------------------------------------------------------------------- +// Purpose: helper to find a subdirectory upstream from a given path +//----------------------------------------------------------------------------- +std::string Path_FindParentSubDirectoryRecursively( const std::string &strStartDirectory, const std::string &strDirectoryName ) +{ + std::string strFoundPath = ""; + std::string strCurrentPath = Path_FixSlashes( strStartDirectory ); + if ( strCurrentPath.length() == 0 ) + return ""; + + bool bExists = Path_Exists( strCurrentPath ); + while( bExists && strCurrentPath.length() != 0 ) + { + strCurrentPath = Path_StripFilename( strCurrentPath ); + bExists = Path_Exists( strCurrentPath ); + + if( Path_Exists( Path_Join( strCurrentPath, strDirectoryName ) ) ) + { + strFoundPath = Path_Join( strCurrentPath, strDirectoryName ); + break; + } + } + return strFoundPath; +} + + +//----------------------------------------------------------------------------- +// Purpose: reading and writing files in the vortex directory +//----------------------------------------------------------------------------- +std::vector Path_ReadBinaryFile( const std::string & strFilename ) +{ + FILE *f; +#if defined( POSIX ) + f = fopen( strFilename.c_str(), "rb" ); +#else + std::wstring wstrFilename = UTF8to16( strFilename.c_str() ); + // the open operation needs to be sharable, therefore use of _wfsopen instead of _wfopen_s + f = _wfsopen( wstrFilename.c_str(), L"rb", _SH_DENYNO ); +#endif + + std::vector vecFileContents; + + if ( f != NULL ) + { + fseek( f, 0, SEEK_END ); + int size = ftell( f ); + fseek( f, 0, SEEK_SET ); + + vecFileContents.resize( size ); + if ( fread( &vecFileContents[ 0 ], size, 1, f ) == 1 ) + { + } + else + { + vecFileContents.clear(); + } + + fclose( f ); + } + + return vecFileContents ; +} + + +unsigned char * Path_ReadBinaryFile( const std::string &strFilename, int *pSize ) +{ + FILE *f; +#if defined( POSIX ) + f = fopen( strFilename.c_str(), "rb" ); +#else + std::wstring wstrFilename = UTF8to16( strFilename.c_str() ); + // the open operation needs to be sharable, therefore use of _wfsopen instead of _wfopen_s + f = _wfsopen( wstrFilename.c_str(), L"rb", _SH_DENYNO ); +#endif + + unsigned char* buf = NULL; + + if ( f != NULL ) + { + fseek(f, 0, SEEK_END); + int size = ftell(f); + fseek(f, 0, SEEK_SET); + + buf = new unsigned char[size]; + if (buf && fread(buf, size, 1, f) == 1) + { + if (pSize) + *pSize = size; + } + else + { + delete[] buf; + buf = 0; + } + + fclose(f); + } + + return buf; +} + +uint32_t Path_ReadBinaryFile( const std::string &strFilename, unsigned char *pBuffer, uint32_t unSize ) +{ + FILE *f; +#if defined( POSIX ) + f = fopen( strFilename.c_str(), "rb" ); +#else + std::wstring wstrFilename = UTF8to16( strFilename.c_str() ); + errno_t err = _wfopen_s( &f, wstrFilename.c_str(), L"rb" ); + if ( err != 0 ) + { + f = NULL; + } +#endif + + uint32_t unSizeToReturn = 0; + + if ( f != NULL ) + { + fseek( f, 0, SEEK_END ); + uint32_t size = (uint32_t)ftell( f ); + fseek( f, 0, SEEK_SET ); + + if ( size > unSize || !pBuffer ) + { + unSizeToReturn = (uint32_t)size; + } + else + { + if ( fread( pBuffer, size, 1, f ) == 1 ) + { + unSizeToReturn = (uint32_t)size; + } + } + + fclose( f ); + } + + return unSizeToReturn; +} + +bool Path_WriteBinaryFile(const std::string &strFilename, unsigned char *pData, unsigned nSize) +{ + FILE *f; +#if defined( POSIX ) + f = fopen(strFilename.c_str(), "wb"); +#else + std::wstring wstrFilename = UTF8to16( strFilename.c_str() ); + errno_t err = _wfopen_s( &f, wstrFilename.c_str(), L"wb" ); + if (err != 0) + { + f = NULL; + } +#endif + + size_t written = 0; + if (f != NULL) { + written = fwrite(pData, sizeof(unsigned char), nSize, f); + fclose(f); + } + + return written == nSize ? true : false; +} + +std::string Path_ReadTextFile( const std::string &strFilename ) +{ + // doing it this way seems backwards, but I don't + // see an easy way to do this with C/C++ style IO + // that isn't worse... + int size; + unsigned char* buf = Path_ReadBinaryFile( strFilename, &size ); + if (!buf) + return ""; + + // convert CRLF -> LF + size_t outsize = 1; + for (int i=1; i < size; i++) + { + if (buf[i] == '\n' && buf[i-1] == '\r') // CRLF + buf[outsize-1] = '\n'; // ->LF + else + buf[outsize++] = buf[i]; // just copy + } + + std::string ret((char *)buf, outsize); + delete[] buf; + return ret; +} + + +bool Path_MakeWritable( const std::string &strFilename ) +{ +#if defined ( _WIN32 ) + std::wstring wstrFilename = UTF8to16( strFilename.c_str() ); + + DWORD dwAttrs = GetFileAttributesW( wstrFilename.c_str() ); + if ( dwAttrs != INVALID_FILE_ATTRIBUTES && ( dwAttrs & FILE_ATTRIBUTE_READONLY ) ) + { + return SetFileAttributesW( wstrFilename.c_str(), dwAttrs & ~FILE_ATTRIBUTE_READONLY ); + } +#else + struct stat sb; + + if ( stat( strFilename.c_str(), &sb ) == 0 && !( sb.st_mode & S_IWUSR ) ) + { + return ( chmod( strFilename.c_str(), sb.st_mode | S_IWUSR ) == 0 ); + } +#endif + + return true; +} + +bool Path_WriteStringToTextFile( const std::string &strFilename, const char *pchData ) +{ + FILE *f; +#if defined( POSIX ) + f = fopen( strFilename.c_str(), "w" ); +#else + std::wstring wstrFilename = UTF8to16( strFilename.c_str() ); + errno_t err = _wfopen_s( &f, wstrFilename.c_str(), L"w" ); + if ( err != 0 ) + { + f = NULL; + } +#endif + + bool ok = false; + + if ( f != NULL ) + { + ok = fputs( pchData, f) >= 0; + fclose(f); + } + + return ok; +} + +bool Path_WriteStringToTextFileAtomic( const std::string &strFilename, const char *pchData ) +{ + std::string strTmpFilename = strFilename + ".tmp"; + + if ( !Path_WriteStringToTextFile( strTmpFilename, pchData ) ) + return false; + + // Platform specific atomic file replacement +#if defined( _WIN32 ) + std::wstring wsFilename = UTF8to16( strFilename.c_str() ); + std::wstring wsTmpFilename = UTF8to16( strTmpFilename.c_str() ); + if ( !::ReplaceFileW( wsFilename.c_str(), wsTmpFilename.c_str(), nullptr, 0, 0, 0 ) ) + { + // if we couldn't ReplaceFile, try a non-atomic write as a fallback + if ( !Path_WriteStringToTextFile( strFilename, pchData ) ) + return false; + } +#elif defined( POSIX ) + if ( rename( strTmpFilename.c_str(), strFilename.c_str() ) == -1 ) + return false; +#else +#error Do not know how to write atomic file +#endif + + return true; +} + + +#if defined(WIN32) +#define FILE_URL_PREFIX "file:///" +#else +#define FILE_URL_PREFIX "file://" +#endif + +// ---------------------------------------------------------------------------------------------------------------------------- +// Purpose: Turns a path to a file on disk into a URL (or just returns the value if it's already a URL) +// ---------------------------------------------------------------------------------------------------------------------------- +std::string Path_FilePathToUrl( const std::string & sRelativePath, const std::string & sBasePath ) +{ + if ( StringHasPrefix( sRelativePath, "http://" ) + || StringHasPrefix( sRelativePath, "https://" ) + || StringHasPrefix( sRelativePath, "vr-input-workshop://" ) + || StringHasPrefix( sRelativePath, "file://" ) + ) + { + return sRelativePath; + } + else + { + std::string sAbsolute = Path_MakeAbsolute( sRelativePath, sBasePath ); + if ( sAbsolute.empty() ) + return sAbsolute; + sAbsolute = Path_FixSlashes( sAbsolute, '/' ); + + size_t unBufferSize = sAbsolute.length() * 3; + char *pchBuffer = (char *)alloca( unBufferSize ); + V_URLEncodeFullPath( pchBuffer, (int)unBufferSize, sAbsolute.c_str(), (int)sAbsolute.length() ); + + return std::string( FILE_URL_PREFIX ) + pchBuffer; + } +} + +// ----------------------------------------------------------------------------------------------------- +// Purpose: Strips off file:// off a URL and returns the path. For other kinds of URLs an empty string is returned +// ----------------------------------------------------------------------------------------------------- +std::string Path_UrlToFilePath( const std::string & sFileUrl ) +{ + if ( !strnicmp( sFileUrl.c_str(), FILE_URL_PREFIX, strlen( FILE_URL_PREFIX ) ) ) + { + char *pchBuffer = (char *)alloca( sFileUrl.length() ); + V_URLDecodeNoPlusForSpace( pchBuffer, (int)sFileUrl.length(), + sFileUrl.c_str() + strlen( FILE_URL_PREFIX ), (int)( sFileUrl.length() - strlen( FILE_URL_PREFIX ) ) ); + + return Path_FixSlashes( pchBuffer ); + } + else + { + return ""; + } +} + + +// ----------------------------------------------------------------------------------------------------- +// Purpose: Returns the root of the directory the system wants us to store user documents in +// ----------------------------------------------------------------------------------------------------- +std::string GetUserDocumentsPath() +{ +#if defined( WIN32 ) + WCHAR rwchPath[MAX_PATH]; + + if ( !SUCCEEDED( SHGetFolderPathW( NULL, CSIDL_MYDOCUMENTS | CSIDL_FLAG_CREATE, NULL, 0, rwchPath ) ) ) + { + return ""; + } + + // Convert the path to UTF-8 and store in the output + std::string sUserPath = UTF16to8( rwchPath ); + + return sUserPath; +#elif defined( OSX ) + @autoreleasepool { + NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES ); + if ( [paths count] == 0 ) + { + return ""; + } + + return [[paths objectAtIndex:0] UTF8String]; + } +#elif defined( LINUX ) + // @todo: not solved/changed as part of OSX - still not real - just removed old class based steam cut and paste + const char *pchHome = getenv( "HOME" ); + if ( pchHome == NULL ) + { + return ""; + } + return pchHome; +#endif +} + + +// ----------------------------------------------------------------------------------------------------- +// Purpose: deletes / unlinks a single file +// ----------------------------------------------------------------------------------------------------- +bool Path_UnlinkFile( const std::string &strFilename ) +{ +#if defined( WIN32 ) + std::wstring wsFilename = UTF8to16( strFilename.c_str() ); + return ( 0 != DeleteFileW( wsFilename.c_str() ) ); +#else + return ( 0 == unlink( strFilename.c_str() ) ); +#endif +} + + +// ----------------------------------------------------------------------------------------------------- +// Limits the set of characters that are allowed in filenames +// ----------------------------------------------------------------------------------------------------- +std::string Path_SanitizeFilename( const std::string& sFilename ) +{ + std::string sFixed = sFilename; + std::string::iterator iLastDot = sFixed.end(); + for ( std::string::iterator i = sFixed.begin(); i != sFixed.end(); i++ ) + { + if ( *i == '.' ) + { + iLastDot = i; + } + + // path-related characters are forbidden (except the last period) + switch ( *i ) + { + case '\0': + case '.': + case '\\': + case '/': + case ':': + case '|': + case '?': + case '>': + case '<': + case '&': + case '%': + case '@': + case '$': + case '*': + case '\"': + *i = '_'; + break; + + default: + if ( *i < 32 ) + { + *i = '_'; + } + break; + } + } + + if ( iLastDot != sFixed.end() && iLastDot != sFixed.begin() + && iLastDot+1 != sFixed.end() ) + { + *iLastDot = '.'; + } + + return sFixed; +} diff --git a/contrib/openvr/src/vrcommon/pathtools_public.h b/contrib/openvr/src/vrcommon/pathtools_public.h new file mode 100755 index 0000000..8bad50a --- /dev/null +++ b/contrib/openvr/src/vrcommon/pathtools_public.h @@ -0,0 +1,153 @@ +//========= Copyright Valve Corporation ============// +#pragma once + +#include +#include +#include + +/** Returns the path (including filename) to the current executable */ +std::string Path_GetExecutablePath(); + +/** Returns the path of the current working directory */ +std::string Path_GetWorkingDirectory(); + +/** Sets the path of the current working directory. Returns true if this was successful. */ +bool Path_SetWorkingDirectory( const std::string & sPath ); + +/** Gets the path to a temporary directory. */ +std::string Path_GetTemporaryDirectory(); + +/** returns the path (including filename) of the current shared lib or DLL */ +std::string Path_GetThisModulePath(); + +/** Returns the specified path without its filename. +* If slash is unspecified the native path separator of the current platform +* will be used. */ +std::string Path_StripFilename( const std::string & sPath, char slash = 0 ); + +/** returns just the filename from the provided full or relative path. */ +std::string Path_StripDirectory( const std::string & sPath, char slash = 0 ); + +/** returns just the filename with no extension of the provided filename. +* If there is a path the path is left intact. */ +std::string Path_StripExtension( const std::string & sPath ); + +/** returns just extension of the provided filename (if any). */ +std::string Path_GetExtension( const std::string & sPath ); + +/** Returns true if the path is absolute */ +bool Path_IsAbsolute( const std::string & sPath ); + +/** Makes an absolute path from a relative path and a base path */ +std::string Path_MakeAbsolute( const std::string & sRelativePath, const std::string & sBasePath ); + +/** Fixes the directory separators for the current platform. +* If slash is unspecified the native path separator of the current platform +* will be used. */ +std::string Path_FixSlashes( const std::string & sPath, char slash = 0 ); + +/** Returns the path separator for the current platform */ +char Path_GetSlash(); + +/** Jams two paths together with the right kind of slash */ +std::string Path_Join( const std::string & first, const std::string & second, char slash = 0 ); +std::string Path_Join( const std::string & first, const std::string & second, const std::string & third, char slash = 0 ); +std::string Path_Join( const std::string & first, const std::string & second, const std::string & third, const std::string &fourth, char slash = 0 ); +std::string Path_Join( + const std::string & first, + const std::string & second, + const std::string & third, + const std::string & fourth, + const std::string & fifth, + char slash = 0 ); + + +/** Removes redundant /.. elements in the path. Returns an empty path if the +* specified path has a broken number of directories for its number of ..s. +* If slash is unspecified the native path separator of the current platform +* will be used. */ +std::string Path_Compact( const std::string & sRawPath, char slash = 0 ); + +/** Returns true if these two paths are the same without respect for internal . or .. +* sequences, slash type, or case (on case-insensitive platforms). */ +bool Path_IsSamePath( const std::string & sPath1, const std::string & sPath2 ); + +//** Removed trailing slashes */ +std::string Path_RemoveTrailingSlash( const std::string & sRawPath, char slash = 0 ); + +/** returns true if the specified path exists and is a directory */ +bool Path_IsDirectory( const std::string & sPath ); + +/** returns true if the specified path represents an app bundle */ +bool Path_IsAppBundle( const std::string & sPath ); + +/** returns true if the the path exists */ +bool Path_Exists( const std::string & sPath ); + +/** Helper functions to find parent directories or subdirectories of parent directories */ +std::string Path_FindParentDirectoryRecursively( const std::string &strStartDirectory, const std::string &strDirectoryName ); +std::string Path_FindParentSubDirectoryRecursively( const std::string &strStartDirectory, const std::string &strDirectoryName ); + +/** Make a text file writable. */ +bool Path_MakeWritable( const std::string &strFilename ); + +/** Path operations to read or write text/binary files */ +unsigned char * Path_ReadBinaryFile( const std::string &strFilename, int *pSize ); +uint32_t Path_ReadBinaryFile( const std::string &strFilename, unsigned char *pBuffer, uint32_t unSize ); +std::vector Path_ReadBinaryFile( const std::string & strFilename ); +bool Path_WriteBinaryFile( const std::string &strFilename, unsigned char *pData, unsigned nSize ); +std::string Path_ReadTextFile( const std::string &strFilename ); +bool Path_WriteStringToTextFile( const std::string &strFilename, const char *pchData ); +bool Path_WriteStringToTextFileAtomic( const std::string &strFilename, const char *pchData ); + +/** Returns a file:// url for paths, or an http or https url if that's what was provided */ +std::string Path_FilePathToUrl( const std::string & sRelativePath, const std::string & sBasePath ); + +/** Strips off file:// off a URL and returns the path. For other kinds of URLs an empty string is returned */ +std::string Path_UrlToFilePath( const std::string & sFileUrl ); + +/** Returns the root of the directory the system wants us to store user documents in */ +std::string GetUserDocumentsPath(); + +/** deletes / unlinks a single file */ +bool Path_UnlinkFile( const std::string &strFilename ); + +std::string Path_SanitizeFilename( const std::string& sFilename ); + +#ifndef MAX_UNICODE_PATH + #define MAX_UNICODE_PATH 32767 +#endif + +#ifndef MAX_UNICODE_PATH_IN_UTF8 + #define MAX_UNICODE_PATH_IN_UTF8 (MAX_UNICODE_PATH * 4) +#endif + +//----------------------------------------------------------------------------- +#if defined(WIN32) +#define DYNAMIC_LIB_EXT ".dll" +#define PROGRAM_EXT ".exe" +#ifdef _WIN64 +#define PLATSUBDIR "win64" +#else +#define PLATSUBDIR "win32" +#endif +#elif defined(OSX) +#define DYNAMIC_LIB_EXT ".dylib" +#define PLATSUBDIR "osx32" +#define PROGRAM_EXT "" +#elif defined(LINUX) +#define DYNAMIC_LIB_EXT ".so" +#define PROGRAM_EXT "" +#if defined( LINUX32 ) +#define PLATSUBDIR "linux32" +#elif defined( ANDROIDARM64 ) +#define PLATSUBDIR "androidarm64" +#elif defined( LINUXARM64 ) +#define PLATSUBDIR "linuxarm64" +#else +#define PLATSUBDIR "linux64" +#endif +#else +#warning "Unknown platform for PLATSUBDIR" +#define PLATSUBDIR "unknown_platform" +#endif diff --git a/contrib/openvr/src/vrcommon/sharedlibtools_public.cpp b/contrib/openvr/src/vrcommon/sharedlibtools_public.cpp new file mode 100755 index 0000000..35bbe86 --- /dev/null +++ b/contrib/openvr/src/vrcommon/sharedlibtools_public.cpp @@ -0,0 +1,63 @@ +//========= Copyright Valve Corporation ============// +#include +#include + +#if defined(_WIN32) +#include +#endif + +#if defined(POSIX) +#include +#endif + + +SharedLibHandle SharedLib_Load( const char *pchPath, uint32_t *pErrorCode ) +{ + SharedLibHandle pHandle = nullptr; +#if defined( _WIN32) + pHandle = ( SharedLibHandle )LoadLibraryEx( pchPath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH ); +#elif defined(POSIX) + pHandle = (SharedLibHandle) dlopen(pchPath, RTLD_LOCAL|RTLD_NOW); +#endif + + if ( pErrorCode ) + { + if ( pHandle == nullptr ) + { +#if defined( _WIN32) + *pErrorCode = ( uint32_t ) GetLastError(); +#elif defined(POSIX) + *pErrorCode = 1; +#endif + } + else + { + *pErrorCode = 0; + } + } + + return pHandle; +} + +void *SharedLib_GetFunction( SharedLibHandle lib, const char *pchFunctionName) +{ +#if defined( _WIN32) + return (void*)GetProcAddress( (HMODULE)lib, pchFunctionName ); +#elif defined(POSIX) + return dlsym( lib, pchFunctionName ); +#endif +} + + +void SharedLib_Unload( SharedLibHandle lib ) +{ + if ( !lib ) + return; +#if defined( _WIN32) + FreeLibrary( (HMODULE)lib ); +#elif defined(POSIX) + dlclose( lib ); +#endif +} + + diff --git a/contrib/openvr/src/vrcommon/sharedlibtools_public.h b/contrib/openvr/src/vrcommon/sharedlibtools_public.h new file mode 100755 index 0000000..38e7c29 --- /dev/null +++ b/contrib/openvr/src/vrcommon/sharedlibtools_public.h @@ -0,0 +1,12 @@ +//========= Copyright Valve Corporation ============// +#pragma once + +#include + +typedef void *SharedLibHandle; + +SharedLibHandle SharedLib_Load( const char *pchPath, uint32_t *pErrorCode = nullptr ); +void *SharedLib_GetFunction( SharedLibHandle lib, const char *pchFunctionName); +void SharedLib_Unload( SharedLibHandle lib ); + + diff --git a/contrib/openvr/src/vrcommon/strtools_public.cpp b/contrib/openvr/src/vrcommon/strtools_public.cpp new file mode 100755 index 0000000..d4757d8 --- /dev/null +++ b/contrib/openvr/src/vrcommon/strtools_public.cpp @@ -0,0 +1,606 @@ +//========= Copyright Valve Corporation ============// +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined( _WIN32 ) +#include +#endif + +#if defined( OSX ) || defined( LINUX ) +//----------------------------------------------------------------------------- +// Purpose: stricmp -> strcasecmp bridge +//----------------------------------------------------------------------------- +int stricmp( const char *pStr1, const char *pStr2 ) +{ + return strcasecmp( pStr1, pStr2 ); +} + +//----------------------------------------------------------------------------- +// Purpose: strincmp -> strncasecmp bridge +//----------------------------------------------------------------------------- +int strnicmp( const char *pStr1, const char *pStr2, size_t unBufferLen ) +{ + return strncasecmp( pStr1, pStr2, unBufferLen ); +} +#endif + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +bool StringHasPrefix( const std::string & sString, const std::string & sPrefix ) +{ + return 0 == strnicmp( sString.c_str(), sPrefix.c_str(), sPrefix.length() ); +} + +bool StringHasPrefixCaseSensitive( const std::string & sString, const std::string & sPrefix ) +{ + return 0 == strncmp( sString.c_str(), sPrefix.c_str(), sPrefix.length() ); +} + + +bool StringHasSuffix( const std::string &sString, const std::string &sSuffix ) +{ + size_t cStrLen = sString.length(); + size_t cSuffixLen = sSuffix.length(); + + if ( cSuffixLen > cStrLen ) + return false; + + std::string sStringSuffix = sString.substr( cStrLen - cSuffixLen, cSuffixLen ); + + return 0 == stricmp( sStringSuffix.c_str(), sSuffix.c_str() ); +} + +bool StringHasSuffixCaseSensitive( const std::string &sString, const std::string &sSuffix ) +{ + size_t cStrLen = sString.length(); + size_t cSuffixLen = sSuffix.length(); + + if ( cSuffixLen > cStrLen ) + return false; + + std::string sStringSuffix = sString.substr( cStrLen - cSuffixLen, cSuffixLen ); + + return 0 == strncmp( sStringSuffix.c_str(), sSuffix.c_str(),cSuffixLen ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +typedef std::codecvt_utf8< wchar_t > convert_type; + +std::string UTF16to8(const wchar_t * in) +{ + static std::wstring_convert< convert_type, wchar_t > s_converter; // construction of this can be expensive (or even serialized) depending on locale + + try + { + return s_converter.to_bytes( in ); + } + catch ( ... ) + { + return std::string(); + } +} + +std::string UTF16to8( const std::wstring & in ) { return UTF16to8( in.c_str() ); } + + +std::wstring UTF8to16(const char * in) +{ + static std::wstring_convert< convert_type, wchar_t > s_converter; // construction of this can be expensive (or even serialized) depending on locale + + try + { + return s_converter.from_bytes( in ); + } + catch ( ... ) + { + return std::wstring(); + } +} + +std::wstring UTF8to16( const std::string & in ) { return UTF8to16( in.c_str() ); } + +//----------------------------------------------------------------------------- +// Purpose: Format string to std::string converter +//----------------------------------------------------------------------------- +std::string Format( const char *pchFormat, ... ) +{ + static constexpr size_t k_ulMaxStackString = 4096; + + va_list args; + char pchBuffer[k_ulMaxStackString]; + + va_start( args, pchFormat ); + int unSize = vsnprintf( pchBuffer, sizeof( pchBuffer ), pchFormat, args ); + va_end( args ); + + // Something went fairly wrong + if ( unSize < 0 ) + { + //AssertMsg( false, "Format string parse failure" ); + return ""; + } + + // Processing on the stack worked, success + if ( unSize < k_ulMaxStackString ) + { + return pchBuffer; + } + + // If processing on the stack failed, fallback to a dynamic allocation + std::vector< char > vecChar{}; + vecChar.resize( unSize + 1 ); + + va_start( args, pchFormat ); + unSize = vsnprintf( vecChar.data(), vecChar.size(), pchFormat, args ); + va_end( args ); + + // Double check, just in case + if ( unSize < 0 ) + { + //AssertMsg( false, "Format string parse failure" ); + return ""; + } + + return vecChar.data(); +} + + + + +#if defined( _WIN32 ) +//----------------------------------------------------------------------------- +// Purpose: Convert LPSTR in the default CodePage to UTF8 +//----------------------------------------------------------------------------- +std::string DefaultACPtoUTF8( const char *pszStr ) +{ + if ( GetACP() == CP_UTF8 ) + { + return pszStr; + } + else + { + std::vector vecBuf( strlen( pszStr ) + 1 ); // should be guaranteed to be enough + MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, pszStr, -1, vecBuf.data(), (int) vecBuf.size() ); + return UTF16to8( vecBuf.data() ); + } +} +#endif + +// -------------------------------------------------------------------- +// Purpose: +// -------------------------------------------------------------------- +void strcpy_safe( char *pchBuffer, size_t unBufferSizeBytes, const char *pchSource ) +{ + strncpy( pchBuffer, pchSource, unBufferSizeBytes - 1 ); + pchBuffer[unBufferSizeBytes - 1] = '\0'; +} + +// -------------------------------------------------------------------- +// Purpose: converts a string to upper case +// -------------------------------------------------------------------- +std::string StringToUpper( const std::string & sString ) +{ + std::string sOut; + sOut.reserve( sString.size() + 1 ); + for( std::string::const_iterator i = sString.begin(); i != sString.end(); i++ ) + { + sOut.push_back( (char)toupper( *i ) ); + } + + return sOut; +} + + +// -------------------------------------------------------------------- +// Purpose: converts a string to lower case +// -------------------------------------------------------------------- +std::string StringToLower( const std::string & sString ) +{ + std::string sOut; + sOut.reserve( sString.size() + 1 ); + for( std::string::const_iterator i = sString.begin(); i != sString.end(); i++ ) + { + sOut.push_back( (char)tolower( *i ) ); + } + + return sOut; +} + + +uint32_t ReturnStdString( const std::string & sValue, char *pchBuffer, uint32_t unBufferLen ) +{ + uint32_t unLen = (uint32_t)sValue.length() + 1; + if( !pchBuffer || !unBufferLen ) + return unLen; + + if( unBufferLen < unLen ) + { + pchBuffer[0] = '\0'; + } + else + { + memcpy( pchBuffer, sValue.c_str(), unLen ); + } + + return unLen; +} + + +/** Returns a std::string from a uint64_t */ +std::string Uint64ToString( uint64_t ulValue ) +{ + char buf[ 22 ]; +#if defined( _WIN32 ) + sprintf_s( buf, "%llu", ulValue ); +#else + snprintf( buf, sizeof( buf ), "%llu", (long long unsigned int ) ulValue ); +#endif + return buf; +} + + +/** returns a uint64_t from a string */ +uint64_t StringToUint64( const std::string & sValue ) +{ + return strtoull( sValue.c_str(), NULL, 0 ); +} + +//----------------------------------------------------------------------------- +// Purpose: Helper for converting a numeric value to a hex digit, value should be 0-15. +//----------------------------------------------------------------------------- +char cIntToHexDigit( int nValue ) +{ + //Assert( nValue >= 0 && nValue <= 15 ); + return "0123456789ABCDEF"[ nValue & 15 ]; +} + +//----------------------------------------------------------------------------- +// Purpose: Helper for converting a hex char value to numeric, return -1 if the char +// is not a valid hex digit. +//----------------------------------------------------------------------------- +int iHexCharToInt( char cValue ) +{ + int32_t iValue = cValue; + if ( (uint32_t)( iValue - '0' ) < 10 ) + return iValue - '0'; + + iValue |= 0x20; + if ( (uint32_t)( iValue - 'a' ) < 6 ) + return iValue - 'a' + 10; + + return -1; +} + + +//----------------------------------------------------------------------------- +// Purpose: These define the set of characters to filter for components (which +// need all the escaping we can muster) vs. paths (which don't want +// / and : escaped so we don't break less compliant URL handling code. +//----------------------------------------------------------------------------- +static bool CharNeedsEscape_Component( const char c ) +{ + return (!(c >= 'a' && c <= 'z') && !(c >= 'A' && c <= 'Z') && !(c >= '0' && c <= '9') + && c != '-' && c != '_' && c != '.'); +} +static bool CharNeedsEscape_FullPath( const char c ) +{ + return (!(c >= 'a' && c <= 'z') && !(c >= 'A' && c <= 'Z') && !(c >= '0' && c <= '9') + && c != '-' && c != '_' && c != '.' && c != '/' && c != ':' ); +} + + +//----------------------------------------------------------------------------- +// Purpose: Internal implementation of encode, works in the strict RFC manner, or +// with spaces turned to + like HTML form encoding. +//----------------------------------------------------------------------------- +void V_URLEncodeInternal( char *pchDest, int nDestLen, const char *pchSource, int nSourceLen, + bool bUsePlusForSpace, std::function< bool(const char)> fnNeedsEscape ) +{ + //AssertMsg( nDestLen > 3*nSourceLen, "Target buffer for V_URLEncode should be 3x source length, plus one for terminating null\n" ); + + int iDestPos = 0; + for ( int i=0; i < nSourceLen; ++i ) + { + // worst case we need 3 additional chars + if( (iDestPos+3) > nDestLen ) + { + pchDest[0] = '\0'; +// AssertMsg( false, "Target buffer too short\n" ); + return; + } + + // We allow only a-z, A-Z, 0-9, period, underscore, and hyphen to pass through unescaped. + // These are the characters allowed by both the original RFC 1738 and the latest RFC 3986. + // Current specs also allow '~', but that is forbidden under original RFC 1738. + if ( fnNeedsEscape( pchSource[i] ) ) + { + if ( bUsePlusForSpace && pchSource[i] == ' ' ) + { + pchDest[iDestPos++] = '+'; + } + else + { + pchDest[iDestPos++] = '%'; + uint8_t iValue = pchSource[i]; + if ( iValue == 0 ) + { + pchDest[iDestPos++] = '0'; + pchDest[iDestPos++] = '0'; + } + else + { + char cHexDigit1 = cIntToHexDigit( iValue % 16 ); + iValue /= 16; + char cHexDigit2 = cIntToHexDigit( iValue ); + pchDest[iDestPos++] = cHexDigit2; + pchDest[iDestPos++] = cHexDigit1; + } + } + } + else + { + pchDest[iDestPos++] = pchSource[i]; + } + } + + if( (iDestPos+1) > nDestLen ) + { + pchDest[0] = '\0'; + //AssertMsg( false, "Target buffer too short to terminate\n" ); + return; + } + + // Null terminate + pchDest[iDestPos++] = 0; +} + + +//----------------------------------------------------------------------------- +// Purpose: Internal implementation of decode, works in the strict RFC manner, or +// with spaces turned to + like HTML form encoding. +// +// Returns the amount of space used in the output buffer. +//----------------------------------------------------------------------------- +size_t V_URLDecodeInternal( char *pchDecodeDest, int nDecodeDestLen, const char *pchEncodedSource, int nEncodedSourceLen, bool bUsePlusForSpace ) +{ + if ( nDecodeDestLen < nEncodedSourceLen ) + { + //AssertMsg( false, "V_URLDecode needs a dest buffer at least as large as the source" ); + return 0; + } + + int iDestPos = 0; + for( int i=0; i < nEncodedSourceLen; ++i ) + { + if ( bUsePlusForSpace && pchEncodedSource[i] == '+' ) + { + pchDecodeDest[ iDestPos++ ] = ' '; + } + else if ( pchEncodedSource[i] == '%' ) + { + // Percent signifies an encoded value, look ahead for the hex code, convert to numeric, and use that + + // First make sure we have 2 more chars + if ( i < nEncodedSourceLen - 2 ) + { + char cHexDigit1 = pchEncodedSource[i+1]; + char cHexDigit2 = pchEncodedSource[i+2]; + + // Turn the chars into a hex value, if they are not valid, then we'll + // just place the % and the following two chars direct into the string, + // even though this really shouldn't happen, who knows what bad clients + // may do with encoding. + bool bValid = false; + int iValue = iHexCharToInt( cHexDigit1 ); + if ( iValue != -1 ) + { + iValue *= 16; + int iValue2 = iHexCharToInt( cHexDigit2 ); + if ( iValue2 != -1 ) + { + iValue += iValue2; + pchDecodeDest[ iDestPos++ ] = (char)iValue; + bValid = true; + } + } + + if ( !bValid ) + { + pchDecodeDest[ iDestPos++ ] = '%'; + pchDecodeDest[ iDestPos++ ] = cHexDigit1; + pchDecodeDest[ iDestPos++ ] = cHexDigit2; + } + } + + // Skip ahead + i += 2; + } + else + { + pchDecodeDest[ iDestPos++ ] = pchEncodedSource[i]; + } + } + + // We may not have extra room to NULL terminate, since this can be used on raw data, but if we do + // go ahead and do it as this can avoid bugs. + if ( iDestPos < nDecodeDestLen ) + { + pchDecodeDest[iDestPos] = 0; + } + + return (size_t)iDestPos; +} + +//----------------------------------------------------------------------------- +// Purpose: Encodes a string (or binary data) from URL encoding format, see rfc1738 section 2.2. +// This version of the call isn't a strict RFC implementation, but uses + for space as is +// the standard in HTML form encoding, despite it not being part of the RFC. +// +// Dest buffer should be at least as large as source buffer to guarantee room for decode. +//----------------------------------------------------------------------------- +void V_URLEncode( char *pchDest, int nDestLen, const char *pchSource, int nSourceLen ) +{ + return V_URLEncodeInternal( pchDest, nDestLen, pchSource, nSourceLen, true, CharNeedsEscape_Component ); +} + + +void V_URLEncodeNoPlusForSpace( char *pchDest, int nDestLen, const char *pchSource, int nSourceLen ) +{ + return V_URLEncodeInternal( pchDest, nDestLen, pchSource, nSourceLen, false, CharNeedsEscape_Component ); +} + +void V_URLEncodeFullPath( char *pchDest, int nDestLen, const char *pchSource, int nSourceLen ) +{ + return V_URLEncodeInternal( pchDest, nDestLen, pchSource, nSourceLen, false, CharNeedsEscape_FullPath ); +} + +//----------------------------------------------------------------------------- +// Purpose: Decodes a string (or binary data) from URL encoding format, see rfc1738 section 2.2. +// This version of the call isn't a strict RFC implementation, but uses + for space as is +// the standard in HTML form encoding, despite it not being part of the RFC. +// +// Dest buffer should be at least as large as source buffer to guarantee room for decode. +// Dest buffer being the same as the source buffer (decode in-place) is explicitly allowed. +//----------------------------------------------------------------------------- +size_t V_URLDecode( char *pchDecodeDest, int nDecodeDestLen, const char *pchEncodedSource, int nEncodedSourceLen ) +{ + return V_URLDecodeInternal( pchDecodeDest, nDecodeDestLen, pchEncodedSource, nEncodedSourceLen, true ); +} + +size_t V_URLDecodeNoPlusForSpace( char *pchDecodeDest, int nDecodeDestLen, const char *pchEncodedSource, int nEncodedSourceLen ) +{ + return V_URLDecodeInternal( pchDecodeDest, nDecodeDestLen, pchEncodedSource, nEncodedSourceLen, false ); +} + +//----------------------------------------------------------------------------- +void V_StripExtension( std::string &in ) +{ + // Find the last dot. If it's followed by a dot or a slash, then it's part of a + // directory specifier like ../../somedir/./blah. + std::string::size_type test = in.rfind( '.' ); + if ( test != std::string::npos ) + { + // This handles things like ".\blah" or "c:\my@email.com\abc\def\geh" + // Which would otherwise wind up with "" and "c:\my@email", respectively. + if ( in.rfind( '\\' ) < test && in.rfind( '/' ) < test ) + { + in.resize( test ); + } + } +} + + +//----------------------------------------------------------------------------- +// Purpose: Tokenizes a string into a vector of strings +//----------------------------------------------------------------------------- +std::vector TokenizeString( const std::string & sString, char cToken ) +{ + std::vector vecStrings; + std::istringstream stream( sString ); + std::string s; + while ( std::getline( stream, s, cToken ) ) + { + vecStrings.push_back( s ); + } + + if ( !sString.empty() && sString.back() == cToken ) + { + vecStrings.push_back( "" ); + } + + return vecStrings; +} + +//----------------------------------------------------------------------------- +// Purpose: Repairs a should-be-UTF-8 string to a for-sure-is-UTF-8 string, plus return boolean if we subbed in '?' somewhere +//----------------------------------------------------------------------------- +bool RepairUTF8( const char *pbegin, const char *pend, std::string & sOutputUtf8 ) +{ + typedef std::codecvt_utf8 facet_type; + facet_type myfacet; + + std::mbstate_t mystate = std::mbstate_t(); + + sOutputUtf8.clear(); + sOutputUtf8.reserve( pend - pbegin ); + bool bSqueakyClean = true; + + const char *pmid = pbegin; + while ( pmid != pend ) + { + bool bHasError = false; + bool bHasValidData = false; + + char32_t out = 0xdeadbeef, *pout; + pbegin = pmid; + switch ( myfacet.in( mystate, pbegin, pend, pmid, &out, &out + 1, pout ) ) + { + case facet_type::ok: + bHasValidData = true; + break; + + case facet_type::noconv: + // unexpected! always converting type + bSqueakyClean = false; + break; + + case facet_type::partial: + bHasError = pbegin == pmid; + if ( bHasError ) + { + bSqueakyClean = false; + } + else + { + bHasValidData = true; + } + break; + + case facet_type::error: + bHasError = true; + bSqueakyClean = false; + break; + } + + if ( bHasValidData ) + { + // could convert back, but no need + for ( const char *p = pbegin; p != pmid; ++p ) + { + sOutputUtf8 += *p; + } + } + + if ( bHasError ) + { + sOutputUtf8 += '?'; + } + + if ( pmid == pbegin ) + { + pmid++; + } + } + + return bSqueakyClean; +} + +//----------------------------------------------------------------------------- +// Purpose: Repairs a should-be-UTF-8 string to a for-sure-is-UTF-8 string, plus return boolean if we subbed in '?' somewhere +//----------------------------------------------------------------------------- +bool RepairUTF8( const std::string & sInputUtf8, std::string & sOutputUtf8 ) +{ + return RepairUTF8( sInputUtf8.data(), sInputUtf8.data() + sInputUtf8.size(), sOutputUtf8 ); +} diff --git a/contrib/openvr/src/vrcommon/strtools_public.h b/contrib/openvr/src/vrcommon/strtools_public.h new file mode 100755 index 0000000..0e8e349 --- /dev/null +++ b/contrib/openvr/src/vrcommon/strtools_public.h @@ -0,0 +1,154 @@ +//========= Copyright Valve Corporation ============// +#pragma once + +#include +#include +#include +#include + +/** returns true if the string has the prefix */ +bool StringHasPrefix( const std::string & sString, const std::string & sPrefix ); +bool StringHasPrefixCaseSensitive( const std::string & sString, const std::string & sPrefix ); + +/** returns if the string has the suffix */ +bool StringHasSuffix( const std::string &sString, const std::string &sSuffix ); +bool StringHasSuffixCaseSensitive( const std::string &sString, const std::string &sSuffix ); + +/** converts a UTF-16 string to a UTF-8 string */ +std::string UTF16to8( const wchar_t * in ); +std::string UTF16to8( const std::wstring & in ); + +/** converts a UTF-8 string to a UTF-16 string */ +std::wstring UTF8to16(const char * in); +std::wstring UTF8to16( const std::string & in ); +#define Utf16FromUtf8 UTF8to16 + +#if defined( _WIN32 ) +std::string DefaultACPtoUTF8( const char *pszStr ); +#endif + +/** Repairs a should-be-UTF-8 string to a for-sure-is-UTF-8 string, plus return boolean if we subbed in '?' somewhere */ +bool RepairUTF8( const char *begin, const char *end, std::string & sOutputUtf8 ); +bool RepairUTF8( const std::string & sInputUtf8, std::string & sOutputUtf8 ); + +/** safely copy a string into a buffer */ +void strcpy_safe( char *pchBuffer, size_t unBufferSizeBytes, const char *pchSource ); +template< size_t bufferSize > +void strcpy_safe( char (& buffer) [ bufferSize ], const char *pchSource ) +{ + strcpy_safe( buffer, bufferSize, pchSource ); +} + +/** Turns printf-style format args into a std::string */ +std::string Format( const char *pchFormat, ... ); + + +/** converts a string to upper case */ +std::string StringToUpper( const std::string & sString ); + +/** converts a string to lower case */ +std::string StringToLower( const std::string & sString ); + +// we stricmp (from WIN) but it isn't POSIX - OSX/LINUX have strcasecmp so just inline bridge to it +#if defined( OSX ) || defined( LINUX ) +int stricmp(const char *pStr1, const char *pStr2); +#ifndef _stricmp +#define _stricmp stricmp +#endif +int strnicmp( const char *pStr1, const char *pStr2, size_t unBufferLen ); +#ifndef _strnicmp +#define _strnicmp strnicmp +#endif + +#ifndef _vsnprintf_s +#define _vsnprintf_s vsnprintf +#endif + +#define _TRUNCATE ((size_t)-1) + +#endif + +#if defined( OSX ) +// behaviors ensure NULL-termination at least as well as _TRUNCATE does, but +// wcsncpy_s/strncpy_s can non-NULL-terminate, wcslcpy/strlcpy can not. +inline errno_t wcsncpy_s(wchar_t *strDest, size_t numberOfElements, const wchar_t *strSource, size_t count) +{ + return wcslcpy(strDest, strSource, numberOfElements); +} + +inline errno_t strncpy_s(char *strDest, size_t numberOfElements, const char *strSource, size_t count) +{ + return strlcpy(strDest, strSource, numberOfElements); +} + +#endif + +#if defined( LINUX ) +// this implementation does not return whether or not the destination was +// truncated, but that is straightforward to fix if anybody actually needs the +// return code. +#include "string.h" +inline void wcsncpy_s(wchar_t *strDest, size_t numberOfElements, const wchar_t *strSource, size_t count) +{ + wcsncpy(strDest, strSource, numberOfElements); + strDest[numberOfElements-1] = '\0'; +} + +inline void strncpy_s(char *strDest, size_t numberOfElements, const char *strSource, size_t count) +{ + strncpy(strDest, strSource, numberOfElements); + strDest[numberOfElements-1] = '\0'; +} + +#endif + +#if defined( _WIN32 ) && _MSC_VER < 1800 +inline uint64_t strtoull(const char *str, char **endptr, int base) { return _strtoui64( str, endptr, base ); } +#endif + +/* Handles copying a std::string into a buffer as would be provided in an API */ +uint32_t ReturnStdString( const std::string & sValue, char *pchBuffer, uint32_t unBufferLen ); + +/** Returns a std::string from a uint64_t */ +std::string Uint64ToString( uint64_t ulValue ); + +/** returns a uint64_t from a string */ +uint64_t StringToUint64( const std::string & sValue ); + +//----------------------------------------------------------------------------- +// Purpose: Encodes a string (or binary data) from URL encoding format, see rfc1738 section 2.2. +// This version of the call isn't a strict RFC implementation, but uses + for space as is +// the standard in HTML form encoding, despite it not being part of the RFC. +// +// Dest buffer should be at least as large as source buffer to guarantee room for decode. +//----------------------------------------------------------------------------- +void V_URLEncode( char *pchDest, int nDestLen, const char *pchSource, int nSourceLen ); + +/** Same as V_URLEncode, but without plus for space. */ +void V_URLEncodeNoPlusForSpace( char *pchDest, int nDestLen, const char *pchSource, int nSourceLen ); + +/** Same as V_URLEncodeNoPlusForSpace, but without escaping / and : */ +void V_URLEncodeFullPath( char *pchDest, int nDestLen, const char *pchSource, int nSourceLen ); + + +//----------------------------------------------------------------------------- +// Purpose: Decodes a string (or binary data) from URL encoding format, see rfc1738 section 2.2. +// This version of the call isn't a strict RFC implementation, but uses + for space as is +// the standard in HTML form encoding, despite it not being part of the RFC. +// +// Dest buffer should be at least as large as source buffer to guarantee room for decode. +// Dest buffer being the same as the source buffer (decode in-place) is explicitly allowed. +//----------------------------------------------------------------------------- +size_t V_URLDecode( char *pchDecodeDest, int nDecodeDestLen, const char *pchEncodedSource, int nEncodedSourceLen ); + +/** Same as V_URLDecode, but without plus for space. */ +size_t V_URLDecodeNoPlusForSpace( char *pchDecodeDest, int nDecodeDestLen, const char *pchEncodedSource, int nEncodedSourceLen ); + +//----------------------------------------------------------------------------- +// Purpose: strip extension from a path +//----------------------------------------------------------------------------- +void V_StripExtension( std::string &in ); + + +/** Tokenizes a string into a vector of strings */ +std::vector TokenizeString( const std::string & sString, char cToken ); diff --git a/contrib/openvr/src/vrcommon/vrpathregistry_public.cpp b/contrib/openvr/src/vrcommon/vrpathregistry_public.cpp new file mode 100755 index 0000000..3c991b4 --- /dev/null +++ b/contrib/openvr/src/vrcommon/vrpathregistry_public.cpp @@ -0,0 +1,483 @@ +//========= Copyright Valve Corporation ============// + +#include +#include +#include +#include +#include +#include + +#if defined( WIN32 ) +#include +#include + +#undef GetEnvironmentVariable +#elif defined OSX +#include +#include +#elif defined(LINUX) +#include +#include +#endif + +#include +#include + +#ifndef VRLog + #if defined( __MINGW32__ ) + #define VRLog(args...) fprintf(stderr, args) + #elif defined( WIN32 ) + #define VRLog(fmt, ...) fprintf(stderr, fmt, __VA_ARGS__) + #else + #define VRLog(args...) fprintf(stderr, args) + #endif +#endif + +/** Returns the root of the directory the system wants us to store user config data in */ +static std::string GetAppSettingsPath() +{ +#if defined( WIN32 ) + WCHAR rwchPath[MAX_PATH]; + + if( !SUCCEEDED( SHGetFolderPathW( NULL, CSIDL_LOCAL_APPDATA | CSIDL_FLAG_CREATE, NULL, 0, rwchPath ) ) ) + { + return ""; + } + + // Convert the path to UTF-8 and store in the output + std::string sUserPath = UTF16to8( rwchPath ); + + return sUserPath; +#elif defined( OSX ) + std::string sSettingsDir; + @autoreleasepool { + // Search for the path + NSArray *paths = NSSearchPathForDirectoriesInDomains( NSApplicationSupportDirectory, NSUserDomainMask, YES ); + if ( [paths count] == 0 ) + { + return ""; + } + + NSString *resolvedPath = [paths objectAtIndex:0]; + resolvedPath = [resolvedPath stringByAppendingPathComponent: @"OpenVR"]; + + if ( ![[NSFileManager defaultManager] createDirectoryAtPath: resolvedPath withIntermediateDirectories:YES attributes:nil error:nil] ) + { + return ""; + } + + sSettingsDir.assign( [resolvedPath UTF8String] ); + } + return sSettingsDir; +#elif defined( LINUX ) + + // As defined by XDG Base Directory Specification + // https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html + + const char *pchHome = getenv("XDG_CONFIG_HOME"); + if ( ( pchHome != NULL) && ( pchHome[0] != '\0' ) ) + { + return pchHome; + } + + // + // XDG_CONFIG_HOME is not defined, use ~/.config instead + // + pchHome = getenv( "HOME" ); + if ( pchHome == NULL ) + { + return ""; + } + + std::string sUserPath( pchHome ); + sUserPath = Path_Join( sUserPath, ".config" ); + return sUserPath; +#else + #warning "Unsupported platform" +#endif +} + + +// --------------------------------------------------------------------------- +// Purpose: Constructor +// --------------------------------------------------------------------------- +CVRPathRegistry_Public::CVRPathRegistry_Public() +{ + +} + +// --------------------------------------------------------------------------- +// Purpose: Computes the registry filename +// --------------------------------------------------------------------------- +std::string CVRPathRegistry_Public::GetOpenVRConfigPath() +{ + std::string sConfigPath = GetAppSettingsPath(); + if( sConfigPath.empty() ) + return ""; + +#if defined( _WIN32 ) || defined( LINUX ) + sConfigPath = Path_Join( sConfigPath, "openvr" ); +#elif defined ( OSX ) + sConfigPath = Path_Join( sConfigPath, ".openvr" ); +#else + #warning "Unsupported platform" +#endif + sConfigPath = Path_FixSlashes( sConfigPath ); + return sConfigPath; +} + + + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +std::string CVRPathRegistry_Public::GetVRPathRegistryFilename() +{ + std::string sOverridePath = GetEnvironmentVariable( "VR_PATHREG_OVERRIDE" ); + if ( !sOverridePath.empty() ) + return sOverridePath; + + std::string sPath = GetOpenVRConfigPath(); + if ( sPath.empty() ) + return ""; + +#if defined( _WIN32 ) + sPath = Path_Join( sPath, "openvrpaths.vrpath" ); +#elif defined ( POSIX ) + sPath = Path_Join( sPath, "openvrpaths.vrpath" ); +#else + #error "Unsupported platform" +#endif + sPath = Path_FixSlashes( sPath ); + return sPath; +} + + +// --------------------------------------------------------------------------- +// Purpose: Converts JSON to a history array +// --------------------------------------------------------------------------- +static void ParseStringListFromJson( std::vector< std::string > *pvecHistory, const Json::Value & root, const char *pchArrayName ) +{ + if( !root.isMember( pchArrayName ) ) + return; + + const Json::Value & arrayNode = root[ pchArrayName ]; + if( !arrayNode ) + { + VRLog( "VR Path Registry node %s is not an array\n", pchArrayName ); + return; + } + + pvecHistory->clear(); + pvecHistory->reserve( arrayNode.size() ); + for( uint32_t unIndex = 0; unIndex < arrayNode.size(); unIndex++ ) + { + std::string sPath( arrayNode[ unIndex ].asString() ); + pvecHistory->push_back( sPath ); + } +} + + +// --------------------------------------------------------------------------- +// Purpose: Converts a history array to JSON +// --------------------------------------------------------------------------- +static void StringListToJson( const std::vector< std::string > & vecHistory, Json::Value & root, const char *pchArrayName ) +{ + Json::Value & arrayNode = root[ pchArrayName ]; + for( auto i = vecHistory.begin(); i != vecHistory.end(); i++ ) + { + arrayNode.append( *i ); + } +} + + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +bool CVRPathRegistry_Public::ToJsonString( std::string &sJsonString ) +{ + std::string sRegPath = GetVRPathRegistryFilename(); + if( sRegPath.empty() ) + return false; + + std::string sRegistryContents = Path_ReadTextFile( sRegPath ); + if( sRegistryContents.empty() ) + return false; + + sJsonString = sRegistryContents; + + return true; +} + + +// --------------------------------------------------------------------------- +// Purpose: Loads the config file from its well known location +// --------------------------------------------------------------------------- +bool CVRPathRegistry_Public::BLoadFromFile( std::string *psLoadError ) +{ + std::string sRegPath = GetVRPathRegistryFilename(); + if( sRegPath.empty() ) + { + if ( psLoadError ) + { + *psLoadError = "Unable to determine VR Path Registry filename"; + } + return false; + } + + std::string sRegistryContents = Path_ReadTextFile( sRegPath ); + if( sRegistryContents.empty() ) + { + if ( psLoadError ) + { + *psLoadError = "Unable to read VR Path Registry from " + sRegPath; + } + return false; + } + + Json::Value root; + Json::CharReaderBuilder builder; + std::istringstream istream( sRegistryContents ); + std::string sErrors; + + try { + if ( !parseFromStream( builder, istream, &root, &sErrors ) ) + { + if ( psLoadError ) + { + *psLoadError = "Unable to parse " + sRegPath + ": " + sErrors; + } + return false; + } + + ParseStringListFromJson( &m_vecRuntimePath, root, "runtime" ); + ParseStringListFromJson( &m_vecConfigPath, root, "config" ); + ParseStringListFromJson( &m_vecLogPath, root, "log" ); + if ( root.isMember( "external_drivers" ) && root["external_drivers"].isArray() ) + { + ParseStringListFromJson( &m_vecExternalDrivers, root, "external_drivers" ); + } + } + catch ( ... ) + { + if ( psLoadError ) + { + *psLoadError = "Unable to parse " + sRegPath + ": exception thrown in JSON library"; + } + return false; + } + + return true; +} + + +// --------------------------------------------------------------------------- +// Purpose: Saves the config file to its well known location +// --------------------------------------------------------------------------- +bool CVRPathRegistry_Public::BSaveToFile() const +{ + std::string sRegPath = GetVRPathRegistryFilename(); + if( sRegPath.empty() ) + return false; + + Json::Value root; + + root[ "version" ] = 1; + root[ "jsonid" ] = "vrpathreg"; + + StringListToJson( m_vecRuntimePath, root, "runtime" ); + StringListToJson( m_vecConfigPath, root, "config" ); + StringListToJson( m_vecLogPath, root, "log" ); + StringListToJson( m_vecExternalDrivers, root, "external_drivers" ); + + Json::StreamWriterBuilder builder; + std::string sRegistryContents = Json::writeString( builder, root ); + + // make sure the directory we're writing into actually exists + std::string sRegDirectory = Path_StripFilename( sRegPath ); + if( !BCreateDirectoryRecursive( sRegDirectory.c_str() ) ) + { + VRLog( "Unable to create path registry directory %s\n", sRegDirectory.c_str() ); + return false; + } + + if( !Path_WriteStringToTextFile( sRegPath, sRegistryContents.c_str() ) ) + { + VRLog( "Unable to write VR path registry to %s\n", sRegPath.c_str() ); + return false; + } + + return true; +} + + +// --------------------------------------------------------------------------- +// Purpose: Returns the current runtime path or NULL if no path is configured. +// --------------------------------------------------------------------------- +std::string CVRPathRegistry_Public::GetRuntimePath() const +{ + if( m_vecRuntimePath.empty() ) + return ""; + else + return m_vecRuntimePath.front().c_str(); +} + + +// --------------------------------------------------------------------------- +// Purpose: Returns the current config path or NULL if no path is configured. +// --------------------------------------------------------------------------- +std::string CVRPathRegistry_Public::GetConfigPath() const +{ + if( m_vecConfigPath.empty() ) + return ""; + else + return m_vecConfigPath.front().c_str(); +} + + +// --------------------------------------------------------------------------- +// Purpose: Returns the current log path or NULL if no path is configured. +// --------------------------------------------------------------------------- +std::string CVRPathRegistry_Public::GetLogPath() const +{ + if( m_vecLogPath.empty() ) + return ""; + else + return m_vecLogPath.front().c_str(); +} + + + +// --------------------------------------------------------------------------- +// Purpose: Returns paths using the path registry and the provided override +// values. Pass NULL for any paths you don't care about. +// --------------------------------------------------------------------------- +bool CVRPathRegistry_Public::GetPaths( std::string *psRuntimePath, std::string *psConfigPath, std::string *psLogPath, const char *pchConfigPathOverride, const char *pchLogPathOverride, std::vector *pvecExternalDrivers ) +{ + std::string sLoadError; + CVRPathRegistry_Public pathReg; + bool bLoadedRegistry = pathReg.BLoadFromFile( &sLoadError ); + int nCountEnvironmentVariables = 0; + int nRequestedPaths = 0; + + if( psRuntimePath ) + { + nRequestedPaths++; + if ( GetEnvironmentVariable( k_pchRuntimeOverrideVar ).length() != 0 ) + { + *psRuntimePath = GetEnvironmentVariable( k_pchRuntimeOverrideVar ); + nCountEnvironmentVariables++; + } + else if( !pathReg.GetRuntimePath().empty() ) + { + *psRuntimePath = pathReg.GetRuntimePath(); + } + else + { + *psRuntimePath = ""; + } + } + + if( psConfigPath ) + { + nRequestedPaths++; + if ( GetEnvironmentVariable( k_pchConfigOverrideVar ).length() != 0 ) + { + *psConfigPath = GetEnvironmentVariable( k_pchConfigOverrideVar ); + nCountEnvironmentVariables++; + } + else if( pchConfigPathOverride ) + { + *psConfigPath = pchConfigPathOverride; + } + else if( !pathReg.GetConfigPath().empty() ) + { + *psConfigPath = pathReg.GetConfigPath(); + } + else + { + *psConfigPath = ""; + } + } + + if( psLogPath ) + { + nRequestedPaths++; + if ( GetEnvironmentVariable( k_pchLogOverrideVar ).length() != 0 ) + { + *psLogPath = GetEnvironmentVariable( k_pchLogOverrideVar ); + nCountEnvironmentVariables++; + } + else if( pchLogPathOverride ) + { + *psLogPath = pchLogPathOverride; + } + else if( !pathReg.GetLogPath().empty() ) + { + *psLogPath = pathReg.GetLogPath(); + } + else + { + *psLogPath = ""; + } + } + + if ( pvecExternalDrivers ) + { + *pvecExternalDrivers = pathReg.m_vecExternalDrivers; + } + + if ( nCountEnvironmentVariables == nRequestedPaths ) + { + // all three environment variables were set, so we don't need the physical file + return true; + } + else if( !bLoadedRegistry ) + { + VRLog( "%s\n", sLoadError.c_str() ); + } + + return bLoadedRegistry; +} + + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +uint32_t CVRPathRegistry_Public::GetSteamAppId() +{ +#if !defined( REL_BRANCH_ONLY ) + uint32_t nSteamAppId = k_unSteamVRMainAppId; +#else + uint32_t nSteamAppId = k_unSteamVRAppId; +#endif + + return nSteamAppId; +} + + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +bool CVRPathRegistry_Public::IsSteamVRMain() +{ +#if defined( REL_BRANCH_ONLY ) + return false; +#else + return true; +#endif +} + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +uint32_t CVRPathRegistry_Public::InitSteamAppId() +{ + uint32_t nSteamAppId = CVRPathRegistry_Public::GetSteamAppId(); + + // Forcefully setting to what it should be before SteamAPI_Init() since SteamVR is more often + // started as child processes of the game app and otherwise Steam then considers us as the + // wrong app id. + SetEnvironmentVariable( "SteamAppId", std::to_string( nSteamAppId ).c_str() ); + SetEnvironmentVariable( "SteamGameId", std::to_string( nSteamAppId ).c_str() ); + + return nSteamAppId; +} + diff --git a/contrib/openvr/src/vrcommon/vrpathregistry_public.h b/contrib/openvr/src/vrcommon/vrpathregistry_public.h new file mode 100755 index 0000000..6563286 --- /dev/null +++ b/contrib/openvr/src/vrcommon/vrpathregistry_public.h @@ -0,0 +1,52 @@ +//========= Copyright Valve Corporation ============// +#pragma once + +#include +#include +#include + +static const char *k_pchRuntimeOverrideVar = "VR_OVERRIDE"; +static const char *k_pchConfigOverrideVar = "VR_CONFIG_PATH"; +static const char *k_pchLogOverrideVar = "VR_LOG_PATH"; + +static const uint32_t k_unSteamVRAppId = 250820; +static const uint32_t k_unSteamVRMainAppId = 330050; + + +class CVRPathRegistry_Public +{ +public: + static std::string GetVRPathRegistryFilename(); + static std::string GetOpenVRConfigPath(); + static uint32_t GetSteamAppId(); + static bool IsSteamVRMain(); + static uint32_t InitSteamAppId(); + +public: + CVRPathRegistry_Public(); + + /** Returns paths using the path registry and the provided override values. Pass NULL for any paths you don't care about. + * Returns false if the path registry could not be read. Valid paths might still be returned based on environment variables. */ + static bool GetPaths( std::string *psRuntimePath, std::string *psConfigPath, std::string *psLogPath, const char *pchConfigPathOverride, const char *pchLogPathOverride, std::vector *pvecExternalDrivers = NULL ); + + bool BLoadFromFile( std::string *psError = nullptr ); + bool BSaveToFile() const; + + bool ToJsonString( std::string &sJsonString ); + + // methods to get the current values + std::string GetRuntimePath() const; + std::string GetConfigPath() const; + std::string GetLogPath() const; + +protected: + typedef std::vector< std::string > StringVector_t; + + // index 0 is the current setting + StringVector_t m_vecRuntimePath; + StringVector_t m_vecLogPath; + StringVector_t m_vecConfigPath; + + // full list of external drivers + StringVector_t m_vecExternalDrivers; +}; From c3723ac58a2513c5f519b5a8f6fe78a6647bd219 Mon Sep 17 00:00:00 2001 From: dsc Date: Mon, 5 Apr 2021 13:37:41 +0200 Subject: [PATCH 04/15] Initial QML interface code --- src/vr/assets/img/alarm/alarm_activated.png | Bin 0 -> 4703 bytes .../outline_play_pause_white_24dp.svg | 12 + .../outline_skip_next_white_24dp.svg | 1 + .../outline_skip_previous_white_24dp.svg | 1 + .../media_keys/outline_stop_white_24dp.svg | 1 + .../assets/img/audio/microphone/mic_off.svg | 75 ++++ src/vr/assets/img/audio/microphone/mic_on.svg | 70 +++ .../img/audio/microphone/ptm_notification.png | Bin 0 -> 4765 bytes .../img/audio/microphone/ptt_notification.png | Bin 0 -> 5061 bytes .../img/audio/microphone/ptt_notification.svg | 85 ++++ .../assets/img/audio/speaker/speaker_off.svg | 1 + .../assets/img/audio/speaker/speaker_on.svg | 1 + src/vr/assets/img/battery/battery_0.png | Bin 0 -> 26550 bytes src/vr/assets/img/battery/battery_1.png | Bin 0 -> 28188 bytes src/vr/assets/img/battery/battery_2.png | Bin 0 -> 28783 bytes src/vr/assets/img/battery/battery_3.png | Bin 0 -> 29252 bytes src/vr/assets/img/battery/battery_4.png | Bin 0 -> 29528 bytes src/vr/assets/img/battery/battery_5.png | Bin 0 -> 29837 bytes src/vr/assets/img/chaperone/centermark.png | Bin 0 -> 4268 bytes src/vr/assets/img/chaperone/centermarkl1.png | Bin 0 -> 5386 bytes src/vr/assets/img/chaperone/centermarkl2.png | Bin 0 -> 5550 bytes src/vr/assets/img/chaperone/centermarkl3.png | Bin 0 -> 5640 bytes src/vr/assets/img/chaperone/centermarkr1.png | Bin 0 -> 5435 bytes src/vr/assets/img/chaperone/centermarkr2.png | Bin 0 -> 5624 bytes src/vr/assets/img/chaperone/centermarkr3.png | Bin 0 -> 5700 bytes src/vr/assets/img/chest.png | Bin 0 -> 115071 bytes src/vr/assets/img/common/backarrow.svg | 76 ++++ src/vr/assets/img/common/check.svg | 1 + src/vr/assets/img/confirmed.png | Bin 0 -> 54212 bytes src/vr/assets/img/cpus.png | Bin 0 -> 169359 bytes src/vr/assets/img/cpus.svg | 1 + src/vr/assets/img/dog.gif | Bin 0 -> 23141 bytes src/vr/assets/img/dog2.gif | Bin 0 -> 31577 bytes src/vr/assets/img/expired.png | Bin 0 -> 28522 bytes src/vr/assets/img/grass.png | Bin 0 -> 7535 bytes src/vr/assets/img/hypnotoad.png | Bin 0 -> 21072 bytes src/vr/assets/img/icons/advicon256px.ico | Bin 0 -> 42242 bytes src/vr/assets/img/icons/thumbicon.png | Bin 0 -> 32776 bytes src/vr/assets/img/illuminati.png | Bin 0 -> 723339 bytes src/vr/assets/img/info.png | Bin 0 -> 10114 bytes .../img/main_menu_icons/audio_tab_icon.svg | 12 + .../img/main_menu_icons/bindings_tab_icon.svg | 14 + .../main_menu_icons/chaperone_tab_icon.svg | 12 + .../img/main_menu_icons/motion_tab_icon.svg | 14 + .../img/main_menu_icons/offsets_tab_icon.svg | 13 + .../img/main_menu_icons/rotation_tab_icon.svg | 13 + .../img/main_menu_icons/settings_tab_icon.svg | 17 + .../main_menu_icons/space_fix_tab_icon.svg | 12 + .../main_menu_icons/statistics_tab_icon.svg | 13 + .../img/main_menu_icons/steamvr_tab_icon.svg | 12 + .../main_menu_icons/utilities_tab_icon.svg | 12 + .../img/main_menu_icons/video_tab_icon.svg | 12 + src/vr/assets/img/receive.svg | 1 + src/vr/assets/img/rotation/autoturn.png | Bin 0 -> 4270 bytes src/vr/assets/img/rotation/noautoturn.png | Bin 0 -> 13064 bytes src/vr/assets/img/rotation/noautoturn.svg | 120 ++++++ src/vr/assets/img/send.png | Bin 0 -> 12762 bytes src/vr/assets/img/status_connected.svg | 173 ++++++++ src/vr/assets/img/status_disconnected.svg | 293 +++++++++++++ src/vr/assets/img/status_lagging.svg | 173 ++++++++ src/vr/assets/img/status_waiting.svg | 398 ++++++++++++++++++ src/vr/assets/img/tutorial.png | Bin 0 -> 185607 bytes src/vr/assets/img/video/color.png | Bin 0 -> 1475 bytes src/vr/assets/img/video/dimmer.png | Bin 0 -> 12392 bytes src/vr/assets/img/wizard.png | Bin 0 -> 73612 bytes src/vr/main.qml | 353 ++++++++++++++++ src/vr/qml.qrc | 87 ++++ src/vr/qml/AboutPage.qml | 78 ++++ src/vr/qml/CreateWalletDialog.qml | 12 + src/vr/qml/DashboardPage.qml | 183 ++++++++ src/vr/qml/WalletPage.qml | 82 ++++ src/vr/qml/common/FullWidthSliderBox.qml | 93 ++++ src/vr/qml/common/HourComboBox.qml | 49 +++ src/vr/qml/common/LineSeparator.qml | 15 + src/vr/qml/common/MinuteSecondComboBox.qml | 85 ++++ src/vr/qml/common/MyComboBox.qml | 73 ++++ src/vr/qml/common/MyDialogOkCancelPopup.qml | 99 +++++ src/vr/qml/common/MyDialogOkPopup.qml | 93 ++++ src/vr/qml/common/MyNumPad.qml | 136 ++++++ src/vr/qml/common/MyNumPadButton.qml | 40 ++ src/vr/qml/common/MyNumPadSendAmount.qml | 172 ++++++++ src/vr/qml/common/MyPushButton.qml | 62 +++ src/vr/qml/common/MyPushButton2.qml | 29 ++ src/vr/qml/common/MyRadioButton.qml | 24 ++ src/vr/qml/common/MyResources.qml | 12 + src/vr/qml/common/MySlider.qml | 54 +++ src/vr/qml/common/MyStackViewPage.qml | 275 ++++++++++++ src/vr/qml/common/MyText.qml | 15 + src/vr/qml/common/MyTextField.qml | 42 ++ src/vr/qml/common/MyToggleButton.qml | 65 +++ src/vr/qml/common/TimeAssembly.qml | 55 +++ src/vr/qml/common/mainwidget.qml | 128 ++++++ src/vr/qml/dashboard/CreateWallet.qml | 0 src/vr/qml/dashboard/HelpPage.qml | 0 src/vr/qml/wallet/HistoryTable.qml | 189 +++++++++ src/vr/qml/wallet/ReceivePage.qml | 266 ++++++++++++ src/vr/qml/wallet/WalletDashBoardPage.qml | 101 +++++ src/vr/qml/wallet/send/SendPage.qml | 123 ++++++ src/vr/qml/wallet/send/SendPageDashboard.qml | 65 +++ src/vr/qml/wallet/send/SendPageNavBack.qml | 56 +++ src/vr/qml/wallet/send/SendPagePIN.qml | 269 ++++++++++++ src/vr/qml/wallet/send/SendPageQR.qml | 46 ++ src/vr/qml/wallet/send/SendPageTransfer.qml | 207 +++++++++ 103 files changed, 5372 insertions(+) create mode 100755 src/vr/assets/img/alarm/alarm_activated.png create mode 100755 src/vr/assets/img/audio/media_keys/outline_play_pause_white_24dp.svg create mode 100755 src/vr/assets/img/audio/media_keys/outline_skip_next_white_24dp.svg create mode 100755 src/vr/assets/img/audio/media_keys/outline_skip_previous_white_24dp.svg create mode 100755 src/vr/assets/img/audio/media_keys/outline_stop_white_24dp.svg create mode 100755 src/vr/assets/img/audio/microphone/mic_off.svg create mode 100755 src/vr/assets/img/audio/microphone/mic_on.svg create mode 100755 src/vr/assets/img/audio/microphone/ptm_notification.png create mode 100755 src/vr/assets/img/audio/microphone/ptt_notification.png create mode 100755 src/vr/assets/img/audio/microphone/ptt_notification.svg create mode 100755 src/vr/assets/img/audio/speaker/speaker_off.svg create mode 100755 src/vr/assets/img/audio/speaker/speaker_on.svg create mode 100755 src/vr/assets/img/battery/battery_0.png create mode 100755 src/vr/assets/img/battery/battery_1.png create mode 100755 src/vr/assets/img/battery/battery_2.png create mode 100755 src/vr/assets/img/battery/battery_3.png create mode 100755 src/vr/assets/img/battery/battery_4.png create mode 100755 src/vr/assets/img/battery/battery_5.png create mode 100755 src/vr/assets/img/chaperone/centermark.png create mode 100755 src/vr/assets/img/chaperone/centermarkl1.png create mode 100755 src/vr/assets/img/chaperone/centermarkl2.png create mode 100755 src/vr/assets/img/chaperone/centermarkl3.png create mode 100755 src/vr/assets/img/chaperone/centermarkr1.png create mode 100755 src/vr/assets/img/chaperone/centermarkr2.png create mode 100755 src/vr/assets/img/chaperone/centermarkr3.png create mode 100644 src/vr/assets/img/chest.png create mode 100755 src/vr/assets/img/common/backarrow.svg create mode 100755 src/vr/assets/img/common/check.svg create mode 100755 src/vr/assets/img/confirmed.png create mode 100644 src/vr/assets/img/cpus.png create mode 100644 src/vr/assets/img/cpus.svg create mode 100644 src/vr/assets/img/dog.gif create mode 100644 src/vr/assets/img/dog2.gif create mode 100755 src/vr/assets/img/expired.png create mode 100644 src/vr/assets/img/grass.png create mode 100644 src/vr/assets/img/hypnotoad.png create mode 100755 src/vr/assets/img/icons/advicon256px.ico create mode 100755 src/vr/assets/img/icons/thumbicon.png create mode 100644 src/vr/assets/img/illuminati.png create mode 100755 src/vr/assets/img/info.png create mode 100755 src/vr/assets/img/main_menu_icons/audio_tab_icon.svg create mode 100755 src/vr/assets/img/main_menu_icons/bindings_tab_icon.svg create mode 100755 src/vr/assets/img/main_menu_icons/chaperone_tab_icon.svg create mode 100755 src/vr/assets/img/main_menu_icons/motion_tab_icon.svg create mode 100755 src/vr/assets/img/main_menu_icons/offsets_tab_icon.svg create mode 100755 src/vr/assets/img/main_menu_icons/rotation_tab_icon.svg create mode 100755 src/vr/assets/img/main_menu_icons/settings_tab_icon.svg create mode 100755 src/vr/assets/img/main_menu_icons/space_fix_tab_icon.svg create mode 100755 src/vr/assets/img/main_menu_icons/statistics_tab_icon.svg create mode 100755 src/vr/assets/img/main_menu_icons/steamvr_tab_icon.svg create mode 100755 src/vr/assets/img/main_menu_icons/utilities_tab_icon.svg create mode 100755 src/vr/assets/img/main_menu_icons/video_tab_icon.svg create mode 100755 src/vr/assets/img/receive.svg create mode 100755 src/vr/assets/img/rotation/autoturn.png create mode 100755 src/vr/assets/img/rotation/noautoturn.png create mode 100755 src/vr/assets/img/rotation/noautoturn.svg create mode 100755 src/vr/assets/img/send.png create mode 100644 src/vr/assets/img/status_connected.svg create mode 100644 src/vr/assets/img/status_disconnected.svg create mode 100644 src/vr/assets/img/status_lagging.svg create mode 100644 src/vr/assets/img/status_waiting.svg create mode 100644 src/vr/assets/img/tutorial.png create mode 100755 src/vr/assets/img/video/color.png create mode 100755 src/vr/assets/img/video/dimmer.png create mode 100644 src/vr/assets/img/wizard.png create mode 100644 src/vr/main.qml create mode 100644 src/vr/qml.qrc create mode 100644 src/vr/qml/AboutPage.qml create mode 100644 src/vr/qml/CreateWalletDialog.qml create mode 100644 src/vr/qml/DashboardPage.qml create mode 100755 src/vr/qml/WalletPage.qml create mode 100755 src/vr/qml/common/FullWidthSliderBox.qml create mode 100755 src/vr/qml/common/HourComboBox.qml create mode 100755 src/vr/qml/common/LineSeparator.qml create mode 100755 src/vr/qml/common/MinuteSecondComboBox.qml create mode 100755 src/vr/qml/common/MyComboBox.qml create mode 100755 src/vr/qml/common/MyDialogOkCancelPopup.qml create mode 100755 src/vr/qml/common/MyDialogOkPopup.qml create mode 100644 src/vr/qml/common/MyNumPad.qml create mode 100644 src/vr/qml/common/MyNumPadButton.qml create mode 100644 src/vr/qml/common/MyNumPadSendAmount.qml create mode 100755 src/vr/qml/common/MyPushButton.qml create mode 100755 src/vr/qml/common/MyPushButton2.qml create mode 100755 src/vr/qml/common/MyRadioButton.qml create mode 100755 src/vr/qml/common/MyResources.qml create mode 100755 src/vr/qml/common/MySlider.qml create mode 100755 src/vr/qml/common/MyStackViewPage.qml create mode 100755 src/vr/qml/common/MyText.qml create mode 100755 src/vr/qml/common/MyTextField.qml create mode 100755 src/vr/qml/common/MyToggleButton.qml create mode 100755 src/vr/qml/common/TimeAssembly.qml create mode 100755 src/vr/qml/common/mainwidget.qml create mode 100644 src/vr/qml/dashboard/CreateWallet.qml create mode 100644 src/vr/qml/dashboard/HelpPage.qml create mode 100755 src/vr/qml/wallet/HistoryTable.qml create mode 100755 src/vr/qml/wallet/ReceivePage.qml create mode 100644 src/vr/qml/wallet/WalletDashBoardPage.qml create mode 100755 src/vr/qml/wallet/send/SendPage.qml create mode 100644 src/vr/qml/wallet/send/SendPageDashboard.qml create mode 100644 src/vr/qml/wallet/send/SendPageNavBack.qml create mode 100644 src/vr/qml/wallet/send/SendPagePIN.qml create mode 100644 src/vr/qml/wallet/send/SendPageQR.qml create mode 100644 src/vr/qml/wallet/send/SendPageTransfer.qml diff --git a/src/vr/assets/img/alarm/alarm_activated.png b/src/vr/assets/img/alarm/alarm_activated.png new file mode 100755 index 0000000000000000000000000000000000000000..58bcc95fb4be2d5ee1fcc1d7a395c7f356699c39 GIT binary patch literal 4703 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 TQq;aEBw%4;bF1=(NA&*y5I+6V literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/audio/media_keys/outline_play_pause_white_24dp.svg b/src/vr/assets/img/audio/media_keys/outline_play_pause_white_24dp.svg new file mode 100755 index 0000000..03a3ca1 --- /dev/null +++ b/src/vr/assets/img/audio/media_keys/outline_play_pause_white_24dp.svg @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/src/vr/assets/img/audio/media_keys/outline_skip_next_white_24dp.svg b/src/vr/assets/img/audio/media_keys/outline_skip_next_white_24dp.svg new file mode 100755 index 0000000..23fa6ea --- /dev/null +++ b/src/vr/assets/img/audio/media_keys/outline_skip_next_white_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/vr/assets/img/audio/media_keys/outline_skip_previous_white_24dp.svg b/src/vr/assets/img/audio/media_keys/outline_skip_previous_white_24dp.svg new file mode 100755 index 0000000..1d08e59 --- /dev/null +++ b/src/vr/assets/img/audio/media_keys/outline_skip_previous_white_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/vr/assets/img/audio/media_keys/outline_stop_white_24dp.svg b/src/vr/assets/img/audio/media_keys/outline_stop_white_24dp.svg new file mode 100755 index 0000000..2123cee --- /dev/null +++ b/src/vr/assets/img/audio/media_keys/outline_stop_white_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/vr/assets/img/audio/microphone/mic_off.svg b/src/vr/assets/img/audio/microphone/mic_off.svg new file mode 100755 index 0000000..a03af97 --- /dev/null +++ b/src/vr/assets/img/audio/microphone/mic_off.svg @@ -0,0 +1,75 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/src/vr/assets/img/audio/microphone/mic_on.svg b/src/vr/assets/img/audio/microphone/mic_on.svg new file mode 100755 index 0000000..7c32e56 --- /dev/null +++ b/src/vr/assets/img/audio/microphone/mic_on.svg @@ -0,0 +1,70 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/src/vr/assets/img/audio/microphone/ptm_notification.png b/src/vr/assets/img/audio/microphone/ptm_notification.png new file mode 100755 index 0000000000000000000000000000000000000000..3bfa181637c17c2359aee2af86cc17f7642600af GIT binary patch literal 4765 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 literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/audio/microphone/ptt_notification.png b/src/vr/assets/img/audio/microphone/ptt_notification.png new file mode 100755 index 0000000000000000000000000000000000000000..cf8d3f91427115db6cba286e74024a0d73e01121 GIT binary patch literal 5061 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 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/src/vr/assets/img/audio/speaker/speaker_off.svg b/src/vr/assets/img/audio/speaker/speaker_off.svg new file mode 100755 index 0000000..585c36d --- /dev/null +++ b/src/vr/assets/img/audio/speaker/speaker_off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/vr/assets/img/audio/speaker/speaker_on.svg b/src/vr/assets/img/audio/speaker/speaker_on.svg new file mode 100755 index 0000000..f0353d8 --- /dev/null +++ b/src/vr/assets/img/audio/speaker/speaker_on.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/vr/assets/img/battery/battery_0.png b/src/vr/assets/img/battery/battery_0.png new file mode 100755 index 0000000000000000000000000000000000000000..1b97feaa85512747bba8a40dcc6372155ea0ebe9 GIT binary patch literal 26550 zcmV)-K!?AHP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+NGOUmK?cuMgK7h4FUcF!+~8(Gtlt0Pec}*WRp_! zHC+`mBO`!ojsZ~a{Lg=1_h0<7?xV}aTJ5!Ze&wEf9DLLK`>Q|y2A`jQpI>!2ub00*@b!!^e|+7w&pWYwZuEKM>xM~Bj(oGeA0)5G_w|rJ zH|n1YYH#-aQ0M0Z`!lj}te<2%D+J&o9j3>n~pq_S;Ai^ zke);*E-ZX~OE%d4+<*}A=)zz^A_KmL=V>$cr?-{XWsDV==EsmD$`{ftYg-E{LU?$&F!-G0ZntbNk@ zx8Hw|weZPWd@`jA?OWD()$HpQL2y!(Gcp!)D0IIm1r&5t&U_0wM`cbq^F7iPB{ImO zaIEH`}19dA0NE{=bnH)r)*-r~Q>oKx!lAaj4u+pn_rP|tcYM$p6CgFexH zBb{V7v@%Y+!`dv>X54w4n&;^2Zr1@)rtRCFjgb2jT0LLgTXAHUCzCERJ${55Z>jU7nqVH@+=sWwy1IX!9SM^yss{RAz87y6$o2%rG*Pm&E}2WGP%5p? zk~0{!a-h6Qy1mt%%-zmFJ00Q62^F3(P>qO2YiSYlzTm)$R*9vw0IMJ-TG_pan&YrK z=`3HGcWHxpp<7Io+Z+bHZCoRhna^L8$UaQG+pG*NkI>_(dlHD5`Puqq2AEH*n*qf&9C&pc7cB}A+Q+gzIbo1_Kr$P)ue8THb8w1Yn z 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 literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/battery/battery_1.png b/src/vr/assets/img/battery/battery_1.png new file mode 100755 index 0000000000000000000000000000000000000000..190004a6081b01f45ee83dc839fe673ced4c2be1 GIT binary patch literal 28188 zcmV)!K#;$QP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+NGRVc3ru4MgP$XHvwrQGzW1E_rT5fT)31uYpWJhggCCmz{ORxC;Pd-mt$$_J;EHH`Vvi-#XE|F`8^(8`W6?0@zd14eOL7JPcf>WVf_5KYoA~L_|yKJsqa7ilBsVAQKH%f}B_&gJW;_{-xbejl^@H6!=#cJKMjZsbDv%h#m7 zP4WH2>qu-)?_I?gN9YQL)%dQj&R6rpFEY8QoypeHPaKm}uS6B=&#}jMx zF2=ZGdJnc#V~^{lI_oRkSW{1%1jn=}g~X%r`&h!eY=4(qE;O#Z122t%4-35IKl*aN z^WuBe1|hs+8ZTCiE2_$)3kqY>zr0NOzh6PM7vOJSzy48P6B#rjT>0Sc2<-fP#I*1S z3Z$3l#0!n@pOOuAe|-QU;?l-oLLvjcgybxg;A@OE1OnMe&|v5>X-9||z7b~UIB0wB9 z)m*I>S8Hvx*U?hTAZBT`wbt9{u_pl2dg-;d-uoC_bMVQ7cMo1L#*8z~JZ+X)-E6bZ zu_&LFm#wnuYOAlY<4zk)*=5(=cHiTKLn)nn?37baJN=AHsoiw*HFwLcx7~in_pE)T z^-o{Fk+txZwfHin7uN4t?&DA?K*fDQCV%y22uZ zG$m&TWsD5w6QbSlJ$F3mlscmLuk+?=`JT7~Dx0v})YjRV3)(uqkmOPWS30_cb>7Pqm>>V0)a_pCAofKZnE-Tk zU|DA$o;pbw6Rclq#zMC6o8Mjd{WpeM^VxRp&7;&i!v^79?uk+7yhdQyqT+Jl4KvgR zsccGHowM*VRqX|Hn$ZOF@Z>%`Mb_2*^Xy2N>Y{3rk+W{T)=@m^r`z$2 z>06qf*2_1AcHlA!R_Y|qd>1e5ers}#oOU{*wYye>7;gz}=rUnCI%)Z*cWzF*wXtZ8 zb*ZGg+GV;&A2EI3v)TFX`*pqZbs12)&sb4gEy{5_c;n&h%NDm{T3KEOx~ zv+rC&cPB$}z{;_$nH>W3s@sqb`8R z7Uzu{Y_e-}_cMV&nihmnQr9jg<#_|4-YWwb>V7I3sS0Ceo2@!a?EoF1cn09W@zKk= z8AP6Hb;`F^D{DzOa1{z|^iQSNx;FDx<59PcfEA(U1*mTWNK07;4iWYtxT$Mx#WVT^ z_!Xdumw{_W;x38IsZ-Dhtw~VM9;CdjJDM8T+FX_c)d(frbL_rgl(G5@vF|;Y^*&(K zs(oLcujM#`M^vb+1$q^<7QlYSM!5lPTx|!-ebs$Rq;MM_7?q2;i*aEv?-DG?$<4hI z1!&aJFMnBu zD#ZYgItpPM=fqa7S}Vp5Q_jJ~6rn;~phR@X zsOqfD-%8#~BO22bp}faVeY!DuvSg9Nh6WbO>Yz`DqI)3?sBm^mpb1qEMH9bSE3L-t zQ-yU;g*j?-U<}lT@+GCJEcNh&zi3prH`7c;Bfrtc3KUy`4}INndbph77v%Fg-J!lm ztz+^jpcWO~cZ1r=6d;2d041rPZJnkD4#1h$asAFx$o4QwAjPrxAZh`oOEgcY2S`8p z`jsY?K%l{mGdokcPwk%4j1q#`4gfV&t&xt3ce#`9Ouzv1q@e(wYd0V90tgS-^suR3 z5}NC#$%Q#&gGg{i*bvGF5PBkO6Zq|C_d#a}PGKJ+4rifbXS%mZ-RT(=ZU8o;)f2gT zMtNL-VDmd5=uEwQ%j#U!)XVV3p%y8hx{2_PgZ?3My+CE33DyL8FTkkkAu0uK0{ltt zvW=8JHxNq)X3?`*4y^rY?!n;%u1z^i=Hpo0sJu}+5iMa zDVa|ZR5FlN1L_}LfLYx5&g>b;T!pkyt6$(3jO1HK5 zo=0kvzypyv!~CnGaw8HCz9GCCSV6CXE~%lU@MZqRlf<>+7~`jE5gYn`;^@k9Z-CFO zp-@RQv++?x5^+wI*mugH2H~dtQ86??jzpAqo9gx!s1bFC z?xwFPL7F!%o21{en9}I~W#P8A0rK`jqfvk@h zMLE(AhSO-1ckZwT0uFzG1f94IWC6-%HR?ekl_uM=KFuW5P{1cGP{G`RpwX>T4ww#5 zZX%4CDHss|q77tI1%9B){LDfc*a&p#s4M=W(IA1=7Qs#kepPb6RH|?TOb6Z3(iMw3 zun}BA%zH`ms08yMm`+2(tK1Wun$B?0K_VEQDfba!!c5okNmL6=a($+ri6NsTI>IRctLh)Rw0oE1)U-p)2D8YRc`xq&q80p5ctJoVWg{fu@RM z5*tmFf}RRbM#*S!*b{89EMe2SNfHj3)OMk|M^^1Rxn!A?292zsk|MLbww2fz<@86H z$g+A;K(z6RlWEc~m^;I|V03NLBAJqnlrj`rWex0TeKtp0>?SdAS$^DfsDmTnm5x_? zAAnq8?w$VLAS9&_NBd_S0Y6zqZ}Q(l`OA4AJu|~=9b;A^ z`7Iu6fZ)@5AI@?h#4DXU5v)bv2_#iYh3IEsARzwXe%#rGP@q7>92q00OqK2{XJV5m zJVX`>fks6&%Myvc5Go!MNibr?4kByvB3j7wL9jhapZrrql_*p+7ClvP7x04AOhh>H zjT#I_Hv|&6{gB1mE`yLm?Uxg6!+#T*j-y}GZ%{Q-0qDp~i;kycH;jK}&)62>pLW3$W6gc)KxSX_(18P?h zf+V|&h3eo7O+{%C2Y`XPq8%i2KsJyQ;O{dB*a{mY5#cEekKsNj|E5I%FoZ#`Ex5RN z2`vcZCez0+fuZ{=g$b;O{XwaTB0I1M;v2k2+~zw~K55xdrb=U$?BK=GC;LVxZ z!EpFO+SDBd=K_cr3V#h6-6I$)%?k#+Nf?(xKmklhysJftgXi-iCkK3FS^XwGQ#DpD z0qSiL;iTD%$Q{bWk_;(WN*uAhD`ph71eX(TX9c$?@(N_GjxgpkFujGXtbV}f$jp!1=Qgy;BY)BMJ(i@;!cOm zc=C2ZRM6@cHUh&Qsta)TYI3E|6t{FeM9SqI+c4%X7z+O+wJ(%m&WI6<}Ec1 zvzj-wAy>4LA{YzVahZhf1+TM{>ACM{FV;$H!AkriM!)OJJ(%0jFp?nL84 z0bCdX*P$-zTG|3lQ213#Shfcog*;%U$$zy01A3(4k3$kjkW>tfLE=1bZ?z6laj-f) zhsY!F!!y3PnMSEH!GORkN#LT5wb5LmY`c~yjS>Nw8rW2|6b;BQNsrC-;Bo}kke~Dl zT@2M2<%1)?qH|nXAMT*WIvN7netU2z1^YM|tdxvgv*DGtT;3#TN0h!+c)ObNsGy}x zTo&6+IK=)BLg_CT$&sFZ@gPTjza#ZDN z!N^Vk8}X4eIOTUrB%28qLPZa4xM=c>3m1NIkeQZ-z>!X^g8t0=(6~m=Am#M0cJ;Yf z)hGM)83Td>tOL@h2R*WblSu#mn(wbrmfmYndf++62FDM_Rg#tT0d)!xC?csFkgd9p zU|=%3_67?xqv(mJd4#0x59UFM@<8SO+I$d)8GSm#KM zA*(15l^!)dW_;^XT1A2SuIwXfVMwe;`J{&dc$WI;QJdC z4>TkaSZ@UGU!gBzCp*wJmgeX0yJSeRKyN>~$+Vk8YNNMdFAi z{mWX@T0bMg1A{2k7yu=u1Y&8?piM9zC?5znZF6+o6IY|~B@vL;AWV241Ts*UzzD%w z`xBFkC-;8?kX~vZQ2Fs`_X~h7t(%8dI|OOfkwX^oE!3( z2a|deJE*R%a#Cv1jsvdR@mlXKj40fUM>(iO6uqtwFzY~v4oM6!`|%yLg2Cp}0Xn>` zp+ZoiuXZyE{=h=Kp~GD-!*-rwMkqj|48RvjzYJo&tJ>0$5sVFLt|*5w1dUX5nj-J40qj@% zyCK^4=P7mAuTP>u@Ip9h;P+&Qlu-sLS_}zQORJUe$Me5Dtq~0Q&;kHcz8xxDIzI;^EP65;Eas(!&zOQ%LcMGV*^*kt@*u*{LYv&?d9*nT{FOjU;d#m7`4Q9CUenpiZ(GrL&9p+qVxVPD|;(mhR%Am283zhe`&KPIsxZqYH{WdH^ziq zBcw*JtA$IH9oLhCSVGwdGOyhaoUF2hJH^yMkgfg)Fh>1{SbRtBw+bK!WDT?I+E>qs zAVzE$K5|{HV}b12an^S3Ai)$)S6!!`5@j?qUD!S{o=7?^G=G?ZPg<(*rt*yD<71A2 z`2Pdm=HJ4b`{3Kp@Rt9d@J3At+;V#(TB<7ZpKT_U_z9oA80o|JM)W?+AOCs1!hIGj zKxD{g_K&;^r&FA?{?xx1v~B6@$*-q$nfdvyr};#e{*Pk<>(4LvPhGzzK zx+7`385NC*qzdIp@tp-7yRRy5ysZ+cDplE&RMJOU0xaFpvpl%!eg|JLo1oN2=-=9A z0dmWiCTbBmiN;0L-kL(7wKO;3=h1QxF~Xqk2DpM#ILW;|jwdlJyenE0uaG4 z6$}!L3u&z-oq_?cS}ik8MEy5Zj&Ph{tQJt5DF6b!i|**f>^|xp_Z9FXv60qlvNKzU zxBwtLB(yQpL>fe_Q0N;onnYdb2C8L^G_<30s)Lz3_!scTc>He~ zSN1aj3VqlHBno^%`c9UwgR~H#QO6t5VhGO!I(66hlt=_hOem(NEpdsV{Z?bqrh0E6 zYKMl2I@ZMWOO2&8xm2w<(SB;$)lF|d+Yq_hNTUPqYYNcRY-;!M$l&tvl`2XJShSdQ z!tI>^vCH=}oEDWTLDDK`SLdtt#rCv(c!GVyZenw&eZ3QpyEJqQzc4iF4XPp#4tpP0 zjg%{{s7JiBte}o9zJ1M$K++x-lAvPmLD|oSVJ`jc10i$LhT;yvmed&=DhIjz?kcj3 z7~V7B+mMA~c1oD3DC22DoI%aCg11J@?ae>*kpzs$RZUGatecEH8__HtCj>6(W zpjw1d#p?kEp*25nPKQ2>x@!&&)>aTwMTee?mg^wvax89S8KZ1D^tUrgj3_CrNYs8R z2#K)Mp_7DU+R-r-T1Z>uz>t>Ao0d@vc@Ek~2gtNck#uBEM~bqJ_l~TiaFHe%P0Ivf z9q%x{%}_x)SS98Jr_jW2IaY`%h1rTug!BKgeHbao0f_1tgxAR#ZFROQjY$f1)O4?1OdC~rNMj&T>&G2*1JcCk zGg({!`pX)s24HDoixOqPdXu1(eL#5v-9h{HL!HjV3u2+eB(Mas`OY{fq~-2Rf$&J9 z!VS_SlEPYVYKdet+d6pN^{;QKZY|XVrP@AE^e|-vR>PhStc*HWw6u>ZDnV;%VJdHF z+mzQwlh4@Xz24dlMd9CxSSlS#$7ZHU`hz+NRky%@q!uJ?0r86lphUF$n>Q7(!F2hw zw+f{r4zcHPYBLk8> zFXR$3xw%3~p~`Sg5jYNr2(DhuiUg+)8(r-gWB<`F|0KlR|E0t}LTuwrw5^ZiDm3KM zT_zGoAqUyH-st{!wz%Fnw9g*O4X|GW?R}*!v{4u1+sy&Xkr)*3@hB_^GKV?&0Xd+v zQEtQN!B9JWgjPx=^1PtxAZu$Os+&+m5=0O&7Gr1&X6>VS&<7wg(s{xCdCD7v5?j>v zoqyH=Sb*Gn&}m5YhL+G#J89I*C9SF0wx+Agp$Q2 zUi_K@<%l*1(7CS2ltOT{+Uh}@78@8@OA;lcyL0Ti6`}(kUW$(o4>}`R0V^t?G>V7r zd#80#e%DFfZPceuC|xbeJyODg3tn{2a2+yHbhM=)ShPD0_o@gJd8i3APXt@OpOA;n zMB&5vNyM55g4Jg4!CzW}H|OGARcBFq%Y`uM0EDOSkc*FD<_@#gbik8%9kma$Cf?ek=fXX_vmK^=a-Eg9 z=*mTMv7VPpQvq~~u0M_=T3k|xtp}ot5Kom>DBct{#Lx#HK)P;3R!Wgw9Po@K= z6j<4=O^3 zHguO!L1~7lGch^{*L$DnGK^Cy=j}IOc}=#2cDuT}WiHYZbYc@c>M(oCNn3bt$p^Pf zAaA9t$gmEAwCZ)R4g!qK3VbNObdj-=!1#1TVpB)^9XIGYylBu8O@bHXt?;>?9#wgKQa+HgG|;tM=3hd=_#vYQ4PkBsek3Jn9sP zMhOe2qt!kDQ!xrlBsIKF1=c+4`J83M7*V7Vf2ZbE^+P8#_dA?{7p$dgg`AlsAlDi1 zJ=%kU32dj$Frh4zn)FO!61;7{lWzfog5m=Vs3f8L(TalZ9ns>7TjUvQhVWuGV#$zX zGj(`Cx4zI*MpkJoQ}Y=ubR}#gw*g6b6T!tNHKbnym$D88w)*THu)QfO9k5Fnf{9qI z%KHN4t4zYGO*fjoRbE7z&IQiq5GTm#sf8tN+(Ljlh@nGisP&=~o4o*_&>XyIw$;Tt ziK#PBq*4d_5z4l7zero}%yQDnLM{KQ2dKcZL%XHvLcy{^&Zkpih-(rl|?JhA#q_gA!qtT{T9oV2tqQJ&G}WoU;_ z&b1!If{tlWPbbUNzoU8?L_(Q&EwWL$caGp7C7#$g2;o#V$=hM_9;E>6+UUY|HA4Fi z$LI(n@dwk<95@8sDipK`;x=Pp=nMF7+FlmbDp%SgRpa5Enby?3gn%V^ngz{-3WDW|R4lk&;pu;Uw`%}@wYdUdaox-Pwg4mar z!!Ys;xaOioAug=@r%>GV?Iu$gpGvhdlFvcC5Oiwn&8W}~T4sls#UW$poXfjsrs-CX zp>tZMqbR5jEIya&I$%KlDFD#Zbtx@Wpl;w1B5D|*6>n(}IrNd6)@o&k3pvxGP9j!@ zTUr;htJQEgNJm)GfM9onF{4GfDy*&(Dtfbr$_ z=kR3Fe(!u8j&r9G!PltM*#nBD9EK1lttO58v!UZy2*RZcdEHdB95UAZDwvAM@S4-hkZ@DWzKg9XM?N*>qU2= zm1}JhkAb2<_ZJbEI(9t6$Ojo#GK)DvxF{JNi3hiML&F~Dt5qoBybi_(oe-GvHt6Vx z`qsS$$T1!E*)H-sRS!04*IG^pG=6J0{++$u*fX6xXy{}t51vc!C zARWp>3v5UhG^7q2s-Uaf3C4oXFy>nv#DOD(Il(vG4FG{4eIAtW z${zH<`RC8+Wqm`NK&Rfmc8r08i)vc;vqFp9zeo$yeVCep+fRlft;5->|MyusQ9X2T z7a`XPhvdgQpjnHycK~uGFwrr1VP*nXZSUy6^wx&3zVGBY7i{vfysVk-HTxWkkMVQn zUY>?_({{8r8XJ^=rhc1HnX$Fc{S98{fiNCf2SWm?Cu`HSR2}ZZDz*>Yb`7iTpNHk% zxPBTIF!mXk|BIn%V1F8x&P2Pfk$oH1*Pygl^W(6zSNs{+`@bq^Xuk~1{TQ%+6EF8; z!2V6V+@JFJAI8i57_fg6FZUOj{Ey=0{;t4&H(u`V3hZ~|<^Ha~em7q3?+Wan;)N2? z!PJ;QBasSXdb;!xDu9yisYtqKURGnqw?B^zT!NISQ?pffis%krk7_|ibOC(T_8tli zHKIHF%;e0kwrp@Mcpr~s*!q7ubbMW@`oO5W9Prx`Xt?d8d$+V^2bcH|o$d`p8&nZD zTE&{~pWWJBhZKZkNw@#JJ2j<}F#rjVtNTLb;Nc%eR1g3(Ey6hD!8Eqpk8zwmw-cGLtWbFI@Z|H^ros|A8z+hmtm>G3nGum+q)^$(0&Mpce zd9b|yiOO4q)+X|To3)2b=-j=#yZ;4!KMMD>>ZDiz000JJOGiWi{{a60|De66lK=n! z32;bRa{vGf6951U69E94oEQKA00(qQO+^Rd3LFnG7ywZTHvj-207*naRCwC$y?>OP z*IDQJdG7mGw`5y(97lF6+QE3801{*tG;r_?i#s6)#t?=dbE-LKhZ(Y1D1lkd5-)6a zhn?xScXwu&T_!oha7b*V>~P4yOx0PIg-No3Ow?u>%#SE65Q)V08j)@kE3#!fvMs5r z-uvty_uhJMy;ap+)m1IE8 zfUg6-7Ptqv6Sx(a2XY|uztiX%@#}yOL8OTal`9e5J>EU>1kS0XMnfwNTA zUdx0FU_v59#Hgwj5s3&{R8>X9_!RfP3%n8dc3=_sTfkQU`w}51BqZz-)Okp2{8u+3 zUj@Dh`~mRWz$bxoffxPvjH;G3ZdCs|yqBqJxg(^lsy(uf$he*Wt?!-6)NT?I60R|11ZkTZaR)0paMx#me*^rVs``aUiD;;5XB1z0lFwDO zyAv77Laz~ekdP>!=v-Ad{ChV8e-HRU;BCO(s35Grp7`I{h`M0)7qn4OM-vrcC5OStITpA?(=FmUsveS>18Q-U|FQ@O{8d{(W1^_^=*K zQ@cq>NZ19IwhnnuB9$Ph1A(wh+nO3{puJ zDHS_sX#;brx)DV7SVZ^l{axS}fQ9IH<&YtVi3&j@Lbs`1BqSv4QkaONVor+<&Op9- z#BCRW_p0jg+MM8=mr8bQE-zTxu}PnMvp@4v$S>mD_W(A0M&ceR^hR~^j`g5~goK3M zh`?Jhk7YyDgJ6-Hi1#i4KclK2^18MSQVEeu^iIknP`R??z&n6n2HxNkdzotDF}Ad0 z-KQk!*$D{=*AFDJs$;{mjI8d=6LlAuqhIg72)svCf7KhkL8UM|<wuw!8V818q?}~aM8S&dh z+6f5>H@YPry9L$_*6`k+06(azPemRjW*A3KE1MV~_!b7?{J#Xg+b5(uX77`bkdSbr zTiMVr`v$EW;2VJdT155+kCG7<`qVJ=PZWM9@Du)ZNt#4VNJvQ7%1{jk?~elC~{BqSv3dQ$|ilHdmT?Z6Lsj_wZQ(IF93C$_XzL~aL~xG<_EZna}t z7?Y5Ykg&BS9y?_S@WUdqH=c+Tk6?9AMcV%SZNT5A@>iVm#GR))Nk~XY7)jQFGsSZz zz_$Y5ud3GjY7Zsp?ONQ%FQoY{oR*zYd5lal2^lY2ug{p)GntT(kZ>)@HgMJ`elng1 zWed&=To*VqL`D^0sea$!!yT;d?ONOhcr)l`*idQUf|FJ()iO_s ztnl#KkS0145)!Tsh8c+(S;xV$o{wI~fuuHrjjZ&{>qTWRrj72+c@0XB}kgyY|yX4hliOl16 zrJ0YUk$g;kQu^JagTWd$KHm>~G4>Rhg{8fJ$dDmqY#eFhGHzFgt|#mH=z6QbiA_3! z6mL5rA>nFR)H;H||0d3RZf``kGJ)Y~hj3Vky?rZiN7y^Eo`&rbcMjZA>yhfa5^sh1 zD3Npiy)N)e!2hVKUrg;LAt7N`nA|lhS48#!KZDyoY@R9zR6eFWVxn_cm>3)|ZpOJ% z4^za8F+TuC7THe2?;YZyK9;<@G|f}0l!n@vPrlv z=FfNsoST3F7keqF1;J%`E5%{6UET%Q8+fn2+01s4Grh00Mnj2^;J@6gu%aDuWT*B~OGrpa z2pluYV2n0@`74}5#U3wlWK0%&Nkdu$n=4H0Y`!lP)-YUotj$_>Y1at&fO3h*q zn;=Y8_rttL>Y}-fnPH*?YJF5Ps%H__MOjeR{cvHyPZX?sGQH=RuJbS}z%gA{UB5@P zx{qZ+RaoCvkGLiavWgmj#pwM7j`w|Uork$c*DEcG1x1b0%3xb5r^f)3>%z~lXH zJ$7MDl(i$(F}!nv2ae20uRkR2nBu_=589;XDBr%Z*>N9&0##vi!f~YNi4!r1d&mav zF@5?eXiATyefma?oMe_EfkzP5N-trmy~7jW<8@cE8RUNwlAn%Xi^0+9wCNXB0U25^ zBhnmolDlo*OzJ9yC*$6l7>`Uua!=Tqe}69Qb`v?fl>WDU;a#7l3i1@nS{pKyj9=$fEw?(?FZ;g`5!m!{ofs${{C{5aF5=z+sh}pDtVm8!e4jNbFEx6e^mFY(wf!NJMjJOJbw`{ z;r7V=GF7Ou|jbh{By10rFmQj`1sI1yqkf92;?@6#cM4sAg z&L$om)uoN7Y>aCPZ7n>dMs@0gC^?tj6{ZX9zl>Vx*M4nC+tBwbc`J*{aa+$`|3bee za2yxbqs!#pBlQ4#Vb92)0zOO?OfN)5&HZr+=Ob=Z^|?`e8RBw_NVY3TJ7~l)N#CRE zsw`}&SN9R;9oE=x#Yqi7YttE* zL1NfU8}4^goz-|&hxKK(zom9pq3Qdkn6QVnht0L_0UcSRHn`$CzCe)i_k3}WyTQm- z`LAoel~gvMRlD@9RPvDkw$`Eak+wstMv679yEmUO3({T!TDF>N5aZjUoS-f7+|#O; znU<%R(48S^$IcrX5x50D2R!L5<~@;R4%J2r0nY=U0zRgy&jxoyRqezsg1b`FUa1j! ztU<@G`w+-;(z7eXQG^Z07kEGx%(C}IU*Kue`~9p5yS{s-j`REamnS)EpFQm!kfXqV zHc2MTNK4!OL&QCfD{Qd}VH@X3unH{t5rwnTXE2B5)ufg1Jgs7Q&^=c=+Jd&DCN(EL z*HhBdhI>}`ifq~mskjl5|9-#K-*VI*Ivf#cw})3@AkRt8;kAMmzB0l*NZhUhVegCd z;zh8_yMwND6PqS%=lK1=cLQ$+9t8f5Kfc?azr&yZKJXau>mu?)s@m~{9o(n$(8*kL zP1|Wz$4t<#*HFVTHRzf-rWjo#*EMqe6>_I@SDJLVcDT-@=QY%R{W@vHlgCoc*D2 zqSt901ugt@+`q=E)pCcQlrn|aSo?HJr#oi;Kq+Xo;86v%S!wvOcF&aOA#(z;C|~&e zEvi#yHqr0R=0|Nl!IvPqNJ~La`Qy{BoQiPWg1&SWAssWyzq?5jwB>JB^wqPs*a(_9 z+RV^qPuGw2>B6n9=qpc0ttU9_%Mcw>?vtKtZNG@?A*#nvcPIKj@6Q|kL7L<$YTCoJ z?D%!K-bQ3)U%~A|Q2Mj=?}dkL!>8pDpPww&x_6m8@}Plz@&WF$j~qkw4+NH(;~W|P z2SSPAQ7kVtl)U4H8219}DD&H#8GotiwXwhHEs>A=51w|X+*{t=h0K-B0n7b=WaX*% zcW@pHYQxBBg9XmA&b@wsc#bNq5Bb+$z->Y_ z>G=|{+S@4f3BCikjV5hc((fYMiWHNjW&vP|$fvF5UMB!;mdal|(Pnk=eqW{wK40JC zfAuVIdYjGdO}-57jRwx=YVX|(oB>u@;0){B1$-^Y3Dl*J(?vVJXnycu)s~vgdb{ek zSY;(-{B0aym7nqN|8M@T?*4E;XLtzsR~!OPvEaYA&O^Q~wu84*MgBaAi+Oafmrl>K zxVp-Zzs*TqOWs&+wJ^=58yOTdrJ${`w~ZeiSc!ZFU9~O&=lw_@Zyet4NB`Sxf8h2M zKMlMRB-WGt#{}M)o#sh7&Zq3Zc%U%6ftxSC!oEFU#_%$RF95IR*7vt| zy7caiUf*8A1p}Ae2=nIBFb`x{8W>(7qvI>1!z(<)^Rn=OF7Sk|%hszthmyA*c5UR$ zdARqKm%J_mxB0Z0X#V2L7K+y8==bBC!~Dk^ffs!HFuyx|QrIqAg(*Lbvr&_wBJ$*bOISuCC8 zB8E0rma385cReJ0{NLURuiOlGhxRj%i|_wpWH|1b@VvKH9=G<4lqwYUm;Ci_i)7$C z;Xj;**WCe!0a=A=p`aaiwc(5>B4;6#+99Kclfb)F^|OIbbFL+v<9rpW@PQ+;`b1Oj zp29?b0!h!Wy1OGuxmvlbyRJ{I=vdg)VcD zH83KVOT%T*9BDwe3)x18@`5#5VxRiKckmzdlTTb||1h#NhQz9>Lx}rM_}$a+Z!bWe z!y7E@+2b1N zihDNfWyh(VE;Mr3@aN8$=j^XQ=KNsQLU|b)#u2)_0;Ta=On2S2I~U>03VZ$vKJZ!K z>-rYJ1i~J)uq*U*-R9eX{{}w#&*2kKL3xEsw*uK5G+u>#y^79!rGzqr(vx)~JfoM~ z(U~ycoi1d1!2X%bo9VjFx0A#37P<;QcbWDr_p^B7X;vR!goFEqb{m$|S$qYsyf`$E zO@;HTzJaP4eQe1tILbf zJ?mST!u<1Ka_D4m@mY9D;Hxgd;fMTe1=n-PjK0xn?fq{6zE4C>c^chMA?=h4a_dp;Zxf{F~1IEJb85e;z57E?*({4M_@9;@@ zrsluV1Yv2#IxSVC3DRa!;DsC-9d5SnVK&x1ct#*EowHWRw`Bg=&-{Zr#uCAYY{pjmX?N05~}L33D-lca*8uxo`cJmy<$1%$~B~= z6qj$ToA@+2lpW}l?tAL%c9MMe&K9)e^4saS3NAC(hQz`x=QzMQRs%1e2iir?%b_Tc z0xZiIRuCx!Z6dtS?FR7JqNBqM;6HX<9Vt+DK{l$k71n_osoG`uTX9pP!_MH+53phV zzAx6@(fY=k`NnEX*Y-`rJT!+VhPI9#6d$ahv)d7*s5x8~84P zEH@y6F`#t2T3SP9t(XpmD~Ko!bCbPAdFDdynPI$I@ky#I?&smo+u+sZnFWU8f1DW+InE(E`9x8pGWtC^~<x-NgW*otsPJlSTGr8|}iGau5un^lstF;xir(z-+Z zeJ=SR2)7$AryL$@7~N_OPtjXB!{@&WuIw`|Uw33M*MRxlr7iOYRGGOBro@e)0@-ER zbhb{W+GNgHEJ1LPd#Lf#Rw7JJ2fFz$S`EK;h4~t zl%kX>R%DK>D@d6mT82r4a|_*x9pHBo;eFGSYf&UU0J&ChWX?y z8*ekXkqNSpUjgkPjm!S|Xh7zE^cLU`IS-r|&ZI6TgbJeCL{56DY_@^ssSv*y=>#aYd}c>N+CfjI>}LBjr;gGF9Y11yH5Qkb&^kBf;Rl< zZ3_9YuV55X?kVC}XL-DeR9iF~n>96O_2J*`t8H!(IW^f%{ZmM#`xbI5l z2)zWjrRUw@#OhOH+xVeV`*Yw5x5C~G=1jG0fbK)E|66_K08KH%is_$h6Z~k&>t9EKC4P(hIm6A6&HD~EbLlry z`MHa1{|KFz_`1PX?Zf!`6K|H~*0=f6Jr^1}CWo_Ux!&XV>+snschcGs9t<+DIo(nyZ3g)~*g3dzJEz$1pYp&FGSJ&J6*=!c-+B{x zqJE{`UWIwEdtDzYbME2Ky!U~b_wBSh`j8<XTW1QDfpIM+(=;ltO>-b66GKb5#7dEcIOWy}~ABFqw)*f-QYW%_* zQy{L!nka3QrNYZb?}De_>^*em-E~8g?;0=Fsq38LgE0>chNOTs)uEXig>{4Mqb{Gp zm;pDbe5qtV&vEde7lRIK#bMmk?evngQ z1uP{tQ%c0jMk!;Jh-`LP1a;<$_<%-IQc_~n9hyU?hRkMIYfusC&T$9Izees`9KQ_f zi))|@HQE&HM+M1O}mF%6wZ0;v*Gg5k^UfW?(Q(?;O-Q6hvLOu z2P^LGI#`imaMw%EIaj{t?!U7#*-7?(cGk+9v?#69N*B)5+G&m7twLQ+S?0%E5<^AtI-4ph z<_Z~2b%2EUPYfPe>ki`Hk_AF;N4XSd88j-{ue?Q$e2sW*TF48Qs^>kF*!=ls!jRJM z4-yDX%x{R$SV|gJ8~INslHS1@++52e3ZfD5LL#hPssrl=3dF<$sjb>U2OMzuhTh1; zqbnq_z!#5zoIOcMUgWR{Q%3@@ku==2#xjwru|s_uXA9;FWV;M{rJg>-I| zi@x(35w07j{<-?NLUXL&Qn$qc6}Zior=%JQ|E6iCU`>=(6S>liaEdCNz|aBz0q|+I zk|!@C_r#qTtfnn6Zq?PfZ@B8k$&E4#ppcVG-aG~4C_nmd2BTDqy7dA-6)n!P3;(fs zqWxv^7*R&l9LQzUY36rjj;))_4=5an>~2eJK<|j|k1SVwwlry6rb84k7XSR&NK3#= z7)js+Qnq9EvjVqqSgVt5&7sC*i47}CdNWc-*vdAF)C1vK`fQ{13O<>&_k`7#A)$yW zUhhcf$1NqRYNx@%aSqb}W8GJwoo7=eqoKudB4Ywyal-?G@2oE}slhX_a7e>kEraTeAGi#|^_j0HS=6jjW^^uVdD$bcq%1hAn1cLVr(Sn1e)64Nwio{b ziIU()__RyjBzv2E7`DL))~j27{{X#`Ap>@F-YzwnP*($;#blgQ4Kc1brtLm>11KFo zmsz_Tc1@#-oSfppA6-N4gpBim6|)7cl_*>t!=RIp8{ zb6U#lN|FIxa-_#;OFfV_1~#WZq4J#Cxqq+|=4WaVH4RIf?#lHD&w01?F*T9v)V~1z zg!ZY2s*73USt`^HtJVR>U`SaqbFX&97-jL_W4&^k#}_0v0f2d&6vna!FW>uX zS6tl_YqX&Oqe2?Nrde}?RpJ34Z_IQ+HcXWfVy~cWb@k@|W&zl(MT#<6_v!3s7^giF z5xbhdIC;RQXgrX=z;6Ro4yLx6(hHOl=WG`nsDz(K1K>`=FIC-039m@bEp0zjWesKS zTF2eST{UDhS~IJ*7dFl@d`c`9zijuSuN7dc09Q@2hyB>H46TG{8Vxp zx#5&?;}l&nKS1z}8CGBE2a8UWnxv+#NI7xo@{xQFxUJad41Cww`PdT~P4C<4-CB

`tJHCewQYXtBzJb@vHwTIzFJ$lD_L)zwbm^v!St9i z)^?^-pK=33p=e`OHRER9T9N=~=exwWgZ0Pk=^VC#k6~0l!?p@Qxi<1M@v2TsT2m$_ z-^f`}W2+o0+in#^QRYpoV(0O>w|@io<`;FtlI;YM5g!@Nq8Z(3 zWghXzyY^gv+whf}Q>B`_I)+pQiNuKlf21oXlEq8&8@-n~6^g9%a}vRJ4vN*cq+Xr+ z2GqDCY}QWO(DvfiD(p9hPE7o)v1pk167MS7b3E1(45{0A;4yMs)j6bUFP70ssGmm9 zn5h4tn*`4J&B#|?=OVNYBI?)7KB0sblgtWkg;GIhpx-qJ^L3KbvBrOW%T(6is~Zkg zjaVRfK4~&V+2u6Tug1C;S!pjzWGEA}c}~%~?)c;;?8s>%40Yr$8m>er(`&4IF}rX~ z3;OO$z26vPqqK5M1ZfO}pHz19`%8>9Xymp*K}}7U-d;i)qWj1nF(y^YkQo9C$avQE%i4Y-NyFf&NqYf27}p(_p{ynTU%1w~GI}XdrNfF2R6^nlrcv z)iI<9^EJFs=%2O?L3g52f(15vu_y>%)q*5^{St2pasP~v7uSPffr_4)48 z*}D$q0{zkOMQ%fQbe}gv|KsPT;*-*^Vyj>^9=KH|K$$|tVT$Uz06+LfBf

bO#C{iQpys79_flF;QIWJ?7v8YFotCn{!iTg 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 literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/battery/battery_2.png b/src/vr/assets/img/battery/battery_2.png new file mode 100755 index 0000000000000000000000000000000000000000..abf2625aa24cee1c9d0671cbc4ab99eb3ebe71cd GIT binary patch literal 28783 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 literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/battery/battery_3.png b/src/vr/assets/img/battery/battery_3.png new file mode 100755 index 0000000000000000000000000000000000000000..9e0a8c606ed9a1236ceaa39999f239aa008bde30 GIT binary patch literal 29252 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 literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/battery/battery_5.png b/src/vr/assets/img/battery/battery_5.png new file mode 100755 index 0000000000000000000000000000000000000000..916fa2d756f57f9ac8ff6b96e84b28d421e2e4a4 GIT binary patch literal 29837 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 Vzj%}Vx8&CkDKUA`8ezkr{|nwFzZn1k literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/chaperone/centermark.png b/src/vr/assets/img/chaperone/centermark.png new file mode 100755 index 0000000000000000000000000000000000000000..44ddeab9402376589e8e7f5958da85cb191fd624 GIT binary patch literal 4268 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 literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/chaperone/centermarkl2.png b/src/vr/assets/img/chaperone/centermarkl2.png new file mode 100755 index 0000000000000000000000000000000000000000..0b6e4df554cdbc70e7f7cb4367c68130df4460eb GIT binary patch literal 5550 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 Tiu89>(Dp(8vu6}emu&wh&-80c literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/chaperone/centermarkl3.png b/src/vr/assets/img/chaperone/centermarkl3.png new file mode 100755 index 0000000000000000000000000000000000000000..f554af620497c3b1b8f4fc1ad6f9a9746b9f9100 GIT binary patch literal 5640 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 Fe*wjvsVV>f literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/chaperone/centermarkr1.png b/src/vr/assets/img/chaperone/centermarkr1.png new file mode 100755 index 0000000000000000000000000000000000000000..4ab9f37d17dcb120738f03223c07ca796a96e49f GIT binary patch literal 5435 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 U)*nJ^Y#4EDA3JeV04Kp;z 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%0DFO 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 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/src/vr/assets/img/common/check.svg b/src/vr/assets/img/common/check.svg new file mode 100755 index 0000000..6a6f37f --- /dev/null +++ b/src/vr/assets/img/common/check.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/vr/assets/img/confirmed.png b/src/vr/assets/img/confirmed.png new file mode 100755 index 0000000000000000000000000000000000000000..2023abd15e2b603b265431da2d9999e69666d793 GIT binary patch literal 54212 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 a!N*C?+s`FyTT1|F1iGzna+831g!>=FtMG*Y literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/cpus.png b/src/vr/assets/img/cpus.png new file mode 100644 index 0000000000000000000000000000000000000000..a3aa53ec141b494da44a0d1f65bcaca98cedb677 GIT binary patch literal 169359 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

mQWK${fCPL-(%?7apy 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≤db?Z~7=+EfW_d8ate0w}*oUGA7 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 literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/cpus.svg b/src/vr/assets/img/cpus.svg new file mode 100644 index 0000000..4157fe0 --- /dev/null +++ b/src/vr/assets/img/cpus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/vr/assets/img/dog.gif b/src/vr/assets/img/dog.gif new file mode 100644 index 0000000000000000000000000000000000000000..433ee5863f5dad49fc0cd7fd1453aecd2ebb0c53 GIT binary patch literal 23141 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 literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/dog2.gif b/src/vr/assets/img/dog2.gif new file mode 100644 index 0000000000000000000000000000000000000000..f773aeed2c498387ea8f933fb4c441157503e1c5 GIT binary patch literal 31577 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 N<~?22GG)uq{{tA31VI1* literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/grass.png b/src/vr/assets/img/grass.png new file mode 100644 index 0000000000000000000000000000000000000000..d3f74dd292b1a39db4f6e5d8b81c75e7fbd14faa GIT binary patch literal 7535 zcmV-#9gyOQP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3&uaw9nog#Ystdjygo_&5$9V8q^FkG~&Evb){x z*`A45%eLfFsR#mz%tSfZfBt>LzxXPt)ljtcI%v(!c z7{)uII(qxEh4+Q_$5#4}pYj>j>&gEPUk)^~bd-f8XOkrH`CVQS$m?hFqx{aC!xp6T zTBU{O(0E^rgnZfF$8(H7C+JI(KVF4jvtQEhlb`4N4EZIO^_?SL{PvBczZ{p(_4CgQ z%V$LS>l9)m}ZGj2+L z;*N{QP9tTiaziTVq?vBA=Xs}1h$UNYJmraR&CmY4xLqMsak7o)k$tPX{Bkat+n1pn_YV8+G}sU_tEFbL*PIib+pmP z7<1+@S!i;t$@!BbD=%4P>8h)(zQ&px`0TQE*WGsCW6zV19BAUy(@sC*OiRIF3M-~o zty#BW^MbW2w_LsTw%hNx^RsI2s(yR?gQ}%>)$&s*Kd*gOjiaHpk4q${6ZM)=v0M@r zZ(acaoxNtUr&6+4&TAG&rYSTNq9ck}D)+bQ7PSAZy5&DrE_mtw zAC(J~?t9&SQ?=tdx1Wl=y3lhPh3?z6%Y{a)LLvy_Zdc~1tdHEbQ${)krj|HcZZ@=2 zLdwatXa$4CW?hROv7PHFf@IgDWzFe9C(ZPd>)S2!Sn6Y@QpZv~XGrDHIB| zmc}%CbrC{dyRO*}dn!Gx(qy*@9(UznRiu|P7ZzXjJdZ1@S`BoH)}7hgjW!8v9co(Y zzLac?T!&}yW)RqH^4FZ@roF28Np{FbIy=p<4(UM&z{@PuykBYCE+@u2O1|gpE_RGU z>+Q9<4wSRN#T~QiIOv3&4QJPMo8y+k?A7}=u29gP*4N^qqHAB3O@svuG~vW5JpxaX z2P;|wdpbjG<0^Z}RZKOFO?HzmQhrXK(duv+^6)-R*wQHA=x@)ACz(9X#^yWL+_A{ z+cwRYmUmm}BPSFSBb201>!r@y5+S+>mJ*lIwA)CE<+(*^kSp}1RdCkg9!F@~$@<=^ zy9()oImku^E=OCY#+%HKMfsE2$s6)tU<;HFxebI?%1_H>A~>?H2|aPy{wyc2%SN8Y z%JTq)Jt`h@Ls&UgR*li95(!u}&e1CrFw{VKpXxC~Zvd`QK4MGTgR4#Eh#U+otbmlX z#ktz7?e2zJ%|^G)wuwOr=Tf?Qi6!bu8OWw?Wc$q3t+$)11fx$tTH?&7R=XJpxO$@h zCG@84s%z2U1{u~!{d6b0ClBoTPWk3S@xlbk(O=6toG%MzJ6DrpXP&gpg_Z&eV^?X< zu`4V?$rqj5Y*oa8y0qZb*Ai_})++T}3irI%+YuP2jGB6;w2&q|JPpor;*mm!!#I6x z{0>YN$hZx@bxK=v?Imi;^GzAODMmvYa9nD+R~Lt($j1W92nLeH!W#w!M>;kQw2F8q zK@e3gr;ejST8ztglk(aH&L(o{+o@_0R z{uhu(cR33aY1}g5&bGHpSFD8qq6C00C(nFf7swY^zdN6K8Yi9}T>&Q8pN+yD@_Fb9 zHaj8EdQIEm+NLE;r3&nacvpr)0aRU;R5CmpO0R-%}HRx7XZ+XMcWFXRe zpkt+mrHBWFCp5RCQNqRO>7*Ny#2=+~pw$WQ(U}yQR5uSDX#x!S=wxFki(2wJP=f`f zXIZ0>UR0dfzyKtgb6sF><#UQ08NpCtZ3`&T8MP0bNryNRss`(3Iu$M=)-%c65(Gj6 z!MK3oXt6WMK#!nd)F`qQ?6ef`vV|Y0UR3lJb41G&DCmOxg+GFC!~#?fP)^p=;9<6R z^T31^Yv?ny!ikH|(ctvzT~JWDfR4%w^#BS^8wx{K+(sW|oegb8_fSCb%2Rh6i)QLr ztwn7RM`4ko&}ygf4&oda0I2GYz+Xy_F|bP1>g#7a_WJpw{S=fRUhqP#LI-fU&k%60$EDuEPOn0@ED9vBB9{ON11ri~rqu zE;2Irjr(RWGKMn@86x0HIoE*H7Df;l<7uJE4aS!28Qf4efPi|^;E239xW$#D!J)cb z`^%+*xoUwU(lUI`X!s`9rit6}CJuHnU;q$V!9~MKBz2Y2aZ#}f6c_JCE5Hp_0(H8; zaqZ$YDN`U2-!+^XAZs>zH`)kt_5#ZE2*!=8S135bQ2@0gevt~{GMXVx47J$1G8g>^ zH}4Y+7#i(OS_+1-E6x)D>2QNbobX~B_}y`!V(jj8pA4Cdh5ow3S*Vh&63A7inLLPy zg}_!q*yo~@RP1SNOatvT9#;g3CU_SaR>LHKTlc%HSwilV4-S27XMXM6%oPr*#PD2m zd*c4>@E&5uWg=}iFv$oq9#-+PYXw1|0m7{a8{XC@07{nGEkfX3s50|#BLZjd#d;gB zhbj$R?#QH-o;0d9=-Ru)qJcs@boP;FGY|P(q;n!`>ca!m%4jI*DmbLv#vGMBPb3|) z?OVgzJ3B(08{x$z16z0(tV6Qd?KehoFFO(A49n%i{)N`d(69m8S@19e@=tz)rm3|A z`6-S8>}G?#4V$_UF(iUr`B+INH{%)8w_<*vmpK4cabc<9(pjXHk((9hIEn~YXa>oY z5LTcP35!Xj$SyvbmV>{MjGgfG%V%~-7-VxQLmoYzca1<89l~isq(S3spy<5`yY2S5 zK4S&5SpYnX%ezbJL^O~WB*+lxM`sbGwlK9cAld_&v%^gTFb*s<)4N#<$VtIJ>31=( zcT8p&5L6H@scXT}w#Z2Xiunb13~T40Z`eIC86j)w$236v@xr=jPC^kOlPN2JCnr6OWfBMU<& z^>?;Klz_AL!xVabM8@fc1xgp}iAO3RoA>d3G=h6^h>)g7!n@zx^ud~5g8&6uW|XvN z0AsJ)XIcaxy=Z)^;7VY*4zqwsObTf=#uMzr>f+Nl-DSos2VbnE)eG3DRX;g6rrotb zPqbvIota}Y{vbYX?0kvWlCKqgJ;u++(;X3i2PUPQ0Z+kHtxiSEFT!LCO>gZvAzsv; z5`*zx({P1%VyD$meW&4b6i+*79K(zfPej9q+F{Y2DH$9HE!;CmL+%zipxT9}b%R3;9v=1{JBh}unHXF$$ zW`u3m@68#fZ1ayaW}XW;oX#POfImT}APLOWpwpuxXrW=>mVQB`k{t*bhF)ok+l%tt zoeZ=A6em7lwnFpaqv8OYx5PRQLddj;#r2`%GU6zM4aAMH@nMvKV4n-W!;p7%a)Pi? z8JrZX%y!I&cT@@LOdz-}AEl8-3?hwVv)dD)YaMF6Nk$3ma!*FyG~EMGk*`;z7Jf&I zVTYdMtgb%CU}}KKGi4$;>%iy%uK;A|I}!y}FLib5{TiX5n$A6j3^(-=lVK6cyeKiw z-&rGEN`xT(`O}!!&9nsH)MHOn8Ziy8%ZZzaCmyC(WCqrFcKqcU3`n@GK{^VnE;;}{ zePs*)fK(7}jqYy`QZQ5rAMLkuBmM?HDWW(U0J(dQj}?~%(cysNfJI$bj(bW#X87Lh6F!DE z`F#*Kx{UmIz9){0C&gD1(6q_~1SA@pFSBn=j9GD4_uouikStRj15bvTohzIFZ>Qc2 zfi>TJ@iPz!^l2N^%T+S&l`LXLWks?~+xLUgcX+vdrW$!bx}5;Kv3p1iECNn?1vE1P zKw)=BpdQ1G%WrJsl<|jMT@Y9Y7DJ7Fz@s*YH2hSz{_2T$OHlgO+PDFNg31(ZGFvbf z)((Qbrv?)rSnh>aa2pdVA_KV4nP1@HEi}R*BhQvDQk_PhY&owDIew%=Dr_aU+m4y7EuV}|t zC&YJO{nS>9)FS;-0?1>TS-hjC&(n7?IB?~NC}e2;D8AAy#UX3UXSrNur_eVxbKqV9M@X0dqaV!Dgge0)mqtLj=T|=9UHW}?lTWe;9$&qPupPFRn1anU%`FdBq>Sy7 z)*WIcLQ7KF3Aw}=jL}j^j0kv9)O1J3Pt1iW3n|NuN9|bQ?sstV#0oIw8P_`Nj`*W{VR_`M2V+7x zep7HJMBm(r94y)a2sVv#84;f0CP5Yj8v;9QT(Hy6*vvs_99A<2pzh9RGjuJFnCtm0 z$E-S^JEF|2NFqi_-OI!{pWOQMJZIo4Vn~pi|j3WAcaK9@OKc5+C z8T*Fc#bV-+m|(Fvp&6N~$!W0a&k*PSK#%{#vjsS(IL5&A#Z z-_PNf1MVZQ@1!8b3pYtpE_~99|MNo-zU`w|^8o$dh|@*JR@Ct9oS~I(x?mC==U{Z? zm5o8gpG6R3EZqfJ=@@T7<#@~Yo~N6L&*Z(Im*2d<2@n^*KT5AMB^XNO-Im}?deu+u zhS&4^>GvLJKKvJOnY0{wQ|Olf00D(*LqkwWLqi~Na&Km7Y-Iodc$|HaJxIe)6opS) zOGPRU77=xbP@OD@ia2T&iclfc3avVryz~#6G$bi5j)H5!!JoydgNw7S4z7YA_ygkP z=%nZ(CEk}5TEzI^@;=Uc=WySBfWKa5s@X9PsG4P@5^*7uT@^yF2%?W_7=scs^*K>Y z!gGDy!^ii#7|-&)_vh+XawY?O0`V-<4U2e#czV;)IqwrkSW!}l&xywjYLNJm>$1yl zoC^;7d1k~&r{;+x#6qEs*Qth( zz#^6)LV%1aN+`oZjCPF_6Dc~6d-w+&zep~bTqQ7aET94vlH&*egWt0?^OF;9QaBC- zUu^qh1PJW{jhbzLAKP~01PD9>S6a(osRJ{gq}N(n^a$wL1}?5!n!E>G?g0Hyx@1U> z6rl3w^T7KVeNz_by#>0~+_^Q+arywHX;#S_;NTD#El~El$Gbb*=l1WN=KOvDPz`dK zU+|cw00006VoOIv0RI600RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru zsAGp|h z?C`cW9GI?#w``LQ!1>nW{-$PeVkRp(vabCaE1C4RHoRo@!3V4bB+%W|EcPjr%nyzn z^M4k2!b(2?d}kWlz8UzDmEHn8Ji~SUqUAusfX{m8x84J^0M{s!%nzDUfxb^3!GUa7WDui2g@2GwBKZ9d(+$6u)hd2V>z$}pl;QXRqpaZ0K&c1SF~)CF@Tkw zr>W`<*>vhTZ)-!(G}4Ug0WTpfsek={=1VCYk%7Zsqrz~6^$+ULToyBV$gr!vWt+71 zd8DaX>@5`|YuP5fz$U-|f=$ih#p$FRD}YA<#Qc7o>(`qD@b+)6G5)#4ULv;x`-`BP z&jY^&n7g>0B^R0E5ANM}bI$?)%~|qa0`yGdSUvzOM1XVs4JO-2T~%k6Pva0+ftF1C_v^tn@2sG)qwq1%-S)bSH4PNi)2SiG2@k1UNnD z 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 FV1j@9Q~Lk_ literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/hypnotoad.png b/src/vr/assets/img/hypnotoad.png new file mode 100644 index 0000000000000000000000000000000000000000..fcf02576edc531d155bf9f923274b904dc1e9f47 GIT binary patch literal 21072 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 b{weVPytt0SP0iJf00000NkvXXu0mjfd>MnP literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/icons/advicon256px.ico b/src/vr/assets/img/icons/advicon256px.ico new file mode 100755 index 0000000000000000000000000000000000000000..dae4b8d3668213bdf060b6edc0d0da23e790675b GIT binary patch literal 42242 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 literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/icons/thumbicon.png b/src/vr/assets/img/icons/thumbicon.png new file mode 100755 index 0000000000000000000000000000000000000000..3805af1a39acf2e8a38fa688856ec8aa013c4f3d GIT binary patch literal 32776 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 z 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%0D=QaIj>780ce`AilulwtWL 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

    + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + A + + + diff --git a/src/vr/assets/img/send.png b/src/vr/assets/img/send.png new file mode 100755 index 0000000000000000000000000000000000000000..482dae98457b0befe7c1d5145cee4bac1f37baa9 GIT binary patch literal 12762 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 aOG=G + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Lapo Calamandrei + + + + + + + + record + media + + + + + Jakub Steiner + + + + + + + + + + + + + + + + + + + + diff --git a/src/vr/assets/img/status_disconnected.svg b/src/vr/assets/img/status_disconnected.svg new file mode 100644 index 0000000..46d1a1d --- /dev/null +++ b/src/vr/assets/img/status_disconnected.svg @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Lapo Calamandrei + + + + + Record + + + record + media + + + + + Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/vr/assets/img/status_lagging.svg b/src/vr/assets/img/status_lagging.svg new file mode 100644 index 0000000..1fd4879 --- /dev/null +++ b/src/vr/assets/img/status_lagging.svg @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Lapo Calamandrei + + + + + + + + record + media + + + + + Jakub Steiner + + + + + + + + + + + + + + + + + + + + diff --git a/src/vr/assets/img/status_waiting.svg b/src/vr/assets/img/status_waiting.svg new file mode 100644 index 0000000..069a4d3 --- /dev/null +++ b/src/vr/assets/img/status_waiting.svg @@ -0,0 +1,398 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + View Refresh + + + reload + refresh + view + + + + + Ricardo 'Rick' González + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/vr/assets/img/tutorial.png b/src/vr/assets/img/tutorial.png new file mode 100644 index 0000000000000000000000000000000000000000..4cab6f98e96fb2b276c2aa5ffd5f5630cdf9657b GIT binary patch literal 185607 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 z

    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%0D8>e>yY2*N0T%V;CG5p6YI7YpL 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

    4sDWy!=Rg`u**-c zU?1DE*gvO7v1IiI7$Ug4dN|X`!$2Kp!A>YGkZQl;kt0a38Fn{`qQP0yH(LTM0m${b z%?6C%w&`MINjqbZfWH!*g!BLS9)U8{IsEyeGE5e`HMcZDNYo7gTj4DqW5>Tpdf0jWbPQ8lz;tWHKt z1yNWMOIw+YJV{Y?f`UQ*ZWj?|3oD_n`NgMKsd-K^^oM+K1yDYzhTY2>DXr6+OALb+ zsC@Izl^r+r!-aHK_^_$|EA-7$$8&xS!rqNOlM2aMKAV%)4yP%Bn8KUvFXno4XcH*x zyWQ$VU+6uBPyU83j-KiQuHm>F&K|3OQe0r`>nX7{B(?*^Juj^6YsLFYITMFr>A2@f zpM?`#R4)-xzGy$eOhJt0c*bu0=^_tM|6udYPt^hYZOWHCz6H%GSb0#MHpZ-i<%}eO zz}g9Fp3@3P1%)O%ijSZEwSIQXo-C))Cpj@KVJTTGzvTUEZp$ID96(LuPV1NFQAOXj{W)t~eBHTk zm9x@x%&;T@9LgCxZ!1i;j5ft>ml9c?Ag3-cjV6n$PvQq)B0Ih)faZ;x{`iT`N~p7p zX_AYRl!7C=i)~*}QI?eWN#=HJFu=SfHB81bxC+JSpmL+=bvN}+l~24qz5lo}q2uau z#-dfwHjI*Xby7$z0?l`|Hg#}~gjgmTj8~qJf1Z--Po_clUC^<`OM=j!)em@TAmqcr&g0Y04@aoPCQ9V|S_rgaf zqYZfbad-pIPaNGDxH-lD7$)&^fU{uYfOQ`{W29AVw^b{ao5P9vSrFrMbVNl0zMyB` zwYZgW^HDRnn}0~y(Se61jKC4fiF$Te%;m3m%&q2l4!p*6WEv%~PwK1sQl1A#KHiT> zkBPKS`UeRxE?`0L^DhP*u#_9F73Bx&;0oB~{hzl!hJ`_pR@GKY1C$MAJLOch#h5j` zzc6k))l6#LM4+NkGvog$s1MF1w0hUQ)MU}+Ky-noC8aNw{r}f8TyIrF1(f1s8ExWT z%s8kqB&TYw-Dzg87i}Xg!~YiP6i{Cs?Wt3^Va%6+TKGp%jR21vMNdZoiUr#w!8ngi zoQKzf44m#MMd+1i3bWKQD1t-Z)Q_MT7bEyfvnY$G7?)WnK zWOFPDc+tMczxE{B{LMpSf^7^I&cgl-QyJa5m;TSZ`G>fVLKKM|cdM2GbGBC&0Uej< zO>^z$0dtiN1?2tw1J)lu*IFxv661ZYSG2G#{Zj`m)6&tKkvz`z7;i;{OjhmXA5|ys z(7w~Ys+y3T(Ybou`+ocsQ8=r z(Kno8`8%8|{VzNrn=)9zC)OypyPyuh?rS5z1BmpjYAjOxWkPR%y;tb_l8>x%h;>!R zcCT{ov`BAJG#lOdr*wj^^;E{C(lb=vVkBd+mqXguH>{mvj5-J2O^rA2OQbK11}*xA zbaPl$5$W;m$A*miZ2?{%D-jP?68SZm3|>^C}n2wztYGL z#RbpcM(-}nPXPeyw(o%4uwULA>J|aEQ)iiu8 z>_Qs#6C|~gFz6y*CfoB%lrQ454m2=Q@>#PvK^p0+n4Sk@^qI=$Sl~3G<+eGCPZG=} z1@uMrJM*7cLF#^sFKt1@G8aP}Ud18^J_=E`jraTG^mY9Ri3G6<9(P1r$bwtWbQXqLPvPTYW*6jL` z{y;*X{jvQ=BywyTsb?&K5%TX?y{T&LNIQqwN(z&?+dQ} z=XjU>Kx0R2CyEayVXXaZqeP-%r#R#!m%V6C5k9!ovV zYkYj}e&ThSZ+rP538Rq`imdNj=mqa{eosk%+Ct0zxNvcTCvtC6)Oc6`!NbjIg0R zE`O{Bt@E-Epf7qrC=NwxIKzFyrjX9u0W%Kg|T$Jv~X)CzW#Y5p_LpgC$lHIHh}Wp&L5pQaEb%+KKegENn>P`c1RTBiSK)?DjsL~Z zayUh)m%UPhX~eAR)vLFBs-T?cn0|*(*4Zq6>R|f#E+}Sv&^1Fj@z=F&G1sQI;xW(-txgIzI8LtK~MSIAs#63a)dwbWow@k>ezT)zX4(|wro zeO(ZoLU#;pz<@P%14hXx3JnIE)zbe()c+>=^4ebRWGOtZp(VG*==d=D=`m{~9-H77 zvHg&riq^bmFo{r&Q!mzjc706b$BjStsW+?rt@oXOjmuEQUtL_?!K?jF3fX3_PAIa? zU;M0wm8zki{m0mwU=yIyD~C3QY=34ME`c`?*TiJ;CY4!E|oo{ z&juk!k%-y@j&{PHATi>GxKXs?3!A}M-r;AK=^AA8Zb*Zr?9Z_qS$|97OX-uut3P4fZ?e>iMsdNT zYkK+6hvmRxcUB4Gm6y?2P^RZiBr5Xb`-QAx)5PC8%ldz|lmj zslWfU)F0##FL9!UvqJh^I=zU4x2i}E6A~&LtoBL>3Hz7`ubfxUgpaCvI_vVCsh;b` z5xV6Q9+&EX@YdT&c6+O*GjvL3_uPZCrh!RfQ6O{?A$aRwtwo{|Lp6#>*{?v~-4PbhIT^?lUO2Eo%^1ize zgmfRXo^dO^IGM$Mrid@m03pq$+11Y1fMF3$!sEjff|!MyP5B=H+oEi`H35PYo^=<` zkWFI>(W`?6)L(b&C*N?5^Z& zEntB@f&kHEezwQrxH=KqF!uKEpjT`C=QN~o)}?Ig%%@O+SeF#n&)VA*t_ajVw>aL& zh>V|+pcv*Pjx|@g?Tc?RcPDv4KNrlt+yq6AdB7AyhP>$yJ9R(Fv}whVISh|?V69%E zv`YF)Np=X-EU@=xprfi!`90zT2yN74{bU|gw;7<+3Z1xrntR$ zylX+u)9BZN!L%p~5kWUz?&-rVyNvVa(l95dLE^s1n$_u02c9h4UcT7Fk~h%1?GudN z+8oty6X?aesP143z1qQ@>m`?OW_H+Fb!SAjQZjEA^@DVm2>KHur_UoAnTTF9HZJ`g zYwiA6$>NWu*qxP)d4N?^w{TadT>k%Zlo8$TZdp$iUcN@VMGtWyIZojjr6SIF_`gt|$;z zWnSVm5@ADK>{Q!SgQ$SxWC}W3Dd&?a0L=}I6pSw@(cgMj%Q)yz(RInu9|G!pR(C>a zFm@MY&gGWG&WR_4ytXNF=iBwdmp$BcY|*BQb>6X!!0(8w629xc{beBIDZFlQAAl)R z;Boc4@@St@1m~)Lut?pWIM;_|NzDJz3s1L*m2x$00k3y9zq+ER2 zf4#OX4@GmkL+-!ZxFVQ>&b}#z?1#`qs>}*4(vgUNK!)6mxr<26=5#{&1g`(Kmj(FE zvEGl-u_v`+BC*hrs_1AH_!A5mld-rH{!ke)v(s>Kj0SBj_VuU2!_c-8 z25OhxB_<$CV)}5Qxz1;&O6{LKfA>DCbM&3lAtOu|1Ar|OJgI8EK4{w&1E>;T<^>e+ z$&@T@@9A`oI$9H<*$HzEyf7QZE&fHEg`xxw*CIKpTWx!MBziZK*r$L64ZM!&Ol5 z*@R5D6r(o&l1VX?B~sd~s{*ihoax*N1xWp?U?wit(20AjIfg`=1@~Da27d_=bsRoE z^K}n!*^!Jb>KT7DH_X3U7pvArR55dB06J;`RZk`#PriR~N6Zq0k~st>cYk%E4Szb` zkri1$RT;)ssq$yH9@3+Q;tLERRsJNHUI_GiaQynHfE1%s>i7n}}_dv!m{^?7!4IHb>94s6cMQ?w%9~BVdmrNwTWKhcXQoO@jO$$tQsh4N< zoFf!U?4MK*4zD@%p$eg3!hjGzhe=3T2<_UMp&U#>K9PnS{7#?8~kuXoqcE@06| zXN_cY8v7?(4 zETh^Pv@oT#reulSjef8b#P5^R^Rl3cc>h9-Ca}c@Ql6cLlh+X^ebE?ma*u$5sY#B& z3HxE8LcVeSaj_r(^z%V4B*=6TU))5Ffz;j(duq_%8{j51A@Oq)-*1)l2AKu5a75*q zEA-4?g@qIpxuatEgBvXW)LLrXK{WkRP;`$dSm@ZKpt8ByKF3&V&fMB6nuHeqdjIlj zeK>t+8Ipp9o8%FhQRC9}>IJ)g|Hz9AA5!e@6jP7k{6=WFjP*)!h{s;5UAoABkvH%E49{ zR>YlH!9w1zvDd?trY=tvL4XPW2jr;~?xc?oGU2EOP-#3HK8k2wmjlBc<^*g?iU6I) zUfxyIVY2cP*05=NOC!PQrov;&fP!BascKC2PbY<$3TW+`aq4d-dN&9u7n{HpGJ1ha zibKY*_)vis^HKa5aeI_|C054-r!P$bse*il4Au83^z!`_l7Bzv4r%2~$QI@!R5H8? zvM;EUN;HleH!%^(^$fF;+i2H=Luufg6vxT-7~8-*7Ngyt;dZ*ZL(Q zQB;n9cb(!xlXU%eJi5R1PIo0+^bZj5ct)keypP~uf1F}o_pDLIMdfj;QZ%-YY*zg{ zbWa{M0XCZm@L9BHrWaP>1rK8?Qu^`hM!X}$GVbJSPg}!>suJc0_;+2wB10@zP`1cW zqvQwVO^H!mB}}PR5zh-GE70WC(%eusACXx1N z!|2&qyswYU-Rn^j`zM>puJkp#MiVqv$_`GAdOG7Y?WfMel$rZuSWje zBk%ngjDWlAJ`4@>T_Q_CA&rD^y5KdD`yp!9EgwOZ#7@N6yZIkh0Drd&W1f3>AKRsK5}F|=+ITPZ1G%ubw+!jq5z0Px$LDoE4o0=7;n=x<2#GN7 zN{n9HaJ&FacN$jB9Nyn$RxuT7Lz{oh>@?N+*ey4`%j6q%vo=&kH9Fashpm3xn}_pLlG#fw zoir?p*s~7>gs%EzxKwFjkNHbQAi|rCLyeuMomStxU$<}n`CS|T#m)>fT#ESRNS`ei z_(a*@F#*7L_&c{q8;VFIKAiE5?lufTsppRd!myhc1jR!Z7O{W2%cmTZWQOEgLuhM^ zUE>X~-^iq?e{k))nvp+pWze_b>PhdFlgpG;02vKF-OTd-Q);+Z`WZAVaKBKK&-Sxx zp&X8$i-ju0s0wU}^8;WoO~Ba&O|Hw!q!vu%DmJX6HKCwCzN-EjP?Z5oCAL53y7Cc< z!n6v(ksECC}gZ}zK>&~%WIvfs3l6{A`m;c>em!sco@+iYs5$d zp<+DvPJ}tq-vq^U#sHWey3w_*ghIOrI9wM&--RNM`*mDi;&-z@%43yCt7L3|21sktv>-Feqr&&plc(6 z9j?u9VE$s?p4@Px$m-+{bg zL9oZ$jvuB}R6pPJcvOgGp!^unkoQf!bdvpIXX&H-GW+}Y$kT6_c5v>QKg1aPn@n#F zdh5AkJNCDh!tEQk!lY(|$|m*@)#9j5uMtlYiCmW0r1y#=^29)2vRk#Mzv= zOBo`w{l0lrYXX~iHtud6c&hup+1Rx-_Df2U=?nhDw<8wc;gu#gBxnLrGgRz_u%1}>>Wx{#YeUKivx8-TURC(SE1j2*Ln4EYjhO0%8XwTAiM8OEV!uw z6B!9a2A)_cqi8%d6nGvY{2|@;FxX)^$gza)b+B^FlH1o+)<~aJ5-BS-Yl|c#Ty#~P zkSRJ&i$`lbRZ1yeTY!l5chhiKxdDlPp=kj;_iUv~dU_JmBK#=f>bS93lOwtnT>H`Q zyWSYrStu9& z1~mUp=(LxYABY;m%Qcx1EthC$$-|JXrxBo0k4Oi9e`&lzXSF`}wf8>s+}MRA94YQ> zgdX5?b+x^(qwN{{?dZK%@FT`KS@2~Csyf8>6t;1O}6b2Y_ZX`U$Qb%u0tsQcD znxZ)3vf4NEVzUAk7{J}Xx;aIMvCgf9%i*C^Rp0uu3iwv4dnT}L`KNzp9%q5&J+&`^lJvH0s`p@-8_ab=;Ft8P0>Fqj1Tt!6o0Ju{w*udx%{EJ zWG&|F>%lB;`NrGLKZ8Jvr4A;^8~+vQ+2q-{_g>s+ZK%V74twxoK2yRl2@IWGdL4Xz zeBZ~m{NM|%^TD{McYUN}H}(xC;oc_d$Sxox;8TjbOc613l4;}pf?*^?L)fTCN&6i{ zm|p#SCY0pP-`oi0&dY==Ocss-FOpTj2^Tn}!qwW|H%E)XuJnx{9OZoOHh6EfY0O~A z$>-{OBRH3O8SiJ@Tg{-22n*P&wcnpKV0D1GKE4DZ*fGZ-VQvVg@!8;oAt<37a8umR+2M{g zK)}ng`QbHip1!JcagWE;BAjB-u;${ts4*4=1`R=X18BLkc;x5gbE=BNfqbO*CD?G? z<+3?i2fFY5HY=T7i3y+EY$?=3o2wNaMB;x*|EF3@T3KQ> zw)q|2dv(9!!X5qRV=2P4S&~ z!T(Brp~*H=I;T5D5$M-3E`_x;#i!>?!rigKZVa(0o$z{2YUiG}l?#db`N;GrBnlL8 zy)_W6=odqfT_40zV9b2bYjSeL5sWc&;K(x|x*c9wTNh79z_-F3ehpxP*TE5Ep;ksU} z7IkK53NKnuln5C^&KXhs(IQ=teDovC!bZRKCl+}=k9`mIt4n9!OiEq?d`f@8^{U#c zKJ5rabg$k(67wMnJn>WyzcKpm1*TI_ zkDRx_dgs^nR{||M6=Ur~5IfunW|^&h9Xv+}2!F!=@Yy5sso5i>QB#XsMC%7-wM+NS zcSFspR}L~0>YJg;4GgEzL=mlU)c@lpixod21vVqR@8OHR7Jn7^yXuI(dX$<+aO+l1 z$uTd6x#x~;bbAIry-21zlxg&-HKvc@wx9}f=g;pw(few?%}=7aFxP6&On)O=ABS;v z=*qe=p(;j!hkCf1umNur+`!AiUhC?8o=JijiNtF18P5jWD>o88Z0=@45hsqceAL)2 zydx;q2$&A0s&&;2k$IO(NLcE6+R9b&Hh^>);8wsN7xBZ6gOg3;U5$@W-&Jz}NqMyk zx=HqJbj+_NPmv5dDgDUfm7kTYX2Wt`WP4|fHSWr_N&rI%4(Sn|hfx%`2BFf7`nI1g zNX8!x%`jq?>*}g6Lszo{w0I8t>5j_SJKg(G$O)=_|NcWe!o2g49XJ>+*Q&IyB-RkYKfx%SZit<4S(6F zM*{vu4_S`Nf8&ToZ|Fj2Sg)YCiJRD&Ss<%9VyqADm zUkA9!0cAOI?e3v|>O`bnAcz_q^)Rfpd=Upl8=%56X~(uX^${Nf7kjaV%_bdyk)NL5 ziYRYkuQ-4EFaN~VR3iV>Ki}{{b=_XmQr)vjKlq8hn8yI*MVuG>mOyHpPNn~U^fUuU zbS+R!dB@{s8RzAZHSiJn3C3@n+#C75o;aNV#gnJf(Ni>pwc7kuxNC|Zn?Z&*f)Ap> z1eBIB@zzT1O<=nXtsQu>UW&iISHXBUIyT3hZkb{9yij-1y`=@1;WXg(%5WaBa4u z^DsWA*4mitM}lRtz?9HAO0g4hj=$vS839sI-b*~=d^wCqd#Y3609;6_=+LXP_o4?L z=i=rLKxyd^KRi?m;twMS=#%{V@<$V<#_s1?7X4l#Gn!w5j=7;GmdHdqw`lql9L|skX6#|i$HmSNB2Y2 z$ZnKqU1BX^&5>RVdw?MZ zn^-gVY^jc(C?aPHzo-=dp`+w6N_$^Mg+9vIb$Tzcpf&Gn7Iumtjn2Y_h>TYi`g z!Q$oBLhJ9(WOt)8!$yJ9{7UWEm#_`;8gnV|7<%@U8(x)_z%{m^J`S^T!Af=nRnQ)a z0L*{py9w{f56laR=sWAIdre98y!*aqvig(;0K=T5+i1Qfc>G(BI&r{4!O`FM$d|Fd zBS4@D|BqrPPXn@TBq5Ey%jy5}PNO{djRqsBsr+&n8V+cx$rrJpUu%DT2m0K@vFsq9 zv7EKG6TAxzCC12P_)|#ZW_IWm8r1E(-cW0JmNH6UPrlHmR1Xg^Bm2}6%QgohfFEi6 zROmhb<+}4t=b!PmI>^jRc(!4QE@EYgP7jgb2FpKvj3Y$-v;iylev?QI&sl@F4_`NzfSmoy-AZzYT<6*a{?_Ce=~U~}DHxqgM`X2mg9ka( zFcL>KiJiwn~*G?XoWv(b>_6K!p9VWxL zTL6HnIj$>|AM}F<^bx7>gVNb_VZ`!SA!p-N`{+c?z4Mi%J%hr+gkm0xce0Xp&?SSI z#x0J%cw;2STsVRjhW}?ouYt=5DAPUkj8Xxg4PN1}fD`K3!eVTu=r|8XDYD0i&j!VS z*(&&={2s!K!7I9_Or zyShqvqqBhV|B-Z#QIWWR8?Po~;<~F;{+H7vNZ5x|5+qP|P=4Nj-8Jqpg@Bh4- zb7tP%=bkUG&vnztjP85DY`;DKgEYW`^|eSkB;`!EaqZCKtVv)_A+UY0-^XMerD!uc z_1k~b7^J-G{@N&kJsp#PrHAX!`cp=iyw{Qse>n$Te2*5u!7I@Z&FzL9iTt)?8__Tetc2B<%EDr9_R78-;B-15Hyvx6>!pj>vY zWh0Z2kQlj7zFv7fiKBTeOq@C-T;_##7g``)eG~Y;+ouULs-T#bljn5g;1VKSyhnT% zF%}`dy}s~B*^Al*psnwPe`(2US)VeYbYP}l64u%1Nx*n9w!UTS+6Ey0ql0I)nZur( z+T!R%xOQ@?K24ll5bf)MA$#X>%vrwoeMEE88_G^Zn#6@G`2H$z2sK9?OB7i6@*rYd zA^_gD^&`t*IQk0?VspIzPFA<1uRL0_TQS#UaRuCKLB^{8p($WAdMaCwd?rLC?iMpU zrW}AdwD!(Bae z6kh0HU{7+phBf;d^J2yPt&#Mq>u2uPK>t%AUmO=OsqL8`=4gABwE>RiFO+WJp^Kou zxH52F?!Xd~Zm6NOv1Nbm(elx;W1f|H zO+ZAEh(I67!IH93n}sn>@JBBA0O6(m2sptj0>q1026o{e#RPiK65()hFg zWZX&b;6(TSGve)O9~ELBjLpp|VHk9Il==Gd%Mc#$HVM!ZvT8)A!BEb=wqZQ5;F#|9c_m=zILgCRumyo(0c}0;*) za5FDIEhna*Ff5vD<~4CZA56U=)!_!3u)~RfOC(SxMzUKOf2nur=?vU-onCcO*&#Z- z;|adOgo8V!`F)82xBh-_b*gy>D5B88E6FWZZ}HQrY&wz&DNvjAQ0HQwo8LTap_hlP zGq8$YD*J>xkne)xfI52y%(gb5M4!>zD+C`C%Fqf6Q&nae77X4N)XydTfWK~5Y>_@2 z(W*A2Pk}8WWT+31nwUWzubtlGu24n&B(n{lz<*&oU<>B&C(&|JZf{c2kxiFF^gC zC!cjwwHfcl=&^-?wvend^e&17&B4JZeA{WM5gMQ?Fg~rrvHk253C)HTMUjaj6@CVV z`BMmK?k8X_X9gc;oH@jnIHfo!Llt#-0TmIabg&im+#L3C~{v9z4ev=JlA%GAU9R4@|dz!FOzZ_v@p#gW{0W1Wr9%jnHW z8%$Q{%+tab?pz6|w@!N^Ra{_6pVpbuRII$ul=deJIW!Z#jUF?k*>0FwJ7St+Vkt<4 z(?P_EgW~T?b)^NKP0zHUo)Kn!fKlVd061DRAmfT6~-JFEjuf%!$a(uU*3)3?`?~8J?Sed2gM_T=c#br9ERNZYT zw0t_r;L20R%NKBlj$E)96HqMrVe5ce3}sG6wOGQMxqe*_>vmb*XUs=e2bLli><4@i z+885yrUfo#PD`7TO&BpLEzWOb{suFFzJEi;>@hdoJQ{Xgh_hl=;wv7N4Y;{8Z5Xix z&VE1wVS1>jZ&4{5y)K9LI`2^OP`sga336nUYaOH{gv;Zj(bBAP9m^AOw#HjRMRR+-j)tNWej4Ytz#A0h)Y;Zq*C2<9v4_W}0<{ZO&L?#Q^$iD& z6y|zwn7?>kDRr|6b$J_YXHX>vbq~mbg}6iwfSu>X3o*Wl_fT)D4moNUX8*D)ERSp` z6aFAUt>JU-5)(hup6G&B8HgT52rXKd`Sx|F)r1@1-Qo%`rAMg3%kLLJ1#7xOUW3Id ziq!=K*M0g1MujC z26V9eww0)cwD`G7Dt`?wvtF^FSTN(V@z~-%4yy-Ty^Uo`i{oV*ncx3S63ovY@n1g8 zDdiLDEf!SC`{uy;sesH?`?;{Rf!MoTDiLyO$a&rdD_YNmOjdn5wH5tag-B=Iif3^( zTu4N`>3zF@Bl!a+7ZFi`P^f6dCw)>3r!dE)nLO}Q7*{f#tz(}o5KCR#kV)bd?OaH= zfPI8EsI={5xz5bAWFPI635U>B)c_@pqf>`7T}`r>Ro*pdbELU*vJ5dCaM=vcm083| zJMPtKV>g!;a+I@c#>lq`c5bNO4BYNa)Rac;4s^BW`9gdxKy>VmYuBMM7q@WO&7l~| z6tFA+(+$W^jhABC*O9+yfl@aYPbzx1zE-0I4q!MGrW!#af@p?RI_a(+** zy3B;7VSc%@E4If3X2Vx>0o2yjV_E?pe)sGZpG#x+qV=d@vIx;&?jRyI3~tYaf%jmf zvyIfg74CBg0O2!x+1&u2Ib-Ge=0L$(PV&4(!{5+)DKqGMRbd4Kz8}wr&_~u^IW}Rk z1jqY5t&y<52q8da;7j33?x#FwzyyJ11Mi`9^qAHK*mzKrf?Zr)kS+WRUw_{26(Cx5 z)am){qWb)$7~Pp@Meif=wQH)w{ZTf@2c&k0AW;=FoHzs^{bm_bHnQ0o=1(|VGVyVFTWQ4a91%R%1$@+E#63H_XN%jnr@N_^?VMJa3P`bmHm zui!iz5UxLVT@q_pufYhCvWUy0dlQMw%_YS&A(0Ot496HSG5LNQI25Ktk!#iVXFb2R zA727?dmb7i(5Npsc&O`wl*nFE1b;pW4x3-ZbsaB@WwAp@u3Tj|CIGK;_sO*k1+0n2 zb#>mIj$`g4IA;?@CXBqGVx-7Sh_%tq73e#fa5m+EFw@&F0B`TrkNTs#oGZ2!fvWQA z_b=!)D@BhZsP4C(?)?ROZ^P%7WSJG6r@t)oQ`@#a8U0i1W^gnA)dbelxUt**8sexJ zcGq3g&)IB_VMr)7)Kd9crwB_0>D9pv^8<6XDB<3|^9Qt|%tv1Cf6tqg}A-A%t)FYuchMTZjRy9`^*#%wVybC5qbe_kWs9dn7B}ZQNMuX9bZ& zM}E3+ELh>Gf`VBk0|pI}L*u*4A){||Tb!@2VuZTu$idUbmr*&9r9ZPNUOTZr4q`0+ z{9_Bw_1YDw?)irHD(864S<_WopD!}LhI(VzX0qkRH<7+CaFjN>YKtr@1-b40rqq$x zYM-xpjTP8k!(OXiWU$k`J(5UR#8_^*qbZ0 zf#K*10-_-se61!ZhWUm9mti>p|7gV?Q#rkgwEnH(v^YkfEKV(-RWsbAtRxJ5;*XA1 z(^_R|5q(rsME6U#yIkK(ZFbo9^FCIawKq}G@WK^_U|Y1D(u#Amw9e?EE82>KFt$Wk zOf`i#vLii53$R)O#T(Jm@{_i13jGAUcCmDp8L~^oqGh#<%AE`K@1meOd$#E=U#BF8KY*dbnrLNAal^U8h^uE-(jZvmS$?`&C9-)q@{)|y)EhL)^ zgyIk`C)nk6*bWP<>=R7^ZfEpo!D6hBV5(({wxD9EXE#@z(Ji#;Ws!!isbmQkThnxg zDP|8xhu2x3t)xmh#CAtI=kmd%ZC}q5Wc4zH+QmhoX!`A02%d3o>3ej0Kg0tbF1`!g zr^qa1>UYrjZaa|tXi4h@gVxP?%a6Z)f`CI^>4H1na$7^e_rxf zS<%M&WS=xnn!f;{KAD1!65`2T=W^ewS=wH%1s-QhB}`RST*9aPN6llY970GO+(>pw zr_hBmdBke9HbZ(U0u7Mn855o|n-MyScQgkbGC+&kD=)IqGx)Oxs^e0?wdYe+k_~(n zf#XSX5#}~}dl$Po42&Wh0xY}oz!g=`Qe8!}we^@CoR?Cz5;9yGY}A3ZAQ(fw@YM?y zI^nwPbxj;i!in&9EN2_g^R#G+MJd-_Q;@}_JEdW6^f zA*yYSHWm&J(@)Brd~-r4hdNlW6Jr+4`M@QSs(AsaEEKG>-8LRc*piE&YKUOR zJi~|fw=#*J!O+&2It@RDAdBej4-&~;l~&Y#>K;zzqqv+bva1z8WQ17iIbaMWad9u7e0>TG_XK}Lq*(Ca_;L_2J>aa8eRmO=^Zydr|NP=ZW- zlF2%wC>)bagt`j3qvu0U9EK@lxd%Dq{ke+fMcJ|Kq0c&`!ISk z3!N^a)Pt>g3Zh^2S*$VVgFKPqdO z9B@F(f8@h`U<44X1Uuw3@=;nOS7|Dql}#^3c2cGwtAdS3Y4|&9VIUv_vl{jLHs94N_S5vTja}a#pAT-;^LOfY$x`~d z^PRj~o*CD-!MKFWDyU`DmUDNsJTedg9`4n>zRMJTpV`rPzqF+*F&~FF4@=)xosYbpp!=vdp^g#DMuF-1s z%}b~aHxi=Sxyh3xY!V8f87`sXWG$3=8fzQ2A5K=O;`gz z%?k~2#gZfHeo6D1iSzizg|h{6tIblIqzAR=-eGz7n@`PQNl zw$}uwUGEaP@HIjkLG+h1d(v^VQ|_j6k|J`9>~fj;EQ2;|T%3}JnF1W~!As+2xE#K8 zCwNgtoog2WsfSI$Tog~!Kh1YB`g~@3$UOE|gd{5(uY?5s(!@|C*q>d`z@p@k{O1OWLBs06}YipGRQlj5s$tFo>R}k@myu%mxmBU`=q~YcE|H$=$AaXD` zKF2|i+;x-L@>4ALt4QWM=SV@E(7?fKXADm7=GNupBaGjjoVYT@z!pSSe<V~*S zLGK~L=r?e72s@}}Ji-1vc%r{gCxc8G?7UE2Z*q~uZnBKs(3TNEw>$`}*?+H{<%hCQ zBS%6R^rqQhjIq>5?w0NJI=(NHD!bN@b&jxk)7NG8=I4qq28qw887_O=pqTGupm-bW zSv-shcyDGW*@p@~7c{QaW=o%C2bgoP)AT)Izutn0vf@$^?wqCsg*2Lo zBzOsM82<5&s+#x4f9cE#h#PsNnY98`P^btcG`-5)XOJ>hH1V`HNIXD-$VUQi*Lwr6 z&)zA;)tF9L0c7Kk!P}2+0HJ~hdg@{Ck>mB&Lt==EG_rm*;}dMN5s)vY&oLGf{8Uie zS0O%-l(|b^u_P*|(;Iu6L!MTd5VU=rW#HIe2LyN6gp!782e-g@kf!XR@)8m}6>@Na ztvH2ytYADl5GE*CquqJLG0If9uL>*Q+Lkbk5Q`#pe;dVbhPkvN4(<8gZ-iN3SqV7~ zA7Su|;^myvx!e9S^n+)EznR@3388DlJQA^qVAgZlqqc=rH9rYvV{F?P*QAP7XxGI@ zZnmWus(ftOO`rAXkhln?y1x<5{izU}!A7Mknv{RWM>?)ZN3>V=h6MO2dfQBtQTz9b zfwW^?<}r)paED><7}qML|NF-c?w(h+<>V>q z$lod^=hGgPZ*%W67|lDD)i6l5Qkt2rUp$Tj@4r%%I_O+(L$F&?z;ToJ`;o>~@MNbx zADrZ)@X6e!qkj{3o!lZ45niD~NboIXuiqLh9=_S^cHF<*Y-IbofB-4`;%kCL4>|6T z7EJnlDDUcSX$P>^&ST@-Bg}| zli2QwZ+nsVKGPVFgaL_-Xd~|!DsG!LW`CWjc5#K0y0hpzFdn`puI!K?J!YX)bT^~( zs;Z^waoEY0+&U=Wz4@5^rFIudh zo@sL$A%Qew!W=TmrWS3|Nxn_>f-m=vF}COKQ&;D{wGIWE27LdLG37Et@t7rE&cxip@BMOKRssu^EeRopi0ku^V-dOVE$QnJW`G<2nG zwxv4w5aM3?)*CyufZV+Hh1+ws?TOjsv=4^4g;CQs?76g|Zs$y5xBmB?*Y`+ZvAMw) zf?iA~NSKIfd@0F*-6}G-|D6V=j%@+*9uttMt!WgTQ^qO+3~G!P?mcH0E4R&ZT31`m zG5GXiSDvO)7=zm|NFs|-p0j-aX!*|<^lOz^Pny)bwCjqNSev-Tw9L@HPo-1PcHR6V z=rU1zIR80NP=BK-Xd}3`trAXn5ci&UCE05v_q=XvblJj4SW-)0O>m&?14pnwwq`6ACMuKgbWb(MEoJ7Zwo zuK+%^%5Jb6wcsrm;EUPV!X<}P{)jnEcQ~y6s5&U3$>16{tUE`4=>u4m0 zEs*?j#5eb_7rd_BdHl!bW%)r*8TmgA9w*4R7udcIAMa$`%u3nIZ#U&Mvlmzo&J!xP z6NDOdW2V6lNFVEM6_Ejl%iX7!=%4_n2j7@-(X8$Po9D0?HL`=FU& zsXy*J?F6uvSNZ84wK^pHM)mHLFx{I07Rz>6KP#OJPiU?aSq9XjnWYwX;)$;!BAM=@6&LC$Lp*1Vv=YU_Ee7cIb*^6P!btP}5k+ue1E{kpG8l zchlG{Yt9i)dPdMp5LzBNSyQjS%8{e!7PAM|Z}Bq{1^C^Z(0cTbKS7>m2hK{C($$^! zk)9Eq>c^AyKfzjbU#yCf96UVTp-cz#{1Rw`)rIVeW{OP0~x5o=Uv|vWCXgj8eI-yy&s*{RE3c{>= z^L7Bt!ZR8KNl?)Kv5<=&`dQpmi9${DtVl>O%yd?{#m9&*Ki``f|HpNPxaAVtr1o2apGYJ_`)Y2=Jd0 zM&Sgi=9(i@s^nPMcXFnmoF1K6_+;~LV}qD#Xg3GlHAkPU--k~#;Qoi{ufhP>bqoT` zZct{YIXMdjcpRoGY;z-=yZGyL9}7NSPX|NaE#B}LNlfalH>iHJbs&AVom@k;H2Rm} z`l;Qlw^B+Sis%d}ILe9Uf0irr)!G}P`iPj~E`6Dh3VXoF0GI(blS1W9yQ>0Tw6wljbu9*E)Yt1(%z;X5Dag|al3+h3k5$W)t^!? zo86sW^T_033be9a4%{)UZo!YoKiyFWARRZ+R2;6trt#~J$43p_*|(J8EnB_y0J+o5 zIv=eJ(C_QKd^#<%h9q%xq6YqQC4K6N*y%816}3Dguq3wXM>ZPHAyX#Kfef3VAa7h7 zAVrkLkV=DBTr^Bp?qfB5KCsJDD3rlq2Dao#F&j&^6Sf!JSkcqiWyz*w5r%WFpp}&_ z%3d^DMUICym%qftuNwiz2Rqlri}lpA=6-*bBM|O2XmaB_44iIdnJ^L~%Stc`186lV zuZLUU-idbByY4>n;+D<0vE~~8a#rtY^wq6>9U8M}F*=U2>ZqmO?-rxUe>ALho;Y?;Hu7@3Uxyu56%f%A}KQR=W^THp3 zYVw`VCJM&d1-$IBuC{RXJYn@;ISiR`jNBADX6{}T!W3mXTtCBC>2HSglbI=Vssg<- zKG&?&$!gO?hv_eo8x%Vpy^zr;Xp6Esuc4~wP7gTvvC|ns6Q&@sS(2azHo=>1s7KtC zEG!0^yLeZ#o=lX%b<2wQZY>81<87i#piOS`VEpA2&1w_2Q5>xb7G9f*qv}tKZ5MUv zWW`aQ<<(3A6VVA=pLF$qpFo6ShLu*79p=9=SXQpwmgkVcwkeB@!+fc?iWgD4I z796l75p${waH7tsCL3cgj8cnsepsMqxpu(QiSl@{(~JH(CSapPp77{Sx@7a)jmnT+ zJ-X*rQrP(w3~(^1aN;F$9TNOU4xEE2fs;zLBs$QB4KQOVKfn>z9$sK6{#_q`60LU1 zlf<<7Y(TQn-c3jLeDZlJX(mYTuf;Xd4g%KFz5~~4wy-Fs_e18goK)KT;0#k>X6tZa z21H|*h(Jq(lU^f<#qClCo%z+G&lB9d@6rRihC2bRl~QX#C^^wYF#n_6&FE6Kr|G*p zd%ZhqGk(HiQjQd}Ips$NT{7Pv#kdJ|p?+3jX;;#%*ubsBCVX;Dc*#g$_RvgHYd`5Z zPUX(wkZLzRjSX9f5E9CQp*M8Anco>`l1)rBumcr(cwKHeVvVD3=G1N(8FA;aI1=sH z%?N?Tly1jN27#_=J-JvBZYc?lk$8k26rf)v(s>oFWWrWQ_29U>1a;WAabKVtmic2`VR5Ix*^46O!Vox3Zupn|M?wD;D{x*C zM{0ST!m%A!GSKV>b-pU*BwE#)bJRcZ_vY)sIRL9<+us$9v(_qUCQJ`-Oc!i|k3i-Z zAZ=Y_-Mr)fP&v9=L;bviE+B{;cTppz4?}H*L%bnpXu}UUp0duU^UJnktHL8qx!YkZ zy5(`*c|u^as8cwUF&5XRpM82jZsMSatumRZCnYry=_OsE?JQNHb&Drv^hpM%+& zgm{=gJnVRgfmLRZDGPxOyvZ*zQ7$<6$^{5U`<*B@*g$SmSQO9)JG`Tn5(~wUC{z*N z{h!tE=Kw06sbn6-y@qw8^zWd#-ksSa;D|!zVK}-_8>b3)3IL>};fH zDJM4G^;oL^$IIwiMoNa%3^}b?LmQpI%r>lg(L}Np zhr4KTg|i7}s>!J=$t)XL!Lk8qH+pfpvB$_>t0l2koodo zR5t=(49z_IA}L;jUEV-a!G?vyqDi9pbb(upJdPyDZwiIG)^2}kPhJ}`M!n9fBHO1rjpdx6OoBogCyFkCFy0p`|b zhx#gK`o)8HE?Z)7gXC@8vRuO0zv&c!Yl;+i9eft}_cegts(+c?V6cO#io5a4jg_Ns ztL&)-{_p0+qZE8roZ3)T{jeIDW{CTQysYYCaO5&Q@qmb zh2hehO*aQiyV?Ze{%pc!Je;n*eDi0YS+>!Df=q}z_Nz@lDJRB)5ItFdX(eJ{GhD|- ze4g#9B&EoS^v`#i%w*Z3{*es$lC?e6 z|5R-4)d!x8%bu@stm@@YbLnXk)TWv1l=gRN$3@5k6Bc#v0~35x__r^opQitX=^*UJ zj#fHsCcCcq_*n*@@Wfvj$1{Ak1VOYqo#43l7j%>Nqd33*2gy@F8Pr%|B98n;!E4@x z@UtRJ<`U;_kSiJ5~hCf z97D>Oo7^I3W(v~wyT%8VaHAJQR*SI-(J_TAuxz}BK$C|WJQ_rOwh9za-xtdX;n(a-NBLAHA zfR-!(eljj`jX#jQq=TfAM8oT4ABi2t0fF7=(dV5&kXqYe13pBtJ)vOlWv6rycY%<; zG6%7SW721Xv+uPccz@Ozyo%Ea55izv!a+Er2CDDOMv9fV+CUaza;Jn2)2rn7Uw<~r z=yG%vlV3$#%bQ0v+$&~Q9c`dg^N)M!;3AYV5KeAr2>6uU6gS^dd>Oen>~8?fMPVv4 zV^oI2H42Mxq@~f%ow)5hmh_|Ime5#zB_USr)sMn4v;D-~(=9AR6}QECKYZxw0)Eb3 zKdTt!S)WmaSZm}lh|w;0)k6P%ofApkQhP3x3AmWfU{dqScbD)feZK2_f&57;u40!L zcN*?Y&va+X=hUbas!D7?x)}Zv2>7q}I@CLp)VvTbWFex)WPa0=jU{fs8 z1+JBoc!Qhqtq|pHbtHqBMDMl%YOAm&!vNN`s%y3I`B92_ZC8f1>ZPFqh62^hGF@RJSfRr|61n8!w^90(!o3 zhR(X*8(8%6B;3dZuv~(ysm9r~ugX7|N1!{<{Vv%G8~*VX{fOio1W?mN%c&b)Dj~lB zA+k>n>kMZ0G&78ic|DVZWc7OYb`oBWa^h;71L;CC(TZg2Ai7>9ac-rlATJ$a=hRa7 zJWf$nlnZqq6_af!E#(^;v2gwd~XX(<@$_ z^tqHNJFvB@XbW2aygB+(bn@dl>$C5{y9IErb37b^Ok)+HEMa>?M!vbAKL%dunKM4lGKbf#@#5H}p*ON>2 z-yaJh>poA$GF45xgFI*s?N)s0&}#92kDa(IV?=In+*WL|ad>#CtH0}s4*32Tv3yt}#%x%?T-l+!%r)3^%bcWOP@K9x8qA*!DAo74 zntV0u%R8~L!5hgXq7ilMTeU?&{o2 z3&D~#6b7}%!5dQ)0g#!Ij{%1KVuBNRTQ^6$)CN+72q+6s{{OABdvg@rc(TY1v4CDU zIH~_)-Tx%qHkNNy!B_8Y^fsSD``DhUAQOShEJv>J;OHmhpVrH>E?DyC2+|v`hp=fx ztnghyFe)S&nLtLl^Cn<6eYNowq7_?_7{HuU^S7c`I5EvoOqeBca_L2Gx>G9q@OcPg z!42zYz)JhcnFzb{qU~8Tm8LIea4=4EwP@L}_8TrCjlmb*S+fXY50L>}beq!v3@Pjv zfq%9@yZyn+0u@6L*VO)^r>$CB;kNw_TpxX{ceI4Eu2Vce0BEd_AL^Z3<)v^Z`~8c92YDbiU&BhLFYkS9ZdiEZ3ZKeA zfvO>og_JCuV;L_0a1{H!WahYiLIH!NZ#z8L2SdqJ5zyjE8X@1fh*s}Xn1AZdxr9~- z^VcZFhMR@ZtZ0QqE?RCVwuuc8ostcZO<@!5J3m*%kn;X)DWt9+GSB6)i=8Lsm+1U?zuCb>#8m!BehIJERMM$iTw-|=UIJ>icmkq#X3ne%QYZ}Vn8 z*?=M(S3~H2I54Y*?2LeIsK`32sLs6i`!XWPi&+faQNni+<>X48EXm~wAbIYLTRLAe z*C_K?$i(zE2LbPZQV-0s5Y=a{pCjJa_1OUTo|-DS%VF_nQWAC(U1ZgE3pH$kyUWoX zeUdXU={Iuf*Y04>2u@L$86vqIsVy@a8<3o4a|7)lJVs--*?4 z@hH^$qgpJPU3kPTL7pPv@J>K_#=|1lfO=O-sbBE>aVe=v{1(4I3aLy7oA85{%_3|; zALu0 znFk!1W;@-rWp~jto-g@<5FL7ZBcz-~nk}Z=JYKtZQOl|EHU-sqT7tshA>Z38v43on zCNghMt#nrEtA@f zMO+L)bAsR|OEy`hu%_4sXXDGOBCq6o(8(Av3oB`n`^d!m7xabHcaOfCpo|asBD|FeVQ{% zlD-Yp2`|4KZ%XqT192(H67P`MO#g|9_N3>ehrKoau)EiF3NvLQzQz$Nn{u~4qqH>t zel$9<(g~UB1B$%UNxJ^Ja(`b!=_sAUNPk`W|0Brl;O}8a*&q&;~r(zud}<-i34C6>(f9d zW;H{{k^XH4AK`)=9%5?(H%Dw?xhd6eB1WNuU|gaaN)rKJ^n*}=oz6UPk~}CsRiw-U z4w{QC$Fz0|)A$DALu$1g}AY*P`R5>#)idBA`yr2-{54IJHKS!6HULS)`cZ3*#N^w`B`wI!^N zQiYUUyPCX42b|s*G4mWy15*LQ5F3MajVR(@^P;BjekQI@jVbLHX}6Ijr2lCae`fP{87Iqd{q6x- z8Yv+A--?cqoQpJZW7~!)IC==UD6jC+*zl7=g3zj2gz=>l2f<5WwYCGccPg*eTsntX zAS=pap`%KEnA;|9Sr{r(W8t-hRV#kjzrs6CAxol`aDw5ZRl}^+I033BYD0qbvNIir9o5A?lXh(J}DSuWonDig7H(Fo|!5JDV zuX>E4Q`jdS@MBhC`%FG74(znDEA9?|AtZAl5ed7+tf58{m)trZBfm?iK4yhJZ=5S| zqGwe}|M9dcx#ba@S$;CG>VHT=A3cVj{USAEwR!D8V&mO_y!=BCQgYVl6;-leQxy5H*d^AyUs<|7OXQ!`}=lo31>hiInE(z4U?=zFJ(O z@;SyL_ReD>R9l%jQgS=Gq<|__GuIEz>=NzfX)=O+c(h&GYvc2R^RTuo@wc3LX{-k!HSz7tj7b#tlf^ub=1>Oacz{_ygE?x~F0vhN ztA|B=34G0>>muOSK@jQtyWci9T4`R|n@p}mfId<3khL&pk zU&W1CG^Tine__V>h_J(;T^xb6uA6c830gltxDCc|6Dbg#$lm-n4E z)PZ*%SK6@XsM8%(FSeC(%Y+G5a-m$rI$G!TL6L+QtCUUu zfZlwY`aP4FU5LEgTMM-HIB+pjiuf~3Y6-(F#woj{@>VkU9!fXJW%Tq23EAKGFY}MK z5?W!eJ04R;kD2NalA&-F12(ao4mFhb@LmsA1k2qxH!|(6$p+3rSm00IJqjcnfwW@R ztchF=&okYVQr8_-UQ{;lg!^QwZE)B3Zo1xSgN|f0!vb$LF+mhyz6S(oeua zoK!Jg#)xXf!@_ZkDb1N0S8UP+^m1<8!2_r4!B_kn00Hy=AD}q5FG5m~?yHXiBt}^B zr>#H#?hR#pwVANN>4w|AB?vqW-18r)r$u)ErgCl>-(#yID7%bQr9W&~8br*5oN@W;{d91P^ z61L$U6WB4N=4y<^$e%azk&hs)EAKfs+L=H1Hks`;T|aaM>sxqQ6>iV*Rc~iz*AvbJ zu3Zmiq-O8BsD#s-(^ff72L4XwuD|m5ooT}G<&^iuecN~GEO2q$0X zV%Mk^HI@3DjLetJ+CCKFIBRVC;7%JjMJ>}6=iJt?Ha=BHn78JxNbk;xdIly3dj5~3s|twf z`?@NKD5-QKNH+}KAR!&nB_Ir)LzjSn#L(R^bV|ce(h@@q(hb5e(%taQ@Bh8b%YC?a z&OLXpwbx#IAFH{V;AES9ZN^{+V0&N|(IC97&g14i{T1Tt1WQg04}Z=AKQ5)pdL*y` z1lF~qvHNibJ{InNs>q}y+`s&mPl~s6FmURhR z(B%hlomcNH$~8YvP#uAN_Wsu&YQUJqNqs9f&M(GITr1hq{vsdl#6BL^1KM)F^dB`$ zl^s35>KX%!JlP7Cb2MJAoT|(6x|FEBRnCXu53LsKIyWo`Z(NJjdc+IkaFoH~6TNj> zI7M9pCL8f%h+JMoC+Gb9rqf?%UUsKuvn~)UW=#{51Hu(k++|%?tKoY+FS!54$y%q- z9<6;Glq+q;91-{7_?$YaMswGF$Jsk*CyeiSki=uHCgCnSE?ENM2J;0=?ZinGNc43!>eGED8g(9in2JWl9n}@EPO^GOT%X{{qBcWu?E|AMoGUE z=nX5bI#3DHh-+QZch--a!=oChRrv4~w_1_u-_@4_fj-536PdA#XAJS&R$e`>o^_45 z4^L#+^-}lQP%wcR!pI!|mrNFKvOW|8TsE%u;Hlxk7_2YsWitsbrT3PK7jE%-g_+^? zbo2gssr?V)p75yREIOBap)m3Ln}`0@56W{tv*tUSwtLCEhqf=+Q)@=;uk>leI{pK+ zw7t)B8Syiyi4!P9%S1yVn&VtEQ^o1|j^5mQCfk4YFLYa;{4^;HxXEIUNmt!-v-_aI zuUbPx-6C|3REMLVq$1N_kp_kD)Olsi@|&+@Vz8TJR>a*+<(n%5Kki|Q70Fjd9TW4T z{a_!E95rPSR60H$(RfkkW-6AG zg`gxS{@T-svqJY{Z+bh6!fLJz!khf?ieNr=pS=G)5PNEG+@a?}Z>DIiZBOR+*O%0* zg3MdU5uF+zMs%S3tS%}0&TsV6j zM7dD!Fz)dY{~iXD?Mc%LeR8_f$SP3Wn{TaoZ+UckLjkBT&-gk5VgvWD7Jnmu9rFf*pJHJa*H*aWsCJLbcPRK8 zFT^i4-ZsqtZ#bspt?}vxqWYez^~luXfE5=u1R(e)gdH=S6HDQ5>lbt^2u z0S!TohW*%`P4S5;D)#wgbbz$c0=Xi^tOA*B9Qiu0#ab28(e6}i2FRg`POB4dGEPK4 zfCehZp6^J-j4)VB#cwCirsFp}$_**zC{Pr^1Pc41eIuOnBPgvAP27}5HOs@;Sw3ia zTa-^ZvFGT8_fj^ICC6pTz0opeSgcuR{IfDa-yY5^TW%!*G@qOAlx(o4%*qdw0Gz5>OgauWE;(4avR6N?~B% zyUA+U9yNOBe=hZft@ef9OTO*wL!6k*kVxJkkN8s^}*@?*Mf3?VM6B zS}*-XK{n0TjdN}C+r(2T&voe$Uhi6<7wJq01^1LA%1#te4|7>77^CU5RwW3>(B|7O zjnb`uL2R`bpWroeDy?d$FdEr8nqu`bf`#v`r^>+Q+pl|H%2733M=EwM+hJPrW#1#p z!ju{MfnQabco{i^2~d}+st@ni+%wb4zV?BC8S`gm6iB-4lLue^I)3&=-|;eF+;N}0 z;MVaSGoP(?xWy8;zYwP#MdMjEY>iEQZhbww*j~e1smR{t8*yIjcU&~z%4a)4K`=sN zX#L%`HeIaRx3h#u-qadn@gCH%o97B?&rC3<85BoRuwi!h_-uLH{MH1;R?>|1XG5;& zP+D;#YS@~hY+8T4SGP6!s=u773<^>4)5ieMJ*hvf9}9&ACpFsHRi` z&pL+tsCwCzdZcg2@_l1|Pg)N1(JoNiqg@OI!$q|C)_*tRd@mS7;D0O~X;g zLjZ?vM*@u7d>ze$P+f{_(fUfLQ+Yvce?>;{WP&cj-lERVsL9I=nL(sBt&6uXzd*`+ z;okSsJQU>ReDmt|C4byQ$QO6^h1t|G{zIo;F$zYz_dyMp6{xZ84fmkCtVwxZSnrn3 z>hiL!nmw$r_$+^BSR3+*_){7V$?0f@X4%=j&4W0aS+K4KEZz-)n8q?4`j;1y4-2T|1mJk*l#eOE~Q9|Kd8)(HB|q7dvsTV9_+N00LV1* zQaAhOf260gqBEnjA|6mZdUkJon1RflRq;~2&~|?6M$~Ofi-Nt|dX0)lnA_pjRz_JY zlte5fe*wcfOj9*-VNr&*^)peg-BaX34wrnlh5gpaV-pDmL``H*XNk6%w{yxtZZcm> z?3t~h;dEK(WOJl~u3(EPAD5O~Hszy5sEXv-7ECBL}gxI8ouyCmVr73WcSfavs(POOTAodLC*!+}-Qm4Upxl$)vU$G`FY z0?R>g-K>q}?^D*^hy38?<#dRqYodVAXLddRw8DdAEw=~@wH)O^=;wZm(<#>Ouv$?p zBf`1wh8#f6G~QB=CGa^#KG>xzu&*O;-1>va5^Ztb4s`#Og3t-pQWAK}^D$$raAT-=Q*gVX2 z$9=FvC%iCqL?bqjXG8 zTm>}6#Ihv0nx_8xJJ~tIlu#ePq#yyNc|(?izKqw783$2qAr*RmoR%yR9j7_skX?sq zOT?yBpm7v+Ir+GaaJRn5D}*tR&n(*st{z1J6QW84+;G7oNrP*=6{Q5^{IL7`b1$>( zNzN#9qi3rWo*Vnt?BNjHMAaTH6zU!>b9g21s6T{Foycg08f8ByE~zX!FrYR>(*C9B zB1Yy0i$4%Y4#IcFk~u+&^<%Rzo7cYUc*t9@v_v68WBh;AbtvSg-sH(s$>q`7_%q zwB$+ism=56?k?Q+OJmT{AJ080|dLcYcb85YY@wcf62QPkC_S>sXgcAg41{YrK{mM{w*!1%nOg= zbB|$$tT|hOzRHt1SZ#_EFrZt0{0OmRJ2*!+%xqG-a5&_dlDOd~zKK2s8(p&E zZl~^N@@hJh=J}x(`8fz5>l#O|7?676Zf^Bx;~sbvWVg7k)!G00buG*mKp%4+!VSNl z6+6=ID6fD`vZDTz;ovNrfs8Ae&Okyz71T*K>Y(dK2dpV3vVp?hXr_4-TQA*)cM@ys za{TVY-Iace3z@CJq;Z@RnYHRkA5EEqxAM+{XQx#RY}snheM@8o^#F_uR;dR&1`Pq~ z!^v4@EoQY0BN)ch`__xrxsFqyaYkvhxi8~Bn%NF87!M*lKP{FCd0bvJ2AcJV+X^dh zSxJV7Uvc~%{an}{G}j?@d^7wUTK~PA4;%Dh01HPDlOP9wDVrPqyAS7k@L|4l`JB`l zdM4iWUX7;B%1@!zX!jb>*myhVn9cdhL+7bZE)#tC12!lgyK#FtCNdY!zv}+AjCoqb zX-Ol$uap3g=c%?@CFk8SdAwPr)S$<2n61ZP%EO&cp|8+6Z4*(TW6T`7sTo==B%y1< zxOkg)_c)qHt?fKiQ~p^kns$d0 zJ;==wpf<5iPW39-gyW#z^vJYBM6jnygLqBLN`xMO3L@;!+w>uZj|)FLLlfEmH4&Fu z8E)&kzhPUmc?NW!Rt$cuz2btacQRNe7l2NVGI_v2HEgBTwz5$5@4>Mh;i~i|gp9tp zcna~@psa^cC2WunykzoXjuo(6I=P>yc9Z^6moh_fa(d!wl0Q@qY98<$Lqri{5h^$n z?g1KBbT&1Lx21CMYyBQ}f_oL%t3O0!o?Zgvw=J69-1>gq_Ue^~Qo6pv>*#eqtxlDu z2lu;vsGG>XV}Fi*grRxkXi1twN$x#9PHkk1%=p?su>1U2n^k^NO2+S4+lD^HJ+(7K z-T^2KeJSQ=gimvf+rqtXz#;G8PItj#JT^=sa+XySx5af9_J?4QpVzc?aNz@o713HZ zp}^?Vr3aS^+Ayjz2<89{6>EHmhKEDpIyd@LmjpX_}k5!vs__5OYgGwd6#mvt=ii> z$?Q1_M1^fhY6_M{G(ObS<-^6c$Vsq`w+6I7K|gfq{^`6jeq0P#sy|=Akh%M=`8TrRpR2#Icv*jH z+|K=Oz$?H0VtK(DuFt1a+>yd)HRqxRS@CygKDbe)3cCEW)%%o zZQg|sLpSKe?{noA1JpBhFZN6x+LN-+PNYRdvtA&u(Qt0C{6YCRprl6#HClkrr{agC zPs1YW6G)Jc<~~s;2G)VD*~mKNCb2G7=wvF!gHkvpUOuxf_M(=pSL)TlBNb%w5ZR35 zV_W3Id$0rH;22?yoS}gr-XJwqTY4gv$`0M8n0nD+_ zyC?{FP{nov+q)~~Ce=oIC3T*X3yfZK!C`2UbMprIxNYMhcYo%PM+NFjE_M3T$1BP> z^%~J_Tf5#I(?Bt|4g$M#8q3a^_*LGd^C9kk#aSUG{cVB;YB)VFj$+?}Lrd?FDQ5xe z*=Qw&YFKxSGqu@S+8Ux%><0elKju?^DYW!T1!<)Ni^DLW(lqt&&>SO6M}eGsr*5!( z!Py?|f8e=_`bJtOf56bHxR(&a7)Z;4Y7QI8Jt^J(^sM8uLGv$N>Q$#O8 z_EmNxncqGJ)@c5>JTk$I zHDX8@Cn$#|?PDQtbB#qo{?MNV7>7|gg_ZoGaE9l{KN)LDE+6c@vw$;Hn!r^&AC;U1 zAyGKLit$#M-%~#tBF52&XBdF zNtOiACi!?+h%duLRU(`3xTh$r>F1>7zx~(}ZIfwRSg3pR7Nuz&NH;oPC%l)1ElFD* zI@ro#(r16wj`VnWn-bKlNVAYz+(X@28RS*URciATDV>?C-239CO7tjbw=$wB;%O-Q z-&L(OA))Vg*@v&kQ(qZ9QSr;^x>#>b-LHRup6Uc&=dgv@G@dV_f`&8>W^+FO^smx4 zOTyL3;|?Qb7WeMSGL6K8T(Wf9*f4I*EQb5jRi~)xQ5(}VBU*LsvJ{FGFzKjGjO4LB zu5F$1=agMu?Kaa?EKX=#_*Fhp$e#vltxX)vaH#6cQqMN9?Xk5#QoQm-o&`zL#x(xB z0gg=^@mmBfb_l4qEYqR_i(z{+Ex5=O@UIoDnlP=tXW8}VU~Zwy$r1Ws4?Va<{YG^p zw|JSP)^Me=b!`t7CDSc|6dqbG+O%%daV&X@McIB584Y-r&l+8oZ#K_(SEjV^9rj)D z&zN*NR^sWgv9%J-NKRx(?gaPL3vGNVZNrx7|fb3RZaPg%8w#6qzM}u$ieSv^6BkIM=A+9=@zys&ywv z7TP9`Vk}zsDwi14nIOyysq(T~<{q#cT{{7jow^w@qwBgn6P^$wUU<~#cfa(#s3n6d zbG3%i7PeF{lp}S#E6)f?KH5tQglGROm?Uz22f8&587zI52=o$5tC9WN?dumV0Tq`; zD_<1V5yd&z(k-S(_-+3sdy|^(E+JUzf8Z6Ae=q=f%fgW^?<=6z4cfvSVp91IN!4^} zNN~c~IM(X?FNW~Yz_gJHQ1E&YY9(L3xl*ffrcJI4%bM06`_ZD1K+4~9)p3erfQPlv=J1;Z8PXm91 zee17xQI)bEFKJfDF`&6~R{~^6T?!jz6g-|7Ro*__?C#a-u+WcPS_qg1agcm}e|yN+ zd1~8f9%_Jvi$>LPcNBHR`2>;OM2{vRtIybx3pXCze5`vT=Y-C0aWvm*)e6(#Tf`QA z-%I6(m;kWpU^k0%PNZx(aM`}^EL_kyVgCC5PDa7)(WsM!{?%eeq2^BR!S;tsl+uvt zbY~$u!6*&OAUcRG;B(UJs`)%($v5tn@FjPe|GTRxds+ddL~0Su0-V3YlRmci?jnx; z_prO4Fk+;eA}WKq2nnWid_W<3`2uqEKku) zOs?itsfKIEg$y4PItnq59UIY>#LYa@?h*a(ze_|Z8a&Ds)EJRSn#+-*SPDVHFZr^5 zPX`YMg2qNgah)9WTzHt4gRrneBUi#z`(8QW12^OX!k9UPuvCOj5 zq-u6q{lKKXv}JK*Dvu{inzZh4)BFUnDA1k;#7_68gZL#BR?kt;XO(?GwBos?lIqII zi*QIT7=y6@_#p7Q$PZLyn&G|HH^9||60?W(Lcr9@pD`INwQO~@E80}f_08AkSL$VJ zgY<8GPRegt>#B(uMYvQzUoBr#2u|je#nfr*o@TC%F!ld%-pZqI zRF@X9v4q1gUV$P#J`93(GCbK=RVP|yhh=E+wL$K z#5k-j*3KV5vAa<0{m^6#Erj!-vY43GjuYPoVoD5=)~i|&0%&!{ezV*16`9TLoK&mx z_~4ecVQg58WQ*}AYwULnw-_Sb<$B|8cRcmC=I%0+JL$=T2o@TsZGCE4oO3fpJllhj z3AyoSYdu(QXm^}^kmlm8d9P+oTFb(5 zsGU7QN3o+IQ7=W~@1CkBZdvaKU(t@HAAjW*dZWz*(#CUL<3uLb2fb0 zU3QIR*8OX|e1icGP(YGWN?3Tss|rnn-cA01OYT|f@N9q9J_fWLH=uxDa)EaS&=0Gi za<{+JM&oQfyR#5k1xl!jwC6_LFUH6ZF@kxMKb`PMj++kc?S)65ySJzAKFz0;%%H6V z7#-X@Bwo_c{Evr*Y5z~yQY`Xlyd*UB>I(dKn5Nx1vRAn(%>~a4ectI?qX?|UOlp-* zu!%6r<_MTmtx)+Vy_>z9O3Aj8$+NXr6pSMgfe==G)pKjN28Np--)$ zltaXnPggOE!ZNOmea9T8!l0>qTT3J| z5+uPSheC^{l(ioKd~uO{=yJc@W1Z%IZiw(&99eJL=Ieb4*ZW$u*Crvgsg;6I+ii48 z2RE{+HW)e7thMPRT@Rf^pNz$Yzo;p^87lFdV1J1AgP)t5&(D8s$Y`d)y)I3%e`|g7 z{d0P^GHXuO>@Kl+p`dAAX|5^S9yf1(m=7oOXAKZgw!kAN1IL6pb8yM}r|_sjAYRtj z$H&5x2e~u*;=6=776Et1Wv(>=b22l9*oOA&exJ_v`;Q)EzzCmIvpL5McynI~y@@O- zg1upUn>QH(Ox)%r9O^H0C_HLoP>{T;DX!td|66{Y;2r?7fW8XK!zbk6nLUv=F9NF4 zQ;md$!}8#@zp(YNGw8n-ag8G_*d{slK9f^ve#K5R%91DDn=FdVO`kepLVv0L(tg|6 z>r%bup2Yl#gcrv#Z7apASDI#(Q4=x-QtIlNOs|GpiRa~RPE|{_YEfi{=j&o*| zD^Eeg_7d?Y1MD&d_?>#w%s3)vFH@byv;^m7+xfh7D>#O1GXGVLj@=0euBpTxa7w*- ztUju31qT#5ihf>n#c9B1$kDYT8`)-KRdpj9A#1>vbIncHf3=V`x5H3#vO@ulW3IQg zK8yK^gBjH*RJ~Q*t7ygz29;g!GGaGwf}m`GKHraEK-ShUS>iMbEUWK>7xXFSkmvt= zOgi#=6lI?i93}b;a8H@Yhzb}R<#XNd>)7UB`FkkNhAgQ9g8cbmpRkAD&6+oo?by!n zzqI96-f8=Vcv(`e>!6J&6gKDduA6{Hf|6l%c4`^Q*9x|D)fCq4Hh{O}SkFy#7MtZ| zA`)~vOD8>(_I3J9MA#Qya2^*<+uWjQnH;j)!&TZO5t@=#}Y#(#A9CBoc?%jte+4y4`?Eh6& zT>ciz@)5vm^E9^X>E%~Ta|K8BHQzkX+6kf`b8is_#ukct+da$XLm$xdl<*b9Zd!*? zRkLDOM`?Tb&NLEvcZ~%j=MWZ=axi6th#s-NGojJfmRkW`{Ol zD=atalbt;2Z*9Izb_;X*faqa`+BJ=M$8grH%@7_I&Ut*iVvB+TEz{37S@K5y?zZm> zom9(-`lOZ^;h7wv3-+2{nphe)&9e`N$xr7lfARC$rVy(dZ=JWHclt8EH$s2F&0BIB zo8}7o5AkS;?G!u#@)Jc8{C(vl8;}5GuA8Di z#3A_C=FBEnewOg-@DKC!QI$rkic!i&cXAm2R)@_`4esk5t&gUt4U}cQ81AdTFcIbV z_KPsuqTd@;fx$NaoHW;24r6-Db#izAO_!-i`_^%uq8ftm8^l`E$14Zqqmij`_X8Xm z=rWFv?t`MfR52buMk8rYryRj`d+7#D864gmZCO%4M4 z`6c~Nh?c<2_D5XSGkBC$GLicmM`JyuJ!aK{QGbu#3b^h)<5RAWc(LA5VDyB~YEP(BCv*o7hwM{22 zcabYnxpQSeun(6#NUG@>TmaiA<7U+$wgSAqBG=w*jZGt*y6lIr&=!R9x)b}?@X@8& zE-G3u2~b)Uw?9b1azC49w>t6{7BW7ybaWyT%rqsIaJdE1!?WQ%#YL^PB7II$&a4SP z9930(C(ew$c@*d#-{tdj$h@%Fm7wJ8cNn@!M+Mwx2O@lVSVCECpq=dBSVyWMsDWd& zpQH8Db#muB)W#@AKems4T8d)7F9bX@8yr-O-Ao@*d&)D8LY}; z7jPeU$X@fe^ooulof2}bOB8}NQW{JxTwRljSf#OQ$zvhj2+uWvHkDJhCP?vLH<-R7aTum_``1= zX6oo5E;Ux~(`Cn;+)t5uZ4&)(Y5YG*D9z}5YxX~4nw3P-_MO7rOy$ELAvuj_Q!UOK z+kY20ay9s90v_y47(Ktmg@-Wa;F-T1RrEptzewD62W+wioPFU6*r2&(pmBV%AHjn7 zjXUs(IVM+!+e9cxLb!C?4NaeGOU^#rI>tgMB$p!eMKD7a%Qfp93FR}D^*O%}N!^heMqHU_ z5}Isb;X>%FbIj72;s2z=oXlz!i5EGnOEThiJ^`|vj;Az!8Urk;9Et|=m}pF(0Pp+B zOYF|GOZJC>E{WTyd1Bu2ZU$2auX}!Q2|}n^wm6H+rg59G;XeylgE}O7+ZMoNTz0xA zAK=|XRJpw#rLiNu2Z4oUqXta|S(sMUQ>(?0VT66b}YugWnd3SbcWt2!~0z@79Sg|m-~Y?raMMuHBk0%aLgpCaVe>Ug5p~{0MdrJ{%0Nli`(b4rV)a&8OOO=FxyzB|ZozlGD`_p^tLs7O zR=sEaR@$TVrkG8b2FLxYU(^BI0kOPATMu24QUk%uotSU%zBONxIXwa+m z6DX5}voV>I-N0ckyGfqm1|59KXR_6bGgr2rEw~-#YFcD8>v4sb^%mTh^nlWj?XsPX za#GUp(NnH>_kN>tB*%-Kmi+%13E#9H1^4}x>Dm&d2=YhQWyf&D*Q^3f zED3In4<;OZliMtf!QQ0Pz_Y9R>go7FgZo2a^Y}CeD`o;9j5k@XY4a!0bv)1a=w0X5 ztQF$qCl-0$KQz?NxL}F~RdSCDVw>v-qx+zmFw*0?zK|nRe>%hHDV?^KR7%|Y-g=)9 zWNkI*y@7vpCXZx9%}`)@ngPam`tLVzPZbEjeWn$e#v(x^je$DBfqQ0SQ&<*emh=JV zGQGjd$L&JedH`t0Zw7X|$hg&39;|n~e!>wf=f2j#LW6K#s}g&a zjMnfheanwq!R@@~)0E0{sCgbdU=lUlZ|=D1iJKn}N_0kh#em0Oq%<5)K4jk5)Sx?O z#yNe$Z7j8QqMcrForWffZrT^#4CGXHFo<<2u9p zWNb_t-}()K!&!kOUXgKK?f`|S2LzCT=Ao^dD&NN(bTCv{TqUEx$=DxRCXcWlaSW%Y zA8^~xu{fR@lS074LgY*mw1I>C`$%#H(z(`kmAUwc&u6V8(>rF~M_RNN$a$0@0k@=v zW^81b4+XQQoe+l-p8|6}e~_|!et_!H8;gB%wZk8E^MsOKg#t7Wv9NL(n`-Rt?93| z-bV+CW1>+J(ZKxA3+WmlXgvx~2hSdA^|WKR2wTWaXyCcTq{F0o7 z@;}Lx7X!iW3dSPu6w6@WAoo`|ymb^9f7(}FsF}c+2Q>I#ASlH+5FR2fbP5sbXhxy= z#3&NjlIeeblJbSBT6M$4k^)9*d*(}uOo@h_{Kd{QEO(POA4sYpn{y<8FCwOc?Z9!p zw3c4H5nT9@zao-^=rpA7svC#$%h#C3NROY9x=_MP+MC_Di770CPq%ST?q!sIL*C)n z4I_VvL~b(WYhhWA;Uom0Gn-f^a@h1tWoEGbj{x_3P)KaHGUgd1d2|2zSxFY-?en^| zz)dDN24ZWVBt1%4cU}X#grMn-U;fn1w zSNw3HRPU&_IM%sLKthy%#7yG0CMyJ{(7^JjZ1g8RFE^n46^4i#r{R5?&R0mm;*yEP zZMj(odmS#Pg}KBc?^KoW$<3&B)_V%1oOxMV|D2i%nH9611JgG*^MacIFQ<`d;87Nd zeCPa3Paq{H#(={q~_{Wa0y92~gWe3)A|a(i&r z36KaY1k>7?Qnu%bXBI~yUr=LX{;Rsqzy2?`FMmU`Qco%h$0j5kJI5uEUJPZ05T=D&6u4+ zE!_sH&K2rBF&T7UDIMvh&zRZ7-Z8EWB*%<+L|Odiyo%@6ZKkT4BnSwlN zYfD&y_mzXDRfPinxia3k*I+&e8|b3l-sbkoxoCSjVBX+Gg+*!^H!Aa8d3T0t7@X8; z;|VF46H*CuF-m>>H=Wk*l$+uH__$&2yV3t_%>9|i=MIS=#~|_@vXBr4c@a-c`p&71 zv`lx(o#Khl3q7Ca48P3phRBj4iAFaeC~xuKKMT=u)c>@1YqAJ4bEmgILNz6B&xOHG z?QLyDTNmqOf>n-PP+d(At#@*)>^2}I+g`cXC>_p^<%tyENZEaw2B zvcxT48Uy@fpf1qxH#5;3s_?lZTD^F~NmZNfPAxgj#5AFC{B;1H)BeI3E#w7jU`pEn zU~0=4Yc+wiy#fo@C}H_I{|B`-Z#9SPKRq@PBs86#`frW4{Li(ZH%$B6+B06-YX7bW zbXCfQL-pCZQxe4&6cz|5Y>y8O{soOvvWV;V6A1nHwy~`DO`Owib_IdE?rYRV&Q$*r z%7%ceEzB9nnp}1Sk%((Snp*ZzPrvXt3*%4{Olt9nBoOAC$n>}!!{de6!Fi7lZD@vd zq=@ufw#kx&*|RCJU?<%fi+v%s+bMO^lqyie=7ZLhN|J+YJaLdW4hI!^VS$%v!Rj2> zmx$Me3F9n92-KS79-g4AfeAjh3tpU&anUBVYdf}l>N%R-R4VUNaYJO-1YQtSXGqQ2 zhr=c)cu}8IjHR0LK$6uC>eaj#249ZGSxemB&Ooyj=aOgwkZxxfzH7>ljy6YY2_=FK z<4x8PQZRhdfZ`2 z4W}LN1lh$>58)6T+?k!iLV=GSrgX3Sb}mT$llq@1l4>Zpaqo;sZrvvUmwv^KXV2ke zs-;%%1J(gC-}IQm*@sM3FMd?QG#TT1e#QUzQC0OW>)4QijV;lFmJ-@##=>xAoGVWw zoRR-@8ulKF;4pw5tpdPRFJ|8g5rG9{N8ZrG?o8;YU%i$G{6E&=E5DL1m`%3LRqoIk zwb;+(gKx7@V&Upp6cwaKq0&i86i-|dEX&n@W!B=PpOmsbbG=K?l-T$H2G_DmY7aHM>Q7<`QWV^oc(L|Z%6Mth3*RYyYJtZ=QccZ8jQTN}gol!wAI{ic@ znP4+7C290>?Td*c5K8Ja-WKc9N1ZYTMeFnH=*shVfd^iD+gZ(cQF>^ls{YzEfYPoQG! znzHk|r+|2;rR>r;Ec$>x-wrtnF%phPWj449+r!Eh#Hjck!k;MHomSnUhVbtTX;jv! zvD^P+FqwOtpvh_ec&eq~ldHHb1z3Jv+L5GToJ)n!sz-_c{~5A);P@{QYtBme*Vrmk zVJ8 zn{I3FJEB3c)yHs$v+nc(DI=9G`_rnui<9D@?%If4pZ5%^=k05`1GofINXlh5ofQ2D z5&YQD;YfG!L=O}(P@xjafb=E(C=SiXx0?lwvyGHH8pN1rSBK)rt!D`K*HzfpU)#iX zE&;T1;v_s9)5@NsnP6?$6lY^b99rc2(3w1q5Bi^*`B&z3wb!Om-ww+~dPzM8zzxFQ zSZI^&VeX1z#MpMYI6TXCmqJZ@!hBPm?!NOCj0N_0AGO@iw4-w1ZbSQ*OFFggmJ&&Z zI#aLWB~apa@N|qpE(Wn z=p|XShaWDb6nGu|{uYN@_#KbcblcEH0B#{U2|csqE_A*3=K|*)4!FOQ`d|F2CgXJh zt2B81xg>2TN+|}26okK^-+|;&bNyCwkr&FKW+u@kjs2VUCWf|oBxMm@7tNv*BEmwG6_Ub@o+7Yr2K|>h>-w=`R;WK7Jjuu7U zwPog$s9*k%naQwIp@-@EObeOWTu`-GzcptvdS#v~OCS9oPE=D64l9hZoHsL&lU6;* zoZrHP$*GxVV=C-t&<%M}b;ObAE#>MgY-*HO(fNR?(65e}E~}Ws*n_ zL2||wy(mLqWZ~ChGl@TDb61^Dj%2sv2vf+bRh{cM3L%Qlj*9hLr>Z+-!G*gYNQld&FLSrc}N{NGkS;$!c8p zrw;~l%G##+ST|X}Er@t)t8AdubXV~{R-1xqYAljjer{!QK-k3L<;nHcq@x!*oPX|5 zZtLpLW~scpFauQL4-h{cFkiDh`va0$ZDx6@O1EC<6*w2Ux+4Bj7u!v}R~*o*@^p5^ zfeMuxSk#L2DC{OvRfEhtTF5#pX6GIj=!N;1j-ZOjKQhxfCmR&rqQK()XV~q5Zp8+@ z5QG%!_vV0K+_dNWB2U6)YuCT;(A_k+Lrm-yLQ=)3Z*b*R^;g8#M>+@0hpwa*mo7gGgK`P7{@-X_vrdM8vQ-9KMF-0 zvP(rC@C1jY*cj+ltGVHSfki}5O9Jm}vbuoLj5juAXSZ-Y3>%hCH}~HJyJmzKzE3n} z$=QHPBCOX$cj$|N@&87&7o5dSc?HeOcHjEVO?u_+_23eGrpeJRioD!}p!j7(=-ebS z+WRqtc_%BwUBaLIHz9hMikNMnDJkN_(`|g_4;{wh>kmfK6j6CSj#h38RE(J3&&E;P%4t(BFE$ zLA>{HU&f2EM=Ut-R5SqoQSy9)0eT?MZuh1z$|8uunWFjVZL0jI?*e>*)Q?xMSyxH94#y zg90ky&QC~M$98@Nye>gi`|!7ZB>#bImY&ViiL@B;bHWDLE46UZ)L2#bW{rt)b#;NOGI(jEOz1J!WCiZ%C*bC> zXsr&>y8Eq)w%EP9`?km?FZ@^}O$|+f`1~ zXWFl%k9kTk1V4GvgT~Zr(33+F>to)gs4ScgWcIWezlk3f28LYr@r$91;VF9-38Rp| znKlu35|!K1g73#eb8{=JvN*+s$fss;SWSYe)oOF+ici89A=5yD^I}PwBJ}`^E_=z) zE}PG=JtAP#$GZu1KCRfBU8b%DF4gmhwS%0yK&n6uT+pY7{ zhRe=49p!n4qDcTE0tEXiJM^Ul=Sx8Xit6{Ok|xloFnbMus{wd`V~|MlPKH?+YFW)V zuQP!XoEHo_|5Vqhw3yv8X;G7fWhR3rQ#t6^t6SiE#fe6(>px#wNM!Dn%>9=e?^`AN zoNO$bt1|kkjDL%Bitv`+kjhh|c^V!V@3PqjrwSu*%ak3q>?8UJq?^^Vzf+2&7I}5^ zE7No_g;KqVN)d`Z{1xfqK92Oico`zz3%FwZe5MhG1Q3$BRt%od7Lq#(PMYemG{yYP zOECR}ZW%5k~dOz6FTax>O>@QNDgr$JvjJpI+^?U~m zFY(YigLqk*j|GN!MowOBy8d0>eYKjB+O~jC$bj0$4GIlz1z$)90yCJ#+gP(3O6py8 znV%!D<&?*S)j<&HpLZCBwRsSmF-3|sgEPOST_duo^`h7YJwjoRogbntF@`R3YK3h- zUg|6CoySQ6CL=wwY~%%(F*0FidDK7T{V30-o@|fsSMG?>_I8hYhN%gicnV#wK@yF1 zpnC$~nLK;W5!-wB@z*I@()x)$|(_D^WQ|vVbKnx?$75|6PjJ2IL}cF*Sdwpad}YLfEmvTZBALRHkX%%Nfd zkJD(K1%m>1wk(yCNl%jsYed$!1y@{C)jv8zWeR@|!FdqIY@->au+H`Df?XEwi=|-h z$yC?sZ0y=)MbYlHA<4Z}dFZr9NsP@OZLIM+FUsg4OhsR^AaPZS?nasJt07sqRM4gw zmqw7;nYzELX2G`Wmiqc;h*HpLpJ`^)Cv?28>zLuqLdBu7FJkW#uuT54!PX%L1GkZ!s6@QdqzUC;e_ z?)%;I<{1>7efHUB$J%SJ^<8mh4PBj~k2t+I_S>TGQ(qo9tTh9;H}maUcr4saCKZ+P zx++z3ZFQMm6q@pm7$W*ixqBlNHMEmAE$QzSzBTiiNRpZ$sg3q=x0IWxUNc_Ug**C@ z>5H_eB{LLa$|2jqdxN085yQkdD`9IZsJjq*!s;j8-Z0oc)9zpOaqrYH9+vs+@SlEg zIT-f(JjWgj#EQP5uhj=T!-yjz;ez2XNE`nk>wC8@{2RkUhX=~?r$KM28qSEl`>@u_ zgp-|rE&p~$8il^*d;tqLzrTWDZKHfVA%gh~?xS}jxxS5PiUM2EGOyWt?FFrg&(8dJ z_Hl<+kwa%VR`qj*io(1X_eDl>x z#-7vL-=88^Py&MSHo7^@b6dGKCQ2g_z?Suh>JNzA!3`Op z6vmJJjVdbXE=mPwgSPm?W7vJ#243wl>r5KKk@3&91NR;b*mISR!dUmytLKYxV;}S!ao2-VG`4 zre+?*NG=gp7AQuFlO82MSL2*+6Q*mL$4)`yOKHcDNXr6wR!lKX?-ybC+cfL9zCVAh zTGv`=M0uRcuWd4GQKcK_kHTwa04pgJAb@ea)d_tP4O;h2H+DO<_vg4j^D`h)Ww|(i1||;zDh30v&Fo~^>h^> z=o^xdU)A$Q9g70XRrak*$rxmJ4gBHNw=#vf@h)a_=zR~z$pco)O87@fwN=gH-dnUF zkbBbYmo^jLL5xuv*|ra!988sJYgIc0NVS}&{;tmGJWP$LuFN0VwdkBC>X-dkH|x1p zzUJ$b^RE2O_D6HV9Pi%qeQz1Q>P#C!YXU4-t!;e+p8Ge#6XtPRVPMG1dl9ik&uu_3-ve)0vlqr1Uy>_Y%o4t9v zzak~-A=@SYCxva}swG~ZqS@NS!n_9XdUQX=bsm*XRX zN0e&b=M}h-P(X4?%;>Nff*O&;)M-BagZ8V zw@-lnqwI7*cX-jbTo9TDoKrN*2XswoV$8@@t8#7I`HSXhNvcA`hvHto9H6kEYkI-6 zZSl&dw@3a*Uz5yRv4sUM%uF$Z{eY+G>fXn1F$G7BSs!VB6UyAk8T_+GDj}BHhP(;k zMfKO=R3gowgN~_plB3=Cpo1~CMETkrH$&gCvEXOk>GGjnsgDM3@p(t7{`9V zDi@vd94PH^A#}VuZ8Cx*fs`)o5$iOtIcy8xpOC{ z*XSg0B}IG9EBo`)L{OisMEA&&HHlXc7lv3mi7vlbrPZ%d{p@!Ea8^i#Rc1{vBfv;{v2#d>9 z9ol}mx%m{fpHpjXH$Zy4%C`2Uhn6mr$cE!tejIZWJuw1GuGCo*D8`Q-)s4vLXOCO5 zP74=%6h?a?zcFTICm)QDzP9O{-T9eLOg;AY7Ck@$yk*r^3XjEJx|ty>my}M2KVUU) z#97(p<+!r2O;c{rNS%jDO@@NzPrN z)IIrS)YDxq?$ZM4$pS>b#@=QQGI|c%+pJBW)c4F+?(^e$T`&^LjpLO)iTz&*cO_ia z!)KcSzVj*a3I~cP4{Xe?bo&;dN$f+rERM>PO$V;8a%zQhB$Yves{B$uexV7okB!>i zjXDqBhgIV>rKZ_DKFE{)odi28BtvtSK4p+PuHwp5viI`@;F<7q=nUh}Jm*~dzH1~HDO=lGZFtDFmI>x$z3~wKnU_G?x_)l)V*OzsO!kJvYvZLFSh`ZvF8IC8wJyrkNI&*{ZiB z*ag|8PVdjXyN$aT6cQq?n69NJI3nJ;|5}GI5M_JbD-oRM3!eB4TXJCmJJ$`^h+57D z0#99@ +S@Q7?w2`6tkoQ>X`!b_aw;9iMgPO|qwB9{AUY>C;-D}+%O`gbQqu-(TX zD!}uo?)lo$6EP7f5c}_R&nP#DoJ5r=Zg`3!g0(8s&^1o~saTBRZ|CTQbYRnWms!mx z+dj7qM467_4KI8!Z?bP?y=hL9cVi~)z2Dp?jzf!i1*e%i1%&&*hJSaC?5Jl9(A0%z zQGz5aP=!$$4XjQdti+4tkdFPEKWe@#W9bOlDrB;nGbkydxRfX{Y4C$lupc-BzGbkI zwE>2)6`WT4mG6d(czZ;08oC#UZmFm(Hu9upmvivqZX2oWfXw&^^C?Z`*-xjs?wPpV z3Y~{TU$||2PE{iEM{b#)?bgIzBwDKE>UFj$5^8y_RH#WPg@sG-Me4W_RButssg;b1 z$Yz+OBn{ATocSC6O1+3;y_`;YVha!bZW~s{wWf1NQEubz!<-zrl+(zWqUvp>%^gvQ zW37zg_X~#RX&T49w28HP3z5^=1&#rmwrU9PyYkf0;;xaMxv!?mi7A>jNH3$0qjWSy zQqOHxw33j;*N?^W3FoA80%;V^@;e>(>UaiNQ7F_-)Qnsh4&SfKuw{dC3CG=G3kuv# z&GyrzNkPJ;CI!da97D4gDTh(foB6GA*zA_$!Fn0)yNd#u?p;n`J9c0TSI>%=PD4EX ztBSOk-oAT(tN6Y|eNVVna)?g*r@7k$d{3XQV8K$@RZx%fkouA?8zb5v(9x zu#II%{nN2vT)p#2btENG)g5z-o#6?S;?ZK%!PmXvDByur!L~QQ2Mf?n-G2WwU2eVJ znO^MiTLK4;w+Setq>{?*lQ(H7B5lm5LX8$;%$X;U0ePRjk);oVFZ*=F-Hg`)@F1M3 zwLBvxEXeG*9@&TT*!d_R(XC`R_fy%oHga#g4e6nhOSS5RN~IUKZ8s>94Hj@2tbb(| zHqX+2-M}0EQ@<=&whtPTl(m_gc>qhIM4CtJkf9MCt_UuJ5VXeTk@b+2oAlSPcG?=z z1|YM_d^hWF-D zrM?sl0H4sJ>v9@Yqr$l|JYO&rZAWuH?B_VqocWY9$5(oGEqGZY56?@uRQQHnxqCXp z-^hz*Mo$Fi%a!Y8HnzpLlrw4{=(m1}mT@u4?Ujq%BlE4?P9~Fcj(XSkhKAsB%ik`r z3?*Rrd4#pUTG`NK_Sn~f^E}FVW>YQ{Xi+`X{swqt<(fkthP`VyCw}|kqyZ^&cg*0; ztyN*dXgtUVd_D?%vk`^KL6cJ#95h#%MPJ{jt&43CH zRX(27YhViebwU@kr|01#tHo&$#`-O~Z&*?H`>v?jI};lyvWToTSDzunggaj=sd0q+ zb0HyQrq>QGOvJx8aOo=iID*A{oi-Dd!pW$P7!|p^1<&L^DgY}}@_ll!-Umv z^Hl5TND6KtWf|7D&ytV*PevG*tC$LyNWKqd>_}U-;=NzyTy+~+bEXTTHv_wyT6W1M@-Oxlbl3L1xc{twZK+hg2 zcVhdNgcVdI_euTlC`Q^d%!E zScRN-lr$(aSY2+j1l8{5eYZvgP*5a07f_m@l;B(TQuhrL#>SMdFU(V|>J6@}b%gmB z9uC4kv(>C4_N0~HtWkeKm}NuQ1p6aG-7TTEH8ebssdebC%3y)?J%gNzElx5BgUpnh;yP6Xp;)aCeXzW`JiGDSm-+Qb_f=|kS zX7~9FA8rqeNS%(5F5mIJUvD2-Wo!wpc}jum_d$Lh{Adt562eRl(1r35H-5Y}>4#Pj z2^KCvLdbv>*R(BV^!ch`^u)1)mkVz{)t&O6UlhFLn!fC%S;+6*wFzJqpLHQn-OG~z zFXpAT)VZI58bJl(Jmn>-Ig#k}53U%U(0C{HxW|DaOr%@w2MNeKQuZXY?R6KG9GeDz zrwf@X{*ri51hemx9nz`}MOa#&^&cL!m0$I@^AOuX<3XJ+G)`F>-M_L&*RjOeWa$6FJ@Qfk2E3|W_2 z>FdyXL;W_H-^9JrDjz;qytv#*4L7yq=%0^7Xh-d4b|iGMGM~)9A^}--a?Z^emQ#G$ zJO-HUnhUXAv?)*s_Tz1_bZ_U=P&+k71I(!WNkX2o@)r>pIMjw|36hU+7%ntN7313w zR4c#AGJw?Q^!;R2Owe~C7?-S76TGIg!FlWZu|D-maKcc|R7Cqm^96#hP*FUKso z??v3{w4xVNd28O-9|NmVwyLvtN8WcuYVe1hZl>bjr*#?u+_i3!ey*lG%Y;+79I|^d zdR(vBoI<}f5en^4A-i4;(E!somRGB3*le-Wq;58 zSbpB^*E5;-ZBMfJ#~t6r^1qya?}})7LiFem+C9v<67{oIe#nsVD`#-3Xsxc|0$$hS ztVy+7>$MiFUp_c}Lm%WCL?^b^&OW|t-3m|pOZC!m$3%7(Wdh4$QrncV!{U?kC%brx zmF{42rdj{-CEohJ2gmA>nkp92;T8HlRDHfY`K7TK%vVZ%mJMU@Ea zEcvV;I>T#A%vl&|-|`LvZ@!aZ#J6%N*GdT(WcO@rTsB2hhWVqAD^E#OJG((AQo#$m zb=Zigsz-uG1^WFHk-I5X;Cpdy)4di4$0e;Gew`PG9eANSikH zkFG3Z2-~pL^k#HXfdCzx1{zWRHB&F^6tnuof>5l^%M;Bh+ISX@HN|A#i!KKoHlDzgr zaF&mKiVd>F$h45O(eakKUCEeBAWkZ)IDsjSP1`EKPi#)4?&6!cQ!}TY$Bv1>($j{w=4XFI ziEGaM)Ly0xK7Nd!j!@N9mo0GcB}fn$>RZ8RHF{HNkSTa0pI^C6*h@usy=P-$qbdN> zDqX7w#9*TJTBgPqu5bfu&bm&8=UgQ6Kj{6s{i{qky-lH!7I%w%+}*nvTGwnJm_@lrP^18M_G}ePIw_gd=(k1brh%p%Yudk%W)fHn~>g!E>LD6F91#0?9u7 z7;B~eR)fmoWJ3;c*^7-xggOP5aX?DXQkR3X3_MYCgknZx?7ccg)+&v=cfF~b)g6V1 zxJNQyB^n@Z@nFk)3x15ZkiOo$wO{KQpJk-tc}N! zYFKriq1$*bP|TmJczDbxs-n%(q^Ih+;IMLNNR}p-j6ts+3ULvKj7!tbkrv6kC>ooF1Ql8wm*J#-%2qH{QW%^Um2mNszP*S^)~wB9Zh@GL9d zV5o?NID;{sS~rB?JE=nhuSZRR(Q|Jo*vAIfv!h3kVzBbUWZ1P&-o6HwAN)7c z4pum@!ncRC9Eue4L4gcZ%$thgy=b}l-fI%4ns$UZxz$T0T zQ;E1Bb3a+l-ZYaYps=$mW{;d2D@Q);!L}>aTKCsN?B^V6D>23S-@S7v#3#+MZ05=Z zCG}!Sro5@&{x0129P_?ICotQE`gSBz+|vF4a@t=wcL*Jfs+V?U3zG|eEBV0;2`rYY z4w)w>l;netpWocZ;|GAeW(%wK? zRK)u3(;BL`;Y3;W(S6`;Rvr_@BI|{f$=L}BExH|G&2+tAv^~S)FfX41730~R9BCrP z`bnBJI4B%IBX=5ABmw?wOWSWys$%|!8t5S(eIW!HzGc(`BQc)869(yn^!D}j3r~N_ zMJOIT$`VPqR;X2!0_##z-FuD`dg_FSL%qv`W|lC-u`PRI9W|_PqLk*Ft$7!ZjfPjp z=(0^5)!_IhjkZWY*`bj@hr$%`S7k)FM18KjaTT*eQ|#S%o|n(zg2?J94c}G~ujRaa zT_s{Qd&7KufE86Mfu*#_QDtBwqJAAs+s-4N-cuW&yn&>$ zFW?D^OOCXz*%<5P; z`%p{RnbU!sjfXI+kFGAg&HTUw!2J8y@&g$$-i6glQDGZrvQUYQlH`HTjPXnwc>&ia zqg6ng^e~bZe&>{zb(6+|F8*~nhR7~o>eM>~|C!teCu-i9{Z%~Uir_y+yvWwU@gEB; zm*v)w-#3@>nzCOmAt`b7jShuu0a$uKsd(-1kfZ@j+J~AKiI45W{rG!wmg?=49n+71 zhYin=hFHu#eH0VJ0GNRciP$jU+%QO?qb8eUDy7#R!08*8j(kl*f;o_gvIkOa?>s^P z`^>Arl6UpM6^S{I$QUoNL&O8`FVpNC&-7KG``?wEzE@K&e2$EA^>A2(wRME0pK`VBIOtPh281GV#_06r4+zMs;WX&g|hY^O3-1wvZijF{=*Qmw9 z5e<|FCeum4s5}$N{Di0v=DrtUqwbPqisn*?9}ntO6CBl~u92oL8Jfo>`xxq1l4PBa zw`PO!MOt16vN{015X`8Oz2uO01ds=Eh~(*_Q9$*)s=@~u)xIKE6n5xt{W_L!iP!3! zUAcF9&n=WBWmQ~J_C)tp8+BM#QvFaYOk(WLM}z4gYrb2bdXTPKd?4?^Nl`S%tVNOGx{fb$qg(C|{; zx2;QoA*y}baXeVct75fpnp$VHh<{Xx_)JMCtM~+dr{C#IEPsLUi}#x)6=6RRm7VDB zDC=hKFm40Xj9r5dV+3d&9)l%6^G5r|GkfwAzBO2lzp*S!k;XFc& z=}IEfxT~^X!YOt70W7BOI6t&@6!ym-So8Z8ActJ}^3+kCTS>?}%VYJKB~C-ss&+v{ z$dh}(rxSEADF&!mM_Mt*w#D`!+(oLSy$HJ{0P}cNn%XYau29AR0TbLF6oK8PtEkDK zP)`H#U-UpO!X%dauK3h{za1>q53=_wOvMzmdl{}KM;C97_3%71jN7w&A>}kY5$iUjUGn)i<6c~BA;Bdc! zlq2;Tnm%>M_di?6UDYT1P6tp=qZ~n0fBlrk66|FVxkSvV6PvQ^8=LQlbDh!1-u(jVlmeahg!mnkgu zXZ}w95g^2OKnu^&rL+US_tbPWk`20?b+`SxtLGhSa$Zo|spMJQTS1^wqAQd>QKQ6@ z_=IiFmj#bTK$aw)K~f@qtZ~5+3WjDOt`;ar)CDW?%o!;FE&chn$dJ9xx z#w~FHU=0XSSjXF^=hcn1Y$LX?BHT}L*D~xVh_o#;)#7sdenx+;)f~`o0B2wZ5GUy= z@=xxIlcT#O;G8D{O$V_l>GHn(>n)Wf*mr0Yez-}(+aL_-AfmCPr{|!9NIo-20Ki~5 zchF(6(esEYPN3FsV25Jb*Cqt^{>)`~pZa@P+^Xi-cCb>{tiiF$IG4+skH$ zq3H_INKfe?-_tZ0lA@@4NW6x1Q<|~~P%QUJ?h-)SbPlzk!^KbPI2#>- z5qu67i6A|}S`y^Li(r$lo@6=!d!Zt{EYa>iB;2uGP zR1nM`6yD~LcXG{nSwUg$E_rYD{3xst`(q#024~$3woiaJc3M40rtuOBA`zdiZ%ik3 zsVtrIptAsg8(rSnIGqfa7e-ipI|++qmhh@j+_Q6;FdYjnuGr-H(CN<_lo0n*t2Y`G zRr$vU86yPCgu3v`zdcE$D_OkiI zmdQp{2+lWN(VGFdIa32=v+@vP=!}jPAx_yst)j+?2y3i<110y(r2HcWHO|?~o)(pO z;&bNf2Lw@RbusSlEVtT=4$|~=v2g6WQl8}gv+T=Bq z(ab)ur$tb%DI6ekE=xL5#2RVp`OWZ({gg2F4{ZLp8Hh03Ez2T3U#UClok;5-R z1`HL>7&!bdb}S%_%Apt7LR5;c;4c{+q_V2Ot1TcITbtGwf?&SvpXhsC4>N4^Dxtc4 zM_q%+zLis_7`v9d+VFRL6E|ngy+KIIlR>i5+X|w4l9}g=KcvN3aMe~;fgcx6Xrj&C%8vfbjKDIV)e4>HR=5kuvF8#f5RyOh2? z-K{!UF?!Zj#|4=QO$$7kmu93-+|!FPCmeiAgywe%#UsqABjnU7c5a!XP{W-Jkmh#G z(HTR*6OW+mi}b^U*Rk=lG!b(XMc8v*C98cPBo%nocukWAO*V?Aq8cdI3@2nbZ&eON z*PjZb{#cfX*hpIQqMC61h|#-7Lr4WAgn}h9v3kY;DiXABjhz&0QG!kc!whkA8FKiM zBZl{Z->p;pmk|FfzOuO$IC0Ad=#6yTesLSs$Wo6Li!o0#1l9L1i;^J5=cYGaHXe-~ zGG?|Ku;TcrzClf*V_S400D>yuR&_9U`}uG1im8JMd;Y*OHiwRf%U{VKWZ3=*K3HNm z4sY~-yJTJc8JGQGIt5C&U}GL3lFrq2;|PnY9IihNoRb00szDpGuVr3o-wKghD7Oa= zJY|`Nzco5%Me;k9eTrdi)8)YI3VeA_mftzv+=mYKi`;n6U$4lMzvA;voWd!>Cmg-h z1R)8t4|x}JH%hT>N+9s+`P(eDyiJ($4FVM~BsRlPnuv|OKq@TGjc>+yRCxP(*>#x( ziYLO^`fEelqL7-8E>n}2{8WnFwzM()1s<;Vj*9}rwBtvu|D47;X!ou}u0UJQ=xSyW z1*JmE8;awfsO-8YE}XaB5~*ty2qN}qLn;v|yN-xv7mH<)Bc&x;2V@!*s#|?v#T3B= zRFGg&?wD0%Y6&>1!Kbe*Bh!&CgfpDFi&SlfiStU%)nsk<0 zOnGXYAEYp3jQvl47UZutezzVR6aXzH?gPu$c?5$zaJH9w3=T?thwVR){dyEPUJ^3^ zCmsJnb$nyax~-6BV~@BEUwB?ya{by1v)=o4=Wz-aN=17Gab*56D0>zEmMz;MUwK?P zFo0y;wYb^Lxyw>$de^hRfY`r1`Z@jISbCA{9@WeQhli|qz~{|;|L?c7IwJ&F`eRk| zn*YSssb!y>pe$qIv(HWDy@YUH7a_#EQ@$}8QyyP8X7sifOku(cX1?DsDf8+>^BK45 z%jgIone17C97@bCc_Lj~i$<-rXt$y}sfMmkr>A?D)(pvm?m&RRRih!1T&A9Ctv2~` zuU?p{u8T4*pA?8(GH$^7k5Ttu7NS&(*YfFvdei1fAsIwK=^Q;4c}7wDs9kYy!Xv`0 z?7*c%sb8p|IGdUyQ?Ofn&NawHy6Tf%>Pw2oYqgT6zweZ ztO(oXsrXE<@S1R8HVtBL(cJ^-Q^$IU*t4)4b3yz1_hW%IE&AF8;>UR()RemMjKtXg zUQU5!b{-M7xsH)X}~iGe2?a4OqC7N11~@&ty|z3}W8 zLGhMv-t0P20{K|T)vqtS$QJ!CD@$m+u@dL;!UyJO#;g;4$7K@nd>9+HOQ^JA4tTLUp_>LDtAL%~+$`Lx6UJk|dHoAQMP&KY>Ld0MyFS>mK1}9)C$=-5YX{{MsI8Ae{Ys6LYcC7w zk!i$G82ZFS`t0xqGonw+?0nVzl1X~O*nNH4K$|Z9x=^cgqhYU+etldTyN~?w`RA3h zc?tOx)N7=V-9e_E0h{Ow^3J_5ne+6J`#R3{O(Hg2vJ0WaK;$R=Ny{_O^ddVy7Fgpa zt#*giUzJbtjHIWUm9&42pXFa1P=Gz@UVVvnmwx(1fjw^{s@!%U7=GKGuh-eQUTwu^ znaq1ZrzTsAy)lv!eDnKudtg~a4J}p|sy?KydpMKp~#=W~wihu#rY1{=x@Q0PpD3}iqc_I|% z_W2Spcv=O1yx<~yJY1}5eL;X1&<2`t>G*6tN+3}?-WvuPxxSBJNdAa3UG38T(JHL> zQ0)Bk%4d@z%uT#uB@!A`7&Tf!P`>EVhat~vdl7r|w5@+l=~kNUN-o1q2Im4Gml_d% z-qsI_GuhANe_HP4MF?qj_72l6jS}IavSW6E&L~5`3;CSfkg)HvI!K={KM~c(IHG%V zEGQ8vEF@KM_8auJsGd+{U=E4@!$x&7oU8dK02X#?-wJ&H`F5S+-z>P{Ptjg)&8S^V)6B0TA99VzDi+ zP?Rbv)S!ub^efU+`z*B(@L7$}5Or}17!Jzlw+P{Nl;inH0@>qQ+&U1mJwR~F7H|C% zIPan6XQ$x2S5FLr$H-rJWe$R9mwqkl-11M0D#nQ3cp^9RhzBkk#xY+hS!Lovgc#>{(m(s#0%B7qT0X7eV?5Gnb!H2v;L^c=kAjhv;x zg-D24JaYKmVQ?V))@FLCOW;AN-?L2T$yWv8EMEsWg!k(%^+<3nFalPd$T%l^j{u{P zy6pSo5$cZ3AclF0R;|i`~ zX*y-?1Z}CBMmQz2k_$U5a&3d6j_jZ<%Cqy&J@cK28?_eA>~akDIaf)q)Pe zFrY+t7I*s|>*fdRSeN40Vi?S-sa9OFRO`ccYsj>A=DOP3_@QOI;SgLbAZL?e8C+$M zroIxgY@nMx3bppZM(x@u+k+vEB(J;)=q!*YynMo_Zr8jQjD@3UI=-F~8~=xoD#7b% z?jJE&(o8+b3jyS^_I44&mTwTZcRKeT=sYWgVr;)j2{y>P35iVrk~2PfOF84~%#xDd zJgC^zNkQ#z5_OAItXwoThKxzD_B`)h11s z(6SwJdIG%Q22Ms=QgTU%)6Vb>Efw=^cwgtPZr(aarPHX#t^zOh1?75`H^cL>p9r%| zaO4JsGZx;5a8haT=?~fV@wLm@v)Q%tjf|*#!oc7pyxFc82xFlRi?6QZ zjSP8Tj)s=|G$!xuAe>T;a#-|Z&O4u*o>8JAI>G^v8jOKvjO4^Cl;sYNNza0%} zQgU503}Trb-Vt>$=3H`l$sdBMhpLON{sSsoY&9TW_13C&=h>_^T8}i%X2K)L0FtQL zQf|NyaUbQz)&?yR+yU}CJA6OM4$%tEX|xcdVT;!7x8HsGJ$!hRJYFvN-qv?7zS1PY zhy-WGdd#AyHyLi`pIqf=lLH7d6Wi>+&|-9-0$a9!mGfW_ms`J}kb_0WW8um>+eYU3 zw_&l_vGBv6A3nTJ2wx{dtEbEWooB)W`NQQSMn!{r6sB1E8`wSCGxv+8?`%{7@6|&hbEtE99V3Wtxh?Y*hf?(l)EmIwhT^TmYjz42)IW0_eN-*3qb7uu-j7&N)R1RDh)o8$#)&iojIvX2%^dCQ%IHfqt6 zPX3gsiv*l*lxz5IZkK3?_O&MA=TgY!CyA~&DXZGzBuNkXL7nI-=+ee|+?Tzmw&;Rm z9~+}3G;;LUvjnUG%jxtq%R}32_KT2|whqv8f==r^kEsJsixM&1?(pYj=6O!Fdg3ac z{T*5>-Ssl0eiB$R8V1tBjCl54ihcbid=<~9P+2pIa`@FeLj>LLq!}a|7JiZ(1$3;g z-Kz|w@e{@RYbHts{sI3Eg>Bt;2jx;UxkO{DjNK$kIqGu_v5faS2N$@|N&IB~V69CTH@+?$OUv|2<{c?Es0co}acA{uUGD$#Ks9 zAd{nNORsLxCa+ngwoh@x6DcYxGGsK2MC@G@&H<7!tOpt}=@>qQlXwcOk|cVct|}8( zAq1a_S6XH`F;=||({(he%m_G)`T{d?xtwm|Sbi9B`Qg)gEzoO1!8{v*1BP@=338Ft zqadXW0_30FTH3Apo}9gq&ZeijHRN#D>-f=pnErXHOE}OSuec=}Lf-d=K(9h$EWGFL z8Kqqdc0?Io69HBSHwL%AZ!bR*fZ>1d?)u1@~Daw*!subKK zF6Id0S?~Zd{MQ^M@Pos>o8^>gbRPhZ(aw(TR(Th%#U4=H)&<%BK64<`3Xm3)?Vtx} zwh>hZJdNcIyL(S;`xMXAGMXX3#S_Ks<>s-U@`-9tqPjmR$dIBHd{Xiow#0c-YWTA zw=++rT0GYRf60Q_E$np?mCWKf)?1UO}`M zF(hTbQ?>PWj4)|=bBh<)CGpn@$6fkMzFw{=O8#GuCWEj^#6;T#v)WwvQenteuiwfO{T1d~LC_;XrZvEu_ z%gaYbp-Tr-+%4cjq_+~$(1Y3(n|9Yz>bRZz^p{idHU+1nHoTb+g$E@F(KlPj`XXd~ zCwE>TwS-YyqM-dk<~*s;(Qa4qZGGu(x7a;WB-D#4+n`?>vs5sZW6=mcv68!l*i#h8 z9#x%|D@^)%@MibqpGE7mV!eHDnPbZ?% z8)uc2eMoxyO=Hlu?k2hlf$t!_Lu?k>@@mBPS=i zeVC`se|CeHnbFQtf?37P$I9IVd;z_5hDk8n!r`u>+}vJXUR+*KE*EzjZay9!9&T{+ z-&I7t9qpVQ{&y95MMOlnudafs63jfV-pq_XfBj2LfY0b@XXPd9g1*4W!^p=E{xCDb z;69F463kZ4X6BAooaSa04mR#C9?q7c&Q@Na*5CESt{yE4b2YO7m0jJfU{>y)R?Js} zLN~w&_i+Um;8xynZVMO;eF2{f2Iuj!wsUk8g~(rh!~*^*<^8MF*~QrkT_nzZ)dzH2 zu4ZssMhizX7?=idH!~xc9#vi_hmb8NpC_L!pRSNEBl_~+yyz04|5*a%fO_%@ z+wuzQLKUIt8X_FLB8mdK0=B&Ty1XKPw<7RwD+0dg`B4S6col`No&*|Z=Kg>72`m%3 zPdpqvwtW1aeEf<$x;%eZM6VFI0Z^RB|4(s%^8UZ1xPNF1O@x1w+kX(@|B2%McdPr~ zN%Lv{FLCXUtk#Wbb#^@H z<%w?RAN=Y6dO2}>%Vg%Fv!=9GIsAQ0X~2`R(yYn|W`f!g-%75&&3=!gv*yGxX;wY< zqpk`keFO0_V}oRD^Gb6H;G3-4GV@_`&1ay5YED?8ZmQ!NC@f@nyea8!4QK7ky{K7BbTA zGCdn0i&9`P*1S@%`qh#SEwx<$ zxz+8xKzfqN4xcJKLZ0qtD4I18`Aa`zqWz~hhEY|Q>e}YrUTCAy!}U5wM&dgk;O&K2 z;hj`arwjjz1h<<%l;!KA-m=)22A-5nZ}mR!dw9Q6ne+G4!AP9a6cJ3^nvG?%jN%bv zmJcNzIt>L2f?jhyi#h$Z&hLZ1HM!P&w@+$inw1sBvL*L%e0B7qIeNKbNLxpG|JI`p zA>l8wMLil9d2PZ$>qV;%dYQtZ$PIx{Mb{)~3|-BAR9eZ2t8&E$#(xR$Wj)30Wy*cM zD;#2L5r3=8nRVuee?7)(R&YH(barm(~8w&NV217dPNQ3kT5q3qfNHXL`7H&@9QKA+iR^W+M&|~@{5gzTvIx0P3YmEPwjE3F z_7i+mFq~i3$GhRRszZE^xOa~TyHU0%-q+&7=CJ z$cXRcA{?gla`gU?>$j3#-*?ks#85xh%5Ysjmc`?%E_bcNoeHa?Iz@=SJP9T?iYs3V zx|2rPaGnGgQ6`|bQJW`3ias}KIS+4k&O3j3MANG-e0_{_E$m4OgD^QP=a#KTAU)B0 zjpWws^OxHicro+UJ6>g(<^8pu4P%wYCEY)rNk?-X25e}`^48#{FoCwQm)QN;PXr2G zKRm}NY@qWbhQBw}9@N68B3GJ`pC8TkRN}y`qfX%7?+_2SYkx1`XccQ7?Lmq1``vYa z_i?6+=tTq8i~R~ST6k(f!LZh^a{C|X2(R@jPq zu1r93&bw#dXl;D6leNl`M*(}uWXp4Q<%IR%`ep0Gl z46Y>_G3MA0Dz7aw*HP&IvY|FYkzg>XZCnNqh zMxyAo_CJNTqC4q=9*k+ z;n+8M)BgRQ%L(_!0~2C=eN33D%cr#-vWd#BkVyz0lq&JoC(lnJSvExekUk!gzE3pH z)OdF|Y)|W=QYvq32Rhz(smXt)S4K}A$s>;;Q}@;D)597C-GJw}2lhE=laG3EJk0|V zPbb=0!g!12h+g(B>3XWL*9?^YULA0!b-LO7^+KP;?zEC(MC_}s3MAm;+u}2N3#Ttf z#fM)+G??yd`CLj)uY8;0Ar>;DU{9lrW!KJ%^+R@RWJZo5*r6aGewRPeQdium+AK}H z?Nj~t)hW5n7rsslfA;(Q?wqFiS^K@;#f3pctwV+#Y{I_=nHh#Lw2epl@$;*0=?s(w z(!S@tlVfrBw&Ry6HqZPpd^)(x8xBuy;<>rDh?%xiePvMdGt*V!J(d?*a&yyp%LgEMv-FUw*&$X;H}Sj{?bC zRbxGa53d!Lyyz+x8%_g_B9sHOSZ<(1pVOG^?F+`A`K!*3`+PG>JuuvPJGF1WS0zgI zZPb-%^yFtVeP3y%R-f{6<0j6}ahnnxhFY64!$tc~A6@$!`#LKcfAN@%eoAr?56@rC zZ>*aRUv7XYH4?9tNo0jS5N(nCWh^>0wICLGkNQdNfx;Z#U~f0pYwMG z)uK2<-IFa1ccy6bUs|Pa)13GCk<+nIQsUIstCnT=~=ITI$6u!U~>q{k8=n&2_&~n}m3t%Mq_TE znI)U9K5z@XKz8gLe_fp_Vs7JkpI{IjxyA)W#2=-{Uw+=96}gYq zPnduD_(o|sP8>IBtCk9_nys||HQzBaZBxl{kJh?uSK{+?e3@SOddEml=7mhUb+(BH*)uBg)ZJ^?Z}OxyY>!Qw z)L*G9zJC$e7sAf7l#TK6h4GjBg3_kF3IRu*4MWzZBd7KvF>k1CuH#U7l)B+m6F7&N zV^$~N&9kp|_%ma*oa9!=6`V~G`u>DcZ!UYzL|>WJ zXAn+ppMOg@{$c3JD#wf^lDpU&DH35REyBEcUO!r^cJ%QNp#VX}*K60vpZ>q=9y;3c zK-&dcpP93znIq7^B$%CDfcAT(oDwiH{-uP9T3Y<8Ub=d?J6>s_mKNMrj#f@q&Ttqv zFBdO2^M6&h_^;{~?p9`SJ5MVM7bhndXV}%9&M?S-RCc$t{%aQ(zdicDt0f8p7=SDI`)~Ds3b; zAJ5e{TPr&oTll|U(cl0WF_ec-@apn^AQ-$?1^+Z9`tKDUE)iZvcV4IvpTJd(f4VGc z>0;pw`XIrK*6_{T-Cex6(13y@m@#oDE4Z1Z8Qcs#dyH3*#6Kla9;onD9Z(A_is+L^ z^5{FzA8`u{Q9T!Thrhpq5_APKa~BUVfWPm#s%L2-3Z~J?3@&NsWM*T9){@x)(jm_M zUl;yuLmZT$k%WH>{%#iF4Oi>&?*#uRQCeC!*`aUZ)`A1DK?(g3W=8IR`U!f9ZqyDA zK#G40#kv3P{a>}jx&LEu;@tm?{%Ue8t*l{xbqBp1=x<70K{0CxhuGvS=xbp z@lUtWHUIk+ejc8G?g1Tw!ChScsmu5e0)sB(v~Y0*$PjQ%nD5OUv%?V*%i5fM!>Vc4*##Q{vV&lZ-)N)zj)eTRQErh#tU$ozn><~ z{ojXuHG|yfNxS;rzto5(MN2dq_17%8f+f2exdb!B`s(xdP|aQ3Ev?-Dxg>b?`EQs0 zo*V$`{ayUO*n8`+sJixTc<7Q)36+)-sYzyr4jU8CT}M6i}oQFaVJTMY<6M z0R<_MmPSgteAgcIzMtp!zQ^~^cYNPpFCMUGuC=aM=en+Qt-WR=cBXgD&77U>Y``I& zEp%1|qC0eA;RtH&|0H*@x^4b{YWSzRpz!{2^w->fwK`dv+_rNAh5N_XKaFlywxB`m zPnjd|e+nH`*&oV~`qSfY=_5ex{xt%!=pUd!(xLyzohS<_r^bgLi%{b|7Q13D=+|- zmqWn+=Me9ixLe(`@-zp5|DCOWx|q2*I)VZcvw_Y+Wluw#_Yd*>(+L{%-?BM8Z*=#7 zWPkh}QWqouL;stT;Hc*h$4mW#B{3H*{sal4IrMh;9-Q>rS)2czFr+vV^~d^Q14z)@ zpuXVnzXSjs3;m7hpFqv*Y;8dn+Bu4Wak-i}yEuYG{F^w3VM2Pq&|mBSu)rNVfPxc1 zNeavo3WtH?@Hni!yY!(PI%<`&h1k^QP~vLhXk}vS{9iIR;wtiAA`rZ}vzg^z8FWl5 zW@2MyVJihT0*=noP}PbZrl1r8i4l;tF?V)0cNBw`EO1CJ1rCy>-9Rn=x4_ZL88nLB zv%76BW#cI3Y$|VMO8LSm?bZh6gSV$Kxd>MG@j?92$v6LJ}k%hle9Yk>Us(S`tC* z1hywg92U|8vxdQfPG~Gv5{m(PC=3pXLIMd6g#n#`1dl~YBB4H@CkBZFT9OD1s74^c z;v{h>aKdfBZw4w1(YNaNVFs#bU{hN(MUU{?lIZC$EFi(502&A=8ejzuX+guo zpnw({g~Vf_hyeyToFor~0Ui$dCW1m#0?1)7qGAYf41f~S0l;DKqF`SHL5U&iK)6AY zf3*N^04^XRLWu-=C=3P#PUe9K4TcUT2OuYj#-Y%V=${xR;dsyu5yKtIHvet&=@fi%0Y3#&BZ_zP^x0E#B7F826p~Cy@?ud6cUH} zQxcNIFj0~S1O}=JsN}&s{*4l%gTtCX93T?p1Q0<*j{ry?Vu^rC5UP3vG3J>4k|F{1vCz*%)!PR4aysi!J~+3|3MN^oM}m>ya6kbM=oeUq^N689qTmoHq$o-p0R|_D1fP*gg8LLC2nE=ICIXH` zfNB%_5BdL80@415P4ICE&;;BLp^G4LJ5)V*JPrYIJO~XB2XzYS4gm@i3z7va2oR&= zp;CmZ0HiHaToMeL$jwMJ9EBk25vv<2SPTg2umn(&l7QsFlpr8}1ZpTO6fo!mF#(W( zSwb14?$tE(Y?C_=7E!+{6HIKxhW=0ds)EL!ko1!Eyu9HyQy^B>)@? z$OH*82jn!GIBKXWKz&2YDG^{|A)-*AjDa5L0#XWu1T7_y8XV9KATqEvK`RN7yCIT; zl%RzKeCiF#63RaaV{%;Qd+x$tC8A0t;#kP}yHD z1x)1m=cZmp!U7x)5}$1Vk2a96|34ou{@;gb{y%@1=KrTh8=yN9xEZK)K;B|Rh6O*7 zP9O_K!4aE=p8^9<9NPqAp>SQJ@(-hXdAo=!$Vgpv^!Z$lhNY z;9(r_T!R@=1}y!tr-@Mp4?#d$NRYZf6|x7J1S4X0WDWVXTS^80RgU12goaN&4M~%!5ggE9|;Ovp;ZF|u^qT#ZGZr} z<-#9E0NxS3{Ot~&$PmXt%0LSB1mBPoH1t{(LPt^@dWwT+9>^faIAS|653ayG2mtc) z$Hw0fiG6@A;wXR*G}I1R{`*ZFC)5kV0SeX(@(j)IfAd?5~Ug zF@p#(02#oo;EDuS2v#)F-(mm1gN3fpppc-Q7_TxO^aqRwbR@wQKm-RDgbjoN*v3F( zCI$rbprD{|iJ(|QcmWx45{ZL=TEI7e3k_KSjnG@jA#u$I*h8%FOKpp%f z_J+d#JJ}#|AO_!17vLLuM@$D|z9@r?0s|*z4>4{KEyUDNmi^C1Yr326t6#fFPkRcG zAdLRi1K=fD+wZ7Wy$feVfOB^@W=tq=MpQ96_C z4%A_n&nez=|F-bdErp{wanr9SM$#ffqXW--pC^dl@iDa^JN!M(2!7W)bZJ<+q+gEx zV#f)y$3-7`9FHBlPHpl$?AV!U4oRzD9nRH$sxzY&JRbNC?v;Pxv}QB~0X~<4kmFl3n?)kZG%cFS=KaS}+;vbOMb4Y|2dTHJn?*PSjr<4)9ZYmYH9A>36#j@SY@0r&yVEFK zWw_Gk6x{t}k*pVBDD_w)RKnjBK`7?vdpS+J`-F=kFC!zv<>hOJ5sGD@wcMh0$p-DP z-wpNN+`e}4u8P)RGC8fnB?_-ojbdj!l&#^W+JtR)uC~ulmTrDY&NzgK?{WlF-Sn0S z!EUNtz%#!v0!<*|%G~pey6y#x^+%;J4JWBRVs80H4SN@RhQVhdE&;v|uQU~&sI%I( zrR9^=>Q_9BJ+yL8J>rBR1zcq0>Z41YESi^y^Ehv>$teiarZjf0Ngn5s)zUsaM3oB# zUp6<5V-QTeXv^CFAvX2g$^3?>brE_DF$9K-Lt(+`?#wt*wwljQ!OyfBpj49DbLPt@ zX^z3kjM2e_(&^f+hw^UQUXsfoAsWQZUeIR@uO*|NsuVtXmz3b99tuLdRP&O`1j=nr zhVTO0bt>5JK)$TqLgu>Igs52UkcZp0s%rC>%EO35%b#PSwC5(YIT~p2Gbvi+mSja0 z(vcfA)4P{tiF9PWp@1CqBx{5ogQ=0>1+jXBIfQnlHB-xT)iSE0yx|bP>gz5iNJcTR z<4y)WC;2+-=(K7GuNz+9>QCWy`dsjm+wlAHY0J*yWgINVfh)D~#yPLz@zglV!nn9N zO}m?%cTO{m)R*Va<#gACUljKx4_4fLkO|zvEAFCG^>#T_?{54!c_QjsN&spZZ7A!= zw(vQy5Gn%Cm^ph|LKf`FWX0=wwJI*`Q`Z>lis?StC>8EX=AU1UX_>Zn;w=rKY|qO}%CkCKkM0_p{831k z^5(8<|FA-Ox%ru?jN=NQHvIi>kwC3Q!}}%NIQHGajm@cb|jH66qkB1W&3nd*MRYEtK4 zhiDyXd7Kkxth%0XMCEyZ*Bcg#VL!oMPW?W8k)QFsshIh8yw`wg<`(Fs}Z>56US5b5Z}SISWg?H#3u#p0>! z@``ksgD?P~UptyLalb89!Kw@$ctd-u>#K#?MY0aRE$`g^4b6N;<;=!|>OYe$n{8xz z=D9Yhv3`C|#hp1!*?d(c6H>`4&X}s;Ez574`MZq*Q3l}x>~TMK>~Blu0$dKWc>RfQ zG|^#7z7hwv8NgeS~Tkeu@J=Xf3xefF?!HxU49T0c^H!H2IvMyX78b-v zu}IdO0Sgp9Yup-s$Z2Qkb?j{i^V6?b#aK_H#;{5TO#*lj9ye+7+!= zT`G0#p`YJ074G*K-SrW}w33@k>4wr;+C(ZAp*y={bR_K2s41!H3y!{5LlwakS+~ll z70&i2sZMcoY?6KV?rmr2e&ESaRqXuaTQ|rb3RW3+E?4evPaAX6ZxwhK6dn>zNcf&4 zvMVe}MHv2=>iXTbnB;->Qw%%=`KLZ~2QIy}S9E!ubSy{>9U{K9x)ytyTa}`1o68wR zn=(V%%gdQM=3JIodJoe_;e0JaJLxj%LkVgV_Nu19TZ?fUru3m?N56ZGRhKz8WY}Dr zieZegy-(1JdlB#|L6gD|krwNz)@CaTo@>n=ekX-xYtpHn`rMaE^I8)x<5aM070;@<*yJ2(h6h)C zOC|2Jx%iLfl#wt_zi`y_JoOl2*i&a~guPj)4an1@`7@auoV;kpBW(DEP6|A3dcp7H zf7$eUz*HAd zG%5w2G<;`cmTc|aBrA0)d*fo-wBuUSDhCWtrwMXUkEtA&XiD0*F50N8STN$ZSP%cZ z#2B7eyb{4zOR^lXm2?t0FG-?rn;}wvD#Vz+G4q3wm=k1|m1i zf9{YKB#bofdKyTh(Vs@37YpwMuHr zSETMZ=_SeF!qwmn0a%K+`_|bOCJ(&6H$W3`LXpXueopGb&y-D)DVe!ndaj-&E5@2HL2rOv74-MAa^udn8nU>3Lxf z5LjMFV*AW8zv{bE{DLb{B=>NGW_ruV=?g`=`w0a_r0QE4{!qr*T%LhB&6VgP%*0C5 zc{MZj0fl^DiMsYzYT9FWTw5pF#D0$3mc~yXnT~Sxc@V)}PD(Ynx+*9DE2F53QV-4D zZ9Lpd9h-A<`sj9MMhtf3=xZ3`3F)xoXq~r)n*bj434my6#m!|O{ z=Nv24=QLV}yi78Lsi)Ig-F@6&%6$?P!^%FLoEt^|)R^v~!e2<(H&oTU3w8BG}N-y?^?! zI&@>aTNZC1p`7tx`moYCF{hkW28x2BwG`lWo_-Re^kRxZX`F z)%vj4&)lu{MYi2zj*b5Mo0*wsK8*Ut*7A|d3tf8fq_{kRf(iBLEK`K7RUp&ea#`A_ zyv1)UH7}QqM1gQIhFWB0mexSdPtCtCwW|_PotyWFL&A5zW2^-}G}pUJu(;&aJwp>& zMsQy+AJ*M;p86d}ZWUX4JlR5(;lL$*l?B2X2@jzn#@^@;({)>+%S#^Osq1HiUg$`rkqU$g%_tcG-yANFb2jb&-c ze6Q`hwBLQq&?QOr9J|Z%-~ER967Zw_M|9^YbzL6N5^QKY_v__W?=Tn^U6UA%&6;R? z+_EXM7>K%%7LYM-*!(QNO1mM_DflgPAM0|?@+;>g-&OMX8=oJ+jP+Q%Xs-mn7B!94 zI|aL-`QZHss|>+EW6#U`=PD|50IwodvDQ99KJ^12n8^ziYck@}9hbft^ zxcKu|itHP7+@0Fwi)zZ2uS(9S^%1*IFeYEQSiLp!SXOc+O80mDJ{$P217o*@0wN3a za#iHQ2f~BJ;tQMKsC*Kb^3QYGSkt7AQJJ%idl^Wzb;Ev{rR}nB9LtmOXKe=|F&96z z?@c*fFFVGq)!DG!Zf!4c=75oz7x9qNp7HMZ>7a|lI!+!ngU>Qt_$}8Ad}<)2hj_-<36p*1ogZuij&#^W&GNG|UX|b7D&z)@vrWC*)wQ}G@Sr>=Gm>d1i=6McfYkAuC6PBFYk zvib7;u!fw>?a$bl0vo#X@ub?uUYC_t4XSKe z5o2Pej|;VH-m)m9x#B$soi%;x+Nm3l+;u93{z+Yn@$UV zcgK-zcjK`aCvHhX-&y2Q@f-D=RvP?vG{hg3zDz~^>3_iXfq*|~X<=`(4}`Mb z6{>#{;wiXRRhfHsABzQef5zRDQJ^s0P8Tsgi0-!U8`ykN zT(_k4Ibvv@QpW=yS?EHM-`d(vUU6($F!>Q?IiR54A*kfjTrm3TyOYgoY$F8u{4JGJ zZqM`uUaWi>rCW)5=w^22j4ffe^|2?jb3SILBZ=Zkk_xrDxSj@;sC#`LN?PR3Im44K zYQN>S&WKn>Jci;_Wb`RY_#>o9=NfXcON0W~)Euzkjw7krSWxQJc?l*=~ zKvvFN=cM4RT0ZGa)gNj2RvY_V8CT-YHjH@=etPBVjF)3w$D=ay(0F!Z?0;_ zeQiEcI$*dPxbM$K$V=0jvJF`l&NLk)Q@64E9!a;ji_~1)!HH}N(4<@U$GUUYb?b3A zb;2HO>I9V%oSt2G(=@VE-#Zy};+kfGb9Uu9az-2E5ygr2mCg0!AK4_}vxzXlk&)k? zOnaQW6MUtmMoSgB2AIbc6BaJ z5^V;b7H#hw?M3SK(^nPy8YWf_>W*lw;rWo2hIC);iDAs5-eTv#^Vp~Z*ItYtz*1~+cuxw zwVJ%ee0z?J%$ISrg&B5PPXF@Wvr}o^$= zUfs2v{nWAR7nsqH+7r<(@uD%b9tbny^|8H6hto?cqaM3{6~h?tVKm1Pi;AGSv>HZs zRYCo{Lj1Lg+NA|=?t(bYe6+)trscKWUHK!UEd;nStZMqh$J3G1v71MaGaWg5^1)!| z9@TpdwV7vpzvc=zSno>U>3kZ5JIgx1bV_2KB*hGi^YD zX*?8GV6tD@vU0uc!X8KB$-D|i9D9a*a8rK!kZ5w`ZK?uz&+~wU z_bM@qOJ1HeQF#)QE9&=&b3==F18ob zY#Gn6^jFSueRW%Gjw)7vSxP|lL=U!#NK3ttxE@fVzw2qjecSxqlltjLn?@|`U)^oz zs>#GZZLU~bnX8nruFrDMGKdM)oqVh@{=;c%jJv7iuEj)L_u@HlD4XJ+xGld_SSq5o z-%whiEu!@$Yo5~J(v1(w6nc7AD>ufpzwTEd=W**Iq_E)oMl}c0-x z5m5G)jYdr2Tn*bg!ngG560P<)F=VI5J|nMuu$iQ`U<}MZ?8?jhT_Is;Pu z*obeO6;|4nFx1lzCo{qC0rVEl*isTYw1sMZeX5;^bo-t9G~&Dhm3R|7OZVrRMa?6T zF5_DZ%tsVVN#+%`xiA~~zKt*VH;^P31RMMPH5U?cZc)Euv|r+RJ2`gzm(z)x(j=sg zoo{xn8@Y|D=NG-xj*I0vqxZ+^QCClS`NMpKulnj)-W_GGJ5q7Qhubn-?BkNbs>vtD zisJDanUz!e*q^)lL)8|eu|20Znc@?kSPabezj{tShtH^@mg;U<=s2TEWS)3HF$HWGR&0haJYx!d+Hb%86?pV6y zNx^r-aX9zxdyAJKo?abDPF&{!mgI{rP(=ROG2tI>c@9{9&;v0qP4^O0%EIj|>wwXxx z*@8x$fd_*-D?GS%x>K`&w(36abZ3m}HR}DwH7e^}U+2mEw5eSVD=UvLxfdx7Xu`eD zFbVRgavSP@^h&+)m=s|*P(er_1^32#HXFakxBP|b4|q07`}FlbaJ6QQXU0pK)0M5* zze85(R2C<_QeiORVSSr5WN&{w-*-)~f1qlx(ZfOOC9Phl0hy;Ir{tn1$u!@-k%?`W zPn|CsT33U*1TJrRp0qTdpTBA=)Ggf*Z&b-zNGAQ3yVGs|0o7eQ@Hf$oRB}Qw^J9u5 zRN$k;LKki!Dgzq%8#l=k5>pNG3$RCpa!U*i)gwpRYgt-)Qg6G+I}RoJQeK{%sVz(1 zQM>0;y85MK&*4LeUpA%pM^B#tIdJ_!M*z;`oC=DM(s!Mpiveld-pZ+|(Ys|lQkjurF(#YfCRSTv#*<18O?zv7Q`MIo&`}GW?6lb{h z7lilv9!oj5n0^S^Ne!5c?M9flO!SXbu)HX_@v4&RBB!_snKO4G08h(^F*+HRb-m+& zQukx`uhGe0Or4|V#rle^o3WpM?-r`W8&qcSjZ9ykpXq(FyTjtP5G6`lkLTaMWWH#g zL>)F#$r^TZ<>Ptu38oUCrj_r^-Micozwu*QXJ}dKJ)PT(t*Nf4@eZVkEu?Q_wKo!8o4H6bw-n@fn)11_M2kG%KHOxUY-Xl^&}^Av zjYpJ9Ov%{hW_upF`$gY4a$+I?W+WaKKE$X5KWWYu24@h2S8zsLEqTPuK3P2<0d}Ub?~+ zt7BBehL%q6j*rcG-C6n8dT{7Uot({vRnMpPV`7LiT?#9BQNM8R z%aqr3cI&o?m2H{1!f5&#`b{%K%w&ykGp9jO3rPyahp~CTbQb(Oe`#Be3bd8#&6iVMozBzHLWeh=;Y!MQ zxit+N+x~{{WUlXcsZ5@S*r(y$OI%4ZIld7#?nN2%w0EdHMm{nOKNeOn&%sv|Px8Q- z!>0Kv{>sRtOljvOef+P}TJ zF0W&=yickaJ^j(7FQ7}B=2CR=NPH6mMeGCL(i)@7n{O~PXOFg(aqO~fwshY4O-ZH_ zLU6IV(t;VRp_|pMoUJHEmE<@3I?9)K%^laATAfYJwDrhFVqsO)`?B7f1AdLqB3YT3 z)Rm40=8tz8Bx&D$qRS17rsm^$k{v@}&?ii0m>~*gQRoH3@ER-qaQ#bqbb zGIjB9ahzi!Whnzax$oCGgC#nvsQsHRwU_fnw!~+OD%8PK#zb_hg{_t5Y)f-ZKI+|8 zfD>-4eoGMwRcqhe?vrvvZ-Q~L^K24MDAw725tLPV?IoG2I+l8^%sC|XVN=1>aKN|6 z^~cz6FkAay_jM6otYyo3lYD-z{jJzl0qsIZYfbtKiRLPt)^GI=qNf~7ovU>#^Yg95 zDVkB%hIQ{!_qcSW^tSTlP5lmZdkgZ^;J$6-U-0AB?v>7>Q(W5qy+bP3XV-lfNjQgI zq+f(?#z}lw74TF>9bJe!4 ziueh&1wvl7&z8-7k>R0A|EpdMj z9jW!8`*dzVxCQM6_WUN2r8tv*F#GZec6Z$H zGb^jLrx-fw`qNCztz+{t{jG29vZATxO|n zJHJCJF<7dpM9P+1X4x&WT_dO)n$}?`bGEDZ@)Frh#&o1heB;q$!7=afm@b}%_I5~3}(XeDmgFD$Wib)1r- zrxQ#Of3WyO+1;p(=_Y_uU*u~T`p&weRL(lEg=7{ zO6)t4-uu5dS08FuO$msEa#N$Mgek&9x-`gY&rzv|7jvrde68r|7XB&BNnQwZalgnq zFu3?WH^QKAAV*|i*H~nC?Rm@vu88jU9mhqrEU2-i*ogy1uIBpEoi{`6LGGjy$py*k zjyS(nL^y8Mmi5_f zCq*f%SxT`~KIBr1A$OM8<~Pz&)vqQ`&nntgahCw3wT$du_PTVCdUNV`kk_R=DzV?` z_ZU^#q#Wzbca_;1JH23Ay2#V#MxXVK-x@VyD?TjMdxAP&&v$I9c5?od)w=J~)vvD} z!Dnv3__piIkGcxEV)ELh7DmgIJoa|dcW(sB~Fjd}G^Bl?DN4?FIc@>Kl19#nY>DN{YrbC%qJ z^?+Ua=`qekm|;-eOlFcE&E@?06uqreJUFuknH0DUrBSIGwOeyV(ac0vQMNB?gn@DK zj@57Y@hM}mo209DcHUOq?H=Wty4AW_a?+-(6dokZK25k*Kf>UuCCg1%bG_-_?J4>b zdYCW1e9G(5s|Pbu-jwDZ6uGg(H>ouyUAfW)B)aLGey?3HGOb zayPpA^(e^T?{Y|n23dKTWuMerb=C|kkaV=Defber_-^D;4aVVU!_#)m=1GQmsmg}F z31bmb!U;-NRUAvpkyO#DI$l}o7S-@9Em`nbQQyl++YJ)KVX>t z95rp8mvBvN%5=wmnewWy>Pr&&(4h*Uyr=c%$}2`K`?Nk0J0gQ)QcNl&79L?{B(kEl z)uoRU-k7vmY*=1wWOR=4GaPzz1FiM+14?homvMLg8BzJ=&_d>tFaOZk===aE%yc;fi(&F)$qXoilODP`^|(LVo-$ zgUHi^?=#%6AFiawek?LB9-Qvo7ihq3H%99$>65R#oSWU+)WJSS>&LN5$yQU`KjYT* z3gNZ-z%Xh=!7kF;ug*oh&%E_|gQw3-Oz294IhL0-LTRBiP>uTHP8a=Kt@i;Jm>QG& zV3nyPCUNRB^gHx(%d(<@vqIfR#{#(gF18aaVJg&c3K(OZXnnk_$unc>_-pcPe0M`u zJ+!G&!I|@sl+nB+YJZJi4|?qnusUy#fB{^k6OnNW+Mo@+Ok9w7n_+1tHWx_aG#O3fqoAy%*H z6P4Zf59r*B7$*>mr>=zjyYGU%E_l z!fG;|(XWkd{22JQn^@YUd}c`XOWXq z9`SX{WyjVW)M{58n2UU+3TmFcXx;+;Ha$1HG=sv-s8`*=FDXNV;QQnc>N{S2Q`(Q`UE)@f+J7MvVg*Q z6MTM(3)flNwsJYTTBg$SYy(~!A1+JTu#0jY0Y(@V8pE1fTyOG6-);!|pqNk78Om5F zJ9X;oa?p{s^OZV32D{%VQa|yncD4IrqS+tjf?vPjWbiOlrS> z?S^NJn{@mgChLsWE*{YVYS+s<`}e3;CYpaox={6@HqUu736eN(l)s!0RA-TWl$2h{ z7KkobaVvGot%lo6`i4Xy#byf0muIA{Sqa8RdC!nLGLFaz^pu%SDLpwCo=9?Lz`syN zc922t>P;^c*ZvQOukWz^WAk5zY>W)(T$fipv|Jl;)&mVLRF2+OZ#~s5s&Td_o;lMH zidLAg?;MeJ2ku%r&FAZnd0Wi+8LLi`ixf4Ep7B$U%(~o1GPL_+qBTw!*I zE%J^^BkSIBvtP@wve!MIGUR6Q@t}wBdkedh9eEdcGm{MJI;IJ|?K4-uJ%DvI{WkWI zq@920_Uy%lAq^iE-XB~6P08Z7_-1Z6+`me-*!&R%_1>$opx$^&}}5=_cNcv$TW}ZbGb^3+VjkE@;U_t%sZ_q zPv+yI7|*(hTfSZ**;Q4VrnHdOjL$0=Jq+j=r!j$>8!@+-#CR#UB?dckQ` zTQ|{ek~!1s#q$Jd1)RF#yUp@9CCTLQ)4e1M?#C>b4Ahc4VJX2@oZtwe3P z*aMr)lT}@8Je2v}&?-;=ZhgeW)Xh;VT3zu7HM;ktVb&@kqm?)P!dnCG9vI$grDj$9>G$1W4c1?)Vs_6L*NvW|zRlK@h0p~xl9}b?usW}k zDPDcU(tm*aTrN+SCG6$NSx50oS+jDSfgKiAQL^J{%HQj9O>$T={?oThY&9Q?-!q;F z4vx7NVgfHXeoOK3nb9K$MGcCvAG)@TFxD$c%`0y;5|6)_<1P(frZ=4WeqvCy8~1ZE z*ywgM#fzR2-7@Dr3c(CUvNM+`iba@ciW{|uJKOH6Hk0dPCr8vzh+YYL#nEQ9w(ALV z5=2xh&mJjx&gELYPUn?ay4L?%Xl2^XF4!t*gC*w}H&=Y@xi3vKl>$PpYP{sZLl5gp zTL_DpT)6h(b!LLZ3kIFEqg{hbO-&UYJ?}_=3?d6x7kd}#+;-Awa6S$9SNmu@0}3y` zxc{=BW}gS_SC5#{hR0B)-IsV+MH}>rwf`5xZMm=WX07!;3%ciOxPsAnmP_gD zkG~0j4Ub3~+FD;78H;^bU>~@c(rc^v{&-U>n{y2d7gI7F?4I`1>6wA=r+&h=|Ttam^GTM1}a^l3y3<~CIOvWBwAWy(<;5ek6kqI|Ac|R?g!+IX@ z*!biR@8ZEpCQ|jv19fuH?VA?*6ooa#zW zd9VEoRkag7lL}`sLECTm&*_Os+%>xQq|1yX-JGoOmj_`Z)n(I^XN$qMj~l2)D|_g8ZKS#H*RnI%HjKZGIEpb- zy#il;lcp?wf9uMHv8sC35J@KeH(R-HRf-)~-WF$;fTvM{0>`M%*gMFaL)r`Fk!bZQ zV~xojdiw3g5`4i;>C5>$uIz6YvMjKJQSY2v+ujpIToPwHPHt!_?Ol6iSJ0wnw4-K& zEBo?RzVF`7qwD83HT1u`Mh79dU`d)}UU8&oA%@{MUugnz9LTul@3(q#5?V&Cqj>Hb z(w->Kt$PBlVzUn<#R7L(V>= zID_|Ytmo-SbEOT@U{rk?sjt+3(=-3!Y$uCczblhkzVE3#1F>uwNi~v~&a*nW+U#HN zjYL+?Gr>&B*OEKa-fk?N9HG`dIjf@bo)I4S~9-%1B2N_RNlm za*@`3wACOP2#*PM_dstu3t23ewXG>8CUP#YH4g6vKehQGu~AU(SGy{2IcMYOr)4*; z%)-raYWLNTHycO!iyX%eChO`qkuuo>JzOx07Yy8+w==3K508Xi6)`L1-Bnd|wR_ zL6acN;yDAmXT`W7$>^7Nn~5r9Qzfw082iF>D@^y#;C36&qct{(<`m6kmhY`zoy{Lz z-ISyDx-`*M3LaaK*>5iCA1Ur^Js))O_SER4(@oDtCyTso4_$1a=C_K`p8GAQ>gb+4 zzYu$Y^0qvj%TSWl=;@X$GiCSNzjR@@ug~58Piw178Y*_MyV+aSLUNU`GN*qcki)t_p!{skFaJl zv+kD6{Bi5pu#ctFP3geCDNj{?p*p)%{6s_w!&qOj^O#5sD^tKl68;Zo@?~zv3(Y6^ zuQY+Xm(_kdp4;d6GqT~y4AF_VtQ2%oPcKDPh<;ewvZNT!mZ7I;4os5?qLTCBF=>C@ z=Wy+3HV?-+tuN(yOH?_gLZpNN`UUS(mP1KPP9J75Ft$5hE+X=+^9Fe6K@SB7MrtLQ zm&YF7Jo0LMda<=zds2HjPpqKcqb23Rb9Kj~JmrH}KPJr|>l7v)yQ>qPt&R!Ex2JFMNKyPtZ3w;5&Vjfj6P;+;Jfu5o7Oh!p$P% zt&Hr=Ey2len>o~*NxHG|Om?$XVYi<>Sc_e(6S2$IC}d&5R66_`#7?|zFQ}}^(V`g( z+D#0yy15c8mVBA_DdqnHBSGB00MRyJ$KyapUTjRIo8EpcFSFamJn9$wDC9VN5`9%HRb!b;v?j zi_#gQ{($UWp1KU;C5z{>^DPe!W$Hfo zr5Qmw28b^yx&3jVt0CX#k<*_6{4iImTlrC5?!XauR$fnF+{7;dnO?sy>v9!goy5ayll#E0s0drOx(x_$N?jWi$;D0Q)`a30%e2uBzsnfGmxEf!ZD|xN0+3A z!-2gCr3Y9(y(&jTdp+u2ufxWMjW($If-t2p`oz{1p50Ogg8l%|c`y#&=%IX{LGHx; z9CfJ6cSDlu+1qdt0wWu%Zw2se4wgRqeZ362N~W1UWGqe^dkhTE@8Wd>U8WHB?_O57 z&A+=m8M0>o8oa*w)x@e<3U_m+;AMU!QA!qvic2qkZ1&sj?l+2-lP*~_F--c9dnw4} zvUsZAP^@lc&m9g#aK-3vVN`|n9$%@uSqkKI-OS!fNH@1P`ONE--1k_jOh!oiAAq&J zX*+IMR)>A9`}kGP(tvPaWY-6gIc?)WQ33!RyA$g=XZ`gBX)6YTf58p7E8h)a)nfpj zxCr5nhN}BO$Yp?c%huNK>t)bY!moYe=&6`7Y&`7X$_|937P1t=&Sm(vo>Rx}(|Tr3 z8UexPhD~^Brad^zQt$XDStKJ`D*@1LEj%YT8UjwUNSO$Z04cf1*z)NulUAON&(19mzObgyz7}D5(?p*DYG%Sx*wPng4;J&5N6xt-8%IKVMSgAgdOt; z?K{wR057b29_`)Md%&^>ULihS&}tftp8n+AFLp!AlP-B<%5Vc%3ShJ?l1ewZ5cjD_ zz>v}rxO~jFP#7$R{lVbJ)vS7~D7rcv%5pDL-A->MrJo3IvG@BHh9g)o{Y3OHuaUw>4z6?|4EMZQgRu9y{N=IYS~?Hmg|*M4 zv9pnbXLiBMZLSRlaQY+jR&9rtqpo~o^5htdB>-yq7_}=|vdQNWBF0uu!9^p#f}jx= z(yP#y4Im?JE7?=o4!Qit^o-J3M8hpTO?*DKY7rh?{fO(bktzr$(<4Ibix;-;M3_#d zi2vLFzKMOydk=X5tU-Krt8E#Vltbn0ej9pM`S5@ld>Mp}Og;WRx}JF$CDS+qx~!-K z=S`o3%HmQmDImfp{rR=&E{c&Ugq_^WnGDXdx3MGIfyL{e$AQ-URyzKVKk!Pe9m14J zwgR!!9y@t;k1qjtxaiBvrk+dk;F0%zJ>R3|LjN&iv--_j1m#1jzYgtJqJt>WCEk3)QQiBeo zB#!o7%S;?x*?WA>0NzI!=i^;Q%(Rp@~@SXV34I0sFlJsL)WvIzN(}g=N~f% z#gRf6H?BRrcS4vwM=JNS3c~JboZ1*Qqj-7466`p%L&zaqH!DbJ7oSN4ujGc?0|RF~ zHt(~~pvCFSE2e%46c1900=Kl10ne!bHINBTsy!2PYtOXegbV0w-TJYPRb@DrWF_!k zl3!&X)Y%kG6Vvfr?cMG8!#lsn$GbnaLVZElsz1=*{H$pKba1j|RiU*^iv^>ATPZ0DO7H)bE0l zKLIeL38?df*$v1BF>v;fOE9(OI3`ZG&f-Oda9wS32Qt6s{P^+YUY1Pgbu0DAkoy3v zhK_pN^yaUyxp8wmJPBOE%9SmwAr86 z;X3r5@z*ZO>fJcvuayg^K^7695MW%(o?Xv8jNRPSBl--$=~HGQXarM-lP-k0`g3O4 zy0weFB-tCBCC9r1phBrR$#mN(PQlO1S3&}%r?>sGh& zqpSdU_+Kl(3xYp^5JLsrY`UJ088#ZnkDh?^!IfEhzYvy|L*SSvyMwdjv!47`N@fMnPHz$fT3D6V*D-X~AuDAKn+m{HW;8GDq1EO2`|OTp|o z&?>HqP!%p2{S8z^sv$>hCNOp?Egc}s^Q8l3@AVyi5`SW?*uEThuDk=$#Ns+`@9I@T zIDpo&GrB)F3h6AG2<>Q&VeJ#`=xpjW@Qs1sI^2N2<+~y2D&zZc*zJ|q6W}J-QO$lv zJuA`@gJABs$(S%`7+A>U1HyL5c}>qAd%D&$d+Gf53)}O^^QS%u!M3KYShnRA#Au9< zm4R1gEpr<}jLnip43vER;dvk5i=#kaesgkVzz94GkU6R}>ONgISWaOIU_kK@TsYzy z6bFl;_^Fg8jN{>M)-fOA^w{waWw+YWSI+}Go%ODgTDtK?Jn-55Flmf4nEgVS6wcz`&^!r(;CF+8%saLbf67-+ET%b#9-$t$Z83SkQbs_qOcDtDBdiE7mQ8 zrbjn3PhqKj6)%WVN`CP0+>ic@BUoQsF}*fwkR<>n0}$3`c7E8oLpdHXs(b>@9eTNK zj;|c5USTZDtH__Wg>1!pdr*0Wv)6iiqwE*kq$ckF^dES6^UKmcT!4YB%gEJ3b_jdO>k47^Qu*%}wztv!I8^Oy=xD&pn-=q{X7L}k=dFvi z%iSkJ7^MXN@z9))e~%+jSH3fSLLf$#fMBqv4Ak91qC)hfsu?(S&;>9^Krl?bTDUU! z`Lm8~v5GeEAzmI$ek{~X5T31EnM^2>t1H%t+dlX+KHU8wyo_dM{@5TK9)Ojl$C_g( zXlZhRjf0!Iuo%7{fY})x*mstvy|{nl$?6R6F%PB zb^vf9ZE+-mv!@@6n$j}ZLE;R@{6jb!b@|C7v3OO0RzTSP$=SFd09v|R@bab?(cIZ2 zl*1Kc1FwU%D;%j%4k5pJ;KYx9iX%u@zdhqP1N3O#C;FnAP)q-DyK^E3YKPNUZBDvu@*| z*&29NUQ~>;kC}z?!eVET5k)wF>_gRmpQ~R8`?8+7bLdu&ke|r%*z?Qk?TB^YmCZ|0 z-+sV1coo*Ju)(*8g8t>f6F>eQNH1DxHcfr??PC@K&1^xl=G-6^~h&{5CbO< zT!2Ycv$!ZZlClY7rx2${jejVsTIx^kE$eMcUiba2`|!tie~UdWd*J%6UI~O*7MC7F zmPZECdC9?66cjr@X~V`hTJn9ktlk4~F6wX~-wny8Jl}gm@2D97GrEL;OtCnT$-pZC z#==_9eab3u*7TVu3WwncpX6SzfUqR5kAYUH&vaJKay=%8I(=Ki@vW%Yjb&S3#qQRf zwzN|4`h>2%9CFvl*&lwpjvQWd{a9W5?u=_pin|FA^z&0f+Al2G43RL-8gdzim5t`_ z4MFL^*b2!8kX7Zllt+|1o@>oq*(}Td@5xP#oA9Ui{(wUr%~lC+5SGLvh|cO011pUZ zIy>3lOF^-5MGLln*qX&-%vjF@xD0h@%ebUoCQokde~9UB&{-*!m?v zb!i#Sn{^yQfgtQ4Ne{wy9A^u{9`Z_nDzC#ij|%$k$7Ij%&0=@2*ED1J=g#HW+O!!= z6F9kp*FK6?W%C#Y9*Km=SMHp-@~~O$CaJH!J>z;p@N1|JFCpi(o@G(-t-?St77n`# zeGA!lHrRa`qEs*jL`Q{J>)0taT_C&H=w>lHx59hg{3w2nKi>Nh?pS#nx?)|{%Msuo z!X$)->UqX?5++lUBb`l9ta-H&yFYKw_rbEd9|Q39!)bLZKXSd>2LH8kk^#CDKrKI- zIYaAL2H(Vo0fH&RhGW*K(ICWt8UpDf^`uaWf_&}0nZF0{V=wb{J;ew~%0iV` zIQ&YKhpVmgX3L!+jJYg+tYf#>OrY!|wMXmOQ}!Il%@$s^Y13_ME+%6aP+ zg7xcQ-MYmCwt-j4e6^KTIC;_(6h#UkLLl1^mRiW*A4n=#xm&gwSkDrmde6gN;#|6< z<9lBm_!J-Q{lFi1RnX-!3grL*q00iXqVw*V^H#53bp4Xm6T@YP3h$!?m-)&_xj*&@ zMturuan8^yP!uedohf&yO7eKh=K{3!fvk@42j(<$xtrKIl#*f-Zd{M|cE4qBgQ7wTVMpIFjaRQLpdGrXkt z^fO-o^Pu7pICJpD2pQH`3H~(Z62?N_jDYMVh1ZyLKuJ7=^t`&w81Db<9=yBrp8y<| zl~l~@wbD=&4hpx3fKp51!eNLkGI@eW*!A0bGYV+>`Hy^n|4M*x=hL zE+D{T0D_M5dNZ|tJx*aFgkbvc5tue?BnTlng0R&{zhLYU7q+MNv6nP+mvp>Jr+o7E z?mV;&|J<<*F~n@;+ZpR(?b@IVv8)f#WuEo-xgYhacYl8CgBb%%(^w2(8sKB7jbhDT zS?HMZDVR6lTo7VN0LlJnlb$_~FjnpL1dzR^az|z6fbMy9#yW7t4LI<27`dU0|BP=XHdxy*7C{06^9R5IFtr?w(rT}2~(UkBAmDE!C0M_PwNH9sv40|O7E~u$MVjVnme0t>&lz4qj|gg zvXXFsFlemr%)+-qA0LMaIe;|`iDkKR|}SJe+ez!Em;Gv?Co)hpgk~f`rl@KunKw5 zH&z~d3Ni5%fU@*Ta2Rq$fe;B{{=oAwxMZZ{Y}tPXiSgNkv8+CMe&;eIE%pdyRSVqZ zrNx=ZONr`VTkGrB;;xVWiuP!mtCgE7Niyilh!}eZ99z_Y5XL2~UVviXjyAmi;%-E{ zd(Bk(&jFl?I`j(fRZlA*4V{mZ0h}K@go_T(~m-4V2xF z-H-g#lfIJh{ABNk_}iyPB(X$dqPtXBat4neqG|*Iym?9QCy%pr=?Fu`G1));v{RN(W(_-8(bi|k2w_Osa5Q$-qcwVngRTv{ zseA%-nR`uuZtC7k{4XRRm(2L)z&AgfJ3_%9rzj?Y3ecsY za-22ja#R)cvt1prFlQM104kA};GWkhml{{jRIWPTA9@aDScv~XbG{prPpJTW9Dvgj zdtpRz$-&QKkM+AK`iZ$GGzMKpDFE-*uMEDP;@w@-)TG#P@Bj`TYC`|YDue<7FsZq} zxq~pPo*0~^ZlgSvJ-@o0-a*b@Z{@KhJ`G}EaOrTgbRWW@u0|`B47~oKn@X67DgeRd z$9!w>`ybx5a}#nU3i9pqj;{kDH^qnNt0#sj8(bab7lf%dwyaM@>G|$K&XU*1o@=M$a&9M^ z&c^^PuDxo26GBj1Is{R(8x5TYm@LjNW{=PnF%~v}OON@+z||k#y>kt+th(3d2ge`m zenu%gyBB16T=EeyNBTf^+mq+? z3O$zuBasZ!Qc?E)jAea_0TRen4!53D0o#2$o;4F0>c*w(_8+lut+G(B4Yz)v+9VY?M zuecTg62$)YJt^?A2O)yjJ9K%Lfgnf>Ts-re1GlWaYv(7(lCJ(_N^w^hPXazyw~|N& z>5*j)npm-P3wCblHQlRS0Io(I?#g#VdYe=L9tq%b zhkS$TS7Jo@3FecLp)q1^4G)PkG9T8j9QrZS#MT3Q(c0OLK4p~%1lZMr+$>ue;9$?o z0nYzGEB8Fic3K0i*axD#PN#b1$EP|!Lc65L$=6>VsYH3C0()9_fD-Gva^SUi%*7<3 z%O>Wq%ycdj0)r4Nobm0!hgROP<87p=?|e9WXdp&k2QZxtCm#Q+6;ELh1GD;^f(ex~ zrDv8szv8urDt*pj>;zJOKz1%moi`IOyB%@1wY_;O?)v0bG4_?5CQw$F;r_!X_acZ-HCkW42LJf%&iKMK3}n5Idr2lLDi5z7GO4P97-S$@ zNqbuquRgaP_4|9xYjY0*I16=HmhXo2R>|+cI?M*}md7$WYv%`VshJo!wR>sFP}*fw z+pN+awtiLdRVC$^IbtlTOOop(s37bGklrAiP98bbL5d@%ddQ(gS+-Zia-B#`a3^>$Jd%;|S7Y6=EO4_F3cXC%78n>#U%KvnkrddTZk0+&a64c*VNcQC8V^LHiFzwRsd zyo0CKEkcZ%sU@sb@9LGlMlkV4qw>B*@74@2n*u@$lZ$ImP&78Sc`Y<;%cFW?w z`|<2+Dd?R92qFh64^`vD{^z1FQ0xp>k5;jGW}RY{p~Oo*c?;C_s>*OHOUO&$P?}#` zHp{=HBr++*vl|}A%H8kS-%ynJ@UpBVB_uXzO!ZqurD5)c3KSH(cQ@mem)4@YtJkdS z{00heK7NX(d^hB9ko+$EB?cmz-rAg{g9C4mxwvp>_a~vP(T$-KdZzD}1%ul9wZ#J% zP*siTL&u;vQs@c7;=axH^KCs_CnU3eVRe2bpov?){8+;#jbi2A71-at*Ee*DZ3BvW zQfZ!REstFKkKxNY*r@M(Jo|bAdJ~)^wH(!A{oQ>dwK$>gnFzA)@l~~x4YB=zk=3qt zQ9I?ag%VXM*#NTJS@VKOFJN}7$BX>qy3_2!qA%{l`ua8M*90a$oFGgLqjlKCKC6S_ zz_Ann7yxhCdJwO_x*oAuubEQ&49ai?evJ0ai#j?azps9cN^~Oamz)>(HP%kJvbc=y z2(D{?KRhqL)~`FrgGK;jYlmR$fWZhDLBTpr!!q>&RPTA%%ayrHnmr%NI8W`Bwaa7u z4%Vno4Bmyl0}yU`iP>uz@t_oeP+;GP3H=X}AQ^9A7odb<-TJ+FbNL3CX0KUW@*e=ci8}NeKltGw z`CV6sFo4cX3NENH_DsFHG-}oxo7&$Fp9spn$RWN#i1i%laqCxNkr#v_m@sGhofKv&Z4`qX6OqOl9eNZLjP&)3Ju-@f5(C`cJT>d950}PSAC= zjKH4n6^I4CgkbbmP;x1p(j$G1D4m2!RmX!c@A0yqE7`Gnw~AHi6=%>fg{m}v*0G`t zhdkabWiREs)JI%XcrJ5)+de$_`Q3?WMsc}9SQ1}Q6y7*&OuqsU3{1X8F!}GJPj}$G z_cr@(VGi{h)ZwT3Zp7gz^?g={Ze-Z^6)7{Cr(IpvOuCJot*?bA!$gq{gz=q>tY3MV z4)7J?#deezmSED5QRrV*38qDIg(9BgSqc~LP6LJ_V!CO5NX2dX^}T=S?c%WS!% zUE(|q(2~_HYqMKk*$)VNd{sdo6oyK0pko(X6G-A;VkhNMvEhbYbxMp&{*UJm+2-|f zHM#wR^nZXDIHu}k3@#q6JWl&Lm!B=q>3amm@>VbhC@Ikig&qfExrX}1t=o?QcYU|o^* z+lH)NZkfGDhm0_0R-cBdNI%>8;x3URT>XMr$m1Ets?xF#WT)d%9*0XBZ!wu*)?QZB z?8cJK&*0PjD?Ru3DyARNK|}g2FRv(`%Q>70MbwO8>FcYpY0LgBwml=Y0JsQscq!iv zIo#!B0sjkts%%tZMnU$j>L{xoUeH!Lfs{p?jkRVg`m>g3Uaeo3_(L6S*m`g`OlqQ{ zxC{YnZA36Nb9+u;%d}tE3Eo~^(ysZKliBmuFng`7u#!+2Dhq0`uVWV|OmNn&!papa zT+XtUS+5}ce{RJpIR6(_7%agFea=F8xP}Xtx}1sqeAv^<&zf_3@tVr=*u&H@#8WD_ z7NrklmvS9S^%v`2dQ(>;9{u9)*wna=J0!Os|Khie7)ICVk%QhXE-5@Ip4_Utvnz^c zmwt?GJJTK$n{Dldfzxn<=Y^WI9OMMxZvg1$y(ni<6WIGjM`_jINNf3+z(7LDJJAL* zBpvHF8SmTrm3~1K&==wsl;wCSSSxyCBRr8~>L1x_`1&9Sw46CPdj4>WexyBh$ILl^`w z0)eJ+V~4K~heOA*6%YVz9o=|p$x7_q-)ml~uo(fIf}de^z8i9+$O*vL02q|b%BTtK zUDHui);HW*HZn9SSW1?6?ZL3*4cz;zU;CFRW|}x~r~%s!?ncZsQC?V*0I}L>s2=d- zXF!*gFSjmfMHxA>hGlJ6#3#;KI8cDTMT1e_xd+{5S1N@wblF69*n%%b04i*ju#>7I z{V}upRD_HIDID#Hkb~I%<3*m@4a81)Qd_=YEI$f0p3?*}AceA*deg4YMKLpqXOHlbGt7Znw*8#{bh#4wDZ z)}@Va9c*mDV=ums=9XTwp2h0`&OjXw%8X_d-uXtx{Qm-Xur7nLADEY~zsEBHsBmw{GL zNaNrVmt$+#>A2Y+IMR4{h$ldRgwVfuFb;J!q9fMk2wf|$9k`-YaJ8GlsR#fB zLyE^?V)=1E;`-Y$;sj!EY3=7umENs20P!JH zAMJY=&u&_Tmab+ff0!o%+#p^{(h$Ckc_wvLRJVaTSQLi}}t zy~Y$jlH>&73jj>aW#tF9bOZt+gH{fT)D{g5Z0p!VI}t^xoAsNB>N)Gztv?zBF>0cr zr3u^Wcf$llS%Kx6W=a>fRS*{9q@hz8gBa*rI0)^r z7PLkWxj@(ce3rphgsV7E%l@BWT-gkaD4lFOKJi@IkAshs!6HB7F|9-PTQNTT{0Bqc` z4^O`GK03R5&0Wqqv|5p+L|oO9@8yfh~!H_<&Tqq@D8FUDDRJ zJf%~db@KgK!`!FDqH}Xg+uK6Wx3Cu7W)}{1Hzu#J6uRDE%LA6rX#I~{;Q>spnvL4R z5sLP)=SVybNm}?%%Rk3+4`XgCEg-w4a0~ScQvW%U*D7X4@xk7IV)3RY(Aas4qTkTslEQ&Tq1i@1jkeNSC+jx}U=GI2gQ&->Uqw8HiN>~OY(2Oe%^inO z7%D(PD58Wg_euCTCqVHKX482eAVsXqigvlcvB#`o^?3jYY9jp+FoJ08+OLEzyCH?G z09g6x==i^&5y8~Txu}i|khV_>O!k58mKLhC4(W+1efltV%bVIF>6D>5UUj_RoL=f= z_ja^w#q*mU#kz*iVKQ&4^b6r+`T#LH#t$C-L1|I(9JZolx)0WD#*()`;a1MdqhcWV zSJdG*`EJP3ASVFN2XJCfHKb`@CpufB=r^n+T-Yzz*9efey6VlL>YG~tAq!xI#cIpT zrgi&5$>8eJbP8P#h^@ELLy*!uC%E=!ip{qBa@8ovqMpS;LZe z-yr7W%feMC3>KrlbC1;|g@v0cMhaRH&56*2RUHWwVp`Qal!dCK0C4KbcLuR6H*rWS zuZyoHT^RexE6MK)WObbVe7dJew}hlxyIb(a&ZStf^A)tm+HBwJ_%?F}JU}=c2-Z&; zI&Moi6q>=cBk||$RqOD|`>R~r)Qd?JAPJ=vJ1{at8l>_-1# zC8VGtI5bibT;9GXIt0mEIt5rBhS{@z1;D0h{i+6hbw#_dulXSMHtz!kL20BY@zMtw zG_8Y`0vh6j(2q;n`jnQh_;H|WjlA7%KOod?kby%iOI<%u94tq1unY&g_JD#%s0z4t z&_en@S^o5@`6vpMNRH2`jq+oal_1Y8|0$wQ&!lvKp=Woq5~SGyvU6E(ZBwUlD=B8i z@X7vnv1IF0*w?<>YKP>RVx3EO2p5G4woV#4t}{T4v0{@b1s1>aG5)#A_iNX4rA7ef zq7ELhWcP~)kz2$5nGE?ZFFiUS3@s=u~R;K4rL9H zOHxkOpzPF6d0La2Skv$cmTY|ro0`|9mN<3$4qFwdpC1*4rJs!(II4!g7$9Up%rx=j zig)qp#;qQYE9cq+;B?gC-F!FXXp@9rQ2N0cEL2@Ec&4S&(T zCmNzA3hl5{xR>32rP|^Z!1NUFJm5?9qrilTruJrRYut^d_GS>nKvB5J)_-Zi$jPEq z#1ZiU=EI7%8Z4wFk`P5X1g`bC#w(9OelC(J3Iau_j`T-E=U&8U6ed|DIse`3lK z2tiH3K#Z?A9>L^G!icK<@;1uaDNUOZh`rf58$LsKtSga3{GPf$7i7f4SAQVZAp3as_+S-AXm31Y(!8M z>5s;)1Bju^c`6bETQ(s9FtBhG#*|J6fnl%PGl*5^${}r5tzvntb{Na^y1A-lEr2wK z6FAd{viq?EJ6pHn)ossWRsDzPh_zeaRpv{Y4uq2d!z%_audS?|O$b6_+uJ+4@xW_u zV9UOJ{(d{;P9Go+-|hKs$k8e_fKNdT6juN!$XDaqTe`7#M+*jxC_^|Ds4A(AbaXYw zwnaP5KJHVC#4k>^tY0UK+ukO>)^W@<(cIpQolSA8*dPW9BZWu}AF_eSi%U9nAnG_F z#J@G{p&ZW;b%>W*Y|do_jWGHY)S{{T0J_aiHE@&R+<$`MC6h6vc$}mz)%lShr+AfA zG19a|Rjw*Dw=ni%9lPzhmE@@u4`8OC*nVgu-rThWAMbw`?XgxXhvWxzIuJHMq7(a# zUr||9F*li*ZPB5QcKrR-*RZRhp39d6JcU0fPwjJWLZT7 z^A-+AQE?amX=_~9wyI@c*Rj3^UlC^XYbMsO&w*Dq_^Rqv#Df5lKnVTH`eHzNe-wub zQ{id5meU-dCFb?+Ru;-8F7b}#TV=SlRSb>NDAqN9i01ACl9XIk0OIfQ9a(Y=Y9a%r z5K{uy5ya}Yx~CP-pX>;{^x^u1vF(s@3uLF#JeN%X(~M$6(;BR<{}2tG2LYGY1SVb* zn0l>X;x&OxnD81wP*4g45NMq?VDcBiKyW7e8bO-KvA?+q|5)}a8e3YeNwv(3qdd$$ zdJ@2us6$7O*Q~|K{VuP=FaS%D!(}PGsJJwYlNXLaX;}n>l32^G&bR6}x6hRWHaFI< zGw|Kw<#6>|R!O)BHKjG^U(y!^;Q}xvGh0s9Fl*uD-WpcMdmNK^(!mKQ=2654(*EnF;G!dhQ1|zP*YNkkdf?ilG(FrOEX*6uo&;nnw43@ zin?5^VQ*z5KPk4fevW+|TeByDbU`fUwVy3@xv~(Bh#A0Gmd`zJ zHi0ZJ!41ms&qLjfSljRk);E2gdP|nda&?6;3rYoqOM=DgC-<3DOhIc?;ASAaao=v- zzv4BtcX!+1%2~ZV17Ql_=cq$n&T7!|EpGq@fI5^Q?z-slsY$E~3WGT1+|j72E&>5T ztiya~$0v;(B(p%9*+igP^>i0{u$*pt`sk0V4n=6_^?T zZZF%`urutH@oBlWC2b}4`kX+#yL}V3x2@&QWl^96qf3uN#3&F3uDJkKnNA4t<(`(+ z;1|aJf$AT|LRwEicC%)^LD{4+>}cJL^^L2rw`~W^6wTb-$9^Epu2MxQP*YUBa&+0K zF(4@A?Op(cV%5&Ac<7yFh{j@Sz;cjRq{)tAAov&DfV;9@vQ|d&4qyPd1rgNaegK!` zv(e#j0H>TY8h!hgfPjETv1x5xbhKJ?Vf`xO)zEjZ*IsrY5JYuR6>5sB zQBhc#cr%k6fOdFgVhy{*J3!G6C->3K*#hzY&K=m=x*8M|rNJtUDV>1;3GsDh5yb4Z z^qkgqEMC%E=Ry^$DoGAMzm~0kAiE)%&3mY;0UMjYz?SAUXpgmn1#Ie%1B6q1X+U^z z$!_V+$Mx|)wO#T6! z)Qz|v6gTCw@d1Ni-sz(-bZ8X_B>*Ljd)75>YisVD;tsofSie3%?pm)pUJhu2;z%*7 z3ae06RD+^WVeYJ9wvoQ9Ss~sdh+QG;!y@(sSVs^$mFH#^`?YetSgOu2R_BwqK#k4} zfNXD4D&C|f_OyBp13&7}{R&~tELZe`|X!XWl zy#hSH>K!aw_o>3l70uh6yQFu+z}fg2K1nOLR*xus00Y2{_zoy;0rz^Xo|Rz`%s*u` zh7Yfff7L0v>USRcpka6GY|m4VGMM-4%ldVU_XB;aUMr19OF9uy6f8tVVHK(it56&+ znVWCc!K8T&#>6TW0+^UkimG31_>cqI@Q@0w9A?k8~`1G&? z9lNl*V=H#GZboOUg8`2SOD}*;q{3J})rrRb(n-2cHV_;lwc zZ_|ssxTID6!rmbKKEgN`|AqaYQfuW^nFAOAZp5jecnUyiK8_%H5XYY|9Fr#uj6)a% zoo(H3ZdH^((WoJ+w&{?+4Jf;{Xs2hEWnKivzi!3gJN5gEh<) zD7A)N;<@||peFVb4j&LZm6;8zSlu>7i4LK}mfguZmd7{)xhvLzeVse8r+pjtx9?0% z9RlnFqT+w#{j*lOEI^ovuMAeKno=@l041cF8|R#Wa9ejL?s{)AHXhi;w3|6tFA#P} zmqx$vt0=^UxE_a~byz4n00w}cV-`%j0H9A#ww_@Q0AS|yp_nm!Xwni!EJ{~yUcGCq zY0?rm06X^CX3P4OTBzQC5csjARqbNSv%{ZHLjV+oicuP=Kv|?5rQvcIM6w>TRXcZq z>>zfDXD_BxyaL2Biz{~^cK9J+gRyt_v@ErM7&}1KA%&_mzt*ulmZGVv9(y}>U|+{J z9O`O_52JGFi%rDH7s{{!)=L_92oH!1dS^_*=xHFdfL+xp`LDUF6}P|hEVeftUX|of@?ab{a|8&DTf(4N zx9Rg;rQO}J0qGCEVy7=t_8b!)wmn6d|KXTc zUal;?BxROhtj-HW&2BVD>v5>N9?j8%XzJQ$O%r0F7ykq659Pq5oSzE_>EsY*t><(h z93a8g6N--iJWL8^S)-hJ2ybcJg};38G+MhlgtmhzFikhIe+b7Y!ME`<+zqY6R=EK% z0Q?TcXvJdy&dyd#{lGW5F?v{koHl1-3c{f1-oLxyy#ogtPqYD8fSET-w1=!;x4Fn{ zxjx;>egLgL7U6i950c0q2^6MaTo^1uVXzcI5@OP;;V6DOf||%n$q$I-$HJaRby``8 z-qLehp4`;x)&oF{#?TsVL`$>*hobdp>25$vteJNY0}>0@ilqXC`TkxmMhew=(`=giDR`4YLZ4Eg~SbDf9{ues|Am-23Sg#Hi^2PUeJW=#qBn7j7^q z7UE}k3tET0atmMppdh#rzXkAM1ifBCRPxD$Mn;e+~B;oN!C5DA7r5bvSv?C4st ze$%$&K;vduR;C^?>2hQJ`iHAnulmP@1gy65?0LMwSFFd{;jQ)fM$iZ)U|fJODN1dJ zNTD@v+X0^3Cvi*TT$T-l3J|Nyv!_+URbmyp!`O?3%jYo>LnrM(d$buHW(!)QP3SON z&>lMklbSXw(b}Ngz6DR}2;syoq`-FR7tRfYDf$`%KAaMnHVU9+LT|6NwB)uAuxRaT zFij7Gr2v_=Dx8!IAWX2!1kT3)!>7TO;a*ITDxJ($QX^45hlNr^_#5DyY(x^yIa3r2VRLk2vVoQ16TZ5a_5 zwPIv&%yASn1O~V)h+o|LHlAF!Omdu(bLAVbUeZ`QgyM^65NF}1dUdNKNj(Q(0Jss? zfZ}cdLC17bunMhpgRdfA->NcPFz;9tMA19BtzRVo zv+sHU3PJV0X3vj*KxZGmg5$y!)b>0C1_>f$gb_3%2qJ_a2_ayF5F}v)5R7jdAp{Xp zz*^kO28hMHKCE2kBAGOXZrX_`?Lw4xB1${aZFZrXb|6N(&~3)UyJ#mUKj+FixjL*Jv8`-6 zwmsY>bhDDhdxlA9!yR+n0TMxg1Q8$s5Ew8>00s%dfB}O95kLTh7%&h_^-TkSL4qLE zT9hPNZafWZiN=!nM2yA~2SQ=e`0MH@07|2Xq8pS(5u-805Q9mhh|wra8bb`7iM$ek z3OmBEDCrW0Gz}1^YYlsKN#`2E1_^Y|4$S?am=vFAe~n-~UzA31*Xn2R{=P5l=ObHI zt}30poadum^fJ_;4O&N>dLF<4@N>+AiDv+mi>+~luM(`@;hPLEFD}Bx^NvSFNr|;! z2O+K7cJKPUp{a3}9a8BJzUooyR~qlZvh@X4hcwJSd)_mJFIOLTZAB}dz0PXza(Tsj z1)_+&d??D2<+q6{Q&Yz{NT1>|7*k0Am6j(UJ1r1<>>Ey_UpNy8C)*uDsBw;Q^472s zo|?=rLbx;5jX$qigjMyMWLBu{M5jCO%4-@z$^G5c=GXP=R!6S#17HBC!z9F4&8khd zBp2`%%V5Kb3kq=Y+~d)wtUP526G~!x8|vTMd0@|6wKY}Cym$ZrQk6+WK~$RV)T3-! zzkd3go#SnFvF%c{n=4ORzHlCx2(R$`Cz}W6$hC7JG{$YouBKbOmzSu;hGhn@>@dn{STDpB+V1741MzE_|r7%n=TDsft z$Il+d#-<&T_S@@}pMUrQtaBQ2OLwQKSGPLCl|KLjz%MWyF)RhaXxjr(uvqO6OyTLs zz$z6a#Hao+;l%|JTs&ts`c_mV0Sp3y*7mmLYj@H$(&YUo;HuKAmj$V-5|1g{d28{cE0#fI1c4cn7l zZ5jImu_{mc{k`ZB2v?!c>SK))`T?Ydv3ofP*LOAJ51&4OZLNES1ChAzJzB%*_6t)A zN|8g^G--jG^~<(P4rlLHrk|16{svw-Tee>Mbj3keUI5LWcCYSf?zqKkFJ4oj?fmtZ zmBFR7m&M#%wjUXMtAzA$40Dp)?abMe_H7%GWiWQLiv5CE;g)tv%l5^J^-BQDmYoTN z2ayr)P9jsM0JP95gNN|0wte{RXZPb^XOkM7!oF{pwD&YoO6Yan|ABj;byO(-00w|M zln?_?0XWSSzG?LLdPx%w265r>Ct!G=)H{ViKoB#{RiABLQyZnxDjD$78GPkxwdULU z^=KVC0osw2m6}4gdqdEr^gNJV1bplP${{d>!Ibe+UpT z44gmfc#Ih^C$OW_ol3)nPb$N(@K*)nG(han8urrPn>z>-N@B;7d2dyc zs<~EvYCA8VH*LlrKffRCu}-FZ{t~!CSUe93;JTGXDC&tx7q>*#-MeW=b9?h-t1KRPeg_jlytX>&-lYRM&TXRQl@!2*|s0A*p5bhT1zJ5_2nKx z0m3T}tj3?$J%TQiU)R|YoUZB8?ibz)lb+dmJ=Q|&s8b;GBC@E*KwjUMAvcGI=H#pA7pGB9X^B*Zhx(_&Kt2rtUB1 zhll;#k<@kNzFJ~8gm8Vi>nVKCY+e=FeZvHJ_WA&bkivZ@8)xr{pkNx9Yt5zufH(K8 z#BJ*rA)1<-ZQX=~Yn#;uPwDKx_`Gz5eQucal#c7M8CplBdY1*v$oOA;j{yHi2r*KD zg!$qpgWPX&SGTk*p8=qo~kCOw63}%EW-@z5lK5TiUiMO3?&s}o6H@+ooySkyR zG^|x@^@R#!sTCHnA8S~a*0En$GB`^dNX52IWeJzk%8e%)rxbvaf!vwk2B}dzyJHz1 z-uhw&R<7+bNvvGYmhd~FPP*XGf8n5?J4EZqQtz^W8PV79o^d)h5|D)e0_nh)`=!eK zx);l^=Zgn!+P?<`1jDNPC*cbMLQ2BL!zv=>%lCC091NPUEePAD>Tm85L?~0G!)Nu7<6IRf1nv! zN40vb1)Nmy*EkIzPZFTi7kq{I)E|d3;(zR4o)bn+z-eP_gbHZ0#1Wtnb%44jyT0 zYnZ>Oc&v#M(`HK*^hP1q*vC>v`vQv`XTB)mwUvl>TYs|Z}QKSfg^Ciq&e}$`I&!|lI@@D|G2v~ z+BQOEaXQ19hn*km*UDorCw=QTyRK)kZl^TdrBXrKc8z#Dm4_^2`w||-B6y|nb+m?s zZNaUZ-q%Y6o_hSV&HhzczKm7OL0AFecoots_{64S)fl@Fon28DuGd zajC|;!Pg-^{)c!-V{K3BKMY@*JP$z<;4EPfG=5RPcI&~8`l(*s&yJRUs_SvD}sg05&GJ6gk(Z=urFtVrh@!jvLN!cFtc1)GB;GL8Sy z!Tcbh6ph`@xao^Ku%%@eR~LIKvpew0F-;c%xu)d@u}6H|2wF#p4l4iy0RD)oaFjex zfD?KezR5JBYX;%+DW@VF2=NPcP;_l>-ul6g_8qe`bw6h^_^PL^Usaowb#dp~;{Y7- znuy0Pfv?;WPPSPDvK0g2edO zIE?B3_WjF0Z(chu1;j)noPZ|>lpJ8>0!qBmn;4OPDliz!w0TI$E%?VHYO$86LNUnMZ#~sAO18sAk2U&OHMF1RUMZ z4uh|FID4~xQ{@ZC>)ZO30@7Q5w5?4{z5dd8hi~#nP<-l;k=jdz3P3hM64Qg&DM`uc zMMi3I4MQ?Hi9nc|M7UD9(j+!{DiqRK@#jI(T~7GvNg&0FrXq^Gmo5 z>!wehWBvl!?+>dU;YXv#`$W9YYcb-38D#!&gBVrJ9l@6cV14UW{O=dHp{e_j6)${; z+4_{{e}-tY1HHb%?jh5aBCY zI^y||fL8#m=vr2VS=JqIbz1G@XV17U#BDRl1g0T?om?XTt`91nT(z`OYCh6fO(G42%F zzzG##v(qn30l*}01jDiO8?HkWw6r|vhyXAE6#M~SC4}4sAm|sqqSY&duUndmNGZNK z?R?Y}RB!+$Ab^RzE1N!SY%&|ivT))-mA?Dg_tYaMUG}YCMV-tCf1F;@_=T_GXbE$u z75a{03r~dz$0u6D;vQ!Y^EZ=JRJp}}ia@qo#VH)ytXw&WRbe)ZSOhZ{4`siw9|#i| z9kc0q9~INm6Tlpg48kw&c^&`Q`dGXjD(jU$p=m={mX}XMpK0!-SK!BJhnAK{9Wej~ zfTEjm0SI{*6a}vE^$1p38kO~25-GwrC!dc2MK#tVou(f8t)I87{$h96o|&1tpE)?W zxSxC6`px>lEEo6+{jcd;!gla-7O@1nDpxeyc2PW_g^|LXtP#L+1PgmqfGi7S1&G=C zz9LjDx3rTbY-Sb0Aw=runiuX2ATk-L_5mVl_qj|6SO})C6mR}uF00w}Pn=#)c z&2Mk$*l>~vJzwr;2Uo8j>o*yn$x9&E<9Du89j|Ja4Za|W0ao7O>uw2KVb;D?qjg?c z=rX_+U@N+x?e1uIQGoMKBLos#j_f_=;+n_6kF^~oXm$XL+7o&XZi8znK zG=_;k9>5%(X_~le%Y%4j@0(VBZo^|=t}>m^eqoB=H2tgjQ{NX^OAALJfB~TBPnbcd zu^0q>lSi4BRhyPunxHTc!Ph39hvB8QB7i|aP#`F4nKtsZj8gRua#(+XH-UR<7aG66P&le!!I+%1o=dEg6QndqxmdY>4);=xmm| zq3xEh6Npt|JY*%%m0HJUS`eP;fIw7y)A`0Y-U-Zw78@_Mr>{gpClsI&LAxRt!zS zm+iG|jkdh?&(^nRQJ7)g{Va#4-NJ^}N|D%Bgt|8wS`+sFX z_GJmPRxe@NBX>b_5EgC}-sS8?3j0?8Ex%`t2)4PO6(Dx&_l0NZQkY!7us;Y7#rU_! z#*RORfJV5Z5+K|W>%i~U-G)z^Rx@P-%<1r9<-#|F1%P)^kgqg-JNBr@i>jq1)e#F| z04V+o`V-T55fsy;;Pebu=QM<)R5A<*7y*1`^tqT^HJW!vC$_uI?vLJVdt*eDM$40V zRM5+o``HFY5A%@4bnXMQoPh7o^=xpKEDKi!d?i+{2yfmJhAoV9I&p&K4*>XRpGx#c})~~DUnXQ+9Pp{4O z>MHEMQanGWT=xFO@@>GEhse-`9jYh(${|0b&OT z14i^X^PGQ{qu*RASi0iUnFl%!;^%AsfL-monR6qYue1T{B@JcM@1@i{r|CL;=<||l zX-Rc>u7u@79ZS*CbvAt{LNFeLOaR~yzJy8R0$(CY15m7P+=z;BDFzkyw++lPXrO9D zXjsQVvwm9#ZSUjceonR_E%&nocIjBZc57SRmQ;-%T+i0^U{FYe6{?i|zB16N;hQRf zsKVr{VAm= zd5G+H+E$h{4N10fvuT>AG=Cebp{1229q|AL0KAA;*R^;e(n@MUaEv2-#V;Y`V3onw z_JvPuQUa`Q+=#+J7{f~j${xVQLxO{gJ7~v8&9r%-Ri0pxvULj9Vi*hL#IlyDR zf!~~&jzFiM1p?+N4d236XlZ3pM+blb;4#py z7wGc^?-Kx+uY@naM5w?jz*q7s+GZ>eU`_KDbel1ZD;pkvBy-lV5gHH}&_76mEB2fF zhjJFG2uv9~B|yye;H$K)UkCWcw|Jlt5pIOXBnJ%ff!7fXc~gQc}1GZ_SsgjZX*H0{V{6g zG4$-Agc>#M&jj%cMnLdh<4XK?!=KP)c1f&PdwV@u!_x1vr!-HO1!5QO`372{rIiC6 zT>ws~b1{84a;~w75G(``aD^{nzWgrkEU^q(noTV`a46b}NoAvjhjsj4u~9s9NMOjj zTVq?QDWM_4Jg{T{mRqW` zoz*hPI`<6|?!m+Zk+pE;aq%K7E7`a8%bpj+?kx^LP>K%1%fcpT_N zbMErKboe}RWHTtU4S-ULr*=P!`*%E&*teYw#q=V|rAhs9871vFRfz%w<%1fP~!y(RaCG!Nk4WAH*|zUf_Yq zp9XIbc1-6fO$?ylJ#ejgJG8WVKu0}*0if!3OfZSDln@L`1$uz5m;NU&X(pA9!ga$g zN0@|D)-U@|rxcCvM&H`DpYEBW>i?CwrmebI7qe5Gv-{b}4bC2yUrQWd7u*nmYY1Rw zfoa&M`VbjxGhZAB2(Pv_{L}qw{5utukC+>H(I?cqG3zN(>sj?IXXdc_5N#Pk3mbThok|V zP{rLCN@B)R5R8?=Hx01*aZ8Ub9*XY_y$VG}fnbTHGIf1!e)_?N*!tNl_?+Cj?k;AD z>o`sKv#WdA)%xW}6Lb3~?qc1~Cs|Te4%&6>cR0U|@1p*uoz%zW)aZAh63@aLl9}c+& z#ld3XA)m6s=x%f8^7o_voafa4>ool+TkdB+)^9RCUF+Ad0hiymxu_lI39H~MA1%$< zy-c4l#838maA1aQ+p7fp3SmiTCPSGm*=q(<@N;rOJFk3YQWGi&m(zZ$CdN)3KtZd) zSmb~m!mZI3{Bpxh_~OtSXIHZj=gp1m8^U|2X`H?P+U}2iUmz{545a}qsNa1k?(Pgc z0fIAu%&gi}uqW#|zEd0NiysZU78Ri~27IjBlc3RTc=OHZ%O_AE=(Yb>X4%?Y%zoX^ z3JW?T>sQea%#V8ZF<6VUV*M=IAzHmE@bY%B%@r-VL45ZEQwe;TeG$0H6yExMeJnSb zNN);x`l6@f=x)G`>wbaF?OSuUt}_LdL)~7^CQ4#w?!Ouvprw@u zX#mT#2;r*cz_{Ot>@y!ZrBOuxn8jssv;GrT|Pp&_O#^zS{l5*cgeH zB;#ZNR=b#U?0y!kUlp7U4zhkNVVR3MQ%l&s4Xdr#+H)UB(-?v6cjxC;A9 z2zyQE+%LQmG`#=Ig5j@Y;I+V zCCjbDoU()!kmjsu(Yp1sVirG7*bu_lfnUB>$4ch1t&l~ydqKoK@Af8=xxN8;Y-MF4ma+4ISKn8AU;+m#BREi%D z{W=Cl`ZECLtt?RNcq6*Bs|gJwT*1f1@h)Mh^(t7&*>^t+YbY~IMjA?Yv)f=TNgffn z+)Ezf`y%$dTf)3knze}e>&zjMzwjwh$sTX@^6qE*K&xa5WnZx85zp4X$;Fu<2((U$ zo$+~?7R|EUz5HM>))HQQXcd0B;a6yjwR(3oi>D)_=|x<@PZo5?uH14hI-sSMXK4%A zMeWbfw+b&H`w7U|kaX#}S;nb9F2BrWMn%|4|tLSL)q})D5D9D zYg%Y?f2ToKvN%uEk1}*WE3MxYK;(9{VJp=QLHPD@mNDy10du{H0C~}*WPde**l%Fwx`6;;ld>{Y2=~w75JFM@A(+^nRR<1pb!}smhJsV1;c&3lFJ~1~bbn!f{N8%=^AoMMu#lBorM~)q zxj41^*>R*bGx$nv@p`a+ZI-ZXbhMXw!mP{MN()<<$`VeVBhd=x|FY-Zn~ZvH+V9k^l1>3`Gzm!vQ@#?$$AcxFupVR8cZr4 z%ebP!0Re>2UFMeM??+e6bDH+!9H(+IGjV_&<{sV8{NO8D|F6vA5?8d?Co0*NNjU_I8x1WuoP~i|-l1zBU}X)&vck(~{||@9W{skh zlyM7zC?Ndo{%7&G?RUYX77ZyxA9HpGUMbSVV3L2`eP#EZ(9-H<(g60Un)^aC4Qeh1 zL7!xp(k-2eckl1@;<^qR0bDomDjZWfg|~hI4hBuMamDiJ3&&B=kO*0+RjQ0*`+x23 zXL+1Q_p__J*$!f<^~_7w{o2Q#7!gdNg0@f)_ zC!zGJoma#jhn7|^lm>7b>iZ9jgb`Q@V5DF8I`(6Ea7!D8fouC;hS}w_MC+HcygF&e zhp$AR9Ti1q8Snaq4YFzX|4QT7dQ@>T_cLqF$}C{Fb|^jErD>1 z#_-qef5DOiFM60$)j( zmprOiOE9>&^Q0 zGFZ#*t`_4Mu)6dK^Dby``|O@KSx#Fw%a;YQ6LeLho=pM5prmtTY|aN^T5@8leg%Xn zD55lqKWzRDRy4fH|A0_guaH~AS%UCxP;&Op%ez1Eak90vdR%%Gbed{=3N6(a(??Be zoCty;p5RNYG{ggZRcR=p__XzNM2v#?z%0S~O#;CnM%9SGg!cV(&-Ma5E@@negzxKlm{V%;A$gd0c4=5Gw4XckvLo0hr8on||Jx#>o{ z*Yr-R4dCie{s6OoM+lpMO=oYSW0#GUhHf-y@RS{wcYWdZ9oEvyw={q=P}7s>C_9Tj zim)*a1Y?rnvc)x=9v-PbKGS^Owgyoe#f0LqjD^NHK;sZ79%_s(Y$q+BG|~EjR=fjb zZGF7(*f-1roQq@H#?So~-M_2_%tF&gU$Bs#w}d5-7GP|*lEsNc5=%H)2Kz$*LfuI) z6A}J)t2)lvBy5?k2KFyQH6FwaaAibP(2IZ|jFRo6qVrk<2#tq$O(hU+F%RKq8~z_w zwS4OQ!$UZAZ?c{u#gAAn4e)*pu~T+k7Tb}=*I7%e$E5+Bp$pM1~n|5JB@mLtJT+#8mQV-|w0ApDHpb=QH-`q7+4n}x{ ztc3vB;)wNpR7^i&LFnv$w!_qYs*-GB4+)?h=Lrk0XvvCMGE3NCfXuDlm7EuBTOCXI z0l@u3^15-?NVI%YSCG3wm>*({HEdbe*7XqSRYdtRANUDm4|k?1-5E$}}6>x1iZ}?Q0BNzTMm~IQdL>0`EV5qc&lW_t%S*x0DkHQ6QS;Opq zHjIU(v*pWKy@~VAy8L--n7s)JcP#;+JT~av0p`?k1Sq#%U-sTegl+HKhX1$W->|!D zkL`YyRViA-eq7RS_rF2NgMAN1FWGn{+SC6MYiaeoNajUou^RA5=m((mX4bO?2v#lZ z50>=Z($*8{__CS!=76ujK)`W?bSn{($)!-~jam$WX(I24> zCbYB;Gid~_ zzuoe4beUa9rsg-2?d1-{`lEudLpteHC5jlK>>b@IVT8FVTfODvUkA#i~q0fV$ z8t57LCjX2r8jT;+{woRtMcl(*gfT!H-i|KWu@5^Y6RutAzTspVIb_B37Ifs$6(Q<0 zKUe`=<+LTM-&Sq?+DAl-E^4<$I@rEgRaolUK?JYtD=1lpQZf(N8+7eUP!cn^Z$R|e zg9eQ8yj7j7+YaFu4nBpyZvQ{TsA+4aul1X~rc*<>4JN&G>qW5_prv(~O9ME^8uEB} zV$3v`5?~iadybU zJ~)fnwgK2-02T*cTVJq)H7w~j_OzIXEw2K)9tLa4En)kSDd zLDm<{LgN74z5K1{vvUAyAQJ#9M?gCaz;cLp>Nj>8*yV3w4`B|kbP$#>bxB;1gD?ZL z1n`Phup5NsL$H$2O@=s)dbUP97n_4tltc#}2SP%S^(hNsF*An$+kO*XZg_zKqT`^b zR9w~}418gb;8~j%wr}(CmDAGd_0jdN za6cXp%)HPfBwFdAcV9CfogAaxMQX?jF!lgo^{8hNq;7+??C~;JwA2FjwXla|KUEj& zqL#zhZV3zUwf%Bp#k!&?MC7ugoSml{QCb!qwY<=*o=ZW=|8MWS@4s2uUD>U_uc{0#Xtn1O=`IELcz!Q9%Jg@m>Wl3gY#OSB0Nkr70lFm0m;%Nhk>< zKteF2CxrBJ&dF)J&HDYZ%dDAMGkeZSPR;Y>6ZXuSch;V=&VJ^7*Sppf>IfELg;u*2 z|GDvo+|-huLo$i5bDXY2j}(#)73KCfdbry z>}a1ri8p*}`NYi;O0P(I#LqPr*eix%{l>b82T$zbwJ+8jbUcM)@(6PAd&G0D@a*dn z@ccE@Co(DAV9)GV?nWelNNQku@}e^In~|$Z>ys|-BE>x*f~M>~{9ygnc&l+qabgc> z)fT^BZ+r0DIdyv4sNsP!unWe*->X{Eb5>r6x=#56C8U#~0CzGwA3?U^BK!aP#bhWT z$CVUc{YR@re{U(9l%2%lro}k2Y9eamwZ5b*U5sOh4H;)m*}YAz-*7nxrxp@EG0c>52 z3pcs&UCzUqb6kKRRzD~`WpxY{Clnu(v|AZN zl)$>$yxYbC?jLYS`jc;;h1QPvJ0zq#KmqOw9)YTVSUuVAVyjhvGXVsPFP!DVM=9|Q zvq>Y3*Bjr!gsSlv6dwr3`*rsP0|HB8{l;38r5-!pYgBc^_D6tSLMU2**X8vZrla(U zu1C0yqG%cGGKafONnT;zvM#t@!7k+qd&1x1e475{9=_c7rg+``-fr=BTPWW)Abrdp z3yDdt?gH(8xEc(A?WwJ}ZtYj`eriMD!<<<-+vp8Puu%$ktXq=)+SW^u-Tyx}Lb@*$ z;4Y;8A^YY2pN#E-g|h*ONNMqfNmxU|(k7b>(pcQI2xH2}VrXKhF)2&(Kk6bE;UZr zG-H;2Tpq#KL)sp%*Y!Z8-xrtYx>YS-n1zFOEZ>_;yw{FhZ(EN)(m5oIGVqHKiE`_=o1MI<&fHhN@Vsh$6US~Dhm5{@VW z95Ah;gp~P2HE6rH-&hkj&%1zq8P~?iJWSqi(6A-HH(vbbdY`cO{{}DExoXa*xZ6V^ z(owJ}vuod|$&MQvm!7*xlAM zO7N9+=Vtz=6aMT7=@wXBeEUH?b;Ui_XT`PiFIA{-RGg7SD39^{JcjdMl1K* zo?Jm_gD33t30tBIyt~iX6{gnul$|6lCuyuQd&q+7?3iN#snH*xTt_PIb9imve0+cX zm1wdXU2VkImJCr8Q+q02DQ|l%5s`tQ39!#!cW(OkZEIJA^lT`=-Gq(jXZ~pk&JbWH z0Jr!SXiI;uCoJv%5zHCduyOa!-{FOZ7kpkyQFOE~=qE#F%uZakEROPh<}(olAz>C$ zVlN3Zmf-#1oQEU2?sfmehI^YMVBTeSxY)Grp0vX=>`E6^&BpRX3sn}^yc!oUl4PvNFb-$6q=xM1e<_p;tSu8A3}flav$RPaaDL=_kDP_?imCtq4PstfvRceCcd(@O8Rb% za$df$V`=LMWnPmg`|cqa||6+S!>` zqP7k~dJ`1jZpMbWsg)T!agtbYrre7dmM$f}VLyrr3J>o6BOc!KAPnJWpSKuCeEh8V zm!wt>d9VFv8(EbNdzy|fB&;n#`vr@%zfPlH>=Wd0PuNo?ZjaX+iq^x;mKK7JA-<<7 zHDR@dij&;J?=%Rn2rB>&Z2v8Ov-MUevHc!ySl5N=LC<98DGwB3!Mjaz8iQZ*HpE2N6zvKDqN8)=OnVj=$WPPK8g{(T2hfGx51WB(`DKTjrv9R8{JH5&Qv&Ccf~N8N}Cb1E0;j z#usqc&R@Y+S^ekTZRil67&~#s$?=O`0>n3d(>Et@m*78ccLsFOr})@`fXXq>CGU?MdD7-kIsIZWs%@)Bbn}>E_S_?gT^=pLaFN^ z`B&PM>hINUj3Gg|eo%vK-fCHb+jrc8R=X9Ruk}=rqaTJ$KPU0^6$w<<2c1s1GpyRN z&w;<-rOU)qB%URg9D3x`>u~jkORzb)UcWt#l}U)T z<@S5Ij!phBQvg1_@{Hu|2mI0#(hHyf_b^t?PT#A>WALsP%>fH)jJ(>uwYFUn})?bpF*V*LZdWBfq7B%t87?SoxQvfu@L_WIm zjMRe%^uiO;i=Y7aK-SDkKCVQa10WaXjUc|h{@#F)vu}K{R?mj?THL(-`>4-QZ(3m+YoAw=nY2*No%6KM_Kk+D?XBZwgWCCA-x6)a1Uk8 ztjtR>CDS45gDB$b>+jXJ7e7k;5DS2<+0FRT_8YJxv)xmvtGeQvK&p<5&7FEo?2P$E zkqr=2f2j)CT3W;-)vr`&ZDDn^Meu_!kh_;yAV9WeiAs+cCL+V#UT-0Ztzcc~1I{fk zXm}pq+w>(gtHxr@(Z~2k^M*^dk=(}y+m@48o|bvFZ5M`+gAWRD59VL9Q}2i!p8>(@ zLRp~rYTNg>Pk3i$J8s$eeQeKcDH@pqvCf_n8)uy`b4L8r^95o9y60*Tuz+z(DtHe- znFUg{DXgvBd#GUB@Y}Z4>JWzmpIPcAFU7tW=h5&B{W;z#&OZE2} z!qUb4JYmb-nO(SP`we(My}`eO`zugLLK-ZiXPz0qd~po%7UadQfLkzCfc%<7Rt3nQ zr+yWsegxESLb-PF3VvYyzI{}#rp&OHY}NA+&MqZ?5K13c4k5%deVW2-cQ z4z~9SzVeit(yqON@2W#70I{TG$Gj@4&#CSVWzQ5J9uZao+`0Y7_}z|Meb+fS@yhft zWxDU?khHHp$KKwUz}KS3VI#2s_KmxqsAhA{!Ze1}w^^Fbpa&{|1+5-i+xA6$n&OcRl=WY1Z9mTsw~Z_oH7~%(vQZe37!BQ14E6x6$`RJ20coTb*Qu?e zOv2{%GTkEQ@oY_Avu+!~v(+CM+UMEAQPTLwR;Ovc>9%>c(2mb9*7|a}41KK<{!3dQ3Bwxl=W>Wvp+ zV`{ZqSW5|U!K{=wtlNd$UjU63e9EHzu&ni0?GEbrY@|o2F`@@vR`O5758<7J;(agN?f(^LTt}`;JPoN zLR?%4zRxaixWv8AFK>s~XDvH9wXkDbEFlLE6ySq^U4O`|8*-`jf>_oC0IDL1FCu$I z#<_w4V0mgO(kg|cE2bI**e!eo;Yy%l)gNS6AS>x=_kKW0;SA`94Gm|9dbaNU zoa+=M+;A;hl4u%iowTe>s!!G)12i3WNw9W31#dUMf^Wb73DjrzxT6xqo747Cv&kDa z*?DZ%TY}TyJ}I^0K(|do4rVC82MIgxv9}EQeC$bBI3GYi*N?22#WzaGxs*V^ms){F zRgWnZCj_i2bnb?b8kRti8eww{6}gW>s!KBtBz% z3}sUssnq`!9zF`+?_9W78lS`WKDZPuc9Z-1nuJ)tU+wUQLx-U$yaQ#O@%Blr8#=6U z5^|720X~S>aZh&FfG?Im9EUv%f}sF3F+u4c=#Wrlm_V;hzlVBz500%k5t4sFeL=8- zJWUH$ztOQN(x7&(Y*ux{qGT8cC3@wK*ASWx6=uI@>-}DnZDF}g`mQ-7Ha#wgk99m= z?O$OZ==mdtB)_Lf6KhXdumG%O757wgiVtx!D7F5JHD+puAW3v2AXRdggh%qSRUW||}&W@cvQ2{SV@GczX>W}Glhn3G8| znJ_amGvA)?zkAN^+1w8A>2!`c+NLpJcKr!Jak#1-5-IbOYIpIMYQz%ty!H@=m6!_9mJt&Fu>?IR>a_ zcvjUsR=rF#D&}YTXmvv-y~CfA_aeck!>q5-M@F`GUyu9P@sb%_Zs{-2ncC=M&1*|C z5a8r{773wsTz4=;+6+vrH`ds$x7+mxU!nL7<_6Qj1`g#|`haMlrKPPvq$+mDBm@MUWI1D_ z<(mCXkx~Spj3KXQDqn<0HUPR7GhmNl+5~bWuKmq8mkH>0Gheys*o=;&PsZNw?s@SH+0%qH^tk|p=$z_z>e9GF#P%A9OpF6> zm%hc!3R8nEOYOI7bX6Tc-zcraYo|+Aa(Y>8imPuKX{uX~-mPI55?3o^9fU^ijPS-( zvhngcFB0twPZ&ph^3r;nHg$O=oA5N`zxrQpj#LzyMSg(IU>)L!*^b7ek(uBRy z=Wn$`*&!60fS^MIAy9F3X+d?=Jl09X~Y?UB5ro$7J4rxq@ zE!sf{<*tU5R%$rYi_<~F*es3kaqw4g=cQCTR57SvtYUM zyqvtJqUb8YOBxD{sxF;m*E`Y0etx^m0{N0j9*NB<1|y4Yr~6~txOL`n!(wSKZr)dp zUJ#O9eM<@~N2k?VLNkRX#nRI!f0doYSFT>42y9?*^8;>zD!Qx*VP11k9T@C!!N4$% zi71~kyW`mru$;aU>R>MbeU^O1lOZ7kQ|;d!a&ClWbaif?HOV1+&bpbI?p=DPgAW)w zJq0J;h-r&gPzX6SPy{Hqqh%rEo9nUg@xLxA)rM3qQygP_wy zlOBFN8;$?&d;d+;9HgGgR`FJo7uQg z+v~hGsYRZO{|QNwrcEZcEgh@pP`jDVQ+87XrTG*QK{gZmOD}$tBTWWc)%#ZlM{i_x z>mT9n?lrf|;aVd_EvFXMigq!U901FWVs*=dYcwN351HQ(ZTu#tI$}lr5Lc6{Rnrnd zR#N7f+6o*bO`W`F?nzyaL6ESY(9vG<%Exbxru{wb-j9@pMhl;OVnxf{XP~2;pbbqv zWr9&xIb47;vs=%>Ib#j}Q*zJ1aUy;qN!e=2izc9J^`iZ7NiQa;OZV&ZW%{jn!7n90 zj}xor+lo01V5R^hC7Ixj;&oK@We>z$40Y=fNo{swq7+Qy=?ylXo_8!$3%E;pgiwK@ zgKnxn%H(6-47o)E9NM-oPN%N5JHhuyhfWjqm844}iSQx%gliFq1orhfgUb#M&KBTq z6S}ycfA^RG49qEM4tk)0?^C;D^jlySZ6qaYLZB2$IBj?be%a$+mejfs1%A8uyAN4i zd!b~GX8A-rg9jGRU7Jjxf3q(%li$xSp=|kCY)_@WLh)6aPfQTCd|Y27Y3YU}QXkzv zL~{tMzQ{kfHi-`6%c)X78`^6Zm;gv4A_t6(f;NIEsfX(!<%KcZx$L)k zmrzRsid9hTQ`dACXn|>-^U31zqgWKpklZU8g6u6)#&mF{qU*J8&fU+BHN7LCG2tO` z+g~Z@NO;IqPxij_YzZ&;CrnT4^YLQ7hqDVHR4fooj^yr=R7vOZj{vu?4w&(n)i5IH znELDEZUkrlZ^L3_7ZoMVEd4<1lMqrgNm4FeJO<&(H8QACB%<`h#<0$dxMDvrgb%;~ zEF}?Me(QDp(0wIXrL)MmV@$38W)_TvDxToR2Rq+}XRp9jIKF&jj7hvKnf{O3v=bg| z^)zDYL|H6(>+as~_^<#n76joGcc=HYgDr@CY!uDX<_y`X4phk^X4(zr2>P8-6_y zwTEzYYxb*NA}U^4?53$yDG2{H;Hz{KhUNqp`Ry-+oY@>h?_rJ|_w4PP3*rJ$;AM%f zyWGJQ`Kw>orj)>W|El24JS%1FygSqhpM!Aiq(wD4h zt-YHP^ExW|mx^olbBN}7>27Pua%pcw4|}g>UnJo7GKTr1K;SQtZAbo8F?@a1^{xf= zN3ECy1^UZV4iOmG2tuY6Mg>iMe?nqp@CrDLEfHn>Zv8e#ZhUh!Ujl=Q9xN=nOh}xb z+W}{+O3b>}O-{DBbm6c<3A2g{!NT3y2Q&4928BrO3WjHq8K3iSznq?iH8cE|{G8;_ z?L6Uv(d$-s5NUs={ml9p-``(F>b(g~{0Ik=d(1|ztKd_ne!vI}0$HW+F~`4YQvo$k z&yAU={sMQ3@_7vkVJT?|rCq*al;KacQui5Am)^3YOb=)UFqrKPvgYp0moBuicfxXB zeqywma_+}ZvbAy=Y*GN!4`WYIQ2qG{W2Uqm#rFQj_iTkGf`db55}+vPD!XH(J`g~V zl0Lw;&73`~fO3`ka@1CI;4(*rnMw>&{g#=}lV2&N9T|$xCngb%eH{77ePI7#_ME_< zFP_^y;lVHW(fm3hW#SvtO0%x8LlnFSub&s`_suUK766R|$HZ-z^KL(U{ByvCBvXmX zCgC|9=#XlrZOl_!)sASU5@cy)ImlGRRJag+u0rR_tmS7=*x|ptj}(vZ{oF z3<1#-lDj^ElMDk9q^?}Q&kj+8xbl{j2kPO$8}7+tgf<_B_8}%?l(H8b7Qq)?q=Om5 z(7BKM&`wn&L+u^2&lY56nA6f2d1K_eVxgn1FIsKgC%bh?{*=qZRF2tgFg!FSVYGk4 zL)|ZvEw|q!=)RzA>ymFozNEJ_ET`ko2OoitI)OS8PRpGJSQgqO#Kqf=|Pe~ZJ^X0pN06C z1~$QrugB;Hzlf9t@Ui(VA~>hH@%_knY$2@ZG19@Zx4~j9a#_>2_f=tjTqz&h7J*+9 zMx2&veajdBv+kjGzzZ^mA-L`8NGJZ5W0K@H3NnIIaG~%i4rP`asG>x;+>Vc5iOeek zcZmIrLw8?<))~C{sOn^5zNFX>&yxW?4=|^5|qZQ$7`7442HQ<>wAGm zcFsg>Icdo zRRWY7`WedgrK({>H4mUq8R!Tsw{M}Pg$|nhua*-Tx~VRLi~V4Tm25zb$RjgsLvp~1 zOm6q}b-MgF9}gHnE+S;6D^2;&%ICyjJ(KS!1kryP zkHp)BFGlDm4MtvnvbL14jM?y-cUzn6E*R5d=Ce8s^ym?X-t$oPmCXIS)7q#oBr#Bc;_v!ww^_xn^ES8h^>_V|C z8JneM68oP4#+wl+DdchnYEGF$`(7|e(0sdVi*m;>egjU_gKgvXgU!z;+FwmNp`2@H z*C~sPCT-pHtJ2SCbztWEmOi@+;BmY~d{g(WGy)pcxq{K>cw}ID?v=xqlwOAIV(_3t0yAMA~U3(EJ&LALBkVG1h z7wejC8E6mW1>JrFI|FA7=mZwI@to(_K^zi3vhu>XG(-NV_QA=DU0hW!C-J@Gp^29e zK<*P^?9a=m31V({{QjqFKs~``PpmoSlnqDv^)R3UV=i3^N;Y@R7A~cs%+eQvq}Y#I z;nVg)_A?S^g+qmxt^vBB8y7M%A85ovIaibUeKxP>$K!j8fY@Px*kuJ88+Kjl_w7NV z++!RdcGBG6Aw$XaF|h}a-26Gq=2xZ?EWLW~YN-Gvox-3L8|ia`6JKNHkHC0=pichAk>NLB$sqU^ER*!JnK!J9O%< z`hnMXkn|Qx&UI2XPb7kmR`(cLahLaP`PN#)fK){43E0VcvsqkJd@>aH!~NPSF}?N9 z#axoS?+u=f(!d{z&;2;x_PcU>a07(82K;NF%VK<0UCcHT$l~WctdAX-OM04es79oU zg&=FanTv)2vWV0aP@Vxci*( z*t)FkK?+UG15c@!s@q->rcV(0=>ln;|0FLRc2LB0R%ngd_6$X#4=XmLK^Zvu%Eq3r za6=y2jOpE1qT%#dTeXLIjR6rd_!b(%S`S7#ou>g8y`6X1Gii`V`P=ou3thyU5cmu^ z%WSEh8p=%bQvi*~di9mx#b2eg&05kr*U3LwbN187rv;Q8iGWgcC$I2UBPHSFg>7fn zb5e)F)x|rL3me?IZk2tVp1P3z=Wu|*MV(-my< zC*6JIxmJ>c<890zvAXjW0|w9y9}i9e4Gs1n_f=*izT-_i;N#^|^o~U512vq1GK&fn z4CrqzcvXy$j+_uqeHWnE0;z`jHa07x`V|{GTMMJIFekZ6fn&mBIpI}zfLoM6nJu4*K{>Cay8>IaW(^UwE1O&{2PteoOme}3Q*~QAio}Yx7fr*6J%-#f8oxKG=iJPlAJr{|f03sY8fS#UM z(#+n>*~rzwnTJ@|)WO({SlZUs&BgVu>s{cg5Q`a5eLEWi)Yd`IiC9;Nr^U zV{T<@%R?&h-;3Ape^QzMC)M7;-t1ozALD;C{KMsFwl$zTm+(_`-j(?_#b*^PAOJ(b|7(<%v|csoZcji|94`5{P{-=6CIN! z3!6I&n-r5e)Bgti#~NS(5O~;_C?y3+L^wP+paddHONprf#jgbTae#pWrqoysZi0Y- zhFXb=DoKlq5<5CO056Xj2nbb@UlPC6pb){Z!S_;{G$brkr{7Asbdk|84BBBNsxU1g z)kqW>{=zBYCBwtYj`Up54VrF_PKyiuYA6tbLOBGv7j@6p5z z=ve>2-9X*Un-6byDH51NYLN?260)BJ4<+bo==$&FcxZ0_Fk(&1p+rKDdEroB&BT<8 z^GxO{vgSE}x5`latCQ2BlE!{DW`OhOly*Y5oI8{Y7>fs%1VdF>3>H(&YC*aovE(B& zB4GMPc3#{W>34TBL3uz1_~z7cHjB^}{dCjen;iKCb2uLU9rqC07E}E(A7YUr!9!g2Toc9 z`ww+_wL{YwNUikmrm|I4MN%dRyR11mPyo&&OFIgDjBxHGXm3KAhLwX9J050RTxW>Kwn)0#&plSm`D5`KJ#;o_-1j_ges=ZI8(CU<{52aU<8u9=v0qxYfWM6gs#1_zM2A+(xaoX9T=zpihpD@L|D^8o zhpGFpt*`9z=^m$OS$PJ5fZsTc{tW&_(kS&+&lkUPZ^$&mjcqJSa7ej|LL@C>R8c9$#mkHK8{ra+QhU zXP9@27Ggjv8aUp5T>09i)nzpH_xo$j3`!QV6M17hzLUb(?)k)DeF7mL z7Sg{Bf<}MdT?1l8rXs_HxiLd%mX&zKU3->HeiK4aAODTSatB^MkNn;}9_RAHlt}+!$(@Vu_%oV;LyfX(SR%B`hl3;d?T=RA z^5&+Qm!DBeS}lrx-=*_&rpPBKhR@_Ku%d8A5n*sc2hI)Dvhm z4~m3RuL4S75FA37;^Mj3!cy@G`A%Ms;c5hHQTNm#8nP%*^aU%Yi9gfb&vDxFuD?DJ z*8`QP&+!VNF0kfHR_Bu);4s&DUbO43qa2G(Pyd%+GcBc#4q-gE0~)K@tXKMa3?)WYPQ;IuV1; zhAHJJGx?Bxb^QJ)7=&&JGU|jgWnZY8NhkUPPB7Nikbald#0r{?xbt@)Entk8MnJy@J4Ob>Ob>Yt+@u_> z>l?6S%U>6B=&$vEM|nkBTH;h4CngA)hoXn1&|;F-0Fhfq7gIxX_hu``idjfC$6!jx z(9P?Tz#H3t$JiNISmPuvT(F#p?-=ruYZ5@#@J#Ixf(bGySXc{}A$9Gh5?>YPU|QZN zAJ3qpU?nh88W6^dE64Q8s@GPq1?X)jKo}H)Mw)&V1r8CxNfv&>cR9{?eYhOynNqWJ!<`$2@eNs8%}GcM_p>ddE1> zJ!=RhSY&FNc%STm7wc%EM_4?037-f# zMn!7b2obedhf$nDO9<4x6GS}WWh<46(3%jx+FHgLm4Y;47?PZN=^kBUSB2`C5kyg} z6x#7BV}blT)3?Zp1+c2*nHg49eHBb{@+>8|!zJwXoZgWuS4*}|w(Lnn!NNG%;u%AK zzX8iH+>sbA|4;l>o0(T<0dblB#bcN~nGQR7!l_EvAZEDozo6PuCF*Cu)vV-T#k6mH z1lT4BYRW2@FBB1chXtz_6lz(^IlI!02f;zA)8HrHYBbbf}34 zoMke9$8YaT5>X6Q|4VP5sLr4(qhZ3bkgmsaICc3S6v{lrPA%ROt7KE<; z(cvY!x*f_&oj9||{Ry$!4o2U1XDM!{y}@u{Pjmu-4|2QBO(GDr{#x0m_W2%5OXzET znLGWFa0Wj8eo6{{^gzFAGD9)04vCe$x zVhc7-&>0Wq%D($fHT`M1_jI|P6)-tj-BKfuIl)wJQcNF`D{K2x%gD{;FI+u0_~aMg z^9-4XjTVZin$#qxA_ti=;bNYGKcZ1y;o1N+sL4>nfnTV@#}0sKrO(*5CHBa6&RRXYntggtsaT!IIhAb|jb10(_mDtr`s5 z#0tVF{Hb_2@M(Y=F2f^5{Uf(`?;$@x@dtUflb4sj1gj(UF1fh!G~qpy%=a4OTb5CH z9X32fxg=vITOz_af>@3QMMKSD*(#bgr_Q`nt#s6>kuIMH{^|n^03D7VYmNku$3iiW z6^x12>7`@jYb2L~8DyHGGisn|21g6PouhK_yY0D2uJnubZ7g9uI@cKEuX(>Sm#L4U}3 zBxnEE)|?q_=XGcT^2+}i-3-me{Wduz<4b}^XR%K~8>EU{WZ41`8=?c$T46vpK0%s^ zwdk28_#*|+el_Ibk2!l`OWx*a2>ME@?IYg~leAn}dAvP#-^MHHj24fcpB>)$jE>F4 zuDFITs(tYLA=hsnAk?tuo$c}pNb?L@LH=4D<}z=}d}%klcVftici`MRzwx{64z!r+ zC9!3jIn+OR2*7Lr5V(7|bHv{A5dD;920&=zPPfvu1-$3D2Sg~;^@1*D+lY{ckuwsQ zVRxBwkNFN9jOmPM90`eMjkHF)Cs6fgDuQJTroB6V9vA@M0^kvC)ZKNc_Z#9;%{1-Z zd=~7z2e{_IsLqeI5t#w9lftjZ;tH7lu zs*1ZO1kK|^Y0P7Isi|42B_H9&oP@62M@!5bvgapHmisU z^q8djhuB@y)#ZoU;l|N)WY)g8aFRtNbSVVWtkKmq?A%)QlkkKh_1e}OKQ)95Z8F!2 z6ilywN0_o#~Uu%ElbNsf%5S%-*;6Fo+P~*kH#?psF#pC<#g8 z_f#9zb9-O2ekGgih(1gSDxmR>Yp zDGereU9Xw9+lVy>B@DkVsM?R>yU<@1$F3c64)%#E(`($s*P@4WI#qN~07noLnywna zg?m1WqTMYsiYv5hTiXu<0~Iy$Rn=5!x%8nw7OZk<=;5GVjmBwYWH+&khA}l4dW|nR zT~boAaVSb@)JF5BHqE29%;F&NsW=E~YK2ve43aXT)J)pNj$B;c!o_PwxKr1m39b+| zmx&vLCW%P#(-`93qf*}!*sWlSu^4+^Fyj=UN8v47I&^b;MKCc#W&n4l3LTkBnB+D3 z`3JtjYGloL-|%LztoTMH3*yRHaT;~kwZp||2h`!I5$?tiC03p6gbRqHMFu3YJq3oP zkfVxL&adw^zT`S`jGIa7Xksf4I0pEWB#UP}X*;vB5K6>VU-0Y(&4l1z+O&GF6DBV>+C#$NaJVGtbVez(|xp|B- z`s73ayXxro63#bq>@F##(a27K5=uX78dfC}dw+}&ZiwKOr&0>5)wO>-VL)0!W-$3< zOMjb-LAXhL**2LGyP}FX4*OTUX!T4H6+Eqz3K#%V#IiZbO?qiN4D^Tcy$`qy{f%A% zn?9fBbq_RFtT3)<(t#AHbmPE|A9vC?Jk}iSEET-^qzQ{m7j`~jV9MkcRLwlNujAKK zbD|*|+T{5m9zB~{a=p)cFo^;4I&j?MAA*{W@Y?a>Li^U%5+~@bxQcF>n#!mW@p;A1^1FD(F`}`hJ4^!zuiw% z>4)2UTa17tk7uo9^@dr4ZlWAzs#iD>6wJwdfT%Aa_rMns!ilJas(@#zcG|jr?)67o zfT6qJxU+9qjBpwzC8Yyy91?YM>{&IdYhj|ZAAylVZ*LLLHAu5I#Df%y{x1PLVRqwd8?X6=Y`$bq3HvM${jn{nfPazv#gLLZG4I}SLX}4e%M6qM+ zr)8ou!BL3qAWu8ryS80k4F}W-PiP!P9uZ3q-wx2jnK4ydfv@NA_P)jp_dfUU^!!2) zoBT~z;O8RJ$4*~kl(1O2AO!Kf9W0Y&GwvnfHV#Y{elP_2lL0EQ zLMLszPG_aoP=*r8wvBSZ^`qk#Mwm5zILZ0|N4av=0y>w_)Dr3Fp?J!2a~1o)Q&!C# zQfit|x*Eg;+PQ?hYm&AX@xN~|Y7nYlLRXxHI~RmupexyMPF>66Iq#74eU7g`^ zbOp)uYcll>W{EE6wl*!;bJvRrZO?B$rWZ5O8EylOSN^#O!qQ?#x%bY^r~9L44TyN*uZGe`?mt;l+!s zO_Z2Dj{DW!RRG+SXOGqKThSxOE-P9pzR=GHa5zztq!D%5(#p*EI+Qa3^iS-2O54BH zB++1vbUr9wEzLkB*9$3&PV4rA=qv4HA&P!i;Phx(WcI{v;~@+tXckZTDEYv5pe^8& z|K>S)ct8AQKYHbXJf-?Bi+>TH?#(ml&gG$05dUVQ{9=+nu;W+v&VvEa@!|y+f!#>|mm)03a4GTO|ksuXM7k>%;JN9lrz$ zf4e17Js(hWzUaWl^?91Xwnl2d*&~*Udty9(e@oEDPz{myZi{Z_=dUo?T!RfFp+TgZ z)Vf;pl-ZKNKJuQ~IP!s6U)3V$A((-4F~5q%0W|$awJwpvPTfTo9V?K&!1ng~E9Oy@ z+?*0dqThFX1i&zLXsyrpD`fLp1$nuCI}6;jW@nZ_<;b!{4A0*Cd4PS!TwoJdr9vKW zQi_zOvaVns2uBY&(9qvRhw0SVH=I8B&15<`>qH&;J@wgT~F;pATP=LihK-Wfar zwX#$*#8LuPX~D*23T!qd<&g!3TDWUSmR(qGuIOW4fc&y0E5YS%gnaFm|CF!uSoYPY zNNWzDc_*UxGpK1vaJwC;_R8^jm~-FENDCb>JzLtuPIioRJqTk*mSJHb1>5wJ%B3e% zc?~uijA0^W(N4OFK!03KpCiHM1hOd1%pP37Fyfql+kpl|Mn6C1++BVBd6^Il zaXdk4<@UcpoSg?5g?X=lg<^r6g`XbTh9G40f6-Yj_Veb)cVLF9L5RnaWBiM2kegUj zR`C6nrce+^DQ#F!q}rJRn=*Su1{8;!PF9yO5(7%GUY-vpKQ||WN z1%prCG3P(`r>p8NWDv?ReNSE=gZa!I1?a8)No>GX4~;yECInTUW9PT2>eb?W?dHx- zA^}`QBIx0We6Sfu4mK-UWph`1+{smcl%0Z6&^RNl%@qs2iB4N8VUXA2Z+j8?;}p0J zJM;NFD8FkSicYF6;iWz~hiauD%`!-I6aNf~S&=Hb1fO)%_12y7$uS@bob^7J0$8&E zBLZEo>6{br33Ej+IFHz0fkcrw^1HW6Qr*1Vo^{~fH>htV^Lw*C+R{~`JaB($y5Em} z{oQCEa(Wj4w;~+Bv1O=7L)7D}!7~|+{w`R4u@hG2$ya-P@*nf_~Qq6UDFx*^n}DE;4hJL;8tGh>3AM+ z^~uKLm*@Ln6N|rM5mUyyUe@dKjy#wspwHAbs7 zfOvPHi{G)kM00Dn>IClGaHcW0sPuI#aINpJSrhj5og%2xVVbhvD&}*rT4=!Wt(v)8 z!fve%pZ*^zTJg4CXb}}mZm=*6ELX7_tdD-I>R|$EgpToPt>OND7xftKGOFb@zu+rL z*N!z0g7Er1D~Bi8NeOrW0^acRd+LF2Fe=ax>*C@+a(@a|x3IfCdBE*M0(#PkCZL>k#lIP#5w9lF=OM?4Py8`O%eaH;ezLXDxXpG*$<`lhauX{*)Q zLR)~bubYh4p{3DYM{2S{r+oR+R$vO7{;YMY4c0F*+va1$@Di(WTNZNZ?|2)a6AN%; zrlmDyxDYGW(W%KYxQ%?|6KK(N7EJ4f3q-5Q&Ku0OL8&DycvdtDoBk7qTqKraFhHy5 z^yS0Nw>IEFr{vu;9K{>_p|n>WzrzfF`ABu?-aIa}<>Y_%?LTIn zHMuyF6_*>#)@f-K*1Q|_WHR+|6~}61n@?_(8|=J-#!3ACdrUoM-M=twv-y54Nfu2) zef-#_tadZw>C!v)EI>*#Bsy|YD^r;?+Ypm2$q$=dhC4cpTr7{=7jZkf=SyK-^Yu|i z1t3#y8oar~{!`v|&$D)ZC3x^K@g>})oxBe@W*ncI&&W`BB(JyT=eqgIpL?D_EiVYQ zD+twPb%#>R@1Kr@R_vzN;h|LJj)I0XVA}@+NJC0M9$(;lIN9~FBWI5%R~II(%ACS}`btfUE1pIn_5l-Mn3uK%i&@Ecb8U23 zcL}wI0uP&;$V$kTUZdo;u7r_4g_91bC8`l+U!EwdG0PcuGs(sxvjpPz96g`s(>DZ+ z8jntr&zdx((u|tZyy?u*|891_N6aSJk8904qyF(BX9Pf)X*Fi9mYlZ>T&N%E8+yK< z??bcmiO|k2fRU1i3|inw&YW_r@cS!s_AKbltkxEVF#&D-O!s2M1y#B1v1!`#W?jU#(_5RAifCu4 z+upX{2<9%4fqO+1JMkwR+^45x1Q>F09bTVpIeEK5&2GP;_S8CtO;iYqV3K#t-$(H4 z=k}ISu^u^E+?FB9ia}5OuJrT#@;TW zrGdeAHympp06%({1U8bQBcr#vAAWd$9$K*?0v~nN3DGn4cu81Xqvy*xlo?ARnV+aC&^ijNuZ-!O8Eba@+F$-aZ4BK0%(A zN>z%}?Bg0iTAlKjHK%^^vWbzocH-fLSKD8z5W#}+YvBAbXK^vIy!Vx|HM|oBv26Uu zW)87x*pXLGe*U%^rVI|sB^1>U;(ee(W%bxf2VN!%Bx3FaQX&I~fB-@~j} zy3yJ8GDqFQrSMsFBwLm*`@ut7z~STLA-~eAi+(^`<=A@X&Eco$&j8{EjGM_59pIF> z)f+vG$nFXIY9Q%;_oYt|2Al~*oI*t7?<5r^^B)W3<31dM31V}CenZ@1aZt5KNpuz^ zW8ZA3uJjh5!3=$JZTnFdn+6EunlQQ=Q}p8KuqPL+4v4i^U3RiqloO zxG=QdXU<+L(M>L-kGu%Gh4U9|y|0d(=T81o3J3t|1BDK7zAGO<`Y#voubSv)KoRA9 zk-BTZ2y0>NYrR&C6mo*>62$@hG!+vAe|2i$UkRKQXHm$4ZIxDZ>Jx3jLlDhh|Ac%p z!%88i&8oqgSV=YSO;E?IqC4#+<%HInF#EOCl^#16uJ!_vqPxtQ8I3>YZEjHt+tj}g+sM5B8h*ik)O-u3B5v;%mX)5r z3{;7Y?%%VeM^xx*d6c_$vS%rA4XWFp#lml%#b7NeEh8$>r~aknS|rD01BDx-ziB&b%S5WH~p z0w7-@bLxoC?^AZ1#6+Oo$cD?9qf;V7{al4RTxh`_%rf=LL^X<*Ak@i8H);#$g?)c~ zPO!tpu~`jt^)aT4ZqCoMPQKgahzBS=lzUK!4&@yQlZ5_Y(QUe z+m#Np+`9R=7+FOJvk|!RoJE#rG``*;;YoO6Y;;sV)7%!ZFRi!87$g61Zh|M6jelu8 zv$2E>nzrugDNC|NI_4ak80#*1@1D<;A73*{7hW}gT-9gUGG<297=bo$nAlAToTpZ} z>gbdIu$>5I(>HDgBqqN&E3go)$pltn&;06}vcuzeXpz;vK=RTOaI`>u!jrcd9E6T* ze2NN0*5LRS8d$J2ikzkDWqi?bDNRPmT8nI#Zd>o_M-*D{dv4PB4;NukEy))1-(BJ2 zB|qdF`3H|V5b{gD5Np|1w^EvGzs8?p2P>mdG&R37SflAmS1wk{$`#3&4LgzhqGG1qywfcrnjo{e|+ST@~y^EXlvlWjw>(n^*q{P&T3Og?-j*8 z^C8?p^D%`n?Th!XjCJM*_!=>(e5W2ZZ7HAv`W6kk?3bm!6`-DxR!@ED8K}s#LV;&Z zKKdZa+W1{sw|FyN|4?N6;DotlGvdhxl$df8>TIpP`PUE`&MbK^fMx40meQ7DKua=m zarr9L&Ft?U7_|F7q0wKdpVItgl0a3gRko4~u)(J;6q!DbTNeBb?k;9r=J6CsFLMV6 zp?4|)#A$F16jQ$>vwq|_4PG~>1P++wE*Fwfu`m`R&?2F8rLtw_>!yH5*}_*uLa(yRRkmg8^!j1& za;XS3cs)RZiEeXS0=zyCG}5Wjp_bAtm&|(bbS9|4&9byR@pQY!m3VA9SffH^i}}T@ z;@oAY!@KtwGa1e4>b5|W$HsU!dp^_E_$2Xl8f(YlB$p}hLWMNQV}@f3)&{v+$K)(^ z8dc+)5monK2b^%NVZkd4*wsq(G06*ePk z$s&OiyWNk>=ID&po8Nu5JcAyPL02Xy=R^Yi@S?YTTY)pkY6l!xiCQDp?1QMt}Wq2`b>f0xW{wh@d+kU(PQG9k0)2gXwHVzzpgWHgE(A2PM^Hb?H#_3T~cR9`rUf_KM=Kld2Cu`&04i>Rd4&jRMQ`^Zu)*{ zRJpp1--B9jO*21=rjGz8>1SlLey~w;r^P|zy>&DThTJY3A&88j{dZIt z^nU^6KpMYW+e7j=L2Jcyw!r8D?&*sjjE~QtSNX?ic!GYv&tx*$+{^pd%Lf?YA3HDB zEQi40dp=cJY_wxqI(UwUx#y|(Ah>S+8H|Lo)O5G@L1-@Cy+#>rStm3Ihi2dz zcUO{VE0s_c)A0>PS7=pj{7d63L)21@<ltv)ncjx-Ol;fGkTbcvd-%c37+yR8@uV`lPElyU)JHaqMnk zopz7b_8xh9w_dQiib8 zrd*{so}{(4&2lofZ0TT!GRuB;e14n5iisFMnQyIf>v`wBS8zB6i?ciDpfI(LU^Vy7Uw}*875B92j%KiLgA5x2;^#g&La|f?JlLZCC1J6q93?MAs|Z=vZB}|P*+N{Qj}EzMlcxcFxo$2F}($& znJt&}2iq*>W6PYZlkjI`NH?pf&3T*8@_eLp7!F4W$0b=V?#c}MZnf3#4M$MZsFw^z8H%W&tAbU9-+yTuP07^x`hMveaV9-U5~cr~Xv+~Vrp%S{J+}G^0D%CeLEBbVV5__)!xf9lBdvG+SL<-y>O0nOt44wQF~@LJG<> z=KAV_Fbql4oOm&Xx&v1j+vEUXltK%;J)#9c+HQy0-{I=r4}^^ttJxTef+91<5Am{a5#S++s~QKLn( zKO#;R2pmE`B%M#l)0p{m%4&MWd~!)|FeIK&S*_+cu1i^zR>x}$UaQ0Q=m1ldy55{z{j@O>ZYJNRLfB2BCmuFekv4@^aw zrPdo*ICMK*gzy98yNlImY`A+HCnYda7!aiB!uTZM`sJ!9t-J5khR!VI? z&+{CkN~)@)EK6G59@DEc8UEKgws@I^#gM*JUxE ze^5@gW>B>ORaO|SsH*Ctz;aWmGggY#Y_&m3tM&Z=q4lADho9WkwB9najAL$2UNgVF zMj1ua@HaL<4h|~Itw-B(!g6wpL7-g+R8@D(+EP>K`5&c%KUX<+BT~NCe52*PRhs65 z+L{f;Z57;Hp8SAHt>y1swhfmOML+I4Wr6>w6PhaEI!CO`dp6?+MIQ6{peV3}L*gkrWD+A)?0x1Qq6g0yK zFKqMl`8SN7JhRP3(qZ@Mb6hW^H`qcOLy@ld{`dbcXYXFsySUvoghidc-GAOlj-GwR z(TiVlaQKw@e1RWEcwv{Q)xoKor3?@@I~+XyiV8u{^qJ4DDHri(ZB-`LiR0a0{*~{4 z|F7K6C-wf|hO*45@)hHoQ+j)cc&$E8tBr7dgy%4u-XMe_XteCti{RE9x=Yeac|x0M~C2xHkUetC*{|uPD;RT?Jpb zcZ1du)-{RmhosNmR z+xV>(t*rs=wrvWLuETh8OK&iubfCzVr1^@V+aZV=I2zkv=QZuU@q8*>VswcRmPuaT zT(eruSuW=cc8@j^HC5Z*`9W*bT`zN6J?t5{L9~gS-P%ST=8AFzYMk+nRDJFnEuCNK8Y84d|Nul5MN@4x(c0O>mZuH)^Gjj`)v zJSGp;Uv~#X$~@uhhria>wRS`??=8+Af4*TXRY_444>lQ)pYVL|U)P$!HO3Hz;RmfC z*ZIg55HA;GS@!Q%<{s|Gr8#}`17~kuqE-HYyZ+QZmcI)~t?ht*px3y#cuStHtR<2W zj4v;1ZGb`QwRyX+Cdkg(PgH^cjK0)(l$P z?cvs@&KDOa2)72!ZouKe7gS|g16MZ9GM^(LeQb5~Ss3j4dE`Z6_t;&Fp2hnBt=I28 z954SzFr>Vd|H<8Z#n_gm_kF*$b~rg!PB-`Mo}Qk> z88L}L5-CfNZ2^QWn}8o|2nPHj!vg$b*f2GO1Ou{3=LbWC4TGd4Q=}X~Q)Uu5B8TMU z>7JerH;2k~a@cvVwfwO5IaPK0cG5KI@f2`@uD*3oowN7a-}=`7`-eCV@qHg$iE&F* z>UDZ&r+8JXT+SR2j>p;I1D@P_!#2Ju!_^AEQls5nrP^qoTd{d%n%yaJXR|MOtR>G2_+>r$()vAK1PMC6DfMM#z^tZibj>pFK4hGoTyGCPeot4dPnyoIkUi=u2 z&Zw7~#N&W!#qx!Dgv z0^pVkus~TG9c6O1UwFl?fWk6sF-mm&GH$uHY*@^NwPLhlbb4&-blGR;+AZqcF151c z%8Rd{vK*&T=lIb*N~Ibul045@S>0g!%FX4ot2B7!I_sM|IG%3}@{7sQB2L$i9@R1g z#d?^Y3nEpVQg5sPl4LeRXhmMEW4}}(&1X1%9fLsWglIlx@Z>2;G^Nz2vUBreG*(t= zwpW=Bht#{PxW0#U%iO&EBI|p%s5>rxxz6_PEsU~$zV*#b%Iy`TOfg9ET+?cFk-m># zZ_(Y@qugi`1Vcd5>aH*Mno6}v9?f}j?+t?alr+uhJ$=aGqkC*@U!mGwDP%F{HeCS2 z(TGe#rCcqdSnc!QUEQNrZGv=2WWgyP^hoDpI@J!rY|3yxU}dF?)L0KvVY#Ot<)QiA z8WCA4qZc-P7x?Jfh^2MZ^JsC4=4f+s<1%kvU#1Qj;Zkd^l53Vqeq&6*YyW5fk&6fa z4{Pi6Eb{j(5KykxaI5xkk|g0dElY@{M&kKNjN%=W3}}_IV*sH9Ydbq=tr-nZEfQ>;B0lq@X_THl<$jRU^M|`hdTDE8 zkr`*nEw+VO5d|R!PxhCoL?7wz|NpoVefFAOEFkYic>h4fNW7Djo+UA^kj$r(0)^Ml zEnrK#4=$vap+E@gomGqrmDU=Sa+Pwq3_?&UH;~dJ3`2THPwhq`T#U*Xot_em2Tae7 ztuV#d=hDp;lcPgqZdqrIdXv2uUSaj>ZEEdR+AFIhNw!25T*si2kT?l0p!P0~?=v2s z5lx1i9v`5K4NQ~c3Q$=}yVJx-L49SNz3U%eZltp06HX_z*LN+tsVHnt6uq;3;&_C@ zFzz2Sn4Dk)w6?d%l_F0wHg>P!_%(z9$MM+Oy+OHLv(0d7J%Ojum?)i*W)ZXAG3}LY z=FyBtcV8okQiO1r4Ufol&hYe*bUL;OcAk<3b4wKpLni%WK;tfNjBO$pXrtpejL*&x zo_{_8x>)p$K`z+aM$zr8(QJ1p)f-f6P0L|42EWo`I_gtzt+0Oe<3y7_xo~;%#%ru! zxxv=88=kv5rEjt{nntThr_;JL5$m5k zWilNiQ8>mh+&{rFf*d#<9-vHy3M2ZxQ%+7#as4V%O6K!12=^ne|IgN|!N~zxq5Qtw zOqq8DmlmR$QmMqr;qi0%rP>&3jV3R=^fI3BlOze%!v4-u$K*#=e=pYC@1)0g-aejX z8F_4Zo~~Q6_0*^f$x0XN`a7ox`a-=4TrDyN)v$3=9_<1g8 z+&hkI5579*@q@R?q8T4Xd?r75&!9Ozc*yboL!0p~tW|}ySC(Ab2G2nul)b3yJ6DNj zflbpu;w>Vu8f|i8=$#!K!34w52&JG?UOkw_DJhCLDf4I--lgHMV4^c#)Dcdlb#c9`$p5tJ~Jjt1k z2k*<*xxDCejH{P7UI0=HjMM~iLXKD(Mt@Wut``^mlEUy2qmp*)Vo!_qBv*JTEKj8hK?gdmV+y))~v{9FzC@*TSE$gFMZ0DI-}mv zvf$2x3Cb(cUEg9h8)8&Os$!DKfP;H)k*AThg%g6=Y)%l&$g_MIpBP60aWJ#v)aeA1 zCCFl2yfF8!R4VlQgLj;`g)p4mzeA~1!u1`zQW-5ZQfqcz{&U>=^bgUjca|H>>dIEZ zd2`V!qg*ai?X03Oj7|?wDkD)D2rK;TKX{ww$_^{*JIv>Es;w@Y*I!^``x^7pQvkdo z5Tv%c&CZqEl!ebYnii438m)3xx2_?jqT2BK$J7Mu#i6UZ%CR3qs-*#@`Qm)Y4-s9SfA7|&< zHOiG5UbR83)+9|+lKG6m$q|0Z$1T@rwpN(;d&?ch!LA*oUAsAgPSN}?-kTI47LE=G zYRwM8XvCz~V=@~S>sjIoiFO^Fl80L^A<+1gAvYvR!elh$`i&PjK6%XH-PZ}{6VMrX z7!szrU29n3RjE{>RIZ{VxUR%VK@^Rd^pEHtJ+R>vl{)2eh0)m=XNUVdx%V0e55A2w z5auy{rV5-|QYw`gXLAse(cqNpul#^*q?N5%!hrAlXszslX`!eWhS_Y)(edFDtujWC zYhe-Y+|pK*lM*E}JK9e*!U*R59@4%*)HsAr~m*U07*naR9JE*^+(l^z7Jpa z!%ViGS3A=*Vm9jID1%q77T}WI_Z;C|X!az7{(wP$P)wxEyP~xp29$W7Hs^9fTTr3Q zx$=Ga+66fByoue#2J2$TLe9A-tx_5L2T$K=zxW=P)qVdPX4T;PkKZOqV_eT6jlzPH zSsc)jxY{BuO1KzlRjlKar`B^zD_kQ;rBxNpPL5GXi~~trxcy6k>(wx>#>pIv)F@#K zkP*r@fknfj$*p2myJ)EkTM><`T{5{ybt#OqjX_HnjUkHWy#2-@ciw!!ojdy+JnmDe zyZqeG|1HXm3d%7!T4JO@Dv6eQSxgOpN{Q74Rh!7cK)-j4i$)u16A{qV>uu)q=>-d{ zqKOic@N6HiR3=MOFbXZ~rs?}-vMjTsoW;!s9HY_FK`P7s78u-8+1lj@!Q}La5`y*Z zs~jFYv}Wf*TL9uCQrTbTihML9dt0;=2G4Rvmk*jj>!P?l?*m*&`S|~RLn=ivezNhH znFGEug<<@;GIGHO){Dd#t!b@pptFR@Jf!SM;w(ijLJ1@Y<1A0v@0Zc)cx#%st zG@DLP^7!tztsPDjqK%~)6 z%{-b@uh)r#8A=(#!2wEI%0Mn9!cmxLPHp!FPPs(?ndnU)dr656HbOjjj^>Pj$<%6Qn;uzVsLs0j^u@v6}uL+ zA(sNO#3t{sNJX+<$Mx3667|TF6g3?)@qCPcV48x4`PnhbbCE^euCHy9O-Dp&jKIM` zow4`AE4W4w%*UJ@J)&Ief>J09^;(w^$Hdu;XlAJs zT5Fy>xQkIK)z&IuJT27lX_4)1h=)DPPi%HEK($muDMPu^0I5jk0i-UaN|l}KFYxrv z>y&(-Gzu|}kC1Tn+DjbWd!0dgx=h5$qlEF%fu(yGyMMMf_Hey2!F)um)@1)=A1Pf6 zU=+_~rPZe5SM9zKhZI>!lxs~)nvj{eI9v&)<53ZAAqw+zgpFFH?wfuIK_RDC}|<)|T(79$%p3=7QQ>E)-5^!ubS+;pFj~ z2-ibrdBHVhDW3XH^W>F~IOw7_%EBMqHbzGBfpoj?w+||%DAgORZtZY*cZ3lVq}`v5 z3sMQfFy!z3C%?!%p0jgho0neN=B1Ba=k~{M(kx4qbAAZ$3}nUR%Q3cBGQ5jeXmLm| zcCsLa!PgGCum>Vz^5VcQ3o?wtH8zMO_Y{tLRyJkR(d_=9m$p&*LLdvkWHiJ(^{UX2mi@(R${^U&_-#=zPju9C090t=VpZUIzFX3XTq^%|& zuwh$Y-(nt2mtLceBbm%+mjp)kXYJo>A&_1P*KtvKRw#m@)$S67;W9NtF1#?z!btYK zkyCk25CupKjnxg-w|6;u@&KJ>80lh!Kz{6sqS1dND$`C<|DD!^+w=5(~sPzSf{&_JnXr-uDs|@-*E6yl{LyqUMy1vQa;3>Jv*}QU<@!1KLhV^5djmOki z*6D6+A&_)d*NA3glEQphNXc|OCQB1mSJpT=c!Dt+*OkOZv9`WLFrQFz%hWp^YdGIK z0c9X?sB^S2;;fbstuB0!v2G|3Bw8P&N{uLr}*V6)kd2r z2&mVpc)m-V<;0T#X%tZM%gjatMuR@hl{Gf5+(e}bSrp?{8#LOhc%DPq^%#wN>|VJ+ zIGr&aomxszoRVQkvILVRl2hu4NXnj176lwWzKhCon;wOO5pc5qkT?r5nnDFFKo<7NMe>i7 zf_lA0984|Iz~p!aj7ks%wMj}zii2YmQb@EAL`lN-wcAuG6&}3#4U$|T4P?=r>7Z|? zMp_ZfX3VBzbe>bGHE6U~2%-^=aJX{&Wt#OCqrn+#yVsZu`;ZyJbWS=AXsxZ2X@e|5 zFzit(m)W@bF@k7{PE+bDYg8K@3>sx}beiJTD(qdmg;%RHJUz5wBu3+xD>Pdj#{Cl< zKq^J=?0_r^DES^IXNR~-5l_bj)KHvbpe2!8T@&Iw+ zne|<3=QA3dBFs`!gzI{RGFvVWq~|o34_I5D<397z!L1Hj2)f-BD%EP?0CEmGNF20M z_@y#RY4R*7sDh@r2H)ZPS<3tiG?#PJddx>KrL~U(rAnD1E(pY=O zfA~ND1`i({BLz$+0gvvV@U<_0o8SEPFY>i-JmB8led2jcwNb;Xm92NHaL`h5G1x?- zapZ!E$kHN96d^_efsz)f5`|c___1PbSqPG%hr77W;=uqsWiwT2 zm$-8MV@Sv2?N`4<$v`SOM}edvoX?Q<2`$L+SYJC+5P%D`))M=d`y*00C={+RJbiS= zAN;{7Fr0DxG{6XGx7vlrn^_`S7q8>_c>6r% zW&wfLD|KeWq2;Vz;QM_yigun|Z?27T~k6A!V&vuCvj#Ya)pCM}AliI>RZ(bESQqwtJHiZ^$z<5sFjuS77Pke+HrgCiuGtG8Yv z4MT<_Yk5{Fmx-g0s$XXJ#!JllhqPL&%qGL-7;|#^7+EeeJU+zpORR2gGdwxs?Br;f zVwD?Bx4A;K)n+p45k_+y$I@1!$(XF!K?!MNHZx@>M0v`_)oWCns|YmX(_?zaPwA{} z(+_6UY7GpMD6oza$!x~NacQn^Gnw?M*P6uvRpK{V2n=bOp@oBR?EO#@TqLz>jm;Y` z5R505j*(lTh!6_D-XTMiMkz)*5NIQhg)_rLb0}Wg~|RC zB9)N!LRQyy>8|Y{q+@NUghZ)~)$Rtp-XTJk$jyv{{rjMFksMSZiXx8gzJbbPs`VB= zaCHAoR1}k{1i#+m%FUM>FHvr^iGmq!y~b*z&2)Ie;Oqzo zI6FCB0ykPX2&=*%i4%_Qzl9^g_&$zSnBv)(&L)@b5%u|AZJlidaU5gZNEHQ1{LK(BPpR%JhYhiZL=hab$yg=-vqsfgyO2g%pzvol^93dI? z4{3DTlq-$m{W_OYK;O}jJ}+@VDaFy_`xcRt0w=T0!S0P0i6R@f29ov7Ely645$c@h zx8RZFj>O0WKeHB3!_y<1x$A+<4Q{>0T62xVlYQ#723eL7=5wSfdJ#*YK`2=i>Ktj@ z0#z-%QFV?ZT>j~=eu01XfBX@SfK)18*zNN17uUG8)8WRII=6OKa8b68a|9-L_}l;E zzu?Z@6JGu59e(m({d2gEv)qJ@dH=bvgCNb%Jsh>vg^l=<@_QM9(gxRYI6FHboXzY5 ztqtXJbxB;d_7)N$?DwAM5yvq?NE)psv&pzfXOd`bI6Hnyt`x!;E8fz%<=cH1(k!3l zKz6tHFqyU|-hz7~jXpoQe$Ri|=fo{HFv09XT9;ir%V)B%Q&}{UwOWJebjrrYE_t4F zcJdGmmS1OJp$y6Mob~lJg6W(n3ZCmH_^kKo=FS!m?%t=>Y%>`4G15U8L#%AW7>7o^Lw9SF$8UX`Zg-VInjldGh1&CcJgAFC zrWmsd$x5Tc@aT}aV6xZY^A*r=i$)aOA-F4zTW;&X%zH^n? zWXQCCM!8zYaU4_}Gn!4wjix^8Q>j$Q(~EW`hVgvD+Km?pf&hXDq=!LLawSjiew$8b z1tAP8TQ|{0vc7YTO088W;3aI-O<;h&bQ?`xWX^eDL=8PI5SF-j1}GpdaiyX!j)1_RoD zgD{#?tu-(L%4MHgwaGM|u-aK;GU+3!BE1aPEt5(`RhJ2Z5T!C}50oX#hDMgk2qD$)f!P0AqC8*GsM|bwsvk&DS3F+8k5lgOp2?0l*rIwPGe<-ZfA?h=?Ntx ziFHUA1#~@IPvRs&pioK5U~o!qG^^`d#6gK!uSd1LPP5S<2c@%R7ZAH~bTIIiVWW4OCN=icF%dj})lyxZf^(S+am?QinCzwO&zJoC=YpC`FIDUCaeDBSt2bYM&xq0IBBU3;*N$6^$}PMb%tqG2AefLw zAvuO5n!n>Ute8ilFbE~tx^aypNf;bIK_wymUc~FKKjgKqKjL8jh+rBPaes!LtLyCT zt@E*$uk-28y+EyAvCXJRk;Ywgs%V{Cu8wd?WzLOjn@D3%bpO+T_E)&Q-6RjDguNro z>pK;Tg++0l|x#*U>g8SsCve`(e?_BeU)2BmtNWInN+QZ0%NK`#$S zi}ex5F>C7^3{RiXZm%PaATJh-aRnl`KNrqt1hcWVT`G$2Mf2u&im5b@A3VYsV>civ zk>x5oTkD)2ofMv>ENjBzki5FSLI3y=tulmTrvt9%;g!nF=M(0^kf(PN%H=A@Cr4m% z8jUW#BZ)JM$StBr%hei2<;0n_U=occRTQ;yjiV>`aFk(n_bQF%%5npXqd8(aup6dy z&_WT;<}_<KN&nfw3jLwn95Y8tAv++A@R;rCE>3l*IOo(+} zBvWa;S_9GV)9W2ku2!iv>wu=Uz6quX{6G{)gRsWlS<2}26i;XpW5q^ElF>Uorrug5 zj$>T60tHp6y|P8MV{MP(>3~{u6~`^nY+3{eLJ~~Kbw;hdLS9T; zwl{XEuWb;=F@B?J57LfDcYOyT1f%g7g}|%VXsR~dtvxW3>105q-9?wGtZkQx#zRh? z+{5v!Y+t?3;P{YgsSKWA>_+goQC9c4UQFcYGa7TGxBbVQW-lpKF;9e zA=BB2{X4I-_ri;mD!$!Fvkav&%3hgvdzFL9h+4CYU#`$tS*NzL$?EzQf@$Ao%gc;a zuSC1nB*`>o&!gqK0yMf3yUS$MKM$GtC~TKherZB;N!7hrRhf_?2%{ zE_-aOSGc{^X19^E8a-rtv(8`s)D_H6f09Q}Cj5v0#qS}sWN&Y;xK$k2!dH!qKBXxlIb9R`s~PyT_+KcY{|xd6UjsjZ&$MLL(@nMUImT zq-$xG(pZYs`)NuR_fZHz8cZ3U9@5>~T_XE@5QOx+=`r|@SdO_&W{64Ytd)Kg0grhjHGw(P40gE%ly{wz0Iqy9^+~-Xv?8NpdCAwKYo15(bHqT@`tbU zYrjnE0pHVeag@eGgDXpOV@Jq0AL zHKb`u9EaptR@gfj>UC?>JekkWkyBS%#7ZklUYW%AiISigZ&QqUo$o3{^u27FgzK=i zbAxKF!qX=Y@wFm|102B7W=ZD$p8YD~3oE{D6t=J4hI9H&x7DF{)+367 zV#AP^3a(a~!I>QgmdaIH8=IW$KcUlXk*663htAqIQsnebPAmmZ2>f~-3O9=L-!JhT zmrAEge0+p7ijzloK;?8_{DehIq=U$E9=`q+D$NdCS8vkU+(Bg_t4;6tfZQ0| zLM)dXjhCf3jzhD(O8;aZuTmu`-izybWLgztz(O%>9D>=DaQ^1W&S;KQ(qBukti?I5YD(QU6#?~H>-}na7@i2wWo-qk|s_?2+ zqVWKc+iP9#u8|x}sMgvf!H8PZuABLIK-n!boen`s;%G*>*|t%}CSiDTOm}OS^{wj+ zPWSQ4btaP$VK`!SZ3hQIxm4z0HYMgU!tn^lV=B`zd$(U9NkYOfB2N>_UYRTjm<~?? zJF3>e*7{W@vpzdlKURnrB$cXzsMU&HK@tWt+*~0_E-F{JewkXOyxc>A@VwSZsYya> z?Nw?v(Mr*6bT|wWwl{Z}PlwEdfILqboIFAyc=G5ic6P3i#UW`lXEf+pQAw#vsuPTM z$n%seno;vTV(lO?r16|I3Yg9(Z125<0XEmJBOUPSE0kmj&vzIeJ}QJ!0%bH=G$V^b z&~~&OM$x5umqr1?KspULm_8~R6q`<$n;an=Dy2F~#2i1p&+66{x-Wm0CwE@M%@p&= zh$ITF*k)njj{hxqt#-yX~_2(ms3KI?+xY^RdoIWBIsjLOYN=5y*8ODVL6 z5bLa<&^U$n?)`5cA*CRfhX3>T?<2IeWmAr!({lLno05O+V|8l716-%fgXjvv7{KNB zCw7YH<%K4rU{x%84?&tneCZGW1wa3H{|WQ?3?Z?u4?qclQV<0RZ{B&xTX!EIe(87l zYPJ3FMYvWn;X&qdhX=Py{z z;o)QUcCS#XGzeyM%W-uT)ppZ*`1wA);{)O_SfT*uYO96+p`e_*B;vGtmmm7UE7V<|wcQ#Bm!rcmVU~06+h?5g$Kzw>MS?a%)kT)%R~ zieHplTzrL49#Y!VU%gi06Q8-w>tDOiAAb1`KmJ$On42LAm&fCj<3RDsE9>0YYVf(6 z+xQK^Z+-a*zxPKEffD!4zVzVk(TRYo~1(+5AuQw>Xtk@ ztxX)qVKN(%7~2q78<3ejz1N$JqWQ8Baf){p#x}0am4)}0&`UQ0`0mPjf1aob?8ctO zGw$u*r@OvNG!1c!g{mCM_xhLC8Y3OzU~J9Ey^Rh_ufF7 z9Ag}NxN~g~g~_crWH}9gkAuR+jpf;mMhHQgC4}=?5m{#n^v4vT8MaZY*Xw9qrdDYp zTn`r);rVz@88?`aB>{f9Zn;B3;Z>Tfu55BNpI)*!(LxZ0bNr4qwpX|~D#ti35AME! zEQ)&X^pITVkj0i;Ed)-bMyo&sBx*Urw<1V|HZBH-N&mo#2Lc-;bk#=S$Tr79T9`^>W#&o3i@{@D?;evf*yLwj|rh<$7m$02DP z(QY(}~8eS^cN_u1LIMKZIofhNz9N>Hn{>;lm)*REaX z@aa=B9h@h@7{%!HlyEviV3OP1)5Rsgl40STP>5v z`Esv_(u}KDZZJDLVm$2QR_jc9r-Wf>r(6Z4K{_sv-}o9gUimDJS7I_6;$b*Fd`xp? zos~+H;n@L>l(gy%X0r)V7$969ljXFV9frdpX&j-HK}f~=<}R5^8TJO4GL%~zBw@_S z{!_|jf4NV()jDs#`4yVg3ej|qs8;Zl#%Kp4tWF?~BG86P%_8KEW077}h)5PsU$fc7 z_v-{{L@=A6Om6F(QPkT_`ezf+aCZ0@@9+r*Ln>Vc!+z1kzVjd{ghLR{@g0dUIi+fy zIG!PlSSG8z8+ZT1>E!m+_f%d1|bSxRG&g~0Ub<72dA$KpTv12_4L zKfFsC=6wBbpGQYy?!3|GaoeimjRC3+zWDoh!5BXAx$Bgx{-x>Gc|XEZoAdPXDL?;r z{~<|`Sv|cnY;3f6>E#Xll3;zSiz5uZ{Ry*7@#U{R;MH#)@vYYm_$z<;C4TfTyu#+r zEpnkzfRrB6t2WqJ-9?}| zJ3S(bW=o`Ufvy;73FtdluF>!H7!8gXKe@+0{?#w@%~y|cv;bjv@%B1D`J*q8IucJg z7?E*(uZ@GlU;UAfaW$OB zT(F|}UKce%ZVbo!56%%wN1&AkN0I8w`O3!FiNj(7p|wWgP%@fa3OwoIxjvzq6+sZs z=ZP*t7Yvtue=m;D7N@51u#YSPAM6Q#@t$PCcNDB{>@l7VKtVVe0~xt+s0h%?Fqux- zZLa|uS4cMZu7m3>g$m_z8P|20g%L(8%B3pZW{dG;1Oj&UZgBYMjt$+wK+&wvW&vBm z@~9^#XOv2k*#Nx+QBi)++dUul>7?w;u;%Fk`*0m*!DhGP_A7SUPTq*Sh;9ea;To+h4J%OKw@ zlG;+5?Ny{-Bk3J;bZ`&fFXLcHqL5B!gL0#d0cy=U!_z57K&4!!?0c+Uc>$zLz20Cl zKEuJT5zq6$XsV4C^I*i}t5$AsengX4YHHZ}>9jP}|FU~qurCl8p9 zhPag~z0-ZdL60l9UgGe`?d(7v3JOzzP2a_50 zUi=iN58ft83L|_ZQ4y^OaC&+~qu#>zJe&Ac*w$(35XK2fritU3wSy88r5vPGjCv<_ z-w+ZlGznIGW=sakT{>~-O9?p!MUJDbS1G{y?jDB^?vM!^JN<6i;U7-eqzmd;Mi5*G zEBO#8>jwdItiaX5aRu|y3{Nh60u=Y}yoFIYm>eP83)714{P#QBkS_u>v_-5>4<56& zzDIvP{*HOF3q61+1iI#uAWYKlkHLUre6C%oQ8tqA|I`*g_%Z~fbnwJX=iq(tbfpw-Fu-S^KoeT|SF%4EdB zn0Pv;)NH=v>N=nQ{Lg&e@-i&!n+rh_&X^C*2 zKniwtZ!-_alu91LNU}6$eAdI5obl-a|LB*$$g8g&;sCXpBu@oD@fU8gy4t}55~*;7 zgM%cIcJxs#OFsLltGsphj9CzorJ6Ut^^hO`iSM^Qp^J7)J4m5XNUp#9Y1};Gw}1Ul z5E43d!(K!1%YU5kYhN33rEB==oil#!mtUumPx(*(!8iEEn?1`zRW4gwE8PD06=cD7 zT3l}<3XX=6=L&aW?WinmdBH{z7o|++zHAq6j$AHK`#`(eV;+sk;}Go$Os4GShwX)x z(ioMXRE`mbG+ro?ZAn^KQ&`6axg50`^Nh)_Sit5E3kNzo(mnTEvmURiu&NN3M#SgE z!;S*PB}?mfN8jFWu?ht9>4SYG0Z2!f)XQ1l9)!V#_8ccNS9ot zY;0d=I_ly3KC8Re@hUa)T(Plz9U~Q!$q<8Hj!Y4@p+~q>N_FOwGdi6W=23`_=gj9* z!pQ(*1S=amg!2jUe98rKwzZo>Q>(X#f-zYVTXvIxdacgt<{tCe5J!P_iW*S(a@JS2 z2*v}_I3$>k=xpvWIz6DXxo2NjrIfuYQ8>kMJWACX;dn@<3yU*PFdg-o^!wD?E1W*M zgIBE+j;%dZz15-GYUBDowMG{K4Ex76VmHfK-Mfw}1!o6OQ7WZXUnLA?MLlwgJ7=i3 zR`7%XN0J0{;xI&GQB}8G!*@Jf-yxbu96x;kLbG@6HiOB4&gwP-O%RT$);e~2ljN*l zxyo!dquX6)I+;?dR>{+pERHBuYb0^V$)mgYwH8_=q*27q)t887BZAqa7+<<{wy&_Y zyGQ?UAEhm?cs3pZmP_2Ix9Rr|NwXN&TO)lM=EW(_A0}kWkM#yKECG?tBi0yMr%b9%t>-ZtGmYJ>=>nT!eBtI zx%B@OOW~uD4rR|_HV=yQHCtS?6gEyYS2mP@^JJZOLr*V#f3Z?OC$iasD~q>kF4PPP zJ2<;%T7c#`i9o_Erw~RPeAgpQq6?uYMY547OgkNAKe-YJX_ov<>wCI*t#fR1;dG-N zo3<#8N8;oK4b~uxixN4G>#@0egJ3=*%Mxm(8c0Ewrq4}Kytwl{Pt3FYoWfuhUh0c* z2;tCdv~Wt2FMi=$+`sn_qa0p+!0ovVk#r}um1C2q(7K|akzTD$-n>aeLr>2N8v10 z^rE0Gn4+Tr!CSAN;5IcThSQTdXQMGMy|_-PQ9~-nT6w<9=YCdr2SsY6SvZgik}Rd& zU0HTZOM1iK`TWm*p5>-vNT)OQAHIb&hV7d#vaxp)2hD8QCr@I^^%nJ37oBB9lPTp| zgVmj@l&fV_E~zz|g!36lLlV#VgWvcQzVO96c9BT%JcmdrzW@8K@N@se@ACU!xX;}? z$K1U)Aj&dUJ9Ru)TD2{b&wcJ1pZe4;r^j<19`raJ^!eOpUuNM_hSa!9l1ojwQl{pV zc;mGPJl!Ail?NGL-dF5wz#qMl^CNo^ZZM+Zr~Jv?DO*iJy#~XXK?_6TYJTiTK2fOn zDfpnp!)pXC4ocYEz~%2MZtEY&&tXg zp6fFi4UyU+CSe>~n-?j#e)SfE;TZ_0aOb$-%ZouMjbjW^7~nXrJ#+|ZPgWOP3&e-? z6AHrAku@oBrfTK`@_zuNv)5=gwQq2gl@DN~uz#(rAFOzL{HBZV*gHs5HYEMQSv86ta8m7RQGNXbjcv8eX|V zG#*o_)$D395G4tD647jRDAikplOg3&1;;ND&c=9t4aalrwJp4i*Y|EvYjp{d2*+s3 zCF___D!Js^P_ET+Jwd&(N-!S~&gNucfbV)7JiJ3N9+AW$d79vtJlgA9WKl$=)Mh?C zLr4omOvVFz$03a7B=ad*JVzVJ=Cv0oRVvJ8Bcj=y0Lef$zt-vot@TX?j~)<4F|O~U zvmDov=-iH{*S4;3bnqD8^YPp=!(Ok5skUpl+3uo@w#ie`9D_rv-Xs$_CilQ7hQl5X znH}R7MbWCXwe^5D2G0oMG%f7X1dV2g>0m^&)g~I8F`3U1aZHvcMa`7B)g~&BQCW&c z)9kJj%tmz9w}^w8-8%|?_5^pUb^R6rhn=(7+6?vGzv3 z5#&PSdKES|w;1+LNFqz)iISAf-D~7pQz@58ljPE#@Q%i7aX^vw5V*KOLN5-@Meijo zySiL!Q)x8$C;#hjFgyvsF}$?p@$n6Zw-3gAdfTw>Owq}Z|LrRwpS)7ym;N~9H{VK$ z62Xfv?eb$k@wwvQQ~1H#^D<7Z@DTjMKlpXt{MI9`TyOC=|J@(t&;Q^xloYte1EEQy zh;P1i!0&(I0e|qt2mJc~^9H~7g*$xiv)6g`wa1ivk5K1GEjT%y({MG{Uc8Cp%1hke zi(=(>qN7D1%LNLFMx$~?ty;$|RW4mi=kuTcna>vkaKLc7|BzOD6^y3QZgceXA?=kN zM#E!jtu;3HuJPboU#3)T6NO`RZchP|{wbAeopQNMFq)!7&gitq|MCmJOOo3WvzK_p zMzg))vwt{aI*I|oc%CsG%z69mQ@-}~LsF%9X>Sc99E{0mRLXqfvs>&x9`Wth9x*x@ zbNdt5a6Fqzp@hIU@YO&5I{Up--g@IPgTWMO1mj5aH@>gJzw<*rPezJg`C816z2Ng} zUyk{&|3;1Vy3Zfnw}OvJf52b*Yd?(dIK^plarzWR()zO|v4u*n;GkTLA6=rQ3q-N_ zqp>S=c`6hIY%X2vJtqbGkIpzf>M=TM*a!c;BG2B9WFnr!cQSug zruY|bPQkstfKL4B{}Do>Q5db5rxA`LiGx{jvM#Q0;U3kyuo9lA?FYUedeV;fA z$+OfZRT)XG(PC}qD!t>U2w!mWSiQ`0DfflAH#lP19& z{r|G}=0TQacYWvQoOAEnU%r?7R#{nV*Vf&oZnd`7)`$iPq_Gt+fX8DPHrr^J0FQ|Y zN8kzk2RO!_FoZoYf$?Aj10EsUplv`4qFb%4n_g?_+Skm=eR=zO?>*(w~DMY4F`{ZuLyip3KBULOjwjIhB zIpcTF7*fSDxnc?F`P6qd@%$8>W&<7g|S&`TdM?N zgq501Dns9B!gdp*EkU>8ki((%9z=cS51yb_-zJyNlPMIz6BM!|)VejocAIoIORv*$ zNLPZ`h?s6-;y7AIyOQyy8ijqLuuC`W5(EL02ajO1Aqs<}sXuW1e(Kxn3Fg0@! zFU`d0p8yKQ5+>9X3q?mp3Ht~X150ueDcw*&PyAlBvIN~eU;6w@=pdjKv>7S6C{k@B zT8&21JPV_+L^Qf}CT5RNE|0RcvlCCUAf3%o9-k(a8==>3#OLzBG@7^(5h&xnZZPq5 zH3pFo%#2NQhX`?k;PMn&s+@f zwIuK&rp88@m@KlhU1MUZob1z5dbE2z{_p?zIiC6Ic@7^O=cj)1QSvDtA*G`(3C$B< zzRAZv`4ZP&+GeNHrriqS0@|lqZ{X()?FOg-jAsx=aBHQ?+aEo`NUn%cuJBf3kJtQK zMd=`6aQJI7rY=UtFjAh_=L+EM5lIdG!0{6E#S-mamoc0GA&eT7N)wDv&mfe~SD$HNgexeO)qLf;CQ_DIf9W7{EV5W-v0B6) zWDYG9#>J5d;dor=2o-nTM);1L9h>~_Ej+ys9eu+EWn$<{B6t{%t^C`xefmxm#bRg# zt$TfHTU&dhuc1c6g7d|`3Q8XYH}FVm?x z8kS0>7@atPwGrK&U3!fMHr0*qonWK7%V>FwR=ph)lMK1i7`>neLXk@6X}3CL^93fR z7C^&JZJkuN!HpZ2kiycgSLpS6UiBQ z7MPfxV|Q~6Ya@qdTLZ!gIcwEz4lEpFefb7i&u4sYft$ClAbKH4&GhsvYxkC7CkbcS z<-~aI*%HQ0tyDbbwLrVmA)hNSf8^v~c0zC0Sv^Usu_{F>l}ZY;{OAP4o~NCD2O|a! z72kaS7~bcE5OmtTWa{unNJ~kEnw0x|tOvjMyDc_4%>E*>$V&_xrh}SWi1{) znlFN}Ltv96ohy*d=jinU+U;FeXlj8oD{(Mrr`c!a-nz5yOS%16#r)TmNNNDY2^)Tocx;R|#Vg=-}UZ1807a zMC}T`uQ7Deli@NkpmDEU)#&#u9pem`**3xc= zJo~j9Sf%ldJH(ckV6x~sDrr5mu*lHhDM^6F2#Kcwt61M`^Si(Q3_tr5kCM)T6^hYv zj{DEfa_;;F2FukeD|j}R9cVx9%q&J(jCBR5#b5>xh*el&`O2+6NXsW)?4y;zQwAb| zF9m^cChfM{=Ek*Ur}Q*VNM+*%clF8|QW|G!9B&K8u?JqIt`kNkk$tWZ9Pl|~a@6^3j+&BCHfa4yLE??Q_NfIMt4X^rBdwH zwh<=we=~7(?!cRN00t!Jq>i~)65`HZYwZlOty6m*TwG-N&aKzKJ|Rh^vq_e@u@>nm zrl;pZNeh_tQt=rgCQjEHQhk@0N(IM7?wvf#isqXF|L zN2qPAvAexNrypR~SIHTLCo+_a6Ex~uXerU2hcp_4JKThIo{834`eBb!zD%{U<@N_D zG1}2xtZ~!`p)JMo2&$^cjES}}S)n!c3CYvtOZMRrk zx{e9^6vify+Tvq~gr&aaJU83TDxo&yvl*-oXtx9AW)HXnUI@0=m)#oj{5XPCp(E>D zMoMKGm2JY%>{ApAV`)`4omG_b2#o;vuPStRRfVpctE;Pq_Tudfm~xtVbZs9-s4@ zG`+@JeBYq=yqD)kmtR>p&d;9<7tG6n|fpRX$P!z<7DUGZ4#xr7#f49*KpWy z>qhVKVZ~m0oDc$OBvv|4(0v}qalz{u4=r>eA~rQ7L& z_G$NO+*{s8TjdT}tyo)Lr`ztie0C|(HgeqF7*@4n(4cT@gAgI%^@`4?d`dk1dx)kale&7WROA)IrhZoO+0}V z)*zIk+k?+M8=$4+g(bI-NI!7AJF8-pHNw}5P#Clz7BIU;_}Z1baWa&%$2|L{S;oh* zM8e_&Q7_{6e(!14c3Q4*jQ0hdG6-$)BM&13jPOvQA=GelsYTW*v;`v#7ti0K+wGFe zW)jd3U~F_0FOy<(ZR1r|m#=Ja+!`=QEY;mjre+qCoO|ay5#OWDmD@y-0cpu)3shEb zF}-+{pydqkD?3~4Zmy6mPf$pw=%?~bOdO)Qvx}AnrQ;hc6&Iho;Lx}DL(~|Qfak7+ zprkvIghhBB51*N4HrK#Lh8I>MRyQ5$vA)sbFTZk)4?X@MTDgmS_dAbs;rvFz&9G8( za7uFGSQce1qjSed71FNoi*Jgy0wcjo6vP50E$MWc$(a$XjGXVN(D(w-DTDats$+*rMpF2yNnD`KuR#K_9Y1TS`rQg?Vu2-=5*nwB1a@UvY`-B-i zcotm{sfM{xNz)o?RZDfdNoBhV%AyU9=V>g`co-S&@3@V7bk0A2i-C@MuoK%?@`W(u zvS|)1&LD*4zLWC^JPs^Qv3PKf@#*4TH;koGuVVTgk4dWE3h`X(A%i68Z8>~1AUuJk>+yF2vyoj6|C-NRyOlxDLD+F;Sx zcwB8_Wqi3@re13@GBS!MELUFmN-Pp`-n$W&wvo{9v$b;D?I{*)KcqA`BLc`4ehHtptJQYJ!6=W*&uu@{{zBtmL}en6++ zM2Rw@vx~7Ft#+Hq`GfeGB3dY9OnV5!KJ9uFq(tk0;>f5|dUqX1b!+)9V-r(Jq-%a; ze9x9=bCd0@H72L#sJ81IoIgsnu}Qzy#Kcn*Wh9<4+`N7Pse1{PsNZX&JfC7|luozF zk)sdLXgDv|Or}U?GD8>zRCl-Wq@>g7knvL#GCr%@HJZ3EfktB+&qy-45&Tq!tVq-8 z_n2Ht}`(;2SA}%WNUMS zKnDr;elKXm{hYAhMIi{gZMK$fpgV1vTPw-lG4`->Nkh@~}{p^i7g>-y?dM7y}OAJf@@cABBC^_ z%Nz8&L42KiItTWG>(Fta-@r%HI9@enSGy`k#0Q=92JxmOiquG z&PkM!afBy?2t4b~K80X;yGqb|tsayY_s=k6h`LKuSqp1#&~ zg>(ega}$z&JLKHcw|Mk@XA)YL5Q5!Gg+ih5n(hgEIt2YH&T?~io2l7_1bXspJT~mq ztE5sXrVk&XzOzBE8{owm*uAcM6OryC1$3(0v|@AU$U0)U)FLJjyFBs>&)sxUmRgW5 z3Jy=_xp=1yLZU(kC+2bO*GHe`2R?X)naLv73rGhZp@dXcaPaszQrqM}HpYPRl1+MSS<RlSuHWr^+twFWX=kA?NHZ~jdx-q{sE-BO|;h#V`KKf5+HN0gFe9fam}6Gqg5WlJStxE}nFcO*EuzOzeZ?8yGr? z*SzQZ|2*{d*WmNo z*Facazi1c9|A+efA=@ZoN{U2kyD$1w#0)R{idS?EQRKvVF?u^N{l1_=gjNYEOB~EG zm?}g9E?SoZPK*ZW__dW3T>R325;GW!nppYlkT6Fn8TdL1E)ERGjWevao%YE`I>dlP$Vp#v59@nfY&(u84Z7;37Q{gK}&1U zaUQxwx_D=^cV#+WJ4Q)VWcivDAhdG`wQlrnlym_UR^lnmSIj^F=eV>+khHZ}i&hd9 z4~LX-95Ep+Qu`n+dVm-w&;MXp>ySGWBghEDGym!TBpO_^Fkl2vC*dS=FS6R$*o{JB ziQ@ctcXvFD%eJ>}7qp&4YIn^>Xrxv9*4|)J;K_IjF}xb*?tqv#BN?w+Na0jplMKkP$E z85&m`5NbaqYY>tx?7*kj?&A|4d+Y)g5RVoxK_ z@N@6V^S}OS8!O#fmcnx2-~^?yG^3?FW2Fq`QkHBc&CF~*IrnYy49E1c;d_~!87lUG zb$gbUK1PHn6hE@TCK*b zBIt)Fc4Ek@eqh^WqL6mA;%F~OJQ2sa)mwFXtscgN%q|`!47D3|AY&gwfx;uQ5ors7 z5JXYH&gL4P=b?2(l-SI8j@Kz6kd_~MM~<&wYLoLl!ax%#4OZ~$zxZB$>rc;d<&%}< zu=zU=rTDRTNS?ov<<5E=-$*Vzzs`FfKZen6R5LYOrg3Z2EhsIKk)_)beDS4#?lTuj z3%7v?Bwu>UE%Fb3&n&femVD8pvEAg^^Ba8d2aa?0)CBlGm1d8ir7<&_l=cagb&ECb ztRrc8;cH8rdGj2lREB#u&(W{8h=gQr@h~G3(?o+fHDS)MqN0%oU1-0D3z znsfz0*YcHTZ*cylH7boZ(nv0Dg;ZOP?trx{FYU5?ch@a^1)uozB^R|S&HnMSbsbeQ zQqck}LKY7lU~_YepdS%q{jmz$@n~#p5t7do_y_;^`#Ev?V0@HlG?F(x{$T``+V(oa zI>*!DP3*vd1y)w>C8*si(a&!@5+?bcdaa7?2k!d^=!X599ok3D8l6t(Z%tHXt;R}) zMWbxYnL=TuM(EfFQ-GBb{YIaDx8laf!XV=KNn*b~VPm0BjGo$bL*VQeB6aL=lc5^XeUkl==j5nLC6EKTH4lvssptR)hbG=>O`5S~LvB9jDI z2;xy_{2oFf;v!SWHe7>4o*^NZJD~me4j>1}i@O#noL!q|<9#X?phUu<+cM@K8YNr< zB2w--G<$~Vkren^#mBfp5TYUvp_%NHXF{-)K3_$Vh>Ew{}^+Q*%v(vPiA==y@T75?I0iXZkT5O;nkG-wnOF$|OLEt_U5|b`S9OkErAZm4ZLWbq{+~#?vgK;Xjf}A zw$>RbPmr3JA?h?;j;;`daWB|MI(3}21kEbbi>JwDv)sP&qT`1sOSjWY{0pCaw#8-> za#?|nB+?iTE|xfUpv-;Kd%ovB3R%JVm+o=-+9p5#qYq<*6m!lN}VbLhtce1`pw$2WpH!m^}*$Wqt15S&zq4B3Al2l*hA{ z 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%0A$44sux_RmeTwXDkR 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�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

    XvSU&gY4DY$Kg8?Pcfa{yLMD_vL*an(b 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%0ATYyv_+S<}s7;AZuLW)YsG$webBWCf{>M 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 z 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 dtlhiYa?KA)j)GvX#+EpfR569CvqGXv`z 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 Jy`Vo8tAajPaH6 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νXw-vOgna3cY98UBH_yMa1D|U6 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 Date: Tue, 13 Apr 2021 21:56:48 +0200 Subject: [PATCH 10/15] Fixes linking against libz --- Dockerfile.windows | 4 ++-- Makefile | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile.windows b/Dockerfile.windows index ba97ac8..69fe6e1 100644 --- a/Dockerfile.windows +++ b/Dockerfile.windows @@ -89,7 +89,7 @@ RUN git clone -b libgcrypt-1.8.5 --depth 1 git://git.gnupg.org/libgcrypt.git && RUN git clone -b v1.2.11 --depth 1 https://github.com/madler/zlib && \ cd zlib && \ git reset --hard cacf7f1d4e3d44d871b605da3b647f07d718623f && \ - CC=x86_64-w64-mingw32-gcc AR=x86_64-w64-mingw32-ar ./configure --static --prefix=/depends/x86_64-w64-mingw32 && \ + CC=x86_64-w64-mingw32-gcc AR=x86_64-w64-mingw32-ar ./configure --static --prefix=/usr/x86_64-w64-mingw32 && \ make -j$THREADS && \ make -j$THREADS install && \ rm -rf $(pwd) @@ -164,7 +164,7 @@ RUN git clone -b tor-0.4.5.7 --depth 1 https://git.torproject.org/tor.git && \ --enable-static-tor \ --with-libevent-dir=/usr/local/libevent \ --with-openssl-dir=/usr/local/openssl \ - --with-zlib-dir=/depends/x86_64-w64-mingw32 \ + --with-zlib-dir=/usr/x86_64-w64-mingw32 \ --disable-tool-name-check \ --enable-fatal-warnings \ --prefix=/usr/local/tor \ diff --git a/Makefile b/Makefile index 110955b..d4781bf 100644 --- a/Makefile +++ b/Makefile @@ -56,7 +56,7 @@ depends: windows: mkdir -p build/$(target)/release - cd build/$(target)/release && cmake -D STATIC=ON -DREPRODUCIBLE=$(or ${SOURCE_DATE_EPOCH},OFF) -DTOR_VERSION=$(or ${TOR_VERSION}, OFF) -DOPENVR=ON -DQML=ON -DWITH_SCANNER=ON -DTOR_BIN=$(or ${TOR_BIN},OFF) -D DEV_MODE=$(or ${DEV_MODE},OFF) -D BUILD_TAG=$(tag) -D CMAKE_BUILD_TYPE=Debug -D CMAKE_TOOLCHAIN_FILE=$(root)/$(target)/share/toolchain.cmake ../../.. && $(MAKE) + cd build/$(target)/release && cmake -D STATIC=ON -DZLIB_ROOT=/usr/x86_64-w64-mingw32/ -DREPRODUCIBLE=$(or ${SOURCE_DATE_EPOCH},OFF) -DTOR_VERSION=$(or ${TOR_VERSION}, OFF) -DOPENVR=ON -DQML=ON -DWITH_SCANNER=ON -DTOR_BIN=$(or ${TOR_BIN},OFF) -D DEV_MODE=$(or ${DEV_MODE},OFF) -D BUILD_TAG=$(tag) -D CMAKE_BUILD_TYPE=Debug -D CMAKE_TOOLCHAIN_FILE=$(root)/$(target)/share/toolchain.cmake ../../.. && $(MAKE) windows-mxe-release: CMAKEFLAGS += -DBUILD_TAG="win-x64" From de5bea9cdf387720e79b589c56b887ab49fd947b Mon Sep 17 00:00:00 2001 From: dsc Date: Wed, 14 Apr 2021 01:15:42 +0200 Subject: [PATCH 11/15] Fix balance display in streamer mode --- src/vr/qml/common/MyStackViewPage.qml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/vr/qml/common/MyStackViewPage.qml b/src/vr/qml/common/MyStackViewPage.qml index 792805e..cfac0a2 100755 --- a/src/vr/qml/common/MyStackViewPage.qml +++ b/src/vr/qml/common/MyStackViewPage.qml @@ -241,15 +241,17 @@ Rectangle { text: { let rtn = "Balance: "; try { - if(!appWindow.streamerMode) + if(!appWindow.streamerMode) { rtn += WowletVR.wowToFiat(appWindow.spendable); + return rtn + " " + appWindow.fiatSymbol + } else rtn += "HIDDEN"; } catch(err) { rtn += "ERROR"; } - return rtn + " " + appWindow.fiatSymbol + return rtn; } color: Style.fontColorDimmed } From bcc0aeeaa92eed442293f9adfa1fa4c95f748eb3 Mon Sep 17 00:00:00 2001 From: dsc Date: Wed, 14 Apr 2021 04:25:20 +0200 Subject: [PATCH 12/15] Change websocket server --- src/appcontext.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/appcontext.h b/src/appcontext.h index 1372d10..ad334ef 100644 --- a/src/appcontext.h +++ b/src/appcontext.h @@ -58,8 +58,7 @@ public: QString defaultWalletDir; QString defaultWalletDirRoot; QString tmpTxDescription; - QString wsUrl = "51.195.148.161:1338"; -// QString wsUrl = "feathercitimllbmdktu6cmjo3fizgmyfrntntqzu6xguqa2rlq5cgid.onion"; + QString wsUrl = "6wku2m4zrv6j666crlo7lzofv6ud6enzllyhou3ijeigpukymi37caad.onion"; QString walletPath; QString walletPassword = ""; From ee247cba8afa1708c0d50556aabf837b6d39985a Mon Sep 17 00:00:00 2001 From: dsc Date: Wed, 14 Apr 2021 04:37:01 +0200 Subject: [PATCH 13/15] Disable saving of QR code for now --- src/vr/qml/wallet/ReceivePage.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/vr/qml/wallet/ReceivePage.qml b/src/vr/qml/wallet/ReceivePage.qml index 73e1c59..41b04f2 100755 --- a/src/vr/qml/wallet/ReceivePage.qml +++ b/src/vr/qml/wallet/ReceivePage.qml @@ -129,6 +129,7 @@ MyStackViewPage { text: "Save QR image" Layout.preferredHeight: 70 Layout.fillWidth: true + visible: false onClicked: { From 395cbcd9db9c49dd692ef9d90323228768c1df44 Mon Sep 17 00:00:00 2001 From: dsc Date: Wed, 14 Apr 2021 21:55:06 +0200 Subject: [PATCH 14/15] Fixes builds for Linux --- src/CMakeLists.txt | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 17fe93c..6d477ee 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,9 +5,11 @@ set(CMAKE_AUTOUIC ON) # pthread find_package(Threads REQUIRED) -# PNG -find_package(ZLIB REQUIRED) -find_package(PNG REQUIRED) +if(QML) + # PNG + find_package(ZLIB REQUIRED) + find_package(PNG REQUIRED) +endif() # Compile these source files (.h/.cpp) file(GLOB SOURCE_FILES @@ -61,7 +63,10 @@ add_subdirectory(libwalletqt) add_subdirectory(model) add_subdirectory(utils) add_subdirectory(openpgp) -add_subdirectory(QR-Code-scanner) + +if(WITH_SCANNER) + add_subdirectory(QR-Code-scanner) +endif() qt5_add_resources(RESOURCES assets.qrc) @@ -262,12 +267,11 @@ target_link_libraries(wowlet PUBLIC openpgp Threads::Threads ${QRENCODE_LIBRARY} - qrdecoder ) # Link scanner if(WITH_SCANNER) - target_link_libraries(wowlet PUBLIC qrscanner) + target_link_libraries(wowlet PUBLIC qrdecoder qrscanner) if(LINUX AND NOT ANDROID) target_link_libraries(wowlet PUBLIC jpeg @@ -309,8 +313,8 @@ if(STATIC) Qt5::QSvgIconPlugin Qt5::QSvgPlugin) if(UNIX AND NOT APPLE) - target_link_libraries(wowlet - Qt5::QXcbIntegrationPlugin) + target_link_libraries(wowlet PUBLIC + Qt5::QXcbIntegrationPlugin) endif() endif() From a5f3b915e5d84b3f345666704af7f79fae5f6fd5 Mon Sep 17 00:00:00 2001 From: dsc Date: Wed, 14 Apr 2021 21:55:30 +0200 Subject: [PATCH 15/15] get rekt --- src/vr/qml/AboutPage.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vr/qml/AboutPage.qml b/src/vr/qml/AboutPage.qml index a87330b..3829290 100644 --- a/src/vr/qml/AboutPage.qml +++ b/src/vr/qml/AboutPage.qml @@ -48,7 +48,7 @@ ColumnLayout { Layout.rightMargin: 40 Layout.fillWidth: true fontSize: 21 - text: "Shoutouts: matzman666, qvqc, ez, Gatto, RAGEHAÜZ, cisme, wowario, lza_menace, jwinterm, nioc, asymptotically, azy, selsta, kico, laura, thrmo, rottensox, GNVR, solar, bl4sty, scoobybejesus, Valve Corporation for OpenVR" + text: "Shoutouts: matzman666, qvqc, ez, Gatto, RAGEHAÜZ, cisme, wowario, lza_menace, jwinterm, nioc, asymptotically, azy, selsta, kico, laura, thrmo, GNVR, solar, bl4sty, scoobybejesus, Valve Corporation for OpenVR" wrap: true }

    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 literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/video/color.png b/src/vr/assets/img/video/color.png new file mode 100755 index 0000000000000000000000000000000000000000..be8926f2294ca1532c9c9fc128ccaaa96b6c60e4 GIT binary patch literal 1475 zcmeAS@N?(olHy`uVBq!ia0y~yU=n3uVC>^y0*b6ZpJoE27>k44ofy`glX(f`u%tWs zIx;Y9?C1WI$O`0h7I;J!GcfQS24TkI`72Tw7+51bT^vIy;@)00WMnW9U|#skd~Vi{ z*#}wj848~BGjP>21pHubI3&*?@{eJ`2X=;5dj^d^j1CV+rA9+zG;NG#hta|TYkBw} a@3(;6S>?=W*K&acFN3G6pUXO@geCx-{NlL) literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/video/dimmer.png b/src/vr/assets/img/video/dimmer.png new file mode 100755 index 0000000000000000000000000000000000000000..7c2f6a12d9d1397a2715b06ae78a9c8df3df6439 GIT binary patch literal 12392 zcmeI&F-ikL6vpvyjF3$vrbrV6aZlg@1R<9tL}M z%N;egPNbQVTShmxWn0XqVY8Nfo6e}5t9-q0+tPf}-b|~9-EMr4+M`rGj(5|z_)fU=; literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/wizard.png b/src/vr/assets/img/wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..31426b5e07b072c635ecdcd4c5da71ee7a81a1ac GIT binary patch literal 73612 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 KMNUMnLSTZWx_Bu7 literal 0 HcmV?d00001 diff --git a/src/vr/main.qml b/src/vr/main.qml new file mode 100644 index 0000000..2660c12 --- /dev/null +++ b/src/vr/main.qml @@ -0,0 +1,353 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.2 +import QtGraphicalEffects 1.0 +import QtQuick.Window 2.0 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Dialogs 1.2 + +import "." +import "mock/Windows.js" as Windows +import "mock/Version.js" as Version +import "mock/NetworkType.js" as NetworkType +import "mock/Settings.js" as Settings +import "mock" + +import "qml/common" +import "qml/." + +import wowlet.Wallet 1.0 +import wowlet.WalletManager 1.0 + +Rectangle { + id: appWindow + width: 1600 + height: 800 + color: "#1b2939" + + property var currentWallet; + property bool disconnected: currentWallet ? currentWallet.disconnected : false + property string walletTitle: "lol123" + property string walletPath: "" + property string statusText: "Idle" + property string balanceFormatted: "Balance: 25928.9543 WOW (+3902.32 WOW unconfirmed)" + property bool wsConnected: false + property int connectionStatus: Wallet.ConnectionStatus_Disconnected; + + property var balance: 0.0 + property var spendable: 0.0 + + property DashboardPage dashboardPage: DashboardPage { + visible: false + } + + property AboutPage aboutPage: AboutPage { + visible: false + } + + property WalletPage walletPage: WalletPage { + visible: false + } + + MyDialogOkPopup { + id: messagePopup + function showMessage(title, text) { + dialogTitle = title + dialogText = text + open() + } + } + + MyDialogOkCancelPopup { + id: enterPasswordDialog + dialogTitle: "Enter Password" + dialogWidth: 700 + dialogHeight: 400 + + dialogContentItem: ColumnLayout { + RowLayout { + Layout.topMargin: 16 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + MyText { + text: "Password: " + } + + MyTextField { + id: walletOpenPassword + keyBoardUID: 590 + color: "#cccccc" + text: "" + Layout.fillWidth: true + font.pointSize: 20 + function onInputEvent(input) { + walletOpenPassword.text = input + } + } + } + } + + onClosed: { + if (okClicked) { + if(walletOpenPassword.text === "") + return messagePopup.showMessage("Password empty", "Please fill in a password."); + + ctx.onOpenWallet(appWindow.walletPath, walletOpenPassword.text); + } + } + function openPopup() { + open() + } + } + + MyDialogOkCancelPopup { + id: createWalletDialog + dialogTitle: "Create New Wallet" + dialogWidth: 700 + dialogHeight: 400 + + dialogContentItem: ColumnLayout { + RowLayout { + Layout.topMargin: 16 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + MyText { + text: "Name: " + } + + MyTextField { + id: newWalletName + keyBoardUID: 590 + color: "#cccccc" + text: "" + Layout.fillWidth: true + font.pointSize: 20 + function onInputEvent(input) { + newWalletName.text = input + } + } + } + + RowLayout { + Layout.topMargin: 16 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + MyText { + text: "Password: " + } + + MyTextField { + id: newWalletPassword + keyBoardUID: 591 + color: "#cccccc" + text: "" + Layout.fillWidth: true + font.pointSize: 20 + function onInputEvent(input) { + newWalletPassword.text = input + } + } + } + + MyText { + fontSize: 16 + text: "The password field is optional." + } + + Item { + Layout.fillWidth: true + Layout.fillHeight: true + } + } + onClosed: { + if (okClicked) { + if(newWalletName.text === "") + return messagePopup.showMessage("Invalid name", "Please name the wallet."); + + ctx.createWalletWithoutSpecifyingSeed(newWalletName.text, newWalletPassword.text); + } + } + function openPopup() { + open() + } + } + + StackView { + id: mainView + anchors.fill: parent + + pushEnter: Transition { + PropertyAnimation { + property: "x" + from: mainView.width + to: 0 + duration: 300 + easing.type: Easing.OutCubic + } + } + pushExit: Transition { + PropertyAnimation { + property: "x" + from: 0 + to: -mainView.width + duration: 300 + easing.type: Easing.OutCubic + } + } + popEnter: Transition { + PropertyAnimation { + property: "x" + from: -mainView.width + to: 0 + duration: 300 + easing.type: Easing.OutCubic + } + } + popExit: Transition { + PropertyAnimation { + property: "x" + from: 0 + to: mainView.width + duration: 300 + easing.type: Easing.OutCubic + } + } + + initialItem: dashboardPage + } + + Component.onCompleted: { + dashboardPage.onPageCompleted(); + + if(typeof ctx !== 'undefined') { + ctx.initTor(); + ctx.initWS(); + } + } + + Connections { + target: ctx + + function onWsConnected() { + console.log("onWsConnected") + appWindow.wsConnected = true; + } + + function onWsDisconnected() { + console.log("onWsDisconnected") + appWindow.wsConnected = false; + } + + function onWalletOpened(wallet) { + console.log("onWalletOpened()"); + + appWindow.currentWallet = wallet; + appWindow.walletTitle = ctx.walletName; + mainView.push(appWindow.walletPage); + appWindow.walletPage.onPageCompleted(); + + appWindow.currentWallet.connectionStatusChanged.connect(onConnectionStatusChanged); + } + + // function onWalletOpened(Wallet *wallet) { + + // currentWallet.heightRefreshed.connect(onHeightRefreshed); + // currentWallet.refreshed.connect(onWalletRefresh) + // currentWallet.updated.connect(onWalletUpdate) + // currentWallet.newBlock.connect(onWalletNewBlock) + // currentWallet.moneySpent.connect(onWalletMoneySent) + // currentWallet.moneyReceived.connect(onWalletMoneyReceived) + // currentWallet.unconfirmedMoneyReceived.connect(onWalletUnconfirmedMoneyReceived) + // currentWallet.transactionCreated.connect(onTransactionCreated) + // currentWallet.connectionStatusChanged.connect(onWalletConnectionStatusChanged) + // currentWallet.deviceButtonRequest.connect(onDeviceButtonRequest); + // currentWallet.deviceButtonPressed.connect(onDeviceButtonPressed); + // currentWallet.walletPassphraseNeeded.connect(onWalletPassphraseNeededWallet); + // currentWallet.transactionCommitted.connect(onTransactionCommitted); + + // middlePanel.paymentClicked.connect(handlePayment); + // } + + function onBlockchainSync(height, target) { + let blocks = (target > height) ? (target - height) : "?"; + let heightText = "Blockchain sync: " + blocks + " blocks remaining"; + appWindow.statusText = heightText; + } + + function onRefreshSync(height, target) { + let blocks = (target >= height) ? (target - height) : "?"; + let heightText = "Wallet sync: " + blocks + " blocks remaining"; + appWindow.statusText = heightText; + } + + function onWalletClosed() { + console.log("onWalletClosed"); + + appWindow.currentWallet.connectionStatusChanged.disconnect(onConnectionStatusChanged); + + appWindow.walletTitle = ""; + appWindow.balanceFormatted = ""; + appWindow.balance = 0.0; + appWindow.spendable = 0.0; + appWindow.connectionStatus = Wallet.ConnectionStatus_Disconnected; + } + + function onBalanceUpdatedFormatted(fmt) { + appWindow.balanceFormatted = fmt; + } + + function onBalanceUpdated(balance, spendable) { + appWindow.balance = balance; + appWindow.spendable = spendable; + } + + function onWalletOpenedError(err) { + messagePopup.showMessage("Error", err); + } + + function onWalletCreatedError(err) { + messagePopup.showMessage("Error", err); + } + + function onWalletCreated(wallet) { + console.log("walletCreated"); + } + + function onSynchronized() { + appWindow.statusText = "Synchronized"; + + appWindow.onConnectionStatusChanged(Wallet.ConnectionStatus_Connected); + console.log("onSynchronized"); + } + + function onWalletOpenPasswordNeeded(invalidPassword, path) { // bool, str + enterPasswordDialog.openPopup(); + } + + function onInitiateTransaction() { + console.log("transactionStarted"); + } + + function onCreateTransactionError(message) { // str + console.log("transactionError", message); + } + + function onCreateTransactionSuccess(tx, address) { // PendingTransaction + // auto-commit all tx's + //m_ctx->currentWallet->commitTransactionAsync(tx); + console.log("onCreateTransactionSuccess", address) + } + + function onTransactionCommitted(status, tx, txid) { // bool,PendingTransaction,stringlist + console.log("onTransactionCommitted", status) + } + } + + function onConnectionStatusChanged(status) { + console.log("onConnectionStatusChanged", status) + appWindow.connectionStatus = status; + } +} diff --git a/src/vr/qml.qrc b/src/vr/qml.qrc new file mode 100644 index 0000000..3b5d696 --- /dev/null +++ b/src/vr/qml.qrc @@ -0,0 +1,87 @@ + + + assets/img/common/backarrow.svg + assets/img/common/check.svg + assets/img/audio/speaker/speaker_on.svg + assets/img/audio/speaker/speaker_off.svg + assets/img/audio/media_keys/outline_play_pause_white_24dp.svg + assets/img/audio/media_keys/outline_skip_next_white_24dp.svg + assets/img/audio/media_keys/outline_skip_previous_white_24dp.svg + assets/img/audio/media_keys/outline_stop_white_24dp.svg + assets/img/main_menu_icons/audio_tab_icon.svg + assets/img/main_menu_icons/bindings_tab_icon.svg + assets/img/main_menu_icons/chaperone_tab_icon.svg + assets/img/main_menu_icons/motion_tab_icon.svg + assets/img/main_menu_icons/offsets_tab_icon.svg + assets/img/main_menu_icons/settings_tab_icon.svg + assets/img/main_menu_icons/space_fix_tab_icon.svg + assets/img/main_menu_icons/statistics_tab_icon.svg + assets/img/main_menu_icons/steamvr_tab_icon.svg + assets/img/main_menu_icons/utilities_tab_icon.svg + assets/img/main_menu_icons/video_tab_icon.svg + assets/img/main_menu_icons/rotation_tab_icon.svg + assets/img/send.png + assets/img/receive.svg + assets/img/info.png + assets/img/confirmed.png + assets/img/expired.png + assets/img/illuminati.png + assets/img/chest.png + assets/img/tutorial.png + assets/img/wizard.png + assets/img/hypnotoad.png + assets/img/grass.png + assets/img/dog.gif + assets/img/dog2.gif + assets/img/cpus.png + + assets/img/status_disconnected.svg + assets/img/status_connected.svg + assets/img/status_waiting.svg + assets/img/status_lagging.svg + + mock/NetworkType.js + mock/OverlayController.js + mock/Settings.js + mock/Translation.js + mock/Version.js + mock/Windows.js + + main.qml + qml/common/HourComboBox.qml + qml/common/MinuteSecondComboBox.qml + qml/common/MyDialogOkCancelPopup.qml + qml/common/MyResources.qml + qml/common/MyTextField.qml + qml/common/MyRadioButton.qml + qml/common/MyDialogOkPopup.qml + qml/common/MyPushButton2.qml + qml/common/MyComboBox.qml + qml/common/TimeAssembly.qml + qml/common/LineSeparator.qml + qml/common/FullWidthSliderBox.qml + qml/common/MyText.qml + qml/common/MyToggleButton.qml + qml/common/MyPushButton.qml + qml/common/MySlider.qml + qml/common/mainwidget.qml + qml/common/MyNumPad.qml + qml/common/MyNumPadButton.qml + qml/common/MyNumPadSendAmount.qml + qml/common/MyStackViewPage.qml + qml/wallet/ReceivePage.qml + qml/wallet/HistoryTable.qml + qml/wallet/WalletDashBoardPage.qml + + qml/DashboardPage.qml + qml/WalletPage.qml + qml/AboutPage.qml + + qml/wallet/send/SendPage.qml + qml/wallet/send/SendPageDashboard.qml + qml/wallet/send/SendPageNavBack.qml + qml/wallet/send/SendPagePIN.qml + qml/wallet/send/SendPageQR.qml + qml/wallet/send/SendPageTransfer.qml + + \ No newline at end of file diff --git a/src/vr/qml/AboutPage.qml b/src/vr/qml/AboutPage.qml new file mode 100644 index 0000000..4a4cc2c --- /dev/null +++ b/src/vr/qml/AboutPage.qml @@ -0,0 +1,78 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.2 + +import "." +import "common" + +ColumnLayout { + id: root + spacing: 30 + width: 1600 + height: 800 + + RowLayout { + Layout.topMargin: 40 + Layout.leftMargin: 40 + Layout.rightMargin: 40 + Layout.fillWidth: true + Layout.preferredHeight: 200 + + ColumnLayout { + Layout.preferredWidth: 256 + Layout.maximumWidth: 256 + + Image { + Layout.preferredHeight: 256 + Layout.preferredWidth: 256 + + source: "qrc:/illuminati" + } + + + } + + ColumnLayout { + Layout.preferredWidth: 256 + + MyText { + Layout.leftMargin: 40 + Layout.rightMargin: 40 + Layout.fillWidth: true + text: "Wowlet VR is an alternative QML interface for wowlet and was made over a 4 week period by eating lots of pizzas. It is the world's first cryptocurrency wallet with support for VR. Wowlet is Free and open-source (BSD-3) software and the source code can be studied on git.wownero.com/wowlet/wowlet" + wrap: true + } + + + } + } + + MyText { + Layout.leftMargin: 40 + Layout.rightMargin: 40 + Layout.fillWidth: true + text: "By \"dsc\" - April 2021. Shoutouts: OpenVR-AdvancedSettings, qvqc, Gatto, cisme, wowario, lza_menace, jwinterm, nioc, asymptotically, azy, selsta, kico, laura, thrmo, rottensox, solar, bl4sty, scoobybejesus (sorry if I forgot anyone!)" + wrap: true + } + + MyPushButton { + text: "Back" + Layout.leftMargin: 40 + Layout.preferredWidth: 220 + + onClicked: { + mainView.pop(); + } + } + + Item { + Layout.fillWidth: true + Layout.fillHeight: true + } + + function onPageCompleted(previousView){ + + } +} + +// OverlayController.exitApp(); diff --git a/src/vr/qml/CreateWalletDialog.qml b/src/vr/qml/CreateWalletDialog.qml new file mode 100644 index 0000000..9f15dba --- /dev/null +++ b/src/vr/qml/CreateWalletDialog.qml @@ -0,0 +1,12 @@ +// import QtQuick 2.7 +// import QtQuick.Controls 2.0 +// import QtQuick.Layouts 1.2 +// import QtGraphicalEffects 1.0 +// import QtQuick.Window 2.0 +// import QtQuick.Controls.Styles 1.4 +// import QtQuick.Dialogs 1.2 + +// //import ovrwow.wowletvr 1.0 + +// import "common" + diff --git a/src/vr/qml/DashboardPage.qml b/src/vr/qml/DashboardPage.qml new file mode 100644 index 0000000..dc93a14 --- /dev/null +++ b/src/vr/qml/DashboardPage.qml @@ -0,0 +1,183 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.2 + +import wowlet.NetworkType 1.0 +import wowlet.WalletKeysFiles 1.0 + +import "." +import "common" + +ColumnLayout { + id: root + width: 1600 + height: 800 + + property var walletList: []; + property string enteredColor: "#365473" + property string exitedColor: "#2c435d" + property string pressedColor: "#406288" + + Layout.fillWidth: true + Layout.fillHeight: true + + ColumnLayout { + Layout.fillWidth: true + Layout.preferredHeight: 128 + Layout.leftMargin: 40 + Layout.rightMargin: 40 + + RowLayout { + MyText { + text: "Welcome to Wowlet VR" + font.pointSize: 24 + Layout.leftMargin: 0 + } + + Item { + Layout.fillWidth: true + Layout.preferredHeight: 50 + } + + Rectangle { + Layout.preferredWidth: 720 + Layout.preferredHeight: 50 + color: "transparent" + + MyText{ + anchors.right: parent.right + anchors.bottom: parent.bottom + fontSize: 14 + text: "Version 0.1 (Qt " + qtRuntimeVersion + ")" + } + } + } + + Rectangle { + color: "#cccccc" + height: 1 + Layout.topMargin: 10 + Layout.fillWidth: true + } + } + + Flow { + id: flow + spacing: 20 + clip: true + + property int itemHeight: 192 + property int maxRows: 6 + + Layout.topMargin: 30 + Layout.fillWidth: true + Layout.leftMargin: 40 + + + Repeater { + id: recentList + clip: true + model: walletList + + delegate: Rectangle { + // inherited roles from walletKeysFilesModel: + // index, fileName, modified, accessed, path, networktype, address + // @TODO: maybe enforce networktype === 0 (mainnet) + + id: item + property var currentItem: walletList[index] + property bool about: currentItem.hasOwnProperty("about") + property bool create: currentItem.hasOwnProperty("create") + color: root.enteredColor + height: 256 + width: 256 + + Image { + width: 182 + height: 182 + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + anchors.bottomMargin: 10 + source: { + if(about) { + return "qrc:/hypnotoad"; + } else if(create) { + return "qrc:/wizard"; + } else { + return "qrc:/chest"; + } + } + } + + Text { + color: "white" + text: { + if(about) { + return "About"; + } else if(create) { + return "Create wallet"; + } else { + return currentItem['fileName'].replace(".keys", ""); + } + } + font.pointSize: 14 + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + anchors.topMargin: 14 + anchors.leftMargin: 14 + } + + MouseArea { + anchors.fill: parent + hoverEnabled: true + cursorShape: Qt.PointingHandCursor + + onEntered: { + parent.color = root.pressedColor + } + onExited: { + parent.color = root.enteredColor; + } + onClicked: { + if(about) { + mainView.push(aboutPage); + } else if(create) { + createWalletDialog.openPopup(); + } else { + appWindow.walletPath = currentItem['path']; + ctx.onOpenWallet(currentItem['path'], ""); + } + } + } + } + } + } + + Item { + Layout.fillWidth: true + Layout.fillHeight: true + } + + function onPageCompleted(previousView){ + console.log("list wallets"); + + let wallets = []; + if(typeof ctx !== 'undefined') + wallets = ctx.listWallets(); + + let _walletList = []; + + for(var i = 0; i != wallets.length; i++) { + if(i == 8) // draw 10 items at any time + break; + _walletList.push(wallets[i]); + } + + _walletList.push({"create": true}); + _walletList.push({"about": true}); + + root.walletList = _walletList; + } +} + +// OverlayController.exitApp(); diff --git a/src/vr/qml/WalletPage.qml b/src/vr/qml/WalletPage.qml new file mode 100755 index 0000000..2ad9604 --- /dev/null +++ b/src/vr/qml/WalletPage.qml @@ -0,0 +1,82 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.2 +import QtGraphicalEffects 1.0 +import QtQuick.Window 2.0 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Dialogs 1.2 + +import "." +import "common" +import "wallet" +import "wallet/send" + + +Rectangle { + width: 1600 + height: 800 + color: "transparent" + + property WalletDashBoardPage walletDashboardPage: WalletDashBoardPage { + stackView: walletView + visible: false + } + + property SendPage sendPage: SendPage { + stackView: walletView + visible: false + } + + property ReceivePage receivePage: ReceivePage { + stackView: walletView + visible: false + } + + StackView { + id: walletView + anchors.fill: parent + + pushEnter: Transition { + PropertyAnimation { + property: "x" + from: walletView.width + to: 0 + duration: 300 + easing.type: Easing.OutCubic + } + } + pushExit: Transition { + PropertyAnimation { + property: "x" + from: 0 + to: -walletView.width + duration: 300 + easing.type: Easing.OutCubic + } + } + popEnter: Transition { + PropertyAnimation { + property: "x" + from: -walletView.width + to: 0 + duration: 300 + easing.type: Easing.OutCubic + } + } + popExit: Transition { + PropertyAnimation { + property: "x" + from: 0 + to: walletView.width + duration: 300 + easing.type: Easing.OutCubic + } + } + + initialItem: walletDashboardPage + } + + function onPageCompleted() { + walletDashboardPage.onPageCompleted(); + } +} diff --git a/src/vr/qml/common/FullWidthSliderBox.qml b/src/vr/qml/common/FullWidthSliderBox.qml new file mode 100755 index 0000000..c8df999 --- /dev/null +++ b/src/vr/qml/common/FullWidthSliderBox.qml @@ -0,0 +1,93 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 + + +GroupBox { + // Public properties + // Overload + property alias headerMessage: headerText.text + property alias sliderText: steamDesktopForwardText.text + property alias sliderValue: steamDesktopForwardSlider.value + property alias lowerLimit: steamDesktopForwardSlider.from + property alias upperLimit: steamDesktopForwardSlider.to + property alias kbUID: steamDesktopForwardText.keyBoardUID + + + function onValueChanged(value) { + + } + + function onComponentComplete() { + + } + + + // Private properties + id: sliderBox + Layout.fillWidth: true + label: MyText { + id: headerText + leftPadding: 10 + text: "MISSING HEADER TEXT" + bottomPadding: -10 + } + background: Rectangle { + color: "transparent" + border.color: "#ffffff" + radius: 8 + } + + property real sliderStepSize: 0.10 + readonly property real rightLeftLimit: 4.0 + + ColumnLayout { + anchors.fill: parent + + LineSeparator { + } + + ColumnLayout { + RowLayout { + MyPushButton2 { + Layout.preferredWidth: 40 + text: "-" + onClicked: { + steamDesktopForwardSlider.value -= sliderStepSize + } + } + + MySlider { + id: steamDesktopForwardSlider + from: -rightLeftLimit + to: rightLeftLimit + stepSize: sliderStepSize + Layout.fillWidth: true + onValueChanged: { + sliderBox.onValueChanged(this.value) + } + } + + MyPushButton2 { + Layout.preferredWidth: 40 + text: "+" + onClicked: { + steamDesktopForwardSlider.value += sliderStepSize + } + } + + MyTextField { + id: steamDesktopForwardText + text: "0.0" + keyBoardUID: 611 + Layout.preferredWidth: 100 + Layout.leftMargin: 10 + horizontalAlignment: Text.AlignHCenter + } + } + } + } + Component.onCompleted: { + sliderBox.onComponentComplete() + } +} diff --git a/src/vr/qml/common/HourComboBox.qml b/src/vr/qml/common/HourComboBox.qml new file mode 100755 index 0000000..8d7655b --- /dev/null +++ b/src/vr/qml/common/HourComboBox.qml @@ -0,0 +1,49 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 + + +MyComboBox { + + model: [ + { value: 0, text: "00" }, + { value: 1, text: "01" }, + { value: 2, text: "02" }, + { value: 3, text: "03" }, + { value: 4, text: "04" }, + { value: 5, text: "05" }, + { value: 6, text: "06" }, + { value: 7, text: "07" }, + { value: 8, text: "08" }, + { value: 9, text: "09" }, + { value: 10, text: "10" }, + { value: 11, text: "11" }, + { value: 12, text: "12" }, + { value: 13, text: "13" }, + { value: 14, text: "14" }, + { value: 15, text: "15" }, + { value: 16, text: "16" }, + { value: 17, text: "17" }, + { value: 18, text: "18" }, + { value: 19, text: "19" }, + { value: 20, text: "20" }, + { value: 21, text: "21" }, + { value: 22, text: "22" }, + { value: 23, text: "23" }, + ] + + delegate: ItemDelegate { + width: parent.width + text: modelData.text + hoverEnabled: true + contentItem: MyText { + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + text: parent.text + color: parent.enabled ? "#ffffff" : "#909090" + } + background: Rectangle { + color: parent.pressed ? "#406288" : (parent.hovered ? "#365473" : "#2c435d") + } + } +} diff --git a/src/vr/qml/common/LineSeparator.qml b/src/vr/qml/common/LineSeparator.qml new file mode 100755 index 0000000..13656cf --- /dev/null +++ b/src/vr/qml/common/LineSeparator.qml @@ -0,0 +1,15 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 + +// Necessary for the project specific Components. +import ".." + +// Insert inside a ColumnLayout containing this and a RowLayout +// to neatly separate header and buttons. +Rectangle { + color: "#ffffff" + height: 1 + Layout.fillWidth: true + Layout.bottomMargin: 5 +} diff --git a/src/vr/qml/common/MinuteSecondComboBox.qml b/src/vr/qml/common/MinuteSecondComboBox.qml new file mode 100755 index 0000000..786282f --- /dev/null +++ b/src/vr/qml/common/MinuteSecondComboBox.qml @@ -0,0 +1,85 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 + + +MyComboBox { + + model: [ + { value: 0, text: "00" }, + { value: 1, text: "01" }, + { value: 2, text: "02" }, + { value: 3, text: "03" }, + { value: 4, text: "04" }, + { value: 5, text: "05" }, + { value: 6, text: "06" }, + { value: 7, text: "07" }, + { value: 8, text: "08" }, + { value: 9, text: "09" }, + { value: 10, text: "10" }, + { value: 11, text: "11" }, + { value: 12, text: "12" }, + { value: 13, text: "13" }, + { value: 14, text: "14" }, + { value: 15, text: "15" }, + { value: 16, text: "16" }, + { value: 17, text: "17" }, + { value: 18, text: "18" }, + { value: 19, text: "19" }, + { value: 20, text: "20" }, + { value: 21, text: "21" }, + { value: 22, text: "22" }, + { value: 23, text: "23" }, + { value: 24, text: "24" }, + { value: 25, text: "25" }, + { value: 26, text: "26" }, + { value: 27, text: "27" }, + { value: 28, text: "28" }, + { value: 29, text: "29" }, + { value: 30, text: "30" }, + { value: 31, text: "31" }, + { value: 32, text: "32" }, + { value: 33, text: "33" }, + { value: 34, text: "34" }, + { value: 35, text: "35" }, + { value: 36, text: "36" }, + { value: 37, text: "37" }, + { value: 38, text: "38" }, + { value: 39, text: "39" }, + { value: 40, text: "40" }, + { value: 41, text: "41" }, + { value: 42, text: "42" }, + { value: 43, text: "43" }, + { value: 44, text: "44" }, + { value: 45, text: "45" }, + { value: 46, text: "46" }, + { value: 47, text: "47" }, + { value: 48, text: "48" }, + { value: 49, text: "49" }, + { value: 50, text: "50" }, + { value: 51, text: "51" }, + { value: 52, text: "52" }, + { value: 53, text: "53" }, + { value: 54, text: "54" }, + { value: 55, text: "55" }, + { value: 56, text: "56" }, + { value: 57, text: "57" }, + { value: 58, text: "58" }, + { value: 59, text: "59" } + ] + + delegate: ItemDelegate { + width: parent.width + text: modelData.text + hoverEnabled: true + contentItem: MyText { + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + text: parent.text + color: parent.enabled ? "#ffffff" : "#909090" + } + background: Rectangle { + color: parent.pressed ? "#406288" : (parent.hovered ? "#365473" : "#2c435d") + } + } +} diff --git a/src/vr/qml/common/MyComboBox.qml b/src/vr/qml/common/MyComboBox.qml new file mode 100755 index 0000000..d9b915e --- /dev/null +++ b/src/vr/qml/common/MyComboBox.qml @@ -0,0 +1,73 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import "." // QTBUG-34418, singletons require explicit import to load qmldir file + + +ComboBox { + id: myComboBox + hoverEnabled: true + background: Rectangle { + color: parent.pressed ? "#406288" : (parent.activeFocus ? "#365473" : "#2c435d") + } + + contentItem: MyText { + leftPadding: 0 + rightPadding: parent.indicator.width + parent.spacing + text: parent.displayText + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + delegate: ItemDelegate { + width: myComboBox.width + text: modelData + hoverEnabled: true + contentItem: MyText { + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + text: parent.text + color: parent.enabled ? "#ffffff" : "#909090" + } + background: Rectangle { + color: parent.pressed ? "#406288" : (parent.hovered ? "#365473" : "#2c435d") + } + } + + indicator: Canvas { + x: parent.width - width - parent.rightPadding + y: parent.topPadding + (parent.availableHeight - height) / 2 + width: 13 + height: 7 + contextType: "2d" + + onPaint: { + if (!context) { + getContext("2d") + } + context.reset(); + context.lineWidth = 2 + context.moveTo(1, 1); + context.lineTo(Math.ceil(width / 2), height - 1); + context.lineTo(width - 1, 1); + context.strokeStyle = "#ffffff" + context.stroke() + } + } + + onHoveredChanged: { + if (hovered) { + forceActiveFocus() + } + } + + onActivated: { + if (activeFocus) { + MyResources.playActivationSound() + } + } + + Component.onCompleted: { + popup.background.color = "#2c435d" + } +} diff --git a/src/vr/qml/common/MyDialogOkCancelPopup.qml b/src/vr/qml/common/MyDialogOkCancelPopup.qml new file mode 100755 index 0000000..6540e79 --- /dev/null +++ b/src/vr/qml/common/MyDialogOkCancelPopup.qml @@ -0,0 +1,99 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 + +Popup { + id: myDialogPopup + + implicitHeight: parent.height + implicitWidth: parent.width + + property string dialogTitle: "" + property string dialogText: "" + property int dialogWidth: 600 + property int dialogHeight: 300 + + property Item dialogContentItem: MyText { + text: dialogText + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + Layout.fillWidth: true + } + + property bool okClicked: false + + closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent + + background: Rectangle { + anchors.left: parent.left + anchors.right: parent.right + color: "black" + opacity: 0.8 + } + + contentItem: Item { + Rectangle { + implicitWidth: dialogWidth + implicitHeight: dialogHeight + anchors.centerIn: parent + radius: 24 + color: "#1b2939" + border.color: "#cccccc" + border.width: 2 + ColumnLayout { + anchors.fill: parent + anchors.margins: 12 + MyText { + Layout.leftMargin: 16 + Layout.rightMargin: 16 + text: dialogTitle + } + Rectangle { + color: "#cccccc" + height: 1 + Layout.fillWidth: true + } + Item { + Layout.fillHeight: true + Layout.fillWidth: true + } + ColumnLayout { + id: dialogContent + } + Item { + Layout.fillHeight: true + Layout.fillWidth: true + } + RowLayout { + Layout.fillWidth: true + Layout.leftMargin: 24 + Layout.rightMargin: 24 + Layout.bottomMargin: 12 + MyPushButton { + implicitWidth: 200 + text: "Ok" + onClicked: { + okClicked = true + myDialogPopup.close() + } + } + Item { + Layout.fillWidth: true + } + MyPushButton { + implicitWidth: 200 + text: "Cancel" + onClicked: { + okClicked = false + myDialogPopup.close() + } + } + } + } + } + } + + Component.onCompleted: { + dialogContentItem.parent = dialogContent + } +} diff --git a/src/vr/qml/common/MyDialogOkPopup.qml b/src/vr/qml/common/MyDialogOkPopup.qml new file mode 100755 index 0000000..3865952 --- /dev/null +++ b/src/vr/qml/common/MyDialogOkPopup.qml @@ -0,0 +1,93 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 + +Popup { + id: myDialogPopup + + implicitHeight: parent.height + implicitWidth: parent.width + + property string dialogTitle: "" + property string dialogText: "" + property int dialogWidth: 800 + property int dialogHeight: 300 + + property Item dialogContentItem: MyText { + fontSize:16 + text: dialogText + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + Layout.fillWidth: true + } + + property bool okClicked: false + + closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent + + background: Rectangle { + color: "black" + opacity: 0.8 + } + + contentItem: Item { + Rectangle { + implicitWidth: dialogWidth + implicitHeight: dialogHeight + anchors.centerIn: parent + radius: 24 + color: "#1b2939" + border.color: "#cccccc" + border.width: 2 + ColumnLayout { + anchors.fill: parent + anchors.margins: 12 + MyText { + Layout.leftMargin: 16 + Layout.rightMargin: 16 + text: dialogTitle + } + Rectangle { + color: "#cccccc" + height: 1 + Layout.fillWidth: true + } + Item { + Layout.fillHeight: true + Layout.fillWidth: true + } + ColumnLayout { + id: dialogContent + } + Item { + Layout.fillHeight: true + Layout.fillWidth: true + } + RowLayout { + Layout.fillWidth: true + Layout.leftMargin: 24 + Layout.rightMargin: 24 + Layout.bottomMargin: 12 + Item { + Layout.fillWidth: true + } + MyPushButton { + implicitWidth: 200 + text: "Ok" + onClicked: { + okClicked = true + myDialogPopup.close() + } + } + Item { + Layout.fillWidth: true + } + } + } + } + } + + Component.onCompleted: { + dialogContentItem.parent = dialogContent + } +} diff --git a/src/vr/qml/common/MyNumPad.qml b/src/vr/qml/common/MyNumPad.qml new file mode 100644 index 0000000..84af802 --- /dev/null +++ b/src/vr/qml/common/MyNumPad.qml @@ -0,0 +1,136 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import "." + +ColumnLayout { + id: root + enabled: true + + property double disabledOpacity: 0.4 + property var code: []; + + signal resolvePressed(); + signal codeUpdated(var pin_code); + + function onButtonPress(val) { + code.push(val); + + if(code.length === 5) + code = [val]; + + codeUpdated(code); + } + + function reset() { + root.code = []; + } + + RowLayout { + spacing: 20 + + MyNumPadButton { + opacity: root.enabled ? 1 : disabledOpacity + text: "1" + onClicked: { + onButtonPress("1"); + } + } + + MyNumPadButton { + opacity: root.enabled ? 1 : disabledOpacity + text: "2" + onClicked: { + onButtonPress("2"); + } + } + + MyNumPadButton { + opacity: root.enabled ? 1 : disabledOpacity + text: "3" + onClicked: { + onButtonPress("3"); + } + } + } + + RowLayout { + spacing: 20 + + MyNumPadButton { + opacity: root.enabled ? 1 : disabledOpacity + text: "4" + onClicked: { + onButtonPress("4"); + } + } + + MyNumPadButton { + opacity: root.enabled ? 1 : disabledOpacity + text: "5" + onClicked: { + onButtonPress("5"); + } + } + + MyNumPadButton { + opacity: root.enabled ? 1 : disabledOpacity + text: "6" + onClicked: { + onButtonPress("6"); + } + } + } + + RowLayout { + spacing: 20 + + MyNumPadButton { + opacity: root.enabled ? 1 : disabledOpacity + text: "7" + onClicked: { + onButtonPress("7"); + } + } + + MyNumPadButton { + opacity: root.enabled ? 1 : disabledOpacity + text: "8" + onClicked: { + onButtonPress("8"); + } + } + + MyNumPadButton { + opacity: root.enabled ? 1 : disabledOpacity + text: "9" + onClicked: { + onButtonPress("9"); + } + } + } + + RowLayout { + spacing: 20 + + MyNumPadButton { + opacity: root.enabled ? 1 : disabledOpacity + text: "0" + onClicked: { + onButtonPress("0"); + } + } + + MyNumPadButton { + opacity: root.enabled ? 1 : disabledOpacity + + Layout.preferredWidth: 204 + fontSize: 16 + text: "Clear" + onClicked: { + root.code = [0,0,0,0]; + root.codeUpdated(root.code); + } + } + } +} diff --git a/src/vr/qml/common/MyNumPadButton.qml b/src/vr/qml/common/MyNumPadButton.qml new file mode 100644 index 0000000..8a7fac2 --- /dev/null +++ b/src/vr/qml/common/MyNumPadButton.qml @@ -0,0 +1,40 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 + +Rectangle { + id: root + property string text: "" + property int fontSize: 22 + property string enteredColor: "#365473" + property string exitedColor: "#2c435d" + property string pressedColor: "#406288" + property alias mouseArea: mouseArea + + signal clicked; + + Layout.preferredWidth: 92 + Layout.preferredHeight: 92 + color: root.exitedColor + + MyText { + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + color: "white" + text: root.text + fontSize: root.fontSize + fontBold: true + } + + MouseArea { + id: mouseArea + anchors.fill: parent + hoverEnabled: true + onEntered: parent.color = root.enteredColor + onExited: parent.color = root.exitedColor + onPressed: parent.color = root.pressedColor + onClicked: { + root.clicked(); + } + } +} \ No newline at end of file diff --git a/src/vr/qml/common/MyNumPadSendAmount.qml b/src/vr/qml/common/MyNumPadSendAmount.qml new file mode 100644 index 0000000..ede542b --- /dev/null +++ b/src/vr/qml/common/MyNumPadSendAmount.qml @@ -0,0 +1,172 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import "." + +RowLayout { + id: root + property double amount: 0.0; + property bool add: true; + + property string enteredColor: "#365473" + property string exitedColor: "#2c435d" + property string pressedColor: "#406288" + + signal amountUpdated(double amount); + + spacing: 24 + + function reset() { + root.amount = 0.0; + } + + MyNumPadButton { + id: minButton + mouseArea.enabled: false + fontSize: 18 + + Layout.preferredWidth: 128 + Layout.preferredHeight: 112 + + color: root.add ? root.exitedColor : root.enteredColor + + text: "-" + + MouseArea { + anchors.fill: parent + hoverEnabled: true + onEntered: { + if(!root.add) return; + parent.color = root.enteredColor + } + onExited: { + if(!root.add) return; + parent.color = root.exitedColor + } + onClicked: { + root.add = false; + plusButton.color = root.exitedColor + } + } + } + + MyNumPadButton { + id: plusButton + mouseArea.enabled: false + fontSize: 18 + + Layout.preferredWidth: 128 + Layout.preferredHeight: 112 + + color: root.add ? root.enteredColor : root.exitedColor + + text: "+" + + MouseArea { + anchors.fill: parent + hoverEnabled: true + onEntered: { + if(root.add) return; + parent.color = root.enteredColor + } + onExited: { + if(root.add) return; + parent.color = root.exitedColor + } + onClicked: { + root.add = true; + minButton.color = root.exitedColor + } + } + } + + Rectangle { + color: "#cccccc" + width: 1 + Layout.fillHeight: true + } + + MyNumPadButton { + fontSize: 18 + Layout.preferredWidth: 180 + Layout.preferredHeight: 112 + text: "0.001" + onClicked: { + root.add ? root.amount += 0.001 : root.amount -= 0.001; + if(root.amount <= 0.0) root.amount = 0.0; + amountUpdated(root.amount); + } + } + + MyNumPadButton { + fontSize: 18 + Layout.preferredWidth: 148 + Layout.preferredHeight: 112 + text: "0.01" + onClicked: { + root.add ? root.amount += 0.01 : root.amount -= 0.01; + if(root.amount <= 0.0) root.amount = 0.0; + amountUpdated(root.amount); + } + } + + MyNumPadButton { + fontSize: 18 + Layout.preferredWidth: 128 + Layout.preferredHeight: 112 + text: "0.1" + onClicked: { + root.add ? root.amount += 0.1 : root.amount -= 0.1; + if(root.amount <= 0.0) root.amount = 0.0; + amountUpdated(root.amount); + } + } + + MyNumPadButton { + fontSize: 18 + Layout.preferredWidth: 128 + Layout.preferredHeight: 112 + text: "1" + onClicked: { + root.add ? root.amount += 1.0 : root.amount -= 1.0; + if(root.amount <= 0.0) root.amount = 0.0; + amountUpdated(root.amount); + } + } + + MyNumPadButton { + fontSize: 18 + Layout.preferredWidth: 168 + Layout.preferredHeight: 112 + text: "10" + onClicked: { + root.add ? root.amount += 10.0 : root.amount -= 10.0; + if(root.amount <= 0.0) root.amount = 0.0; + amountUpdated(root.amount); + } + } + + MyNumPadButton { + fontSize: 18 + Layout.preferredWidth: 128 + Layout.preferredHeight: 112 + text: "100" + onClicked: { + root.add ? root.amount += 100.0 : root.amount -= 100.0; + if(root.amount <= 0.0) root.amount = 0.0; + amountUpdated(root.amount); + } + } + + MyNumPadButton { + fontSize: 18 + Layout.preferredWidth: 168 + Layout.preferredHeight: 112 + text: "1000" + onClicked: { + root.add ? root.amount += 1000.0 : root.amount -= 1000.0; + if(root.amount <= 0.0) root.amount = 0.0; + amountUpdated(root.amount); + } + } +} \ No newline at end of file diff --git a/src/vr/qml/common/MyPushButton.qml b/src/vr/qml/common/MyPushButton.qml new file mode 100755 index 0000000..be9d4b7 --- /dev/null +++ b/src/vr/qml/common/MyPushButton.qml @@ -0,0 +1,62 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.2 +import "." // QTBUG-34418, singletons require explicit import to load qmldir file + +Item { + id: root + property string text: "testy" + property string iconPath: "" + property bool hasIcon: iconPath !== "" + property bool hoverEnabled: true + property bool activationSoundEnabled: true + property string enteredColor: "#365473" + property string exitedColor: "#2c435d" + property string pressedColor: "#406288" + signal clicked; + + Layout.preferredHeight: 70 + + RowLayout { + anchors.left: parent.left + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + Layout.minimumHeight: 54 + + Image { + visible: hasIcon + source: iconPath + Layout.leftMargin: 20 + Layout.rightMargin: 20 + Layout.preferredWidth: 32 + Layout.preferredHeight: 32 + } + + MyText { + Layout.leftMargin: root.hasIcon ? 0 : 20 + Layout.rightMargin: root.hasIcon ? 0 : 20 + Layout.fillWidth: root.hasIcon ? true : false + Layout.alignment: root.hasIcon ? Qt.AlignLeft : Qt.AlignHCenter + text: root.text + fontSize: 16 + } + } + + Rectangle { + z: root.z - 1 + anchors.fill: root + Layout.fillWidth: root.Layout.fillWidth + color: root.down ? root.pressedColor : (root.activeFocus ? root.enteredColor : root.exitedColor) + + MouseArea { + anchors.fill: parent + hoverEnabled: true + onEntered: parent.color = root.enteredColor + onExited: parent.color = root.exitedColor + onPressed: parent.color = root.pressedColor + onClicked: { + root.clicked(); + } + } + } +} \ No newline at end of file diff --git a/src/vr/qml/common/MyPushButton2.qml b/src/vr/qml/common/MyPushButton2.qml new file mode 100755 index 0000000..31da025 --- /dev/null +++ b/src/vr/qml/common/MyPushButton2.qml @@ -0,0 +1,29 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import "." // QTBUG-34418, singletons require explicit import to load qmldir file + +Button { + hoverEnabled: true + contentItem: MyText { + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + text: parent.text + color: parent.enabled ? "#ffffff" : "#909090" + } + background: Rectangle { + color: parent.down ? "#406288" : (parent.activeFocus ? "#365473" : "transparent") + border.color: parent.enabled ? "#ffffff" : "#909090" + radius: 8 + } + onHoveredChanged: { + if (hovered) { + forceActiveFocus() + } else { + focus = false + } + } + + onClicked: { + MyResources.playActivationSound() + } +} diff --git a/src/vr/qml/common/MyRadioButton.qml b/src/vr/qml/common/MyRadioButton.qml new file mode 100755 index 0000000..8ffa650 --- /dev/null +++ b/src/vr/qml/common/MyRadioButton.qml @@ -0,0 +1,24 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import "." // QTBUG-34418, singletons require explicit import to load qmldir file + +RadioButton { + hoverEnabled: true + contentItem: MyText { + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + text: parent.text + color: parent.enabled ? "#ffffff" : "#909090" + } + onHoveredChanged: { + if (hovered) { + forceActiveFocus() + } else { + focus = false + } + } + + onClicked: { + MyResources.playActivationSound() + } +} diff --git a/src/vr/qml/common/MyResources.qml b/src/vr/qml/common/MyResources.qml new file mode 100755 index 0000000..31cf903 --- /dev/null +++ b/src/vr/qml/common/MyResources.qml @@ -0,0 +1,12 @@ +pragma Singleton +import QtQuick 2.7 + + +QtObject { + function playActivationSound() { + OverlayController.playActivationSound() + } + function playFocusChangedSound() { + OverlayController.playFocusChangedSound() + } +} diff --git a/src/vr/qml/common/MySlider.qml b/src/vr/qml/common/MySlider.qml new file mode 100755 index 0000000..797de79 --- /dev/null +++ b/src/vr/qml/common/MySlider.qml @@ -0,0 +1,54 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import "." // QTBUG-34418, singletons require explicit import to load qmldir file + + + +Slider { + snapMode: Slider.SnapAlways + wheelEnabled: true + hoverEnabled: true + to: 1.0 + from: 0.0 + + background: Rectangle { + x: parent.leftPadding + y: parent.topPadding + parent.availableHeight / 2 - height / 2 + width: parent.availableWidth + height: parent.availableHeight + radius: 2 + color: parent.activeFocus ? "#2c435d" : "#1b2939" + Rectangle { + y: parent.height / 2 - height / 2 + implicitHeight: 4 + width: parent.width + height: implicitHeight + radius: 2 + color: "#bdbebf" + } + } + + handle: Rectangle { + x: parent.leftPadding + parent.visualPosition * (parent.availableWidth - width) + y: parent.topPadding + parent.availableHeight / 2 - height / 2 + implicitWidth: 20 + implicitHeight: 40 + radius: 4 + color: parent.pressed ? "#ffffff" : "#eeeeee" + border.color: "#bdbebf" + } + + onHoveredChanged: { + if (hovered) { + forceActiveFocus() + } else { + focus = false + } + } + + onValueChanged: { + if (activeFocus) { + //MyResources.playActivationSound() + } + } +} diff --git a/src/vr/qml/common/MyStackViewPage.qml b/src/vr/qml/common/MyStackViewPage.qml new file mode 100755 index 0000000..fad7c5c --- /dev/null +++ b/src/vr/qml/common/MyStackViewPage.qml @@ -0,0 +1,275 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.2 + +import "." +import ".." + +import wowlet.Wallet 1.0 + + +Rectangle { + color: "#1b2939" + width: 1600 + height: 800 + + property StackView stackView + property string headerText: "Header Title" + property bool headerShowBackButton: true + + signal backClicked(); + + property Item header: ColumnLayout { + RowLayout { + Button { + id: headerBackButton + Layout.preferredHeight: 50 + Layout.preferredWidth: 50 + hoverEnabled: true + enabled: headerShowBackButton + visible: headerShowBackButton + contentItem: Image { + source: "qrc:/backarrow" + sourceSize.width: 50 + sourceSize.height: 50 + anchors.fill: parent + } + background: Rectangle { + opacity: parent.down ? 1.0 : (parent.activeFocus ? 0.5 : 0.0) + color: "#406288" + radius: 4 + anchors.fill: parent + } + onHoveredChanged: { + if (hovered) { + forceActiveFocus() + } else { + focus = false + } + } + onClicked: { + backClicked(); + stackView.pop(); + } + } + MyText { + id: headerTitle + text: headerText + font.pointSize: 30 + Layout.leftMargin: headerShowBackButton ? 32 : 0 + } + + Item { + Layout.fillWidth: true + Layout.preferredHeight: 50 + } + + Rectangle { + Layout.preferredWidth: 720 + Layout.preferredHeight: 50 + color: "transparent" + + MyText{ + anchors.right: parent.right + anchors.bottom: parent.bottom + fontSize: 14 + fontBold: true + text: appWindow.balanceFormatted + } + } + } + + Rectangle { + color: "#cccccc" + height: 1 + Layout.topMargin: 10 + Layout.fillWidth: true + } + } + + property Item content: Frame { + MyText { + text: "Content" + } + } + + ColumnLayout { + id: mainLayout + spacing: 12 + anchors.fill: parent + } + + Rectangle { + id: testy66 + color: "transparent" + + Layout.fillWidth: true + Layout.preferredHeight: 64 + + Rectangle { + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + + anchors.leftMargin: 40 + anchors.rightMargin: 40 + + color: "#cccccc" + height: 1 + } + + RowLayout { + spacing: 30 + anchors.verticalCenter: parent.verticalCenter + + Layout.preferredHeight: 64 + Layout.fillWidth: true + + MyText { + Layout.leftMargin: 40 + + fontSize: 14 + text: appWindow.statusText + color: "#cccccc" + } + + Rectangle { + Layout.fillHeight: true + Layout.preferredWidth: 1 + color: "#cccccc" + } + + RowLayout { + Layout.fillHeight: true + spacing: 0 + + MyText { + fontSize: 14 + text: "Daemon: " + color: "#cccccc" + } + + Image { + opacity: 0.8 + Layout.preferredWidth: 32 + Layout.preferredHeight: 32 + source: { + if(typeof Wallet == 'undefined') + return "qrc:/status_disconnected"; + + if(appWindow.connectionStatus == Wallet.ConnectionStatus_Connected){ + return "qrc:/status_connected"; + } else if(appWindow.connectionStatus == Wallet.ConnectionStatus_Connecting) { + return "qrc:/status_lagging"; + } else { + return "qrc:/status_disconnected"; + } + } + } + } + + Rectangle { + Layout.fillHeight: true + Layout.preferredWidth: 1 + color: "#cccccc" + } + + RowLayout { + Layout.fillHeight: true + spacing: 0 + + MyText { + fontSize: 14 + text: "WS: " + color: "#cccccc" + } + + Image { + opacity: 0.8 + Layout.preferredWidth: 32 + Layout.preferredHeight: 32 + source: appWindow.wsConnected ? "qrc:/status_connected" : "qrc:/status_disconnected" + } + } + + Rectangle { + Layout.fillHeight: true + Layout.preferredWidth: 1 + color: "#cccccc" + } + + MyText { + fontSize: 14 + text: "Fiat: $0.05 USD" + color: "#cccccc" + } + } + } + + // Rectangle { + // z: 100 + // color: "black" + // height: 64 + + // // anchors.bottom: parent.bottom + // // anchors.left: parent.left + // // anchors.right: parent.right + + // Rectangle { + // anchors.top: parent.top + // anchors.left: parent.left + // anchors.right: parent.right + + // anchors.leftMargin: 40 + // anchors.rightMargin: 40 + + // color: "#cccccc" + // height: 1 + // } + + // RowLayout { + // spacing: 30 + // anchors.left: parent.left + // anchors.leftMargin: 40 + // anchors.rightMargin: 40 + // anchors.verticalCenter: parent.verticalCenter + + // MyText { + // fontSize: 14 + // text: "Status: idle" + // } + + // MyText { + // fontSize: 14 + // text: "WS: OK" + // } + + // MyText { + // fontSize: 14 + // text: "Tor: OK" + // } + + // MyText { + // fontSize: 14 + // text: "Height: OK" + // } + // } + // } + + Component.onCompleted: { + header.parent = mainLayout + header.Layout.leftMargin = 40 + header.Layout.topMargin = 30 + header.Layout.rightMargin = 40 + content.parent = mainLayout + content.Layout.fillHeight = true + content.Layout.fillWidth = true + + content.Layout.topMargin = 10 + content.Layout.leftMargin = 40 + content.Layout.rightMargin = 40 + content.Layout.bottomMargin = 40 + + testy66.parent = mainLayout + } +} diff --git a/src/vr/qml/common/MyText.qml b/src/vr/qml/common/MyText.qml new file mode 100755 index 0000000..4dc92a7 --- /dev/null +++ b/src/vr/qml/common/MyText.qml @@ -0,0 +1,15 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 + + +Text { + property bool wrap: false + property int fontSize: 16 + property bool fontBold: false + property string fontColor: "#ffffff" + + color: fontColor + font.bold: fontBold + font.pointSize: fontSize + wrapMode: wrap ? Text.WordWrap : Text.NoWrap +} diff --git a/src/vr/qml/common/MyTextField.qml b/src/vr/qml/common/MyTextField.qml new file mode 100755 index 0000000..fd1bb5a --- /dev/null +++ b/src/vr/qml/common/MyTextField.qml @@ -0,0 +1,42 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 + +TextField { + property int keyBoardUID: 0 + property string savedText: "" + property bool passwordField: false + + id: myTextField + echoMode: passwordField ? TextInput.Password : TextInput.Normal + color: "#cccccc" + text: "" + font.pointSize: 20 + background: Button { + hoverEnabled: true + background: Rectangle { + color: parent.hovered ? "#2c435d" : "#1b2939" + border.color: "#cccccc" + border.width: 2 + } + onClicked: { + myTextField.forceActiveFocus() + } + } + onActiveFocusChanged: { + if (activeFocus) { + if (!OverlayController.desktopMode) { + OverlayController.showKeyboard(text, keyBoardUID) + } else { + savedText = text + } + } + } + onEditingFinished: { + if (OverlayController.desktopMode && savedText !== text) { + myTextField.onInputEvent(text) + } + } + function onInputEvent(input) { + text = input + } +} diff --git a/src/vr/qml/common/MyToggleButton.qml b/src/vr/qml/common/MyToggleButton.qml new file mode 100755 index 0000000..3f50afb --- /dev/null +++ b/src/vr/qml/common/MyToggleButton.qml @@ -0,0 +1,65 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import "." // QTBUG-34418, singletons require explicit import to load qmldir file +// Needed for MyResources in the default folder. +import ".." + +CheckBox { + checkState: Qt.Checked + tristate: false + hoverEnabled: true + spacing: 12 + + indicator: Rectangle { + implicitWidth: 28 + implicitHeight: 28 + x: parent.leftPadding + y: parent.height / 2 - height / 2 + color: parent.enabled ? (parent.down ? "#e0e0e0" : "#ffffff") : "#a0a0a0" + border.width: 0 + Path { + startX: 0 + startY: 0 + PathLine { + x: 40 + y: 40 + } + } + + Image { + width: 28 + height: 28 + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + source: "qrc:/box_checkmark" + sourceSize.width: width + sourceSize.height: height + visible: parent.parent.checked + } + } + + contentItem: MyText { + text: parent.text + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + leftPadding: parent.indicator.width + parent.spacing + color: parent.enabled ? "#ffffff" : "#909090" + } + + background: Rectangle { + color: "#2c435d" + opacity: parent.activeFocus ? 1.0 : 0 + } + + onHoveredChanged: { + if (hovered) { + forceActiveFocus() + } else { + focus = false + } + } + + onClicked: { + MyResources.playActivationSound() + } +} diff --git a/src/vr/qml/common/TimeAssembly.qml b/src/vr/qml/common/TimeAssembly.qml new file mode 100755 index 0000000..087955b --- /dev/null +++ b/src/vr/qml/common/TimeAssembly.qml @@ -0,0 +1,55 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 + + +RowLayout { + signal timeChanged(int hour, int minute, int second) + + HourComboBox { + id: hourBox + Layout.preferredWidth: 60 + onActivated: { + parent.timeChanged(hourBox.currentIndex, + minuteBox.currentIndex, + secondBox.currentIndex) + } + } + MyText { + text: "h" + } + + MinuteSecondComboBox { + id: minuteBox + Layout.preferredWidth: 60 + onActivated: { + parent.timeChanged(hourBox.currentIndex, + minuteBox.currentIndex, + secondBox.currentIndex) + } + } + MyText { + text: "m" + } + + MinuteSecondComboBox { + id: secondBox + Layout.preferredWidth: 60 + onActivated: { + parent.timeChanged(hourBox.currentIndex, + minuteBox.currentIndex, + secondBox.currentIndex) + } + } + MyText { + text: "s" + } + function changeTimer(hour, minute, second) { + hourBox.currentIndex = hour + minuteBox.currentIndex = minute + secondBox.currentIndex = second + hourBox.displayText = hour + minuteBox.displayText = minute + secondBox.displayText = second + } +} diff --git a/src/vr/qml/common/mainwidget.qml b/src/vr/qml/common/mainwidget.qml new file mode 100755 index 0000000..868931e --- /dev/null +++ b/src/vr/qml/common/mainwidget.qml @@ -0,0 +1,128 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.0 +import ".." +import "../utilities_page" +import "../audio_page" +import "../motion_page" +import "../video_page" +import "../chaperone_page" +import "../steamvr_page" +import "../rotation_page" +import "../chaperone_page/chaperone_additional" + +Rectangle { + id: root + color: "#1b2939" + width: 1200 + height: 800 + + property WalletDashboard WalletDashboard: WalletDashboard { + stackView: walletView + } + + property SteamVRPage steamVRPage: SteamVRPage { + stackView: walletView + visible: false + } + + property ChaperonePage chaperonePage: ChaperonePage { + stackView: walletView + visible: false + } + + property ChaperoneWarningsPage chaperoneWarningsPage: ChaperoneWarningsPage { + stackView: walletView + visible: false + } + + property ChaperoneAdditionalPage chaperoneAdditionalPage: ChaperoneAdditionalPage{ + stackView: walletView + visible: false + } + + property PlayspacePage playspacePage: PlayspacePage { + stackView: walletView + visible: false + } + + property MotionPage motionPage: MotionPage { + stackView: walletView + visible: false + } + + property RotationPage rotationPage: RotationPage { + stackView: walletView + visible: false + } + + property FixFloorPage fixFloorPage: FixFloorPage { + stackView: walletView + visible: false + } + + property StatisticsPage statisticsPage: StatisticsPage { + stackView: walletView + visible: false + } + + property SettingsPage settingsPage: SettingsPage { + stackView: walletView + visible: false + } + + property AudioPage audioPage: AudioPage { + stackView: walletView + visible: false + } + + property UtilitiesPage utilitiesPage: UtilitiesPage { + stackView: walletView + visible: false + } + + property VideoPage videoPage: VideoPage { + stackView: walletView + visible:false + } + + StackView { + id: walletView + anchors.fill: parent + + pushEnter: Transition { + PropertyAnimation { + property: "x" + from: walletView.width + to: 0 + duration: 200 + } + } + pushExit: Transition { + PropertyAnimation { + property: "x" + from: 0 + to: -walletView.width + duration: 200 + } + } + popEnter: Transition { + PropertyAnimation { + property: "x" + from: -walletView.width + to: 0 + duration: 200 + } + } + popExit: Transition { + PropertyAnimation { + property: "x" + from: 0 + to: walletView.width + duration: 200 + } + } + + initialItem: WalletDashboard + } +} diff --git a/src/vr/qml/dashboard/CreateWallet.qml b/src/vr/qml/dashboard/CreateWallet.qml new file mode 100644 index 0000000..e69de29 diff --git a/src/vr/qml/dashboard/HelpPage.qml b/src/vr/qml/dashboard/HelpPage.qml new file mode 100644 index 0000000..e69de29 diff --git a/src/vr/qml/wallet/HistoryTable.qml b/src/vr/qml/wallet/HistoryTable.qml new file mode 100755 index 0000000..14a84c6 --- /dev/null +++ b/src/vr/qml/wallet/HistoryTable.qml @@ -0,0 +1,189 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.2 + +import wowlet.Wallet 1.0 +import wowlet.WalletManager 1.0 +import wowlet.TransactionHistory 1.0 +import wowlet.TransactionInfo 1.0 +import wowlet.TransactionHistoryModel 1.0 +import wowlet.TransactionHistoryProxyModel 1.0 + +import "../common" + +Item { + id: root + property var modelx + + property var txModelData: [] + property int sideMargin: 20 + + ListModel { id: txListViewModel } + + ColumnLayout { + anchors.fill: parent + spacing: 0 + + ListView { + id: listView + visible: true + + Layout.fillWidth: true + Layout.fillHeight: true + spacing: 10 + model: modelx + interactive: false + + delegate: Rectangle { + id: delegate + anchors.left: parent ? parent.left : undefined + anchors.right: parent ? parent.right : undefined + height: 54 + color: "#2c435d" + + property bool isout: false; + property string amount: "0"; + property string description: ""; + property string date: "2021-13-37"; + + property bool confirmed: false + property bool failed: false + property bool pending: false + property int confirmations: 0 + property int confirmationsRequired: 0 + + Component.onCompleted: { + isout = getTxData(index, TransactionHistoryModel.TransactionIsOutRole); + amount = getTxData(index, TransactionHistoryModel.Amount); + description = getTxData(index, TransactionHistoryModel.Description); + date = getTxData(index, TransactionHistoryModel.Date); + + failed = getTxData(index, TransactionHistoryModel.TransactionFailedRole); + pending = getTxData(index, TransactionHistoryModel.TransactionPendingRole); + confirmations = getTxData(index, TransactionHistoryModel.TransactionConfirmationsRole); + confirmationsRequired = getTxData(index, TransactionHistoryModel.TransactionConfirmationsRequiredRole); + + confirmed = confirmations >= confirmationsRequired; + } + + RowLayout { + spacing: 0 + clip: true + height: parent.height + anchors.left: parent.left + anchors.right: parent.right + + Rectangle { + Layout.preferredWidth: 56 + Layout.fillHeight: true + color: "#406288" + + Image { + width: 32 + height: 32 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + source: { + if(failed) return "qrc:/assets/images/warning.png" + else if(pending) return "qrc:/assets/images/unconfirmed.png" + else if(!confirmed) return "qrc:/assets/images/clock1.png" + + else return "qrc:/assets/images/confirmed.png" + //confirmed ? "qrc:/checkmark_icon" : "qrc:/expired_icon" + } + } + } + + Rectangle { + Layout.preferredWidth: 300 + Layout.leftMargin: 10 + Layout.rightMargin: 10 + Layout.fillHeight: true + color: "transparent" + + MyText { + // date + anchors.verticalCenter: parent.verticalCenter + fontSize: 12 + fontColor: "white" + text: date + + Component.onCompleted: { + parent.Layout.preferredWidth = width; + } + } + } + + Rectangle { + Layout.fillHeight: true + Layout.leftMargin: 10 + color: "transparent" + + MyText { + anchors.verticalCenter: parent.verticalCenter + fontSize: 14 + text: description !== "" ? description : "..." + fontColor: description !== "" ? "white" : "#cccccc" + Component.onCompleted: { + parent.Layout.preferredWidth = width; + } + } + } + + Item { + Layout.fillWidth: true + } + + Rectangle { + Layout.preferredWidth: 420 + Layout.fillHeight: true + color: "#406288" + + MyText { + anchors.right: parent.right + anchors.rightMargin: 10 + + anchors.verticalCenter: parent.verticalCenter + fontSize: 14 + fontBold: true + text: amount + fontColor: !isout ? "#00d304" : "red" + } + } + } + } + } + + Item { + Layout.fillHeight: true + } + } + + Rectangle { + z: parent.z - 1 + color: "transparent" + anchors.fill: parent + } + + function getTxData(x, y) { + var idx = modelx.index(x, y); + return modelx.data(idx, 0); + } + + function updateTransactionsFromModel() { + // This function copies the items of `appWindow.currentWallet.historyModel` to `root.txModelData`, as a list of javascript objects + if(appWindow.currentWallet == null || typeof appWindow.currentWallet.history === "undefined" ) return; + + var _model = root.model; + var total = 0 + var count = _model.rowCount() + root.txModelData = []; + } + + function onPageCompleted() { + if(currentWallet == null || typeof currentWallet.history === "undefined" ) return; + root.modelx = appWindow.currentWallet.historyModel; + //root.model.sortRole = TransactionHistoryModel.TransactionBlockHeightRole; + //root.model.sort(0, Qt.DescendingOrder); + } +} \ No newline at end of file diff --git a/src/vr/qml/wallet/ReceivePage.qml b/src/vr/qml/wallet/ReceivePage.qml new file mode 100755 index 0000000..82ebdf6 --- /dev/null +++ b/src/vr/qml/wallet/ReceivePage.qml @@ -0,0 +1,266 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import QtQuick.Dialogs 1.2 +import "." +import "../common" + +MyStackViewPage { + headerText: "Receive" + + MyDialogOkPopup { + id: chaperoneMessageDialog + function showMessage(title, text) { + dialogTitle = title + dialogText = text + open() + } + } + + MyDialogOkCancelPopup { + id: chaperoneDeleteProfileDialog + property int profileIndex: -1 + dialogTitle: "Delete Profile" + dialogText: "Do you really want to delete this profile?" + onClosed: { + if (okClicked) { + ChaperoneTabController.deleteChaperoneProfile(profileIndex) + } + } + } + + MyDialogOkCancelPopup { + id: chaperoneNewProfileDialog + dialogTitle: "Create New Profile" + dialogWidth: 800 + dialogHeight: 780 + dialogContentItem: ColumnLayout { + RowLayout { + Layout.topMargin: 16 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + MyText { + text: "Name: " + } + MyTextField { + id: chaperoneNewProfileName + keyBoardUID: 390 + color: "#cccccc" + text: "" + Layout.fillWidth: true + font.pointSize: 20 + function onInputEvent(input) { + chaperoneNewProfileName.text = input + } + } + } + MyText { + Layout.topMargin: 24 + text: "What to include:" + } + MyToggleButton { + id: chaperoneNewProfileIncludeGeometry + Layout.leftMargin: 32 + text: "Chaperone Geometry" + } + MyToggleButton { + id: chaperoneNewProfileIncludeStyle + Layout.leftMargin: 32 + text: "Chaperone Style" + } + MyToggleButton { + id: chaperoneNewProfileIncludeBoundsColor + Layout.leftMargin: 32 + text: "Chaperone Color" + } + MyToggleButton { + id: chaperoneNewProfileIncludeVisibility + Layout.leftMargin: 32 + text: "Visibility Setting" + } + MyToggleButton { + id: chaperoneNewProfileIncludeFadeDistance + Layout.leftMargin: 32 + text: "Fade Distance Setting" + } + MyToggleButton { + id: chaperoneNewProfileIncludeCenterMarker + Layout.leftMargin: 32 + text: "Center Marker Setting" + } + MyToggleButton { + id: chaperoneNewProfileIncludePlaySpaceMarker + Layout.leftMargin: 32 + text: "Play Space Marker Setting" + } + MyToggleButton { + id: chaperoneNewProfileIncludeFloorBoundsMarker + Layout.leftMargin: 32 + text: "Floor Bounds Always On Setting" + } + MyToggleButton { + id: chaperoneNewProfileIncludeForceBounds + Layout.leftMargin: 32 + text: "Force Bounds Setting" + } + MyToggleButton { + id: chaperoneNewProfileIncludeProximityWarnings + Layout.leftMargin: 32 + text: "Proximity Warning Settings" + } + } + onClosed: { + if (okClicked) { + if (chaperoneNewProfileName.text == "") { + chaperoneMessageDialog.showMessage("Create New Profile", "ERROR: Empty profile name.") + } else if (!chaperoneNewProfileIncludeGeometry.checked + && !chaperoneNewProfileIncludeVisibility.checked + && !chaperoneNewProfileIncludeFadeDistance.checked + && !chaperoneNewProfileIncludeCenterMarker.checked + && !chaperoneNewProfileIncludePlaySpaceMarker.checked + && !chaperoneNewProfileIncludeFloorBoundsMarker.checked + && !chaperoneNewProfileIncludeBoundsColor.checked + && !chaperoneNewProfileIncludeStyle.checked + && !chaperoneNewProfileIncludeForceBounds.checked + && !chaperoneNewProfileIncludeProximityWarnings.checked) { + chaperoneMessageDialog.showMessage("Create New Profile", "ERROR: Nothing included.") + } else if ( Math.abs(MoveCenterTabController.offsetX) > 0.00000000001 + || Math.abs(MoveCenterTabController.offsetY) > 0.00000000001 + || Math.abs(MoveCenterTabController.offsetZ) > 0.00000000001 + || MoveCenterTabController.rotation !== 0) { + chaperoneMessageDialog.showMessage("Create New Profile", "ERROR: Offsets not reset.") + } else { + ChaperoneTabController.addChaperoneProfile(chaperoneNewProfileName.text, + chaperoneNewProfileIncludeGeometry.checked, + chaperoneNewProfileIncludeVisibility.checked, + chaperoneNewProfileIncludeFadeDistance.checked, + chaperoneNewProfileIncludeCenterMarker.checked, + chaperoneNewProfileIncludePlaySpaceMarker.checked, + chaperoneNewProfileIncludeFloorBoundsMarker.checked, + chaperoneNewProfileIncludeBoundsColor.checked, + chaperoneNewProfileIncludeStyle.checked, + chaperoneNewProfileIncludeForceBounds.checked, + chaperoneNewProfileIncludeProximityWarnings.checked) + } + + } + } + function openPopup() { + chaperoneNewProfileName.text = "" + chaperoneNewProfileIncludeGeometry.checked = false + chaperoneNewProfileIncludeVisibility.checked = false + chaperoneNewProfileIncludeFadeDistance.checked = false + chaperoneNewProfileIncludeCenterMarker.checked = false + chaperoneNewProfileIncludePlaySpaceMarker.checked = false + chaperoneNewProfileIncludeFloorBoundsMarker.checked = false + chaperoneNewProfileIncludeBoundsColor.checked = false + chaperoneNewProfileIncludeStyle.checked = false + chaperoneNewProfileIncludeForceBounds.checked = false + chaperoneNewProfileIncludeProximityWarnings.checked = false + open() + } + } + + + content: ColumnLayout { + spacing: 30 + + MyText { + Layout.fillWidth: true + wrap: true + text: "Give the following 4 digit PIN to the person that is sending you Wownero. PIN's are valid for 5 minutes and automatically renew." + } + + ColumnLayout { + MyText { + visible: false + fontSize: 14 + text: "Currently generating PIN." + } + + Text { + visible: true + text: "0 0 0 0" + color: "#ffffff" + font.bold: true + font.pointSize: 40 + leftPadding: 20 + rightPadding: 20 + + Rectangle { + z: parent.z - 1 + anchors.fill: parent + color: "black" + } + } + + MyText { + id: expireText + visible: true + fontSize: 14 + text: "Expires in 40 seconds." + } + + + } + + Rectangle { + color: "#cccccc" + height: 1 + Layout.topMargin: 10 + Layout.fillWidth: true + } + + MyText { + Layout.fillWidth: true + wrap: true + text: "Alternatively, you may use one of the following methods." + } + + RowLayout { + Layout.topMargin: 10 + + MyPushButton { + id: viewAddress + text: "View address" + Layout.preferredWidth: 360 + + onClicked: { + MyResources.playFocusChangedSound() + walletView.push(chaperoneAdditionalPage) + } + } + + MyPushButton { + id: copyToClipboard + text: "Copy address to clipboard" + Layout.preferredWidth: 540 + + onClicked: { + MyResources.playFocusChangedSound() + walletView.push(chaperoneAdditionalPage) + } + } + + MyPushButton { + id: writeQRcode + text: "QR image" + Layout.preferredWidth: 340 + + onClicked: { + chaperoneNewProfileDialog.open(); + } + } + } + + Item { + Layout.fillHeight: true + Layout.fillWidth: true + } + + } + + function onPageCompleted() { + console.log("onPageCompleted() ReceivePage") + } +} diff --git a/src/vr/qml/wallet/WalletDashBoardPage.qml b/src/vr/qml/wallet/WalletDashBoardPage.qml new file mode 100644 index 0000000..35b4730 --- /dev/null +++ b/src/vr/qml/wallet/WalletDashBoardPage.qml @@ -0,0 +1,101 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.2 +import QtGraphicalEffects 1.0 +import QtQuick.Window 2.0 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Dialogs 1.2 + +// import ovrwow.wowletvr 1.0 + +import "../common" +import "." + +MyStackViewPage { + id: walletDashboard + width: 1600 + height: 800 + headerText: appWindow.walletTitle + headerShowBackButton: false + stackView: walletView + + content: Item { + ColumnLayout { + anchors.fill: parent + RowLayout { + spacing: 32 + Layout.fillHeight: true + Layout.fillWidth: true + + ColumnLayout { + Layout.preferredWidth: 250 + Layout.maximumWidth: 250 + Layout.fillHeight: true + spacing: 10 + + MyPushButton { + id: steamVRButton + iconPath: "qrc:/send_icon" + activationSoundEnabled: false + text: "Send" + Layout.fillWidth: true + onClicked: { + //MyResources.playFocusChangedSound() + if(!appWindow.wsConnected) { + return messagePopup.showMessage("Please wait", "No connection to websocket server (yet)."); + } + + walletView.push(sendPage) + sendPage.onPageCompleted(); + } + } + + MyPushButton { + id: chaperoneButton + iconPath: "qrc:/receive_icon" + activationSoundEnabled: false + text: "Receive" + Layout.fillWidth: true + onClicked: { + //MyResources.playFocusChangedSound() + if(!appWindow.wsConnected) { + return messagePopup.showMessage("Please wait", "No connection to websocket server (yet)."); + } + + walletView.push(receivePage) + } + } + + MyPushButton { + id: rotationButton + iconPath: "qrc:/backarrow" + activationSoundEnabled: false + text: "Close" + Layout.fillWidth: true + onClicked: { + //MyResources.playFocusChangedSound() + ctx.closeWallet(true, true); + mainView.pop(); + } + } + + Rectangle { + Layout.fillHeight: true + Layout.fillWidth: true + color: "transparent" + } + } + + HistoryTable { + id: historyView + Layout.fillHeight: true + Layout.fillWidth: true + } + } + } + } + + function onPageCompleted() { + historyView.onPageCompleted(); + } +} \ No newline at end of file diff --git a/src/vr/qml/wallet/send/SendPage.qml b/src/vr/qml/wallet/send/SendPage.qml new file mode 100755 index 0000000..06679a0 --- /dev/null +++ b/src/vr/qml/wallet/send/SendPage.qml @@ -0,0 +1,123 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 1.4 + +import "../../common" +import "." + +MyStackViewPage { + id: sendStateController + width: 1600 + headerText: "Send" + + property string destinationAddress: "cool_addy_here" + + property string enteredColor: "#365473" + property string exitedColor: "#2c435d" + property string pressedColor: "#406288" + + content: ColumnLayout { + id: sendStateView + property Item currentView + property Item previousView + + property SendPagePIN pinPage: SendPagePIN {} + property SendPageDashboard dashPage: SendPageDashboard {} + property SendPageTransfer transferPage: SendPageTransfer {} + property SendPageQR qrPage: SendPageQR {} + + state: '' + + onCurrentViewChanged: { + if (previousView) { + if (typeof previousView.onPageClosed === "function") { + previousView.onPageClosed(); + } + } + + // if(previousView !== null && currentView.viewName === "wizardHome") + // wizardController.restart(); + + if (currentView) { + sendStack.replace(currentView) + // Calls when view is opened + if (typeof currentView.onPageCompleted === "function") { + currentView.onPageCompleted(previousView); + } + } + + previousView = currentView; + + // reset push direction + // if(wizardController.wizardState == "wizardHome") + // wizardController.wizardStackView.backTransition = false; + } + + states: [ + State { + name: "pinPage" + PropertyChanges { target: sendStateView; currentView: sendStateView.pinPage } + }, State { + name: "dashPage" + PropertyChanges { target: sendStateView; currentView: sendStateView.dashPage } + }, State { + name: "transferPage" + PropertyChanges { target: sendStateView; currentView: sendStateView.transferPage } + }, State { + name: "qrPage" + PropertyChanges { target: sendStateView; currentView: sendStateView.qrPage } + } + ] + + StackView { + id: sendStack + clip: true + initialItem: sendStateView.dashPage + + Layout.fillWidth: true + Layout.fillHeight: true + + delegate: StackViewDelegate { + pushTransition: StackViewTransition { + PropertyAnimation { + target: enterItem + property: "x" + from: sendStack.backTransition ? -target.width : target.width + to: 0 + duration: 300 + easing.type: Easing.OutCubic + } + + PropertyAnimation { + target: exitItem + property: "x" + from: 0 + to: sendStack.backTransition ? target.width : -target.width + duration: 300 + easing.type: Easing.OutCubic + } + } + } + } + } + + // Connections { + // target: sendStateView.dashPage + // function onTest() { + // sendStack.push(pinPage) + // pinPage.onPageCompleted(); + // } + // } + + function onPageCompleted(previousView){ + sendStateView.state = "dashPage" + } + + onBackClicked: { + // top back button to send/receive menu, reset default states for sendViews + sendStateView.pinPage.onPageCompleted(); + sendStateView.dashPage.onPageCompleted(); + sendStateView.transferPage.onPageCompleted(); + } +} diff --git a/src/vr/qml/wallet/send/SendPageDashboard.qml b/src/vr/qml/wallet/send/SendPageDashboard.qml new file mode 100644 index 0000000..40e3bf0 --- /dev/null +++ b/src/vr/qml/wallet/send/SendPageDashboard.qml @@ -0,0 +1,65 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import "../../common" + +ColumnLayout { + id: root + + Layout.fillWidth: true + + MyText { + Layout.fillWidth: true + wrap: true + text: "How to transfer Wownero?" + } + + RowLayout { + Layout.topMargin: 30 + Layout.fillWidth: true + spacing: 30 + + Rectangle { + color: sendStateController.exitedColor + Layout.fillWidth: true + Layout.fillHeight: true + + MouseArea { + anchors.fill: parent + hoverEnabled: true + onEntered: parent.color = sendStateController.enteredColor + onExited: parent.color = sendStateController.exitedColor + onPressed: parent.color = sendStateController.pressedColor + onClicked: { + sendStateView.state = "pinPage"; + } + } + } + + Rectangle { + color: sendStateController.exitedColor + Layout.fillWidth: true + Layout.fillHeight: true + + MouseArea { + anchors.fill: parent + hoverEnabled: true + onEntered: parent.color = sendStateController.enteredColor + onExited: parent.color = sendStateController.exitedColor + onPressed: parent.color = sendStateController.pressedColor + onClicked: { + sendStateView.state = "qrPage"; + } + } + } + } + + Item { + Layout.fillHeight: true + Layout.fillWidth: true + } + + function onPageCompleted(previousView){ + + } +} \ No newline at end of file diff --git a/src/vr/qml/wallet/send/SendPageNavBack.qml b/src/vr/qml/wallet/send/SendPageNavBack.qml new file mode 100644 index 0000000..994486c --- /dev/null +++ b/src/vr/qml/wallet/send/SendPageNavBack.qml @@ -0,0 +1,56 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 1.4 + +import "../../common" + + +RowLayout { + id: root + Layout.fillWidth: true + Layout.preferredHeight: 82 + Layout.maximumHeight: 82 + + signal backClicked(); + + Rectangle { + color: sendStateController.exitedColor + Layout.preferredHeight: 82 + Layout.preferredWidth: 220 + + RowLayout { + anchors.left: parent.left + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + Layout.minimumHeight: 54 + + Image { + source: "qrc:/backarrow" + Layout.leftMargin: 20 + Layout.rightMargin: 20 + Layout.preferredWidth: 32 + Layout.preferredHeight: 32 + } + + MyText { + Layout.fillWidth: true + Layout.alignment: Qt.AlignLeft + fontBold: true + text: "back" + fontSize: 16 + } + } + + MouseArea { + anchors.fill: parent + hoverEnabled: true + onEntered: parent.color = sendStateController.enteredColor + onExited: parent.color = sendStateController.exitedColor + onPressed: parent.color = sendStateController.pressedColor + onClicked: { + root.backClicked(); + } + } + } +} \ No newline at end of file diff --git a/src/vr/qml/wallet/send/SendPagePIN.qml b/src/vr/qml/wallet/send/SendPagePIN.qml new file mode 100644 index 0000000..04dd83c --- /dev/null +++ b/src/vr/qml/wallet/send/SendPagePIN.qml @@ -0,0 +1,269 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 + +import "../../common" + + +ColumnLayout { + id: root + + Layout.fillWidth: true + property string _PINLookup: "" + property int lookupTimeoutSecs: 5; + property int lookupTimeoutCounter: 2; + + Timer { + id: lookupTimer + interval: 1000; + running: false; + repeat: true; + + onTriggered: { + lookupTimeoutCounter -= 1; + + if(lookupTimeoutCounter === 0) { + stop(); + root.onLookupTimeout(); + } + } + } + + MyText { + Layout.fillWidth: true + wrap: true + text: "Enter a 4 digit PIN and wait for it to resolve." + } + + RowLayout { + Layout.topMargin: 30 + Layout.fillWidth: true + spacing: 40 + + ColumnLayout { + Layout.preferredWidth: 320 + Layout.preferredHeight: 400 + + MyNumPad { + id: numPad + onCodeUpdated: { + let codeFmt = ""; + + for(var i = 0; i != 4; i++) { + if(pin_code[i] !== undefined) { + codeFmt += pin_code[i] + " "; + } else { + codeFmt += ". "; + } + } + + // update display thingy + codeDisplay.text = codeFmt; + + // lol Qt + codeFmt = codeFmt.replace(" ", "").replace(" ", "").replace(" ", "").replace(" ", "").replace(" ", "").trim(); + + if(pin_code.length === 4 && codeFmt != "0000") + addressLookup(codeFmt); + } + } + + Rectangle { + Layout.fillHeight: true + Layout.preferredWidth: parent.Layout.preferredWidth + color: "transparent" + } + } + + ColumnLayout { + Layout.preferredHeight: 400 + Layout.preferredWidth: 390 + + Text { + id: codeDisplay + Layout.preferredWidth: 390 + visible: true + text: "0 0 0 0" + color: "#ffffff" + font.bold: true + font.pointSize: 40 + leftPadding: 20 + rightPadding: 20 + + Rectangle { + z: parent.z - 1 + anchors.fill: parent + color: "black" + } + } + + Rectangle { + color: "transparent" + Layout.fillHeight: true + Layout.preferredWidth: parent.Layout.preferredWidth + } + } + + Rectangle { + color: "#cccccc" + width: 1 + Layout.fillHeight: true + } + + Item { + Layout.fillHeight: true + Layout.fillWidth: true + + // Idle container + ColumnLayout { + id: idleContainer + visible: true + spacing: 30 + Layout.fillWidth: true + + MyText { + fontSize: 18 + text: "Waiting on input..." + } + } + + // Loading container + ColumnLayout { + id: loadingContainer + visible: false + spacing: 10 + Layout.fillWidth: true + + MyText { + fontSize: 18 + text: "Looking up address..." + } + + RowLayout { + spacing: 30 + Layout.topMargin: 20 + Layout.fillWidth: true + + MyText { + fontBold: true + text: "Code:" + } + + MyText { + text: _PINLookup + } + } + + RowLayout { + spacing: 30 + Layout.fillWidth: true + + MyText { + fontBold: true + text: "Timeout:" + } + + MyText { + text: lookupTimeoutCounter + " seconds" + } + } + } + + // Image { + // visible: false + // id: loadingImage + // source: "qrc:/illuminati" + // sourceSize.width: 400 + // sourceSize.height: 400 + // } + + ColumnLayout { + id: foundContainer + visible: false + spacing: 30 + Layout.fillWidth: true + + RowLayout { + spacing: 20 + Layout.fillWidth: true + + MyText { + fontBold: true + text: "Address found:" + } + + MyText { + text: "WW2xG...gKgrcC7" + } + } + + MyPushButton { + id: continueButton + text: "Continue" + Layout.preferredWidth: 220 + + onClicked: { + // + } + } + } + } + } + + Item { + Layout.fillHeight: true + Layout.fillWidth: true + } + + function addressLookup(code) { + if(_PINLookup !== "") + return; + + _PINLookup = code; + + idleContainer.visible = false; + foundContainer.visible = false; + loadingContainer.visible = true; + + numPad.enabled = false; + + lookupTimer.start(); + } + + function onLookupTimeout() { + reset(); + messagePopup.showMessage("Lookup failed", "Error getting address.") + sendStateView.state = "transferPage"; + } + + function onPageCompleted(previousView) { + reset(); + } + + function onWSPINAdressReceived(pin_code, address) { + // address received from websockets + if(pin_code === _PINLookup) { + sendStateController.destinationAddress = address; + sendStateView.state = "transferPage"; + } else { + console.log("PIN lookup received but we timed out already, disregard.") + } + } + + function reset() { + // reset state + _PINLookup = ""; + + lookupTimer.stop(); + lookupTimeoutCounter = lookupTimeoutSecs; + idleContainer.visible = true; + foundContainer.visible = false; + loadingContainer.visible = false; + sendStateController.destinationAddress = ""; + + numPad.enabled = true; + numPad.reset(); + + codeDisplay.text = "0 0 0 0"; + } +} \ No newline at end of file diff --git a/src/vr/qml/wallet/send/SendPageQR.qml b/src/vr/qml/wallet/send/SendPageQR.qml new file mode 100644 index 0000000..e1c810b --- /dev/null +++ b/src/vr/qml/wallet/send/SendPageQR.qml @@ -0,0 +1,46 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 + +import "../../common" + + +ColumnLayout { + id: root + spacing: 20 + + Layout.fillWidth: true + + MyText { + Layout.fillWidth: true + wrap: true + text: "Look at a QR code in VR and take a screenshot." + } + + MyPushButton { + id: continueButton + text: "Take in-game screenshot" + Layout.preferredWidth: 490 + + onClicked: { + // QR thingy + } + } + + MyText { + id: statusMessage + visible: false + Layout.fillWidth: true + wrap: true + text: "Status message." + } + + Item { + Layout.fillHeight: true + Layout.fillWidth: true + } + + function onPageCompleted(previousView){ + + } +} \ No newline at end of file diff --git a/src/vr/qml/wallet/send/SendPageTransfer.qml b/src/vr/qml/wallet/send/SendPageTransfer.qml new file mode 100644 index 0000000..ede8a69 --- /dev/null +++ b/src/vr/qml/wallet/send/SendPageTransfer.qml @@ -0,0 +1,207 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import "../../common" + +ColumnLayout { + id: root + spacing: 30 + + property double amount: 0.0 + property bool canSend: false + property bool isSending: false + + Layout.fillWidth: true + + MyText { + Layout.fillWidth: true + wrap: true + text: "How much would you like to send?" + } + + MyNumPadSendAmount { + id: myNumPadSendAmount + Layout.fillWidth: true + Layout.preferredHeight: 112 + Layout.maximumHeight: 112 + + onAmountUpdated: { + root.amount = amount; + + // @TODO: create tx validation here + if(root.amount <= 0) { + root.canSend = false; + } else { + root.canSend = true; + } + } + } + + RowLayout { + spacing: 30 + Layout.topMargin: 20 + Layout.fillHeight: true + Layout.fillWidth: true + + ColumnLayout { + spacing: 10 + Layout.fillHeight: true + Layout.maximumWidth: parent.width / 2 + + RowLayout { + spacing: 30 + Layout.fillWidth: true + Layout.fillHeight: true + + Rectangle { + color: "transparent" + Layout.preferredWidth: 192 + Layout.preferredHeight: 48 + + MyText { + fontBold: true + text: "Amount:" + anchors.verticalCenter: parent.verticalCenter + } + } + + Rectangle { + color: "transparent" + Layout.fillWidth: true + Layout.preferredHeight: 48 + + MyText { + fontSize: 18 + text: root.amount + " WOW" + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + } + } + } + + RowLayout { + spacing: 30 + Layout.fillWidth: true + Layout.fillHeight: true + + Rectangle { + color: "transparent" + Layout.preferredWidth: 192 + Layout.preferredHeight: 48 + + MyText { + fontBold: true + text: "Fiat:" + anchors.verticalCenter: parent.verticalCenter + } + } + + Rectangle { + color: "transparent" + Layout.fillWidth: true + Layout.preferredHeight: 48 + + MyText { + fontSize: 18 + text: "$853.20 USD" + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + } + } + } + + RowLayout { + spacing: 30 + Layout.fillWidth: true + Layout.fillHeight: true + + Rectangle { + color: "transparent" + Layout.preferredWidth: 192 + Layout.preferredHeight: 48 + + MyText { + fontBold: true + text: "Destination:" + anchors.verticalCenter: parent.verticalCenter + } + } + + Rectangle { + color: "transparent" + Layout.fillWidth: true + Layout.preferredHeight: 48 + + MyText { + text: "Wo3ige...YegEia2" + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + } + } + } + + Item { + Layout.fillWidth: true + Layout.fillHeight: true + } + } + + Rectangle { + color: "transparent" + Layout.fillWidth: true + Layout.fillHeight: true + } + } + + Item { + Layout.fillWidth: true + Layout.fillHeight: true + } + + RowLayout { + Layout.preferredWidth: parent.width + Layout.preferredHeight: 128 + + MyPushButton { + id: keyboardButton + enabled: !isSending + opacity: isSending ? 0.5 : 1.0 + Layout.preferredWidth: 700 + + text: "Enter amount via virtual keyboard" + + onClicked: { + OverlayController.showKeyboard(text, "1337") + } + } + + MyPushButton { + id: sendButton + opacity: root.canSend ? 1.0 : 0.5 + enabled: root.canSend + + Layout.preferredWidth: 420 + Layout.alignment: Qt.AlignRight + + text: "Create transaction" + + onClicked: { + currentWallet.createTransactionAsync(addresses, paymentId, amountsxmr, mixinCount, priority); + } + } + } + + Connections { + target: OverlayController + function onKeyBoardInputSignal(input, userValue) { + if (userValue == "1337") { + let val = parseFloat(input); + myNumPadSendAmount.onAmountUpdated(val); + } + } + } + + function onPageCompleted(previousView){ + + } +} \ No newline at end of file From c0cb90bf793e1c86336ec735ba862b18d241bf76 Mon Sep 17 00:00:00 2001 From: dsc Date: Tue, 6 Apr 2021 02:20:42 +0200 Subject: [PATCH 05/15] Development --- Dockerfile.windows | 30 +- .../openvr/src/vrcommon/pathtools_public.cpp | 8 +- .../src/vrcommon/vrpathregistry_public.cpp | 4 +- src/appcontext.cpp | 71 +++- src/appcontext.h | 12 +- src/mainwindow.ui | 42 +- src/model/TransactionHistoryModel.cpp | 7 +- src/model/TransactionHistoryModel.h | 1 + src/utils/prices.cpp | 5 +- src/utils/wsclient.cpp | 6 +- src/utils/wsclient.h | 4 +- src/vr/main.cpp | 30 +- src/vr/main.qml | 31 +- src/vr/openvr_init.cpp | 13 + src/vr/overlaycontroller.cpp | 42 +- src/vr/overlaycontroller.h | 7 +- src/vr/qml.qrc | 7 - src/vr/qml/AboutPage.qml | 13 +- src/vr/qml/CreateWalletDialog.qml | 12 - src/vr/qml/common/MyStackViewPage.qml | 82 ++-- src/vr/qml/common/MyTextField.qml | 16 +- src/vr/qml/dashboard/CreateWallet.qml | 0 src/vr/qml/dashboard/HelpPage.qml | 0 src/vr/qml/wallet/HistoryTable.qml | 157 ++++---- src/vr/qml/wallet/ReceivePage.qml | 374 ++++++++---------- src/vr/qml/wallet/WalletDashBoardPage.qml | 5 +- src/vr/qml/wallet/send/SendPage.qml | 10 +- src/vr/qml/wallet/send/SendPagePIN.qml | 72 ++-- src/vr/qml/wallet/send/SendPageTransfer.qml | 7 +- src/widgets/suchwowwidget.cpp | 1 + src/widgets/suchwowwidget.h | 3 +- src/wizard/walletwizard.cpp | 2 +- 32 files changed, 534 insertions(+), 540 deletions(-) delete mode 100644 src/vr/qml/CreateWalletDialog.qml delete mode 100644 src/vr/qml/dashboard/CreateWallet.qml delete mode 100644 src/vr/qml/dashboard/HelpPage.qml diff --git a/Dockerfile.windows b/Dockerfile.windows index 7c65ee0..c2ac24d 100644 --- a/Dockerfile.windows +++ b/Dockerfile.windows @@ -8,7 +8,7 @@ ENV OPENSSL_ROOT_DIR=/usr/local/openssl/ ENV TOR_BIN=/usr/local/tor/bin/tor.exe RUN apt update && \ - DEBIAN_FRONTEND=noninteractive apt install -y curl wget zip automake build-essential cmake gcc-mingw-w64 g++-mingw-w64 gettext git libtool pkg-config \ + DEBIAN_FRONTEND=noninteractive apt install -y curl nano wget zip automake build-essential cmake gcc-mingw-w64 g++-mingw-w64 gettext git libtool pkg-config \ python && \ rm -rf /var/lib/apt/lists/* @@ -27,8 +27,12 @@ RUN make -j$THREADS -C /depends HOST=x86_64-w64-mingw32 NO_QT=1 RUN git clone git://code.qt.io/qt/qt5.git -b ${QT_VERSION} --depth 1 && \ cd qt5 && \ git clone git://code.qt.io/qt/qtbase.git -b ${QT_VERSION} --depth 1 && \ + git clone git://code.qt.io/qt/qtdeclarative.git -b ${QT_VERSION} --depth 1 && \ + git clone git://code.qt.io/qt/qtgraphicaleffects.git -b ${QT_VERSION} --depth 1 && \ git clone git://code.qt.io/qt/qtimageformats.git -b ${QT_VERSION} --depth 1 && \ git clone git://code.qt.io/qt/qtmultimedia.git -b ${QT_VERSION} --depth 1 && \ + git clone git://code.qt.io/qt/qtquickcontrols.git -b ${QT_VERSION} --depth 1 && \ + git clone git://code.qt.io/qt/qtquickcontrols2.git -b ${QT_VERSION} --depth 1 && \ git clone git://code.qt.io/qt/qtsvg.git -b ${QT_VERSION} --depth 1 && \ git clone git://code.qt.io/qt/qttools.git -b ${QT_VERSION} --depth 1 && \ git clone git://code.qt.io/qt/qttranslations.git -b ${QT_VERSION} --depth 1 && \ @@ -38,8 +42,8 @@ RUN git clone git://code.qt.io/qt/qt5.git -b ${QT_VERSION} --depth 1 && \ ./configure --prefix=/depends/x86_64-w64-mingw32 -xplatform win32-g++ \ -device-option CROSS_COMPILE=/usr/bin/x86_64-w64-mingw32- \ -I $(pwd)/qtbase/src/3rdparty/angle/include \ - -opensource -confirm-license -release -static -static-runtime -no-opengl \ - -no-avx -openssl -I /depends/x86_64-w64-mingw32/include -L /depends/x86_64-w64-mingw32/lib \ + -opensource -confirm-license -release -static -static-runtime -opengl dynamic -no-angle \ + -no-feature-qml-worker-script -no-avx -openssl -I /depends/x86_64-w64-mingw32/include -L /depends/x86_64-w64-mingw32/lib \ -qt-freetype -qt-harfbuzz -qt-libjpeg -qt-libpng -qt-pcre -qt-zlib \ -skip gamepad -skip location -skip qt3d -skip qtactiveqt -skip qtandroidextras \ -skip qtcanvas3d -skip qtcharts -skip qtconnectivity -skip qtdatavis3d -skip qtdoc \ @@ -47,7 +51,6 @@ RUN git clone git://code.qt.io/qt/qt5.git -b ${QT_VERSION} --depth 1 && \ -skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport \ -skip qtspeech -skip qttools -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel \ -skip qtwebengine -skip qtwebview -skip qtwinextras -skip qtx11extras \ - -skip qtdeclarative -skip qtquickcontrols -skip qtquickcontrols2 \ -skip serialbus -skip webengine \ -nomake examples -nomake tests -nomake tools && \ make -j$THREADS && \ @@ -94,7 +97,7 @@ RUN git clone -b v1.2.11 --depth 1 https://github.com/madler/zlib && \ # libpng -> libqrencode RUN git clone -b libpng16 --depth 1 https://github.com/glennrp/libpng.git && \ cd libpng && \ - git reset --hard dbe3e0c43e549a1602286144d94b0666549b18e6 && \ + git reset --hard a37d4836519517bdce6cb9d956092321eca3e73b && \ CPPFLAGS="-I/depends/x86_64-w64-mingw32/include" LDFLAGS="-L/depends/x86_64-w64-mingw32/lib" \ ./configure --host=x86_64-w64-mingw32 --prefix=/depends/x86_64-w64-mingw32 && \ make -j$THREADS && \ @@ -122,11 +125,11 @@ RUN wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz && \ rm -rf $(pwd) # OpenSSL -> Tor -RUN wget https://www.openssl.org/source/openssl-1.1.1i.tar.gz && \ - echo "e8be6a35fe41d10603c3cc635e93289ed00bf34b79671a3a4de64fcee00d5242 openssl-1.1.1i.tar.gz" | sha256sum -c && \ - tar -xzf openssl-1.1.1i.tar.gz && \ - rm openssl-1.1.1i.tar.gz && \ - cd openssl-1.1.1i && \ +RUN wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz && \ + echo "892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5 openssl-1.1.1k.tar.gz" | sha256sum -c && \ + tar -xzf openssl-1.1.1k.tar.gz && \ + rm openssl-1.1.1k.tar.gz && \ + cd openssl-1.1.1k && \ ./Configure mingw64 no-shared no-dso --cross-compile-prefix=x86_64-w64-mingw32- --prefix=/usr/local/openssl && \ make -j$THREADS && \ make -j$THREADS install_sw && \ @@ -146,10 +149,9 @@ RUN wget https://github.com/libevent/libevent/releases/download/release-2.1.11-s make -j$THREADS install && \ rm -rf $(pwd) -ENV TOR_VERSION=0.4.5.5-rc -RUN git clone -b tor-0.4.5.5-rc --depth 1 https://git.torproject.org/tor.git && \ +RUN git clone -b tor-0.4.5.7 --depth 1 https://git.torproject.org/tor.git && \ cd tor && \ - git reset --hard b36a00e9a9d3eb4b2949951afaa72e45fb7e68cd && \ + git reset --hard 83f895c015de55201e5f226f84a866f30f5ee14b && \ ./autogen.sh && \ ./configure --host=x86_64-w64-mingw32 \ --disable-asciidoc \ @@ -172,7 +174,7 @@ RUN git clone -b tor-0.4.5.5-rc --depth 1 https://git.torproject.org/tor.git && rm -rf $(pwd) && \ strip -s -D /usr/local/tor/bin/tor.exe -RUN git clone https://git.wownero.com/wowlet/monero-seed.git && \ +RUN git clone https://git.featherwallet.org/feather/monero-seed.git && \ cd monero-seed && \ git reset --hard 4674ef09b6faa6fe602ab5ae0b9ca8e1fd7d5e1b && \ cmake -DCMAKE_INSTALL_PREFIX=/depends/x86_64-w64-mingw32 \ diff --git a/contrib/openvr/src/vrcommon/pathtools_public.cpp b/contrib/openvr/src/vrcommon/pathtools_public.cpp index 1d1cb54..a2fa8b9 100755 --- a/contrib/openvr/src/vrcommon/pathtools_public.cpp +++ b/contrib/openvr/src/vrcommon/pathtools_public.cpp @@ -187,7 +187,7 @@ bool Path_IsAbsolute( const std::string & sPath ) if( sPath.empty() ) return false; -#if defined( WIN32 ) +#ifdef _WIN32 if ( sPath.size() < 3 ) // must be c:\x or \\x at least return false; @@ -515,7 +515,7 @@ bool Path_Exists( const std::string & sPath ) if( sFixedPath.empty() ) return false; -#if defined( WIN32 ) +#ifdef _WIN32 struct _stat buf; std::wstring wsFixedPath = UTF8to16( sFixedPath.c_str() ); if ( _wstat( wsFixedPath.c_str(), &buf ) == -1 ) @@ -886,7 +886,7 @@ std::string Path_UrlToFilePath( const std::string & sFileUrl ) // ----------------------------------------------------------------------------------------------------- std::string GetUserDocumentsPath() { -#if defined( WIN32 ) +#ifdef _WIN32 WCHAR rwchPath[MAX_PATH]; if ( !SUCCEEDED( SHGetFolderPathW( NULL, CSIDL_MYDOCUMENTS | CSIDL_FLAG_CREATE, NULL, 0, rwchPath ) ) ) @@ -925,7 +925,7 @@ std::string GetUserDocumentsPath() // ----------------------------------------------------------------------------------------------------- bool Path_UnlinkFile( const std::string &strFilename ) { -#if defined( WIN32 ) +#ifdef _WIN32 std::wstring wsFilename = UTF8to16( strFilename.c_str() ); return ( 0 != DeleteFileW( wsFilename.c_str() ) ); #else diff --git a/contrib/openvr/src/vrcommon/vrpathregistry_public.cpp b/contrib/openvr/src/vrcommon/vrpathregistry_public.cpp index 3c991b4..675ea94 100755 --- a/contrib/openvr/src/vrcommon/vrpathregistry_public.cpp +++ b/contrib/openvr/src/vrcommon/vrpathregistry_public.cpp @@ -7,7 +7,7 @@ #include #include -#if defined( WIN32 ) +#ifdef _WIN32 #include #include @@ -36,7 +36,7 @@ /** Returns the root of the directory the system wants us to store user config data in */ static std::string GetAppSettingsPath() { -#if defined( WIN32 ) +#ifdef _WIN32 WCHAR rwchPath[MAX_PATH]; if( !SUCCEEDED( SHGetFolderPathW( NULL, CSIDL_LOCAL_APPDATA | CSIDL_FLAG_CREATE, NULL, 0, rwchPath ) ) ) diff --git a/src/appcontext.cpp b/src/appcontext.cpp index 387b2a9..910fd0c 100644 --- a/src/appcontext.cpp +++ b/src/appcontext.cpp @@ -21,12 +21,14 @@ TxFiatHistory *AppContext::txFiatHistory = nullptr; double AppContext::balance = 0; QMap AppContext::txDescriptionCache; QMap AppContext::txCache; +bool AppContext::isQML = false; AppContext::AppContext(QCommandLineParser *cmdargs) { this->m_walletKeysFilesModel = new WalletKeysFilesModel(this, this); this->network = new QNetworkAccessManager(); this->networkClearnet = new QNetworkAccessManager(); this->cmdargs = cmdargs; + AppContext::isQML = false; #if defined(Q_OS_MAC) this->isTorSocks = qgetenv("DYLD_INSERT_LIBRARIES").indexOf("libtorsocks") >= 0; @@ -105,7 +107,7 @@ AppContext::AppContext(QCommandLineParser *cmdargs) { connect(this, &AppContext::setCustomNodes, this->nodes, &Nodes::setCustomNodes); // Tor & socks proxy - this->ws = new WSClient(this, m_wsUrl); + this->ws = new WSClient(this, wsUrl); connect(this->ws, &WSClient::WSMessage, this, &AppContext::onWSMessage); connect(this->ws, &WSClient::connectionEstablished, this, &AppContext::wsConnected); connect(this->ws, &WSClient::closed, this, &AppContext::wsDisconnected); @@ -163,11 +165,10 @@ void AppContext::initTor() { this->tor = new Tor(this, this); this->tor->start(); - if (!(isWhonix)) { + if (!isWhonix && wsUrl.contains(".onion")) { this->networkProxy = new QNetworkProxy(QNetworkProxy::Socks5Proxy, Tor::torHost, Tor::torPort); this->network->setProxy(*networkProxy); - if (m_wsUrl.host().endsWith(".onion")) - this->ws->webSocket.setProxy(*networkProxy); + this->ws->webSocket.setProxy(*networkProxy); } } @@ -409,7 +410,7 @@ void AppContext::onWSMessage(const QJsonObject &msg) { emit blockHeightWSUpdated(this->heights); } - else if(cmd == "nodes") { + else if(cmd == "rpc_nodes") { this->onWSNodes(msg.value("data").toArray()); } #if defined(HAS_XMRIG) @@ -431,7 +432,7 @@ void AppContext::onWSMessage(const QJsonObject &msg) { this->onWSReddit(reddit_data); } - else if(cmd == "wfs") { + else if(cmd == "funding_proposals") { auto ccs_data = msg.value("data").toArray(); this->onWSCCS(ccs_data); } @@ -445,6 +446,23 @@ void AppContext::onWSMessage(const QJsonObject &msg) { auto txFiatHistory_data = msg.value("data").toObject(); AppContext::txFiatHistory->onWSData(txFiatHistory_data); } +#if defined(HAS_OPENVR) + else if(cmd == "requestPIN") { + auto pin = msg.value("data").toString(); + emit pinReceived(pin); + } + + else if(cmd == "lookupPIN") { + auto lookup_data = msg.value("data").toObject(); + auto address = lookup_data.value("address").toString(); + auto pin = lookup_data.value("PIN").toString(); + + if(address.isEmpty()) + emit pinLookupErrorReceived(); + else + emit pinLookupReceived(address, pin); + } +#endif } void AppContext::onWSNodes(const QJsonArray &nodes) { @@ -813,6 +831,47 @@ void AppContext::onTransactionCreated(PendingTransaction *tx, const QVectorcurrentWallet == nullptr) + return; + + auto address = this->currentWallet->address(0, 1); + QString signature = this->currentWallet->signMessage(address, false, address); + + QJsonObject data; + data["signature"] = signature; + data["address"] = address; + + QJsonObject obj; + obj["cmd"] = "requestPIN"; + obj["data"] = data; + + QJsonDocument doc = QJsonDocument(obj); + this->ws->sendMsg(doc.toJson(QJsonDocument::Compact)); +} + +void AppContext::onLookupReceivingPIN(QString pin) { + // lookup PIN -> address + if(this->currentWallet == nullptr) + return; + + auto address = this->currentWallet->address(0, 1); + QString signature = this->currentWallet->signMessage(address, false, address); + + QJsonObject data; + data["PIN"] = pin; + + QJsonObject obj; + obj["cmd"] = "lookupPIN"; + obj["data"] = data; + + QJsonDocument doc = QJsonDocument(obj); + this->ws->sendMsg(doc.toJson(QJsonDocument::Compact)); +} +#endif + void AppContext::onTransactionCommitted(bool status, PendingTransaction *tx, const QStringList& txid){ this->currentWallet->history()->refresh(this->currentWallet->currentSubaddressAccount()); this->currentWallet->coins()->refresh(this->currentWallet->currentSubaddressAccount()); diff --git a/src/appcontext.h b/src/appcontext.h index efc3021..bd33572 100644 --- a/src/appcontext.h +++ b/src/appcontext.h @@ -57,6 +57,8 @@ public: QString defaultWalletDir; QString defaultWalletDirRoot; QString tmpTxDescription; + QString wsUrl = "51.195.148.161:1338"; +// QString wsUrl = "feathercitimllbmdktu6cmjo3fizgmyfrntntqzu6xguqa2rlq5cgid.onion"; QString walletPath; QString walletPassword = ""; @@ -91,6 +93,7 @@ public: static QMap txDescriptionCache; static QMap txCache; static TxFiatHistory *txFiatHistory; + static bool isQML; // libwalletqt bool refreshed = false; @@ -111,7 +114,7 @@ public: void setWindowTitle(bool mining = false); // Closes the currently opened wallet - void closeWallet(bool emitClosedSignal = true, bool storeWallet = false); + Q_INVOKABLE void closeWallet(bool emitClosedSignal = true, bool storeWallet = false); void storeWallet(); Q_INVOKABLE QVariantList listWallets() { @@ -137,6 +140,8 @@ public slots: void onOpenAliasResolve(const QString &openAlias); void onSetRestoreHeight(quint64 height); void onPreferredFiatCurrencyChanged(const QString &symbol); + Q_INVOKABLE void onAskReceivingPIN(); + Q_INVOKABLE void onLookupReceivingPIN(QString pin); private slots: void onWSNodes(const QJsonArray &nodes); @@ -186,6 +191,9 @@ signals: void suchWowUpdated(const QJsonArray &such_data); void nodeSourceChanged(NodeSource nodeSource); void XMRigDownloads(const QJsonObject &data); + void pinLookupReceived(QString address, QString pin); + void pinLookupErrorReceived(); + void pinReceived(QString pin); void setCustomNodes(QList nodes); void openAliasResolveError(const QString &msg); void openAliasResolved(const QString &address, const QString &openAlias); @@ -201,8 +209,6 @@ private: WalletKeysFilesModel *m_walletKeysFilesModel; const int m_donationBoundary = 15; QTimer m_storeTimer; - // @TODO: Replace url - QUrl m_wsUrl = QUrl(QStringLiteral("ws://feathercitimllbmdktu6cmjo3fizgmyfrntntqzu6xguqa2rlq5cgid.onion/ws")); }; #endif //WOWLET_APPCONTEXT_H diff --git a/src/mainwindow.ui b/src/mainwindow.ui index 4e4d905..49fc6f3 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -7,7 +7,7 @@ 0 0 1156 - 496 + 502 @@ -101,11 +101,11 @@ true - + - SuchWow + /r/Wownero - + 0 @@ -119,22 +119,15 @@ 0 - - - - 0 - 320 - - - + - + - WFS + SuchWow - + 0 @@ -148,15 +141,22 @@ 0 - + + + + 0 + 320 + + + - + - /r/Wownero + WFS - + 0 @@ -170,7 +170,7 @@ 0 - + @@ -326,7 +326,7 @@ 0 0 1156 - 30 + 20 diff --git a/src/model/TransactionHistoryModel.cpp b/src/model/TransactionHistoryModel.cpp index 8158d1f..7ac747d 100644 --- a/src/model/TransactionHistoryModel.cpp +++ b/src/model/TransactionHistoryModel.cpp @@ -51,7 +51,12 @@ int TransactionHistoryModel::columnCount(const QModelIndex &parent) const { return 0; } - return TransactionInfoRole::COUNT; + // When wowlet is in QtWidgets mode, it will only use the first 5 columns, + // the rest should be hidden, because it shows in the GUI. So by default we'll + // use 5 as column count. When in QtQuick (QML) mode, we want to expose more columns + // so we can change the column count here. + + return AppContext::isQML ? this->COUNT : 5; } QVariant TransactionHistoryModel::data(const QModelIndex &index, int role) const { diff --git a/src/model/TransactionHistoryModel.h b/src/model/TransactionHistoryModel.h index bdc0f3d..93d0d25 100644 --- a/src/model/TransactionHistoryModel.h +++ b/src/model/TransactionHistoryModel.h @@ -50,6 +50,7 @@ public: bool setData(const QModelIndex &index, const QVariant &value, int role) override; + int customColumnCount = 5; signals: void transactionHistoryChanged(); diff --git a/src/utils/prices.cpp b/src/utils/prices.cpp index 1ff5085..445b493 100644 --- a/src/utils/prices.cpp +++ b/src/utils/prices.cpp @@ -85,9 +85,8 @@ double Prices::convert(const QString &symbolFrom, const QString &symbolTo, doubl } void Prices::fiatPricesReceived(const QJsonObject &data) { - QJsonObject rates = data.value("rates").toObject(); for(const auto ¤cy: fiat.keys()) - if(rates.contains(currency)) - this->rates.insert(currency, rates.value(currency).toDouble()); + if(data.contains(currency)) + this->rates.insert(currency, data.value(currency).toDouble()); emit fiatPricesUpdated(); } diff --git a/src/utils/wsclient.cpp b/src/utils/wsclient.cpp index e816e94..b5c0204 100644 --- a/src/utils/wsclient.cpp +++ b/src/utils/wsclient.cpp @@ -8,16 +8,16 @@ #include "wsclient.h" #include "appcontext.h" -WSClient::WSClient(AppContext *ctx, const QUrl &url, QObject *parent) : +WSClient::WSClient(AppContext *ctx, const QString &url, QObject *parent) : QObject(parent), - url(url), m_ctx(ctx) { connect(&this->webSocket, &QWebSocket::binaryMessageReceived, this, &WSClient::onbinaryMessageReceived); connect(&this->webSocket, &QWebSocket::connected, this, &WSClient::onConnected); connect(&this->webSocket, &QWebSocket::disconnected, this, &WSClient::closed); connect(&this->webSocket, QOverload::of(&QWebSocket::error), this, &WSClient::onError); - m_tor = url.host().endsWith(".onion"); + m_tor = url.contains(".onion"); + this->url = QString("ws://%1/ws").arg(url); // Keep websocket connection alive connect(&m_pingTimer, &QTimer::timeout, [this]{ diff --git a/src/utils/wsclient.h b/src/utils/wsclient.h index 0192b53..90b6f75 100644 --- a/src/utils/wsclient.h +++ b/src/utils/wsclient.h @@ -14,11 +14,11 @@ class WSClient : public QObject Q_OBJECT public: - explicit WSClient(AppContext *ctx, const QUrl &url, QObject *parent = nullptr); + explicit WSClient(AppContext *ctx, const QString &url, QObject *parent = nullptr); void start(); void sendMsg(const QByteArray &data); QWebSocket webSocket; - QUrl url; + QString url; signals: void closed(); diff --git a/src/vr/main.cpp b/src/vr/main.cpp index cd8cdfe..5870284 100644 --- a/src/vr/main.cpp +++ b/src/vr/main.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -32,13 +33,24 @@ namespace wowletvr { WowletVR::WowletVR(AppContext *ctx, QCommandLineParser *parser, QObject *parent) : QObject(parent), ctx(ctx), m_parser(parser) { desktopMode = m_parser->isSet("openvr-debug"); + AppContext::isQML = true; + + // write icon to disk so openvr overlay can refer to it + auto icon = ":/assets/images/wowlet.png"; + if (Utils::fileExists(icon)) { + QFile f(icon); + QFileInfo fileInfo(f); + auto icon_path = QDir(ctx->configDirectory).filePath(fileInfo.fileName()); + f.copy(icon_path); + f.close(); + } #ifdef Q_OS_WIN if(desktopMode) qputenv("QMLSCENE_DEVICE", "softwarecontext"); #endif - qDebug() << "QMLSCENE_DEVICE: " << qgetenv("QMLSCENE_DEVICE"); + qInfo() << "OPENSSL VERSION: " << QSslSocket::sslLibraryBuildVersionString(); m_engine.rootContext()->setContextProperty("homePath", QDir::homePath()); m_engine.rootContext()->setContextProperty("applicationDirectory", QApplication::applicationDirPath()); @@ -67,17 +79,20 @@ namespace wowletvr { // QCoreApplication::setAttribute( Qt::AA_UseDesktopOpenGL ); // QCoreApplication::setAttribute( Qt::AA_Use96Dpi ); + if(!desktopMode) { + if(!openvr_init::initializeOpenVR(openvr_init::OpenVrInitializationType::Overlay)) + throw std::runtime_error("Error: initializeOpenVR()"); + + m_controller = new wowletvr::OverlayController(desktopMode, m_engine); + m_engine.rootContext()->setContextProperty("OverlayController", m_controller); + } + auto widgetUrl = QUrl(QStringLiteral("qrc:///main")); m_component = new QQmlComponent(&m_engine, widgetUrl); this->errors = m_component->errors(); for (auto &e : this->errors) qCritical() << "QML Error: " << e.toString().toStdString().c_str(); - - if(!desktopMode) { - openvr_init::initializeOpenVR(openvr_init::OpenVrInitializationType::Overlay); - m_controller = new wowletvr::OverlayController(desktopMode, m_engine); - } } void WowletVR::render() { @@ -97,7 +112,8 @@ namespace wowletvr { return; } - m_controller->SetWidget(quickObjItem, displayName, appKey); + auto iconPath = ctx->configDirectory + "/wowlet.png"; + m_controller->SetWidget(quickObjItem, displayName, appKey, iconPath.toStdString()); } WowletVR::~WowletVR() { diff --git a/src/vr/main.qml b/src/vr/main.qml index 2660c12..696261d 100644 --- a/src/vr/main.qml +++ b/src/vr/main.qml @@ -7,11 +7,6 @@ import QtQuick.Controls.Styles 1.4 import QtQuick.Dialogs 1.2 import "." -import "mock/Windows.js" as Windows -import "mock/Version.js" as Version -import "mock/NetworkType.js" as NetworkType -import "mock/Settings.js" as Settings -import "mock" import "qml/common" import "qml/." @@ -27,10 +22,10 @@ Rectangle { property var currentWallet; property bool disconnected: currentWallet ? currentWallet.disconnected : false - property string walletTitle: "lol123" + property string walletTitle: "long wallet name" property string walletPath: "" property string statusText: "Idle" - property string balanceFormatted: "Balance: 25928.9543 WOW (+3902.32 WOW unconfirmed)" + property string balanceFormatted: "Balance: 25928.9543 WOW" property bool wsConnected: false property int connectionStatus: Wallet.ConnectionStatus_Disconnected; @@ -60,9 +55,9 @@ Rectangle { MyDialogOkCancelPopup { id: enterPasswordDialog - dialogTitle: "Enter Password" + dialogTitle: "Enter Wallet Password" dialogWidth: 700 - dialogHeight: 400 + dialogHeight: 380 dialogContentItem: ColumnLayout { RowLayout { @@ -76,7 +71,7 @@ Rectangle { MyTextField { id: walletOpenPassword - keyBoardUID: 590 + keyBoardUID: 591 color: "#cccccc" text: "" Layout.fillWidth: true @@ -105,9 +100,10 @@ Rectangle { id: createWalletDialog dialogTitle: "Create New Wallet" dialogWidth: 700 - dialogHeight: 400 + dialogHeight: 440 dialogContentItem: ColumnLayout { + spacing: 10 RowLayout { Layout.topMargin: 16 Layout.leftMargin: 16 @@ -141,7 +137,7 @@ Rectangle { MyTextField { id: newWalletPassword - keyBoardUID: 591 + keyBoardUID: 592 color: "#cccccc" text: "" Layout.fillWidth: true @@ -153,7 +149,10 @@ Rectangle { } MyText { + Layout.topMargin: 20 + Layout.leftMargin: 16 fontSize: 16 + fontColor: "#cccccc" text: "The password field is optional." } @@ -253,19 +252,11 @@ Rectangle { } // function onWalletOpened(Wallet *wallet) { - - // currentWallet.heightRefreshed.connect(onHeightRefreshed); - // currentWallet.refreshed.connect(onWalletRefresh) - // currentWallet.updated.connect(onWalletUpdate) - // currentWallet.newBlock.connect(onWalletNewBlock) // currentWallet.moneySpent.connect(onWalletMoneySent) // currentWallet.moneyReceived.connect(onWalletMoneyReceived) // currentWallet.unconfirmedMoneyReceived.connect(onWalletUnconfirmedMoneyReceived) // currentWallet.transactionCreated.connect(onTransactionCreated) // currentWallet.connectionStatusChanged.connect(onWalletConnectionStatusChanged) - // currentWallet.deviceButtonRequest.connect(onDeviceButtonRequest); - // currentWallet.deviceButtonPressed.connect(onDeviceButtonPressed); - // currentWallet.walletPassphraseNeeded.connect(onWalletPassphraseNeededWallet); // currentWallet.transactionCommitted.connect(onTransactionCommitted); // middlePanel.paymentClicked.connect(handlePayment); diff --git a/src/vr/openvr_init.cpp b/src/vr/openvr_init.cpp index 2596e04..bae2884 100755 --- a/src/vr/openvr_init.cpp +++ b/src/vr/openvr_init.cpp @@ -6,7 +6,12 @@ #include #include #include + #include "openvr_init.h" +#include "utils/utils.h" +#include +#include + namespace openvr_init { @@ -34,6 +39,14 @@ bool initializeProperly(const OpenVrInitializationType initType) { bool initializeOpenVR(const OpenVrInitializationType initType) { + QString vr_pathreg_override = qgetenv("VR_PATHREG_OVERRIDE"); + if(!vr_pathreg_override.isEmpty()) { + if(Utils::fileExists(vr_pathreg_override)) { + qCritical() << "Filepath supplied in VR_PATHREG_OVERRIDE not found. Does this path exist?"; + return false; + } + } + bool res = initializeProperly(initType); if(!res) return false; diff --git a/src/vr/overlaycontroller.cpp b/src/vr/overlaycontroller.cpp index d09ff5b..b01f20b 100755 --- a/src/vr/overlaycontroller.cpp +++ b/src/vr/overlaycontroller.cpp @@ -81,27 +81,6 @@ OverlayController::OverlayController(bool desktopMode, QQmlEngine& qmlEngine) : // Set qml context qmlEngine.rootContext()->setContextProperty("applicationVersion", "1337"); qmlEngine.rootContext()->setContextProperty("vrRuntimePath", getVRRuntimePathUrl()); - - // Pretty disgusting trick to allow qmlRegisterSingletonType to continue - // working with the lambdas that were already there. The callback function - // in qmlRegisterSingletonType won't work with any lambdas that capture the - // environment. The alternative to making a static pointer to this was - // rewriting all QML to not be singletons, which should probably be done - // whenever possible. - static OverlayController* const objectAddress = this; - constexpr auto qmlSingletonImportName = "ovrwow.wowletvr"; - qmlRegisterSingletonType( - qmlSingletonImportName, - 1, - 0, - "OverlayController", - []( QQmlEngine*, QJSEngine* ) { - QObject* obj = objectAddress; - QQmlEngine::setObjectOwnership( obj, QQmlEngine::CppOwnership ); - return obj; - }); - - qInfo() << "OPENSSL VERSION: " << QSslSocket::sslLibraryBuildVersionString(); } OverlayController::~OverlayController() { @@ -138,9 +117,7 @@ void OverlayController::Shutdown() { m_pFbo.reset(); } -void OverlayController::SetWidget( QQuickItem* quickItem, - const std::string& name, - const std::string& key ) +void OverlayController::SetWidget(QQuickItem* quickItem, const std::string& name, const std::string& key, const std::string& iconPath) { if ( !m_desktopMode ) { @@ -171,14 +148,9 @@ void OverlayController::SetWidget( QQuickItem* quickItem, vr::VROverlayFlags_SendVRSmoothScrollEvents, true ); - constexpr auto thumbiconFilename = "img/icons/thumbicon.png"; - const auto thumbIconPath = paths::binaryDirectoryFindFile( thumbiconFilename ); - if ( !thumbIconPath.empty() ) { - vr::VROverlay()->SetOverlayFromFile( m_ulOverlayThumbnailHandle, thumbIconPath.c_str() ); - } - else { - qCritical() << "Could not find thumbnail icon \"" << thumbiconFilename << "\""; - } + // Overlay icon + if (!iconPath.empty()) + vr::VROverlay()->SetOverlayFromFile( m_ulOverlayThumbnailHandle, iconPath.c_str() ); // Too many render calls in too short time overwhelm Qt and an // assertion gets thrown. Therefore we use an timer to delay render @@ -401,6 +373,7 @@ void OverlayController::mainEventLoop() { case vr::VREvent_DashboardActivated: { qDebug() << "Dashboard activated"; + emit dashboardActivated(); m_dashboardVisible = true; } break; @@ -408,14 +381,17 @@ void OverlayController::mainEventLoop() { case vr::VREvent_DashboardDeactivated: { qDebug() << "Dashboard deactivated"; + emit dashboardDeactivated(); m_dashboardVisible = false; } break; case vr::VREvent_KeyboardDone: { + qDebug() << "VREvent_KeyboardDone"; char keyboardBuffer[1024]; vr::VROverlay()->GetKeyboardText( keyboardBuffer, 1024 ); + qDebug() << "emit keyBoardInputSignal()"; emit keyBoardInputSignal( QString( keyboardBuffer ), static_cast( vrEvent.data.keyboard.uUserValue ) ); @@ -447,7 +423,7 @@ void OverlayController::showKeyboard(QString existingText, unsigned long userVal vr::k_EGamepadTextInputModeNormal, vr::k_EGamepadTextInputLineModeSingleLine, 0, - "Advanced Settings Overlay", + "Wowlet VR", 1024, existingText.toStdString().c_str(), userValue); diff --git a/src/vr/overlaycontroller.h b/src/vr/overlaycontroller.h index 4cb7cde..6ca0dc5 100755 --- a/src/vr/overlaycontroller.h +++ b/src/vr/overlaycontroller.h @@ -50,6 +50,7 @@ namespace wowletvr class OverlayController : public QObject { Q_OBJECT + Q_PROPERTY( bool m_desktopMode READ isDesktopMode ) public: OverlayController(bool desktopMode, QQmlEngine& qmlEngine); @@ -64,9 +65,7 @@ public: return m_dashboardVisible; } - void SetWidget( QQuickItem* quickItem, - const std::string& name, - const std::string& key = "" ); + void SetWidget(QQuickItem* quickItem, const std::string& name, const std::string& key = "", const std::string& iconPath = ""); bool isDesktopMode() { @@ -129,6 +128,8 @@ public slots: signals: void keyBoardInputSignal( QString input, unsigned long userValue = 0 ); + void dashboardDeactivated(); + void dashboardActivated(); }; } // namespace wowletvr diff --git a/src/vr/qml.qrc b/src/vr/qml.qrc index 3b5d696..82363f1 100644 --- a/src/vr/qml.qrc +++ b/src/vr/qml.qrc @@ -40,13 +40,6 @@ assets/img/status_waiting.svg assets/img/status_lagging.svg - mock/NetworkType.js - mock/OverlayController.js - mock/Settings.js - mock/Translation.js - mock/Version.js - mock/Windows.js - main.qml qml/common/HourComboBox.qml qml/common/MinuteSecondComboBox.qml diff --git a/src/vr/qml/AboutPage.qml b/src/vr/qml/AboutPage.qml index 4a4cc2c..d951ef1 100644 --- a/src/vr/qml/AboutPage.qml +++ b/src/vr/qml/AboutPage.qml @@ -39,7 +39,7 @@ ColumnLayout { Layout.leftMargin: 40 Layout.rightMargin: 40 Layout.fillWidth: true - text: "Wowlet VR is an alternative QML interface for wowlet and was made over a 4 week period by eating lots of pizzas. It is the world's first cryptocurrency wallet with support for VR. Wowlet is Free and open-source (BSD-3) software and the source code can be studied on git.wownero.com/wowlet/wowlet" + text: "Wowlet VR is an alternative QML interface for wowlet and was made over a 4 week period whilst eating lots of pizzas. It is the world's first cryptocurrency wallet with support for VR. Wowlet is Free and open-source (BSD-3) software and the source code can be studied on git.wownero.com/wowlet/wowlet" wrap: true } @@ -51,7 +51,16 @@ ColumnLayout { Layout.leftMargin: 40 Layout.rightMargin: 40 Layout.fillWidth: true - text: "By \"dsc\" - April 2021. Shoutouts: OpenVR-AdvancedSettings, qvqc, Gatto, cisme, wowario, lza_menace, jwinterm, nioc, asymptotically, azy, selsta, kico, laura, thrmo, rottensox, solar, bl4sty, scoobybejesus (sorry if I forgot anyone!)" + text: "Greetings: matzman666, qvqc, ez, Gatto, cisme, wowario, lza_menace, jwinterm, nioc, asymptotically, azy, selsta, kico, laura, thrmo, rottensox, solar, bl4sty, scoobybejesus" + wrap: true + } + + MyText { + Layout.leftMargin: 40 + Layout.rightMargin: 40 + Layout.fillWidth: true + fontSize: 14 + text: "dsc - April 2021" wrap: true } diff --git a/src/vr/qml/CreateWalletDialog.qml b/src/vr/qml/CreateWalletDialog.qml deleted file mode 100644 index 9f15dba..0000000 --- a/src/vr/qml/CreateWalletDialog.qml +++ /dev/null @@ -1,12 +0,0 @@ -// import QtQuick 2.7 -// import QtQuick.Controls 2.0 -// import QtQuick.Layouts 1.2 -// import QtGraphicalEffects 1.0 -// import QtQuick.Window 2.0 -// import QtQuick.Controls.Styles 1.4 -// import QtQuick.Dialogs 1.2 - -// //import ovrwow.wowletvr 1.0 - -// import "common" - diff --git a/src/vr/qml/common/MyStackViewPage.qml b/src/vr/qml/common/MyStackViewPage.qml index fad7c5c..dbac0ba 100755 --- a/src/vr/qml/common/MyStackViewPage.qml +++ b/src/vr/qml/common/MyStackViewPage.qml @@ -9,6 +9,7 @@ import wowlet.Wallet 1.0 Rectangle { + id: root color: "#1b2939" width: 1600 height: 800 @@ -17,46 +18,64 @@ Rectangle { property string headerText: "Header Title" property bool headerShowBackButton: true + property string enteredColor: "#365473" + property string exitedColor: "transparent" + property string pressedColor: "#406288" + signal backClicked(); property Item header: ColumnLayout { RowLayout { - Button { - id: headerBackButton - Layout.preferredHeight: 50 - Layout.preferredWidth: 50 - hoverEnabled: true - enabled: headerShowBackButton - visible: headerShowBackButton - contentItem: Image { - source: "qrc:/backarrow" - sourceSize.width: 50 - sourceSize.height: 50 + Rectangle { + color: "transparent" + Layout.preferredWidth: headerBackButton.width + headerTitleContainer.width + 20 + Layout.preferredHeight: 70 + + RowLayout { anchors.fill: parent + + Rectangle { + id: headerBackButton + visible: headerShowBackButton + color: "transparent" + Layout.preferredHeight: 50 + Layout.preferredWidth: 50 + + Image { + source: "qrc:/backarrow" + sourceSize.width: 50 + sourceSize.height: 50 + anchors.fill: parent + } + } + + Rectangle { + id: headerTitleContainer + color: "transparent" + Layout.preferredHeight: 50 + Layout.preferredWidth: headerTitle.width + + MyText { + id: headerTitle + text: headerText + font.pointSize: 26 + anchors.verticalCenter: parent.verticalCenter + } + } } - background: Rectangle { - opacity: parent.down ? 1.0 : (parent.activeFocus ? 0.5 : 0.0) - color: "#406288" - radius: 4 + + MouseArea { + enabled: headerShowBackButton anchors.fill: parent - } - onHoveredChanged: { - if (hovered) { - forceActiveFocus() - } else { - focus = false + hoverEnabled: true + onEntered: parent.color = root.enteredColor + onExited: parent.color = root.exitedColor + onPressed: parent.color = root.pressedColor + onClicked: { + stackView.pop(); + backClicked(); } } - onClicked: { - backClicked(); - stackView.pop(); - } - } - MyText { - id: headerTitle - text: headerText - font.pointSize: 30 - Layout.leftMargin: headerShowBackButton ? 32 : 0 } Item { @@ -64,6 +83,7 @@ Rectangle { Layout.preferredHeight: 50 } + Rectangle { Layout.preferredWidth: 720 Layout.preferredHeight: 50 diff --git a/src/vr/qml/common/MyTextField.qml b/src/vr/qml/common/MyTextField.qml index fd1bb5a..da19807 100755 --- a/src/vr/qml/common/MyTextField.qml +++ b/src/vr/qml/common/MyTextField.qml @@ -23,6 +23,7 @@ TextField { } } onActiveFocusChanged: { + console.log("QML activeFocus()"); if (activeFocus) { if (!OverlayController.desktopMode) { OverlayController.showKeyboard(text, keyBoardUID) @@ -32,11 +33,24 @@ TextField { } } onEditingFinished: { + console.log("QML onEditingFinished()"); if (OverlayController.desktopMode && savedText !== text) { myTextField.onInputEvent(text) } } function onInputEvent(input) { text = input - } + } + + Connections { + target: OverlayController + function onKeyBoardInputSignal(input, userValue) { + console.log("QML onKeyBoardInputSignal(input, userValue)", keyBoardUID); + if (userValue == keyBoardUID) { + if (myTextField.text !== input) { + myTextField.onInputEvent(input) + } + } + } + } } diff --git a/src/vr/qml/dashboard/CreateWallet.qml b/src/vr/qml/dashboard/CreateWallet.qml deleted file mode 100644 index e69de29..0000000 diff --git a/src/vr/qml/dashboard/HelpPage.qml b/src/vr/qml/dashboard/HelpPage.qml deleted file mode 100644 index e69de29..0000000 diff --git a/src/vr/qml/wallet/HistoryTable.qml b/src/vr/qml/wallet/HistoryTable.qml index 14a84c6..b3ffccf 100755 --- a/src/vr/qml/wallet/HistoryTable.qml +++ b/src/vr/qml/wallet/HistoryTable.qml @@ -13,7 +13,8 @@ import "../common" Item { id: root - property var modelx + property var txModel + property int txCount: 0 property var txModelData: [] property int sideMargin: 20 @@ -24,6 +25,12 @@ Item { anchors.fill: parent spacing: 0 + MyText { + visible: txCount == 0 + opacity: 0.75 + text: "No transactions to display." + } + ListView { id: listView visible: true @@ -31,11 +38,11 @@ Item { Layout.fillWidth: true Layout.fillHeight: true spacing: 10 - model: modelx + model: txModel interactive: false delegate: Rectangle { - id: delegate + id: delegate anchors.left: parent ? parent.left : undefined anchors.right: parent ? parent.right : undefined height: 54 @@ -64,6 +71,7 @@ Item { confirmationsRequired = getTxData(index, TransactionHistoryModel.TransactionConfirmationsRequiredRole); confirmed = confirmations >= confirmationsRequired; + root.txCount = index; } RowLayout { @@ -74,16 +82,16 @@ Item { anchors.right: parent.right Rectangle { - Layout.preferredWidth: 56 - Layout.fillHeight: true - color: "#406288" - - Image { - width: 32 - height: 32 - anchors.horizontalCenter: parent.horizontalCenter - anchors.verticalCenter: parent.verticalCenter - source: { + Layout.preferredWidth: 56 + Layout.fillHeight: true + color: "#406288" + + Image { + width: 32 + height: 32 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + source: { if(failed) return "qrc:/assets/images/warning.png" else if(pending) return "qrc:/assets/images/unconfirmed.png" else if(!confirmed) return "qrc:/assets/images/clock1.png" @@ -91,98 +99,89 @@ Item { else return "qrc:/assets/images/confirmed.png" //confirmed ? "qrc:/checkmark_icon" : "qrc:/expired_icon" } - } + } } Rectangle { - Layout.preferredWidth: 300 - Layout.leftMargin: 10 - Layout.rightMargin: 10 - Layout.fillHeight: true - color: "transparent" + Layout.preferredWidth: 300 + Layout.leftMargin: 10 + Layout.rightMargin: 10 + Layout.fillHeight: true + color: "transparent" - MyText { + MyText { // date - anchors.verticalCenter: parent.verticalCenter - fontSize: 12 + anchors.verticalCenter: parent.verticalCenter + fontSize: 12 fontColor: "white" - text: date + text: date - Component.onCompleted: { - parent.Layout.preferredWidth = width; - } - } + Component.onCompleted: { + parent.Layout.preferredWidth = width; + } + } } Rectangle { - Layout.fillHeight: true - Layout.leftMargin: 10 - color: "transparent" - - MyText { - anchors.verticalCenter: parent.verticalCenter - fontSize: 14 - text: description !== "" ? description : "..." + Layout.fillHeight: true + Layout.leftMargin: 10 + color: "transparent" + + MyText { + anchors.verticalCenter: parent.verticalCenter + fontSize: 14 + text: description !== "" ? description : "..." fontColor: description !== "" ? "white" : "#cccccc" - Component.onCompleted: { - parent.Layout.preferredWidth = width; - } - } + Component.onCompleted: { + parent.Layout.preferredWidth = width; + } + } } Item { - Layout.fillWidth: true + Layout.fillWidth: true } Rectangle { - Layout.preferredWidth: 420 - Layout.fillHeight: true - color: "#406288" - - MyText { - anchors.right: parent.right - anchors.rightMargin: 10 - - anchors.verticalCenter: parent.verticalCenter - fontSize: 14 - fontBold: true - text: amount - fontColor: !isout ? "#00d304" : "red" - } + Layout.preferredWidth: 420 + Layout.fillHeight: true + color: "#406288" + + MyText { + anchors.right: parent.right + anchors.rightMargin: 10 + + anchors.verticalCenter: parent.verticalCenter + fontSize: 14 + fontBold: true + text: amount + fontColor: !isout ? "#00d304" : "red" + } } - } - } - } - - Item { - Layout.fillHeight: true - } - } - - Rectangle { - z: parent.z - 1 - color: "transparent" - anchors.fill: parent - } + } + } + } - function getTxData(x, y) { - var idx = modelx.index(x, y); - return modelx.data(idx, 0); + Item { + Layout.fillHeight: true + } } - function updateTransactionsFromModel() { - // This function copies the items of `appWindow.currentWallet.historyModel` to `root.txModelData`, as a list of javascript objects - if(appWindow.currentWallet == null || typeof appWindow.currentWallet.history === "undefined" ) return; + Rectangle { + z: parent.z - 1 + color: "transparent" + anchors.fill: parent + } - var _model = root.model; - var total = 0 - var count = _model.rowCount() - root.txModelData = []; + function getTxData(x, y) { + var idx = txModel.index(x, y); + return txModel.data(idx, 0); } function onPageCompleted() { if(currentWallet == null || typeof currentWallet.history === "undefined" ) return; - root.modelx = appWindow.currentWallet.historyModel; + root.txCount = 0; + root.txModel = appWindow.currentWallet.historyModel; //root.model.sortRole = TransactionHistoryModel.TransactionBlockHeightRole; //root.model.sort(0, Qt.DescendingOrder); } diff --git a/src/vr/qml/wallet/ReceivePage.qml b/src/vr/qml/wallet/ReceivePage.qml index 82ebdf6..e13308e 100755 --- a/src/vr/qml/wallet/ReceivePage.qml +++ b/src/vr/qml/wallet/ReceivePage.qml @@ -6,249 +6,134 @@ import "." import "../common" MyStackViewPage { + id: root headerText: "Receive" - MyDialogOkPopup { - id: chaperoneMessageDialog - function showMessage(title, text) { - dialogTitle = title - dialogText = text - open() - } - } - - MyDialogOkCancelPopup { - id: chaperoneDeleteProfileDialog - property int profileIndex: -1 - dialogTitle: "Delete Profile" - dialogText: "Do you really want to delete this profile?" - onClosed: { - if (okClicked) { - ChaperoneTabController.deleteChaperoneProfile(profileIndex) - } - } - } - - MyDialogOkCancelPopup { - id: chaperoneNewProfileDialog - dialogTitle: "Create New Profile" - dialogWidth: 800 - dialogHeight: 780 - dialogContentItem: ColumnLayout { - RowLayout { - Layout.topMargin: 16 - Layout.leftMargin: 16 - Layout.rightMargin: 16 - MyText { - text: "Name: " - } - MyTextField { - id: chaperoneNewProfileName - keyBoardUID: 390 - color: "#cccccc" - text: "" - Layout.fillWidth: true - font.pointSize: 20 - function onInputEvent(input) { - chaperoneNewProfileName.text = input - } - } - } - MyText { - Layout.topMargin: 24 - text: "What to include:" - } - MyToggleButton { - id: chaperoneNewProfileIncludeGeometry - Layout.leftMargin: 32 - text: "Chaperone Geometry" - } - MyToggleButton { - id: chaperoneNewProfileIncludeStyle - Layout.leftMargin: 32 - text: "Chaperone Style" - } - MyToggleButton { - id: chaperoneNewProfileIncludeBoundsColor - Layout.leftMargin: 32 - text: "Chaperone Color" - } - MyToggleButton { - id: chaperoneNewProfileIncludeVisibility - Layout.leftMargin: 32 - text: "Visibility Setting" - } - MyToggleButton { - id: chaperoneNewProfileIncludeFadeDistance - Layout.leftMargin: 32 - text: "Fade Distance Setting" - } - MyToggleButton { - id: chaperoneNewProfileIncludeCenterMarker - Layout.leftMargin: 32 - text: "Center Marker Setting" - } - MyToggleButton { - id: chaperoneNewProfileIncludePlaySpaceMarker - Layout.leftMargin: 32 - text: "Play Space Marker Setting" - } - MyToggleButton { - id: chaperoneNewProfileIncludeFloorBoundsMarker - Layout.leftMargin: 32 - text: "Floor Bounds Always On Setting" - } - MyToggleButton { - id: chaperoneNewProfileIncludeForceBounds - Layout.leftMargin: 32 - text: "Force Bounds Setting" - } - MyToggleButton { - id: chaperoneNewProfileIncludeProximityWarnings - Layout.leftMargin: 32 - text: "Proximity Warning Settings" - } - } - onClosed: { - if (okClicked) { - if (chaperoneNewProfileName.text == "") { - chaperoneMessageDialog.showMessage("Create New Profile", "ERROR: Empty profile name.") - } else if (!chaperoneNewProfileIncludeGeometry.checked - && !chaperoneNewProfileIncludeVisibility.checked - && !chaperoneNewProfileIncludeFadeDistance.checked - && !chaperoneNewProfileIncludeCenterMarker.checked - && !chaperoneNewProfileIncludePlaySpaceMarker.checked - && !chaperoneNewProfileIncludeFloorBoundsMarker.checked - && !chaperoneNewProfileIncludeBoundsColor.checked - && !chaperoneNewProfileIncludeStyle.checked - && !chaperoneNewProfileIncludeForceBounds.checked - && !chaperoneNewProfileIncludeProximityWarnings.checked) { - chaperoneMessageDialog.showMessage("Create New Profile", "ERROR: Nothing included.") - } else if ( Math.abs(MoveCenterTabController.offsetX) > 0.00000000001 - || Math.abs(MoveCenterTabController.offsetY) > 0.00000000001 - || Math.abs(MoveCenterTabController.offsetZ) > 0.00000000001 - || MoveCenterTabController.rotation !== 0) { - chaperoneMessageDialog.showMessage("Create New Profile", "ERROR: Offsets not reset.") - } else { - ChaperoneTabController.addChaperoneProfile(chaperoneNewProfileName.text, - chaperoneNewProfileIncludeGeometry.checked, - chaperoneNewProfileIncludeVisibility.checked, - chaperoneNewProfileIncludeFadeDistance.checked, - chaperoneNewProfileIncludeCenterMarker.checked, - chaperoneNewProfileIncludePlaySpaceMarker.checked, - chaperoneNewProfileIncludeFloorBoundsMarker.checked, - chaperoneNewProfileIncludeBoundsColor.checked, - chaperoneNewProfileIncludeStyle.checked, - chaperoneNewProfileIncludeForceBounds.checked, - chaperoneNewProfileIncludeProximityWarnings.checked) - } - - } - } - function openPopup() { - chaperoneNewProfileName.text = "" - chaperoneNewProfileIncludeGeometry.checked = false - chaperoneNewProfileIncludeVisibility.checked = false - chaperoneNewProfileIncludeFadeDistance.checked = false - chaperoneNewProfileIncludeCenterMarker.checked = false - chaperoneNewProfileIncludePlaySpaceMarker.checked = false - chaperoneNewProfileIncludeFloorBoundsMarker.checked = false - chaperoneNewProfileIncludeBoundsColor.checked = false - chaperoneNewProfileIncludeStyle.checked = false - chaperoneNewProfileIncludeForceBounds.checked = false - chaperoneNewProfileIncludeProximityWarnings.checked = false - open() - } - } - - content: ColumnLayout { + Layout.fillWidth: true spacing: 30 - MyText { + RowLayout { + spacing: 30 Layout.fillWidth: true - wrap: true - text: "Give the following 4 digit PIN to the person that is sending you Wownero. PIN's are valid for 5 minutes and automatically renew." - } - ColumnLayout { - MyText { - visible: false - fontSize: 14 - text: "Currently generating PIN." - } + ColumnLayout { + spacing: 20 + Layout.fillWidth: true + + Rectangle { + color: "transparent" + Layout.fillWidth: true + Layout.preferredHeight: 120 - Text { - visible: true - text: "0 0 0 0" - color: "#ffffff" - font.bold: true - font.pointSize: 40 - leftPadding: 20 - rightPadding: 20 + MyText { + width: parent.width + wrap: true + fontSize: 14 + text: "Give the following 4 digit PIN to the person that is sending you Wownero. PIN's are valid for 10 minutes and automatically renew." + } + } Rectangle { - z: parent.z - 1 - anchors.fill: parent - color: "black" + color: "transparent" + Layout.fillWidth: true + Layout.preferredHeight: 220 + + ColumnLayout { + spacing: 20 + MyText { + id: statusText + width: parent.width + visible: true + fontSize: 14 + text: "Generating PIN..." + } + + Text { + id: pinText + visible: false + text: "- - - -" + color: "#ffffff" + font.bold: true + font.pointSize: 40 + leftPadding: 20 + rightPadding: 20 + + Rectangle { + z: parent.z - 1 + anchors.fill: parent + color: "black" + } + } + } } - } - MyText { - id: expireText - visible: true - fontSize: 14 - text: "Expires in 40 seconds." + Item { + Layout.fillWidth: true + Layout.fillHeight: true + } } + Rectangle { + color: "#cccccc" + width: 1 + Layout.fillHeight: true + } - } + ColumnLayout { + Layout.fillWidth: true - Rectangle { - color: "#cccccc" - height: 1 - Layout.topMargin: 10 - Layout.fillWidth: true - } + Rectangle { + color: "transparent" + Layout.fillWidth: true + Layout.preferredHeight: 80 + Layout.bottomMargin: 20 + + MyText { + width: parent.width + fontSize: 14 + wrap: true + text: "Alternatively, you may use one of the following methods to retreive your address." + } + } - MyText { - Layout.fillWidth: true - wrap: true - text: "Alternatively, you may use one of the following methods." - } + MyPushButton { + id: viewAddress + text: "View address" + Layout.preferredHeight: 70 + Layout.fillWidth: true - RowLayout { - Layout.topMargin: 10 + onClicked: { + //walletView.push(chaperoneAdditionalPage) + } + } - MyPushButton { - id: viewAddress - text: "View address" - Layout.preferredWidth: 360 + MyPushButton { + id: copyToClipboard + text: "Copy address to clipboard" + Layout.preferredHeight: 70 + Layout.fillWidth: true - onClicked: { - MyResources.playFocusChangedSound() - walletView.push(chaperoneAdditionalPage) + onClicked: { + MyResources.playFocusChangedSound() + walletView.push(chaperoneAdditionalPage) + } } - } - MyPushButton { - id: copyToClipboard - text: "Copy address to clipboard" - Layout.preferredWidth: 540 + MyPushButton { + id: writeQRcode + text: "Save QR image" + Layout.preferredHeight: 70 + Layout.fillWidth: true - onClicked: { - MyResources.playFocusChangedSound() - walletView.push(chaperoneAdditionalPage) + onClicked: { + chaperoneNewProfileDialog.open(); + } } - } - - MyPushButton { - id: writeQRcode - text: "QR image" - Layout.preferredWidth: 340 - onClicked: { - chaperoneNewProfileDialog.open(); + Item { + Layout.fillHeight: true + Layout.fillWidth: true } } } @@ -262,5 +147,58 @@ MyStackViewPage { function onPageCompleted() { console.log("onPageCompleted() ReceivePage") + pinAskTimer.start(); + askReceivingPIN(); + } + + function resetPage() { + pinAskTimer.stop(); + statusText.visible = true; + statusText.text = "Generating PIN..."; + pinText.visible = false; + pinText.text = "- - - -"; + } + + onBackClicked: { + resetPage(); + } + + Timer { + id: pinAskTimer + interval: 1000 * 5; + running: false; + repeat: true + onTriggered: askReceivingPIN() + triggeredOnStart: false + } + + function askReceivingPIN() { + ctx.onAskReceivingPIN(); + } + + Connections { + target: ctx + + function onPinReceived(pin) { + console.log("onPINReceived", pin); + statusText.visible = false; + pinText.visible = true; + pinText.text = pin[0] + " " + pin[1] + " " + pin[2] + " " + pin[3]; + } + } + + Connections { + target: OverlayController + + function onDashboardDeactivated() { + console.log("onDashboardDeactivated()") + pinAskTimer.stop(); + } + + function onDashboardActivated() { + console.log("onDashboardActivated()") + if(walletView.currentItem == root) + pinAskTimer.start(); + } } } diff --git a/src/vr/qml/wallet/WalletDashBoardPage.qml b/src/vr/qml/wallet/WalletDashBoardPage.qml index 35b4730..86a6b4c 100644 --- a/src/vr/qml/wallet/WalletDashBoardPage.qml +++ b/src/vr/qml/wallet/WalletDashBoardPage.qml @@ -6,8 +6,6 @@ import QtQuick.Window 2.0 import QtQuick.Controls.Styles 1.4 import QtQuick.Dialogs 1.2 -// import ovrwow.wowletvr 1.0 - import "../common" import "." @@ -63,6 +61,7 @@ MyStackViewPage { } walletView.push(receivePage) + receivePage.onPageCompleted(); } } @@ -74,7 +73,7 @@ MyStackViewPage { Layout.fillWidth: true onClicked: { //MyResources.playFocusChangedSound() - ctx.closeWallet(true, true); + ctx.onCloseWallet(true, true); mainView.pop(); } } diff --git a/src/vr/qml/wallet/send/SendPage.qml b/src/vr/qml/wallet/send/SendPage.qml index 06679a0..4b1000b 100755 --- a/src/vr/qml/wallet/send/SendPage.qml +++ b/src/vr/qml/wallet/send/SendPage.qml @@ -11,7 +11,7 @@ MyStackViewPage { width: 1600 headerText: "Send" - property string destinationAddress: "cool_addy_here" + property string destinationAddress: "" property string enteredColor: "#365473" property string exitedColor: "#2c435d" @@ -102,14 +102,6 @@ MyStackViewPage { } } - // Connections { - // target: sendStateView.dashPage - // function onTest() { - // sendStack.push(pinPage) - // pinPage.onPageCompleted(); - // } - // } - function onPageCompleted(previousView){ sendStateView.state = "dashPage" } diff --git a/src/vr/qml/wallet/send/SendPagePIN.qml b/src/vr/qml/wallet/send/SendPagePIN.qml index 04dd83c..70934a2 100644 --- a/src/vr/qml/wallet/send/SendPagePIN.qml +++ b/src/vr/qml/wallet/send/SendPagePIN.qml @@ -10,24 +10,6 @@ ColumnLayout { Layout.fillWidth: true property string _PINLookup: "" - property int lookupTimeoutSecs: 5; - property int lookupTimeoutCounter: 2; - - Timer { - id: lookupTimer - interval: 1000; - running: false; - repeat: true; - - onTriggered: { - lookupTimeoutCounter -= 1; - - if(lookupTimeoutCounter === 0) { - stop(); - root.onLookupTimeout(); - } - } - } MyText { Layout.fillWidth: true @@ -153,20 +135,6 @@ ColumnLayout { text: _PINLookup } } - - RowLayout { - spacing: 30 - Layout.fillWidth: true - - MyText { - fontBold: true - text: "Timeout:" - } - - MyText { - text: lookupTimeoutCounter + " seconds" - } - } } // Image { @@ -227,35 +195,18 @@ ColumnLayout { numPad.enabled = false; - lookupTimer.start(); - } - - function onLookupTimeout() { - reset(); - messagePopup.showMessage("Lookup failed", "Error getting address.") - sendStateView.state = "transferPage"; + ctx.onLookupReceivingPIN(code); } function onPageCompleted(previousView) { reset(); } - function onWSPINAdressReceived(pin_code, address) { - // address received from websockets - if(pin_code === _PINLookup) { - sendStateController.destinationAddress = address; - sendStateView.state = "transferPage"; - } else { - console.log("PIN lookup received but we timed out already, disregard.") - } - } function reset() { // reset state _PINLookup = ""; - lookupTimer.stop(); - lookupTimeoutCounter = lookupTimeoutSecs; idleContainer.visible = true; foundContainer.visible = false; loadingContainer.visible = false; @@ -266,4 +217,25 @@ ColumnLayout { codeDisplay.text = "0 0 0 0"; } + + Connections { + target: ctx + + function onPinLookupReceived(address, pin) { + console.log("onPinLookupReceived", address); + + if(pin === _PINLookup) { + sendStateController.destinationAddress = address; + sendStateView.state = "transferPage"; + } else { + console.log("PIN lookup received but we timed out already, disregard.") // undefined behavior + } + } + + function onPinLookupErrorReceived() { + console.log("onPinLookupErrorReceived"); + messagePopup.showMessage("Lookup failed", "Error getting address.") + reset(); + } + } } \ No newline at end of file diff --git a/src/vr/qml/wallet/send/SendPageTransfer.qml b/src/vr/qml/wallet/send/SendPageTransfer.qml index ede8a69..c0ee2ff 100644 --- a/src/vr/qml/wallet/send/SendPageTransfer.qml +++ b/src/vr/qml/wallet/send/SendPageTransfer.qml @@ -133,7 +133,7 @@ ColumnLayout { Layout.preferredHeight: 48 MyText { - text: "Wo3ige...YegEia2" + text: destinationAddress anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right } @@ -171,7 +171,7 @@ ColumnLayout { text: "Enter amount via virtual keyboard" onClicked: { - OverlayController.showKeyboard(text, "1337") + OverlayController.showKeyboard(text, 1337) } } @@ -193,8 +193,9 @@ ColumnLayout { Connections { target: OverlayController + function onKeyBoardInputSignal(input, userValue) { - if (userValue == "1337") { + if (userValue == 1337) { let val = parseFloat(input); myNumPadSendAmount.onAmountUpdated(val); } diff --git a/src/widgets/suchwowwidget.cpp b/src/widgets/suchwowwidget.cpp index c3792a7..bb46257 100644 --- a/src/widgets/suchwowwidget.cpp +++ b/src/widgets/suchwowwidget.cpp @@ -19,6 +19,7 @@ SuchWowPost::SuchWowPost(AppContext *ctx, QObject *parent) : m_ctx(ctx) { m_networkImg = new UtilsNetworking(m_ctx->network, this); m_networkThumb = new UtilsNetworking(m_ctx->network, this); + m_weburl = QString("http://%1/suchwow").arg(this->m_ctx->wsUrl); } void SuchWowPost::onThumbReceived(QByteArray data) { diff --git a/src/widgets/suchwowwidget.h b/src/widgets/suchwowwidget.h index 802a845..543936e 100644 --- a/src/widgets/suchwowwidget.h +++ b/src/widgets/suchwowwidget.h @@ -57,8 +57,7 @@ signals: void thumbReceived(SuchWowPost *test); private: - // @TODO: Replace url - QString m_weburl = "http://feathercitimllbmdktu6cmjo3fizgmyfrntntqzu6xguqa2rlq5cgid.onion/suchwow"; + QString m_weburl; AppContext *m_ctx = nullptr; UtilsNetworking *m_networkThumb = nullptr; UtilsNetworking *m_networkImg = nullptr; diff --git a/src/wizard/walletwizard.cpp b/src/wizard/walletwizard.cpp index 7613bcc..8cf9b8e 100644 --- a/src/wizard/walletwizard.cpp +++ b/src/wizard/walletwizard.cpp @@ -42,7 +42,7 @@ WalletWizard::WalletWizard(AppContext *ctx, WalletWizard::Page startPage, QWidge setStartId(Page_Menu); setButtonText(QWizard::CancelButton, "Close"); - setPixmap(QWizard::WatermarkPixmap, QPixmap(":/assets/images/photos/wow20.png")); + setPixmap(QWizard::WatermarkPixmap, QPixmap(":/assets/images/photos/wow40.png")); setWizardStyle(WizardStyle::ModernStyle); setOption(QWizard::NoBackButtonOnStartPage); From 8b1250030b6c626670977d32759219dff1ea3ead Mon Sep 17 00:00:00 2001 From: dsc Date: Thu, 8 Apr 2021 03:40:44 +0200 Subject: [PATCH 06/15] Ready for beta --- src/CMakeLists.txt | 1 + src/appcontext.cpp | 10 +- src/appcontext.h | 6 + src/main.cpp | 2 +- src/utils/config.cpp | 1 + src/utils/config.h | 1 + src/utils/utils.cpp | 5 + src/utils/utils.h | 1 + src/utils/wsserver.cpp | 6 +- src/vr/assets/themes.json | 39 ++++ src/vr/main.cpp | 46 ++++- src/vr/main.h | 42 +++++ src/vr/main.qml | 171 +++++++++++++++--- src/vr/overlaycontroller.cpp | 4 +- src/vr/qml.qrc | 6 + src/vr/qml/AboutPage.qml | 7 +- src/vr/qml/DashboardPage.qml | 69 ++++--- src/vr/qml/SettingsPage.qml | 124 +++++++++++++ src/vr/qml/common/BackgroundGradientDebug.qml | 96 ++++++++++ src/vr/qml/common/ImageMask.qml | 36 ++++ src/vr/qml/common/MyComboBox.qml | 14 +- src/vr/qml/common/MyDialogOkCancelPopup.qml | 9 +- src/vr/qml/common/MyDialogOkPopup.qml | 17 +- src/vr/qml/common/MyNumPadButton.qml | 24 ++- src/vr/qml/common/MyNumPadSendAmount.qml | 45 ++--- src/vr/qml/common/MyPushButton.qml | 43 ++++- src/vr/qml/common/MySlider.qml | 2 +- src/vr/qml/common/MyStackViewPage.qml | 107 ++++------- src/vr/qml/common/MyText.qml | 6 +- src/vr/qml/common/MyTextField.qml | 4 +- src/vr/qml/common/Style.qml | 31 ++++ src/vr/qml/common/qmldir | 1 + src/vr/qml/wallet/HistoryTable.qml | 14 +- src/vr/qml/wallet/ReceivePage.qml | 20 +- src/vr/qml/wallet/WalletDashBoardPage.qml | 3 +- src/vr/qml/wallet/send/SendPage.qml | 4 - src/vr/qml/wallet/send/SendPageDashboard.qml | 41 ++--- .../wallet/send/SendPageDashboardButton.qml | 44 +++++ src/vr/qml/wallet/send/SendPagePIN.qml | 50 +---- src/vr/qml/wallet/send/SendPageQR.qml | 2 + src/vr/qml/wallet/send/SendPageTransfer.qml | 109 +++++++++-- 41 files changed, 948 insertions(+), 315 deletions(-) create mode 100644 src/vr/assets/themes.json create mode 100644 src/vr/qml/SettingsPage.qml create mode 100644 src/vr/qml/common/BackgroundGradientDebug.qml create mode 100644 src/vr/qml/common/ImageMask.qml create mode 100644 src/vr/qml/common/Style.qml create mode 100644 src/vr/qml/common/qmldir create mode 100644 src/vr/qml/wallet/send/SendPageDashboardButton.qml diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 39f148a..67e3129 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -186,6 +186,7 @@ target_compile_definitions(wowlet PUBLIC VR_API_PUBLIC) if(QML) qt5_import_qml_plugins(${PROJECT_NAME}) + target_compile_definitions(wowlet PRIVATE HAS_QML=1) endif() target_compile_definitions(wowlet diff --git a/src/appcontext.cpp b/src/appcontext.cpp index 910fd0c..ff63609 100644 --- a/src/appcontext.cpp +++ b/src/appcontext.cpp @@ -829,9 +829,16 @@ void AppContext::onTransactionCreated(PendingTransaction *tx, const QVectorautoCommitTx) { + this->currentWallet->commitTransactionAsync(tx); + } +} + +QString AppContext::getAddress(quint32 accountIndex, quint32 addressIndex) { + return this->currentWallet->address(accountIndex, addressIndex); } -#if defined(HAS_OPENVR) void AppContext::onAskReceivingPIN() { // request new receiving PIN from wowlet-backend if(this->currentWallet == nullptr) @@ -870,7 +877,6 @@ void AppContext::onLookupReceivingPIN(QString pin) { QJsonDocument doc = QJsonDocument(obj); this->ws->sendMsg(doc.toJson(QJsonDocument::Compact)); } -#endif void AppContext::onTransactionCommitted(bool status, PendingTransaction *tx, const QStringList& txid){ this->currentWallet->history()->refresh(this->currentWallet->currentSubaddressAccount()); diff --git a/src/appcontext.h b/src/appcontext.h index bd33572..dcca7e9 100644 --- a/src/appcontext.h +++ b/src/appcontext.h @@ -78,6 +78,11 @@ public: PendingTransaction::Priority tx_priority = PendingTransaction::Priority::Priority_Low; quint32 tx_mixin = static_cast(10); QString seedLanguage = "English"; // 14 word `monero-seed` only has English + // turn this on if you want to auto commit tx's after they have + // been created. Caution while using this setting is advised. This + // probably also breaks the default QtWidgets GUI. It is meant for + // alternative users of AppContext. + bool autoCommitTx = false; QNetworkAccessManager *network; QNetworkAccessManager *networkClearnet; @@ -142,6 +147,7 @@ public slots: void onPreferredFiatCurrencyChanged(const QString &symbol); Q_INVOKABLE void onAskReceivingPIN(); Q_INVOKABLE void onLookupReceivingPIN(QString pin); + Q_INVOKABLE QString getAddress(quint32 accountIndex, quint32 addressIndex); private slots: void onWSNodes(const QJsonArray &nodes); diff --git a/src/main.cpp b/src/main.cpp index 501149b..3393f4e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -114,7 +114,7 @@ if (AttachConsole(ATTACH_PARENT_PROCESS)) { qRegisterMetaType>(); -#ifdef QML +#ifdef HAS_QML qputenv("QML_DISABLE_DISK_CACHE", "1"); #endif diff --git a/src/utils/config.cpp b/src/utils/config.cpp index a605a5d..4868860 100644 --- a/src/utils/config.cpp +++ b/src/utils/config.cpp @@ -25,6 +25,7 @@ static const QHash configStrings = { {Config::homeWidget,{QS("homeWidget"), "ccs"}}, {Config::donateBeg,{QS("donateBeg"), 1}}, {Config::skin,{QS("skin"), "light"}}, + {Config::openVRSkin,{QS("openVRSkin"), "default"}}, {Config::preferredFiatCurrency,{QS("preferredFiatCurrency"), "USD"}}, {Config::blockExplorer,{QS("blockExplorer"), "explore.wownero.com"}}, {Config::walletDirectory,{QS("walletDirectory"), ""}}, diff --git a/src/utils/config.h b/src/utils/config.h index abc408d..b49155a 100644 --- a/src/utils/config.h +++ b/src/utils/config.h @@ -28,6 +28,7 @@ public: donateBeg, autoOpenWalletPath, skin, + openVRSkin, preferredFiatCurrency, blockExplorer, walletDirectory, diff --git a/src/utils/utils.cpp b/src/utils/utils.cpp index b27e00f..eef71b9 100644 --- a/src/utils/utils.cpp +++ b/src/utils/utils.cpp @@ -399,6 +399,11 @@ QLocale Utils::getCurrencyLocale(const QString ¤cyCode) { return locale; } +double Utils::roundUp(double value, int decimal_places) { + const double multiplier = std::pow(10.0, decimal_places); + return std::ceil(value * multiplier) / multiplier; +} + QString Utils::amountToCurrencyString(double amount, const QString ¤cyCode) { QLocale locale = getCurrencyLocale(currencyCode); diff --git a/src/utils/utils.h b/src/utils/utils.h index 962e000..5436a4d 100644 --- a/src/utils/utils.h +++ b/src/utils/utils.h @@ -73,6 +73,7 @@ public: static QLocale getCurrencyLocale(const QString ¤cyCode); static QString amountToCurrencyString(double amount, const QString ¤cyCode); static int maxLength(const QVector &array); + static double roundUp(double value, int decimal_places); static QMap localeCache; static QString balanceFormat(quint64 balance); static QTextCharFormat addressTextFormat(const SubaddressIndex &index); diff --git a/src/utils/wsserver.cpp b/src/utils/wsserver.cpp index 077432f..9480915 100644 --- a/src/utils/wsserver.cpp +++ b/src/utils/wsserver.cpp @@ -38,6 +38,9 @@ WSServer::WSServer(AppContext *ctx, const QHostAddress &host, const quint16 port if (!m_pWebSocketServer->listen(QHostAddress::Any, port)) return; + // turn on auto tx commits + ctx->autoCommitTx = true; + qDebug() << "websocket server listening on port" << port; connect(m_pWebSocketServer, &QWebSocketServer::newConnection, this, &WSServer::onNewConnection); @@ -364,8 +367,7 @@ void WSServer::onCreateTransactionError(const QString &message) { } void WSServer::onCreateTransactionSuccess(PendingTransaction *tx, const QVector &address) { - // auto-commit all tx's - m_ctx->currentWallet->commitTransactionAsync(tx); + } void WSServer::onTransactionCommitted(bool status, PendingTransaction *tx, const QStringList &txid) { diff --git a/src/vr/assets/themes.json b/src/vr/assets/themes.json new file mode 100644 index 0000000..4c2f049 --- /dev/null +++ b/src/vr/assets/themes.json @@ -0,0 +1,39 @@ +{ + "default": { + "fontColor": "white", + "fontColorDimmed": "#cccccc", + "fontColorBright": "white", + "backgroundGradientStartColor": "#194f64", + "backgroundGradientStopColor": "#192e43", + "backgroundColor": "#1b2939", + "divideColor": "50ffffff", + "btnEnteredColor": "#aa3b689b", + "btnExitedColor": "#aa375c87", + "btnPressedColor": "#aa467dbb", + "btnTextHoverColor": "white", + "btnTextColor": "white", + "btnMainMenuBackground": "#aa3b689b", + "historyBackgroundColor": "#2c435d", + "historyBackgroundColorBright": "#406288", + "historyFontColorPlusAmount": "#00d304", + "historyFontColorMinAmount": "red" + }, + "wownero": { + "fontColor": "#bd93f9", + "fontColorBright": "#e5d3ff", + "backgroundGradientStartColor": "#383a59", + "backgroundGradientStopColor": "#282a36", + "backgroundColor": "#282a36", + "divideColor": "50ffffff", + "btnEnteredColor": "#bd93f9", + "btnExitedColor": "#50000000", + "btnPressedColor": "#bd93f9", + "btnTextHoverColor": "black", + "btnTextColor": "#bcc2cd", + "btnMainMenuBackground": "#50000000", + "historyBackgroundColor": "#30314d", + "historyBackgroundColorBright": "#383a59", + "historyFontColorPlusAmount": "#00d304", + "historyFontColorMinAmount": "red" + } +} \ No newline at end of file diff --git a/src/vr/main.cpp b/src/vr/main.cpp index 5870284..fedf4e7 100644 --- a/src/vr/main.cpp +++ b/src/vr/main.cpp @@ -32,8 +32,15 @@ namespace wowletvr { WowletVR::WowletVR(AppContext *ctx, QCommandLineParser *parser, QObject *parent) : QObject(parent), ctx(ctx), m_parser(parser) { - desktopMode = m_parser->isSet("openvr-debug"); AppContext::isQML = true; + m_pClipboard = QGuiApplication::clipboard(); + desktopMode = m_parser->isSet("openvr-debug"); + + // Init QML themes + this->readThemes(); + + // turn on auto tx commits + ctx->autoCommitTx = true; // write icon to disk so openvr overlay can refer to it auto icon = ":/assets/images/wowlet.png"; @@ -47,7 +54,7 @@ namespace wowletvr { #ifdef Q_OS_WIN if(desktopMode) - qputenv("QMLSCENE_DEVICE", "softwarecontext"); + qputenv("QMLSCENE_DEVICE", "softwarecontext"); // virtualbox #endif qDebug() << "QMLSCENE_DEVICE: " << qgetenv("QMLSCENE_DEVICE"); qInfo() << "OPENSSL VERSION: " << QSslSocket::sslLibraryBuildVersionString(); @@ -59,10 +66,11 @@ namespace wowletvr { m_engine.rootContext()->setContextProperty("ctx", ctx); // qmlRegisterType("moneroComponents.Clipboard", 1, 0, "Clipboard"); + m_engine.rootContext()->setContextProperty("WowletVR", this); qRegisterMetaType(); qmlRegisterType("wowlet.NetworkType", 1, 0, "NetworkType"); - qmlRegisterUncreatableType("wowlet.WalletKeysFiles", 1, 0, "WalletKeysFiles", "lol"); + qmlRegisterUncreatableType("wowlet.WalletKeysFiles", 1, 0, "WalletKeysFiles", "WalletKeysFiles can't be instantiated directly"); qmlRegisterUncreatableType("wowlet.Wallet", 1, 0, "Wallet", "Wallet can't be instantiated directly"); qmlRegisterType("wowlet.WalletManager", 1, 0, "WalletManager"); @@ -82,11 +90,11 @@ namespace wowletvr { if(!desktopMode) { if(!openvr_init::initializeOpenVR(openvr_init::OpenVrInitializationType::Overlay)) throw std::runtime_error("Error: initializeOpenVR()"); - - m_controller = new wowletvr::OverlayController(desktopMode, m_engine); - m_engine.rootContext()->setContextProperty("OverlayController", m_controller); } + m_controller = new wowletvr::OverlayController(desktopMode, m_engine); + m_engine.rootContext()->setContextProperty("OverlayController", m_controller); + auto widgetUrl = QUrl(QStringLiteral("qrc:///main")); m_component = new QQmlComponent(&m_engine, widgetUrl); @@ -116,8 +124,30 @@ namespace wowletvr { m_controller->SetWidget(quickObjItem, displayName, appKey, iconPath.toStdString()); } - WowletVR::~WowletVR() { - int weoignwieog = 1; + void WowletVR::readThemes() { + theme_names = QVariantList(); + themes = QVariantMap(); + + auto lol = Utils::fileOpen(":/qml_themes.json"); + auto doc = QJsonDocument::fromJson(lol); + QJsonObject obj = doc.object(); + + foreach(const QString &themeName, obj.keys()) { + theme_names << themeName; + + QJsonValue value = obj.value(themeName); + QJsonObject theme = value.toObject(); + QVariantMap map; + foreach(const QString &key, theme.keys()) { + map[key] = theme.value(key).toString(); + } + + themes[themeName] = map; + } }; + + WowletVR::~WowletVR() { + // bla + } } \ No newline at end of file diff --git a/src/vr/main.h b/src/vr/main.h index 4c94492..4889b09 100644 --- a/src/vr/main.h +++ b/src/vr/main.h @@ -8,9 +8,13 @@ #include #include #include +#include +#include +#include #include "overlaycontroller.h" #include "appcontext.h" +#include "utils/config.h" namespace wowletvr { @@ -20,9 +24,46 @@ namespace wowletvr { explicit WowletVR(AppContext *ctx, QCommandLineParser *cmdargs, QObject *parent = nullptr); ~WowletVR() override; + void readThemes(); void render(); QList errors; + QVariantList theme_names; + QVariantMap themes; + + Q_INVOKABLE QVariantMap getThemes() { + return themes; + } + + Q_INVOKABLE QString getCurrentTheme() { + return config()->get(Config::openVRSkin).toString(); + } + + Q_INVOKABLE void setCurrentTheme(QString theme) { + config()->set(Config::openVRSkin, theme); + } + + Q_INVOKABLE double cdiv(double amount) { return amount / globals::cdiv; } + Q_INVOKABLE double add(double x, double y) const { return Utils::roundUp(x + y, 4); } // round ceil 4 decimals + Q_INVOKABLE double sub(double x, double y) const { return Utils::roundUp(x - y, 4); } // round ceil 4 decimals + + Q_INVOKABLE void onCreateTransaction(const QString &address, const QString &amount_str, const QString description, bool all) { + auto amount = WalletManager::amountFromString(amount_str); + ctx->onCreateTransaction(address, amount, description, false); + } + + Q_INVOKABLE void setClipboard(const QString &text) { + m_pClipboard->setText(text, QClipboard::Clipboard); + m_pClipboard->setText(text, QClipboard::Selection); + } + + Q_INVOKABLE QString amountToFiat(double amount) { + auto preferredFiatCurrency = config()->get(Config::preferredFiatCurrency).toString(); + if (amount <= 0) return QString("0.00 %1").arg(preferredFiatCurrency); + + double conversionAmount = AppContext::prices->convert("WOW", preferredFiatCurrency, amount); + return QString("~%1 %2").arg(QString::number(conversionAmount, 'f', 2), preferredFiatCurrency); + } private: AppContext *ctx; @@ -31,6 +72,7 @@ namespace wowletvr { QQmlComponent *m_component; bool desktopMode = false; wowletvr::OverlayController *m_controller; + QClipboard *m_pClipboard; }; } diff --git a/src/vr/main.qml b/src/vr/main.qml index 696261d..0c1df3b 100644 --- a/src/vr/main.qml +++ b/src/vr/main.qml @@ -5,6 +5,7 @@ import QtGraphicalEffects 1.0 import QtQuick.Window 2.0 import QtQuick.Controls.Styles 1.4 import QtQuick.Dialogs 1.2 +import QtGraphicalEffects 1.0 import "." @@ -18,16 +19,58 @@ Rectangle { id: appWindow width: 1600 height: 800 - color: "#1b2939" + color: "transparent" + + property var themes: {} + property string theme: "wownero" + signal initTheme(); + + // Components that have been dynamically created need to redraw + // after theme change (such as Repeater{}, Flow{} items, etc) so + // that the changes propogate. + signal redraw(); + + // For gradient background + property int start_x: 0 + property int start_y: 64 + property int end_x: 1080 + property int end_y: 416 + property double gradientTicks: 1.0; + + LinearGradient { + anchors.fill: parent + start: Qt.point(start_x, start_y) + end: Qt.point(end_x, end_y) + + gradient: Gradient { + GradientStop { position: 0.0; color: Style.backgroundGradientStartColor } + GradientStop { position: 1.0; color: Style.backgroundGradientStopColor } + } + } + + Timer { + // animates the gradient background a bit. + id: gradientBackgroundTimer + repeat: true + interval: 10 + triggeredOnStart: true + + onTriggered: { + appWindow.gradientTicks += 0.004; // speed + let newx = ((1080 - 200) * Math.sin(appWindow.gradientTicks) + 1080 + 200) / 2; + appWindow.end_x = newx; + } + } property var currentWallet; property bool disconnected: currentWallet ? currentWallet.disconnected : false - property string walletTitle: "long wallet name" + property string walletTitle: "placeholder" property string walletPath: "" property string statusText: "Idle" - property string balanceFormatted: "Balance: 25928.9543 WOW" + property string balanceFormatted: "Balance: 0.0 WOW" property bool wsConnected: false property int connectionStatus: Wallet.ConnectionStatus_Disconnected; + signal aboutClicked(); property var balance: 0.0 property var spendable: 0.0 @@ -36,6 +79,10 @@ Rectangle { visible: false } + property SettingsPage settingsPage: SettingsPage { + visible: false + } + property AboutPage aboutPage: AboutPage { visible: false } @@ -66,13 +113,14 @@ Rectangle { Layout.rightMargin: 16 MyText { + fontColor: Style.fontColorBright text: "Password: " } MyTextField { id: walletOpenPassword keyBoardUID: 591 - color: "#cccccc" + color: Style.fontColorDimmed text: "" Layout.fillWidth: true font.pointSize: 20 @@ -110,13 +158,14 @@ Rectangle { Layout.rightMargin: 16 MyText { + fontColor: Style.fontColorBright text: "Name: " } MyTextField { id: newWalletName keyBoardUID: 590 - color: "#cccccc" + color: Style.fontColorDimmed text: "" Layout.fillWidth: true font.pointSize: 20 @@ -132,13 +181,14 @@ Rectangle { Layout.rightMargin: 16 MyText { + fontColor: Style.fontColorBright text: "Password: " } MyTextField { id: newWalletPassword keyBoardUID: 592 - color: "#cccccc" + color: Style.fontColorDimmed text: "" Layout.fillWidth: true font.pointSize: 20 @@ -152,7 +202,7 @@ Rectangle { Layout.topMargin: 20 Layout.leftMargin: 16 fontSize: 16 - fontColor: "#cccccc" + fontColor: Style.fontColorDimmed text: "The password field is optional." } @@ -174,8 +224,35 @@ Rectangle { } } + // About/credits button + Rectangle { + visible: mainView.currentItem == dashboardPage + color: "transparent" + width: 140 + height: 60 + anchors.bottom: parent.bottom + anchors.right: parent.right + + MyText { + text: "Credits" + fontSize: 12 + opacity: 0.3 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + fontColor: Style.fontColor + } + + MouseArea { + anchors.fill: parent + onClicked: { + aboutClicked(); + } + } + } + StackView { id: mainView + visible: true anchors.fill: parent pushEnter: Transition { @@ -225,6 +302,54 @@ Rectangle { ctx.initTor(); ctx.initWS(); } + + // Start animating the background + gradientBackgroundTimer.start(); + + try { + appWindow.themes = WowletVR.getThemes(); + appWindow.theme = WowletVR.getCurrentTheme(); + } + catch(err) { + // for debugging purposes - do not change color codes here, use themes.json instead. + appWindow.themes = { + "default": { + "fontColor": "white", + "fontColorDimmed": "#cccccc", + "fontColorBright": "#white", + "backgroundGradientStartColor": "#194f64", + "backgroundGradientStopColor": "#192e43", + }, + "wownero": { + "fontColor": "#bd93f9", + "fontColorDimmed": "#cccccc", + "fontColorBright": "#e5d3ff", + "backgroundGradientStartColor": "#383a59", + "backgroundGradientStopColor": "#282a36", + } + } + } + + appWindow.changeTheme(appWindow.theme); + appWindow.initTheme(); + } + + function changeTheme(theme) { + console.log("changeTheme", theme); + + for (var key in appWindow.themes[theme]){ + let val = appWindow.themes[theme][key]; + if(Style.hasOwnProperty(key)) + Style[key] = val; + } + + if(appWindow.theme != theme) { + appWindow.theme = theme; + try { WowletVR.setCurrentTheme(theme); } + catch(err) {} + } + + appWindow.redraw(); } Connections { @@ -251,17 +376,6 @@ Rectangle { appWindow.currentWallet.connectionStatusChanged.connect(onConnectionStatusChanged); } - // function onWalletOpened(Wallet *wallet) { - // currentWallet.moneySpent.connect(onWalletMoneySent) - // currentWallet.moneyReceived.connect(onWalletMoneyReceived) - // currentWallet.unconfirmedMoneyReceived.connect(onWalletUnconfirmedMoneyReceived) - // currentWallet.transactionCreated.connect(onTransactionCreated) - // currentWallet.connectionStatusChanged.connect(onWalletConnectionStatusChanged) - // currentWallet.transactionCommitted.connect(onTransactionCommitted); - - // middlePanel.paymentClicked.connect(handlePayment); - // } - function onBlockchainSync(height, target) { let blocks = (target > height) ? (target - height) : "?"; let heightText = "Blockchain sync: " + blocks + " blocks remaining"; @@ -277,8 +391,6 @@ Rectangle { function onWalletClosed() { console.log("onWalletClosed"); - appWindow.currentWallet.connectionStatusChanged.disconnect(onConnectionStatusChanged); - appWindow.walletTitle = ""; appWindow.balanceFormatted = ""; appWindow.balance = 0.0; @@ -291,8 +403,9 @@ Rectangle { } function onBalanceUpdated(balance, spendable) { - appWindow.balance = balance; - appWindow.spendable = spendable; + appWindow.balance = WowletVR.cdiv(balance); + appWindow.spendable = WowletVR.cdiv(spendable); + console.log("onBalanceUpdated", appWindow.spendable); } function onWalletOpenedError(err) { @@ -327,8 +440,6 @@ Rectangle { } function onCreateTransactionSuccess(tx, address) { // PendingTransaction - // auto-commit all tx's - //m_ctx->currentWallet->commitTransactionAsync(tx); console.log("onCreateTransactionSuccess", address) } @@ -337,6 +448,18 @@ Rectangle { } } + Connections { + target: OverlayController + + function onDashboardDeactivated() { + gradientBackgroundTimer.stop(); + } + + function onDashboardActivated() { + gradientBackgroundTimer.start(); + } + } + function onConnectionStatusChanged(status) { console.log("onConnectionStatusChanged", status) appWindow.connectionStatus = status; diff --git a/src/vr/overlaycontroller.cpp b/src/vr/overlaycontroller.cpp index b01f20b..166e137 100755 --- a/src/vr/overlaycontroller.cpp +++ b/src/vr/overlaycontroller.cpp @@ -73,7 +73,7 @@ OverlayController::OverlayController(bool desktopMode, QQmlEngine& qmlEngine) : m_offscreenSurface.create(); m_openGLContext.makeCurrent( &m_offscreenSurface ); - if (!vr::VROverlay()){ + if (!vr::VROverlay() && !desktopMode){ QMessageBox::critical(nullptr, "Wowlet VR Overlay", "Is OpenVR running?"); throw std::runtime_error( std::string( "No Overlay interface" ) ); } @@ -418,6 +418,8 @@ void OverlayController::mainEventLoop() { void OverlayController::showKeyboard(QString existingText, unsigned long userValue) { + if(m_desktopMode) return; + vr::VROverlay()->ShowKeyboardForOverlay( m_ulOverlayHandle, vr::k_EGamepadTextInputModeNormal, diff --git a/src/vr/qml.qrc b/src/vr/qml.qrc index 82363f1..bb9a3c4 100644 --- a/src/vr/qml.qrc +++ b/src/vr/qml.qrc @@ -39,6 +39,7 @@ assets/img/status_connected.svg assets/img/status_waiting.svg assets/img/status_lagging.svg + assets/themes.json main.qml qml/common/HourComboBox.qml @@ -56,12 +57,15 @@ qml/common/MyText.qml qml/common/MyToggleButton.qml qml/common/MyPushButton.qml + qml/common/Style.qml + qml/common/qmldir qml/common/MySlider.qml qml/common/mainwidget.qml qml/common/MyNumPad.qml qml/common/MyNumPadButton.qml qml/common/MyNumPadSendAmount.qml qml/common/MyStackViewPage.qml + qml/common/ImageMask.qml qml/wallet/ReceivePage.qml qml/wallet/HistoryTable.qml qml/wallet/WalletDashBoardPage.qml @@ -69,9 +73,11 @@ qml/DashboardPage.qml qml/WalletPage.qml qml/AboutPage.qml + qml/SettingsPage.qml qml/wallet/send/SendPage.qml qml/wallet/send/SendPageDashboard.qml + qml/wallet/send/SendPageDashboardButton.qml qml/wallet/send/SendPageNavBack.qml qml/wallet/send/SendPagePIN.qml qml/wallet/send/SendPageQR.qml diff --git a/src/vr/qml/AboutPage.qml b/src/vr/qml/AboutPage.qml index d951ef1..a09cdee 100644 --- a/src/vr/qml/AboutPage.qml +++ b/src/vr/qml/AboutPage.qml @@ -28,8 +28,6 @@ ColumnLayout { source: "qrc:/illuminati" } - - } ColumnLayout { @@ -39,11 +37,9 @@ ColumnLayout { Layout.leftMargin: 40 Layout.rightMargin: 40 Layout.fillWidth: true - text: "Wowlet VR is an alternative QML interface for wowlet and was made over a 4 week period whilst eating lots of pizzas. It is the world's first cryptocurrency wallet with support for VR. Wowlet is Free and open-source (BSD-3) software and the source code can be studied on git.wownero.com/wowlet/wowlet" + text: "Wowlet VR is an alternative QML interface for wowlet and was made over a 4 week period eating lots of pizzas. It is the world's first cryptocurrency wallet with support for VR. Wowlet is Free and open-source (BSD-3) software and the source code can be studied on git.wownero.com/wowlet/wowlet" wrap: true } - - } } @@ -52,6 +48,7 @@ ColumnLayout { Layout.rightMargin: 40 Layout.fillWidth: true text: "Greetings: matzman666, qvqc, ez, Gatto, cisme, wowario, lza_menace, jwinterm, nioc, asymptotically, azy, selsta, kico, laura, thrmo, rottensox, solar, bl4sty, scoobybejesus" + fontSize: 14 wrap: true } diff --git a/src/vr/qml/DashboardPage.qml b/src/vr/qml/DashboardPage.qml index dc93a14..1ab1973 100644 --- a/src/vr/qml/DashboardPage.qml +++ b/src/vr/qml/DashboardPage.qml @@ -14,9 +14,6 @@ ColumnLayout { height: 800 property var walletList: []; - property string enteredColor: "#365473" - property string exitedColor: "#2c435d" - property string pressedColor: "#406288" Layout.fillWidth: true Layout.fillHeight: true @@ -48,13 +45,13 @@ ColumnLayout { anchors.right: parent.right anchors.bottom: parent.bottom fontSize: 14 - text: "Version 0.1 (Qt " + qtRuntimeVersion + ")" + text: "Version beta (Qt " + qtRuntimeVersion + ")" } } } Rectangle { - color: "#cccccc" + color: Style.dividerColor height: 1 Layout.topMargin: 10 Layout.fillWidth: true @@ -80,29 +77,28 @@ ColumnLayout { model: walletList delegate: Rectangle { - // inherited roles from walletKeysFilesModel: - // index, fileName, modified, accessed, path, networktype, address - // @TODO: maybe enforce networktype === 0 (mainnet) - id: item property var currentItem: walletList[index] - property bool about: currentItem.hasOwnProperty("about") + property bool settings: currentItem.hasOwnProperty("settings") property bool create: currentItem.hasOwnProperty("create") - color: root.enteredColor - height: 256 - width: 256 + property bool exit: currentItem.hasOwnProperty("exit") + color: Style.btnMainMenuBackground + height: 242 + width: 232 Image { - width: 182 - height: 182 + width: 158 + height: 158 anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom anchors.bottomMargin: 10 source: { - if(about) { + if(settings) { return "qrc:/hypnotoad"; } else if(create) { return "qrc:/wizard"; + } else if(exit) { + return "qrc:/tutorial"; } else { return "qrc:/chest"; } @@ -110,12 +106,15 @@ ColumnLayout { } Text { - color: "white" + id: btnText + color: Style.btnTextColor text: { - if(about) { - return "About"; + if(settings) { + return "Settings"; } else if(create) { return "Create wallet"; + } else if(exit) { + return "Exit"; } else { return currentItem['fileName'].replace(".keys", ""); } @@ -133,16 +132,20 @@ ColumnLayout { cursorShape: Qt.PointingHandCursor onEntered: { - parent.color = root.pressedColor + parent.color = Style.btnPressedColor; + btnText.color = Style.btnTextHoverColor; } onExited: { - parent.color = root.enteredColor; + parent.color = Style.btnMainMenuBackground; + btnText.color = Style.btnTextColor; } onClicked: { - if(about) { - mainView.push(aboutPage); + if(settings) { + mainView.push(settingsPage); } else if(create) { createWalletDialog.openPopup(); + } else if(exit) { + OverlayController.exitApp(); } else { appWindow.walletPath = currentItem['path']; ctx.onOpenWallet(currentItem['path'], ""); @@ -161,6 +164,7 @@ ColumnLayout { function onPageCompleted(previousView){ console.log("list wallets"); + root.walletList = []; let wallets = []; if(typeof ctx !== 'undefined') wallets = ctx.listWallets(); @@ -168,16 +172,27 @@ ColumnLayout { let _walletList = []; for(var i = 0; i != wallets.length; i++) { - if(i == 8) // draw 10 items at any time + if(i == 9) // draw 10 items at any time break; _walletList.push(wallets[i]); } _walletList.push({"create": true}); - _walletList.push({"about": true}); + _walletList.push({"settings": true}); + _walletList.push({"exit": true}); root.walletList = _walletList; } -} -// OverlayController.exitApp(); + Connections { + target: appWindow + function onAboutClicked() { + mainView.push(aboutPage); + } + + function onRedraw() { + console.log("hooray"); + onPageCompleted(1); + } + } +} diff --git a/src/vr/qml/SettingsPage.qml b/src/vr/qml/SettingsPage.qml new file mode 100644 index 0000000..890e387 --- /dev/null +++ b/src/vr/qml/SettingsPage.qml @@ -0,0 +1,124 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.2 + +import "." +import "common" + +ColumnLayout { + id: root + property bool needsRestart: false + + spacing: 30 + Layout.fillHeight: true + Layout.fillWidth: true + + ColumnLayout { + spacing: 30 + Layout.topMargin: 40 + Layout.fillWidth: true + Layout.leftMargin: 40 + Layout.rightMargin: 40 + + MyText { + Layout.fillWidth: true + fontSize: 26 + text: "Settings" + wrap: true + } + + RowLayout { + spacing: 30 + + MyText { + text: "Theme" + } + + MyComboBox { + id: themeCombo + Layout.preferredHeight: 60 + Layout.preferredWidth: 378 + + displayText: "-" + + model: [""] + + delegate: ItemDelegate { + width: parent.width + text: modelData.text + hoverEnabled: true + contentItem: MyText { + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + text: parent.text + color: parent.enabled ? Style.fontColor : Style.fontColorDimmed + } + background: Rectangle { + color: parent.pressed ? "#406288" : (parent.hovered ? "#365473" : "#2c435d") + } + } + + onCurrentIndexChanged: { + displayText = themeCombo.model[currentIndex]["text"]; + if(displayText !== "" && displayText !== appWindow.theme) { + appWindow.changeTheme(displayText); + needsRestart = true; + } + } + } + } + } + + Component.onCompleted: { + } + + MyDialogOkPopup { + id: restartPopup + dialogTitle: "Restart required" + dialogText: "WowletVR needs a restart to load the theme. Exiting." + onClosed: { + OverlayController.exitApp(); + } + } + + MyPushButton { + text: "Back" + Layout.leftMargin: 40 + Layout.preferredWidth: 220 + + onClicked: { + if(root.needsRestart) { + restartPopup.open(); + } else { + mainView.pop(); + } + } + } + + Item { + Layout.fillWidth: true + Layout.fillHeight: true + } + + function onPageCompleted(previousView){ + + } + + Connections { + target: appWindow + + function onInitTheme() { + // populate combobox + let themeComboBoxItems = [{ value: 0, text: ""}]; + for (let _theme in appWindow.themes){ + if (!appWindow.themes.hasOwnProperty(_theme)) + continue; + themeComboBoxItems.push({ value: 0, text: _theme }); + } + themeCombo.model = themeComboBoxItems; + themeCombo.displayText = appWindow.theme; + } + } +} + +// OverlayController.exitApp(); diff --git a/src/vr/qml/common/BackgroundGradientDebug.qml b/src/vr/qml/common/BackgroundGradientDebug.qml new file mode 100644 index 0000000..021a516 --- /dev/null +++ b/src/vr/qml/common/BackgroundGradientDebug.qml @@ -0,0 +1,96 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.2 + +import "." + +// This file is used to debug the background gradient animation and can be ignored. + +ColumnLayout { + property int start_x: 0 + property int start_y: 64 + property int end_x: 1080 + property int end_y: 416 + + visible: false + width: parent.width + height: parent.height + + MyText { + fontColor: "red" + text: "start_x: " + start_x + } + + MySlider { + from: 0 + to: 1600 + value: start_x + Layout.fillWidth: true + Layout.preferredHeight: 40 + + onValueChanged: { + appWindow.start_x = value; + } + } + + MyText { + fontColor: "red" + text: "start_y: " + start_y + } + + MySlider { + from: 0 + to: 1600 + value: start_y + Layout.fillWidth: true + Layout.preferredHeight: 40 + + onValueChanged: { + appWindow.start_y = value; + } + } + + Item { + Layout.fillWidth: true + Layout.fillHeight: true + } + + MyText { + fontColor: "red" + text: "end_x: " + end_x + } + + MySlider { + from: 0 + to: 1600 + value: end_x + Layout.fillWidth: true + Layout.preferredHeight: 40 + + onValueChanged: { + appWindow.end_x = value; + } + } + + MyText { + fontColor: "red" + text: "end_y: " + end_y + } + + MySlider { + from: 0 + to: 1600 + value: end_y + Layout.fillWidth: true + Layout.preferredHeight: 40 + + onValueChanged: { + appWindow.end_y = value; + } + } + + Item { + Layout.fillWidth: true + Layout.fillHeight: true + } +} \ No newline at end of file diff --git a/src/vr/qml/common/ImageMask.qml b/src/vr/qml/common/ImageMask.qml new file mode 100644 index 0000000..dc51d79 --- /dev/null +++ b/src/vr/qml/common/ImageMask.qml @@ -0,0 +1,36 @@ +// Copyright (c) 2014-2019, The Monero Project + +import QtQuick 2.9 +import QtGraphicalEffects 1.0 + +Item { + // Use this component to color+opacity change images with transparency (svg/png) + // Does not work in low graphics mode, use fontAwesome fallback option. + + id: root + property string image: "" + property string color: "" + + property alias svgMask: svgMask + property alias imgMockColor: imgMockColor + + width: 0 + height: 0 + + Image { + id: svgMask + source: root.image + sourceSize.width: root.width + sourceSize.height: root.height + smooth: true + mipmap: true + visible: false + } + + ColorOverlay { + id: imgMockColor + anchors.fill: root + source: svgMask + color: root.color + } +} diff --git a/src/vr/qml/common/MyComboBox.qml b/src/vr/qml/common/MyComboBox.qml index d9b915e..6385cb3 100755 --- a/src/vr/qml/common/MyComboBox.qml +++ b/src/vr/qml/common/MyComboBox.qml @@ -14,7 +14,7 @@ ComboBox { leftPadding: 0 rightPadding: parent.indicator.width + parent.spacing text: parent.displayText - horizontalAlignment: Text.AlignLeft + horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter elide: Text.ElideRight } @@ -27,7 +27,7 @@ ComboBox { horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter text: parent.text - color: parent.enabled ? "#ffffff" : "#909090" + color: parent.enabled ? Style.fontColor : Style.fontColorDimmed } background: Rectangle { color: parent.pressed ? "#406288" : (parent.hovered ? "#365473" : "#2c435d") @@ -61,11 +61,11 @@ ComboBox { } } - onActivated: { - if (activeFocus) { - MyResources.playActivationSound() - } - } + // onActivated: { + // if (activeFocus) { + // MyResources.playActivationSound() + // } + // } Component.onCompleted: { popup.background.color = "#2c435d" diff --git a/src/vr/qml/common/MyDialogOkCancelPopup.qml b/src/vr/qml/common/MyDialogOkCancelPopup.qml index 6540e79..489c12d 100755 --- a/src/vr/qml/common/MyDialogOkCancelPopup.qml +++ b/src/vr/qml/common/MyDialogOkCancelPopup.qml @@ -2,6 +2,8 @@ import QtQuick 2.7 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.3 +import "." + Popup { id: myDialogPopup @@ -18,6 +20,7 @@ Popup { horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter Layout.fillWidth: true + fontColor: Style.fontColor } property bool okClicked: false @@ -37,8 +40,8 @@ Popup { implicitHeight: dialogHeight anchors.centerIn: parent radius: 24 - color: "#1b2939" - border.color: "#cccccc" + color: Style.backgroundColor + border.color: Style.fontColorDimmed border.width: 2 ColumnLayout { anchors.fill: parent @@ -49,7 +52,7 @@ Popup { text: dialogTitle } Rectangle { - color: "#cccccc" + color: Style.fontColorDimmed height: 1 Layout.fillWidth: true } diff --git a/src/vr/qml/common/MyDialogOkPopup.qml b/src/vr/qml/common/MyDialogOkPopup.qml index 3865952..8202554 100755 --- a/src/vr/qml/common/MyDialogOkPopup.qml +++ b/src/vr/qml/common/MyDialogOkPopup.qml @@ -2,28 +2,32 @@ import QtQuick 2.7 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.3 +import "." + Popup { id: myDialogPopup + property bool dismissible: true implicitHeight: parent.height implicitWidth: parent.width property string dialogTitle: "" property string dialogText: "" - property int dialogWidth: 800 + property int dialogWidth: 900 property int dialogHeight: 300 property Item dialogContentItem: MyText { - fontSize:16 + fontSize: 16 text: dialogText horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter Layout.fillWidth: true + wrap: true } property bool okClicked: false - closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent + closePolicy: myDialogPopup.dismissible ? Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent : Popup.NoAutoClose background: Rectangle { color: "black" @@ -36,8 +40,8 @@ Popup { implicitHeight: dialogHeight anchors.centerIn: parent radius: 24 - color: "#1b2939" - border.color: "#cccccc" + color: Style.backgroundColor + border.color: Style.fontColorDimmed border.width: 2 ColumnLayout { anchors.fill: parent @@ -48,7 +52,7 @@ Popup { text: dialogTitle } Rectangle { - color: "#cccccc" + color: Style.fontColorDimmed height: 1 Layout.fillWidth: true } @@ -64,6 +68,7 @@ Popup { Layout.fillWidth: true } RowLayout { + visible: myDialogPopup.dismissible Layout.fillWidth: true Layout.leftMargin: 24 Layout.rightMargin: 24 diff --git a/src/vr/qml/common/MyNumPadButton.qml b/src/vr/qml/common/MyNumPadButton.qml index 8a7fac2..cbce685 100644 --- a/src/vr/qml/common/MyNumPadButton.qml +++ b/src/vr/qml/common/MyNumPadButton.qml @@ -6,21 +6,20 @@ Rectangle { id: root property string text: "" property int fontSize: 22 - property string enteredColor: "#365473" - property string exitedColor: "#2c435d" - property string pressedColor: "#406288" property alias mouseArea: mouseArea + property alias btnTextColor: btnText.fontColor signal clicked; Layout.preferredWidth: 92 Layout.preferredHeight: 92 - color: root.exitedColor + color: Style.btnExitedColor MyText { + id: btnText anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter - color: "white" + fontColor: Style.btnTextColor text: root.text fontSize: root.fontSize fontBold: true @@ -30,9 +29,18 @@ Rectangle { id: mouseArea anchors.fill: parent hoverEnabled: true - onEntered: parent.color = root.enteredColor - onExited: parent.color = root.exitedColor - onPressed: parent.color = root.pressedColor + onEntered: { + parent.color = Style.btnEnteredColor + btnText.color = Style.btnTextHoverColor + } + onExited: { + parent.color = Style.btnExitedColor + btnText.color = Style.btnTextColor + } + onPressed: { + parent.color = Style.btnPressedColor + btnText.color = Style.btnTextHoverColor + } onClicked: { root.clicked(); } diff --git a/src/vr/qml/common/MyNumPadSendAmount.qml b/src/vr/qml/common/MyNumPadSendAmount.qml index ede542b..5319a79 100644 --- a/src/vr/qml/common/MyNumPadSendAmount.qml +++ b/src/vr/qml/common/MyNumPadSendAmount.qml @@ -8,10 +8,6 @@ RowLayout { property double amount: 0.0; property bool add: true; - property string enteredColor: "#365473" - property string exitedColor: "#2c435d" - property string pressedColor: "#406288" - signal amountUpdated(double amount); spacing: 24 @@ -28,8 +24,8 @@ RowLayout { Layout.preferredWidth: 128 Layout.preferredHeight: 112 - color: root.add ? root.exitedColor : root.enteredColor - + color: root.add ? Style.btnExitedColor : Style.btnPressedColor + btnTextColor: !root.add ? Style.btnTextHoverColor : Style.btnTextColor text: "-" MouseArea { @@ -37,15 +33,18 @@ RowLayout { hoverEnabled: true onEntered: { if(!root.add) return; - parent.color = root.enteredColor + parent.color = Style.btnPressedColor + parent.btnTextColor = Style.btnTextHoverColor } onExited: { if(!root.add) return; - parent.color = root.exitedColor + parent.color = Style.btnExitedColor + Style.btnTextHoverColor } onClicked: { root.add = false; - plusButton.color = root.exitedColor + plusButton.color = Style.btnExitedColor + plusButton.btnTextColor = Style.btnTextColor; } } } @@ -58,8 +57,8 @@ RowLayout { Layout.preferredWidth: 128 Layout.preferredHeight: 112 - color: root.add ? root.enteredColor : root.exitedColor - + color: root.add ? Style.btnPressedColor : Style.btnExitedColor + btnTextColor: root.add ? Style.btnTextHoverColor : Style.btnTextColor text: "+" MouseArea { @@ -67,21 +66,23 @@ RowLayout { hoverEnabled: true onEntered: { if(root.add) return; - parent.color = root.enteredColor + parent.color = Style.btnPressedColor + parent.btnTextColor = Style.btnTextHoverColor } onExited: { if(root.add) return; - parent.color = root.exitedColor + parent.color = Style.btnExitedColor } onClicked: { root.add = true; - minButton.color = root.exitedColor + minButton.color = Style.btnExitedColor + minButton.btnTextColor = Style.btnTextColor; } } } Rectangle { - color: "#cccccc" + color: Style.fontColorDimmed width: 1 Layout.fillHeight: true } @@ -92,7 +93,7 @@ RowLayout { Layout.preferredHeight: 112 text: "0.001" onClicked: { - root.add ? root.amount += 0.001 : root.amount -= 0.001; + root.add ? root.amount = WowletVR.add(root.amount, 0.001) : root.amount = WowletVR.sub(root.amount, 0.001); if(root.amount <= 0.0) root.amount = 0.0; amountUpdated(root.amount); } @@ -104,7 +105,7 @@ RowLayout { Layout.preferredHeight: 112 text: "0.01" onClicked: { - root.add ? root.amount += 0.01 : root.amount -= 0.01; + root.add ? root.amount = WowletVR.add(root.amount, 0.01) : root.amount = WowletVR.sub(root.amount, 0.01); if(root.amount <= 0.0) root.amount = 0.0; amountUpdated(root.amount); } @@ -116,7 +117,7 @@ RowLayout { Layout.preferredHeight: 112 text: "0.1" onClicked: { - root.add ? root.amount += 0.1 : root.amount -= 0.1; + root.add ? root.amount = WowletVR.add(root.amount, 0.1) : root.amount = WowletVR.sub(root.amount, 0.1); if(root.amount <= 0.0) root.amount = 0.0; amountUpdated(root.amount); } @@ -128,7 +129,7 @@ RowLayout { Layout.preferredHeight: 112 text: "1" onClicked: { - root.add ? root.amount += 1.0 : root.amount -= 1.0; + root.add ? root.amount = WowletVR.add(root.amount, 1.0) : root.amount = WowletVR.sub(root.amount, 1.0); if(root.amount <= 0.0) root.amount = 0.0; amountUpdated(root.amount); } @@ -140,7 +141,7 @@ RowLayout { Layout.preferredHeight: 112 text: "10" onClicked: { - root.add ? root.amount += 10.0 : root.amount -= 10.0; + root.add ? root.amount = WowletVR.add(root.amount, 10.0) : root.amount = WowletVR.sub(root.amount, 10.0); if(root.amount <= 0.0) root.amount = 0.0; amountUpdated(root.amount); } @@ -152,7 +153,7 @@ RowLayout { Layout.preferredHeight: 112 text: "100" onClicked: { - root.add ? root.amount += 100.0 : root.amount -= 100.0; + root.add ? root.amount = WowletVR.add(root.amount, 100.0) : root.amount = WowletVR.sub(root.amount, 100.0); if(root.amount <= 0.0) root.amount = 0.0; amountUpdated(root.amount); } @@ -164,7 +165,7 @@ RowLayout { Layout.preferredHeight: 112 text: "1000" onClicked: { - root.add ? root.amount += 1000.0 : root.amount -= 1000.0; + root.add ? root.amount = WowletVR.add(root.amount, 1000.0) : root.amount = WowletVR.sub(root.amount, 1000.0); if(root.amount <= 0.0) root.amount = 0.0; amountUpdated(root.amount); } diff --git a/src/vr/qml/common/MyPushButton.qml b/src/vr/qml/common/MyPushButton.qml index be9d4b7..a4aa966 100755 --- a/src/vr/qml/common/MyPushButton.qml +++ b/src/vr/qml/common/MyPushButton.qml @@ -5,14 +5,14 @@ import "." // QTBUG-34418, singletons require explicit import to load qmldir fil Item { id: root - property string text: "testy" + property string text: "-" property string iconPath: "" property bool hasIcon: iconPath !== "" property bool hoverEnabled: true property bool activationSoundEnabled: true - property string enteredColor: "#365473" - property string exitedColor: "#2c435d" - property string pressedColor: "#406288" + property string enteredColor: Style.btnEnteredColor + property string exitedColor: Style.btnExitedColor + property string pressedColor: Style.btnPressedColor signal clicked; Layout.preferredHeight: 70 @@ -23,22 +23,36 @@ Item { anchors.verticalCenter: parent.verticalCenter Layout.minimumHeight: 54 - Image { + // Image { + // visible: hasIcon + // source: iconPath + // Layout.leftMargin: 20 + // Layout.rightMargin: 20 + // Layout.preferredWidth: 32 + // Layout.preferredHeight: 32 + // } + + ImageMask { + id: backIcon visible: hasIcon - source: iconPath Layout.leftMargin: 20 Layout.rightMargin: 20 Layout.preferredWidth: 32 Layout.preferredHeight: 32 + + image: iconPath + color: Style.fontColorBright } MyText { + id: btnText Layout.leftMargin: root.hasIcon ? 0 : 20 Layout.rightMargin: root.hasIcon ? 0 : 20 Layout.fillWidth: root.hasIcon ? true : false Layout.alignment: root.hasIcon ? Qt.AlignLeft : Qt.AlignHCenter text: root.text fontSize: 16 + fontColor: Style.btnTextColor } } @@ -46,14 +60,23 @@ Item { z: root.z - 1 anchors.fill: root Layout.fillWidth: root.Layout.fillWidth - color: root.down ? root.pressedColor : (root.activeFocus ? root.enteredColor : root.exitedColor) + color: root.down ? Style.btnPressedColor : (root.activeFocus ? Style.btnEnteredColor : Style.btnExitedColor) MouseArea { anchors.fill: parent hoverEnabled: true - onEntered: parent.color = root.enteredColor - onExited: parent.color = root.exitedColor - onPressed: parent.color = root.pressedColor + onEntered: { + parent.color = Style.btnEnteredColor; + btnText.fontColor = Style.btnTextHoverColor; + } + onExited: { + parent.color = Style.btnExitedColor; + btnText.fontColor = Style.btnTextColor; + } + onPressed: { + parent.color = Style.btnPressedColor; + btnText.fontColor = Style.btnTextHoverColor; + } onClicked: { root.clicked(); } diff --git a/src/vr/qml/common/MySlider.qml b/src/vr/qml/common/MySlider.qml index 797de79..6a4e0f0 100755 --- a/src/vr/qml/common/MySlider.qml +++ b/src/vr/qml/common/MySlider.qml @@ -17,7 +17,7 @@ Slider { width: parent.availableWidth height: parent.availableHeight radius: 2 - color: parent.activeFocus ? "#2c435d" : "#1b2939" + color: "transparent" Rectangle { y: parent.height / 2 - height / 2 implicitHeight: 4 diff --git a/src/vr/qml/common/MyStackViewPage.qml b/src/vr/qml/common/MyStackViewPage.qml index dbac0ba..def729d 100755 --- a/src/vr/qml/common/MyStackViewPage.qml +++ b/src/vr/qml/common/MyStackViewPage.qml @@ -10,7 +10,7 @@ import wowlet.Wallet 1.0 Rectangle { id: root - color: "#1b2939" + color: "transparent" width: 1600 height: 800 @@ -18,9 +18,7 @@ Rectangle { property string headerText: "Header Title" property bool headerShowBackButton: true - property string enteredColor: "#365473" property string exitedColor: "transparent" - property string pressedColor: "#406288" signal backClicked(); @@ -41,11 +39,13 @@ Rectangle { Layout.preferredHeight: 50 Layout.preferredWidth: 50 - Image { - source: "qrc:/backarrow" - sourceSize.width: 50 - sourceSize.height: 50 + ImageMask { + id: backIcon anchors.fill: parent + image: "qrc:/backarrow" + color: Style.fontColorBright + width: 50 + height: 50 } } @@ -60,6 +60,7 @@ Rectangle { text: headerText font.pointSize: 26 anchors.verticalCenter: parent.verticalCenter + fontColor: Style.fontColorBright } } } @@ -68,9 +69,21 @@ Rectangle { enabled: headerShowBackButton anchors.fill: parent hoverEnabled: true - onEntered: parent.color = root.enteredColor - onExited: parent.color = root.exitedColor - onPressed: parent.color = root.pressedColor + onEntered: { + parent.color = Style.btnEnteredColor + headerTitle.fontColor = Style.btnTextHoverColor + backIcon.color = Style.btnTextHoverColor + } + onExited: { + parent.color = root.exitedColor + headerTitle.fontColor = Style.fontColorBright + backIcon.color = Style.fontColorBright + } + onPressed: { + parent.color = Style.btnPressedColor + headerTitle.fontColor = Style.btnTextHoverColor + backIcon.color = Style.btnTextHoverColor + } onClicked: { stackView.pop(); backClicked(); @@ -100,7 +113,7 @@ Rectangle { } Rectangle { - color: "#cccccc" + color: Style.dividerColor height: 1 Layout.topMargin: 10 Layout.fillWidth: true @@ -120,7 +133,7 @@ Rectangle { } Rectangle { - id: testy66 + id: bigRect color: "transparent" Layout.fillWidth: true @@ -134,7 +147,7 @@ Rectangle { anchors.leftMargin: 40 anchors.rightMargin: 40 - color: "#cccccc" + color: Style.fontColorDimmed height: 1 } @@ -150,13 +163,13 @@ Rectangle { fontSize: 14 text: appWindow.statusText - color: "#cccccc" + color: Style.fontColorDimmed } Rectangle { Layout.fillHeight: true Layout.preferredWidth: 1 - color: "#cccccc" + color: Style.fontColorDimmed } RowLayout { @@ -166,7 +179,7 @@ Rectangle { MyText { fontSize: 14 text: "Daemon: " - color: "#cccccc" + color: Style.fontColorDimmed } Image { @@ -191,7 +204,7 @@ Rectangle { Rectangle { Layout.fillHeight: true Layout.preferredWidth: 1 - color: "#cccccc" + color: Style.fontColorDimmed } RowLayout { @@ -201,7 +214,7 @@ Rectangle { MyText { fontSize: 14 text: "WS: " - color: "#cccccc" + color: Style.fontColorDimmed } Image { @@ -215,67 +228,17 @@ Rectangle { Rectangle { Layout.fillHeight: true Layout.preferredWidth: 1 - color: "#cccccc" + color: Style.fontColorDimmed } MyText { fontSize: 14 - text: "Fiat: $0.05 USD" - color: "#cccccc" + text: "Balance: " + WowletVR.amountToFiat(appWindow.spendable); + color: Style.fontColorDimmed } } } - // Rectangle { - // z: 100 - // color: "black" - // height: 64 - - // // anchors.bottom: parent.bottom - // // anchors.left: parent.left - // // anchors.right: parent.right - - // Rectangle { - // anchors.top: parent.top - // anchors.left: parent.left - // anchors.right: parent.right - - // anchors.leftMargin: 40 - // anchors.rightMargin: 40 - - // color: "#cccccc" - // height: 1 - // } - - // RowLayout { - // spacing: 30 - // anchors.left: parent.left - // anchors.leftMargin: 40 - // anchors.rightMargin: 40 - // anchors.verticalCenter: parent.verticalCenter - - // MyText { - // fontSize: 14 - // text: "Status: idle" - // } - - // MyText { - // fontSize: 14 - // text: "WS: OK" - // } - - // MyText { - // fontSize: 14 - // text: "Tor: OK" - // } - - // MyText { - // fontSize: 14 - // text: "Height: OK" - // } - // } - // } - Component.onCompleted: { header.parent = mainLayout header.Layout.leftMargin = 40 @@ -290,6 +253,6 @@ Rectangle { content.Layout.rightMargin = 40 content.Layout.bottomMargin = 40 - testy66.parent = mainLayout + bigRect.parent = mainLayout } } diff --git a/src/vr/qml/common/MyText.qml b/src/vr/qml/common/MyText.qml index 4dc92a7..b0ee771 100755 --- a/src/vr/qml/common/MyText.qml +++ b/src/vr/qml/common/MyText.qml @@ -1,15 +1,15 @@ import QtQuick 2.7 import QtQuick.Controls 2.0 - +import "." Text { property bool wrap: false property int fontSize: 16 property bool fontBold: false - property string fontColor: "#ffffff" + property string fontColor: Style.fontColor color: fontColor font.bold: fontBold font.pointSize: fontSize - wrapMode: wrap ? Text.WordWrap : Text.NoWrap + wrapMode: wrap ? Text.Wrap : Text.NoWrap } diff --git a/src/vr/qml/common/MyTextField.qml b/src/vr/qml/common/MyTextField.qml index da19807..fee8a97 100755 --- a/src/vr/qml/common/MyTextField.qml +++ b/src/vr/qml/common/MyTextField.qml @@ -8,14 +8,14 @@ TextField { id: myTextField echoMode: passwordField ? TextInput.Password : TextInput.Normal - color: "#cccccc" + color: Style.fontColorDimmed text: "" font.pointSize: 20 background: Button { hoverEnabled: true background: Rectangle { color: parent.hovered ? "#2c435d" : "#1b2939" - border.color: "#cccccc" + border.color: Style.fontColorDimmed border.width: 2 } onClicked: { diff --git a/src/vr/qml/common/Style.qml b/src/vr/qml/common/Style.qml new file mode 100644 index 0000000..98b60da --- /dev/null +++ b/src/vr/qml/common/Style.qml @@ -0,0 +1,31 @@ +pragma Singleton + +import QtQuick 2.7 + +// These color codes are overriden by assets/themes.json, we are just +// making sure the property names exist. + +QtObject { + id: root + + property string fontColor: "white" + property string fontColorDimmed: "#cccccc" + property string fontColorBright: "white" + property string backgroundGradientStartColor: "#194f64" + property string backgroundGradientStopColor: "#192e43" + property string backgroundColor: "#1b2939" + + property string dividerColor: "#50ffffff" + + property string btnEnteredColor: "#aa3b689b" + property string btnExitedColor: "#aa375c87" + property string btnPressedColor: "#aa467dbb" + property string btnTextColor: "white" + property string btnTextHoverColor: "white" + property string btnMainMenuBackground: "#aa3b689b" + + property string historyBackgroundColor: "#2c435d" + property string historyBackgroundColorBright: "#406288" + property string historyFontColorPlusAmount: "#00d304" + property string historyFontColorMinAmount: "red" +} \ No newline at end of file diff --git a/src/vr/qml/common/qmldir b/src/vr/qml/common/qmldir new file mode 100644 index 0000000..8198422 --- /dev/null +++ b/src/vr/qml/common/qmldir @@ -0,0 +1 @@ +singleton Style 1.0 Style.qml diff --git a/src/vr/qml/wallet/HistoryTable.qml b/src/vr/qml/wallet/HistoryTable.qml index b3ffccf..d925144 100755 --- a/src/vr/qml/wallet/HistoryTable.qml +++ b/src/vr/qml/wallet/HistoryTable.qml @@ -27,8 +27,8 @@ Item { MyText { visible: txCount == 0 - opacity: 0.75 text: "No transactions to display." + fontColor: Style.fontColorBright } ListView { @@ -46,7 +46,7 @@ Item { anchors.left: parent ? parent.left : undefined anchors.right: parent ? parent.right : undefined height: 54 - color: "#2c435d" + color: Style.historyBackgroundColor property bool isout: false; property string amount: "0"; @@ -84,7 +84,7 @@ Item { Rectangle { Layout.preferredWidth: 56 Layout.fillHeight: true - color: "#406288" + color: Style.historyBackgroundColorBright Image { width: 32 @@ -113,7 +113,7 @@ Item { // date anchors.verticalCenter: parent.verticalCenter fontSize: 12 - fontColor: "white" + fontColor: Style.fontColorBright text: date Component.onCompleted: { @@ -131,7 +131,7 @@ Item { anchors.verticalCenter: parent.verticalCenter fontSize: 14 text: description !== "" ? description : "..." - fontColor: description !== "" ? "white" : "#cccccc" + fontColor: description !== "" ? Style.fontColorBright : Style.fontColorDimmed Component.onCompleted: { parent.Layout.preferredWidth = width; } @@ -145,7 +145,7 @@ Item { Rectangle { Layout.preferredWidth: 420 Layout.fillHeight: true - color: "#406288" + color: Style.historyBackgroundColorBright MyText { anchors.right: parent.right @@ -155,7 +155,7 @@ Item { fontSize: 14 fontBold: true text: amount - fontColor: !isout ? "#00d304" : "red" + fontColor: !isout ? Style.historyFontColorPlusAmount : Style.historyFontColorMinAmount } } } diff --git a/src/vr/qml/wallet/ReceivePage.qml b/src/vr/qml/wallet/ReceivePage.qml index e13308e..3e77a56 100755 --- a/src/vr/qml/wallet/ReceivePage.qml +++ b/src/vr/qml/wallet/ReceivePage.qml @@ -30,6 +30,7 @@ MyStackViewPage { width: parent.width wrap: true fontSize: 14 + fontColor: Style.fontColorBright text: "Give the following 4 digit PIN to the person that is sending you Wownero. PIN's are valid for 10 minutes and automatically renew." } } @@ -46,14 +47,14 @@ MyStackViewPage { width: parent.width visible: true fontSize: 14 + fontColor: Style.fontColorBright text: "Generating PIN..." } Text { id: pinText - visible: false text: "- - - -" - color: "#ffffff" + color: Style.fontColor font.bold: true font.pointSize: 40 leftPadding: 20 @@ -75,7 +76,7 @@ MyStackViewPage { } Rectangle { - color: "#cccccc" + color: Style.fontColorDimmed width: 1 Layout.fillHeight: true } @@ -93,6 +94,7 @@ MyStackViewPage { width: parent.width fontSize: 14 wrap: true + fontColor: Style.fontColorBright text: "Alternatively, you may use one of the following methods to retreive your address." } } @@ -104,7 +106,8 @@ MyStackViewPage { Layout.fillWidth: true onClicked: { - //walletView.push(chaperoneAdditionalPage) + let address = ctx.getAddress(0, 1); + messagePopup.showMessage("Your Wownero receiving address", address); } } @@ -115,8 +118,9 @@ MyStackViewPage { Layout.fillWidth: true onClicked: { - MyResources.playFocusChangedSound() - walletView.push(chaperoneAdditionalPage) + let address = ctx.getAddress(0, 1); + WowletVR.setClipboard(address); + messagePopup.showMessage("Clipboard", "Address copied to clipboard."); } } @@ -127,7 +131,7 @@ MyStackViewPage { Layout.fillWidth: true onClicked: { - chaperoneNewProfileDialog.open(); + } } @@ -155,7 +159,6 @@ MyStackViewPage { pinAskTimer.stop(); statusText.visible = true; statusText.text = "Generating PIN..."; - pinText.visible = false; pinText.text = "- - - -"; } @@ -182,7 +185,6 @@ MyStackViewPage { function onPinReceived(pin) { console.log("onPINReceived", pin); statusText.visible = false; - pinText.visible = true; pinText.text = pin[0] + " " + pin[1] + " " + pin[2] + " " + pin[3]; } } diff --git a/src/vr/qml/wallet/WalletDashBoardPage.qml b/src/vr/qml/wallet/WalletDashBoardPage.qml index 86a6b4c..3e7cffe 100644 --- a/src/vr/qml/wallet/WalletDashBoardPage.qml +++ b/src/vr/qml/wallet/WalletDashBoardPage.qml @@ -72,8 +72,7 @@ MyStackViewPage { text: "Close" Layout.fillWidth: true onClicked: { - //MyResources.playFocusChangedSound() - ctx.onCloseWallet(true, true); + ctx.closeWallet(true, true); mainView.pop(); } } diff --git a/src/vr/qml/wallet/send/SendPage.qml b/src/vr/qml/wallet/send/SendPage.qml index 4b1000b..58c5d8f 100755 --- a/src/vr/qml/wallet/send/SendPage.qml +++ b/src/vr/qml/wallet/send/SendPage.qml @@ -13,10 +13,6 @@ MyStackViewPage { property string destinationAddress: "" - property string enteredColor: "#365473" - property string exitedColor: "#2c435d" - property string pressedColor: "#406288" - content: ColumnLayout { id: sendStateView property Item currentView diff --git a/src/vr/qml/wallet/send/SendPageDashboard.qml b/src/vr/qml/wallet/send/SendPageDashboard.qml index 40e3bf0..c9ad665 100644 --- a/src/vr/qml/wallet/send/SendPageDashboard.qml +++ b/src/vr/qml/wallet/send/SendPageDashboard.qml @@ -11,6 +11,7 @@ ColumnLayout { MyText { Layout.fillWidth: true wrap: true + fontColor: Style.fontColorBright text: "How to transfer Wownero?" } @@ -19,39 +20,19 @@ ColumnLayout { Layout.fillWidth: true spacing: 30 - Rectangle { - color: sendStateController.exitedColor - Layout.fillWidth: true - Layout.fillHeight: true - - MouseArea { - anchors.fill: parent - hoverEnabled: true - onEntered: parent.color = sendStateController.enteredColor - onExited: parent.color = sendStateController.exitedColor - onPressed: parent.color = sendStateController.pressedColor - onClicked: { - sendStateView.state = "pinPage"; - } + SendPageDashboardButton { + displayText: "Send via PIN" + onClicked: { + sendStateView.state = "pinPage"; } - } - - Rectangle { - color: sendStateController.exitedColor - Layout.fillWidth: true - Layout.fillHeight: true + } - MouseArea { - anchors.fill: parent - hoverEnabled: true - onEntered: parent.color = sendStateController.enteredColor - onExited: parent.color = sendStateController.exitedColor - onPressed: parent.color = sendStateController.pressedColor - onClicked: { - sendStateView.state = "qrPage"; - } + SendPageDashboardButton { + displayText: "Send via QR code" + onClicked: { + sendStateView.state = "qrPage"; } - } + } } Item { diff --git a/src/vr/qml/wallet/send/SendPageDashboardButton.qml b/src/vr/qml/wallet/send/SendPageDashboardButton.qml new file mode 100644 index 0000000..13e8c39 --- /dev/null +++ b/src/vr/qml/wallet/send/SendPageDashboardButton.qml @@ -0,0 +1,44 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 +import "../../common" + +Rectangle { + id: root + color: Style.btnExitedColor + Layout.fillWidth: true + Layout.fillHeight: true + + property string displayText: "" + + signal clicked(); + + MyText{ + id: btnText + text: displayText + fontSize: 24 + fontColor: Style.btnTextColor + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + } + + MouseArea { + anchors.fill: parent + hoverEnabled: true + onEntered: { + parent.color = Style.btnEnteredColor; + btnText.fontColor = Style.btnTextHoverColor; + } + onExited: { + parent.color = Style.btnExitedColor; + btnText.fontColor = Style.btnTextColor; + } + onPressed: { + parent.color = Style.btnPressedColor; + btnText.fontColor = Style.btnTextHoverColor; + } + onClicked: { + root.clicked(); + } + } +} \ No newline at end of file diff --git a/src/vr/qml/wallet/send/SendPagePIN.qml b/src/vr/qml/wallet/send/SendPagePIN.qml index 70934a2..a202ce4 100644 --- a/src/vr/qml/wallet/send/SendPagePIN.qml +++ b/src/vr/qml/wallet/send/SendPagePIN.qml @@ -14,6 +14,7 @@ ColumnLayout { MyText { Layout.fillWidth: true wrap: true + fontColor: Style.fontColorBright text: "Enter a 4 digit PIN and wait for it to resolve." } @@ -66,7 +67,7 @@ ColumnLayout { Layout.preferredWidth: 390 visible: true text: "0 0 0 0" - color: "#ffffff" + color: Style.fontColor font.bold: true font.pointSize: 40 leftPadding: 20 @@ -87,7 +88,7 @@ ColumnLayout { } Rectangle { - color: "#cccccc" + color: Style.fontColorDimmed width: 1 Layout.fillHeight: true } @@ -105,6 +106,7 @@ ColumnLayout { MyText { fontSize: 18 + fontColor: Style.fontColorBright text: "Waiting on input..." } } @@ -118,6 +120,7 @@ ColumnLayout { MyText { fontSize: 18 + fontColor: Style.fontColorBright text: "Looking up address..." } @@ -128,6 +131,7 @@ ColumnLayout { MyText { fontBold: true + fontColor: Style.fontColorBright text: "Code:" } @@ -136,45 +140,6 @@ ColumnLayout { } } } - - // Image { - // visible: false - // id: loadingImage - // source: "qrc:/illuminati" - // sourceSize.width: 400 - // sourceSize.height: 400 - // } - - ColumnLayout { - id: foundContainer - visible: false - spacing: 30 - Layout.fillWidth: true - - RowLayout { - spacing: 20 - Layout.fillWidth: true - - MyText { - fontBold: true - text: "Address found:" - } - - MyText { - text: "WW2xG...gKgrcC7" - } - } - - MyPushButton { - id: continueButton - text: "Continue" - Layout.preferredWidth: 220 - - onClicked: { - // - } - } - } } } @@ -190,7 +155,6 @@ ColumnLayout { _PINLookup = code; idleContainer.visible = false; - foundContainer.visible = false; loadingContainer.visible = true; numPad.enabled = false; @@ -202,13 +166,11 @@ ColumnLayout { reset(); } - function reset() { // reset state _PINLookup = ""; idleContainer.visible = true; - foundContainer.visible = false; loadingContainer.visible = false; sendStateController.destinationAddress = ""; diff --git a/src/vr/qml/wallet/send/SendPageQR.qml b/src/vr/qml/wallet/send/SendPageQR.qml index e1c810b..0abc22b 100644 --- a/src/vr/qml/wallet/send/SendPageQR.qml +++ b/src/vr/qml/wallet/send/SendPageQR.qml @@ -14,6 +14,7 @@ ColumnLayout { MyText { Layout.fillWidth: true wrap: true + fontColor: Style.fontColorBright text: "Look at a QR code in VR and take a screenshot." } @@ -32,6 +33,7 @@ ColumnLayout { visible: false Layout.fillWidth: true wrap: true + fontColor: Style.fontColorBright text: "Status message." } diff --git a/src/vr/qml/wallet/send/SendPageTransfer.qml b/src/vr/qml/wallet/send/SendPageTransfer.qml index c0ee2ff..94a3652 100644 --- a/src/vr/qml/wallet/send/SendPageTransfer.qml +++ b/src/vr/qml/wallet/send/SendPageTransfer.qml @@ -1,21 +1,23 @@ import QtQuick 2.7 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.3 + import "../../common" ColumnLayout { id: root spacing: 30 + property string txDialogText: "" property double amount: 0.0 property bool canSend: false - property bool isSending: false Layout.fillWidth: true MyText { Layout.fillWidth: true wrap: true + fontColor: Style.fontColorBright text: "How much would you like to send?" } @@ -27,10 +29,13 @@ ColumnLayout { onAmountUpdated: { root.amount = amount; + fiatText.text = WowletVR.amountToFiat(root.amount); - // @TODO: create tx validation here + // @TODO: tx validation here if(root.amount <= 0) { root.canSend = false; + } else if(root.amount > appWindow.spendable) { + root.canSend = false; } else { root.canSend = true; } @@ -68,10 +73,11 @@ ColumnLayout { Rectangle { color: "transparent" Layout.fillWidth: true - Layout.preferredHeight: 48 + Layout.preferredHeight: 68 MyText { - fontSize: 18 + fontSize: 24 + fontColor: Style.fontColorBright text: root.amount + " WOW" anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right @@ -102,8 +108,10 @@ ColumnLayout { Layout.preferredHeight: 48 MyText { + id: fiatText fontSize: 18 - text: "$853.20 USD" + fontColor: Style.fontColorBright + text: "$0.00 USD" anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right } @@ -133,7 +141,8 @@ ColumnLayout { Layout.preferredHeight: 48 MyText { - text: destinationAddress + text: destinationAddress.slice(0, 12) + "..."; + fontColor: Style.fontColorBright anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right } @@ -153,19 +162,12 @@ ColumnLayout { } } - Item { - Layout.fillWidth: true - Layout.fillHeight: true - } - RowLayout { Layout.preferredWidth: parent.width Layout.preferredHeight: 128 MyPushButton { id: keyboardButton - enabled: !isSending - opacity: isSending ? 0.5 : 1.0 Layout.preferredWidth: 700 text: "Enter amount via virtual keyboard" @@ -186,23 +188,100 @@ ColumnLayout { text: "Create transaction" onClicked: { - currentWallet.createTransactionAsync(addresses, paymentId, amountsxmr, mixinCount, priority); + WowletVR.onCreateTransaction(destinationAddress, root.amount, "", false); // no description + sendButton.enabled = false; } } } + Item { + Layout.fillWidth: true + Layout.fillHeight: true + } + Connections { target: OverlayController function onKeyBoardInputSignal(input, userValue) { if (userValue == 1337) { let val = parseFloat(input); - myNumPadSendAmount.onAmountUpdated(val); + if(val >= 0) + myNumPadSendAmount.onAmountUpdated(val); } } } + Connections { + target: ctx + + function onInitiateTransaction() { + console.log("transactionStarted"); + + mainView.opacity = 0.4; + mainView.enabled = false; + root.canSend = false; + root.txDialogText = "Busy creating transaction. Hold on tight!"; + + waitPopup.open(); + } + + function onCreateTransactionError(message) { // str + console.log("onCreateTransactionError", message); + waitPopup.close(); + + mainView.opacity = 1.0; + mainView.enabled = true; + root.canSend = true; + root.txDialogText = ""; + + messagePopup.showMessage("Error creating tx", message); + } + + function onCreateTransactionSuccess(tx, address) { // PendingTransaction + console.log("onCreateTransactionSuccess", address) + root.txDialogText = "Submitting transaction to the Wownero network."; + } + + function onTransactionCommitted(status, tx, txid) { // bool,PendingTransaction,stringlist + console.log("onTransactionCommitted", status); + waitPopup.close(); + + mainView.opacity = 1.0; + mainView.enabled = true; + root.canSend = true; + root.txDialogText = ""; + + walletView.pop(); + } + } + function onPageCompleted(previousView){ } + + Popup { + id: waitPopup + + implicitHeight: 100 + implicitWidth: 1200 + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + + ColumnLayout { + anchors.fill: parent + MyText { + Layout.alignment: Qt.AlignHCenter + fontColor: Style.fontColor + text: root.txDialogText + } + } + + background: Rectangle { + color: "black" + opacity: 0.8 + } + } + + Component.onCompleted: { + } } \ No newline at end of file From bd38e5e1d8174678e9c0c9496d0ac32f4d885ceb Mon Sep 17 00:00:00 2001 From: dsc Date: Fri, 9 Apr 2021 18:00:12 +0200 Subject: [PATCH 07/15] Refactor numpad code, transfer screen --- src/main.cpp | 8 + src/utils/prices.cpp | 2 +- src/vr/assets/themes.json | 2 +- src/vr/main.cpp | 4 - src/vr/main.h | 19 +- src/vr/main.qml | 34 +-- src/vr/qml/AboutPage.qml | 2 +- src/vr/qml/WalletPage.qml | 3 +- src/vr/qml/common/MyNumPad.qml | 67 ++--- src/vr/qml/common/MyNumPadButton.qml | 4 +- src/vr/qml/common/MyStackViewPage.qml | 22 +- src/vr/qml/wallet/WalletDashBoardPage.qml | 5 + src/vr/qml/wallet/send/SendPage.qml | 9 +- src/vr/qml/wallet/send/SendPagePIN.qml | 49 ++-- src/vr/qml/wallet/send/SendPageQR.qml | 6 +- src/vr/qml/wallet/send/SendPageTransfer.qml | 277 ++++++++++---------- 16 files changed, 260 insertions(+), 253 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 3393f4e..65d28d6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -120,6 +120,14 @@ if (AttachConsole(ATTACH_PARENT_PROCESS)) { if(openVREnabled) { #ifdef HAS_OPENVR + // @TODO: custom DPI / AA +// QCoreApplication::setAttribute( Qt::AA_UseDesktopOpenGL ); +// QCoreApplication::setAttribute( Qt::AA_Use96Dpi ); + if(qgetenv("scale") == "1") + QCoreApplication::setAttribute( Qt::AA_EnableHighDpiScaling ); + if(qgetenv("noscale") == "1") + QCoreApplication::setAttribute( Qt::AA_DisableHighDpiScaling ); + QApplication vr_app(argc, argv); auto *ctx = new AppContext(&parser); auto *vr = new wowletvr::WowletVR(ctx, &parser, &vr_app); diff --git a/src/utils/prices.cpp b/src/utils/prices.cpp index 445b493..ed3bb09 100644 --- a/src/utils/prices.cpp +++ b/src/utils/prices.cpp @@ -38,7 +38,7 @@ void Prices::cryptoPricesReceived(const QJsonArray &data) { for(auto &&entry: data) { marketStruct ms; QJsonObject obj = entry.toObject(); - ms.symbol = obj.value("symbol").toString(); + ms.symbol = obj.value("symbol").toString().toUpper(); ms.image = obj.value("image").toString(); ms.name = obj.value("name").toString(); ms.price_usd = obj.value("current_price").toDouble(); diff --git a/src/vr/assets/themes.json b/src/vr/assets/themes.json index 4c2f049..0902ed3 100644 --- a/src/vr/assets/themes.json +++ b/src/vr/assets/themes.json @@ -3,7 +3,7 @@ "fontColor": "white", "fontColorDimmed": "#cccccc", "fontColorBright": "white", - "backgroundGradientStartColor": "#194f64", + "backgroundGradientStartColor": "#225d73", "backgroundGradientStopColor": "#192e43", "backgroundColor": "#1b2939", "divideColor": "50ffffff", diff --git a/src/vr/main.cpp b/src/vr/main.cpp index fedf4e7..cd1bf40 100644 --- a/src/vr/main.cpp +++ b/src/vr/main.cpp @@ -83,10 +83,6 @@ namespace wowletvr { qRegisterMetaType(); qRegisterMetaType(); - // @TODO: custom DPI / AA -// QCoreApplication::setAttribute( Qt::AA_UseDesktopOpenGL ); -// QCoreApplication::setAttribute( Qt::AA_Use96Dpi ); - if(!desktopMode) { if(!openvr_init::initializeOpenVR(openvr_init::OpenVrInitializationType::Overlay)) throw std::runtime_error("Error: initializeOpenVR()"); diff --git a/src/vr/main.h b/src/vr/main.h index 4889b09..aa13882 100644 --- a/src/vr/main.h +++ b/src/vr/main.h @@ -57,12 +57,25 @@ namespace wowletvr { m_pClipboard->setText(text, QClipboard::Selection); } - Q_INVOKABLE QString amountToFiat(double amount) { + Q_INVOKABLE QString preferredFiat() { + return config()->get(Config::preferredFiatCurrency).toString(); + } + + Q_INVOKABLE QString fiatToWow(double amount) { + auto preferredFiatCurrency = config()->get(Config::preferredFiatCurrency).toString(); + if (amount <= 0) return QString("0.00"); + + double conversionAmount = AppContext::prices->convert(preferredFiatCurrency, "WOW", amount); + return QString("%1").arg(QString::number(conversionAmount, 'f', 2)); + } + + Q_INVOKABLE QString wowToFiat(double amount) { auto preferredFiatCurrency = config()->get(Config::preferredFiatCurrency).toString(); - if (amount <= 0) return QString("0.00 %1").arg(preferredFiatCurrency); + if (amount <= 0) return QString("0.00"); double conversionAmount = AppContext::prices->convert("WOW", preferredFiatCurrency, amount); - return QString("~%1 %2").arg(QString::number(conversionAmount, 'f', 2), preferredFiatCurrency); + if(conversionAmount <= 0) return QString("0.00"); + return QString("~%1").arg(QString::number(conversionAmount, 'f', 2)); } private: diff --git a/src/vr/main.qml b/src/vr/main.qml index 0c1df3b..819613b 100644 --- a/src/vr/main.qml +++ b/src/vr/main.qml @@ -22,7 +22,8 @@ Rectangle { color: "transparent" property var themes: {} - property string theme: "wownero" + property string theme: "default" + property string fiatSymbol: "USD" signal initTheme(); // Components that have been dynamically created need to redraw @@ -309,24 +310,23 @@ Rectangle { try { appWindow.themes = WowletVR.getThemes(); appWindow.theme = WowletVR.getCurrentTheme(); - } - catch(err) { + } catch(err) { // for debugging purposes - do not change color codes here, use themes.json instead. appWindow.themes = { - "default": { - "fontColor": "white", - "fontColorDimmed": "#cccccc", - "fontColorBright": "#white", - "backgroundGradientStartColor": "#194f64", - "backgroundGradientStopColor": "#192e43", - }, - "wownero": { - "fontColor": "#bd93f9", - "fontColorDimmed": "#cccccc", - "fontColorBright": "#e5d3ff", - "backgroundGradientStartColor": "#383a59", - "backgroundGradientStopColor": "#282a36", - } + "default": { + "fontColor": "white", + "fontColorDimmed": "#cccccc", + "fontColorBright": "white", + "backgroundGradientStartColor": "#225d73", + "backgroundGradientStopColor": "#192e43", + }, + "wownero": { + "fontColor": "#bd93f9", + "fontColorDimmed": "#cccccc", + "fontColorBright": "#e5d3ff", + "backgroundGradientStartColor": "#383a59", + "backgroundGradientStopColor": "#282a36", + } } } diff --git a/src/vr/qml/AboutPage.qml b/src/vr/qml/AboutPage.qml index a09cdee..c50cc6e 100644 --- a/src/vr/qml/AboutPage.qml +++ b/src/vr/qml/AboutPage.qml @@ -47,8 +47,8 @@ ColumnLayout { Layout.leftMargin: 40 Layout.rightMargin: 40 Layout.fillWidth: true - text: "Greetings: matzman666, qvqc, ez, Gatto, cisme, wowario, lza_menace, jwinterm, nioc, asymptotically, azy, selsta, kico, laura, thrmo, rottensox, solar, bl4sty, scoobybejesus" fontSize: 14 + text: "Shoutouts: matzman666, qvqc, ez, Gatto, RAGEHAÜZ, cisme, wowario, lza_menace, jwinterm, nioc, asymptotically, azy, selsta, kico, laura, thrmo, rottensox, solar, bl4sty, scoobybejesus" wrap: true } diff --git a/src/vr/qml/WalletPage.qml b/src/vr/qml/WalletPage.qml index 2ad9604..48d72bc 100755 --- a/src/vr/qml/WalletPage.qml +++ b/src/vr/qml/WalletPage.qml @@ -35,6 +35,7 @@ Rectangle { StackView { id: walletView anchors.fill: parent + initialItem: walletDashboardPage pushEnter: Transition { PropertyAnimation { @@ -72,8 +73,6 @@ Rectangle { easing.type: Easing.OutCubic } } - - initialItem: walletDashboardPage } function onPageCompleted() { diff --git a/src/vr/qml/common/MyNumPad.qml b/src/vr/qml/common/MyNumPad.qml index 84af802..24337a5 100644 --- a/src/vr/qml/common/MyNumPad.qml +++ b/src/vr/qml/common/MyNumPad.qml @@ -6,34 +6,23 @@ import "." ColumnLayout { id: root enabled: true + spacing: 16 property double disabledOpacity: 0.4 - property var code: []; + property bool compact: false signal resolvePressed(); - signal codeUpdated(var pin_code); - - function onButtonPress(val) { - code.push(val); - - if(code.length === 5) - code = [val]; - - codeUpdated(code); - } - - function reset() { - root.code = []; - } + signal buttonPress(string val); + signal clearPress(); RowLayout { - spacing: 20 + spacing: 18 MyNumPadButton { opacity: root.enabled ? 1 : disabledOpacity text: "1" onClicked: { - onButtonPress("1"); + buttonPress("1"); } } @@ -41,7 +30,7 @@ ColumnLayout { opacity: root.enabled ? 1 : disabledOpacity text: "2" onClicked: { - onButtonPress("2"); + buttonPress("2"); } } @@ -49,19 +38,19 @@ ColumnLayout { opacity: root.enabled ? 1 : disabledOpacity text: "3" onClicked: { - onButtonPress("3"); + buttonPress("3"); } } } RowLayout { - spacing: 20 + spacing: 18 MyNumPadButton { opacity: root.enabled ? 1 : disabledOpacity text: "4" onClicked: { - onButtonPress("4"); + buttonPress("4"); } } @@ -69,7 +58,7 @@ ColumnLayout { opacity: root.enabled ? 1 : disabledOpacity text: "5" onClicked: { - onButtonPress("5"); + buttonPress("5"); } } @@ -77,19 +66,19 @@ ColumnLayout { opacity: root.enabled ? 1 : disabledOpacity text: "6" onClicked: { - onButtonPress("6"); + buttonPress("6"); } } } RowLayout { - spacing: 20 + spacing: 18 MyNumPadButton { opacity: root.enabled ? 1 : disabledOpacity text: "7" onClicked: { - onButtonPress("7"); + buttonPress("7"); } } @@ -97,7 +86,7 @@ ColumnLayout { opacity: root.enabled ? 1 : disabledOpacity text: "8" onClicked: { - onButtonPress("8"); + buttonPress("8"); } } @@ -105,32 +94,44 @@ ColumnLayout { opacity: root.enabled ? 1 : disabledOpacity text: "9" onClicked: { - onButtonPress("9"); + buttonPress("9"); } } } RowLayout { - spacing: 20 + spacing: 18 MyNumPadButton { opacity: root.enabled ? 1 : disabledOpacity text: "0" onClicked: { - onButtonPress("0"); + buttonPress("0"); + } + } + + MyNumPadButton { + visible: root.compact + opacity: root.enabled ? 1 : disabledOpacity + text: "." + onClicked: { + buttonPress("."); } } MyNumPadButton { opacity: root.enabled ? 1 : disabledOpacity - Layout.preferredWidth: 204 + Layout.preferredWidth: root.compact ? 106 : 230 fontSize: 16 - text: "Clear" + text: root.compact ? "C" : "Clear" onClicked: { - root.code = [0,0,0,0]; - root.codeUpdated(root.code); + clearPress(); } } } + + function reset() { + + } } diff --git a/src/vr/qml/common/MyNumPadButton.qml b/src/vr/qml/common/MyNumPadButton.qml index cbce685..7d17023 100644 --- a/src/vr/qml/common/MyNumPadButton.qml +++ b/src/vr/qml/common/MyNumPadButton.qml @@ -11,8 +11,8 @@ Rectangle { signal clicked; - Layout.preferredWidth: 92 - Layout.preferredHeight: 92 + Layout.preferredWidth: 106 + Layout.preferredHeight: 106 color: Style.btnExitedColor MyText { diff --git a/src/vr/qml/common/MyStackViewPage.qml b/src/vr/qml/common/MyStackViewPage.qml index def729d..2ad651b 100755 --- a/src/vr/qml/common/MyStackViewPage.qml +++ b/src/vr/qml/common/MyStackViewPage.qml @@ -128,7 +128,6 @@ Rectangle { ColumnLayout { id: mainLayout - spacing: 12 anchors.fill: parent } @@ -147,7 +146,7 @@ Rectangle { anchors.leftMargin: 40 anchors.rightMargin: 40 - color: Style.fontColorDimmed + color: Style.dividerColor height: 1 } @@ -169,7 +168,7 @@ Rectangle { Rectangle { Layout.fillHeight: true Layout.preferredWidth: 1 - color: Style.fontColorDimmed + color: Style.dividerColor } RowLayout { @@ -204,7 +203,7 @@ Rectangle { Rectangle { Layout.fillHeight: true Layout.preferredWidth: 1 - color: Style.fontColorDimmed + color: Style.dividerColor } RowLayout { @@ -228,12 +227,21 @@ Rectangle { Rectangle { Layout.fillHeight: true Layout.preferredWidth: 1 - color: Style.fontColorDimmed + color: Style.dividerColor } MyText { fontSize: 14 - text: "Balance: " + WowletVR.amountToFiat(appWindow.spendable); + text: { + let rtn = "Balance: "; + try { + rtn += WowletVR.wowToFiat(appWindow.spendable); + } catch(err) { + rtn += "ERROR"; + } + + return rtn + " " + appWindow.fiatSymbol + } color: Style.fontColorDimmed } } @@ -251,7 +259,7 @@ Rectangle { content.Layout.topMargin = 10 content.Layout.leftMargin = 40 content.Layout.rightMargin = 40 - content.Layout.bottomMargin = 40 + content.Layout.bottomMargin = 10 bigRect.parent = mainLayout } diff --git a/src/vr/qml/wallet/WalletDashBoardPage.qml b/src/vr/qml/wallet/WalletDashBoardPage.qml index 3e7cffe..40e9195 100644 --- a/src/vr/qml/wallet/WalletDashBoardPage.qml +++ b/src/vr/qml/wallet/WalletDashBoardPage.qml @@ -95,5 +95,10 @@ MyStackViewPage { function onPageCompleted() { historyView.onPageCompleted(); + try { + appWindow.fiatSymbol = WowletVR.preferredFiat(); + } catch(err) { + + } } } \ No newline at end of file diff --git a/src/vr/qml/wallet/send/SendPage.qml b/src/vr/qml/wallet/send/SendPage.qml index 58c5d8f..f5d8d10 100755 --- a/src/vr/qml/wallet/send/SendPage.qml +++ b/src/vr/qml/wallet/send/SendPage.qml @@ -8,6 +8,7 @@ import "." MyStackViewPage { id: sendStateController + height: 800 width: 1600 headerText: "Send" @@ -32,9 +33,6 @@ MyStackViewPage { } } - // if(previousView !== null && currentView.viewName === "wizardHome") - // wizardController.restart(); - if (currentView) { sendStack.replace(currentView) // Calls when view is opened @@ -44,10 +42,6 @@ MyStackViewPage { } previousView = currentView; - - // reset push direction - // if(wizardController.wizardState == "wizardHome") - // wizardController.wizardStackView.backTransition = false; } states: [ @@ -105,6 +99,7 @@ MyStackViewPage { onBackClicked: { // top back button to send/receive menu, reset default states for sendViews sendStateView.pinPage.onPageCompleted(); + sendStateView.qrPage.onPageCompleted(); sendStateView.dashPage.onPageCompleted(); sendStateView.transferPage.onPageCompleted(); } diff --git a/src/vr/qml/wallet/send/SendPagePIN.qml b/src/vr/qml/wallet/send/SendPagePIN.qml index a202ce4..6cc3ea2 100644 --- a/src/vr/qml/wallet/send/SendPagePIN.qml +++ b/src/vr/qml/wallet/send/SendPagePIN.qml @@ -9,7 +9,7 @@ ColumnLayout { id: root Layout.fillWidth: true - property string _PINLookup: "" + property string pin: "" MyText { Layout.fillWidth: true @@ -29,25 +29,11 @@ ColumnLayout { MyNumPad { id: numPad - onCodeUpdated: { - let codeFmt = ""; - - for(var i = 0; i != 4; i++) { - if(pin_code[i] !== undefined) { - codeFmt += pin_code[i] + " "; - } else { - codeFmt += ". "; - } + onButtonPress: { + root.pin += val; + if(root.pin.length === 4 && root.pin !== "0000") { + return addressLookup(); } - - // update display thingy - codeDisplay.text = codeFmt; - - // lol Qt - codeFmt = codeFmt.replace(" ", "").replace(" ", "").replace(" ", "").replace(" ", "").replace(" ", "").trim(); - - if(pin_code.length === 4 && codeFmt != "0000") - addressLookup(codeFmt); } } @@ -66,7 +52,7 @@ ColumnLayout { id: codeDisplay Layout.preferredWidth: 390 visible: true - text: "0 0 0 0" + text: (root.pin[0] || ".") + " " + (root.pin[1] || ".") + " " + (root.pin[2] || ".") + " " + (root.pin[3] || "."); color: Style.fontColor font.bold: true font.pointSize: 40 @@ -136,7 +122,7 @@ ColumnLayout { } MyText { - text: _PINLookup + text: root.pin } } } @@ -148,18 +134,18 @@ ColumnLayout { Layout.fillWidth: true } - function addressLookup(code) { - if(_PINLookup !== "") - return; - - _PINLookup = code; - + function addressLookup() { + console.log("addressLookup()"); idleContainer.visible = false; loadingContainer.visible = true; numPad.enabled = false; - ctx.onLookupReceivingPIN(code); + try { + ctx.onLookupReceivingPIN(root.pin); + } catch(err){ + console.log("ctx.onLookupReceivingPIN() ignored") + } } function onPageCompleted(previousView) { @@ -167,8 +153,9 @@ ColumnLayout { } function reset() { + console.log("SendPagePin reset()"); // reset state - _PINLookup = ""; + root.pin = ""; idleContainer.visible = true; loadingContainer.visible = false; @@ -176,8 +163,6 @@ ColumnLayout { numPad.enabled = true; numPad.reset(); - - codeDisplay.text = "0 0 0 0"; } Connections { @@ -186,7 +171,7 @@ ColumnLayout { function onPinLookupReceived(address, pin) { console.log("onPinLookupReceived", address); - if(pin === _PINLookup) { + if(pin === root.pin) { sendStateController.destinationAddress = address; sendStateView.state = "transferPage"; } else { diff --git a/src/vr/qml/wallet/send/SendPageQR.qml b/src/vr/qml/wallet/send/SendPageQR.qml index 0abc22b..a8ab76c 100644 --- a/src/vr/qml/wallet/send/SendPageQR.qml +++ b/src/vr/qml/wallet/send/SendPageQR.qml @@ -42,7 +42,11 @@ ColumnLayout { Layout.fillWidth: true } - function onPageCompleted(previousView){ + function reset() { + + } + function onPageCompleted(previousView){ + reset(); } } \ No newline at end of file diff --git a/src/vr/qml/wallet/send/SendPageTransfer.qml b/src/vr/qml/wallet/send/SendPageTransfer.qml index 94a3652..0e5c963 100644 --- a/src/vr/qml/wallet/send/SendPageTransfer.qml +++ b/src/vr/qml/wallet/send/SendPageTransfer.qml @@ -9,7 +9,8 @@ ColumnLayout { spacing: 30 property string txDialogText: "" - property double amount: 0.0 + property string amount: "" + property string amount_type: "wow" property bool canSend: false Layout.fillWidth: true @@ -21,37 +22,85 @@ ColumnLayout { text: "How much would you like to send?" } - MyNumPadSendAmount { - id: myNumPadSendAmount - Layout.fillWidth: true - Layout.preferredHeight: 112 - Layout.maximumHeight: 112 - - onAmountUpdated: { - root.amount = amount; - fiatText.text = WowletVR.amountToFiat(root.amount); - - // @TODO: tx validation here - if(root.amount <= 0) { - root.canSend = false; - } else if(root.amount > appWindow.spendable) { - root.canSend = false; - } else { - root.canSend = true; - } - } + function count(input, needle) { + return input.split(".").length - 1; } RowLayout { - spacing: 30 - Layout.topMargin: 20 - Layout.fillHeight: true - Layout.fillWidth: true + spacing: 40 + + ColumnLayout { + Layout.preferredWidth: 320 + Layout.preferredHeight: 400 + + MyNumPad { + id: numPad + compact: true + onButtonPress: { + let periods = count(root.amount, "."); + if(periods == 1 && val === ".") return; + if(root.amount === "" && val === ".") return; + if(root.amount.length > 7) return; + + root.amount += val; + } + onClearPress: { + root.amount = ""; + } + } + + Rectangle { + Layout.fillHeight: true + Layout.preferredWidth: parent.Layout.preferredWidth + color: "transparent" + } + } + + ColumnLayout { + spacing: 14 + Layout.fillHeight: true + Layout.preferredWidth: 280 + + MyPushButton { + id: wowButton + opacity: enabled ? 1.0 : 0.4 + enabled: root.amount_type === "fiat" + + Layout.preferredWidth: 280 + Layout.preferredHeight: 108 + + text: "Wownero" + + onClicked: { + root.amount_type = "wow" + } + } + + MyPushButton { + id: fiatBtn + opacity: enabled ? 1.0 : 0.4 + enabled: root.amount_type === "wow" + + Layout.preferredWidth: 280 + Layout.preferredHeight: 108 + + text: "Fiat" + + onClicked: { + root.amount_type = "fiat" + } + } + + Item { + Layout.fillHeight: true + Layout.fillWidth: true + } + } ColumnLayout { spacing: 10 Layout.fillHeight: true - Layout.maximumWidth: parent.width / 2 + RowLayout { spacing: 30 @@ -78,7 +127,21 @@ ColumnLayout { MyText { fontSize: 24 fontColor: Style.fontColorBright - text: root.amount + " WOW" + text: { + let rtn = ""; + if(root.amount === "") rtn += "0.0" + else if(root.amount_type === "wow") { + rtn += root.amount; + } else { + try { + rtn += WowletVR.fiatToWow(root.amount); + } catch(err) { + return "ERROR"; + } + } + + return rtn + " WOW"; + } anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right } @@ -111,7 +174,21 @@ ColumnLayout { id: fiatText fontSize: 18 fontColor: Style.fontColorBright - text: "$0.00 USD" + text: { + let rtn = ""; + if(root.amount === "") rtn += "0.0" + else if(root.amount_type === "fiat") { + rtn += root.amount; + } else { + try { + rtn += WowletVR.wowToFiat(root.amount); + } catch(err) { + return "ERROR"; + } + } + + return rtn + " " + appWindow.fiatSymbol + } anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right } @@ -153,133 +230,49 @@ ColumnLayout { Layout.fillWidth: true Layout.fillHeight: true } - } - - Rectangle { - color: "transparent" - Layout.fillWidth: true - Layout.fillHeight: true - } - } - RowLayout { - Layout.preferredWidth: parent.width - Layout.preferredHeight: 128 - - MyPushButton { - id: keyboardButton - Layout.preferredWidth: 700 - - text: "Enter amount via virtual keyboard" - - onClicked: { - OverlayController.showKeyboard(text, 1337) - } - } - - MyPushButton { - id: sendButton - opacity: root.canSend ? 1.0 : 0.5 - enabled: root.canSend + MyPushButton { + id: sendButton - Layout.preferredWidth: 420 - Layout.alignment: Qt.AlignRight + Layout.preferredWidth: 420 + Layout.alignment: Qt.AlignRight - text: "Create transaction" + text: "Create transaction" - onClicked: { - WowletVR.onCreateTransaction(destinationAddress, root.amount, "", false); // no description - sendButton.enabled = false; - } - } - } + onClicked: { + if(amount === "") return; - Item { - Layout.fillWidth: true - Layout.fillHeight: true - } + let _amount = parseFloat(amount); + if(root.amount_type == "fiat") { + try { + _amount = WowletVR.fiatToWow(_amount); + } catch(err) { + messagePopup.showMessage("Error", "Could not convert fiat to wow."); + return; + } + } - Connections { - target: OverlayController + if(amount <= 0) { + messagePopup.showMessage("Error", "Amount was zero."); + return; + } - function onKeyBoardInputSignal(input, userValue) { - if (userValue == 1337) { - let val = parseFloat(input); - if(val >= 0) - myNumPadSendAmount.onAmountUpdated(val); + WowletVR.onCreateTransaction(destinationAddress, _amount.toString(), "", false); // no description + sendButton.enabled = false; + } } } } - Connections { - target: ctx - - function onInitiateTransaction() { - console.log("transactionStarted"); - - mainView.opacity = 0.4; - mainView.enabled = false; - root.canSend = false; - root.txDialogText = "Busy creating transaction. Hold on tight!"; - - waitPopup.open(); - } - - function onCreateTransactionError(message) { // str - console.log("onCreateTransactionError", message); - waitPopup.close(); - - mainView.opacity = 1.0; - mainView.enabled = true; - root.canSend = true; - root.txDialogText = ""; - - messagePopup.showMessage("Error creating tx", message); - } - - function onCreateTransactionSuccess(tx, address) { // PendingTransaction - console.log("onCreateTransactionSuccess", address) - root.txDialogText = "Submitting transaction to the Wownero network."; - } - - function onTransactionCommitted(status, tx, txid) { // bool,PendingTransaction,stringlist - console.log("onTransactionCommitted", status); - waitPopup.close(); - - mainView.opacity = 1.0; - mainView.enabled = true; - root.canSend = true; - root.txDialogText = ""; - - walletView.pop(); - } + function onPageCompleted() { + root.amount = ""; + root.amount_type = "wow"; + root.txDialogText = ""; } - - function onPageCompleted(previousView){ - - } - - Popup { - id: waitPopup - - implicitHeight: 100 - implicitWidth: 1200 - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - - ColumnLayout { - anchors.fill: parent - MyText { - Layout.alignment: Qt.AlignHCenter - fontColor: Style.fontColor - text: root.txDialogText - } - } - - background: Rectangle { - color: "black" - opacity: 0.8 - } + + Item { + Layout.fillWidth: true + Layout.fillHeight: true } Component.onCompleted: { From 5bb95053fb537c04b9cb4333ec517604564d6f56 Mon Sep 17 00:00:00 2001 From: dsc Date: Sun, 11 Apr 2021 19:40:52 +0200 Subject: [PATCH 08/15] Fixes DPI scaling and added quirc submodule --- .gitmodules | 3 +++ contrib/quirc | 1 + src/main.cpp | 9 +-------- src/vr/main.qml | 6 +++--- src/vr/qml/AboutPage.qml | 4 ++-- src/vr/qml/DashboardPage.qml | 6 +++--- src/vr/qml/common/MyDialogOkCancelPopup.qml | 2 +- src/vr/qml/common/MyDialogOkPopup.qml | 2 +- src/vr/qml/common/MyNumPad.qml | 2 +- src/vr/qml/common/MyNumPadButton.qml | 2 +- src/vr/qml/common/MyPushButton.qml | 2 +- src/vr/qml/common/MyStackViewPage.qml | 15 ++++++++------- src/vr/qml/common/MyText.qml | 2 +- src/vr/qml/wallet/HistoryTable.qml | 6 +++--- src/vr/qml/wallet/ReceivePage.qml | 8 ++++---- src/vr/qml/wallet/send/SendPageNavBack.qml | 2 +- src/vr/qml/wallet/send/SendPagePIN.qml | 6 +++--- src/vr/qml/wallet/send/SendPageTransfer.qml | 4 ++-- 18 files changed, 40 insertions(+), 42 deletions(-) create mode 160000 contrib/quirc diff --git a/.gitmodules b/.gitmodules index 294bfc9..4a20536 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,3 +5,6 @@ path = monero url = https://git.wownero.com/wownero/wownero branch = wowlet +[submodule "contrib/quirc"] + path = contrib/quirc + url = https://github.com/dlbeer/quirc.git diff --git a/contrib/quirc b/contrib/quirc new file mode 160000 index 0000000..9c0f555 --- /dev/null +++ b/contrib/quirc @@ -0,0 +1 @@ +Subproject commit 9c0f555acb2531d818f2c405044418fc75379fb2 diff --git a/src/main.cpp b/src/main.cpp index 65d28d6..7654e4e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -120,14 +120,7 @@ if (AttachConsole(ATTACH_PARENT_PROCESS)) { if(openVREnabled) { #ifdef HAS_OPENVR - // @TODO: custom DPI / AA -// QCoreApplication::setAttribute( Qt::AA_UseDesktopOpenGL ); -// QCoreApplication::setAttribute( Qt::AA_Use96Dpi ); - if(qgetenv("scale") == "1") - QCoreApplication::setAttribute( Qt::AA_EnableHighDpiScaling ); - if(qgetenv("noscale") == "1") - QCoreApplication::setAttribute( Qt::AA_DisableHighDpiScaling ); - + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication vr_app(argc, argv); auto *ctx = new AppContext(&parser); auto *vr = new wowletvr::WowletVR(ctx, &parser, &vr_app); diff --git a/src/vr/main.qml b/src/vr/main.qml index 819613b..61472db 100644 --- a/src/vr/main.qml +++ b/src/vr/main.qml @@ -105,7 +105,7 @@ Rectangle { id: enterPasswordDialog dialogTitle: "Enter Wallet Password" dialogWidth: 700 - dialogHeight: 380 + dialogHeight: 280 dialogContentItem: ColumnLayout { RowLayout { @@ -202,7 +202,7 @@ Rectangle { MyText { Layout.topMargin: 20 Layout.leftMargin: 16 - fontSize: 16 + fontSize: 24 fontColor: Style.fontColorDimmed text: "The password field is optional." } @@ -236,7 +236,7 @@ Rectangle { MyText { text: "Credits" - fontSize: 12 + fontSize: 16 opacity: 0.3 anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter diff --git a/src/vr/qml/AboutPage.qml b/src/vr/qml/AboutPage.qml index c50cc6e..9c50a6d 100644 --- a/src/vr/qml/AboutPage.qml +++ b/src/vr/qml/AboutPage.qml @@ -47,7 +47,7 @@ ColumnLayout { Layout.leftMargin: 40 Layout.rightMargin: 40 Layout.fillWidth: true - fontSize: 14 + fontSize: 21 text: "Shoutouts: matzman666, qvqc, ez, Gatto, RAGEHAÜZ, cisme, wowario, lza_menace, jwinterm, nioc, asymptotically, azy, selsta, kico, laura, thrmo, rottensox, solar, bl4sty, scoobybejesus" wrap: true } @@ -56,7 +56,7 @@ ColumnLayout { Layout.leftMargin: 40 Layout.rightMargin: 40 Layout.fillWidth: true - fontSize: 14 + fontSize: 21 text: "dsc - April 2021" wrap: true } diff --git a/src/vr/qml/DashboardPage.qml b/src/vr/qml/DashboardPage.qml index 1ab1973..dd7fe54 100644 --- a/src/vr/qml/DashboardPage.qml +++ b/src/vr/qml/DashboardPage.qml @@ -27,7 +27,7 @@ ColumnLayout { RowLayout { MyText { text: "Welcome to Wowlet VR" - font.pointSize: 24 + font.pointSize: 36 Layout.leftMargin: 0 } @@ -44,7 +44,7 @@ ColumnLayout { MyText{ anchors.right: parent.right anchors.bottom: parent.bottom - fontSize: 14 + fontSize: 21 text: "Version beta (Qt " + qtRuntimeVersion + ")" } } @@ -119,7 +119,7 @@ ColumnLayout { return currentItem['fileName'].replace(".keys", ""); } } - font.pointSize: 14 + font.pointSize: 21 anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top anchors.topMargin: 14 diff --git a/src/vr/qml/common/MyDialogOkCancelPopup.qml b/src/vr/qml/common/MyDialogOkCancelPopup.qml index 489c12d..3c799cf 100755 --- a/src/vr/qml/common/MyDialogOkCancelPopup.qml +++ b/src/vr/qml/common/MyDialogOkCancelPopup.qml @@ -39,7 +39,7 @@ Popup { implicitWidth: dialogWidth implicitHeight: dialogHeight anchors.centerIn: parent - radius: 24 + radius: 36 color: Style.backgroundColor border.color: Style.fontColorDimmed border.width: 2 diff --git a/src/vr/qml/common/MyDialogOkPopup.qml b/src/vr/qml/common/MyDialogOkPopup.qml index 8202554..e7fdc85 100755 --- a/src/vr/qml/common/MyDialogOkPopup.qml +++ b/src/vr/qml/common/MyDialogOkPopup.qml @@ -17,7 +17,7 @@ Popup { property int dialogHeight: 300 property Item dialogContentItem: MyText { - fontSize: 16 + fontSize: 36 text: dialogText horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter diff --git a/src/vr/qml/common/MyNumPad.qml b/src/vr/qml/common/MyNumPad.qml index 24337a5..7e8b5f4 100644 --- a/src/vr/qml/common/MyNumPad.qml +++ b/src/vr/qml/common/MyNumPad.qml @@ -123,7 +123,7 @@ ColumnLayout { opacity: root.enabled ? 1 : disabledOpacity Layout.preferredWidth: root.compact ? 106 : 230 - fontSize: 16 + fontSize: 36 text: root.compact ? "C" : "Clear" onClicked: { clearPress(); diff --git a/src/vr/qml/common/MyNumPadButton.qml b/src/vr/qml/common/MyNumPadButton.qml index 7d17023..9fc7508 100644 --- a/src/vr/qml/common/MyNumPadButton.qml +++ b/src/vr/qml/common/MyNumPadButton.qml @@ -5,7 +5,7 @@ import QtQuick.Layouts 1.3 Rectangle { id: root property string text: "" - property int fontSize: 22 + property int fontSize: 32 property alias mouseArea: mouseArea property alias btnTextColor: btnText.fontColor diff --git a/src/vr/qml/common/MyPushButton.qml b/src/vr/qml/common/MyPushButton.qml index a4aa966..bbe499a 100755 --- a/src/vr/qml/common/MyPushButton.qml +++ b/src/vr/qml/common/MyPushButton.qml @@ -51,7 +51,7 @@ Item { Layout.fillWidth: root.hasIcon ? true : false Layout.alignment: root.hasIcon ? Qt.AlignLeft : Qt.AlignHCenter text: root.text - fontSize: 16 + fontSize: 26 fontColor: Style.btnTextColor } } diff --git a/src/vr/qml/common/MyStackViewPage.qml b/src/vr/qml/common/MyStackViewPage.qml index 2ad651b..0ad0566 100755 --- a/src/vr/qml/common/MyStackViewPage.qml +++ b/src/vr/qml/common/MyStackViewPage.qml @@ -30,6 +30,7 @@ Rectangle { Layout.preferredHeight: 70 RowLayout { + spacing: 20 anchors.fill: parent Rectangle { @@ -53,12 +54,12 @@ Rectangle { id: headerTitleContainer color: "transparent" Layout.preferredHeight: 50 - Layout.preferredWidth: headerTitle.width + Layout.preferredWidth: headerTitle.width + 20 MyText { id: headerTitle text: headerText - font.pointSize: 26 + font.pointSize: 38 anchors.verticalCenter: parent.verticalCenter fontColor: Style.fontColorBright } @@ -105,7 +106,7 @@ Rectangle { MyText{ anchors.right: parent.right anchors.bottom: parent.bottom - fontSize: 14 + fontSize: 30 fontBold: true text: appWindow.balanceFormatted } @@ -160,7 +161,7 @@ Rectangle { MyText { Layout.leftMargin: 40 - fontSize: 14 + fontSize: 21 text: appWindow.statusText color: Style.fontColorDimmed } @@ -176,7 +177,7 @@ Rectangle { spacing: 0 MyText { - fontSize: 14 + fontSize: 21 text: "Daemon: " color: Style.fontColorDimmed } @@ -211,7 +212,7 @@ Rectangle { spacing: 0 MyText { - fontSize: 14 + fontSize: 21 text: "WS: " color: Style.fontColorDimmed } @@ -231,7 +232,7 @@ Rectangle { } MyText { - fontSize: 14 + fontSize: 21 text: { let rtn = "Balance: "; try { diff --git a/src/vr/qml/common/MyText.qml b/src/vr/qml/common/MyText.qml index b0ee771..e85f468 100755 --- a/src/vr/qml/common/MyText.qml +++ b/src/vr/qml/common/MyText.qml @@ -4,7 +4,7 @@ import "." Text { property bool wrap: false - property int fontSize: 16 + property int fontSize: 24 property bool fontBold: false property string fontColor: Style.fontColor diff --git a/src/vr/qml/wallet/HistoryTable.qml b/src/vr/qml/wallet/HistoryTable.qml index d925144..bfca25e 100755 --- a/src/vr/qml/wallet/HistoryTable.qml +++ b/src/vr/qml/wallet/HistoryTable.qml @@ -112,7 +112,7 @@ Item { MyText { // date anchors.verticalCenter: parent.verticalCenter - fontSize: 12 + fontSize: 22 fontColor: Style.fontColorBright text: date @@ -129,7 +129,7 @@ Item { MyText { anchors.verticalCenter: parent.verticalCenter - fontSize: 14 + fontSize: 22 text: description !== "" ? description : "..." fontColor: description !== "" ? Style.fontColorBright : Style.fontColorDimmed Component.onCompleted: { @@ -152,7 +152,7 @@ Item { anchors.rightMargin: 10 anchors.verticalCenter: parent.verticalCenter - fontSize: 14 + fontSize: 24 fontBold: true text: amount fontColor: !isout ? Style.historyFontColorPlusAmount : Style.historyFontColorMinAmount diff --git a/src/vr/qml/wallet/ReceivePage.qml b/src/vr/qml/wallet/ReceivePage.qml index 3e77a56..73e1c59 100755 --- a/src/vr/qml/wallet/ReceivePage.qml +++ b/src/vr/qml/wallet/ReceivePage.qml @@ -29,7 +29,7 @@ MyStackViewPage { MyText { width: parent.width wrap: true - fontSize: 14 + fontSize: 21 fontColor: Style.fontColorBright text: "Give the following 4 digit PIN to the person that is sending you Wownero. PIN's are valid for 10 minutes and automatically renew." } @@ -46,7 +46,7 @@ MyStackViewPage { id: statusText width: parent.width visible: true - fontSize: 14 + fontSize: 21 fontColor: Style.fontColorBright text: "Generating PIN..." } @@ -56,7 +56,7 @@ MyStackViewPage { text: "- - - -" color: Style.fontColor font.bold: true - font.pointSize: 40 + font.pointSize: 60 leftPadding: 20 rightPadding: 20 @@ -92,7 +92,7 @@ MyStackViewPage { MyText { width: parent.width - fontSize: 14 + fontSize: 21 wrap: true fontColor: Style.fontColorBright text: "Alternatively, you may use one of the following methods to retreive your address." diff --git a/src/vr/qml/wallet/send/SendPageNavBack.qml b/src/vr/qml/wallet/send/SendPageNavBack.qml index 994486c..107fbce 100644 --- a/src/vr/qml/wallet/send/SendPageNavBack.qml +++ b/src/vr/qml/wallet/send/SendPageNavBack.qml @@ -38,7 +38,7 @@ RowLayout { Layout.alignment: Qt.AlignLeft fontBold: true text: "back" - fontSize: 16 + fontSize: 24 } } diff --git a/src/vr/qml/wallet/send/SendPagePIN.qml b/src/vr/qml/wallet/send/SendPagePIN.qml index 6cc3ea2..aa32607 100644 --- a/src/vr/qml/wallet/send/SendPagePIN.qml +++ b/src/vr/qml/wallet/send/SendPagePIN.qml @@ -55,7 +55,7 @@ ColumnLayout { text: (root.pin[0] || ".") + " " + (root.pin[1] || ".") + " " + (root.pin[2] || ".") + " " + (root.pin[3] || "."); color: Style.fontColor font.bold: true - font.pointSize: 40 + font.pointSize: 60 leftPadding: 20 rightPadding: 20 @@ -91,7 +91,7 @@ ColumnLayout { Layout.fillWidth: true MyText { - fontSize: 18 + fontSize: 22 fontColor: Style.fontColorBright text: "Waiting on input..." } @@ -105,7 +105,7 @@ ColumnLayout { Layout.fillWidth: true MyText { - fontSize: 18 + fontSize: 22 fontColor: Style.fontColorBright text: "Looking up address..." } diff --git a/src/vr/qml/wallet/send/SendPageTransfer.qml b/src/vr/qml/wallet/send/SendPageTransfer.qml index 0e5c963..ac3e1f5 100644 --- a/src/vr/qml/wallet/send/SendPageTransfer.qml +++ b/src/vr/qml/wallet/send/SendPageTransfer.qml @@ -125,7 +125,7 @@ ColumnLayout { Layout.preferredHeight: 68 MyText { - fontSize: 24 + fontSize: 32 fontColor: Style.fontColorBright text: { let rtn = ""; @@ -172,7 +172,7 @@ ColumnLayout { MyText { id: fiatText - fontSize: 18 + fontSize: 26 fontColor: Style.fontColorBright text: { let rtn = ""; From 13331ee5e7a0a9063bdad67804674eccdc1d40b0 Mon Sep 17 00:00:00 2001 From: dsc Date: Tue, 13 Apr 2021 11:39:12 +0200 Subject: [PATCH 09/15] QR code feature beta and streamer mode --- CMakeLists.txt | 15 +- Dockerfile.windows | 7 +- Makefile | 7 +- contrib/openvr/CMakeLists.txt | 3 - src/CMakeLists.txt | 26 +- src/QR-Code-scanner/CMakeLists.txt | 22 ++ src/QR-Code-scanner/Decoder.cpp | 359 ++++++++++++++++++++++++++ src/QR-Code-scanner/Decoder.h | 72 ++++++ src/QR-Code-scanner/QrCodeScanner.cpp | 92 +++++++ src/QR-Code-scanner/QrCodeScanner.h | 73 ++++++ src/QR-Code-scanner/QrScanThread.cpp | 90 +++++++ src/QR-Code-scanner/QrScanThread.h | 66 +++++ src/appcontext.cpp | 14 +- src/appcontext.h | 1 + src/utils/config.cpp | 1 + src/utils/config.h | 1 + src/utils/utils.cpp | 6 + src/utils/utils.h | 1 + src/vr/main.cpp | 84 +++++- src/vr/main.h | 31 ++- src/vr/main.qml | 8 +- src/vr/main2.qml | 85 ++++++ src/vr/overlaycontroller.cpp | 12 + src/vr/overlaycontroller.h | 4 +- src/vr/qml.rcc | Bin 0 -> 1475169 bytes src/vr/qml/AboutPage.qml | 2 +- src/vr/qml/SettingsPage.qml | 44 ++++ src/vr/qml/common/MyStackViewPage.qml | 12 +- src/vr/qml/wallet/send/SendPageQR.qml | 36 ++- 29 files changed, 1143 insertions(+), 31 deletions(-) create mode 100644 src/QR-Code-scanner/CMakeLists.txt create mode 100644 src/QR-Code-scanner/Decoder.cpp create mode 100644 src/QR-Code-scanner/Decoder.h create mode 100644 src/QR-Code-scanner/QrCodeScanner.cpp create mode 100644 src/QR-Code-scanner/QrCodeScanner.h create mode 100644 src/QR-Code-scanner/QrScanThread.cpp create mode 100644 src/QR-Code-scanner/QrScanThread.h create mode 100644 src/vr/main2.qml create mode 100644 src/vr/qml.rcc diff --git a/CMakeLists.txt b/CMakeLists.txt index b3accf6..1742644 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -382,7 +382,20 @@ if(OPENVR) add_definitions(-DVR_API_PUBLIC) add_definitions(-DOPENVR_BUILD_STATIC) # is this needed? add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/contrib/openvr") - message(STATUS "yeepp") +endif() + +if(APPLE) + add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/contrib/KDMacTouchBar") +endif() + +if(WITH_SCANNER) + add_library(quirc STATIC + contrib/quirc/lib/decode.c + contrib/quirc/lib/identify.c + contrib/quirc/lib/quirc.c + contrib/quirc/lib/version_db.c + ) + target_include_directories(quirc PUBLIC contrib/quirc/lib) endif() add_subdirectory(src) diff --git a/Dockerfile.windows b/Dockerfile.windows index c2ac24d..ba97ac8 100644 --- a/Dockerfile.windows +++ b/Dockerfile.windows @@ -89,7 +89,7 @@ RUN git clone -b libgcrypt-1.8.5 --depth 1 git://git.gnupg.org/libgcrypt.git && RUN git clone -b v1.2.11 --depth 1 https://github.com/madler/zlib && \ cd zlib && \ git reset --hard cacf7f1d4e3d44d871b605da3b647f07d718623f && \ - CC=x86_64-w64-mingw32-gcc AR=x86_64-w64-mingw32-ar ./configure --static --prefix=/usr/x86_64-w64-mingw32 && \ + CC=x86_64-w64-mingw32-gcc AR=x86_64-w64-mingw32-ar ./configure --static --prefix=/depends/x86_64-w64-mingw32 && \ make -j$THREADS && \ make -j$THREADS install && \ rm -rf $(pwd) @@ -164,7 +164,7 @@ RUN git clone -b tor-0.4.5.7 --depth 1 https://git.torproject.org/tor.git && \ --enable-static-tor \ --with-libevent-dir=/usr/local/libevent \ --with-openssl-dir=/usr/local/openssl \ - --with-zlib-dir=/usr/x86_64-w64-mingw32 \ + --with-zlib-dir=/depends/x86_64-w64-mingw32 \ --disable-tool-name-check \ --enable-fatal-warnings \ --prefix=/usr/local/tor \ @@ -174,7 +174,7 @@ RUN git clone -b tor-0.4.5.7 --depth 1 https://git.torproject.org/tor.git && \ rm -rf $(pwd) && \ strip -s -D /usr/local/tor/bin/tor.exe -RUN git clone https://git.featherwallet.org/feather/monero-seed.git && \ +RUN git clone https://git.wownero.com/wowlet/monero-seed.git && \ cd monero-seed && \ git reset --hard 4674ef09b6faa6fe602ab5ae0b9ca8e1fd7d5e1b && \ cmake -DCMAKE_INSTALL_PREFIX=/depends/x86_64-w64-mingw32 \ @@ -183,3 +183,4 @@ RUN git clone https://git.featherwallet.org/feather/monero-seed.git && \ make -Cbuild -j$THREADS && \ make -Cbuild install && \ rm -rf $(pwd) + diff --git a/Makefile b/Makefile index e97dc97..110955b 100644 --- a/Makefile +++ b/Makefile @@ -52,7 +52,12 @@ release-static: depends: mkdir -p build/$(target)/release - cd build/$(target)/release && cmake -D STATIC=ON -DREPRODUCIBLE=$(or ${SOURCE_DATE_EPOCH},OFF) -DTOR_VERSION=$(or ${TOR_VERSION}, OFF) -DOPENVR=ON -DQML=ON -DTOR_BIN=$(or ${TOR_BIN},OFF) -D DEV_MODE=$(or ${DEV_MODE},OFF) -D BUILD_TAG=$(tag) -D CMAKE_BUILD_TYPE=Debug -D CMAKE_TOOLCHAIN_FILE=$(root)/$(target)/share/toolchain.cmake ../../.. && $(MAKE) + cd build/$(target)/release && cmake -D STATIC=ON -DREPRODUCIBLE=$(or ${SOURCE_DATE_EPOCH},OFF) -DTOR_VERSION=$(or ${TOR_VERSION}, OFF) -DTOR_BIN=$(or ${TOR_BIN},OFF) -D DEV_MODE=$(or ${DEV_MODE},OFF) -D BUILD_TAG=$(tag) -D CMAKE_BUILD_TYPE=Release -D CMAKE_TOOLCHAIN_FILE=$(root)/$(target)/share/toolchain.cmake ../../.. && $(MAKE) + +windows: + mkdir -p build/$(target)/release + cd build/$(target)/release && cmake -D STATIC=ON -DREPRODUCIBLE=$(or ${SOURCE_DATE_EPOCH},OFF) -DTOR_VERSION=$(or ${TOR_VERSION}, OFF) -DOPENVR=ON -DQML=ON -DWITH_SCANNER=ON -DTOR_BIN=$(or ${TOR_BIN},OFF) -D DEV_MODE=$(or ${DEV_MODE},OFF) -D BUILD_TAG=$(tag) -D CMAKE_BUILD_TYPE=Debug -D CMAKE_TOOLCHAIN_FILE=$(root)/$(target)/share/toolchain.cmake ../../.. && $(MAKE) + windows-mxe-release: CMAKEFLAGS += -DBUILD_TAG="win-x64" windows-mxe-release: CMAKEFLAGS += -DTOR_BIN=$(or ${TOR_BIN},OFF) diff --git a/contrib/openvr/CMakeLists.txt b/contrib/openvr/CMakeLists.txt index 8956cda..4991ee5 100755 --- a/contrib/openvr/CMakeLists.txt +++ b/contrib/openvr/CMakeLists.txt @@ -1,6 +1,3 @@ -# Set the minimum required version of CMake for this project. -cmake_minimum_required(VERSION 2.8) - # Set project name. project(OpenVRSDK) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 67e3129..17fe93c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,6 +5,10 @@ set(CMAKE_AUTOUIC ON) # pthread find_package(Threads REQUIRED) +# PNG +find_package(ZLIB REQUIRED) +find_package(PNG REQUIRED) + # Compile these source files (.h/.cpp) file(GLOB SOURCE_FILES "*.h" @@ -34,9 +38,9 @@ file(GLOB SOURCE_FILES ) if(QML) - find_package(Qt5 REQUIRED COMPONENTS Core Widgets Gui Network Svg Xml WebSockets Quick Qml QuickControls2 QmlImportScanner) + find_package(Qt5 REQUIRED COMPONENTS Core Widgets Gui Network Svg Xml WebSockets Quick Qml QuickControls2 QmlImportScanner Multimedia) else() - find_package(Qt5 REQUIRED COMPONENTS Core Widgets Gui Network Svg Xml WebSockets) + find_package(Qt5 REQUIRED COMPONENTS Core Widgets Gui Network Svg Xml WebSockets Multimedia) endif() if(OPENVR) @@ -57,6 +61,7 @@ add_subdirectory(libwalletqt) add_subdirectory(model) add_subdirectory(utils) add_subdirectory(openpgp) +add_subdirectory(QR-Code-scanner) qt5_add_resources(RESOURCES assets.qrc) @@ -256,7 +261,22 @@ target_link_libraries(wowlet PUBLIC ${ICU_LIBRARIES} openpgp Threads::Threads - ${QRENCODE_LIBRARY}) + ${QRENCODE_LIBRARY} + qrdecoder + ) + +# Link scanner +if(WITH_SCANNER) + target_link_libraries(wowlet PUBLIC qrscanner) + if(LINUX AND NOT ANDROID) + target_link_libraries(wowlet PUBLIC + jpeg + v4l2 + v4lconvert + rt + ) + endif() +endif() # Link OpenVR if(OPENVR) diff --git a/src/QR-Code-scanner/CMakeLists.txt b/src/QR-Code-scanner/CMakeLists.txt new file mode 100644 index 0000000..110e543 --- /dev/null +++ b/src/QR-Code-scanner/CMakeLists.txt @@ -0,0 +1,22 @@ +add_library(qrdecoder STATIC + Decoder.cpp +) +target_link_libraries(qrdecoder + PUBLIC + Qt5::Gui + PNG::PNG + PRIVATE + quirc +) + +if(WITH_SCANNER) + add_library(qrscanner + QrCodeScanner.cpp + QrScanThread.cpp + ) + target_link_libraries(qrscanner + PUBLIC + Qt5::Multimedia + qrdecoder + ) +endif() diff --git a/src/QR-Code-scanner/Decoder.cpp b/src/QR-Code-scanner/Decoder.cpp new file mode 100644 index 0000000..44f6d9a --- /dev/null +++ b/src/QR-Code-scanner/Decoder.cpp @@ -0,0 +1,359 @@ +// Copyright (c) 2020, The Monero Project +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#include +#include +#include +#include +#include +#include "Decoder.h" +#include "quirc.h" + + +QrDecoder::QrDecoder() + : m_qr(quirc_new()) +{ + if (m_qr == nullptr) + { + throw std::runtime_error("QUIRC: failed to allocate memory"); + } +} + +QrDecoder::~QrDecoder() +{ + quirc_destroy(m_qr); +} + +std::vector QrDecoder::decode(const QImage &image) +{ + if (image.format() == QImage::Format_Grayscale8) + { + return decodeGrayscale8(image); + } + return decodeGrayscale8(image.convertToFormat(QImage::Format_Grayscale8)); +} + +std::vector QrDecoder::decodePNG(QString pngPath) { + struct quirc *q; + std::vector result; + auto pngPathStd = pngPath.toStdString(); + auto pngPathCstr = pngPathStd.c_str(); + + q = quirc_new(); + if (!q) { + qWarning() << "can't create quirc object"; + return result; + } + + int status = -1; + if (check_if_png(pngPathCstr)) { + status = load_png(q, pngPathCstr); + } else { + qWarning() << QString("Image is not a PNG: %1").arg(pngPath); + return result; + } + if (status < 0) { + quirc_destroy(q); + return result; + } + + quirc_end(q); + auto count = quirc_count(q); + result.reserve(static_cast(count)); + + for (int index = 0; index < count; ++index) + { + quirc_code code; + quirc_extract(q, index, &code); + + quirc_data data; + const quirc_decode_error_t err = quirc_decode(&code, &data); + if (err == QUIRC_SUCCESS) + { + result.emplace_back(&data.payload[0], &data.payload[data.payload_len]); + } + } + + quirc_destroy(q); + return result; +} + +// I can't seem to get this function to work, we'll use dgbutil.h instead +std::vector QrDecoder::decodeGrayscale8(const QImage &image) +{ + if (quirc_resize(m_qr, image.width(), image.height()) < 0) + { + throw std::runtime_error("QUIRC: failed to allocate video memory"); + } + + uint8_t *rawImage = quirc_begin(m_qr, nullptr, nullptr); + if (rawImage == nullptr) + { + throw std::runtime_error("QUIRC: failed to get image buffer"); + } +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) + std::copy(image.constBits(), image.constBits() + image.sizeInBytes(), rawImage); +#else + std::copy(image.constBits(), image.constBits() + image.byteCount(), rawImage); +#endif + quirc_end(m_qr); + + const int count = quirc_count(m_qr); + if (count < 0) + { + throw std::runtime_error("QUIRC: failed to get the number of recognized QR-codes"); + } + + std::vector result; + result.reserve(static_cast(count)); + for (int index = 0; index < count; ++index) + { + quirc_code code; + quirc_extract(m_qr, index, &code); + + quirc_data data; + const quirc_decode_error_t err = quirc_decode(&code, &data); + if (err == QUIRC_SUCCESS) + { + result.emplace_back(&data.payload[0], &data.payload[data.payload_len]); + } + } + + return result; +} + +/* quirc -- QR-code recognition library + * Copyright (C) 2010-2012 Daniel Beer + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +static const char *data_type_str(int dt) +{ + switch (dt) { + case QUIRC_DATA_TYPE_NUMERIC: return "NUMERIC"; + case QUIRC_DATA_TYPE_ALPHA: return "ALPHA"; + case QUIRC_DATA_TYPE_BYTE: return "BYTE"; + case QUIRC_DATA_TYPE_KANJI: return "KANJI"; + } + + return "unknown"; +} + +void QrDecoder::dump_data(const struct quirc_data *data) +{ + printf(" Version: %d\n", data->version); + printf(" ECC level: %c\n", "MLHQ"[data->ecc_level]); + printf(" Mask: %d\n", data->mask); + printf(" Data type: %d (%s)\n", + data->data_type, data_type_str(data->data_type)); + printf(" Length: %d\n", data->payload_len); + printf(" Payload: %s\n", data->payload); + + if (data->eci) + printf(" ECI: %d\n", data->eci); +} + +void QrDecoder::dump_cells(const struct quirc_code *code) +{ + int u, v; + + printf(" %d cells, corners:", code->size); + for (u = 0; u < 4; u++) + printf(" (%d,%d)", code->corners[u].x, + code->corners[u].y); + printf("\n"); + + for (v = 0; v < code->size; v++) { + printf(" "); + for (u = 0; u < code->size; u++) { + int p = v * code->size + u; + + if (code->cell_bitmap[p >> 3] & (1 << (p & 7))) + printf("[]"); + else + printf(" "); + } + printf("\n"); + } +} + +/* hacked from https://dev.w3.org/Amaya/libpng/example.c + * + * Check if a file is a PNG image using png_sig_cmp(). Returns 1 if the given + * file is a PNG and 0 otherwise. + */ +#define PNG_BYTES_TO_CHECK 4 +int QrDecoder::check_if_png(const char *filename) +{ + int ret = 0; + FILE *infile = NULL; + unsigned char buf[PNG_BYTES_TO_CHECK]; + + /* Open the prospective PNG file. */ + if ((infile = fopen(filename, "rb")) == NULL) + goto out; + + /* Read in some of the signature bytes */ + if (fread(buf, 1, PNG_BYTES_TO_CHECK, infile) != PNG_BYTES_TO_CHECK) + goto out; + + /* + * Compare the first PNG_BYTES_TO_CHECK bytes of the signature. + * png_sig_cmp() returns zero if the image is a PNG and nonzero if it + * isn't a PNG. + */ + if (png_sig_cmp(buf, (png_size_t)0, PNG_BYTES_TO_CHECK) == 0) + ret = 1; + + /* FALLTHROUGH */ + out: + if (infile) + fclose(infile); + return (ret); +} + +int QrDecoder::load_png(struct quirc *q, const char *filename) +{ + int width, height, rowbytes, interlace_type, number_passes = 1; + png_uint_32 trns; + png_byte color_type, bit_depth; + png_structp png_ptr = NULL; + png_infop info_ptr = NULL; + FILE *infile = NULL; + uint8_t *image; + int ret = -1; + int pass; + + if ((infile = fopen(filename, "rb")) == NULL) + goto out; + + png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (!png_ptr) + goto out; + + info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) + goto out; + + if (setjmp(png_jmpbuf(png_ptr))) + goto out; + + png_init_io(png_ptr, infile); + + png_read_info(png_ptr, info_ptr); + + color_type = png_get_color_type(png_ptr, info_ptr); + bit_depth = png_get_bit_depth(png_ptr, info_ptr); + interlace_type = png_get_interlace_type(png_ptr, info_ptr); + + // Read any color_type into 8bit depth, Grayscale format. + // See http://www.libpng.org/pub/png/libpng-manual.txt + + // PNG_COLOR_TYPE_GRAY_ALPHA is always 8 or 16bit depth. + if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) + png_set_expand_gray_1_2_4_to_8(png_ptr); + + if ((trns = png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))) + png_set_tRNS_to_alpha(png_ptr); + + if (bit_depth == 16) +#if PNG_LIBPNG_VER >= 10504 + png_set_scale_16(png_ptr); +#else + png_set_strip_16(png_ptr); +#endif + + if ((trns) || color_type & PNG_COLOR_MASK_ALPHA) + png_set_strip_alpha(png_ptr); + + if (color_type == PNG_COLOR_TYPE_PALETTE) + png_set_palette_to_rgb(png_ptr); + + if (color_type == PNG_COLOR_TYPE_PALETTE || + color_type == PNG_COLOR_TYPE_RGB || + color_type == PNG_COLOR_TYPE_RGB_ALPHA) { + png_set_rgb_to_gray_fixed(png_ptr, 1, -1, -1); + } + + if (interlace_type != PNG_INTERLACE_NONE) + number_passes = png_set_interlace_handling(png_ptr); + + png_read_update_info(png_ptr, info_ptr); + + width = png_get_image_width(png_ptr, info_ptr); + height = png_get_image_height(png_ptr, info_ptr); + rowbytes = png_get_rowbytes(png_ptr, info_ptr); + if (rowbytes != width) { + fprintf(stderr, + "load_png: expected rowbytes to be %u but got %u\n", + width, rowbytes); + goto out; + } + + if (quirc_resize(q, width, height) < 0) + goto out; + + image = quirc_begin(q, NULL, NULL); + + for (pass = 0; pass < number_passes; pass++) { + int y; + + for (y = 0; y < height; y++) { + png_bytep row_pointer = image + y * width; + png_read_rows(png_ptr, &row_pointer, NULL, 1); + } + } + + png_read_end(png_ptr, info_ptr); + + ret = 0; + /* FALLTHROUGH */ + out: + /* cleanup */ + if (png_ptr) { + if (info_ptr) + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); + else + png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); + } + if (infile) + fclose(infile); + return (ret); +} diff --git a/src/QR-Code-scanner/Decoder.h b/src/QR-Code-scanner/Decoder.h new file mode 100644 index 0000000..665fdfd --- /dev/null +++ b/src/QR-Code-scanner/Decoder.h @@ -0,0 +1,72 @@ +// Copyright (c) 2020, The Monero Project +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include + +#include + +struct quirc; + +class QrDecoder +{ +public: + QrDecoder(const QrDecoder &) = delete; + QrDecoder &operator=(const QrDecoder &) = delete; + + QrDecoder(); + ~QrDecoder(); + + std::vector decode(const QImage &image); + std::vector decodePNG(QString pngPath); + +private: + /* Dump decoded information on stdout. */ + void dump_data(const struct quirc_data *data); + + /* Dump a grid cell map on stdout. */ + void dump_cells(const struct quirc_code *code); + + /* Check if a file is a PNG image. + * + * returns 1 if the given file is a PNG and 0 otherwise. + */ + int check_if_png(const char *filename); + + /* Read a PNG image into the decoder. + * + * Note that you must call quirc_end() if the function returns + * successfully (0). + */ + int load_png(struct quirc *q, const char *filename); + +private: + std::vector decodeGrayscale8(const QImage &image); + +private: + quirc *m_qr; +}; diff --git a/src/QR-Code-scanner/QrCodeScanner.cpp b/src/QR-Code-scanner/QrCodeScanner.cpp new file mode 100644 index 0000000..2e8bde9 --- /dev/null +++ b/src/QR-Code-scanner/QrCodeScanner.cpp @@ -0,0 +1,92 @@ +// Copyright (c) 2014-2019, The Monero Project +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "QrCodeScanner.h" +#include +#include + +QrCodeScanner::QrCodeScanner(QObject *parent) + : QObject(parent) + , m_processTimerId(-1) + , m_processInterval(750) + , m_enabled(true) +{ + m_probe = new QVideoProbe(this); + m_thread = new QrScanThread(this); + m_thread->start(); + QObject::connect(m_thread, SIGNAL(decoded(QString)), this, SIGNAL(decoded(QString))); + QObject::connect(m_thread, SIGNAL(notifyError(const QString &, bool)), this, SIGNAL(notifyError(const QString &, bool))); + connect(m_probe, SIGNAL(videoFrameProbed(QVideoFrame)), this, SLOT(processFrame(QVideoFrame))); +} +void QrCodeScanner::setSource(QCamera *camera) +{ + m_probe->setSource(camera); +} +void QrCodeScanner::processFrame(QVideoFrame frame) +{ + if(frame.isValid()){ + m_curFrame = frame; + } +} +bool QrCodeScanner::enabled() const +{ + return m_enabled; +} +void QrCodeScanner::setEnabled(bool enabled) +{ + m_enabled = enabled; + if(!enabled && (m_processTimerId != -1) ) + { + this->killTimer(m_processTimerId); + m_processTimerId = -1; + } + else if (enabled && (m_processTimerId == -1) ) + { + m_processTimerId = this->startTimer(m_processInterval); + } + emit enabledChanged(); +} +void QrCodeScanner::timerEvent(QTimerEvent *event) +{ + if( (event->timerId() == m_processTimerId) ){ + m_thread->addFrame(m_curFrame); + } +} + +QrCodeScanner::~QrCodeScanner() +{ + m_thread->stop(); + m_thread->quit(); + if(!m_thread->wait(5000)) + { + m_thread->terminate(); + m_thread->wait(); + } + +} + diff --git a/src/QR-Code-scanner/QrCodeScanner.h b/src/QR-Code-scanner/QrCodeScanner.h new file mode 100644 index 0000000..10cf776 --- /dev/null +++ b/src/QR-Code-scanner/QrCodeScanner.h @@ -0,0 +1,73 @@ +// Copyright (c) 2014-2019, The Monero Project +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef QRCODESCANNER_H_ +#define QRCODESCANNER_H_ + +#include +#include +#include "QrScanThread.h" + +class QVideoProbe; +class QCamera; + +class QrCodeScanner : public QObject +{ + Q_OBJECT + + Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged) + +public: + QrCodeScanner(QObject *parent = Q_NULLPTR); + ~QrCodeScanner(); + void setSource(QCamera*); + + bool enabled() const; + void setEnabled(bool enabled); + +public Q_SLOTS: + void processFrame(QVideoFrame); + +Q_SIGNALS: + void enabledChanged(); + + void decoded(const QString &data); + void notifyError(const QString &error, bool warning = false); + +protected: + void timerEvent(QTimerEvent *); + QrScanThread *m_thread; + int m_processTimerId; + int m_processInterval; + int m_enabled; + QVideoFrame m_curFrame; + QVideoProbe *m_probe; +}; + +#endif + diff --git a/src/QR-Code-scanner/QrScanThread.cpp b/src/QR-Code-scanner/QrScanThread.cpp new file mode 100644 index 0000000..6421321 --- /dev/null +++ b/src/QR-Code-scanner/QrScanThread.cpp @@ -0,0 +1,90 @@ +// Copyright (c) 2014-2019, The Monero Project +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "QrScanThread.h" +#include +#include + +#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) +extern QImage qt_imageFromVideoFrame(const QVideoFrame &f); +#endif + +QrScanThread::QrScanThread(QObject *parent) + : QThread(parent) + ,m_running(true) +{ +} + +void QrScanThread::processQImage(const QImage &qimg) +{ + try { + for (const std::string &code : m_decoder.decode(qimg)) + { + emit decoded(QString::fromStdString(code)); + } + } + catch(std::exception &e) { + qDebug() << "ERROR: " << e.what(); + emit notifyError(e.what()); + } +} + +void QrScanThread::processVideoFrame(const QVideoFrame &frame) +{ +#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) + processQImage( qt_imageFromVideoFrame(frame) ); +#else + processQImage(frame.image()); +#endif +} + +void QrScanThread::stop() +{ + m_running = false; + m_waitCondition.wakeOne(); +} + +void QrScanThread::addFrame(const QVideoFrame &frame) +{ + QMutexLocker locker(&m_mutex); + m_queue.append(frame); + m_waitCondition.wakeOne(); +} + +void QrScanThread::run() +{ + QVideoFrame frame; + while(m_running) { + QMutexLocker locker(&m_mutex); + while(m_queue.isEmpty() && m_running) + m_waitCondition.wait(&m_mutex); + if(!m_queue.isEmpty()) + processVideoFrame(m_queue.takeFirst()); + } +} + diff --git a/src/QR-Code-scanner/QrScanThread.h b/src/QR-Code-scanner/QrScanThread.h new file mode 100644 index 0000000..7dfffc5 --- /dev/null +++ b/src/QR-Code-scanner/QrScanThread.h @@ -0,0 +1,66 @@ +// Copyright (c) 2014-2019, The Monero Project +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef _QRSCANTHREAD_H_ +#define _QRSCANTHREAD_H_ + +#include +#include +#include +#include +#include +#include + +#include "Decoder.h" + +class QrScanThread : public QThread +{ + Q_OBJECT + +public: + QrScanThread(QObject *parent = Q_NULLPTR); + void addFrame(const QVideoFrame &frame); + virtual void stop(); + +Q_SIGNALS: + void decoded(const QString &data); + void notifyError(const QString &error, bool warning = false); + +protected: + virtual void run(); + void processVideoFrame(const QVideoFrame &); + void processQImage(const QImage &); + +private: + QrDecoder m_decoder; + bool m_running; + QMutex m_mutex; + QWaitCondition m_waitCondition; + QList m_queue; +}; +#endif diff --git a/src/appcontext.cpp b/src/appcontext.cpp index ff63609..1a01197 100644 --- a/src/appcontext.cpp +++ b/src/appcontext.cpp @@ -89,8 +89,9 @@ AppContext::AppContext(QCommandLineParser *cmdargs) { if(!this->configDirectory.endsWith('/')) this->configDirectory = QString("%1/").arg(this->configDirectory); #endif + this->configDirectoryVR = QString("%1%2").arg(this->configDirectory, "vr"); - // Config + // Create some directories createConfigDirectory(this->configDirectory); // if(this->cmdargs->isSet("stagenet")) @@ -545,8 +546,8 @@ void AppContext::onWSCCS(const QJsonArray &ccs_data) { } void AppContext::createConfigDirectory(const QString &dir) { - QString config_dir_tor = QString("%1%2").arg(dir).arg("tor"); - QString config_dir_tordata = QString("%1%2").arg(dir).arg("tor/data"); + auto config_dir_tor = QString("%1%2").arg(dir).arg("tor"); + auto config_dir_tordata = QString("%1%2").arg(dir).arg("tor/data"); QStringList createDirs({dir, config_dir_tor, config_dir_tordata}); for(const auto &d: createDirs) { @@ -556,6 +557,13 @@ void AppContext::createConfigDirectory(const QString &dir) { throw std::runtime_error("Could not create directory " + d.toStdString()); } } + + auto config_dir_vr = QString("%1%2").arg(dir, "vr"); + if(!Utils::dirExists(config_dir_vr)) { + qDebug() << QString("Creating directory: %1").arg(config_dir_vr); + if (!QDir().mkpath(config_dir_vr)) + throw std::runtime_error("Could not create directory " + config_dir_vr.toStdString()); + } } void AppContext::createWalletWithoutSpecifyingSeed(const QString &name, const QString &password) { diff --git a/src/appcontext.h b/src/appcontext.h index dcca7e9..1372d10 100644 --- a/src/appcontext.h +++ b/src/appcontext.h @@ -54,6 +54,7 @@ public: QString accountName; QString configRoot; QString configDirectory; + QString configDirectoryVR; QString defaultWalletDir; QString defaultWalletDirRoot; QString tmpTxDescription; diff --git a/src/utils/config.cpp b/src/utils/config.cpp index 4868860..432ce69 100644 --- a/src/utils/config.cpp +++ b/src/utils/config.cpp @@ -26,6 +26,7 @@ static const QHash configStrings = { {Config::donateBeg,{QS("donateBeg"), 1}}, {Config::skin,{QS("skin"), "light"}}, {Config::openVRSkin,{QS("openVRSkin"), "default"}}, + {Config::openVRStreamerMode,{QS("openVRStreamerMode"), false}}, {Config::preferredFiatCurrency,{QS("preferredFiatCurrency"), "USD"}}, {Config::blockExplorer,{QS("blockExplorer"), "explore.wownero.com"}}, {Config::walletDirectory,{QS("walletDirectory"), ""}}, diff --git a/src/utils/config.h b/src/utils/config.h index b49155a..389f047 100644 --- a/src/utils/config.h +++ b/src/utils/config.h @@ -29,6 +29,7 @@ public: autoOpenWalletPath, skin, openVRSkin, + openVRStreamerMode, preferredFiatCurrency, blockExplorer, walletDirectory, diff --git a/src/utils/utils.cpp b/src/utils/utils.cpp index eef71b9..c62cd84 100644 --- a/src/utils/utils.cpp +++ b/src/utils/utils.cpp @@ -42,6 +42,12 @@ QByteArray Utils::fileOpen(const QString &path) { return data; } +qint64 Utils::fileModifiedAge(const QString &path) { + QFileInfo fileInfo; + fileInfo.setFile(path); + return (QDateTime::currentSecsSinceEpoch() - fileInfo.lastModified().toSecsSinceEpoch()); +} + QByteArray Utils::fileOpenQRC(const QString &path) { QFile file(path); if(!file.open(QIODevice::ReadOnly)) { diff --git a/src/utils/utils.h b/src/utils/utils.h index 5436a4d..9cee19f 100644 --- a/src/utils/utils.h +++ b/src/utils/utils.h @@ -46,6 +46,7 @@ public: static bool fileExists(const QString &path); static QByteArray fileOpen(const QString &path); static QByteArray fileOpenQRC(const QString &path); + static qint64 fileModifiedAge(const QString &path); static void desktopNotify(const QString &title, const QString &message, int duration); static bool fileWrite(const QString &path, const QString &data); static QStringList fileFind(const QRegExp &pattern, const QString &baseDir, int level, int depth, int maxPerDir); diff --git a/src/vr/main.cpp b/src/vr/main.cpp index cd1bf40..da2bce8 100644 --- a/src/vr/main.cpp +++ b/src/vr/main.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -42,9 +43,15 @@ namespace wowletvr { // turn on auto tx commits ctx->autoCommitTx = true; - // write icon to disk so openvr overlay can refer to it + // QR code scanning from screenshots + m_qrScreenshotPreviewPath = ctx->configDirectoryVR + "/screenshot_preview"; + m_qrScreenshotImagePath = ctx->configDirectoryVR + "/screenshot"; + m_qrScreenshotTimer.setSingleShot(true); + connect(&m_qrScreenshotTimer, &QTimer::timeout, this, &WowletVR::onCheckQRScreenshot); + + // write icon to disk so openvr overlay can use it auto icon = ":/assets/images/wowlet.png"; - if (Utils::fileExists(icon)) { + if(Utils::fileExists(icon)) { QFile f(icon); QFileInfo fileInfo(f); auto icon_path = QDir(ctx->configDirectory).filePath(fileInfo.fileName()); @@ -140,10 +147,79 @@ namespace wowletvr { themes[themeName] = map; } - }; + } + + void WowletVR::takeQRScreenshot() { + if(m_qrScreenshotTimer.isActive()) + return; + + m_controller->takeQRScreenshot(m_qrScreenshotPreviewPath, m_qrScreenshotImagePath); + m_qrScreenshotTimer.start(1000); + } + + void WowletVR::onCheckQRScreenshot() { + qDebug() << "onCheckQRScreenshot()"; + QString msg; + auto path = m_qrScreenshotPreviewPath + ".png"; + auto pathPreview = m_qrScreenshotPreviewPath + "_inverted.png"; + + qDebug() << "path: " + path << " inverted: " + pathPreview; + + if(!Utils::fileExists(path)) { + msg = "Screenshot was not saved to disk."; + qWarning() << msg; + emit qrScreenshotFailed(msg); + return; + } + auto age = Utils::fileModifiedAge(path); + if (age >= 5) { + msg = "Screenshot on disk too old. Leftover from the last time?"; + qWarning() << msg; + emit qrScreenshotFailed(msg); + QFile file (path); + file.remove(); + return; + } + + auto results = m_qrDecoder.decodePNG(path); + auto result = wowletvr::WowletVR::checkQRScreenshotResults(results); + qDebug() << "no initial results"; + if(result.isEmpty()) { + qDebug() << "trying to invert the image"; + // lets try to invert the image + QImage image(path); + image.invertPixels(); + image.save(pathPreview); + results = m_qrDecoder.decodePNG(pathPreview); + result = wowletvr::WowletVR::checkQRScreenshotResults(results); + if(!result.isEmpty()) { + qDebug() << "Found QR code after inverting the image."; + emit qrScreenshotSuccess(result); + QFile file (path); + file.remove(); + return; + } + } else { + qDebug() << "QR code found."; + emit qrScreenshotSuccess(result); + QFile file (path); + file.remove(); + return; + } + + emit qrScreenshotSuccess("No QR code could be detected."); + } + + QString WowletVR::checkQRScreenshotResults(std::vector results) { + auto results_count = results.size(); + if(results_count == 1) + return QString::fromStdString(results[0]); + return ""; + } WowletVR::~WowletVR() { // bla + int wegeg = 1; } -} \ No newline at end of file +} diff --git a/src/vr/main.h b/src/vr/main.h index aa13882..6d7a28e 100644 --- a/src/vr/main.h +++ b/src/vr/main.h @@ -10,11 +10,13 @@ #include #include #include +#include #include #include "overlaycontroller.h" #include "appcontext.h" #include "utils/config.h" +#include "QR-Code-scanner/Decoder.h" namespace wowletvr { @@ -57,6 +59,14 @@ namespace wowletvr { m_pClipboard->setText(text, QClipboard::Selection); } + Q_INVOKABLE void setStreamerMode(bool status) { + config()->set(Config::openVRStreamerMode, status); + } + + Q_INVOKABLE bool getStreamerMode() { + return config()->get(Config::openVRStreamerMode).toBool(); + } + Q_INVOKABLE QString preferredFiat() { return config()->get(Config::preferredFiatCurrency).toString(); } @@ -78,14 +88,31 @@ namespace wowletvr { return QString("~%1").arg(QString::number(conversionAmount, 'f', 2)); } + Q_INVOKABLE void takeQRScreenshot(); + + signals: + void qrScreenshotFailed(QString error); + void qrScreenshotSuccess(QString address); + + private slots: + void onCheckQRScreenshot(); + private: AppContext *ctx; - QCommandLineParser *m_parser; QQmlEngine m_engine; QQmlComponent *m_component; - bool desktopMode = false; wowletvr::OverlayController *m_controller; + + bool desktopMode = false; + QString m_qrScreenshotPreviewPath; + QString m_qrScreenshotImagePath; + + QCommandLineParser *m_parser; QClipboard *m_pClipboard; + QTimer m_qrScreenshotTimer; + QrDecoder m_qrDecoder; + + static QString checkQRScreenshotResults(std::vector results); }; } diff --git a/src/vr/main.qml b/src/vr/main.qml index 61472db..64a0470 100644 --- a/src/vr/main.qml +++ b/src/vr/main.qml @@ -24,6 +24,7 @@ Rectangle { property var themes: {} property string theme: "default" property string fiatSymbol: "USD" + property bool streamerMode: false signal initTheme(); // Components that have been dynamically created need to redraw @@ -307,6 +308,7 @@ Rectangle { // Start animating the background gradientBackgroundTimer.start(); + // init some theme stuff try { appWindow.themes = WowletVR.getThemes(); appWindow.theme = WowletVR.getCurrentTheme(); @@ -329,9 +331,13 @@ Rectangle { } } } - appWindow.changeTheme(appWindow.theme); appWindow.initTheme(); + + // streamer mode enabled? + try { + appWindow.streamerMode = WowletVR.getStreamerMode(); + } catch(err){} } function changeTheme(theme) { diff --git a/src/vr/main2.qml b/src/vr/main2.qml new file mode 100644 index 0000000..6d605cc --- /dev/null +++ b/src/vr/main2.qml @@ -0,0 +1,85 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.2 +import QtGraphicalEffects 1.0 +import QtQuick.Window 2.0 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Dialogs 1.2 + +import "." +import "mock/Windows.js" as Windows +import "mock/Version.js" as Version +import "mock/NetworkType.js" as NetworkType +import "mock/Settings.js" as Settings +import "mock" +import "qml/common" + +import "qml/." + + +Rectangle { + width: 1600 + height: 800 + color: "red" + + property var currentWallet; + property bool disconnected: currentWallet ? currentWallet.disconnected : false + + property WalletDashboard WalletDashboard: WalletDashboard { + stackView: walletView + } + + property SendPage sendPage: SendPage { + stackView: walletView + visible: false + } + + property ReceivePage receivePage: ReceivePage { + stackView: walletView + visible: false + } + + StackView { + id: walletView + anchors.fill: parent + + pushEnter: Transition { + PropertyAnimation { + property: "x" + from: walletView.width + to: 0 + duration: 300 + easing.type: Easing.OutCubic + } + } + pushExit: Transition { + PropertyAnimation { + property: "x" + from: 0 + to: -walletView.width + duration: 300 + easing.type: Easing.OutCubic + } + } + popEnter: Transition { + PropertyAnimation { + property: "x" + from: -walletView.width + to: 0 + duration: 300 + easing.type: Easing.OutCubic + } + } + popExit: Transition { + PropertyAnimation { + property: "x" + from: 0 + to: walletView.width + duration: 300 + easing.type: Easing.OutCubic + } + } + + initialItem: WalletDashboard + } +} diff --git a/src/vr/overlaycontroller.cpp b/src/vr/overlaycontroller.cpp index 166e137..675aadf 100755 --- a/src/vr/overlaycontroller.cpp +++ b/src/vr/overlaycontroller.cpp @@ -459,4 +459,16 @@ const vr::VROverlayHandle_t& OverlayController::overlayThumbnailHandle() { return m_ulOverlayThumbnailHandle; } +void OverlayController::takeQRScreenshot(const QString &previewPath, const QString &imagePath) { + vr::IVRScreenshots *screen_taker = vr::VRScreenshots(); + + vr::ScreenshotHandle_t taker_handle; + screen_taker->RequestScreenshot(&taker_handle, + vr::EVRScreenshotType::VRScreenshotType_Mono, + previewPath.toStdString().c_str(), + imagePath.toStdString().c_str() + ); +} + + } // namespace wowletvr diff --git a/src/vr/overlaycontroller.h b/src/vr/overlaycontroller.h index 6ca0dc5..2d721c8 100755 --- a/src/vr/overlaycontroller.h +++ b/src/vr/overlaycontroller.h @@ -28,7 +28,6 @@ #include "openvr_init.h" #include "vr/utils/paths.h" -#include "appcontext.h" namespace application_strings { @@ -59,6 +58,7 @@ public: void Shutdown(); Q_INVOKABLE void exitApp(); + void takeQRScreenshot(const QString &previewPath, const QString &imagePath); bool isDashboardVisible() { @@ -117,8 +117,6 @@ private: bool m_keyPressOneState = false; bool m_keyPressTwoState = false; - AppContext *m_ctx; - public slots: void renderOverlay(); void OnRenderRequest(); diff --git a/src/vr/qml.rcc b/src/vr/qml.rcc new file mode 100644 index 0000000000000000000000000000000000000000..4156b55b776de91f6b778498b2ba33c4e9cd9862 GIT binary patch literal 1475169 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 NWPml*tH + + + + + + diff --git a/src/vr/assets/img/main_menu_icons/bindings_tab_icon.svg b/src/vr/assets/img/main_menu_icons/bindings_tab_icon.svg new file mode 100755 index 0000000..4526825 --- /dev/null +++ b/src/vr/assets/img/main_menu_icons/bindings_tab_icon.svg @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/src/vr/assets/img/main_menu_icons/chaperone_tab_icon.svg b/src/vr/assets/img/main_menu_icons/chaperone_tab_icon.svg new file mode 100755 index 0000000..54c94c7 --- /dev/null +++ b/src/vr/assets/img/main_menu_icons/chaperone_tab_icon.svg @@ -0,0 +1,12 @@ + + + + + + + diff --git a/src/vr/assets/img/main_menu_icons/motion_tab_icon.svg b/src/vr/assets/img/main_menu_icons/motion_tab_icon.svg new file mode 100755 index 0000000..a5b2ca8 --- /dev/null +++ b/src/vr/assets/img/main_menu_icons/motion_tab_icon.svg @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/src/vr/assets/img/main_menu_icons/offsets_tab_icon.svg b/src/vr/assets/img/main_menu_icons/offsets_tab_icon.svg new file mode 100755 index 0000000..5c7d0d9 --- /dev/null +++ b/src/vr/assets/img/main_menu_icons/offsets_tab_icon.svg @@ -0,0 +1,13 @@ + + + + + + + diff --git a/src/vr/assets/img/main_menu_icons/rotation_tab_icon.svg b/src/vr/assets/img/main_menu_icons/rotation_tab_icon.svg new file mode 100755 index 0000000..0735790 --- /dev/null +++ b/src/vr/assets/img/main_menu_icons/rotation_tab_icon.svg @@ -0,0 +1,13 @@ + + + + + + + diff --git a/src/vr/assets/img/main_menu_icons/settings_tab_icon.svg b/src/vr/assets/img/main_menu_icons/settings_tab_icon.svg new file mode 100755 index 0000000..7079354 --- /dev/null +++ b/src/vr/assets/img/main_menu_icons/settings_tab_icon.svg @@ -0,0 +1,17 @@ + + + + + + + diff --git a/src/vr/assets/img/main_menu_icons/space_fix_tab_icon.svg b/src/vr/assets/img/main_menu_icons/space_fix_tab_icon.svg new file mode 100755 index 0000000..f9d375e --- /dev/null +++ b/src/vr/assets/img/main_menu_icons/space_fix_tab_icon.svg @@ -0,0 +1,12 @@ + + + + + + + diff --git a/src/vr/assets/img/main_menu_icons/statistics_tab_icon.svg b/src/vr/assets/img/main_menu_icons/statistics_tab_icon.svg new file mode 100755 index 0000000..d92e219 --- /dev/null +++ b/src/vr/assets/img/main_menu_icons/statistics_tab_icon.svg @@ -0,0 +1,13 @@ + + + + + + + diff --git a/src/vr/assets/img/main_menu_icons/steamvr_tab_icon.svg b/src/vr/assets/img/main_menu_icons/steamvr_tab_icon.svg new file mode 100755 index 0000000..11f8ead --- /dev/null +++ b/src/vr/assets/img/main_menu_icons/steamvr_tab_icon.svg @@ -0,0 +1,12 @@ + + + + + + + diff --git a/src/vr/assets/img/main_menu_icons/utilities_tab_icon.svg b/src/vr/assets/img/main_menu_icons/utilities_tab_icon.svg new file mode 100755 index 0000000..59e5480 --- /dev/null +++ b/src/vr/assets/img/main_menu_icons/utilities_tab_icon.svg @@ -0,0 +1,12 @@ + + + + + + + diff --git a/src/vr/assets/img/main_menu_icons/video_tab_icon.svg b/src/vr/assets/img/main_menu_icons/video_tab_icon.svg new file mode 100755 index 0000000..fcdccb5 --- /dev/null +++ b/src/vr/assets/img/main_menu_icons/video_tab_icon.svg @@ -0,0 +1,12 @@ + + + + + + + diff --git a/src/vr/assets/img/receive.svg b/src/vr/assets/img/receive.svg new file mode 100755 index 0000000..f5de763 --- /dev/null +++ b/src/vr/assets/img/receive.svg @@ -0,0 +1 @@ +Artboard 13 \ No newline at end of file diff --git a/src/vr/assets/img/rotation/autoturn.png b/src/vr/assets/img/rotation/autoturn.png new file mode 100755 index 0000000000000000000000000000000000000000..37bd8839a7066701ba807095e175041cf096085e GIT binary patch literal 4270 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 literal 0 HcmV?d00001 diff --git a/src/vr/assets/img/rotation/noautoturn.png b/src/vr/assets/img/rotation/noautoturn.png new file mode 100755 index 0000000000000000000000000000000000000000..b3a14ef817e88fad7365b23c53c2a7f7ff310949 GIT binary patch literal 13064 zcmXYY1yozj^EU2Qq*$=x8l2!zC=lG;-Cc`Q!Mzl>0tE_1i(67$3KR_<+=8?ew}0N> z_vM^>a_-IS&d%NJ?#w*T#A|CR6XMa}p`f4;f>jiCQBY8^|GRLokWb2L-c=&MF#KMF z^>L7&FdX|hrD zo_lOD^^Fun{*DB-op3`>Aa~SM25BaQ@xPr1W5kEN~h3?&`x@Q0#gSH0LG^ z-(G_xmPOA1)2qj!K4`shG4u>NmgN)rS=wV6;@M?V3bP}Ig?hoORqBm+#~ zT4U7uKBC#L(0_+lrp;`g^e>##DYxPCh?#`Q?TR5 z>(U&nSb^z!h6gw{e{cgu(%--BJzS0%h%?*tgS_#0CDO1#h_!-F~an+j$CsDF;Cmk>BGrI-Q!luzG{JS2>>|EN{}=ro6CMCd4T!(C_BF= zU^QHf$Aq*^Y)~zm&-?E1{GvG4CKf#gw41{)>Yrcp58ky zPcO8knGT_cElTh8kgG5iMqYWqjE)Yf*c!&7W!Ei4x5V3JerytK9wF}D7rwgAlE+9y zsAJ+1ifd$nIi5Xyq5%={ScVl1ROw8YDjOg^K4!6M4F-%hyp(m@2dU%G0QOrn|%W_s`zztCN$dzrMe}Wf}J@ zH$?O#k2SgHK6W_%+LPtRN{TL3Sp2&$TVHNePgSCd?7fP*TZnB58uu!N+=uAe)EK;Fl)@+vJtOuK?rEWbOVvmB!YM+Q zqCdF34b&XB^kr0Rw#1Hb1^r^lZ!>0&G}De;TQYSkc;E{JcW50-(=GD+8vMF}F~GFf)0Wk=DQx3tQr4=- z?N*1*<5-duaN>jp3dv1_&;6jE<}MQN=@xoE<7;Y!GGt^|SY!G)!=ZBA&>q|>{(yQQ zh7n$1!aX&GV2lNZ5&lbdc;Q0NP))Rh515X1?R1wK)2C{`RL%?9N2U!HwG?T(z+uOE zjS!5*$;16PHmSu@E%paEFVx6&xTjA`O@7;qyQRG!4bh27z|bceO-Vn?ve+h8Oe!gc z2SW2OxeS|Ke;rr@X%1K(?MRo2Wh7#B<_qRWr6|=61gx&_KVly#Pb=|ry?FJzW|82#rA1qz zzRD5#(j#RTXk^m5kLF_BDwp&_!%>B+!^UCP zwp<2@zCK$rY-lQlR-1P+Jd)yyQ<&5K8vLN-!xJg$#wL9O9}*QZ)9siIF;3B)=wC!HOxw0KTm^tEiYM4Dxgrd*1$6l<)?Cu|NJy|Iwi-w)8bo%PYCS`U#i6 zJ@J!Nhs$oPF1h8Clc$wb1M-32mxH`ES)py_>&hkkBnZaP_HnPmu00xXXa7>TZ~#)3 zAeN0Wi;=t_8YcJ~rGRd4YJ4i48M6xm`}OpvL3!_wTaxM*y(L|V_c-KyG2s}`mxgCa z>2)1@Wa6NO?_aryVm1?=3kIZEd7_jdvM~!W*xmD8GrEU}=K86Xv#%UPG22-M-kyo% zqLP>>P@G#D$4^=F&Rr*(6XP3S*@$A^QEXsUeypo^K%d1*06^uNP(#CT6tmpnYpY=a z97K)4#ZfH%aB^q*HekR(6d{|h{b~xv)*wXR+RNH-XGqkYqpW-fmz7cXZS59gzQ`fC z#I7Jh__dpR+H7~{+vuOekbMXfL?NBFruq;^irKsMnTZlP6Y}_QT+)&>7Y=NC(g!I| zWwbxG)^z-Ud?f+bw|27XjShH;Zvgfu>&lx+hicK1_RS8M2~_B>JBw+(R^?n==Ju{I zpV;Eq;~Q&6@f`%1IBA!8PjQFM>ubuw7@~KW4>`dz-BY)7)QY zx6_8mEb`(x0TW2U%I-SH>{_2qTa!9_4Y>Q$P`UJd(tf>e5k^g38N7`8sdM_}wQjCE z#vyOWE=9FPSJkoE2ZWTO1OvVnz@BXKfqe_RUA zaKy{cpb`4734f!%zXX_$TZTgYQ_=o>eGOS+OD;DPa>bne3jS`UY_aiCY|Cjg?wxyH zCrAIgdNOy4M6E0Mgb+REmI9QBkK3M+TIHzbmr2dc#j2mErM-WENA3~0EBkK?|A4$U zTQKj>*dOxVuipVF#xTjG@CMMJZFCFca%gG)!WO>U%&>&c2zGXg8U#LTSXkjJ0iH;F z?7A6G5 zK#ysg3zwtJ5+Y&9FjdLRH>znr_`-2)l2sB(SDeX9)D*%an{-~Pu1l1kwj;*3%k{yW z5;M7c{KAuBetu@URA-@i>03*8H5y554RaV(J!fhUW{lr1aCuGwI(ln36BWr4kgb1M z?oeyWdeY_f=@OyU@}OA&5&L@50ctHJ0D;);Cw912z9GTk1i-kcST3{mw;Mc+ziOra zEm=5@(PcFT@Fh0*R9NJWbdti(t;UhBk1*l*#)FZWg&HhG*P6)Nakb2Gy!ghKgGec( zKx$sx?{m||b)9 z-wew(-LX?QC1Bz&OqUI}YO4BG2uf_eugb`XsERAw#OY=3iXJs0-qNWMmm}jKU`d|p z{H|}P+Jzw1SfdejPp)A*Q38C`YKs?N-9Wruat8hGvp--ej#qa_TWpm%D&h_&@x0_>ncwwqZ38)Yh6)wv2@hl zP)>JqE|`Y6Al-;bM8tc9iQmJt_tYJHf5q=r^q7k;el1?t{wm@0(iB?fS*-muau)qP zD@NXD!>^RdMHxJ-dY4=tpRu0)qcfeRTi#Q5J$0&saDK1vIZIV_l^sDRE#Z{yOBP$9 zR+f-;-N(nJN{$o38LIg+R<72dmDVi*2i&D1p)f<3@m1wcV)(8v8Qp4V-#OIn?z(R( z#A4Zzw))GT>1@LEe31ED7jnWa1y-rKF1YZL0-p?q?K}8H`AXr{tQ;#8bcl7k7aaoWg{;Dz&KYiXXL8z_F26K zh-FNUR|i(^hZ2R+o=q1+W3~$x%S1igy=2vztiHG3IvV##Y&e-_R}xB{bWU^dpMwlX zxE^!1fq3i^Rw-4hL@%=Pg@)L&BNkjrxs85)Z*zP;Ys$zFaVtM*3wjKwCH)t0$1lZr z)BE6fc2|=C!YnR-V-k5cBQzInwM};?L?t(^T(_O9hm;GtcOC$inVR z^s_ELVON6g=wx8yNam=OH5oeVTT8armdPa(1D604f-scT!ynVYzW4WMQ%A-2d_<(H z-U_XJ6?PQok#+c&Z;n{$F~YV+ceJ8n4GK7KEK^D*6cZE@p0V5M`cmoKuJ!Fz_O{Lk z$j&!oJKE={7HMy00!n2B_=&km&VmI)c+P($05LZ{;f$%*f~brMRuMm@mzr(2nN!kWS5t;?oaeD;#@eQab>SZApitS#{Cp(gYurk+C8%TXt?!fB zw)&+G*qeyvocwTaYS)G@hO2umh!Z@SIU3%;Zq&CsYFVbjl_hLG)5k)XG%_)sGOqRm zsTQyOk*n|KRanLn2S~`LeVa&fAD&VlJ;7Ql#~(qIIiJwAyj<(JT4X+>fI&X{hn}IE&tdK^r1B5ZBei)wVf&Cv_~Fc8>#=Y-Wo$f| zh0#t+Oxb8 zEn$F9kH+m%D+1Ua8@4pt#=k?}VfA`jIM47iqGzM@UD-EDpBI#@<9!A;rH`dzKB22a zhDw~1gm&T9deYrn4YjYS46PB0wJYB9+d~!4g-R9Mvsx7yq}f(&G!!;+WYF8c$id|3 zJ$qzin}~Bg}jStzTj2SH3GMx&yMoq-Kc=;wxfCx4Yh(L$^Cy{^+Q%5 z_>*|Gbsu9HJpUQdP-0)li+TE4SeIJE<*hjyhTe7P!UK1yddzf%z-3XXQ7?8PzLrs@ zXsyuL?V(=Ky)+?FNF)ye@$y>Sdp2k_T1Ow7lP4N<@1uz_ffO57XGs*s{wh|MqqFv$ z)t2#e+%J1v`E)Bh|25t9L8z5oyovFJk~#(SQ>{$WmTUrlDiANdS`}EoIW%Oav16aZ zLbD1H6j$}GnF)JjZOQbbezpsVK*jQIK`u`#{%&hFZY90O~? zZkDrCK1P||1#w1eeb!^4r8v~8!yb>*%WZtni2dh!=&ff4oA?9T!r);>b~!yEtopOC z*$f8QNJTXa#-)Y-RwTsWCk0FWY7)l;jIVZQS zgA7N$2N?f$Yc|c8^<&J~Q!!;d3^8G%VytdaqouwRSl{#;bEY;8TgOB=GE% zlfrQV;#dR^I_L?AH-$%1TY+$>u82}jSFZ}EF&+2{- zRmH_zu!`rWi4KL?CYhXl>qfI9ZGf7%P$%}^UDjz?%QzwAYvj3LV|8h;YPPcMkH;RE-J%u|jQGKr~x^Aak%=phdt|6sI zar(%q8nG+IeNVF+n+YDqSm$zToqy>+=(aq`W)dj)?S>2^yIVl*bh@?uN^V5B0BQs6l6H`4duEl2puhpl4O(nint8ltgmEW0OzF%N`tlZNdV4 z^X*Z4WjH4EMSd8+5E$+WnN1K=p^)BfGzDinXlN3sTCX+F})0%gep72)N{*`K-8GDQSp>NG8 ziIXNa3JHR{j}sZ)eNtH#Z^4wHb7M_TpA$HB+QlDi2!D%z@BO9udad*FWh1LtVt*1f zAGd)9y5u=p$g2Zx;~gEwQ;JXEP9BZH2=x~jSsD_!B(W!jy=RM78#@zwHiNWY?O~1# zlyBK;$}`5e-;(eTXO0%55evD)cp-hqxA(+R%*g@@NdmoLc;zY{eZ|MM5L1Z;6To@^ zP0z1I@#rrD5c8+ospkr>4USgv#bF=yf*Xux$H#t>LsDm>sdA6%eulap zbg;Qtn3rs}#qZ_kP~|YLSPoZ1!+jCkJGt)F z6{xGB!RvE#z?@CtoaIZbLgS19?ziu+_8MJoLAvWQp(Ga=lEaTu8FH@&N`>c7SGzYt zE?7JY(!z#au5PZ?g_R=`X~42WSid+|j)3`MvAAS#C)tZ#O)cwh)>HI_-0N;0>8cZ?!66jMTPgGh4=3_y{kuP-8`_3Y^YpW`~ARqgDY)jTRL{96*eoft<5S!9BAx5!5u$5^7ZDP z)s}}`aBN;o6=ub*Aco(3C?|{Riu)#i(wv&i^Tg|wPdkNus;5$fAPX8#NqnjE`pt*t zzc^cI#4BW%*@24|Hb?p}7j~=sxsT|nBaYp8ic?`utOokpKW8c?$IuG`6%ugmCOlx< zzkd%UB9<=Pp8jSt-K?bg5{P12NorjsPzRj=(R{p@2{}cR1c=etw*?uXpLsBd_!T}% z#cM#@0@yO0K~%xuhC=qx!Gx}>Hvj4in-6*woJvUosn$YP9VuNPN)U`nh*or08bq2c zfJ5u#_16wgVmA@Pi-2&!LDpZGB@b`- zt{@9-(o5W;tKkLNd=>BO3-{UyasB9Ql5+6~Se_|mXh9QH7bZP{2$H>FNW0XD{a6Z& ze&8CZf(_ZE?Q7yaa`<_j`#+}^wCfnzN_6Ya#z+I*Ev>Vs-rY8ua$x4>L)Y@1 zTp_9w(?e>>ji%i-c6XO(5IX-Y)=Z*2LKHoMSUvmS8V8~3GTYeS?E%<3Gi<%c*J~V9 zINclvJENAH+p2&(vC4rZE(HUFFK>x5mTj^}U7H!sflE}$lXmPXcl7*PqEm{QELqZz z{MO&tGw;#raXLeqj9~3|Dq>#i<*^im;U1>8b^y(+9iEE(a!m*`Y<&y_Zd3F9=bibX zv4-+p)UZ@80$-gB@t?x2BW4TB(}w+qp<&-(Lx1&)YitxRH5yLNdhEQT59%my=kK;( zK=3nKrz#QU$UK=hsdp-SW={jV#6420Hx7Z@q6EP3hwE-R&qBQzZobr*eZewbJAJT{ zu8a>B-*8Imu`fwrOL-){1N%$6GQ&rLc4+2k9gI9o<8O#W39mtlXiKZ>8{EQz$x9ZO zEe?yRQc-2Jv$3y5<9OhEv_7{TqfT_7+FeMi10`BDx*6rx8N^W89j{lu2th%5`ZLk1 z>${)N`OAAL^roIhkEj(^X;#j%Q6TsvIxr>`G;l1+x#hmfB%UzW*r*;?_ z&3o}lA^=Z1_AQ7e*lMPl`r(up=Kn8O5G@$2yJ!wjlNj1HUBFO5z4<&7>_ya=1{!JEg`>J{HD;gc$ZS5*nRkB5**G7z^#D!q}%7{(hNK04yMC>^AV=oC9i=D1~XI z<-{6*P{Ca*@RT|}Y-*75ksc7o4JK|U>zbXR*hkmP+md?U=)+FLbWN4B^cNpq^h)OU z;pz5jk0k3q-@8Vy1nJmif7U$Q1~y4z8+bS(B2~Ody-4-XSGeEe)7#50@96@)sS`^p zYhnOt<)gpV53tOO&pdyz*t%a`zKaTy&Xsx@`lZ=f_q+ma2XRo|;P^{dI<`qLJ2%^G zJmt3?YfE8A_-cgx=pw}1PCYZJ$^nj#AlVktVj~_bI#8ck&*wPA`{Avtn@X>3nwQtT z^g9_|esJ8>09eB6nlRv)L#d>)TdmO6Vyq?)dl$7Yox6&iFE_lj2!tZ`YRl*J6~HIY zK8mD7Ly7_$B&5KP7hhzP{Mwry(FP=&o@?<4@`}zJsw(k$_{ws^-8O zWY^DdG0Y9W7>3}c{SW$~ew0t%_&x{o_{$*t!D-U$lszS;e}GfLp$BPC_6#|sJmw7; zx=0iJI#AC{&&J67^5Nk0k^T|ab^Q5XQ9l6jXHO0fUCd5l=3W(g9RyvX zcfW;LwEm5FguuRw=3kd~(U}r>n-~+ZbnG)Cylo9uQ&sY~EjHJ*Joj9er+|t_!n> z5j+Q5O%NXNU0pl#hyag;fHj=r;VYb$wY`Nz%m3@^t80HlYhF6o1OL@3nW=-tnumzCor5-Yy;V0!<2nKojH7 zJ^uB3jJY|)2+H&6AQ1TO8XXIMKO7!S)3eb`Qq_zo@!aq|tS8s$A*UZf9&t);iX zI`jEqE}=5|Pqc1&FR&ZNp{bP_n?I6~##viS^8;wdXR+5BOnNPb2!GKofrEnXX;YRv z$w*s3pU{Upc=*xtGC)yuuaY5bkJ7@9R;2RC|Cl(0N{dYr4LG7StBI%J(}6J6>e?^` z5J{0NOFXI&`k5GGk!qTAam-IhB22- z2gG6s_czj%r4tRFJ!c&W$2>T+0HLh|qB zgpY9~ZC{G4C6YI>5ww0_UtD6|FpxXN$~xmzEOMaUFC9x481;A^blclHyvH4vS3c~k zGVBlcwwtgS%Awp2{HiU$PuT@NkVYzx1f`A$H+ks-c?m`V?V_;)zlVyX-{^-u5$HF zkDBfc%5XB*Rb1Js**1C$mA|n*TIiDch6|fucwkJ0(%SwzoOKTBc|ij(#Od9i8*UPG z`Lp%Eyw-G2*Bav{5xO~|2_oVDgUAqzkN_)tg$$QNgHaqRn~u z$Jptgz8)c&f2ZR$C4c^1zsqNTg-okFfUO6lZveLF>WuIh#k-~uGI|s4(55D; zCTVt>==3$njxwW!f12aO$d4jn79zXCySbJck3|<1hNX&H0!`VqOGyc%-->Rk%l12} zaHW!Lfjy*0T5nw)jio{d>%_6*yy?9iBKlPv%2yf5*Ht~`@wZTDYW0<&egBY<%_Lwk zl%9p^vf*Zb#pSWsLOqm|;co0wYUFCgDV(225~=ccSy`|O5ERm=YbdGN1eb04qJ8vp zO0FqgW8`0>STtyl%H`74r5Pl(zdDq)q&4gSB(jR&Z1JQURFGgh%jOEtyL=R$^haVS zT<>|8P-90@Za1#jNMZr6dhSoPp(OhbZ64eP`t}yL&6L=qnqS)^<(eH7miC`sSImpA zO)aSFsj%t&!;!%GisaT@oyfkN@UuMiipbPs9?<}N=F3`cN!&uUNWVz@WV+)IH2d4l zQYp`a_93~X#og9I7H#ux*)hN1Eurpz;8x$G2f0|Y;WT??Hb=nJA5B*lY0goX=?S@6 zc~P|40T}IDzD0)T96z!t3&3aIOo_mxt&ffz79@FhmL)$zKL=^^a^r=*(J4jKz+WOO z3>sR8HFrn^WPAorb;R!%>4xTez`rB{WS%q-sT$9pd2@^Gs?bi+@2KojM1~%?vCX1i zF=xeiVepH3S_$sWsCkIin2(wmvQ#$-CTy>g@{l3YcEcYylG|wQI1vT+vv?SC{9IR- z@|`uIK`y&v-FZO~NF%m~l>^?@;|Z=CF}f(C)7O3SfA>1DDoO!ke{?Z^(!36dkaW51 z1BsB}YVW;LKqhr@N47MfNxrIy&H;@BD=s-OW|NCoqe$-GS@Aq|!p9LS01NHmPc?O+KpDrRI3{(#Lg?VxV0zxpcD} zes3#3X-zZ(aJ6`EX4mEUpQ_~s9M0F!-1Id6ZMAQ=wpVn(M!RiZv^+nm5!EvfGlvpM z&VjgpWsRwr@^tC!B**DDs)~l{Fs4!cXxwi|$HXu9ij+*T?B|iME*}z_w~y{BLeCdX zDEP4EyptygXNYNFp;qCOehZnaZrCr9`R<7_32u>f0#RV2pr4Vf@im=9$6_+^m@#%B z;i(Hp`rr~^q7n5?>V>XFfIJKDx;~pQWf+MK_QmwV?=DNEMG-Va(!zpd(Q-=a#YD0< zsI{gP6zoC|9U6G&|=+^$`*os+%j6>J6`-P_X;6k%=2u?ejEA!=xL=Y8;w*%QY?ZE+khA?J(R_)>`#+maW%wNalI0|g4ub)Y#N+(cD|x%q)o{* z=OZ3)`gN_nTYtjyj0aI6kYNZ(7|-wSCkaH4SodGm|K#Gbty(YllEuP|&F}$Ua59D= z8s06|vPbmA@Jrh(HB?Rzwm5d;`C+bNO=`j5cAr1j6=pZk;OT!%GZ4In!v zD+s^x`1Cezv&jbi;chYTf$AisRjyRm#3j3bN*w#!m$s2#CDe9ia36&%e ziua0#P{%PJ$Df@A1!DQWh^q#5#)fpU^@jeqc(O;B5SC{Tg=cTbXNGsV={!Ctphy4q zO{~Z(B>R<2qfGhUI1i5{H;=~b8jBz*Rrbm$2w@DmcaOXhWC__q@rGgsYC5R@}p*@)d+)9+-RLdP`#)B`r5wnM(0> zI+25jMe?xy{#3NQ8<-S*T=z~5ccGxTEJG!811VmM zij;YRUA;t_Ygl{k)b@jXD7m@k69(Ba(P*d25helb2skO*C)>6W!6zaT(f>R9v!^v2 z!k)vw30`hX<;n&zpa-AYx-Ea(Lo3pl?)OC7BtGw`kvHB{1h_OyW$c)4#Fkj=^ zY+?(A@qi{PoJYyb+1idQ8C{j zfsCrObc+-K_l+Rx*^kqJ%91yTDUSb`m=Ry>)m7$uT zKh6h*Gv_C=zCa4T#gHa{_I0vb#DWS#Rpj^Ei;Xf!{7DMff^|o8)vC_kYD`O>?iB+AJCU)_$<@Yujav7RK@zPUd?#~J&{3UL5}{43x5~ z?`BByk-T(YJKLZJK1A!m7hT_%f@FHn`5)Oc%UOA&{_s?t)w(4cC}lFNd!O(1v8Mi` z!}!(}8$7SoWAov{qx{d+$@UdnI);ymvICL{j&B}7!DB_=CKes$GK&@Q2cJp=PvZTJ zRPu`fCcV$V*simWvd`2nd6D#SxmN#Eg8f45zK04rRg4+Z0VcDB`ZnC);iTy6jnx0q z&6ftR$d!_!K3g)kQb@@IeBZ=W7PpRD0(G;hjH- zZ#5vBE-;M#o@j5Y!b}XbO#nLPIVh~koWlf@U}w+G!7K;pf*@t7%ZRmTXHL$>TR!Ea zC?Rm*OoR! zZYjOLHU_pPsuz&JQaGXg*b#2!-zSIB6Zs zkDrRbJjA$hq(g`HjTqTuK*FrwYEItocZURiDF0%6e0*Gg!l^gviD}g`_Ovpl+664D zohUNK2z}qty?V;;zOf#7+qSk)q)`a_u4w<{{RR#$WQ