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
Branches
Tags
No related merge requests found
...@@ -22,17 +22,26 @@ bool USFGazeTracker::Tick(float DeltaTime) ...@@ -22,17 +22,26 @@ bool USFGazeTracker::Tick(float DeltaTime)
TimeSinceLastEyeDataGather = 0.0f; TimeSinceLastEyeDataGather = 0.0f;
if(bEyeTrackingStarted) if(bEyeTrackingStarted && !bIsAsyncEyeTrackingTaskRunning)
{ {
#ifdef WITH_SRANIPAL #ifdef WITH_SRANIPAL
ViveSR::anipal::Eye::GetEyeData_v2(&SranipalEyeData); bIsAsyncEyeTrackingTaskRunning = true;
bDataLogged = false; 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 #endif
} }
return true; return true;
} }
void USFGazeTracker::Init(EGazeTrackerMode Mode, bool IgnoreNonGazeTargetActors, float DataGatheringsPerSecond) void USFGazeTracker::Init(EGazeTrackerMode Mode, bool IgnoreNonGazeTargetActors, float DataGatheringsPerSecond)
{ {
bIgnoreNonGazeTargetActors = IgnoreNonGazeTargetActors; bIgnoreNonGazeTargetActors = IgnoreNonGazeTargetActors;
...@@ -238,6 +247,13 @@ float USFGazeTracker::GetPupilDiameter() ...@@ -238,6 +247,13 @@ float USFGazeTracker::GetPupilDiameter()
return 0.0f; return 0.0f;
} }
void USFGazeTracker::OnEyeTrackingDataReceived(ViveSR::anipal::Eye::EyeData_v2 EyeData)
{
bIsAsyncEyeTrackingTaskRunning = false;
SranipalEyeData = EyeData;
bDataLogged = false;
}
FGazeRay USFGazeTracker::GetSranipalGazeRayFromData() FGazeRay USFGazeTracker::GetSranipalGazeRayFromData()
{ {
FGazeRay GazeRay; FGazeRay GazeRay;
......
#pragma once #pragma once
#include "CoreMinimal.h" #include "CoreMinimal.h"
#include "Async/Async.h"
#ifdef WITH_SRANIPAL #ifdef WITH_SRANIPAL
#include "Eye/SRanipal_API_Eye.h" #include "Eye/SRanipal_API_Eye.h"
...@@ -9,6 +9,11 @@ ...@@ -9,6 +9,11 @@
#include "SFGazeTracker.generated.h" #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() UENUM()
enum class EGazeTrackerMode : uint8 enum class EGazeTrackerMode : uint8
{ {
...@@ -76,13 +81,17 @@ public: ...@@ -76,13 +81,17 @@ public:
bool bDebugRenderRayTraces = false; bool bDebugRenderRayTraces = false;
#ifdef WITH_SRANIPAL
FOnEyeTrackingDataReceived& OnEyeTrackingDataReceived;
void OnEyeTrackingDataReceived(ViveSR::anipal::Eye::EyeData_v2 EyeData);
#endif
private: private:
FGazeRay GetSranipalGazeRayFromData(); FGazeRay GetSranipalGazeRayFromData();
bool bEyeTrackingStarted = false; bool bEyeTrackingStarted = false;
bool bIsAsyncEyeTrackingTaskRunning = false;
bool bIgnoreNonGazeTargetActors = false; bool bIgnoreNonGazeTargetActors = false;
UPROPERTY() UPROPERTY()
TArray<AActor*> ActorsToIgnore; TArray<AActor*> ActorsToIgnore;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment