Browse Source

Added methods for manipulating camera viewport rect

stable
Nico de Poel 3 years ago
parent
commit
18e9781013
  1. 31
      Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/SuperResolution.cs

31
Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/SuperResolution.cs

@ -71,6 +71,8 @@ namespace UnityEngine.Rendering.PostProcessing
} }
public Vector2 jitter { get; private set; } public Vector2 jitter { get; private set; }
public Vector2Int renderSize => _renderSize;
public Vector2Int displaySize => _displaySize;
private Fsr2Context _fsrContext; private Fsr2Context _fsrContext;
private Vector2Int _renderSize; private Vector2Int _renderSize;
@ -83,6 +85,8 @@ namespace UnityEngine.Rendering.PostProcessing
private Fsr2.QualityMode _prevQualityMode; private Fsr2.QualityMode _prevQualityMode;
private Vector2Int _prevDisplaySize; private Vector2Int _prevDisplaySize;
private Rect _originalRect;
public bool IsSupported() public bool IsSupported()
{ {
return SystemInfo.supportsComputeShaders && SystemInfo.supportsMotionVectors; return SystemInfo.supportsComputeShaders && SystemInfo.supportsMotionVectors;
@ -92,6 +96,11 @@ namespace UnityEngine.Rendering.PostProcessing
{ {
return DepthTextureMode.Depth | DepthTextureMode.MotionVectors; return DepthTextureMode.Depth | DepthTextureMode.MotionVectors;
} }
public void Release()
{
DestroyFsrContext();
}
public void ResetHistory() public void ResetHistory()
{ {
@ -103,6 +112,21 @@ namespace UnityEngine.Rendering.PostProcessing
ApplyJitter(context.camera); ApplyJitter(context.camera);
} }
public void ConfigureCameraViewport(PostProcessRenderContext context)
{
var cam = context.camera;
_displaySize = new Vector2Int(cam.pixelWidth, cam.pixelHeight); // TODO: also support render texture targets properly
_originalRect = cam.rect;
cam.aspect = (_displaySize.x * _originalRect.width) / (_displaySize.y * _originalRect.height);
cam.rect = new Rect(0, 0, _originalRect.width * _renderSize.x / cam.pixelWidth, _originalRect.height * _renderSize.y / cam.pixelHeight);
}
public void ResetCameraViewport(PostProcessRenderContext context)
{
context.camera.rect = _originalRect;
}
public void Render(PostProcessRenderContext context) public void Render(PostProcessRenderContext context)
{ {
var cmd = context.command; var cmd = context.command;
@ -143,7 +167,7 @@ namespace UnityEngine.Rendering.PostProcessing
private void CreateFsrContext(PostProcessRenderContext context) private void CreateFsrContext(PostProcessRenderContext context)
{ {
_displaySize = new Vector2Int(context.width, context.height);
_displaySize = new Vector2Int(context.width, context.height); // TODO: get rid of this
_prevDisplaySize = _displaySize; _prevDisplaySize = _displaySize;
@ -234,11 +258,6 @@ namespace UnityEngine.Rendering.PostProcessing
} }
} }
public void Release()
{
DestroyFsrContext();
}
private class Callbacks : Fsr2CallbacksBase private class Callbacks : Fsr2CallbacksBase
{ {
private readonly PostProcessResources _resources; private readonly PostProcessResources _resources;

Loading…
Cancel
Save