first
This commit is contained in:
69
Runtime/Engine/Code/Graphics/Pixelize/PixelizePass.cs
Normal file
69
Runtime/Engine/Code/Graphics/Pixelize/PixelizePass.cs
Normal file
@@ -0,0 +1,69 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
|
||||
namespace RebootKit.Engine.Graphics.Pixelize
|
||||
{
|
||||
public class PixelizePass : ScriptableRenderPass
|
||||
{
|
||||
private static int PixelBufferID = Shader.PropertyToID("_PixelBuffer");
|
||||
|
||||
private PixelizeFeature.PassSettings _settings;
|
||||
|
||||
private RenderTargetIdentifier _colorBuffer;
|
||||
private RenderTargetIdentifier _pixelBuffer;
|
||||
|
||||
private Material _material;
|
||||
private int _frameWidth;
|
||||
private int _frameHeight;
|
||||
|
||||
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 System.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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user