Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [RequireComponent(typeof(Camera))]
- public class ScreenshotTool : MonoBehaviour, IAfterRender
- {
- public bool m_TakeScreenshot;
- private GrabPass m_GrabPass;
- public ScriptableRenderPass GetPassToEnqueue()
- {
- if (m_GrabPass == null) m_GrabPass = new GrabPass();
- return m_GrabPass;
- }
- private void Update()
- {
- if (m_TakeScreenshot && m_GrabPass != null)
- {
- m_GrabPass.m_TakeScreenshot = true;
- m_TakeScreenshot = false;
- }
- }
- }
- public class GrabPass : ScriptableRenderPass
- {
- public bool m_TakeScreenshot;
- public override void Execute(ScriptableRenderer renderer, ScriptableRenderContext context, ref RenderingData renderingData)
- {
- if (m_TakeScreenshot)
- {
- CommandBuffer buffer = new CommandBuffer { name = "Screenshot" };
- Camera camera = renderingData.cameraData.camera;
- RenderTextureDescriptor desc = ScriptableRenderer.CreateRenderTextureDescriptor(ref renderingData.cameraData);
- RenderTexture rt = new RenderTexture(desc);
- buffer.Blit(BuiltinRenderTextureType.CurrentActive, new RenderTargetIdentifier(rt));
- buffer.RequestAsyncReadback(rt, (AsyncGPUReadbackRequest obj) =>
- {
- ProcessScreenshot(obj, camera);
- Debug.Log("testing123");
- });
- context.ExecuteCommandBuffer(buffer);
- m_TakeScreenshot = false;
- }
- }
- private void ProcessScreenshot(AsyncGPUReadbackRequest request, Camera cam)
- {
- var rawData = request.GetData<Color32>();
- Color32[] data = rawData.ToArray();
- Texture2D tex = new Texture2D(cam.pixelWidth, cam.pixelHeight);
- tex.SetPixels32(data);
- tex.Apply();
- string path = Path.Combine(UnityEngine.Application.persistentDataPath, "test.jpg");
- File.WriteAllBytes(path, tex.EncodeToJPG());
- Debug.Log("Screenshot done");
- Object.Destroy(tex);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement