/// <summary> /// Starts this instance. /// </summary> private void Start() { if (this.OnConfigureVrModeParms != null) { this.OnConfigureVrModeParms(); } #if UNITY_ANDROID && !UNITY_EDITOR MiHMD.EyeParameter leftEyeDesc = this.Hmd.GetEyeParameter(Eyes.Left); Vector2 resolution = leftEyeDesc.Resolution; SetEyeParms((int)resolution.x, (int)resolution.y); this.InitRenderThread(); #endif }
/// <summary> /// Configures the camera. /// </summary> /// <param name="eye">The eye.</param> /// <returns>the camera relate to the eye</returns> private Camera ConfigureCamera(Eyes eye) { if (eye == Eyes.Center) { Camera centerEye = this.CenterEyeTransform.GetComponent <Camera>(); // Clearing nothing to make sure the output image is not affected by this camera this.CenterEyeCamera.clearFlags = CameraClearFlags.Nothing; return(centerEye); } Transform anchor = eye == Eyes.Left ? this.LeftEyeTransform : this.RightEyeTransform; Camera cam = anchor.GetComponent <Camera>(); #if UNITY_ANDROID && !UNITY_EDITOR MiHMD.EyeParameter eyeDesc = VrManager.Instance.Hmd.GetEyeParameter(eye); cam.fieldOfView = eyeDesc.Fov.y; cam.aspect = eyeDesc.Resolution.x / eyeDesc.Resolution.y; cam.rect = new Rect(0f, 0f, 1.0f, 1.0f); cam.targetTexture = VrManager.Instance.Hmd.GetEyeSceneTexture(eye); cam.hdr = VrManager.Instance.IsHdrEnabled; // Enforce camera render order cam.depth = (eye == Eyes.Left) ? (int)PluginEvents.LeftEyeEndFrame : (int)PluginEvents.RightEyeEndFrame; // AA is documented to have no effect in deferred, but it causes black screens. if (cam.actualRenderingPath == RenderingPath.DeferredLighting) { QualitySettings.antiAliasing = 0; } #elif UNITY_EDITOR || UNITY_STANDALONE_WIN cam.fieldOfView = 97.5f; if (eye == Eyes.Left) { cam.rect = new Rect(0.0f, 0.0f, 0.5f, 1.0f); } else { cam.rect = new Rect(0.5f, 0.0f, 0.5f, 1.0f); } cam.targetTexture = MiEmulation.Instance.StereoRT; cam.hdr = VrManager.Instance.IsHdrEnabled; cam.depth = 0; if (cam.actualRenderingPath == RenderingPath.DeferredLighting || cam.actualRenderingPath == RenderingPath.DeferredShading) { QualitySettings.antiAliasing = 0; } cam.enabled = true; #endif // Gaze cursor render to a different texture. #if UNITY_ANDROID && !UNITY_EDITOR Camera[] gazeGameras = new Camera[] { this.LeftEyeGazeCursorCamera, this.RightEyeGazeCursorCamera }; Camera gazeCamera = gazeGameras[(int)eye]; cam.cullingMask &= ~reticleLayerMask; if (gazeCamera) { gazeCamera.clearFlags = CameraClearFlags.SolidColor; gazeCamera.backgroundColor = Color.clear; gazeCamera.cullingMask = reticleLayerMask; gazeCamera.orthographic = cam.orthographic; gazeCamera.orthographicSize = cam.orthographicSize; gazeCamera.aspect = cam.aspect; gazeCamera.fieldOfView = cam.fieldOfView; gazeCamera.nearClipPlane = cam.nearClipPlane; gazeCamera.farClipPlane = cam.farClipPlane; gazeCamera.rect = cam.rect; // make sure gazeCamera render before scene camera. gazeCamera.depth = cam.depth - 1; gazeCamera.renderingPath = cam.renderingPath; gazeCamera.hdr = cam.hdr; gazeCamera.targetTexture = VrManager.Instance.Hmd.GetEyeGazeTexture(eye); } #endif return(cam); }