Just discovered that it’s impossible to enque/inject a pass in a ScriptableRenderer without using RenderFeatures. Which is really sad, because:
a) The pass I want to inject is for preview purposes, editor only
b) I’m using 2D renderer that doesn’t support renderer features
I’d love a static callback, much like RenderPipelineManager.beginCameraRendering, as something like: RenderPipelineManager.beginRender which is called within ScriptableRenderer.Execute.
Basically I want to do something like this:
[ExecuteAlways]
class MyBehaviour : MonoBehaviour {
[NonSerialized] private CustomPass myPass = new CustomPass();
void OnEnable() {
RenderPipelineManager.beginRender += OnBeginRender;
}
void OnDisable() {
RenderPipelineManager.beginRender -= OnBeginRender;
}
private void OnBeginRender(ScriptableRenderer renderer) {
myPass.behaviour = this;
renderer.EnqueuePass(myPass);
}
private class CustomPass : ScriptableRenderPass {
public MyBehaviour behaviour;
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) {
//do something
}
}
}
It’s extremely frustrating and limiting that we can only inject passes uses RenderFeatures which requires adding objects in the Editor. And only in the forward renderer, 2D renderer still has no support.
I just want to be able to do it all programmatically