diff --git a/apps/openmw/mwbase/world.hpp b/apps/openmw/mwbase/world.hpp index 044d31233..570399e91 100644 --- a/apps/openmw/mwbase/world.hpp +++ b/apps/openmw/mwbase/world.hpp @@ -676,8 +676,10 @@ namespace MWBase /// @Return distance to the target object, or -1 if no object was targeted / in range virtual float getTargetObject(MWRender::RayResult& result, const osg::Vec3f& origin, const osg::Quat& orientation, float maxDistance, bool ignorePlayer) = 0; +#ifdef USE_OPENXR virtual MWVR::UserPointer& getUserPointer() = 0; virtual MWWorld::Ptr getPointerTarget() = 0; +#endif /// @Return ESM::Weapon::Type enum describing the type of weapon currently drawn by the player. virtual int getActiveWeaponType(void) = 0; diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 9c50e5837..8971e8e99 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -207,7 +207,9 @@ namespace MWRender , mWorkQueue(workQueue) , mUnrefQueue(new SceneUtil::UnrefQueue) , mNavigator(navigator) +#ifdef USE_OPENXR , mUserPointer(new MWVR::UserPointer(rootNode)) +#endif , mMinimumAmbientLuminance(0.f) , mNightEyeFactor(0.f) , mFieldOfViewOverridden(false) @@ -1025,7 +1027,9 @@ namespace MWRender if (mObjectPaging) mObjectPaging->clear(); +#ifdef USE_OPENXR mUserPointer->setParent(nullptr); +#endif } MWRender::Animation* RenderingManager::getAnimation(const MWWorld::Ptr &ptr) @@ -1408,8 +1412,10 @@ namespace MWRender mObjectPaging->getPagedRefnums(activeGrid, out); } +#ifdef USE_OPENXR MWVR::UserPointer& RenderingManager::userPointer() { return *mUserPointer; } +#endif } diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 91836b8d7..6f19e544f 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -255,7 +255,9 @@ namespace MWRender bool pagingUnlockCache(); void getPagedRefnums(const osg::Vec4i &activeGrid, std::set &out); +#ifdef USE_OPENXR MWVR::UserPointer& userPointer(); +#endif private: void updateProjectionMatrix(); @@ -309,7 +311,10 @@ namespace MWRender std::unique_ptr mCamera; std::unique_ptr mViewOverShoulderController; osg::Vec3f mCurrentCameraPos; + +#ifdef USE_OPENXR std::shared_ptr mUserPointer; +#endif osg::ref_ptr mStateUpdater; diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index 9fc326cf3..99e393e98 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -4054,6 +4054,7 @@ namespace MWWorld return result.mRatio * maxDistance; } +#ifdef USE_OPENXR MWVR::UserPointer& World::getUserPointer() { return mRendering->userPointer(); @@ -4063,6 +4064,7 @@ namespace MWWorld { return getUserPointer().getPointerTarget().mHitObject; } +#endif MWWorld::Ptr World::placeObject(const MWWorld::ConstPtr& object, const MWRender::RayResult& ray, int amount) { diff --git a/apps/openmw/mwworld/worldimp.hpp b/apps/openmw/mwworld/worldimp.hpp index 3ab25687a..be992731e 100644 --- a/apps/openmw/mwworld/worldimp.hpp +++ b/apps/openmw/mwworld/worldimp.hpp @@ -746,8 +746,10 @@ namespace MWWorld /// @Return distance to the target object, or -1 if no object was targeted / in range float getTargetObject(MWRender::RayResult& result, const osg::Vec3f& origin, const osg::Quat& orientation, float maxDistance, bool ignorePlayer) override; +#ifdef USE_OPENXR MWVR::UserPointer& getUserPointer() override; MWWorld::Ptr getPointerTarget() override; +#endif MWWorld::Ptr placeObject(const MWWorld::ConstPtr& object, const MWRender::RayResult& ray, int amount) override; ///< copy and place an object into the gameworld based on the given intersection