//private long frameCount = 0; IEnumerator EndOfFrame() { //frameCount = 0; MojingLog.LogTrace("Enter Mojing.EndOfFrame thread"); while (true) { yield return(new WaitForEndOfFrame()); if ((!bWaitForMojingWord) && VRModeEnabled && NeedDistortion) { LCamera.Render(); RCamera.Render(); if (MojingSDK.Unity_IsATW_ON() || m_bResetTextureId) { int iFrameIndex = 0; if (MojingSDK.Unity_IsATW_ON()) { iFrameIndex = MojingSDK.Unity_ATW_GetModelFrameIndex(); MojingLog.LogTrace("ATW: get iFrameIndex = " + iFrameIndex); } int tID = (int)MojingRender.StereoScreen[iFrameIndex * 2].GetNativeTexturePtr(); int sID = (int)MojingRender.StereoScreen[iFrameIndex * 2 + 1].GetNativeTexturePtr(); IntPtr tID_Metal = MojingRender.StereoScreen[iFrameIndex * 2].colorBuffer.GetNativeRenderBufferPtr(); IntPtr sID_Metal = MojingRender.StereoScreen[iFrameIndex * 2 + 1].colorBuffer.GetNativeRenderBufferPtr(); if (tID == 0 || sID == 0 || tID_Metal == IntPtr.Zero || sID_Metal == IntPtr.Zero) { // Skip a frame, the old texture id is invalid and no new texture id to use //MojingLog.LogTrace("Skip a frame since texture id is zero: " + tID + "," + sID); m_bResetTextureId = true; } else { if (_Last_left_TextureID != tID || _Last_right_TextureID != sID) { _Last_left_TextureID = tID; _Last_right_TextureID = sID; } if (_Last_left_TextureID_Metal != tID_Metal || _Last_right_TextureID_Metal != sID_Metal) { _Last_left_TextureID_Metal = tID_Metal; _Last_right_TextureID_Metal = sID_Metal; } //MojingLog.LogTrace("Set Texture ID: " + _Last_left_TextureID + "," + _Last_right_TextureID); #if UNITY_EDITOR || UNITY_STANDALONE_WIN || UNITY_ANDROID if (MojingSDK.Unity_IsATW_ON() || MojingSDK.Unity_IsInterFBRPlatform()) { MojingSDK.ATW_SetTextureID(_Last_left_TextureID, _Last_right_TextureID, headView); } else { MojingSDK.SetTextureID(_Last_left_TextureID, _Last_right_TextureID); } #elif UNITY_IOS if (SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Metal) { MojingSDK.SetTextureID_Metal(tID_Metal, sID_Metal); } else { MojingSDK.SetTextureID(tID, sID); } #endif MojingSDK.Unity_DistortFrame(); if (!MojingSDK.Unity_IsATW_ON() && --m_ResetCount == 0) { m_bResetTextureId = false; } } } else { //MojingLog.LogTrace("Read Texture ID = " + tID + ", " + sID + " while set Texture ID: " + _Last_left_TextureID + "," + _Last_right_TextureID); #if UNITY_EDITOR || UNITY_STANDALONE_WIN || UNITY_ANDROID if (MojingSDK.Unity_IsATW_ON() || MojingSDK.Unity_IsInterFBRPlatform()) { MojingSDK.ATW_SetTextureID(_Last_left_TextureID, _Last_right_TextureID, headView); } else { MojingSDK.SetTextureID(_Last_left_TextureID, _Last_right_TextureID); } #elif UNITY_IOS if (SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Metal) { MojingSDK.SetTextureID_Metal(_Last_left_TextureID_Metal, _Last_right_TextureID_Metal); } else { MojingSDK.SetTextureID(_Last_left_TextureID, _Last_right_TextureID); } #endif MojingSDK.Unity_DistortFrame(); } } } //MojingLog.LogTrace("Leave Mojing.EndOfFrame thread"); }