From 89b7f8139f45a1253f7490b3412ba58d63e2ee58 Mon Sep 17 00:00:00 2001 From: James Hogan <james@albanarts.com> Date: Wed, 5 Jan 2022 22:57:15 +0000 Subject: [PATCH] VRManager: Handle removal of prop getValue<const char *>() Handle removal of SGPropertyNode::getValue<const char *>() in VRManager::Listener<const char *>::valueChanged() by switching the string listeners and VRManager setter handlers to std::string. This fixes the following link error when VR is enabled: ld: VRManager.cxx.o: in function `flightgear::VRManager::Listener<char const*>::valueChanged(SGPropertyNode*)': src/Viewer/VRManager.hxx:147: undefined reference to `char const* SGPropertyNode::getValue<char const*>(std::enable_if<simgear::props::PropertyTraits<char const*>::Internal, void>::type*) const' --- src/Viewer/VRManager.cxx | 28 ++++++++++++++-------------- src/Viewer/VRManager.hxx | 12 ++++++------ 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/Viewer/VRManager.cxx b/src/Viewer/VRManager.cxx index 3dd9ddb76..85221020f 100644 --- a/src/Viewer/VRManager.cxx +++ b/src/Viewer/VRManager.cxx @@ -144,15 +144,15 @@ void VRManager::setVisibilityMask(bool visibilityMask) syncSettings(); } -void VRManager::setVRMode(const char * mode) +void VRManager::setVRMode(const std::string& mode) { osgXR::Settings::VRMode vrMode = osgXR::Settings::VRMODE_AUTOMATIC; - if (strcmp(mode, "AUTOMATIC") == 0) { + if (mode == "AUTOMATIC") { vrMode = osgXR::Settings::VRMODE_AUTOMATIC; - } else if (strcmp(mode, "SLAVE_CAMERAS") == 0) { + } else if (mode == "SLAVE_CAMERAS") { vrMode = osgXR::Settings::VRMODE_SLAVE_CAMERAS; - } else if (strcmp(mode, "SCENE_VIEW") == 0) { + } else if (mode == "SCENE_VIEW") { vrMode = osgXR::Settings::VRMODE_SCENE_VIEW; } @@ -160,15 +160,15 @@ void VRManager::setVRMode(const char * mode) syncSettings(); } -void VRManager::setSwapchainMode(const char * mode) +void VRManager::setSwapchainMode(const std::string& mode) { osgXR::Settings::SwapchainMode swapchainMode = osgXR::Settings::SWAPCHAIN_AUTOMATIC; - if (strcmp(mode, "AUTOMATIC") == 0) { + if (mode == "AUTOMATIC") { swapchainMode = osgXR::Settings::SWAPCHAIN_AUTOMATIC; - } else if (strcmp(mode,"MULTIPLE") == 0) { + } else if (mode == "MULTIPLE") { swapchainMode = osgXR::Settings::SWAPCHAIN_MULTIPLE; - } else if (strcmp(mode,"SINGLE") == 0) { + } else if (mode == "SINGLE") { swapchainMode = osgXR::Settings::SWAPCHAIN_SINGLE; } @@ -176,22 +176,22 @@ void VRManager::setSwapchainMode(const char * mode) syncSettings(); } -void VRManager::setMirrorMode(const char * mode) +void VRManager::setMirrorMode(const std::string& mode) { osgXR::MirrorSettings::MirrorMode mirrorMode = osgXR::MirrorSettings::MIRROR_AUTOMATIC; int viewIndex = -1; - if (strcmp(mode, "AUTOMATIC") == 0) { + if (mode == "AUTOMATIC") { mirrorMode = osgXR::MirrorSettings::MIRROR_AUTOMATIC; - } else if (strcmp(mode, "NONE") == 0) { + } else if (mode == "NONE") { mirrorMode = osgXR::MirrorSettings::MIRROR_NONE; - } else if (strcmp(mode, "LEFT") == 0) { + } else if (mode == "LEFT") { mirrorMode = osgXR::MirrorSettings::MIRROR_SINGLE; viewIndex = 0; - } else if (strcmp(mode, "RIGHT") == 0) { + } else if (mode == "RIGHT") { mirrorMode = osgXR::MirrorSettings::MIRROR_SINGLE; viewIndex = 1; - } else if (strcmp(mode, "LEFT_RIGHT") == 0) { + } else if (mode == "LEFT_RIGHT") { mirrorMode = osgXR::MirrorSettings::MIRROR_LEFT_RIGHT; } diff --git a/src/Viewer/VRManager.hxx b/src/Viewer/VRManager.hxx index 95d156d67..72150c00d 100644 --- a/src/Viewer/VRManager.hxx +++ b/src/Viewer/VRManager.hxx @@ -80,9 +80,9 @@ class VRManager : public osgXR::Manager void setDepthInfo(bool depthInfo); void setVisibilityMask(bool visibilityMask); - void setVRMode(const char * mode); - void setSwapchainMode(const char * mode); - void setMirrorMode(const char * mode); + void setVRMode(const std::string& mode); + void setSwapchainMode(const std::string& mode); + void setMirrorMode(const std::string& mode); // osgXR::Manager overrides @@ -130,11 +130,11 @@ class VRManager : public osgXR::Manager // Property listeners - template <typename T> + template <typename T, typename R = T> class Listener : public SGPropertyChangeListener { public: - typedef void (VRManager::*SetterFn)(T v); + typedef void (VRManager::*SetterFn)(R v); Listener(VRManager *manager, SetterFn setter) : _manager(manager), @@ -153,7 +153,7 @@ class VRManager : public osgXR::Manager SetterFn _setter; }; typedef Listener<bool> ListenerBool; - typedef Listener<const char *> ListenerString; + typedef Listener<std::string, const std::string&> ListenerString; ListenerBool _listenerEnabled; ListenerBool _listenerDepthInfo;