diff --git a/Source/Engine/Graphics/RenderTask.cpp b/Source/Engine/Graphics/RenderTask.cpp
index e3e261c96..d30e8e37c 100644
--- a/Source/Engine/Graphics/RenderTask.cpp
+++ b/Source/Engine/Graphics/RenderTask.cpp
@@ -260,6 +260,11 @@ void SceneRenderTask::OnCollectDrawCalls(RenderContext& renderContext)
CollectDrawCalls(renderContext);
}
+void SceneRenderTask::OnPreRender(GPUContext* context, RenderContext& renderContext)
+{
+ PreRender(context, renderContext);
+}
+
void SceneRenderTask::OnPostRender(GPUContext* context, RenderContext& renderContext)
{
PostRender(context, renderContext);
diff --git a/Source/Engine/Graphics/RenderTask.h b/Source/Engine/Graphics/RenderTask.h
index b00d80a5f..265905e2a 100644
--- a/Source/Engine/Graphics/RenderTask.h
+++ b/Source/Engine/Graphics/RenderTask.h
@@ -313,6 +313,18 @@ public:
/// The rendering context.
virtual void OnCollectDrawCalls(RenderContext& renderContext);
+ ///
+ /// The action called after scene rendering. Can be used to perform custom pre-rendering or to modify the render view.
+ ///
+ API_EVENT() Delegate PreRender;
+
+ ///
+ /// Called before scene rendering. Can be used to perform custom pre-rendering or to modify the render view.
+ ///
+ /// The GPU commands context.
+ /// The rendering context.
+ virtual void OnPreRender(GPUContext* context, RenderContext& renderContext);
+
///
/// The action called after scene rendering. Can be used to render additional visual elements to the output.
///
diff --git a/Source/Engine/Renderer/Renderer.cpp b/Source/Engine/Renderer/Renderer.cpp
index c2a18f519..4d3241375 100644
--- a/Source/Engine/Renderer/Renderer.cpp
+++ b/Source/Engine/Renderer/Renderer.cpp
@@ -199,9 +199,8 @@ void Renderer::Render(SceneRenderTask* task)
#endif
// Perform the actual rendering
+ task->OnPreRender(context, renderContext);
RenderInner(task, renderContext);
-
- // Custom additional rendering
task->OnPostRender(context, renderContext);
#if USE_EDITOR
@@ -306,7 +305,6 @@ void RenderInner(SceneRenderTask* task, RenderContext& renderContext)
#endif
renderContext.List->Settings.AntiAliasing.Mode = aaMode;
-
// Prepare
renderContext.View.Prepare(renderContext);
renderContext.Buffers->Prepare();