- Home /
Capture screenshot async for GEAR VR
Hello,
I'm trying to take 3 screenshots of an object in a GEAR VR application.
In the phone it freezes the whole application for more than 6 seconds.
The code to take screenshot is this:
private IEnumerator SaveScreenshot_RenderToTexAsynch(string filePath) {
//Wait for graphics to render
yield return new WaitForEndOfFrame();
RenderTexture rt = new RenderTexture(Screen.width, Screen.height, 24);
Texture2D screenShot = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
Camera.main.targetTexture = rt;
Camera.main.Render();
RenderTexture.active = rt;
screenShot.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
Camera.main.targetTexture = null;
RenderTexture.active = null; //Added to avoid errors
Destroy(rt);
//Split the process up
yield return 0;
byte[] bytes = screenShot.EncodeToPNG();
File.WriteAllBytes(filePath, bytes);
}
The code works fine.
On Editor the freeze is unnoticeable (Freeze Time ~= 0.5 seconds).
On my S6 phone the freeze is 2 seconds/per image ( Freeze Time > 6 seconds).
I'm only using a camera to render so that might be a problem, the solution I was trying was to use 2 cameras, one for render and one to display a loading screen, but the freeze affects the whole application not a specific camera.
I need an async method for the render camera to take the screenshot in background and fire an event when it's done so I can use the .png file for later.
Do you have an idea how can I solve this problem ? I'm in desperate need for a solution because it's for my bachelor's degree project, I can reference your help in my project.
P.S: This is a similar problem I found but offers no code example or references.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Android obfuscator 1 Answer
How do I change an UI image dynamically? 3 Answers