I am trying to upgrade cmd.blit to Blitter.BlitCameraTexture.
This is the orginal code:
public class ScreenSpaceSSSPass : ScriptableRenderPass
{
private Material material1;
private Material material2;
private ProfilingSampler SSSSSPassProfiler = new ProfilingSampler("SSSSSPass");
private FilteringSettings m_FilteringSettings;
private RenderTargetHandle m_SSSSSTextureHandler;
RenderTargetHandle tempHandler;
private RenderTextureDescriptor RenderTextureDescriptor;
public float SSScale;
public ScreenSpaceSSSPass()
{
m_SSSSSTextureHandler.Init("SSSSSTextureHandler");
tempHandler.Init("_TempSSSSSTexture");
}
public void Setup(Material mat,Material mat2,float scale)
{
material1 = mat;
material2 = mat2;
SSScale = scale;
}
public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
{
cameraTextureDescriptor.depthBufferBits = 0;
// cameraTextureDescriptor.width /= 2;
// cameraTextureDescriptor.height /= 2;
RenderTextureDescriptor = cameraTextureDescriptor;
cameraTextureDescriptor.colorFormat = RenderTextureFormat.RGB111110Float;
cmd.GetTemporaryRT(m_SSSSSTextureHandler.id, RenderTextureDescriptor, FilterMode.Bilinear);
ConfigureTarget(m_SSSSSTextureHandler.Identifier());
ConfigureClear(ClearFlag.All,Color.red);
}
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
{
CommandBuffer cmd = CommandBufferPool.Get();
cmd.GetTemporaryRT(tempHandler.id, RenderTextureDescriptor, FilterMode.Bilinear);
using (new ProfilingScope(cmd, SSSSSPassProfiler))
{
context.ExecuteCommandBuffer(cmd);
cmd.Clear();
cmd.SetGlobalFloat("_SSSScale",SSScale);
cmd.Blit(m_SSSSSTextureHandler.id,tempHandler.id,material1);
cmd.Blit(tempHandler.id,m_SSSSSTextureHandler.id,material2);
cmd.ReleaseTemporaryRT(tempHandler.id);
}
context.ExecuteCommandBuffer(cmd);
CommandBufferPool.Release(cmd);
}
public override void OnCameraCleanup(CommandBuffer cmd)
{
cmd.ReleaseTemporaryRT(m_SSSSSTextureHandler.id);
}
}
The code above works pretty well.
And the new code is:
public class ScreenSpaceSSSPass : ScriptableRenderPass
{
private Material material1;
private Material material2;
private ProfilingSampler SSSSSPassProfiler = new ProfilingSampler("SSSSSPass");
private FilteringSettings m_FilteringSettings;
private RTHandle m_SSSSSTextureHandler;
RTHandle tempHandler;
private RenderTextureDescriptor RenderTextureDescriptor;
public float SSScale;
public ScreenSpaceSSSPass()
{
m_SSSSSTextureHandler = RTHandles.Alloc("SSSSSTextureHandler");
tempHandler = RTHandles.Alloc("_TempSSSSSTexture");
}
public void Setup(Material mat,Material mat2,float scale)
{
material1 = mat;
material2 = mat2;
SSScale = scale;
}
public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
{
cameraTextureDescriptor.depthBufferBits = 0;
// cameraTextureDescriptor.width /= 2;
// cameraTextureDescriptor.height /= 2;
RenderTextureDescriptor = cameraTextureDescriptor;
cameraTextureDescriptor.colorFormat = RenderTextureFormat.RGB111110Float;
RenderingUtils.ReAllocateIfNeeded(ref m_SSSSSTextureHandler, RenderTextureDescriptor, FilterMode.Bilinear, TextureWrapMode.Clamp, name:"SSSSSTextureHandler");
RenderingUtils.ReAllocateIfNeeded(ref tempHandler, RenderTextureDescriptor, FilterMode.Bilinear, TextureWrapMode.Clamp, name: "_TempSSSSSTexture");
ConfigureTarget(m_SSSSSTextureHandler);
ConfigureClear(ClearFlag.All,Color.red);
}
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
{
CommandBuffer cmd = CommandBufferPool.Get();
using (new ProfilingScope(cmd, SSSSSPassProfiler))
{
context.ExecuteCommandBuffer(cmd);
cmd.Clear();
cmd.SetGlobalFloat("_SSSScale",SSScale);
Blitter.BlitCameraTexture(cmd, m_SSSSSTextureHandler, tempHandler, material1, 0);
Blitter.BlitCameraTexture(cmd, tempHandler, m_SSSSSTextureHandler, material2, 0);
}
context.ExecuteCommandBuffer(cmd);
CommandBufferPool.Release(cmd);
}
public override void OnCameraCleanup(CommandBuffer cmd)
{
m_SSSSSTextureHandler.Release();
tempHandler.Release();
}
}
However, it seems the rendertarget is not set correctly.