summaryrefslogtreecommitdiffstats
path: root/LibOVR/Src/OVR_Profile.h
diff options
context:
space:
mode:
Diffstat (limited to 'LibOVR/Src/OVR_Profile.h')
-rw-r--r--LibOVR/Src/OVR_Profile.h186
1 files changed, 186 insertions, 0 deletions
diff --git a/LibOVR/Src/OVR_Profile.h b/LibOVR/Src/OVR_Profile.h
new file mode 100644
index 0000000..bfd8ea9
--- /dev/null
+++ b/LibOVR/Src/OVR_Profile.h
@@ -0,0 +1,186 @@
+/************************************************************************************
+
+PublicHeader: OVR.h
+Filename : OVR_Profile.h
+Content : Structs and functions for loading and storing device profile settings
+Created : February 14, 2013
+Notes :
+ Profiles are used to store per-user settings that can be transferred and used
+ across multiple applications. For example, player IPD can be configured once
+ and reused for a unified experience across games. Configuration and saving of profiles
+ can be accomplished in game via the Profile API or by the official Oculus Configuration
+ Utility.
+
+Copyright : Copyright 2013 Oculus VR, Inc. All Rights reserved.
+
+Use of this software is subject to the terms of the Oculus license
+agreement provided at the time of installation or download, or which
+otherwise accompanies this software in either electronic or hard copy form.
+
+************************************************************************************/
+
+#ifndef OVR_Profile_h
+#define OVR_Profile_h
+
+#include "Kernel/OVR_String.h"
+#include "Kernel/OVR_RefCount.h"
+#include "Kernel/OVR_Array.h"
+
+namespace OVR {
+
+// Defines the profile object for each device type
+enum ProfileType
+{
+ Profile_Unknown = 0,
+ Profile_RiftDK1 = 1,
+ Profile_RiftDKHD = 2,
+};
+
+class Profile;
+
+// -----------------------------------------------------------------------------
+// ***** ProfileManager
+
+// Profiles are interfaced through a ProfileManager object. Applications should
+// create a ProfileManager each time they intend to read or write user profile data.
+// The scope of the ProfileManager object defines when disk I/O is performed. Disk
+// reads are performed on the first profile access and disk writes are performed when
+// the ProfileManager goes out of scope. All profile interactions between these times
+// are performed in local memory and are fast. A typical profile interaction might
+// look like this:
+//
+// {
+// Ptr<ProfileManager> pm = *ProfileManager::Create();
+// Ptr<Profile> profile = pm->LoadProfile(Profile_RiftDK1,
+// pm->GetDefaultProfileName(Profile_RiftDK1));
+// if (profile)
+// { // Retrieve the current profile settings
+// }
+// } // Profile will be destroyed and any disk I/O completed when going out of scope
+
+class ProfileManager : public RefCountBase<ProfileManager>
+{
+protected:
+ // Synchronize ProfileManager access since it may be accessed from multiple threads,
+ // as it's shared through DeviceManager.
+ Lock ProfileLock;
+ Array<Ptr<Profile> > ProfileCache;
+ ProfileType CacheDevice;
+ String DefaultProfile;
+ bool Changed;
+ char NameBuff[32];
+
+public:
+ static ProfileManager* Create();
+
+ // Static interface functions
+ int GetProfileCount(ProfileType device);
+ const char* GetProfileName(ProfileType device, unsigned int index);
+ bool HasProfile(ProfileType device, const char* name);
+ Profile* LoadProfile(ProfileType device, unsigned int index);
+ Profile* LoadProfile(ProfileType device, const char* name);
+ Profile* GetDeviceDefaultProfile(ProfileType device);
+ const char* GetDefaultProfileName(ProfileType device);
+ bool SetDefaultProfileName(ProfileType device, const char* name);
+ bool Save(const Profile* profile);
+ bool Delete(const Profile* profile);
+
+protected:
+ ProfileManager();
+ ~ProfileManager();
+ void LoadCache(ProfileType device);
+ void SaveCache();
+ void ClearCache();
+ Profile* CreateProfileObject(const char* user,
+ ProfileType device,
+ const char** device_name);
+};
+
+//-------------------------------------------------------------------
+// ***** Profile
+
+// The base profile for all HMD devices. This object is never created directly.
+// Instead derived objects provide specific data implementations. Some settings
+// such as IPD will be tied to a specific user and be consistent between ,
+// implementations but other settings like optical distortion may vary between devices.
+
+class Profile : public RefCountBase<Profile>
+{
+public:
+ enum { MaxNameLen = 32 };
+
+ enum GenderType
+ {
+ Gender_Unspecified = 0,
+ Gender_Male = 1,
+ Gender_Female = 2
+ };
+
+ ProfileType Type; // The type of device profile
+ char Name[MaxNameLen]; // The name given to this profile
+
+protected:
+ GenderType Gender; // The gender of the user
+ float PlayerHeight; // The height of the user in meters
+ float IPD; // Distance between eyes in meters
+
+public:
+ // These are properties which are intrinsic to the user and affect scene setup
+ GenderType GetGender() { return Gender; };
+ float GetPlayerHeight() { return PlayerHeight; };
+ float GetIPD() { return IPD; };
+ float GetEyeHeight();
+
+ void SetGender(GenderType gender) { Gender = gender; };
+ void SetPlayerHeight(float height) { PlayerHeight = height; };
+ void SetIPD(float ipd) { IPD = ipd; };
+
+
+protected:
+ Profile(ProfileType type, const char* name);
+
+ virtual Profile* Clone() const = 0;
+ virtual bool ParseProperty(const char* prop, const char* sval);
+
+ friend class ProfileManager;
+};
+
+
+//-----------------------------------------------------------------------------
+// ***** RiftDK1Profile
+
+// This profile is specific to the Rift Dev Kit 1 and contains overrides specific
+// to that device and lens cup settings.
+class RiftDK1Profile : public Profile
+{
+public:
+ enum EyeCupType
+ {
+ EyeCup_A = 0,
+ EyeCup_B = 1,
+ EyeCup_C = 2
+ };
+
+protected:
+ EyeCupType EyeCups; // Which eye cup does the player use
+ int LL; // Configuration Utility IPD setting
+ int LR; // Configuration Utility IPD setting
+ int RL; // Configuration Utility IPD setting
+ int RR; // Configuration Utility IPD setting
+
+public:
+ EyeCupType GetEyeCup() { return EyeCups; };
+ void SetEyeCup(EyeCupType cup) { EyeCups = cup; };
+
+protected:
+ RiftDK1Profile(const char* name);
+
+ virtual Profile* Clone() const;
+ virtual bool ParseProperty(const char* prop, const char* sval);
+
+ friend class ProfileManager;
+};
+
+}
+
+#endif // OVR_Profile_h \ No newline at end of file