69 lines
2.5 KiB
C#
69 lines
2.5 KiB
C#
|
|
// Created by SwanDEV 2017
|
|||
|
|
using UnityEngine;
|
|||
|
|
|
|||
|
|
public class CameraOnRender : CameraRenderBase
|
|||
|
|
{
|
|||
|
|
private void OnRenderImage(RenderTexture source, RenderTexture destination)
|
|||
|
|
{
|
|||
|
|
Graphics.Blit(source, destination);
|
|||
|
|
|
|||
|
|
if (_toDestroyScript) Destroy(this); // remove this script from the camera
|
|||
|
|
if (!_toCapture) return;
|
|||
|
|
_toCapture = false;
|
|||
|
|
|
|||
|
|
RenderTexture renderTexture = null;
|
|||
|
|
Vector2 targetSize;
|
|||
|
|
bool customSize = _targetWidth > 0 && _targetHeight > 0;
|
|||
|
|
if (customSize)
|
|||
|
|
{
|
|||
|
|
_SystemTextureLimit(ref _targetWidth, ref _targetHeight);
|
|||
|
|
|
|||
|
|
float W = Mathf.Max(_targetWidth, _targetHeight);
|
|||
|
|
float H = W;
|
|||
|
|
_CalSizeWithAspectRatio(ref W, ref H, new Vector2(source.width, source.height));
|
|||
|
|
float scale = Mathf.Max(_targetWidth / W, _targetHeight / H);
|
|||
|
|
W = Mathf.Round(W * scale);
|
|||
|
|
H = Mathf.Round(H * scale);
|
|||
|
|
|
|||
|
|
renderTexture = new RenderTexture((int)W, (int)H, 24);
|
|||
|
|
targetSize = new Vector2(_targetWidth, _targetHeight);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int W = (int)(source.width * _scale);
|
|||
|
|
int H = (int)(source.height * _scale);
|
|||
|
|
_SystemTextureLimit(ref W, ref H);
|
|||
|
|
|
|||
|
|
renderTexture = new RenderTexture(W, H, 24);
|
|||
|
|
targetSize = new Vector2(W, H);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (_onCaptureCallback != null)
|
|||
|
|
{
|
|||
|
|
if (source.width != renderTexture.width || source.height != renderTexture.height)
|
|||
|
|
{
|
|||
|
|
Graphics.Blit(source, renderTexture);
|
|||
|
|
_onCaptureCallback(_CutOutAndCropTexture(renderTexture, new Rect(0, 0, renderTexture.width, renderTexture.height), targetSize, isFullScreen: true));
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
_onCaptureCallback(_CutOutAndCropTexture(source, new Rect(0, 0, renderTexture.width, renderTexture.height), targetSize, isFullScreen: true));
|
|||
|
|
}
|
|||
|
|
_onCaptureCallback = null;
|
|||
|
|
if (renderTexture) Destroy(renderTexture);
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
Debug.Log("OnRenderImage - Texture2D * " + _scale);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
else if (_onCaptureCallbackRTex != null)
|
|||
|
|
{
|
|||
|
|
Graphics.Blit(source, renderTexture);
|
|||
|
|
_onCaptureCallbackRTex(_CutOutAndCropRenderTexture(renderTexture, new Rect(0, 0, renderTexture.width, renderTexture.height), targetSize, isFullScreen: true));
|
|||
|
|
_onCaptureCallbackRTex = null;
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
Debug.Log("OnRenderImage - RenderTexture * " + _scale);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|