2017-04-20 16:49:43 +02:00
|
|
|
|
using System;
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
|
|
|
|
using OpenTK.Graphics.OpenGL;
|
|
|
|
|
|
|
|
|
|
namespace nhengine
|
|
|
|
|
{
|
|
|
|
|
public class ShaderProgram
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
Shader vertexShader;
|
|
|
|
|
Shader fragmentShader;
|
|
|
|
|
|
|
|
|
|
int id;
|
|
|
|
|
|
|
|
|
|
public ShaderProgram(Shader vertexShader, Shader fragmentShader)
|
|
|
|
|
{
|
|
|
|
|
init(vertexShader, fragmentShader);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ShaderProgram(String vertexShader, String fragmentShader)
|
|
|
|
|
{
|
|
|
|
|
init(
|
|
|
|
|
new Shader(ShaderType.VertexShader, vertexShader),
|
|
|
|
|
new Shader(ShaderType.FragmentShader, fragmentShader)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ShaderProgram(Stream vertexShader, Stream fragmentShader)
|
|
|
|
|
{
|
|
|
|
|
init(
|
|
|
|
|
new Shader(ShaderType.VertexShader, new StreamReader(vertexShader).ReadToEnd()),
|
|
|
|
|
new Shader(ShaderType.FragmentShader, new StreamReader(fragmentShader).ReadToEnd())
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void init(Shader vertexShader, Shader fragmentShader){
|
|
|
|
|
this.vertexShader = vertexShader;
|
|
|
|
|
this.fragmentShader = fragmentShader;
|
|
|
|
|
|
|
|
|
|
this.id = GL.CreateProgram();
|
|
|
|
|
|
|
|
|
|
GL.AttachShader(this.id, vertexShader.ID);
|
|
|
|
|
GL.AttachShader(this.id, fragmentShader.ID);
|
2017-04-20 23:46:45 +02:00
|
|
|
|
|
|
|
|
|
GL.BindAttribLocation(this.id, 0, "position");
|
|
|
|
|
GL.BindAttribLocation(this.id, 1, "v_color");
|
|
|
|
|
|
|
|
|
|
|
2017-04-20 16:49:43 +02:00
|
|
|
|
GL.LinkProgram(this.id);
|
|
|
|
|
Console.WriteLine("Shader Program Result: {0}", GL.GetProgramInfoLog(this.id));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int ID
|
|
|
|
|
{
|
|
|
|
|
get { return this.id; }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|