mirror of
https://github.com/litruv/TobiiEyetracking.git
synced 2026-07-25 11:16:10 +10:00
Added Tobii from 4.23 + updated
This commit is contained in:
497
ThirdParty/GameIntegration/include/tobii_gameintegration.h
vendored
Normal file
497
ThirdParty/GameIntegration/include/tobii_gameintegration.h
vendored
Normal file
@@ -0,0 +1,497 @@
|
||||
#pragma once
|
||||
|
||||
#define TGI_VERSION_MAJOR 4
|
||||
#define TGI_VERSION_MINOR 1
|
||||
#define TGI_VERSION_REVISION 0
|
||||
|
||||
#ifdef _WIN64
|
||||
#ifdef _DEBUG
|
||||
const char g_DllName[] = "tobii_gameintegration_x64_d.dll";
|
||||
#else
|
||||
const char g_DllName[] = "tobii_gameintegration_x64.dll";
|
||||
#endif
|
||||
#else
|
||||
#ifdef _DEBUG
|
||||
const char g_DllName[] = "tobii_gameintegration_x86_d.dll";
|
||||
#else
|
||||
const char g_DllName[] = "tobii_gameintegration_x86.dll";
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(GAME_INTEGRATION_EXPORT)
|
||||
# define TGI_TYPE_EXPORT __declspec(dllexport)
|
||||
# define TGI_C_EXPORT extern "C" __declspec(dllexport)
|
||||
#else
|
||||
# define TGI_TYPE_EXPORT
|
||||
# define TGI_C_EXPORT
|
||||
#endif
|
||||
|
||||
#include <cstdint>
|
||||
#include <assert.h>
|
||||
|
||||
namespace TobiiGameIntegration
|
||||
{
|
||||
struct ITobiiGameIntegrationApi;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
// Please, specify a full, real game name, not a code name for the game.
|
||||
// Example: "Assassin's Creed Origins"
|
||||
|
||||
TGI_C_EXPORT ITobiiGameIntegrationApi* __cdecl GetApi(const char* fullGameName, int majorVersion, int minorVersion, int revision);
|
||||
TGI_C_EXPORT ITobiiGameIntegrationApi* __cdecl GetApiDynamic(const char* fullGameName, const char* dllPath, int majorVersion, int minorVersion, int revision);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
inline ITobiiGameIntegrationApi* GetApi(const char* fullGameName)
|
||||
{
|
||||
return GetApi(fullGameName, TGI_VERSION_MAJOR, TGI_VERSION_MINOR, TGI_VERSION_REVISION);
|
||||
}
|
||||
|
||||
inline ITobiiGameIntegrationApi* GetApiDynamic(const char* fullGameName, const char* dllPath)
|
||||
{
|
||||
return GetApiDynamic(fullGameName, dllPath, TGI_VERSION_MAJOR, TGI_VERSION_MINOR, TGI_VERSION_REVISION);
|
||||
}
|
||||
|
||||
inline ITobiiGameIntegrationApi* GetApiDynamic(const char* fullGameName)
|
||||
{
|
||||
return GetApiDynamic(fullGameName, nullptr, TGI_VERSION_MAJOR, TGI_VERSION_MINOR, TGI_VERSION_REVISION);
|
||||
}
|
||||
|
||||
/* Common types */
|
||||
|
||||
struct TGI_TYPE_EXPORT Vector2d
|
||||
{
|
||||
float X;
|
||||
float Y;
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT Vector3d
|
||||
{
|
||||
float X;
|
||||
float Y;
|
||||
float Z;
|
||||
};
|
||||
|
||||
enum class HMDValidityFlags
|
||||
{
|
||||
LeftEyeIsValid = 1 << 0,
|
||||
RightEyeIsValid = 1 << 1
|
||||
};
|
||||
inline HMDValidityFlags operator |(HMDValidityFlags a, HMDValidityFlags b) { return static_cast<HMDValidityFlags>(static_cast<uint32_t>(a) | static_cast<uint32_t>(b)); }
|
||||
inline HMDValidityFlags& operator |=(HMDValidityFlags &a, HMDValidityFlags b) { return a = a | b; }
|
||||
inline HMDValidityFlags operator &(HMDValidityFlags a, HMDValidityFlags b) { return static_cast<HMDValidityFlags>(static_cast<uint32_t>(a) & static_cast<uint32_t>(b)); }
|
||||
inline HMDValidityFlags& operator &=(HMDValidityFlags& a, HMDValidityFlags b) { return a = a & b; }
|
||||
|
||||
struct TGI_TYPE_EXPORT EyeInfo
|
||||
{
|
||||
EyeInfo() :
|
||||
GazeOriginMM{ 0.0f, 0.0f, 0.0f },
|
||||
GazeDirection{ 0.0f, 0.0f, 0.0f },
|
||||
PupilPosition{ 0.0f, 0.0f },
|
||||
EyeOpenness(0.0f)
|
||||
{ }
|
||||
|
||||
Vector3d GazeOriginMM;
|
||||
Vector3d GazeDirection;
|
||||
Vector2d PupilPosition;
|
||||
float EyeOpenness;
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT HMDGaze
|
||||
{
|
||||
HMDGaze() :
|
||||
Timestamp(0xDEADBEEF),
|
||||
Validity(HMDValidityFlags::LeftEyeIsValid & HMDValidityFlags::RightEyeIsValid),
|
||||
Counter(0),
|
||||
LedMode(0),
|
||||
LeftEyeInfo(),
|
||||
RightEyeInfo()
|
||||
{ }
|
||||
|
||||
int64_t Timestamp;
|
||||
HMDValidityFlags Validity;
|
||||
uint32_t Counter;
|
||||
uint32_t LedMode;
|
||||
EyeInfo LeftEyeInfo;
|
||||
EyeInfo RightEyeInfo;
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT Quaternion
|
||||
{
|
||||
float X;
|
||||
float Y;
|
||||
float Z;
|
||||
float W;
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT Rectangle
|
||||
{
|
||||
int32_t Left;
|
||||
int32_t Top;
|
||||
int32_t Right;
|
||||
int32_t Bottom;
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT Dimensions
|
||||
{
|
||||
int32_t Width;
|
||||
int32_t Height;
|
||||
};
|
||||
|
||||
enum UnitType
|
||||
{
|
||||
SignedNormalized = 0, // Gaze point, signed normalized, client window bottom, left = (-1, -1), client window top, right = (1, 1)
|
||||
Normalized, // Gaze point, unsigned normalized, client window bottom, left = (0, 0), client window top, right = (1, 1)
|
||||
Mm, // Gaze point, mm, client window bottom, left = (0, 0), client window top, right = (window_width_mm, window_height_mm)
|
||||
Pixels, // Gaze point, pixel, client window bottom, left = (0, 0), client window top, right = (window_width_pixels, window_height_pixels)
|
||||
NumberOfUnitTypes // Use for looping, array allocation etc
|
||||
};
|
||||
|
||||
|
||||
/* Eye tracking specific types */
|
||||
|
||||
struct TGI_TYPE_EXPORT GazePoint
|
||||
{
|
||||
int64_t TimeStampMicroSeconds;
|
||||
float X;
|
||||
float Y;
|
||||
|
||||
GazePoint()
|
||||
: TimeStampMicroSeconds(0)
|
||||
, X(0.0f)
|
||||
, Y(0.0f)
|
||||
{ }
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT Rotation
|
||||
{
|
||||
float Yaw; // Clockwise rotation about the down vector, the angle increases when turning your head right
|
||||
float Pitch; // Clockwise rotation about the right vector, the angle increases when turning your head up
|
||||
float Roll; // Clockwise rotation about the forward vector, the angle increases when tilting your head to the right
|
||||
|
||||
Rotation()
|
||||
: Yaw(0.0f)
|
||||
, Pitch(0.0f)
|
||||
, Roll(0.0f)
|
||||
{ }
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT Position
|
||||
{
|
||||
float X; // Increases when moving your head to the right
|
||||
float Y; // Increases when moving your head up
|
||||
float Z; // Increases when moving away from the tracker
|
||||
|
||||
Position()
|
||||
: X(0.0f)
|
||||
, Y(0.0f)
|
||||
, Z(0.0f)
|
||||
{ }
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT Transformation
|
||||
{
|
||||
Rotation Rotation;
|
||||
Position Position;
|
||||
|
||||
Transformation()
|
||||
: Rotation()
|
||||
, Position()
|
||||
{ }
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT HeadPose : Transformation
|
||||
{
|
||||
int64_t TimeStampMicroSeconds;
|
||||
|
||||
HeadPose()
|
||||
: TimeStampMicroSeconds(0)
|
||||
{ }
|
||||
};
|
||||
|
||||
enum HeadViewType
|
||||
{
|
||||
None = 0,
|
||||
Direct = 1,
|
||||
Dynamic = 2
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT SensitivityGradientSettings
|
||||
{
|
||||
float Scale; // Gradient curve for sensitivity settings
|
||||
float Exponent;
|
||||
float InflectionPoint;
|
||||
float StartPoint;
|
||||
float EndPoint;
|
||||
|
||||
SensitivityGradientSettings()
|
||||
: Scale(1.0f)
|
||||
, Exponent(1.0f)
|
||||
, InflectionPoint(0.5f)
|
||||
, StartPoint(0.0f)
|
||||
, EndPoint(1.0f)
|
||||
{ }
|
||||
|
||||
SensitivityGradientSettings(float scale, float exponent, float inflectionPoint, float startPoint, float endPoint)
|
||||
: Scale(scale),
|
||||
Exponent(exponent),
|
||||
InflectionPoint(inflectionPoint),
|
||||
StartPoint(startPoint),
|
||||
EndPoint(endPoint)
|
||||
{ }
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT HeadViewAutoCenterSettings
|
||||
{
|
||||
bool IsEnabled;
|
||||
float NormalizeFasterGazeDeadZoneNormalized;
|
||||
float ExtendedViewAngleFasterDeadZoneDegrees;
|
||||
float MaxDistanceFromMasterCm;
|
||||
float MaxAngularDistanceDegrees;
|
||||
float FasterNormalizationFactor;
|
||||
float PositionCompensationSpeed;
|
||||
float RotationCompensationSpeed;
|
||||
|
||||
HeadViewAutoCenterSettings()
|
||||
: IsEnabled(true),
|
||||
NormalizeFasterGazeDeadZoneNormalized(0.35f),
|
||||
ExtendedViewAngleFasterDeadZoneDegrees(10.0f),
|
||||
MaxDistanceFromMasterCm(5.0f),
|
||||
MaxAngularDistanceDegrees(15.0f),
|
||||
FasterNormalizationFactor(100.0f),
|
||||
PositionCompensationSpeed(0.01f),
|
||||
RotationCompensationSpeed(0.01f)
|
||||
{ }
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT ExtendedViewSettings
|
||||
{
|
||||
HeadViewType HeadViewType;
|
||||
|
||||
float AspectRatioCorrectionFactor;
|
||||
float HeadViewPitchCorrectionFactor;
|
||||
|
||||
SensitivityGradientSettings GazeViewSensitivityGradientSettings;
|
||||
float GazeViewResponsiveness;
|
||||
float NormalizedGazeViewMinimumExtensionAngle;
|
||||
float NormalizedGazeViewExtensionAngle;
|
||||
|
||||
SensitivityGradientSettings HeadViewSensitivityGradientSettings;
|
||||
float HeadViewResponsiveness;
|
||||
HeadViewAutoCenterSettings HeadViewAutoCenter;
|
||||
|
||||
ExtendedViewSettings()
|
||||
: HeadViewType(HeadViewType::Direct)
|
||||
, AspectRatioCorrectionFactor(1.0f)
|
||||
, HeadViewPitchCorrectionFactor(1.5f)
|
||||
, GazeViewSensitivityGradientSettings(0.5f, 2.25f, 0.8f, 0.0f, 1.0f)
|
||||
, GazeViewResponsiveness(0.5f)
|
||||
, NormalizedGazeViewMinimumExtensionAngle(0.05f) // This is the minimal maximum eview angle from the gaze component. Normalized rotations (so 0.05 => 0.05 * 360 = 18 degrees)
|
||||
, NormalizedGazeViewExtensionAngle(NormalizedGazeViewMinimumExtensionAngle) // This is the maximum extension angle you can achieve with the gaze component.
|
||||
, HeadViewSensitivityGradientSettings(0.65f, 1.25f, 0.5f, 0.0f, 1.0f)
|
||||
, HeadViewResponsiveness(1.0f)
|
||||
|
||||
{ }
|
||||
|
||||
ExtendedViewSettings(const ExtendedViewSettings &other)
|
||||
{
|
||||
*this = other;
|
||||
}
|
||||
};
|
||||
|
||||
// This will generate enum Feature and corresponding FeatureNames array
|
||||
#define FOREACH_FEATURE(FEATURE) \
|
||||
FEATURE(AutoPause)\
|
||||
FEATURE(CharacterAwareness)\
|
||||
FEATURE(EnvironmentalAwareness)\
|
||||
FEATURE(EyeContact)\
|
||||
FEATURE(ObjectAwareness)\
|
||||
FEATURE(BungeeZoom)\
|
||||
FEATURE(ZoomAtGaze)\
|
||||
FEATURE(CleanUI)\
|
||||
FEATURE(DirectionalSound)\
|
||||
FEATURE(DynamicDepthOfField)\
|
||||
FEATURE(DynamicLightAdaptation)\
|
||||
FEATURE(FlashlightControl)\
|
||||
FEATURE(PeripheralEffects)\
|
||||
FEATURE(AutoTurn)\
|
||||
FEATURE(ExtendedView)\
|
||||
FEATURE(FreeView)\
|
||||
FEATURE(AimAtGaze)\
|
||||
FEATURE(CoverAtGaze)\
|
||||
FEATURE(EnemyTagging)\
|
||||
FEATURE(InteractAtGaze)\
|
||||
FEATURE(ThrowAtGaze)\
|
||||
FEATURE(TeleportToGaze)\
|
||||
FEATURE(JumpAtGaze)\
|
||||
FEATURE(FireAtGaze)\
|
||||
FEATURE(SecondaryWeaponGaze)\
|
||||
FEATURE(PickUpAtGaze)\
|
||||
FEATURE(SelectAtGaze)\
|
||||
FEATURE(FoveatedRendering)\
|
||||
FEATURE(AvatarEyeMovements)\
|
||||
FEATURE(WheelMenu)\
|
||||
FEATURE(MenuNavigation)\
|
||||
FEATURE(CursorWarp)\
|
||||
FEATURE(CenterAtGaze)\
|
||||
|
||||
#define GENERATE_ENUM(ENUM) ENUM,
|
||||
#define GENERATE_STRING(STRING) #STRING,
|
||||
|
||||
enum class Feature {
|
||||
FOREACH_FEATURE(GENERATE_ENUM)
|
||||
AMOUNT_OF_FEATURES
|
||||
};
|
||||
|
||||
static char const* FeatureNames[] = {
|
||||
FOREACH_FEATURE(GENERATE_STRING)
|
||||
};
|
||||
|
||||
enum class TrackerType
|
||||
{
|
||||
None = 0,
|
||||
PC,
|
||||
HeadMountedDisplay
|
||||
};
|
||||
|
||||
enum class CapabilityFlags
|
||||
{
|
||||
None = 0,
|
||||
Presence = 1 << 0,
|
||||
Head = 1 << 1,
|
||||
Gaze = 1 << 2,
|
||||
Foveation = 1 << 3,
|
||||
EyeInfo = 1 << 4,
|
||||
HMD = 1 << 5
|
||||
};
|
||||
inline CapabilityFlags operator |(CapabilityFlags a, CapabilityFlags b) { return static_cast<CapabilityFlags>(static_cast<int>(a) | static_cast<int>(b)); }
|
||||
inline CapabilityFlags& operator |=(CapabilityFlags &a, CapabilityFlags b) { return a = a | b; }
|
||||
inline CapabilityFlags operator &(CapabilityFlags a, CapabilityFlags b) { return static_cast<CapabilityFlags>(static_cast<int>(a) & static_cast<int>(b)); }
|
||||
inline CapabilityFlags& operator &=(CapabilityFlags& a, CapabilityFlags b) { return a = a & b; }
|
||||
|
||||
struct TGI_TYPE_EXPORT AimAtGazeFilterSettings
|
||||
{
|
||||
AimAtGazeFilterSettings() :
|
||||
IsEnabled(false),
|
||||
DistanceThreshold(0.1f)
|
||||
{ }
|
||||
|
||||
bool IsEnabled;
|
||||
float DistanceThreshold;
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT ResponsiveFilterSettings
|
||||
{
|
||||
ResponsiveFilterSettings() :
|
||||
IsEnabled(false),
|
||||
Responsiveness(0.5f),
|
||||
StickinessDistance(0.1f)
|
||||
{ }
|
||||
|
||||
bool IsEnabled;
|
||||
float Responsiveness;
|
||||
float StickinessDistance;
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT TrackerInfo
|
||||
{
|
||||
TrackerInfo() :
|
||||
Type(TrackerType::None),
|
||||
Capabilities(CapabilityFlags::None),
|
||||
DisplayRectInOSCoordinates({ 0, 0, 0, 0}),
|
||||
DisplaySizeMm({ 0, 0 }),
|
||||
Url(nullptr),
|
||||
FriendlyName(nullptr),
|
||||
MonitorNameInOS(nullptr),
|
||||
ModelName(nullptr),
|
||||
Generation(nullptr),
|
||||
SerialNumber(nullptr),
|
||||
FirmwareVersion(nullptr),
|
||||
IsAttached(false)
|
||||
{ }
|
||||
|
||||
TrackerType Type;
|
||||
CapabilityFlags Capabilities;
|
||||
Rectangle DisplayRectInOSCoordinates;
|
||||
Dimensions DisplaySizeMm;
|
||||
const char* Url;
|
||||
const char* FriendlyName;
|
||||
const char* MonitorNameInOS;
|
||||
const char* ModelName;
|
||||
const char* Generation;
|
||||
const char* SerialNumber;
|
||||
const char* FirmwareVersion;
|
||||
bool IsAttached;
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT ITrackerController
|
||||
{
|
||||
virtual bool GetTrackerInfo(TrackerInfo& trackerInfo) = 0;
|
||||
virtual bool GetTrackerInfo(const char* url, TrackerInfo& trackerInfo) = 0;
|
||||
virtual void UpdateTrackerInfos() = 0;
|
||||
virtual bool GetTrackerInfos(const TrackerInfo*& trackerInfos, int& numberOfTrackerInfos) = 0;
|
||||
virtual bool TrackHMD() = 0;
|
||||
virtual bool TrackRectangle(const Rectangle& rectangle) = 0;
|
||||
virtual bool TrackWindow(void* windowHandle) = 0;
|
||||
virtual void StopTracking() = 0;
|
||||
virtual bool IsConnected() const = 0;
|
||||
virtual bool IsEnabled() const = 0;
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT IStreamsProvider
|
||||
{
|
||||
virtual bool GetLatestHeadPose(HeadPose& headPose) = 0;
|
||||
virtual bool GetLatestGazePoint(GazePoint& gazePoint) = 0;
|
||||
virtual int GetGazePoints(const GazePoint*& gazePoints) = 0;
|
||||
virtual int GetHeadPoses(const HeadPose*& headPoses) = 0;
|
||||
virtual bool GetLatestHMDGaze(HMDGaze& latestHMDGaze) = 0;
|
||||
virtual int GetHMDGaze(const HMDGaze*& hmdGaze) = 0;
|
||||
virtual bool IsPresent() = 0;
|
||||
virtual void ConvertGazePoint(const GazePoint& fromGazePoint, GazePoint& toGazePoint, UnitType fromUnit, UnitType toUnit) = 0;
|
||||
|
||||
virtual void SetAutoUnsubscribeForCapability(CapabilityFlags capability, float timeout) = 0;
|
||||
virtual void UnsetAutoUnsubscribeForCapability(CapabilityFlags capability) = 0;
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT IExtendedView
|
||||
{
|
||||
virtual Transformation GetTransformation() const = 0;
|
||||
virtual void UpdateSettings(const ExtendedViewSettings& settings) = 0;
|
||||
virtual void UpdateGazeOnlySettings(const ExtendedViewSettings& settings) = 0;
|
||||
virtual void UpdateHeadOnlySettings(const ExtendedViewSettings& settings) = 0;
|
||||
virtual void ResetDefaultHeadPose() = 0;
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT IFeatures
|
||||
{
|
||||
virtual IExtendedView* GetExtendedView() = 0;
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT IFilters
|
||||
{
|
||||
virtual const ResponsiveFilterSettings& GetResponsiveFilterSettings() const = 0;
|
||||
virtual void SetResponsiveFilterSettings(ResponsiveFilterSettings settings) = 0;
|
||||
virtual const AimAtGazeFilterSettings& GetAimAtGazeFilterSettings() const = 0;
|
||||
virtual void SetAimAtGazeFilterSettings(AimAtGazeFilterSettings settings) = 0;
|
||||
|
||||
virtual void GetResponsiveFilterGazePoint(GazePoint& gazePoint) const = 0;
|
||||
virtual void GetAimAtGazeFilterGazePoint(GazePoint& gazePoint, float &gazePointStability) const = 0;
|
||||
};
|
||||
|
||||
struct TGI_TYPE_EXPORT ITobiiGameIntegrationApi
|
||||
{
|
||||
virtual ITrackerController* GetTrackerController() = 0;
|
||||
virtual IStreamsProvider* GetStreamsProvider() = 0;
|
||||
virtual IFeatures* GetFeatures() = 0;
|
||||
virtual IFilters* GetFilters() = 0;
|
||||
|
||||
virtual bool IsInitialized() = 0;
|
||||
virtual void Update() = 0;
|
||||
virtual void Shutdown() = 0;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user