71 lines
1.7 KiB
C#
71 lines
1.7 KiB
C#
![]() |
using Godot;
|
||
|
using System.Reflection;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Linq;
|
||
|
|
||
|
namespace Rokojori
|
||
|
{
|
||
|
[Tool]
|
||
|
[GlobalClass]
|
||
|
public partial class DissolveFading:FadingModifier
|
||
|
{
|
||
|
[Export]
|
||
|
public string UV = "UV";
|
||
|
|
||
|
[Export]
|
||
|
public bool srgb = true;
|
||
|
|
||
|
[Export]
|
||
|
public bool repeat = true;
|
||
|
|
||
|
[Export]
|
||
|
public TextureModule.TextureFilter filter;
|
||
|
|
||
|
[Export]
|
||
|
public TextureModule.TextureDefault textureDefault = TextureModule.TextureDefault.White;
|
||
|
|
||
|
|
||
|
public override List<ShaderCode> GetFadingCode( ShaderGenerationContext context, int offsetIndex, AlphaFadeMode parentFadeMode )
|
||
|
{
|
||
|
var alphaFadeMode = GetFadeMode( parentFadeMode );
|
||
|
var suffix = GetSuffix( offsetIndex );
|
||
|
|
||
|
if ( context.isIncludesPhase )
|
||
|
{
|
||
|
return IncludeMathLibrary();
|
||
|
}
|
||
|
|
||
|
if ( context.isVariablesPhase )
|
||
|
{
|
||
|
var hints = TextureModule.GetTextureHints( srgb, false, repeat, filter, textureDefault );
|
||
|
|
||
|
var code =
|
||
|
$@"
|
||
|
uniform float dissolveState{suffix}:hint_range(0,1) = 1.0f;
|
||
|
uniform sampler2D dissolveTexture{suffix}:{hints.Join()};
|
||
|
";
|
||
|
return ToCode( code.Indent( " " ) );
|
||
|
}
|
||
|
|
||
|
|
||
|
if ( context.isFragmentPhase )
|
||
|
{
|
||
|
var code =
|
||
|
$@"
|
||
|
|
||
|
|
||
|
float sampledDissolveTexture{suffix} = texture( dissolveTexture{suffix}, {UV} ).r;
|
||
|
float dissolveAlpha{suffix} = clamp01( sampledDissolveTexture + ( dissolveState{suffix} * 2.0 - 1.0 ) );
|
||
|
|
||
|
";
|
||
|
|
||
|
|
||
|
return ToCode( code.Indent( " " ) ).Concat( ToCode( AlphaFade.Fragment( "dissolveAlpha" + suffix, alphaFadeMode ) ) );
|
||
|
}
|
||
|
|
||
|
return [];
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|