private static extern void ovrHmd_GetRenderScaleAndOffset(ovrFovPort fov, ovrSizei textureSize, ovrRecti renderViewport, [MarshalAs(UnmanagedType.LPArray, SizeConst = 2)] [Out] out ovrVector2f[] uvScaleOffsetOut);
internal ovrHmdDesc(ovrHmdDesc_Raw raw) { this.Handle = raw.Handle; this.Type = (ovrHmdType)raw.Type; this.ProductName = Marshal.PtrToStringAnsi(raw.ProductName); this.Manufacturer = Marshal.PtrToStringAnsi(raw.Manufacturer); this.VendorId = raw.VendorId; this.ProductId = raw.ProductId; this.SerialNumber = raw.SerialNumber; this.FirmwareMajor = raw.FirmwareMajor; this.FirmwareMinor = raw.FirmwareMinor; this.CameraFrustumHFovInRadians = raw.CameraFrustumHFovInRadians; this.CameraFrustumVFovInRadians = raw.CameraFrustumVFovInRadians; this.CameraFrustumNearZInMeters = raw.CameraFrustumNearZInMeters; this.CameraFrustumFarZInMeters = raw.CameraFrustumFarZInMeters; this.HmdCaps = raw.HmdCaps; this.TrackingCaps = raw.TrackingCaps; this.DistortionCaps = raw.DistortionCaps; this.Resolution = raw.Resolution; this.WindowsPos = raw.WindowsPos; this.DefaultEyeFov = new ovrFovPort[2] { raw.DefaultEyeFov_0, raw.DefaultEyeFov_1 }; this.MaxEyeFov = new ovrFovPort[2] { raw.MaxEyeFov_0, raw.MaxEyeFov_1 }; this.EyeRenderOrder = new ovrEyeType[2] { ovrEyeType.ovrEye_Left, ovrEyeType.ovrEye_Right }; this.DisplayDeviceName = Marshal.PtrToStringAnsi(raw.DisplayDeviceName); this.DisplayId = raw.DisplayId; }
// Computes updated 'uvScaleOffsetOut' to be used with a distortion if render target size or // viewport changes after the fact. This can be used to adjust render size every frame, if desired. public ovrVector2f[] GetRenderScaleAndOffset(ovrFovPort fov, ovrSizei textureSize, ovrRecti renderViewport) { ovrVector2f[] uvScaleOffsetOut; ovrHmd_GetRenderScaleAndOffset(fov, textureSize, renderViewport, out uvScaleOffsetOut); return uvScaleOffsetOut; }