From 4207f9c279e832e3afcb3f5fc6cd8d84cb4cfe4c Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
Date: Sat, 28 Mar 2015 01:43:35 +0100
Subject: Bump OculusVR RIFT SDK to 0.5.0.1

---
 LibOVR/Src/Service/Service_NetSessionCommon.cpp | 276 ++++++++----------------
 1 file changed, 91 insertions(+), 185 deletions(-)

(limited to 'LibOVR/Src/Service/Service_NetSessionCommon.cpp')

diff --git a/LibOVR/Src/Service/Service_NetSessionCommon.cpp b/LibOVR/Src/Service/Service_NetSessionCommon.cpp
index ba2c773..4a9fda6 100644
--- a/LibOVR/Src/Service/Service_NetSessionCommon.cpp
+++ b/LibOVR/Src/Service/Service_NetSessionCommon.cpp
@@ -30,7 +30,8 @@ limitations under the License.
 namespace OVR { namespace Service {
 
 
-//// NetSessionCommon
+//-----------------------------------------------------------------------------
+// NetSessionCommon
 
 NetSessionCommon::NetSessionCommon() :
     Terminated(false)
@@ -57,14 +58,14 @@ NetSessionCommon::~NetSessionCommon()
         pRPC = NULL;
     }
 
-    Terminated = true;
+    Terminated.store(true, std::memory_order_relaxed);
 
     OVR_ASSERT(IsFinished());
 }
 
 void NetSessionCommon::onSystemDestroy()
 {
-    Terminated = true;
+    Terminated.store(true, std::memory_order_relaxed);
 
     Join();
 
@@ -73,93 +74,106 @@ void NetSessionCommon::onSystemDestroy()
 
 void NetSessionCommon::onThreadDestroy()
 {
-    Terminated = true;
+    Terminated.store(true, std::memory_order_relaxed);
     if (pSession)
     {
         pSession->Shutdown();
     }
 }
 
-void NetSessionCommon::SerializeHMDInfo(Net::BitStream *bitStream, HMDInfo* hmdInfo)
+template<typename T>
+static bool SerializeUInt32(bool write, Net::BitStream* bitStream, T& data)
 {
-    bitStream->Write(hmdInfo->ProductName);
-    bitStream->Write(hmdInfo->Manufacturer);
-
-    int32_t w = hmdInfo->Version;
-    bitStream->Write(w);
-
-    w = hmdInfo->HmdType;
-    bitStream->Write(w);
-
-    w = hmdInfo->ResolutionInPixels.w;
-    bitStream->Write(w);
-
-    w = hmdInfo->ResolutionInPixels.h;
-    bitStream->Write(w);
+    int32_t w = 0;
+    bool result = false;
 
-    w = hmdInfo->ShimInfo.DeviceNumber;
-    bitStream->Write(w);
+    if (write)
+    {
+        w = (int32_t)data;
+        result = bitStream->Serialize(write, w);
+    }
+    else
+    {
+        result = bitStream->Serialize(write, w);
+        data = (T)w;
+    }
 
-    w = hmdInfo->ShimInfo.NativeWidth;
-    bitStream->Write(w);
+    return result;
+}
 
-    w = hmdInfo->ShimInfo.NativeHeight;
-    bitStream->Write(w);
+static bool SerializeBool(bool write, Net::BitStream* bitStream, bool& data)
+{
+    uint8_t x = 0;
+    bool result = false;
 
-    w = hmdInfo->ShimInfo.Rotation;
-    bitStream->Write(w);
+    if (write)
+    {
+        x = data ? 1 : 0;
+        result = bitStream->Serialize(write, x);
+    }
+    else
+    {
+        result = bitStream->Serialize(write, x);
+        data = (x != 0);
+    }
 
-    bitStream->Write(hmdInfo->ScreenSizeInMeters.w);
-    bitStream->Write(hmdInfo->ScreenSizeInMeters.h);
-    bitStream->Write(hmdInfo->ScreenGapSizeInMeters);
-    bitStream->Write(hmdInfo->CenterFromTopInMeters);
-    bitStream->Write(hmdInfo->LensSeparationInMeters);
+    return result;
+}
 
-    w = hmdInfo->DesktopX;
-    bitStream->Write(w);
+bool NetSessionCommon::SerializeHMDInfo(Net::BitStream *bitStream, HMDInfo* hmdInfo, bool write)
+{
+    bool result = false;
 
-    w = hmdInfo->DesktopY;
-    bitStream->Write(w);
+    bitStream->Serialize(write, hmdInfo->ProductName);
+    bitStream->Serialize(write, hmdInfo->Manufacturer);
 
-    w = hmdInfo->Shutter.Type;
-    bitStream->Write(w);
+    SerializeUInt32(write, bitStream, hmdInfo->Version);
+    SerializeUInt32(write, bitStream, hmdInfo->HmdType);
+    SerializeUInt32(write, bitStream, hmdInfo->ResolutionInPixels.w);
+    SerializeUInt32(write, bitStream, hmdInfo->ResolutionInPixels.h);
+    SerializeUInt32(write, bitStream, hmdInfo->ShimInfo.DeviceNumber);
+    SerializeUInt32(write, bitStream, hmdInfo->ShimInfo.NativeWidth);
+    SerializeUInt32(write, bitStream, hmdInfo->ShimInfo.NativeHeight);
+    SerializeUInt32(write, bitStream, hmdInfo->ShimInfo.Rotation);
 
-    bitStream->Write(hmdInfo->Shutter.VsyncToNextVsync);
-    bitStream->Write(hmdInfo->Shutter.VsyncToFirstScanline);
-    bitStream->Write(hmdInfo->Shutter.FirstScanlineToLastScanline);
-    bitStream->Write(hmdInfo->Shutter.PixelSettleTime);
-    bitStream->Write(hmdInfo->Shutter.PixelPersistence);
-    bitStream->Write(hmdInfo->DisplayDeviceName);
+    bitStream->Serialize(write, hmdInfo->ScreenSizeInMeters.w);
+    bitStream->Serialize(write, hmdInfo->ScreenSizeInMeters.h);
+    bitStream->Serialize(write, hmdInfo->ScreenGapSizeInMeters);
+    bitStream->Serialize(write, hmdInfo->CenterFromTopInMeters);
+    bitStream->Serialize(write, hmdInfo->LensSeparationInMeters);
 
-    w = hmdInfo->DisplayId;
-    bitStream->Write(w);
+    SerializeUInt32(write, bitStream, hmdInfo->DesktopX);
+    SerializeUInt32(write, bitStream, hmdInfo->DesktopY);
+    SerializeUInt32(write, bitStream, hmdInfo->Shutter.Type);
 
-    bitStream->Write(hmdInfo->PrintedSerial);
+    bitStream->Serialize(write, hmdInfo->Shutter.VsyncToNextVsync);
+    bitStream->Serialize(write, hmdInfo->Shutter.VsyncToFirstScanline);
+    bitStream->Serialize(write, hmdInfo->Shutter.FirstScanlineToLastScanline);
+    bitStream->Serialize(write, hmdInfo->Shutter.PixelSettleTime);
+    bitStream->Serialize(write, hmdInfo->Shutter.PixelPersistence);
+    bitStream->Serialize(write, hmdInfo->DisplayDeviceName);
 
-    uint8_t b = hmdInfo->InCompatibilityMode ? 1 : 0;
-    bitStream->Write(b);
+    SerializeUInt32(write, bitStream, hmdInfo->DisplayId);
 
-    w = hmdInfo->VendorId;
-    bitStream->Write(w);
+    bitStream->Serialize(write, hmdInfo->PrintedSerial);
 
-    w = hmdInfo->ProductId;
-    bitStream->Write(w);
+    SerializeBool(write, bitStream, hmdInfo->InCompatibilityMode);
 
-    bitStream->Write(hmdInfo->CameraFrustumFarZInMeters);
-    bitStream->Write(hmdInfo->CameraFrustumHFovInRadians);
-    bitStream->Write(hmdInfo->CameraFrustumNearZInMeters);
-    bitStream->Write(hmdInfo->CameraFrustumVFovInRadians);
+    SerializeUInt32(write, bitStream, hmdInfo->VendorId);
+    SerializeUInt32(write, bitStream, hmdInfo->ProductId);
 
-    w = hmdInfo->FirmwareMajor;
-    bitStream->Write(w);
+    bitStream->Serialize(write, hmdInfo->CameraFrustumFarZInMeters);
+    bitStream->Serialize(write, hmdInfo->CameraFrustumHFovInRadians);
+    bitStream->Serialize(write, hmdInfo->CameraFrustumNearZInMeters);
+    bitStream->Serialize(write, hmdInfo->CameraFrustumVFovInRadians);
 
-    w = hmdInfo->FirmwareMinor;
-    bitStream->Write(w);
+    SerializeUInt32(write, bitStream, hmdInfo->FirmwareMajor);
+    SerializeUInt32(write, bitStream, hmdInfo->FirmwareMinor);
 
-    bitStream->Write(hmdInfo->PelOffsetR.x);
-    bitStream->Write(hmdInfo->PelOffsetR.y);
-    bitStream->Write(hmdInfo->PelOffsetB.x);
-    bitStream->Write(hmdInfo->PelOffsetB.y);
+    bitStream->Serialize(write, hmdInfo->PelOffsetR.x);
+    bitStream->Serialize(write, hmdInfo->PelOffsetR.y);
+    bitStream->Serialize(write, hmdInfo->PelOffsetB.x);
+    result = bitStream->Serialize(write, hmdInfo->PelOffsetB.y);
 
     // Important please read before modifying!
     // ----------------------------------------------------
@@ -167,138 +181,30 @@ void NetSessionCommon::SerializeHMDInfo(Net::BitStream *bitStream, HMDInfo* hmdI
     // Otherwise we will break backwards compatibility
     // and e.g. 0.4.4 runtime will not work with 0.4.3 SDK.
 
-    // Please also update the DeserializeHMDInfo() function
-    // below also and make sure that the members you added
-    // are initialized properly in the HMDInfo constructor.
-
     // Note that whenever new fields are added here you
     // should also update the minor version of the RPC
     // protocol in OVR_Session.h so that clients fail at
     // a version check instead of when this data is
     // found to be truncated from the server.
-}
-
-bool NetSessionCommon::DeserializeHMDInfo(Net::BitStream *bitStream, HMDInfo* hmdInfo)
-{
-    bitStream->Read(hmdInfo->ProductName);
-    bitStream->Read(hmdInfo->Manufacturer);
-
-    int32_t w = 0;
-    if (!bitStream->Read(w))
-    {
-        // This indicates that no HMD could be found
-        return false;
-    }
-    hmdInfo->Version = w;
-
-    bitStream->Read(w);
-    hmdInfo->HmdType = (HmdTypeEnum)w;
-
-    bitStream->Read(w);
-    hmdInfo->ResolutionInPixels.w = w;
-
-    bitStream->Read(w);
-    hmdInfo->ResolutionInPixels.h = w;
-
-    bitStream->Read(w);
-    hmdInfo->ShimInfo.DeviceNumber = w;
-
-    bitStream->Read(w);
-    hmdInfo->ShimInfo.NativeWidth = w;
-
-    bitStream->Read(w);
-    hmdInfo->ShimInfo.NativeHeight = w;
-
-    bitStream->Read(w);
-    hmdInfo->ShimInfo.Rotation = w;
-
-    bitStream->Read(hmdInfo->ScreenSizeInMeters.w);
-    bitStream->Read(hmdInfo->ScreenSizeInMeters.h);
-    bitStream->Read(hmdInfo->ScreenGapSizeInMeters);
-    bitStream->Read(hmdInfo->CenterFromTopInMeters);
-    bitStream->Read(hmdInfo->LensSeparationInMeters);
-
-    bitStream->Read(w);
-    hmdInfo->DesktopX = w;
-
-    bitStream->Read(w);
-    hmdInfo->DesktopY = w;
-
-    bitStream->Read(w);
-    hmdInfo->Shutter.Type = (HmdShutterTypeEnum)w;
-
-    bitStream->Read(hmdInfo->Shutter.VsyncToNextVsync);
-    bitStream->Read(hmdInfo->Shutter.VsyncToFirstScanline);
-    bitStream->Read(hmdInfo->Shutter.FirstScanlineToLastScanline);
-    bitStream->Read(hmdInfo->Shutter.PixelSettleTime);
-    bitStream->Read(hmdInfo->Shutter.PixelPersistence);
-    bitStream->Read(hmdInfo->DisplayDeviceName);
-
-    bitStream->Read(w);
-    hmdInfo->DisplayId = w;
-
-    bitStream->Read(hmdInfo->PrintedSerial);
-
-    uint8_t b = 0;
-    bitStream->Read(b);
-    hmdInfo->InCompatibilityMode = (b != 0);
-
-    bitStream->Read(w);
-    hmdInfo->VendorId = w;
-
-    bitStream->Read(w);
-    hmdInfo->ProductId = w;
-
-    bitStream->Read(hmdInfo->CameraFrustumFarZInMeters);
-    bitStream->Read(hmdInfo->CameraFrustumHFovInRadians);
-    bitStream->Read(hmdInfo->CameraFrustumNearZInMeters);
-    bitStream->Read(hmdInfo->CameraFrustumVFovInRadians);
-
-    bitStream->Read(w);
-    hmdInfo->FirmwareMajor = w;
-
-    if (!bitStream->Read(w))
-    {
-        OVR_ASSERT(false);
-        return false;
-    }
-    hmdInfo->FirmwareMinor = w;
-
-    bitStream->Read(hmdInfo->PelOffsetR.x);
-    bitStream->Read(hmdInfo->PelOffsetR.y);
-    bitStream->Read(hmdInfo->PelOffsetB.x);
-    if (!bitStream->Read(hmdInfo->PelOffsetB.y))
-    {
-        OVR_ASSERT(false);
-        return false;
-    }
-
-    // Important please read before modifying!
-    // ----------------------------------------------------
-    // Please add new serialized data to the end, here.
-    // Otherwise we will break backwards compatibility
-    // and e.g. 0.4.4 runtime will not work with 0.4.3 SDK.
-
-    // Be sure to check that the very last one read properly
-    // since HMD Info truncation should be caught here.
 
-    return true;
+    // The result of the final serialize should be returned to the caller.
+    return result;
 }
 
 // Prefix key names with this to pass through to server
 static const char* BypassPrefix = "server:";
 
 static const char* KeyNames[][NetSessionCommon::ENumTypes] = {
-    /* EGetStringValue */ { "CameraSerial", "CameraUUID", 0 },
-    /* EGetBoolValue */ { "ReleaseDK2Sensors", "ReleaseLegacySensors", 0 },
-    /* EGetIntValue */ { 0 },
-    /* EGetNumberValue */{ "CenterPupilDepth", "LoggingMask", 0 },
-    /* EGetNumberValues */{ "NeckModelVector3f", 0 },
-    /* ESetStringValue */ { 0 },
-    /* ESetBoolValue */ { "ReleaseDK2Sensors", "ReleaseLegacySensors", 0 },
-    /* ESetIntValue */ { 0 },
-    /* ESetNumberValue */{ "CenterPupilDepth", "LoggingMask", 0 },
-    /* ESetNumberValues */{ "NeckModelVector3f", 0 },
+    /* EGetStringValue */  { "CameraSerial", "CameraUUID", 0 },
+    /* EGetBoolValue */    { "ReleaseDK2Sensors", "ReleaseLegacySensors", 0 },
+    /* EGetIntValue */     { 0 },
+    /* EGetNumberValue */  { "CenterPupilDepth", "LoggingMask", 0 },
+    /* EGetNumberValues */ { "NeckModelVector3f", 0 },
+    /* ESetStringValue */  { 0 },
+    /* ESetBoolValue */    { "ReleaseDK2Sensors", "ReleaseLegacySensors", 0 },
+    /* ESetIntValue */     { 0 },
+    /* ESetNumberValue */  { "CenterPupilDepth", "LoggingMask", 0 },
+    /* ESetNumberValues */ { "NeckModelVector3f", 0 },
 };
 
 bool IsInStringArray(const char* a[], const char* key)
-- 
cgit v1.2.3