Refactor PostProcessEffect to support C++ scripting

This commit is contained in:
Wojtek Figat
2022-11-02 20:29:59 +01:00
parent 86b6b20200
commit 6a61b692aa
19 changed files with 253 additions and 483 deletions

View File

@@ -71,13 +71,17 @@ namespace FlaxEditor.Viewport
public SceneRenderTask Task;
/// <inheritdoc />
public override int Order => -10000000;
public EditorSpritesRenderer()
{
Order = -10000000;
UseSingleTarget = true;
}
/// <inheritdoc />
public override bool UseSingleTarget => true;
/// <inheritdoc />
public override bool CanRender => (Task.View.Flags & ViewFlags.EditorSprites) == ViewFlags.EditorSprites && Level.ScenesCount != 0 && base.CanRender;
public override bool CanRender()
{
return (Task.View.Flags & ViewFlags.EditorSprites) == ViewFlags.EditorSprites && Level.ScenesCount != 0 && base.CanRender();
}
/// <inheritdoc />
public override void Render(GPUContext context, ref RenderContext renderContext, GPUTexture input, GPUTexture output)
@@ -202,13 +206,13 @@ namespace FlaxEditor.Viewport
// Create post effects
SelectionOutline = Object.New<SelectionOutline>();
SelectionOutline.SelectionGetter = () => TransformGizmo.SelectedParents;
Task.CustomPostFx.Add(SelectionOutline);
Task.AddCustomPostFx(SelectionOutline);
EditorPrimitives = Object.New<EditorPrimitives>();
EditorPrimitives.Viewport = this;
Task.CustomPostFx.Add(EditorPrimitives);
Task.AddCustomPostFx(EditorPrimitives);
_editorSpritesRenderer = Object.New<EditorSpritesRenderer>();
_editorSpritesRenderer.Task = Task;
Task.CustomPostFx.Add(_editorSpritesRenderer);
Task.AddCustomPostFx(_editorSpritesRenderer);
// Add transformation gizmo
TransformGizmo = new TransformGizmo(this);
@@ -396,16 +400,13 @@ namespace FlaxEditor.Viewport
if (_customSelectionOutline != null)
{
Object.Destroy(ref _customSelectionOutline);
Task.CustomPostFx.Remove(_customSelectionOutline);
Task.CustomPostFx.Add(customSelectionOutline ? customSelectionOutline : SelectionOutline);
Task.RemoveCustomPostFx(_customSelectionOutline);
Task.AddCustomPostFx(customSelectionOutline ? customSelectionOutline : SelectionOutline);
}
else if (customSelectionOutline != null)
{
Task.CustomPostFx.Remove(SelectionOutline);
Task.CustomPostFx.Add(customSelectionOutline);
Task.RemoveCustomPostFx(SelectionOutline);
Task.AddCustomPostFx(customSelectionOutline);
}
_customSelectionOutline = customSelectionOutline;
@@ -509,20 +510,20 @@ namespace FlaxEditor.Viewport
// Render editor primitives, gizmo and debug shapes in debug view modes
// Note: can use Output buffer as both input and output because EditorPrimitives is using a intermediate buffers
if (EditorPrimitives && EditorPrimitives.CanRender)
if (EditorPrimitives && EditorPrimitives.CanRender())
{
EditorPrimitives.Render(context, ref renderContext, task.Output, task.Output);
}
// Render editor sprites
if (_editorSpritesRenderer && _editorSpritesRenderer.CanRender)
if (_editorSpritesRenderer && _editorSpritesRenderer.CanRender())
{
_editorSpritesRenderer.Render(context, ref renderContext, task.Output, task.Output);
}
// Render selection outline
var selectionOutline = _customSelectionOutline ?? SelectionOutline;
if (selectionOutline && selectionOutline.CanRender)
if (selectionOutline && selectionOutline.CanRender())
{
// Use temporary intermediate buffer
var desc = task.Output.Description;

View File

@@ -31,7 +31,11 @@ namespace FlaxEditor.Viewport
{
public PrefabWindowViewport Viewport;
public override bool CanRender => (Task.View.Flags & ViewFlags.EditorSprites) == ViewFlags.EditorSprites && Enabled;
/// <inheritdoc />
public override bool CanRender()
{
return (Task.View.Flags & ViewFlags.EditorSprites) == ViewFlags.EditorSprites && Enabled;
}
protected override void Draw(ref RenderContext renderContext)
{
@@ -91,11 +95,11 @@ namespace FlaxEditor.Viewport
// Create post effects
SelectionOutline = FlaxEngine.Object.New<SelectionOutline>();
SelectionOutline.SelectionGetter = () => TransformGizmo.SelectedParents;
Task.CustomPostFx.Add(SelectionOutline);
Task.AddCustomPostFx(SelectionOutline);
_spritesRenderer = FlaxEngine.Object.New<PrefabSpritesRenderer>();
_spritesRenderer.Task = Task;
_spritesRenderer.Viewport = this;
Task.CustomPostFx.Add(_spritesRenderer);
Task.AddCustomPostFx(_spritesRenderer);
// Add transformation gizmo
TransformGizmo = new TransformGizmo(this);
@@ -270,13 +274,13 @@ namespace FlaxEditor.Viewport
var task = renderContext.Task;
// Render editor sprites
if (_spritesRenderer && _spritesRenderer.CanRender)
if (_spritesRenderer && _spritesRenderer.CanRender())
{
_spritesRenderer.Render(context, ref renderContext, task.Output, task.Output);
}
// Render selection outline
if (SelectionOutline && SelectionOutline.CanRender)
if (SelectionOutline && SelectionOutline.CanRender())
{
// Use temporary intermediate buffer
var desc = task.Output.Description;

View File

@@ -114,7 +114,7 @@ namespace FlaxEditor.Viewport.Previews
{
_editorPrimitives = Object.New<EditorPrimitives>();
_editorPrimitives.Viewport = this;
Task.CustomPostFx.Add(_editorPrimitives);
Task.AddCustomPostFx(_editorPrimitives);
Task.PostRender += OnPostRender;
var view = Task.View;
view.Flags |= ViewFlags.CustomPostProcess;
@@ -203,7 +203,7 @@ namespace FlaxEditor.Viewport.Previews
private void OnPostRender(GPUContext context, ref RenderContext renderContext)
{
if (renderContext.View.Mode != ViewMode.Default && _editorPrimitives && _editorPrimitives.CanRender)
if (renderContext.View.Mode != ViewMode.Default && _editorPrimitives && _editorPrimitives.CanRender())
{
// Render editor primitives, gizmo and debug shapes in debug view modes
// Note: can use Output buffer as both input and output because EditorPrimitives is using a intermediate buffers