Initial commit
This commit is contained in:
75
C#/OpenTKTutorial/Shader.cs
Normal file
75
C#/OpenTKTutorial/Shader.cs
Normal file
@@ -0,0 +1,75 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using GL = OpenTK.Graphics.ES30.GL;
|
||||
using ShaderType = OpenTK.Graphics.ES30.ShaderType;
|
||||
|
||||
namespace OpenTKTutorial {
|
||||
public class Shader : IDisposable {
|
||||
public int Handle;
|
||||
|
||||
public Shader(string vertexPath, string fragmentPath) {
|
||||
string vertex, fragment;
|
||||
|
||||
using (StreamReader reader = new StreamReader(vertexPath, Encoding.UTF8)) vertex = reader.ReadToEnd();
|
||||
using (StreamReader reader = new StreamReader(fragmentPath, Encoding.UTF8)) fragment = reader.ReadToEnd();
|
||||
|
||||
int vertexShader = GL.CreateShader(ShaderType.VertexShader);
|
||||
GL.ShaderSource(vertexShader, vertex);
|
||||
|
||||
int fragmentShader = GL.CreateShader(ShaderType.FragmentShader);
|
||||
GL.ShaderSource(fragmentShader, fragment);
|
||||
|
||||
GL.CompileShader(vertexShader);
|
||||
|
||||
string infoLogVert = GL.GetShaderInfoLog(vertexShader);
|
||||
if (infoLogVert != String.Empty)
|
||||
throw new Exception("Could not compile vertex shader: " + infoLogVert);
|
||||
|
||||
GL.CompileShader(fragmentShader);
|
||||
|
||||
string infoLogFrag = GL.GetShaderInfoLog(fragmentShader);
|
||||
if (infoLogFrag != String.Empty)
|
||||
throw new Exception("Could not compile fragment shader: " + 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);
|
||||
}
|
||||
|
||||
private bool disposedValue = false;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user