83 lines
2.1 KiB
C#
Executable File
83 lines
2.1 KiB
C#
Executable File
using OpenTK.Graphics.OpenGL4;
|
|
|
|
namespace Updater
|
|
{
|
|
public class Shader : IDisposable
|
|
{
|
|
public int Handle { get; }
|
|
private readonly int VertexShader;
|
|
private readonly int FragmentShader;
|
|
private bool disposedValue = false;
|
|
|
|
public Shader(string VertexShaderSource, string FragmentShaderSource)
|
|
{
|
|
VertexShader = GL.CreateShader(ShaderType.VertexShader);
|
|
GL.ShaderSource(VertexShader, VertexShaderSource);
|
|
|
|
FragmentShader = GL.CreateShader(ShaderType.FragmentShader);
|
|
GL.ShaderSource(FragmentShader, FragmentShaderSource);
|
|
|
|
GL.CompileShader(VertexShader);
|
|
|
|
string infoLogVert = GL.GetShaderInfoLog(VertexShader);
|
|
if (infoLogVert != string.Empty)
|
|
Console.WriteLine(infoLogVert);
|
|
|
|
GL.CompileShader(FragmentShader);
|
|
|
|
string infoLogFrag = GL.GetShaderInfoLog(FragmentShader);
|
|
|
|
if (infoLogFrag != string.Empty)
|
|
Console.WriteLine(infoLogFrag);
|
|
|
|
Handle = GL.CreateProgram();
|
|
|
|
GL.AttachShader(Handle, VertexShader);
|
|
GL.AttachShader(Handle, FragmentShader);
|
|
|
|
GL.LinkProgram(Handle);
|
|
|
|
GL.DetachShader(Handle, VertexShader);
|
|
GL.DetachShader(Handle, FragmentShader);
|
|
GL.DeleteShader(FragmentShader);
|
|
GL.DeleteShader(VertexShader);
|
|
}
|
|
|
|
public void Use()
|
|
{
|
|
GL.UseProgram(Handle);
|
|
}
|
|
|
|
public int GetAttribLocation(string attribName)
|
|
{
|
|
return GL.GetAttribLocation(Handle, attribName);
|
|
}
|
|
|
|
public Shader Clone()
|
|
{
|
|
return (Shader)MemberwiseClone();
|
|
}
|
|
|
|
protected virtual void Dispose(bool disposing)
|
|
{
|
|
if (!disposedValue)
|
|
{
|
|
GL.DeleteProgram(Handle);
|
|
|
|
disposedValue = true;
|
|
}
|
|
}
|
|
|
|
~Shader()
|
|
{
|
|
GL.DeleteProgram(Handle);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Dispose(true);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
}
|
|
}
|