Skip to content
Snippets Groups Projects
Commit f43363e8 authored by Malte Christian Kögel's avatar Malte Christian Kögel
Browse files

Attempted to execute getting the eye tracking data as an asynchronous task....

Attempted to execute getting the eye tracking data as an asynchronous task. Currently it does not compile, apparently the delegate is not defined correctly?
parent e61bf22c
No related branches found
No related tags found
No related merge requests found
......@@ -22,17 +22,26 @@ bool USFGazeTracker::Tick(float DeltaTime)
TimeSinceLastEyeDataGather = 0.0f;
if(bEyeTrackingStarted)
if(bEyeTrackingStarted && !bIsAsyncEyeTrackingTaskRunning)
{
#ifdef WITH_SRANIPAL
ViveSR::anipal::Eye::GetEyeData_v2(&SranipalEyeData);
bDataLogged = false;
bIsAsyncEyeTrackingTaskRunning = true;
ViveSR::anipal::Eye::EyeData_v2 TempEyeData;
AsyncTask(ENamedThreads::AnyThread, [TempEyeDataAddr = MoveTemp(&TempEyeData), OnEyeTrackingDataReceived]()
{
ViveSR::anipal::Eye::GetEyeData_v2(TempEyeDataAddr);
AsyncTask(ENamedThreads::GameThread, [TempEyeDataAddr = MoveTemp(TempEyeDataAddr), OnEyeTrackingDataReceived]() mutable
{
OnEyeTrackingDataReceived.ExecuteIfBound(*TempEyeDataAddr);
});
});
#endif
}
return true;
}
void USFGazeTracker::Init(EGazeTrackerMode Mode, bool IgnoreNonGazeTargetActors, float DataGatheringsPerSecond)
{
bIgnoreNonGazeTargetActors = IgnoreNonGazeTargetActors;
......@@ -238,6 +247,13 @@ float USFGazeTracker::GetPupilDiameter()
return 0.0f;
}
void USFGazeTracker::OnEyeTrackingDataReceived(ViveSR::anipal::Eye::EyeData_v2 EyeData)
{
bIsAsyncEyeTrackingTaskRunning = false;
SranipalEyeData = EyeData;
bDataLogged = false;
}
FGazeRay USFGazeTracker::GetSranipalGazeRayFromData()
{
FGazeRay GazeRay;
......
#pragma once
#include "CoreMinimal.h"
#include "Async/Async.h"
#ifdef WITH_SRANIPAL
#include "Eye/SRanipal_API_Eye.h"
......@@ -9,6 +9,11 @@
#include "SFGazeTracker.generated.h"
#ifdef WITH_SRANIPAL
//Use this to broadcast the data from async thread to game thread for logging
DECLARE_DYNAMIC_DELEGATE_OneParam(FOnEyeTrackingDataReceived, const ViveSR::anipal::Eye::EyeData_v2, EyeData);
#endif
UENUM()
enum class EGazeTrackerMode : uint8
{
......@@ -76,13 +81,17 @@ public:
bool bDebugRenderRayTraces = false;
#ifdef WITH_SRANIPAL
FOnEyeTrackingDataReceived& OnEyeTrackingDataReceived;
void OnEyeTrackingDataReceived(ViveSR::anipal::Eye::EyeData_v2 EyeData);
#endif
private:
FGazeRay GetSranipalGazeRayFromData();
bool bEyeTrackingStarted = false;
bool bIsAsyncEyeTrackingTaskRunning = false;
bool bIgnoreNonGazeTargetActors = false;
UPROPERTY()
TArray<AActor*> ActorsToIgnore;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment