public static void MapAdvancedData(TobiiXR_AdvancedEyeTrackingData to, ref tobii_wearable_advanced_data_t data, bool convergenceDistanceSupported, Vector3 headToCenterEyeTranslation) { to.SystemTimestamp = data.timestamp_system_us; to.DeviceTimestamp = data.timestamp_tracker_us; FillGazeRayFrom(ref to.Left.GazeRay, data.left.gaze_origin_validity, data.left.gaze_origin_mm_xyz, data.left.gaze_direction_validity, data.left.gaze_direction_normalized_xyz, headToCenterEyeTranslation); FillGazeRayFrom(ref to.Right.GazeRay, data.right.gaze_origin_validity, data.right.gaze_origin_mm_xyz, data.right.gaze_direction_validity, data.right.gaze_direction_normalized_xyz, headToCenterEyeTranslation); FillGazeRayFrom(ref to.GazeRay, data.gaze_origin_combined_validity, data.gaze_origin_combined_mm_xyz, data.gaze_direction_combined_validity, data.gaze_direction_combined_normalized_xyz, headToCenterEyeTranslation); if (convergenceDistanceSupported) { to.ConvergenceDistance = data.convergence_distance_mm / 1000f; to.ConvergenceDistanceIsValid = BoolFromValidity(data.convergence_distance_validity); } to.Left.IsBlinking = data.left.blink == tobii_state_bool_t.TOBII_STATE_BOOL_TRUE || !BoolFromValidity(data.left.blink_validity); to.Right.IsBlinking = data.right.blink == tobii_state_bool_t.TOBII_STATE_BOOL_TRUE || !BoolFromValidity(data.right.blink_validity); to.Left.PupilDiameterValid = BoolFromValidity(data.left.pupil_diameter_validity); to.Left.PupilDiameter = data.left.pupil_diameter_mm; to.Right.PupilDiameterValid = BoolFromValidity(data.right.pupil_diameter_validity); to.Right.PupilDiameter = data.right.pupil_diameter_mm; to.Left.PositionGuideValid = BoolFromValidity(data.left.position_guide_validity); to.Left.PositionGuide.x = data.left.position_guide_xy.x; to.Left.PositionGuide.y = data.left.position_guide_xy.y; to.Right.PositionGuideValid = BoolFromValidity(data.right.position_guide_validity); to.Right.PositionGuide.y = data.right.position_guide_xy.y; to.Right.PositionGuide.x = data.right.position_guide_xy.x; }
private static void OnAdvancedWearableData(ref tobii_wearable_advanced_data_t data, IntPtr userData) { var gch = GCHandle.FromIntPtr(userData); var t = (WearableAdvancedDataCallback)gch.Target; t.Invoke(ref data); }
private void OnAdvancedWearableData(ref tobii_wearable_advanced_data_t data) { lock (_lockAdvancedData) { var advancedData = _advancedInternalQueue.Count >= AdvancedDataQueueSize ? _advancedInternalQueue.Dequeue() : new TobiiXR_AdvancedEyeTrackingData(); StreamEngineDataMapper.MapAdvancedData(advancedData, ref data, _streamEngineTracker.ConvergenceDistanceSupported, _headToCenterEyeTranslation); _advancedInternalQueue.Enqueue(advancedData); } // Also fill in consumer api lock (_lockEyeTrackingDataLocal) { StreamEngineDataMapper.FromAdvancedData(_eyeTrackingDataLocalInternal, ref data, _streamEngineTracker.ConvergenceDistanceSupported, _headToCenterEyeTranslation); } lock (_lockPositionGuideData) { StreamEngineDataMapper.FillPositionGuideData(ref _positionGuideData, ref data); } }
public static void FromAdvancedData(TobiiXR_EyeTrackingData to, ref tobii_wearable_advanced_data_t data, bool convergenceDistanceSupported, Vector3 headToCenterEyeTranslation) { FillGazeRayFrom(ref to.GazeRay, data.gaze_origin_combined_validity, data.gaze_origin_combined_mm_xyz, data.gaze_direction_combined_validity, data.gaze_direction_combined_normalized_xyz, headToCenterEyeTranslation); if (convergenceDistanceSupported) { to.ConvergenceDistance = data.convergence_distance_mm / 1000f; to.ConvergenceDistanceIsValid = BoolFromValidity(data.convergence_distance_validity); } to.IsLeftEyeBlinking = data.left.blink == tobii_state_bool_t.TOBII_STATE_BOOL_TRUE || !BoolFromValidity(data.left.blink_validity); to.IsRightEyeBlinking = data.right.blink == tobii_state_bool_t.TOBII_STATE_BOOL_TRUE || !BoolFromValidity(data.right.blink_validity); }
private void OnAdvancedWearableData(ref tobii_wearable_advanced_data_t data) { var advancedData = _advancedData.Count >= AdvancedDataQueueSize ? _advancedData.Dequeue() : new TobiiXR_AdvancedEyeTrackingData(); StreamEngineDataMapper.MapAdvancedData(advancedData, ref data, _streamEngineTracker.ConvergenceDistanceSupported, CoordinatesHelper.GetHeadToCenterEyeTranslation()); _advancedData.Enqueue(advancedData); // Keep a copy of latest received value EyeTrackingDataHelper.Copy(advancedData, _advancedEyeTrackingData); // Also fill in consumer api StreamEngineDataMapper.FromAdvancedData(_eyeTrackingDataLocal, ref data, _streamEngineTracker.ConvergenceDistanceSupported, CoordinatesHelper.GetHeadToCenterEyeTranslation()); _eyeTrackingDataLocal.Timestamp = Time.unscaledTime; }
public static void FillPositionGuideData(ref PositionGuideData to, ref tobii_wearable_advanced_data_t data) { FillPositionGuideData(ref to, data.left.position_guide_xy, data.left.position_guide_validity, data.right.position_guide_xy, data.right.position_guide_validity); }