Files
VIVE-OpenXR-Unity/com.htc.upm.vive.openxr/Runtime/Profiles/XR_HTC_facial_tracking_impls.cs
2023-09-14 18:17:47 +08:00

72 lines
2.5 KiB
C#

// ===================== 2022 HTC Corporation. All Rights Reserved. ===================
using UnityEngine;
using UnityEngine.XR.OpenXR;
using VIVE.OpenXR.FacialTracking;
namespace VIVE.OpenXR
{
public class XR_HTC_facial_tracking_impls : XR_HTC_facial_tracking_defs
{
const string LOG_TAG = "VIVE.OpenXR.Android.XR_HTC_facial_tracking_impls";
void DEBUG(string msg) { Debug.Log(LOG_TAG + " " + msg); }
private ViveFacialTracking feature = null;
private void ASSERT_FEATURE() {
if (feature == null) { feature = OpenXRSettings.Instance.GetFeature<ViveFacialTracking>(); }
}
public override XrResult xrCreateFacialTrackerHTC(XrFacialTrackerCreateInfoHTC createInfo, out ulong facialTracker)
{
DEBUG("xrCreateFacialTrackerHTC");
XrResult result = XrResult.XR_ERROR_VALIDATION_FAILURE;
facialTracker = 0;
ASSERT_FEATURE();
if (feature)
{
result = (XrResult)feature.CreateFacialTracker(createInfo, out XrFacialTrackerHTC value);
if (result == XrResult.XR_SUCCESS) { facialTracker = value; }
}
return result;
}
public override XrResult xrDestroyFacialTrackerHTC(ulong facialTracker)
{
DEBUG("xrDestroyFacialTrackerHTC");
ASSERT_FEATURE();
if (feature) { return (XrResult)feature.DestroyFacialTracker(facialTracker); }
return XrResult.XR_ERROR_VALIDATION_FAILURE;
}
public override XrResult xrGetFacialExpressionsHTC(ulong facialTracker, out XrFacialExpressionsHTC facialExpressions)
{
InitializeFacialExpressions();
facialExpressions = m_FacialExpressions;
XrResult result = XrResult.XR_ERROR_VALIDATION_FAILURE;
ASSERT_FEATURE();
if (feature)
{
result = (XrResult)feature.GetFacialExpressions(facialTracker, out XrFacialExpressionsHTC exps);
if (result == XrResult.XR_SUCCESS) { facialExpressions = exps; }
}
return result;
}
public override bool GetExpressionWeightings(XrFacialTrackingTypeHTC facialTrackingType, out float[] expressionWeightings)
{
ASSERT_FEATURE();
if (feature) { return feature.GetFacialExpressions((XrFacialTrackingTypeHTC)facialTrackingType, out expressionWeightings); }
expressionWeightings = s_ExpressionWeightings[facialTrackingType];
return false;
}
}
}