82 lines
1.8 KiB
C#
82 lines
1.8 KiB
C#
|
|
using Godot;
|
|
using Godot.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Rokojori
|
|
{
|
|
[Tool]
|
|
[GlobalClass]
|
|
public partial class TemporalSmearEffect:SingleShaderCompositorEffect
|
|
{
|
|
public static readonly string shaderPath =
|
|
RokojoriPlugin.Path( "Runtime/Rendering/CompositorEffects/TemporalSmear/TemporalSmear.glsl" );
|
|
|
|
[Export( PropertyHint.Range, "0,1")]
|
|
public float amount = 1f;
|
|
|
|
[Export( PropertyHint.Range, "0,1")]
|
|
public float smearing = 0.5f;
|
|
|
|
[Export( PropertyHint.Range, "0,1")]
|
|
public float lumaAmount = 0.5f;
|
|
|
|
[Export( PropertyHint.Range, "0,1")]
|
|
public float lumaTreshold = 0.5f;
|
|
|
|
[Export( PropertyHint.Range, "0.5,5")]
|
|
public float lumaSaturate = 1.3f;
|
|
|
|
[Export( PropertyHint.Range, "0,1")]
|
|
public float blur = 0.5f;
|
|
|
|
[Export( PropertyHint.Range, "1,30")]
|
|
public float blurRange = 2f;
|
|
|
|
protected override void OnConfigure()
|
|
{
|
|
EffectCallbackType = EffectCallbackTypeEnum.PostTransparent;
|
|
_shaderPath = shaderPath;
|
|
_groupSize = 8;
|
|
}
|
|
|
|
|
|
protected override void SetConstants()
|
|
{
|
|
constants.Set(
|
|
amount,
|
|
smearing,
|
|
lumaAmount,
|
|
lumaTreshold,
|
|
lumaSaturate,
|
|
blur,
|
|
blurRange
|
|
);
|
|
}
|
|
|
|
RDTexture _bufferTexture;
|
|
|
|
protected override void RenderView()
|
|
{
|
|
if ( _bufferTexture == null || _bufferTexture.size != context.internalSize )
|
|
{
|
|
if ( _bufferTexture != null )
|
|
{
|
|
rd.FreeRid( _bufferTexture.rid );
|
|
_bufferTexture = null;
|
|
}
|
|
|
|
_bufferTexture = RDTexture.Create( this, context.internalSize );
|
|
}
|
|
|
|
context.AssignUniformSet_Texture( _bufferTexture );
|
|
context.Assign_ScreenColorTexture();
|
|
|
|
|
|
context.pushConstants = constants;
|
|
|
|
context.Render();
|
|
|
|
}
|
|
}
|
|
} |