Files
RebootKit/Runtime/Engine/Code/Graphics/Pixelize/PixelizePass.cs
2025-03-30 16:06:57 +02:00

60 lines
2.4 KiB
C#

using System;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
namespace RebootKit.Engine.Graphics.Pixelize {
public class PixelizePass : ScriptableRenderPass {
static readonly int PixelBufferID = Shader.PropertyToID("_PixelBuffer");
RenderTargetIdentifier _colorBuffer;
int _frameHeight;
int _frameWidth;
readonly Material _material;
RenderTargetIdentifier _pixelBuffer;
readonly PixelizeFeature.PassSettings _settings;
public PixelizePass(PixelizeFeature.PassSettings settings) {
_settings = settings;
renderPassEvent = settings.RenderPassEvent;
_material = CoreUtils.CreateEngineMaterial("Hidden/Szafa/Pixelize");
}
public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData) {
_colorBuffer = renderingData.cameraData.renderer.cameraColorTargetHandle;
RenderTextureDescriptor descriptor = renderingData.cameraData.cameraTargetDescriptor;
_frameHeight = _settings.FrameHeight;
_frameWidth = (int) (_frameHeight * renderingData.cameraData.camera.aspect + 0.5f);
_material.SetVector("_BlockCount", new Vector2(_frameWidth, _frameHeight));
_material.SetVector("_BlockSize", new Vector2(1.0f / _frameWidth, 1.0f / _frameHeight));
_material.SetVector("_HalfBlockSize", new Vector2(0.5f / _frameWidth, 0.5f / _frameHeight));
descriptor.height = _frameWidth;
descriptor.width = _frameWidth;
cmd.GetTemporaryRT(PixelBufferID, descriptor, FilterMode.Point);
_pixelBuffer = new RenderTargetIdentifier(PixelBufferID);
}
public override void OnCameraCleanup(CommandBuffer cmd) {
if (cmd == null) throw new ArgumentNullException(nameof(cmd));
cmd.ReleaseTemporaryRT(PixelBufferID);
}
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) {
CommandBuffer cmd = CommandBufferPool.Get();
using (new ProfilingScope(cmd, new ProfilingSampler("Pixelize Pass"))) {
// Blit(cmd, _colorBuffer, _pixelBuffer, _material);
// Blit(cmd, _pixelBuffer, _colorBuffer);
}
context.ExecuteCommandBuffer(cmd);
CommandBufferPool.Release(cmd);
}
}
}