#region usings using System; using System.Collections.Generic; using OpenTK.Graphics.OpenGL4; using SM.Base.Objects.Static; using SM.Base.Utility; using SM.OGL.Shaders; #endregion namespace SM.Base.PostProcess { /// /// Specific shader for post processing. /// public class PostProcessShader : GenericShader { private static readonly ShaderFile _fragExtensions = new ShaderFile(AssemblyUtility.ReadAssemblyFile("SM.Base.PostProcess.DefaultFiles.extensions.frag")); private static readonly ShaderFile _normalVertex = new ShaderFile(AssemblyUtility.ReadAssemblyFile("SM.Base.PostProcess.DefaultFiles.vertexFile.vert")); private static readonly string _normalVertexWithExt = AssemblyUtility.ReadAssemblyFile("SM.Base.PostProcess.DefaultFiles.vertexWithExt.vert"); /// /// Creates the shader with the default vertex shader and custom fragment. /// public PostProcessShader(string fragment) : this(_normalVertex, new ShaderFile(fragment)) { } /// /// Creates the shader with an vertex extension and custom fragment. /// /// /// public PostProcessShader(string vertexExt, string fragment) : this(new ShaderFile(_normalVertexWithExt) { GLSLExtensions = new List {new ShaderFile(vertexExt)} }, new ShaderFile(fragment)) { } private PostProcessShader(ShaderFile vertex, ShaderFile fragment) : base( new ShaderFileCollection(vertex, fragment)) { fragment.GLSLExtensions.Add(_fragExtensions); } /// /// Draws the shader with special uniforms. /// /// public void Draw(Action setUniformAction) { Activate(); Plate.Object.Activate(); Uniforms["MVP"].SetMatrix4(PostProcessEffect.Mvp); setUniformAction(Uniforms); GL.DrawArrays(PrimitiveType.Quads, 0, 4); CleanUp(); } } }