smrendererv3/SMCode/SM2D/Light/LightPostEffect.cs
2020-12-14 15:52:14 +01:00

38 lines
No EOL
1.2 KiB
C#

using System.Reflection;
using SM.Base.PostProcess;
using SM.Base.Scene;
using SM.OGL.Framebuffer;
using SM.OGL.Shaders;
using SM.Utility;
namespace SM2D.Light
{
public class LightPostEffect : PostProcessEffect
{
private PostProcessShader _shader = new PostProcessShader(AssemblyUtility.ReadAssemblyFile("SM2D.Light.light.frag"));
private LightSceneExtension sceneExtension;
public override void Draw(Framebuffer main)
{
base.Draw(main);
_shader.Draw(main.ColorAttachments["color"], collection =>
{
collection["Ambient"].SetUniform4(sceneExtension.Ambient);
collection["LightCount"].SetUniform1(sceneExtension.Lights.Count);
UniformArray array = collection.GetArray("Lights");
for (int i = 0; i < sceneExtension.Lights.Count; i++)
{
sceneExtension.Lights[i].SetUniforms(array[i]);
}
});
}
public override void SceneChanged(GenericScene scene)
{
base.SceneChanged(scene);
sceneExtension = scene.GetExtension<LightSceneExtension>();
}
}
}