Skip to content

Commit dfdcd0f

Browse files
Sean LuSean Lu
authored andcommitted
version 2.4.2
1 parent 5ac252b commit dfdcd0f

File tree

156 files changed

+200664
-5133
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

156 files changed

+200664
-5133
lines changed

com.htc.upm.vive.openxr/Runtime/Features/EyeTracker.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

com.htc.upm.vive.openxr/Runtime/Features/EyeTracker/ViveEyeTracker.cs

Lines changed: 676 additions & 0 deletions
Large diffs are not rendered by default.

com.htc.upm.vive.openxr/Runtime/Features/EyeTracker/ViveEyeTracker.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

com.htc.upm.vive.openxr/Runtime/Features/EyeTracker/ViveEyeTrackerHelper.cs

Lines changed: 426 additions & 0 deletions
Large diffs are not rendered by default.

com.htc.upm.vive.openxr/Runtime/Features/EyeTracker/ViveEyeTrackerHelper.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

com.htc.upm.vive.openxr/Runtime/OpenXRUtils.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,23 @@ public enum XrStructureType
325325
XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC = 1000317004,
326326
XR_TYPE_SYSTEM_ANCHOR_PROPERTIES_HTC = 1000319000,
327327
XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_HTC = 1000319001,
328+
XR_TYPE_PERSISTED_ANCHOR_COLLECTION_CREATE_INFO_HTC = 1000320000,
329+
XR_TYPE_SPATIAL_ANCHOR_PERSIST_INFO_HTC = 1000320001,
330+
XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_HTC = 1000320002,
331+
XR_TYPE_PERSISTED_ANCHOR_PROPERTIES_GET_INFO_HTC = 1000320003,
332+
XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB = 1000171000,
333+
XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB = 1000171001,
334+
XR_TYPE_EYE_TRACKER_CREATE_INFO_HTC = 1000326001,
335+
XR_TYPE_EYE_GAZE_DATA_INFO_HTC = 1000326002,
336+
XR_TYPE_EYE_GAZE_DATA_HTC = 1000326003,
337+
XR_TYPE_SINGLE_EYE_GAZE_DATA_HTC = 1000326004,
338+
XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_HTC = 1000326005,
339+
XR_TYPE_EYE_PUPIL_DATA_INFO_HTC = 1000326006,
340+
XR_TYPE_EYE_PUPIL_DATA_HTC = 1000326007,
341+
XR_TYPE_SINGLE_EYE_PUPIL_DATA_HTC = 1000326008,
342+
XR_TYPE_EYE_GEOMETRIC_DATA_INFO_HTC = 1000326009,
343+
XR_TYPE_EYE_GEOMETRIC_DATA_HTC = 1000326010,
344+
XR_TYPE_SINGLE_EYE_GEOMETRIC_DATA_HTC = 1000326011,
328345
XR_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
329346
}
330347
/// <summary>
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
// ===================== 2022 HTC Corporation. All Rights Reserved. ===================
2+
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Runtime.InteropServices;
6+
7+
using VIVE.OpenXR.EyeTracker;
8+
9+
namespace VIVE.OpenXR
10+
{
11+
public class XR_HTC_eye_tracker_defs
12+
{
13+
public virtual XrResult xrCreateEyeTrackerHTC(XrEyeTrackerCreateInfoHTC createInfo, out XrEyeTrackerHTC eyeTracker)
14+
{
15+
eyeTracker = 0;
16+
return XrResult.XR_ERROR_FEATURE_UNSUPPORTED;
17+
}
18+
public virtual XrResult xrDestroyEyeTrackerHTC(XrEyeTrackerHTC eyeTracker)
19+
{
20+
return XrResult.XR_ERROR_FEATURE_UNSUPPORTED;
21+
}
22+
protected XrEyeGazeDataHTC m_eyeGazes = new XrEyeGazeDataHTC(); //= new XrEyeGazeDataHTC(XrStructureType.XR_TYPE_EYE_GAZE_DATA_HTC, IntPtr.Zero, 0);
23+
public virtual XrResult xrGetEyeGazeDataHTC(XrEyeTrackerHTC eyeTracker, XrEyeGazeDataInfoHTC gazeInfo, out XrEyeGazeDataHTC eyeGazes)
24+
{
25+
m_eyeGazes.type = XrStructureType.XR_TYPE_EYE_GAZE_DATA_HTC;
26+
m_eyeGazes.next = IntPtr.Zero;
27+
m_eyeGazes.time = 0;
28+
eyeGazes = m_eyeGazes;
29+
return XrResult.XR_ERROR_FEATURE_UNSUPPORTED;
30+
}
31+
public virtual bool GetEyeGazeData(out XrSingleEyeGazeDataHTC[] out_gazes)
32+
{
33+
m_eyeGazes.type = XrStructureType.XR_TYPE_EYE_GAZE_DATA_HTC;
34+
m_eyeGazes.next = IntPtr.Zero;
35+
m_eyeGazes.time = 0;
36+
out_gazes = m_eyeGazes.gaze;
37+
return false;
38+
}
39+
protected XrEyePupilDataHTC m_pupilData = new XrEyePupilDataHTC();
40+
public virtual XrResult xrGetEyePupilDataHTC(XrEyeTrackerHTC eyeTracker, XrEyePupilDataInfoHTC pupilDataInfo, out XrEyePupilDataHTC pupilData)
41+
{
42+
m_pupilData.type = XrStructureType.XR_TYPE_EYE_PUPIL_DATA_HTC;
43+
m_pupilData.next = IntPtr.Zero;
44+
m_pupilData.time = 0;
45+
pupilData = m_pupilData;
46+
return XrResult.XR_ERROR_FEATURE_UNSUPPORTED;
47+
}
48+
public virtual bool GetEyePupilData(out XrSingleEyePupilDataHTC[] pupilData)
49+
{
50+
m_pupilData.type = XrStructureType.XR_TYPE_EYE_PUPIL_DATA_HTC;
51+
m_pupilData.next = IntPtr.Zero;
52+
m_pupilData.time = 0;
53+
pupilData = m_pupilData.pupilData;
54+
return false;
55+
}
56+
protected XrEyeGeometricDataHTC m_eyeGeometricData = new XrEyeGeometricDataHTC();
57+
public virtual XrResult xrGetEyeGeometricDataHTC(XrEyeTrackerHTC eyeTracker,
58+
XrEyeGeometricDataInfoHTC info,
59+
out XrEyeGeometricDataHTC eyeGeometricData)
60+
{
61+
m_eyeGeometricData.type = XrStructureType.XR_TYPE_EYE_GEOMETRIC_DATA_HTC;
62+
m_eyeGeometricData.next = IntPtr.Zero;
63+
m_eyeGeometricData.time = 0;
64+
eyeGeometricData = m_eyeGeometricData;
65+
return XrResult.XR_ERROR_FEATURE_UNSUPPORTED;
66+
}
67+
public virtual bool GetEyeGeometricData(out XrSingleEyeGeometricDataHTC[] geometricData)
68+
{
69+
m_eyeGeometricData.type = XrStructureType.XR_TYPE_EYE_GEOMETRIC_DATA_HTC;
70+
m_eyeGeometricData.next = IntPtr.Zero;
71+
m_eyeGeometricData.time = 0;
72+
geometricData = m_eyeGeometricData.eyeGeometricData;
73+
return false;
74+
}
75+
}
76+
public class XR_HTC_eye_tracker
77+
{
78+
static XR_HTC_eye_tracker_defs m_Instance = null;
79+
public static XR_HTC_eye_tracker_defs Interop
80+
{
81+
get
82+
{
83+
if (m_Instance == null)
84+
{
85+
m_Instance = new XR_HTC_eye_tracker_impls();
86+
}
87+
return m_Instance;
88+
}
89+
}
90+
91+
/// <summary>
92+
/// An application can create an <see cref="XrEyeTrackerHTC">XrEyeTrackerHTC</see> handle using CreateEyeTracker.
93+
/// </summary>
94+
/// <param name="createInfo">The <see cref="XrEyeTrackerCreateInfoHTC">XrEyeTrackerCreateInfoHTC</see> used to specify the eye tracker.</param>
95+
/// <param name="eyeTracker">The returned XrEyeTrackerHTC handle.</param>
96+
/// <returns>XR_SUCCESS for success.</returns>
97+
public static XrResult xrCreateEyeTrackerHTC(XrEyeTrackerCreateInfoHTC createInfo, out XrEyeTrackerHTC eyeTracker)
98+
{
99+
return Interop.xrCreateEyeTrackerHTC(createInfo,out eyeTracker);
100+
}
101+
/// <summary>
102+
/// Releases the eye tracker and the underlying resources when the eye tracking experience is over.
103+
/// </summary>
104+
/// <param name="eyeTracker">An XrEyeTrackerHTC previously created by xrCreateEyeTrackerHTC.</param>
105+
/// <returns>XR_SUCCESS for success.</returns>
106+
public static XrResult xrDestroyEyeTrackerHTC(XrEyeTrackerHTC eyeTracker)
107+
{
108+
return Interop.xrDestroyEyeTrackerHTC(eyeTracker);
109+
}
110+
/// <summary>
111+
/// Retrieves the <see cref="XrEyeGazeDataHTC">XrEyeGazeDataHTC</see> data of a <see cref="XrEyeTrackerHTC">XrEyeTrackerHTC</see>.
112+
/// </summary>
113+
/// <param name="eyeTracker">An <see cref="XrEyeTrackerHTC">XrEyeTrackerHTC</see> previously created by <see cref="ViveEyeTrackerHelper.xrCreateEyeTrackerHTCDelegate">xrCreateEyeTrackerHTC</see>.</param>
114+
/// <param name="gazeInfo">The information to get eye gaze.</param>
115+
/// <param name="eyeGazes">Output parameter to retrieve a pointer to <see cref="XrEyeGazeDataHTC">XrEyeGazeDataHTC</see> receiving the returned eye poses.</param>
116+
/// <returns>XR_SUCCESS for success.</returns>
117+
public static XrResult xrGetEyeGazeDataHTC(XrEyeTrackerHTC eyeTracker, XrEyeGazeDataInfoHTC gazeInfo, out XrEyeGazeDataHTC eyeGazes)
118+
{
119+
return Interop.xrGetEyeGazeDataHTC(eyeTracker, gazeInfo, out eyeGazes);
120+
}
121+
/// <summary>
122+
/// Retrieves the <see cref="XrEyePupilDataHTC">XrEyePupilDataHTC</see> data of a <see cref="XrEyeTrackerHTC">XrEyeTrackerHTC</see>.
123+
/// </summary>
124+
/// <param name="eyeTracker">An <see cref="XrEyeTrackerHTC">XrEyeTrackerHTC</see> previously created by <see cref="ViveEyeTrackerHelper.xrCreateEyeTrackerHTCDelegate">xrCreateEyeTrackerHTC</see>.</param>
125+
/// <param name="pupilDataInfo">The information to get pupil data.</param>
126+
/// <param name="pupilData">A pointer to <see cref="XrEyePupilDataHTC">XrEyePupilDataHTC</see> returned by the runtime.</param>
127+
/// <returns>XR_SUCCESS for success.</returns>
128+
public static XrResult xrGetEyePupilDataHTC(XrEyeTrackerHTC eyeTracker, XrEyePupilDataInfoHTC pupilDataInfo, out XrEyePupilDataHTC pupilData)
129+
{
130+
return Interop.xrGetEyePupilDataHTC(eyeTracker, pupilDataInfo, out pupilData);
131+
}
132+
/// <param name="eyeTracker">An <see cref="XrEyeTrackerHTC">XrEyeTrackerHTC</see> previously created by <see cref="ViveEyeTrackerHelper.xrCreateEyeTrackerHTCDelegate">xrCreateEyeTrackerHTC</see>.</param>
133+
/// <param name="info">A pointer to <see cref="XrEyeGeometricDataInfoHTC">XrEyeGeometricDataInfoHTC</see> structure.</param>
134+
/// <param name="eyeGeometricData">A pointer to <see cref="XrEyeGeometricDataHTC">XrEyeGeometricDataHTC</see> returned by the runtime.</param>
135+
/// <returns>XR_SUCCESS for success.</returns>
136+
public static XrResult xrGetEyeGeometricDataHTC(XrEyeTrackerHTC eyeTracker,
137+
XrEyeGeometricDataInfoHTC info,
138+
out XrEyeGeometricDataHTC eyeGeometricData)
139+
{
140+
return Interop.xrGetEyeGeometricDataHTC(eyeTracker,info, out eyeGeometricData);
141+
}
142+
}
143+
}

com.htc.upm.vive.openxr/Runtime/Profiles/XR_HTC_eye_tracker.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
// ===================== 2022 HTC Corporation. All Rights Reserved. ===================
2+
3+
using UnityEngine;
4+
5+
using UnityEngine.XR.OpenXR;
6+
7+
using VIVE.OpenXR.EyeTracker;
8+
9+
10+
namespace VIVE.OpenXR
11+
{
12+
public class XR_HTC_eye_tracker_impls : XR_HTC_eye_tracker_defs
13+
{
14+
const string LOG_TAG = "VIVE.OpenXR.XR_HTC_eye_tracker_impls";
15+
void DEBUG(string msg) { Debug.Log(LOG_TAG + " " + msg); }
16+
17+
private ViveEyeTracker feature = null;
18+
private void ASSERT_FEATURE()
19+
{
20+
if (feature == null) { feature = OpenXRSettings.Instance.GetFeature<ViveEyeTracker>(); }
21+
}
22+
23+
public override XrResult xrCreateEyeTrackerHTC(XrEyeTrackerCreateInfoHTC createInfo, out XrEyeTrackerHTC eyeTracker)
24+
{
25+
DEBUG("xrCreateEyeTrackerHTC");
26+
XrResult result = XrResult.XR_ERROR_VALIDATION_FAILURE;
27+
eyeTracker = 0;
28+
29+
ASSERT_FEATURE();
30+
if (feature)
31+
{
32+
result = (XrResult)feature.CreateEyeTracker(createInfo, out XrEyeTrackerHTC value);
33+
if (result == XrResult.XR_SUCCESS) { eyeTracker = value; }
34+
}
35+
return result;
36+
}
37+
public override XrResult xrDestroyEyeTrackerHTC(XrEyeTrackerHTC eyeTracker)
38+
{
39+
DEBUG("xrDestroyEyeTrackerHTC");
40+
41+
ASSERT_FEATURE();
42+
if (feature) { return (XrResult)feature.DestroyEyeTracker(eyeTracker); }
43+
44+
return XrResult.XR_ERROR_VALIDATION_FAILURE;
45+
}
46+
public override XrResult xrGetEyeGazeDataHTC(XrEyeTrackerHTC eyeTracker, XrEyeGazeDataInfoHTC gazeInfo, out XrEyeGazeDataHTC eyeGazes)
47+
{
48+
eyeGazes = m_eyeGazes;
49+
XrResult result = XrResult.XR_ERROR_VALIDATION_FAILURE;
50+
51+
ASSERT_FEATURE();
52+
if (feature)
53+
{
54+
result = (XrResult)feature.GetEyeGazeData(eyeTracker, gazeInfo, out XrEyeGazeDataHTC gazes);
55+
if (result == XrResult.XR_SUCCESS) { eyeGazes = gazes; }
56+
}
57+
return result;
58+
}
59+
60+
public override bool GetEyeGazeData(out XrSingleEyeGazeDataHTC[] out_gazes)
61+
{
62+
out_gazes = m_eyeGazes.gaze;
63+
bool result = false;
64+
65+
ASSERT_FEATURE();
66+
if (feature)
67+
{
68+
result = feature.GetEyeGazeData(out XrSingleEyeGazeDataHTC[] data);
69+
if (result) out_gazes = data;
70+
}
71+
return result;
72+
}
73+
74+
public override XrResult xrGetEyePupilDataHTC(XrEyeTrackerHTC eyeTracker, XrEyePupilDataInfoHTC pupilDataInfo, out XrEyePupilDataHTC pupilData)
75+
{
76+
pupilData = m_pupilData;
77+
XrResult result = XrResult.XR_ERROR_VALIDATION_FAILURE;
78+
79+
ASSERT_FEATURE();
80+
if (feature)
81+
{
82+
result = (XrResult)feature.GetEyePupilData(eyeTracker, pupilDataInfo, out XrEyePupilDataHTC data);
83+
if (result == XrResult.XR_SUCCESS) { pupilData = data; }
84+
}
85+
return result;
86+
}
87+
88+
public override bool GetEyePupilData(out XrSingleEyePupilDataHTC[] pupilData)
89+
{
90+
pupilData = m_pupilData.pupilData;
91+
bool result = false;
92+
93+
ASSERT_FEATURE();
94+
if (feature)
95+
{
96+
result = feature.GetEyePupilData(out XrSingleEyePupilDataHTC[] data);
97+
if (result) pupilData = data;
98+
}
99+
return result;
100+
}
101+
public override XrResult xrGetEyeGeometricDataHTC(XrEyeTrackerHTC eyeTracker,
102+
XrEyeGeometricDataInfoHTC info,
103+
out XrEyeGeometricDataHTC eyeGeometricData)
104+
{
105+
eyeGeometricData = m_eyeGeometricData;
106+
XrResult result = XrResult.XR_ERROR_VALIDATION_FAILURE;
107+
108+
ASSERT_FEATURE();
109+
if (feature)
110+
{
111+
result = (XrResult)feature.GetEyeGeometricData(eyeTracker, info, out XrEyeGeometricDataHTC geometricData);
112+
if (result == XrResult.XR_SUCCESS) { eyeGeometricData = geometricData; }
113+
}
114+
return result;
115+
}
116+
117+
118+
public override bool GetEyeGeometricData(out XrSingleEyeGeometricDataHTC[] geometricData)
119+
{
120+
geometricData = m_eyeGeometricData.eyeGeometricData;
121+
bool result = false;
122+
123+
ASSERT_FEATURE();
124+
if (feature)
125+
{
126+
result = feature.GetEyeGeometricData(out XrSingleEyeGeometricDataHTC[] data);
127+
if (result) geometricData = data;
128+
}
129+
return result;
130+
}
131+
}
132+
}

com.htc.upm.vive.openxr/Runtime/Profiles/XR_HTC_eye_tracker_impls.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)