private gvr_value_type GetPropertyValueType(gvr_property_type propertyType)
        {
            gvr_value_type propType = gvr_value_type.None;

            switch (propertyType)
            {
            case gvr_property_type.TrackingFloorHeight:
                propType = gvr_value_type.Float;
                break;

            case gvr_property_type.RecenterTransform:
                propType = gvr_value_type.Mat4f;
                break;

            case gvr_property_type.SafetyRegion:
                propType = gvr_value_type.Int;
                break;

            case gvr_property_type.SafetyCylinderInnerRadius:
                propType = gvr_value_type.Float;
                break;

            case gvr_property_type.SafetyCylinderOuterRadius:
                propType = gvr_value_type.Float;
                break;
            }

            return(propType);
        }
        /// Returns true if a property was available and retrieved.
        private bool _GvrGetProperty(gvr_property_type propertyType, GvrValue valueOut)
        {
            gvr_value_type valueType = GetPropertyValueType(propertyType);

            if (valueType == gvr_value_type.None)
            {
                Debug.LogError("Unknown gvr property " + propertyType + ".  Unable to type check.");
            }

            if (gvrPropertiesPtr == IntPtr.Zero)
            {
                try
                {
                    gvrPropertiesPtr = gvr_get_current_properties(gvrContextPtr);
                }
                catch (EntryPointNotFoundException)
                {
                    Debug.LogError("GvrHeadset not supported by this version of Unity. " +
                                   "Support starts in 5.6.3p3 and 2017.1.1p1.");
                    throw;
                }
            }

            if (gvrPropertiesPtr == IntPtr.Zero)
            {
                return(false);
            }

            // Assumes that gvr_properties_get (C API) will only ever return
            // GvrErrorType.None or GvrErrorType.NoEventAvailable.
            bool success =
                (GvrErrorType.None ==
                 (GvrErrorType)gvr_properties_get(gvrPropertiesPtr, propertyType, valueOut.BufferPtr));

            if (success)
            {
                valueOut.Parse();
                success = (valueType == gvr_value_type.None || valueOut.TypeEnum == valueType);
                if (!success)
                {
                    Debug.LogError("GvrGetProperty " + propertyType + " type mismatch, expected "
                                   + valueType + " got " + valueOut.TypeEnum);
                }
            }

            return(success);
        }