113 lines
2.3 KiB
C#
113 lines
2.3 KiB
C#
using Godot;
|
|
using System.Reflection;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Rokojori
|
|
{
|
|
[Tool]
|
|
[GlobalClass]
|
|
public partial class SpatialShaderGenerator:ShaderGenerator
|
|
{
|
|
[Export]
|
|
public TransparencyModule transparency = new TransparencyModule();
|
|
|
|
[Export]
|
|
public ShadingModule shading = new ShadingModule();
|
|
|
|
[Export]
|
|
public VertexModule vertex = new VertexModule();
|
|
|
|
[Export]
|
|
public UVModule uv = new UVModule();
|
|
|
|
[Export]
|
|
public AlbedoModule albedo = new AlbedoModule();
|
|
|
|
|
|
public override List<ShaderPhase> GetPhases()
|
|
{
|
|
return new List<ShaderPhase>()
|
|
{
|
|
ShaderPhase.Header,
|
|
ShaderPhase.RenderMode,
|
|
ShaderPhase.Includes,
|
|
ShaderPhase.Variables,
|
|
ShaderPhase.Functions,
|
|
ShaderPhase.Vertex,
|
|
ShaderPhase.Fragment,
|
|
ShaderPhase.Light
|
|
};
|
|
}
|
|
|
|
public override List<ShaderGenerationModule> GetShaderGenerationModules( ShaderPhase phase )
|
|
{
|
|
if ( ShaderPhase.Header == phase )
|
|
{
|
|
return
|
|
[
|
|
new ShaderRawModule( "\n\nshader_type spatial;\n" )
|
|
];
|
|
}
|
|
|
|
if ( ShaderPhase.RenderMode == phase )
|
|
{
|
|
return
|
|
[
|
|
new ShaderRawModule( "render_mode " ),
|
|
transparency,
|
|
new ShaderRawModule( ", " ),
|
|
shading,
|
|
new ShaderRawModule( ";\n\n" ),
|
|
];
|
|
}
|
|
|
|
if ( ShaderPhase.Includes == phase || ShaderPhase.Variables == phase || ShaderPhase.Functions == phase )
|
|
{
|
|
return
|
|
[
|
|
transparency,
|
|
shading,
|
|
vertex,
|
|
uv,
|
|
albedo
|
|
];
|
|
}
|
|
|
|
if ( ShaderPhase.Vertex == phase )
|
|
{
|
|
return new List<ShaderGenerationModule>()
|
|
{
|
|
new ShaderRawModule( "\nvoid vertex()\n{\n\n" )
|
|
}
|
|
.Concat
|
|
(
|
|
uv, vertex, albedo
|
|
)
|
|
.Concat
|
|
(
|
|
new ShaderRawModule( "\n}\n" )
|
|
);
|
|
}
|
|
|
|
if ( ShaderPhase.Fragment == phase )
|
|
{
|
|
return new List<ShaderGenerationModule>()
|
|
{
|
|
new ShaderRawModule( "\nvoid fragment()\n{\n\n" )
|
|
}
|
|
.Concat
|
|
(
|
|
uv, vertex, albedo
|
|
)
|
|
.Concat
|
|
(
|
|
new ShaderRawModule( "\n}\n" )
|
|
);
|
|
}
|
|
|
|
|
|
return null;
|
|
|
|
}
|
|
}
|
|
} |