Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.24 KB | None | 0 0
  1. [RequireComponent(typeof(Camera))]
  2.     public class ScreenshotTool : MonoBehaviour, IAfterRender
  3.     {
  4.         public bool m_TakeScreenshot;
  5.         private GrabPass m_GrabPass;
  6.  
  7.         public ScriptableRenderPass GetPassToEnqueue()
  8.         {
  9.             if (m_GrabPass == null) m_GrabPass = new GrabPass();
  10.  
  11.             return m_GrabPass;
  12.         }
  13.  
  14.         private void Update()
  15.         {
  16.             if (m_TakeScreenshot && m_GrabPass != null)
  17.             {
  18.                 m_GrabPass.m_TakeScreenshot = true;
  19.                 m_TakeScreenshot = false;
  20.             }
  21.         }
  22.     }
  23.  
  24.     public class GrabPass : ScriptableRenderPass
  25.     {
  26.         public bool m_TakeScreenshot;
  27.  
  28.         public override void Execute(ScriptableRenderer renderer, ScriptableRenderContext context, ref RenderingData renderingData)
  29.         {
  30.             if (m_TakeScreenshot)
  31.             {
  32.                 CommandBuffer buffer = new CommandBuffer { name = "Screenshot" };
  33.  
  34.                 Camera camera = renderingData.cameraData.camera;
  35.                 RenderTextureDescriptor desc = ScriptableRenderer.CreateRenderTextureDescriptor(ref renderingData.cameraData);
  36.                 RenderTexture rt = new RenderTexture(desc);
  37.  
  38.                 buffer.Blit(BuiltinRenderTextureType.CurrentActive, new RenderTargetIdentifier(rt));
  39.  
  40.                 buffer.RequestAsyncReadback(rt, (AsyncGPUReadbackRequest obj) =>
  41.                 {
  42.                     ProcessScreenshot(obj, camera);
  43.                     Debug.Log("testing123");
  44.                 });
  45.  
  46.                 context.ExecuteCommandBuffer(buffer);
  47.  
  48.                 m_TakeScreenshot = false;
  49.             }
  50.         }
  51.  
  52.         private void ProcessScreenshot(AsyncGPUReadbackRequest request, Camera cam)
  53.         {
  54.             var rawData = request.GetData<Color32>();
  55.             Color32[] data = rawData.ToArray();
  56.  
  57.             Texture2D tex = new Texture2D(cam.pixelWidth, cam.pixelHeight);
  58.             tex.SetPixels32(data);
  59.             tex.Apply();
  60.  
  61.             string path = Path.Combine(UnityEngine.Application.persistentDataPath, "test.jpg");
  62.             File.WriteAllBytes(path, tex.EncodeToJPG());
  63.  
  64.             Debug.Log("Screenshot done");
  65.             Object.Destroy(tex);
  66.         }
  67.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement