3#include <glm/gtx/quaternion.hpp>
4#include <openxr/openxr.h>
35 LoadXrFunction( XrInstance xrInstance,
const std::string & functionName, T & functionPointer )
37 XrResult result = xrGetInstanceProcAddr(
38 xrInstance, functionName.c_str(),
reinterpret_cast<PFN_xrVoidFunction *
>( &functionPointer )
40 if ( result != XR_SUCCESS )
42 functionPointer =
nullptr;
43 throw std::runtime_error(
44 "Failed to load " + functionName +
" with error code: " + std::to_string( result )
48 if ( !functionPointer )
50 functionPointer =
nullptr;
51 throw std::runtime_error(
"Failed to load " + functionName +
". The function was a nullptr" );
146 static float dot(
const glm::quat & a,
const glm::quat & b );
160 static glm::quat
lerpMix(
const glm::quat & from,
const glm::quat & to,
float progress );
174 static glm::vec3
lerpMix(
const glm::vec3 & from,
const glm::vec3 & to,
float progress );
190 static float lerpMix(
float from,
float to,
float progress );
203 static float dot(
const glm::vec3 & a,
const glm::vec3 & b );
205 static float clampf(
float num,
float left,
float right );
207 static float length(
const glm::vec3 & vec );
210 static float distance(
const glm::vec3 & vec1,
const glm::vec3 & vec2 );
211 static glm::quat
slerp(
const glm::quat & start,
const glm::quat & end,
float percent );
212 static glm::vec3
slerp(
const glm::vec3 & start,
const glm::vec3 & end,
float percent );
static float vectorAngleAroundNormal(const glm::vec3 &vec1, const glm::vec3 &vec2, const glm::vec3 &norm)
static glm::quat xrQuaternionfToGlmQuat(const XrQuaternionf &xrQuaternion)
Turns the OpenXR quaternion into an OpenXR quaternion.
static glm::mat4 createProjectionMatrix(XrFovf fov, float nearClip, float farClip)
static void LoadXrFunction(XrInstance xrInstance, const std::string &functionName, T &functionPointer)
Loads a function from openxr which is not loaded at compile time. Retrieves function pointer.
static glm::vec3 normalize(const glm::vec3 &vec)
static float dot(const glm::vec3 &a, const glm::vec3 &b)
The dot product between two glm vector3's.
static float distanceSquared(const glm::vec3 &vec1, const glm::vec3 &vec2)
static glm::vec3 crossProductVector3(const glm::vec3 &vector_a, const glm::vec3 &vector_b)
static float lerpMix(float from, float to, float progress)
Linearly interpolate between two float values.
static float lengthSquared(const glm::vec3 &vec)
static const char * GetXrStructureTypeName(XrStructureType type)
static float clampf(float num, float left, float right)
static void quaternionToAngleAxis(const glm::quat &quat, float &angle, glm::vec3 &axis)
static float distance(const glm::vec3 &vec1, const glm::vec3 &vec2)
static glm::vec3 xrVector3fToGlmVec3(const XrVector3f &xrVector3)
Converts an OpenXR vector3 to a glm vector3.
static glm::quat slerp(const glm::quat &start, const glm::quat &end, float percent)
static glm::mat4 rotationAroundPoint(glm::vec3 point, glm::mat4 rotationMatrix)
static glm::mat4 poseToMatrix(const OpenXrHelper::posef &pose)
Pose of glm components to glm::mat4.
static float length(const glm::vec3 &vec)
static XrPosef makeIdentityPose()
Makes identity pose.
static glm::vec3 slerp(const glm::vec3 &start, const glm::vec3 &end, float percent)
static float dot(const glm::quat &a, const glm::quat &b)
Calculates the dot product between two glm quaternions.
struct Engine::OpenXrHelper::posef posef
A glm based posef struct.
static posef xrPosefToGlmPosef(const XrPosef &xrPosef)
static XrVector3f glmVec3ToXrVector3f(const glm::vec3 &glmVector3)
Converts a glm::vec3 to a XrVector3f.
static std::string sessionStateToString(XrSessionState state)
static glm::vec3 lerpMix(const glm::vec3 &from, const glm::vec3 &to, float progress)
Linearly interpolate between two glm vector3's.
static glm::quat lerpMix(const glm::quat &from, const glm::quat &to, float progress)
Linearly interpolate between two quaternions.
static glm::quat quaternionFromAngleAxis(const float &angle, const glm::vec3 &axis)
static XrQuaternionf glmQuatToXrQuaternionf(const glm::quat &glmQuaternion)
Glm quaternion to xr quaternionf.
static glm::mat4 poseToMatrix(const XrPosef &pose)
Converts an XrPosef to a glm::mat4.
A glm based posef struct.