61 lines
1.4 KiB
C#
61 lines
1.4 KiB
C#
|
|
using System.Diagnostics;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System;
|
|
using Godot;
|
|
|
|
|
|
// https://github.com/jamesdimick/godot-compositor-effect-csharp-test/blob/main/TestCompositorEffect.cs
|
|
// https://github.com/txnsor/godot-datamosher/blob/main/shaders/datamosher.glsl
|
|
// https://github.com/DevPoodle/godot-compositor-outline/blob/main/outline_effect.gd
|
|
|
|
namespace Rokojori
|
|
{
|
|
[Tool]
|
|
[GlobalClass]
|
|
public partial class SilhouetteOutlineCompositer:CompositorEffect
|
|
{
|
|
RenderingDevice renderingDevice;
|
|
Rid frameBuffer;
|
|
|
|
public void _Init()
|
|
{
|
|
EffectCallbackType = EffectCallbackTypeEnum.PostOpaque;
|
|
renderingDevice = RenderingServer.GetRenderingDevice();
|
|
|
|
}
|
|
|
|
public override void _Notification(int what)
|
|
{
|
|
|
|
}
|
|
|
|
public override void _RenderCallback( int effectCallbackType, RenderData renderData )
|
|
{
|
|
if ( renderingDevice == null || effectCallbackType != (int) EffectCallbackTypeEnum.PostOpaque )
|
|
{
|
|
return;
|
|
}
|
|
|
|
var renderBuffers = (RenderSceneBuffersRD) renderData.GetRenderSceneBuffers();
|
|
|
|
if ( renderBuffers == null )
|
|
{
|
|
return;
|
|
}
|
|
|
|
var size = renderBuffers.GetInternalSize();
|
|
|
|
if ( size.X == 0 || size.Y == 0 )
|
|
{
|
|
return;
|
|
}
|
|
|
|
var groups = new Vector3((size.X - 1.0f) / 8.0f + 1.0f, (size.Y - 1.0f) / 8.0f + 1.0f, 1.0f).Floor();
|
|
|
|
|
|
}
|
|
}
|
|
|
|
} |