Files
AppleHillsProduction/Assets/External/SWAN Dev/ScreenshotHelper/Scripts/CameraOnUpdateRender.cs

80 lines
3.3 KiB
C#
Raw Normal View History

// Created by SwanDEV 2019
using UnityEngine;
public class CameraOnUpdateRender : CameraRenderBase
{
/// <summary>
/// [Camera capture methods Only] The anti-aliasing level for the resulting texture,
/// the greater value results in the edges of the image look smoother. Available value: 1(OFF), 2, 4, 8.
/// The greater value will increase the memory consumption for the result texture, please adjust the values as need.
/// (This value will not be applied if your project AntiAliasing level is enabled and greater)
/// </summary>
public int m_AntiAliasingLevel = 4;
private void Update()
{
OnUpdateRender();
}
private void OnUpdateRender()
{
if (_toDestroyScript) Destroy(this); // remove this script from the camera
if (!_toCapture) return;
_toCapture = false;
if (rCamera == null) rCamera = GetComponent<Camera>();
//Display display = Display.displays != null ? Display.displays[rCamera.targetDisplay] : null;
//int W = display != null ? display.renderingWidth : Screen.width;
//int H = display != null ? display.renderingHeight : Screen.height;
int W, H;
if (Display.displays != null && rCamera.targetDisplay < Display.displays.Length)
{
Display display = Display.displays[rCamera.targetDisplay];
W = display.renderingWidth;
H = display.renderingHeight;
}
else
{
W = rCamera.pixelWidth;
H = rCamera.pixelHeight;
}
RenderTexture renderTexture = new RenderTexture(W, H, 24);
m_AntiAliasingLevel = Mathf.Clamp(m_AntiAliasingLevel, 1, 8);
if (m_AntiAliasingLevel == 3 || m_AntiAliasingLevel == 5) m_AntiAliasingLevel = 4; else if (m_AntiAliasingLevel == 6 || m_AntiAliasingLevel == 7) m_AntiAliasingLevel = 8;
if (QualitySettings.antiAliasing < m_AntiAliasingLevel) renderTexture.antiAliasing = m_AntiAliasingLevel;
rCamera.targetTexture = renderTexture;
rCamera.Render();
rCamera.targetTexture = null;
bool customSize = _targetWidth > 0 && _targetHeight > 0;
bool subScreenCam = rCamera.rect.width < 1f || rCamera.rect.height < 1f || rCamera.rect.x > 0f || rCamera.rect.y > 0f;
if (subScreenCam || customSize || _scale != 1f)
{
int width = customSize ? _targetWidth : (int)(rCamera.pixelWidth * _scale);
int height = customSize ? _targetHeight : (int)(rCamera.pixelHeight * _scale);
_SystemTextureLimit(ref width, ref height);
Vector2 targetSize = new Vector2(width, height);
renderTexture = _CutOutAndCropRenderTexture(renderTexture, new Rect(Mathf.CeilToInt(rCamera.pixelRect.x), rCamera.pixelRect.y, rCamera.pixelRect.width, rCamera.pixelRect.height), targetSize, isFullScreen: false);
}
if (_onCaptureCallback != null)
{
_onCaptureCallback(_RenderTextureToTexture2D(renderTexture));
_onCaptureCallback = null;
#if UNITY_EDITOR
Debug.Log("OnUpdateRender - Texture2D * " + _scale);
#endif
}
else if (_onCaptureCallbackRTex != null)
{
_onCaptureCallbackRTex(renderTexture);
_onCaptureCallbackRTex = null;
#if UNITY_EDITOR
Debug.Log("OnUpdateRender - RenderTexture * " + _scale);
#endif
}
}
}