private void onAirXRMediaStreamStopped(AirXRServerMessage message) { onStopRender(); disableCameras(); _mediaStreamJustStopped = true; // StopCoroutine(_CallPluginEndOfFrame) executes the routine one more in the next frame after the call. // so use a flag to completely stop the routine. GL.IssuePluginEvent(AXRServerPlugin.ResetStreams_RenderThread_Func, AXRServerPlugin.RenderEventArg((uint)playerID)); inputStream.Stop(); }
private void onAirXRMediaStreamInitialized(AirXRServerMessage message) { Assert.IsNull(mediaStream); initializeCamerasForMediaStream(); AXRServerPlugin.SendCameraClipPlanes(playerID, cameras[0].nearClipPlane, cameras[0].farClipPlane); mediaStream = new AirXRServerMediaStream(playerID, _config, cameras.Length); GL.IssuePluginEvent(AXRServerPlugin.InitStreams_RenderThread_Func, AXRServerPlugin.RenderEventArg((uint)playerID)); inputStream.Init(); }
private void onAirXRMediaStreamCleanedUp(AirXRServerMessage message) { Assert.IsNotNull(mediaStream); inputStream.Cleanup(); GL.IssuePluginEvent(AXRServerPlugin.CleanupStreams_RenderThread_Func, AXRServerPlugin.RenderEventArg((uint)playerID)); mediaStream.Destroy(); mediaStream = null; foreach (Camera cam in cameras) { cam.targetTexture = null; } }
private IEnumerator CallPluginEndOfFrame() { yield return(new WaitForEndOfFrame()); Assert.IsNotNull(mediaStream); GL.IssuePluginEvent(AXRServerPlugin.EncodeVideoFrame_RenderThread_Func, AXRServerPlugin.RenderEventArg((uint)playerID, (uint)_viewNumber, (uint)mediaStream.currentFramebufferIndex)); // the first render event while (_mediaStreamJustStopped == false) { yield return(new WaitForEndOfFrame()); if (_mediaStreamJustStopped) { yield break; } else if (_encodeVideoFrameRequested) { Assert.IsNotNull(mediaStream); GL.IssuePluginEvent(AXRServerPlugin.EncodeVideoFrame_RenderThread_Func, AXRServerPlugin.RenderEventArg((uint)playerID, (uint)_viewNumber, (uint)mediaStream.currentFramebufferIndex)); _encodeVideoFrameRequested = false; } } }
public void OnPreRender() { if (bound) { GL.IssuePluginEvent(AXRServerPlugin.GameFrameRenderingStarted_RenderThread_Func, AXRServerPlugin.RenderEventArg((uint)_playerID, (uint)_viewNumber, 0)); } }