diff --git a/code/ryzom/client/data/gamedev/interfaces_v3/game_config.xml b/code/ryzom/client/data/gamedev/interfaces_v3/game_config.xml index ad5060a81..5e9072b93 100644 --- a/code/ryzom/client/data/gamedev/interfaces_v3/game_config.xml +++ b/code/ryzom/client/data/gamedev/interfaces_v3/game_config.xml @@ -2762,12 +2762,37 @@ x="0" y="0" hardtext="uiVRGeneral" /> - + + + + - VideoModes; #define GAME_CONFIG_VIDEO_DEPTH_REQ 32 // VR_CONFIG +#define GAME_CONFIG_VR_ENABLE_BUTTON "ui:interface:game_config:content:vr:enabler:c" #define GAME_CONFIG_VR_DEVICES_COMBO "ui:interface:game_config:content:vr:vr_devices" #define GAME_CONFIG_VR_DEVICE_DB "UI:TEMP:VR_DEVICE" @@ -2934,7 +2935,7 @@ enum TTextureMode {LowTextureMode= 0, NormalTextureMode= 1, HighTextureMode= 2}; void cacheStereoDisplayDevices(); // from init.cpp -void updateVRDevicesComboUI() +void updateVRDevicesComboUI(bool enable) { // VR_CONFIG nldebug("Init VR device name list from cache into UI"); @@ -2942,8 +2943,8 @@ void updateVRDevicesComboUI() CDBGroupComboBox *pCB = dynamic_cast(CWidgetManager::getInstance()->getElementFromId(GAME_CONFIG_VR_DEVICES_COMBO)); if (pCB) { - pCB->setActive(ClientCfg.VREnable); - if (ClientCfg.VREnable) + pCB->setActive(enable); + if (enable) { nldebug("pCB ok"); cacheStereoDisplayDevices(); @@ -3026,7 +3027,12 @@ public: } // VR_CONFIG - updateVRDevicesComboUI(); + pBut = dynamic_cast(CWidgetManager::getInstance()->getElementFromId(GAME_CONFIG_VR_ENABLE_BUTTON)); + if (pBut) + { + pBut->setPushed(ClientCfg.VREnable); + } + updateVRDevicesComboUI(ClientCfg.VREnable); // init the mode in DB TTextureMode texMode; @@ -3257,6 +3263,31 @@ class CHandlerGameConfigFullscreen : public IActionHandler }; REGISTER_ACTION_HANDLER (CHandlerGameConfigFullscreen, "game_config_change_vid_fullscreen"); +// *************************************************************************** +class CHandlerGameConfigVREnable : public IActionHandler +{ + virtual void execute (CCtrlBase *pCaller, const string &/* Params */) + { + // VR_CONFIG + + CCtrlBaseButton *pBut = dynamic_cast(CWidgetManager::getInstance()->getElementFromId(GAME_CONFIG_VR_ENABLE_BUTTON)); + if (pBut) + { + // hide or show device list depending on enabled or not + updateVRDevicesComboUI(pBut->getPushed()); + } + + if (pCaller) + { + CDDXManager *pDM = CDDXManager::getInstance(); + CInterfaceDDX *pDDX = pDM->get(GAME_CONFIG_DDX); + if(pDDX) + pDDX->validateApplyButton(); + } + } +}; +REGISTER_ACTION_HANDLER (CHandlerGameConfigVREnable, "game_config_change_vr_enable"); + // *************************************************************************** class CHandlerGameConfigVRDevice : public IActionHandler { @@ -3373,6 +3404,13 @@ class CHandlerGameConfigApply : public IActionHandler } } + CCtrlBaseButton *pBut = dynamic_cast(CWidgetManager::getInstance()->getElementFromId(GAME_CONFIG_VR_ENABLE_BUTTON)); + if (pBut) + { + // store the new config variables + ClientCfg.VREnable = pBut->getPushed(); + ClientCfg.writeBool("VREnable", pBut->getPushed()); + } if (ClientCfg.VREnable) { // store the new config variables diff --git a/code/ryzom/client/src/main_loop_utilities.cpp b/code/ryzom/client/src/main_loop_utilities.cpp index e7b9a3d27..bca1ccad2 100644 --- a/code/ryzom/client/src/main_loop_utilities.cpp +++ b/code/ryzom/client/src/main_loop_utilities.cpp @@ -49,6 +49,17 @@ void updateFromClientCfg() { CClientConfig::setValues(); ClientCfg.IsInvalidated = false; + + if ((ClientCfg.VREnable != LastClientCfg.VREnable) + || (ClientCfg.VREnable && ( + ClientCfg.VRDisplayDevice != LastClientCfg.VRDisplayDevice + || ClientCfg.VRDisplayDeviceId != LastClientCfg.VRDisplayDeviceId + ))) + { + nldebug("Apply VR device change"); + releaseStereoDisplayDevice(); + initStereoDisplayDevice(); + } // GRAPHICS - GENERAL //--------------------------------------------------- @@ -79,27 +90,6 @@ void updateFromClientCfg() Driver->setSwapVBLInterval(0); } - if (ClientCfg.VREnable != LastClientCfg.VREnable) - { - // VR_CONFIG - - // switch visibility of list & reload - updateVRDevicesComboUI(); - } - else - { - if (((StereoDisplay != NULL) != ClientCfg.VREnable) - || (ClientCfg.VREnable && ( - ClientCfg.VRDisplayDevice != LastClientCfg.VRDisplayDevice - || ClientCfg.VRDisplayDeviceId != LastClientCfg.VRDisplayDeviceId - ))) - { - nldebug("Apply VR device change"); - releaseStereoDisplayDevice(); - initStereoDisplayDevice(); - } - } - // GRAPHICS - LANDSCAPE //--------------------------------------------------- if (ClientCfg.LandscapeThreshold != LastClientCfg.LandscapeThreshold)