From d9a584844a60542519d813b5dc1a62428f14a0ae Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Thu, 19 Jun 2014 17:03:28 +0200 Subject: Add OculusSDK 0.3.2 Linux Source Code w/o Samples, docs or binaries (libs or tools) --- LibOVR/Src/OVR_Profile.h | 203 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 LibOVR/Src/OVR_Profile.h (limited to 'LibOVR/Src/OVR_Profile.h') diff --git a/LibOVR/Src/OVR_Profile.h b/LibOVR/Src/OVR_Profile.h new file mode 100644 index 0000000..e34820a --- /dev/null +++ b/LibOVR/Src/OVR_Profile.h @@ -0,0 +1,203 @@ +/************************************************************************************ + +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 2014 Oculus VR, Inc. All Rights reserved. + +Licensed under the Oculus VR Rift SDK License Version 3.1 (the "License"); +you may not use the Oculus VR Rift SDK except in compliance with the License, +which is provided at the time of installation or download, or which +otherwise accompanies this software in either electronic or hard copy form. + +You may obtain a copy of the License at + +http://www.oculusvr.com/licenses/LICENSE-3.1 + +Unless required by applicable law or agreed to in writing, the Oculus VR SDK +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +************************************************************************************/ + +#ifndef OVR_Profile_h +#define OVR_Profile_h + +#include "OVR_DeviceConstants.h" +#include "Kernel/OVR_String.h" +#include "Kernel/OVR_RefCount.h" +#include "Kernel/OVR_Array.h" +#include "Kernel/OVR_StringHash.h" + +namespace OVR { + +class Profile; +class DeviceBase; +class JSON; + +// ----------------------------------------------------------------------------- +// ***** 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 pm = *ProfileManager::Create(); +// Ptr 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 +{ +protected: + // Synchronize ProfileManager access since it may be accessed from multiple threads, + // as it's shared through DeviceManager. + Lock ProfileLock; + Ptr ProfileCache; + bool Changed; + String TempBuff; + +public: + static ProfileManager* Create(); + + int GetUserCount(); + const char* GetUser(unsigned int index); + bool CreateUser(const char* user, const char* name); + bool RemoveUser(const char* user); + const char* GetDefaultUser(const DeviceBase* device); + bool SetDefaultUser(const DeviceBase* device, const char* user); + + virtual Profile* CreateProfile(); + Profile* GetProfile(const DeviceBase* device, const char* user); + Profile* GetDefaultProfile(const DeviceBase* device); + Profile* GetTaggedProfile(const char** key_names, const char** keys, int num_keys); + bool SetTaggedProfile(const char** key_names, const char** keys, int num_keys, Profile* profile); + + bool GetDeviceTags(const DeviceBase* device, String& product, String& serial); + +protected: + ProfileManager(); + ~ProfileManager(); + String GetProfilePath(bool create_dir); + void LoadCache(bool create); + void ClearCache(); + void LoadV1Profiles(JSON* v1); + + +}; + + +//------------------------------------------------------------------- +// ***** Profile + +// The base profile for all users. This object is not created directly. +// Instead derived device objects provide add specific device members to +// the base profile +class Profile : public RefCountBase +{ +protected: + OVR::Hash ValMap; + OVR::Array Values; + OVR::String TempVal; + +public: + ~Profile(); + + int GetNumValues(const char* key) const; + const char* GetValue(const char* key); + char* GetValue(const char* key, char* val, int val_length) const; + bool GetBoolValue(const char* key, bool default_val) const; + int GetIntValue(const char* key, int default_val) const; + float GetFloatValue(const char* key, float default_val) const; + int GetFloatValues(const char* key, float* values, int num_vals) const; + double GetDoubleValue(const char* key, double default_val) const; + int GetDoubleValues(const char* key, double* values, int num_vals) const; + + void SetValue(const char* key, const char* val); + void SetBoolValue(const char* key, bool val); + void SetIntValue(const char* key, int val); + void SetFloatValue(const char* key, float val); + void SetFloatValues(const char* key, const float* vals, int num_vals); + void SetDoubleValue(const char* key, double val); + void SetDoubleValues(const char* key, const double* vals, int num_vals); + + bool Close(); + +protected: + Profile() {}; + + + void SetValue(JSON* val); + + + static bool LoadProfile(const DeviceBase* device, + const char* user, + Profile** profile); + void CopyItems(JSON* root, String prefix); + + bool LoadDeviceFile(unsigned int device_id, const char* serial); + bool LoadDeviceProfile(const DeviceBase* device); + + bool LoadProfile(JSON* root, + const char* user, + const char* device_model, + const char* device_serial); + + bool LoadUser(JSON* root, + const char* user, + const char* device_name, + const char* device_serial); + + + friend class ProfileManager; +}; + +// # defined() check for CAPI compatibility near term that re-defines these +// for now. To be unified. +#if !defined(OVR_KEY_USER) + +#define OVR_KEY_USER "User" +#define OVR_KEY_NAME "Name" +#define OVR_KEY_GENDER "Gender" +#define OVR_KEY_PLAYER_HEIGHT "PlayerHeight" +#define OVR_KEY_EYE_HEIGHT "EyeHeight" +#define OVR_KEY_IPD "IPD" +#define OVR_KEY_NECK_TO_EYE_DISTANCE "NeckEyeDistance" +#define OVR_KEY_EYE_RELIEF_DIAL "EyeReliefDial" +#define OVR_KEY_EYE_TO_NOSE_DISTANCE "EyeToNoseDist" +#define OVR_KEY_MAX_EYE_TO_PLATE_DISTANCE "MaxEyeToPlateDist" +#define OVR_KEY_EYE_CUP "EyeCup" +#define OVR_KEY_CUSTOM_EYE_RENDER "CustomEyeRender" + +#define OVR_DEFAULT_GENDER "Male" +#define OVR_DEFAULT_PLAYER_HEIGHT 1.778f +#define OVR_DEFAULT_EYE_HEIGHT 1.675f +#define OVR_DEFAULT_IPD 0.064f +#define OVR_DEFAULT_NECK_TO_EYE_HORIZONTAL 0.09f +#define OVR_DEFAULT_NECK_TO_EYE_VERTICAL 0.15f +#define OVR_DEFAULT_EYE_RELIEF_DIAL 3 + +#endif // OVR_KEY_USER + +String GetBaseOVRPath(bool create_dir); + +} + +#endif // OVR_Profile_h \ No newline at end of file -- cgit v1.2.3