12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- #if ZED_HDRP || ZED_URP
- using UnityEngine.Rendering;
- #endif
- [RequireComponent(typeof(Camera))]
- public class CopyToSurface : MonoBehaviour
- {
-
-
-
- [Tooltip("2D Raw Image object that you can have the camera output copied to.")]
- public RawImage canvasRawImage;
-
-
-
- [Tooltip("3D Renderer that will have its mainTexture set to the camera texture.")]
- public Renderer worldRenderer;
-
-
-
-
- [Tooltip("If worldRenderer is set, this is the name of the texture property that will be set with the camera image.\r\n\n" +
- "'_MainTex' works for most Standard render pipeline materials, '_BaseMap' works for most lit URP materials and '_BaseColorMap' for lit HDRP materials.")]
- #if !ZED_HDRP && !ZED_URP
- public string rendererTextureProperty = "_MainTex";
- #elif ZED_URP
- public string rendererTextureProperty = "_BaseMap";
- #elif ZED_HDRP
- public string rendererTextureProperty = "_BaseColorMap";
- #endif
- private Camera cam;
- private RenderTexture copyTexture;
-
- void Start()
- {
- cam = GetComponent<Camera>();
- #if !ZED_URP
- copyTexture = new RenderTexture(cam.pixelWidth, cam.pixelHeight, 0);
- #else
- copyTexture = new RenderTexture(cam.pixelWidth, cam.pixelHeight, 0, UnityEngine.Experimental.Rendering.GraphicsFormat.B10G11R11_UFloatPack32);
- #endif
- copyTexture.Create();
- if (canvasRawImage) canvasRawImage.texture = copyTexture;
- if (worldRenderer) worldRenderer.material.SetTexture(rendererTextureProperty, copyTexture);
- #if ZED_HDRP || ZED_URP
- RenderPipelineManager.beginFrameRendering += SRPStartDraw;
- RenderPipelineManager.endFrameRendering += SRPEndDraw;
- #endif
- }
- #if !ZED_HDRP && !ZED_URP
- private void OnRenderImage(RenderTexture source, RenderTexture destination)
- {
- Graphics.Blit(source, copyTexture);
- Graphics.Blit(source, destination);
- }
- #else
- private void SRPStartDraw(ScriptableRenderContext context, Camera[] rendcam)
- {
- cam.targetTexture = copyTexture;
- }
- private void SRPEndDraw(ScriptableRenderContext context, Camera[] rendcam)
- {
- cam.targetTexture = null;
- Graphics.Blit(copyTexture, (RenderTexture)null);
- }
- #endif
- private void OnApplicationQuit()
- {
- if (copyTexture) copyTexture.Release();
- #if ZED_HDRP || ZED_URP
- RenderPipelineManager.beginFrameRendering -= SRPStartDraw;
- RenderPipelineManager.endFrameRendering -= SRPEndDraw;
- #endif
- }
- }
|